summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MAINTAINERS11
-rw-r--r--classes/autotools.bbclass10
-rw-r--r--classes/base.bbclass1066
-rw-r--r--classes/cmake.bbclass1
-rw-r--r--classes/cpan-base.bbclass13
-rw-r--r--classes/cpan.bbclass35
-rw-r--r--classes/cpan_build.bbclass27
-rw-r--r--classes/cross.bbclass5
-rw-r--r--classes/e.bbclass8
-rw-r--r--classes/efl.bbclass2
-rw-r--r--classes/glibc-package.bbclass20
-rw-r--r--classes/icecc.bbclass2
-rw-r--r--classes/image.bbclass1
-rw-r--r--classes/insane.bbclass2
-rw-r--r--classes/kernel.bbclass17
-rw-r--r--classes/metadata_scm.bbclass76
-rw-r--r--classes/mirrors.bbclass61
-rw-r--r--classes/mozilla.bbclass26
-rw-r--r--classes/nativesdk.bbclass8
-rw-r--r--classes/package_ipk.bbclass5
-rw-r--r--classes/packaged-staging.bbclass13
-rw-r--r--classes/qemu.bbclass15
-rw-r--r--classes/rm_work.bbclass2
-rw-r--r--classes/rootfs_ipk.bbclass9
-rw-r--r--classes/sanity.bbclass30
-rw-r--r--classes/siteinfo.bbclass10
-rw-r--r--classes/sourcepkg.bbclass22
-rw-r--r--classes/src_distribute.bbclass52
-rw-r--r--classes/src_distribute_local.bbclass13
-rw-r--r--classes/staging.bbclass177
-rw-r--r--classes/testlab.bbclass13
-rw-r--r--classes/utility-tasks.bbclass133
-rw-r--r--classes/utils.bbclass517
-rw-r--r--classes/vala.bbclass6
-rw-r--r--classes/xilinx-bsp.bbclass52
-rw-r--r--conf/bitbake.conf21
-rw-r--r--conf/checksums.ini2210
-rw-r--r--conf/collections.inc6
-rw-r--r--conf/compatibility-providers.conf5
-rw-r--r--conf/distro/angstrom-2008.1.conf7
-rw-r--r--conf/distro/include/angstrom-2008-preferred-versions.inc24
-rw-r--r--conf/distro/include/fso-autorev.inc11
-rw-r--r--conf/distro/include/glibc-external.inc2
-rw-r--r--conf/distro/include/glibc-internal.inc2
-rw-r--r--conf/distro/include/glibc.inc2
-rw-r--r--conf/distro/include/kaeilos-2009-preferred-versions.inc37
-rw-r--r--conf/distro/include/kaeilos.inc4
-rw-r--r--conf/distro/include/preferred-om-2008-versions.inc1
-rw-r--r--conf/distro/include/preferred-shr-versions.inc17
-rw-r--r--conf/distro/include/preferred-slugos-versions.inc11
-rw-r--r--conf/distro/include/preferred-xorg-versions-live.inc36
-rw-r--r--conf/distro/include/sane-srcrevs-fso.inc44
-rw-r--r--conf/distro/include/sane-srcrevs.inc158
-rw-r--r--conf/distro/include/sane-toolchain-eglibc.inc8
-rw-r--r--conf/distro/include/shr-autorev.inc8
-rw-r--r--conf/distro/include/slugos.inc2
-rw-r--r--conf/distro/kaeilos.conf1
-rw-r--r--conf/distro/maemo5-compat.conf220
-rw-r--r--conf/distro/shr.conf18
-rw-r--r--conf/distro/slugos.conf1
-rw-r--r--conf/local.conf.sample6
-rw-r--r--conf/machine/archos5.conf4
-rw-r--r--conf/machine/archos5it.conf41
-rw-r--r--conf/machine/bug.conf5
-rw-r--r--conf/machine/bug20.conf47
-rw-r--r--conf/machine/ea3250.conf27
-rw-r--r--conf/machine/eee701.conf15
-rw-r--r--conf/machine/hawkboard.conf15
-rw-r--r--conf/machine/imote2.conf15
-rw-r--r--conf/machine/include/davinci.inc2
-rw-r--r--conf/machine/include/initramfs-kexecboot.inc19
-rw-r--r--conf/machine/include/kirkwood.inc2
-rw-r--r--conf/machine/include/tune-ppc440.inc2
-rw-r--r--conf/machine/include/tune-ppce600.inc4
-rw-r--r--conf/machine/include/zaurus-kernel.inc7
-rw-r--r--conf/machine/mh355.conf24
-rw-r--r--conf/machine/mpc8641-hpcn.conf26
-rw-r--r--conf/machine/nokia900.conf8
-rw-r--r--conf/machine/om-gta01.conf16
-rw-r--r--conf/machine/om-gta02.conf6
-rw-r--r--conf/machine/omapzoom.conf5
-rw-r--r--conf/machine/omapzoom2.conf3
-rw-r--r--conf/machine/omapzoom36x.conf38
-rw-r--r--conf/machine/p2020ds.conf23
-rw-r--r--conf/machine/xilinx-ml507.conf38
-rwxr-xr-xcontrib/angstrom/omap3-mkcard.sh4
-rwxr-xr-xcontrib/angstrom/sort.sh10
-rw-r--r--contrib/feed-browser/includes/config.inc8
-rw-r--r--contrib/hrw/check-kernel-updates.sh9
-rw-r--r--contrib/oeaudit/freebsd.py194
-rw-r--r--contrib/oeaudit/oe.py28
-rwxr-xr-xcontrib/oeaudit/oe_audit.py96
-rwxr-xr-xcontrib/weekly-changelog-report.py15
-rwxr-xr-xcontrib/weekly-changelog-report.sh21
-rw-r--r--docs/usermanual/chapters/recipes.xml2
-rw-r--r--docs/usermanual/reference/class_pkgconfig.xml4
-rw-r--r--docs/usermanual/reference/var_src_uri.xml7
-rw-r--r--files/device_table_add-xsa.txt5
-rw-r--r--recipes/abiword/abiword-2.5.inc2
-rw-r--r--recipes/abiword/abiword_2.8.1.bb2
-rw-r--r--recipes/aceofpenguins/aceofpenguins_1.2.bb11
-rw-r--r--recipes/aceofpenguins/files/fix-crosscompile.patch13
-rw-r--r--recipes/alsa/alsa-lib_1.0.11.bb2
-rw-r--r--recipes/alsa/alsa-lib_1.0.13.bb2
-rw-r--r--recipes/alsa/alsa-lib_1.0.14.bb2
-rw-r--r--recipes/alsa/alsa-lib_1.0.15.bb2
-rw-r--r--recipes/alsa/alsa-lib_1.0.17.bb2
-rw-r--r--recipes/alsa/alsa-lib_1.0.18.bb2
-rw-r--r--recipes/alsa/alsa-lib_1.0.19.bb2
-rw-r--r--recipes/alsa/alsa-lib_1.0.20.bb2
-rw-r--r--recipes/alsa/alsa-state.bb2
-rw-r--r--recipes/alsa/alsa-state/at91sam9260ek/asound.conf2
-rw-r--r--recipes/alsa/alsa-state/at91sam9260ek/asound.state108
-rw-r--r--recipes/alsa/alsa-state/at91sam9261ek/asound.conf2
-rw-r--r--recipes/alsa/alsa-state/at91sam9261ek/asound.state108
-rw-r--r--recipes/alsa/alsa-state/at91sam9263ek/asound.state283
-rw-r--r--recipes/alsa/alsa-state/at91sam9g10ek/asound.conf2
-rw-r--r--recipes/alsa/alsa-state/at91sam9g10ek/asound.state108
-rw-r--r--recipes/alsa/alsa-state/at91sam9g20ek/asound.conf2
-rw-r--r--recipes/alsa/alsa-state/at91sam9g20ek/asound.state133
-rw-r--r--recipes/alsa/alsa-state/at91sam9g20ek_2mmc/asound.conf2
-rw-r--r--recipes/alsa/alsa-state/at91sam9g20ek_2mmc/asound.state133
-rw-r--r--recipes/alsa/alsa-state/at91sam9g45ek/asound.conf2
-rw-r--r--recipes/alsa/alsa-state/at91sam9g45ek/asound.state283
-rw-r--r--recipes/alsa/alsa-state/at91sam9g45ekes/asound.conf2
-rw-r--r--recipes/alsa/alsa-state/at91sam9g45ekes/asound.state566
-rw-r--r--recipes/alsa/alsa-state/at91sam9m10ekes/asound.conf2
-rw-r--r--recipes/alsa/alsa-state/at91sam9m10ekes/asound.state566
-rw-r--r--recipes/alsa/alsa-state/at91sam9m10g45ek/asound.conf2
-rw-r--r--recipes/alsa/alsa-state/at91sam9m10g45ek/asound.state566
-rw-r--r--recipes/alsa/alsa-state/at91sam9rlek/asound.conf2
-rw-r--r--recipes/alsa/alsa-state/at91sam9rlek/asound.state566
-rw-r--r--recipes/alsa/alsa-state/omapzoom2/asound.state722
-rw-r--r--recipes/alsa/alsa-utils_1.0.11.bb2
-rw-r--r--recipes/alsa/alsa-utils_1.0.13.bb2
-rw-r--r--recipes/alsa/alsa-utils_1.0.14.bb2
-rw-r--r--recipes/alsa/alsa-utils_1.0.15.bb2
-rw-r--r--recipes/alsa/alsa-utils_1.0.17.bb2
-rw-r--r--recipes/alsa/alsa-utils_1.0.18.bb2
-rw-r--r--recipes/alsa/alsa-utils_1.0.19.bb2
-rw-r--r--recipes/alsa/alsa-utils_1.0.20.bb2
-rw-r--r--recipes/altboot/README.txt4
-rw-r--r--recipes/altboot/altboot.inc19
-rw-r--r--recipes/altboot/altboot_1.0.8+1.0.9_pre1.bb76
-rw-r--r--recipes/altboot/altboot_1.0.8.bb49
-rw-r--r--recipes/altboot/altboot_1.1.1+wip-SVNR83.bb76
-rw-r--r--recipes/altboot/altboot_svn.bb75
-rw-r--r--recipes/altboot/files/sd-dynamic-fix.patch44
-rw-r--r--recipes/android/android-image-utils-native_git.bb19
-rw-r--r--recipes/angstrom/angstrom-led-config.bb2
-rw-r--r--recipes/angstrom/angstrom-led-config/ts72xx/leds3
-rw-r--r--recipes/angstrom/angstrom-uboot-scripts/720p.cmd4
-rw-r--r--recipes/angstrom/angstrom-uboot-scripts/720p16-dsplink.cmd4
-rw-r--r--recipes/angstrom/angstrom-uboot-scripts/720p16bpp.cmd4
-rw-r--r--recipes/angstrom/angstrom-uboot-scripts/default-env.cmd19
-rw-r--r--recipes/angstrom/angstrom-uboot-scripts/palo43-dsplink.cmd4
-rw-r--r--recipes/angstrom/angstrom-uboot-scripts/pico-dsplink.cmd3
-rw-r--r--recipes/angstrom/angstrom-uboot-scripts/touchbook-512MB.cmd4
-rw-r--r--recipes/angstrom/omap3-mkcard.bb11
l---------recipes/angstrom/omap3-mkcard/omap3-mkcard.sh1
-rw-r--r--recipes/apex/apex-env_1.5.14.bb6
-rw-r--r--recipes/apex/apex-nslu2-16mb_1.5.14.bb14
-rw-r--r--recipes/apex/apex-nslu2_1.5.14.bb14
-rw-r--r--recipes/apr/apr_1.3.5.bb35
-rw-r--r--recipes/arm-kernel-shim/arm-kernel-shim_1.5.bb2
-rw-r--r--recipes/at91bootstrap/at91bootstrap-2.13/at91cap9adk/defconfig110
-rw-r--r--recipes/at91bootstrap/at91bootstrap-2.13/at91sam9260ek/defconfig110
-rw-r--r--recipes/at91bootstrap/at91bootstrap-2.13/at91sam9261ek/defconfig110
-rw-r--r--recipes/at91bootstrap/at91bootstrap-2.13/at91sam9263ek/defconfig113
-rw-r--r--recipes/at91bootstrap/at91bootstrap-2.13/at91sam9g20ek/defconfig110
-rw-r--r--recipes/at91bootstrap/at91bootstrap-2.13/at91sam9g45ek/defconfig110
-rw-r--r--recipes/at91bootstrap/at91bootstrap-2.13/at91sam9rlek/defconfig110
-rw-r--r--recipes/at91bootstrap/at91bootstrap-2.13/at91sam9xeek/defconfig110
-rw-r--r--recipes/at91bootstrap/at91bootstrap_2.0.inc33
-rw-r--r--recipes/at91bootstrap/at91bootstrap_2.13.bb4
-rw-r--r--recipes/autoconf/autoconf-2.65/autoconf-x.patch36
-rw-r--r--recipes/autoconf/autoconf-2.65/autoconf259-update-configscripts.patch393
-rw-r--r--recipes/autoconf/autoconf-2.65/autoheader-nonfatal-warnings.patch13
-rw-r--r--recipes/autoconf/autoconf-2.65/autoreconf-exclude.patch123
-rw-r--r--recipes/autoconf/autoconf-2.65/autoreconf-foreign.patch11
-rw-r--r--recipes/autoconf/autoconf-2.65/autoreconf-gnuconfigize.patch30
-rw-r--r--recipes/autoconf/autoconf-2.65/config-site.patch11
-rw-r--r--recipes/autoconf/autoconf-2.65/fix_path_xtra.patch119
-rw-r--r--recipes/autoconf/autoconf-2.65/program_prefix.patch19
-rw-r--r--recipes/autoconf/autoconf-2.65/sizeof_types.patch87
-rw-r--r--recipes/autoconf/autoconf-native_2.59.bb11
-rw-r--r--recipes/autoconf/autoconf-native_2.61.bb12
-rw-r--r--recipes/autoconf/autoconf-native_2.63.bb12
-rw-r--r--recipes/autoconf/autoconf.inc10
-rw-r--r--recipes/autoconf/autoconf_2.61.bb4
-rw-r--r--recipes/autoconf/autoconf_2.63.bb4
-rw-r--r--recipes/autoconf/autoconf_2.65.bb17
-rw-r--r--recipes/automake/automake-native.inc11
-rw-r--r--recipes/automake/automake-native_1.10.2.bb3
-rw-r--r--recipes/automake/automake-native_1.11.1.bb5
-rw-r--r--recipes/automake/automake-native_1.9.6.bb3
-rw-r--r--recipes/automake/automake.inc8
-rw-r--r--recipes/automake/automake_1.10.3.bb6
-rw-r--r--recipes/barnyard/barnyard_0.2.0.bb21
-rw-r--r--recipes/base-files/base-files/kaeilos/issue2
-rw-r--r--recipes/base-files/base-files/kaeilos/issue.net2
-rw-r--r--recipes/base-passwd/base-passwd_3.5.20.bb2
-rw-r--r--recipes/binutils/binutils-2.20.1/110-arm-eabi-conf.patch22
-rw-r--r--recipes/binutils/binutils-2.20.1/binutils-2.16.1-e300c2c3.patch18
-rw-r--r--recipes/binutils/binutils-2.20.1/binutils-uclibc-100-uclibc-conf.patch34
-rw-r--r--recipes/binutils/binutils-2.20.1/binutils-uclibc-300-001_ld_makefile_patch.patch50
-rw-r--r--recipes/binutils/binutils-2.20.1/binutils-uclibc-300-006_better_file_error.patch43
-rw-r--r--recipes/binutils/binutils-2.20.1/binutils-uclibc-300-012_check_ldrunpath_length.patch47
-rw-r--r--recipes/binutils/binutils-2.20.1/binutils-uclibc-gas-needs-libm.patch38
-rw-r--r--recipes/binutils/binutils-2.20.1/binutils-x86_64_i386_biarch.patch26
-rw-r--r--recipes/binutils/binutils-2.20/binutils-x86_64_i386_biarch.patch2
-rw-r--r--recipes/binutils/binutils-cross_2.20.1.bb4
-rw-r--r--recipes/binutils/binutils_2.20.1.bb23
-rw-r--r--recipes/bison/bison-native_2.0.bb21
-rw-r--r--recipes/bison/bison-native_2.3.bb22
-rw-r--r--recipes/bison/bison.inc16
-rw-r--r--recipes/bison/bison_2.0.bb11
-rw-r--r--recipes/bison/bison_2.3.bb14
-rw-r--r--recipes/bogofilter/bogofilter-0.96.6/configure.ac.patch (renamed from recipes/bogofilter/bogofilter-0.96.0/configure.ac.patch)0
-rw-r--r--recipes/bogofilter/bogofilter_0.96.0.bb38
-rw-r--r--recipes/bogofilter/bogofilter_0.96.6.bb40
-rw-r--r--recipes/boost/boost_1.34.1.bb2
-rw-r--r--recipes/boost/boost_1.37.0.bb20
-rw-r--r--recipes/busybox/busybox-1.15.3/0000-wget-no-check-certificate.patch12
-rw-r--r--recipes/busybox/busybox.inc28
-rw-r--r--recipes/busybox/busybox_1.11.3.bb4
-rw-r--r--recipes/busybox/busybox_1.13.2.bb4
-rw-r--r--recipes/busybox/busybox_1.14.3.bb6
-rw-r--r--recipes/busybox/busybox_1.15.3.bb5
-rw-r--r--recipes/busybox/busybox_1.2.1.bb7
-rw-r--r--recipes/busybox/busybox_1.2.2.bb7
-rw-r--r--recipes/busybox/busybox_1.3.1.bb6
-rw-r--r--recipes/busybox/busybox_1.7.2.bb4
-rw-r--r--recipes/busybox/busybox_1.9.2.bb4
-rw-r--r--recipes/busybox/files/hipox/hwclock.sh63
-rw-r--r--recipes/busybox/files/hipox/syslog.conf9
-rw-r--r--recipes/busybox/files/hwclock.sh10
-rw-r--r--recipes/ca-certificates/ca-certificates_20090814.bb40
-rw-r--r--recipes/ca-certificates/files/remove-c-rehash.patch29
-rw-r--r--recipes/cairo/cairo_1.8.10.bb9
-rw-r--r--recipes/cdparanoia/cdparanoia_svn.bb19
-rw-r--r--recipes/cdrtools/cdrtools-native_2.01.01_alpha77.bb26
-rw-r--r--recipes/cdrtools/cdrtools-native_2.01.bb24
-rw-r--r--recipes/chicken/chicken-cross_4.4.0.bb26
-rw-r--r--recipes/chicken/chicken_4.4.0.bb26
-rw-r--r--recipes/clutter/clutter-gst-0.9_git.bb2
-rw-r--r--recipes/connman/mokonnect_svn.bb5
-rw-r--r--recipes/cpufreqd/cpufrequtils/fix-proc-stat-reading.patch59
-rw-r--r--recipes/cpufreqd/cpufrequtils_006.bb6
-rw-r--r--recipes/cscope/cscope_15.5.bb12
-rw-r--r--recipes/cscope/cscope_15.7a.bb14
-rw-r--r--recipes/ctorrent/ctorrent_3.3.1.bb4
-rw-r--r--recipes/ctorrent/files/CVE-2009-1759.patch88
-rw-r--r--recipes/cups/cups.inc1
-rw-r--r--recipes/curl/curl-sdk-7.19.7/pkgconfig_fix.patch13
-rw-r--r--recipes/curl/curl-sdk_7.18.2.bb6
-rw-r--r--recipes/curl/curl-sdk_7.19.7.bb10
-rw-r--r--recipes/dbus/dbus-1.2.20/0001-Make-the-default-DBus-reply-timeout-configurable.patch78
-rw-r--r--recipes/dbus/dbus-1.2.20/dbus-1.init111
-rw-r--r--recipes/dbus/dbus-1.2.20/fix-install-daemon.patch13
-rw-r--r--recipes/dbus/dbus-1.2.20/tmpdir.patch30
-rw-r--r--recipes/dbus/dbus-1.2.22/0001-Make-the-default-DBus-reply-timeout-configurable.patch78
-rw-r--r--recipes/dbus/dbus-1.2.22/dbus-1.init111
-rw-r--r--recipes/dbus/dbus-1.2.22/fix-install-daemon.patch13
-rw-r--r--recipes/dbus/dbus-1.2.22/tmpdir.patch30
-rw-r--r--recipes/dbus/dbus-1.3.0/improve-threading-stability.patch38
-rw-r--r--recipes/dbus/dbus-glib-native_0.74.bb2
-rw-r--r--recipes/dbus/dbus-glib-native_0.76.bb2
-rw-r--r--recipes/dbus/dbus-glib_0.74.bb2
-rw-r--r--recipes/dbus/dbus-glib_0.76.bb2
-rw-r--r--recipes/dbus/dbus-glib_0.78.bb1
-rw-r--r--recipes/dbus/dbus-glib_0.82.bb2
-rw-r--r--recipes/dbus/dbus.inc10
-rw-r--r--recipes/dbus/dbus_1.2.20.bb13
-rw-r--r--recipes/dbus/dbus_1.2.22.bb13
-rw-r--r--recipes/dbus/dbus_1.3.0.bb3
-rw-r--r--recipes/desktop-file-utils/desktop-file-utils_0.16.bb15
-rw-r--r--recipes/devicekit/devicekit-power_009.bb4
-rw-r--r--recipes/devicekit/devicekit-power_014.bb26
-rw-r--r--recipes/devicekit/devicekit_003.bb2
-rw-r--r--recipes/devmem2/devmem2.bb2
-rw-r--r--recipes/dfu-util/dfu-util_svn.bb1
-rw-r--r--recipes/dnsmasq/dnsmasq-dbus_2.52.bb13
-rw-r--r--recipes/dnsmasq/dnsmasq.inc4
-rw-r--r--recipes/dnsmasq/dnsmasq_2.52.bb4
-rw-r--r--recipes/dnsmasq/files/init14
-rw-r--r--recipes/dosfstools/dosfstools_2.10.bb2
-rw-r--r--recipes/dosfstools/dosfstools_2.11.bb2
-rw-r--r--recipes/dpkg/dpkg-1.14.29/ignore_extra_fields.patch (renamed from recipes/dpkg/dpkg-1.14.25/ignore_extra_fields.patch)0
-rw-r--r--recipes/dpkg/dpkg-native_1.14.25.bb3
-rw-r--r--recipes/dpkg/dpkg-native_1.14.29.bb6
-rw-r--r--recipes/dpkg/dpkg.inc2
-rw-r--r--recipes/dpkg/dpkg_1.14.25.bb12
-rw-r--r--recipes/dpkg/dpkg_1.14.29.bb14
-rw-r--r--recipes/dri/libdrm_2.4.18.bb21
-rw-r--r--recipes/dri/libdrm_git.bb13
-rw-r--r--recipes/dt/dt.inc16
-rw-r--r--recipes/dt/dt_15.14.bb15
-rw-r--r--recipes/dt/files/no_aio.patch17
-rw-r--r--recipes/e17/cpu_svn.bb8
-rw-r--r--recipes/e17/e-module.inc1
-rw-r--r--recipes/e17/e-wm/illume-flaunch-fix.patch15
-rw-r--r--recipes/e17/e-wm/illume-keyboard-flow.patch76
-rw-r--r--recipes/e17/e-wm_svn.bb12
-rw-r--r--recipes/e17/edje-viewer_svn.bb4
-rw-r--r--recipes/e17/elmdentica_svn.bb13
-rw-r--r--recipes/e17/emprint_svn.bb12
-rw-r--r--recipes/e17/entrance/rebased_config-db.patch116
-rw-r--r--recipes/e17/entrance_0.9.0.010.bb6
-rw-r--r--recipes/e17/exalt_svn.bb4
-rw-r--r--recipes/e17/exhibit_svn.bb2
-rw-r--r--recipes/e17/forecasts_svn.bb8
-rw-r--r--recipes/e17/places_svn.bb1
-rw-r--r--recipes/e17/rage_svn.bb2
-rw-r--r--recipes/e17/screenshot_svn.bb13
-rw-r--r--recipes/e17/uptime_svn.bb8
-rw-r--r--recipes/e2fsprogs/e2fsprogs-native_1.38.bb20
-rw-r--r--recipes/e2fsprogs/e2fsprogs-native_1.41.2.bb19
-rw-r--r--recipes/e2fsprogs/e2fsprogs-native_1.41.5.bb18
-rw-r--r--recipes/e2fsprogs/e2fsprogs-native_1.41.9.bb20
-rw-r--r--recipes/e2fsprogs/e2fsprogs.inc120
-rw-r--r--recipes/e2fsprogs/e2fsprogs_1.38.bb92
-rw-r--r--recipes/e2fsprogs/e2fsprogs_1.41.4.bb95
-rw-r--r--recipes/e2fsprogs/e2fsprogs_1.41.5.bb122
-rw-r--r--recipes/e2fsprogs/e2fsprogs_1.41.9.bb120
-rw-r--r--recipes/efl1/ecore-native_svn.bb32
-rw-r--r--recipes/efl1/ecore.inc11
-rw-r--r--recipes/efl1/ecore/exit_uclibc.patch13
-rw-r--r--recipes/efl1/ecore/exit_uclibc_dns.patch13
-rw-r--r--recipes/efl1/ecore/fix-ecore-fb-initialization.patch29
-rw-r--r--recipes/efl1/ecore_svn.bb20
-rw-r--r--recipes/efl1/edb_svn.bb2
-rw-r--r--recipes/efl1/edje-native_svn.bb2
-rw-r--r--recipes/efl1/edje-sdk_svn.bb2
-rw-r--r--recipes/efl1/edje_svn.bb2
-rw-r--r--recipes/efl1/efreet_svn.bb5
-rw-r--r--recipes/efl1/elementary_svn.bb28
-rw-r--r--recipes/efl1/epdf_svn.bb5
-rw-r--r--recipes/efl1/epeg_svn.bb2
-rw-r--r--recipes/efl1/epsilon_svn.bb23
-rw-r--r--recipes/efl1/esmart_svn.bb6
-rw-r--r--recipes/efl1/etk_svn.bb42
-rw-r--r--recipes/efl1/evas-native_svn.bb56
-rw-r--r--recipes/efl1/evas_svn.bb2
-rw-r--r--recipes/efl1/ewl_svn.bb4
-rw-r--r--recipes/efl1/libeflvala_git.bb15
-rw-r--r--recipes/efl1/libeflvala_svn.bb15
-rw-r--r--recipes/eggdbus/eggdbus_0.6.bb9
-rw-r--r--recipes/eglibc/eglibc-package.bbclass27
-rw-r--r--recipes/eglibc/eglibc.inc2
-rw-r--r--recipes/eglibc/eglibc_2.10.bb2
-rw-r--r--recipes/eglibc/eglibc_2.11.bb4
-rw-r--r--recipes/eglibc/eglibc_2.9.bb2
-rw-r--r--recipes/eglibc/eglibc_svn.bb4
-rw-r--r--recipes/ekiga/ekiga/rgb16.patch51
-rw-r--r--recipes/ekiga/ekiga_git.bb24
-rw-r--r--recipes/ekiga/opal_3.8.0.bb25
-rw-r--r--recipes/ekiga/ptlib/rgb16.patch142
-rw-r--r--recipes/ekiga/ptlib_2.6.5.bb12
-rw-r--r--recipes/ekiga/ptlib_2.8.0.bb33
-rw-r--r--recipes/enotes/enotes_svn.bb1
-rw-r--r--recipes/espeak/espeak_1.37.bb1
-rw-r--r--recipes/estardict/estardict_0.1.bb12
-rw-r--r--recipes/ettercap/ettercap-ng_0.7.3.bb2
-rw-r--r--recipes/evopedia/evopedia_git.bb24
-rw-r--r--recipes/expat/expat-2.0.1/autotools.patch (renamed from recipes/expat/expat-2.0.0/autotools.patch)0
-rw-r--r--recipes/expat/expat-native_2.0.1.bb (renamed from recipes/expat/expat-native_1.95.7.bb)0
-rw-r--r--recipes/expat/expat.inc2
-rw-r--r--recipes/expat/expat_2.0.0.bb27
-rw-r--r--recipes/expat/expat_2.0.1.bb29
-rw-r--r--recipes/ez-ipupdate/ez-ipupdate_3.0.10.bb3
-rw-r--r--recipes/ez-ipupdate/files/CVE-2004-0980.patch13
-rw-r--r--recipes/faad2/faad2_2.7.bb23
-rw-r--r--recipes/fastcgi/fastcgi_2.4.0.bb7
-rw-r--r--recipes/fbset/fbset_2.1.bb2
-rw-r--r--recipes/fbv/fbv-1.0b/fbv-1.0b.patch12
-rw-r--r--recipes/fbv/fbv_1.0b.bb25
-rw-r--r--recipes/fetchmail/fetchmail-6.3.8/CVE-2007-4565.patch11
-rw-r--r--recipes/fetchmail/fetchmail_6.3.14.bb22
-rw-r--r--recipes/fetchmail/fetchmail_6.3.8.bb20
-rw-r--r--recipes/ffalarms/ffalarms/libeflvala.a18c70a312d98cc90e0e7978f845601e82460b39.patch30
-rw-r--r--recipes/ffalarms/ffalarms_git.bb33
-rw-r--r--recipes/ffalarms/ffalarms_svn.bb37
-rw-r--r--recipes/ffmpeg/ffmpeg.inc58
-rw-r--r--recipes/ffmpeg/ffmpeg_0.4.9-pre1.bb2
-rw-r--r--recipes/ffmpeg/ffmpeg_0.5.bb2
-rw-r--r--recipes/ffmpeg/ffmpeg_git.bb2
-rw-r--r--recipes/ffmpeg/ffmpeg_svn.bb7
-rw-r--r--recipes/file/file-native_4.18.bb8
-rw-r--r--recipes/file/file-native_4.21.bb6
-rw-r--r--recipes/file/file.inc17
-rw-r--r--recipes/file/file_4.18.bb15
-rw-r--r--recipes/file/file_4.21.bb17
-rw-r--r--recipes/file/file_5.04.bb3
-rw-r--r--recipes/findutils/findutils-native_4.2.29.bb7
-rw-r--r--recipes/findutils/findutils-native_4.4.bb9
-rw-r--r--recipes/findutils/findutils.inc20
-rw-r--r--recipes/findutils/findutils_4.2.29.bb11
-rw-r--r--recipes/findutils/findutils_4.4.bb14
-rw-r--r--recipes/findutils/findutils_4.5.5.bb8
-rw-r--r--recipes/firmwares/wl1251-fw_1.0-p1.bb25
-rw-r--r--recipes/flex/flex-native_2.5.31.bb4
-rw-r--r--recipes/flex/flex.inc3
-rw-r--r--recipes/flex/flex_2.5.31.bb5
-rw-r--r--recipes/flex/flex_2.5.35.bb10
-rw-r--r--recipes/fltk/fltk2_svn.bb1
-rw-r--r--recipes/fltk/fltkspacetrader_svn.bb8
-rw-r--r--recipes/fontconfig/fontconfig_2.2.95.bb2
-rw-r--r--recipes/fontconfig/fontconfig_2.3.91.bb2
-rw-r--r--recipes/fontconfig/fontconfig_2.3.95.bb2
-rw-r--r--recipes/fontconfig/fontconfig_2.4.1.bb2
-rw-r--r--recipes/fontconfig/fontconfig_2.6.0.bb2
-rw-r--r--recipes/fontconfig/fontconfig_2.6.99.bb1
-rw-r--r--recipes/freesmartphone/frameworkd_git.bb12
-rw-r--r--recipes/freesmartphone/fso-abyss/fso-abyss.conf (renamed from recipes/freesmartphone/libgsm0710mux/abyss.conf)0
-rw-r--r--recipes/freesmartphone/fso-abyss/om-gta01/fso-abyss.conf44
-rw-r--r--recipes/freesmartphone/fso-abyss/om-gta02/fso-abyss.conf44
-rw-r--r--recipes/freesmartphone/fso-abyss_git.bb31
-rw-r--r--recipes/freesmartphone/fso-term_git.bb21
-rw-r--r--recipes/freesmartphone/fsodatad_git.bb8
-rw-r--r--recipes/freesmartphone/fsodeviced_git.bb6
-rw-r--r--recipes/freesmartphone/fsogsmd_git.bb11
-rw-r--r--recipes/freesmartphone/fsomusicd_git.bb28
-rw-r--r--recipes/freesmartphone/fsoraw_svn.bb1
-rw-r--r--recipes/freesmartphone/fsousaged_git.bb4
-rw-r--r--recipes/freesmartphone/libfsobasics_git.bb2
-rw-r--r--recipes/freesmartphone/libfsoframework_git.bb4
-rw-r--r--recipes/freesmartphone/libfsoresource_git.bb2
-rw-r--r--recipes/freesmartphone/libfsotransport_git.bb2
-rw-r--r--recipes/freesmartphone/libgsm0710mux/om-3d7k/abyss.conf16
-rw-r--r--recipes/freesmartphone/libgsm0710mux/om-gta01/abyss.conf15
-rw-r--r--recipes/freesmartphone/libgsm0710mux/om-gta02/abyss.conf15
-rw-r--r--recipes/freesmartphone/libgsm0710mux_git.bb31
-rw-r--r--recipes/freesmartphone/mdbus2_git.bb17
-rw-r--r--recipes/freesmartphone/mdbus_git.bb (renamed from recipes/freesmartphone/mickeydbus_git.bb)0
-rw-r--r--recipes/freesmartphone/mickeydbus2_git.bb17
-rw-r--r--recipes/freesmartphone/msmcommd_git.bb15
-rw-r--r--recipes/freesmartphone/mterm2_git.bb21
-rw-r--r--recipes/freesmartphone/vala-dbus-binding-tool-native_git.bb10
-rw-r--r--recipes/freesmartphone/zhone2_git.bb13
-rw-r--r--recipes/freesmartphone/zhone_git.bb6
-rw-r--r--recipes/freetype/freetype-2.3.9/fix-configure.patch13
-rw-r--r--recipes/freetype/freetype-2.3.9/libtool-tag.patch20
-rw-r--r--recipes/freetype/freetype-native_2.3.9.bb21
-rw-r--r--recipes/freetype/freetype_2.3.9.bb41
-rw-r--r--recipes/gcc/gcc-cross-initial_csl-arm-2007q3.bb6
-rw-r--r--recipes/gcc/gcc-cross-intermediate_csl-arm-2007q3.bb6
-rw-r--r--recipes/gcc/gcc-cross_csl-arm-2007q3.bb2
-rw-r--r--recipes/gcc/gcc-svn.inc2
-rw-r--r--recipes/gcc/gcc_csl-arm-2007q3.bb2
-rw-r--r--recipes/gd/gd_2.0.33.bb30
-rw-r--r--recipes/gd/gd_2.0.35+2.0.36rc1.bb33
-rw-r--r--recipes/gdal/gdal_1.5.2.bb7
-rw-r--r--recipes/gdb/gdb-cross-sdk_6.6.bb3
-rw-r--r--recipes/gdb/gdb-cross-sdk_6.8.bb2
-rw-r--r--recipes/gdb/gdb-cross-sdk_7.0.bb2
-rw-r--r--recipes/gdb/gdb-cross_6.3.bb1
-rw-r--r--recipes/gdb/gdb-cross_6.4.bb1
-rw-r--r--recipes/gdb/gdb-cross_6.6.bb2
-rw-r--r--recipes/gdb/gdb-cross_6.7.1.bb2
-rw-r--r--recipes/gdb/gdb_6.3.bb1
-rw-r--r--recipes/gdb/gdb_6.4.bb1
-rw-r--r--recipes/gdb/gdb_6.6.bb1
-rw-r--r--recipes/gdb/gdb_6.7.1.bb1
-rw-r--r--recipes/gettext/gettext-0.17/m4_copy.patch53
-rw-r--r--recipes/gettext/gettext_0.17.bb5
-rw-r--r--recipes/gftp/gftp/gftp-2.0.18-188252.patch77
-rw-r--r--recipes/gftp/gftp/gftp-2.0.18-ipv6.patch33
-rw-r--r--recipes/gftp/gftp/gftp-2.0.18-mkinstalldir.patch14
-rw-r--r--recipes/gftp/gftp/gftp-2.0.18-ssh2-read.patch13
-rw-r--r--recipes/gftp/gftp/gftp-2.0.18-ssl-wildcardcert.patch22
-rw-r--r--recipes/gftp/gftp_2.0.18.bb9
-rw-r--r--recipes/gimp/babl_git.bb19
-rw-r--r--recipes/gimp/gegl_git.bb21
-rw-r--r--recipes/gimp/gegl_svn.bb5
-rw-r--r--recipes/git/files/autotools.patch26
-rw-r--r--recipes/git/files/snprintf-returns-bogus.patch12
-rw-r--r--recipes/git/git-native_1.6.0.4.bb4
-rw-r--r--recipes/git/git-native_1.7.0.2.bb8
-rw-r--r--recipes/git/git.inc5
-rw-r--r--recipes/git/git_1.6.0.4.bb9
-rw-r--r--recipes/git/git_1.7.0.2.bb13
-rw-r--r--recipes/glib-2.0/glib-2.0-2.20.3/atomic-thumb.patch56
-rw-r--r--recipes/glib-2.0/glib-2.0-2.20.3/configure-libtool.patch45
-rw-r--r--recipes/glib-2.0/glib-2.0_2.20.3.bb12
-rw-r--r--recipes/glib-2.0/glib-2.0_2.22.4.bb5
-rw-r--r--recipes/glib-2.0/glib.inc6
-rw-r--r--recipes/glibc/glibc_2.5.bb3
-rw-r--r--recipes/gmp/gmp.inc2
-rw-r--r--recipes/gnash/gnash.inc2
-rw-r--r--recipes/gnome-mplayer/gecko-mediaplayer_0.9.8.bb2
-rw-r--r--recipes/gnome-mplayer/gecko-mediaplayer_svn.bb41
-rw-r--r--recipes/gnome-mplayer/gnome-mplayer.inc5
-rw-r--r--recipes/gnome-mplayer/gnome-mplayer_0.5.3.bb2
-rw-r--r--recipes/gnome-mplayer/gnome-mplayer_0.9.5.bb2
-rw-r--r--recipes/gnome-mplayer/gnome-mplayer_0.9.8.bb2
-rw-r--r--recipes/gnome-mplayer/gnome-mplayer_0.9.9.bb9
-rw-r--r--recipes/gnome-mplayer/gnome-mplayer_svn.bb10
-rw-r--r--recipes/gnome/eog_2.28.2.bb22
-rw-r--r--recipes/gnome/gconf-editor_2.28.0.bb14
-rw-r--r--recipes/gnome/gconf_2.26.2.bb6
-rw-r--r--recipes/gnome/gconf_2.28.0.bb34
-rw-r--r--recipes/gnome/gnome-bluetooth_git.bb1
-rw-r--r--recipes/gnome/gnome-doc-utils.inc6
-rw-r--r--recipes/gnome/gnome-doc-utils_0.19.2.bb2
-rw-r--r--recipes/gnome/gnome-power-manager_2.28.3.bb45
-rw-r--r--recipes/gnome/gnome-python-extras_2.25.3.bb25
-rw-r--r--recipes/gnome/gnome-screensaver_2.28.0.bb27
-rw-r--r--recipes/gnome/gnome-screensaver_2.28.3.bb28
-rw-r--r--recipes/gnome/gnome-system-tools_2.28.2.bb18
-rw-r--r--recipes/gnome/gnome-vfs/03_gnutls27.patch33
-rw-r--r--recipes/gnome/gnome-vfs_2.24.1.bb5
-rw-r--r--recipes/gnome/libsoup-2.4_2.29.91.bb18
-rw-r--r--recipes/gnome/system-tools-backends-2.8.3/add-angstrom-distro.patch28
-rw-r--r--recipes/gnome/system-tools-backends-2.8.3/system-tools-backends74
-rw-r--r--recipes/gnome/system-tools-backends_2.8.1.bb3
-rw-r--r--recipes/gnome/system-tools-backends_2.8.3.bb42
-rw-r--r--recipes/gnu-config/gnu-config-native_20050701.bb16
-rw-r--r--recipes/gnu-config/gnu-config/uclibc.patch21
-rw-r--r--recipes/gnu-config/gnu-config_20050701.bb13
-rw-r--r--recipes/gnuchess/files/gnuchess.desktop12
-rw-r--r--recipes/gnuchess/files/gnuchess.pngbin0 -> 2623 bytes
-rw-r--r--recipes/gnuchess/files/gnuchess.sh3
-rw-r--r--recipes/gnuchess/gnuchess_5.021.bb14
-rw-r--r--recipes/gnupg/gnupg-1.4.10/long-long-thumb.patch12
-rw-r--r--recipes/gnupg/gnupg-1.4.2.2/15_free_caps.patch93
-rw-r--r--recipes/gnupg/gnupg-1.4.2.2/16_min_privileges.patch68
-rw-r--r--recipes/gnupg/gnupg-1.4.2.2/22_zero_length_mpi_fix.patch37
-rw-r--r--recipes/gnupg/gnupg-1.4.2.2/30_nm_always_check.patch21
-rw-r--r--recipes/gnupg/gnupg-1.4.2.2/dont_use_mips_h_constraint.patch48
-rw-r--r--recipes/gnupg/gnupg-1.4.2.2/long-long-thumb.patch11
-rw-r--r--recipes/gnupg/gnupg.inc2
-rw-r--r--recipes/gnupg/gnupg_1.4.10.bb13
-rw-r--r--recipes/gnupg/gnupg_1.4.2.2.bb17
-rw-r--r--recipes/gnutls/gnutls-1.6.3/configure_madness.patch49
-rw-r--r--recipes/gnutls/gnutls-1.6.3/gnutls-openssl.patch124
-rw-r--r--recipes/gnutls/gnutls-1.6.3/gnutls-texinfo-euro.patch16
-rw-r--r--recipes/gnutls/gnutls-2.4.2/configure_madness.patch57
-rw-r--r--recipes/gnutls/gnutls-2.4.2/gnutls-openssl.patch124
-rw-r--r--recipes/gnutls/gnutls-2.4.2/gnutls-replace-siginterrupt.patch37
-rw-r--r--recipes/gnutls/gnutls-2.4.2/gnutls-texinfo-euro.patch16
-rw-r--r--recipes/gnutls/gnutls-2.8.5/gnutls-openssl.patch149
-rw-r--r--recipes/gnutls/gnutls-2.8.5/gnutls-replace-siginterrupt.patch51
-rw-r--r--recipes/gnutls/gnutls-native_2.4.2.bb4
-rw-r--r--recipes/gnutls/gnutls.inc19
-rw-r--r--recipes/gnutls/gnutls_1.4.5.bb8
-rw-r--r--recipes/gnutls/gnutls_1.6.3.bb14
-rw-r--r--recipes/gnutls/gnutls_2.4.2.bb11
-rw-r--r--recipes/gnutls/gnutls_2.8.5.bb17
-rw-r--r--recipes/gpdf/files/aclocal-lossage.patch11
-rw-r--r--recipes/gpdf/files/desktop.patch11
-rw-r--r--recipes/gpdf/files/gpdf-2.10.0-gcc4-2.patch30
-rw-r--r--recipes/gpdf/gpdf_2.10.0.bb16
-rw-r--r--recipes/gpdf/gpdf_2.7.90.bb13
-rw-r--r--recipes/gpdf/gpdf_2.8.0.bb17
-rw-r--r--recipes/gpdf/gpdf_2.8.2.bb16
-rw-r--r--recipes/gpe-icons/gpe-theme-neo_git.bb6
-rw-r--r--recipes/gperf/gperf-native_3.0.3.bb10
-rw-r--r--recipes/gperf/gperf_3.0.3.bb3
-rw-r--r--recipes/gpsd/files/60-gpsd.rules47
-rwxr-xr-xrecipes/gpsd/files/gpsd182
-rw-r--r--recipes/gpsd/files/gpsd-default6
-rw-r--r--recipes/gpsd/files/libtool.patch14
-rw-r--r--recipes/gpsd/gpsd-device-config_0.bb31
-rw-r--r--recipes/gpsd/gpsd.inc62
-rw-r--r--recipes/gpsd/gpsd_2.39.bb5
-rw-r--r--recipes/gpsd/gpsd_2.90.bb9
-rw-r--r--recipes/grip/grip-3.2.0/no-host-includes.patch10
-rw-r--r--recipes/grip/grip-3.2.0/patch-src::discdb20
-rw-r--r--recipes/grip/grip-3.2.0/patch-src::main.c11
-rw-r--r--recipes/grip/grip-3.3.1/no-host-includes.patch10
-rw-r--r--recipes/grip/grip_3.2.0.bb7
-rw-r--r--recipes/grip/grip_3.3.1.bb17
-rw-r--r--recipes/gstreamer/gst-common.inc5
-rw-r--r--recipes/gstreamer/gst-ffmpeg_0.10.10.bb28
-rw-r--r--recipes/gstreamer/gst-plugin-bc/gst-debug.diff20
-rw-r--r--recipes/gstreamer/gst-plugin-bc_git.bb30
-rw-r--r--recipes/gstreamer/gst-plugin-gles/omap3_fix_renderbuffer_storage.patch29
-rw-r--r--recipes/gstreamer/gst-plugin-gles_git.bb24
-rw-r--r--recipes/gstreamer/gst-plugins-bad_0.10.18.bb9
-rw-r--r--recipes/gstreamer/gst-plugins-base/gst-plugins-base_rowstride.patch1577
-rw-r--r--recipes/gstreamer/gst-plugins-base/ivorbis-thumb.patch12
-rw-r--r--recipes/gstreamer/gst-plugins-base_0.10.25.bb3
-rw-r--r--recipes/gstreamer/gst-plugins-base_0.10.28.bb27
-rw-r--r--recipes/gstreamer/gst-plugins-good_0.10.17.bb5
-rw-r--r--recipes/gstreamer/gst-plugins-good_0.10.21.bb16
-rw-r--r--recipes/gstreamer/gst-plugins-package.inc37
-rw-r--r--recipes/gstreamer/gst-plugins-ugly_0.10.14.bb21
-rw-r--r--recipes/gstreamer/gst-plugins.inc49
-rw-r--r--recipes/gstreamer/gst-rtsp_0.10.4.bb3
-rw-r--r--recipes/gstreamer/gstreamer.inc4
-rw-r--r--recipes/gstreamer/gstreamer_0.10.28.bb11
-rw-r--r--recipes/gtk+/gtk+-2.12.0/no-demos.patch10
-rw-r--r--recipes/gtk+/gtk+-2.12.11/no-demos.patch10
-rw-r--r--recipes/gtk+/gtk+-2.12.3/no-demos.patch10
-rw-r--r--recipes/gtk+/gtk+-2.14.1/no-demos.patch10
-rw-r--r--recipes/gtk+/gtk+-2.14.2/no-demos.patch10
-rw-r--r--recipes/gtk+/gtk+-2.16.4/no-demos.patch10
-rw-r--r--recipes/gtk+/gtk+-2.16.6/no-demos.patch10
-rw-r--r--recipes/gtk+/gtk+-2.18.0/no-demos.patch10
-rw-r--r--recipes/gtk+/gtk+-2.18.3/no-demos.patch10
-rw-r--r--recipes/gtk+/gtk+-native-1.2_1.2.10.bb58
-rw-r--r--recipes/gtk+/gtk+-native_2.12.11.bb20
-rw-r--r--recipes/gtk+/gtk+.inc26
-rw-r--r--recipes/gtk+/gtk+_2.18.6.bb18
-rw-r--r--recipes/gtk-webcore/files/no-static-templates.patch21
-rw-r--r--recipes/gtk-webcore/midori_0.2.3.bb39
-rw-r--r--recipes/gtk-webcore/midori_0.2.4.bb39
-rw-r--r--recipes/gtk-webcore/osb-jscore_svn.bb6
-rw-r--r--recipes/gzip/gzip-1.3.13/configure.patch15
-rw-r--r--recipes/gzip/gzip-1.3.5/configure.patch30
-rw-r--r--recipes/gzip/gzip_1.3.13.bb38
-rw-r--r--recipes/gzip/gzip_1.3.5.bb36
-rw-r--r--recipes/hal/consolekit_0.3.0.bb10
-rw-r--r--recipes/hal/consolekit_0.4.1.bb24
-rw-r--r--recipes/hal/hal.inc11
-rw-r--r--recipes/hping/hping2_1.9.9+2.0.0rc3.bb2
-rw-r--r--recipes/i2c-tools/i2c-tools_3.0.1.bb2
-rw-r--r--recipes/i2c-tools/i2c-tools_3.0.2.bb2
-rw-r--r--recipes/ibrdtn/files/0001-fix-header-include-for-gcc44.patch22
-rw-r--r--recipes/ibrdtn/ibrdtn_0.1.1.bb17
-rw-r--r--recipes/iksemel/iksemel-1.4/r25.diff32
-rw-r--r--recipes/iksemel/iksemel_1.2.bb2
-rw-r--r--recipes/iksemel/iksemel_1.4.bb15
-rw-r--r--recipes/imagemagick/imagemagick-native_6.3.5-10.bb2
-rw-r--r--recipes/imagemagick/imagemagick_6.3.5-10.bb4
-rw-r--r--recipes/imagemagick/imagemagick_6.4.4-1.bb4
-rw-r--r--recipes/images/altboot-console-image.bb6
-rw-r--r--recipes/images/altboot-x11-image.bb4
-rw-r--r--recipes/images/angstrom-gnome-image.bb15
-rw-r--r--recipes/images/angstrom-x-image.bb15
-rw-r--r--recipes/images/e-image-core.bb4
-rw-r--r--recipes/images/fso-image-nox.bb4
-rw-r--r--recipes/images/fso-image.inc5
-rw-r--r--recipes/images/fso2-console-image.bb2
-rw-r--r--recipes/images/fso2-demo-image.bb17
-rw-r--r--recipes/images/illume-image.bb10
-rw-r--r--recipes/images/initramfs-kexecboot-image.bb24
-rw-r--r--recipes/images/shr-image.bb16
-rw-r--r--recipes/images/shr-image.inc25
-rw-r--r--recipes/images/xfce46-image.bb8
-rw-r--r--recipes/inetutils/inetutils_1.5.bb3
-rw-r--r--recipes/initscripts/files/umountfs6
-rw-r--r--recipes/initscripts/initscripts-1.0/sysfs.sh2
-rw-r--r--recipes/initscripts/initscripts_1.0.bb2
-rw-r--r--recipes/intone-video/intone-video_svn.bb1
-rw-r--r--recipes/intone/intone_svn.bb1
-rw-r--r--recipes/iproute2/iproute2.inc2
-rw-r--r--recipes/ipsec-tools/ipsec-tools.inc6
-rw-r--r--recipes/ipsec-tools/ipsec-tools_0.6.6.bb4
-rw-r--r--recipes/ipsec-tools/ipsec-tools_0.6.7.bb4
-rw-r--r--recipes/ipsec-tools/ipsec-tools_0.7.2.bb8
-rw-r--r--recipes/iscsi-target/files/2.6.31.patch16
-rw-r--r--recipes/iscsi-target/files/2.6.32.patch107
-rw-r--r--recipes/iscsi-target/iscsi-target_1.4.19.bb50
-rw-r--r--recipes/kexecboot/device_table-oldmmc.txt36
-rw-r--r--recipes/kexecboot/initramfs-kexecboot-image.bb27
-rw-r--r--recipes/kexecboot/kexecboot-cfg_0.1.bb42
-rw-r--r--recipes/kexecboot/kexecboot.inc32
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/akita/defconfig1307
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/c7x0/defconfig1304
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/spitz/defconfig1307
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.32/akita/defconfig20
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.32/c7x0/defconfig13
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.32/spitz/defconfig20
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.33/ARM-Add-support-for-LZMA-compressed-kernel-images.patch (renamed from recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/ARM-Add-support-for-LZMA-compressed-kernel-images.patch)0
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.33/akita/defconfig1320
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.33/c7x0/defconfig1316
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.33/spitz/defconfig1320
-rw-r--r--recipes/kexecboot/linux-kexecboot.inc16
-rw-r--r--recipes/kexecboot/linux-kexecboot_2.6.21-hh20.bb2
-rw-r--r--recipes/kexecboot/linux-kexecboot_2.6.24.bb2
-rw-r--r--recipes/kexecboot/linux-kexecboot_2.6.26.bb2
-rw-r--r--recipes/kexecboot/linux-kexecboot_2.6.29.bb2
-rw-r--r--recipes/kexecboot/linux-kexecboot_2.6.32+2.6.33-rc6.bb26
-rw-r--r--recipes/kexecboot/linux-kexecboot_2.6.32.bb2
-rw-r--r--recipes/kexecboot/linux-kexecboot_2.6.33.bb15
-rw-r--r--recipes/klibc/files/fstype-sane-vfat-and-jffs2-for-1.5.patch63
-rw-r--r--recipes/klibc/files/isystem.patch13
-rw-r--r--recipes/klibc/files/mntproc-definitions.patch20
-rw-r--r--recipes/klibc/files/signal-cleanup.patch38
-rw-r--r--recipes/klibc/klibc-1.5.15+1.5.16/1.5.15+1.5.16.patch721
-rw-r--r--recipes/klibc/klibc-1.5.15+1.5.16/modprobe.patch1985
-rw-r--r--recipes/klibc/klibc-1.5.15+1.5.16/socket.h.patch139
-rw-r--r--recipes/klibc/klibc-1.5.15+1.5.16/staging.patch134
-rw-r--r--recipes/klibc/klibc-1.5.15+1.5.16/wc.patch236
-rw-r--r--recipes/klibc/klibc-1.5.15/fstype-sane-vfat-and-jffs2-for-1.5.patch63
-rw-r--r--recipes/klibc/klibc-1.5.15/isystem.patch13
-rw-r--r--recipes/klibc/klibc-1.5.15/mntproc-definitions.patch20
-rw-r--r--recipes/klibc/klibc-1.5.15/signal-cleanup.patch38
-rw-r--r--recipes/klibc/klibc-common.inc17
-rw-r--r--recipes/klibc/klibc-utils-static_1.5.15+1.5.16.bb135
-rw-r--r--recipes/klibc/klibc-utils-static_1.5.15.bb60
-rw-r--r--recipes/klibc/klibc-utils-static_1.5.bb69
-rw-r--r--recipes/klibc/klibc_1.5.15+1.5.16.bb6
-rw-r--r--recipes/klibc/klibc_1.5.15+1.5.16.inc178
-rw-r--r--recipes/klibc/klibc_1.5.15.bb2
-rw-r--r--recipes/klibc/klibc_1.5.15.inc63
-rw-r--r--recipes/klibc/klibc_1.5.bb2
-rw-r--r--recipes/klibc/klibc_1.5.inc59
-rw-r--r--recipes/lftp/lftp_3.5.1.bb17
-rw-r--r--recipes/lftp/lftp_4.0.5.bb20
-rw-r--r--recipes/liba52/files/01-enable-pic.diff23
-rw-r--r--recipes/liba52/liba52_0.7.4.bb5
-rw-r--r--recipes/libdlo/kernel-module-udlfb_git.bb28
-rw-r--r--recipes/libffi/libffi/autoconf-2.64.patch24
-rw-r--r--recipes/libffi/libffi_3.0.8.bb3
-rw-r--r--recipes/libgcrypt/libgcrypt.inc5
-rw-r--r--recipes/libgpg-error/libgpg-error.inc3
-rw-r--r--recipes/libgsasl/libgsasl_1.4.0.bb14
-rw-r--r--recipes/libidn/libidn_1.15.bb19
-rw-r--r--recipes/libidn/libidn_1.18.bb13
-rw-r--r--recipes/libnl/libnl_1.1.bb9
-rw-r--r--recipes/libol/libol_0.3.18.bb6
-rw-r--r--recipes/liboop/liboop_1.0.bb3
-rw-r--r--recipes/libpcap/libpcap-1.0.0/0001-Fix-some-problems-that-show-up-in-autoconf-2.64-and-.patch140
-rw-r--r--recipes/libpcap/libpcap_1.0.0.bb5
-rw-r--r--recipes/libpng/libpng-native_1.2.37.bb6
-rw-r--r--recipes/libpng/libpng.inc2
-rw-r--r--recipes/libpng/libpng_1.2.37.bb8
-rw-r--r--recipes/librsvg/librsvg-native_2.26.0.bb1
-rw-r--r--recipes/libsndfile/libsndfile1_1.0.20.bb32
-rw-r--r--recipes/libsndfile/libsndfile1_1.0.21.bb30
-rw-r--r--recipes/libspf2/libspf2_1.0.4.bb12
-rw-r--r--recipes/libspf2/libspf2_1.2.9.bb16
-rw-r--r--recipes/libtiff/tiff_3.8.2.bb17
-rw-r--r--recipes/libtiff/tiff_3.9.2.bb28
-rw-r--r--recipes/libungif/libungif_4.1.3.bb2
-rw-r--r--recipes/libunwind/libunwind.inc12
-rw-r--r--recipes/libunwind/libunwind_0.99.bb5
-rw-r--r--recipes/libusb/files/libusb-shortok.patch32
-rw-r--r--recipes/libusb/libusb-compat-0.1.3/gcc-3-compatibility.patch26
-rw-r--r--recipes/libusb/libusb-compat_0.1.2.bb2
-rw-r--r--recipes/libusb/libusb-compat_0.1.3.bb20
-rw-r--r--recipes/libusb/libusb1_1.0.2.bb2
-rw-r--r--recipes/libusb/libusb1_1.0.4.bb9
-rw-r--r--recipes/libusb/libusb_0.1.12.bb4
-rw-r--r--recipes/libvorbis/libvorbis-1.2.3/patch-lib_backends.h11
-rw-r--r--recipes/libvorbis/libvorbis-1.2.3/patch-lib_codebook.c11
-rw-r--r--recipes/libvorbis/libvorbis-1.2.3/patch-lib_modes_residue_44.h30
-rw-r--r--recipes/libvorbis/libvorbis-1.2.3/patch-lib_modes_residue_44u.h30
-rw-r--r--recipes/libvorbis/libvorbis-1.2.3/patch-lib_res0.c40
-rw-r--r--recipes/libvorbis/libvorbis_1.2.3.bb7
-rw-r--r--recipes/libwmf/files/libwmf-0.2.8.4-intoverflow.patch31
-rw-r--r--recipes/libwmf/files/libwmf-0.2.8.4-useafterfree.patch14
-rw-r--r--recipes/libwmf/libwmf-native_0.2.8.4.bb4
-rw-r--r--recipes/libwmf/libwmf_0.2.8.4.bb5
-rw-r--r--recipes/libxml/libxml2-native.inc27
-rw-r--r--recipes/libxml/libxml2-native_2.7.3.bb2
-rw-r--r--recipes/libxml/libxml2.inc30
-rw-r--r--recipes/libxml/libxml2_2.7.3.bb2
-rw-r--r--recipes/libxml/libxml2_2.7.6.bb6
-rw-r--r--recipes/libxml/libxml2_2.7.7.bb6
-rw-r--r--recipes/libxslt/libxslt-native_1.1.17.bb4
-rw-r--r--recipes/libxslt/libxslt-native_1.1.21.bb4
-rw-r--r--recipes/libxslt/libxslt_1.1.22.bb9
-rw-r--r--recipes/libyaml/libyaml_0.1.2.bb5
-rw-r--r--recipes/libyaml/libyaml_0.1.3.bb13
-rw-r--r--recipes/lighttpd/lighttpd.inc66
-rw-r--r--recipes/lighttpd/lighttpd_1.4.25.bb6
-rw-r--r--recipes/lighttpd/lighttpd_1.4.26.bb8
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers-2.6.31/scsi-use-__u8.patch26
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers-2.6.32/scsi-use-__u8.patch26
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers.inc3
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers_2.6.11.1.bb10
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers_2.6.15.99.bb10
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers_2.6.18+2.6.19-rc1.bb21
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers_2.6.18.bb40
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers_2.6.20.bb20
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers_2.6.22.bb20
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers_2.6.23.bb20
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers_2.6.25.bb20
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers_2.6.29.bb7
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers_2.6.30.bb7
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers_2.6.31.bb8
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers_2.6.32.bb8
-rw-r--r--recipes/linux/LAB-kernel_2.6.13-hh2.bb2
-rw-r--r--recipes/linux/LAB-kernel_cvs.bb2
-rw-r--r--recipes/linux/c7x0-kernels-2.4-embedix.bb2
-rw-r--r--recipes/linux/chumby-kernel_2.6.16-chumby-1.2.bb2
-rw-r--r--recipes/linux/collie-kernels-2.4-embedix.bb2
-rw-r--r--recipes/linux/compulab-pxa270_2.6.16.bb2
-rw-r--r--recipes/linux/devkitidp-pxa255_2.6.19.bb2
-rw-r--r--recipes/linux/ep93xx-kernel_2.6.17+2.6.18-rc1.bb2
-rw-r--r--recipes/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb2
-rw-r--r--recipes/linux/gumstix-linux.inc2
-rw-r--r--recipes/linux/gumstix_2.6.5-gnalm1-gum0.bb2
-rw-r--r--recipes/linux/handhelds-pxa_2.4.19-rmk6-pxa1-hh42.bb2
-rw-r--r--recipes/linux/handhelds-sa_2.4.19-rmk6-pxa1-hh42.bb2
-rw-r--r--recipes/linux/ipod_2.4.24-ipod0.bb2
-rw-r--r--recipes/linux/ixp4xx-kernel.inc4
-rw-r--r--recipes/linux/linux-2.6.20/nhk15/0001-kbuild-include-limits.h-in-sumversion.c-for-path_max.patch29
-rw-r--r--recipes/linux/linux-2.6.20/nhk15/audio_codec_patch_base_v5.6.0.patch53
-rw-r--r--recipes/linux/linux-2.6.20/nhk15/hrw-make-create-kconfig-executable.patch2
-rw-r--r--recipes/linux/linux-2.6.20/nhk15/linux-2.6.20_01_dec_2.patch1203
-rw-r--r--recipes/linux/linux-2.6.20/nhk15/nomadik_baseline_linux_2620.patch29153
-rw-r--r--recipes/linux/linux-2.6.20/nhk15/patch_audiocodec_glitch.patch18
-rw-r--r--recipes/linux/linux-2.6.20/nhk15/patch_classdamp_pm_v_audio_codec_patch.patch32
-rw-r--r--recipes/linux/linux-2.6.24/hipox/defconfig4
-rw-r--r--recipes/linux/linux-2.6.24/hipox/hipox.patch28
-rw-r--r--recipes/linux/linux-2.6.24/ts72xx/ep93xx-i2c-bus.diff30
-rw-r--r--recipes/linux/linux-2.6.24/ts72xx/ep93xx-maverick-uniqid.patch14
-rw-r--r--recipes/linux/linux-2.6.24/ts72xx/ts72xx-machine-id-fix.patch8
-rw-r--r--recipes/linux/linux-2.6.24/ts72xx/ts72xx-rs485.patch268
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0001-TS72xx-update-memory-map-comments.patch45
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0002-GPIO-fix.patch47
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0003-Debounce-IRQ.patch97
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0004-OHCI-fix.patch39
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0005-Fix-wrong-machine-ID-passed-from-RedBoot.patch28
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0006-Force-the-nF-bit-on.patch33
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0007-Use-CPLD-watchdog-to-reset.patch54
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0008-Fix-UART-clocks.patch99
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0009-CPU-info-and-board-revision.patch64
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0010-GPIO-leds.patch72
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0011-EP93xx-Ethernet-support.patch548
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0012-TS72xx-watchdog.patch451
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0013-TS7200-NOR-physmap-fix.patch58
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0014-TS-7200-8MB-NOR-flash.patch163
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0015-TS-72xx-MAX197-support.patch365
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0016-RS485-common-bits.patch46
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0017-TS-72xx-SBC-proc-info.patch249
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0018-EP93xx-GPIO-I2C.patch71
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0019-EP93xx-SPI-driver.patch989
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0020-TS-72XX-LCD-console-driver.patch509
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0021-EP93xx-GPIO-matrix-keypad.patch564
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0022-TS-72xx-RS485-auto-mode-support.patch218
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0023-Clean-and-invalidate-D-cache-entry.patch29
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0024-PC-104-I-O-and-memory-mappings.patch40
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0025-EP93xx-discontigmem.patch481
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0026-TS72xx-PATA-support.patch442
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0027-TS72xx-TS-SER1-support.patch213
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0028-TS72xx-TS-ETH100.patch259
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0029-EP93xx-Power-Management-Routines.patch125
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/0030-EP93xx-CPUfreq-driver.patch332
-rw-r--r--recipes/linux/linux-2.6.27/ts72xx/defconfig1312
-rw-r--r--recipes/linux/linux-2.6.28/mh355/defconfig1419
-rw-r--r--recipes/linux/linux-2.6.28/mh355/linux-2.6.28.10-at91-mh.patch2860
-rw-r--r--recipes/linux/linux-2.6.28/nokia900/defconfig2059
-rw-r--r--recipes/linux/linux-2.6.32/eee701/defconfig127
-rw-r--r--recipes/linux/linux-2.6.32/eee701/intelfb.patch16
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0001-ts72xx_base.patch446
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0002-ts72xx_force_machine-id.patch50
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0003-ep93xx_cpuinfo.patch37
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0004-ts72xx_sbcinfo.patch226
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0005-ep93xx_eth.patch540
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0006-ts72xx_ts_ser1.patch216
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0007-ts72xx_rs485.patch236
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0008-ts72xx_ts_eth100.patch261
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0009-ts7200_cf_ide.patch120
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0010-ts72xx_pata.patch414
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0011-ep93xx_pm.patch114
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0012-ts72xx_gpio_i2c.patch63
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0013-ts72xx_dio_keypad.patch567
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0014-ep93xx_spi.patch985
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0015-ep93xx_cpufreq.patch360
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/0016-ts7200_nor_flash.patch163
-rw-r--r--recipes/linux/linux-2.6.32/ts72xx/defconfig1686
-rw-r--r--recipes/linux/linux-2.6.33/mpc8641-hpcn/defconfig1752
-rw-r--r--recipes/linux/linux-2.6.33/p2020ds/defconfig1986
-rw-r--r--recipes/linux/linux-2.6.33/spitz/defconfig (renamed from recipes/linux/linux-2.6.32+2.6.33-rc6/spitz/defconfig)0
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0001-ts72xx_base.patch417
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0002-ts72xx_force_machine-id.patch50
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0003-ep93xx_cpuinfo.patch37
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0004-ts72xx_sbcinfo.patch226
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0005-ep93xx_eth.patch539
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0006-ts72xx_ts_ser1.patch216
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0007-ts72xx_rs485.patch236
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0008-ts72xx_ts_eth100.patch261
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0009-ts7200_cf_ide.patch120
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0010-ts72xx_pata.patch413
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0011-ep93xx_pm.patch114
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0012-ts72xx_gpio_i2c.patch63
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0013-ts72xx_dio_keypad.patch567
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0014-ep93xx_spi.patch985
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0015-ep93xx_cpufreq.patch360
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/0016-ts7200_nor_flash.patch163
-rw-r--r--recipes/linux/linux-2.6.33/ts72xx/defconfig1750
-rw-r--r--recipes/linux/linux-amsdelta-2.6_2.6.16-omap2.bb2
-rw-r--r--recipes/linux/linux-bast_2.4.25-vrs1-bast1.bb2
-rw-r--r--recipes/linux/linux-bd-neon-2.6_2.6.22.bb2
-rw-r--r--recipes/linux/linux-colinux_2.4.28.bb2
-rw-r--r--recipes/linux/linux-colinux_2.6.10.bb2
-rw-r--r--recipes/linux/linux-davinci/hawkboard/defconfig140
-rw-r--r--recipes/linux/linux-davinci_git.bb8
-rw-r--r--recipes/linux/linux-ea3250-2.6.27.8/defconfig1364
-rw-r--r--recipes/linux/linux-ea3250-2.6.27.8/kernel-arm-2.6.27.8-lpc32xx_update5_fix.patch21
-rw-r--r--recipes/linux/linux-ea3250-2.6.27.8/lpc32xx-spwm.patch227
-rw-r--r--recipes/linux/linux-ea3250_2.6.27.8.bb46
-rw-r--r--recipes/linux/linux-efika_2.6.18+2.6.19-rc6.bb2
-rw-r--r--recipes/linux/linux-efika_2.6.20.20.bb2
-rw-r--r--recipes/linux/linux-efika_2.6.20.bb2
-rw-r--r--recipes/linux/linux-efika_2.6.21+git.bb2
-rw-r--r--recipes/linux/linux-epia_2.6.11.bb2
-rw-r--r--recipes/linux/linux-epia_2.6.12.bb2
-rw-r--r--recipes/linux/linux-epia_2.6.19.2.bb2
-rw-r--r--recipes/linux/linux-epia_2.6.8.1.bb2
-rw-r--r--recipes/linux/linux-geodegx_2.4.24.bb2
-rw-r--r--recipes/linux/linux-geodelx_2.6.11.bb2
-rw-r--r--recipes/linux/linux-gumstix_2.6.15.bb2
-rw-r--r--recipes/linux/linux-h1940_2.6.11-bk1-h1940.bb2
-rw-r--r--recipes/linux/linux-h1940_2.6.14-h1940.bb2
-rw-r--r--recipes/linux/linux-h1940_2.6.17-h1940.bb2
-rw-r--r--recipes/linux/linux-h6300-omap1_2.6.12-rc5.bb2
-rw-r--r--recipes/linux/linux-h6300-omap1_2.6.14.3.bb2
-rw-r--r--recipes/linux/linux-h6300-omap1_2.6.16.16.bb2
-rw-r--r--recipes/linux/linux-hackndev-2.6_git.bb2
-rw-r--r--recipes/linux/linux-handhelds-2.6.inc2
-rw-r--r--recipes/linux/linux-handhelds-2.6_2.6.16-hh9.bb2
-rw-r--r--recipes/linux/linux-handhelds-2.6_2.6.17-hh4.bb2
-rw-r--r--recipes/linux/linux-handhelds-2.6_2.6.18-hh2.bb2
-rw-r--r--recipes/linux/linux-handhelds-2.6_2.6.19-hh13.bb2
-rw-r--r--recipes/linux/linux-handhelds-2.6_2.6.20-hh10.bb2
-rw-r--r--recipes/linux/linux-handhelds-2.6_2.6.21-hh20.bb2
-rw-r--r--recipes/linux/linux-handhelds-2.6_cvs.bb2
-rw-r--r--recipes/linux/linux-jlime-ben_2.6.32.bb2
-rw-r--r--recipes/linux/linux-jlime-current.bb2
-rw-r--r--recipes/linux/linux-jlime-jornada6xx_2.6.11.bb2
-rw-r--r--recipes/linux/linux-jlime-jornada6xx_2.6.17.bb2
-rw-r--r--recipes/linux/linux-jlime-jornada6xx_2.6.21rc5.bb2
-rw-r--r--recipes/linux/linux-jlime-jornada6xx_2.6.25.bb2
-rw-r--r--recipes/linux/linux-jlime-jornada6xx_2.6.32.bb2
-rw-r--r--recipes/linux/linux-jlime-jornada7xx-2.6.32+git/defconf_jlime1742
-rw-r--r--recipes/linux/linux-jlime-jornada7xx_2.6.17.bb2
-rw-r--r--recipes/linux/linux-jlime-jornada7xx_2.6.18.bb2
-rw-r--r--recipes/linux/linux-jlime-jornada7xx_2.6.19rc6.bb2
-rw-r--r--recipes/linux/linux-jlime-jornada7xx_2.6.32+git.bb35
-rw-r--r--recipes/linux/linux-kirkwood/openrd-base/defconfig2
-rw-r--r--recipes/linux/linux-kirkwood/openrd-client/defconfig36
-rw-r--r--recipes/linux/linux-kirkwood/sheevaplug/defconfig2
-rw-r--r--recipes/linux/linux-kirkwood_2.6.29.5.bb2
-rw-r--r--recipes/linux/linux-kirkwood_2.6.30.5.bb2
-rw-r--r--recipes/linux/linux-kirkwood_2.6.31.bb2
-rw-r--r--recipes/linux/linux-kirkwood_2.6.33-rc1.bb2
-rw-r--r--recipes/linux/linux-kirkwood_2.6.33-rc5.bb2
-rw-r--r--recipes/linux/linux-ks8695_2.6.16.bb2
-rw-r--r--recipes/linux/linux-leviathan/defconfig5
-rw-r--r--recipes/linux/linux-leviathan_git.bb15
-rw-r--r--recipes/linux/linux-linkstationppc_2.6.28.4.bb2
-rw-r--r--recipes/linux/linux-magicbox_2.6.18.6.bb2
-rw-r--r--recipes/linux/linux-magicbox_2.6.19.2.bb2
-rw-r--r--recipes/linux/linux-mainstone_2.6.25.bb2
-rw-r--r--recipes/linux/linux-mini2440_2.6.30+git.bb2
-rw-r--r--recipes/linux/linux-mini2440_2.6.31+git.bb2
-rw-r--r--recipes/linux/linux-ml403-mvista-2.6.x_git.bb2
-rw-r--r--recipes/linux/linux-mtx-1_2.4.27.bb2
-rw-r--r--recipes/linux/linux-mtx-2_2.4.27.bb2
-rw-r--r--recipes/linux/linux-mtx-3_2.6.15.4.bb2
-rw-r--r--recipes/linux/linux-mtx-3_2.6.15.bb2
-rw-r--r--recipes/linux/linux-n1200_2.6.27-rc9+git.bb2
-rw-r--r--recipes/linux/linux-navman_2.6.18.bb2
-rw-r--r--recipes/linux/linux-nokia800.inc2
-rw-r--r--recipes/linux/linux-omap-2.6_2.6.9-omap1.bb2
-rw-r--r--recipes/linux/linux-omap-archos-2.6.27.10-omap1/defconfig2183
-rw-r--r--recipes/linux/linux-omap-archos-2.6.27.10-omap1/patch-archos-2.6.27-omap1.bz2bin0 -> 2091114 bytes
-rw-r--r--recipes/linux/linux-omap-archos_2.6.27.10-omap1.bb16
-rw-r--r--recipes/linux/linux-omap-zoomsync-2.6.32/omapzoom2/defconfig397
-rw-r--r--recipes/linux/linux-omap-zoomsync-2.6.32/omapzoom36x/defconfig2167
-rw-r--r--recipes/linux/linux-omap-zoomsync/logo_linux_clut224.ppm1152004
-rwxr-xr-xrecipes/linux/linux-omap-zoomsync/omapzoom2/defconfig233
-rw-r--r--recipes/linux/linux-omap-zoomsync_2.6.31.bb5
-rw-r--r--recipes/linux/linux-omap-zoomsync_2.6.32.bb22
-rw-r--r--recipes/linux/linux-omap_2.6.29.bb1
-rw-r--r--recipes/linux/linux-openmoko-2.6.24_git.bb1
-rw-r--r--recipes/linux/linux-openmoko-2.6.28_git.bb1
-rw-r--r--recipes/linux/linux-openmoko-2.6.31_git.bb1
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0001-DRM-for-platform-devices.patch458
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0001-glamo-drm-use-dev_set_drvdata-instead-of-setting-dri.patch29
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0001-wm8753-fix-build-with-gcc-4.4.2-which-works-ok-with-.patch11
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0002-DRM-for-platform-devices.patch458
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0002-Glamo-DRM-and-KMS-driver.patch3818
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0002-glamo-drm-select-DRM_KMS_HELPER-for-crtc-functions.patch24
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0003-Glamo-DRM-and-KMS-driver.patch3788
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0003-Work-on-Glamo-core-for-DRM.patch252
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0004-Add-JBT6k74-hook-for-use-by-KMS.patch49
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0004-Work-on-Glamo-core-for-DRM.patch171
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0005-Add-JBT6k74-hook-for-use-by-KMS.patch49
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0006-glamo-drm-use-dev_set_drvdata-instead-of-setting-dri.patch29
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0007-glamo-drm-select-DRM_KMS_HELPER-for-crtc-functions.patch24
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0008-Fix-crash-when-reading-Glamo-registers-via-sysfs.patch38
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0009-A-couple-of-GEM-refcounting-fixes.patch42
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0010-Simplify-the-JBT6k74-driver.patch667
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0011-Don-t-choke-if-userspace-provides-a-pixel-clock-valu.patch79
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0012-Report-all-FB-modes-given-by-the-lower-levels.patch102
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0013-Change-connector-type-to-LVDS.patch29
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0014-Clean-up-JBT-hooks-and-allow-resolution-switching.patch223
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0015-ar6000-send-userspace-an-event-on-disconnection.patch42
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/fix.compilation.if.no.GENERIC_TIME.patch42
-rw-r--r--recipes/linux/linux-openmoko-2.6.32_git.bb34
-rw-r--r--recipes/linux/linux-openmoko-devel_git.bb1
-rw-r--r--recipes/linux/linux-openmoko-shr-devel_git.bb1
-rw-r--r--recipes/linux/linux-openmoko-shr-drm-devel_git.bb1
-rw-r--r--recipes/linux/linux-orion_2.6.28.4.bb2
-rw-r--r--recipes/linux/linux-palm-omap1_2.6.22-omap1.bb2
-rw-r--r--recipes/linux/linux-rp.inc2
-rw-r--r--recipes/linux/linux-sequoia_2.6.21.bb2
-rw-r--r--recipes/linux/linux-sgh-i900_2.6.32.bb2
-rw-r--r--recipes/linux/linux-smdk2440_2.6.20+git.bb2
-rw-r--r--recipes/linux/linux-smdk2443_2.6.20+git.bb2
-rw-r--r--recipes/linux/linux-storcenter_2.6.27.7.bb2
-rw-r--r--recipes/linux/linux-sun4cdm_2.4.26.bb2
-rw-r--r--recipes/linux/linux-sun4cdm_2.6.8.1.bb2
-rw-r--r--recipes/linux/linux-titan-sh4_2.6.21.bb2
-rw-r--r--recipes/linux/linux-tornado-omap2_2.6.16.16.bb2
-rw-r--r--recipes/linux/linux-turbostation_2.6.20.2.bb2
-rw-r--r--recipes/linux/linux-wrap-geode_2.6.17.bb2
-rw-r--r--recipes/linux/linux-wrt_2.4.20.bb2
-rw-r--r--recipes/linux/linux-wrt_2.4.30.bb2
-rw-r--r--recipes/linux/linux-x86_2.6.17.9.bb2
-rw-r--r--recipes/linux/linux-x86_2.6.20.bb2
-rw-r--r--recipes/linux/linux-xilinx-ml507/defconfig1415
-rw-r--r--recipes/linux/linux-xilinx-ml507_git.bb23
-rw-r--r--recipes/linux/linux-xilinx-slab_git.bb2
-rw-r--r--recipes/linux/linux-xxs1500_2.4.21.bb2
-rw-r--r--recipes/linux/linux-z_2.6.20.bb2
-rw-r--r--recipes/linux/linux.inc32
-rw-r--r--recipes/linux/linux/atngw100/defconfig2
-rw-r--r--recipes/linux/linux_2.6.14.bb2
-rw-r--r--recipes/linux/linux_2.6.20.bb3
-rw-r--r--recipes/linux/linux_2.6.22.bb2
-rw-r--r--recipes/linux/linux_2.6.23+2.6.24-rc5.bb2
-rw-r--r--recipes/linux/linux_2.6.24.bb3
-rw-r--r--recipes/linux/linux_2.6.25.bb2
-rw-r--r--recipes/linux/linux_2.6.27.bb38
-rw-r--r--recipes/linux/linux_2.6.28.bb13
-rw-r--r--recipes/linux/linux_2.6.29.bb2
-rw-r--r--recipes/linux/linux_2.6.32+2.6.33-rc6.bb41
-rw-r--r--recipes/linux/linux_2.6.32.bb29
-rw-r--r--recipes/linux/linux_2.6.33.bb34
-rw-r--r--recipes/linux/logicpd-pxa270_2.6.17-rc5.bb2
-rw-r--r--recipes/linux/logicpd-pxa270_2.6.19.2.bb2
-rw-r--r--recipes/linux/mainstone-kernel_2.6.11.bb2
-rw-r--r--recipes/linux/mainstone-kernel_2.6.18.bb2
-rw-r--r--recipes/linux/mnci-ramses_2.4.21-rmk2-pxa1.bb2
-rw-r--r--recipes/linux/mx21ads-kernel_2.6.19rc6.bb2
-rw-r--r--recipes/linux/netbook-pro-kernel_2.6.17.bb2
-rw-r--r--recipes/linux/opensimpad_2.4.25-vrs2-pxa1-jpm1.bb2
-rw-r--r--recipes/linux/opensimpad_2.4.27-vrs1-pxa1-jpm1.bb2
-rw-r--r--recipes/linux/openzaurus-pxa27x_2.4.20-rmk2-embedix20050602.bb2
-rw-r--r--recipes/linux/openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc2
-rw-r--r--recipes/linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb2
-rw-r--r--recipes/linux/triton-kernel_2.6.11.bb2
-rw-r--r--recipes/linux/xanadux-ba-2.6_2.6.12.bb2
-rw-r--r--recipes/linux/xanadux-un-2.6_2.6.12.bb2
-rw-r--r--recipes/lirc/lirc_0.8.5.bb7
-rw-r--r--recipes/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch23
-rw-r--r--recipes/loudmouth/loudmouth_1.4.3.bb8
-rw-r--r--recipes/lsh/lsh_1.5.5.bb35
-rw-r--r--recipes/lsh/lsh_2.0.4.bb37
-rw-r--r--recipes/lsof/lsof_4.78.bb45
-rw-r--r--recipes/lsof/lsof_4.83.bb49
-rw-r--r--recipes/lttng/lttng-control_0.12.bb15
-rw-r--r--recipes/lttng/lttng-control_0.79.bb15
-rw-r--r--recipes/m4/m4-native_1.4.11.bb14
-rw-r--r--recipes/m4/m4-native_1.4.12.bb14
-rw-r--r--recipes/m4/m4-native_1.4.14.bb11
-rw-r--r--recipes/m4/m4-native_1.4.4.bb14
-rw-r--r--recipes/m4/m4-native_1.4.8.bb14
-rw-r--r--recipes/m4/m4.inc9
-rw-r--r--recipes/m4/m4_1.4.11.bb15
-rw-r--r--recipes/m4/m4_1.4.12.bb15
-rw-r--r--recipes/m4/m4_1.4.14.bb6
-rw-r--r--recipes/m4/m4_1.4.4.bb13
-rw-r--r--recipes/m4/m4_1.4.8.bb16
-rw-r--r--recipes/maemo4/libgpsbt/configure-fix-version.patch17
-rw-r--r--recipes/maemo4/libgpsbt_0.1.bb12
-rw-r--r--recipes/maemo4/libgpsmgr/configure-fix-version.patch17
-rw-r--r--recipes/maemo4/libgpsmgr_0.1.bb10
-rw-r--r--recipes/maradns/files/compile-1.4.0.3.patch61
-rw-r--r--recipes/maradns/maradns_1.0.41.bb43
-rw-r--r--recipes/maradns/maradns_1.4.03.bb46
-rw-r--r--recipes/mbuffer/mbuffer_20091227.bb17
-rw-r--r--recipes/mc/mc_4.6.2.bb2
-rw-r--r--recipes/mesa/files/fix-progs-makefile.patch81
-rw-r--r--recipes/mesa/mesa-dri-glsl-native.bb22
-rw-r--r--recipes/mesa/mesa-dri_git.bb27
-rw-r--r--recipes/meta/external-toolchain-csl.bb267
-rw-r--r--recipes/meta/external-toolchain-csl/SUPPORTED4
-rw-r--r--recipes/meta/external-toolchain-generic.bb4
-rw-r--r--recipes/meta/external-toolchain.bb4
-rw-r--r--recipes/meta/meta-toolchain.bb29
-rw-r--r--recipes/moblin/bickley_git.bb2
-rw-r--r--recipes/moblin/hornsey_git.bb2
-rw-r--r--recipes/module-init-tools/module-init-tools.inc2
-rw-r--r--recipes/mokoko/mokoko_svn.bb1
-rw-r--r--recipes/mozilla/fennec_hg.bb2
-rw-r--r--recipes/mozilla/firefox-3.5.2/firefox-plugin.pc10
-rw-r--r--recipes/mozilla/firefox-3.5.2/firefox-xpcom.pc13
-rw-r--r--recipes/mozilla/firefox-3.5.2/mozconfig1
-rw-r--r--recipes/mozilla/firefox-3.5.2/nspr.pc10
-rw-r--r--recipes/mozilla/firefox-3.5.4/mozconfig1
-rw-r--r--recipes/mozilla/firefox-3.5.5/mozconfig1
-rw-r--r--recipes/mozilla/firefox-3.6/0001-Remove-Werror-from-build.patch43
-rw-r--r--recipes/mozilla/firefox-3.6/0002-Fix-security-cross-compile-cpu-detection-error.patch42
-rw-r--r--recipes/mozilla/firefox-3.6/010_FPU_IS_ARM_FPA_xslt.diff56
-rw-r--r--recipes/mozilla/firefox-3.6/Bug339782.additional.fix.diff39
-rw-r--r--recipes/mozilla/firefox-3.6/Bug385583.nspr.jmp_buf.eabi.diff33
-rw-r--r--recipes/mozilla/firefox-3.6/Bug405992.atomic.nspr.diff48
-rw-r--r--recipes/mozilla/firefox-3.6/configure-wchart.patch11
-rw-r--r--recipes/mozilla/firefox-3.6/firefox-plugin.pc10
-rw-r--r--recipes/mozilla/firefox-3.6/firefox-xpcom.pc13
-rw-r--r--recipes/mozilla/firefox-3.6/jemalloc-tls.patch28
-rw-r--r--recipes/mozilla/firefox-3.6/linkage-problem.patch14
-rw-r--r--recipes/mozilla/firefox-3.6/mozconfig73
-rw-r--r--recipes/mozilla/firefox-3.6/nspr.pc10
-rw-r--r--recipes/mozilla/firefox-3.6/plugins-dir.patch16
-rw-r--r--recipes/mozilla/firefox-3.6/security-cross.patch64
-rw-r--r--recipes/mozilla/firefox.inc21
-rw-r--r--recipes/mozilla/firefox_3.0.1.bb1
-rw-r--r--recipes/mozilla/firefox_3.0.4.bb1
-rw-r--r--recipes/mozilla/firefox_3.0.8.bb1
-rw-r--r--recipes/mozilla/firefox_3.1b1.bb1
-rw-r--r--recipes/mozilla/firefox_3.1b2.bb1
-rw-r--r--recipes/mozilla/firefox_3.5.2.bb6
-rw-r--r--recipes/mozilla/firefox_3.5.4.bb5
-rw-r--r--recipes/mozilla/firefox_3.5.5.bb5
-rw-r--r--recipes/mozilla/firefox_3.5b4.bb5
-rw-r--r--recipes/mozilla/firefox_3.6.bb38
-rw-r--r--recipes/mozilla/firefox_hg.bb2
-rw-r--r--recipes/mplayer/files/yuv.S57
-rw-r--r--recipes/mplayer/mplayer_git.bb16
-rw-r--r--recipes/mplayer/mplayer_svn.bb3
-rw-r--r--recipes/msmtp/msmtp_1.4.10.bb10
-rw-r--r--recipes/msmtp/msmtp_1.4.19.bb12
-rw-r--r--recipes/mtd/mtd-utils-native.inc10
-rw-r--r--recipes/mtd/mtd-utils-native_1.3.1.bb7
-rw-r--r--recipes/mtd/mtd-utils.inc26
-rw-r--r--recipes/mtd/mtd-utils_1.3.1.bb27
-rw-r--r--recipes/musicbrainz/files/libmusicbrainz-3.0.2-gcc-4.4-fix.patch12
-rw-r--r--recipes/musicbrainz/libmusicbrainz_3.0.2.bb5
-rw-r--r--recipes/mutt/mutt-1.5.19/529838-gnutls-autoconf.patch20
-rw-r--r--recipes/mutt/mutt_1.5.19.bb5
-rw-r--r--recipes/mythtv/files/prefix-etc.patch11
-rw-r--r--recipes/mythtv/mythplugins/MythBackend.php.patch13
-rw-r--r--recipes/mythtv/mythplugins_0.22+fixes.bb330
-rw-r--r--recipes/mythtv/mythplugins_0.22.bb330
-rw-r--r--recipes/mythtv/myththemes_0.22+fixes.bb22
-rw-r--r--recipes/mythtv/myththemes_0.22.bb22
-rw-r--r--recipes/mythtv/mythtv-0.18.1/msmpeg-underscore-pic.patch85
-rw-r--r--recipes/mythtv/mythtv-0.20/configure.patch90
-rw-r--r--recipes/mythtv/mythtv-0.20/libmyth-libdir.patch11
-rw-r--r--recipes/mythtv/mythtv-0.21/configure.patch183
-rw-r--r--recipes/mythtv/mythtv-0.21/ffmpeg-arm-update.diff1669
-rw-r--r--recipes/mythtv/mythtv-0.21/no-cortex-deadlock.patch115
-rw-r--r--recipes/mythtv/mythtv-0.22/configure.patch61
-rw-r--r--recipes/mythtv/mythtv/configure.patch187
-rw-r--r--recipes/mythtv/mythtv/ifdef-qt.diff13
-rw-r--r--recipes/mythtv/mythtv_0.18.1.bb50
-rw-r--r--recipes/mythtv/mythtv_0.20.bb73
-rw-r--r--recipes/mythtv/mythtv_0.21.bb108
-rw-r--r--recipes/mythtv/mythtv_0.22+fixes.bb103
-rw-r--r--recipes/mythtv/mythtv_0.22.bb103
-rw-r--r--recipes/mythtv/mythtv_svn.bb89
-rw-r--r--recipes/navit/navit-icons/configure.in1
-rw-r--r--recipes/navit/navit-icons_svn.bb7
-rw-r--r--recipes/navit/navit_svn.bb8
-rw-r--r--recipes/net-snmp/net-snmp-5.4.2.1/CVE-2008-6123.patch21
-rw-r--r--recipes/net-snmp/net-snmp.inc2
-rw-r--r--recipes/net-snmp/net-snmp_5.4.2.1.bb3
-rw-r--r--recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-db43.patch32
-rw-r--r--recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-newerdb.patch28
-rw-r--r--recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-setXid.patch14
-rw-r--r--recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-xfs.patch22
-rw-r--r--recipes/netatalk/netatalk-2.0.5/netatalk-dbd.patch35
-rw-r--r--recipes/netatalk/netatalk_2.0.3.bb46
-rw-r--r--recipes/netatalk/netatalk_2.0.5.bb46
-rw-r--r--recipes/netbase/netbase/bug20/hosts3
-rw-r--r--recipes/netbase/netbase/bug20/interfaces29
-rw-r--r--recipes/netbase/netbase/hipox/interfaces17
-rw-r--r--recipes/netbase/netbase_4.21.bb4
-rw-r--r--recipes/networkmanager/network-manager-applet_0.8.bb26
-rw-r--r--recipes/networkmanager/network-manager-applet_git.bb6
-rw-r--r--recipes/networkmanager/networkmanager-0.7.inc4
-rw-r--r--recipes/networkmanager/networkmanager-openvpn_0.8.bb29
-rw-r--r--recipes/networkmanager/networkmanager_0.7.999.bb35
-rw-r--r--recipes/networkmanager/networkmanager_0.8.bb35
-rw-r--r--recipes/nsd/nsd_2.0.0.bb22
-rw-r--r--recipes/nsd/nsd_3.2.4.bb14
-rw-r--r--recipes/numptyphysics/numptyphysics_svn.bb1
-rw-r--r--recipes/obsolete/efl1/epsilon_svn.bb24
-rw-r--r--recipes/obsolete/efl1/etk-native_svn.bb (renamed from recipes/efl1/etk-native_svn.bb)0
-rw-r--r--recipes/obsolete/efl1/etk/etk_scrolled_view_dragable_combined_bouncy.patch (renamed from recipes/efl1/etk/etk_scrolled_view_dragable_combined_bouncy.patch)0
-rw-r--r--recipes/obsolete/efl1/etk_svn.bb43
-rw-r--r--recipes/obsolete/openmoko-3rdparty/babiloo-efl_2.0.9-3.bb (renamed from recipes/openmoko-3rdparty/babiloo-efl_2.0.9-3.bb)0
-rw-r--r--recipes/obsolete/openmoko-3rdparty/babiloo-efl_2.0.9-4.bb (renamed from recipes/openmoko-3rdparty/babiloo-efl_2.0.9-4.bb)0
-rw-r--r--recipes/obsolete/pixman/pixman-0.17.6/0001-Dropped-delegation-support-for-pixman_blt.patch356
-rw-r--r--recipes/obsolete/pixman/pixman-0.17.6/0002-Test-program-for-pixman_blt-function.patch178
-rw-r--r--recipes/obsolete/pixman/pixman-0.17.6/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch (renamed from recipes/xorg-lib/pixman/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch)0
-rw-r--r--recipes/obsolete/pixman/pixman-0.17.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch (renamed from recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch)0
-rw-r--r--recipes/obsolete/pixman/pixman-0.17.6/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch (renamed from recipes/xorg-lib/pixman/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch)0
-rw-r--r--recipes/obsolete/pixman/pixman-0.17.6/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch94
-rw-r--r--recipes/obsolete/pixman/pixman_0.17.6.bb32
-rw-r--r--recipes/obsolete/python/python-epsilon_svn.bb6
-rw-r--r--recipes/obsolete/python/python-etk_svn.bb13
-rw-r--r--recipes/obsolete/shr/etk-theme-neo_git.bb13
-rw-r--r--recipes/obsolete/shr/etk-theme-shr_git.bb9
-rw-r--r--recipes/obsolete/shr/etk-theme.inc (renamed from recipes/shr/etk-theme.inc)0
-rw-r--r--recipes/obsolete/shr/libframeworkd-phonegui-efl-theme-neo_git.bb27
-rw-r--r--recipes/obsolete/shr/libframeworkd-phonegui-efl-theme.inc (renamed from recipes/shr/libframeworkd-phonegui-efl-theme.inc)0
-rw-r--r--recipes/obsolete/shr/libframeworkd-phonegui-efl2_git.bb19
-rw-r--r--recipes/obsolete/shr/libframeworkd-phonegui-efl_git.bb23
-rw-r--r--recipes/obsolete/shr/libframeworkd-phonegui_git.bb16
-rw-r--r--recipes/obsolete/shr/shr-contacts_git.bb14
-rw-r--r--recipes/obsolete/shr/shr-dialer_git.bb14
-rw-r--r--recipes/obsolete/shr/shr-messages_git.bb14
-rw-r--r--recipes/obsolete/xorg-xserver/xserver-xorg-1.6.1/drmfix.patch (renamed from recipes/xorg-xserver/xserver-xorg-1.6.1/drmfix.patch)0
-rw-r--r--recipes/obsolete/xorg-xserver/xserver-xorg-1.6.1/hack-assume-pixman-supports-overlapped-blt.patch (renamed from recipes/xorg-xserver/xserver-xorg-1.6.1/hack-assume-pixman-supports-overlapped-blt.patch)0
-rw-r--r--recipes/obsolete/xorg-xserver/xserver-xorg-1.7.3/hack-assume-pixman-supports-overlapped-blt.patch (renamed from recipes/xorg-xserver/xserver-xorg-1.7.3/hack-assume-pixman-supports-overlapped-blt.patch)0
-rw-r--r--recipes/obsolete/xorg-xserver/xserver-xorg_1.6.1.bb (renamed from recipes/xorg-xserver/xserver-xorg_1.6.1.bb)0
-rw-r--r--recipes/obsolete/xorg-xserver/xserver-xorg_1.7.2.bb19
-rw-r--r--recipes/obsolete/xorg-xserver/xserver-xorg_1.7.3.bb27
-rw-r--r--recipes/ogre/ogre-egl_svn.bb2
-rw-r--r--recipes/omgps/omgps_svn.bb1
-rw-r--r--recipes/omniorb/files/omniorb_4.1.4.patch13
-rw-r--r--recipes/omniorb/omniorb-native_4.1.4.bb23
-rw-r--r--recipes/omniorb/omniorb_4.1.4.bb45
-rw-r--r--recipes/omoney/omoney_svn.bb1
-rw-r--r--recipes/omview/omview_svn.bb1
-rw-r--r--recipes/openldap/openldap-2.4.21/openldap-m4-pthread.patch (renamed from recipes/openldap/openldap-2.4.17/openldap-m4-pthread.patch)0
-rw-r--r--recipes/openldap/openldap_2.4.17.bb290
-rw-r--r--recipes/openldap/openldap_2.4.21.bb292
-rw-r--r--recipes/openmoko-3rdparty/babiloo-efl_2.0.9-10.bb40
-rw-r--r--recipes/openmoko-3rdparty/babiloo-efl_bzr.bb1
-rw-r--r--recipes/openmoko-3rdparty/guitartune_svn.bb1
-rw-r--r--recipes/openmoko-3rdparty/jefliks_git.bb16
-rw-r--r--recipes/openmoko-3rdparty/mcnavi_0.2.5.bb12
-rw-r--r--recipes/openmoko-3rdparty/neolight_svn.bb24
-rw-r--r--recipes/openmoko-3rdparty/neomis_svn.bb1
-rw-r--r--recipes/openmoko-3rdparty/numberx_svn.bb1
-rw-r--r--recipes/openmoko-3rdparty/om-neon_svn.bb2
-rw-r--r--recipes/openmoko-3rdparty/podboy_svn.bb4
-rw-r--r--recipes/openmoko-3rdparty/ventura_svn.bb9
-rw-r--r--recipes/openmoko-examples/openmoko-panel-demo-simple_svn.bb1
-rw-r--r--recipes/openmoko-examples/openmoko-panel-demo_svn.bb1
-rw-r--r--recipes/openmoko-panel-plugins/openmoko-panel-battery_svn.bb1
-rw-r--r--recipes/openmoko-panel-plugins/openmoko-panel-bt_svn.bb1
-rw-r--r--recipes/openmoko-panel-plugins/openmoko-panel-clock_svn.bb1
-rw-r--r--recipes/openmoko-panel-plugins/openmoko-panel-gps_svn.bb1
-rw-r--r--recipes/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb1
-rw-r--r--recipes/openmoko-panel-plugins/openmoko-panel-mainmenu_svn.bb1
-rw-r--r--recipes/openmoko-panel-plugins/openmoko-panel-memory_svn.bb1
-rw-r--r--recipes/openmoko-panel-plugins/openmoko-panel-usb_svn.bb1
-rw-r--r--recipes/openmoko-panel-plugins/openmoko-panel-wifi_svn.bb1
-rw-r--r--recipes/openmoko-projects/assassin-thumbnail.bb18
-rw-r--r--recipes/openmoko-projects/assassin-thumbnail_svn.bb19
-rw-r--r--recipes/openmoko-projects/assassin_svn.bb1
-rw-r--r--recipes/openmoko-projects/diversity-daemon_svn.bb1
-rw-r--r--recipes/openmoko-projects/diversity-radar_svn.bb1
-rw-r--r--recipes/openmoko-projects/enlazar_svn.bb1
-rw-r--r--recipes/openmoko-projects/etk-theme-ninja_svn.bb1
-rw-r--r--recipes/openmoko-projects/illume-theme-asu_svn.bb1
-rw-r--r--recipes/openmoko-projects/om-settings_svn.bb1
-rw-r--r--recipes/openmoko-projects/openmoko-agpsui_svn.bb1
-rw-r--r--recipes/openmoko-projects/pyefl-sudoku_svn.bb1
-rw-r--r--recipes/openmoko-system/ompower_svn.bb1
-rw-r--r--recipes/openmoko-tools/app-restarter_svn.bb1
-rw-r--r--recipes/openmoko-tools/openmoko-set-root-password.bb26
-rw-r--r--recipes/openmoko-tools/openmoko-set-root-password_svn.bb27
-rw-r--r--recipes/openmoko-tools/openmoko-toolchain-scripts_svn.bb1
-rw-r--r--recipes/openmoko2/libjana_svn.bb1
-rw-r--r--recipes/openmoko2/libmokogsmd2_svn.bb1
-rw-r--r--recipes/openmoko2/libmokojournal2_svn.bb1
-rw-r--r--recipes/openmoko2/libmokopanelui2_svn.bb1
-rw-r--r--recipes/openmoko2/libmokoui2_svn.bb1
-rw-r--r--recipes/openmoko2/moko-gtk-engine_svn.bb1
-rw-r--r--recipes/openmoko2/neod_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-alsa-scenarios.bb24
-rw-r--r--recipes/openmoko2/openmoko-alsa-scenarios_svn.bb25
-rw-r--r--recipes/openmoko2/openmoko-appearance_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-appmanager2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-browser2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-calculator2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-common2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-contacts2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-dates2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-dialer2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-feedreader2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-firststart2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-icon-theme-standard2-qvga_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-icon-theme-standard2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-mediaplayer2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-messages2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-sample2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-sound-theme-standard2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-tasks2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-theme-standard2-qvga_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-theme-standard2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-today2-folders_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-today2_svn.bb1
-rw-r--r--recipes/openmoko2/openmoko-worldclock2_svn.bb1
-rw-r--r--recipes/openssh/openssh-5.2p1/shr/sshd_config2
-rw-r--r--recipes/openssl/openssl-0.9.8j/debian.patch561
-rw-r--r--recipes/openssl/openssl-0.9.8j/shared-libs.patch81
-rw-r--r--recipes/openssl/openssl-0.9.8m/configure-targets.patch (renamed from recipes/openssl/openssl-0.9.8j/configure-targets.patch)0
-rw-r--r--recipes/openssl/openssl-0.9.8m/debian.patch546
-rw-r--r--recipes/openssl/openssl-0.9.8m/oe-ldflags.patch (renamed from recipes/openssl/openssl-0.9.8j/oe-ldflags.patch)0
-rw-r--r--recipes/openssl/openssl-0.9.8m/shared-libs.patch48
-rw-r--r--recipes/openssl/openssl-native_0.9.8j.bb22
-rw-r--r--recipes/openssl/openssl-native_0.9.8m.bb24
-rw-r--r--recipes/openssl/openssl.inc4
-rw-r--r--recipes/openssl/openssl_0.9.8j.bb14
-rw-r--r--recipes/openssl/openssl_0.9.8m.bb16
-rw-r--r--recipes/openswan/openswan_2.2.0.bb3
-rw-r--r--recipes/openswan/openswan_2.4.7.bb3
-rw-r--r--recipes/opensync/libsyncml_0.5.4.bb2
-rw-r--r--recipes/opie-packagemanager/files/opkg_update.patch469
-rw-r--r--recipes/opie-packagemanager/opie-packagemanager_1.2.4.bb5
-rw-r--r--recipes/opkg/opkg-collateral.bb11
-rw-r--r--recipes/opkg/opkg-collateral/tmp_dir4
-rw-r--r--recipes/opkg/opkg.inc6
-rw-r--r--recipes/opkg/opkg_svn.bb2
-rw-r--r--recipes/opkg/update-alternatives-merge.inc3
-rw-r--r--recipes/orc/files/03_orcutils.patch185
-rw-r--r--recipes/orc/files/99_autoreconf.patch20549
-rw-r--r--recipes/orc/orc.inc19
-rw-r--r--recipes/orc/orc_0.4.3.bb11
-rw-r--r--recipes/orinoco/spectrum-fw.bb10
-rwxr-xr-xrecipes/orinoco/spectrum-fw/get_symbol_fw22
-rw-r--r--recipes/pam/libpam-base-files.bb2
-rw-r--r--recipes/pam/libpam-base-files/pam.d/polkit-16
-rw-r--r--recipes/pango/pango-1.24.4/CVE-2010-0421.patch32
-rw-r--r--recipes/pango/pango-native-1.22.0/no-tests.patch10
-rw-r--r--recipes/pango/pango-native_1.22.0.bb12
-rw-r--r--recipes/pango/pango.inc5
-rw-r--r--recipes/pango/pango_1.24.4.bb4
-rw-r--r--recipes/perl/libdbd-sqlite-perl_1.29.bb27
-rw-r--r--recipes/perl/libxml-parser-perl_2.34.bb2
-rw-r--r--recipes/perl/libxml-parser-perl_2.36.bb2
-rw-r--r--recipes/perl/perl-5.8.4/Makefile.SH.patch298
-rw-r--r--recipes/perl/perl-5.8.4/Makefile.patch23
-rw-r--r--recipes/perl/perl-5.8.4/config.sh-arm-linux.patch46
-rw-r--r--recipes/perl/perl-5.8.4/config.sh-i686-linux1024
-rw-r--r--recipes/perl/perl-5.8.4/config.sh-mipsel-linux1026
-rw-r--r--recipes/perl/perl-5.8.4/uclibc.patch26
-rw-r--r--recipes/perl/perl-5.8.7/Makefile.SH.patch206
-rw-r--r--recipes/perl/perl-5.8.7/Makefile.patch18
-rw-r--r--recipes/perl/perl-5.8.7/config.sh-arm-linux1029
-rw-r--r--recipes/perl/perl-5.8.7/config.sh-arm-linux.patch34
-rw-r--r--recipes/perl/perl-5.8.7/config.sh-armeb-linux1028
-rw-r--r--recipes/perl/perl-5.8.7/config.sh-i386-linux1028
-rw-r--r--recipes/perl/perl-5.8.7/config.sh-i486-linux1028
-rw-r--r--recipes/perl/perl-5.8.7/config.sh-i586-linux1028
-rw-r--r--recipes/perl/perl-5.8.7/config.sh-i686-linux1028
-rw-r--r--recipes/perl/perl-5.8.7/config.sh-mipsel-linux1031
-rw-r--r--recipes/perl/perl-5.8.7/config.sh-powerpc-linux1029
-rw-r--r--recipes/perl/perl-5.8.7/config.sh-sh3-linux1028
-rw-r--r--recipes/perl/perl-5.8.7/config.sh-sh4-linux1028
-rw-r--r--recipes/perl/perl-5.8.7/config.sh-x86_64-linux1026
-rw-r--r--recipes/perl/perl-5.8.7/libperl-5.8.3-create-libperl-soname.patch11
-rw-r--r--recipes/perl/perl-5.8.7/makefile-usegcc-to-link.patch27
-rw-r--r--recipes/perl/perl-5.8.7/override-generate-sh.patch16
-rw-r--r--recipes/perl/perl-native_5.8.4.bb33
-rw-r--r--recipes/perl/perl-native_5.8.7.bb38
-rw-r--r--recipes/perl/perl-native_5.8.8.bb2
-rw-r--r--recipes/perl/perl-rdepends_5.8.7.inc1137
-rw-r--r--recipes/perl/perl.inc63
-rw-r--r--recipes/perl/perl_5.8.4.bb29
-rw-r--r--recipes/perl/perl_5.8.7.bb98
-rw-r--r--recipes/perl/perl_5.8.8.bb7
-rw-r--r--recipes/php/php-5.2.13/CVE-2010-0397.patch58
-rw-r--r--recipes/php/php-5.2.13/acinclude-xml2-config.patch (renamed from recipes/php/php-5.2.11/acinclude-xml2-config.patch)0
-rw-r--r--recipes/php/php-5.2.13/imap-fix-autofoo.patch (renamed from recipes/php/php-5.2.11/imap-fix-autofoo.patch)0
-rw-r--r--recipes/php/php-5.2.13/pear-makefile.patch (renamed from recipes/php/php-5.2.11/pear-makefile.patch)0
-rw-r--r--recipes/php/php-5.2.13/php-m4-divert.patch83
-rw-r--r--recipes/php/php-5.2.6/php-m4-divert.patch83
-rw-r--r--recipes/php/php-5.3.0/php-m4-divert.patch83
-rw-r--r--recipes/php/php-5.3.2/CVE-2010-0397.patch57
-rw-r--r--recipes/php/php-5.3.2/acinclude-xml2-config.patch18
-rw-r--r--recipes/php/php-5.3.2/pear-makefile.patch11
-rw-r--r--recipes/php/php-5.3.2/php-m4-divert.patch83
-rw-r--r--recipes/php/php-native_5.3.2.bb9
-rw-r--r--recipes/php/php.inc5
-rw-r--r--recipes/php/php_5.2.11.bb94
-rw-r--r--recipes/php/php_5.2.13.bb98
-rw-r--r--recipes/pidgin/pidgin_2.6.6.bb22
-rw-r--r--recipes/pingus/files/pingus-gta012.sh4
-rw-r--r--recipes/pingus/pingus_0.7.2.bb2
-rw-r--r--recipes/pngcrush/pngcrush-native_1.7.9.bb (renamed from recipes/pngcrush/pngcrush-native_1.6.4.bb)0
-rw-r--r--recipes/pngcrush/pngcrush_1.6.4.bb14
-rw-r--r--recipes/pngcrush/pngcrush_1.7.9.bb18
-rw-r--r--recipes/pointercal/files/archos5it/pointercal1
-rw-r--r--recipes/pointercal/files/htc-msm7/pointercal1
-rw-r--r--recipes/pointercal/pointercal_0.0.bb2
-rw-r--r--recipes/policykit/policykit-gnome_0.96.bb24
-rw-r--r--recipes/policykit/policykit_0.96.bb64
-rw-r--r--recipes/powervr-drivers/bc-cat-omap3-module/rc.bccat22
-rw-r--r--recipes/powervr-drivers/bc-cat-omap3-module_0.1.0.bb2
-rw-r--r--recipes/powervr-drivers/bc-cat.inc51
-rw-r--r--recipes/powervr-drivers/kernel-module-bc_git.bb41
-rwxr-xr-xrecipes/powervr-drivers/libgles-omap3-3.00.00.09/rc.pvr58
-rwxr-xr-xrecipes/powervr-drivers/libgles-omap3-3.01.00.02/rc.pvr58
-rw-r--r--recipes/powervr-drivers/libgles-omap3.inc255
-rw-r--r--recipes/powervr-drivers/libgles-omap3/chameleonman.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/evilskull.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/fivespheres.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/lighting.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/mouse.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/optimizemesh.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/particles.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/polybump.desktop8
-rwxr-xr-xrecipes/powervr-drivers/libgles-omap3/rc.pvr60
-rw-r--r--recipes/powervr-drivers/libgles-omap3/sample.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/shaders.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/shadowtechniques.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/skybox.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/skybox2.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/trilinear.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/userclipplanes.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3/vase.desktop8
-rw-r--r--recipes/powervr-drivers/libgles-omap3_3.00.00.01.bb10
-rw-r--r--recipes/powervr-drivers/libgles-omap3_3.00.00.05.bb12
-rw-r--r--recipes/powervr-drivers/libgles-omap3_3.00.00.06.bb21
-rw-r--r--recipes/powervr-drivers/libgles-omap3_3.00.00.08.bb12
-rw-r--r--recipes/powervr-drivers/libgles-omap3_3.00.00.09.bb30
-rw-r--r--recipes/powervr-drivers/libgles-omap3_3.01.00.02.bb19
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules/0001-Compile-fixes-for-DSS2.patch96
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules/0001-New-build-system-for-SGX.patch247
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules/0002-Compile-fixes-for-DSS2.patch11
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules/build_es3.x_sgx.patch11
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules/omap3-sgx-modules-1.3.13.1607.tar.bz2bin178370 -> 0 bytes
-rwxr-xr-xrecipes/powervr-drivers/omap3-sgx-modules/proc-interface.patch22
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules/rotation-dss2.patch21
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules/spurious-irq-fix.diff11
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules_1.2.12.838.bb19
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules_1.3.13.1397.bb26
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules_1.3.13.1607.bb23
-rw-r--r--recipes/preboot/linux-preboot.inc1
-rw-r--r--recipes/procps/procps-3.1.15/install.patch16
-rw-r--r--recipes/procps/procps-3.1.15/procps_3.1.15-2.diff5133
-rw-r--r--recipes/procps/procps-3.2.1/install.patch16
-rw-r--r--recipes/procps/procps-3.2.5/pagesz-not-constant.patch22
-rw-r--r--recipes/procps/procps-3.2.7/install.patch27
-rw-r--r--recipes/procps/procps-3.2.7/pagesz-not-constant.patch22
-rw-r--r--recipes/procps/procps-3.2.7/procmodule.patch36
-rw-r--r--recipes/procps/procps-3.2.7/psmodule.patch21
-rw-r--r--recipes/procps/procps-3.2.8/60_linux_version_init.dpatch61
-rw-r--r--recipes/procps/procps-3.2.8/install.patch (renamed from recipes/procps/procps-3.2.5/install.patch)0
-rw-r--r--recipes/procps/procps-3.2.8/linux-limits.patch (renamed from recipes/procps/procps-3.2.7/linux-limits.patch)0
-rw-r--r--recipes/procps/procps-3.2.8/pagesz-not-constant.patch (renamed from recipes/procps/procps-3.2.1/pagesz-not-constant.patch)0
-rw-r--r--recipes/procps/procps-3.2.8/procmodule.patch (renamed from recipes/procps/procps-3.2.5/procmodule.patch)0
-rw-r--r--recipes/procps/procps-3.2.8/procps.init (renamed from recipes/procps/procps-3.2.7/procps.init)0
-rw-r--r--recipes/procps/procps-3.2.8/psmodule.patch (renamed from recipes/procps/procps-3.2.5/psmodule.patch)0
-rw-r--r--recipes/procps/procps-3.2.8/sysctl.conf (renamed from recipes/procps/procps-3.2.7/sysctl.conf)0
-rw-r--r--recipes/procps/procps.inc61
-rw-r--r--recipes/procps/procps_3.1.15.bb9
-rw-r--r--recipes/procps/procps_3.2.1.bb11
-rw-r--r--recipes/procps/procps_3.2.5.bb45
-rw-r--r--recipes/procps/procps_3.2.7.bb67
-rw-r--r--recipes/procps/procps_3.2.8.bb12
-rw-r--r--recipes/proftpd/proftpd_1.3.2b.bb36
-rw-r--r--recipes/proftpd/proftpd_1.3.2e.bb39
-rw-r--r--recipes/pulseaudio/files/CVE-2009-1299.patch86
-rw-r--r--recipes/pulseaudio/files/CVE-2009-1894.patch49
-rw-r--r--recipes/pulseaudio/pulseaudio_0.9.15.bb4
-rw-r--r--recipes/pulseaudio/pulseaudio_0.9.19.bb4
-rw-r--r--recipes/pulseaudio/pulseaudio_0.9.21.bb1
-rw-r--r--recipes/python/python-epsilon_svn.bb5
-rw-r--r--recipes/python/python-etk_svn.bb11
-rw-r--r--recipes/python/python-gst/python-path.patch5
-rw-r--r--recipes/python/python-gst_0.10.17.bb2
-rw-r--r--recipes/python/python-paste_1.7.2.bb15
-rw-r--r--recipes/python/python-phoneutils_git.bb1
-rw-r--r--recipes/python/python-pygame-1.8.1/Setup63
-rw-r--r--recipes/python/python-pygame_1.8.1.bb30
-rw-r--r--recipes/python/python-pygame_1.9.1.bb26
-rw-r--r--recipes/python/python-pygobject-native_2.20.0.bb14
-rw-r--r--recipes/python/python-pygobject_2.20.0.bb2
-rw-r--r--recipes/python/python-pysqlite2-native_2.4.0.bb10
-rw-r--r--recipes/python/python-wsgiref_0.1.2.bb14
-rw-r--r--recipes/qemu/qemu-0.10.3/22_net_tuntap_stall.patch13
-rw-r--r--recipes/qemu/qemu-0.10.3/32_syscall_sysctl.patch55
-rw-r--r--recipes/qemu/qemu-0.10.3/61_safe_64bit_int.patch27
-rw-r--r--recipes/qemu/qemu-0.10.3/fix_fortify_source_compilation.patch13
-rw-r--r--recipes/qemu/qemu-0.10.3/no-strip.patch26
-rw-r--r--recipes/qemu/qemu-0.12.3/06_exit_segfault.patch (renamed from recipes/qemu/qemu-0.10.3/06_exit_segfault.patch)0
-rw-r--r--recipes/qemu/qemu-0.12.3/11_signal_sigaction.patch (renamed from recipes/qemu/qemu-0.10.3/11_signal_sigaction.patch)0
-rw-r--r--recipes/qemu/qemu-0.12.3/22_net_tuntap_stall.patch25
-rw-r--r--recipes/qemu/qemu-0.12.3/31_syscalls.patch (renamed from recipes/qemu/qemu-0.10.3/31_syscalls.patch)0
-rw-r--r--recipes/qemu/qemu-0.12.3/32_syscall_sysctl.patch55
-rw-r--r--recipes/qemu/qemu-0.12.3/52_ne2000_return.patch (renamed from recipes/qemu/qemu-0.10.3/52_ne2000_return.patch)0
-rw-r--r--recipes/qemu/qemu-0.12.3/63_sparc_build.patch (renamed from recipes/qemu/qemu-0.10.3/63_sparc_build.patch)0
-rw-r--r--recipes/qemu/qemu-0.12.3/64_ppc_asm_constraints.patch (renamed from recipes/qemu/qemu-0.10.3/64_ppc_asm_constraints.patch)0
-rw-r--r--recipes/qemu/qemu-0.12.3/66_tls_ld.patch (renamed from recipes/qemu/qemu-0.10.3/66_tls_ld.patch)0
-rw-r--r--recipes/qemu/qemu-0.12.3/91-oh-sdl-cursor.patch (renamed from recipes/qemu/qemu-0.10.3/91-oh-sdl-cursor.patch)0
-rw-r--r--recipes/qemu/qemu-0.12.3/fix_baum_c_compilation.patch (renamed from recipes/qemu/qemu-0.10.3/fix_baum_c_compilation.patch)0
-rw-r--r--recipes/qemu/qemu-0.12.3/fix_fortify_source_compilation.patch15
-rw-r--r--recipes/qemu/qemu-0.12.3/fix_segfault.patch (renamed from recipes/qemu/qemu-0.10.3/fix_segfault.patch)0
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch23
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch18
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch25
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch17
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch45
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch26
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch21
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch401
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch18
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch34
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch49
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch56
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch22
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch21
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch105
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch17
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch27
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch18
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch18
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch44
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch55
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch18
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch223
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch857
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/compiler.patch10
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/configure.patch13
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch46
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/makefile.patch37
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/no-strip.patch22
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch219
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch294
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch892
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch31
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch52
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch13
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch445
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch23
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch28
-rw-r--r--recipes/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch25
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/05_non-fatal_if_linux_hd_missing.patch17
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/06_exit_segfault.patch45
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/10_signal_jobs.patch26
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/11_signal_sigaction.patch21
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/22_net_tuntap_stall.patch18
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/31_syscalls.patch48
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/32_syscall_sysctl.patch55
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/33_syscall_ppc_clone.patch22
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/39_syscall_fadvise64.patch21
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/52_ne2000_return.patch17
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/61_safe_64bit_int.patch27
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/63_sparc_build.patch18
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/64_ppc_asm_constraints.patch18
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/65_kfreebsd.patch35
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/66_tls_ld.patch55
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/91-oh-sdl-cursor.patch18
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/configure_symlinkpath_fix.patch28
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/fix_baum_c_compilation.patch30
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/fix_brk.patch59
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/fix_dirent_h_include.patch12
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/fix_protection_bits.patch14
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/fix_segfault.patch37
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/no-strip.patch26
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/qemu-0.9.0-nptl.patch1100
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/qemu-amd64-32b-mapping-0.9.0.patch37
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/qemu-n800-support.patch2381
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/revert_arm_tcg.patch.gzbin97991 -> 0 bytes
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/series25
-rw-r--r--recipes/qemu/qemu-0.9.1+svn/workaround_bad_futex_headers.patch25
-rw-r--r--recipes/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch23
-rw-r--r--recipes/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch26
-rw-r--r--recipes/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch17
-rw-r--r--recipes/qemu/qemu-0.9.1/06_exit_segfault.patch45
-rw-r--r--recipes/qemu/qemu-0.9.1/10_signal_jobs.patch26
-rw-r--r--recipes/qemu/qemu-0.9.1/11_signal_sigaction.patch21
-rw-r--r--recipes/qemu/qemu-0.9.1/22_net_tuntap_stall.patch18
-rw-r--r--recipes/qemu/qemu-0.9.1/31_syscalls.patch48
-rw-r--r--recipes/qemu/qemu-0.9.1/32_syscall_sysctl.patch55
-rw-r--r--recipes/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch22
-rw-r--r--recipes/qemu/qemu-0.9.1/39_syscall_fadvise64.patch21
-rw-r--r--recipes/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch104
-rw-r--r--recipes/qemu/qemu-0.9.1/52_ne2000_return.patch17
-rw-r--r--recipes/qemu/qemu-0.9.1/61_safe_64bit_int.patch27
-rw-r--r--recipes/qemu/qemu-0.9.1/63_sparc_build.patch18
-rw-r--r--recipes/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch18
-rw-r--r--recipes/qemu/qemu-0.9.1/65_kfreebsd.patch35
-rw-r--r--recipes/qemu/qemu-0.9.1/66_tls_ld.patch55
-rw-r--r--recipes/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch18
-rw-r--r--recipes/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch28
-rw-r--r--recipes/qemu/qemu-0.9.1/disable-error-in-configure.patch17
-rw-r--r--recipes/qemu/qemu-0.9.1/fix_segfault.patch37
-rw-r--r--recipes/qemu/qemu-0.9.1/no-strip.patch22
-rw-r--r--recipes/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch219
-rw-r--r--recipes/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch929
-rw-r--r--recipes/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch37
-rw-r--r--recipes/qemu/qemu-0.9.1/series25
-rw-r--r--recipes/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch25
-rw-r--r--recipes/qemu/qemu-0.9.1/writev_fix.patch17
-rw-r--r--recipes/qemu/qemu-gcc3-check.inc11
-rw-r--r--recipes/qemu/qemu-native.inc6
-rw-r--r--recipes/qemu/qemu-native_0.10.3.bb2
-rw-r--r--recipes/qemu/qemu-native_0.9.1.bb5
-rw-r--r--recipes/qemu/qemu-native_20070613.bb5
-rw-r--r--recipes/qemu/qemu-native_cvs.bb5
-rw-r--r--recipes/qemu/qemu-native_svn.bb5
-rw-r--r--recipes/qemu/qemu_0.10.3.bb36
-rw-r--r--recipes/qemu/qemu_0.12.3.bb40
-rw-r--r--recipes/qemu/qemu_0.9.1.bb49
-rw-r--r--recipes/qemu/qemu_20070613.bb48
-rw-r--r--recipes/qemu/qemu_cvs.bb55
-rw-r--r--recipes/qemu/qemu_svn.bb51
-rw-r--r--recipes/qi/files/0002-gta02-add-kernel-params-to-boot-from-ubifs-ubi0-om-g.patch28
-rw-r--r--recipes/qi/files/rootfstype.ubifs.patch45
-rw-r--r--recipes/qi/qi-ubi_git.bb2
-rw-r--r--recipes/qi/qi_git.bb3
-rw-r--r--recipes/qmake/files/qmake-hack.diff15
-rw-r--r--recipes/qmake/qmake2-native.inc67
-rw-r--r--recipes/qmake/qmake2-native_2.10a.bb12
-rw-r--r--recipes/qmake/qmake2-sdk_2.10a.bb17
-rw-r--r--recipes/qmake/qmake2.inc69
-rw-r--r--recipes/qmake/qmake2/linux-oe-qmake.conf (renamed from recipes/qmake/qmake2-native/linux-oe-qmake.conf)0
-rw-r--r--recipes/qmake/qmake2_2.10a.bb18
-rw-r--r--recipes/qt4/files/qt-config.patch2
-rw-r--r--recipes/qt4/qt-4.6.1.inc47
-rw-r--r--recipes/qt4/qt-4.6.2.inc55
-rw-r--r--recipes/qt4/qt4-embedded-4.6.2/0006-freetype-host-includes.patch (renamed from recipes/qt4/qt4-embedded-4.6.1/0006-freetype-host-includes.patch)0
-rw-r--r--recipes/qt4/qt4-embedded-4.6.2/0008-qt-lib-infix.patch (renamed from recipes/qt4/qt4-embedded-4.6.1/0008-qt-lib-infix.patch)0
-rw-r--r--recipes/qt4/qt4-embedded-4.6.2/0010-no-simpledecoration-example.patch (renamed from recipes/qt4/qt4-embedded-4.6.1/0010-no-simpledecoration-example.patch)0
-rw-r--r--recipes/qt4/qt4-embedded-4.6.2/linux.conf (renamed from recipes/qt4/qt4-embedded-4.6.1/linux.conf)0
-rw-r--r--recipes/qt4/qt4-embedded-gles/linux.conf1
-rw-r--r--recipes/qt4/qt4-embedded-gles_4.6.0.bb2
-rw-r--r--recipes/qt4/qt4-embedded-gles_4.6.1.bb14
-rw-r--r--recipes/qt4/qt4-embedded-gles_4.6.2.bb14
-rw-r--r--recipes/qt4/qt4-embedded.inc2
-rw-r--r--recipes/qt4/qt4-embedded_4.6.0.bb2
-rw-r--r--recipes/qt4/qt4-embedded_4.6.1.bb6
-rw-r--r--recipes/qt4/qt4-embedded_4.6.2.bb8
-rw-r--r--recipes/qt4/qt4-tools-native.inc14
-rw-r--r--recipes/qt4/qt4-tools-native_4.4.3.bb16
-rw-r--r--recipes/qt4/qt4-tools-native_4.5.2.bb18
-rw-r--r--recipes/qt4/qt4-tools-native_4.6.0.bb8
-rw-r--r--recipes/qt4/qt4-tools-native_4.6.1.bb15
-rw-r--r--recipes/qt4/qt4-tools-native_4.6.2.bb9
-rw-r--r--recipes/qt4/qt4-tools-sdk_4.6.2.bb (renamed from recipes/qt4/qt4-tools-sdk_4.6.1.bb)0
-rw-r--r--recipes/qt4/qt4-x11-free-4.6.2/0008-qt-lib-infix.patch (renamed from recipes/qt4/qt4-x11-free-4.6.1/0008-qt-lib-infix.patch)0
-rw-r--r--recipes/qt4/qt4-x11-free-4.6.2/0010-no-simpledecoration-example.patch (renamed from recipes/qt4/qt4-x11-free-4.6.1/0010-no-simpledecoration-example.patch)0
-rw-r--r--recipes/qt4/qt4-x11-free-4.6.2/linux.conf (renamed from recipes/qt4/qt4-x11-free-4.6.1/linux.conf)0
-rw-r--r--recipes/qt4/qt4-x11-free-gles/linux.conf1
-rw-r--r--recipes/qt4/qt4-x11-free-gles_4.6.0.bb2
-rw-r--r--recipes/qt4/qt4-x11-free-gles_4.6.1.bb18
-rw-r--r--recipes/qt4/qt4-x11-free-gles_4.6.2.bb18
-rw-r--r--recipes/qt4/qt4-x11-free.inc2
-rw-r--r--recipes/qt4/qt4-x11-free_4.6.0.bb2
-rw-r--r--recipes/qt4/qt4-x11-free_4.6.1.bb11
-rw-r--r--recipes/qt4/qt4-x11-free_4.6.2.bb13
-rw-r--r--recipes/qt4/qt4.inc19
-rw-r--r--recipes/quilt/quilt-native.inc2
-rw-r--r--recipes/readline/readline-5.2/fix-includes.patch13
-rw-r--r--recipes/readline/readline_5.2.bb12
-rw-r--r--recipes/remoko/remoko-server_svn.bb1
-rw-r--r--recipes/remoko/remoko_svn.bb1
-rw-r--r--recipes/samba/samba-ads-3.3.0/wbstatic.patch194
-rw-r--r--recipes/samba/samba-ads_3.2.15.bb13
-rw-r--r--recipes/samba/samba-ads_3.2.8.bb11
-rw-r--r--recipes/samba/samba-ads_3.3.0.bb16
-rw-r--r--recipes/samba/samba-ads_3.3.9.bb15
-rw-r--r--recipes/samba/samba.inc2
-rw-r--r--recipes/samba/samba_3.2.15.bb27
-rw-r--r--recipes/samba/samba_3.2.8.bb25
-rw-r--r--recipes/samsung-soc-utils/s3c24xx-gpio_svn.bb1
-rw-r--r--recipes/samsung-soc-utils/s3c64xx-gpio_svn.bb1
-rw-r--r--recipes/samsung-soc-utils/sjf2410-linux-native_svn.bb1
-rw-r--r--recipes/schroedinger/files/Makefile.patch15
-rw-r--r--recipes/schroedinger/files/configure.ac.patch13
-rw-r--r--recipes/schroedinger/gst-plugin-schroedinger_1.0.5.bb14
-rw-r--r--recipes/schroedinger/gst-plugin-schroedinger_1.0.9.bb15
-rw-r--r--recipes/schroedinger/schroedinger.inc11
-rw-r--r--recipes/schroedinger/schroedinger_1.0.5.bb12
-rw-r--r--recipes/schroedinger/schroedinger_1.0.9.bb15
-rw-r--r--recipes/sdlperl/sdl-perl_1.20.3.bb4
-rw-r--r--recipes/shadow/shadow.inc32
-rw-r--r--recipes/shr/alsa-scenarii-shr_git.bb4
-rw-r--r--recipes/shr/e-wm-config-illume-shr_git.bb4
-rw-r--r--recipes/shr/e-wm-config-illume2-shr_git.bb29
-rw-r--r--recipes/shr/e-wm-theme-illume-neo_git.bb5
-rw-r--r--recipes/shr/elementary-theme-neo_git.bb9
-rw-r--r--recipes/shr/elementary-theme-o2_git.bb27
-rw-r--r--recipes/shr/etk-theme-neo_git.bb12
-rw-r--r--recipes/shr/etk-theme-shr_git.bb8
-rw-r--r--recipes/shr/gtk-theme-neo_git.bb5
-rw-r--r--recipes/shr/icon-theme-neo_git.bb5
-rw-r--r--recipes/shr/initscripts-shr/mountdevsubfs.sh13
-rw-r--r--recipes/shr/initscripts-shr_0.0.1.bb2
-rw-r--r--recipes/shr/libframeworkd-phonegui-efl-theme-neo_git.bb26
-rw-r--r--recipes/shr/libframeworkd-phonegui-efl2_git.bb18
-rw-r--r--recipes/shr/libframeworkd-phonegui-efl_git.bb22
-rw-r--r--recipes/shr/libframeworkd-phonegui_git.bb15
-rw-r--r--recipes/shr/libphone-ui-shr_git.bb4
-rw-r--r--recipes/shr/libphone-utils_git.bb1
-rw-r--r--recipes/shr/phoneui-apps_git.bb8
-rw-r--r--recipes/shr/phoneui-shr-theme-neo_git.bb29
-rw-r--r--recipes/shr/phoneui-shr-theme-o2_git.bb27
-rw-r--r--recipes/shr/shr-contacts_git.bb13
-rw-r--r--recipes/shr/shr-dialer_git.bb13
-rw-r--r--recipes/shr/shr-e-gadgets_git.bb19
-rw-r--r--recipes/shr/shr-launcher_svn.bb2
-rw-r--r--recipes/shr/shr-messages_git.bb13
-rw-r--r--recipes/shr/shr-theme-neo.bb4
-rw-r--r--recipes/shr/shr-theme-o2.bb10
-rw-r--r--recipes/smartmontools/smartmontools_5.39.1.bb1
-rw-r--r--recipes/smpeg/smpeg/as-fix.patch18
-rw-r--r--recipes/smpeg/smpeg_svn.bb40
-rw-r--r--recipes/snort/files/snort.fix.configure.in.HACK103
-rw-r--r--recipes/snort/snort_2.8.5.3.bb26
-rw-r--r--recipes/socat/files/compile.patch939
-rw-r--r--recipes/socat/files/ldflags.patch32
-rw-r--r--recipes/socat/files/xioinitialize.patch52
-rw-r--r--recipes/socat/files/xioopen.patch11
-rw-r--r--recipes/socat/socat_1.3.2.1.bb19
-rw-r--r--recipes/socat/socat_1.7.1.2.bb19
-rw-r--r--recipes/sofia-sip/sofia-sip.inc2
-rw-r--r--recipes/sofia-sip/sofia-sip_1.12.10.bb4
-rw-r--r--recipes/squashfs-tools/squashfs-tools-4.0/Makefile.patch68
-rw-r--r--recipes/squashfs-tools/squashfs-tools_4.0.bb3
-rw-r--r--recipes/squid/squid-native.inc9
-rw-r--r--recipes/squid/squid-native_2.6.STABLE14.bb12
-rw-r--r--recipes/squid/squid-native_2.7.STABLE8.bb6
-rw-r--r--recipes/squid/squid.inc59
-rw-r--r--recipes/squid/squid/squid-volatiles1
-rw-r--r--recipes/squid/squid/squid.init23
-rw-r--r--recipes/squid/squid_2.6.STABLE14.bb43
-rw-r--r--recipes/squid/squid_2.7.STABLE8.bb16
-rw-r--r--recipes/streamripper/streamripper_1.61.10.bb15
-rw-r--r--recipes/streamripper/streamripper_1.64.6.bb17
-rw-r--r--recipes/subversion/subversion_1.6.5.bb2
-rw-r--r--recipes/sudo/sudo_1.7.2p1.bb19
-rw-r--r--recipes/sudo/sudo_1.7.2p4.bb22
-rw-r--r--recipes/swt/swt-gtk.inc15
-rw-r--r--recipes/swt/swt3.3-gtk_3.3.1.bb12
-rw-r--r--recipes/swt/swt3.4-gtk-hildon_3.4.2.bb2
-rw-r--r--recipes/swt/swt3.4-gtk-hildon_3.4.bb7
-rw-r--r--recipes/swt/swt3.4-gtk_3.4.2.bb5
-rw-r--r--recipes/swt/swt3.4-gtk_3.4.bb14
-rw-r--r--recipes/swt/swt3.5-gtk_3.5.1.bb16
-rw-r--r--recipes/sylpheed/claws-mail_3.6.1.bb5
-rw-r--r--recipes/sysvinit/sysvinit_2.86.bb4
-rw-r--r--recipes/tangogps/tangogps.inc2
-rw-r--r--recipes/tangogps/tangogps_0.99.3.bb4
-rw-r--r--recipes/tasks/angstrom-task-gnome.bb5
-rw-r--r--recipes/tasks/task-base.bb6
-rw-r--r--recipes/tasks/task-cli-tools-python.bb4
-rw-r--r--recipes/tasks/task-cli-tools.bb6
-rw-r--r--recipes/tasks/task-efl.bb4
-rw-r--r--recipes/tasks/task-fso2-compliance.bb24
-rw-r--r--recipes/tasks/task-gpe-desktopapps.bb5
-rw-r--r--recipes/tasks/task-gpe.bb5
-rw-r--r--recipes/tasks/task-mamona-base.bb4
-rw-r--r--recipes/tasks/task-nas-server.bb10
-rw-r--r--recipes/tasks/task-openmoko-feed.bb4
-rw-r--r--recipes/tasks/task-openprotium.bb4
-rw-r--r--recipes/tasks/task-proper-tools.bb3
-rw-r--r--recipes/tasks/task-python-efl-examples.bb4
-rw-r--r--recipes/tasks/task-python-efl.bb4
-rw-r--r--recipes/tasks/task-sdk-bare.bb10
-rw-r--r--recipes/tasks/task-shr-feed.bb23
-rw-r--r--recipes/tasks/task-shr-minimal.bb46
-rw-r--r--recipes/tasks/task-shr.bb14
-rw-r--r--recipes/tasks/task-slugos.bb6
-rw-r--r--recipes/tasks/task-x11.bb2
-rw-r--r--recipes/telepathy/empathy_2.28.2.bb5
-rw-r--r--recipes/tgt/tgt_1.0.0.bb19
-rw-r--r--recipes/tgt/tgt_1.0.2.bb22
-rw-r--r--recipes/totem/totem_2.28.5.bb6
-rw-r--r--recipes/transmission/transmission_1.91.bb5
-rw-r--r--recipes/tslib/tslib.inc2
-rw-r--r--recipes/tslib/tslib/htc-msm7/ts.conf25
-rw-r--r--recipes/tslib/tslib/htc-msm7/tslib.sh7
-rw-r--r--recipes/tslib/tslib_1.0.bb2
-rw-r--r--recipes/tzdata/tzdata_2010b.bb4
-rw-r--r--recipes/u-boot/files/omapzoom2/0001-OMAP3-set-L1NEON-bit-in-aux-control-register.patch40
-rw-r--r--recipes/u-boot/u-boot-git/0001-cmd_i2c.c-reduced-subaddress-length-to-3-bytes.patch66
-rw-r--r--recipes/u-boot/u-boot-git/0002-cmd_bootm.c-made-subcommand-array-static.patch26
-rw-r--r--recipes/u-boot/u-boot-git/0002-cmd_itest.c-fix-pointer-dereferencing.patch40
-rw-r--r--recipes/u-boot/u-boot-git/0003-cmd_i2c.c-reworked-subcommand-handling.patch109
-rw-r--r--recipes/u-boot/u-boot-git/0004-cmd_i2c.c-sorted-commands-alphabetically.patch48
-rw-r--r--recipes/u-boot/u-boot-git/0005-cmd_i2c.c-added-i2c-read-to-memory-function.patch107
-rw-r--r--recipes/u-boot/u-boot-git/0007-cmd_setexpr-allow-memory-addresses-and-env-vars-in-e.patch89
-rw-r--r--recipes/u-boot/u-boot-git/Cortex-A8-erratum-725233.diff45
-rw-r--r--recipes/u-boot/u-boot-git/beagleboard/0001-omap3-clock.c-don-t-reprogram-clocks-when-trying-to-.patch50
-rw-r--r--recipes/u-boot/u-boot-git/beagleboard/0002-beagleboard-add-pinmuxing-for-beagleboard-XM.patch69
-rw-r--r--recipes/u-boot/u-boot-git/beagleboard/0003-beagleboard-move-muxing-into-revision-print-switch.patch53
-rw-r--r--recipes/u-boot/u-boot-git/beagleboard/720MHz.patch98
-rw-r--r--recipes/u-boot/u-boot-git/beagleboard/revision-detection.patch105
-rw-r--r--recipes/u-boot/u-boot_git.bb56
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/a780/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/akita/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/arm/uClibc.machine69
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/armeb/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/armv4t/uClibc.machine69
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/armv5te/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/armv6/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/armv7a/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/avr32/uClibc.machine54
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/bfin/uClibc.config (renamed from recipes/perl/perl-5.8.7/uclibc.patch)0
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/bfin/uClibc.distro0
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/bfin/uClibc.machine192
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/c7x0/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/cm-x270/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/collie/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/dht-walnut/uClibc.machine54
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/efika/uClibc.machine53
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/ep93xx/uClibc.machine69
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/gumstix-connex/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/gumstix-verdex/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/h2200/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/h3600/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/h3800/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/h3900/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/h4000/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/h5000/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/hx4700/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/iwmmxt/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/ixp4xxbe/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/kilauea/uClibc.machine55
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/mipsel/uClibc.machine63
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/mpc8313e-rdb/uClibc.machine53
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/mpc8315e-rdb/uClibc.machine53
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/mpc8323e-rdb/uClibc.machine54
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/n1200/uClibc.machine53
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/om-gta01/uClibc.machine69
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/palmld/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/palmz31/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/palmz72/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/poodle/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/qemumips/uClibc.machine63
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/qemux86/uClibc.machine68
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/sequoia/uClibc.machine53
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/simpad/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/spitz/uClibc.machine70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/titan/uClibc.machine52
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/uClibc.config0
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/uClibc.distro148
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.armv4t69
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.armv5te70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.iwmmxt70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.strongarm70
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/wrap/uClibc.machine73
-rw-r--r--recipes/uclibc/uclibc-0.9.30.3/x86/uClibc.machine72
-rw-r--r--recipes/uclibc/uclibc-git/uClibc.distro1
-rw-r--r--recipes/uclibc/uclibc-initial_0.9.30.3.bb26
-rw-r--r--recipes/uclibc/uclibc-nptl/uClibc.distro1
-rw-r--r--recipes/uclibc/uclibc_0.9.30.3.bb32
-rw-r--r--recipes/uclibc/uclibc_git.bb4
-rw-r--r--recipes/uclibc/uclibc_nptl.bb2
-rw-r--r--recipes/udev/acl_2.2.49.bb44
-rw-r--r--recipes/udev/attr_2.4.44.bb42
-rw-r--r--recipes/udev/files/shr/mount.blacklist4
-rw-r--r--recipes/udev/udev-141/hipox/default4
-rw-r--r--recipes/udev/udev-151/akita/default4
-rw-r--r--recipes/udev/udev-151/bug/10-mx31.rules49
-rw-r--r--recipes/udev/udev-151/bug/30-BUG.rules26
-rw-r--r--recipes/udev/udev-151/bug/bmi_eventpipe.sh8
-rw-r--r--recipes/udev/udev-151/c7x0/default4
-rw-r--r--recipes/udev/udev-151/cache18
-rw-r--r--recipes/udev/udev-151/default4
-rw-r--r--recipes/udev/udev-151/init78
-rw-r--r--recipes/udev/udev-151/local.rules35
-rw-r--r--recipes/udev/udev-151/omap3-pandora/local.rules40
-rw-r--r--recipes/udev/udev-151/permissions.rules119
-rw-r--r--recipes/udev/udev-151/run.rules14
-rw-r--r--recipes/udev/udev-151/spitz/default4
-rw-r--r--recipes/udev/udev-151/tosa/default4
-rw-r--r--recipes/udev/udev-151/udev.rules116
-rw-r--r--recipes/udev/udev.inc2
-rw-r--r--recipes/udev/udev_141.bb7
-rw-r--r--recipes/udev/udev_151.bb123
-rw-r--r--recipes/udns/files/fix-cc-check.patch36
-rw-r--r--recipes/udns/udns_0.0.9.bb31
-rw-r--r--recipes/unrar/files/makefile.unix.patch21
-rw-r--r--recipes/unrar/unrar-native_3.4.3.bb14
-rw-r--r--recipes/unrar/unrar.inc7
-rw-r--r--recipes/unrar/unrar_3.4.3.bb6
-rw-r--r--recipes/unrar/unrar_3.9.9.bb23
-rw-r--r--recipes/usbutils/usbutils_0.70.bb2
-rw-r--r--recipes/usbutils/usbutils_0.73.bb2
-rw-r--r--recipes/usbutils/usbutils_0.82.bb2
-rw-r--r--recipes/usbutils/usbutils_0.86.bb2
-rw-r--r--recipes/usbutils/usbutils_cvs.bb2
-rw-r--r--recipes/util-linux-ng/util-linux-ng-2.17/tls.patch70
-rw-r--r--recipes/util-linux-ng/util-linux-ng-2.17/uclibc-compile.patch13
-rw-r--r--recipes/util-linux-ng/util-linux-ng-2.17/util-linux-ng-replace-siginterrupt.patch23
-rw-r--r--recipes/util-linux-ng/util-linux-ng.inc83
-rw-r--r--recipes/util-linux-ng/util-linux-ng_2.13.1.bb3
-rw-r--r--recipes/util-linux-ng/util-linux-ng_2.14.bb4
-rw-r--r--recipes/util-linux-ng/util-linux-ng_2.15.bb3
-rw-r--r--recipes/util-linux-ng/util-linux-ng_2.16.bb8
-rw-r--r--recipes/util-linux-ng/util-linux-ng_2.17.bb14
-rw-r--r--recipes/vagalume/vagalume_0.8.2.bb20
-rw-r--r--recipes/vagalume/vagalume_0.8.3.bb20
-rw-r--r--recipes/vala-dbus-binding-tool/vala-dbus-binding-tool.inc12
-rw-r--r--recipes/vala-dbus-binding-tool/vala-dbus-binding-tool_0.1.4.bb5
-rw-r--r--recipes/vala-dbus-binding-tool/vala-dbus-binding-tool_git.bb7
-rw-r--r--recipes/vala/vala-native_0.7.10.5.bb (renamed from recipes/vala/vala-native_0.7.10.bb)0
-rw-r--r--recipes/vala/vala.inc4
-rw-r--r--recipes/vala/vala_0.7.10.5.bb4
-rw-r--r--recipes/vala/vala_0.7.10.bb2
-rw-r--r--recipes/vorbis-tools/vorbis-tools-1.1.1/remove-deprecated-curl-option.patch12
-rw-r--r--recipes/vorbis-tools/vorbis-tools_1.1.1.bb21
-rw-r--r--recipes/vorbis-tools/vorbis-tools_1.2.0.bb23
-rw-r--r--recipes/webkit/webkit-efl/fix-build-with-newer-evas.patch26
-rw-r--r--recipes/webkit/webkit-efl_git.bb7
-rw-r--r--recipes/webkit/webkit-gtk/GNUmakefile.am19
-rw-r--r--recipes/webkit/webkit-gtk/configure.ac84
-rw-r--r--recipes/webkit/webkit-gtk_svn.bb8
-rw-r--r--recipes/wesnoth/wesnoth_1.6.5.bb9
-rw-r--r--recipes/wireshark/files/fix-configure.patch72
-rw-r--r--recipes/wireshark/files/ieee80215.4.patch20
-rw-r--r--recipes/wireshark/wireshark_1.0.5.bb70
-rw-r--r--recipes/wireshark/wireshark_1.2.6.bb72
-rw-r--r--recipes/wmiconfig/wmiconfig_svn.bb1
-rw-r--r--recipes/wt/wt3-3.1.0a/noqt.patch19
-rw-r--r--recipes/wt/wt3-3.1.0a/wgooglemap.patch17
-rw-r--r--recipes/wt/wt3.inc10
-rw-r--r--recipes/wt/wt3_3.0.0.bb4
-rw-r--r--recipes/wt/wt3_3.1.0a.bb11
-rw-r--r--recipes/wt/wt_2.2.3.bb13
-rw-r--r--recipes/wv/wv-1.2.4/pkgconfig.patch (renamed from recipes/wv/wv-1.2.0/pkgconfig.patch)0
-rw-r--r--recipes/wv/wv_1.2.0.bb22
-rw-r--r--recipes/wv/wv_1.2.4.bb25
-rw-r--r--recipes/wwwoffle/files/wwwoffle.if-up6
-rw-r--r--recipes/wwwoffle/files/wwwoffle.init8
-rw-r--r--recipes/wwwoffle/wwwoffle_2.9c.bb31
-rw-r--r--recipes/wwwoffle/wwwoffle_2.9f.bb30
-rw-r--r--recipes/x-load/x-load_git.bb11
-rw-r--r--recipes/xboard/xboard_4.4.1.bb5
-rw-r--r--recipes/xfce-base/xfce4-power-manager_4.6.1.bb1
-rw-r--r--recipes/xfce-base/xfce4-session_4.6.1.bb5
-rw-r--r--recipes/xfce-base/xfwm4-themes_4.6.0.bb25
-rw-r--r--recipes/xfce-extras/xfce4-power-manager_0.8.4.2.bb16
-rw-r--r--recipes/xfsprogs/xfsprogs_3.1.1.bb28
-rw-r--r--recipes/xinput-calibrator/xinput-calibrator-0.6.0/0001-calibratorXorgPrint.cpp-fix-miny-and-maxx-printing-o.patch36
-rw-r--r--recipes/xinput-calibrator/xinput-calibrator.inc7
-rw-r--r--recipes/xinput-calibrator/xinput-calibrator_0.5.0.bb19
-rw-r--r--recipes/xinput-calibrator/xinput-calibrator_0.6.0.bb18
-rw-r--r--recipes/xinput-calibrator/xinput-calibrator_git.bb20
-rw-r--r--recipes/xorg-app/luit_1.0.5.bb7
-rw-r--r--recipes/xorg-app/xdm_1.1.9.bb6
-rw-r--r--recipes/xorg-app/xinit_1.2.0.bb3
-rw-r--r--recipes/xorg-app/xinit_1.2.1.bb11
-rw-r--r--recipes/xorg-app/xinput_1.5.1.bb6
-rw-r--r--recipes/xorg-app/xmessage_1.0.3.bb8
-rw-r--r--recipes/xorg-app/xorg-app-common.inc2
-rw-r--r--recipes/xorg-data/xorg-data-common.inc2
-rw-r--r--recipes/xorg-doc/xorg-doc-common.inc2
-rw-r--r--recipes/xorg-driver/xf86-input-acecad_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-acecad_1.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-acecad_1.2.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-acecad_1.4.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-aiptek_1.0.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-aiptek_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-aiptek_1.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-calcomp_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-calcomp_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-calcomp_1.1.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-citron_2.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-citron_2.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-citron_2.2.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-digitaledge_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-digitaledge_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-dmc_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-dmc_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-dmc_1.1.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-dynapro_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-dynapro_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-dynapro_1.1.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-elo2300_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-elo2300_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-elo2300_1.1.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-elographics_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-elographics_1.2.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-elographics_1.2.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_1.1.5.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_1.99.4.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_2.0.4.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_2.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_2.2.5.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_2.2.6.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_2.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_2.3.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_2.3.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-evtouch/02_calibration_1.6.patch41
-rw-r--r--recipes/xorg-driver/xf86-input-evtouch/03_server-1.6-ftbfs.diff61
-rw-r--r--recipes/xorg-driver/xf86-input-evtouch/04_server-1.7-ftbfs.diff516
-rw-r--r--recipes/xorg-driver/xf86-input-evtouch/20_fix_calibrate_submission_directions.patch13
-rw-r--r--recipes/xorg-driver/xf86-input-evtouch/21_more_calibration_fixups.patch33
-rw-r--r--recipes/xorg-driver/xf86-input-evtouch/fdi/50-elo-2700.fdi16
-rw-r--r--recipes/xorg-driver/xf86-input-evtouch/fdi/50-gunze.fdi16
-rw-r--r--recipes/xorg-driver/xf86-input-evtouch/fdi/50-ideaco-idc6681.fdi23
-rw-r--r--recipes/xorg-driver/xf86-input-evtouch/fdi/50-touchpack.fdi30
-rw-r--r--recipes/xorg-driver/xf86-input-evtouch/xf86-input-evtouch_0.8.8-0ubuntu6.diff4210
-rw-r--r--recipes/xorg-driver/xf86-input-evtouch_0.8.8.bb12
-rw-r--r--recipes/xorg-driver/xf86-input-fpit_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-fpit_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-fpit_1.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-hyperpen_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-hyperpen_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-hyperpen_1.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-jamstudio_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-jamstudio_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-joystick_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-joystick_1.3.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-joystick_1.3.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-joystick_1.5.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-keyboard_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-keyboard_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-keyboard_1.2.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-keyboard_1.3.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-keyboard_1.3.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-keyboard_1.4.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-magellan_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-magellan_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-magellan_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-magictouch_1.0.0.5.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-microtouch_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-microtouch_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-microtouch_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-mouse_1.1.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-mouse_1.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-mouse_1.2.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-mouse_1.2.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-mouse_1.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-mouse_1.4.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-mouse_1.5.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-mutouch_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-mutouch_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-mutouch_1.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-palmax_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-palmax_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-penmount_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-penmount_1.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-penmount_1.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-penmount_1.4.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-penmount_1.4.1.bb6
-rw-r--r--recipes/xorg-driver/xf86-input-spaceorb_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-spaceorb_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-summa_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-summa_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-synaptics_0.15.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-synaptics_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-synaptics_1.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-tek4957_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-tek4957_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-tslib/xserver-174-XGetPointerControl.patch34
-rw-r--r--recipes/xorg-driver/xf86-input-tslib_0.0.5.bb4
-rw-r--r--recipes/xorg-driver/xf86-input-tslib_0.0.6.bb12
-rw-r--r--recipes/xorg-driver/xf86-input-ur98_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-vmmouse_12.4.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-vmmouse_12.4.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-vmmouse_12.6.6.bb9
-rw-r--r--recipes/xorg-driver/xf86-input-void_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-void_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-input-void_1.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-apm_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-apm_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-apm_1.2.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-ark_0.6.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-ark_0.7.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-ark_0.7.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-ast_0.81.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-ast_0.85.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-ast_0.89.9.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-ati_6.12.4.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-ati_6.6.193.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-ati_6.6.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-ati_6.7.196.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-ati_6.7.197.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-ati_6.8.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-chips_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-chips_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-chips_1.2.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-cirrus_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-cirrus_1.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-cirrus_1.3.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-cyrix_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-displaylink/xf86-video-displaylink-0.3-xorg-abi-fix.patch25
-rw-r--r--recipes/xorg-driver/xf86-video-displaylink_0.3.bb6
-rw-r--r--recipes/xorg-driver/xf86-video-dummy_0.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-dummy_0.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-dummy_0.3.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-dummy_0.3.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-fbdev_0.3.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-fbdev_0.4.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-fbdev_0.4.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-geode_2.11.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-geode_2.11.4.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-geode_2.11.7.bb8
-rw-r--r--recipes/xorg-driver/xf86-video-geode_2.8.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-glamo_git.bb8
-rw-r--r--recipes/xorg-driver/xf86-video-glint_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-glint_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-glint_1.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-glint_1.2.4.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-i128_1.1.0.5.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-i128_1.1.0.6.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-i128_1.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-i128_1.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-i128_1.3.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-i128_1.3.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-i740_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-i740_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-i740_1.3.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-i810_1.6.5.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-i810_1.7.4.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-impact_0.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-imstt_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-intel_2.10.0.bb7
-rw-r--r--recipes/xorg-driver/xf86-video-intel_2.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-intel_2.4.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-intel_2.6.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-intel_2.9.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-mach64_6.8.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-mach64_6.8.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-mga_1.4.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-mga_1.4.11.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-mga_1.4.9.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-mga_1.9.100.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-mga_1.9.99.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-msm/no_neon.patch2901
-rw-r--r--recipes/xorg-driver/xf86-video-msm/no_neon_flags.patch36
-rw-r--r--recipes/xorg-driver/xf86-video-msm/renaming_variables.patch116
-rw-r--r--recipes/xorg-driver/xf86-video-msm_git.bb10
-rw-r--r--recipes/xorg-driver/xf86-video-neomagic_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-neomagic_1.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-neomagic_1.2.4.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-newport_0.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-newport_0.2.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-nsc_2.8.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-nsc_2.8.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-nv_1.2.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-nv_2.1.12.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-nv_2.1.15.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-nv_2.1.16.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-nv_2.1.17.bb6
-rw-r--r--recipes/xorg-driver/xf86-video-nv_2.1.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-nv_2.1.7.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-nv_2.1.8.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-nv_2.1.9.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-omapfb_git.bb4
-rw-r--r--recipes/xorg-driver/xf86-video-openchrome_0.2.903.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-openchrome_0.2.904.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-r128_6.8.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-r128_6.8.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-radeonhd_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-radeonhd_1.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-rendition_4.1.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-rendition_4.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-rendition_4.2.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-s3_0.5.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-s3_0.6.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-s3_0.6.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-s3virge_1.10.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-s3virge_1.10.4.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-s3virge_1.9.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-savage_2.1.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-savage_2.1.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-savage_2.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-savage_2.3.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-siliconmotion_1.5.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-siliconmotion_1.6.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-siliconmotion_1.7.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sis_0.10.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sis_0.10.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sis_0.10.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sis_0.9.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sis_0.9.4.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sisusb_0.8.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sisusb_0.9.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sisusb_0.9.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sisusb_0.9.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sunbw2_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-suncg14_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-suncg14_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-suncg3_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-suncg3_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-suncg6_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-suncg6_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sunffb_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sunffb_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sunffb_1.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sunleo_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-sunleo_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-suntcx_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-suntcx_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-tdfx_1.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-tdfx_1.4.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-tdfx_1.4.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-tga_1.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-tga_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-tga_1.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-trident_1.2.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-trident_1.2.4.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-trident_1.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-trident_1.3.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-tseng_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-tseng_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-tseng_1.2.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-v4l_0.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-v4l_0.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vermilion_1.0.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vesa_1.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vesa_2.0.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vesa_2.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vesa_2.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vesa_2.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vga_4.1.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-via_0.2.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vmware_10.14.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vmware_10.15.2.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vmware_10.16.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vmware_10.16.5.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vmware_10.16.8.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vmware_10.16.9.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-vmware_11.0.0.bb8
-rw-r--r--recipes/xorg-driver/xf86-video-voodoo_1.1.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-voodoo_1.2.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-voodoo_1.2.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-wsfb_0.2.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-wsfb_0.3.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-xgi_1.5.0.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-xgi_1.5.1.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-xgixp_1.7.99.3.bb2
-rw-r--r--recipes/xorg-driver/xf86-video-xgixp_1.7.99.4.bb2
-rw-r--r--recipes/xorg-driver/xorg-driver-common.inc4
-rw-r--r--recipes/xorg-font/xorg-font-common.inc2
-rw-r--r--recipes/xorg-lib/libx11_1.3.3.bb5
-rw-r--r--recipes/xorg-lib/libxt-native_1.0.8.bb8
-rw-r--r--recipes/xorg-lib/libxt_1.0.8.bb20
-rw-r--r--recipes/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch114
-rw-r--r--recipes/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch91
-rw-r--r--recipes/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch91
-rw-r--r--recipes/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch94
-rw-r--r--recipes/xorg-lib/pixman-0.17.8/1-composite.patch161
-rw-r--r--recipes/xorg-lib/pixman-0.17.8/2-composite.patch102
-rw-r--r--recipes/xorg-lib/pixman-0.17.8/3-composite.patch108
-rw-r--r--recipes/xorg-lib/pixman.inc13
-rw-r--r--recipes/xorg-lib/pixman/0001-ARM-NEON-optimized-pixman_blt.patch104
-rw-r--r--recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch114
-rw-r--r--recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch91
-rw-r--r--recipes/xorg-lib/pixman/0002-Test-program-for-pixman_blt-function.patch178
-rw-r--r--recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch91
-rw-r--r--recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch94
-rw-r--r--recipes/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch169
-rw-r--r--recipes/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch53
-rw-r--r--recipes/xorg-lib/pixman/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch93
-rw-r--r--recipes/xorg-lib/pixman/0041-Fix-filler-bug.patch25
-rw-r--r--recipes/xorg-lib/pixman/0042-Really-fix-filler-bug.patch35
-rw-r--r--recipes/xorg-lib/pixman/over-n-8-0565.patch231
-rw-r--r--recipes/xorg-lib/pixman/src-8888-0565.patch324
-rw-r--r--recipes/xorg-lib/pixman_0.10.0.bb15
-rw-r--r--recipes/xorg-lib/pixman_0.11.4.bb15
-rw-r--r--recipes/xorg-lib/pixman_0.11.8.bb18
-rw-r--r--recipes/xorg-lib/pixman_0.12.0.bb16
-rw-r--r--recipes/xorg-lib/pixman_0.13.2.bb22
-rw-r--r--recipes/xorg-lib/pixman_0.15.18.bb13
-rw-r--r--recipes/xorg-lib/pixman_0.15.6.bb13
-rw-r--r--recipes/xorg-lib/pixman_0.16.2.bb17
-rw-r--r--recipes/xorg-lib/pixman_0.17.12.bb25
-rw-r--r--recipes/xorg-lib/pixman_0.17.8.bb24
-rw-r--r--recipes/xorg-lib/pixman_0.9.6.bb15
-rw-r--r--recipes/xorg-lib/pixman_git.bb44
-rw-r--r--recipes/xorg-lib/xorg-lib-common.inc2
-rw-r--r--recipes/xorg-proto/dri2proto_2.3.bb6
-rw-r--r--recipes/xorg-proto/xorg-proto-common.inc6
-rw-r--r--recipes/xorg-util/gccmakedep_1.0.2.bb4
-rw-r--r--recipes/xorg-util/imake_1.0.2.bb4
-rw-r--r--recipes/xorg-util/lndir_1.0.1.bb4
-rw-r--r--recipes/xorg-util/makedepend-native_1.0.1.bb9
-rw-r--r--recipes/xorg-util/makedepend-native_1.0.2.bb9
-rw-r--r--recipes/xorg-util/makedepend.inc8
-rw-r--r--recipes/xorg-util/makedepend_1.0.1.bb10
-rw-r--r--recipes/xorg-util/makedepend_1.0.2.bb10
-rw-r--r--recipes/xorg-util/util-macros-native_1.1.5.bb9
-rw-r--r--recipes/xorg-util/util-macros-native_1.1.6.bb7
-rw-r--r--recipes/xorg-util/util-macros-native_1.2.1.bb7
-rw-r--r--recipes/xorg-util/util-macros-native_1.3.0.bb7
-rw-r--r--recipes/xorg-util/util-macros-native_1.4.1.bb7
-rw-r--r--recipes/xorg-util/util-macros-native_1.5.0.bb7
-rw-r--r--recipes/xorg-util/util-macros.inc8
-rw-r--r--recipes/xorg-util/util-macros_1.1.5.bb12
-rw-r--r--recipes/xorg-util/util-macros_1.1.6.bb10
-rw-r--r--recipes/xorg-util/util-macros_1.2.1.bb10
-rw-r--r--recipes/xorg-util/util-macros_1.3.0.bb10
-rw-r--r--recipes/xorg-util/util-macros_1.4.1.bb11
-rw-r--r--recipes/xorg-util/util-macros_1.5.0.bb10
-rw-r--r--recipes/xorg-util/util-macros_1.6.0.bb4
-rw-r--r--recipes/xorg-util/util-macros_1.6.1.bb4
-rw-r--r--recipes/xorg-util/xorg-cf-files_1.0.2.bb2
-rw-r--r--recipes/xorg-util/xorg-cf-files_1.0.3.bb4
-rw-r--r--recipes/xorg-util/xorg-util-common.inc10
-rw-r--r--recipes/xorg-xserver/xorg-xserver-common.inc20
-rw-r--r--recipes/xorg-xserver/xserver-kdrive-1.4.2/vm86_masks.patch20
-rw-r--r--recipes/xorg-xserver/xserver-kdrive-common.inc2
-rw-r--r--recipes/xorg-xserver/xserver-kdrive_1.4.2.bb3
-rw-r--r--recipes/xorg-xserver/xserver-xorg-conf/archos5it/xorg.conf29
-rw-r--r--recipes/xorg-xserver/xserver-xorg-conf/eee701/xorg.conf1
-rw-r--r--recipes/xorg-xserver/xserver-xorg-conf/om-gta01/xorg.conf5
-rw-r--r--recipes/xorg-xserver/xserver-xorg-conf/ronetix-pm9263/xorg.conf5
-rw-r--r--recipes/xorg-xserver/xserver-xorg-conf_0.1.bb2
-rw-r--r--recipes/xorg-xserver/xserver-xorg/0001-Add-a-PreConfigureWindow-hook.patch80
-rw-r--r--recipes/xorg-xserver/xserver-xorg/0002-dri2-No-need-to-blit-from-front-on-DRI2GetBuffers-if.patch111
-rw-r--r--recipes/xorg-xserver/xserver-xorg/0003-glx-Enforce-a-1-1-correspondence-between-GLX-and-X11.patch161
-rw-r--r--recipes/xorg-xserver/xserver-xorg/0004-glx-dri2-Notify-the-driver-when-its-buffers-become-i.patch82
-rw-r--r--recipes/xorg-xserver/xserver-xorg/0005-dri2-Support-the-DRI2InvalidateBuffers-event.patch319
-rw-r--r--recipes/xorg-xserver/xserver-xorg_1.7.1.bb2
-rw-r--r--recipes/xorg-xserver/xserver-xorg_1.7.2.bb19
-rw-r--r--recipes/xorg-xserver/xserver-xorg_1.7.3.bb27
-rw-r--r--recipes/xorg-xserver/xserver-xorg_1.7.4.bb3
-rw-r--r--recipes/xorg-xserver/xserver-xorg_git.bb36
-rw-r--r--recipes/xserver-kdrive-common/xserver-kdrive-common/Xserver29
-rw-r--r--recipes/xserver-kdrive-common/xserver-kdrive-common/shr/89xTs_Calibrate2
-rw-r--r--recipes/xserver-kdrive-common/xserver-kdrive-common_0.1.bb2
-rw-r--r--site/arm-common4
2309 files changed, 1281940 insertions, 77341 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 83b2835c23..357e6a7609 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -81,6 +81,13 @@ Recipes: minimix, minilite, miniclipboard, gpephone*
Recipes: task-sdk-sbox, meta-sdk-sbox
Recipes: tmut, tea
+Person: Frans Meulenbroeks
+Mail: fransmeulenbroeks@gmail.com
+Machines: sheevaplug, openrd-client, eeepc 701
+Distros: Ångström
+Interests: content sharing, media center,
+Recipes: myth*
+
Person: Graeme Gregory
Mail: dp@xora.org.uk
Website: http://www.xora.org.uk
@@ -202,9 +209,9 @@ Distros: Poky, Ångström
Person: Marco Cavallini
Mail: m.cavallini@koansoftware.com
Website: http://www.koansoftware.com - http://www.embedded.it
-Machines: ronetix-pm9263, vortex86sx, at91sam9g20ek
+Machines: mh355, ronetix-pm9263, vortex86sx, at91sam9g20ek, at91sam9263ek, at91sam9g45ek
Distros: KaeilOS, Ångström
-Interests: x86, ARM, wxWidgets
+Interests: OE Eclipse plugins, x86, ARM, wxWidgets, xorg, xinput, xinput-calibrator
Person: Martin 'JaMa' Jansa
Mail: Martin.Jansa@gmail.com
diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass
index 1ea4b6f1d0..31d357892a 100644
--- a/classes/autotools.bbclass
+++ b/classes/autotools.bbclass
@@ -28,6 +28,12 @@ DEPENDS_prepend = "${@autotools_dep_prepend(d)}"
DEPENDS_virtclass-native_prepend = "${@autotools_dep_prepend(d)}"
DEPENDS_virtclass-nativesdk_prepend = "${@autotools_dep_prepend(d)}"
+inherit siteinfo
+
+# Space separated list of shell scripts with variables defined to supply test
+# results for autoconf tests we cannot run at build time.
+export CONFIG_SITE = "${@siteinfo_get_files(d)}"
+
acpaths = "default"
EXTRA_AUTORECONF = "--exclude=autopoint"
@@ -152,7 +158,9 @@ autotools_prepackage_lamangler () {
sed -i -e s:${CROSS_DIR}/${HOST_SYS}::g $i
sed -i -e s:${CROSS_DIR}::g $i
sed -i -e s:${STAGING_LIBDIR}:${libdir}:g $i
- sed -i -e s:${STAGING_DIR_HOST}::g $i
+ if [ -n "${STAGING_DIR_HOST}" ]; then
+ sed -i -e s:${STAGING_DIR_HOST}::g $i
+ fi
sed -i -e s:${STAGING_DIR}::g $i
sed -i -e s:${S}::g $i
sed -i -e s:${T}::g $i
diff --git a/classes/base.bbclass b/classes/base.bbclass
index 9a242720e7..182ce62d9a 100644
--- a/classes/base.bbclass
+++ b/classes/base.bbclass
@@ -1,297 +1,12 @@
BB_DEFAULT_TASK ?= "build"
-# like os.path.join but doesn't treat absolute RHS specially
-def base_path_join(a, *p):
- path = a
- for b in p:
- if path == '' or path.endswith('/'):
- path += b
- else:
- path += '/' + b
- return path
-
-def base_path_relative(src, dest):
- """ Return a relative path from src to dest.
-
- >>> base_path_relative("/usr/bin", "/tmp/foo/bar")
- ../../tmp/foo/bar
-
- >>> base_path_relative("/usr/bin", "/usr/lib")
- ../lib
-
- >>> base_path_relative("/tmp", "/tmp/foo/bar")
- foo/bar
- """
- from os.path import sep, pardir, normpath, commonprefix
-
- destlist = normpath(dest).split(sep)
- srclist = normpath(src).split(sep)
-
- # Find common section of the path
- common = commonprefix([destlist, srclist])
- commonlen = len(common)
-
- # Climb back to the point where they differentiate
- relpath = [ pardir ] * (len(srclist) - commonlen)
- if commonlen < len(destlist):
- # Add remaining portion
- relpath += destlist[commonlen:]
-
- return sep.join(relpath)
-
-def base_path_out(path, d):
- """ Prepare a path for display to the user. """
- rel = base_path_relative(d.getVar("TOPDIR", 1), path)
- if len(rel) > len(path):
- return path
- else:
- return rel
-
-# for MD5/SHA handling
-def base_chk_load_parser(config_paths):
- import ConfigParser
- parser = ConfigParser.ConfigParser()
- if len(parser.read(config_paths)) < 1:
- raise ValueError("no ini files could be found")
-
- return parser
-
-def base_chk_file_vars(parser, localpath, params, data):
- try:
- name = params["name"]
- except KeyError:
- return False
- flagName = "%s.md5sum" % name
- want_md5sum = bb.data.getVarFlag("SRC_URI", flagName, data)
- flagName = "%s.sha256sum" % name
- want_sha256sum = bb.data.getVarFlag("SRC_URI", flagName, data)
-
- if (want_sha256sum == None and want_md5sum == None):
- # no checksums to check, nothing to do
- return False
-
- if not os.path.exists(localpath):
- localpath = base_path_out(localpath, data)
- bb.note("The localpath does not exist '%s'" % localpath)
- raise Exception("The path does not exist '%s'" % localpath)
-
- if want_md5sum:
- try:
- md5pipe = os.popen('PATH=%s md5sum %s' % (bb.data.getVar('PATH', data, True), localpath))
- md5data = (md5pipe.readline().split() or [ "" ])[0]
- md5pipe.close()
- except OSError, e:
- raise Exception("Executing md5sum failed")
- if want_md5sum != md5data:
- bb.note("The MD5Sums did not match. Wanted: '%s' and Got: '%s'" % (want_md5sum, md5data))
- raise Exception("MD5 Sums do not match. Wanted: '%s' Got: '%s'" % (want_md5sum, md5data))
-
- if want_sha256sum:
- try:
- shapipe = os.popen('PATH=%s oe_sha256sum %s' % (bb.data.getVar('PATH', data, True), localpath))
- sha256data = (shapipe.readline().split() or [ "" ])[0]
- shapipe.close()
- except OSError, e:
- raise Exception("Executing shasum failed")
- if want_sha256sum != sha256data:
- bb.note("The SHA256Sums did not match. Wanted: '%s' and Got: '%s'" % (want_sha256sum, sha256data))
- raise Exception("SHA256 Sums do not match. Wanted: '%s' Got: '%s'" % (want_sha256sum, sha256data))
-
- return True
-
-
-def base_chk_file(parser, pn, pv, src_uri, localpath, data):
- no_checksum = False
- # Try PN-PV-SRC_URI first and then try PN-SRC_URI
- # we rely on the get method to create errors
- pn_pv_src = "%s-%s-%s" % (pn,pv,src_uri)
- pn_src = "%s-%s" % (pn,src_uri)
- if parser.has_section(pn_pv_src):
- md5 = parser.get(pn_pv_src, "md5")
- sha256 = parser.get(pn_pv_src, "sha256")
- elif parser.has_section(pn_src):
- md5 = parser.get(pn_src, "md5")
- sha256 = parser.get(pn_src, "sha256")
- elif parser.has_section(src_uri):
- md5 = parser.get(src_uri, "md5")
- sha256 = parser.get(src_uri, "sha256")
- else:
- no_checksum = True
-
- # md5 and sha256 should be valid now
- if not os.path.exists(localpath):
- localpath = base_path_out(localpath, data)
- bb.note("The localpath does not exist '%s'" % localpath)
- raise Exception("The path does not exist '%s'" % localpath)
-
-
- # call md5(sum) and shasum
- try:
- md5pipe = os.popen('PATH=%s md5sum %s' % (bb.data.getVar('PATH', data, True), localpath))
- md5data = (md5pipe.readline().split() or [ "" ])[0]
- md5pipe.close()
- except OSError:
- raise Exception("Executing md5sum failed")
-
- try:
- shapipe = os.popen('PATH=%s oe_sha256sum %s' % (bb.data.getVar('PATH', data, True), localpath))
- shadata = (shapipe.readline().split() or [ "" ])[0]
- shapipe.close()
- except OSError:
- raise Exception("Executing shasum failed")
-
- if no_checksum == True: # we do not have conf/checksums.ini entry
- try:
- file = open("%s/checksums.ini" % bb.data.getVar("TMPDIR", data, 1), "a")
- except:
- return False
-
- if not file:
- raise Exception("Creating checksums.ini failed")
-
- file.write("[%s]\nmd5=%s\nsha256=%s\n\n" % (src_uri, md5data, shadata))
- file.close()
-
- from string import maketrans
- trtable = maketrans("", "")
- uname = src_uri.split("/")[-1].translate(trtable, "-+._")
-
- try:
- ufile = open("%s/%s.sum" % (bb.data.getVar("TMPDIR", data, 1), uname), "wt")
- except:
- return False
-
- if not ufile:
- raise Exception("Creating %s.sum failed" % uname)
-
- ufile.write("SRC_URI = \"%s;name=%s\"\nSRC_URI[%s.md5sum] = \"%s\"\nSRC_URI[%s.sha256sum] = \"%s\"\n" % (src_uri, uname, uname, md5data, uname, shadata))
- ufile.close()
-
- if not bb.data.getVar("OE_STRICT_CHECKSUMS",data, True):
- bb.note("This package has no entry in checksums.ini, please add one")
- bb.note("\n[%s]\nmd5=%s\nsha256=%s" % (src_uri, md5data, shadata))
- bb.note("This package has no checksums in corresponding recipe, please add")
- bb.note("SRC_URI = \"%s;name=%s\"\nSRC_URI[%s.md5sum] = \"%s\"\nSRC_URI[%s.sha256sum] = \"%s\"\n" % (src_uri, uname, uname, md5data, uname, shadata))
- return True
- else:
- bb.note("Missing checksum")
- return False
-
- if not md5 == md5data:
- bb.note("The MD5Sums did not match. Wanted: '%s' and Got: '%s'" % (md5,md5data))
- raise Exception("MD5 Sums do not match. Wanted: '%s' Got: '%s'" % (md5, md5data))
-
- if not sha256 == shadata:
- bb.note("The SHA256 Sums do not match. Wanted: '%s' Got: '%s'" % (sha256,shadata))
- raise Exception("SHA256 Sums do not match. Wanted: '%s' Got: '%s'" % (sha256, shadata))
-
- return True
-
-
-def base_dep_prepend(d):
- #
- # Ideally this will check a flag so we will operate properly in
- # the case where host == build == target, for now we don't work in
- # that case though.
- #
- deps = "shasum-native coreutils-native"
- if bb.data.getVar('PN', d, True) == "shasum-native" or bb.data.getVar('PN', d, True) == "stagemanager-native":
- deps = ""
- if bb.data.getVar('PN', d, True) == "coreutils-native":
- deps = "shasum-native"
-
- # INHIBIT_DEFAULT_DEPS doesn't apply to the patch command. Whether or not
- # we need that built is the responsibility of the patch function / class, not
- # the application.
- if not bb.data.getVar('INHIBIT_DEFAULT_DEPS', d):
- if (bb.data.getVar('HOST_SYS', d, 1) !=
- bb.data.getVar('BUILD_SYS', d, 1)):
- deps += " virtual/${TARGET_PREFIX}gcc virtual/libc "
- return deps
-
-def base_read_file(filename):
- try:
- f = file( filename, "r" )
- except IOError, reason:
- return "" # WARNING: can't raise an error now because of the new RDEPENDS handling. This is a bit ugly. :M:
- else:
- return f.read().strip()
- return None
-
-def base_ifelse(condition, iftrue = True, iffalse = False):
- if condition:
- return iftrue
- else:
- return iffalse
-
-def base_conditional(variable, checkvalue, truevalue, falsevalue, d):
- if bb.data.getVar(variable,d,1) == checkvalue:
- return truevalue
- else:
- return falsevalue
-
-def base_less_or_equal(variable, checkvalue, truevalue, falsevalue, d):
- if float(bb.data.getVar(variable,d,1)) <= float(checkvalue):
- return truevalue
- else:
- return falsevalue
-
-def base_version_less_or_equal(variable, checkvalue, truevalue, falsevalue, d):
- result = bb.vercmp(bb.data.getVar(variable,d,True), checkvalue)
- if result <= 0:
- return truevalue
- else:
- return falsevalue
-
-def base_contains(variable, checkvalues, truevalue, falsevalue, d):
- val = bb.data.getVar(variable,d,1)
- if not val:
- return falsevalue
- matches = 0
- if type(checkvalues).__name__ == "str":
- checkvalues = [checkvalues]
- for value in checkvalues:
- if val.find(value) != -1:
- matches = matches + 1
- if matches == len(checkvalues):
- return truevalue
- return falsevalue
-
-def base_both_contain(variable1, variable2, checkvalue, d):
- if bb.data.getVar(variable1,d,1).find(checkvalue) != -1 and bb.data.getVar(variable2,d,1).find(checkvalue) != -1:
- return checkvalue
- else:
- return ""
-
-DEPENDS_prepend="${@base_dep_prepend(d)} "
-DEPENDS_virtclass-native_prepend="${@base_dep_prepend(d)} "
-DEPENDS_virtclass-nativesdk_prepend="${@base_dep_prepend(d)} "
+inherit patch
+inherit staging
-def base_prune_suffix(var, suffixes, d):
- # See if var ends with any of the suffixes listed and
- # remove it if found
- for suffix in suffixes:
- if var.endswith(suffix):
- return var.replace(suffix, "")
- return var
-
-def base_set_filespath(path, d):
- bb.note("base_set_filespath usage is deprecated, %s should be fixed" % d.getVar("P", 1))
- filespath = []
- # The ":" ensures we have an 'empty' override
- overrides = (bb.data.getVar("OVERRIDES", d, 1) or "") + ":"
- for p in path:
- for o in overrides.split(":"):
- filespath.append(os.path.join(p, o))
- return ":".join(filespath)
-
-def oe_filter(f, str, d):
- from re import match
- return " ".join(filter(lambda x: match(f, x, 0), str.split()))
-
-def oe_filter_out(f, str, d):
- from re import match
- return " ".join(filter(lambda x: not match(f, x, 0), str.split()))
+inherit packagedata
+inherit mirrors
+inherit utils
+inherit utility-tasks
die() {
oefatal "$*"
@@ -310,322 +25,45 @@ oefatal() {
exit 1
}
-oedebug() {
- test $# -ge 2 || {
- echo "Usage: oedebug level \"message\""
- exit 1
- }
-
- test ${OEDEBUG:-0} -ge $1 && {
- shift
- echo "DEBUG:" $*
- }
-}
-
oe_runmake() {
- if [ x"$MAKE" = x ]; then MAKE=make; fi
oenote ${MAKE} ${EXTRA_OEMAKE} "$@"
${MAKE} ${EXTRA_OEMAKE} "$@" || die "oe_runmake failed"
}
-oe_soinstall() {
- # Purpose: Install shared library file and
- # create the necessary links
- # Example:
- #
- # oe_
- #
- #oenote installing shared library $1 to $2
- #
- libname=`basename $1`
- install -m 755 $1 $2/$libname
- sonamelink=`${HOST_PREFIX}readelf -d $1 |grep 'Library soname:' |sed -e 's/.*\[\(.*\)\].*/\1/'`
- solink=`echo $libname | sed -e 's/\.so\..*/.so/'`
- ln -sf $libname $2/$sonamelink
- ln -sf $libname $2/$solink
-}
-
-oe_libinstall() {
- # Purpose: Install a library, in all its forms
- # Example
- #
- # oe_libinstall libltdl ${STAGING_LIBDIR}/
- # oe_libinstall -C src/libblah libblah ${D}/${libdir}/
- dir=""
- libtool=""
- silent=""
- require_static=""
- require_shared=""
- staging_install=""
- while [ "$#" -gt 0 ]; do
- case "$1" in
- -C)
- shift
- dir="$1"
- ;;
- -s)
- silent=1
- ;;
- -a)
- require_static=1
- ;;
- -so)
- require_shared=1
- ;;
- -*)
- oefatal "oe_libinstall: unknown option: $1"
- ;;
- *)
- break;
- ;;
- esac
- shift
- done
-
- libname="$1"
- shift
- destpath="$1"
- if [ -z "$destpath" ]; then
- oefatal "oe_libinstall: no destination path specified"
- fi
- if echo "$destpath/" | egrep '^${STAGING_LIBDIR}/' >/dev/null
- then
- staging_install=1
- fi
-
- __runcmd () {
- if [ -z "$silent" ]; then
- echo >&2 "oe_libinstall: $*"
- fi
- $*
- }
-
- if [ -z "$dir" ]; then
- dir=`pwd`
- fi
-
- dotlai=$libname.lai
-
- # Sanity check that the libname.lai is unique
- number_of_files=`(cd $dir; find . -name "$dotlai") | wc -l`
- if [ $number_of_files -gt 1 ]; then
- oefatal "oe_libinstall: $dotlai is not unique in $dir"
- fi
-
-
- dir=$dir`(cd $dir;find . -name "$dotlai") | sed "s/^\.//;s/\/$dotlai\$//;q"`
- olddir=`pwd`
- __runcmd cd $dir
-
- lafile=$libname.la
-
- # If such file doesn't exist, try to cut version suffix
- if [ ! -f "$lafile" ]; then
- libname1=`echo "$libname" | sed 's/-[0-9.]*$//'`
- lafile1=$libname.la
- if [ -f "$lafile1" ]; then
- libname=$libname1
- lafile=$lafile1
- fi
- fi
-
- if [ -f "$lafile" ]; then
- # libtool archive
- eval `cat $lafile|grep "^library_names="`
- libtool=1
- else
- library_names="$libname.so* $libname.dll.a"
- fi
-
- __runcmd install -d $destpath/
- dota=$libname.a
- if [ -f "$dota" -o -n "$require_static" ]; then
- __runcmd install -m 0644 $dota $destpath/
- fi
- if [ -f "$dotlai" -a -n "$libtool" ]; then
- if test -n "$staging_install"
- then
- # stop libtool using the final directory name for libraries
- # in staging:
- __runcmd rm -f $destpath/$libname.la
- __runcmd sed -e 's/^installed=yes$/installed=no/' \
- -e '/^dependency_libs=/s,${WORKDIR}[[:alnum:]/\._+-]*/\([[:alnum:]\._+-]*\),${STAGING_LIBDIR}/\1,g' \
- -e "/^dependency_libs=/s,\([[:space:]']\)${libdir},\1${STAGING_LIBDIR},g" \
- $dotlai >$destpath/$libname.la
- else
- __runcmd install -m 0644 $dotlai $destpath/$libname.la
- fi
- fi
-
- for name in $library_names; do
- files=`eval echo $name`
- for f in $files; do
- if [ ! -e "$f" ]; then
- if [ -n "$libtool" ]; then
- oefatal "oe_libinstall: $dir/$f not found."
- fi
- elif [ -L "$f" ]; then
- __runcmd cp -P "$f" $destpath/
- elif [ ! -L "$f" ]; then
- libfile="$f"
- __runcmd install -m 0755 $libfile $destpath/
- fi
- done
- done
-
- if [ -z "$libfile" ]; then
- if [ -n "$require_shared" ]; then
- oefatal "oe_libinstall: unable to locate shared library"
- fi
- elif [ -z "$libtool" ]; then
- # special case hack for non-libtool .so.#.#.# links
- baselibfile=`basename "$libfile"`
- if (echo $baselibfile | grep -qE '^lib.*\.so\.[0-9.]*$'); then
- sonamelink=`${HOST_PREFIX}readelf -d $libfile |grep 'Library soname:' |sed -e 's/.*\[\(.*\)\].*/\1/'`
- solink=`echo $baselibfile | sed -e 's/\.so\..*/.so/'`
- if [ -n "$sonamelink" -a x"$baselibfile" != x"$sonamelink" ]; then
- __runcmd ln -sf $baselibfile $destpath/$sonamelink
- fi
- __runcmd ln -sf $baselibfile $destpath/$solink
- fi
- fi
-
- __runcmd cd "$olddir"
-}
-
-def package_stagefile(file, d):
-
- if bb.data.getVar('PSTAGING_ACTIVE', d, True) == "1":
- destfile = file.replace(bb.data.getVar("TMPDIR", d, 1), bb.data.getVar("PSTAGE_TMPDIR_STAGE", d, 1))
- bb.mkdirhier(os.path.dirname(destfile))
- #print "%s to %s" % (file, destfile)
- bb.copyfile(file, destfile)
-
-package_stagefile_shell() {
- if [ "$PSTAGING_ACTIVE" = "1" ]; then
- srcfile=$1
- destfile=`echo $srcfile | sed s#${TMPDIR}#${PSTAGE_TMPDIR_STAGE}#`
- destdir=`dirname $destfile`
- mkdir -p $destdir
- cp -dp $srcfile $destfile
- fi
-}
-
-oe_machinstall() {
- # Purpose: Install machine dependent files, if available
- # If not available, check if there is a default
- # If no default, just touch the destination
- # Example:
- # $1 $2 $3 $4
- # oe_machinstall -m 0644 fstab ${D}/etc/fstab
+def base_dep_prepend(d):
#
- # TODO: Check argument number?
+ # Ideally this will check a flag so we will operate properly in
+ # the case where host == build == target, for now we don't work in
+ # that case though.
#
- filename=`basename $3`
- dirname=`dirname $3`
-
- for o in `echo ${OVERRIDES} | tr ':' ' '`; do
- if [ -e $dirname/$o/$filename ]; then
- oenote $dirname/$o/$filename present, installing to $4
- install $1 $2 $dirname/$o/$filename $4
- return
- fi
- done
-# oenote overrides specific file NOT present, trying default=$3...
- if [ -e $3 ]; then
- oenote $3 present, installing to $4
- install $1 $2 $3 $4
- else
- oenote $3 NOT present, touching empty $4
- touch $4
- fi
-}
-
-addtask listtasks
-do_listtasks[nostamp] = "1"
-python do_listtasks() {
- import sys
- # emit variables and shell functions
- #bb.data.emit_env(sys.__stdout__, d)
- # emit the metadata which isnt valid shell
- for e in d.keys():
- if bb.data.getVarFlag(e, 'task', d):
- sys.__stdout__.write("%s\n" % e)
-}
-
-addtask clean
-do_clean[dirs] = "${TOPDIR}"
-do_clean[nostamp] = "1"
-python base_do_clean() {
- """clear the build and temp directories"""
- dir = bb.data.expand("${WORKDIR}", d)
- if dir == '//': raise bb.build.FuncFailed("wrong DATADIR")
- bb.note("removing " + base_path_out(dir, d))
- os.system('rm -rf ' + dir)
-
- dir = "%s.*" % bb.data.expand(bb.data.getVar('STAMP', d), d)
- bb.note("removing " + base_path_out(dir, d))
- os.system('rm -f '+ dir)
-}
-
-python do_cleanall() {
- pass
-}
-do_cleanall[recrdeptask] = "do_clean"
-addtask cleanall after do_clean
-
-addtask rebuild after do_${BB_DEFAULT_TASK}
-do_rebuild[dirs] = "${TOPDIR}"
-do_rebuild[nostamp] = "1"
-python base_do_rebuild() {
- """rebuild a package"""
-}
-
-addtask mrproper
-do_mrproper[dirs] = "${TOPDIR}"
-do_mrproper[nostamp] = "1"
-python base_do_mrproper() {
- """clear downloaded sources, build and temp directories"""
- dir = bb.data.expand("${DL_DIR}", d)
- if dir == '/': bb.build.FuncFailed("wrong DATADIR")
- bb.debug(2, "removing " + dir)
- os.system('rm -rf ' + dir)
- bb.build.exec_func('do_clean', d)
-}
+ deps = "shasum-native coreutils-native"
+ if bb.data.getVar('PN', d, True) == "shasum-native" or bb.data.getVar('PN', d, True) == "stagemanager-native":
+ deps = ""
+ if bb.data.getVar('PN', d, True) == "coreutils-native":
+ deps = "shasum-native"
-addtask distclean
-do_distclean[dirs] = "${TOPDIR}"
-do_distclean[nostamp] = "1"
-python base_do_distclean() {
- """clear downloaded sources, build and temp directories"""
+ # INHIBIT_DEFAULT_DEPS doesn't apply to the patch command. Whether or not
+ # we need that built is the responsibility of the patch function / class, not
+ # the application.
+ if not bb.data.getVar('INHIBIT_DEFAULT_DEPS', d):
+ if (bb.data.getVar('HOST_SYS', d, 1) !=
+ bb.data.getVar('BUILD_SYS', d, 1)):
+ deps += " virtual/${TARGET_PREFIX}gcc virtual/libc "
+ return deps
- bb.build.exec_func('do_clean', d)
+DEPENDS_prepend="${@base_dep_prepend(d)} "
+DEPENDS_virtclass-native_prepend="${@base_dep_prepend(d)} "
+DEPENDS_virtclass-nativesdk_prepend="${@base_dep_prepend(d)} "
- src_uri = bb.data.getVar('SRC_URI', d, 1)
- if not src_uri:
- return
- for uri in src_uri.split():
- if bb.decodeurl(uri)[0] == "file":
- continue
+SCENEFUNCS += "base_scenefunction"
- try:
- local = bb.data.expand(bb.fetch.localpath(uri, d), d)
- except bb.MalformedUrl, e:
- bb.debug(1, 'Unable to generate local path for malformed uri: %s' % e)
- else:
- bb.note("removing %s" % base_path_out(local, d))
- try:
- if os.path.exists(local + ".md5"):
- os.remove(local + ".md5")
- if os.path.exists(local):
- os.remove(local)
- except OSError, e:
- bb.note("Error in removal: %s" % e)
+python base_scenefunction () {
+ stamp = bb.data.getVar('STAMP', d, 1) + ".needclean"
+ if os.path.exists(stamp):
+ bb.build.exec_func("do_clean", d)
}
-SCENEFUNCS += "base_scenefunction"
-
python base_do_setscene () {
for f in (bb.data.getVar('SCENEFUNCS', d, 1) or '').split():
bb.build.exec_func(f, d)
@@ -635,13 +73,6 @@ python base_do_setscene () {
do_setscene[selfstamp] = "1"
addtask setscene before do_fetch
-python base_scenefunction () {
- stamp = bb.data.getVar('STAMP', d, 1) + ".needclean"
- if os.path.exists(stamp):
- bb.build.exec_func("do_clean", d)
-}
-
-
addtask fetch
do_fetch[dirs] = "${DL_DIR}"
do_fetch[depends] = "shasum-native:do_populate_staging"
@@ -702,12 +133,18 @@ python base_do_fetch() {
pn = bb.data.getVar('PN', d, True)
# Check each URI
+ first_uri = True
for url in src_uri.split():
localpath = bb.data.expand(bb.fetch.localpath(url, localdata), localdata)
(type,host,path,_,_,params) = bb.decodeurl(url)
uri = "%s://%s%s" % (type,host,path)
try:
if type in [ "http", "https", "ftp", "ftps" ]:
+ # We provide a default shortcut of plain [] for the first fetch uri
+ # Explicit names in any uri overrides this default.
+ if not "name" in params and first_uri:
+ first_uri = False
+ params["name"] = ""
if not (base_chk_file_vars(parser, localpath, params, d) or base_chk_file(parser, pn, pv,uri, localpath, d)):
if not bb.data.getVar("OE_ALLOW_INSECURE_DOWNLOADS", d, True):
bb.fatal("%s-%s: %s has no checksum defined, cannot check archive integrity" % (pn,pv,uri))
@@ -717,63 +154,6 @@ python base_do_fetch() {
raise bb.build.FuncFailed("Checksum of '%s' failed" % uri)
}
-addtask fetchall after do_fetch
-do_fetchall[recrdeptask] = "do_fetch"
-base_do_fetchall() {
- :
-}
-
-addtask checkuri
-do_checkuri[nostamp] = "1"
-python do_checkuri() {
- import sys
-
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- src_uri = bb.data.getVar('SRC_URI', localdata, 1)
-
- try:
- bb.fetch.init(src_uri.split(),d)
- except bb.fetch.NoMethodError:
- (type, value, traceback) = sys.exc_info()
- raise bb.build.FuncFailed("No method: %s" % value)
-
- try:
- bb.fetch.checkstatus(localdata)
- except bb.fetch.MissingParameterError:
- (type, value, traceback) = sys.exc_info()
- raise bb.build.FuncFailed("Missing parameters: %s" % value)
- except bb.fetch.FetchError:
- (type, value, traceback) = sys.exc_info()
- raise bb.build.FuncFailed("Fetch failed: %s" % value)
- except bb.fetch.MD5SumError:
- (type, value, traceback) = sys.exc_info()
- raise bb.build.FuncFailed("MD5 failed: %s" % value)
- except:
- (type, value, traceback) = sys.exc_info()
- raise bb.build.FuncFailed("Unknown fetch Error: %s" % value)
-}
-
-addtask checkuriall after do_checkuri
-do_checkuriall[recrdeptask] = "do_checkuri"
-do_checkuriall[nostamp] = "1"
-base_do_checkuriall() {
- :
-}
-
-addtask buildall after do_build
-do_buildall[recrdeptask] = "do_build"
-base_do_buildall() {
- :
-}
-
-def subprocess_setup():
- import signal
- # Python installs a SIGPIPE handler by default. This is usually not what
- # non-Python subprocesses expect.
- signal.signal(signal.SIGPIPE, signal.SIG_DFL)
-
def oe_unpack_file(file, data, url = None):
import subprocess
if not url:
@@ -794,12 +174,16 @@ def oe_unpack_file(file, data, url = None):
cmd = 'gzip -dc %s > %s' % (file, efile)
elif file.endswith('.bz2'):
cmd = 'bzip2 -dc %s > %s' % (file, efile)
+ elif file.endswith('.tar.xz'):
+ cmd = 'xz -dc %s | tar x --no-same-owner -f -' % file
+ elif file.endswith('.xz'):
+ cmd = 'xz -dc %s > %s' % (file, efile)
elif file.endswith('.zip') or file.endswith('.jar'):
cmd = 'unzip -q -o'
(type, host, path, user, pswd, parm) = bb.decodeurl(url)
if 'dos' in parm:
cmd = '%s -a' % cmd
- cmd = '%s %s' % (cmd, file)
+ cmd = "%s '%s'" % (cmd, file)
elif os.path.isdir(file):
destdir = "."
filespath = bb.data.getVar("FILESPATH", data, 1).split(":")
@@ -875,84 +259,6 @@ python base_do_unpack() {
raise bb.build.FuncFailed()
}
-METADATA_SCM = "${@base_get_scm(d)}"
-METADATA_REVISION = "${@base_get_scm_revision(d)}"
-METADATA_BRANCH = "${@base_get_scm_branch(d)}"
-
-def base_get_scm(d):
- from bb import which
- baserepo = os.path.dirname(os.path.dirname(which(d.getVar("BBPATH", 1), "classes/base.bbclass")))
- for (scm, scmpath) in {"svn": ".svn",
- "git": ".git",
- "monotone": "_MTN"}.iteritems():
- if os.path.exists(os.path.join(baserepo, scmpath)):
- return "%s %s" % (scm, baserepo)
- return "<unknown> %s" % baserepo
-
-def base_get_scm_revision(d):
- (scm, path) = d.getVar("METADATA_SCM", 1).split()
- try:
- if scm != "<unknown>":
- return globals()["base_get_metadata_%s_revision" % scm](path, d)
- else:
- return scm
- except KeyError:
- return "<unknown>"
-
-def base_get_scm_branch(d):
- (scm, path) = d.getVar("METADATA_SCM", 1).split()
- try:
- if scm != "<unknown>":
- return globals()["base_get_metadata_%s_branch" % scm](path, d)
- else:
- return scm
- except KeyError:
- return "<unknown>"
-
-def base_get_metadata_monotone_branch(path, d):
- monotone_branch = "<unknown>"
- try:
- monotone_branch = file( "%s/_MTN/options" % path ).read().strip()
- if monotone_branch.startswith( "database" ):
- monotone_branch_words = monotone_branch.split()
- monotone_branch = monotone_branch_words[ monotone_branch_words.index( "branch" )+1][1:-1]
- except:
- pass
- return monotone_branch
-
-def base_get_metadata_monotone_revision(path, d):
- monotone_revision = "<unknown>"
- try:
- monotone_revision = file( "%s/_MTN/revision" % path ).read().strip()
- if monotone_revision.startswith( "format_version" ):
- monotone_revision_words = monotone_revision.split()
- monotone_revision = monotone_revision_words[ monotone_revision_words.index( "old_revision" )+1][1:-1]
- except IOError:
- pass
- return monotone_revision
-
-def base_get_metadata_svn_revision(path, d):
- revision = "<unknown>"
- try:
- revision = file( "%s/.svn/entries" % path ).readlines()[3].strip()
- except IOError:
- pass
- return revision
-
-def base_get_metadata_git_branch(path, d):
- branch = os.popen('cd %s; PATH=%s git symbolic-ref HEAD 2>/dev/null' % (path, d.getVar("PATH", 1))).read().rstrip()
-
- if len(branch) != 0:
- return branch.replace("refs/heads/", "")
- return "<unknown>"
-
-def base_get_metadata_git_revision(path, d):
- rev = os.popen("cd %s; PATH=%s git show-ref HEAD 2>/dev/null" % (path, d.getVar("PATH", 1))).read().split(" ")[0].rstrip()
- if len(rev) != 0:
- return rev
- return "<unknown>"
-
-
addhandler base_eventhandler
python base_eventhandler() {
from bb import note, error, data
@@ -994,7 +300,7 @@ python base_eventhandler() {
#
if name.startswith("StampUpdate"):
for (fn, task) in e.targets:
- #print "%s %s" % (task, fn)
+ #print "%s %s" % (task, fn)
if task == "do_rebuild":
dir = "%s.*" % e.stampPrefix[fn]
bb.note("Removing stamps: " + dir)
@@ -1031,151 +337,6 @@ base_do_compile() {
}
-sysroot_stage_dir() {
- src="$1"
- dest="$2"
- # This will remove empty directories so we can ignore them
- rmdir "$src" 2> /dev/null || true
- if [ -d "$src" ]; then
- mkdir -p "$dest"
- cp -fpPR "$src"/* "$dest"
- fi
-}
-
-sysroot_stage_libdir() {
- src="$1"
- dest="$2"
-
- olddir=`pwd`
- cd $src
- las=$(find . -name \*.la -type f)
- cd $olddir
- echo "Found la files: $las"
- for i in $las
- do
- sed -e 's/^installed=yes$/installed=no/' \
- -e '/^dependency_libs=/s,${WORKDIR}[[:alnum:]/\._+-]*/\([[:alnum:]\._+-]*\),${STAGING_LIBDIR}/\1,g' \
- -e "/^dependency_libs=/s,\([[:space:]']\)${libdir},\1${STAGING_LIBDIR},g" \
- -i $src/$i
- done
- sysroot_stage_dir $src $dest
-}
-
-sysroot_stage_dirs() {
- from="$1"
- to="$2"
-
- sysroot_stage_dir $from${includedir} $to${STAGING_INCDIR}
- if [ "${BUILD_SYS}" = "${HOST_SYS}" ]; then
- sysroot_stage_dir $from${bindir} $to${STAGING_DIR_HOST}${bindir}
- sysroot_stage_dir $from${sbindir} $to${STAGING_DIR_HOST}${sbindir}
- sysroot_stage_dir $from${base_bindir} $to${STAGING_DIR_HOST}${base_bindir}
- sysroot_stage_dir $from${base_sbindir} $to${STAGING_DIR_HOST}${base_sbindir}
- sysroot_stage_dir $from${libexecdir} $to${STAGING_DIR_HOST}${libexecdir}
- if [ "${prefix}/lib" != "${libdir}" ]; then
- # python puts its files in here, make sure they are staged as well
- autotools_stage_dir $from/${prefix}/lib $to${STAGING_DIR_HOST}${prefix}/lib
- fi
- fi
- if [ -d $from${libdir} ]
- then
- sysroot_stage_libdir $from/${libdir} $to${STAGING_LIBDIR}
- fi
- if [ -d $from${base_libdir} ]
- then
- sysroot_stage_libdir $from${base_libdir} $to${STAGING_DIR_HOST}${base_libdir}
- fi
- sysroot_stage_dir $from${datadir} $to${STAGING_DATADIR}
-}
-
-sysroot_stage_all() {
- sysroot_stage_dirs ${D} ${SYSROOT_DESTDIR}
-}
-
-def is_legacy_staging(d):
- stagefunc = bb.data.getVar('do_stage', d, True)
- legacy = True
- if stagefunc is None:
- legacy = False
- elif stagefunc.strip() == "autotools_stage_all":
- legacy = False
- elif stagefunc.strip() == "do_stage_native" and bb.data.getVar('AUTOTOOLS_NATIVE_STAGE_INSTALL', d, 1) == "1":
- legacy = False
- elif bb.data.getVar('NATIVE_INSTALL_WORKS', d, 1) == "1":
- legacy = False
- if bb.data.getVar('PSTAGE_BROKEN_DESTDIR', d, 1) == "1":
- legacy = True
- if bb.data.getVar('FORCE_LEGACY_STAGING', d, 1) == "1":
- legacy = True
- return legacy
-
-do_populate_staging[dirs] = "${STAGING_DIR_TARGET}/${bindir} ${STAGING_DIR_TARGET}/${libdir} \
- ${STAGING_DIR_TARGET}/${includedir} \
- ${STAGING_BINDIR_NATIVE} ${STAGING_LIBDIR_NATIVE} \
- ${STAGING_INCDIR_NATIVE} \
- ${STAGING_DATADIR} \
- ${S} ${B}"
-
-# Could be compile but populate_staging and do_install shouldn't run at the same time
-addtask populate_staging after do_install
-
-SYSROOT_PREPROCESS_FUNCS ?= ""
-SYSROOT_DESTDIR = "${WORKDIR}/sysroot-destdir/"
-SYSROOT_LOCK = "${STAGING_DIR}/staging.lock"
-
-python populate_staging_prehook () {
- return
-}
-
-python populate_staging_posthook () {
- return
-}
-
-packagedstaging_fastpath () {
- :
-}
-
-python do_populate_staging () {
- #
- # if do_stage exists, we're legacy. In that case run the do_stage,
- # modify the SYSROOT_DESTDIR variable and then run the staging preprocess
- # functions against staging directly.
- #
- # Otherwise setup a destdir, copy the results from do_install
- # and run the staging preprocess against that
- #
- pstageactive = (bb.data.getVar("PSTAGING_ACTIVE", d, True) == "1")
- lockfile = bb.data.getVar("SYSROOT_LOCK", d, True)
- stagefunc = bb.data.getVar('do_stage', d, True)
- legacy = is_legacy_staging(d)
- if legacy:
- bb.data.setVar("SYSROOT_DESTDIR", "", d)
- bb.note("Legacy staging mode for %s" % bb.data.getVar("FILE", d, True))
- if bb.data.getVarFlags('do_stage', d) is None:
- bb.fatal("This recipe (%s) has a do_stage_prepend or do_stage_append and do_stage now doesn't exist. Please rename this to do_stage()" % bb.data.getVar("FILE", d, True))
- lock = bb.utils.lockfile(lockfile)
- bb.build.exec_func('populate_staging_prehook', d)
- bb.build.exec_func('do_stage', d)
- for f in (bb.data.getVar('SYSROOT_PREPROCESS_FUNCS', d, True) or '').split():
- bb.build.exec_func(f, d)
- bb.build.exec_func('populate_staging_posthook', d)
- bb.utils.unlockfile(lock)
- else:
- dest = bb.data.getVar('D', d, True)
- sysrootdest = bb.data.expand('${SYSROOT_DESTDIR}${STAGING_DIR_TARGET}', d)
- bb.mkdirhier(sysrootdest)
-
- bb.build.exec_func("sysroot_stage_all", d)
- #os.system('cp -pPR %s/* %s/' % (dest, sysrootdest))
- for f in (bb.data.getVar('SYSROOT_PREPROCESS_FUNCS', d, True) or '').split():
- bb.build.exec_func(f, d)
- bb.build.exec_func("packagedstaging_fastpath", d)
-
- lock = bb.utils.lockfile(lockfile)
- os.system(bb.data.expand('cp -pPR ${SYSROOT_DESTDIR}${TMPDIR}/* ${TMPDIR}/', d))
- bb.utils.unlockfile(lock)
-}
-
addtask install after do_compile
do_install[dirs] = "${D} ${S} ${B}"
# Remove and re-create ${D} so that is it guaranteed to be empty
@@ -1189,47 +350,11 @@ base_do_package() {
:
}
-addtask build after do_populate_staging
+addtask build
do_build = ""
do_build[func] = "1"
-inherit packagedata
-
-# Functions that update metadata based on files outputted
-# during the build process.
-
-def explode_deps(s):
- r = []
- l = s.split()
- flag = False
- for i in l:
- if i[0] == '(':
- flag = True
- j = []
- if flag:
- j.append(i)
- if i.endswith(')'):
- flag = False
- r[-1] += ' ' + ' '.join(j)
- else:
- r.append(i)
- return r
-
-# Make sure MACHINE isn't exported
-# (breaks binutils at least)
-MACHINE[unexport] = "1"
-
-# Make sure TARGET_ARCH isn't exported
-# (breaks Makefiles using implicit rules, e.g. quilt, as GNU make has this
-# in them, undocumented)
-TARGET_ARCH[unexport] = "1"
-
-# Make sure DISTRO isn't exported
-# (breaks sysvinit at least)
-DISTRO[unexport] = "1"
-
-
-def base_after_parse(d):
+python () {
import exceptions
source_mirror_fetch = bb.data.getVar('SOURCE_MIRROR_FETCH', d, 0)
@@ -1303,7 +428,7 @@ def base_after_parse(d):
for pkg in packages:
pkgarch = bb.data.getVar("PACKAGE_ARCH_%s" % pkg, d, 1)
- # We could look for != PACKAGE_ARCH here but how to choose
+ # We could look for != PACKAGE_ARCH here but how to choose
# if multiple differences are present?
# Look through PACKAGE_ARCHS for the priority order?
if pkgarch and pkgarch == mach_arch:
@@ -1311,103 +436,6 @@ def base_after_parse(d):
break
bb.data.setVar('MULTIMACH_ARCH', multiarch, d)
-
-python () {
- base_after_parse(d)
- if is_legacy_staging(d):
- bb.debug(1, "Legacy staging mode for %s" % bb.data.getVar("FILE", d, True))
- if bb.data.getVarFlags('do_stage', d) is None:
- bb.error("This recipe (%s) has a do_stage_prepend or do_stage_append and do_stage now doesn't exist. Please rename this to do_stage()" % bb.data.getVar("FILE", d, True))
-
-}
-
-def check_app_exists(app, d):
- from bb import which, data
-
- app = data.expand(app, d)
- path = data.getVar('PATH', d, 1)
- return len(which(path, app)) != 0
-
-def check_gcc3(data):
- # Primarly used by qemu to make sure we have a workable gcc-3.4.x.
- # Start by checking for the program name as we build it, was not
- # all host-provided gcc-3.4's will work.
-
- gcc3_versions = 'gcc-3.4.6 gcc-3.4.4 gcc34 gcc-3.4 gcc-3.4.7 gcc-3.3 gcc33 gcc-3.3.6 gcc-3.2 gcc32'
-
- for gcc3 in gcc3_versions.split():
- if check_app_exists(gcc3, data):
- return gcc3
-
- return False
-
-# Patch handling
-inherit patch
-
-# Configuration data from site files
-# Move to autotools.bbclass?
-inherit siteinfo
-
-EXPORT_FUNCTIONS do_setscene do_clean do_mrproper do_distclean do_fetch do_unpack do_configure do_compile do_install do_package do_populate_pkgs do_rebuild do_fetchall
-
-MIRRORS[func] = "0"
-MIRRORS () {
-${DEBIAN_MIRROR}/main http://snapshot.debian.net/archive/pool
-${DEBIAN_MIRROR} ftp://ftp.de.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.au.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.cl.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.hr.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.fi.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.hk.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.hu.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.ie.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.it.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.jp.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.no.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.pl.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.ro.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.si.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.es.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.se.debian.org/debian/pool
-${DEBIAN_MIRROR} ftp://ftp.tr.debian.org/debian/pool
-${GNU_MIRROR} ftp://mirrors.kernel.org/gnu
-${GNU_MIRROR} ftp://ftp.cs.ubc.ca/mirror2/gnu
-${GNU_MIRROR} ftp://sunsite.ust.hk/pub/gnu
-${GNU_MIRROR} ftp://ftp.ayamura.org/pub/gnu
-${KERNELORG_MIRROR} http://www.kernel.org/pub
-${KERNELORG_MIRROR} ftp://ftp.us.kernel.org/pub
-${KERNELORG_MIRROR} ftp://ftp.uk.kernel.org/pub
-${KERNELORG_MIRROR} ftp://ftp.hk.kernel.org/pub
-${KERNELORG_MIRROR} ftp://ftp.au.kernel.org/pub
-${KERNELORG_MIRROR} ftp://ftp.jp.kernel.org/pub
-ftp://ftp.gnupg.org/gcrypt/ ftp://ftp.franken.de/pub/crypt/mirror/ftp.gnupg.org/gcrypt/
-ftp://ftp.gnupg.org/gcrypt/ ftp://ftp.surfnet.nl/pub/security/gnupg/
-ftp://ftp.gnupg.org/gcrypt/ http://gulus.USherbrooke.ca/pub/appl/GnuPG/
-ftp://dante.ctan.org/tex-archive ftp://ftp.fu-berlin.de/tex/CTAN
-ftp://dante.ctan.org/tex-archive http://sunsite.sut.ac.jp/pub/archives/ctan/
-ftp://dante.ctan.org/tex-archive http://ctan.unsw.edu.au/
-ftp://ftp.gnutls.org/pub/gnutls ftp://ftp.gnutls.org/pub/gnutls/
-ftp://ftp.gnutls.org/pub/gnutls ftp://ftp.gnupg.org/gcrypt/gnutls/
-ftp://ftp.gnutls.org/pub/gnutls http://www.mirrors.wiretapped.net/security/network-security/gnutls/
-ftp://ftp.gnutls.org/pub/gnutls ftp://ftp.mirrors.wiretapped.net/pub/security/network-security/gnutls/
-ftp://ftp.gnutls.org/pub/gnutls http://josefsson.org/gnutls/releases/
-http://ftp.info-zip.org/pub/infozip/src/ http://mirror.switch.ch/ftp/mirror/infozip/src/
-http://ftp.info-zip.org/pub/infozip/src/ ftp://sunsite.icm.edu.pl/pub/unix/archiving/info-zip/src/
-ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.cerias.purdue.edu/pub/tools/unix/sysutils/lsof/
-ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.tau.ac.il/pub/unix/admin/
-ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.cert.dfn.de/pub/tools/admin/lsof/
-ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.fu-berlin.de/pub/unix/tools/lsof/
-ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.kaizo.org/pub/lsof/
-ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.tu-darmstadt.de/pub/sysadmin/lsof/
-ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.tux.org/pub/sites/vic.cc.purdue.edu/tools/unix/lsof/
-ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://gd.tuwien.ac.at/utils/admin-tools/lsof/
-ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://sunsite.ualberta.ca/pub/Mirror/lsof/
-ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://the.wiretapped.net/pub/security/host-security/lsof/
-http://www.apache.org/dist http://archive.apache.org/dist
-ftp://.*/.* http://mirrors.openembedded.org/
-https?$://.*/.* http://mirrors.openembedded.org/
-ftp://.*/.* http://sources.openembedded.org/
-https?$://.*/.* http://sources.openembedded.org/
-
}
+EXPORT_FUNCTIONS do_setscene do_fetch do_unpack do_configure do_compile do_install do_package
diff --git a/classes/cmake.bbclass b/classes/cmake.bbclass
index f21c4d6545..706bddae5a 100644
--- a/classes/cmake.bbclass
+++ b/classes/cmake.bbclass
@@ -21,6 +21,7 @@ cmake_do_configure() {
cmake ${OECMAKE_SOURCEPATH} \
-DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
-DCMAKE_FIND_ROOT_PATH:PATH=${STAGING_DIR_HOST} \
+ -DCMAKE_INSTALL_SO_NO_EXE=0 \
${EXTRA_OECMAKE} \
-Wno-dev
}
diff --git a/classes/cpan-base.bbclass b/classes/cpan-base.bbclass
index 82fd5b459a..8eb173eed5 100644
--- a/classes/cpan-base.bbclass
+++ b/classes/cpan-base.bbclass
@@ -24,20 +24,10 @@ def get_perl_version(d):
return m.group(1)
return None
-# Only 5.8.7 and 5.8.4 existed at the time we moved to the new layout
-def is_new_perl(d):
- ver = get_perl_version(d)
- if ver == "5.8.4" or ver == "5.8.7":
- return "no"
- return "yes"
-
# Determine where the library directories are
def perl_get_libdirs(d):
libdir = bb.data.getVar('libdir', d, 1)
- if is_new_perl(d) == "yes":
- libdirs = libdir + '/perl5'
- else:
- libdirs = libdir + '/*/*/perl5'
+ libdirs = libdir + '/perl5'
return libdirs
def is_target(d):
@@ -45,7 +35,6 @@ def is_target(d):
return "yes"
return "no"
-IS_NEW_PERL = "${@is_new_perl(d)}"
PERLLIBDIRS = "${@perl_get_libdirs(d)}"
FILES_${PN}-dbg += "${PERLLIBDIRS}/auto/*/.debug \
diff --git a/classes/cpan.bbclass b/classes/cpan.bbclass
index 66054bc755..dfc092601e 100644
--- a/classes/cpan.bbclass
+++ b/classes/cpan.bbclass
@@ -17,38 +17,17 @@ cpan_do_configure () {
yes '' | perl Makefile.PL ${EXTRA_CPANFLAGS}
if [ "${BUILD_SYS}" != "${HOST_SYS}" ]; then
. ${STAGING_LIBDIR}/perl/config.sh
- if [ "${IS_NEW_PERL}" = "yes" ]; then
- sed -i -e "s:\(SITELIBEXP = \).*:\1${sitelibexp}:" \
- -e "s:\(SITEARCHEXP = \).*:\1${sitearchexp}:" \
- -e "s:\(INSTALLVENDORLIB = \).*:\1${D}${datadir}/perl5:" \
- -e "s:\(INSTALLVENDORARCH = \).*:\1${D}${libdir}/perl5:" \
- -e "s:\(LDDLFLAGS.*\)${STAGING_LIBDIR_NATIVE}:\1${STAGING_LIBDIR}:" \
- Makefile
- else
- sed -i -e "s:\(SITELIBEXP = \).*:\1${sitelibexp}:" \
- -e "s:\(SITEARCHEXP = \).*:\1${sitearchexp}:" \
- -e "s:\(INSTALLVENDORLIB = \).*:\1${D}${libdir}/perl5/site_perl/${version}:" \
- -e "s:\(INSTALLVENDORARCH = \).*:\1${D}${libdir}/perl5/site_perl/${version}:" \
- -e "s:\(LDDLFLAGS.*\)${STAGING_LIBDIR_NATIVE}:\1${STAGING_LIBDIR}:" \
- Makefile
- fi
+ sed -i -e "s:\(SITELIBEXP = \).*:\1${sitelibexp}:" \
+ -e "s:\(SITEARCHEXP = \).*:\1${sitearchexp}:" \
+ -e "s:\(INSTALLVENDORLIB = \).*:\1${D}${datadir}/perl5:" \
+ -e "s:\(INSTALLVENDORARCH = \).*:\1${D}${libdir}/perl5:" \
+ -e "s:\(LDDLFLAGS.*\)${STAGING_LIBDIR_NATIVE}:\1${STAGING_LIBDIR}:" \
+ Makefile
fi
}
cpan_do_compile () {
- if [ "${IS_NEW_PERL}" = "yes" ]; then
- oe_runmake PASTHRU_INC="${CFLAGS}" CCFLAGS="${CFLAGS}" LD="${CCLD}"
- else
- # You must use gcc to link on sh
- OPTIONS=""
- if test ${TARGET_ARCH} = "sh3" -o ${TARGET_ARCH} = "sh4"; then
- OPTIONS="LD=${TARGET_ARCH}-${TARGET_OS}-gcc"
- fi
- if test ${TARGET_ARCH} = "powerpc" ; then
- OPTIONS="LD=${TARGET_ARCH}-${TARGET_OS}-gcc"
- fi
- oe_runmake PASTHRU_INC="${CFLAGS}" CCFLAGS="${CFLAGS}" $OPTIONS
- fi
+ oe_runmake PASTHRU_INC="${CFLAGS}" CCFLAGS="${CFLAGS}" LD="${CCLD}"
}
cpan_do_install () {
diff --git a/classes/cpan_build.bbclass b/classes/cpan_build.bbclass
index b2ec8255de..899c4010ac 100644
--- a/classes/cpan_build.bbclass
+++ b/classes/cpan_build.bbclass
@@ -25,25 +25,14 @@ cpan_build_do_configure () {
if [ ${@is_target(d)} == "yes" ]; then
# build for target
. ${STAGING_LIBDIR}/perl/config.sh
- if [ "${IS_NEW_PERL}" = "yes" ]; then
- perl Build.PL --installdirs vendor \
- --destdir ${D} \
- --install_path lib="${datadir}/perl5" \
- --install_path arch="${libdir}/perl5" \
- --install_path script=${bindir} \
- --install_path bin=${bindir} \
- --install_path bindoc=${mandir}/man1 \
- --install_path libdoc=${mandir}/man3
- else
- perl Build.PL --installdirs vendor \
- --destdir ${D} \
- --install_path lib="${libdir}/perl5/site_perl/${version}" \
- --install_path arch="${libdir}/perl5/site_perl/${version}/${TARGET_SYS}" \
- --install_path script=${bindir} \
- --install_path bin=${bindir} \
- --install_path bindoc=${mandir}/man1 \
- --install_path libdoc=${mandir}/man3
- fi
+ perl Build.PL --installdirs vendor \
+ --destdir ${D} \
+ --install_path lib="${datadir}/perl5" \
+ --install_path arch="${libdir}/perl5" \
+ --install_path script=${bindir} \
+ --install_path bin=${bindir} \
+ --install_path bindoc=${mandir}/man1 \
+ --install_path libdoc=${mandir}/man3
else
# build for host
perl Build.PL --installdirs site
diff --git a/classes/cross.bbclass b/classes/cross.bbclass
index 1de157c0f5..9a3d39cb49 100644
--- a/classes/cross.bbclass
+++ b/classes/cross.bbclass
@@ -2,6 +2,11 @@
# no need for them to be a direct target of 'world'
EXCLUDE_FROM_WORLD = "1"
+# In order to keep TARGET_PREFIX decoupled from TARGET_SYS, let's force the
+# binary names to match the former, rather than relying on autoconf's implicit
+# prefixing based on the latter.
+EXTRA_OECONF_append = " --program-prefix=${TARGET_PREFIX}"
+
# Save PACKAGE_ARCH before changing HOST_ARCH
OLD_PACKAGE_ARCH := "${PACKAGE_ARCH}"
PACKAGE_ARCH = "${OLD_PACKAGE_ARCH}"
diff --git a/classes/e.bbclass b/classes/e.bbclass
index fca9aa0010..5db0749eef 100644
--- a/classes/e.bbclass
+++ b/classes/e.bbclass
@@ -10,12 +10,16 @@ ARM_INSTRUCTION_SET = "arm"
inherit autotools pkgconfig binconfig
do_prepsources () {
- make clean distclean || true
+ make clean distclean || true
}
addtask prepsources after do_patch before do_configure
+do_configure_prepend() {
+ autopoint || touch config.rpath
+}
+
do_configure_append() {
- find ${S} -name Makefile | xargs sed -i s:'-I$(includedir)':'-I.':g
+ find ${S} -name Makefile | xargs sed -i s:'-I$(includedir)':'-I.':g
}
export CURL_CONFIG = "${STAGING_BINDIR_CROSS}/curl-config"
diff --git a/classes/efl.bbclass b/classes/efl.bbclass
index 805422fdf4..14334571ce 100644
--- a/classes/efl.bbclass
+++ b/classes/efl.bbclass
@@ -17,7 +17,7 @@ inherit autotools
AUTOTOOLS_STAGE_PKGCONFIG = "1"
do_configure_prepend() {
- touch config.rpath
+ autopoint || touch config.rpath
}
do_install_prepend () {
diff --git a/classes/glibc-package.bbclass b/classes/glibc-package.bbclass
index 413ed14931..d47c914b36 100644
--- a/classes/glibc-package.bbclass
+++ b/classes/glibc-package.bbclass
@@ -7,9 +7,11 @@
# "precompiled" - The binary locale files are pregenerated and already present
# "ondevice" - The device will build the locale files upon first boot through the postinst
+inherit qemu
+
GLIBC_INTERNAL_USE_BINARY_LOCALE ?= "ondevice"
-PACKAGES = "glibc-dbg glibc catchsegv sln nscd ldd localedef glibc-utils glibc-dev glibc-static glibc-doc glibc-locale libcidn libmemusage libsegfault glibc-extra-nss glibc-thread-db glibc-pcprofile"
+PACKAGES = "glibc-dbg glibc catchsegv sln nscd ldd localedef glibc-utils glibc-pic glibc-dev glibc-static glibc-doc glibc-locale libcidn libmemusage libsegfault glibc-extra-nss glibc-thread-db glibc-pcprofile"
PACKAGES_DYNAMIC = "glibc-gconv-* glibc-charmap-* glibc-localedata-* locale-base-* glibc-binary-localedata-*"
INSANE_SKIP_glibc-dbg = True
@@ -23,6 +25,7 @@ glibcfiles = "${libc_baselibs} ${libexecdir}/* ${datadir}/zoneinfo ${@base_condi
glibcdbgfiles = "${bindir}/.debug ${sbindir}/.debug ${libdir}/.debug \
${base_bindir}/.debug ${base_sbindir}/.debug ${base_libdir}/.debug \
${libdir}/gconv/.debug ${libexecdir}/*/.debug"
+glibcpicfiles = "${libdir}/*_pic.a ${libdir}/*_pic.map ${libdir}/libc_pic/"
glibcdevfiles = "${bindir}/rpcgen ${includedir} ${libdir}/lib*${SOLIBSDEV} ${libdir}/*.la \
${libdir}/*.a ${libdir}/*.o ${libdir}/pkgconfig ${libdir}/*nonshared.a \
${base_libdir}/*.a ${base_libdir}/*.o ${datadir}/aclocal"
@@ -35,6 +38,8 @@ FILES_libcidn = "${base_libdir}/libcidn*.so"
FILES_libmemusage = "${base_libdir}/libmemusage.so"
FILES_glibc-extra-nss = "${base_libdir}/libnss*"
FILES_sln = "${base_sbindir}/sln"
+FILES_glibc-pic = "${glibcpicfiles}"
+FILES_${PN}-pic = "${glibcpicfiles}"
FILES_glibc-dev = "${glibcdevfiles}"
FILES_${PN}-dev = "${glibcdevfiles}"
FILES_glibc-dbg = "${glibcdbgfiles}"
@@ -212,12 +217,6 @@ python package_do_split_gconvs () {
bb.data.setVar('RDEPENDS_%s' % pkgname, legitimize_package_name('glibc-binary-localedata-%s' % glibc_name), d)
def output_locale_binary(name, pkgname, locale, encoding):
- target_arch = bb.data.getVar("TARGET_ARCH", d, 1)
- if target_arch in ("i486", "i586", "i686"):
- target_arch = "i386"
- elif target_arch == "powerpc":
- target_arch = "ppc"
-
# This is a hack till linux-libc-headers gets patched for the missing arm syscalls and all arm device kernels as well
if bb.data.getVar("DISTRO_NAME", d, 1) == "Angstrom":
kernel_ver = "2.6.24"
@@ -226,10 +225,9 @@ python package_do_split_gconvs () {
else:
kernel_ver = bb.data.getVar("OLDEST_KERNEL", d, 1)
- if kernel_ver is None:
- qemu = "qemu-%s -s 1048576" % target_arch
- else:
- qemu = "qemu-%s -s 1048576 -r %s" % (target_arch, kernel_ver)
+ qemu = qemu_target_binary(d) + " -s 1048576"
+ if kernel_ver:
+ qemu += " -r %s" % (kernel_ver)
pkgname = 'locale-base-' + legitimize_package_name(name)
treedir = base_path_join(bb.data.getVar("WORKDIR", d, 1), "locale-tree")
diff --git a/classes/icecc.bbclass b/classes/icecc.bbclass
index 8e539db0b8..fb6045d21b 100644
--- a/classes/icecc.bbclass
+++ b/classes/icecc.bbclass
@@ -250,7 +250,7 @@ def icc_path(bb,d):
#"system" package blacklist contains a list of packages that can not distribute compile tasks
#for one reason or the other
- system_package_blacklist = [ "uclibc", "glibc", "gcc", "qemu", "bind", "u-boot", "dhcp-forwarder", "enchant", "connman" ]
+ system_package_blacklist = [ "uclibc", "glibc", "gcc", "bind", "u-boot", "dhcp-forwarder", "enchant", "connman" ]
user_package_blacklist = (bb.data.getVar('ICECC_USER_PACKAGE_BL', d) or "").split()
package_blacklist = system_package_blacklist + user_package_blacklist
diff --git a/classes/image.bbclass b/classes/image.bbclass
index 9dce609733..8e202f0665 100644
--- a/classes/image.bbclass
+++ b/classes/image.bbclass
@@ -1,4 +1,5 @@
inherit rootfs_${IMAGE_PKGTYPE}
+inherit kernel-arch
LICENSE = "MIT"
PACKAGES = ""
diff --git a/classes/insane.bbclass b/classes/insane.bbclass
index 804caf06ee..c2e8d9cf1d 100644
--- a/classes/insane.bbclass
+++ b/classes/insane.bbclass
@@ -279,7 +279,7 @@ def package_qa_check_dbg(path, name,d, elf):
sane = True
if not "-dbg" in name:
- if '.debug' in path:
+ if '.debug' in path.split(os.path.sep):
error_msg = "non debug package contains .debug directory: %s path %s" % \
(name, package_qa_clean_path(path,d))
sane = package_qa_handle_error(3, error_msg, name, path, d)
diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass
index 39ff928e6a..69ab422c43 100644
--- a/classes/kernel.bbclass
+++ b/classes/kernel.bbclass
@@ -127,16 +127,7 @@ kernel_do_stage() {
mkdir -p ${STAGING_KERNEL_DIR}/include/asm-generic
cp -fR include/asm-generic/* ${STAGING_KERNEL_DIR}/include/asm-generic/
- mkdir -p ${STAGING_KERNEL_DIR}/include/linux
- cp -fR include/linux/* ${STAGING_KERNEL_DIR}/include/linux/
-
- mkdir -p ${STAGING_KERNEL_DIR}/include/net
- cp -fR include/net/* ${STAGING_KERNEL_DIR}/include/net/
-
- mkdir -p ${STAGING_KERNEL_DIR}/include/pcmcia
- cp -fR include/pcmcia/* ${STAGING_KERNEL_DIR}/include/pcmcia/
-
- for entry in drivers/crypto drivers/media include/media include/acpi include/sound include/video include/scsi include/trace; do
+ for entry in drivers/crypto drivers/media include/generated include/linux include/net include/pcmcia include/media include/acpi include/sound include/video include/scsi include/trace; do
if [ -d $entry ]; then
mkdir -p ${STAGING_KERNEL_DIR}/$entry
cp -fR $entry/* ${STAGING_KERNEL_DIR}/$entry/
@@ -276,7 +267,7 @@ fi
if [ -n "$D" ]; then
${HOST_PREFIX}depmod-${KERNEL_MAJOR_VERSION} -A -b $D -F ${STAGING_KERNEL_DIR}/System.map-${KERNEL_VERSION} ${KERNEL_VERSION}
else
- depmod -a
+ depmod -a ${KERNEL_VERSION}
fi
}
@@ -284,7 +275,7 @@ pkg_postinst_modules () {
if [ -n "$D" ]; then
${HOST_PREFIX}depmod-${KERNEL_MAJOR_VERSION} -A -b $D -F ${STAGING_KERNEL_DIR}/System.map-${KERNEL_VERSION} ${KERNEL_VERSION}
else
- depmod -a
+ depmod -a ${KERNEL_VERSION}
update-modules || true
fi
}
@@ -497,7 +488,7 @@ python populate_packages_prepend () {
# Support checking the kernel size since some kernels need to reside in partitions
# with a fixed length or there is a limit in transferring the kernel to memory
do_sizecheck() {
- if [ ! -z "${KERNEL_IMAGE_MAXSIZE}" -a -z "${DONT_CHECK_KERNELSIZE}" ]; then
+ if [ ! -z "${KERNEL_IMAGE_MAXSIZE}" ]; then
size=`ls -l ${KERNEL_OUTPUT} | awk '{ print $5}'`
if [ $size -ge ${KERNEL_IMAGE_MAXSIZE} ]; then
rm ${KERNEL_OUTPUT}
diff --git a/classes/metadata_scm.bbclass b/classes/metadata_scm.bbclass
new file mode 100644
index 0000000000..ffc6a8adfe
--- /dev/null
+++ b/classes/metadata_scm.bbclass
@@ -0,0 +1,76 @@
+METADATA_SCM = "${@base_get_scm(d)}"
+METADATA_REVISION = "${@base_get_scm_revision(d)}"
+METADATA_BRANCH = "${@base_get_scm_branch(d)}"
+
+def base_get_scm(d):
+ from bb import which
+ baserepo = os.path.dirname(os.path.dirname(which(d.getVar("BBPATH", 1), "classes/base.bbclass")))
+ for (scm, scmpath) in {"svn": ".svn",
+ "git": ".git",
+ "monotone": "_MTN"}.iteritems():
+ if os.path.exists(os.path.join(baserepo, scmpath)):
+ return "%s %s" % (scm, baserepo)
+ return "<unknown> %s" % baserepo
+
+def base_get_scm_revision(d):
+ (scm, path) = d.getVar("METADATA_SCM", 1).split()
+ try:
+ if scm != "<unknown>":
+ return globals()["base_get_metadata_%s_revision" % scm](path, d)
+ else:
+ return scm
+ except KeyError:
+ return "<unknown>"
+
+def base_get_scm_branch(d):
+ (scm, path) = d.getVar("METADATA_SCM", 1).split()
+ try:
+ if scm != "<unknown>":
+ return globals()["base_get_metadata_%s_branch" % scm](path, d)
+ else:
+ return scm
+ except KeyError:
+ return "<unknown>"
+
+def base_get_metadata_monotone_branch(path, d):
+ monotone_branch = "<unknown>"
+ try:
+ monotone_branch = file( "%s/_MTN/options" % path ).read().strip()
+ if monotone_branch.startswith( "database" ):
+ monotone_branch_words = monotone_branch.split()
+ monotone_branch = monotone_branch_words[ monotone_branch_words.index( "branch" )+1][1:-1]
+ except:
+ pass
+ return monotone_branch
+
+def base_get_metadata_monotone_revision(path, d):
+ monotone_revision = "<unknown>"
+ try:
+ monotone_revision = file( "%s/_MTN/revision" % path ).read().strip()
+ if monotone_revision.startswith( "format_version" ):
+ monotone_revision_words = monotone_revision.split()
+ monotone_revision = monotone_revision_words[ monotone_revision_words.index( "old_revision" )+1][1:-1]
+ except IOError:
+ pass
+ return monotone_revision
+
+def base_get_metadata_svn_revision(path, d):
+ revision = "<unknown>"
+ try:
+ revision = file( "%s/.svn/entries" % path ).readlines()[3].strip()
+ except IOError:
+ pass
+ return revision
+
+def base_get_metadata_git_branch(path, d):
+ branch = os.popen('cd %s; PATH=%s git symbolic-ref HEAD 2>/dev/null' % (path, d.getVar("PATH", 1))).read().rstrip()
+
+ if len(branch) != 0:
+ return branch.replace("refs/heads/", "")
+ return "<unknown>"
+
+def base_get_metadata_git_revision(path, d):
+ rev = os.popen("cd %s; PATH=%s git show-ref HEAD 2>/dev/null" % (path, d.getVar("PATH", 1))).read().split(" ")[0].rstrip()
+ if len(rev) != 0:
+ return rev
+ return "<unknown>"
diff --git a/classes/mirrors.bbclass b/classes/mirrors.bbclass
new file mode 100644
index 0000000000..71ee5f63bf
--- /dev/null
+++ b/classes/mirrors.bbclass
@@ -0,0 +1,61 @@
+MIRRORS[func] = "0"
+MIRRORS () {
+${DEBIAN_MIRROR}/main http://snapshot.debian.net/archive/pool
+${DEBIAN_MIRROR} ftp://ftp.de.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.au.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.cl.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.hr.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.fi.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.hk.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.hu.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.ie.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.it.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.jp.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.no.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.pl.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.ro.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.si.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.es.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.se.debian.org/debian/pool
+${DEBIAN_MIRROR} ftp://ftp.tr.debian.org/debian/pool
+${GNU_MIRROR} ftp://mirrors.kernel.org/gnu
+${GNU_MIRROR} ftp://ftp.cs.ubc.ca/mirror2/gnu
+${GNU_MIRROR} ftp://sunsite.ust.hk/pub/gnu
+${GNU_MIRROR} ftp://ftp.ayamura.org/pub/gnu
+${KERNELORG_MIRROR} http://www.kernel.org/pub
+${KERNELORG_MIRROR} ftp://ftp.us.kernel.org/pub
+${KERNELORG_MIRROR} ftp://ftp.uk.kernel.org/pub
+${KERNELORG_MIRROR} ftp://ftp.hk.kernel.org/pub
+${KERNELORG_MIRROR} ftp://ftp.au.kernel.org/pub
+${KERNELORG_MIRROR} ftp://ftp.jp.kernel.org/pub
+ftp://ftp.gnupg.org/gcrypt/ ftp://ftp.franken.de/pub/crypt/mirror/ftp.gnupg.org/gcrypt/
+ftp://ftp.gnupg.org/gcrypt/ ftp://ftp.surfnet.nl/pub/security/gnupg/
+ftp://ftp.gnupg.org/gcrypt/ http://gulus.USherbrooke.ca/pub/appl/GnuPG/
+ftp://dante.ctan.org/tex-archive ftp://ftp.fu-berlin.de/tex/CTAN
+ftp://dante.ctan.org/tex-archive http://sunsite.sut.ac.jp/pub/archives/ctan/
+ftp://dante.ctan.org/tex-archive http://ctan.unsw.edu.au/
+ftp://ftp.gnutls.org/pub/gnutls ftp://ftp.gnutls.org/pub/gnutls/
+ftp://ftp.gnutls.org/pub/gnutls ftp://ftp.gnupg.org/gcrypt/gnutls/
+ftp://ftp.gnutls.org/pub/gnutls http://www.mirrors.wiretapped.net/security/network-security/gnutls/
+ftp://ftp.gnutls.org/pub/gnutls ftp://ftp.mirrors.wiretapped.net/pub/security/network-security/gnutls/
+ftp://ftp.gnutls.org/pub/gnutls http://josefsson.org/gnutls/releases/
+http://ftp.info-zip.org/pub/infozip/src/ http://mirror.switch.ch/ftp/mirror/infozip/src/
+http://ftp.info-zip.org/pub/infozip/src/ ftp://sunsite.icm.edu.pl/pub/unix/archiving/info-zip/src/
+ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.cerias.purdue.edu/pub/tools/unix/sysutils/lsof/
+ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.tau.ac.il/pub/unix/admin/
+ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.cert.dfn.de/pub/tools/admin/lsof/
+ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.fu-berlin.de/pub/unix/tools/lsof/
+ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.kaizo.org/pub/lsof/
+ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.tu-darmstadt.de/pub/sysadmin/lsof/
+ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.tux.org/pub/sites/vic.cc.purdue.edu/tools/unix/lsof/
+ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://gd.tuwien.ac.at/utils/admin-tools/lsof/
+ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://sunsite.ualberta.ca/pub/Mirror/lsof/
+ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://the.wiretapped.net/pub/security/host-security/lsof/
+http://www.apache.org/dist http://archive.apache.org/dist
+ftp://.*/.* http://mirrors.openembedded.org/
+https?$://.*/.* http://mirrors.openembedded.org/
+ftp://.*/.* http://sources.openembedded.org/
+https?$://.*/.* http://sources.openembedded.org/
+
+}
+
diff --git a/classes/mozilla.bbclass b/classes/mozilla.bbclass
index c9a3966709..4e3054b9ab 100644
--- a/classes/mozilla.bbclass
+++ b/classes/mozilla.bbclass
@@ -6,10 +6,12 @@ SRC_URI += "file://mozconfig"
inherit gettext pkgconfig
+# Parallel make is special in mozilla.
+OLD_PARALLEL_MAKE := "${PARALLEL_MAKE}"
+PARALLEL_MAKE = ""
+
EXTRA_OECONF = "--target=${TARGET_SYS} --host=${BUILD_SYS} \
--build=${BUILD_SYS} --prefix=${prefix}"
-EXTRA_OEMAKE = "'HOST_LIBIDL_LIBS=${HOST_LIBIDL_LIBS}' \
- 'HOST_LIBIDL_CFLAGS=${HOST_LIBIDL_CFLAGS}'"
SELECTED_OPTIMIZATION = "-Os -fsigned-char -fno-strict-aliasing"
export CROSS_COMPILE = "1"
@@ -17,9 +19,6 @@ export MOZCONFIG = "${WORKDIR}/mozconfig"
export MOZ_OBJDIR = "${S}"
export CONFIGURE_ARGS = "${EXTRA_OECONF}"
-export HOST_LIBIDL_CFLAGS = "`${HOST_LIBIDL_CONFIG} --cflags`"
-export HOST_LIBIDL_LIBS = "`${HOST_LIBIDL_CONFIG} --libs`"
-export HOST_LIBIDL_CONFIG = "PKG_CONFIG_PATH=${STAGING_LIBDIR_NATIVE}/pkgconfig pkg-config libIDL-2.0"
export HOST_CC = "${BUILD_CC}"
export HOST_CXX = "${BUILD_CXX}"
export HOST_CFLAGS = "${BUILD_CFLAGS}"
@@ -38,7 +37,22 @@ mozilla_do_configure() {
`dirname $cg`/
done
)
- if [ -e ${MOZ_OBJDIR}/Makefile ] ; then
+
+ # Put PARALLEL_MAKE into mozconfig
+ if [ ! -z "${OLD_PARALLEL_MAKE}" ] ; then
+ echo mk_add_options MOZ_MAKE_FLAGS=\"${OLD_PARALLEL_MAKE}\" \
+ >> ${MOZCONFIG}
+ fi
+
+ # Set the host libIDL stuff correctly.
+ export HOST_LIBIDL_CONFIG="PKG_CONFIG_PATH=${STAGING_LIBDIR_NATIVE}/pkgconfig pkg-config libIDL-2.0"
+ # Due to sysroot we need to sed out references to the target staging
+ # when building the native version of xpidl Symptons of the failure
+ # include "gthread.h:344: error: size of array 'type name' is negative"
+ export HOST_LIBIDL_CFLAGS="`${HOST_LIBIDL_CONFIG} --cflags | sed -e s:${STAGING_DIR_TARGET}:${STAGING_DIR_NATIVE}:g`"
+ export HOST_LIBIDL_LIBS="`${HOST_LIBIDL_CONFIG} --libs`"
+
+ if [ -e ${MOZ_OBJDIR}/Makefile ] ; then
oe_runmake -f client.mk ${MOZ_OBJDIR}/Makefile \
${MOZ_OBJDIR}/config.status
fi
diff --git a/classes/nativesdk.bbclass b/classes/nativesdk.bbclass
index 080adc5d77..75f5790121 100644
--- a/classes/nativesdk.bbclass
+++ b/classes/nativesdk.bbclass
@@ -51,9 +51,12 @@ FILES_${PN}-dbg += "${prefix}/.debug \
export PKG_CONFIG_DIR = "${STAGING_DIR_HOST}${libdir}/pkgconfig"
export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR_HOST}"
+ORIG_DEPENDS := "${DEPENDS}"
+DEPENDS_virtclass-nativesdk ?= "${ORIG_DEPENDS}"
+
python __anonymous () {
pn = bb.data.getVar("PN", d, True)
- depends = bb.data.getVar("DEPENDS", d, True)
+ depends = bb.data.getVar("DEPENDS_virtclass-nativesdk", d, True)
deps = bb.utils.explode_deps(depends)
newdeps = []
for dep in deps:
@@ -65,7 +68,7 @@ python __anonymous () {
newdeps.append(dep + "-nativesdk")
else:
newdeps.append(dep)
- bb.data.setVar("DEPENDS", " ".join(newdeps), d)
+ bb.data.setVar("DEPENDS_virtclass-nativesdk", " ".join(newdeps), d)
provides = bb.data.getVar("PROVIDES", d, True)
for prov in provides.split():
if prov.find(pn) != -1:
@@ -73,6 +76,7 @@ python __anonymous () {
if not prov.endswith("-nativesdk"):
provides = provides.replace(prov, prov + "-nativesdk")
bb.data.setVar("PROVIDES", provides, d)
+ bb.data.setVar("OVERRIDES", bb.data.getVar("OVERRIDES", d, False) + ":virtclass-nativesdk", d)
}
diff --git a/classes/package_ipk.bbclass b/classes/package_ipk.bbclass
index 420c892f10..410fee30cc 100644
--- a/classes/package_ipk.bbclass
+++ b/classes/package_ipk.bbclass
@@ -159,11 +159,14 @@ python do_package_ipk () {
if os.access(os.path.join(tmpdir, "stamps", "IPK_PACKAGE_INDEX_CLEAN"), os.R_OK):
os.unlink(os.path.join(tmpdir, "stamps", "IPK_PACKAGE_INDEX_CLEAN"))
+ pkgdest = bb.data.getVar('PKGDEST', d, 1)
+ bb.mkdirhier(pkgdest)
+
packages = bb.data.getVar('PACKAGES', d, True)
for pkg in packages.split():
localdata = bb.data.createCopy(d)
- pkgdest = bb.data.getVar('PKGDEST', d, 1)
root = "%s/%s" % (pkgdest, pkg)
+ bb.mkdirhier(root)
lf = bb.utils.lockfile(root + ".lock")
diff --git a/classes/packaged-staging.bbclass b/classes/packaged-staging.bbclass
index 1ede25cef0..f755d2340d 100644
--- a/classes/packaged-staging.bbclass
+++ b/classes/packaged-staging.bbclass
@@ -189,11 +189,20 @@ python packagestage_scenefunc () {
bb.fatal("Couldn't install the staging package to a temp directory")
#
+ # Grab the staging lock now so that we don't have other threads try and
+ # validate or install based on these stamps being valid. This is a
+ # potential issue for certain BB_STAMP_POLICY values and enough
+ # concurrent threads.
+ #
+ lf = bb.utils.lockfile(bb.data.expand("${SYSROOT_LOCK}", d))
+
+ #
# Copy the stamp files into the main stamps directoy
#
cmd = bb.data.expand("cp -dpR ${WORKDIR}/tstage/stamps/* ${TMPDIR}/stamps/", d)
ret = os.system(cmd)
if ret != 0:
+ bb.utils.unlockfile(lf)
bb.fatal("Couldn't copy the staging package stamp files")
#
@@ -213,6 +222,7 @@ python packagestage_scenefunc () {
stageok = bb.runqueue.check_stamp_fn(file, task, d)
bb.debug(1, "Result %s" % (stageok))
if not stageok:
+ bb.utils.unlockfile(lf)
break
# Remove the stamps and files we added above
@@ -223,7 +233,6 @@ python packagestage_scenefunc () {
if stageok:
bb.note("Staging package found, using it for %s." % file)
installcmd = bb.data.getVar("PSTAGE_INSTALL_CMD", d, 1)
- lf = bb.utils.lockfile(bb.data.expand("${SYSROOT_LOCK}", d))
ret = os.system("PATH=\"%s\" %s %s" % (path, installcmd, stagepkg))
bb.utils.unlockfile(lf)
if ret != 0:
@@ -289,7 +298,7 @@ packagedstaging_fastpath () {
mkdir -p ${PSTAGE_TMPDIR_STAGE}/staging/
mkdir -p ${PSTAGE_TMPDIR_STAGE}/cross/
cp -fpPR ${SYSROOT_DESTDIR}${STAGING_DIR}/* ${PSTAGE_TMPDIR_STAGE}/staging/ || /bin/true
- cp -fpPR ${SYSROOT_DESTDIR}${CROSS_DIR}/* ${PSTAGE_TMPDIR_STAGE}/cross/ || /bin/true
+ cp -fpPR ${SYSROOT_DESTDIR}${CROSS_DIR}/* ${PSTAGE_TMPDIR_STAGE}/cross/${BASE_PACKAGE_ARCH}/ || /bin/true
fi
}
diff --git a/classes/qemu.bbclass b/classes/qemu.bbclass
new file mode 100644
index 0000000000..66dfb2b0d2
--- /dev/null
+++ b/classes/qemu.bbclass
@@ -0,0 +1,15 @@
+#
+# This class contains functions for recipes that need QEMU or test for its
+# existance.
+#
+
+def qemu_target_binary(data):
+ import bb
+
+ target_arch = bb.data.getVar("TARGET_ARCH", data, 1)
+ if target_arch in ("i486", "i586", "i686"):
+ target_arch = "i386"
+ elif target_arch == "powerpc":
+ target_arch = "ppc"
+
+ return "qemu-" + target_arch
diff --git a/classes/rm_work.bbclass b/classes/rm_work.bbclass
index a53d12baf3..0857f49852 100644
--- a/classes/rm_work.bbclass
+++ b/classes/rm_work.bbclass
@@ -20,7 +20,7 @@ do_rm_work () {
if [ `basename ${dir}` = "temp" ]; then
echo "Not removing temp"
else
- echo "Removing $dir" ; rm $dir -rf
+ echo "Removing $dir" ; rm -rf $dir
fi
done
}
diff --git a/classes/rootfs_ipk.bbclass b/classes/rootfs_ipk.bbclass
index 16dd511fcb..3a73ed8854 100644
--- a/classes/rootfs_ipk.bbclass
+++ b/classes/rootfs_ipk.bbclass
@@ -7,7 +7,8 @@
do_rootfs[depends] += "opkg-native:do_populate_staging"
-IPKG_ARGS = "-f ${IPKGCONF_TARGET} -o ${IMAGE_ROOTFS} ${@base_conditional("PACKAGE_INSTALL_NO_DEPS", "1", "-nodeps", "", d)}"
+IPKG_TMP_DIR = "${IMAGE_ROOTFS}-tmp"
+IPKG_ARGS = "-f ${IPKGCONF_TARGET} -o ${IMAGE_ROOTFS} -t ${IPKG_TMP_DIR} ${@base_conditional("PACKAGE_INSTALL_NO_DEPS", "1", "-nodeps", "", d)}"
PACKAGE_INSTALL_NO_DEPS ?= "0"
@@ -31,6 +32,7 @@ fakeroot rootfs_ipk_do_rootfs () {
package_generate_ipkg_conf
mkdir -p ${T}
+ mkdir -p ${IPKG_TMP_DIR}
mkdir -p ${IMAGE_ROOTFS}${libdir}/opkg/
STATUS=${IMAGE_ROOTFS}${libdir}/opkg/status
@@ -80,6 +82,8 @@ fakeroot rootfs_ipk_do_rootfs () {
install -d ${IMAGE_ROOTFS}/${sysconfdir}
echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version
+
+ ${ROOTFS_POSTPROCESS_COMMAND}
if [ "${ONLINE_PACKAGE_MANAGEMENT}" != "none" ]; then
if [ "${ONLINE_PACKAGE_MANAGEMENT}" == "add" ]; then
@@ -97,9 +101,8 @@ fakeroot rootfs_ipk_do_rootfs () {
rm -rf ${IMAGE_ROOTFS}/usr/lib/opkg
fi
- ${ROOTFS_POSTPROCESS_COMMAND}
-
log_check rootfs
+ rm -rf ${IPKG_TMP_DIR}
}
rootfs_ipk_log_check() {
diff --git a/classes/sanity.bbclass b/classes/sanity.bbclass
index f57d8e47d0..e8b6587500 100644
--- a/classes/sanity.bbclass
+++ b/classes/sanity.bbclass
@@ -2,6 +2,8 @@
# Sanity check the users setup for common misconfigurations
#
+inherit qemu
+
def raise_sanity_error(msg):
import bb
bb.fatal(""" Openembedded's config sanity checker detected a potential misconfiguration.
@@ -83,27 +85,10 @@ def check_sanity(e):
required_utilities = "patch help2man diffstat texi2html makeinfo cvs svn bzip2 tar gzip gawk md5sum"
- if data.getVar('TARGET_ARCH', e.data, True) == "arm":
- # qemu-native needs gcc 3.x
- if "qemu-native" not in assume_provided and "gcc3-native" in assume_provided:
- gcc_version = commands.getoutput("${BUILD_PREFIX}gcc --version | head -n 1 | cut -f 3 -d ' '")
-
- if not check_gcc3(e.data) and gcc_version[0] != '3':
- messages = messages + "gcc3-native was in ASSUME_PROVIDED but the gcc-3.x binary can't be found in PATH"
- missing = missing + "gcc-3.x (needed for qemu-native),"
-
+ # If we'll be running qemu, perform some sanity checks
+ if data.getVar('ENABLE_BINARY_LOCALE_GENERATION', e.data, True):
if "qemu-native" in assume_provided:
- if not check_app_exists("qemu-arm", e.data):
- messages = messages + "qemu-native was in ASSUME_PROVIDED but the QEMU binaries (qemu-arm) can't be found in PATH"
-
- try:
- if os.path.exists("/proc/sys/vm/mmap_min_addr"):
- f = file("/proc/sys/vm/mmap_min_addr", "r")
- if (f.read().strip() != "0"):
- messages = messages + "/proc/sys/vm/mmap_min_addr is not 0. This will cause problems with qemu so please fix the value (as root).\n\nTo fix this in later reboots, set vm.mmap_min_addr = 0 in /etc/sysctl.conf.\n"
- f.close()
- except:
- pass
+ required_utilities += " %s" % (qemu_target_binary(e.data))
for util in required_utilities.split():
if not check_app_exists( util, e.data ):
@@ -135,8 +120,9 @@ def check_sanity(e):
checkfile = os.path.join(tmpdir, "saved_tmpdir")
if os.path.exists(checkfile):
f = file(checkfile, "r")
- if (f.read().strip() != tmpdir):
- messages = messages + "Error, TMPDIR has changed location. You need to either move it back to %s or rebuild\n" % tmpdir
+ oldpath = f.read().strip()
+ if (oldpath != tmpdir):
+ messages = messages + "Error, TMPDIR has changed location. You need to either move it back to %s or rebuild\n" % oldpath
else:
import bb
bb.mkdirhier(tmpdir)
diff --git a/classes/siteinfo.bbclass b/classes/siteinfo.bbclass
index 93cee4f890..d7f27054b0 100644
--- a/classes/siteinfo.bbclass
+++ b/classes/siteinfo.bbclass
@@ -112,14 +112,6 @@ def siteinfo_get_files(d):
bb.debug(1, "SITE files " + sitefiles);
return sitefiles
-#
-# Export CONFIG_SITE to the enviroment. The autotools will make use
-# of this to determine where to load in variables from. This is a
-# space seperate list of shell scripts processed in the order listed.
-#
-export CONFIG_SITE = "${@siteinfo_get_files(d)}"
-
-
def siteinfo_get_endianess(d):
info = get_siteinfo_list(d)
if 'endian-little' in info:
@@ -141,5 +133,3 @@ def siteinfo_get_bits(d):
#
SITEINFO_ENDIANESS = "${@siteinfo_get_endianess(d)}"
SITEINFO_BITS = "${@siteinfo_get_bits(d)}"
-
-
diff --git a/classes/sourcepkg.bbclass b/classes/sourcepkg.bbclass
index 5aacf92d10..ce57ef0e0b 100644
--- a/classes/sourcepkg.bbclass
+++ b/classes/sourcepkg.bbclass
@@ -1,5 +1,5 @@
DEPLOY_DIR_SRC ?= "${DEPLOY_DIR}/sources"
-EXCLUDE_FROM ?= ".pc autom4te.cache"
+EXCLUDE_FROM ?= ".pc patches autom4te.cache"
# used as part of a path. make sure it's set
DISTRO ?= "openembedded"
@@ -30,23 +30,23 @@ def get_src_tree(d):
sourcepkg_do_create_orig_tgz(){
- mkdir -p ${DEPLOY_DIR_SRC}
+ mkdir -p ${DEPLOY_DIR_SRC}/${PN}/${PACKAGE_ARCH}
cd ${WORKDIR}
for i in ${EXCLUDE_FROM}; do
echo $i >> temp/exclude-from-file
done
- src_tree=${@get_src_tree(d)}
+ src_tree=$(basename ${S})
echo $src_tree
- oenote "Creating .orig.tar.gz in ${DEPLOY_DIR_SRC}/${P}.orig.tar.gz"
- tar cvzf ${DEPLOY_DIR_SRC}/${P}.orig.tar.gz --exclude-from temp/exclude-from-file $src_tree
+ oenote "Creating .orig.tar.gz in ${DEPLOY_DIR_SRC}/${PN}/${P}.orig.tar.gz"
+ tar cvzf ${DEPLOY_DIR_SRC}/${PN}/${P}.orig.tar.gz --exclude-from temp/exclude-from-file $src_tree
cp -pPR $src_tree $src_tree.orig
}
sourcepkg_do_archive_bb() {
- src_tree=${@get_src_tree(d)}
+ src_tree=$(basename ${S})
dest=${WORKDIR}/$src_tree/${DISTRO}
mkdir -p $dest
@@ -86,27 +86,27 @@ sourcepkg_do_create_diff_gz(){
done
- src_tree=${@get_src_tree(d)}
+ src_tree=$(basename ${S})
for i in `find . -maxdepth 1 -type f`; do
mkdir -p $src_tree/${DISTRO}/files
cp $i $src_tree/${DISTRO}/files
done
- oenote "Creating .diff.gz in ${DEPLOY_DIR_SRC}/${P}-${PR}.diff.gz"
- LC_ALL=C TZ=UTC0 diff --exclude-from=temp/exclude-from-file -Naur $src_tree.orig $src_tree | gzip -c > ${DEPLOY_DIR_SRC}/${P}-${PR}.diff.gz
+ oenote "Creating .diff.gz in ${DEPLOY_DIR_SRC}/${PN}/${PACKAGE_ARCH}/${P}-${PR}.diff.gz"
+ LC_ALL=C TZ=UTC0 diff --exclude-from=temp/exclude-from-file -Naur $src_tree.orig $src_tree | gzip -c > ${DEPLOY_DIR_SRC}/${PN}/${PACKAGE_ARCH}/${P}-${PR}.diff.gz
rm -rf $src_tree.orig
}
EXPORT_FUNCTIONS do_create_orig_tgz do_archive_bb do_dumpdata do_create_diff_gz
do_create_orig_tgz[deptask] = "do_unpack"
-do_create_diff_gz[deptask] = "do_patch"
+do_create_diff_gz[deptask] = "do_configure"
do_archive_bb[deptask] = "do_patch"
do_dumpdata[deptask] = "do_unpack"
addtask create_orig_tgz after do_unpack before do_patch
addtask archive_bb after do_patch before do_dumpdata
addtask dumpdata after do_archive_bb before do_create_diff_gz
-addtask create_diff_gz after do_dumpdata before do_configure
+addtask create_diff_gz after do_configure before do_compile
diff --git a/classes/src_distribute.bbclass b/classes/src_distribute.bbclass
index 22044752ef..795a5cfe4e 100644
--- a/classes/src_distribute.bbclass
+++ b/classes/src_distribute.bbclass
@@ -3,38 +3,34 @@ SRC_DISTRIBUTECOMMAND[func] = "1"
addtask distribute_sources before do_build after do_fetch
python do_distribute_sources () {
- import re
-
bb.build.exec_func("do_fetch", d)
- l = bb.data.createCopy(d)
- bb.data.update_data(l)
+ cmd = bb.data.getVar('SRC_DISTRIBUTECOMMAND', d, 1)
+ if not cmd:
+ raise bb.build.FuncFailed("Unable to distribute sources, SRC_DISTRIBUTECOMMAND not set")
+
+ try:
+ dlonly = int(d.getVar("SRC_DISTRIBUTE_DLONLY", 1))
+ except ValueError:
+ raise bb.build.FuncFailed("Invalid value for SRC_DISTRIBUTE_DLONLY: expected integer.")
+ dldir = os.path.realpath(d.getVar("DL_DIR", 1) or "")
licenses = (bb.data.getVar('LICENSE', d, 1) or "unknown").split()
- for license in licenses:
- for entry in license.split("|"):
- for url in ((bb.data.getVar('SRC_URI', d, 1) or '').split()):
- bb.fetch.init([url], d)
- s = bb.fetch.localpath(url, d)
- s = re.sub(';.*$', '', s)
-
- try:
- dlonly = int(d.getVar("SRC_DISTRIBUTE_DLONLY", 1))
- except ValueError:
- raise bb.build.FuncFailed("Invalid value for SRC_DISTRIBUTE_DLONLY: expected integer.")
- if dlonly:
- dldir = os.path.realpath(d.getVar("DL_DIR", 1) or "")
- if dldir and not \
- os.path.realpath(s).startswith(dldir + os.path.sep):
- continue
-
- cmd = bb.data.getVar('SRC_DISTRIBUTECOMMAND', d, 1)
- if not cmd:
- raise bb.build.FuncFailed("Unable to distribute sources, SRC_DISTRIBUTECOMMAND not set")
- bb.debug(2, "srcdist: running %s" % cmd)
- bb.data.setVar('SRC', os.path.normpath(s), l)
- bb.data.setVar('LIC', entry, l)
- bb.build.exec_func('SRC_DISTRIBUTECOMMAND', l)
+ urldatadict = bb.fetch.init(d.getVar("SRC_URI", True).split(), d, True)
+ for url, urldata in urldatadict.iteritems():
+ if not urldata.setup:
+ urldata.setup_localpath(d)
+
+ local = urldata.localpath
+ if dlonly and dldir and not \
+ os.path.realpath(local).startswith(dldir + os.path.sep):
+ continue
+
+ bb.data.setVar('SRC', os.path.abspath(local), d)
+ for license in licenses:
+ for entry in license.split("|"):
+ bb.data.setVar('LIC', entry, d)
+ bb.build.exec_func('SRC_DISTRIBUTECOMMAND', d)
}
addtask distribute_sources_all after do_distribute_sources
diff --git a/classes/src_distribute_local.bbclass b/classes/src_distribute_local.bbclass
index 5cec2880aa..7b1e7d7e48 100644
--- a/classes/src_distribute_local.bbclass
+++ b/classes/src_distribute_local.bbclass
@@ -6,24 +6,25 @@ SRC_DISTRIBUTECOMMAND[dirs] = "${SRC_DISTRIBUTEDIR}/${LIC}/${PN}"
# symlinks the files to the SRC_DISTRIBUTEDIR
SRC_DISTRIBUTECOMMAND-symlink () {
- test -e ${SRC}.md5 && ln -sf ${SRC}.md5 .
- ln -sf ${SRC} .
+ test -e "${SRC}.md5" && ln -sf "${SRC}.md5" .
+ ln -sf "${SRC}" .
}
# copies the files to the SRC_DISTRIBUTEDIR
SRC_DISTRIBUTECOMMAND-copy () {
- test -e ${SRC}.md5 && cp -f ${SRC}.md5 .
- cp -fr ${SRC} .
+ test -e "${SRC}.md5" && cp -f "${SRC}.md5" .
+ cp -fr "${SRC}" .
}
# moves the files to the SRC_DISTRIBUTEDIR and symlinks them back
SRC_DISTRIBUTECOMMAND-move+symlink () {
if ! [ -L ${SRC} ]; then
+ src=`basename "${SRC}"`
mv ${SRC} .
- ln -sf $PWD/`basename ${SRC}` ${SRC}
+ ln -sf $src "${SRC}"
if [ -e ${SRC}.md5 ]; then
mv ${SRC}.md5 .
- ln -sf $PWD/`basename ${SRC}.md5` ${SRC}.md5
+ ln -sf $src "${SRC}.md5"
fi
fi
}
diff --git a/classes/staging.bbclass b/classes/staging.bbclass
new file mode 100644
index 0000000000..32038a5076
--- /dev/null
+++ b/classes/staging.bbclass
@@ -0,0 +1,177 @@
+python populate_staging_prehook () {
+ return
+}
+
+python populate_staging_posthook () {
+ return
+}
+
+packagedstaging_fastpath () {
+ :
+}
+
+def package_stagefile(file, d):
+ if bb.data.getVar('PSTAGING_ACTIVE', d, True) == "1":
+ destfile = file.replace(bb.data.getVar("TMPDIR", d, 1), bb.data.getVar("PSTAGE_TMPDIR_STAGE", d, 1))
+ bb.mkdirhier(os.path.dirname(destfile))
+ #print "%s to %s" % (file, destfile)
+ bb.copyfile(file, destfile)
+
+package_stagefile_shell() {
+ if [ "$PSTAGING_ACTIVE" = "1" ]; then
+ srcfile=$1
+ destfile=`echo $srcfile | sed s#${TMPDIR}#${PSTAGE_TMPDIR_STAGE}#`
+ destdir=`dirname $destfile`
+ mkdir -p $destdir
+ cp -dp $srcfile $destfile
+ fi
+}
+
+sysroot_stage_dir() {
+ src="$1"
+ dest="$2"
+ # This will remove empty directories so we can ignore them
+ rmdir "$src" 2> /dev/null || true
+ if [ -d "$src" ]; then
+ mkdir -p "$dest"
+ cp -fpPR "$src"/* "$dest"
+ fi
+}
+
+sysroot_stage_libdir() {
+ src="$1"
+ dest="$2"
+
+ olddir=`pwd`
+ cd $src
+ las=$(find . -name \*.la -type f)
+ cd $olddir
+ echo "Found la files: $las"
+ for i in $las
+ do
+ sed -e 's/^installed=yes$/installed=no/' \
+ -e '/^dependency_libs=/s,${WORKDIR}[[:alnum:]/\._+-]*/\([[:alnum:]\._+-]*\),${STAGING_LIBDIR}/\1,g' \
+ -e "/^dependency_libs=/s,\([[:space:]']\)${libdir},\1${STAGING_LIBDIR},g" \
+ -i $src/$i
+ done
+ sysroot_stage_dir $src $dest
+}
+
+sysroot_stage_dirs() {
+ from="$1"
+ to="$2"
+
+ sysroot_stage_dir $from${includedir} $to${STAGING_INCDIR}
+ if [ "${BUILD_SYS}" = "${HOST_SYS}" ]; then
+ sysroot_stage_dir $from${bindir} $to${STAGING_DIR_HOST}${bindir}
+ sysroot_stage_dir $from${sbindir} $to${STAGING_DIR_HOST}${sbindir}
+ sysroot_stage_dir $from${base_bindir} $to${STAGING_DIR_HOST}${base_bindir}
+ sysroot_stage_dir $from${base_sbindir} $to${STAGING_DIR_HOST}${base_sbindir}
+ sysroot_stage_dir $from${libexecdir} $to${STAGING_DIR_HOST}${libexecdir}
+ if [ "${prefix}/lib" != "${libdir}" ]; then
+ # python puts its files in here, make sure they are staged as well
+ autotools_stage_dir $from/${prefix}/lib $to${STAGING_DIR_HOST}${prefix}/lib
+ fi
+ fi
+ if [ -d $from${libdir} ]
+ then
+ sysroot_stage_libdir $from/${libdir} $to${STAGING_LIBDIR}
+ fi
+ if [ -d $from${base_libdir} ]
+ then
+ sysroot_stage_libdir $from${base_libdir} $to${STAGING_DIR_HOST}${base_libdir}
+ fi
+ sysroot_stage_dir $from${datadir} $to${STAGING_DATADIR}
+ sysroot_stage_dir $from${sysconfdir} $to${STAGING_ETCDIR}
+}
+
+sysroot_stage_all() {
+ sysroot_stage_dirs ${D} ${SYSROOT_DESTDIR}
+}
+
+def is_legacy_staging(d):
+ stagefunc = bb.data.getVar('do_stage', d, True)
+ legacy = True
+ if stagefunc is None:
+ legacy = False
+ elif stagefunc.strip() == "autotools_stage_all":
+ legacy = False
+ elif stagefunc.strip() == "do_stage_native" and bb.data.getVar('AUTOTOOLS_NATIVE_STAGE_INSTALL', d, 1) == "1":
+ legacy = False
+ elif bb.data.getVar('NATIVE_INSTALL_WORKS', d, 1) == "1":
+ legacy = False
+ if bb.data.getVar('PSTAGE_BROKEN_DESTDIR', d, 1) == "1":
+ legacy = True
+ if bb.data.getVar('FORCE_LEGACY_STAGING', d, 1) == "1":
+ legacy = True
+ return legacy
+
+do_populate_staging[dirs] = "${STAGING_DIR_TARGET}/${bindir} ${STAGING_DIR_TARGET}/${libdir} \
+ ${STAGING_DIR_TARGET}/${includedir} \
+ ${STAGING_BINDIR_NATIVE} ${STAGING_LIBDIR_NATIVE} \
+ ${STAGING_INCDIR_NATIVE} \
+ ${STAGING_DATADIR} \
+ ${S} ${B}"
+
+# Could be compile but populate_staging and do_install shouldn't run at the same time
+addtask populate_staging after do_install before do_build
+
+SYSROOT_PREPROCESS_FUNCS ?= ""
+SYSROOT_DESTDIR = "${WORKDIR}/sysroot-destdir/"
+SYSROOT_LOCK = "${STAGING_DIR}/staging.lock"
+
+python do_populate_staging () {
+ #
+ # if do_stage exists, we're legacy. In that case run the do_stage,
+ # modify the SYSROOT_DESTDIR variable and then run the staging preprocess
+ # functions against staging directly.
+ #
+ # Otherwise setup a destdir, copy the results from do_install
+ # and run the staging preprocess against that
+ #
+ pstageactive = (bb.data.getVar("PSTAGING_ACTIVE", d, True) == "1")
+ lockfile = bb.data.getVar("SYSROOT_LOCK", d, True)
+ stagefunc = bb.data.getVar('do_stage', d, True)
+ legacy = is_legacy_staging(d)
+ if legacy:
+ bb.data.setVar("SYSROOT_DESTDIR", "", d)
+ bb.note("Legacy staging mode for %s" % bb.data.getVar("FILE", d, True))
+
+ try:
+ file = open("%s/legacy-staging.log" % bb.data.getVar("TMPDIR", d, 1), "a")
+ file.write("%s\n" % bb.data.getVar("FILE", d, True))
+ file.close()
+ except:
+ pass
+
+ if bb.data.getVarFlags('do_stage', d) is None:
+ bb.fatal("This recipe (%s) has a do_stage_prepend or do_stage_append and do_stage now doesn't exist. Please rename this to do_stage()" % bb.data.getVar("FILE", d, True))
+ lock = bb.utils.lockfile(lockfile)
+ bb.build.exec_func('populate_staging_prehook', d)
+ bb.build.exec_func('do_stage', d)
+ for f in (bb.data.getVar('SYSROOT_PREPROCESS_FUNCS', d, True) or '').split():
+ bb.build.exec_func(f, d)
+ bb.build.exec_func('populate_staging_posthook', d)
+ bb.utils.unlockfile(lock)
+ else:
+ dest = bb.data.getVar('D', d, True)
+ sysrootdest = bb.data.expand('${SYSROOT_DESTDIR}${STAGING_DIR_TARGET}', d)
+ bb.mkdirhier(sysrootdest)
+
+ bb.build.exec_func("sysroot_stage_all", d)
+ #os.system('cp -pPR %s/* %s/' % (dest, sysrootdest))
+ for f in (bb.data.getVar('SYSROOT_PREPROCESS_FUNCS', d, True) or '').split():
+ bb.build.exec_func(f, d)
+ bb.build.exec_func("packagedstaging_fastpath", d)
+
+ lock = bb.utils.lockfile(lockfile)
+ os.system(bb.data.expand('cp -pPR ${SYSROOT_DESTDIR}${TMPDIR}/* ${TMPDIR}/', d))
+ bb.utils.unlockfile(lock)
+}
+
+python () {
+ if is_legacy_staging(d):
+ bb.debug(1, "Legacy staging mode for %s" % bb.data.getVar("FILE", d, True))
+ if bb.data.getVarFlags('do_stage', d) is None:
+ bb.error("This recipe (%s) has a do_stage_prepend or do_stage_append and do_stage now doesn't exist. Please rename this to do_stage()" % bb.data.getVar("FILE", d, True))
+}
diff --git a/classes/testlab.bbclass b/classes/testlab.bbclass
index fc923c5112..e6c9c8e284 100644
--- a/classes/testlab.bbclass
+++ b/classes/testlab.bbclass
@@ -24,26 +24,31 @@
do_testlab() {
if [ -e ${IMAGE_ROOTFS}/etc/opkg ] && [ "${ONLINE_PACKAGE_MANAGEMENT}" = "full" ] ; then
+ IPKG_TMP_DIR="${IMAGE_ROOTFS}-tmp"
+ IPKG_ARGS="-f ${STAGING_ETCDIR_NATIVE}/opkg.conf -o ${IMAGE_ROOTFS} -t ${IPKG_TMP_DIR}"
+
TESTLAB_DIR="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-testlab"
mkdir -p ${TESTLAB_DIR}/
+ mkdir -p ${IPKG_TMP_DIR}/
ls -laR ${IMAGE_ROOTFS} > ${TESTLAB_DIR}/files-in-image.txt
echo > ${TESTLAB_DIR}/installed-packages.txt
echo -e "digraph depends {\n node [shape=plaintext]" > ${TESTLAB_DIR}/depends.dot
- for pkg in $(opkg-cl -f ${IMAGE_ROOTFS}/etc/opkg -o ${IMAGE_ROOTFS} list_installed | awk '{print $1}') ; do
- opkg-cl -f ${IMAGE_ROOTFS}/etc/opkg -o ${IMAGE_ROOTFS} info $pkg | awk '/Package/ {printf $2"_"} /Version/ {printf $2"_"} /Archi/ {print $2".ipk"}' >> ${TESTLAB_DIR}/installed-packages.txt
+ for pkg in $(opkg-cl ${IPKG_ARGS} list_installed | awk '{print $1}') ; do
+ opkg-cl ${IPKG_ARGS} info $pkg | awk '/Package/ {printf $2"_"} /Version/ {printf $2"_"} /Archi/ {print $2".ipk"}' >> ${TESTLAB_DIR}/installed-packages.txt
- for depends in $(opkg-cl -f ${IMAGE_ROOTFS}/etc/opkg -o ${IMAGE_ROOTFS} info $pkg | grep Depends) ; do
+ for depends in $(opkg-cl ${IPKG_ARGS} info $pkg | grep Depends) ; do
echo "$pkg OPP $depends;" | grep -v "(" | grep -v ")" | grep -v Depends | sed -e 's:,::g' -e 's:-:_:g' -e 's:\.:_:g' -e 's:+::g' |sed 's:OPP:->:g' >> ${TESTLAB_DIR}/depends.dot
done
- for recommends in $(opkg-cl -f ${IMAGE_ROOTFS}/etc/opkg -o ${IMAGE_ROOTFS} info $pkg | grep Recom) ; do
+ for recommends in $(opkg-cl ${IPKG_ARGS} info $pkg | grep Recom) ; do
echo "$pkg OPP $recommends [style=dotted];" | grep -v "(" | grep -v ")" | grep -v Recom | sed -e 's:,::g' -e 's:-:_:g' -e 's:\.:_:g' -e 's:+::g' |sed 's:OPP:->:g' >> ${TESTLAB_DIR}/depends.dot
done
done
echo "}" >> ${TESTLAB_DIR}/depends.dot
+ rm -rf ${IPKG_TMP_DIR}
grep -v kernel_2 ${TESTLAB_DIR}/depends.dot | grep -v kernel_image > ${TESTLAB_DIR}/depends-nokernel.dot
grep -v libc6 ${TESTLAB_DIR}/depends-nokernel.dot | grep -v libgcc > ${TESTLAB_DIR}/depends-nokernel-nolibc.dot
diff --git a/classes/utility-tasks.bbclass b/classes/utility-tasks.bbclass
new file mode 100644
index 0000000000..29bc781b32
--- /dev/null
+++ b/classes/utility-tasks.bbclass
@@ -0,0 +1,133 @@
+addtask listtasks
+do_listtasks[nostamp] = "1"
+python do_listtasks() {
+ import sys
+ # emit variables and shell functions
+ #bb.data.emit_env(sys.__stdout__, d)
+ # emit the metadata which isnt valid shell
+ for e in d.keys():
+ if bb.data.getVarFlag(e, 'task', d):
+ sys.__stdout__.write("%s\n" % e)
+}
+
+addtask clean
+do_clean[dirs] = "${TOPDIR}"
+do_clean[nostamp] = "1"
+python do_clean() {
+ """clear the build and temp directories"""
+ dir = bb.data.expand("${WORKDIR}", d)
+ if dir == '//': raise bb.build.FuncFailed("wrong DATADIR")
+ bb.note("removing " + base_path_out(dir, d))
+ os.system('rm -rf ' + dir)
+
+ dir = "%s.*" % bb.data.expand(bb.data.getVar('STAMP', d), d)
+ bb.note("removing " + base_path_out(dir, d))
+ os.system('rm -f '+ dir)
+}
+
+python do_cleanall() {
+ pass
+}
+do_cleanall[recrdeptask] = "do_clean"
+addtask cleanall after do_clean
+
+addtask rebuild after do_${BB_DEFAULT_TASK}
+do_rebuild[dirs] = "${TOPDIR}"
+do_rebuild[nostamp] = "1"
+python do_rebuild() {
+ """rebuild a package"""
+}
+
+addtask mrproper
+do_mrproper[dirs] = "${TOPDIR}"
+do_mrproper[nostamp] = "1"
+python do_mrproper() {
+ """clear downloaded sources, build and temp directories"""
+ dir = bb.data.expand("${DL_DIR}", d)
+ if dir == '/': bb.build.FuncFailed("wrong DATADIR")
+ bb.debug(2, "removing " + dir)
+ os.system('rm -rf ' + dir)
+ bb.build.exec_func('do_clean', d)
+}
+
+addtask distclean
+do_distclean[dirs] = "${TOPDIR}"
+do_distclean[nostamp] = "1"
+python do_distclean() {
+ """clear downloaded sources, build and temp directories"""
+
+ bb.build.exec_func('do_clean', d)
+
+ src_uri = bb.data.getVar('SRC_URI', d, 1)
+ if not src_uri:
+ return
+
+ for uri in src_uri.split():
+ if bb.decodeurl(uri)[0] == "file":
+ continue
+
+ try:
+ local = bb.data.expand(bb.fetch.localpath(uri, d), d)
+ except bb.MalformedUrl, e:
+ bb.debug(1, 'Unable to generate local path for malformed uri: %s' % e)
+ else:
+ bb.note("removing %s" % base_path_out(local, d))
+ try:
+ if os.path.exists(local + ".md5"):
+ os.remove(local + ".md5")
+ if os.path.exists(local):
+ os.remove(local)
+ except OSError, e:
+ bb.note("Error in removal: %s" % e)
+}
+
+addtask checkuri
+do_checkuri[nostamp] = "1"
+python do_checkuri() {
+ import sys
+
+ localdata = bb.data.createCopy(d)
+ bb.data.update_data(localdata)
+
+ src_uri = bb.data.getVar('SRC_URI', localdata, 1)
+
+ try:
+ bb.fetch.init(src_uri.split(),d)
+ except bb.fetch.NoMethodError:
+ (type, value, traceback) = sys.exc_info()
+ raise bb.build.FuncFailed("No method: %s" % value)
+
+ try:
+ bb.fetch.checkstatus(localdata)
+ except bb.fetch.MissingParameterError:
+ (type, value, traceback) = sys.exc_info()
+ raise bb.build.FuncFailed("Missing parameters: %s" % value)
+ except bb.fetch.FetchError:
+ (type, value, traceback) = sys.exc_info()
+ raise bb.build.FuncFailed("Fetch failed: %s" % value)
+ except bb.fetch.MD5SumError:
+ (type, value, traceback) = sys.exc_info()
+ raise bb.build.FuncFailed("MD5 failed: %s" % value)
+ except:
+ (type, value, traceback) = sys.exc_info()
+ raise bb.build.FuncFailed("Unknown fetch Error: %s" % value)
+}
+
+addtask checkuriall after do_checkuri
+do_checkuriall[recrdeptask] = "do_checkuri"
+do_checkuriall[nostamp] = "1"
+do_checkuriall() {
+ :
+}
+
+addtask fetchall after do_fetch
+do_fetchall[recrdeptask] = "do_fetch"
+do_fetchall() {
+ :
+}
+
+addtask buildall after do_build
+do_buildall[recrdeptask] = "do_build"
+do_buildall() {
+ :
+}
diff --git a/classes/utils.bbclass b/classes/utils.bbclass
new file mode 100644
index 0000000000..6ff11dd4a7
--- /dev/null
+++ b/classes/utils.bbclass
@@ -0,0 +1,517 @@
+def subprocess_setup():
+ import signal
+ # Python installs a SIGPIPE handler by default. This is usually not what
+ # non-Python subprocesses expect.
+ signal.signal(signal.SIGPIPE, signal.SIG_DFL)
+
+def oe_popen(d, cmd, **kwargs):
+ """ Convenience function to call out processes with our exported
+ variables in the environment.
+ """
+ from subprocess import Popen
+
+ if kwargs.get("env") is None:
+ env = d.getVar("__oe_popen_env", False)
+ if env is None:
+ env = {}
+ for v in d.keys():
+ if d.getVarFlag(v, "export"):
+ env[v] = d.getVar(v, True) or ""
+ d.setVar("__oe_popen_env", env)
+ kwargs["env"] = env
+
+ kwargs["preexec_fn"] = subprocess_setup
+
+ return Popen(cmd, **kwargs)
+
+def oe_system(d, cmd):
+ """ Popen based version of os.system. """
+ return oe_popen(d, cmd, shell=True).wait()
+
+# like os.path.join but doesn't treat absolute RHS specially
+def base_path_join(a, *p):
+ path = a
+ for b in p:
+ if path == '' or path.endswith('/'):
+ path += b
+ else:
+ path += '/' + b
+ return path
+
+def base_path_relative(src, dest):
+ """ Return a relative path from src to dest.
+
+ >>> base_path_relative("/usr/bin", "/tmp/foo/bar")
+ ../../tmp/foo/bar
+
+ >>> base_path_relative("/usr/bin", "/usr/lib")
+ ../lib
+
+ >>> base_path_relative("/tmp", "/tmp/foo/bar")
+ foo/bar
+ """
+ from os.path import sep, pardir, normpath, commonprefix
+
+ destlist = normpath(dest).split(sep)
+ srclist = normpath(src).split(sep)
+
+ # Find common section of the path
+ common = commonprefix([destlist, srclist])
+ commonlen = len(common)
+
+ # Climb back to the point where they differentiate
+ relpath = [ pardir ] * (len(srclist) - commonlen)
+ if commonlen < len(destlist):
+ # Add remaining portion
+ relpath += destlist[commonlen:]
+
+ return sep.join(relpath)
+
+def base_path_out(path, d):
+ """ Prepare a path for display to the user. """
+ rel = base_path_relative(d.getVar("TOPDIR", 1), path)
+ if len(rel) > len(path):
+ return path
+ else:
+ return rel
+
+# for MD5/SHA handling
+def base_chk_load_parser(config_paths):
+ import ConfigParser
+ parser = ConfigParser.ConfigParser()
+ if len(parser.read(config_paths)) < 1:
+ raise ValueError("no ini files could be found")
+
+ return parser
+
+def base_chk_file_vars(parser, localpath, params, data):
+ try:
+ name = params["name"]
+ except KeyError:
+ return False
+ if name:
+ md5flag = "%s.md5sum" % name
+ sha256flag = "%s.sha256sum" % name
+ else:
+ md5flag = "md5sum"
+ sha256flag = "sha256sum"
+ want_md5sum = bb.data.getVarFlag("SRC_URI", md5flag, data)
+ want_sha256sum = bb.data.getVarFlag("SRC_URI", sha256flag, data)
+
+ if (want_sha256sum == None and want_md5sum == None):
+ # no checksums to check, nothing to do
+ return False
+
+ if not os.path.exists(localpath):
+ localpath = base_path_out(localpath, data)
+ bb.note("The localpath does not exist '%s'" % localpath)
+ raise Exception("The path does not exist '%s'" % localpath)
+
+ if want_md5sum:
+ try:
+ md5pipe = os.popen('PATH=%s md5sum "%s"' % (bb.data.getVar('PATH', data, True), localpath))
+ md5data = (md5pipe.readline().split() or [ "" ])[0]
+ md5pipe.close()
+ except OSError, e:
+ raise Exception("Executing md5sum failed")
+ if want_md5sum != md5data:
+ bb.note("The MD5Sums did not match. Wanted: '%s' and Got: '%s'" % (want_md5sum, md5data))
+ raise Exception("MD5 Sums do not match. Wanted: '%s' Got: '%s'" % (want_md5sum, md5data))
+
+ if want_sha256sum:
+ try:
+ shapipe = os.popen('PATH=%s oe_sha256sum "%s"' % (bb.data.getVar('PATH', data, True), localpath))
+ sha256data = (shapipe.readline().split() or [ "" ])[0]
+ shapipe.close()
+ except OSError, e:
+ raise Exception("Executing shasum failed")
+ if want_sha256sum != sha256data:
+ bb.note("The SHA256Sums did not match. Wanted: '%s' and Got: '%s'" % (want_sha256sum, sha256data))
+ raise Exception("SHA256 Sums do not match. Wanted: '%s' Got: '%s'" % (want_sha256sum, sha256data))
+
+ return True
+
+
+def base_chk_file(parser, pn, pv, src_uri, localpath, data):
+ no_checksum = False
+ # Try PN-PV-SRC_URI first and then try PN-SRC_URI
+ # we rely on the get method to create errors
+ pn_pv_src = "%s-%s-%s" % (pn,pv,src_uri)
+ pn_src = "%s-%s" % (pn,src_uri)
+ if parser.has_section(pn_pv_src):
+ md5 = parser.get(pn_pv_src, "md5")
+ sha256 = parser.get(pn_pv_src, "sha256")
+ elif parser.has_section(pn_src):
+ md5 = parser.get(pn_src, "md5")
+ sha256 = parser.get(pn_src, "sha256")
+ elif parser.has_section(src_uri):
+ md5 = parser.get(src_uri, "md5")
+ sha256 = parser.get(src_uri, "sha256")
+ else:
+ no_checksum = True
+
+ # md5 and sha256 should be valid now
+ if not os.path.exists(localpath):
+ localpath = base_path_out(localpath, data)
+ bb.note("The localpath does not exist '%s'" % localpath)
+ raise Exception("The path does not exist '%s'" % localpath)
+
+
+ # call md5(sum) and shasum
+ try:
+ md5pipe = os.popen('PATH=%s md5sum "%s"' % (bb.data.getVar('PATH', data, True), localpath))
+ md5data = (md5pipe.readline().split() or [ "" ])[0]
+ md5pipe.close()
+ except OSError:
+ raise Exception("Executing md5sum failed")
+
+ try:
+ shapipe = os.popen('PATH=%s oe_sha256sum "%s"' % (bb.data.getVar('PATH', data, True), localpath))
+ shadata = (shapipe.readline().split() or [ "" ])[0]
+ shapipe.close()
+ except OSError:
+ raise Exception("Executing shasum failed")
+
+ if no_checksum == True: # we do not have conf/checksums.ini entry
+ try:
+ file = open("%s/checksums.ini" % bb.data.getVar("TMPDIR", data, 1), "a")
+ except:
+ return False
+
+ if not file:
+ raise Exception("Creating checksums.ini failed")
+
+ file.write("[%s]\nmd5=%s\nsha256=%s\n\n" % (src_uri, md5data, shadata))
+ file.close()
+
+ from string import maketrans
+ trtable = maketrans("", "")
+ uname = src_uri.split("/")[-1].translate(trtable, "-+._")
+
+ try:
+ ufile = open("%s/%s.sum" % (bb.data.getVar("TMPDIR", data, 1), uname), "wt")
+ except:
+ return False
+
+ if not ufile:
+ raise Exception("Creating %s.sum failed" % uname)
+
+ ufile.write("SRC_URI = \"%s;name=%s\"\nSRC_URI[%s.md5sum] = \"%s\"\nSRC_URI[%s.sha256sum] = \"%s\"\n" % (src_uri, uname, uname, md5data, uname, shadata))
+ ufile.close()
+
+ if not bb.data.getVar("OE_STRICT_CHECKSUMS",data, True):
+ bb.note("This package has no entry in checksums.ini, please add one")
+ bb.note("\n[%s]\nmd5=%s\nsha256=%s" % (src_uri, md5data, shadata))
+ bb.note("This package has no checksums in corresponding recipe, please add")
+ bb.note("SRC_URI = \"%s;name=%s\"\nSRC_URI[%s.md5sum] = \"%s\"\nSRC_URI[%s.sha256sum] = \"%s\"\n" % (src_uri, uname, uname, md5data, uname, shadata))
+ return True
+ else:
+ bb.note("Missing checksum")
+ return False
+
+ if not md5 == md5data:
+ bb.note("The MD5Sums did not match. Wanted: '%s' and Got: '%s'" % (md5,md5data))
+ raise Exception("MD5 Sums do not match. Wanted: '%s' Got: '%s'" % (md5, md5data))
+
+ if not sha256 == shadata:
+ bb.note("The SHA256 Sums do not match. Wanted: '%s' Got: '%s'" % (sha256,shadata))
+ raise Exception("SHA256 Sums do not match. Wanted: '%s' Got: '%s'" % (sha256, shadata))
+
+ return True
+
+def base_read_file(filename):
+ try:
+ f = file( filename, "r" )
+ except IOError, reason:
+ return "" # WARNING: can't raise an error now because of the new RDEPENDS handling. This is a bit ugly. :M:
+ else:
+ return f.read().strip()
+ return None
+
+def base_ifelse(condition, iftrue = True, iffalse = False):
+ if condition:
+ return iftrue
+ else:
+ return iffalse
+
+def base_conditional(variable, checkvalue, truevalue, falsevalue, d):
+ if bb.data.getVar(variable,d,1) == checkvalue:
+ return truevalue
+ else:
+ return falsevalue
+
+def base_less_or_equal(variable, checkvalue, truevalue, falsevalue, d):
+ if float(bb.data.getVar(variable,d,1)) <= float(checkvalue):
+ return truevalue
+ else:
+ return falsevalue
+
+def base_version_less_or_equal(variable, checkvalue, truevalue, falsevalue, d):
+ result = bb.vercmp(bb.data.getVar(variable,d,True), checkvalue)
+ if result <= 0:
+ return truevalue
+ else:
+ return falsevalue
+
+def base_contains(variable, checkvalues, truevalue, falsevalue, d):
+ val = bb.data.getVar(variable,d,1)
+ if not val:
+ return falsevalue
+ matches = 0
+ if type(checkvalues).__name__ == "str":
+ checkvalues = [checkvalues]
+ for value in checkvalues:
+ if val.find(value) != -1:
+ matches = matches + 1
+ if matches == len(checkvalues):
+ return truevalue
+ return falsevalue
+
+def base_both_contain(variable1, variable2, checkvalue, d):
+ if bb.data.getVar(variable1,d,1).find(checkvalue) != -1 and bb.data.getVar(variable2,d,1).find(checkvalue) != -1:
+ return checkvalue
+ else:
+ return ""
+
+def base_prune_suffix(var, suffixes, d):
+ # See if var ends with any of the suffixes listed and
+ # remove it if found
+ for suffix in suffixes:
+ if var.endswith(suffix):
+ return var.replace(suffix, "")
+ return var
+
+def oe_filter(f, str, d):
+ from re import match
+ return " ".join(filter(lambda x: match(f, x, 0), str.split()))
+
+def oe_filter_out(f, str, d):
+ from re import match
+ return " ".join(filter(lambda x: not match(f, x, 0), str.split()))
+
+oedebug() {
+ test $# -ge 2 || {
+ echo "Usage: oedebug level \"message\""
+ exit 1
+ }
+
+ test ${OEDEBUG:-0} -ge $1 && {
+ shift
+ echo "DEBUG:" $*
+ }
+}
+
+oe_soinstall() {
+ # Purpose: Install shared library file and
+ # create the necessary links
+ # Example:
+ #
+ # oe_
+ #
+ #oenote installing shared library $1 to $2
+ #
+ libname=`basename $1`
+ install -m 755 $1 $2/$libname
+ sonamelink=`${HOST_PREFIX}readelf -d $1 |grep 'Library soname:' |sed -e 's/.*\[\(.*\)\].*/\1/'`
+ solink=`echo $libname | sed -e 's/\.so\..*/.so/'`
+ ln -sf $libname $2/$sonamelink
+ ln -sf $libname $2/$solink
+}
+
+oe_libinstall() {
+ # Purpose: Install a library, in all its forms
+ # Example
+ #
+ # oe_libinstall libltdl ${STAGING_LIBDIR}/
+ # oe_libinstall -C src/libblah libblah ${D}/${libdir}/
+ dir=""
+ libtool=""
+ silent=""
+ require_static=""
+ require_shared=""
+ staging_install=""
+ while [ "$#" -gt 0 ]; do
+ case "$1" in
+ -C)
+ shift
+ dir="$1"
+ ;;
+ -s)
+ silent=1
+ ;;
+ -a)
+ require_static=1
+ ;;
+ -so)
+ require_shared=1
+ ;;
+ -*)
+ oefatal "oe_libinstall: unknown option: $1"
+ ;;
+ *)
+ break;
+ ;;
+ esac
+ shift
+ done
+
+ libname="$1"
+ shift
+ destpath="$1"
+ if [ -z "$destpath" ]; then
+ oefatal "oe_libinstall: no destination path specified"
+ fi
+ if echo "$destpath/" | egrep '^${STAGING_LIBDIR}/' >/dev/null
+ then
+ staging_install=1
+ fi
+
+ __runcmd () {
+ if [ -z "$silent" ]; then
+ echo >&2 "oe_libinstall: $*"
+ fi
+ $*
+ }
+
+ if [ -z "$dir" ]; then
+ dir=`pwd`
+ fi
+
+ dotlai=$libname.lai
+
+ # Sanity check that the libname.lai is unique
+ number_of_files=`(cd $dir; find . -name "$dotlai") | wc -l`
+ if [ $number_of_files -gt 1 ]; then
+ oefatal "oe_libinstall: $dotlai is not unique in $dir"
+ fi
+
+
+ dir=$dir`(cd $dir;find . -name "$dotlai") | sed "s/^\.//;s/\/$dotlai\$//;q"`
+ olddir=`pwd`
+ __runcmd cd $dir
+
+ lafile=$libname.la
+
+ # If such file doesn't exist, try to cut version suffix
+ if [ ! -f "$lafile" ]; then
+ libname1=`echo "$libname" | sed 's/-[0-9.]*$//'`
+ lafile1=$libname.la
+ if [ -f "$lafile1" ]; then
+ libname=$libname1
+ lafile=$lafile1
+ fi
+ fi
+
+ if [ -f "$lafile" ]; then
+ # libtool archive
+ eval `cat $lafile|grep "^library_names="`
+ libtool=1
+ else
+ library_names="$libname.so* $libname.dll.a"
+ fi
+
+ __runcmd install -d $destpath/
+ dota=$libname.a
+ if [ -f "$dota" -o -n "$require_static" ]; then
+ __runcmd install -m 0644 $dota $destpath/
+ fi
+ if [ -f "$dotlai" -a -n "$libtool" ]; then
+ if test -n "$staging_install"
+ then
+ # stop libtool using the final directory name for libraries
+ # in staging:
+ __runcmd rm -f $destpath/$libname.la
+ __runcmd sed -e 's/^installed=yes$/installed=no/' \
+ -e '/^dependency_libs=/s,${WORKDIR}[[:alnum:]/\._+-]*/\([[:alnum:]\._+-]*\),${STAGING_LIBDIR}/\1,g' \
+ -e "/^dependency_libs=/s,\([[:space:]']\)${libdir},\1${STAGING_LIBDIR},g" \
+ $dotlai >$destpath/$libname.la
+ else
+ __runcmd install -m 0644 $dotlai $destpath/$libname.la
+ fi
+ fi
+
+ for name in $library_names; do
+ files=`eval echo $name`
+ for f in $files; do
+ if [ ! -e "$f" ]; then
+ if [ -n "$libtool" ]; then
+ oefatal "oe_libinstall: $dir/$f not found."
+ fi
+ elif [ -L "$f" ]; then
+ __runcmd cp -P "$f" $destpath/
+ elif [ ! -L "$f" ]; then
+ libfile="$f"
+ __runcmd install -m 0755 $libfile $destpath/
+ fi
+ done
+ done
+
+ if [ -z "$libfile" ]; then
+ if [ -n "$require_shared" ]; then
+ oefatal "oe_libinstall: unable to locate shared library"
+ fi
+ elif [ -z "$libtool" ]; then
+ # special case hack for non-libtool .so.#.#.# links
+ baselibfile=`basename "$libfile"`
+ if (echo $baselibfile | grep -qE '^lib.*\.so\.[0-9.]*$'); then
+ sonamelink=`${HOST_PREFIX}readelf -d $libfile |grep 'Library soname:' |sed -e 's/.*\[\(.*\)\].*/\1/'`
+ solink=`echo $baselibfile | sed -e 's/\.so\..*/.so/'`
+ if [ -n "$sonamelink" -a x"$baselibfile" != x"$sonamelink" ]; then
+ __runcmd ln -sf $baselibfile $destpath/$sonamelink
+ fi
+ __runcmd ln -sf $baselibfile $destpath/$solink
+ fi
+ fi
+
+ __runcmd cd "$olddir"
+}
+
+oe_machinstall() {
+ # Purpose: Install machine dependent files, if available
+ # If not available, check if there is a default
+ # If no default, just touch the destination
+ # Example:
+ # $1 $2 $3 $4
+ # oe_machinstall -m 0644 fstab ${D}/etc/fstab
+ #
+ # TODO: Check argument number?
+ #
+ filename=`basename $3`
+ dirname=`dirname $3`
+
+ for o in `echo ${OVERRIDES} | tr ':' ' '`; do
+ if [ -e $dirname/$o/$filename ]; then
+ oenote $dirname/$o/$filename present, installing to $4
+ install $1 $2 $dirname/$o/$filename $4
+ return
+ fi
+ done
+# oenote overrides specific file NOT present, trying default=$3...
+ if [ -e $3 ]; then
+ oenote $3 present, installing to $4
+ install $1 $2 $3 $4
+ else
+ oenote $3 NOT present, touching empty $4
+ touch $4
+ fi
+}
+
+def check_app_exists(app, d):
+ from bb import which, data
+
+ app = data.expand(app, d)
+ path = data.getVar('PATH', d, 1)
+ return len(which(path, app)) != 0
+
+def explode_deps(s):
+ return bb.utils.explode_deps(s)
+
+def base_set_filespath(path, d):
+ bb.note("base_set_filespath usage is deprecated, %s should be fixed" % d.getVar("P", 1))
+ filespath = []
+ # The ":" ensures we have an 'empty' override
+ overrides = (bb.data.getVar("OVERRIDES", d, 1) or "") + ":"
+ for p in path:
+ for o in overrides.split(":"):
+ filespath.append(os.path.join(p, o))
+ return ":".join(filespath)
diff --git a/classes/vala.bbclass b/classes/vala.bbclass
index 125820c00c..26339058c8 100644
--- a/classes/vala.bbclass
+++ b/classes/vala.bbclass
@@ -5,10 +5,12 @@ FILES_${PN}-dev += "\
${datadir}/vala/vapi/*.deps \
"
+VALA_DONT_STAGE_VAPIS ?= "\(/config.vapi$\)\|\(/config.deps$\)"
+
# .vapi and .deps files are arch independent and need to be present in the
# staging datadir for the native vala compiler
do_stage_append() {
install -d ${STAGING_DATADIR_NATIVE}/vala/vapi
- find . -name "*.vapi" -exec install -m 0644 {} ${STAGING_DATADIR_NATIVE}/vala/vapi/ \;
- find . -name "*.deps" -exec install -m 0644 {} ${STAGING_DATADIR_NATIVE}/vala/vapi/ \;
+ for VALAFILE in `find . -name "*.vapi" | grep -v "$VALA_DONT_STAGE_VAPIS"`; do install -m 0644 ${VALAFILE} ${STAGING_DATADIR_NATIVE}/vala/vapi/; done
+ for VALAFILE in `find . -name "*.deps" | grep -v "$VALA_DONT_STAGE_VAPIS"`; do install -m 0644 ${VALAFILE} ${STAGING_DATADIR_NATIVE}/vala/vapi/; done
}
diff --git a/classes/xilinx-bsp.bbclass b/classes/xilinx-bsp.bbclass
index f657e5be94..d32c60ec73 100644
--- a/classes/xilinx-bsp.bbclass
+++ b/classes/xilinx-bsp.bbclass
@@ -3,7 +3,7 @@
#
#This class handles all the intricasies of getting the required files from the
#ISE/EDK/project to the kernel and prepare the kernel for compilation.
-#The Xilinx EDK supports 2 different architectures : PowerPC (ppc 405) and Microblaze
+#The Xilinx EDK supports 2 different architectures : PowerPC (ppc 405,440) and Microblaze
#Only the PowerPC BSP has been tested so far
#For this to work correctly you need to add XILINX_BSP_PATH and XILINX_BOARD to your
#local.conf
@@ -12,38 +12,40 @@
#
#Currently supported boards
#Xilinx ML403
+#Xilinx ML507
#More to come soon ;)
do_configure_prepend() {
-
#first check that the XILINX_BSP_PATH and XILINX_BOARD have been defined in local.conf
-if [ -z "${XILINX_BSP_PATH}" ]; then
- oefatal "XILINX_BSP_PATH not defined ! Exiting..."
- exit 1
-
-else
- if [ -z "${XILINX_BOARD}" ]; then
- oefatal "XILINX_BOARD not defined ! Exiting"
- exit 1
- fi
-
-fi
#now depending on the board type and arch do what is nessesary
-case "${XILINX_BOARD}" in
- ML403)
- oenote "ML403 board setup"
- cp -pPR ${XILINX_BSP_PATH}/ppc405_0/libsrc/linux_2_6_v1_00_a/linux/arch/ppc/platforms/4xx/xparameters/xparameters_ml40x.h \
+if [ -n "${XILINX_BSP_PATH}" ]; then
+ case "${XILINX_BOARD}" in
+ ml403 | ML403)
+ oenote "ML403 board setup"
+ cp -pPR ${XILINX_BSP_PATH}/ppc405_0/libsrc/linux_2_6_v1_00_a/linux/arch/ppc/platforms/4xx/xparameters/xparameters_ml40x.h \
${S}/arch/ppc/platforms/4xx/xparameters/xparameters_ml403.h
- ;;
-
- * )
- oefatal "! Unknow Xilinx board ! Exiting..."
- exit 1
- ;;
-esac
-
+ ;;
+ ml507 | ML507)
+ oenote "Xilinx ML507 board setup"
+ dts=`find "${XILINX_BSP_PATH}" -name *.dts -print`
+ if [ -n "$dts" ]; then
+ oenote "Replacing device tree with ${dts}"
+ cp -pP ${dts} ${S}/arch/powerpc/boot/dts/virtex440-ml507.dts
+ else
+ oenote "Device tree not found in project dir"
+ fi
+ ;;
+ *)
+ oefatal "! Unknow Xilinx board ! Exit ..."
+ exit 1
+ ;;
+ esac
+else
+ oefatal "XILINX_BSP_PATH not defined ! Exit"
+ exit 1
+fi
}
diff --git a/conf/bitbake.conf b/conf/bitbake.conf
index 3a68959c6c..b941b904e2 100644
--- a/conf/bitbake.conf
+++ b/conf/bitbake.conf
@@ -313,6 +313,7 @@ STAGING_DIR_HOST = "${STAGING_DIR}/${BASEPKG_HOST_SYS}"
STAGING_BINDIR = "${STAGING_DIR_HOST}${bindir}"
STAGING_LIBDIR = "${STAGING_DIR_HOST}${libdir}"
STAGING_INCDIR = "${STAGING_DIR_HOST}${includedir}"
+STAGING_ETCDIR = "${STAGING_DIR_HOST}${sysconfdir}"
STAGING_DATADIR = "${STAGING_DIR_HOST}${datadir}"
STAGING_EXECPREFIXDIR = "${STAGING_DIR_HOST}${exec_prefix}"
STAGING_LOADER_DIR = "${STAGING_DIR_HOST}/loader"
@@ -374,6 +375,7 @@ IMAGE_CMD_tar.gz = "cd ${IMAGE_ROOTFS} && tar -zcvf ${DEPLOY_DIR_IMAGE}/${IMAGE_
IMAGE_CMD_tar.bz2 = "cd ${IMAGE_ROOTFS} && tar -jcvf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.tar.bz2 ."
IMAGE_CMD_cpio = "cd ${IMAGE_ROOTFS} && (find . | cpio -o -H newc >${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cpio) ${EXTRA_IMAGECMD}"
IMAGE_CMD_cpio.gz = "cd ${IMAGE_ROOTFS} && (find . | cpio -o -H newc | gzip -c -9 >${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cpio.gz) ${EXTRA_IMAGECMD}"
+IMAGE_CMD_cpio.gz.u-boot = "cd ${IMAGE_ROOTFS} && (find . | cpio -o -H newc | gzip -c -9 >${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cpio.gz) ${EXTRA_IMAGECMD}; mkimage -A ${UBOOT_ARCH} -O linux -T ramdisk -C gzip -n ${IMAGE_NAME} -d ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cpio.gz ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cpio.gz.u-boot"
IMAGE_CMD_cpio.lzma = "cd ${IMAGE_ROOTFS} && (find . | cpio -o -H newc | lzma -c -9 >${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cpio.lzma) ${EXTRA_IMAGECMD}"
IMAGE_CMD_ubi = "echo \[ubifs\] > ubinize.cfg ; echo mode=ubi >> ubinize.cfg ; echo image=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs >> ubinize.cfg ; echo vol_id=0 >> ubinize.cfg ; echo vol_type=dynamic >> ubinize.cfg ; echo vol_name=${UBI_VOLNAME} >> ubinize.cfg ; echo vol_flags=autoresize >> ubinize.cfg;mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs ${MKUBIFS_ARGS} && ubinize -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubi ${UBINIZE_ARGS} ubinize.cfg"
IMAGE_CMD_ubifs = "mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.ubifs.img ${MKUBIFS_ARGS}"
@@ -397,6 +399,7 @@ IMAGE_DEPENDS_ext2 = "genext2fs-native"
IMAGE_DEPENDS_ext2.gz = "genext2fs-native"
IMAGE_DEPENDS_ext3 = "genext2fs-native e2fsprogs-native"
IMAGE_DEPENDS_ext3.gz = "genext2fs-native e2fsprogs-native"
+IMAGE_DEPENDS_cpio.gz.u-boot = "u-boot-mkimage-native"
IMAGE_DEPENDS_cpio.lzma = "lzma-native"
IMAGE_DEPENDS_squashfs = "squashfs-tools-native"
IMAGE_DEPENDS_squashfs-lzma = "squashfs-tools-native"
@@ -562,11 +565,11 @@ FETCHCMD_bzr = "/usr/bin/env bzr"
FETCHCMD_hg = "/usr/bin/env hg"
FETCHCOMMAND = "ERROR, this must be a BitBake bug"
-FETCHCOMMAND_wget = "/usr/bin/env 'PATH=${PATH}' wget -t 5 --passive-ftp --no-check-certificate -P ${DL_DIR} ${URI}"
+FETCHCOMMAND_wget = "/usr/bin/env 'PATH=${PATH}' wget -t 5 --passive-ftp --no-check-certificate -P ${DL_DIR} '${URI}'"
FETCHCOMMAND_cvs = "/usr/bin/env 'PATH=${PATH}' cvs '-d${CVSROOT}' co ${CVSCOOPTS} ${CVSMODULE}"
FETCHCOMMAND_svn = "/usr/bin/env svn co ${SVNCOOPTS} ${SVNROOT} ${SVNMODULE}"
RESUMECOMMAND = "ERROR, this must be a BitBake bug"
-RESUMECOMMAND_wget = "/usr/bin/env 'PATH=${PATH}' wget -c -t 5 --passive-ftp --no-check-certificate -P ${DL_DIR} ${URI}"
+RESUMECOMMAND_wget = "/usr/bin/env 'PATH=${PATH}' wget -c -t 5 --passive-ftp --no-check-certificate -P ${DL_DIR} '${URI}'"
UPDATECOMMAND = "ERROR, this must be a BitBake bug"
UPDATECOMMAND_cvs = "/usr/bin/env 'PATH=${PATH}' cvs -d${CVSROOT} update -d -P ${CVSCOOPTS}"
UPDATECOMMAND_svn = "/usr/bin/env svn update ${SVNCOOPTS}"
@@ -774,3 +777,17 @@ COMBINED_FEATURES += "${@base_ifelse( \
(base_contains('MACHINE_FEATURES', 'pcmcia', True, False, d) and \
base_contains('DISTRO_FEATURES', 'pcmcia', True, False, d))), \
'hostap', '')}"
+
+# Make sure MACHINE isn't exported
+# (breaks binutils at least)
+MACHINE[unexport] = "1"
+
+# Make sure TARGET_ARCH isn't exported
+# (breaks Makefiles using implicit rules, e.g. quilt, as GNU make has this
+# in them, undocumented)
+TARGET_ARCH[unexport] = "1"
+
+# Make sure DISTRO isn't exported
+# (breaks sysvinit at least)
+DISTRO[unexport] = "1"
+
diff --git a/conf/checksums.ini b/conf/checksums.ini
index a82b7b36eb..ad0f9cc782 100644
--- a/conf/checksums.ini
+++ b/conf/checksums.ini
@@ -802,10 +802,22 @@ sha256=a62a0f45d156cb190dd2ee3176aa3af4bf7b35c23a09ac65a309c9dc5af87826
md5=954742cfd47191204d62d8d57f2bc6dd
sha256=7526a31de615a662cb09e915f26e5b151eda364240d983df6232aac8b9333f3a
+[http://ftp.gnome.org/pub/GNOME/sources/NetworkManager/0.7/NetworkManager-0.7.999.tar.bz2]
+md5=581cf6ea9ef358df874359cc8cb9af69
+sha256=6fa351b3efc78cff4daa1f42386ba8435474bc121b4358a7d08bd7c9fb63aaef
+
+[http://ftp.gnome.org/pub/GNOME/sources/NetworkManager/0.8/NetworkManager-0.8.tar.bz2]
+md5=d343e22f132754696654511acde354c2
+sha256=4ac38f5c6ddbbcc67601ba898dd475457e2d259b77f9680eee51cb07f19c1b05
+
[http://ftp.gnome.org/pub/GNOME/sources/NetworkManager-openvpn/0.7/NetworkManager-openvpn-0.7.1.tar.bz2]
md5=3637145716d5a2d55af0d713e4f05c68
sha256=7c6a7b9b8c6ccf3e2fbf2431b9fb2035f99e1d78065f3344f667e2f108f38d5b
+[http://ftp.gnome.org/pub/GNOME/sources/NetworkManager-openvpn/0.8/NetworkManager-openvpn-0.8.tar.bz2]
+md5=5039d6a840be45445db876cd71d64d20
+sha256=8fd6f25093ade66a98ce1327f24ef953351aabf02870c5dcf12500a6b7f08d43
+
[http://divmod.org/trac/attachment/wiki/SoftwareReleases/Nevow-0.9.32.tar.gz?format=raw]
md5=75828090af2b26f69fe4a7f148a400f6
sha256=bc35ce187481db91f047055b3edbce49c14d291b1a2eb3e915e9c1c511620f9a
@@ -1646,6 +1658,10 @@ sha256=13013cd19cb165825f4ef5cc790b0e103705f68ece470fd12012db97e3e60839
md5=40f19a26cbfa35de8346efe582b5d984
sha256=ea09581b3a31e3409968876461da3e384dcb0000abbb0060ae14e4fccb4994e1
+[http://mirror.its.uidaho.edu/pub/savannah/acl/acl-2.2.49.src.tar.gz]
+md5=181445894cca986da9ae0099d5ce2d08
+sha256=b9c7f4752e4ef4930a62fa5aa0d7efe1cba2b5a3a2d6ee2b45c0a70c72b7e5d5
+
[http://downloads.sourceforge.net/acpid/acpid-1.0.10.tar.gz]
md5=61156ef32015c56dc0f2e3317f4ae09e
sha256=22703ce0dd7305aca01bc9ac741659c32b1593f1d6fde492df7f01067a534760
@@ -2438,6 +2454,10 @@ sha256=dd3629e6ba6f638962f3a60035208facf6155397000c86b5f2f7ca2990ef59e1
md5=537dc236f4654dd5760e0f39484222a1
sha256=818a18c1ace9bc3e5b92bc91db1d62c859023cd16444d41692ecb3606cc6868c
+[http://mirror.its.uidaho.edu/pub/savannah/attr/attr-2.4.44.src.tar.gz]
+md5=d132c119831c27350e10b9f885711adc
+sha256=9f6214b8e53f4bba651ac5a72c0f6193b12aa21fbf1d675d89a7b4bc45264498
+
[ftp://oss.sgi.com/projects/xfs/cmd_tars/attr_2.4.43-1.tar.gz]
md5=91583a14bcbd637adaa9b07ea49c5d4b
sha256=d358b233b3e2ad235e63fd8697e337006fc7506844e424b0d9dd7a24affec5bf
@@ -3490,10 +3510,6 @@ sha256=90ec337d482a0e766e1f24679324445057abfc2e01d9d2c1f561b40ac7f1915b
md5=30bdb17e11fb416f9d3c6243e02f6e73
sha256=90ec337d482a0e766e1f24679324445057abfc2e01d9d2c1f561b40ac7f1915b
-[http://download.sourceforge.net/bogofilter/bogofilter-0.96.0.tar.bz2]
-md5=ca946b43212d8a2909e86f7140e535db
-sha256=7aeb2c4eb6ad6636631f85816b4f4d21ce811f763412530b70b2c85602e795d3
-
[http://downloads.sourceforge.net/bonnie/bonnie++-1.03a.tgz]
md5=00b1eee7f98b68fa762c4efb3b34caa1
sha256=2d1c6b2cfdc17d6348f25f0830e1fa5c1c1dd3f014caff74005294c9ed6a0cbf
@@ -3678,78 +3694,6 @@ sha256=e4f5bc9be311a746bd37f5607d3c225462d7d9294e8b3c692f9a39717b65d843
md5=c17e047d1a6a3f3188de929dc8582e01
sha256=58eb43e7e781a6b61e452fa36fa03198ef44c742da80c8a1b60be073e4ab949b
-[http://www.busybox.net/downloads/busybox-1.00.tar.gz]
-md5=fa62459e098fc00b22772aaf2e75bc98
-sha256=f3e1592607d42cab45387790af0cb0fea2d061f70f8679672a4397bcfe3562e5
-
-[http://www.busybox.net/downloads/busybox-1.01.tar.gz]
-md5=63041103f88192d209f6b1d7944fd118
-sha256=1d7c1b1931549ac294f438c50148da052f69f501676ba361034ef72b111605d3
-
-[http://www.busybox.net/downloads/busybox-1.11.0.tar.gz]
-md5=2e5b08cd8a76daf4a185c69b8070797f
-sha256=458e4f20723a1527be0b563896b2d314bf2bb0063d5627f0c6536ed07f544771
-
-[http://busybox.net/downloads/fixes-1.11.1/busybox-1.11.1-basename.patch]
-md5=f7780f73d3338b17d5f2eedbe76132de
-sha256=0f3129eff8420f2e3da237a95dbb6234ef380ac4343cb192eccd69fe8c840c7b
-
-[http://busybox.net/downloads/fixes-1.11.1/busybox-1.11.1-tar.patch]
-md5=fb01aea02faf4c5107292454745806ff
-sha256=6a045d34561b8548ae08ca7d0803d77fc2b70bdfc61793aa0a99e59a91059443
-
-[http://www.busybox.net/downloads/busybox-1.11.1.tar.gz]
-md5=9c9f06c2d949c6de844c7bed8eb47064
-sha256=cf3957b4548df051cd0971d179cb92dc0fcab3839977ddb70aae81c14cd04b03
-
-[http://www.busybox.net/downloads/busybox-1.11.3.tar.gz]
-md5=d113f2777e4f508faa8b674ece87a37b
-sha256=f2b433270f22aad86f61cef61d95338aaa63dbe2f9468b9ed5defd1c01c9645f
-
-[http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-depmod.patch]
-md5=7c9dfb5dcd66a1d6e837e72ad0cb05d4
-sha256=35e3854599a074ce1b47872ab1b97a625ed7d1ab3345b918f7f60524f5e390c5
-
-[http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-init.patch]
-md5=7afb3a1b474742bc198b3c8450ab9a7e
-sha256=39a8efb5a50c56feb733e519365b4e188c25c0e925a1a63cc1ace9735a80100f
-
-[http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-mdev.patch]
-md5=a72d169e9545e26257032e0e367feb95
-sha256=fd4a64c6a83e07586de0360258162c5bf431f164b3980301185743e4029940df
-
-[http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-modprobe.patch]
-md5=b2b9d0992b055816077ec9e0e4ee7775
-sha256=ba540cad8a029ff2eec7b078e31a308f408c074a13160aa7eba80f5ca18ee703
-
-[http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-tar.patch]
-md5=90d093817855bc63ad16fbb8524f80df
-sha256=9427fa9b45f3c322bf4fe2463c99c972e6ae03df630899b38be4f29133708a0e
-
-[http://www.busybox.net/downloads/busybox-1.13.2.tar.gz]
-md5=aeb526108f13b91c02b115c8d86f9659
-sha256=03fc9dbdc6f44afd2da55c0ab36646d2d063708cc35f3f4569b913b064f11d83
-
-[http://www.busybox.net/downloads/busybox-1.14.3.tar.gz]
-md5=dfb197b8de260ff284f7222ed23614fe
-sha256=b5a0c76d414cca97fb21622a5d09fa5a58f59890f5c9ce4f8b851c4e8b73a163
-
-[http://www.busybox.net/downloads/busybox-1.15.3.tar.gz]
-md5=f24d830f292d1ad27910ef226d6b2ef8
-sha256=dd8e07708d380a44cddaccce731c0e39f4d47ad921ab886644b6258fdf80b590
-
-[http://www.busybox.net/downloads/busybox-1.2.0.tar.gz]
-md5=6af69ebbbf8adc874ccb6d67dca95df5
-sha256=df6e3b0079194251a2ff68d7be7b06025c79f4fe62f4a73158ee52ff4bc515a0
-
-[http://www.busybox.net/downloads/busybox-1.2.1.tar.gz]
-md5=b9c853b2c453e80381077288f40035b3
-sha256=984b7974670d4f0291094ea2a36ee21fe46591f36cb51f95292dbe143c1eeab4
-
-[http://www.busybox.net/downloads/busybox-1.5.0.tar.gz]
-md5=158ccadd830fe6cb3d21a109f398e037
-sha256=08ef1e87c7198fb6d7c0a5f830fc2d99e5fd077dbb7d4ca1b66117ae924f6df3
-
[http://busybox.net/downloads/fixes-1.7.2/busybox-1.7.2-ash.patch]
md5=4149857c0b2c7f3d52a1f2cec5d7778d
sha256=73706e7d77144a6270da02ede61cde3c2e3b0e716d879737ac9d478b29233ba9
@@ -3766,26 +3710,6 @@ sha256=5117584a563c512b68cd9678d3cf54e6186f5a062836398791385f8ed73cca86
md5=c211189556c59a2665af45bffe5a5878
sha256=f44c3c2d7d9b3fc8a5f9fb6ac587ae4170d2515d72f9e76deb8c071ce9847abe
-[http://www.busybox.net/downloads/busybox-1.7.2.tar.gz]
-md5=34c76dc55004d8d5dcea884e0e99bc21
-sha256=e0eb7d59ba996a58608999998ad630c67b93c05af4eafea29770c4839c0e5461
-
-[http://www.busybox.net/downloads/busybox-1.8.2.tar.gz]
-md5=12851f4844bcda78ef4ba9168e16cc56
-sha256=3400bf837d214adc8522d1e78bae936c0c2cde2127ab1ee095587b946a6b5131
-
-[http://busybox.net/downloads/fixes-1.9.1/busybox-1.9.1-lineedit.patch]
-md5=9e5d99b89d79dd117310ee675322d9f2
-sha256=3fe138dc567d0fcda304f89523686aaec2f83c9193403cfc68d1ba32fa554511
-
-[http://www.busybox.net/downloads/busybox-1.9.1.tar.gz]
-md5=b9ae7be6e9a112ea5653855bbe70b501
-sha256=722071b14aba77ce6e2a83608b2ae4d4dab318d7f339d83e6c1719886b21aed9
-
-[http://www.busybox.net/downloads/busybox-1.9.2.tar.gz]
-md5=b31e4d1648df9259e2426839bc067038
-sha256=9bfc34aa8104caba9c0f089aab908700ff4ad76c2b7ca6d5f4c93d842041b1a7
-
[http://downloads.sourceforge.net/bvi/bvi-1.3.1.src.tar.gz]
md5=b9d77c57bda2e019207a1874d9bb4dea
sha256=c94dbfa293cbc61b8571d025e90fd1f06a34f8d4e5b11a59856bfc1f13014de3
@@ -4858,14 +4782,6 @@ sha256=fc7ac2829df8d394635aa1cc704b78e93ca287111df1001e5738ae2282691219
md5=779415872c771b580e4c6d10346b3a79
sha256=0903c37aaa9ced2c12a9e7d4a418b7d57d5a92a0f1451afd29f70bd0da240bc8
-[http://downloads.sourceforge.net/cscope/cscope-15.5.tar.gz]
-md5=beb6032a301bb11524aec74bfb5e4840
-sha256=be49cda0a9d33add89cabe0dfcef436a2863a7b0b833767875e0b7a6e8b4c4d1
-
-[http://heanet.dl.sourceforge.net/cscope/cscope-15.5.tar.gz]
-md5=beb6032a301bb11524aec74bfb5e4840
-sha256=be49cda0a9d33add89cabe0dfcef436a2863a7b0b833767875e0b7a6e8b4c4d1
-
[http://svn.o-hand.com/repos/web/trunk/patches/css-media.patch]
md5=d3fe4cda3545f3e4718f1acc186608ab
sha256=3aefaa17ffa38143bf5df1161c51ab402d35bfbee41ab4643c313edf569165d5
@@ -5802,14 +5718,6 @@ sha256=5287e943265b9efe5bd59cd1f3145d3fbf9e266df28938ad78e2107fde3c1587
md5=9c1744d32ceed71cbe1db863f64d329d
sha256=7d27f2389e05b8727c6a7126c0b65d67749c170ba143e648912a88f2fe707bca
-[ftp://ftp.debian.org/debian/pool/main/d/dpkg/dpkg_1.14.25.tar.gz]
-md5=6bf3504b07d8fe2175a5d794391280de
-sha256=545ce9830f0cf649e3b1b40d25d13989c23302623bf9b50f4c24402f63c82184
-
-[ftp://ftp.us.debian.org/debian/pool/main/d/dpkg/dpkg_1.14.25.tar.gz]
-md5=6bf3504b07d8fe2175a5d794391280de
-sha256=545ce9830f0cf649e3b1b40d25d13989c23302623bf9b50f4c24402f63c82184
-
[http://xorg.freedesktop.org/releases/individual/proto/dri2proto-1.1.tar.bz2]
md5=1d70f0653b0b3a837853262dc5d34da4
sha256=69def6d1f64b3699ec9c729596d8b096623a62bdda6bbea78ed690421d174c11
@@ -6170,6 +6078,10 @@ sha256=9ec176847b1e01cd2083cd578e804fda2c619d0f465cd752ec11b38099f75f7f
md5=d0f3b1adca33a68867bf50f000060cd6
sha256=a0d03208e335610defc3049d8dd03f4ec7fcf477f44c4897b3f68adc478237ee
+[http://cgit.freedesktop.org/~david/eggdbus/snapshot/eggdbus-0.6.tar.bz2]
+md5=0a111faa54dfba2cf432c2c8e8a76e06
+sha256=3ad26e271c1a879bafcd181e065fe0ed53b542299a773c3188c9edb25b895ed1
+
[http://rogers.com/eject-2.1.5.tar.gz]
md5=b96a6d4263122f1711db12701d79f738
sha256=ef9f7906484cfde4ba223b2682a37058f9a3c7d3bb1adda7a34a67402e2ffe55
@@ -6666,18 +6578,6 @@ sha256=c94817c67c8ff0d244092c19f5713ea8c76a9a19075ff6031d4ef93ec7b66256
md5=2ff59c2a5cbdd21a285c5f343e214fa9
sha256=c94817c67c8ff0d244092c19f5713ea8c76a9a19075ff6031d4ef93ec7b66256
-[http://downloads.sourceforge.net/expat/expat-2.0.0.tar.gz]
-md5=d945df7f1c0868c5c73cf66ba9596f3f
-sha256=c4280eb80fa8e14b3f204b1d0ec67af66fa04c4f9dae9c78a1a8ee4c6f485ddd
-
-[http://heanet.dl.sourceforge.net/expat/expat-2.0.0.tar.gz]
-md5=d945df7f1c0868c5c73cf66ba9596f3f
-sha256=c4280eb80fa8e14b3f204b1d0ec67af66fa04c4f9dae9c78a1a8ee4c6f485ddd
-
-[http://qa.debian.org/watch/sf.php/expat/expat-2.0.0.tar.gz]
-md5=d945df7f1c0868c5c73cf66ba9596f3f
-sha256=c4280eb80fa8e14b3f204b1d0ec67af66fa04c4f9dae9c78a1a8ee4c6f485ddd
-
[http://www.rpsys.net/openzaurus/patches/archive/export_atags-r0.patch]
md5=fe38d8a308c47dad87977f19631d73d5
sha256=316f69529608abb6cb378bd705b784e176e36b3c1979ef8ddf14b4bffe5498b9
@@ -6974,10 +6874,6 @@ sha256=c18e6f23315e0a3526229bd0ba5cf8ce0d747cb5e5ba7cb952ad08c85a1cafac
md5=9956b30139edaa4f5f77c4d0dbd80225
sha256=c18e6f23315e0a3526229bd0ba5cf8ce0d747cb5e5ba7cb952ad08c85a1cafac
-[ftp://ftp.debian.org/debian/pool/main/f/fetchmail/fetchmail_6.3.8.orig.tar.gz]
-md5=1b84621072b4f906b5686a4fbae0b1d7
-sha256=d06e7244dcd2b462c0e7bea0d01edadb54905f4533afc45f971ab9f6ee46497c
-
[http://projects.openmoko.org/frs/download.php/832/ffalarms-0.2.2.tar.gz]
md5=6f03b9663245b93e8370e43cc556dba1
sha256=df0561124faa5c2e64038f5efcf39432c4795829115b86819083ae66b001899a
@@ -7038,6 +6934,10 @@ sha256=c0810fb3ddb6cb73c9ff045965e542af6e3eaa7f2995b3037181766d26d5e6e7
md5=9e3503116f4269a1be70220ee2234b0e
sha256=6f5644d56cc603138533158076a6cb41cd33c33d27e5310cb76cb6576151ca67
+[ftp://ftp.astron.com/pub/file/file-5.04.tar.gz]
+md5=accade81ff1cc774904b47c72c8aeea0
+sha256=4c9e6e7994e74cb3386374ae91b055d26ac96b9d3e82fd157ae2d62e87a4260c
+
[http://ftp.gnome.org/pub/GNOME/sources/file-roller/2.28/file-roller-2.28.0.tar.bz2]
md5=dcb0c887d5d287a28ebb5c0ea69bedfa
sha256=499fe835b297720f4e4054b4ab34a3fb619c3460c5da82b1519d9b86aa2f3ac2
@@ -7990,6 +7890,10 @@ sha256=d5a698c30376d14c1ce6540ed6d5627796421e6e97576620ea4562411a110e77
md5=fb182d508017cb608e9df8c7dca648dc
sha256=d5a698c30376d14c1ce6540ed6d5627796421e6e97576620ea4562411a110e77
+[http://downloads.sourceforge.net/freetype/freetype-2.3.9.tar.bz2]
+md5=d76233108aca9c9606cdbd341562ad9a
+sha256=51a033bce9904d73e0821e8e2bba24bd319619d7d1b2e9eeccac611580242ab6
+
[http://downloads.sourceforge.net/fribidi/fribidi-0.10.4.tar.bz2]
md5=0f6e7ecca08e6e108dc06337f5b5cabf
sha256=f3ecdb9d108bd61ec9394df75f5fd68ba886a8da0863ba6258338893aec6c04f
@@ -8474,18 +8378,6 @@ sha256=ec7a963c0dfd986697350be26e53577b0a39c86970b4e9485d85ca99b0cb2197
md5=2bffc1e314f2efb1034b3d3ea1ce2f7d
sha256=a8a3c0f0a38f819b87ff9282f1e40536f5050153f0f60db5c869509a70497c2c
-[http://xorg.freedesktop.org/releases/individual/util/gccmakedep-1.0.2.tar.gz]
-md5=fc49f45251c1336fe1dad5dba1c83fcd
-sha256=fdd3963294e80b27416f902a5c029c033d321f03310d3cafa3afb62b50ddce92
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/util/gccmakedep-X11R7.0-1.0.1.tar.bz2]
-md5=328eea864d27b2d3a88ceb2fa66eca6d
-sha256=dc126b21e2e9b93df2587b55418d8593642eaa8e14a74e14bd4cf93262a64443
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/util/gccmakedep-X11R7.1-1.0.2.tar.bz2]
-md5=519e8b1a9911bdddfa2ee46fb36b9774
-sha256=d166685bbae221c8cd1ad5efa7903f8520b117228e9ef0e85261c99ebfc5f66a
-
[http://ftp.gnome.org/pub/GNOME/sources/gconf-editor/2.22/gconf-editor-2.22.0.tar.bz2]
md5=7ca99aec214dd855b5de7dacc8937055
sha256=e701134a1f5293070ca7d8d6311468f61e3a9765ebc520fcca6a0a38b214b7dc
@@ -8510,10 +8402,6 @@ sha256=c3b8b7b57019927dad40870c379eecfa6389443f7e2096aa0157a0224d400da1
md5=e1a41daf3bfc221afaf56751dc506f95
sha256=e6bff5c00d7d93bade78535573494673f581118c38a8ca13c3afd63809335ba0
-[http://www.boutell.com/gd/http/gd-2.0.33.tar.gz]
-md5=be0a6d326cd8567e736fbc75df0a5c45
-sha256=2ba10c830e24781ec2e0594c6e49353e512e8bda782bc9a1851e70a5e8ced93e
-
[http://downloads.sourceforge.net/gdado/gdado-2.2.tar.gz]
md5=b84114df6ca8b20560524afed0e21b25
sha256=cc272f097832e074804bf405f2c013b4f941ad57f0f5f5ec6c08edecc9ad17fa
@@ -8930,10 +8818,6 @@ sha256=69b3269a6b1ca26357e1e72c6be7f0ed742cd88d2042243c0bb9ba76e4acac99
md5=5175d142ad0745b9e22a64904aa86c45
sha256=692901194603cc4fb4072d8f907487d867caef6b62161f50f0f44dbeb001066e
-[http://www.kernel.org/pub/software/scm/git/git-1.6.0.4.tar.bz2]
-md5=ed8c4fa007a44d51b646865c35461ce8
-sha256=f8ccac357f2c721e735ae16bbb02a420d2aaaed483f5d46043c5fe627ab4b260
-
[http://downloads.sourceforge.net/gizmod/gizmod-2.3.tar.bz2]
md5=b7200b08149599c4c0f56d88f0c7f208
sha256=53af32530e58ba23cbb752f063364612bbea57b31de2ee35814973452c2f63f2
@@ -9098,6 +8982,10 @@ sha256=af1456e075954c122bda008736437b048d5336d0b426847c627e607eb35e59e5
md5=05188e560dbd8bddd568e24ce10dd003
sha256=6fb4269a187bee6f7825c358fd6f0e0e99e6ad71f7f995ddcbfe9466ec8f6631
+[http://ftp.gnome.org/pub/GNOME/sources/glib/2.20/glib-2.20.3.tar.bz2]
+md5=1173688c58b4b62809c83bb07a2cf71a
+sha256=37f098617c2fac11eee4c6289d576300abd0a01825d4c809462f5b698d1127b0
+
[http://ftp.gnome.org/pub/GNOME/sources/glib/2.20/glib-2.20.4.tar.bz2]
md5=346916673c0eab72191cf44b4afe535f
sha256=af709f0eabfbbfa5c59a02764ca1dd5e6509bbe7fb67a474b2c448bda7b06fb9
@@ -10022,10 +9910,6 @@ sha256=a3c7fdbbafa6c9cfee7f16c067b043c3041cd0240292aa92b653a2221ae04503
md5=6781d0df02e603c556758d90e96e37f6
sha256=0f934eddd2204f938f0359d8c39ef590ab4fec60d6922853e6c8c23e3069d7f4
-[ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-1.4.2.2.tar.bz2]
-md5=c34736eb7cb687f9e5b6d4df48aaf7c8
-sha256=174e7f78c670d76984c4c4bd6077a0b9fec7b4be700b9f3e40c6889b78110c57
-
[ftp://ftp.gnuplot.info/pub/gnuplot/gnuplot-4.0.0.tar.gz]
md5=66258443d9f93cc4f46b147dac33e63a
sha256=a77ad7cb08b2551dacbaa0bb02e561fddb6b9f4a0f3d45eb1c38be219955ea48
@@ -10150,22 +10034,6 @@ sha256=c7c86abd344055bdf1f840a037d04064759f52039cb075260b60369b721f245c
md5=38762b12b8dfeb0518e24b470b1b5675
sha256=333f07ca8579f69f6b79e2ed1cf28c6b9353a64f7bab458950d7667abb3d8a3e
-[http://ftp.gnome.org/pub/GNOME/sources/gpdf/2.10/gpdf-2.10.0.tar.bz2]
-md5=9278cd3b9d06e3b1d364452f0e512fa9
-sha256=b6a5abf78363205e01bf1d238eaf4c349c9725f57aa18e2adc0445268540c7e6
-
-[http://ftp.gnome.org/pub/GNOME/sources/gpdf/2.7/gpdf-2.7.90.tar.bz2]
-md5=e0282b35b20b6634fdef14834eb5fb89
-sha256=a145e535bb707c67907a5591edab8ee64f5723e9c66a94ad120abb98e40d99f1
-
-[http://ftp.gnome.org/pub/GNOME/sources/gpdf/2.8/gpdf-2.8.0.tar.bz2]
-md5=a1c054d5de1d5ef361006975c57b45f5
-sha256=2fd7305384094a36b7763d6d82f114db28ba11835a154b2aab99629d0e53211d
-
-[http://ftp.gnome.org/pub/GNOME/sources/gpdf/2.8/gpdf-2.8.2.tar.bz2]
-md5=d7d87c097aa0e5fbb9a7cf2d039db609
-sha256=c1f6b7ef098408ff8108abe38a20f7845839126d62ee741e75ca7f8e086758fc
-
[http://gpe.linuxtogo.org/download/source/gpe-aerial-0.2.11.tar.gz]
md5=4b06838f0ad963f8c01640e8311130cb
sha256=30be2c450915938957bcb077bc5cf17b84eb9163ebe043e7324c359fb965c721
@@ -11038,6 +10906,10 @@ sha256=8860e61edc26f0665ad6ea0b34be4e3fd2cc7c51c5fd63b25c857a1870e8e137
md5=725c320ca6fa35bcdaa1de2d8908f392
sha256=ae828da850ac0590fd47768856c4ec29021332204182abe4ad94098d72168474
+[http://download.berlios.de/gpsd/gpsd-2.39.tar.gz]
+md5=3db437196a6840c252fca99b6c19d4d0
+sha256=ee3b2fb403112c3871e7e4fdb915cdc25b020f3208318ba61e9ac37692832a21
+
[http://www.gpsdrive.cc/gpsdrive-2.10pre2.tar.gz]
md5=28b13b7253c8f019433be68686070558
sha256=5f53807375473b00f3748456fc8de33e7af300686032d74557fe5f0a931b3227
@@ -11918,22 +11790,6 @@ sha256=48d93ef10f17cffe1ecbfec3078932ae48e08e3c172437e4bdfb22ae87d25421
md5=4a04df0d971a8952fb395b6eb0bc8dab
sha256=48d93ef10f17cffe1ecbfec3078932ae48e08e3c172437e4bdfb22ae87d25421
-[ftp://ftp.debian.org/debian/pool/main/g/gzip/gzip_1.3.5.orig.tar.gz]
-md5=3d6c191dfd2bf307014b421c12dc8469
-sha256=631820e566353eafc4bdc0d9d8221c26c7ef6b5d10a254783dbe9bcac88caa07
-
-[ftp://ftp.nl.debian.org/debian/pool/main/g/gzip/gzip_1.3.5.orig.tar.gz]
-md5=3d6c191dfd2bf307014b421c12dc8469
-sha256=631820e566353eafc4bdc0d9d8221c26c7ef6b5d10a254783dbe9bcac88caa07
-
-[ftp://ftp.pl.debian.org/pub/debian/pool/main/g/gzip/gzip_1.3.5.orig.tar.gz]
-md5=3d6c191dfd2bf307014b421c12dc8469
-sha256=631820e566353eafc4bdc0d9d8221c26c7ef6b5d10a254783dbe9bcac88caa07
-
-[ftp://ftp.us.debian.org/debian/pool/main/g/gzip/gzip_1.3.5.orig.tar.gz]
-md5=3d6c191dfd2bf307014b421c12dc8469
-sha256=631820e566353eafc4bdc0d9d8221c26c7ef6b5d10a254783dbe9bcac88caa07
-
[http://rtpnet.nerim.net/ipaq/patches/2.6.17-1/WIP/h1940_batt.patch]
md5=2810d6a0aa41a349faf711bfc9facf14
sha256=0d68bfb125997599470dbc4822d43e777a831da2f1cfa5356b5dc791cdd8b27f
@@ -12562,6 +12418,10 @@ sha256=1e2cc080e654c1839c5cb4b4adf4c62a23e7da208427f3ba0b16cfed9e5cfa98
md5=51d584b7b6115528c21e8ea32250f2b1
sha256=754038a9eb8f1d0d6559d5b124a68e1e530a76366cff251d79536ec89e2fda21
+[http://www.ibr.cs.tu-bs.de/projects/ibr-dtn/releases/ibrdtn-0.1.1.tar.gz]
+md5=eb19ac9c283e63afd77215973193f136
+sha256=28e9d09e9d2f24f688f66c4fb4b60c374840cb4f754396889bf7725a1ad29e3d
+
[http://xorg.freedesktop.org/releases/individual/app/iceauth-1.0.2.tar.bz2]
md5=7ab8b64edf0212a9d9a3c8129901a450
sha256=06401591de57a2c4cf2255e3d5230ea19351c5516cf8dae98c61092392bab5bb
@@ -12702,18 +12562,6 @@ sha256=a606e230b22d9d029998b84e5d6311a8ba35a304fe457e254eb5fd19943cd639
md5=a080f5a4ed42c56767c07e55c1266727
sha256=9c6f58c44051563a788f7e9202957d839822081d99ecb001314265166c20eb95
-[http://xorg.freedesktop.org/releases/individual/util/imake-1.0.2.tar.gz]
-md5=b5c3a719d60a14ca2378dc1259ee60df
-sha256=8008b4366ab96abfdac2c91808b79ec2cc5649966b41cfb07b14b6fbd798651c
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/util/imake-X11R7.0-1.0.1.tar.bz2]
-md5=487b4b86b2bd0c09e6d220a85d94efae
-sha256=dec5cee4e529ac218e7d99a550122e065daf29a3a4105d0b545620e4ca57edc4
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/util/imake-X11R7.1-1.0.2.tar.bz2]
-md5=db33c65135ebc78e55c6009292c51b43
-sha256=76167e10c30d60534dc2b04fa4e202e16531df8170fc23cc4414d9afff09c32a
-
[ftp://ftp.cac.washington.edu/imap/imap-2007a1.tar.Z]
md5=828a84c64ef933bfcc805b838576a774
sha256=8ba0eda3157193643eb3c5ccd46c0ca8060d702f260df60f89656cb891cbeeb8
@@ -13510,6 +13358,38 @@ sha256=6d5de792b0a3b119da3b584eb64076ed192d050516f7d44a36f95ecd8cf32362
md5=50dda4c865dba5c341422e2d848fb6be
sha256=6d5de792b0a3b119da3b584eb64076ed192d050516f7d44a36f95ecd8cf32362
+[http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx.patch]
+md5=165364e207bd2e122d9f5e7d94a683eb
+sha256=897b6d576526c305b0e8b4a3d1cd02f334606429aacf4969094925cd321c5a3b
+
+[http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx_armtskit_update2.patch]
+md5=4074fe1f0af60b416e73ab4754dd59b3
+sha256=17c543853daed8f99d6a721a34c509aea262d6868d7680fe808971b401fe5761
+
+[http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx_ea3250.patch]
+md5=38af08bbd067ef50a9e09c64840e56db
+sha256=52cbdf4307c270a6396008a30c32c9012d155a7b0cf26a8430bda3632bee8f7d
+
+[http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx_update2.patch]
+md5=59f8fafa796bcbe6367c4f10ef8d9491
+sha256=96153e5b741c2ef4157c22aef9e1a6f1b91a796f3a646bdfb21bc3adbb4fe4b3
+
+[http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx_update3.patch]
+md5=2675cd2b70baad7ecc9fb5f64dc1854b
+sha256=b1528917ec3d9fc784173795838bf413761b15f5381b6c5885b27b96af418659
+
+[http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx_update4.patch]
+md5=2f21f8455945759a5af8060224f2a1e2
+sha256=14a15c6c8080189066d4e5914e365c5f0253a1578008ced42d7e32746e6f4666
+
+[http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx_update5.patch]
+md5=e65e51b0d8b5710a270fce38f1c6b05b
+sha256=2d323344b949de7ad5fb783136a1e6093d616f0a0fe5f7f79c4f1aa6c1869c6f
+
+[http://bitshrine.org/gpp/kernel-arm-2.6.27.8-update1.patch]
+md5=7533dc7dda4d8ff56dfa25b202632dff
+sha256=ff46bb7501f23c331b1ba6057ff2eab56690d9cb39a67f92ee7261bdd0947881
+
[http://repository.maemo.org/pool/maemo3.1/free/source/kernel-source-rx-34_2.6.18-osso40.diff.gz]
md5=4610c31506e86b81323ce45465ec73eb
sha256=09e3fceea73bea972ce580232c5ca669836c892c6bfb303f8053463a2c534e93
@@ -16498,6 +16378,10 @@ sha256=24b354dcd8843274a20e1625e04d618d43f9851082254cb9dae6f33f15c2a5cd
md5=b8b8d09adf6bee2c5902c8e54c4f2e68
sha256=cafe6431f9e6d561fb7b396bf94ff73a9cd0f4279f3eea2fc714ab90e345eee6
+[http://downloads.sourceforge.net/libpng/libpng-1.2.37.tar.bz2]
+md5=6d1ee0888dbb711214943cb19c294b49
+sha256=682960b55527b54bada90e959c2d42679444a1db43677c77eb645a29645f86d1
+
[http://downloads.sourceforge.net/libpng/libpng-1.2.40.tar.bz2]
md5=29bbd1c3cbe54b04bfc2bda43067ccb5
sha256=a6197352ad5b79a9a1ce0dd59f5e737cfbf909e0f3c5f64631cf0d93549e4e40
@@ -16774,10 +16658,6 @@ sha256=774094746748fb0c8985210de0994accdc7095c222fba42c5623e2137443b6cd
md5=d0fc91ccb9da401e9e40d2f4612bdac9
sha256=774094746748fb0c8985210de0994accdc7095c222fba42c5623e2137443b6cd
-[http://www.libspf2.org/spf/libspf2-1.0.4.tar.gz]
-md5=5fe69ba13bf35d505b733247032a8a64
-sha256=222803a98d1e86ac7eee9491beb5fbf30e259a3c74cd4166bda1796374c26cd1
-
[http://downloads.sourceforge.net/libspiff/libspiff-0.7.2.tar.bz2]
md5=3b291762e0149c975dab9f5ea15bad15
sha256=6b498c1070e17f665625dc3e5113e8af55da5ce3d4d5abf0ae3fec344b8208d4
@@ -17426,18 +17306,6 @@ sha256=97d0ac5957745eeaf311ec38ebbbf3b30a5316b01c320a759af47129c994c20c
md5=5db3204d57436a032f899ff9dbce793f
sha256=97d0ac5957745eeaf311ec38ebbbf3b30a5316b01c320a759af47129c994c20c
-[http://www.lighttpd.net/download/lighttpd-1.4.22.tar.gz]
-md5=949c33a81e83f7718a47280bef21b90c
-sha256=197bd2b57c5e2b9bfc30bb565a4c44fbea82daa20a31fa8ba490dd61dad69f2a
-
-[http://www.lighttpd.net/download/lighttpd-1.4.23.tar.gz]
-md5=41dfad5c366d34d83c3d2b46d4c08f5c
-sha256=8555db22ed7d429160701555611d8cd5eff42fc7e6e3ad3b050279c9b2145469
-
-[http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.25.tar.gz]
-md5=87e936ec272ddaba8a2fdfecd8c6b704
-sha256=0e71cd677a2282fff0ee0248a0e70a593a75e06f8a26411ca5314d0c01debbc3
-
[http://twibble.org/dist/sh4/src/lilosh/lilo-21.tar.gz]
md5=1e975d827ad96e1942df73f63512178e
sha256=da2340aca2eaf451243d2e4c2bf66aa4b80cc0abaef96860da8daf5db1cae12f
@@ -17742,6 +17610,10 @@ sha256=8527c8a9b235a370db3aac606d9262f5e549ef202f114157b45f62564e3dd3bc
md5=db323884c7dc46e4cd33d0d944fa59a9
sha256=8e7075fc855ffbcf3c24cbd70b22791759224f98839886d50bba8d659193a950
+[http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.8.tar.bz2]
+md5=cbdc1b350ef79dd323b9aeda5cf7f1b6
+sha256=330aa3059309c589c3abb2d743e5f391dac6671b75004dccde32b54ade17f05d
+
[http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.tar.bz2]
md5=b3e78977aa79d3754cb7f8143d7ddabd
sha256=0e99bf9e83f4d1ae0c656741a84dfddfa9c4d2469cf35475f5939d02dc3e4393
@@ -17966,14 +17838,6 @@ sha256=e7431530a4cf4c44b5068e23454f95765dc0b51e7d98bc2bd70451b17d505bd9
md5=d5b05498af26d5c09b372caab82a0337
sha256=e7431530a4cf4c44b5068e23454f95765dc0b51e7d98bc2bd70451b17d505bd9
-[http://xorg.freedesktop.org/releases/individual/util/lndir-1.0.1.tar.gz]
-md5=1a53ddd7e1804abe8f3d9799a88b6aa8
-sha256=89bff89702ebf2e5cc2268d79d5a27c62190c5a85ab080935d4425d3e309bc57
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/util/lndir-X11R7.0-1.0.1.tar.bz2]
-md5=aa3616b9795e2445c85b2c79b0f94f7b
-sha256=8f563e178ac29c64fcc0144c60d415092d998194a6797c7b45a95802d2df8410
-
[http://wl500g.dyndns.org/loader/loader-0.04.tar.gz]
md5=c0b7c36232d3910c425d03e56d0f532b
sha256=6f11fc04a1f3f04ebb996723fc86ca363c3959ca1ef76d1057db9db3ea5a98d0
@@ -18098,10 +17962,6 @@ sha256=b1f136a1d89daa4b1b9711eb81ad120b53c9357d159f262021b84ef8c9d128be
md5=b5ce6a74abc9b9eb2af94dffdfd372a4
sha256=c28b36b14bddb014d9e9c97c52459852f97bd405f89113f30bee45ed92728ff1
-[http://www.lysator.liu.se/~nisse/archive/lsh-1.5.5.tar.gz]
-md5=a2b1ff6f5dcca6968516b5557c2e7ce7
-sha256=d1c10ca755db2f5fa8aa7c8ef2770d205a9bb9e5a6ed7272a5dda942647df4be
-
[ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_4.77.tar.bz2]
md5=7b0de0d1283f2d86407a98e5c2f05f04
sha256=fe6fde629a97a2855e608cd6ae1f89e66ae42d7045499b1a6faca5cfb50f5f3b
@@ -18374,26 +18234,6 @@ sha256=c1c67839d4af290aecd8f7743312aacc0a39ae99757f0910918531ef9a63e14f
md5=445dce53fcfc7ec8f6fd31f54da8a067
sha256=62ed44c8b2d392bdc757981ac37f05d808a0d917e4f9d95de2fbf3c2bdad41a7
-[ftp://ftp.gnu.org/gnu/m4/m4-1.4.11.tar.gz]
-md5=988aa098326d5f2b5b5aa4b3efe8d528
-sha256=c67b759d96471c9337d3b9f0ab2e1308f461a7dba445cfe0c3750db15b7ca77f
-
-[ftp://ftp.gnu.org/gnu/m4/m4-1.4.12.tar.gz]
-md5=0499a958a561781b125c740f18061ea8
-sha256=47e8f9a33ba06fa6710b42d6f6ded41f45027f6f4039b0a3ed887c5116bc2173
-
-[ftp://ftp.gnu.org/gnu/m4/m4-1.4.4.tar.gz]
-md5=8d1d64dbecf1494690a0f3ba8db4482a
-sha256=a116c52d314c8e3365756cb1e14c6b460d6bd28769121f92373a362497359d88
-
-[ftp://ftp.gnu.org/gnu/m4/m4-1.4.8.tar.gz]
-md5=66542b27c0ffa7513b52aed0ce5d784c
-sha256=0f4e55d362408e189d0c0f4e6929f4b5be7eb281e46cbf0ce3f035370c00bc7e
-
-[ftp://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz]
-md5=1ba8e147aff5e79bd2bfb983d86b53d5
-sha256=815ce53853fbf6493617f467389b799208b1ec98296b95be44a683f8bcfd7c47
-
[http://www.opensource.apple.com/darwinsource/tarballs/other/mDNSResponder-107.6.tar.gz]
md5=aa4e0e5c57f94489463ea6576591ce9d
sha256=43d427d3d5c78aef57a49898def469cc4cae28190462205368be1f3a0fcc0165
@@ -18610,18 +18450,6 @@ sha256=f3e69023771e23908f5d5592954d8271d3d6af09693cecfd29cee6fde8550dc8
md5=b94605c3b7ba90bc01648ca6e5cc1aaf
sha256=16ff3ea972065925338da1a1f37322dc4d8774f6d34d2dde2ce85121c08c99e0
-[http://xorg.freedesktop.org/releases/individual/util/makedepend-1.0.1.tar.gz]
-md5=90f5f3b987497a481b94d49372f17dce
-sha256=0a4a0d4e2613b0cd4321e55fd4741788b728736fc8a517996e2015fa49862e61
-
-[http://xorg.freedesktop.org/releases/individual/util/makedepend-1.0.2.tar.gz]
-md5=905bfeb1a59929d950e5d638fbadcf39
-sha256=008e6e117372e04cdc9a72ffc7dfae2e2d6617c9b399e052ae12dc2a1a03079a
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/util/makedepend-X11R7.0-1.0.0.tar.bz2]
-md5=7494c7ff65d8c31ef8db13661487b54c
-sha256=1caf464a967ff9335a040f2d3ffe050c881efda13c14531be49cf1aa8dabda92
-
[ftp://ftp.debian.org/debian/pool/main/m/makedev/makedev_2.3.1.orig.tar.gz]
md5=89c4b6b4a89f6502626783716fc7d887
sha256=8599712f2b2b3778eea344f59e1512cea284e802560317fac436585885a41dfa
@@ -18674,10 +18502,6 @@ sha256=59b1c19817ed65ba8f0d3a2ac8f06ecf5c12f452d10170fa04f6824ea257437f
md5=5ac39978f55ecaf6e887cd5be027b1c3
sha256=4ac5940d25a9b5a52d0ff1f8223bb85462f9cfcceb4ac547e3ca9b6690aad394
-[http://www.maradns.org/download/1.0/maradns-1.0.41.tar.bz2]
-md5=9abc13da25c1103d788ee9def1c8e764
-sha256=42930f57e2fb965360a31de35d8eb8c2b0cdd06172e413e8cfec5745b6a236b8
-
[ftp://ftp.debian.org/debian/pool/main/m/masqmail/masqmail_0.2.21.orig.tar.gz]
md5=7e989a8b0562054aea22c654507f2cb5
sha256=2257099c760c12daf094744c6b2269d476e3bc6b523366168ad81bdd2ebd2445
@@ -19798,46 +19622,14 @@ sha256=2b0737b84e7b42c9e54c9658d23bfaee1189cd5955f26b10bdb862761d0f0432
md5=09c8fa1058399a0c5db169a71561e985
sha256=75c53f4b3017a9a8fcb9ff3bf7e2709a41a579b8a4e2ae1c600dc6ce6341cd31
-[ftp://ftp.osuosl.org/pub/mythtv/mythplugins-0.22rc1.tar.bz2]
-md5=1c03d3f4ccedcd9de1c0ac2226e0031c
-sha256=f62969cd61dc9718973708b79f5e86f653f630097f5ad14f90d78fcff677c0da
-
-[ftp://ftp.osuosl.org/pub/mythtv/mythplugins-0.22rc2.tar.bz2]
-md5=de15246c1f59665f3960015c49138da3
-sha256=73dff22a4622f2140b49ee824f1f69d6120135d828bc38f6877a619986c99245
-
[ftp://ftp.osuosl.org/pub/mythtv/myththemes-0.22.tar.bz2]
md5=a5f00f152fb430a20c70aaa3bf456347
sha256=6720a16a0bdfb9bfb95bd729b50d95f75f8494b932a7dc44ad4014f06ecd36c2
-[ftp://ftp.osuosl.org/pub/mythtv/myththemes-0.22rc2.tar.bz2]
-md5=7d629aa8c0f1c8cdc11310b09a929626
-sha256=39494a9c05c47b9a28c6168211a5987a8386929a3210e637ed6191e3554ee9f6
-
-[http://www.mythtv.org/mc/mythtv-0.18.1.tar.bz2]
-md5=e6cabf88feeaf6ae8f830d3fdf7b113d
-sha256=86c9cf038d5d8a3fdf137ff735b55820281543a4a08e86cfad81a113a7b9a1d2
-
-[http://www.mythtv.org/mc/mythtv-0.20.tar.bz2]
-md5=52bec1e0fadf7d24d6dcac3f773ddf74
-sha256=777ff60afa89426f0e52e49b0e7a7661ddb45b59d2ebbfdcbe07fd179e526ff3
-
-[http://www.mythtv.org/mc/mythtv-0.21.tar.bz2]
-md5=49fc135e1cde90cd935c1229467fa37e
-sha256=33a878a8fc3efdd74519b09b4ec3d16fa9d3a0436b321c13344e5f3ab723c5e4
-
[ftp://ftp.osuosl.org/pub/mythtv/mythtv-0.22.tar.bz2]
md5=e8f8b5b6a51cd7be700e215b2a1bf2c0
sha256=bb7212bac2cfc792c59a15a80caee8bbf469e250e6f48dc6b0856a60cb07b6fb
-[ftp://ftp.osuosl.org/pub/mythtv/mythtv-0.22rc1.tar.bz2]
-md5=049e93d78d5370351539c9a23b47e1af
-sha256=8e6823f4b92d88c837735322ca71199919406a2826bddae257c6e0f52d089cd7
-
-[ftp://ftp.osuosl.org/pub/mythtv/mythtv-0.22rc2.tar.bz2]
-md5=1e4be634b137e5b944c94b418d8c3791
-sha256=5cba470ccd60fec00be2bf7ef231f104dcea8275698fe70f5df398dbe2fe19fd
-
[http://kldp.net/frs/download.php/3742/nabi-0.17.tar.gz]
md5=8746890ea666ac1b7ae6db77993c6592
sha256=1a239a7bb0644441ca781459fbf5a1c5fb95e823351bf308aa680eb60cc45b94
@@ -20030,10 +19822,6 @@ sha256=ccdf8bfec6098b9da9a82c8d3a4d85266a5c2fd8e0240bb9448448ea39f3a68a
md5=79ea8c9cfa4025e93fb12d98befd37b6
sha256=9d5e27f290bbb954d512f37912d39a94ae03536a7ba3ef4dacec4df5f2476f47
-[http://ovh.dl.sourceforge.net/sourceforge/netatalk/netatalk-2.0.3.tar.gz]
-md5=17917abd7d255d231cc0c6188ccd27fb
-sha256=b6e01cfc0b4223f60fd994eee950635b165d54a96cf63bbe607a5ff64355bd8c
-
[http://developer.irexnet.com/pub/iOn/Sources/1.0/Third%20party/all/netbase-4.21.tar.gz]
md5=b91eeb701d1733b3efb174b9463c5875
sha256=cc74bd934a33e80e0218d9b2482d986191879d184ffd03deaefa78b0c8d7a76a
@@ -20158,6 +19946,10 @@ sha256=34316707a323b883f347b2566fd2dc7a3134b2bf432fb3a8b31d88829b0947e3
md5=d90a997e3e2051ce8866fe24f765141f
sha256=b22a90e6252d798b3889843910a016d185f9e87dd23e203003b1072013f670a6
+[http://ftp.gnome.org/pub/GNOME/sources/network-manager-applet/0.8/network-manager-applet-0.8.tar.bz2]
+md5=27071402152a7f8f62c4825f25ca9a3a
+sha256=6379e0acd3eadeb71e3ba2e3cf05d351caf6b794dff5777a5e86a591df603bd4
+
[http://downloads.sourceforge.net/nfs/nfs-utils-1.0.6.tar.gz]
md5=f17e9983457e1cf61c37f0be4493fce6
sha256=aa99fcb016971290f9a871331eed60150ebdd84785dda1b252556a54760b97bf
@@ -20278,10 +20070,6 @@ sha256=4310a3a526ae5461e17f57353fc29f71d13820a215eaa62c629190cc2a026173
md5=46291de38362acdcd335bcf259055046
sha256=0e6b18e3bf77dd20395881535e3e7043bcd5171c220728310215d708f44f3b1c
-[http://www.nlnetlabs.nl/downloads/nsd/nsd-2.0.0.tar.gz]
-md5=a09542645b91ff60564b0f4db436af01
-sha256=8f486c4ef4d3f60fba4e0f855399184ca557f03a747cae6adde4cc2dffc53ff2
-
[http://nslu.sf.net/downloads/nslu2-linksys-firmware-2.3r63.tar.bz2]
md5=d4daf9d424a182e7ca2747d9db004581
sha256=703c9083f2f114588eb54442f7e621cbf3e0f1398c3381b5ad8d1fc56f6468a5
@@ -20834,10 +20622,6 @@ sha256=c98b9703887e2dda6217b91405d0d94883f7c67e205fc4d7a81bb690d2e10572
md5=acf70a16359bf3658bdfb74bda1c4419
sha256=0e26886845de95716c9f1b9b75c0e06e9d4075d2bdc9e11504eaa5f7ee901cf0
-[http://www.openssl.org/source/openssl-0.9.8j.tar.gz]
-md5=a5cb5f6c3d11affb387ecf7a997cac0c
-sha256=7131242042dbd631fbd83436f42aea1775e7c32f587fa4ada5a01df4c3ae8e8b
-
[http://www.openswan.org/download/old/openswan-2.2.0-kernel-2.4-klips.patch.gz]
md5=5c54040bba6fea2bfb47df01056e953f
sha256=d35213dc854f1e1a08512154c7a92fb94d9f0506cc5107f8b2f248412679fb53
@@ -21650,6 +21434,10 @@ sha256=ea4a8fcab04cdb08e5bba9589c3ecc1370d4a68d32bb83bd54032c03cb450d6b
md5=e27c07bb82e02532e874758980141281
sha256=611f7e118b5b09898493eab4c3071771742f2f3826b5733fa2f47284a38fbcf3
+[http://www.muru.com/linux/omap/patches/patch-2.6.27-omap1.bz2]
+md5=4a3c56484b11438b0a911c432cae08bc
+sha256=2cfa3174db86acd9297d9ac641b299c7b8cb7ca6e0f2fb2243a4a5b523ea541c
+
[http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.27-rc1.bz2]
md5=948b25bab0082d1db5bd8c9fac824891
sha256=2b35a35a0ab3b82b77bb2996782ef70ec15a13b9331b15bac814b891ae8f4867
@@ -21674,6 +21462,10 @@ sha256=ad9e0c07e709e9e9a60abe0b15a61482645f3aa64b30fa72c27f1bd13d7aa84d
md5=da09ddd041a3fb35d236d37ec6de88e9
sha256=a63144608d5fa72b23151022d9d716e9ebc5b428e6307535481a4f48adb2cfe8
+[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.27.45.bz2]
+md5=9ad766753f54ba0a4df7c42873e7aa16
+sha256=fb78c95e902194ac62facdbad1a89430c991271a35e4bd30ce9dad2f948d99c8
+
[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.27.8.bz2]
md5=ec23e3dce22b23ca681199fe515f10fb
sha256=31c35db09289c6e0436a258745d7180e0cd8f567949f27b3dab5a57a3664ed2f
@@ -21782,6 +21574,14 @@ sha256=d207f4217c4b3fef9c5a19620b6ca90dbd9b9583ed9c686b5636eec973a7cc60
md5=49e6bc73c7a7f690fe7ddf09fe2b5d06
sha256=b4d0d667db5094fd430ed58955f4f9ed71d278d5ce70e63d287c53f8db028ac3
+[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.32.8.bz2]
+md5=eabf01da4c72f7ea5b4e4bf8e8535e5f
+sha256=50c08a7ffcad1e7cd2e7c2c906795896dd36ce71249d816914c306dcc5875fd2
+
+[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.32.9.bz2]
+md5=7f615dd3b4a3b19fb86e479996a2deb5
+sha256=8aeb15c31fb09c769f004c8dc51e29aa26be8e84d70db418af70ecefc463459a
+
[http://www.muru.com/linux/omap/patches/patch-2.6.9-omap1.bz2]
md5=d6249654087f0bcafaa860ac573316a4
sha256=91806347cb386002a8bfd20ee66e536e4a7dfb01f207dd751341f2971090d9ac
@@ -21986,6 +21786,10 @@ sha256=916d7e1393ed09ca4c61b3c1ecb5f5564266c955db81ff587d2da8af7a7abaab
md5=b8c118d4360846829beb30b02a6b91a7
sha256=e15d499321e003d12ed183601e37ee7ba5f64b278d1de30149ce01bd4a3f234d
+[http://ftp.funet.fi/pub/CPAN/src/5.0/perl-5.8.8.tar.gz]
+md5=b8c118d4360846829beb30b02a6b91a7
+sha256=e15d499321e003d12ed183601e37ee7ba5f64b278d1de30149ce01bd4a3f234d
+
[http://ftp.funet.fi/pub/CPAN/src/perl-5.8.8.tar.gz]
md5=b8c118d4360846829beb30b02a6b91a7
sha256=e15d499321e003d12ed183601e37ee7ba5f64b278d1de30149ce01bd4a3f234d
@@ -22034,10 +21838,6 @@ sha256=3e9510ce715f28b7e6b803fcdadb73b37c83792c0b5e1e9bcb066ab972649996
md5=e6029fafcee029edcfa2ceed7a005333
sha256=e105b6aad55589aecf20ae70ab7aa81eb202296fc52531f62e546af23077cca1
-[http://us2.php.net/distributions/php-5.2.11.tar.bz2]
-md5=286bf34630f5643c25ebcedfec5e0a09
-sha256=9bcd14ceda2b4bd7abcc7eb59bd74bae490d9335e4207580de783b48aa7e8f23
-
[http://us2.php.net/distributions/php-5.2.5.tar.bz2]
md5=1fe14ca892460b09f06729941a1bb605
sha256=5cac1e70df5019ebdfdab2e0b8b216f7fdf56b9895c9f68c993313918249bba3
@@ -22218,14 +22018,6 @@ sha256=b216936e6e011b58fefee8e3f80d01008cb078b7fe2a5632b2ce98bc7bcb05c2
md5=2fd9fe103375dbd0c91af2f302250a8c
sha256=e2174f1249ea79121648bb0e9353729767654e6d430fb2d28da342ec25a179be
-[http://downloads.sourceforge.net/pmt/pngcrush-1.6.4.tar.gz]
-md5=a329caad3f49ed3ca105e6fd441f5b93
-sha256=22ffea3aed00da9a9518a9c25b619d212bbe27b9ec72165cf74640f930108b2f
-
-[http://heanet.dl.sourceforge.net/pmt/pngcrush-1.6.4.tar.gz]
-md5=a329caad3f49ed3ca105e6fd441f5b93
-sha256=22ffea3aed00da9a9518a9c25b619d212bbe27b9ec72165cf74640f930108b2f
-
[http://downloads.sourceforge.net/gakusei/pobox-1.2.5.tar.bz2]
md5=d1c988c2ac06d3111f80d59d30bb8bbb
sha256=73bbc333d2a51d0e1cd73030012f2727ac26f5b1d41333994b01a47486fc16db
@@ -22270,6 +22062,14 @@ sha256=d978d3cb4ec99187309b906a636312827c8fef091df28ba9d7e07a5014017c0a
md5=1fb488c4061256197a667f1c480ffc33
sha256=48a5aabb873d4cc654c95acf6576868d7a8a3ee97e1c6418e1d716698b6efa76
+[http://hal.freedesktop.org/releases/polkit-0.96.tar.gz]
+md5=e0a06da501b04ed3bab986a9df5b5aa2
+sha256=3426ca917210b2a5525732559368c18f983a4c39a6a55c5dddba26071bd8054a
+
+[http://hal.freedesktop.org/releases/polkit-gnome-0.96.tar.bz2]
+md5=611cf39fba2945320fc7a9ec49087e69
+sha256=0d96c8032d658a2e1eef8adfbeafff0f569ef0cf68b35915423acc00873c8a92
+
[http://www.rpsys.net/openzaurus/patches/archive/poodle_asoc_fix-r1.patch]
md5=7c766563674dec668baa5f650a14b7cd
sha256=3f78e714248cdaa0b83f530a3b7f80da02446b179e86fbb043d57c3e05ae0d7e
@@ -22666,14 +22466,6 @@ sha256=6d52c706401af197bd9d7e0187c35b4a3463ea720392ffa0c020d94899b361e5
md5=f490bca772b16472962c7b9f23b1e97d
sha256=b439e04adab9b1e66e11f59c4331680da48f1722f2123123f7c16dfbed2c38dc
-[ftp://ftp.nl.uu.net/pub/unix/ftp/proftpd/ftp/distrib/source/proftpd-1.3.2.tar.gz]
-md5=756f762883cc8eed03d99dc3b1c56a8e
-sha256=5e00c20d74bbf98fb8bcc63bd4aecfd08480a87ec731dae8955bd9fca6a01bb3
-
-[ftp://ftp.nl.uu.net/pub/unix/ftp/proftpd/ftp/distrib/source/proftpd-1.3.2b.tar.gz]
-md5=4918908fcae9e591ba84c66edff73410
-sha256=fffee421390fe2647eeb0515a8c20759fda75e3df2014fc0a47e8a314e5ea88b
-
[http://downloads.sourceforge.net/progear/progear-ac-0.1.tar.gz]
md5=60a89c2c907fb5ff2293ce3dfbcdace6
sha256=4124e24726369b42ed0a7aff33e5c572de5e4a0f46edd4e1e81125412c4bdf24
@@ -23754,6 +23546,10 @@ sha256=55259c813324f6383cbd441aa2f23e01c320b6d63fbe3b5d52a7715055d28589
md5=0542a4be6425451ab5f668c6899cac36
sha256=4c84b39b8a2546854ce9c0c9f761dd55da76dab2c33eeb876e3d17db1d2ea0c5
+[ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-4.6.2.tar.gz]
+md5=eb651ee4b157c01696aa56777fc6e0e5
+sha256=176f51ddb06dce67ab4b2efc6b327dc21ed8f764c5d97acc15ff1f907c2affae
+
[ftp://ftp.trolltech.com/qt/source/qt-x11-free-3.3.5.tar.bz2]
md5=05d04688c0c0230ed54e89102d689ca4
sha256=aac89e862c74b2f3ead768e50e9fa7ada1e4225fe9d1d9e05723a3279259eb96
@@ -24570,10 +24366,6 @@ sha256=22647c6bdd0f1b311bd0e3a893fb184f07d0f5e1c4b3bccd20a024fe18fd7567
md5=528677f261f3ed4a58f9483ca25ba6b2
sha256=4f2bb8c5785c50ad05d3adc0027c0881211b8a5c51e840651b53b7e455c004a3
-[http://samba.org/samba/ftp/stable/samba-3.2.8.tar.gz]
-md5=06efd6e6cc4aac628a1a0b082e4be0f2
-sha256=7e7fb53d6ff05993dcb8b871e3c3016bd4d161d72ded8f8760a4439e9d76aa3b
-
[http://samba.org/samba/ftp/stable/samba-3.3.0.tar.gz]
md5=adb048dc3988055533e1ea5d91d81f99
sha256=b00ca360e9b414744eff33ca4567f3eb1a28d32914e20f00b6672fbc141c9beb
@@ -25246,6 +25038,10 @@ sha256=b2097320a1fca4851f1377a14f4cc14a46e27d2a44ca017c40a6cb618b2f31e8
md5=a282846532ecbd6b4a28072373b3a70b
sha256=b2097320a1fca4851f1377a14f4cc14a46e27d2a44ca017c40a6cb618b2f31e8
+[http://downloads.sourceforge.net/smartmontools/smartmontools-5.39.1.tar.gz]
+md5=f6f7380ae45587161c0adae8862110e9
+sha256=725cfd59b33a97561346a990e1ec50b150dbac01f2b90cd9cf3fd74ff1e77720
+
[http://xorg.freedesktop.org/releases/individual/app/smproxy-1.0.2.tar.bz2]
md5=31da204a0255ba8c6a65386e65dc1c90
sha256=76d22f0cf07c8c4386a15c5c935b58319bd747befb940a0f03f652d59c4f67d2
@@ -25290,14 +25086,6 @@ sha256=489bb2f9fb69922e9befc27ae1b8d19d31c83c586f55b7ecc503cb4f5e767da4
md5=6df271fd6a92d7641d7b060dedf7fec6
sha256=7eedc4ece1c82668c06222ef85457206139253e24a50e5b5d2401a41baee28c1
-[http://www.dest-unreach.org/socat/download/Archive/socat-1.3.2.1.tar.bz2]
-md5=860fe417ea5e9ca2d2b2225192b85b87
-sha256=ecfbca297c26eff6cb04c2c45af1ee5c21d4a123a05f8b056a1c81ffcdfa1e3a
-
-[http://www.dest-unreach.org/socat/download/socat-1.3.2.1.tar.bz2]
-md5=860fe417ea5e9ca2d2b2225192b85b87
-sha256=ecfbca297c26eff6cb04c2c45af1ee5c21d4a123a05f8b056a1c81ffcdfa1e3a
-
[http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.25.4/socketcan-driver-at91.patch]
md5=fe6945121eaea5e9c570e3dad54d7569
sha256=578db455270592833156358f79205b21701aa12b64142da16df08fb36fca3322
@@ -25714,14 +25502,6 @@ sha256=ba8c492c1b2033d4e2131f05df9e3780d4bc35bea87aa32a6052dd53a814e288
md5=e9449fcee97e6a8ed73934c883c870e0
sha256=95e7b7470e04f22c3ec8dc6d0b1fdd8944306cb5313c84c4545cd83abada26d0
-[http://downloads.sourceforge.net/streamripper/streamripper-1.61.10.tar.gz]
-md5=2d62a4546521980e1ed705a5094a6ec3
-sha256=08ca63620c1c071f4b2d42c5f63f38cee920aa57cde151ac3cfcf344437e3f11
-
-[http://heanet.dl.sourceforge.net/streamripper/streamripper-1.61.10.tar.gz]
-md5=2d62a4546521980e1ed705a5094a6ec3
-sha256=08ca63620c1c071f4b2d42c5f63f38cee920aa57cde151ac3cfcf344437e3f11
-
[http://downloads.sourceforge.net/streamripper/streamripper-1.61.3.tar.gz]
md5=57cd09098917bda29f841d366649681c
sha256=1747aee9fa4cc09b49e0fb14baace3293f8f870c0de27fd3550cde21d99e9cd7
@@ -25786,10 +25566,6 @@ sha256=64331bda459e984b8d369b449eec89daa2f3cd288186f1d2a9ad8011badd4dad
md5=b29893c06192df6230dd5f340f3badf5
sha256=56f7d86032538a4a98d90af3742903a09ba16d6db82b593e4a47605f87fa581a
-[http://ftp.sudo.ws/sudo/dist/sudo-1.7.2p1.tar.gz]
-md5=4449d466a774f5ce401c9c0e3866c026
-sha256=34d11a1dd8bace0885f55b4c8bddda1da29993ff8d7174099e25bd80db1eaf7f
-
[http://dev.laptop.org/pub/sugar/sources/sugar/sugar-0.82.0.tar.bz2]
md5=1f26fa4aee57469a0636a70649343fb3
sha256=ca4c614e09371a986ca5d86065fc697f7eb07b2064a6a2cad541755df0135883
@@ -26134,6 +25910,10 @@ sha256=7f56dd08cf5425218b697d5db82e6ce03aff4f7b57f58d3053f0a7af632b3747
md5=2aecff382af4d8ba7fcd69298cc79413
sha256=c1f5746d22ef439ee47c9b012273ccbefbb2621075f05876bdb6ad5cfe4e1bbe
+[http://ftp.gnome.org/pub/GNOME/sources/system-tools-backends/2.8/system-tools-backends-2.8.3.tar.bz2]
+md5=403bf4b7c82455d995d6aa54613246c2
+sha256=67629bb6502a4c5b8b639867deb40ecabd5676a4655c264c1f0dbeb97de5c98c
+
[ftp://ftp.cistron.nl/pub/people/miquels/sysvinit/sysvinit-2.86.tar.gz]
md5=7d5d61c026122ab791ac04c8a84db967
sha256=035f98fae17d9cff002993c564ccc83dc4ed136127172caeff872b6abdb679d8
@@ -26510,10 +26290,6 @@ sha256=96309871519efcab829fdfcc1cca546d772ed6a0e214c9e99e77ca7aea29f734
md5=d06e2dcef6ac6c975311e88083d8ef26
sha256=f30ffe64bcf4fc8a82a76594c254ce54c82a33d797cdc0f35f19519572f94c4a
-[http://stgt.berlios.de/releases/tgt-1.0.0.tar.bz2]
-md5=71f828ef455bdc0066ed087f9547530c
-sha256=0f0d82f50d12c41f1e277bb72e99bf86f02a4258d7595eb886ac554b09a67a33
-
[http://packetstorm.linuxsecurity.com/groups/thc/thcrut-1.2.5.tar.gz]
md5=190f08ce6839aecb0fa0ce8d5ddd09ee
sha256=b32f3d71ac540248b7643baa39d8ecfb75af493228caaeb64608e49f2f092473
@@ -27034,6 +26810,10 @@ sha256=ee9000a0276675ed697f8d404edf80104fd338c3fb979907e4ee63ca83d65e5e
md5=3cd8038d7bbfb3a4ac544aceef724853
sha256=ee9000a0276675ed697f8d404edf80104fd338c3fb979907e4ee63ca83d65e5e
+[http://ftp.uni-erlangen.de/pub/Linux/MIRROR.gentoo/distfiles/tzdata2010b.tar.gz]
+md5=dfd29a56cb39cc8c57b0939608a054f6
+sha256=a93208ae389cc0d3618731cc9f406ba2cfc6aac39668a06c687d3fae2a7e8210
+
[ftp://ftp.pl.debian.org/pub/debian/pool/main/t/tzdata/tzdata_2007h.orig.tar.gz]
md5=8b766bb807c1f7c0c02ff798ea5db80e
sha256=b4c6367ab85de8f148c903bb25dc69de7a7d7d05f204f58880a16a8b81bf93de
@@ -27218,6 +26998,10 @@ sha256=ee3922bd46dbdc406be5d498be5bc062a0b39f05f1c0a1b22c3657eb0e805975
md5=86382b7bbc64459e714c65a2a4e10916
sha256=001be4a8963c48e7debc82c6078562d087a2979da63e558a5e3613c03725c377
+[http://kernel.org/pub/linux/utils/kernel/hotplug/udev-151.tar.gz]
+md5=5e66b90bfa91e9ed101fdb66735af658
+sha256=a1fbc567ab6c2062ce32cebe6c96664282a979e0b7bf402b16fb3795c9ac0ae8
+
[http://udhcp.busybox.net/source/udhcp-0.9.8.tar.gz]
md5=2d7e548820d2ded5e183933cb701defb
sha256=da0ca1e821e3fa7cfbe73ddb1480b921002ee992f5e5fbc611422c103b907443
@@ -27522,42 +27306,6 @@ sha256=db4dcbf99d989a8f539d7521e9e64047367fa2ccdcbb91517cdec19693a41ffd
md5=9623380641b0c2e0449f5b1ecc567663
sha256=a6365fcb2b34439faa52164e1a018086c2b6818f8a189c487c79e09dc3c62722
-[http://xorg.freedesktop.org/releases/individual/util/util-macros-1.1.5.tar.bz2]
-md5=51952682d8b42aeda3af5cee0133ce2c
-sha256=75939790e16b8bcc122e83f3f060d6f000ed1a98e97b4972fac0903142f5651b
-
-[http://xorg.freedesktop.org/releases/individual/util/util-macros-1.1.5.tar.gz]
-md5=d168aa001b946b58d9aab6088c09d256
-sha256=4f2a8a19e90ad82bc2da4eb52799a299a1c94bf5143bc2711e9e5d4cc5a7cdb4
-
-[http://xorg.freedesktop.org/releases/individual/util/util-macros-1.1.6.tar.gz]
-md5=ea2d9cd33ca6fd05923f007bd74d7c37
-sha256=97748154c41a1cd12635a79aee0c2846fd48ecb555fc8b54e3e5baec174e6e74
-
-[http://xorg.freedesktop.org/releases/individual/util/util-macros-1.2.1.tar.gz]
-md5=81b9746d6202ccf0b4a498cfd0731e71
-sha256=f3804f02f51a1be243ce7413dc67dca774f000686f8f2efedc77203a1962d401
-
-[http://xorg.freedesktop.org/releases/individual/util/util-macros-1.3.0.tar.gz]
-md5=51bb54c08415ee3c3000b7df9e9b07c5
-sha256=57d2629849796b4dc919261eadd1eea3ee6e634d58979797287f7e09408cde67
-
-[http://xorg.freedesktop.org/releases/individual/util/util-macros-1.4.1.tar.gz]
-md5=8ac38951e753f250aaefbd4ba0afda94
-sha256=d49ab68cad724ae51f6cb69f7f5cfff7629cbb066f4c5c8bda81d62675a21986
-
-[http://xorg.freedesktop.org/releases/individual/util/util-macros-1.5.0.tar.gz]
-md5=ffef78135535c60c2b68d0a2a4ecae9b
-sha256=d47116ce5df198859a6082af7a72505575d1685b8c82bb4ef6fbedfa3316617e
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/util/util-macros-X11R7.0-1.0.1.tar.bz2]
-md5=bc6be634532d4936eb753de54e1663d3
-sha256=e95a45db65b33be472a3134492e348c4cd6edc200d02a85654ffe62bc2e6fdcd
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/util/util-macros-X11R7.1-1.0.2.tar.bz2]
-md5=6ce5a6e85653afdd10c48b89b4bcc8aa
-sha256=cef1e438a2f936efe00ffbb3758c80de72ed514f210e067cb8469a8b00b8feb4
-
[http://ftp.linux-vserver.org/pub/utils/util-vserver/util-vserver-0.30.214.tar.bz2]
md5=8bad879e36a6a1b9b4858d0d6d3c8c76
sha256=c88a27ccd1593f4396e1cf4aca37c715c7618a77d709ad63c7cc744ca1557c45
@@ -27618,6 +27366,10 @@ sha256=82b42534276018809aec934b572845e495ea19fc0c6abf6b6ef1e8571b91ccee
md5=e25d41ea12eac9891663b2c32cb91851
sha256=9d046572b1c8e2917f69df2abddf7199f643da1d0eee25aae828ad8891f67103
+[http://vagalume.igalia.com/files/source/vagalume_0.8.3.orig.tar.gz]
+md5=f6cb301fe4eec68877484b258045d0df
+sha256=aedf9efef06cd542168c0316d7696d6ba64e78d689212693264f4c5d17663f4d
+
[http://download.gnome.org/sources/vala/0.1/vala-0.1.5.tar.bz2]
md5=4e082ecb7f60ebdc49f3bd19ae7ebca2
sha256=20c577c9130f114dda24fd5a1c19cd477679553c4e2e7c8362471ae1f21b6836
@@ -27666,6 +27418,26 @@ sha256=d0425be8572be85b8a7ae802a19bcb73fdeac74906f7bcbbc129697ea6a86f3a
md5=9e5888a79757eb0f47df118b39762ed6
sha256=9d1cb3661e6c15059e4eecce323b3f118c243d1f17a1883e2b2d7ca0a16987e5
+[http://www.freesmartphone.org/sources/vala-0.7.10.1.tar.bz2]
+md5=f34e85c15a7ecec880c03d70e6e3ad20
+sha256=d4a055b0eb714d5335e21db8d685f27a59f2f7b639bf8229429e6e9325928674
+
+[http://www.freesmartphone.org/sources/vala-0.7.10.2.tar.bz2]
+md5=f1d2d0c254b97ac298283d795dc88625
+sha256=2bd7bfc71e56f2d29a0c971a81e7ff098a96d0e79d68eed0d604f3882ccd6fe6
+
+[http://www.freesmartphone.org/sources/vala-0.7.10.3.tar.bz2]
+md5=b3b2b025c46f66a887bca195f44ea46a
+sha256=de4fe0a55fd6dcff31205fbf81766593bb9e576939ebe3dd418967cde15b70c4
+
+[http://downloads.freesmartphone.org/sources/vala-0.7.10.4.tar.bz2]
+md5=595a211e2a305ccbb9478f513a341e42
+sha256=2ba6dde7ba9829253147ef2eadbb9f69f8dddc4098006740e9b206bcb903c0c6
+
+[http://www.freesmartphone.org/sources/vala-0.7.10.tar.bz2]
+md5=6e807644f500d6605a5ee4e1612dd187
+sha256=902392d95e20e8c3e18ad739e24c6727dd90fe281b1ffdbbf509a8d7c50aa8c5
+
[http://www.freesmartphone.org/sources/vala-0.7.5-fso2.tar.gz]
md5=1a10e3c3d7c8eab324ecb0d8b81732bd
sha256=4dfd1ff2793f71ab11d842ff4379a676a30af4287b7b6892ba9733bf7b691c10
@@ -27730,10 +27502,6 @@ sha256=48332dd1a31ac8cf29536111730d6710f79c5e825ca3acd8927e662fb0f25f48
md5=b05fd8f4420152ca0080a99750863f3f
sha256=46805e1c19707de043820a1474a8b3775ea3b698a0b539eabd7b86f0f3ad888a
-[http://www.freesmartphone.org/sources/vala-0.7.10.tar.bz2]
-md5=6e807644f500d6605a5ee4e1612dd187
-sha256=902392d95e20e8c3e18ad739e24c6727dd90fe281b1ffdbbf509a8d7c50aa8c5
-
[http://www.freesmartphone.org/sources/vala-0.7.9.tar.bz2]
md5=f2f8b2914361db599fd6392ec27f7042
sha256=a71d59cfed750ff402fece5e7d4b656caf3377d5a6bfe5339894f1b13769d58d
@@ -27914,10 +27682,6 @@ sha256=08d588ce0731d0c0e55a1cac35acf019e1b735d0f75f16962adfeb4fefd69441
md5=80d3ae3bbae2a488d433d86b8fd64777
sha256=4f1f6ba6410e5f2aeb473d0a09caaa528cc926866735ab66e05cdff9c5093a37
-[http://downloads.xiph.org/releases/vorbis/vorbis-tools-1.1.1.tar.gz]
-md5=47845fd76f5f2354a3619c4097575487
-sha256=617b4aa69e600c215b34fa3fd5764bc1d9d205d9d7d9fe7812bde7ec956fcaad
-
[http://www.unix-ag.uni-kl.de/~massar/vpnc/vpnc-0.3.2.tar.gz]
md5=aaccdffc5656095a45dfe87c5bf612cb
sha256=55702637d377d73e6f323462779aeb02f5049d71c7ea4e3bbe564566d9a8d488
@@ -28150,10 +27914,6 @@ sha256=a4f15c73e2b67c888cbedfaa8093661dff6cb859357c197c60f3026baddb939e
md5=05fada181e12bfa94b52f0b10395b28c
sha256=a4f15c73e2b67c888cbedfaa8093661dff6cb859357c197c60f3026baddb939e
-[http://downloads.sourceforge.net/wireshark/wireshark-1.0.5.tar.bz2]
-md5=4c6a93e00123d8bb7af48a009519aca4
-sha256=4f923e24d674ac62ded3da402a4de6d402886d80e3d7cac91cf026921f32fcf7
-
[http://djwillis.openpandora.org/pandora/wifi/wl1251-wireless-2009-08-30-2158.zip]
md5=b69ee5a5ffc825ff6d7970a62dcae46a
sha256=6641a438972acdc8113957c25a17db55d6d9c3ce037ed3ac5337ac6ee153d73f
@@ -28286,22 +28046,6 @@ sha256=c6f692956d93765f12402a0b22617566decc52a9bb1a707b4e8d12affd1528d3
md5=3d35c181dfab7dfd3fe898738dffb421
sha256=64e6bd25d18e838e1c60693eccbd11926c65b228d6ac69c4dafc7ebe7341dbbf
-[http://downloads.sourceforge.net/witty/wt-3.0.0.tar.gz]
-md5=ba03acf8089dff38e106661aa1ecdcb9
-sha256=d439e96d2de8c22f682b5d3d5894974d50b3a36057a002bda1ad1cb858cd3b28
-
-[http://downloads.sourceforge.net/wvware/wv-1.2.0.tar.gz]
-md5=b6319d5e75611fe2210453b5feb82c0c
-sha256=a76f44468e78591e6d510d326702e7c3999d2b9dd3ab8ab8c1c9811fd5b111e4
-
-[http://heanet.dl.sourceforge.net/wvware/wv-1.2.0.tar.gz]
-md5=b6319d5e75611fe2210453b5feb82c0c
-sha256=a76f44468e78591e6d510d326702e7c3999d2b9dd3ab8ab8c1c9811fd5b111e4
-
-[http://switch.dl.sourceforge.net/sourceforge/wvware/wv-1.2.0.tar.gz]
-md5=b6319d5e75611fe2210453b5feb82c0c
-sha256=a76f44468e78591e6d510d326702e7c3999d2b9dd3ab8ab8c1c9811fd5b111e4
-
[http://www.alumnit.ca/download/wvdial-1.56.tar.gz]
md5=45097f269c7847266e121e4a0f362be9
sha256=e4d35719c10c372bfca8247d127c941958557aabca61c25a04f213e22cc40728
@@ -28342,6 +28086,10 @@ sha256=8fa45a6bfe4d6ac3d9a457543844873090d0c7da817991ac0cd547732f475a14
md5=50208b5c8d5c125accd18f9760225f9e
sha256=6b134ac08daf1186c1cdd34fea4ad8c4f1ad2f52307db98786e262dc4243256c
+[http://www.gedanken.demon.co.uk/download-wwwoffle/wwwoffle-2.9f.tgz]
+md5=a5f04c190a2f27f28cfc744c478e6aaa
+sha256=14728356373c57dbafeaa8458455f1a299aee7ab395cb0de0312be5d693f7b5a
+
[http://biolpc22.york.ac.uk/pub/CVS_HEAD/v1/wx-cvs-Gtk.tar.bz2]
md5=cac58d215b73189e8574d1c361e771a6
sha256=1e09f6ad9dd987403f9549c2640680cf932ba00df5afa20a4531e98544b413a5
@@ -28934,1614 +28682,6 @@ sha256=996b9641fea06e2f0dde9cbf5fb31b5cd139376198057a88ca59820fdb94d507
md5=3ffafa7f222ea799bcd9fcd85c60ab98
sha256=e93bb322fe96ceabd0581bb70101aaa1001b0b8f894b3ae0e1fa2e4b38f41af2
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-acecad-1.1.0.tar.bz2]
-md5=ce0b7bec500273ad935cbfa212b8ac8a
-sha256=3e5feea79f1d48cd46a2a40661140042ac586f90311669f79d65fea6cfc112ad
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-acecad-1.2.1.tar.bz2]
-md5=2c371317f2aae34c04db63c19759a44e
-sha256=07d2f8a1153d34a6516b8f1129fc32a18f2862bbb58c9bad4637fb282d60385a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-acecad-1.2.2.tar.bz2]
-md5=2d6596b2b0cfa527b5ed4df2014684bf
-sha256=953ebb7d7ed579ce648dd6f6a25307c37ad8230a0336ec6fc58247732835f26e
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-acecad-1.4.0.tar.bz2]
-md5=51247dc0d73185e35bec326283bc49a5
-sha256=48341d8b6b0060228134b36543986c949ea828d6ce6d0484d29b3dde9ddbd556
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-acecad-X11R7.0-1.0.0.5.tar.bz2]
-md5=b35b1756579ebe296801622bdf063ab1
-sha256=699ba1716f74db0aaa66aa510ebf195560ff09f88001f98bde9275d2826f30ea
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-acecad-X11R7.1-1.1.0.tar.bz2]
-md5=7ed47ca8feb1fbbe305f3a6732181550
-sha256=b2bcdb4ef8cb9645e476afcedeadbb9d1688f8e8f7bd010f6718a15f1673556b
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-aiptek-1.0.1.tar.bz2]
-md5=951b2b1a270f67d28e2e89fd2b9f15ae
-sha256=3db0e3259034d838c2ff7ae26718422db6d33d89cd1a2defa0efdddbbbfcc28a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-aiptek-1.1.1.tar.bz2]
-md5=2aa75313ea5652a8cf93581c65ee6493
-sha256=219116b0275b93333b8471fc94d97320a116d695c4249837fd97763f00a85d77
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-aiptek-1.3.0.tar.bz2]
-md5=ae3ec07aff6c156cf5307f53feb6b293
-sha256=b37f35bb021dffc337c731bfbbb6ce7c0953dc69f7c660cbe48b0f84a07b5e5c
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-aiptek-X11R7.0-1.0.0.5.tar.bz2]
-md5=9ee5109ef33e281ce0784ad077f26cee
-sha256=62d1dfdc2f902d016999861ec3fd58b4630341e8f4df45e65c7bee730b51fd8e
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-aiptek-X11R7.1-1.0.1.tar.bz2]
-md5=e4ede86a636263c02530005ba958b65b
-sha256=1d0cd2377f61974dca5ed141304ec2b55814af6f9d084ce634694713cdb6da28
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-calcomp-1.1.0.tar.bz2]
-md5=af13f9de2af4e1d03b2da0c037fd718a
-sha256=ebc446e74eea72d391104b1ce3b2a5376bced098154ec089a944f4311d240904
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-calcomp-1.1.1.tar.bz2]
-md5=689099e2ade8a8c9f68f82fdf569b3ad
-sha256=8117b37da2e031eb983e1e98034710a1511299496fcf235f936caff252fa8957
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-calcomp-1.1.2.tar.bz2]
-md5=ebc9a64dc72ae3015c16011bbd2d3557
-sha256=bf6edb9d78c90952a16c8bab9e69aebb3e1361e4423ec90e47df57e8c873254b
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-calcomp-X11R7.0-1.0.0.5.tar.bz2]
-md5=f4199b5df063701462d5a8c84aadd190
-sha256=f3f913f627e0871a65a4e18cc3df3b0188bfe0e73a755436921488756753f989
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-calcomp-X11R7.1-1.1.0.tar.bz2]
-md5=40a557a54cc8ff58cbc4dc1abd37bb18
-sha256=89f23360b8eadd5bf602712d78d83147245b51424aa06d9b643265f840857610
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-citron-2.2.0.tar.bz2]
-md5=1fe53cd055a69650f3c2e02377ec728c
-sha256=26cfa755d3a383f80039fcd286c44ba5f7b353feb8c674f386bb08d741d2c3fe
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-citron-2.2.1.tar.bz2]
-md5=4e254fcefb3bea55772e63c12570f6d9
-sha256=1480ba63b342c00a53292d513bd79a69e1ea7c01a0c77d1a368ffb22e37c1a83
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-citron-2.2.2.tar.bz2]
-md5=8cad35da16ea4688ebb74533ccc7f190
-sha256=6d1908d1f1be1ce94fdc946f47d163c45b0a1fc4b9ffb05cc436bac865e1ecaf
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-citron-X11R7.0-2.1.1.5.tar.bz2]
-md5=62b5405d337bc055bc9345565cc0da8c
-sha256=fbac5de06334b6757d91fcc2abc08e2c56c7a57dcba1abdb5c99133decf7f795
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-citron-X11R7.1-2.2.0.tar.bz2]
-md5=9d33544dc2beb9643cf329f5f4ab295b
-sha256=362d927749c899b18287afed4c3fff59480bc18cec63e9d104073b585fd3814a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-digitaledge-1.1.0.tar.bz2]
-md5=53461c34cc0712aacab92b820b9fcb84
-sha256=24001f19b46b5bc2fcf8212f04863e4efa90175fac797350525e14848ab98a38
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-digitaledge-1.1.1.tar.bz2]
-md5=4c27e0f3c6447e76df39a837fd46a00f
-sha256=ded010f82b1dbb57b1ee0ad6707902b31540e0592c94d6bbf3b43a7a35220775
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-digitaledge-X11R7.0-1.0.1.3.tar.bz2]
-md5=8342f3a0dcdaa1120af01dd25dabf0d7
-sha256=964a13291f412a6da62d3ad98bb8afa21ad7c884eb6234f279a0d40d7f912b58
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-digitaledge-X11R7.1-1.1.0.tar.bz2]
-md5=e98d51c032e9324ab961a1353f65b6b2
-sha256=a416d031dcf31c28f0b91866ddf11594d86d5e40437c3b4529f95cc8a2958254
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-dmc-1.1.0.tar.bz2]
-md5=e1bcbdefcb839173de79aeb3cd038b77
-sha256=c5ca8fb2dfe0130767b2c10bd0661277a67e7d5b9171a7f5f6264ec48790473f
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-dmc-1.1.1.tar.bz2]
-md5=f21f008220bc7687ce1c34ab557ec32f
-sha256=f98c5a7010fa71cee88b4c2470e5cd804e42dfbc5292cf1c20eb75e9b1814002
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-dmc-1.1.2.tar.bz2]
-md5=91021ea8f3593221c0d9ee9cc14deb48
-sha256=b6f4eb367ab1aa7da5ac5218953d7cdde409c9ddf59f6cb6b2e1aa2789b3f361
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-dmc-X11R7.0-1.0.0.5.tar.bz2]
-md5=fdf127a2d419f7c2e02bec27273091d3
-sha256=6e03c373f3aa25b7305e927d76dd9fd233d83a3ec08bf517e8cbdd2b00d32be5
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-dmc-X11R7.1-1.1.0.tar.bz2]
-md5=d26f4abbb4c14a64cb5d19676edc1a58
-sha256=8287cb7ca9af7996850eef6f32b4577f5747049ca635b6b5851fc56ff0b04bf3
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-dynapro-1.1.0.tar.bz2]
-md5=1683178d09dfc604dde9ea2aab950a28
-sha256=fc2ad50b1aa027fe57da53cbb73db0b4b9d0de9032f00dd42e7cc0aae7c50d6a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-dynapro-1.1.1.tar.bz2]
-md5=d47be12a230c44a05d56d6b79ebcfc38
-sha256=ed0f1ba81febf8e7a20cfaf32b021fcaa102af37f3070d67d6a101eeb6964992
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-dynapro-1.1.2.tar.bz2]
-md5=ceb5efbd3d62e24ab3a5f9f180777f7c
-sha256=55b7b2e950331292ec05c81d566af6d1000ac3cf904068964c3b9d43cea4deec
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-dynapro-X11R7.0-1.0.0.5.tar.bz2]
-md5=89dbb839ab4c5fca3dbc3c2805a7efb9
-sha256=28a2707b4633b99fa9b5fc5106d5eff9445344e50bd6a05a41094178a508e11b
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-dynapro-X11R7.1-1.1.0.tar.bz2]
-md5=5121ef14108585c902753ae6e4b813f7
-sha256=fe0f5a9dac8a7fa2e2758bbc5a50190d99b39c5510422ce99efd95d96e13889f
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-elo2300-1.1.0.tar.bz2]
-md5=43885769d6f741272dda162e82902b0d
-sha256=9551f67e24c4573867a64d032d1ff6b63654caab8a85d3c6b2af7748daaa2134
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-elo2300-1.1.1.tar.bz2]
-md5=4eef20f44954d49571a10b9134fdb663
-sha256=cc2cd97f49cce1795ea74034b1416ff7cd5107e1a69258b09a741d55a98ba005
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-elo2300-1.1.2.tar.bz2]
-md5=611d0a77a80286bc926dd3c414e59555
-sha256=ce575f79a5a93f4129a4e63572911d54cdc6640abc303afeb3c74741bb3c9627
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-elo2300-X11R7.0-1.0.0.5.tar.bz2]
-md5=6009a17f13a37bfde8b60c2fba5b0e5b
-sha256=6a4dec968d92c7a73dc801367c2743062b3a09b37bb8ed7ba720f435f1f53703
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-elo2300-X11R7.1-1.1.0.tar.bz2]
-md5=7eeb9f2018aef32299c37ad2b3744b8d
-sha256=46d3d459821a321cf82252bd4130134b5ecab0984cc0ec5ce0f0f8b3b6e41908
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-elographics-1.1.0.tar.bz2]
-md5=ecb2bf1f800d4f5f4c295f2a0e6b1de7
-sha256=1583e1dae6e3ecd34ba55deae7dfc052efede0378f852de6224308d7e7d5b2d8
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-elographics-1.2.2.tar.bz2]
-md5=50a9c32af12ca4733afe23042f012f9c
-sha256=76ded0e6977f7d562a8236bc810423cd050320531be9621d868a48309ebc4d63
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-elographics-1.2.3.tar.bz2]
-md5=cc2923460c8eff9652b01889a063058d
-sha256=67550c8f4a85a8029f08880adf487e2efd4585e7adbe8da357fbd49750b08d8f
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-elographics-X11R7.0-1.0.0.5.tar.bz2]
-md5=24c33f833bb2db72a07c3d28bfc0aae9
-sha256=f1b7f84175d33f4d18c83cd0d37bd3962acd668922fa074a8ae29e18517cdda7
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-elographics-X11R7.0-1.0.0.5.tar.bz2]
-md5=24c33f833bb2db72a07c3d28bfc0aae9
-sha256=f1b7f84175d33f4d18c83cd0d37bd3962acd668922fa074a8ae29e18517cdda7
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-1.1.5.tar.bz2]
-md5=01705ea9a4d1699d5eeb17e7f297a581
-sha256=52b7daab86dade2d189f0378ddf196c018cdc9dd47ade0b3b8fc7591cb4bbe9e
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-1.2.0.tar.bz2]
-md5=0c7c41d3f1637bb559e80c2ad708f05d
-sha256=b23b231d754cab717a4b145ee3a5f3e73db46d877d23502326e9794d92d976ba
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-1.99.4.tar.bz2]
-md5=f56d98ab11ef77cfcbafb5d93c697791
-sha256=71e896168819bcf50044c175482d03873c31bc6eb355305a87e94772580789dd
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-2.0.4.tar.bz2]
-md5=ac97e155ea4db87a8393297493f9c406
-sha256=825adcadaf4c90d4cb1d0bd21dcf67bf3b895f12f8e7bf186ed936445dc015ca
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-2.1.0.tar.bz2]
-md5=a6070ead29b2d81b5b386a96df2661b8
-sha256=45c4b6df8d1dbc4db8aa580be4f3c693ebba4eba4908d82489948827d3bed0e5
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-2.2.2.tar.bz2]
-md5=23341f098e7fe8ec13ef06ef784ac51a
-sha256=63606119e86c27b47bd7ec4b2b6048b76515df6755fc5dd8bcfc98f5fe53d994
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-2.2.5.tar.bz2]
-md5=e926692d74ee81ed459d0fe89439ff8b
-sha256=433fd29043cd427ba486bcce471aae3ad1abca94c8682feff92da0c380b8dff3
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-2.2.6.tar.bz2]
-md5=bc4b2356e1dbf2d21e1e95249b18f5f8
-sha256=dbf3799e207175e91f50492d51343e5cfdc706f637f6e9f14257b764e86bb3f9
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-2.3.0.tar.bz2]
-md5=21dac6461379d67ee3b333c77f63e7bf
-sha256=6d57420cce9201a14f2fb5c5f6bc8999ffdcc9520020d54290eb22db27c366c8
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-2.3.1.tar.bz2]
-md5=e56ce4424b89b2409c6e73e007a85da7
-sha256=462f2ae2fd389a87e09fa764a236cd04dcbf85bcfcd8000aa9a3810055511d8f
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-2.3.2.tar.bz2]
-md5=b2bfe368022eedf2671ee28daba31efc
-sha256=029bf469bd013bcc3e384c1297a05a59e4b9b3ba90a26c022b32c0819d115e28
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-evdev-X11R7.0-1.0.0.5.tar.bz2]
-md5=d982c6f185f4c75a4b65703ceed7be06
-sha256=ba53e8ce6bfa01da7fa86a31853542a71722b41b511041bdb58cf66c10f3edb4
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-evdev-X11R7.1-1.1.2.tar.bz2]
-md5=6eba3b46ff77b99c44f93d2a08cc6935
-sha256=e1e2b2ffe37e1c70829eef55f700cf3cffd49b3b3e0e2d3bb47c2cdd5db5adf6
-
-[http://www.conan.de/touchscreen/xf86-input-evtouch-0.8.8.tar.bz2]
-md5=4d8e092356d8353002f60a4907046c13
-sha256=eafc4a09729a4b2b6120430c71e1954c5cac299ad6adf2f9a40aee8a7b51e476
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-fpit-1.1.0.tar.bz2]
-md5=a31066a2076d18619ceaea67f6d89698
-sha256=8ee3b2df90516182460fbda025153aa7fb2c6ba343e4239d225963a287f694f8
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-fpit-1.2.0.tar.bz2]
-md5=0f3e013d5ff58e0aba3d9e1d18830291
-sha256=87e3dd97d57ddb520cafa5e68fa7846cfc3d9d71cb054cdf0e1d650c7b1cff7e
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-fpit-1.3.0.tar.bz2]
-md5=e5bfda480f25121e3c4222e5e1eb5880
-sha256=d1ced3b8c6d799c3af1c93e72dc571cb30d38083e1221b8ea0b2d4fc48a7eef8
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-fpit-X11R7.0-1.0.0.5.tar.bz2]
-md5=fc0e11fefc322623914a2d819d5b6d51
-sha256=8f131c2b26b1e0e16e9dfacc73d457bb16cf6e455a1dbdc382f4a3e3b219c703
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-fpit-X11R7.1-1.1.0.tar.bz2]
-md5=223ef71e07b18e140ef227feef965ef2
-sha256=a11dbb0bdb6bfc65fc2a8b096edd4797816767aabe49349517a51497e373ac0b
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-hyperpen-1.1.0.tar.bz2]
-md5=1dfccb75069e61e0c6f990b47eb58c40
-sha256=d1c20a3340e06c5634759832dcf2edc6acb41476a4f637eba6880730e607f493
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-hyperpen-1.2.0.tar.bz2]
-md5=175c1e1ad668ebbbe212c1e975dd14f9
-sha256=689d1c5c1f21eed00ae03a01c57482f7bbef36d7e07156556c99febe28c7d413
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-hyperpen-1.3.0.tar.bz2]
-md5=c50d0da3206d18d9d94f720e3688eca5
-sha256=e7a13a7597fa32f05d595d05a66cf94c529ba8ce1d03249bb9da5be9512c4b7b
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-hyperpen-X11R7.0-1.0.0.5.tar.bz2]
-md5=0c4f2a6390e3045e4c48a48b47b6332c
-sha256=708011ed8fdb6d321e7ca91787ff06c7bcb011cc4a3b5d6c0c02562222da7ef4
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-hyperpen-X11R7.1-1.1.0.tar.bz2]
-md5=8f1d96c97e48c794a61d2e81dcc1d06a
-sha256=798bc6be1385c2c39483553a9f20b022247d364a8acf7e31b3ee2c61e31183e3
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-jamstudio-1.1.0.tar.bz2]
-md5=a32e36a24545791a3408cdc5563b6523
-sha256=ce41b360bd08ea31036b79cfc25a32c854147522e4580f5ca1a203233e657e1a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-jamstudio-1.2.0.tar.bz2]
-md5=8011f90d7dd801d26e8c3dd058633978
-sha256=c5bbade96f1849b45f665a54e08ac8f9d5a94d31a8a680edc4d3c9361d164ac0
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-jamstudio-X11R7.0-1.0.0.5.tar.bz2]
-md5=49de35ca024be2cb785832ae37ec30d0
-sha256=ed5c17b702a43192710b7476f3a8540d04bc800554fd05e348be4f510f651dfa
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-jamstudio-X11R7.1-1.1.0.tar.bz2]
-md5=ca01cca63fa57600c1cf6b307bb9aa8c
-sha256=cacc590ac4e57f3374e18b9898c6fa8992f31db6e1cf985391fe42c33a29fe15
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-joystick-1.1.0.tar.bz2]
-md5=e0025215542c7a11c5a7f9548631dbd7
-sha256=11c3e8056e8f44b9a6f348b5366c7e725155563374770b82e339e913b9a60d16
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-joystick-1.3.1.tar.bz2]
-md5=ff25ea697cfa1570cc28f4b9cf9c761f
-sha256=1d33b9668e039ea9adc0680c1f2971785508cfd74b2215749db23af23ef8f9ce
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-joystick-1.3.2.tar.bz2]
-md5=e48b99e55093525ebb7811a014391a0b
-sha256=6cad238e0a54dec75c5224f9c0774b4fce2a03b06f1c61b404e9ea97d4941d4b
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-joystick-1.4.99.2.tar.bz2]
-md5=29cce86738411c9f8de04375090bbbec
-sha256=7224e93a8560362d454a104e8bb481213dcb559b41516c7b883c0881e25252bb
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-joystick-1.5.0.tar.bz2]
-md5=79b20f86d1b2e625ae65e35c3457027f
-sha256=718118c5d769529f604c1ff099fe637173442cf01fc40bdef7d45f4baea282a9
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-joystick-X11R7.0-1.0.0.5.tar.bz2]
-md5=9e3ba60836f4c1d2e4cebc63a28321b4
-sha256=9b69192a4368bafeaf94432ec50025dd3f60340290ef2500f6032159870ed489
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-joystick-X11R7.1-1.1.0.tar.bz2]
-md5=6c702a255a1753bb10a3f219a3ac227a
-sha256=240abf3bc4068f9823dbe6e8ff9c63e5aee1442fd85c80122f2ee44c00fe101e
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-keyboard-1.1.1.tar.bz2]
-md5=babf094e37bdfc08076d4adb4c69c1d9
-sha256=b7e7377d75f3a10cceb5df18019b8e4498fbed0100478edd4af75bf8cd45d6fd
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-keyboard-1.2.0.tar.bz2]
-md5=06e14029e00b32ed085769775b398efd
-sha256=8c45fc324ea01377f9932250824ee1769bdf1eab6e4b661c22a39deb0b01580a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-keyboard-1.2.2.tar.bz2]
-md5=ab3122921f6359c54e250879288ffd47
-sha256=c25b35524eaf00928d97bd0d8bf9e489d92993b133461b5f4d8d9655d37ec072
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-keyboard-1.3.1.tar.bz2]
-md5=ebe5dcf8eed819103909f18321fc3b9d
-sha256=7b514715dfb5a2512dea3355bc3f09eb879d7184440c5525f0a9d29ec9f3be42
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-keyboard-1.3.2.tar.bz2]
-md5=d6fe929c4f6085d6dd67f197ae9c42f6
-sha256=33939ec65dbf56f49e1e7de854a1cf95446e40c533950431901567e67112aef2
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-keyboard-1.4.0.tar.bz2]
-md5=fd17158ffeacecc8cc670604460cb98b
-sha256=842d36cfca68ddab4f2c562c73bfd43ba76de2d490d60034f0c5dd524aa6d6a5
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-keyboard-X11R7.0-1.0.1.3.tar.bz2]
-md5=8fb8a30fd9d7f152a1aef4eb8ef32b3f
-sha256=e82d510157d13be37eed604cfb0d9355c054c4d3ac39bdef0c6ef320f2973d77
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-keyboard-X11R7.1-1.1.0.tar.bz2]
-md5=d81490c79db78b0c182f0b2a37e02756
-sha256=33b2190541a96b601d22ce6f275b95b0869bad89af8629cf2d8035951f78c47e
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-magellan-1.1.0.tar.bz2]
-md5=0d6a81aa864ac790d9a8b517ca7016ad
-sha256=8eef54b50c428513a330ed7183ce37f269050252a4d1199d3b00ad6bf0a7833d
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-magellan-1.1.1.tar.bz2]
-md5=8a966d3b74dc2a801ff09b895037090c
-sha256=06da7d1b222ba47ba0c7fd561965d78f2c8e46f44c998cb768e98bdc3c0e1741
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-magellan-1.2.0.tar.bz2]
-md5=9801ba10f15f8be2420dfb3f3b5d5d27
-sha256=c5285147a4df0b5b0fd5dcb7c0e5953bc982d3d6f2a2ed2e7767ead909a510e4
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-magellan-X11R7.0-1.0.0.5.tar.bz2]
-md5=fd7367f467dc3302604274cee59a7c7b
-sha256=e13fb01c5b86b9409d1e4024c06b55a18d5c2eba98370e73870caa19f8ef973b
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-magellan-X11R7.1-1.1.0.tar.bz2]
-md5=9e4bde8bbc56e99f43164bbe79343360
-sha256=80734e0406f6cd8263c22dd6c34b4cc387d75d27a1cee02c13fb7626df05ba53
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-magictouch-1.0.0.5.tar.bz2]
-md5=d23f2791cd634ef85b7cc5e9da8f8407
-sha256=9cedc831e9d86889f473fbe3b8f1478afe5ed8c0dd71492aeb896cc681d7444c
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-magictouch-X11R7.0-1.0.0.5.tar.bz2]
-md5=a51d84792b8c0079d7c8d13eb17acf31
-sha256=1e384f8cf5f516c3b460b8e1a94ef98dba9681a3ca0a2f2fb3687a9df12d00d5
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-magictouch-X11R7.1-1.0.0.5.tar.bz2]
-md5=b3ed11fd57bf99ca515d72a16875cf68
-sha256=ac0ff1cfa93d9512d0a2a5b47430f6ecbcb34bce2c3e76542e883e4731ea1f2b
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-microtouch-1.1.0.tar.bz2]
-md5=7b3cc0330d70e7e4e07914fcb325b331
-sha256=7f92f5531495ecfbfd00744198fd4b2aa3b8f5c188b115e55e865e961bca2039
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-microtouch-1.1.1.tar.bz2]
-md5=9843fbea6cc0c4129e96ce9a6c893cf6
-sha256=5f2f0b16705c6226081a452f9f876508c388b384fca69106d377cd134cfddfd3
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-microtouch-1.2.0.tar.bz2]
-md5=1ad1aee7d8df84b9ea832d1e75963257
-sha256=b3034e0a768c4f646ea954d59dd414d00df3238e845848081221af6efe864f3b
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-microtouch-X11R7.0-1.0.0.5.tar.bz2]
-md5=0c25e0340b6483fb2a600b0e885724a2
-sha256=f113b6649719261da21137d4b18168862d37efc1a79db2dcd1e078f6dc9d8a3b
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-microtouch-X11R7.1-1.1.0.tar.bz2]
-md5=cc96f2553c3c94dc963c07bc45a8ebb9
-sha256=2776fe554835a2be94e69cc40af7b4d4f7048d9a36a844ebaf1a792ba0868dea
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-mouse-1.1.2.tar.bz2]
-md5=d8bcd9fb1b4efb02acd251495f9a30c1
-sha256=7d4c2ecbe8f9327f7c8093c05401ab68b22f3343bcf04e4838cc40c21b7f8e0a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-mouse-1.2.1.tar.bz2]
-md5=72b07e65bbea6ab484d84c048f6835fb
-sha256=82671998e2b02ad097e3d5cc7d964e11de0b3ca3dfec4876e8fa2a13af6aacc3
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-mouse-1.2.2.tar.bz2]
-md5=c47c598e55e7080b8ea30f70781f7ca3
-sha256=80e9cb52b2036b71289b2140bcd3ac202cf46fd42830761c53120ddac38e7edf
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-mouse-1.2.3.tar.bz2]
-md5=47da1fa52584933d045528109f094eff
-sha256=a07cb2169f43018c90b7889781c0db30cda0da03811edccb8c4db533166357ab
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-mouse-1.3.0.tar.bz2]
-md5=31a51b0e5ddc4fac19754f48a3adf881
-sha256=054b253f366795c2865714ce8bc545c79e59aa9ce1b7a9a4a05b9c674dff9dec
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-mouse-1.4.0.tar.bz2]
-md5=e7dc0759c14a9bfd373917a49e5f7c7d
-sha256=e6e1dbd64d41c826619a5881c5aeed46095bfdcb87c3e27d65292fc12a5bb7c7
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-mouse-1.5.0.tar.bz2]
-md5=c58629fddf0782dad5c02da6aeb35521
-sha256=f303e20872ab2fb20e07a7f734d17723346d2b4b8687ea2086f7a7468d1ab397
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-mouse-X11R7.0-1.0.3.1.tar.bz2]
-md5=12a908e5a97b1b03e8717abf167f4f27
-sha256=183c1cda6550c8821ef4b8d13e681a32813bcd32b6cf34a75d3870e399fa292d
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-mouse-X11R7.1-1.1.0.tar.bz2]
-md5=e427b9a1dfbed3d4c9de2bf01008fa60
-sha256=ffc07ecf8bdb4cc30d399f06ea950d8016f254614930e3d3fe476ab88748f3b3
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-mutouch-1.1.0.tar.bz2]
-md5=98ae915c67cabf0e6d40a425dbdbe10b
-sha256=cc67e0dd4f4fcc8d798f0bfe42b975132c5739bdd80809580a74182e4d1b62ea
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-mutouch-1.2.0.tar.bz2]
-md5=50711d390d2867e3fa7e06b59b2d575b
-sha256=214f0831f36ebfc081b9f31f91ae27972ced9371b9b2256650998596a097061d
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-mutouch-1.2.1.tar.bz2]
-md5=f28998cdfae2a4c41589299a4ee1f459
-sha256=53bfe976042de69f87e28261ad581cf418c67b5cb69a09cfe1eea169021db35b
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-mutouch-X11R7.0-1.0.0.5.tar.bz2]
-md5=4758e667bfbba517df2a58d51270cfe2
-sha256=f46f328c9d8ef4dd6fe118121831ff4cd34ea9f06b198f548af4c703a1aab771
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-mutouch-X11R7.1-1.1.0.tar.bz2]
-md5=1f15391dc1b24cd400ccb9c370f568d0
-sha256=751b2ea30696af593320b2cad3f0131b252851020fd3277ca5e1907a0ca29e4d
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-palmax-1.1.0.tar.bz2]
-md5=0959dbf7972dfb95f56e4bd3f56447cf
-sha256=5c00c85eed2950a575362bee2f21c2fa68eb8af81e7f1d451273a1302eac4145
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-palmax-1.2.0.tar.bz2]
-md5=9655d2235569c5a6ac321c6fb89a6f3b
-sha256=02177c339ba60fb6cc942d3bc93a322e94247f36a6fe90c7c1121694c929b05b
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-palmax-X11R7.0-1.0.0.5.tar.bz2]
-md5=d138024a20298304af883631d23c5338
-sha256=0756cb4d78cd896811f06675b986bdaa8d48ef2b3c53bf68001634fe1f7806c9
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-palmax-X11R7.1-1.1.0.tar.bz2]
-md5=7a1404b2ca2d84856d1e43efef69ccfe
-sha256=311ea26819f0ba66eede1fcc88026f6563b42807d0d4a239ea14574ccca26e26
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-penmount-1.2.0.tar.bz2]
-md5=0589f2eaa84afb9bd49b226ce7dacdda
-sha256=dea18a07cf8f59e7bc981cfa1f6ef476dd14f7d9bee3bb1a55a6cc49f766150e
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-penmount-1.2.1.tar.bz2]
-md5=268af4dceda544d8c815b9b7e87d4536
-sha256=fab08de727da6f56b82d8ecee451a52e7129ff80522e711c5322f1bd2fa9970a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-penmount-1.3.0.tar.bz2]
-md5=24594c0222e631fedccc7c540c420b03
-sha256=9cb4e0e83dcefe1ece814d638bd186785b6bc1debe1aa2101ce2a4ea0376805a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-penmount-1.4.0.tar.bz2]
-md5=d5f1395b2dcefc7533ff5580e63f2066
-sha256=8cb15e9a30f3602d22eba6c7bcca2c1040889ed0851c7b575273671c2da1bff1
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-penmount-X11R7.0-1.0.0.5.tar.bz2]
-md5=065b1cf862864741aebcfefcc7c09539
-sha256=314492cea0998182623f2a67461d64df00b910acd052c3a50f9349ead740151a
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-penmount-X11R7.1-1.1.0.tar.bz2]
-md5=6093b35d21ce93029b2b28d8b69a1444
-sha256=101bee132f27fe7f53d8242955aa195a174aede066921445bc1ceb3ef1a35f07
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-spaceorb-1.1.0.tar.bz2]
-md5=294810ca9e93c4096458c6a0f2fb5679
-sha256=9cd53cb719bf401ff3f72233d3a88c59539b94eaf11e586e307c807a325f0815
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-spaceorb-1.1.1.tar.bz2]
-md5=c7fb96281874733480ba86a5a0a3b5af
-sha256=be8f052e7132d39094f42a08c0b7171a9e280e9fa1b162a62343d1dc0d2449cf
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-spaceorb-X11R7.0-1.0.0.5.tar.bz2]
-md5=193ca7b1e87c3995b86f15a01b63b297
-sha256=e5fa2e430b39ddfe443b6c433d975f02025b5fa90f31fa249942d8bf01452bc4
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-spaceorb-X11R7.1-1.1.0.tar.bz2]
-md5=62c381b6c56d41a75858c16dccd06394
-sha256=06a4dff5bd575e65ef4984f5f6415e4ef11d2301b028bd3383d45117c125c737
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-summa-1.1.0.tar.bz2]
-md5=b37a432fd87bb9f46d011622d6fce6b3
-sha256=f10f2cadd4120b40b3658000c87f910e3005f4d787441c7dd83b48ebbf2a11f2
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-summa-1.2.0.tar.bz2]
-md5=7e17468c0d90dcbbb6202a8242efff4b
-sha256=3e8bcd89b4b3f86677f338a4584f41acb2a3cca7fe492cbea32664aa6f4f8cd8
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-summa-X11R7.0-1.0.0.5.tar.bz2]
-md5=61d780857e5dc139081718c075e74a01
-sha256=6456ddecc0e1b962b5f14b98b81d2e936cb48dcdacdd871dfa0e24c0d252498c
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-summa-X11R7.1-1.1.0.tar.bz2]
-md5=56765c5ee99f67802bca8a1134ad7fc1
-sha256=57460dfa0429c58d598f192aa65661300dd104953073d977ad4f4b15a596eda8
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-synaptics-0.15.0.tar.bz2]
-md5=939f1c831c5cd3a6f027e982592dfc5b
-sha256=e7d481c375a11df55eb8f12390c329c2bfda3258c689cec11cfec27cb5895c8b
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-synaptics-1.2.0.tar.bz2]
-md5=2cf0a2b0b3006bcfcd85bb77d966244a
-sha256=ddd5ad4c25ad2f2e46134272bf047522882deba8ac3ac04d5e11f8bd9718620c
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-synaptics-1.2.1.tar.bz2]
-md5=29a6f9da5123149e4abc8ff83880ed5c
-sha256=a63b48c5c8eb09416b941dea591a948e111d1b2e14d4620f25377cf47cf877e6
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-tek4957-1.1.0.tar.bz2]
-md5=be8a4bd474ad6c85b93f66dd6fcfa6ee
-sha256=09b9506d1bb1deaaf69872392bc56e1d75997bb8157e85a9121749bf5fe15727
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-tek4957-1.2.0.tar.bz2]
-md5=8103db1ca5c55726e0b58148e4b1fc06
-sha256=b097a5b1acbd732d9ca5d28c13003a1f1c8a3465f4fa77c1578d36330f3358a2
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-tek4957-X11R7.0-1.0.0.5.tar.bz2]
-md5=df633403c91a48c6a316c6a5f48e53e2
-sha256=1cc4a964e2b407d2b9ebbac0bf38787e572d9bd88759fc0b229f588ac90ed139
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-tek4957-X11R7.1-1.1.0.tar.bz2]
-md5=4b6b9d67d2a7056a417d26115612ecc7
-sha256=064f75c31ac167e61b9b29c2cef86908ecf1e1a742019298b37799664d08d19d
-
-[http://www.pengutronix.de/software/xf86-input-tslib/download/xf86-input-tslib-0.0.5.tar.bz2]
-md5=4231b517d216e9f80ba66f13a0f30afd
-sha256=d70c64f3f4fe931e12d5af7f91ff04cd0d16dd7459061c50b3149f9e35de8091
-
-[http://www.pengutronix.de/software/xf86-input-tslib/download/xf86-input-tslib-0.0.6.tar.bz2]
-md5=b7a4d2f11637ee3fcf432e044b1d017f
-sha256=5f46fdef095a6e44a69e0f0b57c7d665224b26d990d006611236d8332e85b105
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-ur98-1.1.0.tar.bz2]
-md5=3cf8928411458baaa9e726e51772c550
-sha256=214bceb0fd52a932d448ce03d66539eed2e6660617e3d42977704cb7eec6472a
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-ur98-X11R7.0-1.0.0.5.tar.bz2]
-md5=9b1530b3dcbb77690ad0e61f60489899
-sha256=2cbcca2d5c62de8376bbc9e1fea6f4564ece32f6f6b5e926b199c2e60a3dae7d
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-ur98-X11R7.1-1.1.0.tar.bz2]
-md5=7e8288f4f75bcba1e3aaf6ef68664b38
-sha256=f06dea24204c6f3f42c29d1a89f51da801082094e393a716d592d638fa9ddb66
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-vmmouse-12.4.0.tar.bz2]
-md5=313e403e56702f6c38d1a5c830b60dc2
-sha256=383e0973aad0e96812fc019cb579abaf016f97427fc07466b150fe15739ba63c
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-vmmouse-12.4.3.tar.bz2]
-md5=44730af795616ed4d4a0cd9a3a07935d
-sha256=d668c4cacd4be6d56608fbdf7779d60120f38f3315e6385a7cc87339124e77ab
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-vmmouse-X11R7.1-12.4.0.tar.bz2]
-md5=f253663de03e0fbb377ce085947412b1
-sha256=973a51a442d0c97eb3f76af3b148194de8a4187e74f4a68033b0480c6408db42
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-void-1.1.0.tar.bz2]
-md5=ea72a92d43b95f413347df96d6a73933
-sha256=b43c5d920821bd06b6a1a131dd071ab838bf024c3cb092c6d1f10d57b648b0e4
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-void-1.1.1.tar.bz2]
-md5=862c230f5f6e0c545f232b4c0fa9537a
-sha256=dde062d6267a3fd9d51b0daee88fd84fceea52a6019de51dece46e92012dbc4f
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-void-1.3.0.tar.bz2]
-md5=53bdac9ca56418f4675810ed8a78b3e8
-sha256=e2165ddf637703e21b3c45d83d56485c39b082b9440053d3885557c4d52b130f
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-void-X11R7.0-1.0.0.5.tar.bz2]
-md5=c7ae53dee1f3e95fa5ce9659b34d8446
-sha256=ca90a522b78114d72748164c7a99274634cd2b50953f9c52f91b31746c790b5e
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-input-void-X11R7.1-1.1.0.tar.bz2]
-md5=3683affae738de5ef130b6720bdfd6dd
-sha256=4612a45a90fb1aec8cabd36abeaf04f202ecc45d2074427bfa9f368f95514e43
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-apm-1.1.1.tar.bz2]
-md5=ac7e05f0dfc7e02cac0bf17b9eb89b11
-sha256=09d7e6cf30b94f141f8ebe2560b301a058f645e74108edc28c908e750865dcec
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-apm-1.2.0.tar.bz2]
-md5=4f78650d79656dc803a720049d65682e
-sha256=f0fe020f892e6e3a696a490c86312a1b32672bffb7dead153c24f103540a6185
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-apm-1.2.2.tar.bz2]
-md5=48441a19aaf015570b267f2a8e67d8ab
-sha256=678edd063e1d5e7c7f72ccdda2388c5857559847b3d313c94d659f9bd51c1752
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-apm-X11R7.0-1.0.1.5.tar.bz2]
-md5=323911ab16a6147d3cabceff9336a3d2
-sha256=ceaf4a611b8ee8bc31bc784f1012b0d6be6380e8823f6bf03a9a1ee737264a78
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-apm-X11R7.1-1.1.1.tar.bz2]
-md5=a5320411ba92e637ffb233e9cbb80d13
-sha256=1e43d482e570328abcb8a1e03c62f8c3e3fcaf3eb09dc885503a1add158be0a2
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ark-0.6.0.tar.bz2]
-md5=6921479baca8f7b156029489fd335854
-sha256=e5abc4f4ae643ce56d5773f052515196f05786235e4afd155a3232e20dbc84d7
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ark-0.7.0.tar.bz2]
-md5=6826c556ebe9a1248cbc7f7edd44f956
-sha256=8e65e73045fabe37c15f6d4895baa09346bdac2f7537607b523aacd7bcf57594
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ark-0.7.2.tar.bz2]
-md5=4745f5c722b030962cc56eb2443894a0
-sha256=db1ef3e15ebd382837f16c1143035dfd9fa6465a77ae2e850201f71508065741
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-ark-X11R7.0-0.5.0.5.tar.bz2]
-md5=342937e275dbc92f437417a3186a8222
-sha256=47aa2ecf4129e72e049796571e3125ff3bc8dae7fe31e27d361470d4a3b8d548
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-ark-X11R7.1-0.6.0.tar.bz2]
-md5=a5bed67815b9e650182806da301b488c
-sha256=06c2462dfa65c32e31a972292531bf686c56c3f9cf21baf814ab0eda5cf26653
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ast-0.81.0.tar.bz2]
-md5=04bc08907da13612dbc4918fe54e63e3
-sha256=b95553aaf89bef28051c82914cee2b91102dbc2370d0d855404ba453902459b8
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ast-0.85.0.tar.bz2]
-md5=b415bf3259ad0acdaf62e3dde76e3289
-sha256=9018ff84e4866d895c037aad33fb31c79d5f47d3f54707600cc3fe6076485b28
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ast-0.89.9.tar.bz2]
-md5=619f6ff15db869be3800bb001d5b0468
-sha256=880f16d32a373a052515f4ae28a3f1a97543d0d73d2ea5d74baf23bdc3a6b401
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-ast-X11R7.1-0.81.0.tar.bz2]
-md5=ac1595de8397efd740038994b1e9ef67
-sha256=f0020c88ca3f86b4826c556888b476f081b80010ba78239f95e5349835ad8811
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ati-6.12.4.tar.bz2]
-md5=e662348f6f957fcedf52818d668ab9f5
-sha256=cfde066a7087a19b624f79e95cb9a6c97a847b8802cf38d4ae6022758bf338f6
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ati-6.6.193.tar.bz2]
-md5=102b781f543213852401f3422b18ccc7
-sha256=9b0899694000cb91d5643e2482376af24bd495cb01b4c9dcdd6ee3545b0aefae
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ati-6.6.3.tar.bz2]
-md5=f6d559f9d20f61567d381916b376590f
-sha256=d08a429e1fb1620ae81839181a4dc6cd579d52fc440d44d7bba36d19be355780
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ati-6.7.196.tar.bz2]
-md5=06db625391c75c8be86c4dd5a5d713e6
-sha256=8923a08232255ceacf770ef767d86bbfb195dffa9559baa1b1de90f9c947a6d9
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ati-6.7.197.tar.bz2]
-md5=7bd53945ce6d0b48b7fd558039e82aa2
-sha256=b6c67996cfdbbf9b3a191b9092f5d515dd7fae564544626792dd5ef404e29134
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ati-6.8.0.tar.bz2]
-md5=3c97c7925ebf4162eeb3463e23adc0e3
-sha256=3863851e3c85d25cc38941eec63e866656806821b028519ae32ab8b276664fba
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-ati-X11R7.0-6.5.7.3.tar.bz2]
-md5=92525195a7a36f5ffbffcb4e6a564e50
-sha256=094da5eae789e50d1ebc4d7823d4c8ac701e3bbe387c0ff63285e2ab32aad1f8
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-ati-X11R7.1-6.6.0.tar.bz2]
-md5=c490366e7a663b4d05acb45713be45ee
-sha256=4f471f90fcedd164c5e550afbe2dd3f7247b38c19e3d44b0b8941bbcdf0f1a10
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-chips-1.1.1.tar.bz2]
-md5=3182d43439ca4cbf08ff9aa76990bba3
-sha256=16a81cdb6b311176936c3326d279c0d75530adbcf9a3489eea55992ac5bc7494
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-chips-1.2.0.tar.bz2]
-md5=0fec6bee65383790485d917247a61629
-sha256=05f38c49b23be36afa68b738faf520b8dbf05b92c769107039426651801d4f99
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-chips-1.2.2.tar.bz2]
-md5=a3969c28c3b36ab2caa852a9324e9b70
-sha256=ff6fef2cffc62feb3b23f3fee375e502ab7356d571517a89b4de67f0f6037f0e
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-chips-X11R7.0-1.0.1.3.tar.bz2]
-md5=90f23505faceac30d3f46ab94f7293e1
-sha256=2df2e34dc61907fb3c41b4590f51d39f951d2d74422d84f1f7d53ef6f5b25352
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-chips-X11R7.1-1.1.1.tar.bz2]
-md5=cae9b1b131c1fc1b45ad1a9604fdeb66
-sha256=e851ff555f177ebe6b4d8f961e088a1e2f5947ba739e5b891eb5b3ff4cdd652b
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-cirrus-1.1.0.tar.bz2]
-md5=66344e315def275605dafb314ce59851
-sha256=5988962199d5013274f6a6952939e4f405df658bb6616ebf9954c993b1179b1b
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-cirrus-1.2.1.tar.bz2]
-md5=bc28fdedaee9059180e2534f9dbcd2f6
-sha256=e7c99ed66326df5fadf6e5d875859a430fec4369415a27cde72a91109f78bb9c
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-cirrus-1.3.2.tar.bz2]
-md5=8195d03ed0be0975c03441e66a9f53b3
-sha256=529a98a42c94ba5e1b9269e6f7b32a9e76cfd2d4728df08aeba615df8b28ca1a
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-cirrus-X11R7.0-1.0.0.5.tar.bz2]
-md5=7708693ad9d73cd76d4caef7c644a46f
-sha256=29e6fdd67e8ec51c534f6123f9935a165711255d935fb9cb28cd44f9db278b3e
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-cirrus-X11R7.1-1.1.0.tar.bz2]
-md5=0af3af1dc5686e1f487815b231b3dc0a
-sha256=f1a07fb7b78604b2731d9e859d50d59f16ad839da3cb75b19a99fd0500006c0c
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-cyrix-1.1.0.tar.bz2]
-md5=02ed7d5215610a3463a0307b30bb5425
-sha256=d6a66778e0f6ddd907cba5784386bd6bb526f773b5db9faa35875ba67c2ca6ad
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-cyrix-X11R7.0-1.0.0.5.tar.bz2]
-md5=14f868d16554b19fef4f30398a7b9cf1
-sha256=6eb51d5d4489083c8a1eeabc1fbd22baeafe6486a7940516d1e2b741564acd06
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-cyrix-X11R7.1-1.1.0.tar.bz2]
-md5=adb1e6346efd8dfe5dcccd47d46869cb
-sha256=25ba42dedc297ca2a7257fdb4e050e8d61cdd6710c8adabdb3925908b09f9d02
-
-[http://projects.unbit.it/downloads/xf86-video-displaylink-0.1.tar.gz]
-md5=4faccf8ec4e5830ad87285317162c041
-sha256=6a1bb0297a24ad8da0466088d23cf10340f2a729f2a985712f4620a9a2dde675
-
-[http://projects.unbit.it/downloads/xf86-video-displaylink_and_udlfb.tar.gz]
-md5=9a10f8884e711cb0239a60aec721a594
-sha256=aa8c9dc0a156f25adcaec1a8749665996036251bc31d7a2501dbf895211f0951
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-dummy-0.2.0.tar.bz2]
-md5=22b7cc20a33443cbd218bd2521850cfe
-sha256=46013885696f3c1a5e05c5d503abc69e691443319a97cf2c6a01ec031e06c910
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-dummy-0.3.0.tar.bz2]
-md5=3d96297556846bee02a74166ffb5d052
-sha256=5a4bbde0b7f0334bb63b159e5ef6e164be3699e3424734c2bd9823f20a30a278
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-dummy-0.3.2.tar.bz2]
-md5=2a6f1f07462fbe336865068cd69c8593
-sha256=9389cbc21b0b5f90920fdfaad4466f4ec07674bb1ddbbf63cbb8759ace5c45fa
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-dummy-0.3.3.tar.bz2]
-md5=3ffe3a28f4452e66bf56180e7da9cbc5
-sha256=df3f55de7953dba6d7ce10cc5f355da1a6164f781ad9393a38dae502dba4955d
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-dummy-X11R7.0-0.1.0.5.tar.bz2]
-md5=462654f9be7e3022f97147e3390db97a
-sha256=f50f6d3d7fd79c5ce40ea6039a2fb82f136b13c18afbc2b7e941d41d6568b698
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-dummy-X11R7.1-0.2.0.tar.bz2]
-md5=d53836ac3d6f99920dc168fc22a09413
-sha256=73e08278ecfbcbf08e8fa0e55d347d2945aa4a5a7108cfc8b87fcf7cff6b9c00
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-fbdev-0.3.1.tar.bz2]
-md5=9ae810c6c6c3c9713a67866fe794d4ff
-sha256=309d1f618c77559ea494c05d45b09577790c44900685e17bc812e4e1b19df6e7
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-fbdev-0.4.0.tar.bz2]
-md5=6572b39fec77b8e6de1c858a93992924
-sha256=bba725daeb2a313b83f2b92855a9ae8aa72c4cc8581f9f62f101ebdf00ac359d
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-fbdev-0.4.1.tar.bz2]
-md5=79ce1eb9f9d2ed56de70d8e06cb767d9
-sha256=2bf857179523433a9cc6c6eea059298db4c865e649aa58dfc67c828f28b7288f
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-fbdev-X11R7.0-0.1.0.5.tar.bz2]
-md5=1cf374eeb9151ac16a7ec2cd38048737
-sha256=c6032ec1753a0f5975b5a7488ca3ca0d46f84bc5dd8fcb42eebd807c7faec765
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-fbdev-X11R7.1-0.3.0.tar.bz2]
-md5=c209e54fa8dcd3cd3342e84d261b02db
-sha256=d03eb7e5b47e2f1e1a665700f4e22d15651dc949196b0ec880f0d63cafb6814c
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-geode-2.11.0.tar.bz2]
-md5=1dbede8f6393edfe6c1ecab2f754b3b2
-sha256=d70c198cde981c3a53b1c41b717dea4bbf1d397d82957f584c641bb5fd02c82d
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-geode-2.11.2.tar.bz2]
-md5=4c652ecba772f705296b8e52d746857c
-sha256=2d252847a410636b55bf80900d9432ca438775f70377ce81311282a2d12853b5
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-geode-2.11.4.1.tar.bz2]
-md5=05f85d897ef41d13de354ac0252bf923
-sha256=d739f6762fe3aa7ef7ca74f87fbe4d6ec3bb13a735e5dfb82b6748eda2b31138
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-geode-2.8.0.tar.bz2]
-md5=a2b9c70a32b0a6436d837d67fa7aae18
-sha256=f0b68171dd4256c927fbee91ecf84fa28c409b5b6b39cbf47eaa48fd73db305f
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-glide-1.0.1.tar.bz2]
-md5=a825152b086564c1011bac9e48413189
-sha256=2b636894ecd8fc3472e05e548f0390ea802f5d9db7906ac302ec8cbd1e5f64b3
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-glint-1.1.1.tar.bz2]
-md5=2cf49f701024a145bd25aff9da11d479
-sha256=d63e0dd3f5cecebaf1915193a68ac83e90c1e973e3276a71bd14651d67115e6d
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-glint-1.2.0.tar.bz2]
-md5=1f5271ac01d4475efe73ab6f2c3646f4
-sha256=a0edd1109c03efdb0f6defc18745f89fb3c11142381e2657f94d492ddd1e7419
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-glint-1.2.1.tar.bz2]
-md5=6d7afdac0a26cf201c3f3b417c31c5e1
-sha256=161780d2127d0548a2017ca461ce38e7a69afce5d921a08604e91478c6be1cda
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-glint-1.2.4.tar.bz2]
-md5=960df34e129faa411e58c0d6b56d79a3
-sha256=5f8d6e3b02c261d235bae63d95510b940b6c9a775301146b3c229926ed99d76f
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-glint-X11R7.0-1.0.1.3.tar.bz2]
-md5=f14c2f1696c05760207adcaac856e5e5
-sha256=d5b4cb7b490edc3be57c40a00299002b60b8060396b3c902b2bf92090fcbd940
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-glint-X11R7.1-1.1.1.tar.bz2]
-md5=99073dcfdfa24df68879c7b01324e91a
-sha256=21b70d71593f123c470dae2b4e75bac7478fffa50503c85b02e8f2c1945417d2
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-i128-1.1.0.5.tar.bz2]
-md5=6e0d3e09fc99d6f0a0e969613ddf58cc
-sha256=a99d2b04b829faa7542545380317c8f59f54ecbd5e0a7008580f3155742d0381
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-i128-1.1.0.6.tar.bz2]
-md5=c483efc90b1935025b17e4b9e9c2e4df
-sha256=b52183f5a7d0adee1d21b4b0a0908886b7bbc69dc4498f1e7a3edc4b1988c41c
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-i128-1.2.1.tar.bz2]
-md5=d0080732eaa15059b0a953aa3522185a
-sha256=0d023cacf8134241cd8efcd5744eb156399406c92f59d3895392f2b5fd055eb1
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-i128-1.3.0.tar.bz2]
-md5=aff4922d2f02bad7e0d8649358edbcee
-sha256=62eadebd3417ffb3857f10f16597c59541ceb135ddbc30b2140f46d9eb7dddd7
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-i128-1.3.1.tar.bz2]
-md5=3b170a6df5114420cd4021a057918a09
-sha256=49bb23625654ebcd74d0d23f534b074188f4b21c3cd443b06ac83b9485bf9a75
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-i128-1.3.3.tar.bz2]
-md5=a597e8efeec6ab8bc6ba6d87fceb2dba
-sha256=4d0691ce8e3b54075d05cc34717350be42915174b3930b2c9b7f5e309b32b02e
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-i128-X11R7.0-1.1.0.5.tar.bz2]
-md5=078eed8c3673488ee618dfc7a3ef101b
-sha256=543d7b8bc0c9e7889c686a647f98641f0a9b052e58321a8a17518d680e6db95a
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-i128-X11R7.1-1.1.0.5.tar.bz2]
-md5=9252e33d14c8869d995bf67e445ffb4e
-sha256=4973e6bd62eb307131e179ba313cfa6e79d15184eef5324bba985e2f781bb3d4
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-i740-1.1.0.tar.bz2]
-md5=57302e225060a7286ae1a970c87a589b
-sha256=b8f2144c987d8a14f8b477ee3aa43fc1c76d040a77e40938c3c97c8e34e2b7c5
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-i740-1.2.0.tar.bz2]
-md5=d0e5a805c546b29b1dd3b55a68d16dc4
-sha256=59c8f6ee465bef033c1c20bfff8121a318efda9656d5dc29f674bb655f18486f
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-i740-1.3.2.tar.bz2]
-md5=4ac1318788f62159965f15131c869e7a
-sha256=48549c6a3d8c0a0d417fc486e77f3f7c6815df7e8ede04bb4c539666be2bf943
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-i740-X11R7.0-1.0.0.5.tar.bz2]
-md5=625448b13ebe2a13b7defad1efec05c4
-sha256=b0f2f2dd17bd01018fa91d042214b596f9d2303a81a0b86de102400b00f87d09
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-i740-X11R7.1-1.1.0.tar.bz2]
-md5=d20c7155266f67c588ecb5c4ada446d2
-sha256=51c5c1503c884459d8d4f699aa095d163c2de8c8c4d434f4309916efda4c89f6
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-i810-1.6.5.tar.bz2]
-md5=fc1e0da3430551bf25a7babf7ccfd3bf
-sha256=30d0cd555d8b8b5bb53d93eaae1ad2aecb5c94a760e2346d60b6e194c254e40f
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-i810-1.7.4.tar.bz2]
-md5=744a6ee1ebfe1c74e3b170b8d7ef8395
-sha256=ff8cd89c9ba39ce68dd6ac4dcb222280835d007a20b419819749298e8ec74259
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-i810-X11R7.0-1.4.1.3.tar.bz2]
-md5=fe6bec726fc1657b537508bbe8c2005b
-sha256=1d9227ba301152738c6b498ec512ddfa67ce7c09e40b883fdbf43cd31e85b523
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-i810-X11R7.1-1.6.0.tar.bz2]
-md5=fe6cc3eab247c7f0a1d152de0ee0fc80
-sha256=debd142a815e5e2611433f1af97d467e50361ad5b3baa0b54fb4b61b0280ef83
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-impact-0.2.0.tar.bz2]
-md5=07c9557f6529a88845b01924313e5763
-sha256=1528a123b41bf42506eb8e37c3506086395f062cca71f64cbc67929ff1010022
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-imstt-1.1.0.tar.bz2]
-md5=94853ca217238ed1f568a10cbeebe057
-sha256=9238c2257f9437dd7ab37c049d7f20c010e2f5ff833a37d2d6243f223f10fb7d
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-imstt-X11R7.0-1.0.0.5.tar.bz2]
-md5=cc949688918b78f830d78a9613e6896b
-sha256=738463dbf1980b9d0f95936a2d951dc51bd776c7949215c2456580948660669e
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-imstt-X11R7.1-1.1.0.tar.bz2]
-md5=4d76953e97ee760efb7627e7ac721dbf
-sha256=ea2b875a8bb8ab9d987192dbcb4fb595e511b382d06260baf23a936f7e61fa14
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-intel-2.10.0.tar.bz2]
-md5=78309d4f04dd8ae6585d120377042741
-sha256=e46dd691dc93db7cd6f5f22b84fea7e9f4bfd34f28026cfd680993b3ccfc48ab
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-intel-2.2.1.tar.bz2]
-md5=3334dc5142871b78fc609fd1b3dac3f2
-sha256=d976c5f5e9c84f3817aba6ad22855446f1c2b9bfa0d53bd11c37c62cfdefa60a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-intel-2.4.2.tar.bz2]
-md5=5cd6b3ed57c7e78ab51e9d9266e73fb6
-sha256=5afdc91e93ffed09ea5258c6fde210c729ea2b44d83f98acfd92c3da7e99e64b
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-intel-2.6.3.tar.bz2]
-md5=440c014bbd3072b5d379fe1bdb861918
-sha256=b35a142aeba034ad06b8d9b477c243f82ce9f82ad65a0ee4408630f228e90258
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-intel-2.9.1.tar.bz2]
-md5=8951d0366c16991badb7f9050556f4f3
-sha256=95347c88854c2b41c07ab3bcdfadd1b8d27fb181a20520f185892877eb8d9d76
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-mach64-6.8.0.tar.bz2]
-md5=6081b8fa50c689d51f85c2fbaf93867e
-sha256=fba616f88d351759e00a90965e38a0d82608698ae36fc2a18df4036cd384e1a1
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-mach64-6.8.2.tar.bz2]
-md5=6c0522b2b72a0a47c48d718443616651
-sha256=b91194033023a41793a525a631789df1d229b228af0d44dcbe20b06ed66c671d
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-mga-1.4.1.tar.bz2]
-md5=ba373233a7d13084d14046a17b02e248
-sha256=5becb5f0caf0f99296db28b32be46eb95d0a88ac8e4829c47cb637fb52d06564
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-mga-1.4.11.tar.bz2]
-md5=9d1ca965cedb0856296b47442f3c739d
-sha256=c91922316f486f74d41ddbda92ff94a7917cea151ad802cf25603ab6b90f97e6
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-mga-1.4.9.tar.bz2]
-md5=11066b84b949cd04300ec819c9c51532
-sha256=d57dd2323052f064092167a232fb7576f46e5d62e98bc9cc6a7f270cc8d0fdc0
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-mga-1.9.100.tar.bz2]
-md5=3e80cfb84b62866d2f94774ecbf3e46c
-sha256=e8efee8d5269eb29f9bd499db3d47a6a4d3c320d4b0a24874cdf7b598ad77a5c
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-mga-1.9.99.tar.bz2]
-md5=29785ff1de2b0f7b7f1c48350449447c
-sha256=82a91e523d40625c9e042ee640276756d1169cca7eb305c691a3378805c4c81c
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-mga-X11R7.0-1.2.1.3.tar.bz2]
-md5=cb0409782020b5cc7edc273624ffdd17
-sha256=8f4ef9e7a82aa1f4624b2d87da8ff0472e3f5c2ccdc7998f4418c6906cadc915
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-mga-X11R7.1-1.4.1.tar.bz2]
-md5=b42cab6a2742bf90a205a991c281f4e2
-sha256=d7e9fe8b79229cb76a2749eb9658dfa96ea580420de05170e5a7b402062a9592
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-neomagic-1.1.1.tar.bz2]
-md5=7a3d3d6e60b9686d955c45d9ebbd5c1b
-sha256=d6497080967b8285b663fedd7cafd4457578282ebd7da0b216b6fa214dd88a86
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-neomagic-1.2.1.tar.bz2]
-md5=a72f57fca4f4dff9a2c82eb1fe7456f4
-sha256=96e38d5378596174f76c735c4723ff2ac336f9069644502a9b706586b845e0a5
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-neomagic-1.2.4.tar.bz2]
-md5=2d722ee9b9fe8da49109f280689c9c25
-sha256=434da2986d007243f4590a86d16a1632a9611b71de44d6e46f28bd3cdb898353
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-neomagic-X11R7.0-1.0.0.5.tar.bz2]
-md5=ffe9015678a41e97bdbd2825066bb47b
-sha256=cfaa594be277cd2a1bf9d796bb398e07319e9b34cff306b408145a37925dc97f
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-neomagic-X11R7.1-1.1.1.tar.bz2]
-md5=7a0830940a0a8e99db1b5c1536b5d212
-sha256=2f3ba4a6775c66de2b269179a219bf1fcfee85c74db273c85784d80209e1ce81
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-newport-0.2.1.tar.bz2]
-md5=2bd8e5b9ea68e0dcd80dfcaca0eff82c
-sha256=66ac855452690ef896400577806dc1dd86318940f8a62ce20039037318b1ce08
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-newport-0.2.3.tar.bz2]
-md5=923baa1ee0429f03ed19ec0be6a4f62b
-sha256=e6caeb4f95adfd9d2046d24f5f3688092ea4e3fb63aa3d0675f6c697c8cf0270
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-newport-X11R7.0-0.1.4.1.tar.bz2]
-md5=d74d9896d57c3caf224ba3472630d874
-sha256=88d4b58efd0dca626e926ce6dc531026c8a10e7126f2e6544e31a2fc00001c67
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-newport-X11R7.1-0.2.0.tar.bz2]
-md5=6fa1d4b5f009999284374df1aba92b10
-sha256=7a17d709206ef881d1331c55c507f3d74f8d111060b6beae4152c92ee4b45dc5
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nsc-2.8.2.tar.bz2]
-md5=1fbdd5e9b5508b032c0102f72d1e555c
-sha256=060493a9dcad81e8912381d2a8d14a3e32a34414296a089756868f3442103c8c
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nsc-2.8.3.tar.bz2]
-md5=f3ffacdc9f19e00b66bdff71b6df9b4e
-sha256=e5c5a2021877b8975bee39c06096316324e04f1eac5261bc882b96353a8b1839
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-nsc-X11R7.0-2.7.6.5.tar.bz2]
-md5=ab16611b3ec7d21503b16b0a31addae0
-sha256=1f88d5c79cfa34230ed8a9079e6b7df194fce219909b6f7cc232c6511000839a
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-nsc-X11R7.1-2.8.1.tar.bz2]
-md5=47a9691971e267073f99dbacf27f0ffc
-sha256=41350b8e67713fd9dcb2662e2a481e19b7de5a9d5e6dd7a346ba6662d908209b
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nv-1.2.2.1.tar.bz2]
-md5=e4dc415b1e45db0bbdacc203ed33024a
-sha256=97d47df7720d3cfcb56c4debca9218c3fc5352d34d82bc4880c8a620185f8c5e
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nv-2.1.12.tar.bz2]
-md5=42f12a36d7afc26c817e8e8f5c8b7274
-sha256=f56d2bb42f6c4369dd3c6adc30988c53a229650f910b0db1bb3bf9376054011e
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nv-2.1.15.tar.bz2]
-md5=1b22188bd9012a148206940708b52ea6
-sha256=c18ce0410437ced9c171d2d6328a8406b79b6edacf55b9526594b446ee5a3641
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nv-2.1.16.tar.bz2]
-md5=fb02d5506e35054348d1c2b2c924530d
-sha256=4bf2f964b78d309769faa6a5d21c90a9907886623adf1f30ea890b4329bf578d
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nv-2.1.3.tar.bz2]
-md5=f9b38e24157c3aac6014119ac18d76da
-sha256=8d9b5ea137c31919f7821e7f3ecbd133158813c1059f4a8ed0a723535d969952
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nv-2.1.7.tar.bz2]
-md5=192414222f1a98e228832ee53f8178c0
-sha256=7c9135d80b519246b2a85ff0481d6ee0fddeb578d669ff490f236f85873e8c5a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nv-2.1.8.tar.bz2]
-md5=c3e8c98287dc98677bebfbe1ba51ab77
-sha256=825ffb97525517de9f0ff7155946c6e58c278dba11957573cc970dd3b094f94a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nv-2.1.9.tar.bz2]
-md5=c6b7e52fa18455c22eb040b8d2575ce5
-sha256=20d92ff3ab4b9ecc150f4ed17a7012a48f56dbf3fb51b51dde769b28922976d9
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-nv-X11R7.0-1.0.1.5.tar.bz2]
-md5=9a88547fe550e20edcc5a938d31e22b1
-sha256=0ce5ad1affc488f317fd297893a469ed20f451b8bd8b12bb36450ecc8c56e5d0
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-nv-X11R7.1-1.1.1.tar.bz2]
-md5=b5c7144231652242ef8436ec8898138c
-sha256=8fd91ce003998739677556bf13146e9a3560970ea5342bad5c44c11fc49410cb
-
-[http://www.openchrome.org/releases/xf86-video-openchrome-0.2.902.tar.gz]
-md5=6e3ea28e0b0baf3dc1230da4e1a850ea
-sha256=f645da4120b3ad5356b46269ae13ef8e2315bbb443a8c147e05c611f7fa21df7
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-openchrome-0.2.903.tar.bz2]
-md5=c0820787e89958c9114d359b6a3cd464
-sha256=b7e4858d6b5c6428fae2485a2c2097cdf6073268ef812aae2ccbc3d936db7410
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-openchrome-0.2.904.tar.bz2]
-md5=f2481d98ef54febf5bffbb88a2a2426d
-sha256=c7bdf7c48365b1d077a4be7ccc652cf3f7a0f385fddeb2d4fe71b00b6c6b7aea
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-r128-6.8.0.tar.bz2]
-md5=007bec0c6b07d9d3aeca4da18e561efb
-sha256=5689ca714fee9c9272bee12883b07a0ef2c40358ffb19fa684e963027b56567b
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-r128-6.8.1.tar.bz2]
-md5=2b90854a62a4d45d652062f582dc8d13
-sha256=517e21cc83850b903549d698c9daeb633e8b9ba5b187fe298409cc51975a9eca
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-radeonhd-1.2.0.tar.bz2]
-md5=6a932ec17da9ce5a6d9000c1649c3a7e
-sha256=87c6353dd52bbe22d3a45f28fb39de1dd44f41568aaf8a9b0d45a7ed62313e27
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-radeonhd-1.3.0.tar.bz2]
-md5=7b6641aa9d836f1621b9b220ad6771b8
-sha256=5adad675e60e973f2e3522a01457d9214157fbb5005090fe48092e6e5e698ad5
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-rendition-4.1.3.tar.bz2]
-md5=a8b97feccb32184820d5856fe78d34db
-sha256=37e7aef72f7466485f5a3bafd0d43190cb7439de16868bfba2c59bb4c9df4408
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-rendition-4.2.0.tar.bz2]
-md5=7c03de3804d4c4f6ff59f74050d24b2b
-sha256=b57b62f707d87534a799170e31b33311449cfd7019a56e6b4fa85a4c7faaae15
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-rendition-4.2.3.tar.bz2]
-md5=9a0a916fe1e7b5c81cd4c80a08e646cc
-sha256=9d5559fd3029feee5af2493ab8f558c58c426fc89776a1109dab97e3a4764d94
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-rendition-X11R7.0-4.0.1.3.tar.bz2]
-md5=f1a25db74a148dea45115e813027b932
-sha256=4ad42c65f60bc7f3f37f636eae5ae5a9049cdd4df5c546f93f201fdf16213f48
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-rendition-X11R7.1-4.1.0.tar.bz2]
-md5=6db91a9a10042424830c094ca870fe65
-sha256=053a60acae48000dfd03b4518fe10c6901240a8858dbfa49e0506557075a3c79
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-s3-0.5.0.tar.bz2]
-md5=d95ab6445cab477f39adfbbc81006f67
-sha256=4a1206cb1a200aad8881216547d9913d0e24928138f3b1bb912a3336b9c05c97
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-s3-0.6.0.tar.bz2]
-md5=d05e7c3cb044437eda8663e174ba913c
-sha256=ed07e4648b0f405fddd563783b49f971d649dd07cc8bc7737a93ff3d90f6c067
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-s3-0.6.3.tar.bz2]
-md5=5eb06d88533fb327d067928faeb20860
-sha256=ed9f65aa6eb1811d8c16cddfce00c5fc5880d6d46b907a83ef77700610085144
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-s3-X11R7.0-0.3.5.5.tar.bz2]
-md5=83b9e8a9b8fc1c49bda2811358e5007c
-sha256=3e11f78c39eb03fe4b9e6a2b68347420297fa38cd36f42235ee4be9c87175103
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-s3-X11R7.1-0.4.1.tar.bz2]
-md5=3083c03884d44468e395d26a8d990c53
-sha256=b9b9abdd80c00782ca2e1313016c3d3904dc10a1de1c94d29cd4efafeb1f52f3
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-s3virge-1.10.1.tar.bz2]
-md5=4a293047e988d4ea1e9e96d3b5793f43
-sha256=9094115621ef73c957cf887332717ec727c751959b1059e3d00fbfe0114a978a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-s3virge-1.10.4.tar.bz2]
-md5=6517bbbf808c700502d51acdc44662f8
-sha256=1cd00d6e71fdbd70dafe3beb8911d22cbdc5ef7b32d2d81c454ac8a18c967fb8
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-s3virge-1.9.1.tar.bz2]
-md5=a91c73285ef67ee7cd9e2da28acb6cc4
-sha256=cef5702963f49e737fb8b1472dc0241f7a5da49f844ac77f2df3e693a84bc822
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-s3virge-X11R7.0-1.8.6.5.tar.bz2]
-md5=d0164c37749ab5f565db9813487e1900
-sha256=064293e33256c5baa8932b42f181ec0d2fc7c0ef5b72e655aefa72d58e2b91ff
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-s3virge-X11R7.1-1.9.1.tar.bz2]
-md5=a7c74570041b2dc9346bfdd6d2a1c582
-sha256=075fba99f38b900416858a39c7cd62f0f3f583ee48cb52d546b12e916fa13c32
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-savage-2.1.2.tar.bz2]
-md5=6367e921a98f6a7fec9d0a9bc5ff0a47
-sha256=1a9aa442152c139e3c54bc6c323bd13edf0bfff70a81c03969bcb1159317edb2
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-savage-2.1.3.tar.bz2]
-md5=9c5e541613b07de6e7b2b2df3a2e35b1
-sha256=f5f154df377cb445935d1453d6b7095d63912d5776dcb44f8d3c2f10ab1a3cc5
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-savage-2.2.1.tar.bz2]
-md5=62b8aba48b54eaefeae87df502bf219c
-sha256=adf95cae0fbaf72326c51c4c9e61486eef062bb1706f6ab46d942f2c36d8a37e
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-savage-2.3.1.tar.bz2]
-md5=66c319f610e3699c3de0f3ef630abb32
-sha256=2b4adcdd820a6f3acba6f3c0995f5899edc8f5e33fb4c4666c4c7a78090ddaab
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-savage-X11R7.0-2.0.2.3.tar.bz2]
-md5=6b638dd500d10dba1822d3ea5061fc65
-sha256=e4ee3af5989cc9b0c8ff59082f64a564420dc22a2eb9fd53e41da24260a65e98
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-savage-X11R7.1-2.1.1.tar.bz2]
-md5=7df6bc61424a566325e48e5eb89a21e2
-sha256=efc0b44d7146c0d0f966dd1f0bdf6098e086fec7a33f5b480f99fa17e2bc7cc4
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-siliconmotion-1.5.1.tar.bz2]
-md5=ee35d7714ce44a2b5ac7ad7b7b7dd75a
-sha256=54cf791695a53d4836d32f899b7d34b969edf5415f02e36956b6e72993e21cd7
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-siliconmotion-1.6.0.tar.bz2]
-md5=a8419a8ed17b02b2a6dd4d30d5e94b00
-sha256=cc5301b9c6adb9a0770509b8570d38730d43e9ffce6d6886cd9a090965017e53
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-siliconmotion-1.7.3.tar.bz2]
-md5=29fb322cd3adab52cc7f1ac86f9315bb
-sha256=ebda468be42695c08ceaa4043da3cf5bcd5f9ab15d1482311fd6e826a8060b2b
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-siliconmotion-X11R7.0-1.3.1.5.tar.bz2]
-md5=957de4e2a3c687dbb2e9e18582397804
-sha256=6723b5b7e9ea5b3aebcbbaeaca59790e6a9ab6a7d5324c671454e426854aef3f
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-siliconmotion-X11R7.1-1.4.1.tar.bz2]
-md5=559b7eeeb598b38afeb1542db6b48a0a
-sha256=eab737423bfd3ecf38ee4a8d4bed86c363bb023ece283a7d515afaa1a11a394a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sis-0.10.0.tar.bz2]
-md5=331d432dccccca91ec7da39ff6bf1218
-sha256=bcc0dcde5d469cc2500676e0ad29dcd12b1370066289902387ead762260e4b40
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sis-0.10.1.tar.bz2]
-md5=9f57c2f5ccbd8340db32da1c74083771
-sha256=11529f094cbdcdaba505596488eda623e0f0bd3c51139359d587ea58b6527307
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sis-0.10.2.tar.bz2]
-md5=f04baa307e49e9f0e5a5c3d2e89a5576
-sha256=3aad701799e355669b9027a9baedd623fe6b7ce93da9ac22b6902fd7e38128c2
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sis-0.9.3.tar.bz2]
-md5=e35d817fa4ee7beb6cd5aa744b9c0783
-sha256=898ee8fb16fff89ba8ac5c83b9f5a2371084719db0cf034140427229191436f6
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sis-0.9.4.tar.bz2]
-md5=43f12cabf770b06170cdd1cdaafdc50f
-sha256=50856446841526fc393af6bae0fbc39c20bb07e60056a676d0bc620446b593ac
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-sis-X11R7.0-0.8.1.3.tar.bz2]
-md5=e3bac5a208b8bacfbec236b5a5b0ef40
-sha256=c578fec74f7028ee28a46a62ab2b22fdcbd6de8cefa7a185e73c68b1d8a12e8b
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-sis-X11R7.1-0.9.1.tar.bz2]
-md5=f3ed22290e677381dd6236ef3bbfc7ac
-sha256=6c4c821941c571b39c950acd57ed4a646a6474070a68a0caa09eb7c3b2715e03
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sisusb-0.8.1.tar.bz2]
-md5=cbd669507e4aa35e468905f09b546333
-sha256=1596b79ab3e33263bde2d456cc0376808abee80b4cde059605f176d98bdb45cb
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sisusb-0.9.0.tar.bz2]
-md5=7b1f5465f423a859f306f4f1d6306a1b
-sha256=76b79c9b7d3b35b8e2e5354569bf0936c4afd39a9dcbdf66327714d75137930a
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sisusb-0.9.1.tar.bz2]
-md5=42069e70578bf3fb353cdacad186f6c0
-sha256=b3ca934ce3e31f4a162bf263cad3913edccc46906d09132118b74a2095c157d9
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sisusb-0.9.3.tar.bz2]
-md5=be59e9c2d9458cee0b5006549c14a95d
-sha256=1df9a90ecc31d5fb63de7c970555f166dab24c0f633b54aaac4ee82fa7b49bb2
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-sisusb-X11R7.0-0.7.1.3.tar.bz2]
-md5=781d726a0ca54b65521e383ab99043c8
-sha256=6f972b126774d3d051b2f683e82661c07a1b4787b8ce04847eae80b283c5feb3
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-sisusb-X11R7.1-0.8.1.tar.bz2]
-md5=11d580e2cc795b902b6f1a326962190b
-sha256=bfdde9894930ffddb93343647a377a1456a830687d3de6fba2010ffe31c7b04d
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sunbw2-1.1.0.tar.bz2]
-md5=559c95f044a31cfe7f71453e9b89c35b
-sha256=d71074e941ad8f71ac476651c2ca4142a5c2243e8fecdf216bc0ffbf18338136
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-sunbw2-X11R7.0-1.0.0.5.tar.bz2]
-md5=0cdda1ab939ea1190c142aa8aabfaf83
-sha256=13ab882849164dd677228523b91081fa7bda6955daae128f0b8754759e2f7278
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-sunbw2-X11R7.1-1.1.0.tar.bz2]
-md5=cae0b4709a2cc489182392094fe0bba3
-sha256=aa656c99ff6ba9c1013b6060c92bbcda2c30ceff72ecc49139c65eb935844f43
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-suncg14-1.1.0.tar.bz2]
-md5=9e25784e912cb2f0493b87431fd60773
-sha256=1eca2b0970e725db49f9e462a0c2e618b2616389647335b5aec9d6e495e40527
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-suncg14-1.1.1.tar.bz2]
-md5=8e4bd0a6b155cb861356e7430d667aee
-sha256=cb43007920394b000be98ea0eac16a1cc16b4ca7ea8532b5d803a0c7574720d8
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-suncg14-X11R7.0-1.0.0.5.tar.bz2]
-md5=8f3a734d02ae716415f9c6344fa661bd
-sha256=809a8d57a49c07991d350d4bff955656256afa2c99978050d2aa320d071ef52d
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-suncg14-X11R7.1-1.1.0.tar.bz2]
-md5=3d95d9bf985bcf13c0d040a5136334a1
-sha256=f9a1ee987c554607c6fed4ae27adbf75c825d628fe522802a717429a85327487
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-suncg3-1.1.0.tar.bz2]
-md5=b9cb8cfb6a4234bebc434f744af53208
-sha256=3564ebc8ccdfea872d46559166d881e93ac7c17e3ed46bb4087960f491c37df9
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-suncg3-1.1.1.tar.bz2]
-md5=bb6c4def5cfb0959b72dccb661473d4a
-sha256=d56fe98c34f2af1b6424e3fcaa22a31402a4b59d63679f0e5fdfb1d2ea878419
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-suncg3-X11R7.0-1.0.0.5.tar.bz2]
-md5=799a54cef1f4435e00fa94a1d97d056f
-sha256=31831c2f44e7d28c928d816c2c5074cc0ec1f0cc83994bf28e46c7f840ab8866
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-suncg3-X11R7.1-1.1.0.tar.bz2]
-md5=b719d82950a39e33903882c7b878415e
-sha256=9be5402d4f8f32154c01065f7b01a99e61c2deff959715eb8656259c63195adb
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-suncg6-1.1.0.tar.bz2]
-md5=aa6b7836fe6ccc99994bf15ff2b74e86
-sha256=d6b1f3b79c57ef5281e0204b2847812cf9fa5df616478f01591445a36537194b
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-suncg6-1.1.1.tar.bz2]
-md5=bc9904a9129aaf73408568ae1e2fa65f
-sha256=d1216c7c2be78d1dafad0cd46e464e9fa08f5e04544b76d9a0c547374c85801f
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-suncg6-X11R7.0-1.0.0.5.tar.bz2]
-md5=2227f3fb86b02148f347e002662e53c8
-sha256=f6ddac6bc0b0a446ff9401467e4219340151498824d98c9274ed38a959330aea
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-suncg6-X11R7.1-1.1.0.tar.bz2]
-md5=de3773fe837b633cd7841546358a90b0
-sha256=5b5e22e501b0cf03704fe4737abc49c6c2a2f08a1af28067634f4b69c838e621
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sunffb-1.1.0.tar.bz2]
-md5=dee23564c0d8069f52c7cd29c78be667
-sha256=f897a427e83cf6965fd82724e3298aea44eb3131ba62f904cb514dfd0a879029
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sunffb-1.2.0.tar.bz2]
-md5=816842de26bce8a935f3c9c3cfedbc42
-sha256=59f2f8fc2399a4d6b0ce733481c58694e723a989f4712c00436d35e27c059292
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sunffb-1.2.1.tar.bz2]
-md5=1bb374fe5ab3ed780d353b2b12ba6255
-sha256=fd377af6e366e8e3a77c8ff825a009138c8343c0007bbf070ad605a649577e11
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-sunffb-X11R7.0-1.0.1.3.tar.bz2]
-md5=bb5182e3b74b3baa6fee245ac8bbf09a
-sha256=318bd61c8da6e938d5c707a0c70ba3ada1c053ff3172a918f821a1a015b7b6ce
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-sunffb-X11R7.1-1.1.0.tar.bz2]
-md5=5bcb5b90c679a046d604d4f98d804d0d
-sha256=38406fc4e7aa1367587517b4a872fe88dd0be9751aa057b84dc62a7238ccffcc
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sunleo-1.1.0.tar.bz2]
-md5=0408d95795d754c92d12d6476b6932a1
-sha256=b504d50f261bea9bc9dcd2a9c9c3307b24dee97c18d13b5a6deb3eb393270da9
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sunleo-1.2.0.tar.bz2]
-md5=14fe008620940a674981912fa02ae133
-sha256=b315be97197020ae352efe48e9bcd13a572c3a03b2a4d598e89157a897746e06
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-sunleo-X11R7.0-1.0.0.5.tar.bz2]
-md5=deb17a74ba68ee9593ac774206bd3612
-sha256=025e3636fb59dae9285dab63de9181fc8337d1d8438b7ee8f93095d6731deb0f
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-sunleo-X11R7.1-1.1.0.tar.bz2]
-md5=821ddc77ada3cd3efb0a2a7bc70bf825
-sha256=6c7339466d5b3cfc3c6ea3ca4ec4bad2f16666f1c472efc4f3048c1f711c67d4
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-suntcx-1.1.0.tar.bz2]
-md5=779a31151e44d2fd2a5ee1794f836889
-sha256=72986a3981b746f60df1aba443d610db437fe8d5053e64630686f471c47b01cf
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-suntcx-1.1.1.tar.bz2]
-md5=b064a8d2f3d481ec36ef9ac17e13a77d
-sha256=543115c4b3a8603dcc9d7a3030c9e7ce20baf6e3976d92ff951cfea80b54981e
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-suntcx-X11R7.0-1.0.0.5.tar.bz2]
-md5=74d6ba5e55afdfebff84db08b6589e26
-sha256=38eb95f2991fab51c3442022bcef258de508ebfa0c631024edbdf55a1c4f24fd
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-suntcx-X11R7.1-1.1.0.tar.bz2]
-md5=fff6932624c93d8e208422913521bb4a
-sha256=275a6082d3d11614dbc737bab505b9dd72bcbfae44af6ccbe115db66bb2ad2f1
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-tdfx-1.3.0.tar.bz2]
-md5=04c49acb5c5dbde14eabd32d06df6e73
-sha256=6b1a00df5c9628817d08f07c6f18f578950744f3eb63b4397be8b0754e728624
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-tdfx-1.4.0.tar.bz2]
-md5=b13132f24683ef759bfb0c1db5096496
-sha256=c3be06d324f2e49ece1f243b10d7180a32fbe65dbbb81e162279c8608800dead
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-tdfx-1.4.3.tar.bz2]
-md5=8161bbf2b100c21b609163f0010766b3
-sha256=3ad935ca0aa306d10d1e6125a6bd485a3948c184dcfda01670961dc4740ebf33
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-tdfx-X11R7.0-1.1.1.3.tar.bz2]
-md5=0201415230bf0454384c3bad099520d2
-sha256=65e95c95bc4fa5fdb766b7edf8f39253cf8496fca66bc4bc06f260ab9e9ce504
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-tdfx-X11R7.1-1.2.1.tar.bz2]
-md5=21500d264bccecde3122835bc39c7793
-sha256=018d27561286d39ea4fea5967f2433c6748da51472bd63db0c74bc32f18417e1
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-tga-1.1.0.tar.bz2]
-md5=9eda4d4490706b2dd8f4ecdbaf779856
-sha256=50143dfdd259fd114dc2f41518a4898d5407bf55422251df75812b96a1fa6e9b
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-tga-1.2.0.tar.bz2]
-md5=f3bddf0a64932ca9bd72041ccd3b5501
-sha256=a92f8cad0e21318be465719a9f30a50d5719b0b70bf8e15f3937e7850cf1aea6
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-tga-1.2.1.tar.bz2]
-md5=bcbceda78395de74544c83b46a7700cd
-sha256=70a4754ef6602cf48d910b9727d015cb3cae946c096ef260b56dfe2f80cdb855
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-tga-X11R7.0-1.0.0.5.tar.bz2]
-md5=fa67bf34454888d38e15708395cfed87
-sha256=96b071b4e12dcfd027402621b897c6d73818aada4d66f77a8802cc46b9efe206
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-tga-X11R7.1-1.1.0.tar.bz2]
-md5=0a9356394373e42b96e9500b51f6c45c
-sha256=250ed70d94070f6f8b14540b6509e6ea25f38616b0e0c443f232cc4028765db7
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-trident-1.2.3.tar.bz2]
-md5=c0e8b2f54942b6902b7dd4f30defe800
-sha256=d23eb8fa165d238ddf64da63dcd60c70a01cd761608a18402cfb95aed6722495
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-trident-1.2.4.tar.bz2]
-md5=7f628f7eb4abdc4c49bb252eefc4335a
-sha256=f942596e7427a089be9c9353c45c22002999580197c9715d9363d19ee170ba8d
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-trident-1.3.0.tar.bz2]
-md5=e89799579d0cf3858362bd751469e0bf
-sha256=a4f66c9f46f6e93c2c1f10e782a211ddc338b0ff9f0a2ccd2d660db031d3ddb5
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-trident-1.3.3.tar.bz2]
-md5=47f3c5da1942017218355f178f02ef84
-sha256=6241eab6f3f0a075380be6b614e33ad72256242c865115bc8b696f83a75d11f5
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-trident-X11R7.0-1.0.1.2.tar.bz2]
-md5=69f28afc7b585d01bb06b1e2f872f8ea
-sha256=b7958afb0204bb1d3c8a33e7a56b94a6d4f09426dbcd141ef327e28f523d42eb
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-trident-X11R7.1-1.2.1.tar.bz2]
-md5=d08a761111bbfef8d60131d0dc46d784
-sha256=69eda434078afe442c228195593108b860f9d297f7bd29c19c57eedeb59304ad
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-tseng-1.1.1.tar.bz2]
-md5=488aa9c3ec7a95e6589afa4b50bec8b4
-sha256=c9c1f3318715b7268068bc733d00bcab93924e97eb38f94548e442fd6cdfd56e
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-tseng-1.2.0.tar.bz2]
-md5=f98fc22142a009dc3a6cdf930c95203f
-sha256=1090d9100934329000ac330d0c66a0ac4f60d2ba83196ea15c2833a28a18b1e3
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-tseng-1.2.3.tar.bz2]
-md5=79f63999c88477801ae54dc486272ad6
-sha256=0556bb3e79da4be87e880f82e2b8504527e760e284680f9463a08f9572507187
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-tseng-X11R7.0-1.0.0.5.tar.bz2]
-md5=981f46914c1e54742418f0444ea2e092
-sha256=5e67a6893375585be731b0fd822e9c3407a0930f7addbc8cf01fffad57f9d0b6
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-tseng-X11R7.1-1.1.0.tar.bz2]
-md5=62d58d822fdd32e67658bb86ab4e4390
-sha256=cd41d3b58a6ce65ebe4313735a2111880b27b910e5c2e09ea91720ad230f9006
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-v4l-0.1.1.tar.bz2]
-md5=69339c38eba2cebc357d67e7a755d734
-sha256=33ad549ea3f6a8da7f58d9964f3f2d83aabc6d64c2ebc2ea0033ac8dacaec870
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-v4l-0.2.0.tar.bz2]
-md5=2251ae2a0a905764941cd7b098e85ad1
-sha256=cbff9120fbad900cbdc7ac535d04984e7b491d69a8eb0b371e30ae07cb61925d
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-v4l-X11R7.0-0.0.1.5.tar.bz2]
-md5=e422c63bc83717ecd0686aef2036802b
-sha256=54094ee8388e4d067e111f64bf765b677536bc11c71d39c05c83ab6ea336e0f8
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-v4l-X11R7.1-0.1.1.tar.bz2]
-md5=fac76ca4a56380f0765d884e1b20a487
-sha256=97b5ada6716fd6a2821224fd952fc064cbe721c7446547136794587a2e393114
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vermilion-1.0.1.tar.bz2]
-md5=0f7c6be1bbdc5eb43d82b356fe0f5104
-sha256=4feb4cd8d239a1b5a944c82b253d106b7f7da083fc4d87a8aeeb822c2e980d8b
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vesa-1.3.0.tar.bz2]
-md5=4a307852f3b4850e436a41dab2a73676
-sha256=b96c80ae81f5123ecef344dac4c734b2e281143d3ab7a7e633d6bf04c893e203
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vesa-2.0.0.tar.bz2]
-md5=433cf6f961eb4a2ab6fcb086def0b2b4
-sha256=f20b2e429657552eea207fb8bc4b47c8e293d99c229dcb4da11b7c5bfdc1e165
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vesa-2.2.0.tar.bz2]
-md5=9a86b683f73f3806f55d05cd804a6f4a
-sha256=8b3e077d2534722033d7b1c647aa7f31fc7fbb5014da096b7a53170005e80226
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vesa-2.2.1.tar.bz2]
-md5=61a1dc9a22991bd04d0ff98f800775c1
-sha256=a3657971232e9c7db3e7517a8aedd86d3ef4d159f7099ec974cdd03aafa41080
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vesa-2.3.0.tar.bz2]
-md5=07fa32958aff9b463dd3af5481ef6626
-sha256=8ed85a0e94523539d81d5ae6639fa22ceb1c1e3baf89128915db65d4d2900d7a
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-vesa-X11R7.0-1.0.1.3.tar.bz2]
-md5=049ada4df1abb5aa2b6633ba90353e78
-sha256=c6601cd278ebc30a0d20b49b6284bc21b4910f8ef5d24d1c62daa1591a251452
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-vesa-X11R7.1-1.2.0.tar.bz2]
-md5=16a20d6bf7ba858d511e96daaf43700c
-sha256=54241149f54d8355c54035a6ddf2af8a51ede1a4b72a404ff43b1bba54e465fb
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vga-4.1.0.tar.bz2]
-md5=b93e5fe9757db779a75cd3ce97b9613d
-sha256=ca25f4c0f706688cbc2dcd03ffaf6a57a17290290257f0cc1b1f1bb261f95b41
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-vga-X11R7.0-4.0.0.5.tar.bz2]
-md5=24437857707acc337cab331cc56f64e2
-sha256=325a11679316f3ccd83e4c0712e45301285bda62ff716df232446211fb19cb34
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-vga-X11R7.1-4.1.0.tar.bz2]
-md5=b08b488f1b98d9152f5416091bc85055
-sha256=f0885fc3f865005c06c11e383aa6924ecdff3bf5f306b2b63e2366201d6974e7
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-via-0.2.2.tar.bz2]
-md5=d5fe25d3cfa0a64cc77681f15f9c3159
-sha256=5026bdaf644178fee66a26190453b0dddb99558b8c97c4a592a482a2434dc862
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-via-X11R7.0-0.1.33.2.tar.bz2]
-md5=4d3268d226a40f580ab105796bfed1f5
-sha256=75b73af76c2b0499180d670da94e3fde8e4c8796b2e17ec7bcb8473074cb4987
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-via-X11R7.1-0.2.1.tar.bz2]
-md5=f3ee13a05c62dd5298bd773dd0e5e951
-sha256=6444f1b61a53b9ea89551d95d32bcf98d4d018d0d3ff9c34626c5c24d1b60507
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vmware-10.14.1.tar.bz2]
-md5=eaf1ce9fa23363799140602afaa10f37
-sha256=1971fd356ba54204c3611edb9144c43c25c21167a5fa5ee725d3f2e3f9864fa9
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vmware-10.15.2.tar.bz2]
-md5=99322cbcc9081ad44e9cba63e3df8f7e
-sha256=edae155c82d348b76dabe1373605bf6715b577cdd7a95f8b54ad534dc47c71ff
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vmware-10.16.1.tar.bz2]
-md5=a5e1f2539b82206e411c3647f10c425f
-sha256=91ed99ae936be5df25d310d81e31e0a7efefc023e462d93a9289ac18ebdf4e89
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vmware-10.16.5.tar.bz2]
-md5=6d78c82ea7c2bb0fcb587d7bb4e8f60a
-sha256=3e4e9abfd806b36076083ef6cacc93b713bfa4ddefe7005edfc15c64f5174366
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vmware-10.16.8.tar.bz2]
-md5=25287a202c986b33bd79fbe379c96a16
-sha256=956443948d94f7459b0056d8cb8ff2cd9fba4621d8b61f0257cb84469ea7da07
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vmware-10.16.9.tar.bz2]
-md5=3b3d38abfa1f8be4b1e26dcd236bc94f
-sha256=835a5e45b54837cbbd963a48bd09db709717e097e931dd76e68e397a167e8bc1
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-vmware-X11R7.0-10.11.1.3.tar.bz2]
-md5=4df79349e26add4c23f6be8bec347ad4
-sha256=79b0bf59d866d3760fa8a55b4a19d56ae7fa6a962d629a9de5c188cec5c98c9a
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-vmware-X11R7.1-10.13.0.tar.bz2]
-md5=ee3c0f3130a68c6833084db5deb441ca
-sha256=a260f9456db466fef3036aff01570f3a12fd275e35bf4c8c4c0ea0f63bf91281
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-voodoo-1.1.1.tar.bz2]
-md5=bc878e795688b49a595b355482d27174
-sha256=3975601baee674b2bad0dfe696586f17cc913f1dc7f1d5c4e184623e0461751c
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-voodoo-1.2.0.tar.bz2]
-md5=7c681d9b57f5e1f798263fc1a9d99245
-sha256=b79ba6d5d4300570c00f8be37c536f47f2d78c18845f70f525da2a29e47c4b8c
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-voodoo-1.2.3.tar.bz2]
-md5=c164effcc839eca1fc1d43a42f4086db
-sha256=025d4d99ab19325b72417fadbb099c757412988f800c9511be3e2c3993ae29e9
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-voodoo-X11R7.0-1.0.0.5.tar.bz2]
-md5=e00cc814ebdb3f3067e075bc93b26199
-sha256=2241fd7e5ae8de43f109f712f5125afa6ec5156068c941d7b65981ac7ce7548a
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-voodoo-X11R7.1-1.1.0.tar.bz2]
-md5=0c96fac2d303dd5981de78e704d3a067
-sha256=35409b42f843ac3b352e344253f3075b2d9c8ae2ac5af02962fd67575427e066
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-wsfb-0.2.1.tar.bz2]
-md5=c159af867a9af3abc4da332189213a76
-sha256=39e358aa17d939f561a28c82b9e7beca202d7ebd7d40d401c88a9dff3d90d148
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-wsfb-0.3.0.tar.bz2]
-md5=d6b5d25dfd61fa5113216d10a6dcbb50
-sha256=78bdb6d397869dbd8560ae1f0ee65473977d19ca5afc9fa7638c35057284989e
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-xgi-1.5.0.tar.bz2]
-md5=08529fd015191be9244f598aa0894aa6
-sha256=5fb23432ee8940c04494744da8b5f58bebc6ef113e96a50a74f0aa7d98a69194
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-xgi-1.5.1.tar.bz2]
-md5=65a8d94d360b51690f8d4b2e7bfa036a
-sha256=cb19f5287f9d345fc4fe15ba7c9344a3be2d8395ebf19a139899d1566d7c9e18
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-xgixp-1.7.99.3.tar.bz2]
-md5=c541152aee693fad743ef7cbf75a7ffc
-sha256=13a1658ee3ead0ab8e8bf7a9c8f8f0e3e40e38138f45d8431e735cd7184fbbd8
-
-[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-xgixp-1.7.99.4.tar.bz2]
-md5=0e7d0df07528c57304900da3acafc1a2
-sha256=ee0a178c89ff10d679e6f174d2a2e5cc7b89c7c7d5c115d48e9c75942f487395
-
[http://xorg.freedesktop.org/releases/individual/proto/xf86bigfontproto-1.1.2.tar.bz2]
md5=a318c1e86123832d7b0c95fc7d47ef35
sha256=01b475b5b27709a738db6f94ce2ded37f5db0792e8d9318069ecf1690a15f124
@@ -30782,7 +28922,11 @@ sha256=b308ddc96fcb27b3f18ed2fa20aeb3a12fb73cec7676d75914a58d1b27124b83
md5=88352816c84cbea57121b0c478976976
sha256=1d8ab1354c73935a5d12f0d7d226d26ae1b90fdd235460bdb57fd5651229bc8b
-[http://www.us.xfce.org/archive/xfce/4.4.2/src/xfce4-session-4.4.2.tar.bz2]
+[http://archive.xfce.org/src/apps/xfce4-power-manager/0.8/xfce4-power-manager-0.8.4.2.tar.bz2]
+md5=3131257750766838a64a9bb7f74eb2a1
+sha256=16cc04bf613ecfbc9ea43514ccb5f7d7923b7fc4ebf8117c0ce32fa1422334e1
+
+[http://www.us.xfce.org/archive/xfce-4.4.2/src/xfce4-session-4.4.2.tar.bz2]
md5=4c3d1acb8ce37ea4dd55d82aeb38e9e7
sha256=7394906dec7b50789407219f85143ae83b10938949d38adeecdd59eb50c8c1c6
@@ -31454,22 +29598,6 @@ sha256=0616d2c8d7aa990787f6c27e412c65b3f5e1b9a42b12562700bc2da953def4c1
md5=e5ae82568d7b1faeb950140c34fbbcb1
sha256=d648fd1f7b7437123afa63df06f6a6409a0487c99ca8f8beba75aaa474d65818
-[http://xorg.freedesktop.org/releases/individual/util/xorg-cf-files-1.0.2.tar.gz]
-md5=f96f44b87132afd2fff677a8c89166dd
-sha256=4edcaf61ad8b4bef65169af2b98d3992be07260f90cca65128dc523d6935bdd8
-
-[http://xorg.freedesktop.org/releases/individual/util/xorg-cf-files-1.0.3.tar.gz]
-md5=bca2403beb209952d66dc57be5a2f789
-sha256=9a5e3533a4156a0e308ced437bde722cb291becc2276bdd0952e30b3b5060e92
-
-[http://xorg.freedesktop.org/releases/X11R7.0/src/util/xorg-cf-files-X11R7.0-1.0.1.tar.bz2]
-md5=f2dd453c37386293fb207431b4a073dd
-sha256=019ba3dbfe2f23e5847cc839a26c630cea20fe8d62df4775a21087176908b9d7
-
-[http://xorg.freedesktop.org/releases/X11R7.1/src/util/xorg-cf-files-X11R7.1-1.0.2.tar.bz2]
-md5=073c1b4f0029249a05800900abd13077
-sha256=6044df7ff07d38c4ce1020453f259f4caa16272aca7d835204852e416dfa2605
-
[http://xorg.freedesktop.org/releases/individual/doc/xorg-docs-1.0.1.tar.bz2]
md5=78fd95f6d5ea69d91723dcc16280c664
sha256=b7b8593b055e29dedc0631e1db9781583038afc67bce0f715fdf3201570d1e4e
diff --git a/conf/collections.inc b/conf/collections.inc
index 831ca935e6..0572568f06 100644
--- a/conf/collections.inc
+++ b/conf/collections.inc
@@ -10,7 +10,7 @@
# supported format will be unpacked into COLLECTIONS_UNPACKDIR and used from
# there.
-COLLECTIONS = "${@' '.join(d.getVar('BBPATH', 1).split(':'))}"
+COLLECTIONS ?= "${@' '.join(d.getVar('BBPATH', 1).split(':'))}"
COLLECTIONS_UNPACKDIR = "${TMPDIR}/collections"
COLLECTIONINFO = "${@get_collection(d.getVar('FILE', 1), d)}"
@@ -166,7 +166,9 @@ def collections_setup(d):
import sys
bb.debug(1, "Re-executing bitbake with BBPATH of %s" % d.getVar("BBPATH", 0))
os.environ["BBPATH"] = d.getVar("BBPATH", 0)
- os.environ["PYTHONPATH"] = ":".join(sys.path)
+ # FIXME: This exports a bogus PYTHONPATH to OE recipes resulting in massive breakages:
+ # http://thread.gmane.org/gmane.comp.handhelds.openembedded/30163
+ # os.environ["PYTHONPATH"] = ":".join(sys.path)
sys.argv.insert(0, sys.executable)
os.execvpe(sys.executable, sys.argv, os.environ)
diff --git a/conf/compatibility-providers.conf b/conf/compatibility-providers.conf
index 0d8e9bcaf7..7823f6694d 100644
--- a/conf/compatibility-providers.conf
+++ b/conf/compatibility-providers.conf
@@ -17,6 +17,7 @@ PREFERRED_PROVIDER_e-wm-menu ?= "e-wm-menu"
PREFERRED_PROVIDER_frameworkd-config ?= "frameworkd-config"
PREFERRED_PROVIDER_gconf ?= "gconf"
#PREFERRED_PROVIDER_gconf ?= "gconf-dbus"
+PREFERRED_PROVIDER_gdk-pixbuf-csource-native ?= "gtk+-native"
PREFERRED_PROVIDER_gdk-pixbuf-loader-ani ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-gif ?= "gtk+"
@@ -43,7 +44,7 @@ PREFERRED_PROVIDER_libfribidi ?= "fribidi"
PREFERRED_PROVIDER_libgpewidget ?= "libgpewidget"
PREFERRED_PROVIDER_libxss ?= "libxss"
PREFERRED_PROVIDER_ntp ?= "ntp"
-PREFERRED_PROVIDER_openmoko-alsa-scenarios ?= "alsa-scenarii-shr"
+PREFERRED_PROVIDER_openmoko-alsa-scenarios ?= "fsodeviced"
PREFERRED_PROVIDER_opkg ?= "opkg"
#PREFERRED_PROVIDER_opkg ?= "opkg-nogpg"
PREFERRED_PROVIDER_qemu-native ?= "qemu-native"
@@ -53,7 +54,7 @@ PREFERRED_PROVIDER_task-bootstrap ?= "task-bootstrap"
PREFERRED_PROVIDER_tslib-conf ?= "tslib"
PREFERRED_PROVIDER_tslib ?= "tslib"
PREFERRED_PROVIDER_util-linux ?= "util-linux-ng"
-PREFERRED_PROVIDER_virtual/alsa-scenarios ?= "alsa-scenarii-shr"
+PREFERRED_PROVIDER_virtual/alsa-scenarios ?= "fsodeviced"
PREFERRED_PROVIDER_virtual/db ?= "db"
#PREFERRED_PROVIDER_virtual/db ?= "db3"
PREFERRED_PROVIDER_virtual/db-native ?= "db-native"
diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf
index 85d6f3f48a..ce0cd8b88d 100644
--- a/conf/distro/angstrom-2008.1.conf
+++ b/conf/distro/angstrom-2008.1.conf
@@ -21,7 +21,7 @@
# stable/2009 branch
#DISTRO_VERSION = "2009.X"
-DISTRO_VERSION = "2009.X-test-${DATE}"
+DISTRO_VERSION = "2010.4-test-${DATE}"
DISTRO_REVISION = "3"
DISTRO_PR = ".5"
@@ -84,8 +84,8 @@ PREFERRED_VERSION_linux-libc-headers = "2.6.31"
#Prefer glibc 2.6 and uclibc 0.9.30, these have had the most testing.
PREFERRED_VERSION_glibc ?= "2.9"
PREFERRED_VERSION_glibc-initial ?= "2.9"
-PREFERRED_VERSION_uclibc ?= "0.9.30.1"
-PREFERRED_VERSION_uclibc-initial ?= "0.9.30.1"
+PREFERRED_VERSION_uclibc ?= "0.9.30.2"
+PREFERRED_VERSION_uclibc-initial ?= "0.9.30.2"
#powerpc needs additional patches to gcc
ANGSTROM_GCC_VERSION_ppc405 ?= "4.1.1"
@@ -98,6 +98,7 @@ ANGSTROM_GCC_VERSION_bfin = "4.1.2"
# Uncomment this if want need to build an armv7a kernel with CSL toolchain (<2.6.27 don't boot with mainline gcc)
#KERNEL_CCSUFFIX_armv7a = "-4.2.1+csl-arm-2007q3-53"
KERNEL_CCSUFFIX_archos5 = "-4.2.1+csl-arm-2007q3-53"
+KERNEL_CCSUFFIX_archos5it = "-4.2.1+csl-arm-2007q3-53"
#avr32 only has support for gcc 4.2.2
ANGSTROM_GCC_VERSION_avr32 ?= "4.2.2"
diff --git a/conf/distro/include/angstrom-2008-preferred-versions.inc b/conf/distro/include/angstrom-2008-preferred-versions.inc
index 5f9e333046..b525d2afbb 100644
--- a/conf/distro/include/angstrom-2008-preferred-versions.inc
+++ b/conf/distro/include/angstrom-2008-preferred-versions.inc
@@ -1,11 +1,11 @@
-ANGSTROM_QT_VERSION ?= "4.6.0"
+ANGSTROM_QT_VERSION ?= "4.6.2"
-PREFERRED_VERSION_autoconf = "2.63"
-PREFERRED_VERSION_autoconf-native = "2.63"
-PREFERRED_VERSION_automake-native = "1.10.2"
+PREFERRED_VERSION_autoconf = "2.65"
+PREFERRED_VERSION_autoconf-native = "2.65"
+PREFERRED_VERSION_automake-native = "1.10.3"
PREFERRED_VERSION_busybox = "1.13.2"
-PREFERRED_VERSION_cairo = "1.8.8"
-PREFERRED_VERSION_dbus = "1.2.3"
+PREFERRED_VERSION_cairo = "1.8.10"
+PREFERRED_VERSION_dbus = "1.2.22"
PREFERRED_VERSION_dropbear = "0.51"
PREFERRED_VERSION_fontconfig = "2.6.0"
PREFERRED_VERSION_glib-2.0 = "2.22.4"
@@ -23,11 +23,15 @@ PREFERRED_VERSION_libtool = "2.2.6b"
PREFERRED_VERSION_libtool-native = "2.2.6b"
PREFERRED_VERSION_libtool-cross = "2.2.6b"
PREFERRED_VERSION_libtool-sdk = "2.2.6b"
+PREFERRED_VERSION_lighttpd = "1.4.26"
PREFERRED_VERSION_mesa = "7.6"
PREFERRED_VERSION_mesa-dri = "7.6"
PREFERRED_VERSION_mesa-xlib = "7.6"
PREFERRED_VERSION_mplayer = "0.0+1.0rc3+svnr30165"
+PREFERRED_VERSION_network-manager-applet = "0.8"
+PREFERRED_VERSION_networkmanager = "0.8"
PREFERRED_VERSION_pango = "1.24.4"
+PREFERRED_VERSION_pango-native = "1.24.4"
#PREFERRED_VERSION_pixman = "0.13.2"
PREFERRED_VERSION_pkgconfig = "0.23"
PREFERRED_VERSION_pkgconfig-native = "0.23"
@@ -41,13 +45,15 @@ PREFERRED_VERSION_qt4-x11-free = "${ANGSTROM_QT_VERSION}"
PREFERRED_VERSION_qt4-x11-free-gles = "${ANGSTROM_QT_VERSION}"
PREFERRED_VERSION_samba = "3.3.9"
-PREFERRED_VERSION_tiff = "3.8.2+4.0.0beta2"
+PREFERRED_VERSION_tiff = "3.9.2+4.0.0beta5"
-PREFERRED_VERSION_udev = "141"
+PREFERRED_VERSION_udev = "151"
+PREFERRED_VERSION_udev_libc-uclibc = "141"
UDEV_GE_141 = "1"
-PREFERRED_VERSION_usbutils = "0.82"
+PREFERRED_VERSION_usbutils = "0.86"
PREFERRED_VERSION_wpa-supplicant = "0.6.9"
+PREFERRED_VERSION_wget = "1.11.4"
PREFERRED_VERSION_xserver-common = "1.32"
PREFERRED_VERSION_xserver-kdrive = "1.4.0.90"
diff --git a/conf/distro/include/fso-autorev.inc b/conf/distro/include/fso-autorev.inc
index fda3cd4729..cb02400e2f 100644
--- a/conf/distro/include/fso-autorev.inc
+++ b/conf/distro/include/fso-autorev.inc
@@ -1,4 +1,5 @@
# FSO
+SRCREV_pn-android-image-utils-native = "${AUTOREV}"
SRCREV_pn-dbus-hlid = "${AUTOREV}"
SRCREV_pn-frameworkd = "${AUTOREV}"
SRCREV_pn-frameworkd-devel = "${AUTOREV}"
@@ -13,13 +14,11 @@ SRCREV_pn-fsousaged = "${AUTOREV}"
SRCREV_pn-fso-abyss = "${AUTOREV}"
SRCREV_pn-fso-boot = "${AUTOREV}"
SRCREV_pn-fso-apm = "${AUTOREV}"
-SRCREV_pn-fso-term = "${AUTOREV}"
SRCREV_pn-fso-gsm0710muxd = "${AUTOREV}"
SRCREV_pn-fso-gpsd = "${AUTOREV}"
SRCREV_pn-fso-monitord = "${AUTOREV}"
SRCREV_pn-fso-sounds = "${AUTOREV}"
SRCREV_pn-fso-specs = "${AUTOREV}"
-SRCREV_pn-fso-term = "${AUTOREV}"
SRCREV_pn-gsmd2 = "${AUTOREV}"
SRCREV_pn-illume-theme-freesmartphone = "${AUTOREV}"
SRCREV_pn-libascenario = "${AUTOREV}"
@@ -34,13 +33,19 @@ SRCREV_pn-libgee-native = "${AUTOREV}"
SRCREV_pn-libgee = "${AUTOREV}"
SRCREV_pn-libgsm0710 = "${AUTOREV}"
SRCREV_pn-libgsm0710mux = "${AUTOREV}"
+SRCREV_pn-libmsmcomm = "${AUTOREV}"
SRCREV_pn-libpersistence = "${AUTOREV}"
-SRCREV_pn-mickeydbus = "${AUTOREV}"
+SRCREV_pn-mdbus = "${AUTOREV}"
+SRCREV_pn-mdbus2 = "${AUTOREV}"
SRCREV_pn-mickeyterm = "${AUTOREV}"
+SRCREV_pn-mterm2 = "${AUTOREV}"
SRCREV_pn-misc-vapi = "${AUTOREV}"
SRCREV_pn-msmcommd = "${AUTOREV}"
SRCREV_pn-python-pytrc = "${AUTOREV}"
SRCREV_pn-vala-dbus-binding-tool-native = "${AUTOREV}"
+SRCREV_pn-vala-dbus-binding-tool = "${AUTOREV}"
SRCREV_pn-vala-native = "${AUTOREV}"
SRCREV_pn-vala = "${AUTOREV}"
SRCREV_pn-zhone = "${AUTOREV}"
+SRCREV_pn-zhone2 = "${AUTOREV}"
+
diff --git a/conf/distro/include/glibc-external.inc b/conf/distro/include/glibc-external.inc
index 3ddedb640f..b84d2379b9 100644
--- a/conf/distro/include/glibc-external.inc
+++ b/conf/distro/include/glibc-external.inc
@@ -16,6 +16,6 @@ OLDEST_KERNEL ?= "2.4.0"
# ARM OABI is fine with 2.4.0, EABI is not, so we override on "-gnueabi"
# TARGET_OS here, not on architecture which is 'arm' in both cases
-OLDEST_KERNEL_linux-gnueabi ?= "2.6.14"
+OLDEST_KERNEL_linux-gnueabi ?= "2.6.16"
OLDEST_KERNEL_sparc64 ?= "2.4.21"
OLDEST_KERNEL_ppc64 ?= "2.4.21"
diff --git a/conf/distro/include/glibc-internal.inc b/conf/distro/include/glibc-internal.inc
index d1cbd5339b..e06b9b0cc6 100644
--- a/conf/distro/include/glibc-internal.inc
+++ b/conf/distro/include/glibc-internal.inc
@@ -16,6 +16,6 @@ OLDEST_KERNEL ?= "2.4.0"
# ARM OABI is fine with 2.4.0, EABI is not, so we override on "-gnueabi"
# TARGET_OS here, not on architecture which is 'arm' in both cases
-OLDEST_KERNEL_linux-gnueabi ?= "2.6.14"
+OLDEST_KERNEL_linux-gnueabi ?= "2.6.16"
OLDEST_KERNEL_sparc64 ?= "2.4.21"
OLDEST_KERNEL_ppc64 ?= "2.4.21"
diff --git a/conf/distro/include/glibc.inc b/conf/distro/include/glibc.inc
index 2cb6502322..f1c80dc395 100644
--- a/conf/distro/include/glibc.inc
+++ b/conf/distro/include/glibc.inc
@@ -15,6 +15,6 @@ OLDEST_KERNEL ?= "2.4.0"
# ARM OABI is fine with 2.4.0, EABI is not, so we override on "-gnueabi"
# TARGET_OS here, not on architecture which is 'arm' in both cases
-OLDEST_KERNEL_linux-gnueabi ?= "2.6.14"
+OLDEST_KERNEL_linux-gnueabi ?= "2.6.16"
OLDEST_KERNEL_sparc64 ?= "2.4.21"
OLDEST_KERNEL_ppc64 ?= "2.4.21"
diff --git a/conf/distro/include/kaeilos-2009-preferred-versions.inc b/conf/distro/include/kaeilos-2009-preferred-versions.inc
index 870ac04036..e8a0ca3e95 100644
--- a/conf/distro/include/kaeilos-2009-preferred-versions.inc
+++ b/conf/distro/include/kaeilos-2009-preferred-versions.inc
@@ -18,27 +18,29 @@ PREFERRED_VERSION_cairo = "1.8.8"
PREFERRED_VERSION_dbus = "1.2.3"
PREFERRED_VERSION_dropbear = "0.51"
PREFERRED_VERSION_fontconfig = "2.6.0"
-PREFERRED_VERSION_glib-2.0 = "2.22.1"
-PREFERRED_VERSION_glib-2.0-native = "2.22.1"
+PREFERRED_VERSION_glib-2.0 = "2.22.4"
+PREFERRED_VERSION_glib-2.0-native = "2.22.4"
PREFERRED_VERSION_glibmm = "2.22.1"
-PREFERRED_VERSION_glproto = "1.4.9"
PREFERRED_VERSION_gst-pulse = "0.9.7"
-PREFERRED_VERSION_gtk+ = "2.18.3"
+PREFERRED_VERSION_gtk+ = "2.18.6"
+PREFERRED_VERSION_gtk+-native = "2.18.6"
PREFERRED_VERSION_gtkmm = "2.18.1"
-PREFERRED_VERSION_hal = "0.5.13"
+PREFERRED_VERSION_hal = "0.5.14"
PREFERRED_VERSION_libgemwidget = "1.0"
PREFERRED_VERSION_libgpephone = "0.4"
PREFERRED_VERSION_libsdl-x11 = "1.2.14"
-PREFERRED_VERSION_libtool = "2.2.6a"
-PREFERRED_VERSION_libtool-native = "2.2.6a"
-PREFERRED_VERSION_libtool-cross = "2.2.6a"
-PREFERRED_VERSION_libtool-sdk = "2.2.6a"
+PREFERRED_VERSION_libtool = "2.2.6b"
+PREFERRED_VERSION_libtool-native = "2.2.6b"
+PREFERRED_VERSION_libtool-cross = "2.2.6b"
+PREFERRED_VERSION_libtool-sdk = "2.2.6b"
PREFERRED_VERSION_mesa = "7.6"
PREFERRED_VERSION_mesa-dri = "7.6"
PREFERRED_VERSION_mesa-xlib = "7.6"
-PREFERRED_VERSION_mplayer = "0.0+1.0rc2+svnr30165"
+PREFERRED_VERSION_mplayer = "0.0+1.0rc3+svnr30165"
+PREFERRED_VERSION_network-manager-applet = "0.7.999+git"
+PREFERRED_VERSION_networkmanager = "0.7.999"
PREFERRED_VERSION_pango = "1.24.4"
-PREFERRED_VERSION_pixman = "0.16.2"
+#PREFERRED_VERSION_pixman = "0.13.2"
PREFERRED_VERSION_pkgconfig = "0.23"
PREFERRED_VERSION_pkgconfig-native = "0.23"
PREFERRED_VERSION_pulseaudio = "0.9.15"
@@ -49,7 +51,7 @@ PREFERRED_VERSION_tiff = "3.8.2+4.0.0beta2"
KAEILOS_WX_VERSION ?= "2.8.10"
PREFERRED_VERSION_wxwidgets = "${KAEILOS_WX_VERSION}"
-KAEILOS_QT_VERSION ?= "4.6.0"
+KAEILOS_QT_VERSION ?= "4.6.2"
PREFERRED_VERSION_qt4-tools-native = "${KAEILOS_QT_VERSION}"
PREFERRED_VERSION_qt4-tools-sdk = "${KAEILOS_QT_VERSION}"
PREFERRED_VERSION_qt4-embedded = "${KAEILOS_QT_VERSION}"
@@ -57,19 +59,14 @@ PREFERRED_VERSION_qt4-embedded-gles = "${KAEILOS_QT_VERSION}"
PREFERRED_VERSION_qt4-x11-free = "${KAEILOS_QT_VERSION}"
PREFERRED_VERSION_qt4-x11-free-gles = "${KAEILOS_QT_VERSION}"
-PREFERRED_VERSION_udev = "141"
+PREFERRED_VERSION_udev = "151"
UDEV_GE_141 = "1"
-PREFERRED_VERSION_usbutils = "0.82"
+PREFERRED_VERSION_usbutils = "0.86"
PREFERRED_VERSION_wpa-supplicant = "0.6.9"
+PREFERRED_VERSION_xserver-common = "1.32"
PREFERRED_VERSION_xserver-kdrive = "1.4.0.90"
-# Use latest version available
-#PREFERRED_VERSION_util-macros-native = "1.4.1"
-#PREFERRED_VERSION_util-macros = "1.4.1"
-#PREFERRED_VERSION_xserver-xorg = "1.7.3"
-#PREFERRED_VERSION_xf86-video-xgi = "1.5.1"
-
#
# meta-moblin package SRCREVs
#
diff --git a/conf/distro/include/kaeilos.inc b/conf/distro/include/kaeilos.inc
index ad03976c67..bdc4aadc87 100644
--- a/conf/distro/include/kaeilos.inc
+++ b/conf/distro/include/kaeilos.inc
@@ -210,3 +210,7 @@ OESTATS_SERVER ?= "tinderbox.openembedded.org"
# We want images supporting the following features (for task-base)
+DISTRO_FEATURES = "nfs smbfs wifi ppp alsa bluetooth ext2 vfat irda pcmcia usbgadget usbhost pci pam"
+
+# Use-like features
+DISTRO_FEATURES += "tk"
diff --git a/conf/distro/include/preferred-om-2008-versions.inc b/conf/distro/include/preferred-om-2008-versions.inc
index 960169afbd..d46a9f661f 100644
--- a/conf/distro/include/preferred-om-2008-versions.inc
+++ b/conf/distro/include/preferred-om-2008-versions.inc
@@ -512,7 +512,6 @@ PREFERRED_VERSION_gob2 ?= "2.0.14"
PREFERRED_VERSION_gobby ?= "0.4.1"
PREFERRED_VERSION_goffice ?= "0.2.1"
PREFERRED_VERSION_gparted ?= "0.3.3"
-PREFERRED_VERSION_gpdf ?= "2.10.0"
PREFERRED_VERSION_gpe-aerial ?= "0.3.0"
PREFERRED_VERSION_gpe-announce ?= "0.13"
PREFERRED_VERSION_gpe-applauncher ?= "0.11"
diff --git a/conf/distro/include/preferred-shr-versions.inc b/conf/distro/include/preferred-shr-versions.inc
index f1d16d3b4d..20c03fef15 100644
--- a/conf/distro/include/preferred-shr-versions.inc
+++ b/conf/distro/include/preferred-shr-versions.inc
@@ -2,11 +2,14 @@
# use newer version then preferred by default
PREFERRED_VERSION_boost = "1.40.0"
PREFERRED_VERSION_dbus = "1.3.0"
-PREFERRED_VERSION_autoconf = "2.63"
-PREFERRED_VERSION_autoconf-native = "2.63"
+PREFERRED_VERSION_autoconf = "2.65"
+PREFERRED_VERSION_autoconf-native = "2.65"
+PREFERRED_VERSION_automake = "1.11.1"
+PREFERRED_VERSION_automake-native = "1.11.1"
PREFERRED_VERSION_libmikmod = "3.2.0-beta2"
PREFERRED_VERSION_mtd-utils-native = "1.2.0+git"
PREFERRED_VERSION_strace = "4.5.15"
+PREFERRED_VERSION_mesa-dri = "7.7.999"
# We need this for jamvm
PREFERRED_VERSION_classpath = "0.98"
@@ -14,7 +17,7 @@ PREFERRED_VERSION_classpath-native = "0.98"
# we need new headers for libc, now OLDEST_KERNEL_linux-gnueabi = "2.6.24"
# and 2.6.31 for fsodeviced
-PREFERRED_VERSION_linux-libc-headers = "2.6.31"
+PREFERRED_VERSION_linux-libc-headers = "2.6.32"
# override EFL_SRCREV from sane-srcrevs.inc
# EFL_SRCREV ?= "44424"
@@ -32,14 +35,14 @@ PREFERRED_VERSION_libtool = "2.2.6b"
PREFERRED_VERSION_libtool-native = "2.2.6b"
PREFERRED_VERSION_libtool-cross = "2.2.6b"
PREFERRED_VERSION_libtool-sdk = "2.2.6b"
-PREFERRED_VERSION_udev = "141"
-PREFERRED_VERSION_usbutils = "0.82"
+PREFERRED_VERSION_udev = "151"
+PREFERRED_VERSION_usbutils = "0.86"
PREFERRED_VERSION_wpa-supplicant = "0.6.9"
PREFERRED_VERSION_glib-2.0 = "2.22.4"
PREFERRED_VERSION_glib-2.0-native = "2.22.4"
UDEV_GE_141 = "1"
-ANGSTROM_QT_VERSION ?= "4.6.0"
+ANGSTROM_QT_VERSION ?= "4.6.2"
PREFERRED_VERSION_qt4-tools-native = "${ANGSTROM_QT_VERSION}"
PREFERRED_VERSION_qt4-tools-sdk = "${ANGSTROM_QT_VERSION}"
PREFERRED_VERSION_qt4-embedded = "${ANGSTROM_QT_VERSION}"
@@ -47,6 +50,8 @@ PREFERRED_VERSION_qt4-embedded-gles = "${ANGSTROM_QT_VERSION}"
PREFERRED_VERSION_qt4-x11-free = "${ANGSTROM_QT_VERSION}"
PREFERRED_VERSION_qt4-x11-free-gles = "${ANGSTROM_QT_VERSION}"
+# epdf needs > 0.12, but recipes have D_P = -1
+PREFERRED_VERSION_poppler = "0.12.3"
# Downgraded
PREFERRED_VERSION_pulseaudio = "0.9.15"
diff --git a/conf/distro/include/preferred-slugos-versions.inc b/conf/distro/include/preferred-slugos-versions.inc
index 204047fd63..2749c39ce8 100644
--- a/conf/distro/include/preferred-slugos-versions.inc
+++ b/conf/distro/include/preferred-slugos-versions.inc
@@ -31,7 +31,8 @@ SRCREV_pn-opkg-sdk = "160"
### alphabetically. Note that the main slugos.inc file
### may include preferred versions for toolchain components.
-PREFERRED_VERSION_automake-native ?= "1.10.2"
+PREFERRED_VERSION_automake-native ?= "1.10.3"
+PREFERRED_VERSION_automake ?= "1.10.3"
PREFERRED_VERSION_binutils ?= "2.18.50.0.7"
PREFERRED_VERSION_binutils-cross ?= "2.18.50.0.7"
PREFERRED_VERSION_binutils-cross-sdk ?= "2.18.50.0.7"
@@ -48,10 +49,10 @@ PREFERRED_VERSION_glibc ?= "2.6.1"
PREFERRED_VERSION_glibc-initial ?= "2.6.1"
PREFERRED_VERSION_ipkg ?= "0.99.163"
PREFERRED_VERSION_ipkg-native ?= "0.99.163"
-PREFERRED_VERSION_libtool ?= "2.2.6a"
-PREFERRED_VERSION_libtool-native ?= "2.2.6a"
-PREFERRED_VERSION_libtool-cross ?= "2.2.6a"
-PREFERRED_VERSION_libtool-sdk ?= "2.2.6a"
+PREFERRED_VERSION_libtool ?= "2.2.6b"
+PREFERRED_VERSION_libtool-native ?= "2.2.6b"
+PREFERRED_VERSION_libtool-cross ?= "2.2.6b"
+PREFERRED_VERSION_libtool-sdk ?= "2.2.6b"
PREFERRED_VERSION_linux-libc-headers ?= "2.6.23"
PREFERRED_VERSION_m4 ?= "1.4.8"
PREFERRED_VERSION_m4-native ?= "1.4.8"
diff --git a/conf/distro/include/preferred-xorg-versions-live.inc b/conf/distro/include/preferred-xorg-versions-live.inc
index 65e94fac5c..2196eb3999 100644
--- a/conf/distro/include/preferred-xorg-versions-live.inc
+++ b/conf/distro/include/preferred-xorg-versions-live.inc
@@ -1,4 +1,4 @@
-#Mon Jan 18 14:00:56 CET 2010
+#Wed Mar 17 13:04:15 CET 2010
#app
PREFERRED_VERSION_appres ?= "1.0.2"
PREFERRED_VERSION_bdftopcf ?= "1.0.2"
@@ -14,7 +14,7 @@ PREFERRED_VERSION_iceauth ?= "1.0.3"
PREFERRED_VERSION_ico ?= "1.0.2"
PREFERRED_VERSION_lbxproxy ?= "1.0.2"
PREFERRED_VERSION_listres ?= "1.0.2"
-PREFERRED_VERSION_luit ?= "1.0.4"
+PREFERRED_VERSION_luit ?= "1.0.5"
PREFERRED_VERSION_mkcfm ?= "1.0.1"
PREFERRED_VERSION_mkcomposecache ?= "1.2.1"
PREFERRED_VERSION_mkfontdir ?= "1.0.5"
@@ -63,8 +63,8 @@ PREFERRED_VERSION_xfwp ?= "1.0.1"
PREFERRED_VERSION_xgamma ?= "1.0.3"
PREFERRED_VERSION_xgc ?= "1.0.2"
PREFERRED_VERSION_xhost ?= "1.0.3"
-PREFERRED_VERSION_xinit ?= "1.2.0"
-PREFERRED_VERSION_xinput ?= "1.5.0"
+PREFERRED_VERSION_xinit ?= "1.2.1"
+PREFERRED_VERSION_xinput ?= "1.5.1"
PREFERRED_VERSION_xkbcomp ?= "1.1.1"
PREFERRED_VERSION_xkbcomp-native ?= "1.1.1"
PREFERRED_VERSION_xkbevd ?= "1.1.0"
@@ -78,7 +78,7 @@ PREFERRED_VERSION_xlsclients ?= "1.0.2"
PREFERRED_VERSION_xlsfonts ?= "1.0.2"
PREFERRED_VERSION_xmag ?= "1.0.3"
PREFERRED_VERSION_xman ?= "1.1.0"
-PREFERRED_VERSION_xmessage ?= "1.0.2"
+PREFERRED_VERSION_xmessage ?= "1.0.3"
PREFERRED_VERSION_xmh ?= "1.0.1"
PREFERRED_VERSION_xmodmap ?= "1.0.4"
PREFERRED_VERSION_xmore ?= "1.0.1"
@@ -132,13 +132,13 @@ PREFERRED_VERSION_xf86-input-microtouch ?= "1.2.0"
PREFERRED_VERSION_xf86-input-mouse ?= "1.5.0"
PREFERRED_VERSION_xf86-input-mutouch ?= "1.2.1"
PREFERRED_VERSION_xf86-input-palmax ?= "1.2.0"
-PREFERRED_VERSION_xf86-input-penmount ?= "1.4.0"
+PREFERRED_VERSION_xf86-input-penmount ?= "1.4.1"
PREFERRED_VERSION_xf86-input-spaceorb ?= "1.1.1"
PREFERRED_VERSION_xf86-input-summa ?= "1.2.0"
PREFERRED_VERSION_xf86-input-synaptics ?= "1.2.1"
PREFERRED_VERSION_xf86-input-tek4957 ?= "1.2.0"
PREFERRED_VERSION_xf86-input-ur98 ?= "1.1.0"
-PREFERRED_VERSION_xf86-input-vmmouse ?= "12.6.5"
+PREFERRED_VERSION_xf86-input-vmmouse ?= "12.6.6"
PREFERRED_VERSION_xf86-input-void ?= "1.3.0"
PREFERRED_VERSION_xf86-video-apm ?= "1.2.2"
PREFERRED_VERSION_xf86-video-ark ?= "0.7.2"
@@ -149,7 +149,7 @@ PREFERRED_VERSION_xf86-video-cirrus ?= "1.3.2"
PREFERRED_VERSION_xf86-video-cyrix ?= "1.1.0"
PREFERRED_VERSION_xf86-video-dummy ?= "0.3.3"
PREFERRED_VERSION_xf86-video-fbdev ?= "0.4.1"
-PREFERRED_VERSION_xf86-video-geode ?= "2.11.6"
+PREFERRED_VERSION_xf86-video-geode ?= "2.11.7"
PREFERRED_VERSION_xf86-video-glint ?= "1.2.4"
PREFERRED_VERSION_xf86-video-i128 ?= "1.3.3"
PREFERRED_VERSION_xf86-video-i740 ?= "1.3.2"
@@ -162,7 +162,7 @@ PREFERRED_VERSION_xf86-video-mga ?= "1.9.100"
PREFERRED_VERSION_xf86-video-neomagic ?= "1.2.4"
PREFERRED_VERSION_xf86-video-newport ?= "0.2.3"
PREFERRED_VERSION_xf86-video-nsc ?= "2.8.3"
-PREFERRED_VERSION_xf86-video-nv ?= "2.1.16"
+PREFERRED_VERSION_xf86-video-nv ?= "2.1.17"
PREFERRED_VERSION_xf86-video-openchrome ?= "0.2.904"
PREFERRED_VERSION_xf86-video-r128 ?= "6.8.1"
PREFERRED_VERSION_xf86-video-radeonhd ?= "1.3.0"
@@ -189,7 +189,7 @@ PREFERRED_VERSION_xf86-video-vermilion ?= "1.0.1"
PREFERRED_VERSION_xf86-video-vesa ?= "2.3.0"
PREFERRED_VERSION_xf86-video-vga ?= "4.1.0"
PREFERRED_VERSION_xf86-video-via ?= "0.2.2"
-PREFERRED_VERSION_xf86-video-vmware ?= "10.16.9"
+PREFERRED_VERSION_xf86-video-vmware ?= "11.0.0"
PREFERRED_VERSION_xf86-video-voodoo ?= "1.2.3"
PREFERRED_VERSION_xf86-video-wsfb ?= "0.3.0"
PREFERRED_VERSION_xf86-video-xgi ?= "1.5.1"
@@ -275,8 +275,8 @@ PREFERRED_VERSION_libxrandr ?= "1.3.0"
PREFERRED_VERSION_libxrender ?= "0.9.5"
PREFERRED_VERSION_libxrender-native ?= "0.9.5"
PREFERRED_VERSION_libxres ?= "1.0.4"
-PREFERRED_VERSION_libxt ?= "1.0.7"
-PREFERRED_VERSION_libxt-native ?= "1.0.7"
+PREFERRED_VERSION_libxt ?= "1.0.8"
+PREFERRED_VERSION_libxt-native ?= "1.0.8"
PREFERRED_VERSION_libxtst ?= "1.1.0"
PREFERRED_VERSION_libxv ?= "1.0.5"
PREFERRED_VERSION_libxvmc ?= "1.0.5"
@@ -292,7 +292,8 @@ PREFERRED_VERSION_libpciaccess ?= "0.11.0"
PREFERRED_VERSION_libxkbfile ?= "1.0.6"
PREFERRED_VERSION_libxkbfile-native ?= "1.0.6"
PREFERRED_VERSION_libxkbui ?= "1.0.2"
-PREFERRED_VERSION_pixman ?= "0.17.4"
+PREFERRED_VERSION_pixman ?= "0.17.12"
+PREFERRED_VERSION_pixman-native ?= "0.17.12"
PREFERRED_VERSION_xtrans ?= "1.2.5"
PREFERRED_VERSION_xtrans-native ?= "1.2.5"
#proto
@@ -302,7 +303,7 @@ PREFERRED_VERSION_bigreqsproto-native ?= "1.1.0"
PREFERRED_VERSION_compositeproto ?= "0.4.1"
PREFERRED_VERSION_damageproto ?= "1.2.0"
PREFERRED_VERSION_dmxproto ?= "2.3"
-PREFERRED_VERSION_dri2proto ?= "2.2"
+PREFERRED_VERSION_dri2proto ?= "2.3"
PREFERRED_VERSION_evieext ?= "1.1.0"
PREFERRED_VERSION_fixesproto ?= "4.1.1"
PREFERRED_VERSION_fixesproto-native ?= "4.1.1"
@@ -346,9 +347,8 @@ PREFERRED_VERSION_imake ?= "1.0.2"
PREFERRED_VERSION_lndir ?= "1.0.1"
PREFERRED_VERSION_makedepend ?= "1.0.2"
PREFERRED_VERSION_makedepend-native ?= "1.0.2"
-PREFERRED_VERSION_util-macros ?= "1.5.0"
-PREFERRED_VERSION_util-macros-native ?= "1.5.0"
+PREFERRED_VERSION_util-macros ?= "1.6.1"
+PREFERRED_VERSION_util-macros-native ?= "1.6.1"
PREFERRED_VERSION_xorg-cf-files ?= "1.0.3"
#xserver
-#PREFERRED_VERSION_xserver-xorg ?= "1.7.99.2"
-PREFERRED_VERSION_xserver-xorg ?= "1.7.4"
+PREFERRED_VERSION_xserver-xorg ?= "1.7.999"
diff --git a/conf/distro/include/sane-srcrevs-fso.inc b/conf/distro/include/sane-srcrevs-fso.inc
index eecf69f24b..8d50cb9153 100644
--- a/conf/distro/include/sane-srcrevs-fso.inc
+++ b/conf/distro/include/sane-srcrevs-fso.inc
@@ -1,12 +1,13 @@
# To be included from sane-srcrevs.inc
# FSO Projects -- Cornucopia
-FSO_CORNUCOPIA_SRCREV ?= "429a3d190016b7516b57703faa777c398d843d6c"
+FSO_CORNUCOPIA_SRCREV ?= "617dcf866afc8db1a31d91d6a74c84e5f6cc276c"
+SRCREV_pn-fso-abyss ?= "${FSO_CORNUCOPIA_SRCREV}"
SRCREV_pn-fso-apm ?= "${FSO_CORNUCOPIA_SRCREV}"
-SRCREV_pn-fso-boot ?= "241e9212db9f22d3cb0491723a1c41309f4bf486"
+SRCREV_pn-fso-boot ?= "${FSO_CORNUCOPIA_SRCREV}"
SRCREV_pn-fsodatad ?= "${FSO_CORNUCOPIA_SRCREV}"
-SRCREV_pn-fsodeviced ?= "c5094450745643b1b4410a79d7cb72e3f7df28a6"
-SRCREV_pn-fsogsmd ?= "42b94a43ef1dce1225c1f26301c0f4b8aab669e8"
+SRCREV_pn-fsodeviced ?= "${FSO_CORNUCOPIA_SRCREV}"
+SRCREV_pn-fsogsmd ?= "dca338769e01230df243ee74b5536251c126c6d0"
SRCREV_pn-fsolocationd ?= "${FSO_CORNUCOPIA_SRCREV}"
SRCREV_pn-fsomusicd ?= "${FSO_CORNUCOPIA_SRCREV}"
SRCREV_pn-fsonetworkd ?= "${FSO_CORNUCOPIA_SRCREV}"
@@ -15,36 +16,35 @@ SRCREV_pn-fsotdld ?= "${FSO_CORNUCOPIA_SRCREV}"
SRCREV_pn-fsousaged ?= "${FSO_CORNUCOPIA_SRCREV}"
SRCREV_pn-libfsobasics ?= "${FSO_CORNUCOPIA_SRCREV}"
SRCREV_pn-libfsoframework ?= "${FSO_CORNUCOPIA_SRCREV}"
-SRCREV_pn-libfsotransport ?= "0c1e8c057b4110b1d8d2c24fd93744c03c304cc8"
+SRCREV_pn-libfsotransport ?= "${FSO_CORNUCOPIA_SRCREV}"
SRCREV_pn-libfsoresource ?= "${FSO_CORNUCOPIA_SRCREV}"
-SRCREV_pn-mickeydbus2 ?= "3e75d0ab3e334e303fa1f64b5d87465150c0b58c"
+SRCREV_pn-libgsm0710mux ?= "${FSO_CORNUCOPIA_SRCREV}"
+SRCREV_pn-mdbus2 ?= "${FSO_CORNUCOPIA_SRCREV}"
+SRCREV_pn-mterm2 ?= "${FSO_CORNUCOPIA_SRCREV}"
# FSO Projects -- Misc
SRCREV_pn-dbus-hlid ?= "5df7f49fe8881804aaab544a569fd164c3e93afb"
-SRCREV_pn-frameworkd ?= "e3d6339c5d69e0791c4633f86363159e56126075"
+SRCREV_pn-frameworkd ?= "0c9251d9d3a159df261ec13b87475a565073d711"
SRCREV_pn-frameworkd-config-shr_FSO_REV ?= ${SRCREV_pn-frameworkd}
-SRCREV_pn-fso-abyss ?= "aaa3c48296c8589d845f2b6e4314b794750d91cc"
-SRCREV_pn-fso-term ?= "aa0b9c26dee3918a5e9d2809bb36335bda276a0d"
SRCREV_pn-fso-gpsd ?= "39e810899110a9bb302cf2064e1c0f73541fb4e6"
-SRCREV_pn-fso-gsm0710muxd ?= "abcbcd7cc532a8834906de3fc24c8f8fe7643cd4"
+SRCREV_pn-fso-gsm0710muxd ?= "1d69fb5b666ac2a9e54e46978c7afa8fe5dfc3c9"
SRCREV_pn-fso-monitord ?= "b4ae1e9b10e710042624c2cf1a15b91a7d5b1d44"
SRCREV_pn-fso-sounds ?= "3a4767ec01988bd0fd8f72f0c35d6d36e5fbc815"
-SRCREV_pn-fso-specs ?= "af3e18e5183ccce29a03eea9fc5f5a0098003cc6"
+SRCREV_pn-fso-specs ?= "76d8557042c322f495bfc6a9d7b3f85fd0308fe7"
SRCREV_pn-gsmd2 ?= "c16883a079aeff8780e5d461ec4e8348537ab4d8"
-SRCREV_pn-libeflvala ?= "294f250f5c20a058f5016aaf674c57d0498070fd"
-SRCREV_pn-libfso-glib ?= "d7d9045b806744bdedf409874009cfde16c2de39"
-SRCREV_pn-libframeworkd-glib ?= "f68fe525c20aa8ef6c6cff70a80e60b91bed89a9"
-SRCREV_pn-libgsm0710 ?= "cd564c8782f018e0d65fb8716c99a6040b5bd166"
-SRCREV_pn-libgsm0710mux ?= "7934196c47eb80e77105a92cb684656b3614a9fc"
+SRCREV_pn-libfso-glib ?= "1abe0a9e1faeb64ab18d6f8a3d3ac3d983bd2f65"
+SRCREV_pn-libframeworkd-glib ?= "3e389bf931d4e5a30eadea9d6e1e83f7447be4f1"
+SRCREV_pn-libgsm0710 ?= "52eea64bdbb79c09002b46e98a5e656509884f72"
SRCREV_pn-libpersistence ?= "217ad803745f8ac1f3c72c6715e2c0faefb3fd06"
FSO_PYTHONHELPERS_SRCREV ?= "63b1dff1bc8ac22efabcee8a90e957c3b2423317"
-SRCREV_pn-mickeydbus ?= "${FSO_PYTHONHELPERS_SRCREV}"
+SRCREV_pn-mdbus ?= "${FSO_PYTHONHELPERS_SRCREV}"
SRCREV_pn-mickeyterm ?= "${FSO_PYTHONHELPERS_SRCREV}"
-SRCREV_pn-msmcommd ?= "072226ac1e0f21735cb3bc26cdb87cd87e347afb"
+SRCREV_pn-msmcommd ?= "2ed618dd347c3245c5f62c00ce75c985ad90a0ea"
SRCREV_pn-multicat ?= "${FSO_PYTHONHELPERS_SRCREV}"
SRCREV_pn-python-pyrtc ?= "${FSO_PYTHONHELPERS_SRCREV}"
SRCREV_pn-pycd ?= "${FSO_PYTHONHELPERS_SRCREV}"
-SRCREV_pn-vala-dbus-binding-tool-native ?= "8df9b5aab50066d3f5a525518f902dd26f77bbd7"
-SRCREV_pn-vala-terminal ?= "932285d72e26b965c488f8aa99fe51f7a34231ad"
-SRCREV_pn-vala-native ?= "a8aa50a80bcdc5f6c8183507f87b6c6fdfac8d9f"
-SRCREV_pn-zhone ?= "d654b3d15500a56c8e987e4d2cc2f8eef70b78c0"
+SRCREV_pn-vala-dbus-binding-tool-native ?= "0dda9a5d7f895d67c6a778f559e929ace229e42b"
+SRCREV_pn-vala-dbus-binding-tool ?= "0dda9a5d7f895d67c6a778f559e929ace229e42b"
+SRCREV_pn-vala-terminal ?= "fda5f26710acfc0befe04c8f2e58b35bdba297f7"
+SRCREV_pn-vala-native ?= "e98c5df3db6d47f0e2462e294be63fc8385c5916"
+SRCREV_pn-zhone ?= "bd1e895f73a0e5beb2608ebe111d7ef32ee3adbc"
diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc
index 2dfaf34145..467581ce03 100644
--- a/conf/distro/include/sane-srcrevs.inc
+++ b/conf/distro/include/sane-srcrevs.inc
@@ -14,13 +14,9 @@
SRCREV_pn-accelges ?= "206"
SRCREV_pn-advancedcaching ?= "9c3661f5573d2dd712437f1590070153d12e4c02"
SRCREV_pn-aircrack-ng ?= "802"
-SRCREV_pn-alsa-scenarii-shr ?= "ec04ab4bc92f9d4c4e398df9a2ee1330e3660373"
+SRCREV_pn-alsa-scenarii-shr ?= "8e89c8dbae569a08cac246a3805fca20988c0ad1"
SRCREV_pn-alsa-scenario ?= "8bd7f83d847424eb44704cf1649974b2fda8d8f1"
-SRCREV_pn-app-restarter ?= "4552"
-SRCREV_pn-assassin ?= "268"
-SRCREV_pn-assassin-thumbnail ?= "4690"
SRCREV_pn-aufs2-util ?= "f35ba2292fe40aa94aa83713e0b2719f35a25768"
-SRCREV_pn-babiloo-efl ?= "296"
SRCREV_pn-bfin-uclibc ?= "1857"
SRCREV_pn-blipomoko ?= "93295f36f7b45c691df247cb2a65227facf13654"
SRCREV_pn-bootchart-lite ?= "4"
@@ -41,47 +37,32 @@ SRCREV_pn-contact ?= "1410"
SRCREV_pn-dasher-gpe ?= "1251"
SRCREV_pn-dbus-c++ ?= "13131"
SRCREV_pn-dbus-c++-native ?= "13131"
-SRCREV_pn-dfu-util ?= "4160"
-SRCREV_pn-dfu-util-native ?= "4160"
SRCREV_pn-disko ?= "f52597b8d5d584811cbe8f9e0bf25ea372526953"
-SRCREV_pn-diversity-daemon ?= "571"
-SRCREV_pn-diversity-radar ?= "453"
SRCREV_pn-e-wm-config-illume-shr ?= "bbcec18f0ebd47e4f6eea88b9b774edf7400e752"
SRCREV_pn-e-wm-illume-dict-pl ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-e-wm-menu-shr ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-e-wm-sysactions-shr ?= "bbcec18f0ebd47e4f6eea88b9b774edf7400e752"
SRCREV_pn-e-wm-theme-illume-gry ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
-SRCREV_pn-e-wm-theme-illume-neo ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-e-wm-theme-illume-niebiee ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-e-wm-theme-illume-shr ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-e-wm-theme-illume-sixteen ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-ebrainy ?= "21"
SRCREV_pn-eds-dbus ?= "736"
-SRCREV_pn-elementary-theme-gry ?= "2ac643cc273d144bb731a8cbb8ec6b3615de43a0"
-SRCREV_pn-elementary-theme-neo ?= "2ac643cc273d144bb731a8cbb8ec6b3615de43a0"
+SRCREV_pn-elementary-theme-gry ?= "2b62d1c9b02da047071105a7b5695acd6c6dbcca"
SRCREV_pn-elementary-theme-niebiee ?= "2ac643cc273d144bb731a8cbb8ec6b3615de43a0"
SRCREV_pn-elementary-theme-sixteen ?= "2ac643cc273d144bb731a8cbb8ec6b3615de43a0"
SRCREV_pn-elf2flt ?= "1786"
-SRCREV_pn-elmdentica ?= "215"
-SRCREV_pn-enlazar ?= "37"
-SRCREV_pn-enotes ?= "19"
SRCREV_pn-epdfview ?= "346"
SRCREV_pn-epiphany ?= "7837"
SRCREV_pn-essential-dialer ?= "194"
-SRCREV_pn-etk-theme-neo ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
-SRCREV_pn-etk-theme-ninja ?= "5"
-SRCREV_pn-etk-theme-shr ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-ezx-boot-usb-native ?= "2371"
SRCREV_pn-ezx-gen-blob ?= "2426"
SRCREV_pn-ezxd ?= "2074"
SRCREV_pn-fbgrab-viewer-native ?= "1943"
-SRCREV_pn-ffalarms ?= "67"
SRCREV_pn-flashrom ?= "3682"
-SRCREV_pn-fltk2 ?= "6916"
-SRCREV_pn-frameworkd-config-shr ?= "ec04ab4bc92f9d4c4e398df9a2ee1330e3660373"
+SRCREV_pn-frameworkd-config-shr ?= "8e89c8dbae569a08cac246a3805fca20988c0ad1"
SRCREV_pn-frameworkd-config-shr_SHR_REV ?= ${SRCREV_pn-frameworkd-config-shr}
SRCREV_pn-fsod ?= "2a33e5ffe96c611e6a6b8b6c33d2a83ba656f55b"
-SRCREV_pn-fsoraw ?= "20"
SRCREV_pn-fstests ?= "204"
SRCREV_pn-gabriel ?= "38"
SRCREV_pn-gabriel-native ?= "38"
@@ -93,47 +74,28 @@ SRCREV_pn-gpe-contacts ?= "9312"
SRCREV_pn-gpe-gallery ?= "9376"
SRCREV_pn-gpe-mini-browser2 ?= "9900"
SRCREV_pn-gpe-sketchbook ?= "9547"
-SRCREV_pn-gpe-theme-neo ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-gridpad ?= "194"
-SRCREV_pn-gtk-theme-neo ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-gtkhtml2 ?= "1158"
-SRCREV_pn-guitartune ?= "11"
SRCREV_pn-gypsy ?= "134"
SRCREV_pn-hildon-1 ?= "14429"
-SRCREV_pn-icon-theme-neo ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-illume-keyboards-shr ?= "7bcdd55dc0cf6f3b50fd0226345592f538301b8a"
-SRCREV_pn-illume-theme-asu ?= "4881"
SRCREV_pn-illume-theme-freesmartphone ?= "b1b0f6adc59e6f72a3929771058e3750bf181bc5"
-SRCREV_pn-intone ?= "75"
-SRCREV_pn-intone-video ?= "12"
SRCREV_pn-intuition ?= "194"
SRCREV_pn-kismet ?= "2285"
SRCREV_pn-kismet-newcore ?= "2285"
SRCREV_pn-libcalenabler2 ?= "1410"
-SRCREV_pn-libdrm ?= "89cc98c0d5c1b43a883f13210c472339dde1a4cf"
-SRCREV_pn-libdrm_om-gta02 ?= "67a3eb2188a38a5000af0ad4ac3a0eba43cab574"
SRCREV_pn-libefso ?= "194"
SRCREV_pn-libfakekey ?= "1455"
-SRCREV_pn-libframeworkd-phonegui ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
-SRCREV_pn-libframeworkd-phonegui-efl ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
-SRCREV_pn-libframeworkd-phonegui-efl2 ?= "917226025c67b75def91e98ea923c2e550474a5b"
-SRCREV_pn-libframeworkd-phonegui-efl-theme-neo ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-libgdbus ?= "aeab6e3c0185b271ca343b439470491b99cc587f"
SRCREV_pn-libgee ?= "c21925bf1b714a2aa395192f7adbaeecf7a0e146"
SRCREV_pn-libgee-native ?= "c21925bf1b714a2aa395192f7adbaeecf7a0e146"
SRCREV_pn-libgsmd ?= "4505"
SRCREV_pn-libiac ?= "1590"
-SRCREV_pn-libjana ?= "749"
SRCREV_pn-libmodulo ?= "7d2f657d248bd86377e66c329aa6826459d406da"
-SRCREV_pn-libmokogsmd2 ?= "4334"
-SRCREV_pn-libmokojournal2 ?= "3473"
-SRCREV_pn-libmokopanelui2 ?= "4568"
-SRCREV_pn-libmokoui2 ?= "4695"
SRCREV_pn-libnl2 ?= "8808743839b0f459394ecd00cb0f7c1896c0ab7a"
SRCREV_pn-libowl ?= "277"
-SRCREV_pn-libphone-ui ?= "c9cb5c3ddcd04c5cd2c02214fbc7734b8452981c"
-SRCREV_pn-libphone-ui-shr ?= "acf4a496ed365fad77ab494bccda251141c1b57a"
-SRCREV_pn-libphone-utils ?= "665f27d6c3af092ae56f652c9fe6b5631b4d10db"
+SRCREV_pn-libphone-ui = "97fda168d8d5f4771267305ea0672b4bc7756957"
+SRCREV_pn-libphone-ui-shr = "46c991d348419f504775df2d602158a7dfdc9bf1"
SRCREV_pn-librfid ?= "2094"
SRCREV_pn-libsnmp-perl ?= "17367"
SRCREV_pn-libsynthesis ?= "70f0065aa3b085bdf059830f95e5b5766eecb0bb"
@@ -144,13 +106,6 @@ SRCREV_pn-linux-bfin ?= "3758"
SRCREV_pn-linux-eten ?= "ab2d414f4f13816af0ec0401b608133ca946624a"
SRCREV_pn-linux-hackndev-2.6 ?= "1308"
SRCREV_pn-linux-ixp4xx ?= "1089"
-SRCREV_pn-linux-openmoko-2.6.24 ?= "fb42ce6724576fc173faf8abfb04aa2c36d213b7"
-SRCREV_pn-linux-openmoko-2.6.28 ?= "8c65792a5c83c76d662a617a7c4e1ae8104bb6a5"
-SRCREV_pn-linux-openmoko-2.6.31 ?= "dd32737aa524e09c1d141a0e735dd58674552244"
-SRCREV_pn-linux-openmoko-2.6.32 ?= "04697d0e4011a0f2942411acff56f9bc9ca6c11a"
-SRCREV_pn-linux-openmoko-devel ?= "a15608f241a40b41fed5bffe511355c2067c4e88"
-SRCREV_pn-linux-openmoko-shr-devel ?= "a15608f241a40b41fed5bffe511355c2067c4e88"
-SRCREV_pn-linux-openmoko-shr-drm-devel ?= "e62a4ae1c6783f41b41a9ac3d258786586b65a40"
SRCREV_pn-linux-sgh-i900 ?= "7e5f8bd3864485e5fc66cb946e09f18b5a32cebc"
SRCREV_pn-llvm-gcc4 ?= "374"
SRCREV_pn-llvm-gcc4-cross ?= "374"
@@ -167,86 +122,32 @@ SRCREV_pn-matchbox-panel-2-icon-themes ?= "1907"
SRCREV_pn-matchbox-stroke ?= "1820"
SRCREV_pn-matchbox-terminal ?= "1612"
SRCREV_pn-matchbox-wm-2 ?= "2087"
-SRCREV_pn-mesa-dri ?= "c02cd82b463661def7842f910dc561313559df80"
-SRCREV_pn-mesa-dri_om-gta02 ?= "a8a1c12262998e5fa3a857eebf857c6d3a95f85e"
SRCREV_pn-midori ?= "400139644371c0b675723f9a986ddab4445a8794"
SRCREV_pn-mobile-broadband-provider-info ?= "bc536218490377ccbd09c4e5858d37c91c2f03f7"
SRCREV_pn-moblin-proto ?= "8f2cb524fe06555182c25b4ba3202d7b368ac0ce"
-SRCREV_pn-moko-gtk-engine ?= "4734"
-SRCREV_pn-mokoko ?= "127"
-SRCREV_pn-mokonnect ?= "113"
SRCREV_pn-mpd-alsa ?= "6952"
SRCREV_pn-mplayer-maemo ?= "342"
SRCREV_pn-msn-pecan ?= "e795b33b29d792f19fcf699275eb966dc68be257"
SRCREV_pn-multitap-pad ?= "373"
SRCREV_pn-mux ?= "72460e890dbb15edbf7dc193116be0dcf9794a8b"
-SRCREV_pn-navit ?= "2934"
-SRCREV_pn-navit-icons ?= "2927"
-SRCREV_pn-neod ?= "4617"
-SRCREV_pn-neomis ?= "6"
SRCREV_pn-net-snmp ?= "17367"
SRCREV_pn-netsurf ?= "3859"
-SRCREV_pn-numberx ?= "4"
-SRCREV_pn-numptyphysics ?= "109"
SRCREV_pn-oh-puzzles ?= "22"
SRCREV_pn-ohm ?= "edfe25d49d67884bf004de7ae0724c162bb5e65e"
SRCREV_pn-ologicd ?= "4a32af91a9479ebd4d1d39057354ac9904d74cbb"
SRCREV_pn-om-locations ?= "942e88a1b689ffe3f11a2d982cce389cc965b2ec"
-SRCREV_pn-om-neon ?= "68"
-SRCREV_pn-om-settings ?= "74"
-SRCREV_pn-omgps ?= "109"
-SRCREV_pn-omoney ?= "29"
-SRCREV_pn-ompower ?= "4727"
-SRCREV_pn-omview ?= "34"
SRCREV_pn-openbsc ?= "5e68183a201ab92f29cd2467df5209f7b351a66d"
SRCREV_pn-openbsc-onwaves ?= "0d9ed87d5c7d5b6e21dc3bbb282e215068742566"
SRCREV_pn-openezx-kernel ?= "43b844d1d38f0343272d3f0f844f80666186c526"
-SRCREV_pn-openmoko-agpsui ?= "7"
-SRCREV_pn-openmoko-alsa-scenarios ?= "4732"
-SRCREV_pn-openmoko-appearance ?= "3262"
-SRCREV_pn-openmoko-appmanager2 ?= "4530"
-SRCREV_pn-openmoko-browser2 ?= "4172"
-SRCREV_pn-openmoko-calculator2 ?= "3655"
-SRCREV_pn-openmoko-common2 ?= "3259"
-SRCREV_pn-openmoko-contacts2 ?= "419"
-SRCREV_pn-openmoko-dates2 ?= "703"
-SRCREV_pn-openmoko-dialer2 ?= "4364"
-SRCREV_pn-openmoko-feedreader2 ?= "3645"
-SRCREV_pn-openmoko-firststart2 ?= "3158"
SRCREV_pn-openmoko-footer ?= "2354"
-SRCREV_pn-openmoko-icon-theme-standard2 ?= "4232"
-SRCREV_pn-openmoko-icon-theme-standard2-qvga ?= "4232"
-SRCREV_pn-openmoko-mediaplayer2 ?= "4750"
-SRCREV_pn-openmoko-messages2 ?= "4340"
-SRCREV_pn-openmoko-panel-battery ?= "3360"
-SRCREV_pn-openmoko-panel-bt ?= "4331"
-SRCREV_pn-openmoko-panel-clock ?= "2567"
-SRCREV_pn-openmoko-panel-demo ?= "1622"
-SRCREV_pn-openmoko-panel-demo-simple ?= "1328"
-SRCREV_pn-openmoko-panel-gps ?= "4330"
-SRCREV_pn-openmoko-panel-gsm ?= "4335"
-SRCREV_pn-openmoko-panel-mainmenu ?= "2567"
-SRCREV_pn-openmoko-panel-memory ?= "3903"
-SRCREV_pn-openmoko-panel-usb ?= "3360"
-SRCREV_pn-openmoko-panel-wifi ?= "4344"
-SRCREV_pn-openmoko-sample2 ?= "3537"
-SRCREV_pn-openmoko-set-root-password ?= "4590"
-SRCREV_pn-openmoko-sound-theme-standard2 ?= "4271"
-SRCREV_pn-openmoko-tasks2 ?= "404"
SRCREV_pn-openmoko-terminal2 ?= "4782"
-SRCREV_pn-openmoko-theme-standard2 ?= "4338"
-SRCREV_pn-openmoko-theme-standard2-qvga ?= "3425"
-SRCREV_pn-openmoko-today2 ?= "4168"
-SRCREV_pn-openmoko-today2-folders ?= "3704"
-SRCREV_pn-openmoko-toolchain-scripts ?= "4913"
-SRCREV_pn-openmoko-worldclock2 ?= "3365"
SRCREV_pn-openmoocow ?= "39648419825cddfea1cb1321e552a12b71fede14"
SRCREV_pn-openocd ?= "517"
SRCREV_pn-openocd-native ?= "517"
-SRCREV_pn-opimd-utils ?= "7321c3f1a3cd781f9ed13ea3cac38879429dd420"
-SRCREV_pn-opkg ?= "446"
-SRCREV_pn-opkg-native ?= "519"
-SRCREV_pn-opkg-sdk ?= "446"
+SRCREV_pn-opimd-utils ?= "1872cdebe1209123710259e25cb8c8b47a627112"
+SRCREV_pn-opkg ?= "527"
+SRCREV_pn-opkg-native ?= "526"
+SRCREV_pn-opkg-sdk ?= "526"
SRCREV_pn-opkg-utils ?= "4578"
SRCREV_pn-opkg-utils-native ?= "4595"
SRCREV_pn-oprofileui ?= "173"
@@ -256,45 +157,33 @@ SRCREV_pn-osb-nrcit ?= "125"
SRCREV_pn-osb-nrcore ?= "126"
SRCREV_pn-packagekit ?= "96823118e98515dd41748e8c7bdb9cf7b1d4a95f"
SRCREV_pn-paroli ?= "bb9fb1969acdfbaa48b55902675a6d8949014c6d"
-SRCREV_pn-phonefsod ?= "76d8cc085946e77e3fc27ef12a9d18411324747b"
-SRCREV_pn-phoneui-apps ?= "c27e620302d0ea956da777f76a4aa217ae8366c6"
-SRCREV_pn-phoneuid ?= "215e0b6e021e27cd042d675ec91d501a03211091"
+SRCREV_pn-phonefsod ?= "692a5b6b8a7d2cf6af6c4bc93e97cf041b4d805c"
+SRCREV_pn-phoneui-apps ?= "d349e764400d7a4eaaa12f359d6c64b3ca55faaf"
+SRCREV_pn-phoneuid ?= "a466c58560222c6b7ab7c9554c8c5b66ed017bd7"
SRCREV_pn-portaudio-v19 ?= "1387"
SRCREV_pn-psplash ?= "249"
SRCREV_pn-pty-forward-native ?= "4662b55fdba528bb5b3349f83055bf236af5d63b"
-SRCREV_pn-pyefl-sudoku ?= "49"
SRCREV_pn-pygsm ?= "976477f6b403f422b4ea730f71ebf409f6671141"
-SRCREV_pn-pyphonelog ?= "45783c7fd5ec274421bf87a5cdb372c122370fda"
+SRCREV_pn-pyphonelog ?= "b70058755df1f12cd48db51fa4cd933c027e20c6"
SRCREV_pn-pythm ?= "19"
SRCREV_pn-python-coherence ?= "1161"
SRCREV_pn-python-connexion ?= "1439"
SRCREV_pn-python-formencode ?= "3148"
SRCREV_pn-python-gsmd ?= "148"
-SRCREV_pn-python-phoneutils ?= "f1377146556da8a68a84cf10a5f516c5f7b6015b"
SRCREV_pn-python-pycrypto ?= "d087280d7e9643a3e3f68f209932119fe6738b3c"
SRCREV_pn-python-pyyaml ?= "344"
QEMUSRCREV ?= "4242"
SRCREV_pn-qemu ?= "${QEMUSRCREV}"
SRCREV_pn-qemu-native ?= "${QEMUSRCREV}"
SRCREV_pn-qemu-sdk ?= "${QEMUSRCREV}"
-SRCREV_pn-qi ?= "c38b062a609f1442e6a9e13005cfbdfd59a5ac0d"
-SRCREV_pn-qi-ubi ?= "c38b062a609f1442e6a9e13005cfbdfd59a5ac0d"
SRCREV_pn-qtwebkit-performance-utilities ?= "27a630a74518ebb7810ed5886182e676b36c07a5"
SRCREV_pn-qtwebkit-performance-utilities-e ?= "27a630a74518ebb7810ed5886182e676b36c07a5"
-SRCREV_pn-remoko ?= "121"
-SRCREV_pn-remoko-server ?= "121"
-SRCREV_pn-s3c24xx-gpio ?= "4949"
-SRCREV_pn-s3c64xx-gpio ?= "4949"
-SRCREV_pn-serial-forward ?= "4662b55fdba528bb5b3349f83055bf236af5d63b"
+SRCREV_pn-serial-forward ?= "50cf4ff2198589a8db369789fc038604a892a54d"
SRCREV_pn-settings-daemon ?= "2006"
SRCREV_pn-shr-config ?= "37dd7ac950e2bfd438801faf34c29fccfdbbaccf"
-SRCREV_pn-shr-contacts ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
-SRCREV_pn-shr-dialer ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
-SRCREV_pn-shr-installer ?= "f17fa104639113fb0d3212b6bba366c092854cde"
-SRCREV_pn-shr-launcher ?= "102"
-SRCREV_pn-shr-messages ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
-SRCREV_pn-shr-settings ?= "ef06fe86c49958673889671c46682c0b2f1d74d7"
-SRCREV_pn-shr-specs ?= "63dd65685a5ab8a304e6c9e12320f07ac58a0aca"
+SRCREV_pn-shr-installer ?= "8608816ea1a1ac14b6e9faaa3685dd2b6450e889"
+SRCREV_pn-shr-settings ?= "c0315c80f3236f1a9ddf23f38520bc88ed173ffd"
+SRCREV_pn-shr-specs ?= "d8f0dc85f1a7a6c0c6d24755f3770a55229621ae"
SRCREV_pn-shr-splash ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
SRCREV_pn-shr-splash-theme-dontpanic ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-shr-splash-theme-handy ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
@@ -306,7 +195,6 @@ SRCREV_pn-shr-theme ?= "730da87ad75c814c16c856ca138605d985b6efdb"
SRCREV_pn-shr-theme-gtk-e17lookalike ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-shr-today ?= "7b69649a9df0e85f0c0f7985fd1d93543c3b11e2"
SRCREV_pn-shr-wizard ?= "24450cba257e7057045ad576530f158a03bd0f8b"
-SRCREV_pn-sjf2410-linux-native ?= "4268"
SRCREV_pn-socketcan-modules ?= "917"
SRCREV_pn-socketcan-utils-test ?= "917"
SRCREV_pn-sphyrna-python ?= "45"
@@ -326,15 +214,13 @@ SRCREV_pn-webkit-efl ?= "3a5ee77664c898ed51a2b2d5759822f8c0a06472"
SRCREV_pn-wesnoth ?= "39828"
SRCREV_pn-wlan-ng-modules ?= "1859"
SRCREV_pn-wlan-ng-utils ?= "1859"
-SRCREV_pn-wmiconfig ?= "5394"
-SRCREV_pn-xf86-video-glamo ?= "9918e082104340da42eb92b6bdefce4d9266a6a4"
SRCREV_pn-xoo ?= "1971"
SRCREV_pn-xserver-kdrive-glamo ?= "9b28d998424c77fbc057dd3a022ccbb122793a52"
# Enlightenment Foundation Libraries
# Caution: This is not alphabetically, but (roughly) dependency-sorted.
# Please leave it like that.
-EFL_SRCREV ?= "45765"
+EFL_SRCREV ?= "47344"
SRCREV_pn-edb-native ?= "${EFL_SRCREV}"
SRCREV_pn-edb ?= "${EFL_SRCREV}"
SRCREV_pn-eina-native ?= "${EFL_SRCREV}"
@@ -353,11 +239,8 @@ SRCREV_pn-edje-sdk ?= "${EFL_SRCREV}"
SRCREV_pn-edje ?= "${EFL_SRCREV}"
SRCREV_pn-elementary ?= "${EFL_SRCREV}"
SRCREV_pn-emotion ?= "${EFL_SRCREV}"
-SRCREV_pn-etk-native ?= "${EFL_SRCREV}"
-SRCREV_pn-etk ?= "${EFL_SRCREV}"
SRCREV_pn-ewl ?= "${EFL_SRCREV}"
SRCREV_pn-epeg ?= "${EFL_SRCREV}"
-SRCREV_pn-epsilon ?= "${EFL_SRCREV}"
SRCREV_pn-epdf ?= "${EFL_SRCREV}"
SRCREV_pn-esmart ?= "${EFL_SRCREV}"
SRCREV_pn-efreet ?= "${EFL_SRCREV}"
@@ -371,6 +254,7 @@ SRCREV_pn-imlib2 ?= "${EFL_SRCREV}"
SRCREV_pn-libeweather ?= "${EFL_SRCREV}"
# Enlightenment Bindings
+SRCREV_pn-libeflvala ?= "${EFL_SRCREV}"
SRCREV_pn-eflpp ?= "${EFL_SRCREV}"
SRCREV_pn-python-evas ?= "${EFL_SRCREV}"
SRCREV_pn-python-ecore ?= "${EFL_SRCREV}"
@@ -378,9 +262,7 @@ SRCREV_pn-python-edje ?= "${EFL_SRCREV}"
SRCREV_pn-python-elementary ?= "${EFL_SRCREV}"
SRCREV_pn-python-edbus ?= "${EFL_SRCREV}"
SRCREV_pn-python-emotion ?= "${EFL_SRCREV}"
-SRCREV_pn-python-epsilon ?= "${EFL_SRCREV}"
SRCREV_pn-python-ewl ?= "${EFL_SRCREV}"
-SRCREV_pn-python-etk ?= "${EFL_SRCREV}"
# Enlightenment Applications
SRCREV_pn-edje-editor ?= "${EFL_SRCREV}"
@@ -388,6 +270,7 @@ SRCREV_pn-edje-player ?= "${EFL_SRCREV}"
SRCREV_pn-edje-viewer ?= "${EFL_SRCREV}"
SRCREV_pn-elementary-alarm ?= "${EFL_SRCREV}"
SRCREV_pn-elementary-sms ?= "${EFL_SRCREV}"
+SRCREV_pn-elmdentica ?= "${EFL_SRCREV}"
SRCREV_pn-emphasis ?= "${EFL_SRCREV}"
SRCREV_pn-ephoto ?= "${EFL_SRCREV}"
SRCREV_pn-eve ?= "${EFL_SRCREV}"
@@ -414,4 +297,5 @@ SRCREV_pn-illume-keyboard-default ?= "${EFL_SRCREV}"
SRCREV_pn-exalt ?= "${EFL_SRCREV}"
SRCREV_pn-exalt-client ?= "${EFL_SRCREV}"
+
require conf/distro/include/sane-srcrevs-fso.inc
diff --git a/conf/distro/include/sane-toolchain-eglibc.inc b/conf/distro/include/sane-toolchain-eglibc.inc
index 4c5f44ff8e..1e370d0b8c 100644
--- a/conf/distro/include/sane-toolchain-eglibc.inc
+++ b/conf/distro/include/sane-toolchain-eglibc.inc
@@ -7,6 +7,14 @@ FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-reg
FULL_OPTIMIZATION_pn-perl = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O1"
FULL_OPTIMIZATION_sparc = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
+# JaMa: I promise to report bug upstream, but as it can take a while to fix it, I'll switch to -O2 here
+# Tested with gcc-4.4.2 and gcc-4.4.3 on armv4t and armv5te and it fails with -Os, with gcc-4.3.3 it works OK with -Os
+# Here is testcase, but you have to rebuild whole libqtxml to test it
+# http://lists.shr-project.org/pipermail/shr-devel/2010-February/002169.html
+FULL_OPTIMIZATION_pn-qt4-x11-free = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
+# This I've seen only on armv4t, it segfaults when called from pisi, but whole test unit suite can pass
+FULL_OPTIMIZATION_pn-libsyncml = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
+
BUILD_OPTIMIZATION_pn-perl = "-O1"
BUILD_OPTIMIZATION_sparc = "-O2"
diff --git a/conf/distro/include/shr-autorev.inc b/conf/distro/include/shr-autorev.inc
index 6a8ef29fe2..a73e213a78 100644
--- a/conf/distro/include/shr-autorev.inc
+++ b/conf/distro/include/shr-autorev.inc
@@ -1,9 +1,5 @@
# SHR autorev include
-SRCREV_pn-frameworkd-config-shr = "${AUTOREV}"
-SRCREV_pn-frameworkd-config-shr_FSO_REV = "${AUTOREV}"
-SRCREV_pn-frameworkd-config-shr_SHR_REV = "${AUTOREV}"
-
-SRCREV_pn-alsa-scenarii-shr = "${AUTOREV}"
+SRCREV_pn-e-wm-config-illume2-shr = "${AUTOREV}"
SRCREV_pn-shr-settings = "${AUTOREV}"
SRCREV_pn-shr-specs = "${AUTOREV}"
SRCREV_pn-phoneui-apps = "${AUTOREV}"
@@ -16,5 +12,7 @@ SRCREV_pn-opimd-utils = "${AUTOREV}"
SRCREV_pn-shr-installer = "${AUTOREV}"
SRCREV_pn-shr-wizard = "${AUTOREV}"
+# additional package (built only with task-shr-feed) with live development
SRCREV_pn-ventura = "${AUTOREV}"
SRCREV_pn-emtooth = "${AUTOREV}"
+SRCREV_pn-fltkspacetrader = "${AUTOREV}"
diff --git a/conf/distro/include/slugos.inc b/conf/distro/include/slugos.inc
index 10a2bc4a02..e7ecc80b12 100644
--- a/conf/distro/include/slugos.inc
+++ b/conf/distro/include/slugos.inc
@@ -44,7 +44,7 @@ USE_NLS_glib-2.0 = "yes"
USE_NLS_glib-2.0-native = "yes"
USE_NLS_gcc-cross = "no"
-INHERIT += "package_ipk debian testlab packaged-staging"
+INHERIT += "package_ipk debian testlab packaged-staging siteinfo"
# FULL_OPTIMIZATION
# Optimization settings. Os works fine and is significantly better than O2.
diff --git a/conf/distro/kaeilos.conf b/conf/distro/kaeilos.conf
index ee187ba0c9..eb12d2ed04 100644
--- a/conf/distro/kaeilos.conf
+++ b/conf/distro/kaeilos.conf
@@ -2,6 +2,7 @@
#@TYPE: Distribution
#@NAME: KaeilOS(R) - http://www.kaeilos.com
#@DESCRIPTION: KaeilOS Linux Distribution for Kernel 2.6 based devices
+# based on Angstrom configuration file
#@MAINTAINER: Marco Cavallini <m.cavallini@koansoftware.com>
#@VERSION: 11-01-2010
#
diff --git a/conf/distro/maemo5-compat.conf b/conf/distro/maemo5-compat.conf
new file mode 100644
index 0000000000..25697237cb
--- /dev/null
+++ b/conf/distro/maemo5-compat.conf
@@ -0,0 +1,220 @@
+#@--------------------------------------------------------------------
+#@TYPE: Distribution
+#@NAME: Maemo5-compatible
+#@DESCRIPTION: Distribution which allows building packages compatible to Maemo5
+#@--------------------------------------------------------------------
+
+# Note: This is not a complete distribution. Just some definitions to make
+# it possible to build packages that are compatible to Nokia's Maemo5 distribution.
+# You should *not* replace core libraries of the operating system (glibc,
+# glib, gtk+, ..) with those you build in OE.
+#
+# Furthermore it may be possible that OpenEmbedded lacks specific versions
+# of some packages. If you encounter such a problem please provide a recipe
+# or file a bug!
+
+DISTRO_NAME = "maemo5-compat"
+DISTRO_VERSION = "test-${DATE}"
+DISTRO_TYPE = "debug"
+#DISTRO_TYPE = "release"
+
+# Needed for e.g. libffi builds on armv6
+OVERRIDES .= ":${FEED_ARCH}"
+
+# Set the toolchain type (internal, external) and brand (generic, csl etc.)
+TOOLCHAIN_TYPE ?= "internal"
+TOOLCHAIN_BRAND ?= ""
+
+LIBC = "glibc"
+require conf/distro/include/angstrom-glibc.inc
+
+INHERIT += "package_deb debian"
+TARGET_OS = "linux-gnueabi"
+
+TARGET_FPU_nokia770 = "soft"
+TARGET_FPU_nokia800 = "hard"
+TARGET_FPU_nokia900 = "hard"
+
+DPKG_ARCH_nokia770 = "armel"
+DPKG_ARCH_nokia800 = "armel"
+DPKG_ARCH_nokia900 = "armel"
+
+FEED_ARCH_nokia770 = "armv5te"
+FEED_ARCH_nokia800 = "armv6"
+FEED_ARCH_nokia900 = "armv7"
+
+#Make sure we use 2.6 on machines with a 2.4/2.6 selector
+KERNEL = "kernel26"
+MACHINE_KERNEL_VERSION = "2.6"
+
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial"
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc-intermediate:gcc-cross-intermediate"
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc:gcc-cross"
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}g++:gcc-cross"
+
+PREFERRED_PROVIDER_virtual/arm-linux-gnueabi-binutils = "binutils-cross"
+PREFERRED_PROVIDER_linux-libc-header = "linux-libc-headers"
+PREFERRED_PROVIDER_virtual/libx11 = "libx11"
+PREFERRED_PROVIDER_gconf ?= "gconf-dbus"
+PREFERRED_PROVIDER_util-linux = "util-linux"
+
+PREFERRED_VERSION_autoconf-native = "2.63"
+PREFERRED_VERSION_automake-native = "1.11.1"
+
+PREFERRED_VERSION_binutils = "2.18.50.0.7"
+PREFERRED_VERSION_binutils-cross = "2.18.50.0.7"
+
+GCCVERSION = "4.2.1+csl-arm-2007q3-53"
+PREFERRED_VERSION_gcc = "${GCCVERSION}"
+PREFERRED_VERSION_gcc-cross = "${GCCVERSION}"
+PREFERRED_VERSION_gcc-cross-initial = "${GCCVERSION}"
+PREFERRED_VERSION_gcc-cross-intermediate = "${GCCVERSION}"
+
+# Use recent enough version of the headers to let HAL build successfully.
+PREFERRED_VERSION_linux-libc-headers = "2.6.25"
+
+PREFERRED_VERSION_glibc = "2.5"
+PREFERRED_VERSION_glibc-initial = "2.5"
+
+PREFERRED_VERSION_libtool-native = "2.2.6b"
+PREFERRED_VERSION_libtool-cross = "2.2.6b"
+PREFERRED_VERSION_libtool = "2.2.6b"
+
+require conf/distro/include/sane-srcrevs.inc
+
+PREFERRED_VERSION_fontconfig = "2.6.0"
+PREFERRED_VERSION_freetype = "2.3.6"
+PREFERRED_VERSION_freetype-native = "2.3.6"
+PREFERRED_VERSION_cairo = "1.8.0"
+PREFERRED_VERSION_glib-2.0 = "2.20.3"
+PREFERRED_VERSION_pango = "1.24.4"
+PREFERRED_VERSION_atk = "1.20.0"
+PREFERRED_VERSION_gtk+ = "2.14.2"
+PREFERRED_VERSION_libpng = "1.2.37"
+PREFERRED_VERSION_expat = "1.95.7"
+
+# only dbus-glib 0.74 works with older dbus 1.0.x
+PREFERRED_VERSION_dbus = "1.2.3"
+PREFERRED_VERSION_dbus-glib = "0.78"
+
+PREFERRED_VERSION_gnome-vfs = "2.22.0"
+
+# 3.9.1 would be correct
+PREFERRED_VERSION_gtkhtml-3.8 = "3.8.2"
+PREFERRED_VERSION_libxml2 = "2.7.3"
+# 2.16 would be correct
+PREFERRED_VERSION_gconf = "2.6.1"
+
+# gstreamer
+PREFERRED_VERSION_gstreamer = "0.10.25"
+PREFERRED_VERSION_gst-plugins-good = "0.10.15"
+PREFERRED_VERSION_gst-plugins-base = "0.10.25"
+PREFERRED_VERSION_gst-plugins-bad = "0.10.14"
+
+PREFERRED_VERSION_bluez-libs = "4.56"
+
+PREFERRED_PROVIDER_virtual/db = "db"
+PREFERRED_PROVIDER_virtual/db-native = "db-native"
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+
+PREFERRED_PROVIDER_virtual/libsdl = "libsdl-x11"
+PREFERRED_VERSION_libsdl-x11 = "1.2.11"
+PREFERRED_VERSION_libsdl-image = "1.2.3"
+PREFERRED_VERSION_libsdl-mixer = "1.2.6"
+
+PREFERRED_PROVIDER_xserver = "xserver-kdrive"
+
+PREFERRED_VERSION_libxrandr = "1.2.1"
+PREFERRED_VERSION_xrandr = "1.2.0"
+PREFERRED_VERSION_randrproto = "1.2.1"
+
+PREFERRED_VERSION_libgnomeui = "2.18.1"
+PREFERRED_VERSION_gnomevfs = "2.16.3"
+
+PREFERRED_PROVIDER_gtk+ = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ani = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-gif = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ico = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-png = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ras = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-tga = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm = "gtk+"
+
+PREFERRED_PROVIDER_gconf = "gconf-dbus"
+
+PREFERRED_VERSION_pixman = "0.13.2"
+
+PREFERRED_PROVIDER_virtual/libqte2 = "qte-mt"
+PREFERRED_PROVIDER_avahi = "avahi"
+
+PREFERRED_VERSION_avahi = "0.6.20"
+
+PREFERRED_VERSION_libglade = "2.6.2"
+
+PREFERRED_VERSION_gpe-scap = "1.4"
+
+# various Maemo4 specific libraries
+PREFERRED_VERSION_mce-dev = "1.8.15"
+PREFERRED_VERSION_libosso = "2.23"
+PREFERRED_VERSION_libhildon = "2.2.0"
+PREFERRED_VERSION_libhildonmime = "2.1.3"
+PREFERRED_VERSION_libhildonfm = "2.28"
+PREFERRED_VERSION_hildon-thumbnail = "3.0.41"
+
+PREFERRED_VERSION_shared-mime-info = "0.30"
+
+# Java stuff
+PREFERRED_PROVIDER_midpath = "midpath-maemo"
+PREFERRED_PROVIDER_midpath-backend-gtk = "midpath-backend-gtk-hildon"
+
+# Need jamvm-initial since cacao 0.98 seems to get miscompiled with newer GCCs.
+PREFERRED_PROVIDER_virtual/java-initial ?= "jamvm-initial"
+
+PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native"
+
+PREFERRED_PROVIDER_classpath = "classpath"
+PREFERRED_VERSION_classpath = "0.98"
+
+PREFERRED_PROVIDER_swt3.4-gtk = "swt3.4-gtk-hildon"
+PREFERRED_VERSION_swt3.4-gtk-hildon = "3.4"
+
+# Does not build with later versions
+PREFERRED_VERSION_fakeroot-native = "1.9.6"
+
+# newer Versions needs newer autotools we cant relay on
+PREFERRED_VERSION_guile-native = "1.8.2"
+
+# WARNING: If you change these values after the respective package has
+# been built the change will have no effect. Edit the package's file in
+# ${STAGING}/pkgdata/runtime then.
+PKG_ncurses = "libncurses5"
+PKG_ncurses-tools = "ncurses-bin"
+PKG_ncurses-terminfo = "ncurses-base"
+
+PKG_gtk+ = "libgtk2.0-0"
+PKG_pango = "libpango1.0-0"
+PKG_atk = "libatk1.0-0"
+PKG_glib-2.0 = "libglib2.0-0"
+PKG_gconf = "libgconf2-6"
+DEBIANNAME_dbus_pn-dbus = "dbus"
+PKG_libhildon = "libhildon1"
+DEBIANNAME_eds-dbus_pn-libedataserver-1.2 = "libedataserver"
+
+PKG_zlib = "zlib1g"
+PKG_libglade = "libglade2-0"
+PKG_libsoup = "libsoup2.2-8"
+
+PKG_libsdl-mixer = "libsdl-mixer1.2"
+PKG_libsdl-image = "libsdl-image1.2"
+PKG_libsdl-directfb = "libsdl1.2"
+PKG_libsdl-ttf = "libsdl-ttf2.0-0"
+PKG_libsdl-gfx = "libsdl-gfx1.2-4"
+
+PKG_bluez-libs = "libbluetooth2"
+PKG_libgcc = "libgcc1"
diff --git a/conf/distro/shr.conf b/conf/distro/shr.conf
index 6872bb6abf..db15a4d1c2 100644
--- a/conf/distro/shr.conf
+++ b/conf/distro/shr.conf
@@ -100,7 +100,7 @@ ILLUME_THEME = "e-wm-theme-illume-gry"
# Use bluetooth 4.0
DISTRO_BLUETOOTH_MANAGER = "bluez4"
# We want images supporting the following features (for task-base)
-DISTRO_FEATURES = "nfs smbfs wifi ppp alsa ext2 vfat pcmcia usbgadget usbhost pci"
+DISTRO_FEATURES = "wifi ppp ext2 vfat bluetooth usbgadget usbhost"
# Following features are for ARM and E500 based machines
DISTRO_FEATURES += "eabi"
@@ -154,6 +154,10 @@ OVERRIDES = "local:${MACHINE}:${MACHINE_CLASS}:${DISTRO}:${TARGET_OS}:${TARGET_A
# TOOLCHAIN
#############################################################################
LIBC ?= "eglibc"
+PREFERRED_BINUTILS ?= "2.20.1"
+PREFERRED_GCC_VERSION ?= "4.4.3"
+PREFERRED_VERSION_eglibc ?= "2.11"
+PREFERRED_VERSION_eglibc-initial ?= "2.11"
require conf/distro/include/sane-toolchain.inc
#############################################################################
@@ -194,15 +198,3 @@ DISTRO_EXTRA_RDEPENDS += "\
angstrom-libc-fixup-hack \
${DISTRO_EXTRA_APPS} \
"
-
-# Additional content II (can be masked with BAD_RECOMMENDATIONS)
-DISTRO_EXTRA_RRECOMMENDS += " \
- kernel-module-vfat \
- kernel-module-ext2 \
- kernel-module-ext3 \
- kernel-module-af-packet \
- openssh-sftp-server \
-"
-
-# avahi-daemon \
-# avahi-autoipd \
diff --git a/conf/distro/slugos.conf b/conf/distro/slugos.conf
index d9b00f41a8..4b77cf8f6a 100644
--- a/conf/distro/slugos.conf
+++ b/conf/distro/slugos.conf
@@ -14,6 +14,7 @@ ARM_INSTRUCTION_SET = "arm"
TARGET_OS = "linux-gnueabi"
IPKG_VARIANT ?= "opkg-nogpg-nocurl-slugos"
PREFERRED_PROVIDER_opkg ?= "opkg-nogpg-nocurl-slugos"
+PREFERRED_PROVIDER_virtual/update-alternatives ?= "opkg-nogpg-nocurl-slugos"
IMAGE_INITSCRIPTS ?= "initscripts-slugos"
require conf/distro/include/slugos.inc
diff --git a/conf/local.conf.sample b/conf/local.conf.sample
index 643ae0b611..2cff53bc1b 100644
--- a/conf/local.conf.sample
+++ b/conf/local.conf.sample
@@ -35,12 +35,6 @@ BBMASK = ""
# have to set PATH in your environment to make sure BitBake finds additional binaries.
# ASSUME_PROVIDED += "virtual/${TARGET_PREFIX}gcc virtual/libc"
-# Uncomment this if you're building for an arch that uses emulated locale
-# generation under qemu (mainly arm glibc) and have an external gcc 3.x compiler
-# that OE recognises. This will mean the gcc-native build is skipped, speeding
-# builds up.
-# ASSUME_PROVIDED += "gcc3-native"
-
# Uncomment this if you are building Linux 2.4 Embedix kernels.
# i.e. openzaurus-sa-2.4.18 and openzaurus-pxa-2.4.18 - and don't forget
# to rename the binaries as instructed in the Wiki.
diff --git a/conf/machine/archos5.conf b/conf/machine/archos5.conf
index 8640912b0f..e4fdc95545 100644
--- a/conf/machine/archos5.conf
+++ b/conf/machine/archos5.conf
@@ -1,6 +1,6 @@
#@TYPE: Machine
#@NAME: OMAP3 based Archos 5
-#@DESCRIPTION: Machine configuration for the Archos 5
+#@DESCRIPTION: Machine configuration for the Archos 5 (Gen6)
TARGET_ARCH = "arm"
require conf/machine/include/omap3.inc
@@ -35,7 +35,7 @@ EXTRA_IMAGECMD_jffs2 = "-lnp "
SERIAL_CONSOLE = "115200 ttyS2"
-CMDLINE = "root=/dev/sda1 rw init=/sbin/init console=ttyS2,115200n8 mem=128M nohz=off"
+CMDLINE = "root=/dev/sda1 rw init=/sbin/init console=ttyS2,115200n8 mem=128M nohz=off omapfb.vram=3686400"
MACHINE_FEATURES = "kernel26 apm usbgadget usbhost keyboard vfat ext2 screen touchscreen wifi"
diff --git a/conf/machine/archos5it.conf b/conf/machine/archos5it.conf
new file mode 100644
index 0000000000..0a1989a5e3
--- /dev/null
+++ b/conf/machine/archos5it.conf
@@ -0,0 +1,41 @@
+#@TYPE: Machine
+#@NAME: OMAP3 based Archos 5 IT
+#@DESCRIPTION: Machine configuration for the Archos 5 IT (Gen7)
+
+TARGET_ARCH = "arm"
+require conf/machine/include/omap3.inc
+
+ASSUME_PROVIDED += "u-boot"
+
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+XSERVER = "xserver-xorg \
+ xf86-input-evdev \
+ xf86-input-mouse \
+ xf86-input-tslib \
+ xf86-video-omapfb \
+ xf86-input-keyboard"
+
+#What is the correct one, both seem in use?
+MACHINE_GUI_CLASS = "bigscreen"
+GUI_MACHINE_CLASS = "bigscreen"
+
+#800 * 480 Widescreen
+MACHINE_DISPLAY_WIDTH_PIXELS = "800"
+MACHINE_DISPLAY_HEIGHT_PIXELS = "480"
+
+KERNEL_IMAGETYPE = "zImage"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-omap-archos"
+
+# Ship all kernel modules
+MACHINE_EXTRA_RRECOMMENDS = "kernel-modules"
+
+IMAGE_FSTYPES += "tar.bz2"
+EXTRA_IMAGECMD_jffs2 = "-lnp "
+
+SERIAL_CONSOLE = "115200 ttyS2"
+
+CMDLINE = "root=/dev/sda1 rw init=/sbin/init console=ttyS2,115200n8 mem=256M nohz=off omapfb.vram=3686400 extrabaud=1000000"
+
+MACHINE_FEATURES = "kernel26 apm alsa bluetooth usbgadget usbhost keyboard vfat ext2 screen touchscreen wifi"
+
diff --git a/conf/machine/bug.conf b/conf/machine/bug.conf
index d79cf15129..e45629d191 100644
--- a/conf/machine/bug.conf
+++ b/conf/machine/bug.conf
@@ -3,7 +3,7 @@
#@DESCRIPTION: Machine configuration for the BUG base unit.
TARGET_ARCH = "arm"
-MACHINE_EXTRA_RRECOMMENDS = "marvell-gspi-fw marvell-sdio-fw"
+MACHINE_EXTRA_RRECOMMENDS = "marvell-gspi-fw marvell-sdio-fw kernel-modules"
PREFERRED_PROVIDER_virtual/kernel = "linux-bug"
MACHINE_FEATURES = "kernel26 screen touchscreen hotplug alsa wifi usbhost usbgadget"
@@ -15,6 +15,9 @@ require conf/machine/include/tune-arm1136jf-s.inc
KERNEL_IMAGETYPE = "uImage"
+MACHINE_DISPLAY_WIDTH_PIXELS = "320"
+MACHINE_DISPLAY_HEIGHT_PIXELS = "240"
+
PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
XSERVER = "xserver-xorg \
xf86-input-evdev \
diff --git a/conf/machine/bug20.conf b/conf/machine/bug20.conf
new file mode 100644
index 0000000000..dbc1faf6ea
--- /dev/null
+++ b/conf/machine/bug20.conf
@@ -0,0 +1,47 @@
+#@TYPE: Machine
+#@NAME: BUG 2.0
+#@DESCRIPTION: Machine configuration for the BUG 2.0 board (OMAP3530 based)
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+XSERVER = "xserver-xorg \
+ xserver-xorg-extension-dri \
+ xserver-xorg-extension-glx \
+ xf86-input-evdev \
+ xf86-input-mouse \
+ xf86-video-omapfb \
+ xf86-input-keyboard"
+
+# Only has DVI connector for external screen
+GUI_MACHINE_CLASS = "bigscreen"
+
+require conf/machine/include/omap3.inc
+
+# this kernel is not provided in OE yet
+PREFERRED_PROVIDER_virtual/kernel = "linux-omap-hah"
+
+IMAGE_FSTYPES += "tar.bz2"
+
+SERIAL_CONSOLE = "115200 ttyS2"
+
+UBOOT_MACHINE = "omap3_bug_config"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# From dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: logical eraseblock size: 129024 bytes
+# from ubiattach stdout:
+# UBI device number 0, total 1996 LEBs
+MKUBIFS_ARGS = "-m 2048 -e 129024 -c 1996"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# from dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: physical eraseblock size: 131072 bytes (128 KiB)
+# UBI: sub-page size: 512
+UBINIZE_ARGS = "-m 2048 -p 128KiB -s 512"
+
+PREFERRED_VERSION_u-boot = "git"
+
+# and sdio
+MACHINE_FEATURES = "kernel26 screen apm usbgadget usbhost vfat alsa"
diff --git a/conf/machine/ea3250.conf b/conf/machine/ea3250.conf
new file mode 100644
index 0000000000..50099a2c4b
--- /dev/null
+++ b/conf/machine/ea3250.conf
@@ -0,0 +1,27 @@
+#@TYPE: Machine
+#@NAME: Embedded Artists LPC3250 machine
+#@DESCRIPTION: Machine configuration for Embedded Artists LPC3250 development board
+#@WEBSITE: http://www.embeddedartists.com/products/kits/lpc3250_kit.php
+
+TARGET_ARCH = "arm"
+
+require conf/machine/include/tune-arm926ejs.inc
+
+MACHINE_KERNEL_PR = "r0"
+
+MACHINE_FEATURES = "kernel26 usbhost ext2 vfat"
+MACHINE_TASK_PROVIDER = "task-base"
+
+USE_DEVFS = "0"
+
+PREFERRED_PROVIDER_virtual/bootloader = ""
+PREFERRED_PROVIDER_virtual/kernel = "linux-ea3250"
+PREFERRED_VERSION_linux-ea3250 = "2.6.27.8"
+
+IMAGE_DEVICE_TABLES = "files/device_table-slugos.txt"
+IMAGE_FSTYPES = "tar.gz"
+SERIAL_CONSOLE = "ttyS0 115200"
+
+KERNEL_IMAGETYPE = "uImage"
+UBOOT_ENTRYPOINT = "0x80008000"
+UBOOT_LOADADDRESS = "0x80008000"
diff --git a/conf/machine/eee701.conf b/conf/machine/eee701.conf
index 0c4b965655..b08ac6f2d7 100644
--- a/conf/machine/eee701.conf
+++ b/conf/machine/eee701.conf
@@ -6,20 +6,21 @@
require i686-generic.conf
-PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
-PREFERRED_PROVIDER_virtual/libgl ?= "mesa-dri"
-MACHINE_DRI_MODULES ?= "i915"
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+PREFERRED_PROVIDER_virtual/libgl = "mesa-dri"
+MACHINE_DRI_MODULES = "i915"
MACHINE_FEATURES +=" wifi alsa "
MACHINE_DISPLAY_WIDTH_PIXELS = "800"
MACHINE_DISPLAY_HEIGHT_PIXELS = "480"
MACHINE_DISPLAY_ORIENTATION = "0"
-XSERVER ?= "xserver-xorg \
+XSERVER = "xserver-xorg \
xf86-video-intel \
xf86-input-evdev \
- xf86-input-keyboard \
- xf86-input-mouse \
- xf86-input-synaptics"
+ xf86-input-keyboard \
+ xf86-input-mouse \
+ xf86-input-synaptics \
+ "
IMAGE_FSTYPES += "tar.gz"
diff --git a/conf/machine/hawkboard.conf b/conf/machine/hawkboard.conf
index ae53a53377..7251de70c1 100644
--- a/conf/machine/hawkboard.conf
+++ b/conf/machine/hawkboard.conf
@@ -11,4 +11,19 @@ UBOOT_LOADADDRESS = "0xc0008000"
MACHINE_FEATURES = "kernel26 serial ethernet ide screen"
+# do ubiattach /dev/ubi_ctrl -m 4
+# From dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: logical eraseblock size: 129024 bytes
+# from ubiattach stdout:
+# UBI device number 0, total 960 LEBs
+MKUBIFS_ARGS = "-m 2048 -e 129024 -c 960"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# from dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: physical eraseblock size: 131072 bytes (128 KiB)
+# UBI: sub-page size: 512
+UBINIZE_ARGS = "-m 2048 -p 128KiB -s 512"
+
SERIAL_CONSOLE = "115200 ttyS2"
diff --git a/conf/machine/imote2.conf b/conf/machine/imote2.conf
new file mode 100644
index 0000000000..06a4fbf61a
--- /dev/null
+++ b/conf/machine/imote2.conf
@@ -0,0 +1,15 @@
+#@TYPE: Machine
+#@Name: Crossbow iMote2
+#@DESCRIPTION: Machine configuration for Crossbow iMote 2
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux"
+
+PACKAGE_EXTRA_ARCHS = " iwmmxt"
+
+require conf/machine/include/tune-xscale.inc
+
+# used by opie-collections.inc
+ROOT_FLASH_SIZE ?= "32"
+
+MACHINE_FEATURES = "kernel26 usbgadget alsa iwmmxt"
diff --git a/conf/machine/include/davinci.inc b/conf/machine/include/davinci.inc
index a262059d45..2d744e9897 100644
--- a/conf/machine/include/davinci.inc
+++ b/conf/machine/include/davinci.inc
@@ -1,7 +1,7 @@
require conf/machine/include/tune-arm926ejs.inc
# Increase this everytime you change something in the kernel
-MACHINE_KERNEL_PR = "r32"
+MACHINE_KERNEL_PR = "r34"
TARGET_ARCH = "arm"
diff --git a/conf/machine/include/initramfs-kexecboot.inc b/conf/machine/include/initramfs-kexecboot.inc
index 6ee1ddc3fa..bc9cd518e2 100644
--- a/conf/machine/include/initramfs-kexecboot.inc
+++ b/conf/machine/include/initramfs-kexecboot.inc
@@ -1,13 +1,18 @@
-# initramfs-kexecboot specific config options
+# Initramfs-kexecboot extra config
-MACHINE_FEATURES_append = " kexecboot "
+# If set here, each image will also build linux-kexecboot.
+# Usually the machine-installer recipe already DEPENDS on it
+#
EXTRA_IMAGEDEPENDS += "linux-kexecboot"
-# Include kernel image in kexecboot enabled images
-RDEPENDS_kernel-base = "kernel-image"
-# we store kernel images in rootfs and only a minimal initramfs kernel in nand for booting other kernels
-DONT_CHECK_KERNELSIZE ?= "1"
+# Force inclusion of kernel in target images
+# (done by default)
+#
+RDEPENDS_kernel-base = "kernel-image"
-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS_append = " kexecboot-cfg"
+
+# Install /boot/boot.cfg in target images
+#
+MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS_append = " kexecboot-cfg "
diff --git a/conf/machine/include/kirkwood.inc b/conf/machine/include/kirkwood.inc
index 8507857b11..632540345b 100644
--- a/conf/machine/include/kirkwood.inc
+++ b/conf/machine/include/kirkwood.inc
@@ -11,7 +11,7 @@ USE_DEVFS = "0"
PREFERRED_PROVIDER_virtual/bootloader = ""
PREFERRED_PROVIDER_virtual/kernel = "linux-kirkwood"
-MACHINE_KERNEL_PR = "r16"
+MACHINE_KERNEL_PR = "r18"
IMAGE_FSTYPES += "tar.gz ubi"
SERIAL_CONSOLE = "ttyS0 115200"
diff --git a/conf/machine/include/tune-ppc440.inc b/conf/machine/include/tune-ppc440.inc
index feca186315..1c94a34e9e 100644
--- a/conf/machine/include/tune-ppc440.inc
+++ b/conf/machine/include/tune-ppc440.inc
@@ -1,4 +1,4 @@
TARGET_CC_ARCH = "-mcpu=440"
BASE_PACKAGE_ARCH = "ppc440"
FEED_ARCH = "ppc440"
-PACKAGE_EXTRA_ARCHS += "ppc440e"
+PACKAGE_EXTRA_ARCHS += "${BASE_PACKAGE_ARCH} ppc440e"
diff --git a/conf/machine/include/tune-ppce600.inc b/conf/machine/include/tune-ppce600.inc
new file mode 100644
index 0000000000..77a7cb86b8
--- /dev/null
+++ b/conf/machine/include/tune-ppce600.inc
@@ -0,0 +1,4 @@
+TARGET_CC_ARCH = "-mcpu=7450"
+BASE_PACKAGE_ARCH = "ppce600"
+FEED_ARCH = "ppce600"
+PACKAGE_EXTRA_ARCHS += "ppce600"
diff --git a/conf/machine/include/zaurus-kernel.inc b/conf/machine/include/zaurus-kernel.inc
index 1ba4a3422d..bbbb38315c 100644
--- a/conf/machine/include/zaurus-kernel.inc
+++ b/conf/machine/include/zaurus-kernel.inc
@@ -4,13 +4,12 @@ MACHINE_KERNEL_VERSION = "2.6"
PREFERRED_PROVIDER_virtual/kernel = "linux-rp"
-# Starting with 2.6.32 linux-rp is deprecated
+# Starting with 2.6.32 linux-rp is deprecated for some models
#PREFERRED_PROVIDER_virtual/kernel = "linux"
PREFERRED_PROVIDER_virtual/kernel_collie = "linux"
PREFERRED_PROVIDER_virtual/kernel_tosa = "linux"
-KERNEL_IMAGE_MAXSIZE = "1294336"
-KERNEL_IMAGE_MAXSIZE_collie = "1048576"
-
+# Default bootloader expects "zImage", use "uImage" for u-boot
+# Note: kexecboot can boot both kind of images
ZAURUS_KERNEL_IMAGETYPE ?= "zImage"
KERNEL_IMAGETYPE = "${ZAURUS_KERNEL_IMAGETYPE}"
diff --git a/conf/machine/mh355.conf b/conf/machine/mh355.conf
new file mode 100644
index 0000000000..5fdb9f4f3d
--- /dev/null
+++ b/conf/machine/mh355.conf
@@ -0,0 +1,24 @@
+#@TYPE: Machine
+#@Name: Microhard MH355 CPU Module based on AT91SAM9263 processor <http://www.microhard.biz>
+#@DESCRIPTION: Machine.configuration for the Microhard board with MH355 module
+#@MAINTAINER: Marco Cavallini <m.cavallini@koansoftware.com>
+
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux"
+PREFERRED_PROVIDER_xserver = "xserver-xorg"
+
+KERNEL_IMAGETYPE = "uImage"
+
+#don't try to access tty1
+USE_VT = "0"
+
+MACHINE_FEATURES = "kernel26 ext2 usbhost usbgadget screen touchscreen"
+
+# used by sysvinit_2
+SERIAL_CONSOLE = "115200 ttyS0"
+IMAGE_FSTYPES ?= "jffs2"
+EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n"
+
+require conf/machine/include/tune-arm926ejs.inc
+
diff --git a/conf/machine/mpc8641-hpcn.conf b/conf/machine/mpc8641-hpcn.conf
new file mode 100644
index 0000000000..ef75be3112
--- /dev/null
+++ b/conf/machine/mpc8641-hpcn.conf
@@ -0,0 +1,26 @@
+#@TYPE: Machine
+#@Name: MPC8641-hpcn
+#@DESCRIPTION: Machine configuration for the freescale mpc8641_hpcn development board
+
+TARGET_ARCH = "powerpc"
+
+PREFERRED_PROVIDER_virtual/kernel ?= "linux"
+
+MACHINE_FEATURES = "kernel26 usbhost pci ext2 vfat nfs uboot"
+
+KERNEL_IMAGETYPE = "uImage"
+UBOOT_ENTRYPOINT = "0"
+
+UBOOT_MACHINE = "MPC8641HPCN_config"
+
+# Need to create jffs2 images with the correct endianess
+EXTRA_IMAGECMD_jffs2 = " --big-endian -e 0x10000"
+
+#don't try to access tty1
+USE_VT = "0"
+
+#setup serial console on Com1
+SERIAL_CONSOLE = "-L 115200 ttyS0"
+
+# Tune for e600 core
+require conf/machine/include/tune-ppce600.inc
diff --git a/conf/machine/nokia900.conf b/conf/machine/nokia900.conf
index 4880ea47de..4ceb936c61 100644
--- a/conf/machine/nokia900.conf
+++ b/conf/machine/nokia900.conf
@@ -15,6 +15,9 @@ MACHINE_DISPLAY_HEIGHT_PIXELS = "480"
require conf/machine/include/omap3.inc
+# omap3.inc redefine it to uImage
+KERNEL_IMAGETYPE = "zImage"
+
ROOT_FLASH_SIZE = "100"
EXTRA_IMAGECMD_jffs2_nokia900 = "--pad --little-endian --eraseblock=0x20000 -n"
@@ -28,3 +31,8 @@ PREFERRED_PROVIDER_virtual/kernel = "linux"
ROOTFS_POSTPROCESS_COMMAND += " remove_init_link; "
MACHINE_FEATURES = "kernel26 apm alsa bluetooth usbgadget vfat"
+
+# Copied from include/omap3.inc (as we do not use linux-omap recipes):
+#
+# Increase this everytime you change something in the kernel
+MACHINE_KERNEL_PR = "r52"
diff --git a/conf/machine/om-gta01.conf b/conf/machine/om-gta01.conf
index 822403a710..ede2a2009e 100644
--- a/conf/machine/om-gta01.conf
+++ b/conf/machine/om-gta01.conf
@@ -15,7 +15,7 @@ PREFERRED_PROVIDER_virtual/kernel_shr = "linux-openmoko-shr-devel"
#PREFERRED_PROVIDER_virtual/kernel_shr = "linux-openmoko-2.6.31"
#PREFERRED_PROVIDER_virtual/kernel_shr = "linux-openmoko-2.6.32"
-PREFERRED_PROVIDER_virtual/libgl_shr = "mesa"
+PREFERRED_PROVIDER_virtual/libgl_shr = "mesa-dri"
UBOOT_ENTRYPOINT = "30008000"
@@ -29,7 +29,7 @@ MACHINE_DISPLAY_PPI = "285"
XSERVER ?= "xserver-xorg \
xf86-input-tslib \
xf86-input-evdev \
- xf86-video-glamo \
+ xf86-video-fbdev \
xf86-input-keyboard \
xf86-input-mouse"
@@ -58,15 +58,7 @@ ROOT_FLASH_SIZE = "60"
IMAGE_FSTYPES += "tar.gz jffs2 ubi"
# extra jffs2 tweaks
-EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x20000 --pagesize=0x800 \
- --no-cleanmarkers --pad -n ; sumtool --eraseblock=0x20000 --no-cleanmarkers \
- --littleendian --pad \
- -i ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \
- -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2.summary ; \
- mv ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \
- ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2.nosummary ; \
- mv ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2.summary \
- ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2"
+EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x4000 --pad -n"
# do ubiattach /dev/ubi_ctrl -m 4
# From dmesg:
@@ -74,7 +66,7 @@ EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x20000 --pagesize=0x800 \
# UBI: logical eraseblock size: 15360 bytes
# from ubiattach stdout:
# UBI device number 0, total 3907 LEBs
-MKUBIFS_ARGS = "-m 512 -e 15360 -c 2047"
+MKUBIFS_ARGS = "-m 512 -e 15360 -c 2376"
# do ubiattach /dev/ubi_ctrl -m 4
# from dmesg:
diff --git a/conf/machine/om-gta02.conf b/conf/machine/om-gta02.conf
index eb48d01aac..9733269d4f 100644
--- a/conf/machine/om-gta02.conf
+++ b/conf/machine/om-gta02.conf
@@ -41,7 +41,11 @@ READER_UI = "gtk"
# package machine specific modules
MACHINE_EXTRA_RRECOMMENDS = "\
- kernel-modules \
+ kernel-module-s3cmci \
+ kernel-module-snd-soc-neo1973-wm8753 \
+ kernel-module-snd-soc-neo1973-gta02-wm8753 \
+ kernel-module-g-ether \
+ kernel-module-ar6000 \
"
# no need to bypass this as in om-gta01, since this model is not using a multiplexed ttySAC0
diff --git a/conf/machine/omapzoom.conf b/conf/machine/omapzoom.conf
index 4732f68c98..ab0612f292 100644
--- a/conf/machine/omapzoom.conf
+++ b/conf/machine/omapzoom.conf
@@ -14,10 +14,7 @@ XSERVER = "xserver-xorg \
# Only has DVI connector for external screen
GUI_MACHINE_CLASS = "bigscreen"
-#include conf/machine/include/tune-arm1136jf-s.inc
-# requires gcc 4.3.0:
-include conf/machine/include/tune-cortexa8.inc
-
+require conf/machine/include/omap3.inc
IMAGE_FSTYPES += "tar.bz2 jffs2"
EXTRA_IMAGECMD_jffs2 = "-lnp "
diff --git a/conf/machine/omapzoom2.conf b/conf/machine/omapzoom2.conf
index 749339faea..698b24178f 100644
--- a/conf/machine/omapzoom2.conf
+++ b/conf/machine/omapzoom2.conf
@@ -29,7 +29,8 @@ KERNEL_IMAGETYPE = "uImage"
UBOOT_ENTRYPOINT = "0x80008000"
UBOOT_LOADADDRESS = "0x80008000"
-UBOOT_MACHINE = "omap3_zoom2_config"
+UBOOT_MACHINE = "omap3430zoom2_config"
+XLOAD_MACHINE = "omap3430zoom2_config"
# do ubiattach /dev/ubi_ctrl -m 4
# From dmesg:
diff --git a/conf/machine/omapzoom36x.conf b/conf/machine/omapzoom36x.conf
new file mode 100644
index 0000000000..88b39f4632
--- /dev/null
+++ b/conf/machine/omapzoom36x.conf
@@ -0,0 +1,38 @@
+#@TYPE: Machine
+#@NAME: omapzoom36x machine
+#@DESCRIPTION: Machine configuration for the OMAP Zoom36x at http://omapzoom.org
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+XSERVER = "xserver-xorg \
+ xf86-input-evdev \
+ xf86-input-tslib \
+ xf86-input-mouse \
+ xf86-video-omapfb \
+ xf86-video-fbdev \
+ xf86-input-keyboard"
+
+# Has HDMI connector for external screen
+GUI_MACHINE_CLASS = "bigscreen"
+
+require conf/machine/include/omap3.inc
+
+IMAGE_FSTYPES += "tar.bz2"
+
+SERIAL_CONSOLE = "115200 ttyS3"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-omap-zoomsync"
+
+KERNEL_IMAGETYPE = "uImage"
+
+UBOOT_ENTRYPOINT = "0x80008000"
+UBOOT_LOADADDRESS = "0x80008000"
+UBOOT_MACHINE = "omap3630zoom3_config"
+XLOAD_MACHINE = "omap3630zoom3_config"
+
+PREFERRED_VERSION_u-boot = "git"
+PREFERRED_VERSION_x-load = "git"
+EXTRA_IMAGEDEPENDS += "u-boot x-load"
+
+MACHINE_EXTRA_RRECOMMENDS = ""
+MACHINE_FEATURES = "kernel26 touchscreen phone screen apm usbgadget usbhost vfat alsa"
diff --git a/conf/machine/p2020ds.conf b/conf/machine/p2020ds.conf
new file mode 100644
index 0000000000..996a3becc0
--- /dev/null
+++ b/conf/machine/p2020ds.conf
@@ -0,0 +1,23 @@
+#@TYPE: Machine
+#@Name: P2020ds
+#@DESCRIPTION: Machine configuration for the freescale p2020ds development board
+
+TARGET_ARCH = "powerpc"
+
+PREFERRED_PROVIDER_virtual/kernel ?= "linux"
+
+MACHINE_FEATURES = "kernel26 usbhost pci ext2 vfat nfs uboot"
+
+KERNEL_IMAGETYPE = "uImage"
+UBOOT_ENTRYPOINT = "0"
+
+UBOOT_MACHINE = "P2020DS_config"
+
+# Need to create jffs2 images with the correct endianess
+EXTRA_IMAGECMD_jffs2 = " --big-endian -e 0x20000"
+
+#don't try to access tty1
+USE_VT = "0"
+
+#setup serial console on Com1
+SERIAL_CONSOLE = "-L 115200 ttyS0"
diff --git a/conf/machine/xilinx-ml507.conf b/conf/machine/xilinx-ml507.conf
new file mode 100644
index 0000000000..693f904012
--- /dev/null
+++ b/conf/machine/xilinx-ml507.conf
@@ -0,0 +1,38 @@
+# Copyright (C) 2010, Adrian Alonso <aalonso00@gmail.com>
+# Released under the MIT license (see packages/COPYING)
+#@TYPE: Machine
+#@Name: Xilinx ML507 FPGA Development Platform
+#@DESCRIPTION: Machine configuration for Xilinx ML507
+
+TARGET_ARCH = "powerpc"
+TARGET_CPU = "440"
+TARGET_FPU = "soft"
+#tune for the 440 cpu
+require conf/machine/include/tune-ppc440.inc
+
+#ASSUME_PROVIDED += "virtual/kernel"
+PREFERRED_PROVIDER_virtual/kernel = "linux-xilinx-ml507"
+
+KERNEL_IMAGETYPE = "uImage"
+
+MACHINE_FEATURES = "kernel26 apm ext2 vfat ethernet"
+MACHINE_EXTRA_RECOMMENDS = "kernel-modules"
+
+UBOOT_ARCH = "ppc"
+UBOOT_MACHINE = "ml507_config"
+UBOOT_ENTRYPOINT ?= "0x00000000"
+UBOOT_LOADADDRESS ?= "0x00000000"
+PREFERRED_VERSION_u-boot_xilinx-ml507 = "git"
+
+# Xilinx EDK override hardware definitions for xilinx-bsp
+# Include in your local.conf
+# XILINX_BSP_PATH = "complete path for Xilinx XPS project"
+# XILINX_BOARD = "ml507"
+
+# Don't use tty1
+USE_VT = "0"
+SERIAL_CONSOLE = "9600 ttyS0"
+
+# Device nodes add xsa for (system ace)
+IMAGE_DEVICE_TABLES = "files/device_table-minimal.txt \
+ files/device_table_add-xsa.txt"
diff --git a/contrib/angstrom/omap3-mkcard.sh b/contrib/angstrom/omap3-mkcard.sh
index dc4359c38c..d8b5b4373d 100755
--- a/contrib/angstrom/omap3-mkcard.sh
+++ b/contrib/angstrom/omap3-mkcard.sh
@@ -6,7 +6,7 @@
# Parts of the procudure base on the work of Denys Dmytriyenko
# http://wiki.omap.com/index.php/MMC_Boot_Format
-LC_ALL=C
+export LC_ALL=C
if [ $# -ne 1 ]; then
echo "Usage: $0 <drive>"
@@ -17,7 +17,7 @@ DRIVE=$1
dd if=/dev/zero of=$DRIVE bs=1024 count=1024
-SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`
+SIZE=`fdisk -l $DRIVE | grep Disk | grep bytes | awk '{print $5}'`
echo DISK SIZE - $SIZE bytes
diff --git a/contrib/angstrom/sort.sh b/contrib/angstrom/sort.sh
index dcbb22408c..5522d44800 100755
--- a/contrib/angstrom/sort.sh
+++ b/contrib/angstrom/sort.sh
@@ -48,17 +48,17 @@ case "$arch" in
"armv4t")
machines="micro2440 mini2440 ep93xx h6300 om-gta01 om-gta02 fic-gta01 fic-gta02" ;;
"armv5te")
- machines="hawkboard da850-omapl138-evm da830-omapl137-evm htcalpine dm6446-evm dm6467-evm dm6467t-evm dm355-evm dm365-evm dm357-evm topas910 sheevaplug openrd-client openrd-base dm355-leopard n2100 dns323 mv2120 kuropro lspro tsx09 ts409 davinci-dvevm davinci-sffsdr neuros-osd neuros-osd2 gumstix-connex gumstix-verdex gumstix e680 a780 a1200 at91sam9263ek rokre6 rokre2 rokr-e2 akita c7x0 h2200 h3900 h4000 h5000 htcapache htctornado htcblueangel htcuniversal hx4700 nslu2le hx2000 ixp4xxle magician netbook-pro nokia770 palmt650 palmt680 palmld palmtx palmtt3 palmz72 qemuarm omap5912osk poodle spitz tosa mx27ads at91sam9g20ek mainstone" ;;
+ machines="hawkboard da850-omapl138-evm da830-omapl137-evm htcalpine dm6446-evm dm6467-evm dm6467t-evm dm355-evm dm365-evm dm357-evm topas910 sheevaplug openrd-client openrd-base dm355-leopard n2100 dns323 mv2120 kuropro lspro tsx09 ts409 davinci-dvevm davinci-sffsdr neuros-osd neuros-osd2 gumstix-connex gumstix-verdex gumstix e680 a780 a1200 at91sam9263ek rokre6 rokre2 rokr-e2 akita c7x0 h2200 h3900 h4000 h5000 htcapache htctornado htcblueangel htcuniversal hx4700 nslu2le hx2000 ixp4xxle magician netbook-pro nokia770 palmt650 palmt680 palmld palmtx palmtt3 palmz72 qemuarm omap5912osk poodle spitz tosa mx27ads at91sam9g20ek mainstone hipox" ;;
"armv5teb")
machines="ixp4xxbe nslu2be" ;;
"armv6-novfp")
machines="htcdiamond htckaiser htcpolaris htcraphael htcvogue" ;;
"armv6")
- machines="smartq5 bug mx31ads nokia800 " ;;
+ machines="smdk6410 smartq5 bug mx31ads nokia800 " ;;
"armv7")
machines="" ;;
"armv7a")
- machines="archos5 palmpre cm-t35 igep0020 omap3-touchbook beagleboard omap3evm am3517-evm omap3517-evm omap3-pandora omapzoom omapzoom2 overo" ;;
+ machines="archos5 archos5it palmpre cm-t35 igep0020 omap3-touchbook beagleboard omap3evm am3517-evm omap3517-evm omap3-pandora omapzoom omapzoom2 omapzoom36x overo" ;;
"avr32")
machines="atngw100 at32stk1000" ;;
"bfin")
@@ -69,9 +69,9 @@ case "$arch" in
"i486")
machines="x86" ;;
"i586")
- machines="epia qemux86" ;;
+ machines="epia" ;;
"i686")
- machines="eee701 guinness progear" ;;
+ machines="eee701 qemux86 guinness progear" ;;
"iwmmxt")
machines="" ;;
"ppc405")
diff --git a/contrib/feed-browser/includes/config.inc b/contrib/feed-browser/includes/config.inc
index 2bc34f7d63..341ba87c36 100644
--- a/contrib/feed-browser/includes/config.inc
+++ b/contrib/feed-browser/includes/config.inc
@@ -155,6 +155,14 @@ $feeds = array(
'url'=>'ppc603e/gstreamer',
),
+ array(
+ 'name'=>'Beagleboard machine feed',
+ 'url'=>'armv7a/machine/beagleboard',
+ ),
+ array(
+ 'name'=>'Hawkoard machine feed',
+ 'url'=>'armv5te/machine/hawkboard',
+ ),
array(
'name'=>'Motorola A780',
'url'=>'armv5te/machine/a780',
diff --git a/contrib/hrw/check-kernel-updates.sh b/contrib/hrw/check-kernel-updates.sh
new file mode 100644
index 0000000000..7758baf69d
--- /dev/null
+++ b/contrib/hrw/check-kernel-updates.sh
@@ -0,0 +1,9 @@
+
+echo "fetching list of changelogs"
+echo "ls ChangeLog-*" |lftp ftp://www.kernel.org/pub/linux/kernel/v2.6/> changes.txt
+
+for release in `seq 16 32`;
+do
+ LATEST=`grep ChangeLog-2.6.$release changes.txt | sed -e "s/^.*ChangeLog-2.6.$release.//g"| sort -n -r|head -n1`
+ echo "latest patch: 2.6.$release.$LATEST"
+done
diff --git a/contrib/oeaudit/freebsd.py b/contrib/oeaudit/freebsd.py
new file mode 100644
index 0000000000..5765e8a726
--- /dev/null
+++ b/contrib/oeaudit/freebsd.py
@@ -0,0 +1,194 @@
+"""
+Handle FreeBSD port audit files and map the names to OpenEmbedded
+"""
+
+class freebsd_info:
+ """
+ Handles an entry like the one below:
+ vulnerability-test-port>=2000<2010.02.26|http://cvsweb.freebsd.org/ports/security/vulnerability-test-port/|Not vulnerable, just a test port (database: 2010-02-26)
+ """
+ def __init__(self, name, versions, link, kind):
+ self.name = name
+ self.versions = versions
+ self.link = link
+
+ @classmethod
+ def split_versions(self, input):
+ """
+ Split versions by <, >, >=, >=
+ """
+ versions = []
+ last_pos = 0
+
+ # Try to determine <, >, >=, <=
+ # we will have to carry stuff on to find the
+ # version..
+ i = 0
+ while i < len(input) - 1:
+ c1 = input[i]
+ c2 = input[i+1]
+ if c1 != '<' and c1 != '>' and c1 != '=':
+ i = i + 1
+ continue
+
+ # is a '=' coming behind it?
+ next = i + 1
+ if c2 == '=':
+ next = next + 1
+
+ # submit
+ if last_pos != 0:
+ versions.append((next_type, input[last_pos:i]))
+
+ # remember stuff
+ next_type = input[i:next]
+ last_pos = next
+ i = next
+
+ assert last_pos != 0
+ versions.append((next_type, input[last_pos:len(input)]))
+ return versions
+
+ def __repr__(self):
+ return "%s: %s" % (self.name, self.versions)
+
+
+def map_names(str):
+ """Map a FreeBSD name to OE"""
+ maps = {
+ "libpurple" : "pidgin",
+ "php4" : "php",
+ "php5" : "php",
+ "expat2" : "expat",
+ "freeciv-gtk" : "freeciv",
+ "pcre" : "libpcre",
+ "vim-gnome" : "vim",
+ "python23" : "python",
+ "python24" : "python",
+ "python25" : "python",
+ "python+ipv6" : "python",
+ "wget-devel" : "wget",
+ "xchat2" : "xchat",
+ "freetype" : "freetype",
+ "qemu-devel" : "qemu",
+ "krb5-beta" : "krb5",
+ "freeciv-gtk2": "freeciv",
+ "gtk" : "gtk+",
+ "wget+ipv6" : "wget",
+ "ja-gd" : "gd",
+ "openvpn-devel" : "openvpn",
+ "mpeg123-esound" : "mpeg123",
+ "mpeg123-nas" : "mpeg123",
+ "cdrtools-cjk" : "cdrtools",
+ "apache+mod_ssl+mod_deflate" : "apache2",
+ "apache+mod_ssl*" : "apache2",
+ "vim-gtk2" : "vim",
+ "zh-emacs" : "emacs",
+ "{ja-,}bugzilla" : "bugzilla",
+ "zh-tin" : "tin",
+ "mozilla+ipv6": "mozilla",
+ "mozilla-embeddded" : "mozilla",
+ "rar" : "unrar",
+ "libsndfile" : "libsndfile1",
+ "sylpheed-gtk2": "sylpheed",
+ "cdrtools-devel": "cdrtools",
+ "pine4-ssl": "pine",
+ "apache" : "apache2",
+ "ghostscript-gpl" : "gs",
+ "ghostscript-gnu-nox11" : "gs",
+ "ghostscript8" : "gs",
+ "ghostscript-afpl-nox11" : "gs",
+ "ghostscript-afpl" : "gs",
+ "isc-dhcp" : "dhcp",
+ "mplayer-gtk" : "mplayer",
+ "xerces-c2" : "xerces-c",
+ "libxml" : "libxml2",
+ "vim+ruby" : "vim",
+ "mplayer{,-gtk}{,-esound}" : "mplayer",
+ "proftpd-devel": "proftpd",
+ "neon28" : "neon",
+ "php4-dba" : "php",
+ "php5-{cgi,cli}" : "php",
+
+ }
+
+ try:
+ return maps[str]
+ except:
+ return str
+
+def is_not_in_oe(name):
+ """Method to reject packages not in OE"""
+ not_in = [
+ # packages that we will never have...
+ "linux-firefox", "fr-linux-netscape", "linux-netscape-{communicator,navigator}",
+ "linux_base", "ja-netscape7", "{ja,ko}-netscape-{communicator,navigator}-linux", "zhTW-linux-mozillafirebird", "ja-linux-mozillafirebird-gtk1", "el-linux-mozillafirebird", "mozilla-firebird", "netscape7",
+ "acroread4", "acroread7", "acroread5",
+ "linux-openmotif", "linux-flock", "linux-jdk", "linux-curl", "linux-png", "linux-firefox-devel",
+
+ # packages that we don't have now but maybe will have in
+ # the future and blacklisting them here might be a problem
+ "openoffice.org-2-devel", "openoffice.org-2", "it-openoffice", "ca-openoffice","sl-openoffice-SI", "ja-openoffice",
+ "drupal4", "drupal5", "drupal6", "drupal-pubcookie",
+ "gpdf",
+ "nagios",
+ "kdenetwork", "ja-kdelibs", "kdegraphics", "kdepim", "kdebase4-runtime",
+ "xemacs-devel", "xemacs-devel-21.5", "xemacs-mule", "zh-xemacs", "zh-xemacs-mule",
+ "geeklog", "apach13-ssl", "nvidia-driver", "eGroupWare", "varnish", "heimdal",
+ "bugzilla", "agenda-snow-libs", "mozilla",
+ ]
+
+ return name in not_in
+
+def create_infos(line):
+ split = line.split("|")
+ for i in range(0, len(split[0])):
+ c = split[0][i]
+ if c != '<' and c != '=' and c != '>':
+ continue
+ name = map_names(split[0][0:i])
+ versions = freebsd_info.split_versions(split[0][i:])
+ break
+
+ if is_not_in_oe(name):
+ #print "Not in oe %s" % name
+ return []
+
+ link = split[1]
+ kind = split[2]
+ return [freebsd_info(name, versions, link, kind)]
+
+
+def read_auditfile(filename):
+ """
+ Read an uncompressed audit file from freebsd
+ """
+ f = open(filename)
+ packages = {}
+ for line in f:
+ if line.startswith("#"):
+ continue
+
+ infos = create_infos(line)
+ for info in infos:
+ try:
+ packages[info.name].append(info)
+ except:
+ packages[info.name] = []
+ packages[info.name].append(info)
+ return packages
+
+
+def prepare_version(bsd_version):
+ """
+ FreeBSD is adding ,1 for revisions.. remove that
+ """
+ # FIXME return a tuple with a revision...
+ rev = "r0"
+ split = bsd_version.rsplit(',', 1)
+ split = split[0]
+ split = split.rsplit('_', 1)
+ if len(split) == 2:
+ rev = "r%s" % split[1]
+ return (split[0], rev)
+
diff --git a/contrib/oeaudit/oe.py b/contrib/oeaudit/oe.py
new file mode 100644
index 0000000000..f3326a5338
--- /dev/null
+++ b/contrib/oeaudit/oe.py
@@ -0,0 +1,28 @@
+def read_available(filename):
+ """
+ Parses the output of bitbake -s
+ minus the first few lines
+ """
+ f = open(filename)
+ packages = {}
+
+ for line in f:
+ if line.startswith("NOTE: ") or line.startswith("Parsing .bb") or line.startswith("done."):
+ continue
+
+ # str.split can not be used as we have multiple whitespace
+ split = line.split(" ", 1)
+ package = split[0]
+ rest = split[1].strip()
+
+ # we might have a latest package...
+ split = rest.split(" ", 1)
+ if len(split) == 2:
+ version = split[1].strip()
+ else:
+ version = split[0]
+
+ packages[package] = version
+ return packages
+
+
diff --git a/contrib/oeaudit/oe_audit.py b/contrib/oeaudit/oe_audit.py
new file mode 100755
index 0000000000..018547a04e
--- /dev/null
+++ b/contrib/oeaudit/oe_audit.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env python
+
+import freebsd, oe
+
+try:
+ import bb
+except Exception, e:
+ import sys
+ sys.stderr.write("Set PYTHONPATH to bitbake/lib and restart.\n")
+ sys.stderr.write("The backtrace can be seen below.\n")
+ raise e
+
+
+def strip_oe_version(oe_version):
+ """
+ We need to strip the package epoch... and the PR to compare
+ it to the FreeBSD versions. Also FreeBSD seems to use _N as
+ PR so we might need to do more..
+ """
+ split = oe_version.split(':', 1)
+ ver = split[1]
+
+ split = ver.rsplit('-r', 1)
+ ver = split[0]
+ return ver
+
+def compare_versions(oe, freebsd_dict, not_known):
+ def handle_package(oe_name, bsd_name):
+ if not oe_name in oe:
+ if oe_name == bsd_name:
+ print >> not_known, "%s is not in OE" % oe_name
+ return
+
+ oe_version = strip_oe_version(oe[oe_name])
+ for ver in freebsd_dict[bsd_name]:
+ affected = True
+ str = []
+ for (cmp, vers) in ver.versions:
+ (bsd_ver, bsd_pr) = freebsd.prepare_version(vers)
+ cmp_res = bb.utils.vercmp(('0', oe_version, 'r0'), ('0', bsd_ver, bsd_pr))
+ if cmp == '<':
+ if cmp_res >= 0:
+ affected = False
+ pass
+ elif cmp == '<=':
+ if cmp_res > 0:
+ affected = False
+ pass
+ elif cmp == '>':
+ if cmp_res <= 0:
+ affected = False
+ pass
+ elif cmp == '>=':
+ if cmp_res < 0:
+ affected = False
+ pass
+ elif cmp == '=':
+ if cmp_res > 0:
+ affected = False
+ else:
+ print cmp
+ assert True
+
+ str.append("%s %s %s %s" % (oe_name, oe_version, cmp, bsd_ver))
+ if affected:
+ print " && ".join(str), ver.link
+
+ for package in freebsd_dict.keys():
+ # handle the various versions of OE packages
+ handle_package(package, package)
+ handle_package("%s-native" % package, package)
+ handle_package("%s-full-native" % package, package)
+ handle_package("%s-sdk" % package, package)
+
+def handle_options(args):
+ import optparse
+ parser = optparse.OptionParser(version = "OE Audit version 0.1",
+ usage = "%prog [options]")
+ parser.add_option("-a", "--auditfile", help = "FreeBSD auditfile to use",
+ action = "store", dest = "freebsd_auditfile", default = None)
+ parser.add_option("-p", "--available", help = "Output of bitbake -s",
+ action = "store", dest = "oe_available", default = None)
+ parser.add_option("-b", "--buggy", help = "Write out unmaped packets",
+ action = "store", dest = "buggy", default = "not_in_oe.bugs")
+
+ options, args = parser.parse_args(args)
+ return options
+
+# read the input data
+import sys
+opts = handle_options(sys.argv)
+oe_packages = oe.read_available(opts.oe_available)
+freebsd_vuln = freebsd.read_auditfile(opts.freebsd_auditfile)
+buggy = open(opts.buggy, "w+")
+
+compare_versions(oe=oe_packages, freebsd_dict=freebsd_vuln, not_known=buggy)
diff --git a/contrib/weekly-changelog-report.py b/contrib/weekly-changelog-report.py
index 902089bdad..e52a70e52c 100755
--- a/contrib/weekly-changelog-report.py
+++ b/contrib/weekly-changelog-report.py
@@ -10,6 +10,8 @@
import datetime
import os
+import sys
+import string
today = datetime.date.today()
@@ -21,14 +23,23 @@ end_day = today - datetime.timedelta(today_weekday)
start_day = end_day - datetime.timedelta(7)
-print "OE weekly changelog %s to %s\n" % (start_day.isoformat(), end_day.isoformat())
+if (len(sys.argv) <= 1):
+ branch = "origin/org.openembedded.dev"
+else:
+ branch = sys.argv[1]
-os.system("git shortlog --since=%s --until=%s | grep -v 'Merge branch' | grep -v 'Merge commit'|sed -e 's/^ //g'|cut -b -78 " % (start_day.isoformat(), end_day.isoformat()))
+branch_pretty = string.replace(branch, "origin/", "")
+
+print "OE weekly changelog for %s, %s to %s\n" % (branch_pretty, start_day.isoformat(), end_day.isoformat())
+os.system("git shortlog --since=%s --until=%s %s | grep -v 'Merge branch' | grep -v 'Merge commit'|sed -e 's/^ //g'|cut -b -78 " % (start_day.isoformat(), end_day.isoformat(), branch))
+
+sys.exit(0)
os.system("wget 'http://bugs.openembedded.net/buglist.cgi?bug_file_loc=&bug_file_loc_type=allwordssubstr&bug_id=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&bugidtype=include&chfieldfrom=7d&chfieldto=Now&chfieldvalue=&email1=&email2=&emailassigned_to1=1&emailassigned_to2=1&emailcc2=1&emailqa_contact2=1&emailreporter2=1&emailtype1=substring&emailtype2=substring&field-1-0-0=bug_status&field0-0-0=noop&known_name=1WFixed&long_desc=&long_desc_type=substring&query_format=advanced&remaction=&short_desc=&short_desc_type=allwordssubstr&type-1-0-0=anyexact&type0-0-0=noop&value-1-0-0=RESOLVED%2CVERIFIED%2CCLOSED&value0-0-0=&ctype=csv' -O resolved-bugs.csv >& /dev/null")
os.system("wget 'http://bugs.openembedded.net/buglist.cgi?bug_file_loc=&bug_file_loc_type=allwordssubstr&bug_id=&bug_status=NEW&bugidtype=include&chfield=%5BBug%20creation%5D&chfieldfrom=7d&chfieldto=Now&chfieldvalue=&email1=&email2=&emailassigned_to1=1&emailassigned_to2=1&emailcc2=1&emailqa_contact2=1&emailreporter2=1&emailtype1=substring&emailtype2=substring&field-1-0-0=bug_status&field0-0-0=noop&long_desc=&long_desc_type=substring&query_format=advanced&remaction=&short_desc=&short_desc_type=allwordssubstr&type-1-0-0=anyexact&type0-0-0=noop&value-1-0-0=NEW&value0-0-0=&ctype=csv' -O new-bugs.csv &> /dev/null")
+print "====================================================="
print "Bugs fixed:\n"
os.system("cat resolved-bugs.csv | awk -F, '{print $1 \" \" $7 \"\t \" $8}' | sed s:\\\"::g")
diff --git a/contrib/weekly-changelog-report.sh b/contrib/weekly-changelog-report.sh
new file mode 100755
index 0000000000..3bdafcdc17
--- /dev/null
+++ b/contrib/weekly-changelog-report.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+echo "====================================================="
+./contrib/weekly-changelog-report.py
+echo
+echo "====================================================="
+./contrib/weekly-changelog-report.py origin/holger/staging-branch
+echo
+
+wget 'http://bugs.openembedded.net/buglist.cgi?bug_file_loc=&bug_file_loc_type=allwordssubstr&bug_id=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&bugidtype=include&chfieldfrom=7d&chfieldto=Now&chfieldvalue=&email1=&email2=&emailassigned_to1=1&emailassigned_to2=1&emailcc2=1&emailqa_contact2=1&emailreporter2=1&emailtype1=substring&emailtype2=substring&field-1-0-0=bug_status&field0-0-0=noop&known_name=1WFixed&long_desc=&long_desc_type=substring&query_format=advanced&remaction=&short_desc=&short_desc_type=allwordssubstr&type-1-0-0=anyexact&type0-0-0=noop&value-1-0-0=RESOLVED%2CVERIFIED%2CCLOSED&value0-0-0=&ctype=csv' -O resolved-bugs.csv >& /dev/null
+
+wget 'http://bugs.openembedded.net/buglist.cgi?bug_file_loc=&bug_file_loc_type=allwordssubstr&bug_id=&bug_status=NEW&bugidtype=include&chfield=%5BBug%20creation%5D&chfieldfrom=7d&chfieldto=Now&chfieldvalue=&email1=&email2=&emailassigned_to1=1&emailassigned_to2=1&emailcc2=1&emailqa_contact2=1&emailreporter2=1&emailtype1=substring&emailtype2=substring&field-1-0-0=bug_status&field0-0-0=noop&long_desc=&long_desc_type=substring&query_format=advanced&remaction=&short_desc=&short_desc_type=allwordssubstr&type-1-0-0=anyexact&type0-0-0=noop&value-1-0-0=NEW&value0-0-0=&ctype=csv' -O new-bugs.csv &> /dev/null
+
+echo "====================================================="
+echo "Bugs fixed:"
+cat resolved-bugs.csv | awk -F, '{print $1 " " $7 "\t " $8}' | sed s:\\\"::g
+
+echo
+echo "Bugs opened:"
+cat new-bugs.csv | awk -F, '{print $1 " " $7 "\t " $8}' | sed s:\\\"::g
+
diff --git a/docs/usermanual/chapters/recipes.xml b/docs/usermanual/chapters/recipes.xml
index cad1d80a68..90a181060b 100644
--- a/docs/usermanual/chapters/recipes.xml
+++ b/docs/usermanual/chapters/recipes.xml
@@ -1406,7 +1406,7 @@ inherit autotools</screen></para>
</section>
</section>
- <section id="recipes_depenencies" xreflabel="dependencies">
+ <section id="recipes_dependencies" xreflabel="dependencies">
<title>Dependencies: What's needed to build and/or run the
package?</title>
diff --git a/docs/usermanual/reference/class_pkgconfig.xml b/docs/usermanual/reference/class_pkgconfig.xml
index 3cb5002df5..8c2177cecf 100644
--- a/docs/usermanual/reference/class_pkgconfig.xml
+++ b/docs/usermanual/reference/class_pkgconfig.xml
@@ -4,7 +4,7 @@
<para>The pkgconfig class is for packages that install
<command>&lt;pkg&gt;.pc</command> files. These files provide information
- about the build settings for the package vwhich are then made available by
+ about the build settings for the package which are then made available by
the <command>pkg-config</command> command.</para>
<para>Since the contents of the <command>.pc</command> files are used at
@@ -36,4 +36,4 @@
(it will ignore those that end in <command>-uninstalled.pc)</command> and
process them as described above. All that is required to use the class is
the addition of pkgconfig in an inherit statement:<screen>inherit autotools pkgconfig</screen></para>
-</section> \ No newline at end of file
+</section>
diff --git a/docs/usermanual/reference/var_src_uri.xml b/docs/usermanual/reference/var_src_uri.xml
index a35e1eede2..f6e61050aa 100644
--- a/docs/usermanual/reference/var_src_uri.xml
+++ b/docs/usermanual/reference/var_src_uri.xml
@@ -29,7 +29,12 @@
be used in preference to retrieving a new version . Any source that is
retrieved from a remote URI will be stored in the download source directory
and an appropriate md5 sum generated and stored alongside it.</para>
-
+ <para>Checksums for http/https/ftp/ftps uris are stored in each recipe in
+ the form of<screen>SRC_URI[md5sum] = &quot;9a7a11ffd52d9c4553ea8c0134a6fa86&quot;
+SRC_URI[sha256sum] = &quot;36bdb85c97b39ac604bc58cb7857ee08295242c78a12848ef8a31701921b9434&quot;</screen>
+ for the first remote SRC_URI that has <emphasis>no</emphasis> explicit <command>name=foo</command>
+ associated with it. Following <emphasis>unnamed</emphasis> SRC_URIs without
+ a checksum will throw errors.</para>
<para>Each URI supports a set of additional options. These options are
tag/value pairs of the form <command>"a=b"</command> and are semi-colon
separated from each other and from the URI. The follow examples shows two
diff --git a/files/device_table_add-xsa.txt b/files/device_table_add-xsa.txt
new file mode 100644
index 0000000000..a0bc48efa1
--- /dev/null
+++ b/files/device_table_add-xsa.txt
@@ -0,0 +1,5 @@
+# Add nodes for xilinx system ace
+/dev/xsa b 640 0 0 125 0 0 0 -
+/dev/xsa1 b 640 0 1 125 0 0 0 -
+/dev/xsa2 b 640 0 2 125 0 0 0 -
+/dev/xsa3 b 640 0 3 125 0 0 0 -
diff --git a/recipes/abiword/abiword-2.5.inc b/recipes/abiword/abiword-2.5.inc
index f4d654ea4c..b8950ca92b 100644
--- a/recipes/abiword/abiword-2.5.inc
+++ b/recipes/abiword/abiword-2.5.inc
@@ -1,5 +1,5 @@
DESCRIPTION = "AbiWord is free word processing program similar to Microsoft(r) Word"
-HOMEPAGE = "http://www.abiword.org""
+HOMEPAGE = "http://www.abiword.org"
SECTION = "x11/office"
LICENSE = "GPLv2"
DEPENDS = "asio goffice perl-native wv libgsf libgnomeprint libgnomeprintui libglade libfribidi enchant jpeg libpng libxml2"
diff --git a/recipes/abiword/abiword_2.8.1.bb b/recipes/abiword/abiword_2.8.1.bb
index 5547e9ce56..5a9ceb5747 100644
--- a/recipes/abiword/abiword_2.8.1.bb
+++ b/recipes/abiword/abiword_2.8.1.bb
@@ -1,6 +1,6 @@
require abiword-2.5.inc
-PR = "r4"
+PR = "r5"
SRC_URI = "http://www.abisource.com/downloads/abiword/${PV}/source/abiword-${PV}.tar.gz \
file://autogen-common.sh \
diff --git a/recipes/aceofpenguins/aceofpenguins_1.2.bb b/recipes/aceofpenguins/aceofpenguins_1.2.bb
index 9410eb9653..c4b98e4fb0 100644
--- a/recipes/aceofpenguins/aceofpenguins_1.2.bb
+++ b/recipes/aceofpenguins/aceofpenguins_1.2.bb
@@ -3,16 +3,21 @@ The latest version includes clones of freecell, golf, mastermind, merlin, minesw
AUTHOR = "dj@delorie.com"
HOMEPAGE = "http://www.delorie.com/store/ace/"
SECTION = "games"
-DEPENDS = "libpng zlib libxpm"
-PR = "r1"
+DEPENDS = "libpng-native zlib-native libxpm"
+PR = "r2"
SRC_URI = "\
http://www.delorie.com/store/ace/ace-${PV}.tar.gz\
file://gcc4.patch;patch=1\
+ file://fix-crosscompile.patch;patch=1\
"
S = "${WORKDIR}/ace-${PV}"
inherit autotools
+do_compile_prepend() {
+ export LD_LIBRARY_PATH="${STAGING_NATIVE_DIR}"
+}
+
# Workaround QA issue
-TARGET_CC_ARCH += "${LDFLAGS}" \ No newline at end of file
+TARGET_CC_ARCH += "${LDFLAGS}"
diff --git a/recipes/aceofpenguins/files/fix-crosscompile.patch b/recipes/aceofpenguins/files/fix-crosscompile.patch
new file mode 100644
index 0000000000..ff3ac0ffa8
--- /dev/null
+++ b/recipes/aceofpenguins/files/fix-crosscompile.patch
@@ -0,0 +1,13 @@
+diff -Nurd ace-1.2/lib/Makefile.am ace-1.2.new//lib/Makefile.am
+--- ace-1.2/lib/Makefile.am 2010-02-18 12:21:30.000000000 +0100
++++ ace-1.2.new//lib/Makefile.am 2010-02-18 12:21:30.000000000 +0100
+@@ -22,7 +22,7 @@
+ ./make-imglib -n cards -i $(srcdir)/png -d images.d $(srcdir)/images.in images.c
+
+ make-imglib : make-imglib.c
+- $(BUILD_CC) $(srcdir)/make-imglib.c -o make-imglib -lpng -lz
++ $(BUILD_CC) $(srcdir)/make-imglib.c -o make-imglib $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -lpng -lz
+
+ text2c : text2c.c
+- $(BUILD_CC) $(srcdir)/text2c.c -o text2c -lpng -lz
++ $(BUILD_CC) $(srcdir)/text2c.c -o text2c $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -lpng -lz
diff --git a/recipes/alsa/alsa-lib_1.0.11.bb b/recipes/alsa/alsa-lib_1.0.11.bb
index 4d7c2e8893..5bdee7eebb 100644
--- a/recipes/alsa/alsa-lib_1.0.11.bb
+++ b/recipes/alsa/alsa-lib_1.0.11.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Alsa sound library"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "libs/multimedia"
-LICENSE = "LGPL"
+LICENSE = "LGPLv2.1"
PR = "r4"
# configure.in sets -D__arm__ on the command line for any arm system
diff --git a/recipes/alsa/alsa-lib_1.0.13.bb b/recipes/alsa/alsa-lib_1.0.13.bb
index 03ab74f664..1cfb52b7e0 100644
--- a/recipes/alsa/alsa-lib_1.0.13.bb
+++ b/recipes/alsa/alsa-lib_1.0.13.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Alsa sound library"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "libs/multimedia"
-LICENSE = "LGPL"
+LICENSE = "LGPLv2.1"
PR = "r4"
# configure.in sets -D__arm__ on the command line for any arm system
diff --git a/recipes/alsa/alsa-lib_1.0.14.bb b/recipes/alsa/alsa-lib_1.0.14.bb
index 284ddd9bc6..520b3256d9 100644
--- a/recipes/alsa/alsa-lib_1.0.14.bb
+++ b/recipes/alsa/alsa-lib_1.0.14.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Alsa sound library"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "libs/multimedia"
-LICENSE = "LGPL"
+LICENSE = "LGPLv2.1"
PR = "r2"
diff --git a/recipes/alsa/alsa-lib_1.0.15.bb b/recipes/alsa/alsa-lib_1.0.15.bb
index b502adb3b5..6034aa7815 100644
--- a/recipes/alsa/alsa-lib_1.0.15.bb
+++ b/recipes/alsa/alsa-lib_1.0.15.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Alsa sound library"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "libs/multimedia"
-LICENSE = "LGPL"
+LICENSE = "LGPLv2.1"
PR = "r1"
# configure.in sets -D__arm__ on the command line for any arm system
diff --git a/recipes/alsa/alsa-lib_1.0.17.bb b/recipes/alsa/alsa-lib_1.0.17.bb
index eff114de4b..c2401c6d0e 100644
--- a/recipes/alsa/alsa-lib_1.0.17.bb
+++ b/recipes/alsa/alsa-lib_1.0.17.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Alsa sound library"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "libs/multimedia"
-LICENSE = "LGPL"
+LICENSE = "LGPLv2.1"
# configure.in sets -D__arm__ on the command line for any arm system
# (not just those with the ARM instruction set), this should be removed,
diff --git a/recipes/alsa/alsa-lib_1.0.18.bb b/recipes/alsa/alsa-lib_1.0.18.bb
index eff114de4b..c2401c6d0e 100644
--- a/recipes/alsa/alsa-lib_1.0.18.bb
+++ b/recipes/alsa/alsa-lib_1.0.18.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Alsa sound library"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "libs/multimedia"
-LICENSE = "LGPL"
+LICENSE = "LGPLv2.1"
# configure.in sets -D__arm__ on the command line for any arm system
# (not just those with the ARM instruction set), this should be removed,
diff --git a/recipes/alsa/alsa-lib_1.0.19.bb b/recipes/alsa/alsa-lib_1.0.19.bb
index eff114de4b..c2401c6d0e 100644
--- a/recipes/alsa/alsa-lib_1.0.19.bb
+++ b/recipes/alsa/alsa-lib_1.0.19.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Alsa sound library"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "libs/multimedia"
-LICENSE = "LGPL"
+LICENSE = "LGPLv2.1"
# configure.in sets -D__arm__ on the command line for any arm system
# (not just those with the ARM instruction set), this should be removed,
diff --git a/recipes/alsa/alsa-lib_1.0.20.bb b/recipes/alsa/alsa-lib_1.0.20.bb
index 6e61b4040b..55951be70b 100644
--- a/recipes/alsa/alsa-lib_1.0.20.bb
+++ b/recipes/alsa/alsa-lib_1.0.20.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Alsa sound library"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "libs/multimedia"
-LICENSE = "LGPL"
+LICENSE = "LGPLv2.1"
PR = "r3"
# configure.in sets -D__arm__ on the command line for any arm system
diff --git a/recipes/alsa/alsa-state.bb b/recipes/alsa/alsa-state.bb
index d77db707df..120514035a 100644
--- a/recipes/alsa/alsa-state.bb
+++ b/recipes/alsa/alsa-state.bb
@@ -7,7 +7,7 @@
DESCRIPTION = "Alsa Scenario Files"
LICENSE = "MIT"
PV = "0.2.0"
-PR = "r11"
+PR = "r13"
SRC_URI = "\
file://asound.conf \
diff --git a/recipes/alsa/alsa-state/at91sam9260ek/asound.conf b/recipes/alsa/alsa-state/at91sam9260ek/asound.conf
new file mode 100644
index 0000000000..87bb5ec050
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9260ek/asound.conf
@@ -0,0 +1,2 @@
+pcm.!default { type hw card 0 }
+ctl.!default { type hw card 0 }
diff --git a/recipes/alsa/alsa-state/at91sam9260ek/asound.state b/recipes/alsa/alsa-state/at91sam9260ek/asound.state
new file mode 100644
index 0000000000..3d86e4cd5a
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9260ek/asound.state
@@ -0,0 +1,108 @@
+state.at73c213_0 {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 20
+ value.1 20
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono PA Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 14'
+ iface MIXER
+ name 'PA Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PA High Gain Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PA Playback Switch'
+ value false
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '14 - 31'
+ iface MIXER
+ name 'Aux Capture Volume'
+ value 14
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Aux Capture Switch'
+ value false
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '14 - 31'
+ iface MIXER
+ name 'Line Capture Volume'
+ value.0 14
+ value.1 14
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Capture Switch'
+ value false
+ }
+}
diff --git a/recipes/alsa/alsa-state/at91sam9261ek/asound.conf b/recipes/alsa/alsa-state/at91sam9261ek/asound.conf
new file mode 100644
index 0000000000..87bb5ec050
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9261ek/asound.conf
@@ -0,0 +1,2 @@
+pcm.!default { type hw card 0 }
+ctl.!default { type hw card 0 }
diff --git a/recipes/alsa/alsa-state/at91sam9261ek/asound.state b/recipes/alsa/alsa-state/at91sam9261ek/asound.state
new file mode 100644
index 0000000000..40a6457c63
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9261ek/asound.state
@@ -0,0 +1,108 @@
+state.at73c213_1 {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 23
+ value.1 23
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 16
+ value.1 16
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono PA Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 14'
+ iface MIXER
+ name 'PA Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PA High Gain Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PA Playback Switch'
+ value false
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '14 - 31'
+ iface MIXER
+ name 'Aux Capture Volume'
+ value 14
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Aux Capture Switch'
+ value false
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '14 - 31'
+ iface MIXER
+ name 'Line Capture Volume'
+ value.0 14
+ value.1 14
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Capture Switch'
+ value false
+ }
+}
diff --git a/recipes/alsa/alsa-state/at91sam9263ek/asound.state b/recipes/alsa/alsa-state/at91sam9263ek/asound.state
index ee646a1341..e8d3218b4f 100644
--- a/recipes/alsa/alsa-state/at91sam9263ek/asound.state
+++ b/recipes/alsa/alsa-state/at91sam9263ek/asound.state
@@ -281,3 +281,286 @@ state.AC97 {
value true
}
}
+state.AC97C {
+ control.1 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Master Mono Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Mono Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Phone Playback Volume'
+ value 0
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Playback Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Mic Playback Volume'
+ value 0
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Line Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Line Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'CD Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'CD Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Aux Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Aux Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 2
+ comment.item.0 Mic
+ comment.item.1 CD
+ comment.item.2 Video
+ comment.item.3 Aux
+ comment.item.4 Line
+ comment.item.5 Mix
+ comment.item.6 'Mix Mono'
+ comment.item.7 Phone
+ iface MIXER
+ name 'Capture Source'
+ value.0 Mic
+ value.1 Mic
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 15'
+ comment.dbmin 0
+ comment.dbmax 2250
+ iface MIXER
+ name 'Capture Volume'
+ value.0 11
+ value.1 11
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mix
+ comment.item.1 Mic
+ iface MIXER
+ name 'Mono Output Select'
+ value Mix
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic1
+ comment.item.1 Mic2
+ iface MIXER
+ name 'Mic Select'
+ value Mic1
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Stereo Mic'
+ value false
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Headphone Jack Sense'
+ value false
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Jack Sense'
+ value false
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'External Amplifier'
+ value true
+ }
+}
diff --git a/recipes/alsa/alsa-state/at91sam9g10ek/asound.conf b/recipes/alsa/alsa-state/at91sam9g10ek/asound.conf
new file mode 100644
index 0000000000..87bb5ec050
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9g10ek/asound.conf
@@ -0,0 +1,2 @@
+pcm.!default { type hw card 0 }
+ctl.!default { type hw card 0 }
diff --git a/recipes/alsa/alsa-state/at91sam9g10ek/asound.state b/recipes/alsa/alsa-state/at91sam9g10ek/asound.state
new file mode 100644
index 0000000000..40a6457c63
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9g10ek/asound.state
@@ -0,0 +1,108 @@
+state.at73c213_1 {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 23
+ value.1 23
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 16
+ value.1 16
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono PA Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 14'
+ iface MIXER
+ name 'PA Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PA High Gain Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PA Playback Switch'
+ value false
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '14 - 31'
+ iface MIXER
+ name 'Aux Capture Volume'
+ value 14
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Aux Capture Switch'
+ value false
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '14 - 31'
+ iface MIXER
+ name 'Line Capture Volume'
+ value.0 14
+ value.1 14
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Capture Switch'
+ value false
+ }
+}
diff --git a/recipes/alsa/alsa-state/at91sam9g20ek/asound.conf b/recipes/alsa/alsa-state/at91sam9g20ek/asound.conf
new file mode 100644
index 0000000000..87bb5ec050
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9g20ek/asound.conf
@@ -0,0 +1,2 @@
+pcm.!default { type hw card 0 }
+ctl.!default { type hw card 0 }
diff --git a/recipes/alsa/alsa-state/at91sam9g20ek/asound.state b/recipes/alsa/alsa-state/at91sam9g20ek/asound.state
new file mode 100644
index 0000000000..da98b4eb40
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9g20ek/asound.state
@@ -0,0 +1,133 @@
+state.AT91SAMG20EK {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ comment.dbmin -12100
+ comment.dbmax 600
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 115
+ value.1 115
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Capture Volume'
+ value.0 23
+ value.1 23
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Line Capture Switch'
+ value.0 false
+ value.1 false
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Capture Switch'
+ value false
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ comment.dbmin -1500
+ comment.dbmax -600
+ iface MIXER
+ name 'Sidetone Playback Volume'
+ value 0
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ADC High Pass Filter Switch'
+ value true
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Store DC Offset Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 '32Khz'
+ comment.item.2 '44.1Khz'
+ comment.item.3 '48Khz'
+ iface MIXER
+ name 'Playback De-emphasis'
+ value None
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line In'
+ comment.item.1 Mic
+ iface MIXER
+ name 'Input Mux'
+ value 'Line In'
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Output Mixer Line Bypass Switch'
+ value false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Output Mixer Mic Sidetone Switch'
+ value false
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Output Mixer HiFi Playback Switch'
+ value true
+ }
+}
diff --git a/recipes/alsa/alsa-state/at91sam9g20ek_2mmc/asound.conf b/recipes/alsa/alsa-state/at91sam9g20ek_2mmc/asound.conf
new file mode 100644
index 0000000000..87bb5ec050
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9g20ek_2mmc/asound.conf
@@ -0,0 +1,2 @@
+pcm.!default { type hw card 0 }
+ctl.!default { type hw card 0 }
diff --git a/recipes/alsa/alsa-state/at91sam9g20ek_2mmc/asound.state b/recipes/alsa/alsa-state/at91sam9g20ek_2mmc/asound.state
new file mode 100644
index 0000000000..da98b4eb40
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9g20ek_2mmc/asound.state
@@ -0,0 +1,133 @@
+state.AT91SAMG20EK {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ comment.dbmin -12100
+ comment.dbmax 600
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 115
+ value.1 115
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Capture Volume'
+ value.0 23
+ value.1 23
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Line Capture Switch'
+ value.0 false
+ value.1 false
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Capture Switch'
+ value false
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ comment.dbmin -1500
+ comment.dbmax -600
+ iface MIXER
+ name 'Sidetone Playback Volume'
+ value 0
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ADC High Pass Filter Switch'
+ value true
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Store DC Offset Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 '32Khz'
+ comment.item.2 '44.1Khz'
+ comment.item.3 '48Khz'
+ iface MIXER
+ name 'Playback De-emphasis'
+ value None
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line In'
+ comment.item.1 Mic
+ iface MIXER
+ name 'Input Mux'
+ value 'Line In'
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Output Mixer Line Bypass Switch'
+ value false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Output Mixer Mic Sidetone Switch'
+ value false
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Output Mixer HiFi Playback Switch'
+ value true
+ }
+}
diff --git a/recipes/alsa/alsa-state/at91sam9g45ek/asound.conf b/recipes/alsa/alsa-state/at91sam9g45ek/asound.conf
index fa98593515..87bb5ec050 100644
--- a/recipes/alsa/alsa-state/at91sam9g45ek/asound.conf
+++ b/recipes/alsa/alsa-state/at91sam9g45ek/asound.conf
@@ -1,2 +1,2 @@
-pcm.!default { type hw card 0 }
+pcm.!default { type hw card 0 }
ctl.!default { type hw card 0 }
diff --git a/recipes/alsa/alsa-state/at91sam9g45ek/asound.state b/recipes/alsa/alsa-state/at91sam9g45ek/asound.state
index ee646a1341..e8d3218b4f 100644
--- a/recipes/alsa/alsa-state/at91sam9g45ek/asound.state
+++ b/recipes/alsa/alsa-state/at91sam9g45ek/asound.state
@@ -281,3 +281,286 @@ state.AC97 {
value true
}
}
+state.AC97C {
+ control.1 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Master Mono Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Mono Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Phone Playback Volume'
+ value 0
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Playback Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Mic Playback Volume'
+ value 0
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Line Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Line Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'CD Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'CD Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Aux Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Aux Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 2
+ comment.item.0 Mic
+ comment.item.1 CD
+ comment.item.2 Video
+ comment.item.3 Aux
+ comment.item.4 Line
+ comment.item.5 Mix
+ comment.item.6 'Mix Mono'
+ comment.item.7 Phone
+ iface MIXER
+ name 'Capture Source'
+ value.0 Mic
+ value.1 Mic
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 15'
+ comment.dbmin 0
+ comment.dbmax 2250
+ iface MIXER
+ name 'Capture Volume'
+ value.0 11
+ value.1 11
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mix
+ comment.item.1 Mic
+ iface MIXER
+ name 'Mono Output Select'
+ value Mix
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic1
+ comment.item.1 Mic2
+ iface MIXER
+ name 'Mic Select'
+ value Mic1
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Stereo Mic'
+ value false
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Headphone Jack Sense'
+ value false
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Jack Sense'
+ value false
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'External Amplifier'
+ value true
+ }
+}
diff --git a/recipes/alsa/alsa-state/at91sam9g45ekes/asound.conf b/recipes/alsa/alsa-state/at91sam9g45ekes/asound.conf
new file mode 100644
index 0000000000..87bb5ec050
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9g45ekes/asound.conf
@@ -0,0 +1,2 @@
+pcm.!default { type hw card 0 }
+ctl.!default { type hw card 0 }
diff --git a/recipes/alsa/alsa-state/at91sam9g45ekes/asound.state b/recipes/alsa/alsa-state/at91sam9g45ekes/asound.state
new file mode 100644
index 0000000000..e8d3218b4f
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9g45ekes/asound.state
@@ -0,0 +1,566 @@
+state.AC97 {
+ control.1 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Master Mono Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Mono Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Phone Playback Volume'
+ value 0
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Playback Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Mic Playback Volume'
+ value 0
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Line Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Line Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'CD Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'CD Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Aux Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Aux Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 2
+ comment.item.0 Mic
+ comment.item.1 CD
+ comment.item.2 Video
+ comment.item.3 Aux
+ comment.item.4 Line
+ comment.item.5 Mix
+ comment.item.6 'Mix Mono'
+ comment.item.7 Phone
+ iface MIXER
+ name 'Capture Source'
+ value.0 Mic
+ value.1 Mic
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 15'
+ comment.dbmin 0
+ comment.dbmax 2250
+ iface MIXER
+ name 'Capture Volume'
+ value.0 11
+ value.1 11
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mix
+ comment.item.1 Mic
+ iface MIXER
+ name 'Mono Output Select'
+ value Mix
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic1
+ comment.item.1 Mic2
+ iface MIXER
+ name 'Mic Select'
+ value Mic1
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Stereo Mic'
+ value false
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Headphone Jack Sense'
+ value false
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Jack Sense'
+ value false
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'External Amplifier'
+ value true
+ }
+}
+state.AC97C {
+ control.1 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Master Mono Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Mono Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Phone Playback Volume'
+ value 0
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Playback Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Mic Playback Volume'
+ value 0
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Line Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Line Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'CD Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'CD Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Aux Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Aux Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 2
+ comment.item.0 Mic
+ comment.item.1 CD
+ comment.item.2 Video
+ comment.item.3 Aux
+ comment.item.4 Line
+ comment.item.5 Mix
+ comment.item.6 'Mix Mono'
+ comment.item.7 Phone
+ iface MIXER
+ name 'Capture Source'
+ value.0 Mic
+ value.1 Mic
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 15'
+ comment.dbmin 0
+ comment.dbmax 2250
+ iface MIXER
+ name 'Capture Volume'
+ value.0 11
+ value.1 11
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mix
+ comment.item.1 Mic
+ iface MIXER
+ name 'Mono Output Select'
+ value Mix
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic1
+ comment.item.1 Mic2
+ iface MIXER
+ name 'Mic Select'
+ value Mic1
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Stereo Mic'
+ value false
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Headphone Jack Sense'
+ value false
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Jack Sense'
+ value false
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'External Amplifier'
+ value true
+ }
+}
diff --git a/recipes/alsa/alsa-state/at91sam9m10ekes/asound.conf b/recipes/alsa/alsa-state/at91sam9m10ekes/asound.conf
new file mode 100644
index 0000000000..87bb5ec050
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9m10ekes/asound.conf
@@ -0,0 +1,2 @@
+pcm.!default { type hw card 0 }
+ctl.!default { type hw card 0 }
diff --git a/recipes/alsa/alsa-state/at91sam9m10ekes/asound.state b/recipes/alsa/alsa-state/at91sam9m10ekes/asound.state
new file mode 100644
index 0000000000..e8d3218b4f
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9m10ekes/asound.state
@@ -0,0 +1,566 @@
+state.AC97 {
+ control.1 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Master Mono Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Mono Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Phone Playback Volume'
+ value 0
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Playback Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Mic Playback Volume'
+ value 0
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Line Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Line Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'CD Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'CD Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Aux Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Aux Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 2
+ comment.item.0 Mic
+ comment.item.1 CD
+ comment.item.2 Video
+ comment.item.3 Aux
+ comment.item.4 Line
+ comment.item.5 Mix
+ comment.item.6 'Mix Mono'
+ comment.item.7 Phone
+ iface MIXER
+ name 'Capture Source'
+ value.0 Mic
+ value.1 Mic
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 15'
+ comment.dbmin 0
+ comment.dbmax 2250
+ iface MIXER
+ name 'Capture Volume'
+ value.0 11
+ value.1 11
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mix
+ comment.item.1 Mic
+ iface MIXER
+ name 'Mono Output Select'
+ value Mix
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic1
+ comment.item.1 Mic2
+ iface MIXER
+ name 'Mic Select'
+ value Mic1
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Stereo Mic'
+ value false
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Headphone Jack Sense'
+ value false
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Jack Sense'
+ value false
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'External Amplifier'
+ value true
+ }
+}
+state.AC97C {
+ control.1 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Master Mono Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Mono Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Phone Playback Volume'
+ value 0
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Playback Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Mic Playback Volume'
+ value 0
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Line Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Line Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'CD Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'CD Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Aux Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Aux Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 2
+ comment.item.0 Mic
+ comment.item.1 CD
+ comment.item.2 Video
+ comment.item.3 Aux
+ comment.item.4 Line
+ comment.item.5 Mix
+ comment.item.6 'Mix Mono'
+ comment.item.7 Phone
+ iface MIXER
+ name 'Capture Source'
+ value.0 Mic
+ value.1 Mic
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 15'
+ comment.dbmin 0
+ comment.dbmax 2250
+ iface MIXER
+ name 'Capture Volume'
+ value.0 11
+ value.1 11
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mix
+ comment.item.1 Mic
+ iface MIXER
+ name 'Mono Output Select'
+ value Mix
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic1
+ comment.item.1 Mic2
+ iface MIXER
+ name 'Mic Select'
+ value Mic1
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Stereo Mic'
+ value false
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Headphone Jack Sense'
+ value false
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Jack Sense'
+ value false
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'External Amplifier'
+ value true
+ }
+}
diff --git a/recipes/alsa/alsa-state/at91sam9m10g45ek/asound.conf b/recipes/alsa/alsa-state/at91sam9m10g45ek/asound.conf
new file mode 100644
index 0000000000..87bb5ec050
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9m10g45ek/asound.conf
@@ -0,0 +1,2 @@
+pcm.!default { type hw card 0 }
+ctl.!default { type hw card 0 }
diff --git a/recipes/alsa/alsa-state/at91sam9m10g45ek/asound.state b/recipes/alsa/alsa-state/at91sam9m10g45ek/asound.state
new file mode 100644
index 0000000000..e8d3218b4f
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9m10g45ek/asound.state
@@ -0,0 +1,566 @@
+state.AC97 {
+ control.1 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Master Mono Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Mono Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Phone Playback Volume'
+ value 0
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Playback Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Mic Playback Volume'
+ value 0
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Line Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Line Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'CD Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'CD Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Aux Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Aux Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 2
+ comment.item.0 Mic
+ comment.item.1 CD
+ comment.item.2 Video
+ comment.item.3 Aux
+ comment.item.4 Line
+ comment.item.5 Mix
+ comment.item.6 'Mix Mono'
+ comment.item.7 Phone
+ iface MIXER
+ name 'Capture Source'
+ value.0 Mic
+ value.1 Mic
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 15'
+ comment.dbmin 0
+ comment.dbmax 2250
+ iface MIXER
+ name 'Capture Volume'
+ value.0 11
+ value.1 11
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mix
+ comment.item.1 Mic
+ iface MIXER
+ name 'Mono Output Select'
+ value Mix
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic1
+ comment.item.1 Mic2
+ iface MIXER
+ name 'Mic Select'
+ value Mic1
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Stereo Mic'
+ value false
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Headphone Jack Sense'
+ value false
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Jack Sense'
+ value false
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'External Amplifier'
+ value true
+ }
+}
+state.AC97C {
+ control.1 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Master Mono Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Mono Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Phone Playback Volume'
+ value 0
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Playback Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Mic Playback Volume'
+ value 0
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Line Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Line Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'CD Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'CD Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Aux Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Aux Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 2
+ comment.item.0 Mic
+ comment.item.1 CD
+ comment.item.2 Video
+ comment.item.3 Aux
+ comment.item.4 Line
+ comment.item.5 Mix
+ comment.item.6 'Mix Mono'
+ comment.item.7 Phone
+ iface MIXER
+ name 'Capture Source'
+ value.0 Mic
+ value.1 Mic
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 15'
+ comment.dbmin 0
+ comment.dbmax 2250
+ iface MIXER
+ name 'Capture Volume'
+ value.0 11
+ value.1 11
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mix
+ comment.item.1 Mic
+ iface MIXER
+ name 'Mono Output Select'
+ value Mix
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic1
+ comment.item.1 Mic2
+ iface MIXER
+ name 'Mic Select'
+ value Mic1
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Stereo Mic'
+ value false
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Headphone Jack Sense'
+ value false
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Jack Sense'
+ value false
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'External Amplifier'
+ value true
+ }
+}
diff --git a/recipes/alsa/alsa-state/at91sam9rlek/asound.conf b/recipes/alsa/alsa-state/at91sam9rlek/asound.conf
new file mode 100644
index 0000000000..87bb5ec050
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9rlek/asound.conf
@@ -0,0 +1,2 @@
+pcm.!default { type hw card 0 }
+ctl.!default { type hw card 0 }
diff --git a/recipes/alsa/alsa-state/at91sam9rlek/asound.state b/recipes/alsa/alsa-state/at91sam9rlek/asound.state
new file mode 100644
index 0000000000..e8d3218b4f
--- /dev/null
+++ b/recipes/alsa/alsa-state/at91sam9rlek/asound.state
@@ -0,0 +1,566 @@
+state.AC97 {
+ control.1 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Master Mono Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Mono Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Phone Playback Volume'
+ value 0
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Playback Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Mic Playback Volume'
+ value 0
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Line Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Line Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'CD Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'CD Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Aux Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Aux Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 2
+ comment.item.0 Mic
+ comment.item.1 CD
+ comment.item.2 Video
+ comment.item.3 Aux
+ comment.item.4 Line
+ comment.item.5 Mix
+ comment.item.6 'Mix Mono'
+ comment.item.7 Phone
+ iface MIXER
+ name 'Capture Source'
+ value.0 Mic
+ value.1 Mic
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 15'
+ comment.dbmin 0
+ comment.dbmax 2250
+ iface MIXER
+ name 'Capture Volume'
+ value.0 11
+ value.1 11
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mix
+ comment.item.1 Mic
+ iface MIXER
+ name 'Mono Output Select'
+ value Mix
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic1
+ comment.item.1 Mic2
+ iface MIXER
+ name 'Mic Select'
+ value Mic1
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Stereo Mic'
+ value false
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Headphone Jack Sense'
+ value false
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Jack Sense'
+ value false
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'External Amplifier'
+ value true
+ }
+}
+state.AC97C {
+ control.1 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Master Mono Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Mono Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Phone Playback Volume'
+ value 0
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Playback Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Mic Playback Volume'
+ value 0
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Line Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Line Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'CD Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'CD Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Aux Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Aux Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 2
+ comment.item.0 Mic
+ comment.item.1 CD
+ comment.item.2 Video
+ comment.item.3 Aux
+ comment.item.4 Line
+ comment.item.5 Mix
+ comment.item.6 'Mix Mono'
+ comment.item.7 Phone
+ iface MIXER
+ name 'Capture Source'
+ value.0 Mic
+ value.1 Mic
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 15'
+ comment.dbmin 0
+ comment.dbmax 2250
+ iface MIXER
+ name 'Capture Volume'
+ value.0 11
+ value.1 11
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mix
+ comment.item.1 Mic
+ iface MIXER
+ name 'Mono Output Select'
+ value Mix
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic1
+ comment.item.1 Mic2
+ iface MIXER
+ name 'Mic Select'
+ value Mic1
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Stereo Mic'
+ value false
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Headphone Jack Sense'
+ value false
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Jack Sense'
+ value false
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'External Amplifier'
+ value true
+ }
+}
diff --git a/recipes/alsa/alsa-state/omapzoom2/asound.state b/recipes/alsa/alsa-state/omapzoom2/asound.state
new file mode 100644
index 0000000000..265020c66b
--- /dev/null
+++ b/recipes/alsa/alsa-state/omapzoom2/asound.state
@@ -0,0 +1,722 @@
+state.Zoom2 {
+ control.1 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Option 2 (voice/audio)'
+ comment.item.1 'Option 1 (audio)'
+ iface MIXER
+ name 'Codec Operation Mode'
+ value 'Option 1 (audio)'
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ comment.dbmin -6300
+ comment.dbmax 0
+ iface MIXER
+ name 'DAC1 Digital Fine Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ comment.dbmin -6300
+ comment.dbmax 0
+ iface MIXER
+ name 'DAC2 Digital Fine Playback Volume'
+ value.0 54
+ value.1 54
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 2'
+ comment.dbmin 0
+ comment.dbmax 1200
+ iface MIXER
+ name 'DAC1 Digital Coarse Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 2'
+ comment.dbmin 0
+ comment.dbmax 1200
+ iface MIXER
+ name 'DAC2 Digital Coarse Playback Volume'
+ value.0 1
+ value.1 1
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 18'
+ comment.dbmin -2400
+ comment.dbmax 1200
+ iface MIXER
+ name 'DAC1 Analog Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 18'
+ comment.dbmin -2400
+ comment.dbmax 1200
+ iface MIXER
+ name 'DAC2 Analog Playback Volume'
+ value.0 14
+ value.1 14
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'DAC1 Analog Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'DAC2 Analog Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 49'
+ comment.dbmin -3700
+ comment.dbmax 1200
+ iface MIXER
+ name 'DAC Voice Digital Downlink Volume'
+ value 0
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 18'
+ comment.dbmin -2400
+ comment.dbmax 1200
+ iface MIXER
+ name 'DAC Voice Analog Downlink Volume'
+ value 0
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'DAC Voice Analog Downlink Switch'
+ value false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 3'
+ comment.dbmin -1200
+ comment.dbmax 600
+ iface MIXER
+ name 'PreDriv Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 3'
+ comment.dbmin -1200
+ comment.dbmax 600
+ iface MIXER
+ name 'Headset Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 3'
+ comment.dbmin -1200
+ comment.dbmax 600
+ iface MIXER
+ name 'Carkit Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ comment.dbmin -600
+ comment.dbmax 1200
+ iface MIXER
+ name 'Earpiece Playback Volume'
+ value 0
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin 0
+ comment.dbmax 3100
+ iface MIXER
+ name 'TX1 Digital Capture Volume'
+ value.0 12
+ value.1 12
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin 0
+ comment.dbmax 3100
+ iface MIXER
+ name 'TX2 Digital Capture Volume'
+ value.0 0
+ value.1 0
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 5'
+ comment.dbmin 0
+ comment.dbmax 3000
+ iface MIXER
+ name 'Analog Capture Volume'
+ value.0 0
+ value.1 0
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Voice high priority'
+ comment.item.1 'HiFi high priority'
+ iface MIXER
+ name 'AVADC Clock Priority'
+ value 'Voice high priority'
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '27/20/14 ms'
+ comment.item.1 '55/40/27 ms'
+ comment.item.2 '109/81/55 ms'
+ comment.item.3 '218/161/109 ms'
+ comment.item.4 '437/323/218 ms'
+ comment.item.5 '874/645/437 ms'
+ comment.item.6 '1748/1291/874 ms'
+ comment.item.7 '3495/2581/1748 ms'
+ iface MIXER
+ name 'HS ramp delay'
+ value '109/81/55 ms'
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Vibra H-bridge direction'
+ comment.item.1 'Audio data MSB'
+ iface MIXER
+ name 'Vibra H-bridge mode'
+ value 'Vibra H-bridge direction'
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Positive polarity'
+ comment.item.1 'Negative polarity'
+ iface MIXER
+ name 'Vibra H-bridge direction'
+ value 'Positive polarity'
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 On
+ iface MIXER
+ name 'HIFI Playback Control'
+ value On
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 On
+ iface MIXER
+ name 'Voice Control'
+ value Off
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 On
+ iface MIXER
+ name 'Capture Control'
+ value Off
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '8000'
+ comment.item.1 '11025'
+ comment.item.2 '12000'
+ comment.item.3 '16000'
+ comment.item.4 '22050'
+ comment.item.5 '24000'
+ comment.item.6 '32000'
+ comment.item.7 '44100'
+ comment.item.8 '48000'
+ comment.item.9 '96000'
+ iface MIXER
+ name 'Audio Sample Rate'
+ value '44100'
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '8000'
+ comment.item.1 '16000'
+ iface MIXER
+ name 'Voice Sample Rate'
+ value '8000'
+ }
+ control.29 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name '256FS CLK Control Switch'
+ value true
+ }
+ control.30 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Analog Right Sub Mic Capture Switch'
+ value false
+ }
+ control.31 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Analog Right AUXR Capture Switch'
+ value false
+ }
+ control.32 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Analog Left Main Mic Capture Switch'
+ value false
+ }
+ control.33 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Analog Left Headset Mic Capture Switch'
+ value false
+ }
+ control.34 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Analog Left AUXL Capture Switch'
+ value false
+ }
+ control.35 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Analog Left Carkit Mic Capture Switch'
+ value false
+ }
+ control.36 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Analog
+ comment.item.1 Digimic1
+ iface MIXER
+ name 'TX2 Capture Route'
+ value Analog
+ }
+ control.37 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Analog
+ comment.item.1 Digimic0
+ iface MIXER
+ name 'TX1 Capture Route'
+ value Analog
+ }
+ control.38 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Local vibrator'
+ comment.item.1 Audio
+ iface MIXER
+ name 'Vibra Route'
+ value 'Local vibrator'
+ }
+ control.39 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 AudioL1
+ comment.item.1 AudioR1
+ comment.item.2 AudioL2
+ comment.item.3 AudioR2
+ iface MIXER
+ name 'Vibra Mux'
+ value AudioL1
+ }
+ control.40 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HandsfreeR Switch'
+ value true
+ }
+ control.41 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Voice
+ comment.item.1 AudioR1
+ comment.item.2 AudioR2
+ comment.item.3 AudioL2
+ iface MIXER
+ name 'HandsfreeR Mux'
+ value AudioR2
+ }
+ control.42 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HandsfreeL Switch'
+ value true
+ }
+ control.43 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Voice
+ comment.item.1 AudioL1
+ comment.item.2 AudioL2
+ comment.item.3 AudioR2
+ iface MIXER
+ name 'HandsfreeL Mux'
+ value AudioL2
+ }
+ control.44 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'CarkitR Mixer Voice'
+ value false
+ }
+ control.45 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'CarkitR Mixer AudioR1'
+ value false
+ }
+ control.46 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'CarkitR Mixer AudioR2'
+ value false
+ }
+ control.47 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'CarkitL Mixer Voice'
+ value false
+ }
+ control.48 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'CarkitL Mixer AudioL1'
+ value false
+ }
+ control.49 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'CarkitL Mixer AudioL2'
+ value false
+ }
+ control.50 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HeadsetR Mixer Voice'
+ value false
+ }
+ control.51 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HeadsetR Mixer AudioR1'
+ value false
+ }
+ control.52 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HeadsetR Mixer AudioR2'
+ value true
+ }
+ control.53 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HeadsetL Mixer Voice'
+ value false
+ }
+ control.54 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HeadsetL Mixer AudioL1'
+ value false
+ }
+ control.55 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HeadsetL Mixer AudioL2'
+ value true
+ }
+ control.56 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PredriveR Mixer Voice'
+ value false
+ }
+ control.57 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PredriveR Mixer AudioR1'
+ value false
+ }
+ control.58 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PredriveR Mixer AudioR2'
+ value false
+ }
+ control.59 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PredriveR Mixer AudioL2'
+ value false
+ }
+ control.60 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PredriveL Mixer Voice'
+ value false
+ }
+ control.61 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PredriveL Mixer AudioL1'
+ value false
+ }
+ control.62 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PredriveL Mixer AudioL2'
+ value false
+ }
+ control.63 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'PredriveL Mixer AudioR2'
+ value false
+ }
+ control.64 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Earpiece Mixer Voice'
+ value false
+ }
+ control.65 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Earpiece Mixer AudioL1'
+ value false
+ }
+ control.66 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Earpiece Mixer AudioL2'
+ value false
+ }
+ control.67 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Earpiece Mixer AudioR1'
+ value false
+ }
+ control.68 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 41'
+ comment.dbmin -5100
+ comment.dbmax -1000
+ iface MIXER
+ name 'Voice Digital Loopback Volume'
+ value 0
+ }
+ control.69 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ comment.dbmin -2400
+ comment.dbmax 0
+ iface MIXER
+ name 'Right Digital Loopback Volume'
+ value 0
+ }
+ control.70 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ comment.dbmin -2400
+ comment.dbmax 0
+ iface MIXER
+ name 'Left Digital Loopback Volume'
+ value 0
+ }
+ control.71 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Voice Analog Loopback Switch'
+ value false
+ }
+ control.72 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left2 Analog Loopback Switch'
+ value false
+ }
+ control.73 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right2 Analog Loopback Switch'
+ value false
+ }
+ control.74 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left1 Analog Loopback Switch'
+ value false
+ }
+ control.75 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right1 Analog Loopback Switch'
+ value false
+ }
+}
diff --git a/recipes/alsa/alsa-utils_1.0.11.bb b/recipes/alsa/alsa-utils_1.0.11.bb
index d2acfe1995..fbcf8d5c39 100644
--- a/recipes/alsa/alsa-utils_1.0.11.bb
+++ b/recipes/alsa/alsa-utils_1.0.11.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "ALSA Utilities"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "console/utils"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS = "alsa-lib ncurses"
PR = "r1"
diff --git a/recipes/alsa/alsa-utils_1.0.13.bb b/recipes/alsa/alsa-utils_1.0.13.bb
index e77c2d97f7..a0248735b2 100644
--- a/recipes/alsa/alsa-utils_1.0.13.bb
+++ b/recipes/alsa/alsa-utils_1.0.13.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "ALSA Utilities"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "console/utils"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS = "alsa-lib ncurses"
PR = "r1"
diff --git a/recipes/alsa/alsa-utils_1.0.14.bb b/recipes/alsa/alsa-utils_1.0.14.bb
index 25eeade7cd..e46f0e92be 100644
--- a/recipes/alsa/alsa-utils_1.0.14.bb
+++ b/recipes/alsa/alsa-utils_1.0.14.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "ALSA Utilities"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "console/utils"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS = "alsa-lib ncurses"
PR = "r1"
diff --git a/recipes/alsa/alsa-utils_1.0.15.bb b/recipes/alsa/alsa-utils_1.0.15.bb
index b271e75439..ae879f2d6c 100644
--- a/recipes/alsa/alsa-utils_1.0.15.bb
+++ b/recipes/alsa/alsa-utils_1.0.15.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "ALSA Utilities"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "console/utils"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS = "alsa-lib ncurses"
PR = "r1"
diff --git a/recipes/alsa/alsa-utils_1.0.17.bb b/recipes/alsa/alsa-utils_1.0.17.bb
index d5f116bafc..9d98601c08 100644
--- a/recipes/alsa/alsa-utils_1.0.17.bb
+++ b/recipes/alsa/alsa-utils_1.0.17.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "ALSA Utilities"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "console/utils"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS = "alsa-lib ncurses"
SRC_URI = "ftp://ftp.alsa-project.org/pub/utils/alsa-utils-${PV}.tar.bz2 \
diff --git a/recipes/alsa/alsa-utils_1.0.18.bb b/recipes/alsa/alsa-utils_1.0.18.bb
index 40718b5500..68af8a548a 100644
--- a/recipes/alsa/alsa-utils_1.0.18.bb
+++ b/recipes/alsa/alsa-utils_1.0.18.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "ALSA Utilities"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "console/utils"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS = "alsa-lib ncurses"
PR = "r2"
diff --git a/recipes/alsa/alsa-utils_1.0.19.bb b/recipes/alsa/alsa-utils_1.0.19.bb
index 3e9bd86b7e..d218678dc8 100644
--- a/recipes/alsa/alsa-utils_1.0.19.bb
+++ b/recipes/alsa/alsa-utils_1.0.19.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "ALSA Utilities"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "console/utils"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS = "alsa-lib ncurses"
PR = "r1"
diff --git a/recipes/alsa/alsa-utils_1.0.20.bb b/recipes/alsa/alsa-utils_1.0.20.bb
index 7eeb46ca7d..be146f605a 100644
--- a/recipes/alsa/alsa-utils_1.0.20.bb
+++ b/recipes/alsa/alsa-utils_1.0.20.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "ALSA Utilities"
HOMEPAGE = "http://www.alsa-project.org"
SECTION = "console/utils"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS = "alsa-lib ncurses"
PR = "r0"
diff --git a/recipes/altboot/README.txt b/recipes/altboot/README.txt
deleted file mode 100644
index bba16027ff..0000000000
--- a/recipes/altboot/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-altboot_1.0.8.bb - Last known-working version for all Zauruses
-altboot_1.1.1+wip-20061123.bb - Last known-working version for neo1973
-altboot_svn.bb - Altboot developer snapshot - avoid ;)
-altboot_1.0.8+1.0.9_pre1 - Development version with new menu
diff --git a/recipes/altboot/altboot.inc b/recipes/altboot/altboot.inc
deleted file mode 100644
index 772a6b8eb4..0000000000
--- a/recipes/altboot/altboot.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-DESCRIPTION = "The altboot bootmanager"
-HOMEPAGE = "http://www.hentges.net/misc/openzaurus/index.shtml"
-LICENSE = "GPL"
-RDEPENDS_${PN} = "${PN}-conf"
-RDEPENDS_${PN}-conf = "${PN}"
-RRECOMMENDS_${PN} = "e2fsprogs-e2fsck e2fsprogs-mke2fs dosfstools kexec-tools kernel-module-loop"
-RRECOMMENDS_${PN}_spitz += " kernel-module-jffs2"
-
-S = "${WORKDIR}/trunk/"
-
-PACKAGE_ARCH_${PN} = "${MACHINE}"
-PACKAGE_ARCH_${PN}-doc = "all"
-PACKAGE_ARCH_${PN}-conf = "${MACHINE}"
-PACKAGES = "${PN}-dbg ${PN}-conf ${PN}-doc ${PN}"
-
-FILES_${PN}-conf = "/etc/altboot*cfg"
-
-MACHINE_DIR = "${MACHINE}"
-MACHINE_DIR_nslu2be = "nslu2le"
diff --git a/recipes/altboot/altboot_1.0.8+1.0.9_pre1.bb b/recipes/altboot/altboot_1.0.8+1.0.9_pre1.bb
deleted file mode 100644
index 3890e68893..0000000000
--- a/recipes/altboot/altboot_1.0.8+1.0.9_pre1.bb
+++ /dev/null
@@ -1,76 +0,0 @@
-require altboot.inc
-
-DEFAULT_PREFERENCE = "-1"
-
-## Laibsch: The following DEPENDS lines seem broken in light of the fact that
-## they have circular dependencies and depend on stuff that is recommended
-## elsewhere. Let's activate them only after further discussion
-#RDEPENDS_${PN} = "${PN}-conf kexec-tools ncurses"
-#RDEPENDS_${PN}_append_poodle = " kexec-tools"
-#RDEPENDS_${PN}-conf = "${PN}"
-
-PR = "r2"
-
-SVN_REV="65"
-#TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '-')}"
-TAG = '1.0.x'
-SRC_URI = "svn://hentges.net/public/altboot/branches/;module=${TAG};rev=${SVN_REV};proto=svn"
-
-LDFLAGS += "-lncurses -lmenu"
-
-S = "${WORKDIR}/${TAG}/"
-
-do_configure() {
- cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}\"/" > ${S}/init.altboot_
- mv ${S}/init.altboot_ ${S}/init.altboot
-}
-
-do_compile() {
- ${CC} ${CFLAGS} ${LDFLAGS} ${S}curses_menu/altboot_menu.c -o altboot_menu
-}
-
-do_install() {
- install -d ${D}/sbin
- install -d ${D}/etc/altboot-menu
- install -d ${D}/etc/altboot-menu/Advanced
- install -d ${D}/etc/altboot.rc
- install -d ${D}/usr/share/doc/altboot
- install -d ${D}/usr/share/sounds
-
- if test -d ${S}/${MACHINE}
- then
- install -m 0644 ${S}/${MACHINE}/altboot*.cfg ${D}/etc
- else
- install -m 0644 ${S}/altboot*.cfg ${D}/etc
- fi
-
- install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds
- install -m 0644 ${S}/altboot.func ${D}/etc
- install -m 0755 ${S}/init.altboot ${D}/sbin
- install -m 0755 ${S}/altboot_menu ${D}/sbin
-
- install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu
-
- install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
-
- install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc
- install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc
-}
-
-pkg_postinst_${PN}() {
- update-alternatives --install /sbin/init init /sbin/init.altboot 55
-}
-
-pkg_postrm_${PN}() {
- update-alternatives --remove init /sbin/init.altboot
-}
-
-do_rm_work() {
-}
-
-PACKAGE_ARCH_${PN} = "all"
-PACKAGE_ARCH_${PN}-doc = "all"
-PACKAGE_ARCH_${PN}-conf = "${MACHINE}"
-PACKAGES = "${PN}-dbg ${PN}-conf ${PN}-doc ${PN}"
-
-FILES_${PN}-conf = "/etc/altboot*.cfg"
diff --git a/recipes/altboot/altboot_1.0.8.bb b/recipes/altboot/altboot_1.0.8.bb
deleted file mode 100644
index 3e18111a5b..0000000000
--- a/recipes/altboot/altboot_1.0.8.bb
+++ /dev/null
@@ -1,49 +0,0 @@
-require altboot.inc
-
-PR = "r4"
-
-TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '-')}"
-SRC_URI = "svn://hentges.net/public/altboot/tags/;module=${TAG};proto=svn"
-S = "${WORKDIR}/${TAG}/"
-
-do_install() {
- install -d ${D}/sbin
- install -d ${D}/etc/altboot-menu
- install -d ${D}/etc/altboot-menu/Advanced
- install -d ${D}/etc/altboot.rc
- install -d ${D}/usr/share/doc/altboot
- install -d ${D}/usr/share/sounds
-
- if test -d ${S}/${MACHINE}
- then
- install -m 0644 ${S}/${MACHINE}/altboot*.cfg ${D}/etc
- else
- install -m 0644 ${S}/altboot*.cfg ${D}/etc
- fi
-
- install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds
- install -m 0644 ${S}/altboot.func ${D}/etc
- install -m 0755 ${S}/init.altboot ${D}/sbin
-
- install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu
-
- install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
-
- install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc
- install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc
-}
-
-do_configure() {
- cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}\"/" > ${S}/init.altboot_
- mv ${S}/init.altboot_ ${S}/init.altboot
-}
-
-pkg_postinst_${PN}() {
- update-alternatives --install /sbin/init init /sbin/init.altboot 55
-}
-
-pkg_postrm_${PN}() {
- update-alternatives --remove init /sbin/init.altboot
-}
-
-PACKAGE_ARCH_${PN} = "all"
diff --git a/recipes/altboot/altboot_1.1.1+wip-SVNR83.bb b/recipes/altboot/altboot_1.1.1+wip-SVNR83.bb
deleted file mode 100644
index b9056e655a..0000000000
--- a/recipes/altboot/altboot_1.1.1+wip-SVNR83.bb
+++ /dev/null
@@ -1,76 +0,0 @@
-require altboot.inc
-
-PR = "r0"
-
-SVN_REV = "83"
-SRC_URI = "svn://hentges.net/public/altboot;module=trunk;rev=${SVN_REV} \
- "
-
-do_install() {
- install -d ${D}/sbin
- install -d ${D}/etc/altboot-menu
- install -d ${D}/etc/altboot.rc
- install -d ${D}/usr/share/doc/altboot
- install -d ${D}/usr/share/sounds
-
- if test -d ${S}/${MACHINE_DIR}
- then
- install -m 0644 ${S}/${MACHINE_DIR}/altboot*.cfg ${D}/etc/
- else
- install -m 0644 ${S}/altboot*.cfg ${D}/etc/
- fi
-
- install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds
- install -m 0644 ${S}/altboot.func ${D}/etc
- install -m 0644 ${S}/altboot.sbin ${D}/etc
- install -m 0644 ${S}/altbootctl.conf ${D}/etc
- install -m 0755 ${S}/init.altboot ${D}/sbin
- install -m 0755 ${S}/altbootctl ${D}/sbin
-
- ln -s /sbin/init.altboot ${D}/sbin/altboot
-
- if test -d ${S}/${MACHINE_DIR}/altboot-menu
- then
- install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/*-* ${D}/etc/altboot-menu
-
- if test -d ${S}/${MACHINE_DIR}/altboot-menu/Advanced
- then
- install -d ${D}/etc/altboot-menu/Advanced
- install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
- fi
- else
- install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu
-
- if test -d ${S}/altboot-menu/Advanced
- then
- install -d ${D}/etc/altboot-menu/Advanced
- install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
- fi
- fi
-
- if test -d ${S}/${MACHINE_DIR}/altboot.rc
- then
- install -m 0755 ${S}/${MACHINE_DIR}/altboot.rc/*.sh ${D}/etc/altboot.rc
- install -m 0644 ${S}/${MACHINE_DIR}/altboot.rc/*.txt ${D}/etc/altboot.rc
- else
- install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc
- install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc
- fi
-}
-
-do_configure() {
- cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}-${PR}\"/" > ${S}/init.altboot_
- mv ${S}/init.altboot_ ${S}/init.altboot
-}
-
-pkg_postinst_${PN}() {
- test -L /linuxrc && update-alternatives --install /linuxrc linuxrc /sbin/init.altboot 55
-
- update-alternatives --install /sbin/init init /sbin/init.altboot 55
-}
-
-pkg_postrm_${PN}() {
- test -L /linuxrc && update_alternatives --remove linuxrc /sbin/init.altboot
-
- update-alternatives --remove init /sbin/init.altboot
-}
diff --git a/recipes/altboot/altboot_svn.bb b/recipes/altboot/altboot_svn.bb
deleted file mode 100644
index 85a7fe612f..0000000000
--- a/recipes/altboot/altboot_svn.bb
+++ /dev/null
@@ -1,75 +0,0 @@
-require altboot.inc
-
-PV = "1.1.1+wip-${SRCDATE}"
-PR = "r4"
-
-SRC_URI = "svn://hentges.net/public/altboot;module=trunk;proto=svn"
-
-do_install() {
- install -d ${D}/sbin
- install -d ${D}/etc/altboot-menu
- install -d ${D}/etc/altboot-menu/Advanced
- install -d ${D}/etc/altboot.rc
- install -d ${D}/usr/share/doc/altboot
- install -d ${D}/usr/share/sounds
-
- if test -d ${S}/${MACHINE_DIR}
- then
- install -m 0644 ${S}/${MACHINE_DIR}/altboot*.cfg ${D}/etc/
- else
- install -m 0644 ${S}/altboot*.cfg ${D}/etc/
- fi
-
- install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds
- install -m 0644 ${S}/altboot.func ${D}/etc
- install -m 0644 ${S}/altboot.sbin ${D}/etc
- install -m 0644 ${S}/altbootctl.conf ${D}/etc
- install -m 0755 ${S}/init.altboot ${D}/sbin
- install -m 0755 ${S}/altbootctl ${D}/sbin
-
- ln -s /sbin/init.altboot ${D}/sbin/altboot
-
- if test -d ${S}/${MACHINE_DIR}/altboot-menu
- then
- install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/*-* ${D}/etc/altboot-menu
-
- if test -d ${S}/${MACHINE_DIR}/altboot-menu/Advanced
- then
- install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
- fi
- else
- install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu
-
- if test -d ${S}/altboot-menu/Advanced
- then
- install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
- fi
- fi
-
- if test -d ${S}/${MACHINE_DIR}/altboot.rc
- then
- install -m 0755 ${S}/${MACHINE_DIR}/altboot.rc/*.sh ${D}/etc/altboot.rc
- install -m 0644 ${S}/${MACHINE_DIR}/altboot.rc/*.txt ${D}/etc/altboot.rc
- else
- install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc
- install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc
- fi
-}
-
-do_configure() {
- cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}-${PR}\"/" > ${S}/init.altboot_
- mv ${S}/init.altboot_ ${S}/init.altboot
-}
-
-pkg_postinst_${PN}() {
- test -L /linuxrc && update-alternatives --install /linuxrc linuxrc /sbin/init.altboot 55
-
- update-alternatives --install /sbin/init init /sbin/init.altboot 55
-}
-
-pkg_postrm_${PN}() {
- test -L /linuxrc && update_alternatives --remove linuxrc /sbin/init.altboot
-
- update-alternatives --remove init /sbin/init.altboot
-}
-
diff --git a/recipes/altboot/files/sd-dynamic-fix.patch b/recipes/altboot/files/sd-dynamic-fix.patch
deleted file mode 100644
index f31c6b8dc7..0000000000
--- a/recipes/altboot/files/sd-dynamic-fix.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-Index: trunk/altboot.func
-===================================================================
---- trunk.orig/altboot.func 2007-10-30 15:48:16.000000000 +0000
-+++ trunk/altboot.func 2007-10-30 15:48:21.000000000 +0000
-@@ -499,17 +499,6 @@
- then
- echo "Note: $SD_MOUNTPOINT is already mounted"
- else
-- # We can't trust that the SD device file is there when running kernel 2.6 w/ udev
-- # and starting udev at this point may not be the best idea...
-- if `uname -r | grep -q "2.6"`
-- then
-- #Let's just assume the device file name never changes...
-- dev_no="`echo "$SD_DEVICE" | sed -n "s/\/dev\/mmcblk\(.*\)p\(.*\)/\1/p"`"
-- part_no="`echo "$SD_DEVICE" | sed -n "s/\/dev\/mmcblk\(.*\)p\(.*\)/\2/p"`"
-- ! test -e /dev/mmcblk${dev_no} && mknod /dev/mmcblk${dev_no} b 254 0
-- ! test -e /dev/mmcblk${dev_no}p${part_no} && mknod /dev/mmcblk${dev_no}p${part_no} b 254 $part_no
-- fi
--
- # Kernel 2.6 has the SD driver compiled into the kernel
- if test -n "$SD_KERNEL_MODULE"
- then
-@@ -544,6 +533,21 @@
- fi
- fi
-
-+ # We can't trust that the SD device file is there when running kernel 2.6 w/ udev
-+ # and starting udev at this point may not be the best idea...
-+ if `uname -r | grep -q "2.6"`
-+ then
-+ #Let's just assume the device file name never changes...
-+ dev_no="`echo "$SD_DEVICE" | sed -n "s/\/dev\/mmcblk\(.*\)p\(.*\)/\1/p"`"
-+ part_no="`echo "$SD_DEVICE" | sed -n "s/\/dev\/mmcblk\(.*\)p\(.*\)/\2/p"`"
-+ if [ -f /sys/block/mmcblk${dev_no}/mmcblk${dev_no}p${part_no}/dev ]
-+ then
-+ rm -f /dev/mmcblk${dev_no}p${part_no} || true
-+ mknod /dev/mmcblk${dev_no}p${part_no} b `cat /sys/block/mmcblk${dev_no}/mmcblk${dev_no}p${part_no}/dev|sed 's/:/ /' `
-+ fi
-+
-+ fi
-+
- sleep 3
-
- check_fs "$SD_DEVICE"
diff --git a/recipes/android/android-image-utils-native_git.bb b/recipes/android/android-image-utils-native_git.bb
new file mode 100644
index 0000000000..489a69349a
--- /dev/null
+++ b/recipes/android/android-image-utils-native_git.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Android Image Creation and Booting Utilities"
+SECTION = "console/utils"
+LICENSE = "GPL"
+PV = "1.0+gitr${SRCREV}"
+PR = "r1"
+
+SRC_URI = "\
+ ${FREESMARTPHONE_GIT}/utilities.git;protocol=git;branch=master \
+"
+S = "${WORKDIR}/git/android/image-utils"
+
+inherit autotools_stage native
+
+do_deploy () {
+ install -d ${DEPLOY_DIR_TOOLS}
+ install -m 0755 fastboot/fastboot ${DEPLOY_DIR_TOOLS}
+}
+do_deploy[dirs] = "${S}"
+addtask deploy before do_build after do_compile
diff --git a/recipes/angstrom/angstrom-led-config.bb b/recipes/angstrom/angstrom-led-config.bb
index a0373edae3..2213a76234 100644
--- a/recipes/angstrom/angstrom-led-config.bb
+++ b/recipes/angstrom/angstrom-led-config.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Configuration files for runtime LED configuration"
#PV = "${DISTRO_VERSION}"
-PR = "r7"
+PR = "r8"
PACKAGE_ARCH = "${MACHINE_ARCH}"
inherit update-rc.d
diff --git a/recipes/angstrom/angstrom-led-config/ts72xx/leds b/recipes/angstrom/angstrom-led-config/ts72xx/leds
new file mode 100644
index 0000000000..03fedd8fe2
--- /dev/null
+++ b/recipes/angstrom/angstrom-led-config/ts72xx/leds
@@ -0,0 +1,3 @@
+#file format: name trigger
+platform:grled nand-disk
+platform:rdled heartbeat
diff --git a/recipes/angstrom/angstrom-uboot-scripts/720p.cmd b/recipes/angstrom/angstrom-uboot-scripts/720p.cmd
new file mode 100644
index 0000000000..d1c40b7736
--- /dev/null
+++ b/recipes/angstrom/angstrom-uboot-scripts/720p.cmd
@@ -0,0 +1,4 @@
+setenv vram '16M'
+setenv dvimode 'hd720 omapfb.vram=0:8M,1:4M,2:4M'
+run loaduimage
+run mmcboot
diff --git a/recipes/angstrom/angstrom-uboot-scripts/720p16-dsplink.cmd b/recipes/angstrom/angstrom-uboot-scripts/720p16-dsplink.cmd
new file mode 100644
index 0000000000..21c1902dc6
--- /dev/null
+++ b/recipes/angstrom/angstrom-uboot-scripts/720p16-dsplink.cmd
@@ -0,0 +1,4 @@
+setenv vram '16M'
+setenv dvimode 'hd720-16 mem=99M@0x80000000 mem=128M@0x88000000 omapfb.vram=0:8M,1:4M,2:4M'
+run loaduimage
+run mmcboot
diff --git a/recipes/angstrom/angstrom-uboot-scripts/720p16bpp.cmd b/recipes/angstrom/angstrom-uboot-scripts/720p16bpp.cmd
new file mode 100644
index 0000000000..33f678c8a9
--- /dev/null
+++ b/recipes/angstrom/angstrom-uboot-scripts/720p16bpp.cmd
@@ -0,0 +1,4 @@
+setenv vram '16M'
+setenv dvimode 'hd720-16 omapfb.vram=0:8M,1:4M,2:4M'
+run loaduimage
+run mmcboot
diff --git a/recipes/angstrom/angstrom-uboot-scripts/default-env.cmd b/recipes/angstrom/angstrom-uboot-scripts/default-env.cmd
new file mode 100644
index 0000000000..e9a06c6a46
--- /dev/null
+++ b/recipes/angstrom/angstrom-uboot-scripts/default-env.cmd
@@ -0,0 +1,19 @@
+setenv bootdelay 1
+setenv loadaddr 0x82000000
+setenv dvimode 'hd720'
+setenv vram '12M'
+setenv mem 'mem=99M@0x80000000 mem=128M@0x88000000'
+setenv defaultdisplay 'dvi'
+setenv loadbootscript 'fatload mmc 0 ${loadaddr} boot.scr'
+setenv bootscript 'echo Running bootscript from mmc ...; source ${loadaddr}'
+setenv loaduimage 'fatload mmc 0 ${loadaddr} uImage'
+setenv mmcroot '/dev/mmcblk0p2 rw'
+setenv mmcrootfstype 'ext3 rootwait
+setenv mmcargs 'setenv bootargs console=${console} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${mmcroot} rootfstype=${mmcrootfstype} ${mem}'
+setenv mmcboot 'echo Booting from mmc ...; run mmcargs; bootm ${loadaddr}'
+setenv nandroot '/dev/mtdblock4 rw'
+setenv nandargs 'setenv bootargs console=${console} vram=${vram} omapfb.mode=dvi:${dvimode} omapfb.debug=y omapdss.def_disp=${defaultdisplay} root=${nandroot} rootfstype=${nandrootfstype}'
+setenv nandboot 'echo Booting from nand ...; run nandargs; nand read ${loadaddr} 280000 400000; bootm ${loadaddr}'
+setenv bootcmd 'if mmc init; then if run loadbootscript; then run bootscript; else if run loaduimage; then run mmcboot; else run nandboot; fi; fi; else run nandboot; if'
+saveenv
+boot
diff --git a/recipes/angstrom/angstrom-uboot-scripts/palo43-dsplink.cmd b/recipes/angstrom/angstrom-uboot-scripts/palo43-dsplink.cmd
new file mode 100644
index 0000000000..b182bee9a2
--- /dev/null
+++ b/recipes/angstrom/angstrom-uboot-scripts/palo43-dsplink.cmd
@@ -0,0 +1,4 @@
+setenv vram '12M'
+setenv defaultdisplay 'lcd43 mem=99M@0x80000000 mem=128M@0x88000000 omapfb.vram=0:8M,1:2M,2:2M'
+run loaduimage
+run mmcboot
diff --git a/recipes/angstrom/angstrom-uboot-scripts/pico-dsplink.cmd b/recipes/angstrom/angstrom-uboot-scripts/pico-dsplink.cmd
new file mode 100644
index 0000000000..da6ea75f89
--- /dev/null
+++ b/recipes/angstrom/angstrom-uboot-scripts/pico-dsplink.cmd
@@ -0,0 +1,3 @@
+setenv dvimode '640x480MR-24@60 mem=99M@0x80000000 mem=128M@0x88000000 omapfb.vram=0:6M,1:3M,2:3M'
+run loaduimage
+run mmcboot
diff --git a/recipes/angstrom/angstrom-uboot-scripts/touchbook-512MB.cmd b/recipes/angstrom/angstrom-uboot-scripts/touchbook-512MB.cmd
new file mode 100644
index 0000000000..9751e8153e
--- /dev/null
+++ b/recipes/angstrom/angstrom-uboot-scripts/touchbook-512MB.cmd
@@ -0,0 +1,4 @@
+mmcinit
+fatload mmc 0 0x82000000 uImage
+setenv bootargs 'console=tty1 omapfb.mode=dvi:1024x600MR-24@60 root=/dev/mmcblk0p2 rootwait rootfstype=ext3 mem=99M@0x80000000 mem=384M@0x88000000 vram=32M omapfb.vram=0:16M,1:8M,2:8M'
+bootm
diff --git a/recipes/angstrom/omap3-mkcard.bb b/recipes/angstrom/omap3-mkcard.bb
new file mode 100644
index 0000000000..c7a1a3e04b
--- /dev/null
+++ b/recipes/angstrom/omap3-mkcard.bb
@@ -0,0 +1,11 @@
+DESCRIPTION="Format a card for omap3 booting"
+SRC_URI = "file://omap3-mkcard.sh"
+
+do_install() {
+ install -d ${D}${bindir}/
+ install -m 755 ${WORKDIR}/omap3-mkcard.sh ${D}${bindir}/
+}
+
+PACKAGE_ARCH_${PN} = "all"
+RDEPENDS_${PN} = "bc dosfstools e2fsprogs-mke2fs util-linux-ng util-linux-ng-sfdisk"
+
diff --git a/recipes/angstrom/omap3-mkcard/omap3-mkcard.sh b/recipes/angstrom/omap3-mkcard/omap3-mkcard.sh
new file mode 120000
index 0000000000..b8c8a708a1
--- /dev/null
+++ b/recipes/angstrom/omap3-mkcard/omap3-mkcard.sh
@@ -0,0 +1 @@
+../../../contrib/angstrom/omap3-mkcard.sh \ No newline at end of file
diff --git a/recipes/apex/apex-env_1.5.14.bb b/recipes/apex/apex-env_1.5.14.bb
index e97522e5e9..b279a5936d 100644
--- a/recipes/apex/apex-env_1.5.14.bb
+++ b/recipes/apex/apex-env_1.5.14.bb
@@ -3,7 +3,7 @@ SECTION = "misc"
PRIORITY = "optional"
HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
LICENSE = "GPL"
-PR = "r0"
+PR = "r1"
SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \
file://find-apex-partition.patch;patch=1 \
@@ -22,3 +22,7 @@ do_install() {
install -d ${D}/${sbindir}
install -m 755 ${S}/apex-env ${D}/${sbindir}
}
+
+# Adding proper LDFLAGS support takes too much of my time, so hack around it
+INSANE_SKIP_${PN} = True
+
diff --git a/recipes/apex/apex-nslu2-16mb_1.5.14.bb b/recipes/apex/apex-nslu2-16mb_1.5.14.bb
index 0ccf2eb5da..9852b921ae 100644
--- a/recipes/apex/apex-nslu2-16mb_1.5.14.bb
+++ b/recipes/apex/apex-nslu2-16mb_1.5.14.bb
@@ -3,7 +3,9 @@ SECTION = "misc"
PRIORITY = "optional"
HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
LICENSE = "GPL"
-PR = "r2"
+PR = "r3"
+
+inherit siteinfo
SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \
file://defconfig"
@@ -27,15 +29,14 @@ oe_runmake() {
# defconfig to .config
do_configure() {
rm -f ${S}/.config
- . ${CONFIG_SITE}
- if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
+ if [ "x${SITEINFO_ENDIANESS}" = "xbe" ]; then
sed -e 's/.*CONFIG_USER_BIGENDIAN.*/CONFIG_USER_BIGENDIAN=y/' \
-e 's/.*CONFIG_BIGENDIAN.*/CONFIG_BIGENDIAN=y/' \
-e 's/.*CONFIG_TARGET_DESCRIPTION.*/CONFIG_TARGET_DESCRIPTION=\"OpenEmbedded NSLU2\/BE (16MiB Flash)\"/' \
-e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
-e 's|CONFIG_ENV_DEFAULT_CMDLINE_ALT=|CONFIG_ENV_DEFAULT_CMDLINE_ALT=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
${WORKDIR}/defconfig > ${S}/.config
- elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
+ elif [ "x${SITEINFO_ENDIANESS}" = "xle" ]; then
sed -e 's/.*CONFIG_USER_LITTLEENDIAN.*/CONFIG_USER_LITTLEENDIAN=y/' \
-e 's/.*CONFIG_LITTLEENDIAN.*/CONFIG_LITTLEENDIAN=y/' \
-e 's/.*CONFIG_TARGET_DESCRIPTION.*/CONFIG_TARGET_DESCRIPTION=\"OpenEmbedded NSLU2\/LE (16MiB Flash)\"/' \
@@ -52,10 +53,9 @@ DEPENDS += "devio-native"
do_stage() {
install -d ${STAGING_LOADER_DIR}
- . ${CONFIG_SITE}
- if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
+ if [ "x${SITEINFO_ENDIANESS}" = "xbe" ]; then
cp src/arch-arm/rom/apex.bin ${STAGING_LOADER_DIR}/apex-nslu2-16mb.bin
- elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
+ elif [ "x${SITEINFO_ENDIANESS}" = "xle" ]; then
devio '<<'src/arch-arm/rom/apex.bin >${STAGING_LOADER_DIR}/apex-nslu2-16mb.bin 'xp $,4'
else
oefatal do_populate_staging cannot determine endianess
diff --git a/recipes/apex/apex-nslu2_1.5.14.bb b/recipes/apex/apex-nslu2_1.5.14.bb
index 5fae4553a0..53a5282355 100644
--- a/recipes/apex/apex-nslu2_1.5.14.bb
+++ b/recipes/apex/apex-nslu2_1.5.14.bb
@@ -3,7 +3,9 @@ SECTION = "misc"
PRIORITY = "optional"
HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
LICENSE = "GPL"
-PR = "r2"
+PR = "r3"
+
+inherit siteinfo
SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \
file://defconfig"
@@ -27,15 +29,14 @@ oe_runmake() {
# defconfig to .config
do_configure() {
rm -f ${S}/.config
- . ${CONFIG_SITE}
- if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
+ if [ "x${SITEINFO_ENDIANESS}" = "xbe" ]; then
sed -e 's/.*CONFIG_USER_BIGENDIAN.*/CONFIG_USER_BIGENDIAN=y/' \
-e 's/.*CONFIG_BIGENDIAN.*/CONFIG_BIGENDIAN=y/' \
-e 's/.*CONFIG_TARGET_DESCRIPTION.*/CONFIG_TARGET_DESCRIPTION=\"OpenEmbedded NSLU2\/BE (8MiB Flash)\"/' \
-e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
-e 's|CONFIG_ENV_DEFAULT_CMDLINE_ALT=|CONFIG_ENV_DEFAULT_CMDLINE_ALT=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
${WORKDIR}/defconfig > ${S}/.config
- elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
+ elif [ "x${SITEINFO_ENDIANESS}" = "xle" ]; then
sed -e 's/.*CONFIG_USER_LITTLEENDIAN.*/CONFIG_USER_LITTLEENDIAN=y/' \
-e 's/.*CONFIG_LITTLEENDIAN.*/CONFIG_LITTLEENDIAN=y/' \
-e 's/.*CONFIG_TARGET_DESCRIPTION.*/CONFIG_TARGET_DESCRIPTION=\"OpenEmbedded NSLU2\/LE (8MiB Flash)\"/' \
@@ -52,10 +53,9 @@ DEPENDS += "devio-native"
do_stage() {
install -d ${STAGING_LOADER_DIR}
- . ${CONFIG_SITE}
- if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
+ if [ "x${SITEINFO_ENDIANESS}" = "xbe" ]; then
cp src/arch-arm/rom/apex.bin ${STAGING_LOADER_DIR}/apex-nslu2.bin
- elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
+ elif [ "x${SITEINFO_ENDIANESS}" = "xle" ]; then
devio '<<'src/arch-arm/rom/apex.bin >${STAGING_LOADER_DIR}/apex-nslu2.bin 'xp $,4'
else
oefatal do_populate_staging cannot determine endianess
diff --git a/recipes/apr/apr_1.3.5.bb b/recipes/apr/apr_1.3.5.bb
new file mode 100644
index 0000000000..11b9147fe4
--- /dev/null
+++ b/recipes/apr/apr_1.3.5.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "Apache Portable Runtime (APR) library"
+SECTION = "libs"
+LICENSE = "Apache License, Version 2.0"
+
+PR = "r4"
+
+SRC_URI = "${APACHE_MIRROR}/apr/${P}.tar.bz2;name=apr135tarbz2 \
+ file://configure_fixes.patch;patch=1 \
+# file://cleanup.patch;patch=1 \
+ file://configfix.patch;patch=1"
+
+inherit autotools lib_package binconfig
+
+OE_BINCONFIG_EXTRA_MANGLE = " -e 's:location=source:location=installed:'"
+
+do_configure_prepend() {
+ cd ${S}
+ ./buildconf
+}
+
+do_stage() {
+ autotools_stage_all
+ install -d ${STAGING_DATADIR}/apr
+ cp ${S}/build/apr_rules.mk ${STAGING_DATADIR}/apr/
+ sed -i s,apr_builddir=.*,apr_builddir=,g ${STAGING_DATADIR}/apr/apr_rules.mk
+ sed -i s,apr_builders=.*,apr_builders=,g ${STAGING_DATADIR}/apr/apr_rules.mk
+ sed -i s,LIBTOOL=.*,LIBTOOL=\$\(SHELL\)\ ${TARGET_PREFIX}libtool,g ${STAGING_DATADIR}/apr/apr_rules.mk
+ sed -i s,\$\(apr_builders\),${STAGING_DATADIR}/apr/,g ${STAGING_DATADIR}/apr/apr_rules.mk
+ cp ${S}/build/mkdir.sh ${STAGING_DATADIR}/apr/
+ cp ${S}/build/make_exports.awk ${STAGING_DATADIR}/apr/
+ cp ${S}/build/make_var_export.awk ${STAGING_DATADIR}/apr/
+}
+
+SRC_URI[apr135tarbz2.md5sum] = "9ac9a00eaa190937fdbbde7b4f03ac1e"
+SRC_URI[apr135tarbz2.sha256sum] = "a33d360b70a9c7971651b3810513d7a85ca84d13ddfc1cb96d6cb0af76aab574"
diff --git a/recipes/arm-kernel-shim/arm-kernel-shim_1.5.bb b/recipes/arm-kernel-shim/arm-kernel-shim_1.5.bb
index 5e2bbb83cc..591a32f6f9 100644
--- a/recipes/arm-kernel-shim/arm-kernel-shim_1.5.bb
+++ b/recipes/arm-kernel-shim/arm-kernel-shim_1.5.bb
@@ -15,6 +15,8 @@ SRC_URI = "ftp://ftp.buici.com/pub/arm/arm-kernel-shim/arm-kernel-shim-${PV}.tar
S = ${WORKDIR}/arm-kernel-shim-${PV}
+inherit siteinfo
+
CMDLINE_CONSOLE = "console=${@bb.data.getVar("KERNEL_CONSOLE",d,1) or "ttyS0"}"
CMDLINE_ROOT_DSMG600 = "root=/dev/mtdblock2 rootfstype=jffs2 rootflags=noatime rw init=/linuxrc"
diff --git a/recipes/at91bootstrap/at91bootstrap-2.13/at91cap9adk/defconfig b/recipes/at91bootstrap/at91bootstrap-2.13/at91cap9adk/defconfig
deleted file mode 100644
index 8ccd36dbc8..0000000000
--- a/recipes/at91bootstrap/at91bootstrap-2.13/at91cap9adk/defconfig
+++ /dev/null
@@ -1,110 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Tue Jan 12 22:00:30 2010
-#
-HAVE_DOT_CONFIG=y
-CONFIG_BOARDNAME="at91cap9df"
-# CONFIG_AT91SAM9260EK is not set
-# CONFIG_AT91SAM9261EK is not set
-# CONFIG_AT91SAM9263EK is not set
-# CONFIG_AT91SAM9RLEK is not set
-# CONFIG_AT91SAM9XEEK is not set
-# CONFIG_AT91SAM9G10EK is not set
-# CONFIG_AT91SAM9G20EK is not set
-# CONFIG_AT91SAM9G45EK is not set
-# CONFIG_AT91SAM9G45EKES is not set
-# CONFIG_AT91SAM9M10EK is not set
-CONFIG_AT91CAP9ADK=y
-# CONFIG_AT91CAP9STK is not set
-# CONFIG_AFEB9260 is not set
-CONFIG_CHIP="AT91CAP9"
-CONFIG_BOARD="at91cap9adk"
-CONFIG_MACH_TYPE="0x61E"
-CONFIG_LINK_ADDR="0x000000"
-CONFIG_TOP_OF_MEMORY="0x108000"
-CONFIG_BOOTSTRAP_MAXSIZE="13000"
-CONFIG_CRYSTAL_12_000MHZ=y
-# CONFIG_CRYSTAL_16_000MHZ is not set
-# CONFIG_CRYSTAL_16_36766MHZ is not set
-# CONFIG_CRYSTAL_18_432MHZ is not set
-ALLOW_CRYSTAL_12_000MHZ=y
-CONFIG_CRYSTAL="CRYSTAL_18_432MHZ"
-# CONFIG_CPU_CLK_166MHZ is not set
-# CONFIG_CPU_CLK_180MHZ is not set
-CONFIG_CPU_CLK_200MHZ=y
-# CONFIG_CPU_CLK_240MHZ is not set
-# CONFIG_CPU_CLK_266MHZ is not set
-# CONFIG_CPU_CLK_400MHZ is not set
-ALLOW_CPU_CLK_200MHZ=y
-ALLOW_CPU_CLK_240MHZ=y
-# DISABLE_CPU_CLK_240MHZ is not set
-# CONFIG_BUS_SPEED_83MHZ is not set
-# CONFIG_BUS_SPEED_90MHZ is not set
-CONFIG_BUS_SPEED_100MHZ=y
-# CONFIG_BUS_SPEED_133MHZ is not set
-
-#
-# Memory selection
-#
-# CONFIG_SDRAM is not set
-CONFIG_SDDRC=y
-# CONFIG_DDR2 is not set
-ALLOW_DATAFLASH=y
-ALLOW_FLASH=y
-# ALLOW_NANDFLASH is not set
-# ALLOW_SDCARD is not set
-# ALLOW_PSRAM is not set
-# ALLOW_SDRAM_16BIT is not set
-# CONFIG_RAM_32MB is not set
-CONFIG_RAM_64MB=y
-# CONFIG_RAM_128MB is not set
-# CONFIG_RAM_256MB is not set
-CONFIG_DATAFLASH=y
-# CONFIG_FLASH is not set
-# CONFIG_NANDFLASH is not set
-# CONFIG_SDCARD is not set
-CONFIG_MEMORY="dataflash"
-
-#
-# SPI configuration
-#
-CONFIG_SPI_CLK=33000000
-CONFIG_SMALL_DATAFLASH=y
-# ALLOW_DATAFLASH_RECOVERY is not set
-CONFIG_SPI_BOOT_CS0=y
-# CONFIG_SPI_BOOT_CS1 is not set
-# CONFIG_SPI_BOOT_CS2 is not set
-# CONFIG_SPI_BOOT_CS3 is not set
-ALLOW_BOOT_FROM_DATAFLASH_CS0=y
-# ALLOW_BOOT_FROM_DATAFLASH_CS1 is not set
-# ALLOW_BOOT_FROM_DATAFLASH_CS2 is not set
-# ALLOW_BOOT_FROM_DATAFLASH_CS3 is not set
-DATAFLASHCARD_ON_CS0=y
-# DATAFLASHCARD_ON_CS1 is not set
-# DATAFLASHCARD_ON_CS2 is not set
-# DATAFLASHCARD_ON_CS3 is not set
-CONFIG_DATAFLASHCARD=y
-CONFIG_CARD_SUFFIX="card"
-CONFIG_SPI_BOOT="AT91C_SPI_PCS0_DATAFLASH"
-CONFIG_SPI_MODE_0=y
-# CONFIG_SPI_MODE_1 is not set
-# CONFIG_SPI_MODE_2 is not set
-# CONFIG_SPI_MODE_3 is not set
-CONFIG_SPI_MODE=0
-CONFIG_PROJECT="dataflash"
-CONFIG_LOAD_UBOOT=y
-# CONFIG_LOAD_64KB is not set
-# CONFIG_LOAD_1MB is not set
-# CONFIG_LOAD_4MB is not set
-CONFIG_IMG_ADDRESS="0x00008400"
-CONFIG_IMG_SIZE="0x00040000"
-CONFIG_JUMP_ADDR="0x73F00000"
-CONFIG_APP_CHECK=y
-# CONFIG_LONG_TEST is not set
-CONFIG_DEBUG=y
-CONFIG_VERBOSE=y
-CONFIG_HW_INIT=y
-# CONFIG_USER_HW_INIT is not set
-# CONFIG_THUMB is not set
-CONFIG_SX_AT91=y
-CONFIG_RAW_AT91=y
diff --git a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9260ek/defconfig b/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9260ek/defconfig
deleted file mode 100644
index 5e744ad829..0000000000
--- a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9260ek/defconfig
+++ /dev/null
@@ -1,110 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Tue Jan 12 22:00:52 2010
-#
-HAVE_DOT_CONFIG=y
-CONFIG_BOARDNAME="at91sam9260dfc"
-CONFIG_AT91SAM9260EK=y
-# CONFIG_AT91SAM9261EK is not set
-# CONFIG_AT91SAM9263EK is not set
-# CONFIG_AT91SAM9RLEK is not set
-# CONFIG_AT91SAM9XEEK is not set
-# CONFIG_AT91SAM9G10EK is not set
-# CONFIG_AT91SAM9G20EK is not set
-# CONFIG_AT91SAM9G45EK is not set
-# CONFIG_AT91SAM9G45EKES is not set
-# CONFIG_AT91SAM9M10EK is not set
-# CONFIG_AT91CAP9ADK is not set
-# CONFIG_AT91CAP9STK is not set
-# CONFIG_AFEB9260 is not set
-CONFIG_CHIP="AT91SAM9260"
-CONFIG_BOARD="at91sam9260ek"
-CONFIG_MACH_TYPE="0x44B"
-CONFIG_LINK_ADDR="0x000000"
-CONFIG_TOP_OF_MEMORY="0x301000"
-CONFIG_BOOTSTRAP_MAXSIZE="4096"
-# CONFIG_CRYSTAL_12_000MHZ is not set
-# CONFIG_CRYSTAL_16_000MHZ is not set
-# CONFIG_CRYSTAL_16_36766MHZ is not set
-CONFIG_CRYSTAL_18_432MHZ=y
-ALLOW_CRYSTAL_18_432MHZ=y
-CONFIG_CRYSTAL="CRYSTAL_18_432MHZ"
-# CONFIG_CPU_CLK_166MHZ is not set
-# CONFIG_CPU_CLK_180MHZ is not set
-CONFIG_CPU_CLK_200MHZ=y
-# CONFIG_CPU_CLK_240MHZ is not set
-# CONFIG_CPU_CLK_266MHZ is not set
-# CONFIG_CPU_CLK_400MHZ is not set
-ALLOW_CPU_CLK_200MHZ=y
-# DISABLE_CPU_CLK_240MHZ is not set
-# CONFIG_BUS_SPEED_83MHZ is not set
-# CONFIG_BUS_SPEED_90MHZ is not set
-CONFIG_BUS_SPEED_100MHZ=y
-# CONFIG_BUS_SPEED_133MHZ is not set
-
-#
-# Memory selection
-#
-CONFIG_SDRAM=y
-# CONFIG_SDDRC is not set
-# CONFIG_DDR2 is not set
-ALLOW_DATAFLASH=y
-# ALLOW_FLASH is not set
-ALLOW_NANDFLASH=y
-# ALLOW_SDCARD is not set
-# ALLOW_PSRAM is not set
-# ALLOW_SDRAM_16BIT is not set
-# CONFIG_RAM_32MB is not set
-CONFIG_RAM_64MB=y
-# CONFIG_RAM_128MB is not set
-# CONFIG_RAM_256MB is not set
-CONFIG_DATAFLASH=y
-# CONFIG_FLASH is not set
-# CONFIG_NANDFLASH is not set
-# CONFIG_SDCARD is not set
-CONFIG_MEMORY="dataflash"
-
-#
-# SPI configuration
-#
-CONFIG_SPI_CLK=33000000
-# CONFIG_SMALL_DATAFLASH is not set
-CONFIG_DATAFLASH_RECOVERY=y
-ALLOW_DATAFLASH_RECOVERY=y
-CONFIG_SPI_BOOT_CS0=y
-# CONFIG_SPI_BOOT_CS1 is not set
-# CONFIG_SPI_BOOT_CS2 is not set
-# CONFIG_SPI_BOOT_CS3 is not set
-ALLOW_BOOT_FROM_DATAFLASH_CS0=y
-ALLOW_BOOT_FROM_DATAFLASH_CS1=y
-# ALLOW_BOOT_FROM_DATAFLASH_CS2 is not set
-# ALLOW_BOOT_FROM_DATAFLASH_CS3 is not set
-DATAFLASHCARD_ON_CS0=y
-# DATAFLASHCARD_ON_CS1 is not set
-# DATAFLASHCARD_ON_CS2 is not set
-# DATAFLASHCARD_ON_CS3 is not set
-CONFIG_DATAFLASHCARD=y
-CONFIG_CARD_SUFFIX="card"
-CONFIG_SPI_BOOT="AT91C_SPI_PCS0_DATAFLASH"
-CONFIG_SPI_MODE_0=y
-# CONFIG_SPI_MODE_1 is not set
-# CONFIG_SPI_MODE_2 is not set
-# CONFIG_SPI_MODE_3 is not set
-CONFIG_SPI_MODE=0
-CONFIG_PROJECT="dataflash"
-CONFIG_LOAD_UBOOT=y
-# CONFIG_LOAD_64KB is not set
-# CONFIG_LOAD_1MB is not set
-# CONFIG_LOAD_4MB is not set
-CONFIG_IMG_ADDRESS="0x00008400"
-CONFIG_IMG_SIZE="0x00040000"
-CONFIG_JUMP_ADDR="0x23F00000"
-CONFIG_APP_CHECK=y
-# CONFIG_LONG_TEST is not set
-# CONFIG_DEBUG is not set
-# CONFIG_VERBOSE is not set
-CONFIG_HW_INIT=y
-# CONFIG_USER_HW_INIT is not set
-# CONFIG_THUMB is not set
-CONFIG_SX_AT91=y
-CONFIG_RAW_AT91=y
diff --git a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9261ek/defconfig b/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9261ek/defconfig
deleted file mode 100644
index 05058be3d3..0000000000
--- a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9261ek/defconfig
+++ /dev/null
@@ -1,110 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Tue Jan 12 22:00:56 2010
-#
-HAVE_DOT_CONFIG=y
-CONFIG_BOARDNAME="at91sam9261df"
-# CONFIG_AT91SAM9260EK is not set
-CONFIG_AT91SAM9261EK=y
-# CONFIG_AT91SAM9263EK is not set
-# CONFIG_AT91SAM9RLEK is not set
-# CONFIG_AT91SAM9XEEK is not set
-# CONFIG_AT91SAM9G10EK is not set
-# CONFIG_AT91SAM9G20EK is not set
-# CONFIG_AT91SAM9G45EK is not set
-# CONFIG_AT91SAM9G45EKES is not set
-# CONFIG_AT91SAM9M10EK is not set
-# CONFIG_AT91CAP9ADK is not set
-# CONFIG_AT91CAP9STK is not set
-# CONFIG_AFEB9260 is not set
-CONFIG_CHIP="AT91SAM9261"
-CONFIG_BOARD="at91sam9261ek"
-CONFIG_MACH_TYPE="0x350"
-CONFIG_LINK_ADDR="0x000000"
-CONFIG_TOP_OF_MEMORY="0x328000"
-CONFIG_BOOTSTRAP_MAXSIZE="13000"
-# CONFIG_CRYSTAL_12_000MHZ is not set
-# CONFIG_CRYSTAL_16_000MHZ is not set
-# CONFIG_CRYSTAL_16_36766MHZ is not set
-CONFIG_CRYSTAL_18_432MHZ=y
-ALLOW_CRYSTAL_18_432MHZ=y
-CONFIG_CRYSTAL="CRYSTAL_18_432MHZ"
-# CONFIG_CPU_CLK_166MHZ is not set
-# CONFIG_CPU_CLK_180MHZ is not set
-CONFIG_CPU_CLK_200MHZ=y
-# CONFIG_CPU_CLK_240MHZ is not set
-# CONFIG_CPU_CLK_266MHZ is not set
-# CONFIG_CPU_CLK_400MHZ is not set
-ALLOW_CPU_CLK_200MHZ=y
-ALLOW_CPU_CLK_266MHZ=y
-# DISABLE_CPU_CLK_240MHZ is not set
-# CONFIG_BUS_SPEED_83MHZ is not set
-# CONFIG_BUS_SPEED_90MHZ is not set
-CONFIG_BUS_SPEED_100MHZ=y
-# CONFIG_BUS_SPEED_133MHZ is not set
-
-#
-# Memory selection
-#
-CONFIG_SDRAM=y
-# CONFIG_SDDRC is not set
-# CONFIG_DDR2 is not set
-ALLOW_DATAFLASH=y
-# ALLOW_FLASH is not set
-ALLOW_NANDFLASH=y
-# ALLOW_SDCARD is not set
-# ALLOW_PSRAM is not set
-# ALLOW_SDRAM_16BIT is not set
-# CONFIG_RAM_32MB is not set
-CONFIG_RAM_64MB=y
-# CONFIG_RAM_128MB is not set
-# CONFIG_RAM_256MB is not set
-CONFIG_DATAFLASH=y
-# CONFIG_FLASH is not set
-# CONFIG_NANDFLASH is not set
-# CONFIG_SDCARD is not set
-CONFIG_MEMORY="dataflash"
-
-#
-# SPI configuration
-#
-CONFIG_SPI_CLK=33000000
-CONFIG_SMALL_DATAFLASH=y
-# ALLOW_DATAFLASH_RECOVERY is not set
-CONFIG_SPI_BOOT_CS0=y
-# CONFIG_SPI_BOOT_CS1 is not set
-# CONFIG_SPI_BOOT_CS2 is not set
-# CONFIG_SPI_BOOT_CS3 is not set
-ALLOW_BOOT_FROM_DATAFLASH_CS0=y
-# ALLOW_BOOT_FROM_DATAFLASH_CS1 is not set
-# ALLOW_BOOT_FROM_DATAFLASH_CS2 is not set
-ALLOW_BOOT_FROM_DATAFLASH_CS3=y
-# DATAFLASHCARD_ON_CS0 is not set
-# DATAFLASHCARD_ON_CS1 is not set
-# DATAFLASHCARD_ON_CS2 is not set
-# DATAFLASHCARD_ON_CS3 is not set
-# CONFIG_DATAFLASHCARD is not set
-CONFIG_CARD_SUFFIX=""
-CONFIG_SPI_BOOT="AT91C_SPI_PCS0_DATAFLASH"
-CONFIG_SPI_MODE_0=y
-# CONFIG_SPI_MODE_1 is not set
-# CONFIG_SPI_MODE_2 is not set
-# CONFIG_SPI_MODE_3 is not set
-CONFIG_SPI_MODE=0
-CONFIG_PROJECT="dataflash"
-CONFIG_LOAD_UBOOT=y
-# CONFIG_LOAD_64KB is not set
-# CONFIG_LOAD_1MB is not set
-# CONFIG_LOAD_4MB is not set
-CONFIG_IMG_ADDRESS="0x00008400"
-CONFIG_IMG_SIZE="0x00040000"
-CONFIG_JUMP_ADDR="0x23F00000"
-CONFIG_APP_CHECK=y
-# CONFIG_LONG_TEST is not set
-CONFIG_DEBUG=y
-CONFIG_VERBOSE=y
-CONFIG_HW_INIT=y
-# CONFIG_USER_HW_INIT is not set
-# CONFIG_THUMB is not set
-CONFIG_SX_AT91=y
-CONFIG_RAW_AT91=y
diff --git a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9263ek/defconfig b/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9263ek/defconfig
deleted file mode 100644
index 70f6e3228e..0000000000
--- a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9263ek/defconfig
+++ /dev/null
@@ -1,113 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Tue Jan 12 22:00:59 2010
-#
-HAVE_DOT_CONFIG=y
-CONFIG_BOARDNAME="at91sam9263dfc"
-# CONFIG_AT91SAM9260EK is not set
-# CONFIG_AT91SAM9261EK is not set
-CONFIG_AT91SAM9263EK=y
-# CONFIG_AT91SAM9RLEK is not set
-# CONFIG_AT91SAM9XEEK is not set
-# CONFIG_AT91SAM9G10EK is not set
-# CONFIG_AT91SAM9G20EK is not set
-# CONFIG_AT91SAM9G45EK is not set
-# CONFIG_AT91SAM9G45EKES is not set
-# CONFIG_AT91SAM9M10EK is not set
-# CONFIG_AT91CAP9ADK is not set
-# CONFIG_AT91CAP9STK is not set
-# CONFIG_AFEB9260 is not set
-CONFIG_CHIP="AT91SAM9263"
-CONFIG_BOARD="at91sam9263ek"
-CONFIG_MACH_TYPE="0x4B2"
-CONFIG_LINK_ADDR="0x000000"
-CONFIG_TOP_OF_MEMORY="0x314000"
-CONFIG_BOOTSTRAP_MAXSIZE="13000"
-# CONFIG_CRYSTAL_12_000MHZ is not set
-# CONFIG_CRYSTAL_16_000MHZ is not set
-CONFIG_CRYSTAL_16_36766MHZ=y
-# CONFIG_CRYSTAL_18_432MHZ is not set
-ALLOW_CRYSTAL_16_36766MHZ=y
-ALLOW_CRYSTAL_18_432MHZ=y
-CONFIG_CRYSTAL="CRYSTAL_16_36766MHZ"
-# CONFIG_CPU_CLK_166MHZ is not set
-# CONFIG_CPU_CLK_180MHZ is not set
-CONFIG_CPU_CLK_200MHZ=y
-# CONFIG_CPU_CLK_240MHZ is not set
-# CONFIG_CPU_CLK_266MHZ is not set
-# CONFIG_CPU_CLK_400MHZ is not set
-ALLOW_CPU_CLK_200MHZ=y
-ALLOW_CPU_CLK_240MHZ=y
-DISABLE_CPU_CLK_240MHZ=y
-# CONFIG_BUS_SPEED_83MHZ is not set
-# CONFIG_BUS_SPEED_90MHZ is not set
-CONFIG_BUS_SPEED_100MHZ=y
-# CONFIG_BUS_SPEED_133MHZ is not set
-
-#
-# Memory selection
-#
-CONFIG_SDRAM=y
-# CONFIG_SDDRC is not set
-# CONFIG_DDR2 is not set
-ALLOW_DATAFLASH=y
-# ALLOW_FLASH is not set
-ALLOW_NANDFLASH=y
-# ALLOW_SDCARD is not set
-ALLOW_PSRAM=y
-ALLOW_SDRAM_16BIT=y
-# CONFIG_RAM_32MB is not set
-CONFIG_RAM_64MB=y
-# CONFIG_RAM_128MB is not set
-# CONFIG_RAM_256MB is not set
-# CONFIG_SDRAM_16BIT is not set
-# CONFIG_PSRAM is not set
-CONFIG_DATAFLASH=y
-# CONFIG_FLASH is not set
-# CONFIG_NANDFLASH is not set
-# CONFIG_SDCARD is not set
-CONFIG_MEMORY="dataflash"
-
-#
-# SPI configuration
-#
-CONFIG_SPI_CLK=33000000
-CONFIG_SMALL_DATAFLASH=y
-# ALLOW_DATAFLASH_RECOVERY is not set
-CONFIG_SPI_BOOT_CS0=y
-# CONFIG_SPI_BOOT_CS1 is not set
-# CONFIG_SPI_BOOT_CS2 is not set
-# CONFIG_SPI_BOOT_CS3 is not set
-ALLOW_BOOT_FROM_DATAFLASH_CS0=y
-# ALLOW_BOOT_FROM_DATAFLASH_CS1 is not set
-# ALLOW_BOOT_FROM_DATAFLASH_CS2 is not set
-# ALLOW_BOOT_FROM_DATAFLASH_CS3 is not set
-DATAFLASHCARD_ON_CS0=y
-# DATAFLASHCARD_ON_CS1 is not set
-# DATAFLASHCARD_ON_CS2 is not set
-# DATAFLASHCARD_ON_CS3 is not set
-CONFIG_DATAFLASHCARD=y
-CONFIG_CARD_SUFFIX="card"
-CONFIG_SPI_BOOT="AT91C_SPI_PCS0_DATAFLASH"
-CONFIG_SPI_MODE_0=y
-# CONFIG_SPI_MODE_1 is not set
-# CONFIG_SPI_MODE_2 is not set
-# CONFIG_SPI_MODE_3 is not set
-CONFIG_SPI_MODE=0
-CONFIG_PROJECT="dataflash"
-CONFIG_LOAD_UBOOT=y
-# CONFIG_LOAD_64KB is not set
-# CONFIG_LOAD_1MB is not set
-# CONFIG_LOAD_4MB is not set
-CONFIG_IMG_ADDRESS="0x00008400"
-CONFIG_IMG_SIZE="0x00040000"
-CONFIG_JUMP_ADDR="0x23F00000"
-CONFIG_APP_CHECK=y
-# CONFIG_LONG_TEST is not set
-# CONFIG_DEBUG is not set
-CONFIG_VERBOSE=y
-CONFIG_HW_INIT=y
-# CONFIG_USER_HW_INIT is not set
-# CONFIG_THUMB is not set
-CONFIG_SX_AT91=y
-CONFIG_RAW_AT91=y
diff --git a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9g20ek/defconfig b/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9g20ek/defconfig
deleted file mode 100644
index 8520a79658..0000000000
--- a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9g20ek/defconfig
+++ /dev/null
@@ -1,110 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Tue Jan 12 22:00:34 2010
-#
-HAVE_DOT_CONFIG=y
-CONFIG_BOARDNAME="at91sam9g20dfc"
-# CONFIG_AT91SAM9260EK is not set
-# CONFIG_AT91SAM9261EK is not set
-# CONFIG_AT91SAM9263EK is not set
-# CONFIG_AT91SAM9RLEK is not set
-# CONFIG_AT91SAM9XEEK is not set
-# CONFIG_AT91SAM9G10EK is not set
-CONFIG_AT91SAM9G20EK=y
-# CONFIG_AT91SAM9G45EK is not set
-# CONFIG_AT91SAM9G45EKES is not set
-# CONFIG_AT91SAM9M10EK is not set
-# CONFIG_AT91CAP9ADK is not set
-# CONFIG_AT91CAP9STK is not set
-# CONFIG_AFEB9260 is not set
-CONFIG_CHIP="AT91SAM9G20"
-CONFIG_BOARD="at91sam9g20ek"
-CONFIG_MACH_TYPE="0x658"
-CONFIG_LINK_ADDR="0x000000"
-CONFIG_TOP_OF_MEMORY="0x301000"
-CONFIG_BOOTSTRAP_MAXSIZE="13000"
-# CONFIG_CRYSTAL_12_000MHZ is not set
-# CONFIG_CRYSTAL_16_000MHZ is not set
-# CONFIG_CRYSTAL_16_36766MHZ is not set
-CONFIG_CRYSTAL_18_432MHZ=y
-ALLOW_CRYSTAL_18_432MHZ=y
-CONFIG_CRYSTAL="CRYSTAL_18_432MHZ"
-# CONFIG_CPU_CLK_166MHZ is not set
-# CONFIG_CPU_CLK_180MHZ is not set
-# CONFIG_CPU_CLK_200MHZ is not set
-# CONFIG_CPU_CLK_240MHZ is not set
-# CONFIG_CPU_CLK_266MHZ is not set
-CONFIG_CPU_CLK_400MHZ=y
-ALLOW_CPU_CLK_400MHZ=y
-# DISABLE_CPU_CLK_240MHZ is not set
-# CONFIG_BUS_SPEED_83MHZ is not set
-# CONFIG_BUS_SPEED_90MHZ is not set
-# CONFIG_BUS_SPEED_100MHZ is not set
-CONFIG_BUS_SPEED_133MHZ=y
-
-#
-# Memory selection
-#
-CONFIG_SDRAM=y
-# CONFIG_SDDRC is not set
-# CONFIG_DDR2 is not set
-ALLOW_DATAFLASH=y
-# ALLOW_FLASH is not set
-ALLOW_NANDFLASH=y
-# ALLOW_SDCARD is not set
-# ALLOW_PSRAM is not set
-# ALLOW_SDRAM_16BIT is not set
-# CONFIG_RAM_32MB is not set
-CONFIG_RAM_64MB=y
-# CONFIG_RAM_128MB is not set
-# CONFIG_RAM_256MB is not set
-CONFIG_DATAFLASH=y
-# CONFIG_FLASH is not set
-# CONFIG_NANDFLASH is not set
-# CONFIG_SDCARD is not set
-CONFIG_MEMORY="dataflash"
-
-#
-# SPI configuration
-#
-CONFIG_SPI_CLK=33000000
-CONFIG_SMALL_DATAFLASH=y
-CONFIG_DATAFLASH_RECOVERY=y
-ALLOW_DATAFLASH_RECOVERY=y
-CONFIG_SPI_BOOT_CS0=y
-# CONFIG_SPI_BOOT_CS1 is not set
-# CONFIG_SPI_BOOT_CS2 is not set
-# CONFIG_SPI_BOOT_CS3 is not set
-ALLOW_BOOT_FROM_DATAFLASH_CS0=y
-ALLOW_BOOT_FROM_DATAFLASH_CS1=y
-# ALLOW_BOOT_FROM_DATAFLASH_CS2 is not set
-# ALLOW_BOOT_FROM_DATAFLASH_CS3 is not set
-DATAFLASHCARD_ON_CS0=y
-# DATAFLASHCARD_ON_CS1 is not set
-# DATAFLASHCARD_ON_CS2 is not set
-# DATAFLASHCARD_ON_CS3 is not set
-CONFIG_DATAFLASHCARD=y
-CONFIG_CARD_SUFFIX="card"
-CONFIG_SPI_BOOT="AT91C_SPI_PCS0_DATAFLASH"
-CONFIG_SPI_MODE_0=y
-# CONFIG_SPI_MODE_1 is not set
-# CONFIG_SPI_MODE_2 is not set
-# CONFIG_SPI_MODE_3 is not set
-CONFIG_SPI_MODE=0
-CONFIG_PROJECT="dataflash"
-CONFIG_LOAD_UBOOT=y
-# CONFIG_LOAD_64KB is not set
-# CONFIG_LOAD_1MB is not set
-# CONFIG_LOAD_4MB is not set
-CONFIG_IMG_ADDRESS="0x00008400"
-CONFIG_IMG_SIZE="0x00040000"
-CONFIG_JUMP_ADDR="0x23F00000"
-CONFIG_APP_CHECK=y
-# CONFIG_LONG_TEST is not set
-CONFIG_DEBUG=y
-CONFIG_VERBOSE=y
-CONFIG_HW_INIT=y
-# CONFIG_USER_HW_INIT is not set
-# CONFIG_THUMB is not set
-CONFIG_SX_AT91=y
-CONFIG_RAW_AT91=y
diff --git a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9g45ek/defconfig b/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9g45ek/defconfig
deleted file mode 100644
index 6259b01f13..0000000000
--- a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9g45ek/defconfig
+++ /dev/null
@@ -1,110 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Tue Jan 12 22:00:42 2010
-#
-HAVE_DOT_CONFIG=y
-CONFIG_BOARDNAME="at91sam9g45df"
-# CONFIG_AT91SAM9260EK is not set
-# CONFIG_AT91SAM9261EK is not set
-# CONFIG_AT91SAM9263EK is not set
-# CONFIG_AT91SAM9RLEK is not set
-# CONFIG_AT91SAM9XEEK is not set
-# CONFIG_AT91SAM9G10EK is not set
-# CONFIG_AT91SAM9G20EK is not set
-CONFIG_AT91SAM9G45EK=y
-# CONFIG_AT91SAM9G45EKES is not set
-# CONFIG_AT91SAM9M10EK is not set
-# CONFIG_AT91CAP9ADK is not set
-# CONFIG_AT91CAP9STK is not set
-# CONFIG_AFEB9260 is not set
-CONFIG_CHIP="AT91SAM9G45"
-CONFIG_BOARD="at91sam9g45ek"
-CONFIG_MACH_TYPE="1830"
-CONFIG_LINK_ADDR="0x000000"
-CONFIG_TOP_OF_MEMORY="0x304000"
-CONFIG_BOOTSTRAP_MAXSIZE="13000"
-# CONFIG_CRYSTAL_12_000MHZ is not set
-# CONFIG_CRYSTAL_16_000MHZ is not set
-# CONFIG_CRYSTAL_16_36766MHZ is not set
-CONFIG_CRYSTAL_18_432MHZ=y
-ALLOW_CRYSTAL_18_432MHZ=y
-CONFIG_CRYSTAL="CRYSTAL_18_432MHZ"
-# CONFIG_CPU_CLK_166MHZ is not set
-# CONFIG_CPU_CLK_180MHZ is not set
-# CONFIG_CPU_CLK_200MHZ is not set
-# CONFIG_CPU_CLK_240MHZ is not set
-# CONFIG_CPU_CLK_266MHZ is not set
-CONFIG_CPU_CLK_400MHZ=y
-ALLOW_CPU_CLK_400MHZ=y
-# DISABLE_CPU_CLK_240MHZ is not set
-# CONFIG_BUS_SPEED_83MHZ is not set
-# CONFIG_BUS_SPEED_90MHZ is not set
-# CONFIG_BUS_SPEED_100MHZ is not set
-CONFIG_BUS_SPEED_133MHZ=y
-
-#
-# Memory selection
-#
-# CONFIG_SDRAM is not set
-# CONFIG_SDDRC is not set
-CONFIG_DDR2=y
-ALLOW_DATAFLASH=y
-# ALLOW_FLASH is not set
-ALLOW_NANDFLASH=y
-# ALLOW_SDCARD is not set
-# ALLOW_PSRAM is not set
-# ALLOW_SDRAM_16BIT is not set
-# CONFIG_RAM_32MB is not set
-# CONFIG_RAM_64MB is not set
-CONFIG_RAM_128MB=y
-# CONFIG_RAM_256MB is not set
-CONFIG_DATAFLASH=y
-# CONFIG_FLASH is not set
-# CONFIG_NANDFLASH is not set
-# CONFIG_SDCARD is not set
-CONFIG_MEMORY="dataflash"
-
-#
-# SPI configuration
-#
-CONFIG_SPI_CLK=33000000
-CONFIG_SMALL_DATAFLASH=y
-CONFIG_DATAFLASH_RECOVERY=y
-ALLOW_DATAFLASH_RECOVERY=y
-CONFIG_SPI_BOOT_CS0=y
-# CONFIG_SPI_BOOT_CS1 is not set
-# CONFIG_SPI_BOOT_CS2 is not set
-# CONFIG_SPI_BOOT_CS3 is not set
-ALLOW_BOOT_FROM_DATAFLASH_CS0=y
-# ALLOW_BOOT_FROM_DATAFLASH_CS1 is not set
-# ALLOW_BOOT_FROM_DATAFLASH_CS2 is not set
-# ALLOW_BOOT_FROM_DATAFLASH_CS3 is not set
-DATAFLASHCARD_ON_CS0=y
-# DATAFLASHCARD_ON_CS1 is not set
-# DATAFLASHCARD_ON_CS2 is not set
-# DATAFLASHCARD_ON_CS3 is not set
-CONFIG_DATAFLASHCARD=y
-CONFIG_CARD_SUFFIX="card"
-CONFIG_SPI_BOOT="AT91C_SPI_PCS0_DATAFLASH"
-CONFIG_SPI_MODE_0=y
-# CONFIG_SPI_MODE_1 is not set
-# CONFIG_SPI_MODE_2 is not set
-# CONFIG_SPI_MODE_3 is not set
-CONFIG_SPI_MODE=0
-CONFIG_PROJECT="dataflash"
-CONFIG_LOAD_UBOOT=y
-# CONFIG_LOAD_64KB is not set
-# CONFIG_LOAD_1MB is not set
-# CONFIG_LOAD_4MB is not set
-CONFIG_IMG_ADDRESS="0x00008400"
-CONFIG_IMG_SIZE="0x00040000"
-CONFIG_JUMP_ADDR="0x73F00000"
-CONFIG_APP_CHECK=y
-# CONFIG_LONG_TEST is not set
-CONFIG_DEBUG=y
-CONFIG_VERBOSE=y
-CONFIG_HW_INIT=y
-# CONFIG_USER_HW_INIT is not set
-# CONFIG_THUMB is not set
-CONFIG_SX_AT91=y
-CONFIG_RAW_AT91=y
diff --git a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9rlek/defconfig b/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9rlek/defconfig
deleted file mode 100644
index af7ce6adfb..0000000000
--- a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9rlek/defconfig
+++ /dev/null
@@ -1,110 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Tue Jan 12 22:00:47 2010
-#
-HAVE_DOT_CONFIG=y
-CONFIG_BOARDNAME="at91sam9rldf"
-# CONFIG_AT91SAM9260EK is not set
-# CONFIG_AT91SAM9261EK is not set
-# CONFIG_AT91SAM9263EK is not set
-CONFIG_AT91SAM9RLEK=y
-# CONFIG_AT91SAM9XEEK is not set
-# CONFIG_AT91SAM9G10EK is not set
-# CONFIG_AT91SAM9G20EK is not set
-# CONFIG_AT91SAM9G45EK is not set
-# CONFIG_AT91SAM9G45EKES is not set
-# CONFIG_AT91SAM9M10EK is not set
-# CONFIG_AT91CAP9ADK is not set
-# CONFIG_AT91CAP9STK is not set
-# CONFIG_AFEB9260 is not set
-CONFIG_CHIP="AT91SAM9RL"
-CONFIG_BOARD="at91sam9rlek"
-CONFIG_MACH_TYPE="1326"
-CONFIG_LINK_ADDR="0x000000"
-CONFIG_TOP_OF_MEMORY="0x310000"
-CONFIG_BOOTSTRAP_MAXSIZE="13000"
-# CONFIG_CRYSTAL_12_000MHZ is not set
-# CONFIG_CRYSTAL_16_000MHZ is not set
-# CONFIG_CRYSTAL_16_36766MHZ is not set
-CONFIG_CRYSTAL_18_432MHZ=y
-ALLOW_CRYSTAL_18_432MHZ=y
-CONFIG_CRYSTAL="CRYSTAL_18_432MHZ"
-# CONFIG_CPU_CLK_166MHZ is not set
-# CONFIG_CPU_CLK_180MHZ is not set
-CONFIG_CPU_CLK_200MHZ=y
-# CONFIG_CPU_CLK_240MHZ is not set
-# CONFIG_CPU_CLK_266MHZ is not set
-# CONFIG_CPU_CLK_400MHZ is not set
-ALLOW_CPU_CLK_200MHZ=y
-ALLOW_CPU_CLK_266MHZ=y
-# DISABLE_CPU_CLK_240MHZ is not set
-# CONFIG_BUS_SPEED_83MHZ is not set
-# CONFIG_BUS_SPEED_90MHZ is not set
-CONFIG_BUS_SPEED_100MHZ=y
-# CONFIG_BUS_SPEED_133MHZ is not set
-
-#
-# Memory selection
-#
-CONFIG_SDRAM=y
-# CONFIG_SDDRC is not set
-# CONFIG_DDR2 is not set
-ALLOW_DATAFLASH=y
-# ALLOW_FLASH is not set
-ALLOW_NANDFLASH=y
-# ALLOW_SDCARD is not set
-# ALLOW_PSRAM is not set
-# ALLOW_SDRAM_16BIT is not set
-# CONFIG_RAM_32MB is not set
-CONFIG_RAM_64MB=y
-# CONFIG_RAM_128MB is not set
-# CONFIG_RAM_256MB is not set
-CONFIG_DATAFLASH=y
-# CONFIG_FLASH is not set
-# CONFIG_NANDFLASH is not set
-# CONFIG_SDCARD is not set
-CONFIG_MEMORY="dataflash"
-
-#
-# SPI configuration
-#
-CONFIG_SPI_CLK=33000000
-CONFIG_SMALL_DATAFLASH=y
-# ALLOW_DATAFLASH_RECOVERY is not set
-CONFIG_SPI_BOOT_CS0=y
-# CONFIG_SPI_BOOT_CS1 is not set
-# CONFIG_SPI_BOOT_CS2 is not set
-# CONFIG_SPI_BOOT_CS3 is not set
-ALLOW_BOOT_FROM_DATAFLASH_CS0=y
-# ALLOW_BOOT_FROM_DATAFLASH_CS1 is not set
-# ALLOW_BOOT_FROM_DATAFLASH_CS2 is not set
-# ALLOW_BOOT_FROM_DATAFLASH_CS3 is not set
-# DATAFLASHCARD_ON_CS0 is not set
-# DATAFLASHCARD_ON_CS1 is not set
-# DATAFLASHCARD_ON_CS2 is not set
-# DATAFLASHCARD_ON_CS3 is not set
-# CONFIG_DATAFLASHCARD is not set
-CONFIG_CARD_SUFFIX=""
-CONFIG_SPI_BOOT="AT91C_SPI_PCS0_DATAFLASH"
-CONFIG_SPI_MODE_0=y
-# CONFIG_SPI_MODE_1 is not set
-# CONFIG_SPI_MODE_2 is not set
-# CONFIG_SPI_MODE_3 is not set
-CONFIG_SPI_MODE=0
-CONFIG_PROJECT="dataflash"
-CONFIG_LOAD_UBOOT=y
-# CONFIG_LOAD_64KB is not set
-# CONFIG_LOAD_1MB is not set
-# CONFIG_LOAD_4MB is not set
-CONFIG_IMG_ADDRESS="0x00008400"
-CONFIG_IMG_SIZE="0x00040000"
-CONFIG_JUMP_ADDR="0x23F00000"
-CONFIG_APP_CHECK=y
-# CONFIG_LONG_TEST is not set
-CONFIG_DEBUG=y
-CONFIG_VERBOSE=y
-CONFIG_HW_INIT=y
-# CONFIG_USER_HW_INIT is not set
-# CONFIG_THUMB is not set
-CONFIG_SX_AT91=y
-CONFIG_RAW_AT91=y
diff --git a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9xeek/defconfig b/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9xeek/defconfig
deleted file mode 100644
index fc83730b6f..0000000000
--- a/recipes/at91bootstrap/at91bootstrap-2.13/at91sam9xeek/defconfig
+++ /dev/null
@@ -1,110 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Tue Jan 12 22:00:49 2010
-#
-HAVE_DOT_CONFIG=y
-CONFIG_BOARDNAME="at91sam9xedfc"
-# CONFIG_AT91SAM9260EK is not set
-# CONFIG_AT91SAM9261EK is not set
-# CONFIG_AT91SAM9263EK is not set
-# CONFIG_AT91SAM9RLEK is not set
-CONFIG_AT91SAM9XEEK=y
-# CONFIG_AT91SAM9G10EK is not set
-# CONFIG_AT91SAM9G20EK is not set
-# CONFIG_AT91SAM9G45EK is not set
-# CONFIG_AT91SAM9G45EKES is not set
-# CONFIG_AT91SAM9M10EK is not set
-# CONFIG_AT91CAP9ADK is not set
-# CONFIG_AT91CAP9STK is not set
-# CONFIG_AFEB9260 is not set
-CONFIG_CHIP="AT91SAM9XE"
-CONFIG_BOARD="at91sam9xeek"
-CONFIG_MACH_TYPE="0x44B"
-CONFIG_LINK_ADDR="0x000000"
-CONFIG_TOP_OF_MEMORY="0x301000"
-CONFIG_BOOTSTRAP_MAXSIZE="13000"
-# CONFIG_CRYSTAL_12_000MHZ is not set
-# CONFIG_CRYSTAL_16_000MHZ is not set
-# CONFIG_CRYSTAL_16_36766MHZ is not set
-CONFIG_CRYSTAL_18_432MHZ=y
-ALLOW_CRYSTAL_18_432MHZ=y
-CONFIG_CRYSTAL="CRYSTAL_18_432MHZ"
-# CONFIG_CPU_CLK_166MHZ is not set
-# CONFIG_CPU_CLK_180MHZ is not set
-CONFIG_CPU_CLK_200MHZ=y
-# CONFIG_CPU_CLK_240MHZ is not set
-# CONFIG_CPU_CLK_266MHZ is not set
-# CONFIG_CPU_CLK_400MHZ is not set
-ALLOW_CPU_CLK_200MHZ=y
-# DISABLE_CPU_CLK_240MHZ is not set
-# CONFIG_BUS_SPEED_83MHZ is not set
-# CONFIG_BUS_SPEED_90MHZ is not set
-CONFIG_BUS_SPEED_100MHZ=y
-# CONFIG_BUS_SPEED_133MHZ is not set
-
-#
-# Memory selection
-#
-CONFIG_SDRAM=y
-# CONFIG_SDDRC is not set
-# CONFIG_DDR2 is not set
-ALLOW_DATAFLASH=y
-# ALLOW_FLASH is not set
-ALLOW_NANDFLASH=y
-# ALLOW_SDCARD is not set
-# ALLOW_PSRAM is not set
-# ALLOW_SDRAM_16BIT is not set
-# CONFIG_RAM_32MB is not set
-CONFIG_RAM_64MB=y
-# CONFIG_RAM_128MB is not set
-# CONFIG_RAM_256MB is not set
-CONFIG_DATAFLASH=y
-# CONFIG_FLASH is not set
-# CONFIG_NANDFLASH is not set
-# CONFIG_SDCARD is not set
-CONFIG_MEMORY="dataflash"
-
-#
-# SPI configuration
-#
-CONFIG_SPI_CLK=33000000
-CONFIG_SMALL_DATAFLASH=y
-CONFIG_DATAFLASH_RECOVERY=y
-ALLOW_DATAFLASH_RECOVERY=y
-CONFIG_SPI_BOOT_CS0=y
-# CONFIG_SPI_BOOT_CS1 is not set
-# CONFIG_SPI_BOOT_CS2 is not set
-# CONFIG_SPI_BOOT_CS3 is not set
-ALLOW_BOOT_FROM_DATAFLASH_CS0=y
-ALLOW_BOOT_FROM_DATAFLASH_CS1=y
-# ALLOW_BOOT_FROM_DATAFLASH_CS2 is not set
-# ALLOW_BOOT_FROM_DATAFLASH_CS3 is not set
-DATAFLASHCARD_ON_CS0=y
-# DATAFLASHCARD_ON_CS1 is not set
-# DATAFLASHCARD_ON_CS2 is not set
-# DATAFLASHCARD_ON_CS3 is not set
-CONFIG_DATAFLASHCARD=y
-CONFIG_CARD_SUFFIX="card"
-CONFIG_SPI_BOOT="AT91C_SPI_PCS0_DATAFLASH"
-CONFIG_SPI_MODE_0=y
-# CONFIG_SPI_MODE_1 is not set
-# CONFIG_SPI_MODE_2 is not set
-# CONFIG_SPI_MODE_3 is not set
-CONFIG_SPI_MODE=0
-CONFIG_PROJECT="dataflash"
-CONFIG_LOAD_UBOOT=y
-# CONFIG_LOAD_64KB is not set
-# CONFIG_LOAD_1MB is not set
-# CONFIG_LOAD_4MB is not set
-CONFIG_IMG_ADDRESS="0x00008400"
-CONFIG_IMG_SIZE="0x00040000"
-CONFIG_JUMP_ADDR="0x23F00000"
-CONFIG_APP_CHECK=y
-# CONFIG_LONG_TEST is not set
-CONFIG_DEBUG=y
-CONFIG_VERBOSE=y
-CONFIG_HW_INIT=y
-# CONFIG_USER_HW_INIT is not set
-# CONFIG_THUMB is not set
-CONFIG_SX_AT91=y
-CONFIG_RAW_AT91=y
diff --git a/recipes/at91bootstrap/at91bootstrap_2.0.inc b/recipes/at91bootstrap/at91bootstrap_2.0.inc
new file mode 100644
index 0000000000..67e7893c3e
--- /dev/null
+++ b/recipes/at91bootstrap/at91bootstrap_2.0.inc
@@ -0,0 +1,33 @@
+DESCRIPTION = "at91bootstrap: loaded into internal SRAM by AT91 BootROM"
+SECTION = "bootloaders"
+
+PARALLEL_MAKE = ""
+
+SRC_URI = "ftp://www.at91.com/pub/buildroot/${PN}-${PV}.tar.bz2 \
+ "
+
+S = "${WORKDIR}/${PN}-${PV}"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX} DESTDIR=${DEPLOY_DIR_IMAGE} REVISION=${PR}"
+
+do_compile () {
+ unset LDFLAGS
+ unset CFLAGS
+ unset CPPFLAGS
+
+ rm -Rf ${S}/binaries
+ if ! [ "x${AT91BOOTSTRAP_BOARD}" == "x" ] ; then
+ for board in ${AT91BOOTSTRAP_BOARD} ; do
+ cp `find ./board/ -name ${board}_defconfig` .config
+ oe_runmake AT91_CUSTOM_FLAGS="${AT91BOOTSTRAP_FLAGS}"
+ oe_runmake AT91_CUSTOM_FLAGS="${AT91BOOTSTRAP_FLAGS}" boot
+ oe_runmake AT91_CUSTOM_FLAGS="${AT91BOOTSTRAP_FLAGS}" install
+ done
+ else
+ cp ${S}/../defconfig ${S}/.config
+ oe_runmake AT91_CUSTOM_FLAGS="${AT91BOOTSTRAP_FLAGS}"
+ oe_runmake AT91_CUSTOM_FLAGS="${AT91BOOTSTRAP_FLAGS}" boot
+ oe_runmake AT91_CUSTOM_FLAGS="${AT91BOOTSTRAP_FLAGS}" install
+ fi
+
+}
diff --git a/recipes/at91bootstrap/at91bootstrap_2.13.bb b/recipes/at91bootstrap/at91bootstrap_2.13.bb
index 6f544fba54..147bb61cf1 100644
--- a/recipes/at91bootstrap/at91bootstrap_2.13.bb
+++ b/recipes/at91bootstrap/at91bootstrap_2.13.bb
@@ -1,5 +1,5 @@
-require at91bootstrap.inc
-PR = "r0"
+require at91bootstrap_2.0.inc
+PR = "r1"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_at91sam9g45ek = "1"
DEFAULT_PREFERENCE_at91sam9g45ekes = "1"
diff --git a/recipes/autoconf/autoconf-2.65/autoconf-x.patch b/recipes/autoconf/autoconf-2.65/autoconf-x.patch
new file mode 100644
index 0000000000..596535b7d6
--- /dev/null
+++ b/recipes/autoconf/autoconf-2.65/autoconf-x.patch
@@ -0,0 +1,36 @@
+Index: lib/autoconf/libs.m4
+===================================================================
+RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/libs.m4,v
+retrieving revision 1.13
+diff -p -u -r1.13 libs.m4
+--- autoconf-2.59/lib/autoconf/libs.m4 6 Sep 2005 15:34:06 -0000 1.13
++++ autoconf-2.59/lib/autoconf/libs.m4 18 Sep 2005 17:09:58 -0000
+@@ -265,13 +265,13 @@ ac_x_header_dirs='
+ /usr/openwin/share/include'
+
+ if test "$ac_x_includes" = no; then
+- # Guess where to find include files, by looking for Intrinsic.h.
++ # Guess where to find include files, by looking for Xlib.h.
+ # First, try using that file with no special directory specified.
+- AC_PREPROC_IFELSE([AC_LANG_SOURCE([@%:@include <X11/Intrinsic.h>])],
++ AC_PREPROC_IFELSE([AC_LANG_SOURCE([@%:@include <X11/Xlib.h>])],
+ [# We can compile using X headers with no special include directory.
+ ac_x_includes=],
+ [for ac_dir in $ac_x_header_dirs; do
+- if test -r "$ac_dir/X11/Intrinsic.h"; then
++ if test -r "$ac_dir/X11/Xlib.h"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+@@ -284,9 +284,9 @@ if test "$ac_x_libraries" = no; then
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS=$LIBS
+- LIBS="-lXt $LIBS"
+- AC_LINK_IFELSE([AC_LANG_PROGRAM([@%:@include <X11/Intrinsic.h>],
+- [XtMalloc (0)])],
++ LIBS="-lX11 $LIBS"
++ AC_LINK_IFELSE([AC_LANG_PROGRAM([@%:@include <X11/Xlib.h>],
++ [XrmInitialize ()])],
+ [LIBS=$ac_save_LIBS
+ # We can link X programs with no special library path.
+ ac_x_libraries=],
diff --git a/recipes/autoconf/autoconf-2.65/autoconf259-update-configscripts.patch b/recipes/autoconf/autoconf-2.65/autoconf259-update-configscripts.patch
new file mode 100644
index 0000000000..2adda7403d
--- /dev/null
+++ b/recipes/autoconf/autoconf-2.65/autoconf259-update-configscripts.patch
@@ -0,0 +1,393 @@
+--- autoconf-2.59/build-aux/config.guess.old 2003-10-23 10:28:51.000000000 -0400
++++ autoconf-2.59/build-aux/config.guess 2004-04-24 22:36:28.000000000 -0400
+@@ -3,7 +3,7 @@
+ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ # 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+-timestamp='2003-10-03'
++timestamp='2004-03-12'
+
+ # This file is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU General Public License as published by
+@@ -197,12 +197,18 @@
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit 0 ;;
++ amd64:OpenBSD:*:*)
++ echo x86_64-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
+ amiga:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ arc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
++ cats:OpenBSD:*:*)
++ echo arm-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+@@ -221,6 +227,9 @@
+ mvmeppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
++ pegasos:OpenBSD:*:*)
++ echo powerpc-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
+ pmax:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+@@ -236,10 +245,24 @@
+ *:OpenBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
++ *:ekkoBSD:*:*)
++ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
++ exit 0 ;;
++ macppc:MirBSD:*:*)
++ echo powerppc-unknown-mirbsd${UNAME_RELEASE}
++ exit 0 ;;
++ *:MirBSD:*:*)
++ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
++ exit 0 ;;
+ alpha:OSF1:*:*)
+- if test $UNAME_RELEASE = "V4.0"; then
++ case $UNAME_RELEASE in
++ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+- fi
++ ;;
++ *5.*)
++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
++ ;;
++ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+@@ -277,11 +300,12 @@
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
++ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
++ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit 0 ;;
+ Alpha*:OpenVMS:*:*)
+ echo alpha-hp-vms
+@@ -307,6 +331,9 @@
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit 0 ;;
++ *:OS400:*:*)
++ echo powerpc-ibm-os400
++ exit 0 ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit 0;;
+@@ -399,6 +426,9 @@
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit 0 ;;
++ m68k:machten:*:*)
++ echo m68k-apple-machten${UNAME_RELEASE}
++ exit 0 ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit 0 ;;
+@@ -742,6 +772,11 @@
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit 0 ;;
++ 5000:UNIX_System_V:4.*:*)
++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
++ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
++ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
++ exit 0 ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+@@ -751,7 +786,7 @@
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+- *:FreeBSD:*:*|*:GNU/FreeBSD:*:*)
++ *:FreeBSD:*:*)
+ # Determine whether the default compiler uses glibc.
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+@@ -763,7 +798,7 @@
+ #endif
+ EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+- # GNU/FreeBSD systems have a "k" prefix to indicate we are using
++ # GNU/KFreeBSD systems have a "k" prefix to indicate we are using
+ # FreeBSD's kernel, but not the complete OS.
+ case ${LIBC} in gnu) kernel_only='k' ;; esac
+ echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+@@ -799,8 +834,13 @@
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ *:GNU:*:*)
++ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit 0 ;;
++ *:GNU/*:*:*)
++ # other systems with GNU libc and userland
++ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
++ exit 0 ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit 0 ;;
+@@ -813,6 +853,9 @@
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
++ m32r*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit 0 ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+@@ -981,6 +1024,9 @@
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit 0 ;;
++ i*86:syllable:*:*)
++ echo ${UNAME_MACHINE}-pc-syllable
++ exit 0 ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+@@ -1052,7 +1098,7 @@
+ exit 0 ;;
+ M68*:*:R3V[567]*:*)
+ test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+- 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
++ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+@@ -1167,7 +1213,7 @@
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit 0 ;;
+- NSR-[DGKLNPTVWY]:NONSTOP_KERNEL:*:*)
++ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit 0 ;;
+ *:NonStop-UX:*:*)
+@@ -1211,6 +1257,9 @@
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit 0 ;;
++ *:DragonFly:*:*)
++ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
++ exit 0 ;;
+ esac
+
+ #echo '(No uname command or uname output not recognized.)' 1>&2
+--- autoconf-2.59/build-aux/config.sub.old 2003-10-23 10:28:51.000000000 -0400
++++ autoconf-2.59/build-aux/config.sub 2004-04-24 22:36:28.000000000 -0400
+@@ -3,7 +3,7 @@
+ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ # 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+-timestamp='2003-08-18'
++timestamp='2004-03-12'
+
+ # This file is (in principle) common to ALL GNU software.
+ # The presence of a machine in this file suggests that SOME GNU software
+@@ -118,7 +118,8 @@
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+- nto-qnx* | linux-gnu* | linux-dietlibc | kfreebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
++ nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
++ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+@@ -236,7 +237,7 @@
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+- | m32r | m68000 | m68k | m88k | mcore \
++ | m32r | m32rle | m68000 | m68k | m88k | mcore \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+@@ -261,7 +262,7 @@
+ | pyramid \
+ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
++ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
+ | strongarm \
+ | tahoe | thumb | tic4x | tic80 | tron \
+ | v850 | v850e \
+@@ -307,7 +308,7 @@
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+- | m32r-* \
++ | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | mcore-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+@@ -335,7 +336,7 @@
+ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+- | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
++ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tron-* \
+@@ -362,6 +363,9 @@
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
++ abacus)
++ basic_machine=abacus-unknown
++ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+@@ -379,6 +383,9 @@
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
++ amd64-*)
++ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+@@ -438,12 +445,20 @@
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
++ cr16c)
++ basic_machine=cr16c-unknown
++ os=-elf
++ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
++ crx)
++ basic_machine=crx-unknown
++ os=-elf
++ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+@@ -743,6 +758,10 @@
+ basic_machine=or32-unknown
+ os=-coff
+ ;;
++ os400)
++ basic_machine=powerpc-ibm
++ os=-os400
++ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+@@ -963,6 +982,10 @@
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
++ tpf)
++ basic_machine=s390x-ibm
++ os=-tpf
++ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+@@ -1058,7 +1081,7 @@
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+- sparc | sparcv9 | sparcv9b)
++ sparc | sparcv8 | sparcv9 | sparcv9b)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+@@ -1131,19 +1154,20 @@
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+- | -hiux* | -386bsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \
+- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
++ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
++ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
++ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++ | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+- | -powermax* | -dnix* | -nx6 | -nx7 | -sei*)
++ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+@@ -1182,6 +1206,9 @@
+ -opened*)
+ os=-openedition
+ ;;
++ -os400*)
++ os=-os400
++ ;;
+ -wince*)
+ os=-wince
+ ;;
+@@ -1203,6 +1230,9 @@
+ -atheos*)
+ os=-atheos
+ ;;
++ -syllable*)
++ os=-syllable
++ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+@@ -1225,6 +1255,9 @@
+ -sinix*)
+ os=-sysv4
+ ;;
++ -tpf*)
++ os=-tpf
++ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+@@ -1473,9 +1506,15 @@
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
++ -os400*)
++ vendor=ibm
++ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
++ -tpf*)
++ vendor=ibm
++ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
diff --git a/recipes/autoconf/autoconf-2.65/autoheader-nonfatal-warnings.patch b/recipes/autoconf/autoconf-2.65/autoheader-nonfatal-warnings.patch
new file mode 100644
index 0000000000..1f18e04bba
--- /dev/null
+++ b/recipes/autoconf/autoconf-2.65/autoheader-nonfatal-warnings.patch
@@ -0,0 +1,13 @@
+--- autoconf-2.59/bin/autoheader.in~ 2003-10-10 14:52:56.000000000 +0100
++++ autoconf-2.59/bin/autoheader.in 2004-05-03 01:36:45.000000000 +0100
+@@ -272,8 +272,8 @@
+ }
+
+ }
+- exit 1
+- if keys %symbol;
++# exit 1
++# if keys %symbol;
+ }
+
+ update_file ("$tmp/config.hin", "$config_h_in");
diff --git a/recipes/autoconf/autoconf-2.65/autoreconf-exclude.patch b/recipes/autoconf/autoconf-2.65/autoreconf-exclude.patch
new file mode 100644
index 0000000000..2eaf8d9016
--- /dev/null
+++ b/recipes/autoconf/autoconf-2.65/autoreconf-exclude.patch
@@ -0,0 +1,123 @@
+--- /tmp/autoreconf.in 2009-06-02 11:59:05.000000000 +0200
++++ autoconf-2.63/bin/autoreconf.in 2009-06-02 12:09:03.000000000 +0200
+@@ -76,6 +76,7 @@
+ -i, --install copy missing auxiliary files
+ --no-recursive don't rebuild sub-packages
+ -s, --symlink with -i, install symbolic links instead of copies
++ -x, --exclude=STEPS steps we should not run
+ -m, --make when applicable, re-run ./configure && make
+ -W, --warnings=CATEGORY report the warnings falling in CATEGORY [syntax]
+
+@@ -136,6 +137,13 @@
+ # Recurse into subpackages
+ my $recursive = 1;
+
++# Steps to exclude
++my @exclude;
++my @ex;
++
++my $uses_gettext;
++my $configure_ac;
++
+ ## ---------- ##
+ ## Routines. ##
+ ## ---------- ##
+@@ -153,6 +161,7 @@
+ 'B|prepend-include=s' => \@prepend_include,
+ 'i|install' => \$install,
+ 's|symlink' => \$symlink,
++ 'x|exclude=s' => \@exclude,
+ 'm|make' => \$run_make,
+ 'recursive!' => \$recursive);
+
+@@ -162,6 +171,8 @@
+ parse_WARNINGS;
+ parse_warnings '--warnings', @warning;
+
++ @exclude = map { split /,/ } @exclude;
++
+ # Even if the user specified a configure.ac, trim to get the
+ # directory, and look for configure.ac again. Because (i) the code
+ # is simpler, and (ii) we are still able to diagnose simultaneous
+@@ -190,6 +201,7 @@
+ $autoconf .= join (' --prepend-include=', '', map { shell_quote ($_) } @prepend_include);
+ $autoheader .= join (' --include=', '', map { shell_quote ($_) } @include);
+ $autoheader .= join (' --prepend-include=', '', map { shell_quote ($_) } @prepend_include);
++ $aclocal .= join (' -I ', '', @include);
+
+ # --install and --symlink;
+ if ($install)
+@@ -254,6 +266,11 @@
+ {
+ my ($aclocal, $flags) = @_;
+
++ @ex = grep (/^aclocal$/, @exclude);
++ if ($#ex != -1) {
++ return;
++ }
++
+ # aclocal 1.8+ does all this for free. It can be recognized by its
+ # --force support.
+ if ($aclocal_supports_force)
+@@ -367,8 +384,11 @@
+ }
+ else
+ {
+- xsystem_hint ("autopoint is needed because this package uses Gettext", "$autopoint");
+- }
++ @ex = grep (/^autopoint$/, @exclude);
++ if ($#ex == -1) {
++ xsystem_hint ("autopoint is needed because this package uses Gettext", "$autopoint");
++ }
++ }
+
+
+ # ----------------- #
+@@ -531,7 +551,10 @@
+ {
+ $libtoolize .= " --ltdl";
+ }
+- xsystem_hint ("libtoolize is needed because this package uses Libtool", $libtoolize);
++ @ex = grep (/^libtoolize$/, @exclude);
++ if ($#ex == -1) {
++ xsystem_hint ("libtoolize is needed because this package uses Libtool", $libtoolize);
++ }
+ $rerun_aclocal = 1;
+ }
+ else
+@@ -592,7 +615,10 @@
+ }
+ else
+ {
+- xsystem ($autoheader);
++ @ex = grep (/^autoheader$/, @exclude);
++ if ($#ex == -1) {
++ xsystem ("$autoheader");
++ }
+ }
+
+
+@@ -609,7 +635,10 @@
+ # We should always run automake, and let it decide whether it shall
+ # update the file or not. In fact, the effect of `$force' is already
+ # included in `$automake' via `--no-force'.
+- xsystem ($automake);
++ @ex = grep (/^automake$/, @exclude);
++ if ($#ex == -1) {
++ xsystem ("$automake");
++ }
+ }
+
+
+@@ -633,7 +662,10 @@
+ }
+ else
+ {
+- xsystem ("$make");
++ @ex = grep (/^make$/, @exclude);
++ if ($#ex == -1) {
++ xsystem ("make");
++ }
+ }
+ }
+ }
diff --git a/recipes/autoconf/autoconf-2.65/autoreconf-foreign.patch b/recipes/autoconf/autoconf-2.65/autoreconf-foreign.patch
new file mode 100644
index 0000000000..587a823826
--- /dev/null
+++ b/recipes/autoconf/autoconf-2.65/autoreconf-foreign.patch
@@ -0,0 +1,11 @@
+--- autoconf-2.59/bin/autoreconf.in~autoreconf-foreign 2004-05-09 20:55:06.000000000 -0400
++++ autoconf-2.59/bin/autoreconf.in 2004-05-09 20:55:55.000000000 -0400
+@@ -184,6 +184,8 @@
+
+ $aclocal_supports_force = `$aclocal --help` =~ /--force/;
+
++ $automake .= ' --foreign';
++
+ # Dispatch autoreconf's option to the tools.
+ # --include;
+ $autoconf .= join (' --include=', '', @include);
diff --git a/recipes/autoconf/autoconf-2.65/autoreconf-gnuconfigize.patch b/recipes/autoconf/autoconf-2.65/autoreconf-gnuconfigize.patch
new file mode 100644
index 0000000000..beeb4c70c0
--- /dev/null
+++ b/recipes/autoconf/autoconf-2.65/autoreconf-gnuconfigize.patch
@@ -0,0 +1,30 @@
+--- /tmp/autoreconf.in 2009-06-02 13:10:42.000000000 +0200
++++ autoconf-2.63/bin/autoreconf.in 2009-06-02 13:12:28.000000000 +0200
+@@ -58,7 +58,7 @@
+ $help = "Usage: $0 [OPTION]... [DIRECTORY]...
+
+ Run `autoconf' (and `autoheader', `aclocal', `automake', `autopoint'
+-(formerly `gettextize'), and `libtoolize' where appropriate)
++(formerly `gettextize'), `libtoolize', and `gnu-configize' where appropriate)
+ repeatedly to remake the GNU Build System files in specified
+ DIRECTORIES and their subdirectories (defaulting to `.').
+
+@@ -115,6 +115,7 @@
+ my $libtoolize = $ENV{'LIBTOOLIZE'} || 'libtoolize';
+ my $autopoint = $ENV{'AUTOPOINT'} || 'autopoint';
+ my $make = $ENV{'MAKE'} || 'make';
++my $gnuconfigize = $ENV{'GNUCONFIGIZE'} || 'gnu-configize';
+
+ # --install -- as --add-missing in other tools.
+ my $install = 0;
+@@ -643,6 +644,10 @@
+ }
+ }
+
++ @ex = grep (/^gnu-configize$/, @exclude);
++ if ($#ex == -1) {
++ xsystem ("$gnuconfigize");
++ }
+
+ # -------------- #
+ # Running make. #
diff --git a/recipes/autoconf/autoconf-2.65/config-site.patch b/recipes/autoconf/autoconf-2.65/config-site.patch
new file mode 100644
index 0000000000..0c66fe31b8
--- /dev/null
+++ b/recipes/autoconf/autoconf-2.65/config-site.patch
@@ -0,0 +1,11 @@
+--- /tmp/general.m4 2009-06-02 15:14:15.000000000 +0200
++++ autoconf-2.63/lib/autoconf/general.m4 2009-06-02 15:14:42.000000000 +0200
+@@ -1848,7 +1848,7 @@
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+ fi
+-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
++for ac_site_file in $ac_site_file1 "$ac_site_file2"
+ do
+ test "x$ac_site_file" = xNONE && continue
+ if test -r "$ac_site_file"; then
diff --git a/recipes/autoconf/autoconf-2.65/fix_path_xtra.patch b/recipes/autoconf/autoconf-2.65/fix_path_xtra.patch
new file mode 100644
index 0000000000..e74ca808a2
--- /dev/null
+++ b/recipes/autoconf/autoconf-2.65/fix_path_xtra.patch
@@ -0,0 +1,119 @@
+We don't build xmkmf so any values returned from it are going to be wrong.
+Using any paths in /usr/ for x headers/libs is a bad idea when cross compiling.
+This patch removes them to stop any confusion.
+
+RP - 20071115
+
+Index: autoconf-2.65/lib/autoconf/libs.m4
+===================================================================
+--- autoconf-2.65.orig/lib/autoconf/libs.m4
++++ autoconf-2.65/lib/autoconf/libs.m4
+@@ -158,54 +158,6 @@ m4_popdef([AC_Lib_Name])dnl
+ # Checks for X window. #
+ # --------------------- #
+
+-
+-# _AC_PATH_X_XMKMF
+-# ----------------
+-# Internal subroutine of _AC_PATH_X.
+-# Set ac_x_includes and/or ac_x_libraries.
+-m4_define([_AC_PATH_X_XMKMF],
+-[AC_ARG_VAR(XMKMF, [Path to xmkmf, Makefile generator for X Window System])dnl
+-rm -f -r conftest.dir
+-if mkdir conftest.dir; then
+- cd conftest.dir
+- cat >Imakefile <<'_ACEOF'
+-incroot:
+- @echo incroot='${INCROOT}'
+-usrlibdir:
+- @echo usrlibdir='${USRLIBDIR}'
+-libdir:
+- @echo libdir='${LIBDIR}'
+-_ACEOF
+- if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
+- # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+- for ac_var in incroot usrlibdir libdir; do
+- eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
+- done
+- # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+- for ac_extension in a so sl dylib la dll; do
+- if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
+- test -f "$ac_im_libdir/libX11.$ac_extension"; then
+- ac_im_usrlibdir=$ac_im_libdir; break
+- fi
+- done
+- # Screen out bogus values from the imake configuration. They are
+- # bogus both because they are the default anyway, and because
+- # using them would break gcc on systems where it needs fixed includes.
+- case $ac_im_incroot in
+- /usr/include) ac_x_includes= ;;
+- *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+- esac
+- case $ac_im_usrlibdir in
+- /usr/lib | /usr/lib64 | /lib | /lib64) ;;
+- *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+- esac
+- fi
+- cd ..
+- rm -f -r conftest.dir
+-fi
+-])# _AC_PATH_X_XMKMF
+-
+-
+ # _AC_PATH_X_DIRECT
+ # -----------------
+ # Internal subroutine of _AC_PATH_X.
+@@ -213,44 +165,7 @@ fi
+ m4_define([_AC_PATH_X_DIRECT],
+ [# Standard set of common directories for X headers.
+ # Check X11 before X11Rn because it is often a symlink to the current release.
+-ac_x_header_dirs='
+-/usr/X11/include
+-/usr/X11R7/include
+-/usr/X11R6/include
+-/usr/X11R5/include
+-/usr/X11R4/include
+-
+-/usr/include/X11
+-/usr/include/X11R7
+-/usr/include/X11R6
+-/usr/include/X11R5
+-/usr/include/X11R4
+-
+-/usr/local/X11/include
+-/usr/local/X11R7/include
+-/usr/local/X11R6/include
+-/usr/local/X11R5/include
+-/usr/local/X11R4/include
+-
+-/usr/local/include/X11
+-/usr/local/include/X11R7
+-/usr/local/include/X11R6
+-/usr/local/include/X11R5
+-/usr/local/include/X11R4
+-
+-/usr/X386/include
+-/usr/x386/include
+-/usr/XFree86/include/X11
+-
+-/usr/include
+-/usr/local/include
+-/usr/unsupported/include
+-/usr/athena/include
+-/usr/local/x11r5/include
+-/usr/lpp/Xamples/include
+-
+-/usr/openwin/include
+-/usr/openwin/share/include'
++ac_x_header_dirs=''
+
+ if test "$ac_x_includes" = no; then
+ # Guess where to find include files, by looking for Xlib.h.
+@@ -299,7 +214,6 @@ AC_DEFUN([_AC_PATH_X],
+ [AC_CACHE_VAL(ac_cv_have_x,
+ [# One or both of the vars are not set, and there is no cached value.
+ ac_x_includes=no ac_x_libraries=no
+-_AC_PATH_X_XMKMF
+ _AC_PATH_X_DIRECT
+ case $ac_x_includes,$ac_x_libraries in #(
+ no,* | *,no | *\'*)
diff --git a/recipes/autoconf/autoconf-2.65/program_prefix.patch b/recipes/autoconf/autoconf-2.65/program_prefix.patch
new file mode 100644
index 0000000000..e6f4096a97
--- /dev/null
+++ b/recipes/autoconf/autoconf-2.65/program_prefix.patch
@@ -0,0 +1,19 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- autoconf-2.57/lib/autoconf/general.m4~program_prefix
++++ autoconf-2.57/lib/autoconf/general.m4
+@@ -1676,8 +1676,9 @@
+ # The aliases save the names the user supplied, while $host etc.
+ # will get canonicalized.
+ test -n "$target_alias" &&
+- test "$program_prefix$program_suffix$program_transform_name" = \
+- NONENONEs,x,x, &&
++ test "$target_alias" != "$host_alias" &&
++ test "$program_prefix$program_suffix$program_transform_name" = \
++ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-[]dnl
+ ])# AC_CANONICAL_TARGET
+
diff --git a/recipes/autoconf/autoconf-2.65/sizeof_types.patch b/recipes/autoconf/autoconf-2.65/sizeof_types.patch
new file mode 100644
index 0000000000..30fd5c1926
--- /dev/null
+++ b/recipes/autoconf/autoconf-2.65/sizeof_types.patch
@@ -0,0 +1,87 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+Index: autoconf-2.59/lib/autoconf/types.m4
+===================================================================
+--- autoconf-2.59.orig/lib/autoconf/types.m4 2003-05-22 14:05:14.000000000 +0200
++++ autoconf-2.59/lib/autoconf/types.m4 2006-08-06 02:05:02.000000000 +0200
+@@ -380,26 +380,66 @@
+ # Generic checks. #
+ # ---------------- #
+
++# Backport of AC_CHECK_TARGET_TOOL from autoconf 2.60
++# AC_CHECK_TARGET_TOOL(VARIABLE, PROG-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND], [PATH )
++# ------------------------------------------------------------------------
++# (Use different variables $1 and ac_ct_$1 so that cache vars don't conflict.)
++AC_DEFUN([AC_CHECK_TARGET_TOOL],
++[AC_BEFORE([$0], [AC_CANONICAL_TARGET])dnl
++AC_CHECK_PROG([$1], [$target_alias-$2], [$target_alias-$2], , [$4])
++if test -z "$ac_cv_prog_$1"; then
++ if test "$build" = "$target"; then
++ ac_ct_$1=$$1
++ AC_CHECK_PROG([ac_ct_$1], [$2], [$2], [$3], [$4])
++ $1=ac_ct_$1
++ else
++ $1="$3"
++ fi
++else
++ $1="$ac_cv_prog_$1"
++fi
++])# AC_CHECK_TARGET_TOOL
++
++
++AC_DEFUN([AC_PROG_SIZE],
++[
++ AC_CHECK_TARGET_TOOL([SIZE], [size], [size], [$PATH])
++])
+
+ # AC_CHECK_SIZEOF(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
+ # ---------------------------------------------------------------
+ AC_DEFUN([AC_CHECK_SIZEOF],
+-[AS_LITERAL_IF([$1], [],
++[AC_REQUIRE([AC_PROG_SIZE])
++AC_REQUIRE([AC_PROG_AWK])
++ AS_LITERAL_IF([$1], [],
+ [AC_FATAL([$0: requires literal arguments])])dnl
+ AC_CHECK_TYPE([$1], [], [], [$3])
+ AC_CACHE_CHECK([size of $1], AS_TR_SH([ac_cv_sizeof_$1]),
+-[if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
+- # The cast to unsigned long works around a bug in the HP C Compiler
+- # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+- # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+- # This bug is HP SR number 8606223364.
+- _AC_COMPUTE_INT([(long) (sizeof ($1))],
+- [AS_TR_SH([ac_cv_sizeof_$1])],
+- [AC_INCLUDES_DEFAULT([$3])],
+- [AC_MSG_FAILURE([cannot compute sizeof ($1), 77])])
++[
++if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
++ if test "$cross_compiling" = yes; then
++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$3])],
++ [extern void dummy($1); static const $1 x[[256]]; dummy(x);])],
++ [
++ AS_TR_SH([ac_cv_sizeof_$1])=`$SIZE conftest.$ac_objext | tail -n 1 | $AWK '{print [$]3/256}'`
++ ],
++ [
++ AS_TR_SH([ac_cv_sizeof_$1])=0
++ ])
++ else
++ # The cast to unsigned long works around a bug in the HP C Compiler
++ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++ # This bug is HP SR number 8606223364.
++ _AC_COMPUTE_INT([(long) (sizeof ($1))],
++ [AS_TR_SH([ac_cv_sizeof_$1])],
++ [AC_INCLUDES_DEFAULT([$3])],
++ [AC_MSG_FAILURE([cannot compute sizeof ($1), 77])])
++ fi
+ else
+ AS_TR_SH([ac_cv_sizeof_$1])=0
+-fi])dnl
++fi
++])dnl
+ AC_DEFINE_UNQUOTED(AS_TR_CPP(sizeof_$1), $AS_TR_SH([ac_cv_sizeof_$1]),
+ [The size of a `$1', as computed by sizeof.])
+ ])# AC_CHECK_SIZEOF
diff --git a/recipes/autoconf/autoconf-native_2.59.bb b/recipes/autoconf/autoconf-native_2.59.bb
deleted file mode 100644
index a2b9dfa2d0..0000000000
--- a/recipes/autoconf/autoconf-native_2.59.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require autoconf_${PV}.bb
-
-PR = "${INC_PR}.0"
-
-DEPENDS = "m4-native gnu-config-native"
-RDEPENDS_${PN} = "m4-native gnu-config-native"
-
-S = "${WORKDIR}/autoconf-${PV}"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/autoconf-${PV}"
-
-inherit native
diff --git a/recipes/autoconf/autoconf-native_2.61.bb b/recipes/autoconf/autoconf-native_2.61.bb
deleted file mode 100644
index b7480cdc11..0000000000
--- a/recipes/autoconf/autoconf-native_2.61.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require autoconf_${PV}.bb
-PR = "${INC_PR}.0"
-
-DEPENDS = "m4-native gnu-config-native"
-RDEPENDS_${PN} = "m4-native gnu-config-native"
-
-SRC_URI += "file://fix_path_xtra.patch;patch=1"
-
-S = "${WORKDIR}/autoconf-${PV}"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/autoconf-${PV}"
-
-inherit native
diff --git a/recipes/autoconf/autoconf-native_2.63.bb b/recipes/autoconf/autoconf-native_2.63.bb
deleted file mode 100644
index b7480cdc11..0000000000
--- a/recipes/autoconf/autoconf-native_2.63.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require autoconf_${PV}.bb
-PR = "${INC_PR}.0"
-
-DEPENDS = "m4-native gnu-config-native"
-RDEPENDS_${PN} = "m4-native gnu-config-native"
-
-SRC_URI += "file://fix_path_xtra.patch;patch=1"
-
-S = "${WORKDIR}/autoconf-${PV}"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/autoconf-${PV}"
-
-inherit native
diff --git a/recipes/autoconf/autoconf.inc b/recipes/autoconf/autoconf.inc
index 2fa12751a1..17602858cb 100644
--- a/recipes/autoconf/autoconf.inc
+++ b/recipes/autoconf/autoconf.inc
@@ -5,9 +5,12 @@ HOMEPAGE = "http://www.gnu.org/software/autoconf/"
SECTION = "devel"
DEPENDS += "m4-native"
RDEPENDS_${PN} = "m4 perl gnu-config"
-INC_PR = "r8"
+DEPENDS_virtclass-native = "m4-native gnu-config-native"
+RDEPENDS_${PN}_virtclass-native = "m4-native gnu-config-native"
-SRC_URI = "${GNU_MIRROR}/autoconf/autoconf-${PV}.tar.bz2 \
+INC_PR = "r9"
+
+SRC_URI = "${GNU_MIRROR}/autoconf/autoconf-${PV}.tar.bz2;name=autoconf \
file://program_prefix.patch;patch=1"
inherit autotools
@@ -20,3 +23,6 @@ do_configure_prepend () {
export ac_cv_prog_gnu_m4="${ac_cv_prog_gnu_m4=yes}"
fi
}
+
+PARALLEL_MAKE = ""
+BBCLASSEXTEND = "native"
diff --git a/recipes/autoconf/autoconf_2.61.bb b/recipes/autoconf/autoconf_2.61.bb
index 53733a90f8..e104bad6d2 100644
--- a/recipes/autoconf/autoconf_2.61.bb
+++ b/recipes/autoconf/autoconf_2.61.bb
@@ -2,8 +2,6 @@ require autoconf.inc
PR = "${INC_PR}.1"
-PARALLEL_MAKE = ""
-
SRC_URI += "file://autoreconf-include.patch;patch=1 \
file://autoreconf-exclude.patch;patch=1 \
file://autoreconf-foreign.patch;patch=1 \
@@ -12,3 +10,5 @@ SRC_URI += "file://autoreconf-include.patch;patch=1 \
file://config-site.patch;patch=1 \
file://autoconf-dont-execute-perl.patch;patch=1 \
"
+
+SRC_URI_append_virtclass-native = " file://fix_path_xtra.patch;patch=1"
diff --git a/recipes/autoconf/autoconf_2.63.bb b/recipes/autoconf/autoconf_2.63.bb
index e26c004f64..8c81aff658 100644
--- a/recipes/autoconf/autoconf_2.63.bb
+++ b/recipes/autoconf/autoconf_2.63.bb
@@ -4,10 +4,10 @@ PR = "${INC_PR}.0"
DEFAULT_PREFERENCE = "-1"
-PARALLEL_MAKE = ""
-
SRC_URI += "file://autoreconf-exclude.patch;patch=1 \
file://autoreconf-foreign.patch;patch=1 \
file://autoheader-nonfatal-warnings.patch;patch=1 \
file://autoreconf-gnuconfigize.patch;patch=1 \
file://config-site.patch;patch=1"
+
+SRC_URI_append_virtclass-native = " file://fix_path_xtra.patch;patch=1"
diff --git a/recipes/autoconf/autoconf_2.65.bb b/recipes/autoconf/autoconf_2.65.bb
new file mode 100644
index 0000000000..0093c4b4de
--- /dev/null
+++ b/recipes/autoconf/autoconf_2.65.bb
@@ -0,0 +1,17 @@
+require autoconf.inc
+
+PR = "${INC_PR}.0"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI += "file://autoreconf-exclude.patch;patch=1 \
+ file://autoreconf-foreign.patch;patch=1 \
+ file://autoheader-nonfatal-warnings.patch;patch=1 \
+ file://autoreconf-gnuconfigize.patch;patch=1 \
+ file://config-site.patch;patch=1"
+
+SRC_URI_append_virtclass-native = " file://fix_path_xtra.patch;patch=1"
+
+SRC_URI[autoconf.md5sum] = "a6de1cc6434cd64038b0a0ae4e252b33"
+SRC_URI[autoconf.sha256sum] = "db11944057f3faf229ff5d6ce3fcd819f565455c152b72cec17ebc1cbb80136b"
+
diff --git a/recipes/automake/automake-native.inc b/recipes/automake/automake-native.inc
deleted file mode 100644
index 4e2ac41d81..0000000000
--- a/recipes/automake/automake-native.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-SECTION = "devel"
-require automake_${PV}.bb
-DEPENDS += "autoconf-native"
-RDEPENDS_automake-native += "autoconf-native perl-native-runtime"
-
-inherit native
-
-do_stage () {
- oe_runmake install
- install -d ${datadir}/aclocal
-}
diff --git a/recipes/automake/automake-native_1.10.2.bb b/recipes/automake/automake-native_1.10.2.bb
deleted file mode 100644
index 92c861f49c..0000000000
--- a/recipes/automake/automake-native_1.10.2.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-PV := "${PV}"
-
-require automake-native.inc
diff --git a/recipes/automake/automake-native_1.11.1.bb b/recipes/automake/automake-native_1.11.1.bb
deleted file mode 100644
index a7857c562d..0000000000
--- a/recipes/automake/automake-native_1.11.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-PV := "${PV}"
-
-require automake-native.inc
-
-DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/automake/automake-native_1.9.6.bb b/recipes/automake/automake-native_1.9.6.bb
deleted file mode 100644
index 92c861f49c..0000000000
--- a/recipes/automake/automake-native_1.9.6.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-PV := "${PV}"
-
-require automake-native.inc
diff --git a/recipes/automake/automake.inc b/recipes/automake/automake.inc
index 74957cc9e9..e378c048dc 100644
--- a/recipes/automake/automake.inc
+++ b/recipes/automake/automake.inc
@@ -2,6 +2,8 @@ DESCRIPTION = "A tool for automatically generating Makefiles."
LICENSE = "GPL"
HOMEPAGE = "http://www.gnu.org/software/automake/"
SECTION = "devel"
+DEPENDS_virtclass-native = "autoconf-native"
+RDEPENDS_automake-native = "autoconf-native perl-native-runtime"
RDEPENDS_automake += "\
autoconf \
perl \
@@ -26,8 +28,8 @@ RDEPENDS_automake += "\
perl-module-strict \
perl-module-text-parsewords \
perl-module-vars "
-SRC_URI = "${GNU_MIRROR}/automake/automake-${PV}.tar.bz2"
-INC_PR = "r2"
+SRC_URI = "${GNU_MIRROR}/automake/automake-${PV}.tar.bz2;name=automake"
+INC_PR = "r3"
AUTOMAKE_API = "${@".".join(bb.data.getVar("PV",d,1).split(".")[0:2])}"
inherit autotools
@@ -47,3 +49,5 @@ do_install_append () {
ln -sf automake-${AUTOMAKE_API} ${D}${bindir}/automake
install -d ${D}${datadir}/aclocal
}
+
+BBCLASSEXTEND = "native"
diff --git a/recipes/automake/automake_1.10.3.bb b/recipes/automake/automake_1.10.3.bb
new file mode 100644
index 0000000000..663333a51f
--- /dev/null
+++ b/recipes/automake/automake_1.10.3.bb
@@ -0,0 +1,6 @@
+require automake.inc
+PR = "${INC_PR}.0"
+
+SRC_URI[automake.md5sum] = "b8e67fb458da396bc35555af7ef2b49f"
+SRC_URI[automake.sha256sum] = "e98ab43bb839c31696a4202e5b6ff388b391659ef2387cf9365019fad17e1adc"
+
diff --git a/recipes/barnyard/barnyard_0.2.0.bb b/recipes/barnyard/barnyard_0.2.0.bb
new file mode 100644
index 0000000000..3536541d67
--- /dev/null
+++ b/recipes/barnyard/barnyard_0.2.0.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Barnyard is a output system for Snort."
+HOMEPAGE = "http://www.snort.org/"
+LICENSE = "QPL"
+DEPENDS = "libpcap"
+RDEPENDS = "libpcap"
+PR = "r1"
+
+SRC_URI = " http://dl.snort.org/barnyard/${P}.tar.gz;name=tarball \
+ "
+SRC_URI[tarball.md5sum] = "be3283028cf414b52b220308ceb411e9"
+SRC_URI[tarball.sha256sum] = "09e0f8e095e79cfe70ea069d13e7d02521a504a1f400a45556a634dccfd31a3a"
+
+S = "${WORKDIR}/${P}"
+
+inherit autotools pkgconfig
+
+do_configure_prepend () {
+ #fix hardcoded include path
+ sed -i -e 's:extra_incl=-I/usr/include/pcap::g' ${S}/configure.in
+}
+
diff --git a/recipes/base-files/base-files/kaeilos/issue b/recipes/base-files/base-files/kaeilos/issue
index ea00fdb3db..3eb722e86d 100644
--- a/recipes/base-files/base-files/kaeilos/issue
+++ b/recipes/base-files/base-files/kaeilos/issue
@@ -8,5 +8,3 @@
## ## ## ## ######## #### ######## ####### ######(R)
KaeilOS Linux \n \l
-KaeilOS 2008.1-test-20081222 \n \l
-
diff --git a/recipes/base-files/base-files/kaeilos/issue.net b/recipes/base-files/base-files/kaeilos/issue.net
index 781939c966..2649bbdd05 100644
--- a/recipes/base-files/base-files/kaeilos/issue.net
+++ b/recipes/base-files/base-files/kaeilos/issue.net
@@ -8,5 +8,3 @@
## ## ## ## ######## #### ######## ####### ######(R)
KaeilOS Linux %h
-KaeilOS 2008.1-test-20081222 %h
-
diff --git a/recipes/base-passwd/base-passwd_3.5.20.bb b/recipes/base-passwd/base-passwd_3.5.20.bb
index 5305730a9f..2ae3651584 100644
--- a/recipes/base-passwd/base-passwd_3.5.20.bb
+++ b/recipes/base-passwd/base-passwd_3.5.20.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Base system password/group files."
SECTION = "base"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
SRC_URI = "\
diff --git a/recipes/binutils/binutils-2.20.1/110-arm-eabi-conf.patch b/recipes/binutils/binutils-2.20.1/110-arm-eabi-conf.patch
new file mode 100644
index 0000000000..2623301da0
--- /dev/null
+++ b/recipes/binutils/binutils-2.20.1/110-arm-eabi-conf.patch
@@ -0,0 +1,22 @@
+--- /tmp/configure.ac 2008-06-22 14:14:59.000000000 +0200
++++ binutils-2.18.50.0.7/configure.ac 2008-06-22 14:15:30.000000000 +0200
+@@ -561,7 +561,7 @@
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ libgloss_dir=arm
+ ;;
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+ noconfigdirs="$noconfigdirs target-qthreads"
+ noconfigdirs="$noconfigdirs target-libobjc"
+ case ${with_newlib} in
+--- /tmp/configure 2008-06-22 14:17:11.000000000 +0200
++++ binutils-2.18.50.0.7/configure 2008-06-22 14:17:56.000000000 +0200
+@@ -2307,7 +2307,7 @@
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ libgloss_dir=arm
+ ;;
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+ noconfigdirs="$noconfigdirs target-qthreads"
+ noconfigdirs="$noconfigdirs target-libobjc"
+ case ${with_newlib} in
diff --git a/recipes/binutils/binutils-2.20.1/binutils-2.16.1-e300c2c3.patch b/recipes/binutils/binutils-2.20.1/binutils-2.16.1-e300c2c3.patch
new file mode 100644
index 0000000000..dfe9b18e17
--- /dev/null
+++ b/recipes/binutils/binutils-2.20.1/binutils-2.16.1-e300c2c3.patch
@@ -0,0 +1,18 @@
+Adds support for Freescale Power architecture e300c2 and e300c3 cores.
+http://www.bitshrine.org/gpp/tc-fsl-x86lnx-e300c3-nptl-4.0.2-2.src.rpm
+
+Leon Woestenberg <leonw@mailcan.com>
+
+Index: binutils-2.19.51.0.3/opcodes/ppc-dis.c
+===================================================================
+--- binutils-2.19.51.0.3.orig/opcodes/ppc-dis.c 2009-04-16 00:38:45.000000000 -0700
++++ binutils-2.19.51.0.3/opcodes/ppc-dis.c 2009-04-16 00:43:56.000000000 -0700
+@@ -132,6 +132,8 @@
+ | PPC_OPCODE_POWER6 | PPC_OPCODE_POWER7 | PPC_OPCODE_ALTIVEC
+ | PPC_OPCODE_VSX),
+ 0 },
++ { "pmr", (PPC_OPCODE_PMR),
++ 0 },
+ { "ppc", (PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_32),
+ 0 },
+ { "ppc32", (PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_32),
diff --git a/recipes/binutils/binutils-2.20.1/binutils-uclibc-100-uclibc-conf.patch b/recipes/binutils/binutils-2.20.1/binutils-uclibc-100-uclibc-conf.patch
new file mode 100644
index 0000000000..8de04e0fe0
--- /dev/null
+++ b/recipes/binutils/binutils-2.20.1/binutils-uclibc-100-uclibc-conf.patch
@@ -0,0 +1,34 @@
+--- binutils-2.18.orig/configure
++++ binutils-2.18/configure
+@@ -2206,7 +2206,7 @@
+ am33_2.0-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+- sh-*-linux*)
++ sh*-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+ sh*-*-pe|mips*-*-pe|*arm-wince-pe)
+@@ -2504,7 +2504,7 @@
+ romp-*-*)
+ noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
+ ;;
+- sh-*-* | sh64-*-*)
++ sh*-*-* | sh64-*-*)
+ case "${host}" in
+ i[3456789]86-*-vsta) ;; # don't add gprof back in
+ i[3456789]86-*-go32*) ;; # don't add gprof back in
+--- binutils-2.18.orig/gprof/configure
++++ binutils-2.18/gprof/configure
+@@ -4124,6 +4124,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
diff --git a/recipes/binutils/binutils-2.20.1/binutils-uclibc-300-001_ld_makefile_patch.patch b/recipes/binutils/binutils-2.20.1/binutils-uclibc-300-001_ld_makefile_patch.patch
new file mode 100644
index 0000000000..04a7e61e25
--- /dev/null
+++ b/recipes/binutils/binutils-2.20.1/binutils-uclibc-300-001_ld_makefile_patch.patch
@@ -0,0 +1,50 @@
+#!/bin/sh -e
+## 001_ld_makefile_patch.dpatch
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Description: correct where ld scripts are installed
+## DP: Author: Chris Chimelis <chris@debian.org>
+## DP: Upstream status: N/A
+## DP: Date: ??
+
+if [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+ -patch) patch $patch_opts -p1 < $0;;
+ -unpatch) patch $patch_opts -p1 -R < $0;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+--- binutils-2.16.91.0.1/ld/Makefile.am
++++ binutils-2.16.91.0.1/ld/Makefile.am
+@@ -20,7 +20,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+--- binutils-2.16.91.0.1/ld/Makefile.in
++++ binutils-2.16.91.0.1/ld/Makefile.in
+@@ -268,7 +268,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ BASEDIR = $(srcdir)/..
+ BFDDIR = $(BASEDIR)/bfd
+ INCDIR = $(BASEDIR)/include
diff --git a/recipes/binutils/binutils-2.20.1/binutils-uclibc-300-006_better_file_error.patch b/recipes/binutils/binutils-2.20.1/binutils-uclibc-300-006_better_file_error.patch
new file mode 100644
index 0000000000..f337611edf
--- /dev/null
+++ b/recipes/binutils/binutils-2.20.1/binutils-uclibc-300-006_better_file_error.patch
@@ -0,0 +1,43 @@
+#!/bin/sh -e
+## 006_better_file_error.dpatch by David Kimdon <dwhedon@gordian.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Specify which filename is causing an error if the filename is a
+## DP: directory. (#45832)
+
+if [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+ -patch) patch $patch_opts -p1 < $0;;
+ -unpatch) patch $patch_opts -p1 -R < $0;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c binutils-2.14.90.0.6/bfd/opncls.c
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c 2003-07-23 16:08:09.000000000 +0100
++++ binutils-2.14.90.0.6/bfd/opncls.c 2003-09-10 22:35:00.000000000 +0100
+@@ -150,6 +150,13 @@
+ {
+ bfd *nbfd;
+ const bfd_target *target_vec;
++ struct stat s;
++
++ if (stat (filename, &s) == 0)
++ if (S_ISDIR(s.st_mode)) {
++ bfd_set_error (bfd_error_file_not_recognized);
++ return NULL;
++ }
+
+ nbfd = _bfd_new_bfd ();
+ if (nbfd == NULL)
diff --git a/recipes/binutils/binutils-2.20.1/binutils-uclibc-300-012_check_ldrunpath_length.patch b/recipes/binutils/binutils-2.20.1/binutils-uclibc-300-012_check_ldrunpath_length.patch
new file mode 100644
index 0000000000..498651a90c
--- /dev/null
+++ b/recipes/binutils/binutils-2.20.1/binutils-uclibc-300-012_check_ldrunpath_length.patch
@@ -0,0 +1,47 @@
+#!/bin/sh -e
+## 012_check_ldrunpath_length.dpatch by Chris Chimelis <chris@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Only generate an RPATH entry if LD_RUN_PATH is not empty, for
+## DP: cases where -rpath isn't specified. (#151024)
+
+if [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+ -patch) patch $patch_opts -p1 < $0;;
+ -unpatch) patch $patch_opts -p1 -R < $0;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em binutils-2.15/ld/emultempl/elf32.em
+--- /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em 2004-05-21 23:12:58.000000000 +0100
++++ binutils-2.15/ld/emultempl/elf32.em 2004-05-21 23:12:59.000000000 +0100
+@@ -692,6 +692,8 @@
+ && command_line.rpath == NULL)
+ {
+ lib_path = (const char *) getenv ("LD_RUN_PATH");
++ if ((lib_path) && (strlen (lib_path) == 0))
++ lib_path = NULL;
+ if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
+ force))
+ break;
+@@ -871,6 +873,8 @@
+ rpath = command_line.rpath;
+ if (rpath == NULL)
+ rpath = (const char *) getenv ("LD_RUN_PATH");
++ if ((rpath) && (strlen (rpath) == 0))
++ rpath = NULL;
+ if (! (bfd_elf_size_dynamic_sections
+ (output_bfd, command_line.soname, rpath,
+ command_line.filter_shlib,
diff --git a/recipes/binutils/binutils-2.20.1/binutils-uclibc-gas-needs-libm.patch b/recipes/binutils/binutils-2.20.1/binutils-uclibc-gas-needs-libm.patch
new file mode 100644
index 0000000000..db838cf20c
--- /dev/null
+++ b/recipes/binutils/binutils-2.20.1/binutils-uclibc-gas-needs-libm.patch
@@ -0,0 +1,38 @@
+Source: Khem Raj <raj.khem@gmail.com>
+Disposition: submit upstream.
+
+Description:
+
+We do not need to have the libtool patch anymore for binutils after
+libtool has been updated upstream it include support for it. However
+for building gas natively on uclibc systems we have to link it with
+-lm so that it picks up missing symbols.
+
+/local/build_area/BUILD/arm_v5t_le_uclibc/binutils-2.17.50/objdir/libiberty/pic/libiberty.a(floatformat.o): In function `floatformat_from_double':
+floatformat.c:(.text+0x1ec): undefined reference to `frexp'
+floatformat.c:(.text+0x2f8): undefined reference to `ldexp'
+/local/build_area/BUILD/arm_v5t_le_uclibc/binutils-2.17.50/objdir/libiberty/pic/libiberty.a(floatformat.o): In function `floatformat_to_double':
+floatformat.c:(.text+0x38a): undefined reference to `ldexp'
+floatformat.c:(.text+0x3d2): undefined reference to `ldexp'
+floatformat.c:(.text+0x43e): undefined reference to `ldexp' floatformat.c:(.text+0x4e2): undefined reference to `ldexp'
+collect2: ld returned 1 exit status
+make[4]: *** [as-new] Error 1
+
+Index: binutils-2.17.50/gas/configure.tgt
+===================================================================
+--- binutils-2.17.50.orig/gas/configure.tgt
++++ binutils-2.17.50/gas/configure.tgt
+@@ -408,6 +408,12 @@ case ${generic_target} in
+ *-*-netware) fmt=elf em=netware ;;
+ esac
+
++case ${generic_target} in
++ arm-*-*uclibc*)
++ need_libm=yes
++ ;;
++esac
++
+ case ${cpu_type} in
+ alpha | arm | i386 | ia64 | mips | ns32k | pdp11 | ppc | sparc | z80 | z8k)
+ bfd_gas=yes
+
diff --git a/recipes/binutils/binutils-2.20.1/binutils-x86_64_i386_biarch.patch b/recipes/binutils/binutils-2.20.1/binutils-x86_64_i386_biarch.patch
new file mode 100644
index 0000000000..4cd9e22438
--- /dev/null
+++ b/recipes/binutils/binutils-2.20.1/binutils-x86_64_i386_biarch.patch
@@ -0,0 +1,26 @@
+#!/bin/sh -e
+## 127_x86_64_i386_biarch.dpatch
+##
+## DP: Description: Add (/usr)/lib32 to the search paths on x86_64.
+## DP: Author: Aurelien Jarno <aurel32.debian.org>
+## DP: Upstream status: Debian specific
+#
+# Hacked to apply with quilt
+# Adapted to binutils 2.18.50.0.7
+
+--- binutils/ld/emulparams/elf_i386.sh
++++ binutils/ld/emulparams/elf_i386.sh
+@@ -12,3 +12,13 @@
+ SEPARATE_GOTPLT=12
+ SHARABLE_SECTIONS=yes
+ IREL_IN_PLT=
++
++# Linux modify the default library search path to first include
++# a 32-bit specific directory.
++case "$target" in
++ x86_64*-linux* | i[3-7]86*-linux* | x86_64*-kfreebsd*-gnu | i[3-7]86*-kfreebsd*-gnu)
++ case "$EMULATION_NAME" in
++ *i386*) LIBPATH_SUFFIX=32 ;;
++ esac
++ ;;
++esac
diff --git a/recipes/binutils/binutils-2.20/binutils-x86_64_i386_biarch.patch b/recipes/binutils/binutils-2.20/binutils-x86_64_i386_biarch.patch
index 60544345dc..4cd9e22438 100644
--- a/recipes/binutils/binutils-2.20/binutils-x86_64_i386_biarch.patch
+++ b/recipes/binutils/binutils-2.20/binutils-x86_64_i386_biarch.patch
@@ -11,9 +11,9 @@
--- binutils/ld/emulparams/elf_i386.sh
+++ binutils/ld/emulparams/elf_i386.sh
@@ -12,3 +12,13 @@
- NO_SMALL_DATA=yes
SEPARATE_GOTPLT=12
SHARABLE_SECTIONS=yes
+ IREL_IN_PLT=
+
+# Linux modify the default library search path to first include
+# a 32-bit specific directory.
diff --git a/recipes/binutils/binutils-cross_2.20.1.bb b/recipes/binutils/binutils-cross_2.20.1.bb
new file mode 100644
index 0000000000..ca7fe0537e
--- /dev/null
+++ b/recipes/binutils/binutils-cross_2.20.1.bb
@@ -0,0 +1,4 @@
+FILESPATHPKG =. "binutils-${PV}:"
+require binutils_${PV}.bb
+require binutils-cross.inc
+
diff --git a/recipes/binutils/binutils_2.20.1.bb b/recipes/binutils/binutils_2.20.1.bb
new file mode 100644
index 0000000000..4f736f4e7d
--- /dev/null
+++ b/recipes/binutils/binutils_2.20.1.bb
@@ -0,0 +1,23 @@
+require binutils.inc
+LICENSE = "GPLv3"
+
+INC_PR = "r0"
+PR = "${INC_PR}.0"
+
+SRC_URI = "\
+ ${GNU_MIRROR}/binutils/binutils-${PV}.tar.bz2;name=tarball \
+ file://binutils-uclibc-100-uclibc-conf.patch;patch=1 \
+ file://110-arm-eabi-conf.patch;patch=1 \
+ file://binutils-uclibc-300-001_ld_makefile_patch.patch;patch=1 \
+ file://binutils-uclibc-300-006_better_file_error.patch;patch=1 \
+ file://binutils-uclibc-300-012_check_ldrunpath_length.patch;patch=1 \
+ file://binutils-uclibc-gas-needs-libm.patch;patch=1 \
+ "
+
+SRC_URI[tarball.sha256sum] = "228b84722d87e88e7fdd36869e590e649ab523a0800a7d53df906498afe6f6f8"
+SRC_URI[tarball.md5sum] = "9cdfb9d6ec0578c166d3beae5e15c4e5"
+
+# powerpc patches
+SRC_URI += "\
+ file://binutils-2.16.1-e300c2c3.patch;patch=1 \
+ "
diff --git a/recipes/bison/bison-native_2.0.bb b/recipes/bison/bison-native_2.0.bb
deleted file mode 100644
index 760295db6d..0000000000
--- a/recipes/bison/bison-native_2.0.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-require bison_${PV}.bb
-SECTION = "devel"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/bison-${PV}"
-S = "${WORKDIR}/bison-${PV}"
-PR = "r2"
-
-inherit native autotools
-
-do_stage() {
- rm -f ${STAGING_BINDIR}/yacc
- rm -f ${STAGING_BINDIR}/bison
- install -m 0755 src/bison ${STAGING_BINDIR}/
- cat >${STAGING_BINDIR}/yacc <<EOF
-#!/bin/sh
-exec ${STAGING_BINDIR}/bison -y "\$@"
-EOF
- chmod a+rx ${STAGING_BINDIR}/yacc
- install -d ${STAGING_DATADIR}/bison/m4sugar
- install -m 0755 data/c.m4 data/glr.c data/lalr1.cc data/yacc.c ${STAGING_DATADIR}/bison/
- install -m 0755 data/m4sugar/m4sugar.m4 ${STAGING_DATADIR}/bison/m4sugar/
-}
diff --git a/recipes/bison/bison-native_2.3.bb b/recipes/bison/bison-native_2.3.bb
deleted file mode 100644
index af6249ac9d..0000000000
--- a/recipes/bison/bison-native_2.3.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-require bison_${PV}.bb
-SECTION = "devel"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/bison-${PV}"
-S = "${WORKDIR}/bison-${PV}"
-PR="r1"
-
-inherit native autotools
-
-do_stage() {
- rm -f ${STAGING_BINDIR}/yacc
- rm -f ${STAGING_BINDIR}/bison
- install -m 0755 src/bison ${STAGING_BINDIR}/
- cat >${STAGING_BINDIR}/yacc <<EOF
-#!/bin/sh
-exec ${STAGING_BINDIR}/bison -y "\$@"
-EOF
- chmod a+rx ${STAGING_BINDIR}/yacc
- install -d ${STAGING_DATADIR}/bison/m4sugar
- install -m 0755 data/c.m4 data/c++.m4 data/glr.c data/glr.cc data/lalr1.cc data/location.cc data/yacc.c ${STAGING_DATADIR}/bison/
-
- install -m 0755 data/m4sugar/m4sugar.m4 ${STAGING_DATADIR}/bison/m4sugar/
-}
diff --git a/recipes/bison/bison.inc b/recipes/bison/bison.inc
new file mode 100644
index 0000000000..b770ffd42d
--- /dev/null
+++ b/recipes/bison/bison.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "GNU Project parser generator (yacc replacement)."
+HOMEPAGE = "http://www.gnu.org/software/bison/"
+LICENSE = "GPL"
+SECTION = "devel"
+PRIORITY = "optional"
+DEPENDS = "gettext"
+
+SRC_URI = "${GNU_MIRROR}/bison/bison-${PV}.tar.gz \
+ file://m4.patch;patch=1"
+
+INCPR = "r4"
+
+inherit autotools
+
+NATIVE_INSTALL_WORKS = "1"
+BBCLASSEXTEND = "native"
diff --git a/recipes/bison/bison_2.0.bb b/recipes/bison/bison_2.0.bb
index edf549f442..6127bef993 100644
--- a/recipes/bison/bison_2.0.bb
+++ b/recipes/bison/bison_2.0.bb
@@ -1,10 +1,3 @@
-DESCRIPTION = "GNU Project parser generator (yacc replacement)."
-HOMEPAGE = "http://www.gnu.org/software/bison/"
-LICENSE = "GPL"
-SECTION = "devel"
-PRIORITY = "optional"
+require bison.inc
-SRC_URI = "${GNU_MIRROR}/bison/bison-${PV}.tar.gz \
- file://m4.patch;patch=1"
-
-inherit autotools
+PR = "${INCPR}.0"
diff --git a/recipes/bison/bison_2.3.bb b/recipes/bison/bison_2.3.bb
index 729756b0fd..fda9b160a9 100644
--- a/recipes/bison/bison_2.3.bb
+++ b/recipes/bison/bison_2.3.bb
@@ -1,15 +1,6 @@
-DESCRIPTION = "GNU Project parser generator (yacc replacement)."
-HOMEPAGE = "http://www.gnu.org/software/bison/"
-LICENSE = "GPL"
-SECTION = "devel"
-PRIORITY = "optional"
+require bison.inc
-PR = "r1"
-
-SRC_URI = "${GNU_MIRROR}/bison/bison-${PV}.tar.gz \
- file://m4.patch;patch=1"
-
-inherit autotools
+PR = "${INCPR}.0"
# >> bison-2.3-r0: /usr/lib/liby.a
# That one is a special case: it wants to stay in the main bison package,
@@ -17,4 +8,3 @@ inherit autotools
# static-only library; that might be an error.
FILES_${PN} += "${libdir}/liby.a"
-
diff --git a/recipes/bogofilter/bogofilter-0.96.0/configure.ac.patch b/recipes/bogofilter/bogofilter-0.96.6/configure.ac.patch
index 310eaaa16d..310eaaa16d 100644
--- a/recipes/bogofilter/bogofilter-0.96.0/configure.ac.patch
+++ b/recipes/bogofilter/bogofilter-0.96.6/configure.ac.patch
diff --git a/recipes/bogofilter/bogofilter_0.96.0.bb b/recipes/bogofilter/bogofilter_0.96.0.bb
deleted file mode 100644
index 48caf83af5..0000000000
--- a/recipes/bogofilter/bogofilter_0.96.0.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-SECTION = "console/network"
-DEPENDS = "virtual/db"
-RDEPENDS = "glibc-gconv glibc-gconv-iso8859-1"
-DESCRIPTION = "Bogofilter is a mail filter that classifies mail as spam or ham (non-spam) \
-by a statistical analysis of the message's header and content (body). \
-The program is able to learn from the user's classifications and corrections."
-LICENSE = "GPL"
-PR = "r8"
-PRIORITY = "optional"
-
-SRC_URI = "http://download.sourceforge.net/bogofilter/bogofilter-${PV}.tar.bz2 \
- file://configure.ac.patch;patch=1 \
- file://volatiles \
- file://postfix-filter.sh \
- file://bogohelper.sh \
- "
-
-inherit autotools
-
-EXTRA_OECONF = "--with-libdb-prefix=${libdir}"
-
-do_install_append () {
- mkdir -p ${D}${sysconfdir}/default/volatiles
- install -m 644 ${WORKDIR}/volatiles ${D}${sysconfdir}/default/volatiles/01_bogofilter
- install -m 755 ${WORKDIR}/postfix-filter.sh ${D}${bindir}/postfix-filter.sh
- install -m 755 ${WORKDIR}/bogohelper.sh ${D}${bindir}/bogohelper.sh
-}
-
-pkg_postinst () {
- grep filter /etc/group || addgroup filter
- grep spam /etc/passwd || adduser --disabled-password --home=/var/spool/filter --ingroup filter -g "Bogofilter" spam
- grep bogo /etc/passwd || adduser --disabled-password --home=/home/bogo --ingroup filter -g "Bogofilter" bogo
- [ -f "/etc/postfix/master.cf" ] && grep "/usr/bin/postfix-filter.sh" /etc/postfix/master.cf || {
- echo "bogofilter unix - n n - - pipe" >> /etc/postfix/master.cf
- echo " flags=R user=bogo argv=/usr/bin/postfix-filter.sh -f ${sender} -- ${recipient}" >> /etc/postfix/master.cf
- }
- /etc/init.d/populate-volatile.sh update
-}
diff --git a/recipes/bogofilter/bogofilter_0.96.6.bb b/recipes/bogofilter/bogofilter_0.96.6.bb
new file mode 100644
index 0000000000..35bb1112b5
--- /dev/null
+++ b/recipes/bogofilter/bogofilter_0.96.6.bb
@@ -0,0 +1,40 @@
+SECTION = "console/network"
+DEPENDS = "virtual/db"
+RDEPENDS = "glibc-gconv glibc-gconv-iso8859-1"
+DESCRIPTION = "Bogofilter is a mail filter that classifies mail as spam or ham (non-spam) \
+by a statistical analysis of the message's header and content (body). \
+The program is able to learn from the user's classifications and corrections."
+LICENSE = "GPL"
+PR = "r8"
+PRIORITY = "optional"
+
+SRC_URI = "http://launchpad.net/bogofilter/main/0.96.6/+download/bogofilter-0.96.6.tar.gz;name=src \
+ file://configure.ac.patch;patch=1 \
+ file://volatiles \
+ file://postfix-filter.sh \
+ file://bogohelper.sh "
+SRC_URI[src.md5sum] = "7e8e9593662f6394a56f99f12f525d6e"
+SRC_URI[src.sha256sum] = "0b12fdd5b0bc50b582327764ee5cd415809db6d7adc233f1801bc0d0bf435a6d"
+
+
+inherit autotools
+
+EXTRA_OECONF = "--with-libdb-prefix=${libdir}"
+
+do_install_append () {
+ mkdir -p ${D}${sysconfdir}/default/volatiles
+ install -m 644 ${WORKDIR}/volatiles ${D}${sysconfdir}/default/volatiles/01_bogofilter
+ install -m 755 ${WORKDIR}/postfix-filter.sh ${D}${bindir}/postfix-filter.sh
+ install -m 755 ${WORKDIR}/bogohelper.sh ${D}${bindir}/bogohelper.sh
+}
+
+pkg_postinst () {
+ grep filter /etc/group || addgroup filter
+ grep spam /etc/passwd || adduser --disabled-password --home=/var/spool/filter --ingroup filter -g "Bogofilter" spam
+ grep bogo /etc/passwd || adduser --disabled-password --home=/home/bogo --ingroup filter -g "Bogofilter" bogo
+ [ -f "/etc/postfix/master.cf" ] && grep "/usr/bin/postfix-filter.sh" /etc/postfix/master.cf || {
+ echo "bogofilter unix - n n - - pipe" >> /etc/postfix/master.cf
+ echo " flags=R user=bogo argv=/usr/bin/postfix-filter.sh -f ${sender} -- ${recipient}" >> /etc/postfix/master.cf
+ }
+ /etc/init.d/populate-volatile.sh update
+}
diff --git a/recipes/boost/boost_1.34.1.bb b/recipes/boost/boost_1.34.1.bb
index 5f351d6ed9..3e1b282b03 100644
--- a/recipes/boost/boost_1.34.1.bb
+++ b/recipes/boost/boost_1.34.1.bb
@@ -9,7 +9,7 @@ PRIORITY = "optional"
LICENSE = "Boost Software License"
DEPENDS = "python boost-jam-native zlib bzip2"
-PR = "${INC_PR}.1"
+PR = "6"
SRC_URI = "\
${SOURCEFORGE_MIRROR}/boost/${BOOST_P}.tar.bz2 \
diff --git a/recipes/boost/boost_1.37.0.bb b/recipes/boost/boost_1.37.0.bb
new file mode 100644
index 0000000000..f21100e62f
--- /dev/null
+++ b/recipes/boost/boost_1.37.0.bb
@@ -0,0 +1,20 @@
+include boost-36.inc
+
+DEFAULT_PREFERENCE = "-1"
+
+PR = "${INC_PR}.1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/boost/${BOOST_P}.tar.bz2;name=boost1370tarbz2 \
+ file://arm-intrinsics.patch;patch=1 \
+ file://02-atomic-count-pthreads-on-arm.patch;patch=1 \
+ file://uclibc.patch;patch=1 \
+ file://sscanf.patch;patch=1 \
+ "
+
+SRC_URI[boost1370tarbz2.md5sum] = "8d9f990bfb7e83769fa5f1d6f065bc92"
+SRC_URI[boost1370tarbz2.sha256sum] = "d52ef49f70b1b9addc4e0d1a3a2a1966227f0d173c3301bac3e6d399eeac5472"
+
+BJAM_OPTS = '${BJAM_TOOLS} \
+ --builddir=${S}/${TARGET_SYS} \
+ ${BJAM_EXTRA}'
+
diff --git a/recipes/busybox/busybox-1.15.3/0000-wget-no-check-certificate.patch b/recipes/busybox/busybox-1.15.3/0000-wget-no-check-certificate.patch
new file mode 100644
index 0000000000..c737f172b1
--- /dev/null
+++ b/recipes/busybox/busybox-1.15.3/0000-wget-no-check-certificate.patch
@@ -0,0 +1,12 @@
+diff --git a/networking/wget.c b/networking/wget.c
+index 9d813dc..09edd67 100644
+--- a/networking/wget.c
++++ b/networking/wget.c
+@@ -546,6 +546,7 @@ int wget_main(int argc UNUSED_PARAM, char **argv)
+ "passive-ftp\0" No_argument "\xff"
+ "header\0" Required_argument "\xfe"
+ "post-data\0" Required_argument "\xfd"
++ "no-check-certificate\0" No_argument "\xfc"
+ ;
+ #endif
+
diff --git a/recipes/busybox/busybox.inc b/recipes/busybox/busybox.inc
index 519fcd6f39..1ee263ad90 100644
--- a/recipes/busybox/busybox.inc
+++ b/recipes/busybox/busybox.inc
@@ -7,14 +7,13 @@ functionality and behave very much like their GNU counterparts. BusyBox \
provides a fairly complete POSIX environment for any small or embedded \
system."
HOMEPAGE = "http://www.busybox.net"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
SECTION = "base"
PRIORITY = "required"
-INC_PR = "r24"
+INC_PR = "r26"
SRC_URI = "\
- http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
file://busybox-cron \
file://busybox-httpd \
file://busybox-udhcpd \
@@ -40,7 +39,7 @@ PACKAGES =+ "${PN}-mountall ${PN}-httpd ${PN}-syslog ${PN}-udhcpd"
# listed in the NEEDED field.
RRECOMMENDS += "libgcc"
-FILES_${PN}-mountall = "${sysconfdir}/default/mountall"
+FILES_${PN}-mountall = "${sysconfdir}/default/mountall.${PN}"
RDEPENDS_${PN} += "${PN}-mountall"
# Make busybox recommend busybox-syslog for those images that expect it
@@ -55,7 +54,7 @@ FILES_${PN} += "${datadir}/udhcpc"
INITSCRIPT_PACKAGES = "${PN}-httpd ${PN}-syslog ${PN}-udhcpd"
INITSCRIPT_NAME_${PN}-httpd = "busybox-httpd"
INITSCRIPT_NAME_${PN}-syslog = "syslog"
-INITSCRIPT_NAME_${PN}-udhcpd = "busybox-udhcpd"
+INITSCRIPT_NAME_${PN}-udhcpd = "busybox-udhcpd"
CONFFILES_${PN}-syslog = "${sysconfdir}/syslog.conf"
# This disables the syslog startup links in slugos (see slugos-init)
@@ -97,7 +96,11 @@ do_install () {
# Install /bin/busybox, and the /bin/sh link so the postinst script
# can run. Let update-alternatives handle the rest.
install -d ${D}${base_bindir}
- install -m 0755 ${S}/busybox ${D}${base_bindir}
+ if grep -q "CONFIG_FEATURE_SUID=y" ${WORKDIR}/defconfig; then
+ install -m 4755 ${S}/busybox ${D}${base_bindir}
+ else
+ install -m 0755 ${S}/busybox ${D}${base_bindir}
+ fi
ln -sf busybox ${D}${base_bindir}/sh
if grep -q "CONFIG_SYSLOGD=y" ${WORKDIR}/defconfig; then
@@ -125,7 +128,7 @@ do_install () {
fi
if grep "CONFIG_FEATURE_MOUNT_FSTAB=y" ${WORKDIR}/defconfig; then
install -d ${D}${sysconfdir}/default
- install -m 644 ${WORKDIR}/mountall ${D}${sysconfdir}/default/
+ install -m 644 ${WORKDIR}/mountall ${D}${sysconfdir}/default/mountall.${PN}
fi
install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
@@ -137,11 +140,18 @@ pkg_postinst_${PN} () {
# (update-alternatives have no problem replacing links later anyway)
test -n 2> /dev/null || alias test='busybox test'
if test "x$D" = "x"; then while read link; do if test ! -h "$link"; then case "$link" in /*/*/*) to="../../bin/busybox";; /bin/*) to="busybox";; /*/*) to="../bin/busybox";; /*) to="/bin/busybox";; esac; busybox ln -s $to $link; fi; done </etc/busybox.links; fi
-
+
# This adds the links, remember that this has to work when building an image too, hence the $D
while read link; do case "$link" in /*/*/*) to="../../bin/busybox";; /bin/*) to="busybox";; /*/*) to="../bin/busybox";; /*) to="/bin/busybox";; esac; bn=`basename $link`; update-alternatives --install $link $bn $to 50; done <$D/etc/busybox.links
}
+pkg_postinst_${PN}-mountall () {
+ update-alternatives --install ${sysconfdir}/default/mountall default_mountall mountall.${PN} 50
+}
+pkg_prerm_${PN}-mountall () {
+ update-alternatives --remove default_mountall mountall.${PN}
+}
+
pkg_prerm_${PN} () {
# This is so you can make busybox commit suicide - removing busybox with no other packages
# providing its files, this will make update-alternatives work, but the update-rc.d part
@@ -167,7 +177,7 @@ pkg_prerm_${PN} () {
/*/*/*) to="../../bin/busybox";;
/bin/*) to="busybox";;
/*/*) to="../bin/busybox";;
- /*) to="/bin/busybox";;
+ /*) to="/bin/busybox";;
esac
bn=`basename $link`
sh /usr/bin/update-alternatives --remove $bn $to
diff --git a/recipes/busybox/busybox_1.11.3.bb b/recipes/busybox/busybox_1.11.3.bb
index 0ec753f951..838e1bd54f 100644
--- a/recipes/busybox/busybox_1.11.3.bb
+++ b/recipes/busybox/busybox_1.11.3.bb
@@ -2,7 +2,7 @@ require busybox.inc
PR = "${INC_PR}.1"
SRC_URI = "\
- http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
+ http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
\
file://udhcpscript.patch;patch=1 \
file://B921600.patch;patch=1 \
@@ -23,6 +23,8 @@ SRC_URI = "\
file://mdev \
file://mdev.conf \
"
+SRC_URI[tarball.md5sum] = "4355ad8bb57ce3b39ad827566c1a6da3"
+SRC_URI[tarball.sha256sum] = "6d35fda668988c06f8c22e6e20fe6951ec83108169df6b8c0bad99872577c784"
EXTRA_OEMAKE += "V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX}"
diff --git a/recipes/busybox/busybox_1.13.2.bb b/recipes/busybox/busybox_1.13.2.bb
index 18d49ba45a..d22819e7d4 100644
--- a/recipes/busybox/busybox_1.13.2.bb
+++ b/recipes/busybox/busybox_1.13.2.bb
@@ -2,7 +2,7 @@ require busybox.inc
PR = "${INC_PR}.1"
SRC_URI = "\
- http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
+ http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
file://busybox-1.13.2-awk.patch;patch=1 \
file://busybox-1.13.2-depmod.patch;patch=1 \
file://busybox-1.13.2-init.patch;patch=1 \
@@ -36,6 +36,8 @@ SRC_URI = "\
file://mdev \
file://mdev.conf \
"
+SRC_URI[tarball.md5sum] = "9e2a604d18bef219a5a6bf3acf78b9e1"
+SRC_URI[tarball.sha256sum] = "927774408bd982dd246fb716bb2e646ab0708ce321b42c5e271dc98c1f5d1dc8"
EXTRA_OEMAKE += "V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX}"
diff --git a/recipes/busybox/busybox_1.14.3.bb b/recipes/busybox/busybox_1.14.3.bb
index 8d45e1e880..d714310368 100644
--- a/recipes/busybox/busybox_1.14.3.bb
+++ b/recipes/busybox/busybox_1.14.3.bb
@@ -4,7 +4,7 @@ PR = "${INC_PR}.0"
DEFAULT_PREFERENCE = "-1"
SRC_URI = "\
- http://www.busybox.net/downloads/busybox-${PV}.tar.gz;name=tarball \
+ http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
\
file://udhcpscript.patch;patch=1 \
file://udhcpc-fix-nfsroot.patch;patch=1 \
@@ -27,8 +27,8 @@ SRC_URI = "\
file://mdev.conf \
"
-SRC_URI[tarball.md5sum] = "dfb197b8de260ff284f7222ed23614fe"
-SRC_URI[tarball.sha256sum] = "b5a0c76d414cca97fb21622a5d09fa5a58f59890f5c9ce4f8b851c4e8b73a163"
+SRC_URI[tarball.md5sum] = "d170bf5f97a41aec3a505eab690d5699"
+SRC_URI[tarball.sha256sum] = "e94df4f9063a1951b4e94e76148ed80e921737a89d97bc2c310a2a8927982e90"
EXTRA_OEMAKE += "V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX}"
diff --git a/recipes/busybox/busybox_1.15.3.bb b/recipes/busybox/busybox_1.15.3.bb
index 3f8e40c6ec..1e1aa1e32a 100644
--- a/recipes/busybox/busybox_1.15.3.bb
+++ b/recipes/busybox/busybox_1.15.3.bb
@@ -2,13 +2,14 @@ require busybox.inc
PR = "${INC_PR}.0"
SRC_URI = "\
- http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
+ http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
\
file://udhcpscript.patch;patch=1 \
file://udhcpc-fix-nfsroot.patch;patch=1 \
file://B921600.patch;patch=1 \
file://get_header_tar.patch;patch=1 \
file://busybox-appletlib-dependency.patch;patch=1 \
+ file://0000-wget-no-check-certificate.patch;patch=1 \
file://find-touchscreen.sh \
file://busybox-cron \
file://busybox-httpd \
@@ -24,6 +25,8 @@ SRC_URI = "\
file://mdev \
file://mdev.conf \
"
+SRC_URI[tarball.md5sum] = "6059ac9456de6fb18dc8ee4cd0ec9240"
+SRC_URI[tarball.sha256sum] = "d74020ad2cc5a4dcc5109c44dbd0e22582d6ce42954b0f1ff29763c8c0ff03cb"
EXTRA_OEMAKE += "V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX}"
diff --git a/recipes/busybox/busybox_1.2.1.bb b/recipes/busybox/busybox_1.2.1.bb
index 3630a4662b..037584a198 100644
--- a/recipes/busybox/busybox_1.2.1.bb
+++ b/recipes/busybox/busybox_1.2.1.bb
@@ -2,9 +2,14 @@ require busybox.inc
PR = "${INC_PR}.1"
-SRC_URI += "file://wget-long-options.patch;patch=1 \
+SRC_URI += "\
+ http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
+ \
+ file://wget-long-options.patch;patch=1 \
file://df_rootfs.patch;patch=1 \
file://defconfig"
+SRC_URI[tarball.md5sum] = "362b3dc0f2023ddfda901dc1f1a74391"
+SRC_URI[tarball.sha256sum] = "c6f955c7feafdb7c40645b3dc4c4a3c945477a2429633eef7b2a34ef01827410"
SRC_URI_append_avr32 = " file://install-should-unlink-dest-if-it-exists.patch;patch=1"
do_configure () {
diff --git a/recipes/busybox/busybox_1.2.2.bb b/recipes/busybox/busybox_1.2.2.bb
index 43a15d0f57..c160635998 100644
--- a/recipes/busybox/busybox_1.2.2.bb
+++ b/recipes/busybox/busybox_1.2.2.bb
@@ -4,8 +4,13 @@ PR = "${INC_PR}.1"
DEFAULT_PREFERENCE = "-1"
-SRC_URI = "file://wget-long-options.patch;patch=1 \
+SRC_URI = "\
+ http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
+ \
+ file://wget-long-options.patch;patch=1 \
file://defconfig"
+SRC_URI[tarball.md5sum] = "ae8a4c65b9464c8ece3483a3d3b9544c"
+SRC_URI[tarball.sha256sum] = "4de9fb2bb018e381e64199b38d90cb25e71366c37a8995e9ab5ed206ebcb972f"
do_configure () {
install -m 0644 ${WORKDIR}/defconfig ${S}/.config.oe
diff --git a/recipes/busybox/busybox_1.3.1.bb b/recipes/busybox/busybox_1.3.1.bb
index e0fd63bf5f..a6a79c9327 100644
--- a/recipes/busybox/busybox_1.3.1.bb
+++ b/recipes/busybox/busybox_1.3.1.bb
@@ -4,7 +4,11 @@ PR = "${INC_PR}.1"
DEFAULT_PREFERENCE = "-1"
-SRC_URI = "file://defconfig"
+SRC_URI = "\
+ http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
+ file://defconfig"
+SRC_URI[tarball.md5sum] = "571531cfa83726947ccb566de017ad4f"
+SRC_URI[tarball.sha256sum] = "5bf9ead9cca99620d2e56ddf79fdf5fb306fd7f30087b5556e0956e3b1948206"
do_configure () {
install -m 0644 ${WORKDIR}/defconfig ${S}/.config.oe
diff --git a/recipes/busybox/busybox_1.7.2.bb b/recipes/busybox/busybox_1.7.2.bb
index 8ce081f82f..4bfd5e6d53 100644
--- a/recipes/busybox/busybox_1.7.2.bb
+++ b/recipes/busybox/busybox_1.7.2.bb
@@ -1,7 +1,7 @@
require busybox.inc
PR = "${INC_PR}.1"
-SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
+SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
file://busybox-cron \
file://busybox-httpd \
file://busybox-udhcpd \
@@ -15,6 +15,8 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
file://busybox-appletlib-dependency.patch;patch=1 \
file://umount.busybox \
file://run_parts.c"
+SRC_URI[tarball.md5sum] = "c91ec9756e2000073a9dd8fa9fc3f89e"
+SRC_URI[tarball.sha256sum] = "83c4cc813124a43f13e2ebb83cea9da9909d63891b824bf4bc7006f0567db7cf"
SRC_URI += "http://busybox.net/downloads/fixes-1.7.2/busybox-1.7.2-ash.patch;patch=1 \
http://busybox.net/downloads/fixes-1.7.2/busybox-1.7.2-iptun.patch;patch=1 \
diff --git a/recipes/busybox/busybox_1.9.2.bb b/recipes/busybox/busybox_1.9.2.bb
index cd9b6ab7a3..5e8e65a314 100644
--- a/recipes/busybox/busybox_1.9.2.bb
+++ b/recipes/busybox/busybox_1.9.2.bb
@@ -1,7 +1,7 @@
require busybox.inc
PR = "${INC_PR}.1"
-SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
+SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
file://udhcpscript.patch;patch=1 \
file://adduser-longops.patch;patch=1 \
file://sort-z-nul.patch;patch=1;status=upstream \
@@ -18,6 +18,8 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
file://syslog.conf \
file://umount.busybox \
file://defconfig"
+SRC_URI[tarball.md5sum] = "7e26c56012dd5811251c2f87786b9a77"
+SRC_URI[tarball.sha256sum] = "a14ca1104242953672807f5b5223de5615c237a27140f36d625b3067daaf11dc"
EXTRA_OEMAKE += "V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX}"
diff --git a/recipes/busybox/files/hipox/hwclock.sh b/recipes/busybox/files/hipox/hwclock.sh
new file mode 100644
index 0000000000..47e4c8d44e
--- /dev/null
+++ b/recipes/busybox/files/hipox/hwclock.sh
@@ -0,0 +1,63 @@
+#!/bin/sh
+# hwclock.sh Set system clock to hardware clock, according to the UTC
+# setting in /etc/default/rcS (see also rcS(5)).
+# (hipox machine version)
+#
+# WARNING: If your hardware clock is not in UTC/GMT, this script
+# must know the local time zone. This information is
+# stored in /etc/localtime. This might be a problem if
+# your /etc/localtime is a symlink to something in
+# /usr/share/zoneinfo AND /usr isn't in the root
+# partition! The workaround is to define TZ either
+# in /etc/default/rcS, or in the proper place below.
+
+[ ! -x /sbin/hwclock ] && exit 0
+
+. /etc/default/rcS
+
+[ "$UTC" = yes ] && UTC=--utc || UTC=--localtime
+
+case "$1" in
+ start)
+ if [ "$VERBOSE" != no ]
+ then
+ echo "System time was `date`."
+ echo "Setting the System Clock using the Hardware Clock as reference..."
+ fi
+
+ if [ "$HWCLOCKACCESS" != no ]
+ then
+ if [ -z "$TZ" ]
+ then
+ hwclock -s $UTC;# --hctosys
+ else
+ TZ="$TZ" hwclock -s $UTC;# --hctosys
+ fi
+ fi
+
+ if [ "$VERBOSE" != no ]
+ then
+ echo "System Clock set. System local time is now `date`."
+ fi
+ ;;
+ stop|restart|reload|force-reload)
+ #
+ # At hipox machine we do not update the Hardware Clock
+ # with the System Clock time to avoid needless increase
+ # of the RTC epoch counter.
+ #
+ exit 0
+ ;;
+ show)
+ if [ "$HWCLOCKACCESS" != no ]
+ then
+ hwclock -r $UTC;# --show
+ fi
+ ;;
+ *)
+ echo "Usage: hwclock.sh {start|stop|show|reload|restart}" >&2
+ echo " start sets kernel (system) clock from hardware (RTC) clock" >&2
+ echo " stop and reload set hardware (RTC) clock from kernel (system) clock" >&2
+ exit 1
+ ;;
+esac
diff --git a/recipes/busybox/files/hipox/syslog.conf b/recipes/busybox/files/hipox/syslog.conf
new file mode 100644
index 0000000000..b45cd459d4
--- /dev/null
+++ b/recipes/busybox/files/hipox/syslog.conf
@@ -0,0 +1,9 @@
+DESTINATION="file" # log destinations (buffer file remote)
+MARKINT=20 # interval between --mark-- entries [min]
+REDUCE=no # reduced-size logging
+BUFFERSIZE=64 # buffer: size of circular buffer [kByte]
+LOGFILE=/var/log/messages # file: where to log
+ROTATESIZE=64 # file: rotate log if grown beyond X [kByte] (busybox 1.2+)
+ROTATEGENS=1 # file: keep X generations of rotated logs (busybox 1.2+)
+REMOTE=loghost:514 # remote: where to log
+FOREGROUND=no # run in foreground (don't use!)
diff --git a/recipes/busybox/files/hwclock.sh b/recipes/busybox/files/hwclock.sh
index 6c0af3422c..f9c9f9f2c2 100644
--- a/recipes/busybox/files/hwclock.sh
+++ b/recipes/busybox/files/hwclock.sh
@@ -14,7 +14,7 @@
. /etc/default/rcS
-[ "$UTC" = yes ] && UTC=--utc || UTC=--localtime
+[ "$UTC" = yes ] && UTC=-u || UTC=-l
case "$1" in
start)
@@ -28,9 +28,9 @@ case "$1" in
then
if [ -z "$TZ" ]
then
- hwclock -s $UTC;# --hctosys
+ hwclock -s $UTC
else
- TZ="$TZ" hwclock -s $UTC;# --hctosys
+ TZ="$TZ" hwclock -s $UTC
fi
fi
@@ -53,7 +53,7 @@ case "$1" in
fi
if [ "$HWCLOCKACCESS" != no ]
then
- hwclock -w $UTC;# --systohc
+ hwclock -w $UTC
fi
if [ "$VERBOSE" != no ]
then
@@ -64,7 +64,7 @@ case "$1" in
show)
if [ "$HWCLOCKACCESS" != no ]
then
- hwclock -r $UTC;# --show
+ hwclock -r $UTC
fi
;;
*)
diff --git a/recipes/ca-certificates/ca-certificates_20090814.bb b/recipes/ca-certificates/ca-certificates_20090814.bb
new file mode 100644
index 0000000000..ae85fea9fc
--- /dev/null
+++ b/recipes/ca-certificates/ca-certificates_20090814.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "Common CA certificates"
+HOMEPAGE = "http://packages.debian.org/sid/ca-certificates"
+SECTION = "misc"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+SRC_URI = "http://ftp.de.debian.org/debian/pool/main/c/ca-certificates/ca-certificates_${PV}.tar.gz;name=archive \
+ file://remove-c-rehash.patch;patch=1"
+SRC_URI[archive.md5sum] = "307052c985bec7f9a00eb84293eef779"
+SRC_URI[archive.sha256sum] = "6924fafc35dd020da99bc86842f95f2a97a3a5ff084b0635eea815fe2777fc7c"
+
+inherit autotools
+
+do_install_prepend() {
+ mkdir -p ${D}/usr/share/ca-certificates
+ mkdir -p ${D}/usr/sbin
+ mkdir -p ${D}/etc/ssl/certs
+ mkdir -p ${D}/etc/ca-certificates/update.d
+}
+
+do_install_append() {
+ cd ${D}/usr/share/ca-certificates
+ echo "# Lines starting with # will be ignored" > ${D}/etc/ca-certificates.conf
+ echo "# Lines starting with ! will remove certificate on next update" >> ${D}/etc/ca-certificates.conf
+ echo "#" >> ${D}/etc/ca-certificates.conf
+ for crt in $(find . -type f -name '*.crt' -print)
+ do
+ crt=$(echo $crt | sed -e 's/\.\///')
+ echo $crt >> ${D}/etc/ca-certificates.conf
+ done
+}
+
+PACKAGE_ARCH = "all"
+PACKAGES = "${PN}"
+
+pkg_postinst_${PN} () {
+ /usr/sbin/update-ca-certificates
+}
+
+CONFFILES_${PN} = "/etc/ca-certificates.conf"
diff --git a/recipes/ca-certificates/files/remove-c-rehash.patch b/recipes/ca-certificates/files/remove-c-rehash.patch
new file mode 100644
index 0000000000..9d9b8ade3a
--- /dev/null
+++ b/recipes/ca-certificates/files/remove-c-rehash.patch
@@ -0,0 +1,29 @@
+--- ca-certificates-20090814/sbin/update-ca-certificates.orig 2010-02-25 19:25:08.272807308 +0100
++++ ca-certificates-20090814/sbin/update-ca-certificates 2010-02-25 19:25:33.962806273 +0100
+@@ -133,16 +133,16 @@
+ ADDED_CNT=$(wc -l < "$ADDED")
+ REMOVED_CNT=$(wc -l < "$REMOVED")
+
+-if [ "$ADDED_CNT" -gt 0 ] || [ "$REMOVED_CNT" -gt 0 ]
+-then
+- # only run if set of files has changed
+- if [ "$verbose" = 0 ]
+- then
+- c_rehash . > /dev/null
+- else
+- c_rehash .
+- fi
+-fi
++#if [ "$ADDED_CNT" -gt 0 ] || [ "$REMOVED_CNT" -gt 0 ]
++#then
++# # only run if set of files has changed
++# if [ "$verbose" = 0 ]
++# then
++# c_rehash . > /dev/null
++# else
++# c_rehash .
++# fi
++#fi
+
+ echo "$ADDED_CNT added, $REMOVED_CNT removed; done."
+
diff --git a/recipes/cairo/cairo_1.8.10.bb b/recipes/cairo/cairo_1.8.10.bb
new file mode 100644
index 0000000000..0c43549121
--- /dev/null
+++ b/recipes/cairo/cairo_1.8.10.bb
@@ -0,0 +1,9 @@
+require cairo.inc
+
+SRC_URI = "http://cairographics.org/releases/cairo-${PV}.tar.gz;name=cairo \
+ file://dolt-fix.patch;patch=1 \
+ "
+
+SRC_URI[cairo.md5sum] = "b60a82f405f9400bbfdcf850b1728d25"
+SRC_URI[cairo.sha256sum] = "572bada15596ec8708392db1af8b93a1af75ca47690348154e2841f3a6f08439"
+
diff --git a/recipes/cdparanoia/cdparanoia_svn.bb b/recipes/cdparanoia/cdparanoia_svn.bb
index 71fafee281..783d5071ff 100644
--- a/recipes/cdparanoia/cdparanoia_svn.bb
+++ b/recipes/cdparanoia/cdparanoia_svn.bb
@@ -2,19 +2,19 @@
# Copyright (C) 2005, Advanced Micro Devices, Inc. All Rights Reserved
# Released under the MIT license (see packages/COPYING)
-PR ="r1"
-LICENSE="GPL"
+PR = "r2"
+LICENSE = "GPL"
PV = "10.2+svnr${SRCPV}"
-SRC_URI="svn://svn.xiph.org/trunk;module=cdparanoia;proto=http \
+SRC_URI = "svn://svn.xiph.org/trunk;module=cdparanoia;proto=http \
file://fixes10.patch;patch=1 \
file://Makefile.in.patch;patch=1 \
file://interface_Makefile.in.patch;patch=1 \
file://paranoia_Makefile.in.patch;patch=1 \
- file://configure.in.patch;patch=1 "
+ file://configure.in.patch;patch=1 "
-S="${WORKDIR}/cdparanoia"
+S = "${WORKDIR}/cdparanoia"
PARALLEL_MAKE = ""
@@ -25,12 +25,3 @@ do_install() {
INCLUDEDIR="${D}/usr/include/" LIBDIR="${D}/usr/lib" install
}
-do_stage() {
- install -d ${STAGING_INCDIR} ${STAGING_LIBDIR}
-
- install -m 0644 paranoia/cdda_paranoia.h ${STAGING_INCDIR}
- install -m 0644 interface/cdda_interface.h ${STAGING_INCDIR}
-
- oe_libinstall -C interface libcdda_interface ${STAGING_LIBDIR}
- oe_libinstall -C paranoia libcdda_paranoia ${STAGING_LIBDIR}
-}
diff --git a/recipes/cdrtools/cdrtools-native_2.01.01_alpha77.bb b/recipes/cdrtools/cdrtools-native_2.01.01_alpha77.bb
new file mode 100644
index 0000000000..9e89874c85
--- /dev/null
+++ b/recipes/cdrtools/cdrtools-native_2.01.01_alpha77.bb
@@ -0,0 +1,26 @@
+# cdrtools-native OE build file
+# Copyright (C) 2004-2006, Advanced Micro Devices, Inc. All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+
+LICENSE="OSS"
+DESCRIPTION="A set of tools for CD recording, including cdrecord"
+HOMEPAGE="http://cdrecord.berlios.de/private/cdrecord.html"
+
+SRC_URI="http://ftp.berlios.de/pub/cdrecord/alpha/cdrtools-2.01.01a77.tar.bz2;name=src"
+SRC_URI[src.md5sum] = "0564e79a18d9a6768dbbb02a7717c5ab"
+SRC_URI[src.sha256sum] = "c007e72ec113503a30f26f7b344d95f804a72ff4981141e2a55fc2b32db324cc"
+
+S="${WORKDIR}/cdrtools-${PV}"
+PR = "r2"
+
+inherit native
+
+STAGE_TEMP="${WORKDIR}/stage_temp"
+
+do_stage() {
+ install -d ${STAGE_TEMP}
+ make install INS_BASE=${STAGE_TEMP}
+
+ install -d ${STAGING_BINDIR}
+ install ${STAGE_TEMP}/bin/* ${STAGING_BINDIR}
+}
diff --git a/recipes/cdrtools/cdrtools-native_2.01.bb b/recipes/cdrtools/cdrtools-native_2.01.bb
deleted file mode 100644
index 35404c9c04..0000000000
--- a/recipes/cdrtools/cdrtools-native_2.01.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-# cdrtools-native OE build file
-# Copyright (C) 2004-2006, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-LICENSE="OSS"
-DESCRIPTION="A set of tools for CD recording, including cdrecord"
-HOMEPAGE="http://cdrecord.berlios.de/private/cdrecord.html"
-
-SRC_URI="http://ftp.berlios.de/pub/cdrecord/cdrtools-${PV}.tar.bz2"
-
-S="${WORKDIR}/cdrtools-${PV}"
-PR = "r2"
-
-inherit native
-
-STAGE_TEMP="${WORKDIR}/stage_temp"
-
-do_stage() {
- install -d ${STAGE_TEMP}
- make install INS_BASE=${STAGE_TEMP}
-
- install -d ${STAGING_BINDIR}
- install ${STAGE_TEMP}/bin/* ${STAGING_BINDIR}
-}
diff --git a/recipes/chicken/chicken-cross_4.4.0.bb b/recipes/chicken/chicken-cross_4.4.0.bb
new file mode 100644
index 0000000000..387247b58a
--- /dev/null
+++ b/recipes/chicken/chicken-cross_4.4.0.bb
@@ -0,0 +1,26 @@
+require chicken.inc
+
+PR = "${INC_PR}.1"
+
+inherit cross
+
+do_compile() {
+ make PLATFORM="linux" PREFIX="${prefix}" TARGET_PREFIX="${STAGING_DIR_TARGET}${layout_prefix}" TARGETSYSTEM="${TARGET_SYS}" LIBRARIAN=ar
+}
+
+do_install() {
+ make PLATFORM="linux" PREFIX="${prefix}" TARGET_PREFIX="${STAGING_DIR_TARGET}${layout_prefix}" TARGETSYSTEM="${TARGET_SYS}" LIBRARIAN=ar install
+}
+
+do_stage() {
+ make PLATFORM="linux" PREFIX="${prefix}" TARGET_PREFIX="${STAGING_DIR_TARGET}${layout_prefix}" TARGETSYSTEM="${TARGET_SYS}" LIBRARIAN=ar install
+}
+
+PACKAGES += "chicken-bin libchicken libuchicken"
+
+FILES_${PN} = ""
+FILES_libchicken = "${libdir}/libchicken.so.*"
+FILES_libuchicken = "${libdir}/libuchicken.so.*"
+FILES_${PN}-bin = "${bindir}/* ${datadir}/chicken/*.* ${libdir}/chicken/*/*.so"
+FILES_${PN}-doc += "${datadir}/chicken/doc"
+FILES_${PN}-dbg += "${libdir}/chicken/*/.debug"
diff --git a/recipes/chicken/chicken_4.4.0.bb b/recipes/chicken/chicken_4.4.0.bb
new file mode 100644
index 0000000000..125cdede5d
--- /dev/null
+++ b/recipes/chicken/chicken_4.4.0.bb
@@ -0,0 +1,26 @@
+require chicken.inc
+
+DEPENDS = "chicken-cross"
+
+PR = "${INC_PR}.1"
+
+do_compile() {
+ make PLATFORM="linux" DESTDIR="${D}" PREFIX="${prefix}" HOSTSYSTEM="${TARGET_SYS}" ARCH=${CHICKEN_ARCH}
+}
+
+do_install() {
+ make PLATFORM="linux" DESTDIR="${D}" PREFIX="${prefix}" HOSTSYSTEM="${TARGET_SYS}" ARCH=${CHICKEN_ARCH} install
+}
+
+do_stage() {
+ make PLATFORM="linux" DESTDIR="${STAGING_DIR_TARGET}" PREFIX="${prefix}" HOSTSYSTEM="${TARGET_SYS}" ARCH=${CHICKEN_ARCH} install
+}
+
+PACKAGES += "chicken-bin libchicken libuchicken"
+
+FILES_${PN} = ""
+FILES_libchicken = "${libdir}/libchicken.so.*"
+FILES_libuchicken = "${libdir}/libuchicken.so.*"
+FILES_${PN}-bin = "${bindir}/* ${datadir}/chicken/*.* ${libdir}/chicken/*/*.so"
+FILES_${PN}-doc += "${datadir}/chicken/doc"
+FILES_${PN}-dbg += "${libdir}/chicken/*/.debug"
diff --git a/recipes/clutter/clutter-gst-0.9_git.bb b/recipes/clutter/clutter-gst-0.9_git.bb
index 3cd12ea095..3bf7d485ed 100644
--- a/recipes/clutter/clutter-gst-0.9_git.bb
+++ b/recipes/clutter/clutter-gst-0.9_git.bb
@@ -1,6 +1,6 @@
require clutter-gst.inc
-DEPENDS += "clutter-0.9"
+DEPENDS = "clutter-0.9 gstreamer gst-plugins-base"
SRCREV = "379b63b013af463210e54470693aedfa9009f4dc"
PV = "0.9.0"
diff --git a/recipes/connman/mokonnect_svn.bb b/recipes/connman/mokonnect_svn.bb
index dec35e029e..3dceb09b8d 100644
--- a/recipes/connman/mokonnect_svn.bb
+++ b/recipes/connman/mokonnect_svn.bb
@@ -3,10 +3,11 @@ HOMEPAGE = "http://www.assembla.com/wiki/show/shrdev"
AUTHOR = "Fate"
LICENSE = "GPLv2"
SECTION = "e/apps"
-RDEPENDS = "python-elementary connman connman-plugin-wifi"
+RDEPENDS = "python-elementary connman connman-plugin-wifi connman-plugin-udhcp"
+SRCREV = "113"
PV = "0.4+svnr${SRCPV}"
-PR = "r2"
+PR = "r3"
SRC_URI = "svn://subversion.assembla.com/svn/shrdev;module=Mokonnect/trunk;proto=http"
diff --git a/recipes/cpufreqd/cpufrequtils/fix-proc-stat-reading.patch b/recipes/cpufreqd/cpufrequtils/fix-proc-stat-reading.patch
new file mode 100644
index 0000000000..a9e3407b35
--- /dev/null
+++ b/recipes/cpufreqd/cpufrequtils/fix-proc-stat-reading.patch
@@ -0,0 +1,59 @@
+From 6657831200419d7509edcc04434d03b994c86adb Mon Sep 17 00:00:00 2001
+From: Anton Arapov <anton@redhat.com>
+Date: Wed, 11 Nov 2009 21:33:09 +0100
+Subject: [PATCH] cpufreq/aperf : fix the /proc/stat read routine, always fails otherwise.
+
+ the statement:
+ if (!fgets(value, LINE_LEN, fp)) {
+ always fails(==0) at the end of proc file, so we will have err_out:
+ firing all the time.
+
+ I've aligned the code to the one that other utils of cpufreq has.
+
+Signed-off-by: Anton Arapov <aarapov@redhat.com>
+Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
+---
+ utils/aperf.c | 18 +++++++-----------
+ 1 files changed, 7 insertions(+), 11 deletions(-)
+
+diff --git a/utils/aperf.c b/utils/aperf.c
+index a37f8b1..8ecff2c 100644
+--- a/utils/aperf.c
++++ b/utils/aperf.c
+@@ -76,14 +76,15 @@ static unsigned int count_cpus(void)
+ unsigned int cpunr = 0;
+
+ fp = fopen("/proc/stat", "r");
+- if(!fp)
+- goto err_out;
++ if(!fp) {
++ printf("Couldn't count the number of CPUs (%s: %s), "
++ "assuming 1\n", "/proc/stat", strerror(errno));
++ return 1;
++ }
+
+ while (!feof(fp)) {
+- if (!fgets(value, LINE_LEN, fp)) {
+- fclose(fp);
+- goto err_out;
+- }
++ if (!fgets(value, LINE_LEN, fp))
++ continue;
+ value[LINE_LEN - 1] = '\0';
+ if (strlen(value) < (LINE_LEN - 2))
+ continue;
+@@ -98,11 +99,6 @@ static unsigned int count_cpus(void)
+
+ /* cpu count starts from 0, on error return 1 (UP) */
+ return (ret+1);
+-
+-err_out:
+- printf("Couldn't count the number of CPUs (%s: %s), "
+- "assuming 1\n", "/proc/stat", strerror(errno));
+- return 1;
+ }
+
+ static int has_mperf_aperf_support(int cpu)
+--
+1.7.0
+
diff --git a/recipes/cpufreqd/cpufrequtils_006.bb b/recipes/cpufreqd/cpufrequtils_006.bb
index 98556a63bc..2b4e959898 100644
--- a/recipes/cpufreqd/cpufrequtils_006.bb
+++ b/recipes/cpufreqd/cpufrequtils_006.bb
@@ -1,7 +1,11 @@
LICENSE = "GPLv2"
DESCRIPTION = "To make access to the Linux kernel cpufreq subsystem easier for users and cpufreq userspace tools, a cpufrequtils package was created"
-SRC_URI = "http://www.kernel.org/pub/linux/utils/kernel/cpufreq/cpufrequtils-${PV}.tar.bz2"
+PR = "r1"
+
+SRC_URI = "http://www.kernel.org/pub/linux/utils/kernel/cpufreq/cpufrequtils-${PV}.tar.bz2 \
+ file://fix-proc-stat-reading.patch;patch=1 \
+"
export CROSS = "${TARGET_PREFIX}"
export LIBTOOL = "${TARGET_PREFIX}libtool --tag cc"
diff --git a/recipes/cscope/cscope_15.5.bb b/recipes/cscope/cscope_15.5.bb
deleted file mode 100644
index 9d41997a60..0000000000
--- a/recipes/cscope/cscope_15.5.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DEPENDS = "ncurses"
-DESCRIPTION = "A text screen-based source browser."
-SECTION = "console/utils"
-LICENSE = "BSD"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/cscope/cscope-${PV}.tar.gz"
-
-inherit autotools
-
-do_compile () {
- oe_runmake 'LDFLAGS=${LDFLAGS}'
-}
diff --git a/recipes/cscope/cscope_15.7a.bb b/recipes/cscope/cscope_15.7a.bb
new file mode 100644
index 0000000000..851855b8db
--- /dev/null
+++ b/recipes/cscope/cscope_15.7a.bb
@@ -0,0 +1,14 @@
+DEPENDS = "ncurses"
+DESCRIPTION = "A text screen-based source browser."
+SECTION = "console/utils"
+LICENSE = "BSD"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/cscope/cscope-${PV}.tar.bz2;name=src"
+SRC_URI[src.md5sum] = "da43987622ace8c36bbf14c15a350ec1"
+SRC_URI[src.sha256sum] = "02638bcba790bc8b0562f28dbe789e61794415079d94a676efc287d18dc96037"
+
+inherit autotools
+
+do_compile () {
+ oe_runmake 'LDFLAGS=${LDFLAGS}'
+}
diff --git a/recipes/ctorrent/ctorrent_3.3.1.bb b/recipes/ctorrent/ctorrent_3.3.1.bb
index 91a1fac181..ae189af36f 100644
--- a/recipes/ctorrent/ctorrent_3.3.1.bb
+++ b/recipes/ctorrent/ctorrent_3.3.1.bb
@@ -2,6 +2,8 @@ require ctorrent.inc
DESCRIPTION += "This is the Enhanced version from the dtorrent project"
-SRC_URI = "${SOURCEFORGE_MIRROR}/dtorrent/ctorrent-dnh${PV}.tar.gz"
+SRC_URI = "${SOURCEFORGE_MIRROR}/dtorrent/ctorrent-dnh${PV}.tar.gz \
+ file://CVE-2009-1759.patch;patch=1;pnum=0 "
S = "${WORKDIR}/${PN}-dnh${PV}"
+PR="r1"
diff --git a/recipes/ctorrent/files/CVE-2009-1759.patch b/recipes/ctorrent/files/CVE-2009-1759.patch
new file mode 100644
index 0000000000..2f61c92852
--- /dev/null
+++ b/recipes/ctorrent/files/CVE-2009-1759.patch
@@ -0,0 +1,88 @@
+CVE-2009-1759
+
+http://sourceforge.net/tracker/?func=detail&aid=2782875&group_id=202532&atid=981959
+
+Index: bencode.h
+===================================================================
+--- bencode.h (revision 301)
++++ bencode.h (revision 302)
+@@ -25,7 +25,7 @@
+ size_t decode_list(const char *b,size_t len,const char *keylist);
+ size_t decode_rev(const char *b,size_t len,const char *keylist);
+ size_t decode_query(const char *b,size_t len,const char *keylist,const char **ps,size_t *pi,int64_t *pl,int method);
+-size_t decode_list2path(const char *b, size_t n, char *pathname);
++size_t decode_list2path(const char *b, size_t n, char *pathname, size_t maxlen);
+ size_t bencode_buf(const char *str,size_t len,FILE *fp);
+ size_t bencode_str(const char *str, FILE *fp);
+ size_t bencode_int(const uint64_t integer, FILE *fp);
+Index: bencode.cpp
+===================================================================
+--- bencode.cpp (revision 301)
++++ bencode.cpp (revision 302)
+@@ -233,22 +233,28 @@
+ return bencode_end_dict_list(fp);
+ }
+
+-size_t decode_list2path(const char *b, size_t n, char *pathname)
++size_t decode_list2path(const char *b, size_t n, char *pathname, size_t maxlen)
+ {
+ const char *pb = b;
+ const char *s = (char *) 0;
++ const char *endmax = pathname + maxlen - 1;
+ size_t r,q;
+
+ if( 'l' != *pb ) return 0;
+ pb++;
+ n--;
+ if( !n ) return 0;
+- for(; n;){
++ while( n && pathname < endmax ){
+ if(!(r = buf_str(pb, n, &s, &q)) ) return 0;
++ if( q >= maxlen ) return 0;
+ memcpy(pathname, s, q);
+ pathname += q;
+- pb += r; n -= r;
+- if( 'e' != *pb ){*pathname = PATH_SP, pathname++;} else break;
++ maxlen -= q;
++ pb += r;
++ n -= r;
++ if( 'e' == *pb ) break;
++ if( pathname >= endmax ) return 0;
++ *pathname++ = PATH_SP;
+ }
+ *pathname = '\0';
+ return (pb - b + 1);
+Index: btfiles.cpp
+===================================================================
+--- btfiles.cpp (revision 301)
++++ btfiles.cpp (revision 302)
+@@ -471,6 +471,8 @@
+ BTFILE *pbf_last = (BTFILE*) 0;
+ BTFILE *pbf = (BTFILE*) 0;
+ size_t dl;
++ unsigned long nfiles = 0;
++
+ if( decode_query(metabuf,metabuf_len,"info|length",
+ (const char**) 0,(size_t*) 0,(int64_t*) 0,QUERY_LONG) )
+ return -1;
+@@ -524,12 +526,18 @@
+ #ifndef WINDOWS
+ if( !pbf ) return -1;
+ #endif
++ nfiles++;
+ pbf->bf_length = t;
+ m_total_files_length += t;
+ r = decode_query(p, dl, "path", (const char **)0, &n, (int64_t*)0,
+ QUERY_POS);
+- if( !r ) return -1;
+- if(!decode_list2path(p + r, n, path)) return -1;
++ if( !r || !decode_list2path(p + r, n, path, sizeof(path)) ){
++ CONSOLE.Warning(1,
++ "error, invalid path in torrent data for file %lu at offset %llu",
++ nfiles, m_total_files_length - t);
++ delete pbf;
++ return -1;
++ }
+
+ int f_conv;
+ char *tmpfn = new char[strlen(path)*2+5];
diff --git a/recipes/cups/cups.inc b/recipes/cups/cups.inc
index db4475cd5c..36e76c34fd 100644
--- a/recipes/cups/cups.inc
+++ b/recipes/cups/cups.inc
@@ -16,6 +16,7 @@ EXTRA_OECONF = " \
--enable-browsing \
--disable-openssl \
--disable-tiff \
+ --disable-ssl \
--without-php \
--without-perl \
--without-python \
diff --git a/recipes/curl/curl-sdk-7.19.7/pkgconfig_fix.patch b/recipes/curl/curl-sdk-7.19.7/pkgconfig_fix.patch
new file mode 100644
index 0000000000..7966779d4a
--- /dev/null
+++ b/recipes/curl/curl-sdk-7.19.7/pkgconfig_fix.patch
@@ -0,0 +1,13 @@
+Index: curl-7.16.4/libcurl.pc.in
+===================================================================
+--- curl-7.16.4.orig/libcurl.pc.in 2007-02-18 09:41:27.000000000 +0000
++++ curl-7.16.4/libcurl.pc.in 2008-03-18 11:42:43.000000000 +0000
+@@ -33,6 +33,6 @@
+ URL: http://curl.haxx.se/
+ Description: Library to transfer files with ftp, http, etc.
+ Version: @VERSION@
+-Libs: -L${libdir} -lcurl @LDFLAGS@ @LIBS@
+-Libs.private: @LIBCURL_LIBS@ @LIBS@
++Libs: -L${libdir} -lcurl
++Libs.private: -ldl -lz
+ Cflags: -I${includedir}
diff --git a/recipes/curl/curl-sdk_7.18.2.bb b/recipes/curl/curl-sdk_7.18.2.bb
deleted file mode 100644
index e26c53299d..0000000000
--- a/recipes/curl/curl-sdk_7.18.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require curl-common.inc
-inherit sdk
-DEPENDS = "zlib-sdk"
-SRC_URI += "file://curl-7.18.1-CVE-2009-2417.patch;patch=1;pnum=0"
-
-PR = "${INC_PR}.2"
diff --git a/recipes/curl/curl-sdk_7.19.7.bb b/recipes/curl/curl-sdk_7.19.7.bb
new file mode 100644
index 0000000000..0b2a6069da
--- /dev/null
+++ b/recipes/curl/curl-sdk_7.19.7.bb
@@ -0,0 +1,10 @@
+require curl-common.inc
+inherit sdk
+DEPENDS = "zlib-sdk"
+
+SRC_URI[tarball.md5sum] = "79a8fbb2eed5464b97bdf94bee109380"
+SRC_URI[tarball.sha256sum] = "1a15f94ae3401e3bd6208ce64155c2577815019824bceae7fd3221a12bc54a70"
+
+EXTRA_OECONF = " --without-gnutls "
+
+PR = "${INC_PR}.0"
diff --git a/recipes/dbus/dbus-1.2.20/0001-Make-the-default-DBus-reply-timeout-configurable.patch b/recipes/dbus/dbus-1.2.20/0001-Make-the-default-DBus-reply-timeout-configurable.patch
new file mode 100644
index 0000000000..a38e3db0de
--- /dev/null
+++ b/recipes/dbus/dbus-1.2.20/0001-Make-the-default-DBus-reply-timeout-configurable.patch
@@ -0,0 +1,78 @@
+From fb546488e93a1638d377b228bbb0d2ab58462168 Mon Sep 17 00:00:00 2001
+From: Daniel Willmann <daniel@totalueberwachung.de>
+Date: Thu, 2 Oct 2008 15:50:17 +0800
+Subject: [PATCH] Make the default DBus reply timeout configurable
+
+This patch adds an option --with-dbus-default-reply-timeout to configure
+that will set the default reply timeout used by libdbus in milliseconds.
+autoconf and autoheader need to be rerun in order to regenerate the
+correct configure and config.h.in files.
+---
+ configure.in | 9 +++++++++
+ dbus/dbus-connection-internal.h | 3 ---
+ dbus/dbus-pending-call.c | 1 +
+ 3 files changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 62ac387..5c912d7 100644
+--- a/configure.in
++++ b/configure.in
+@@ -88,6 +88,7 @@ AC_ARG_WITH(console-auth-dir, AS_HELP_STRING([--with-console-auth-dir=[dirname]]
+ AC_ARG_WITH(console-owner-file, AS_HELP_STRING([--with-console-owner-file=[filename]],[file whose owner determines current console owner]))
+ AC_ARG_WITH(dbus_user, AS_HELP_STRING([--with-dbus-user=<user>],[User for running the DBUS daemon (messagebus)]))
+ AC_ARG_WITH(dbus_daemondir, AS_HELP_STRING([--with-dbus-daemondir=[dirname]],[Directory for installing the DBUS daemon]))
++AC_ARG_WITH(dbus_default_reply_timeout, AS_HELP_STRING([--with-dbus-default-reply-timeout=[milliseconds]],[Default reply timeout for DBus method calls]))
+
+ AC_DEFINE(DBUS_UNIX,1,[dbus on unix])
+
+@@ -986,6 +987,13 @@ if test x$have_libaudit = xyes ; then
+ AC_DEFINE(HAVE_LIBAUDIT,1,[audit daemon SELinux support])
+ fi
+
++if test -z "$with_dbus_default_reply_timeout" ; then
++ DBUS_DEFAULT_REPLY_TIMEOUT=25000
++else
++ DBUS_DEFAULT_REPLY_TIMEOUT=$with_dbus_default_reply_timeout
++fi
++AC_DEFINE_UNQUOTED(_DBUS_DEFAULT_TIMEOUT_VALUE,$DBUS_DEFAULT_REPLY_TIMEOUT,[default timeout value for dbus calls])
++
+ #### Set up final flags
+ DBUS_CLIENT_CFLAGS=
+ DBUS_CLIENT_LIBS="$THREAD_LIBS"
+@@ -1348,6 +1356,7 @@ echo "
+ Gettext libs (empty OK): ${INTLLIBS}
+ Using XML parser: ${with_xml}
+ Init scripts style: ${with_init_scripts}
++ Default reply timeout: ${DBUS_DEFAULT_REPLY_TIMEOUT}
+ Abstract socket names: ${ac_cv_have_abstract_sockets}
+ System bus socket: ${DBUS_SYSTEM_SOCKET}
+ System bus address: ${DBUS_SYSTEM_BUS_DEFAULT_ADDRESS}
+diff --git a/dbus/dbus-connection-internal.h b/dbus/dbus-connection-internal.h
+index df54412..5fe536b 100644
+--- a/dbus/dbus-connection-internal.h
++++ b/dbus/dbus-connection-internal.h
+@@ -41,9 +41,6 @@ typedef enum
+ DBUS_ITERATION_BLOCK = 1 << 2 /**< Block if nothing to do. */
+ } DBusIterationFlags;
+
+-/** default timeout value when waiting for a message reply, 25 seconds */
+-#define _DBUS_DEFAULT_TIMEOUT_VALUE (25 * 1000)
+-
+ void _dbus_connection_lock (DBusConnection *connection);
+ void _dbus_connection_unlock (DBusConnection *connection);
+ DBusConnection * _dbus_connection_ref_unlocked (DBusConnection *connection);
+diff --git a/dbus/dbus-pending-call.c b/dbus/dbus-pending-call.c
+index 51b9378..5a7a5f4 100644
+--- a/dbus/dbus-pending-call.c
++++ b/dbus/dbus-pending-call.c
+@@ -21,6 +21,7 @@
+ *
+ */
+
++#include <config.h>
+ #include "dbus-internals.h"
+ #include "dbus-connection-internal.h"
+ #include "dbus-pending-call-internal.h"
+--
+1.5.6.4
+
diff --git a/recipes/dbus/dbus-1.2.20/dbus-1.init b/recipes/dbus/dbus-1.2.20/dbus-1.init
new file mode 100644
index 0000000000..8209454088
--- /dev/null
+++ b/recipes/dbus/dbus-1.2.20/dbus-1.init
@@ -0,0 +1,111 @@
+#! /bin/sh
+# -*- coding: utf-8 -*-
+# Debian init.d script for D-BUS
+# Copyright © 2003 Colin Walters <walters@debian.org>
+# Copyright 2008 OE Team
+
+set -e
+
+DAEMON=/usr/bin/dbus-daemon
+NAME=dbus
+DAEMONUSER=messagebus
+RUNDIR=/var/run/dbus
+PIDFILE=/var/run/dbus/pid
+UUIDDIR=/var/lib/dbus
+DESC="system message bus"
+EVENTDIR=/etc/dbus-1/event.d
+
+test -x $DAEMON || exit 0
+
+# Source defaults file; edit that file to configure this script.
+ENABLED=1
+PARAMS=""
+if [ -e /etc/default/dbus ]; then
+ . /etc/default/dbus
+fi
+
+test "$ENABLED" != "0" || exit 0
+
+start_it_up()
+{
+ if [ ! -d $RUNDIR ]; then
+ mkdir -p $RUNDIR
+ chown $DAEMONUSER $RUNDIR
+ chgrp $DAEMONUSER $RUNDIR
+ fi
+ if [ -e $PIDFILE ]; then
+ PIDDIR=/proc/$(cat $PIDFILE)
+ if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then
+ echo "$DESC already started; not starting."
+ else
+ echo "Removing stale PID file $PIDFILE."
+ rm -f $PIDFILE
+ fi
+ fi
+
+ if [ ! -d $UUIDDIR ]; then
+ mkdir -p $UUIDDIR
+ chown $DAEMONUSER $UUIDDIR
+ chgrp $DAEMONUSER $UUIDDIR
+ fi
+
+ dbus-uuidgen --ensure
+
+ echo -n "Starting $DESC: "
+ start-stop-daemon --start --pidfile $PIDFILE \
+ --user $DAEMONUSER --exec $DAEMON -- --system $PARAMS
+ echo "$NAME."
+ if [ -d $EVENTDIR ]; then
+ run-parts --arg=start $EVENTDIR
+ fi
+}
+
+shut_it_down()
+{
+ if [ -d $EVENTDIR ]; then
+ # TODO: --reverse when busybox supports it
+ run-parts --arg=stop $EVENTDIR
+ fi
+ echo -n "Stopping $DESC: "
+ start-stop-daemon --stop --oknodo --pidfile $PIDFILE \
+ --user $DAEMONUSER
+ # We no longer include these arguments so that start-stop-daemon
+ # can do its job even given that we may have been upgraded.
+ # We rely on the pidfile being sanely managed
+ # --exec $DAEMON -- --system $PARAMS
+ echo "$NAME."
+ rm -f $PIDFILE
+}
+
+reload_it()
+{
+ echo -n "Reloading $DESC config: "
+ dbus-send --print-reply --system --type=method_call \
+ --dest=org.freedesktop.DBus \
+ / org.freedesktop.DBus.ReloadConfig > /dev/null
+ # hopefully this is enough time for dbus to reload it's config file.
+ echo "done."
+}
+
+case "$1" in
+ start)
+ start_it_up
+ ;;
+ stop)
+ shut_it_down
+ ;;
+ reload|force-reload)
+ reload_it
+ ;;
+ restart)
+ shut_it_down
+ sleep 1
+ start_it_up
+ ;;
+ *)
+ echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/recipes/dbus/dbus-1.2.20/fix-install-daemon.patch b/recipes/dbus/dbus-1.2.20/fix-install-daemon.patch
new file mode 100644
index 0000000000..c31786357d
--- /dev/null
+++ b/recipes/dbus/dbus-1.2.20/fix-install-daemon.patch
@@ -0,0 +1,13 @@
+Index: dbus-0.94/bus/Makefile.am
+===================================================================
+--- dbus-0.94.orig/bus/Makefile.am 2006-10-01 17:36:18.000000000 +0200
++++ dbus-0.94/bus/Makefile.am 2006-10-14 21:40:05.000000000 +0200
+@@ -110,7 +110,7 @@
+ $(mkinstalldirs) $(DESTDIR)$(DBUS_DAEMONDIR); \
+ chmod 755 $(DESTDIR)$(DBUS_DAEMONDIR); \
+ fi
+- $(INSTALL_PROGRAM) dbus-daemon $(DESTDIR)$(DBUS_DAEMONDIR)
++ $(INSTALL_PROGRAM) .libs/dbus-daemon $(DESTDIR)$(DBUS_DAEMONDIR)
+ $(mkinstalldirs) $(DESTDIR)$(localstatedir)/run/dbus
+ $(mkinstalldirs) $(DESTDIR)$(configdir)/system.d
+ $(mkinstalldirs) $(DESTDIR)$(datadir)/dbus-1/services
diff --git a/recipes/dbus/dbus-1.2.20/tmpdir.patch b/recipes/dbus/dbus-1.2.20/tmpdir.patch
new file mode 100644
index 0000000000..838b903f0a
--- /dev/null
+++ b/recipes/dbus/dbus-1.2.20/tmpdir.patch
@@ -0,0 +1,30 @@
+--- dbus-0.22/configure.in.orig 2004-08-13 00:57:16.000000000 +0200
++++ dbus-0.22/configure.in 2004-12-30 21:15:57.000000000 +0100
+@@ -1047,15 +1048,18 @@
+ AC_SUBST(ABSOLUTE_TOP_BUILDDIR)
+
+ #### Find socket directories
+-if ! test -z "$TMPDIR" ; then
+- DEFAULT_SOCKET_DIR=$TMPDIR
+-elif ! test -z "$TEMP" ; then
+- DEFAULT_SOCKET_DIR=$TEMP
+-elif ! test -z "$TMP" ; then
+- DEFAULT_SOCKET_DIR=$TMP
+-else
+- DEFAULT_SOCKET_DIR=/tmp
+-fi
++#if ! test -z "$TMPDIR" ; then
++# DEFAULT_SOCKET_DIR=$TMPDIR
++#elif ! test -z "$TEMP" ; then
++# DEFAULT_SOCKET_DIR=$TEMP
++#elif ! test -z "$TMP" ; then
++# DEFAULT_SOCKET_DIR=$TMP
++#else
++# DEFAULT_SOCKET_DIR=/tmp
++#fi
++
++# checks disabled to avoid expanding this at build time
++DEFAULT_SOCKET_DIR=/tmp
+
+ if ! test -z "$with_test_socket_dir" ; then
+ TEST_SOCKET_DIR="$with_test_socket_dir"
diff --git a/recipes/dbus/dbus-1.2.22/0001-Make-the-default-DBus-reply-timeout-configurable.patch b/recipes/dbus/dbus-1.2.22/0001-Make-the-default-DBus-reply-timeout-configurable.patch
new file mode 100644
index 0000000000..a38e3db0de
--- /dev/null
+++ b/recipes/dbus/dbus-1.2.22/0001-Make-the-default-DBus-reply-timeout-configurable.patch
@@ -0,0 +1,78 @@
+From fb546488e93a1638d377b228bbb0d2ab58462168 Mon Sep 17 00:00:00 2001
+From: Daniel Willmann <daniel@totalueberwachung.de>
+Date: Thu, 2 Oct 2008 15:50:17 +0800
+Subject: [PATCH] Make the default DBus reply timeout configurable
+
+This patch adds an option --with-dbus-default-reply-timeout to configure
+that will set the default reply timeout used by libdbus in milliseconds.
+autoconf and autoheader need to be rerun in order to regenerate the
+correct configure and config.h.in files.
+---
+ configure.in | 9 +++++++++
+ dbus/dbus-connection-internal.h | 3 ---
+ dbus/dbus-pending-call.c | 1 +
+ 3 files changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 62ac387..5c912d7 100644
+--- a/configure.in
++++ b/configure.in
+@@ -88,6 +88,7 @@ AC_ARG_WITH(console-auth-dir, AS_HELP_STRING([--with-console-auth-dir=[dirname]]
+ AC_ARG_WITH(console-owner-file, AS_HELP_STRING([--with-console-owner-file=[filename]],[file whose owner determines current console owner]))
+ AC_ARG_WITH(dbus_user, AS_HELP_STRING([--with-dbus-user=<user>],[User for running the DBUS daemon (messagebus)]))
+ AC_ARG_WITH(dbus_daemondir, AS_HELP_STRING([--with-dbus-daemondir=[dirname]],[Directory for installing the DBUS daemon]))
++AC_ARG_WITH(dbus_default_reply_timeout, AS_HELP_STRING([--with-dbus-default-reply-timeout=[milliseconds]],[Default reply timeout for DBus method calls]))
+
+ AC_DEFINE(DBUS_UNIX,1,[dbus on unix])
+
+@@ -986,6 +987,13 @@ if test x$have_libaudit = xyes ; then
+ AC_DEFINE(HAVE_LIBAUDIT,1,[audit daemon SELinux support])
+ fi
+
++if test -z "$with_dbus_default_reply_timeout" ; then
++ DBUS_DEFAULT_REPLY_TIMEOUT=25000
++else
++ DBUS_DEFAULT_REPLY_TIMEOUT=$with_dbus_default_reply_timeout
++fi
++AC_DEFINE_UNQUOTED(_DBUS_DEFAULT_TIMEOUT_VALUE,$DBUS_DEFAULT_REPLY_TIMEOUT,[default timeout value for dbus calls])
++
+ #### Set up final flags
+ DBUS_CLIENT_CFLAGS=
+ DBUS_CLIENT_LIBS="$THREAD_LIBS"
+@@ -1348,6 +1356,7 @@ echo "
+ Gettext libs (empty OK): ${INTLLIBS}
+ Using XML parser: ${with_xml}
+ Init scripts style: ${with_init_scripts}
++ Default reply timeout: ${DBUS_DEFAULT_REPLY_TIMEOUT}
+ Abstract socket names: ${ac_cv_have_abstract_sockets}
+ System bus socket: ${DBUS_SYSTEM_SOCKET}
+ System bus address: ${DBUS_SYSTEM_BUS_DEFAULT_ADDRESS}
+diff --git a/dbus/dbus-connection-internal.h b/dbus/dbus-connection-internal.h
+index df54412..5fe536b 100644
+--- a/dbus/dbus-connection-internal.h
++++ b/dbus/dbus-connection-internal.h
+@@ -41,9 +41,6 @@ typedef enum
+ DBUS_ITERATION_BLOCK = 1 << 2 /**< Block if nothing to do. */
+ } DBusIterationFlags;
+
+-/** default timeout value when waiting for a message reply, 25 seconds */
+-#define _DBUS_DEFAULT_TIMEOUT_VALUE (25 * 1000)
+-
+ void _dbus_connection_lock (DBusConnection *connection);
+ void _dbus_connection_unlock (DBusConnection *connection);
+ DBusConnection * _dbus_connection_ref_unlocked (DBusConnection *connection);
+diff --git a/dbus/dbus-pending-call.c b/dbus/dbus-pending-call.c
+index 51b9378..5a7a5f4 100644
+--- a/dbus/dbus-pending-call.c
++++ b/dbus/dbus-pending-call.c
+@@ -21,6 +21,7 @@
+ *
+ */
+
++#include <config.h>
+ #include "dbus-internals.h"
+ #include "dbus-connection-internal.h"
+ #include "dbus-pending-call-internal.h"
+--
+1.5.6.4
+
diff --git a/recipes/dbus/dbus-1.2.22/dbus-1.init b/recipes/dbus/dbus-1.2.22/dbus-1.init
new file mode 100644
index 0000000000..8209454088
--- /dev/null
+++ b/recipes/dbus/dbus-1.2.22/dbus-1.init
@@ -0,0 +1,111 @@
+#! /bin/sh
+# -*- coding: utf-8 -*-
+# Debian init.d script for D-BUS
+# Copyright © 2003 Colin Walters <walters@debian.org>
+# Copyright 2008 OE Team
+
+set -e
+
+DAEMON=/usr/bin/dbus-daemon
+NAME=dbus
+DAEMONUSER=messagebus
+RUNDIR=/var/run/dbus
+PIDFILE=/var/run/dbus/pid
+UUIDDIR=/var/lib/dbus
+DESC="system message bus"
+EVENTDIR=/etc/dbus-1/event.d
+
+test -x $DAEMON || exit 0
+
+# Source defaults file; edit that file to configure this script.
+ENABLED=1
+PARAMS=""
+if [ -e /etc/default/dbus ]; then
+ . /etc/default/dbus
+fi
+
+test "$ENABLED" != "0" || exit 0
+
+start_it_up()
+{
+ if [ ! -d $RUNDIR ]; then
+ mkdir -p $RUNDIR
+ chown $DAEMONUSER $RUNDIR
+ chgrp $DAEMONUSER $RUNDIR
+ fi
+ if [ -e $PIDFILE ]; then
+ PIDDIR=/proc/$(cat $PIDFILE)
+ if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then
+ echo "$DESC already started; not starting."
+ else
+ echo "Removing stale PID file $PIDFILE."
+ rm -f $PIDFILE
+ fi
+ fi
+
+ if [ ! -d $UUIDDIR ]; then
+ mkdir -p $UUIDDIR
+ chown $DAEMONUSER $UUIDDIR
+ chgrp $DAEMONUSER $UUIDDIR
+ fi
+
+ dbus-uuidgen --ensure
+
+ echo -n "Starting $DESC: "
+ start-stop-daemon --start --pidfile $PIDFILE \
+ --user $DAEMONUSER --exec $DAEMON -- --system $PARAMS
+ echo "$NAME."
+ if [ -d $EVENTDIR ]; then
+ run-parts --arg=start $EVENTDIR
+ fi
+}
+
+shut_it_down()
+{
+ if [ -d $EVENTDIR ]; then
+ # TODO: --reverse when busybox supports it
+ run-parts --arg=stop $EVENTDIR
+ fi
+ echo -n "Stopping $DESC: "
+ start-stop-daemon --stop --oknodo --pidfile $PIDFILE \
+ --user $DAEMONUSER
+ # We no longer include these arguments so that start-stop-daemon
+ # can do its job even given that we may have been upgraded.
+ # We rely on the pidfile being sanely managed
+ # --exec $DAEMON -- --system $PARAMS
+ echo "$NAME."
+ rm -f $PIDFILE
+}
+
+reload_it()
+{
+ echo -n "Reloading $DESC config: "
+ dbus-send --print-reply --system --type=method_call \
+ --dest=org.freedesktop.DBus \
+ / org.freedesktop.DBus.ReloadConfig > /dev/null
+ # hopefully this is enough time for dbus to reload it's config file.
+ echo "done."
+}
+
+case "$1" in
+ start)
+ start_it_up
+ ;;
+ stop)
+ shut_it_down
+ ;;
+ reload|force-reload)
+ reload_it
+ ;;
+ restart)
+ shut_it_down
+ sleep 1
+ start_it_up
+ ;;
+ *)
+ echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/recipes/dbus/dbus-1.2.22/fix-install-daemon.patch b/recipes/dbus/dbus-1.2.22/fix-install-daemon.patch
new file mode 100644
index 0000000000..c31786357d
--- /dev/null
+++ b/recipes/dbus/dbus-1.2.22/fix-install-daemon.patch
@@ -0,0 +1,13 @@
+Index: dbus-0.94/bus/Makefile.am
+===================================================================
+--- dbus-0.94.orig/bus/Makefile.am 2006-10-01 17:36:18.000000000 +0200
++++ dbus-0.94/bus/Makefile.am 2006-10-14 21:40:05.000000000 +0200
+@@ -110,7 +110,7 @@
+ $(mkinstalldirs) $(DESTDIR)$(DBUS_DAEMONDIR); \
+ chmod 755 $(DESTDIR)$(DBUS_DAEMONDIR); \
+ fi
+- $(INSTALL_PROGRAM) dbus-daemon $(DESTDIR)$(DBUS_DAEMONDIR)
++ $(INSTALL_PROGRAM) .libs/dbus-daemon $(DESTDIR)$(DBUS_DAEMONDIR)
+ $(mkinstalldirs) $(DESTDIR)$(localstatedir)/run/dbus
+ $(mkinstalldirs) $(DESTDIR)$(configdir)/system.d
+ $(mkinstalldirs) $(DESTDIR)$(datadir)/dbus-1/services
diff --git a/recipes/dbus/dbus-1.2.22/tmpdir.patch b/recipes/dbus/dbus-1.2.22/tmpdir.patch
new file mode 100644
index 0000000000..838b903f0a
--- /dev/null
+++ b/recipes/dbus/dbus-1.2.22/tmpdir.patch
@@ -0,0 +1,30 @@
+--- dbus-0.22/configure.in.orig 2004-08-13 00:57:16.000000000 +0200
++++ dbus-0.22/configure.in 2004-12-30 21:15:57.000000000 +0100
+@@ -1047,15 +1048,18 @@
+ AC_SUBST(ABSOLUTE_TOP_BUILDDIR)
+
+ #### Find socket directories
+-if ! test -z "$TMPDIR" ; then
+- DEFAULT_SOCKET_DIR=$TMPDIR
+-elif ! test -z "$TEMP" ; then
+- DEFAULT_SOCKET_DIR=$TEMP
+-elif ! test -z "$TMP" ; then
+- DEFAULT_SOCKET_DIR=$TMP
+-else
+- DEFAULT_SOCKET_DIR=/tmp
+-fi
++#if ! test -z "$TMPDIR" ; then
++# DEFAULT_SOCKET_DIR=$TMPDIR
++#elif ! test -z "$TEMP" ; then
++# DEFAULT_SOCKET_DIR=$TEMP
++#elif ! test -z "$TMP" ; then
++# DEFAULT_SOCKET_DIR=$TMP
++#else
++# DEFAULT_SOCKET_DIR=/tmp
++#fi
++
++# checks disabled to avoid expanding this at build time
++DEFAULT_SOCKET_DIR=/tmp
+
+ if ! test -z "$with_test_socket_dir" ; then
+ TEST_SOCKET_DIR="$with_test_socket_dir"
diff --git a/recipes/dbus/dbus-1.3.0/improve-threading-stability.patch b/recipes/dbus/dbus-1.3.0/improve-threading-stability.patch
new file mode 100644
index 0000000000..59de6ef27f
--- /dev/null
+++ b/recipes/dbus/dbus-1.3.0/improve-threading-stability.patch
@@ -0,0 +1,38 @@
+From ae95a0ff9651a774cd983436d7e656c62492659c Mon Sep 17 00:00:00 2001
+From: Michael Meeks <michael.meeks@novell.com>
+Date: Fri, 12 Mar 2010 16:50:27 +0000
+Subject: [DBusConnection] When handling a watch, return if another thread is doing I/O
+
+http://lists.freedesktop.org/archives/dbus/2010-March/012337.html
+
+Previously, the watch handler would block until the I/O path was available.
+However, if another non-main thread was doing a synchronous call, this would
+cause the main thread to block on that thread, a highly undesirable
+thing because it's important for the main thread to remain responsive
+for user interfaces.
+
+Signed-off-by: Colin Walters <walters@verbum.org>
+Signed-off-by: Thiago Macieira <thiago@kde.org>
+---
+diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c
+index 5fb234d..69fdf53 100644
+--- a/dbus/dbus-connection.c
++++ b/dbus/dbus-connection.c
+@@ -1435,7 +1435,14 @@ _dbus_connection_handle_watch (DBusWatch *watch,
+ _dbus_verbose ("%s start\n", _DBUS_FUNCTION_NAME);
+
+ CONNECTION_LOCK (connection);
+- _dbus_connection_acquire_io_path (connection, -1);
++
++ if (!_dbus_connection_acquire_io_path (connection, 1))
++ {
++ /* another thread is handling the message */
++ CONNECTION_UNLOCK (connection);
++ return TRUE;
++ }
++
+ HAVE_LOCK_CHECK (connection);
+ retval = _dbus_transport_handle_watch (connection->transport,
+ watch, condition);
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/dbus/dbus-glib-native_0.74.bb b/recipes/dbus/dbus-glib-native_0.74.bb
index e37a64cfea..1a1463411d 100644
--- a/recipes/dbus/dbus-glib-native_0.74.bb
+++ b/recipes/dbus/dbus-glib-native_0.74.bb
@@ -1,5 +1,5 @@
SECTION = "base"
-PR = "r0"
+PR = "r1"
HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
DESCRIPTION = "Message bus system for applications to talk to one another"
LICENSE = "GPL"
diff --git a/recipes/dbus/dbus-glib-native_0.76.bb b/recipes/dbus/dbus-glib-native_0.76.bb
index d76cc043d4..b50d18ef04 100644
--- a/recipes/dbus/dbus-glib-native_0.76.bb
+++ b/recipes/dbus/dbus-glib-native_0.76.bb
@@ -1,5 +1,5 @@
SECTION = "base"
-PR = "r0"
+PR = "r1"
HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
DESCRIPTION = "message bus system for applications to talk to one another"
LICENSE = "GPL"
diff --git a/recipes/dbus/dbus-glib_0.74.bb b/recipes/dbus/dbus-glib_0.74.bb
index 3c5512feb6..7b9a8289ad 100644
--- a/recipes/dbus/dbus-glib_0.74.bb
+++ b/recipes/dbus/dbus-glib_0.74.bb
@@ -1,5 +1,5 @@
SECTION = "base"
-PR = "r0"
+PR = "r1"
HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
DESCRIPTION = "Message bus system for applications to talk to one another"
LICENSE = "GPL"
diff --git a/recipes/dbus/dbus-glib_0.76.bb b/recipes/dbus/dbus-glib_0.76.bb
index 0a34c738c3..8dd5b836fd 100644
--- a/recipes/dbus/dbus-glib_0.76.bb
+++ b/recipes/dbus/dbus-glib_0.76.bb
@@ -1,5 +1,5 @@
SECTION = "base"
-PR = "r0"
+PR = "r1"
HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
DESCRIPTION = "message bus system for applications to talk to one another"
LICENSE = "GPL"
diff --git a/recipes/dbus/dbus-glib_0.78.bb b/recipes/dbus/dbus-glib_0.78.bb
index 398314bdff..20a27860b9 100644
--- a/recipes/dbus/dbus-glib_0.78.bb
+++ b/recipes/dbus/dbus-glib_0.78.bb
@@ -1,4 +1,5 @@
SECTION = "base"
+PR = "r1"
HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
DESCRIPTION = "message bus system for applications to talk to one another"
LICENSE = "GPL"
diff --git a/recipes/dbus/dbus-glib_0.82.bb b/recipes/dbus/dbus-glib_0.82.bb
index f5790dcd0e..461df61c9e 100644
--- a/recipes/dbus/dbus-glib_0.82.bb
+++ b/recipes/dbus/dbus-glib_0.82.bb
@@ -1,2 +1,2 @@
require dbus-glib.inc
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
diff --git a/recipes/dbus/dbus.inc b/recipes/dbus/dbus.inc
index 0477a27474..2c41eb12c9 100644
--- a/recipes/dbus/dbus.inc
+++ b/recipes/dbus/dbus.inc
@@ -4,10 +4,10 @@ SECTION = "base"
LICENSE = "GPL"
DEPENDS = "expat glib-2.0 virtual/libintl libsm libice virtual/libx11"
-INC_PR = "r17"
+INC_PR = "r18"
SRC_URI = "\
- http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \
+ http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz;name=dbus \
file://cross.patch;patch=1 \
file://tmpdir.patch;patch=1 \
file://fix-install-daemon.patch;patch=1 \
@@ -48,12 +48,6 @@ do_install_append() {
install -m 0755 bus/.libs/dbus-daemon-launch-helper ${D}${libexecdir}/
fi
}
-do_stage() {
- oe_libinstall -so -C dbus libdbus-1 ${STAGING_LIBDIR}
- autotools_stage_includes
- mkdir -p ${STAGING_LIBDIR}/dbus-1.0/include/dbus/
- install -m 0644 dbus/dbus-arch-deps.h ${STAGING_LIBDIR}/dbus-1.0/include/dbus/
-}
RDEPENDS_${PN}-x11 = "${PN}"
RRECOMMENDS_${PN}-lib = "${PN}"
diff --git a/recipes/dbus/dbus_1.2.20.bb b/recipes/dbus/dbus_1.2.20.bb
new file mode 100644
index 0000000000..0e96b74c54
--- /dev/null
+++ b/recipes/dbus/dbus_1.2.20.bb
@@ -0,0 +1,13 @@
+include dbus.inc
+
+SRC_URI = "\
+ http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz;name=dbus \
+ file://tmpdir.patch;patch=1 \
+ file://fix-install-daemon.patch;patch=1 \
+ file://0001-Make-the-default-DBus-reply-timeout-configurable.patch;patch=1 \
+ file://dbus-1.init \
+"
+
+SRC_URI[dbus.md5sum] = "63f4e2412f6599a5e7b10281b9ddc0ac"
+SRC_URI[dbus.sha256sum] = "0ef086d738710384d525130797ee86a0ce2daebffa7dc4d28386503ef7448011"
+
diff --git a/recipes/dbus/dbus_1.2.22.bb b/recipes/dbus/dbus_1.2.22.bb
new file mode 100644
index 0000000000..2e10ddebaf
--- /dev/null
+++ b/recipes/dbus/dbus_1.2.22.bb
@@ -0,0 +1,13 @@
+include dbus.inc
+
+SRC_URI = "\
+ http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz;name=dbus \
+ file://tmpdir.patch;patch=1 \
+ file://fix-install-daemon.patch;patch=1 \
+ file://0001-Make-the-default-DBus-reply-timeout-configurable.patch;patch=1 \
+ file://dbus-1.init \
+"
+
+SRC_URI[dbus.md5sum] = "54c5f3c79a1f852d2256aca07163813c"
+SRC_URI[dbus.sha256sum] = "4cc258b4bc27f4af1233cf100e832c952fd4b7ce8ecb07d291d65ee137a38db7"
+
diff --git a/recipes/dbus/dbus_1.3.0.bb b/recipes/dbus/dbus_1.3.0.bb
index 3abc40a0d4..a06d9dc479 100644
--- a/recipes/dbus/dbus_1.3.0.bb
+++ b/recipes/dbus/dbus_1.3.0.bb
@@ -10,6 +10,7 @@ SRC_URI = "\
file://will-5.patch;patch=1 \
file://will-6.patch;patch=1 \
\
+ file://improve-threading-stability.patch;patch=1 \
file://tmpdir.patch;patch=1 \
file://fix-install-daemon.patch;patch=1 \
file://0001-Make-the-default-DBus-reply-timeout-configurable.patch;patch=1 \
@@ -19,4 +20,4 @@ SRC_URI = "\
# This is the development version of dbus that will lead to 1.4.x
DEFAULT_PREFERENCE = "-1"
-PR = "r1"
+PR = "r2"
diff --git a/recipes/desktop-file-utils/desktop-file-utils_0.16.bb b/recipes/desktop-file-utils/desktop-file-utils_0.16.bb
new file mode 100644
index 0000000000..9492205896
--- /dev/null
+++ b/recipes/desktop-file-utils/desktop-file-utils_0.16.bb
@@ -0,0 +1,15 @@
+SECTION = "console/utils"
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/desktop-file-utils"
+DESCRIPTION = "command line utilities to work with *.desktop files"
+LICENSE = "GPL"
+
+DEPENDS = "glib-2.0"
+
+SRC_URI = "http://www.freedesktop.org/software/desktop-file-utils/releases/desktop-file-utils-${PV}.tar.bz2;name=archive"
+SRC_URI[archive.md5sum] = "6811712bced796d025d1a8a0f728d941"
+SRC_URI[archive.sha256sum] = "7960be4bf7aa4b4698e8ea333cfa0bbfa7a169029e85d6a8b5390f625155c9a3"
+
+inherit autotools
+
+BBCLASSEXTEND = "native"
+NATIVE_INSTALL_WORKS = "1"
diff --git a/recipes/devicekit/devicekit-power_009.bb b/recipes/devicekit/devicekit-power_009.bb
index 0622d4aa7c..02edd168ef 100644
--- a/recipes/devicekit/devicekit-power_009.bb
+++ b/recipes/devicekit/devicekit-power_009.bb
@@ -11,10 +11,6 @@ do_configure_prepend() {
sed -i -e s:-nonet:\:g ${S}/doc/man/Makefile.am
}
-do_stage() {
- autotools_stage_all
-}
-
FILES_${PN} += "${datadir}/dbus-1/ \
${datadir}/PolicyKit \
${base_libdir}/udev/* \
diff --git a/recipes/devicekit/devicekit-power_014.bb b/recipes/devicekit/devicekit-power_014.bb
new file mode 100644
index 0000000000..acdcd9a9ce
--- /dev/null
+++ b/recipes/devicekit/devicekit-power_014.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "Devicekit power"
+LICENSE = "GPLv2"
+DEPENDS = "libusb1 udev glib-2.0 dbus-glib policykit"
+
+SRC_URI = "http://hal.freedesktop.org/releases/DeviceKit-power-${PV}.tar.gz;name=archive"
+SRC_URI[archive.md5sum] = "935d37f1e14b3c8a1d6dabcd9a38d3ca"
+SRC_URI[archive.sha256sum] = "ad3e9a8bd9525d66fadc7fa53ef99e0632aa8cca8fd5bc27483956261153b373"
+
+S = "${WORKDIR}/DeviceKit-power-${PV}"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = " --with-backend=linux"
+
+do_configure_prepend() {
+ sed -i -e s:-nonet:\:g ${S}/doc/man/Makefile.am
+}
+
+FILES_${PN} += "${datadir}/dbus-1/ \
+ ${datadir}/polkit-1/ \
+ ${base_libdir}/udev/* \
+ "
+
+FILES_${PN}-dbg += "${base_libdir}/udev/.debug"
+
+
diff --git a/recipes/devicekit/devicekit_003.bb b/recipes/devicekit/devicekit_003.bb
index 3439290b07..d4dfafb2ce 100644
--- a/recipes/devicekit/devicekit_003.bb
+++ b/recipes/devicekit/devicekit_003.bb
@@ -11,7 +11,5 @@ do_configure_prepend() {
sed -i -e s:-nonet:\:g ${S}/doc/man/Makefile.am
}
-inherit autotools_stage
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
FILES_${PN} += "${datadir}/dbus-1/"
diff --git a/recipes/devmem2/devmem2.bb b/recipes/devmem2/devmem2.bb
index 4888d333b1..6a18173329 100644
--- a/recipes/devmem2/devmem2.bb
+++ b/recipes/devmem2/devmem2.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Simple program to read/write from/to any location in memory."
SRC_URI = "http://www.lartmaker.nl/lartware/port/devmem2.c"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r3"
S = "${WORKDIR}"
diff --git a/recipes/dfu-util/dfu-util_svn.bb b/recipes/dfu-util/dfu-util_svn.bb
index e4d7783a0c..7ac78140b5 100644
--- a/recipes/dfu-util/dfu-util_svn.bb
+++ b/recipes/dfu-util/dfu-util_svn.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "USB Device Firmware Upgrade utility"
SECTION = "devel"
AUTHOR = "Harald Welte <laforge@openmoko.org>"
LICENSE = "GPL"
+SRCREV = "4160"
PV = "0.1+svnr${SRCPV}"
PR = "r2"
diff --git a/recipes/dnsmasq/dnsmasq-dbus_2.52.bb b/recipes/dnsmasq/dnsmasq-dbus_2.52.bb
new file mode 100644
index 0000000000..896952d53b
--- /dev/null
+++ b/recipes/dnsmasq/dnsmasq-dbus_2.52.bb
@@ -0,0 +1,13 @@
+# dnsmasq with support for DBus interface
+
+require dnsmasq_${PV}.bb
+
+S = "${WORKDIR}/dnsmasq-${PV}"
+
+DEPENDS = "dbus"
+EXTRA_OEMAKE = "COPTS=-DHAVE_DBUS"
+
+do_install_append () {
+ install -d ${D}${sysconfdir}/dbus-1/system.d
+ install -m 644 dbus/dnsmasq.conf ${D}${sysconfdir}/dbus-1/system.d/
+}
diff --git a/recipes/dnsmasq/dnsmasq.inc b/recipes/dnsmasq/dnsmasq.inc
index 68c6337306..9f6e3e955b 100644
--- a/recipes/dnsmasq/dnsmasq.inc
+++ b/recipes/dnsmasq/dnsmasq.inc
@@ -3,8 +3,10 @@ HOMEPAGE = "http://www.thekelleys.org.uk/dnsmasq/doc.html"
SECTION = "console/network"
LICENSE = "GPL"
+PR = "r1"
+
#at least versions 2.15 and prior are moved to the archive folder on the server
-SRC_URI = "http://www.thekelleys.org.uk/dnsmasq/${@['archive/', ''][float(bb.data.getVar('PV',d,1).split('.')[1]) > 15]}dnsmasq-${PV}.tar.gz \
+SRC_URI = "http://www.thekelleys.org.uk/dnsmasq/${@['archive/', ''][float(bb.data.getVar('PV',d,1).split('.')[1]) > 15]}dnsmasq-${PV}.tar.gz;name=dnsmasq-${PV} \
file://init \
file://dnsmasq.conf"
diff --git a/recipes/dnsmasq/dnsmasq_2.52.bb b/recipes/dnsmasq/dnsmasq_2.52.bb
new file mode 100644
index 0000000000..f734816f92
--- /dev/null
+++ b/recipes/dnsmasq/dnsmasq_2.52.bb
@@ -0,0 +1,4 @@
+require dnsmasq.inc
+
+SRC_URI[dnsmasq-2.52.md5sum] = "1bb32fffdb4f977ead607802b5d701d0"
+SRC_URI[dnsmasq-2.52.sha256sum] = "a3724f875d0d30c0e2612a32926ad2b6c0a49fff7e224e737689e4c7e8b323d9" \ No newline at end of file
diff --git a/recipes/dnsmasq/files/init b/recipes/dnsmasq/files/init
index d05a5aaf83..6f1fd320da 100644
--- a/recipes/dnsmasq/files/init
+++ b/recipes/dnsmasq/files/init
@@ -20,6 +20,18 @@ case "$1" in
start-stop-daemon -K -x $DAEMON
echo "done."
;;
+ status)
+ echo -n "dnsmasq "
+ start-stop-daemon -q -K -t -x $DAEMON
+ RET=$?
+ if [ "$RET" == "0" ]; then
+ PID=`cat /var/run/dnsmasq.pid`
+ echo "($PID) is running"
+ else
+ echo "is not running"
+ exit $RET
+ fi
+ ;;
restart)
echo "restarting $DESC: $NAME... "
$0 stop
@@ -32,7 +44,7 @@ case "$1" in
echo "done."
;;
*)
- echo "Usage: $0 {start|stop|restart|reload}"
+ echo "Usage: $0 {start|stop|status|restart|reload}"
exit 1
;;
esac
diff --git a/recipes/dosfstools/dosfstools_2.10.bb b/recipes/dosfstools/dosfstools_2.10.bb
index 100044b75d..2b2dc016af 100644
--- a/recipes/dosfstools/dosfstools_2.10.bb
+++ b/recipes/dosfstools/dosfstools_2.10.bb
@@ -6,7 +6,7 @@ DESCRIPTION = "DOS FAT Filesystem Utilities"
SECTION = "base"
PRIORITY = "optional"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r2"
diff --git a/recipes/dosfstools/dosfstools_2.11.bb b/recipes/dosfstools/dosfstools_2.11.bb
index a5f6e034dd..a8ae11cbc1 100644
--- a/recipes/dosfstools/dosfstools_2.11.bb
+++ b/recipes/dosfstools/dosfstools_2.11.bb
@@ -6,7 +6,7 @@ DESCRIPTION = "DOS FAT Filesystem Utilities"
SECTION = "base"
PRIORITY = "optional"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
diff --git a/recipes/dpkg/dpkg-1.14.25/ignore_extra_fields.patch b/recipes/dpkg/dpkg-1.14.29/ignore_extra_fields.patch
index e47af42bc6..e47af42bc6 100644
--- a/recipes/dpkg/dpkg-1.14.25/ignore_extra_fields.patch
+++ b/recipes/dpkg/dpkg-1.14.29/ignore_extra_fields.patch
diff --git a/recipes/dpkg/dpkg-native_1.14.25.bb b/recipes/dpkg/dpkg-native_1.14.25.bb
deleted file mode 100644
index 47c03424be..0000000000
--- a/recipes/dpkg/dpkg-native_1.14.25.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require dpkg-native.inc
-
-PR = "r1"
diff --git a/recipes/dpkg/dpkg-native_1.14.29.bb b/recipes/dpkg/dpkg-native_1.14.29.bb
new file mode 100644
index 0000000000..f04662caa9
--- /dev/null
+++ b/recipes/dpkg/dpkg-native_1.14.29.bb
@@ -0,0 +1,6 @@
+require dpkg-native.inc
+
+SRC_URI[src.md5sum] = "4326172a959b5b6484b4bc126e9f628d"
+SRC_URI[src.sha256sum] = "ea7ec1c861af43ba534a0d7997774a5f1fd4e25a7eea4ff229c9c7bf89aed633"
+
+PR = "r1"
diff --git a/recipes/dpkg/dpkg.inc b/recipes/dpkg/dpkg.inc
index b15a6365b4..f665b4ba15 100644
--- a/recipes/dpkg/dpkg.inc
+++ b/recipes/dpkg/dpkg.inc
@@ -2,7 +2,7 @@ DESCRIPTION = "Package maintenance system for Debian."
LICENSE = "GPL"
SECTION = "base"
-SRC_URI = "${DEBIAN_MIRROR}/main/d/dpkg/dpkg_${PV}.tar.gz \
+SRC_URI = "${DEBIAN_MIRROR}/main/d/dpkg/dpkg_${PV}.tar.gz;name=src \
file://ignore_extra_fields.patch;patch=1 \
file://noupdalt.patch;patch=1"
diff --git a/recipes/dpkg/dpkg_1.14.25.bb b/recipes/dpkg/dpkg_1.14.25.bb
deleted file mode 100644
index 0377ce10f1..0000000000
--- a/recipes/dpkg/dpkg_1.14.25.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require dpkg.inc
-PR = "r1"
-DEPENDS += "zlib bzip2"
-#RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_update-alternatives}"
-SRC_URI += "file://noman.patch;patch=1"
-
-EXTRA_OECONF = "--without-static-progs \
- --without-dselect \
- --with-start-stop-daemon \
- --with-zlib \
- --with-bz2lib \
- --without-sgml-doc"
diff --git a/recipes/dpkg/dpkg_1.14.29.bb b/recipes/dpkg/dpkg_1.14.29.bb
new file mode 100644
index 0000000000..a5016e7ebd
--- /dev/null
+++ b/recipes/dpkg/dpkg_1.14.29.bb
@@ -0,0 +1,14 @@
+require dpkg.inc
+PR = "r1"
+DEPENDS += "zlib bzip2"
+#RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_update-alternatives}"
+SRC_URI += "file://noman.patch;patch=1"
+SRC_URI[src.md5sum] = "4326172a959b5b6484b4bc126e9f628d"
+SRC_URI[src.sha256sum] = "ea7ec1c861af43ba534a0d7997774a5f1fd4e25a7eea4ff229c9c7bf89aed633"
+
+EXTRA_OECONF = "--without-static-progs \
+ --without-dselect \
+ --with-start-stop-daemon \
+ --with-zlib \
+ --with-bz2lib \
+ --without-sgml-doc"
diff --git a/recipes/dri/libdrm_2.4.18.bb b/recipes/dri/libdrm_2.4.18.bb
new file mode 100644
index 0000000000..085a730861
--- /dev/null
+++ b/recipes/dri/libdrm_2.4.18.bb
@@ -0,0 +1,21 @@
+SECTION = "x11/base"
+DEPENDS = "libpthread-stubs"
+LICENSE = "MIT"
+SRC_URI = "http://dri.freedesktop.org/libdrm/libdrm-${PV}.tar.bz2;name=archive"
+PROVIDES = "drm"
+PR = "r0"
+
+SRC_URI[archive.md5sum] = "d2b5fbfd37742af7d2169f7d26ce3007"
+SRC_URI[archive.sha256sum] = "f6c5b44fff5cb602096cc48a1bced426496bc8060463c577a7d86f2e56eeb604"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF_append = " ${@base_contains('MACHINE_FEATURES', 'x86', '', '--disable-intel',d)}"
+
+do_stage() {
+ autotools_stage_all
+}
+
+PACKAGES =+ "${@base_contains('MACHINE_FEATURES', 'x86', '${PN}-intel', '',d)}"
+
+FILES_${PN}-intel = "${libdir}/libdrm_intel.so.*"
diff --git a/recipes/dri/libdrm_git.bb b/recipes/dri/libdrm_git.bb
index 1eabc20067..fe15ded4cc 100644
--- a/recipes/dri/libdrm_git.bb
+++ b/recipes/dri/libdrm_git.bb
@@ -1,21 +1,24 @@
SECTION = "x11/base"
LICENSE = "MIT"
SRC_URI = "git://anongit.freedesktop.org/mesa/drm;protocol=git;branch=master"
-SRC_URI_om-gta02 = "git://git.bitwiz.org.uk/libdrm.git;protocol=git;branch=glamo"
+SRC_URI_shr = "git://git.bitwiz.org.uk/libdrm.git;protocol=git;branch=glamo"
PROVIDES = "drm"
DEPENDS = "libpthread-stubs virtual/kernel"
PE = "1"
-PV = "2.4.15+gitr${SRCREV}"
-PR = "r1"
+PV = "2.4.18+gitr${SRCREV}"
+PR = "r0"
+
+SRCREV_pn-libdrm ?= "a5c8f55397377994ceeb76ed0ff148ff89eb3a1b"
+SRCREV_pn-libdrm_shr ?= "b5aec2bd3df736216e86eae28e278172d3ba3362"
DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_om-gta02 = "1"
+DEFAULT_PREFERENCE_shr = "1"
S = "${WORKDIR}/git"
-EXTRA_OECONF_append_om-gta02 = " --enable-glamo-experimental-api --disable-intel"
+EXTRA_OECONF_append_shr = " --enable-glamo-experimental-api --disable-radeon --disable-intel"
inherit autotools pkgconfig
diff --git a/recipes/dt/dt.inc b/recipes/dt/dt.inc
new file mode 100644
index 0000000000..7e64bc5c8d
--- /dev/null
+++ b/recipes/dt/dt.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "The Data Test Program (dt) is a generic data test program used to verify proper \
+operation of peripherals, file systems, device drivers, or any data stream supported by the \
+operating system."
+SECTION = "console/tests"
+HOMEPAGE = "http://home.comcast.net/~SCSIguy/SCSI_FAQ/RMiller_Tools/dt.html"
+LICENSE = "Public domain"
+INC_PR = "r0"
+
+SRC_URI = "http://home.comcast.net/~SCSIguy/SCSI_FAQ/RMiller_Tools/ftp/dt/dt-source.tar.gz"
+S = "${WORKDIR}/dt.d-WIP"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_compile() {
+ ${MAKE} -f Makefile.linux
+}
diff --git a/recipes/dt/dt_15.14.bb b/recipes/dt/dt_15.14.bb
index 5185af4f15..346b312c73 100644
--- a/recipes/dt/dt_15.14.bb
+++ b/recipes/dt/dt_15.14.bb
@@ -1,16 +1,9 @@
-DESCRIPTION = "The Data Test Program (dt) is a generic data test program used to verify proper \
-operation of peripherals, file systems, device drivers, or any data stream supported by the \
-operating system."
-SECTION = "console/tests"
-HOMEPAGE = "http://home.comcast.net/~SCSIguy/SCSI_FAQ/RMiller_Tools/dt.html"
-LICENSE = "Public domain"
+require dt.inc
-SRC_URI = "http://home.comcast.net/~SCSIguy/SCSI_FAQ/RMiller_Tools/ftp/dt/dt-source.tar.gz"
-S = "${WORKDIR}/${PN}.d-WIP"
+PR = "${INC_PR}.1"
-do_compile() {
- ${MAKE} -f Makefile.linux
-}
+SRC_URI_append_linux-uclibc = " file://no_aio.patch;patch=1 "
+SRC_URI_append_linux-uclibcgnueabi = " file://no_aio.patch;patch=1 "
do_install() {
install -d ${D}${bindir}
diff --git a/recipes/dt/files/no_aio.patch b/recipes/dt/files/no_aio.patch
new file mode 100644
index 0000000000..4b65d89696
--- /dev/null
+++ b/recipes/dt/files/no_aio.patch
@@ -0,0 +1,17 @@
+---
+ Makefile.linux | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: dt.d-WIP/Makefile.linux
+===================================================================
+--- dt.d-WIP/Makefile.linux
++++ dt.d-WIP/Makefile.linux
+@@ -68,7 +68,7 @@ LINTLIBS=
+
+ PORG = -O3
+
+-CFLAGS= $(PORG) -DAIO -DFIFO -DMMAP -DTTY -D__linux__ -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
++CFLAGS= $(PORG) -DFIFO -DMMAP -DTTY -D__linux__ -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
+ CPP= /lib/cpp
+ CPPOPTS= -D__GNUC__ -DFIFO -DMMAP -D__linux__ -D_GNU_SOURCE
+ LDFLAGS=
diff --git a/recipes/e17/cpu_svn.bb b/recipes/e17/cpu_svn.bb
new file mode 100644
index 0000000000..3c0a8c7e71
--- /dev/null
+++ b/recipes/e17/cpu_svn.bb
@@ -0,0 +1,8 @@
+LICENSE = "MIT"
+PV = "0.0.1+svnr${SRCREV}"
+
+require e-module.inc
+
+
+
+
diff --git a/recipes/e17/e-module.inc b/recipes/e17/e-module.inc
index d275b0a267..a620746b32 100644
--- a/recipes/e17/e-module.inc
+++ b/recipes/e17/e-module.inc
@@ -13,4 +13,3 @@ EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
FILES_${PN} += "${libdir}/enlightenment/modules/${PN}"
FILES_${PN}-dbg += "${libdir}/enlightenment/modules/${PN}/*/.debug"
-
diff --git a/recipes/e17/e-wm/illume-flaunch-fix.patch b/recipes/e17/e-wm/illume-flaunch-fix.patch
new file mode 100644
index 0000000000..5aab3b5dc0
--- /dev/null
+++ b/recipes/e17/e-wm/illume-flaunch-fix.patch
@@ -0,0 +1,15 @@
+--- e/src/modules/illume/e_flaunch.c 2010-02-09 22:33:25.000000000 +0100
++++ e/src/modules/illume/e_flaunch.c 2010-02-09 22:33:25.000000000 +0100
+@@ -97,10 +97,10 @@
+ int num = 0, max, count;
+
+ // FIXME: 3 should become config here
+- max = 10;
++ max = 3;
+ // for now just look for any apps in "category" 'Bar' and add the first 3
+ // FIXME: category should be configurable...
+- bar_desktops = efreet_util_desktop_category_list("System");
++ bar_desktops = efreet_util_desktop_category_list("Bar");
+ if (bar_desktops)
+ {
+ Efreet_Desktop *desktop;
diff --git a/recipes/e17/e-wm/illume-keyboard-flow.patch b/recipes/e17/e-wm/illume-keyboard-flow.patch
new file mode 100644
index 0000000000..df5a5e5ff6
--- /dev/null
+++ b/recipes/e17/e-wm/illume-keyboard-flow.patch
@@ -0,0 +1,76 @@
+Index: e/src/modules/illume-keyboard/e_kbd_int.c
+===================================================================
+--- e/src/modules/illume-keyboard/e_kbd_int.c (revision 46510)
++++ e/src/modules/illume-keyboard/e_kbd_int.c (working copy)
+@@ -434,6 +434,16 @@
+ static void
+ _e/src/modules/illume-keyboard/e_kbd_int_stroke_handle(E_Kbd_Int *ki, int dir)
+ {
++ /* If the keyboard direction is RTL switch dir 3 and 1
++ * i.e, make forward backwards and the other way around */
++ if (ki->layout.direction == E_KBD_INT_DIRECTION_RTL)
++ {
++ if (dir == 3)
++ dir = 1;
++ else if (dir == 1)
++ dir = 3;
++ }
++
+ if (dir == 4) // up
+ _e/src/modules/illume-keyboard/e_kbd_int_layout_next(ki);
+ else if (dir == 3) // left
+@@ -886,6 +896,10 @@
+ if (!f) return;
+ ki->layout.directory = ecore_file_dir_get(layout);
+ ki->layout.file = eina_stringshare_add(layout);
++
++ /* Make the default direction LTR */
++ ki->layout.direction = E_KBD_INT_DIRECTION_LTR;
++
+ while (fgets(buf, sizeof(buf), f))
+ {
+ int len;
+@@ -913,6 +927,17 @@
+ sscanf(buf, "%*s %i\n", &(ki->layout.fuzz));
+ continue;
+ }
++ if (!strcmp(str, "direction"))
++ {
++ char direction[4];
++ sscanf(buf, "%*s %3s\n", direction);
++ /* If rtl mark as rtl, otherwise make it ltr */
++ if (!strcmp(direction, "rtl"))
++ ki->layout.direction = E_KBD_INT_DIRECTION_RTL;
++ else
++ ki->layout.direction = E_KBD_INT_DIRECTION_LTR;
++ continue;
++ }
+ if (!strcmp(str, "key"))
+ {
+ ky = calloc(1, sizeof(E_Kbd_Int_Key));
+Index: e/src/modules/illume-keyboard/e_kbd_int.h
+===================================================================
+--- e/src/modules/illume-keyboard/e_kbd_int.h (revision 46510)
++++ e/src/modules/illume-keyboard/e_kbd_int.h (working copy)
+@@ -15,6 +15,13 @@
+ E_KBD_INT_TYPE_PASSWORD = (1 << 6)
+ } E_Kbd_Int_Type;
+
++/* The natural text direction of the keyboard */
++typedef enum _E_kbd_Int_Direction
++{
++ E_KBD_INT_DIRECTION_LTR = (1 << 0),
++ E_KBD_INT_DIRECTION_RTL = (1 << 1)
++} E_Kbd_Int_Direction;
++
+ typedef struct _E_Kbd_Int E_Kbd_Int;
+ typedef struct _E_Kbd_Int_Key E_Kbd_Int_Key;
+ typedef struct _E_Kbd_Int_Key_State E_Kbd_Int_Key_State;
+@@ -35,6 +42,7 @@
+ const char *file;
+ int w, h;
+ int fuzz;
++ int direction;
+ E_Kbd_Int_Type type;
+ Eina_List *keys;
+ E_Kbd_Int_Key *pressed;
diff --git a/recipes/e17/e-wm_svn.bb b/recipes/e17/e-wm_svn.bb
index 602f78e335..f1a5715872 100644
--- a/recipes/e17/e-wm_svn.bb
+++ b/recipes/e17/e-wm_svn.bb
@@ -3,7 +3,7 @@ DEPENDS = "eet evas ecore edje efreet edbus"
LICENSE = "MIT BSD"
SRCNAME = "e"
PV = "0.16.999.060+svnr${SRCPV}"
-PR = "r10"
+PR = "r13"
inherit e update-alternatives
@@ -20,6 +20,8 @@ SRC_URI_append_openmoko = " file://illume-disable-screensaver.patch;patch=1"
SRC_URI_append_shr = " \
file://illume-disable-screensaver.patch;patch=1 \
file://wizard-module-skipping.patch;patch=1 \
+ file://illume-flaunch-fix.patch;patch=1 \
+ file://illume-keyboard-flow.patch;patch=1;maxrev=46549 \
"
EXTRA_OECONF = "\
@@ -34,14 +36,6 @@ do_configure_prepend() {
autopoint
}
-do_stage() {
- autotools_stage_all
- for I in `find ${STAGING_LIBDIR}/enlightenment -name "*.la" -print`; do rm -f $I; done
- for I in `find ${STAGING_LIBDIR}/enlightenment -name "*.a" -print`; do rm -f $I; done
- for I in `find ${STAGING_LIBDIR_CROSS}/enlightenment -name "*.la" -print`; do rm -f $I; done
- for I in `find ${STAGING_LIBDIR_CROSS}/enlightenment -name "*.a" -print`; do rm -f $I; done
-}
-
do_install_append() {
# customising - should rather make this simple upstream
install -m 755 ${WORKDIR}/enlightenment_start.oe ${D}/${bindir}
diff --git a/recipes/e17/edje-viewer_svn.bb b/recipes/e17/edje-viewer_svn.bb
index 257d97a2ae..a572879e13 100644
--- a/recipes/e17/edje-viewer_svn.bb
+++ b/recipes/e17/edje-viewer_svn.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "Edje_Viewer is just that."
-DEPENDS = "etk"
LICENSE = "MIT BSD"
+DEPENDS = "elementary"
PV = "0.0.0+svnr${SRCPV}"
-PR = "r2"
+PR = "r3"
inherit e
diff --git a/recipes/e17/elmdentica_svn.bb b/recipes/e17/elmdentica_svn.bb
index 8549b009f0..c0cf56a7e1 100644
--- a/recipes/e17/elmdentica_svn.bb
+++ b/recipes/e17/elmdentica_svn.bb
@@ -4,12 +4,7 @@ LICENSE = "GPLv3+"
SECTION = "e/apps"
HOMEPAGE = "http://elmdentica.googlecode.com"
AUTHOR = "seabra"
-PV = "0.7.0+svnr${SRCPV}"
-PR = "r1"
-
-
-SRC_URI = "svn://elmdentica.googlecode.com/svn;module=trunk;proto=http"
-
-S = "${WORKDIR}/trunk"
-
-inherit autotools pkgconfig
+
+inherit e
+
+PV = "0.9.0+svnr${SRCPV}"
diff --git a/recipes/e17/emprint_svn.bb b/recipes/e17/emprint_svn.bb
new file mode 100644
index 0000000000..7f63083400
--- /dev/null
+++ b/recipes/e17/emprint_svn.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Emprint is a utility for taking screenshots of the entire screen, a specific window, or a specific region."
+LICENSE = "MIT BSD"
+DEPENDS = "imlib2 virtual/libx11 ecore evas edje eina"
+PV = "0.0.1+svnr${SRCPV}"
+
+inherit e
+
+SRCREV = "${EFL_SRCREV}"
+SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk/;module=emprint;proto=http"
+S = "${WORKDIR}/emprint"
+
+FILES_${PN}-dbg += "${libdir}/${PN}/modules/.debug"
diff --git a/recipes/e17/entrance/rebased_config-db.patch b/recipes/e17/entrance/rebased_config-db.patch
new file mode 100644
index 0000000000..94f98ed123
--- /dev/null
+++ b/recipes/e17/entrance/rebased_config-db.patch
@@ -0,0 +1,116 @@
+Index: entrance/data/config/build_config.sh.in
+===================================================================
+--- entrance.orig/data/config/build_config.sh.in
++++ entrance/data/config/build_config.sh.in
+@@ -1,45 +1,45 @@
+ #!/bin/sh -e
+
+-usage() {
+- cat <<-EOF
+- Usage: $0 [options]
+-
+- Options:
+- -d, --dir Session directory to scan
+- -c, --file Config file (default: $DB)
+- -h, --help This help output :p
+- EOF
+-
+- if [ "$1" = "1" ] ; then
+- echo ""
+- echo "ERROR: $2"
+- fi
+-
+- exit $1
+-}
+-
+-SESSION_DIR=""
++#usage() {
++# cat <<-EOF
++# Usage: $0 [options]
++#
++# Options:
++# -d, --dir Session directory to scan
++# -c, --file Config file (default: $DB)
++# -h, --help This help output :p
++# EOF
++#
++# if [ "$1" = "1" ] ; then
++# echo ""
++# echo "ERROR: $2"
++# fi
++#
++# exit $1
++#}
++#
++#SESSION_DIR=""
+ DB="./entrance_config.cfg"
+
+-while [ -n "$1" ] ; do
+- case $1 in
+- -d) shift; SESSION_DIR=$1;;
+- -c) shift; DB=$1;;
+- -h) usage 0;;
+- *) usage 1 "Unknown option: $1";;
+- esac
+- shift
+-done
+-
+-if [ -z "$DB" ] || [ -d "$DB" ] ; then
+- usage 1 "Invalid DB argument"
+-fi
+-
+-FROM=$SESSION_DIR
+-if [ -z "$FROM" ] ; then
+- FROM="defaults"
+-fi
+-echo "Generating config file '$DB' from '$FROM' ..."
++#while [ -n "$1" ] ; do
++# case $1 in
++# -d) shift; SESSION_DIR=$1;;
++# -c) shift; DB=$1;;
++# -h) usage 0;;
++# *) usage 1 "Unknown option: $1";;
++# esac
++# shift
++#done
++#
++#if [ -z "$DB" ] || [ -d "$DB" ] ; then
++# usage 1 "Invalid DB argument"
++#fi
++#
++#FROM=$SESSION_DIR
++#if [ -z "$FROM" ] ; then
++# FROM="defaults"
++#fi
++#echo "Generating config file '$DB' from '$FROM' ..."
+
+ rm -f $DB || exit 1
+
+@@ -60,9 +60,9 @@ ecore_config -c $DB -k /entrance/time_fo
+ #ecore_config -c $DB -k /entrance/fonts/1/-s -s "/usr/X11R6/lib/X11/fonts/Truetype/"
+ ecore_config -c $DB -k /entrance/greeting/use_default -i 1
+ ecore_config -c $DB -k /entrance/greeting/before -s "Welcome to"
+-ecore_config -c $DB -k /entrance/greeting/after -s ""
++ecore_config -c $DB -k /entrance/greeting/after -s " e17/OE"
+
+-ecore_config -c $DB -k /entrance/session/session -s "default"
++ecore_config -c $DB -k /entrance/session/session -s "/etc/X11/Sessions/Enlightenment"
+ ecore_config -c $DB -k /entrance/session/title -s "Default"
+ ecore_config -c $DB -k /entrance/session/icon -s "default.png"
+ #if [ -z "$SESSION_DIR" ] ; then
+@@ -92,7 +92,7 @@ ecore_config -c $DB -k /entrance/session
+ # done
+ #fi
+ count=0
+-ecore_config -c $DB -k /entrance/session/$count/session -s "failsafe"
++ecore_config -c $DB -k /entrance/session/$count/session -s "/etc/X11/Sessions/Enlightenment"
+ ecore_config -c $DB -k /entrance/session/$count/title -s "Failsafe"
+ ecore_config -c $DB -k /entrance/session/$count/icon -s "failsafe.png"
+ count=`(expr $count + 1)`
+@@ -107,5 +107,5 @@ ecore_config -c $DB -k /entrance/autolog
+ ecore_config -c $DB -k /entrance/presel/mode -i 0
+
+ # for Entranced
+-ecore_config -c $DB -k /entranced/xserver -s "@xbin@/X -quiet -br -nolisten tcp@ENTRANCE_VT_ARG@"
++ecore_config -c $DB -k /entranced/xserver -s "/etc/X11/Xserver"
+ ecore_config -c $DB -k /entranced/attempts -i 5
diff --git a/recipes/e17/entrance_0.9.0.010.bb b/recipes/e17/entrance_0.9.0.010.bb
index f9dd5e49ce..34b6f8a9fa 100644
--- a/recipes/e17/entrance_0.9.0.010.bb
+++ b/recipes/e17/entrance_0.9.0.010.bb
@@ -8,7 +8,7 @@ PR = "r2"
inherit e
SRC_URI += "\
- file://config-db.patch;patch=1 \
+ file://rebased_config-db.patch;patch=1 \
file://allow-missing-xsession.patch;patch=1 \
file://run-Xinit.patch;patch=1 \
file://fix-auth-mode.patch;patch=1 \
@@ -23,6 +23,10 @@ EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc \
FILES_${PN}-dbg += "${libexecdir}/entrance/.debug/*"
+do_configure_prepend() {
+ autopoint
+}
+
do_install_append() {
install -d ${D}/etc/X11/Xsession.d
install -d ${D}/etc/X11/Sessions
diff --git a/recipes/e17/exalt_svn.bb b/recipes/e17/exalt_svn.bb
index d024d758e2..9dc3b03b59 100644
--- a/recipes/e17/exalt_svn.bb
+++ b/recipes/e17/exalt_svn.bb
@@ -25,9 +25,5 @@ do_install_append() {
install -m 0644 org.e.Exalt.service ${D}${datadir}/dbus-1/system-services/
}
-do_stage() {
- autotools_stage_all
-}
-
FILES_${PN} += "${datadir}/dbus-1"
diff --git a/recipes/e17/exhibit_svn.bb b/recipes/e17/exhibit_svn.bb
index 16bd1fbee9..1742ed8fc5 100644
--- a/recipes/e17/exhibit_svn.bb
+++ b/recipes/e17/exhibit_svn.bb
@@ -6,4 +6,4 @@ PR = "r2"
inherit e
-SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk/OLD;module=${SRCNAME};proto=http"
+SRC_URI = "svn://svn.enlightenment.org/svn/e/OLD;module=${SRCNAME};proto=http"
diff --git a/recipes/e17/forecasts_svn.bb b/recipes/e17/forecasts_svn.bb
new file mode 100644
index 0000000000..676945e91f
--- /dev/null
+++ b/recipes/e17/forecasts_svn.bb
@@ -0,0 +1,8 @@
+LICENSE = "MIT"
+PV = "0.2.0+svnr${SRCREV}"
+
+require e-module.inc
+
+
+
+
diff --git a/recipes/e17/places_svn.bb b/recipes/e17/places_svn.bb
index bcaf144ae7..13ef860f77 100644
--- a/recipes/e17/places_svn.bb
+++ b/recipes/e17/places_svn.bb
@@ -10,7 +10,6 @@ SRC_URI += "file://fix-api.diff;patch=1;maxrev=39830;pnum=3"
do_configure_prepend() {
sed -i -e /po/d -e /AM_GNU_GETTEXT/d configure.ac
sed -i -e s:\ po::g Makefile.am
- touch ${S}/config.rpath
}
# Calls /usr/bin/eject for media
diff --git a/recipes/e17/rage_svn.bb b/recipes/e17/rage_svn.bb
index 7a176054f2..3a4ccb0136 100644
--- a/recipes/e17/rage_svn.bb
+++ b/recipes/e17/rage_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Rage is a media center application based on EFL"
AUTHOR = "Carsten 'The Rasterman' Haitzler"
HOMEPAGE = "http://www.rasterman.com"
LICENSE = "MIT BSD"
-DEPENDS = "evas ecore edje"
+DEPENDS = "emotion evas ecore edje"
SECTION = "x11/multimedia"
PV = "0.3.0.042+svnr${SRCPV}"
diff --git a/recipes/e17/screenshot_svn.bb b/recipes/e17/screenshot_svn.bb
new file mode 100644
index 0000000000..dc8acc3f6f
--- /dev/null
+++ b/recipes/e17/screenshot_svn.bb
@@ -0,0 +1,13 @@
+LICENSE = "MIT"
+PV = "0.3.0+svnr${SRCREV}"
+
+require e-module.inc
+
+DEPENDS += "emprint"
+RDEPENDS_${PN} += "emprint"
+
+do_configure_prepend() {
+ sed -i -e 's:AC_MSG_ERROR(emprint not found):echo foo:g' ${S}/configure.ac
+}
+
+
diff --git a/recipes/e17/uptime_svn.bb b/recipes/e17/uptime_svn.bb
new file mode 100644
index 0000000000..42c0d72936
--- /dev/null
+++ b/recipes/e17/uptime_svn.bb
@@ -0,0 +1,8 @@
+LICENSE = "MIT"
+PV = "0.0.2+svnr${SRCREV}"
+
+require e-module.inc
+
+
+
+
diff --git a/recipes/e2fsprogs/e2fsprogs-native_1.38.bb b/recipes/e2fsprogs/e2fsprogs-native_1.38.bb
deleted file mode 100644
index cef0aa41e8..0000000000
--- a/recipes/e2fsprogs/e2fsprogs-native_1.38.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SECTION = "base"
-require e2fsprogs.inc
-inherit native
-
-PR = "r3"
-
-SRC_URI += "file://no-hardlinks.patch;patch=1 \
- file://mkinstalldirs.patch;patch=1 \
- file://file-open-mode.patch;patch=1 \
- "
-
-EXTRA_OECONF = ""
-
-PACKAGES = ""
-DEPENDS = ""
-
-do_stage () {
- oe_runmake install
- install ${S}/lib/et/compile_et ${STAGING_BINDIR_NATIVE}
-}
diff --git a/recipes/e2fsprogs/e2fsprogs-native_1.41.2.bb b/recipes/e2fsprogs/e2fsprogs-native_1.41.2.bb
deleted file mode 100644
index 4ff399b10f..0000000000
--- a/recipes/e2fsprogs/e2fsprogs-native_1.41.2.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SECTION = "base"
-require e2fsprogs.inc
-inherit native
-
-PR = "r2"
-DEFAULT_PREFERENCE = "-1"
-
-EXTRA_OECONF = ""
-
-PACKAGES = ""
-DEPENDS = ""
-
-do_stage () {
- oe_runmake install
- install -d ${STAGING_BINDIR_NATIVE}/
- for b in ${e2miscbins}; do
- install -m 0755 misc/$b ${STAGING_BINDIR_NATIVE}/ || die "failed to install $b"
- done
-}
diff --git a/recipes/e2fsprogs/e2fsprogs-native_1.41.5.bb b/recipes/e2fsprogs/e2fsprogs-native_1.41.5.bb
deleted file mode 100644
index 295136328e..0000000000
--- a/recipes/e2fsprogs/e2fsprogs-native_1.41.5.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SECTION = "base"
-require e2fsprogs.inc
-inherit native
-
-SRC_URI += "file://mkinstalldirs.patch;patch=1"
-
-EXTRA_OECONF = ""
-
-PACKAGES = ""
-DEPENDS = ""
-
-do_stage () {
- autotools_stage_all
- install -d ${STAGING_BINDIR_NATIVE}/
- for b in ${e2miscbins}; do
- install -m 0755 misc/$b ${STAGING_BINDIR_NATIVE}/ || die "failed to install $b"
- done
-}
diff --git a/recipes/e2fsprogs/e2fsprogs-native_1.41.9.bb b/recipes/e2fsprogs/e2fsprogs-native_1.41.9.bb
deleted file mode 100644
index c4a26e2054..0000000000
--- a/recipes/e2fsprogs/e2fsprogs-native_1.41.9.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SECTION = "base"
-require e2fsprogs.inc
-inherit native
-
-EXTRA_OECONF = ""
-
-PACKAGES = ""
-DEPENDS = ""
-
-do_configure() {
- oe_runconf
-}
-
-do_stage () {
- autotools_stage_all
- install -d ${STAGING_BINDIR_NATIVE}/
- for b in ${e2miscbins}; do
- install -m 0755 misc/$b ${STAGING_BINDIR_NATIVE}/ || die "failed to install $b"
- done
-}
diff --git a/recipes/e2fsprogs/e2fsprogs.inc b/recipes/e2fsprogs/e2fsprogs.inc
index 6821d71004..2ff3e10896 100644
--- a/recipes/e2fsprogs/e2fsprogs.inc
+++ b/recipes/e2fsprogs/e2fsprogs.inc
@@ -2,21 +2,137 @@ DESCRIPTION = "EXT2 Filesystem Utilities"
HOMEPAGE = "http://e2fsprogs.sf.net"
LICENSE = "GPL"
SECTION = "base"
+DEPENDS = "gettext-native util-linux-ng"
+DEPENDS_virtclass-native = "gettext-native"
SRC_URI = "${SOURCEFORGE_MIRROR}/e2fsprogs/e2fsprogs-${PV}.tar.gz"
S = "${WORKDIR}/e2fsprogs-${PV}"
+INC_PR = "r21a"
+
inherit autotools
#if uclibc ntpl is merged into trunk we can enable tls for armv4 again
EXTRA_OECONF = "${@['','--disable-tls'][bb.data.getVar('ARM_ABI', d, 1) == 'oabi' and \
bb.data.getVar('TARGET_OS', d, 1).find('uclibc') >= 0 ]} \
- --enable-dynamic-e2fsck --disable-nls --sbindir=${base_sbindir}"
+ --enable-dynamic-e2fsck --disable-nls --sbindir=${base_sbindir} \
+ --disable-libuuid --disable-libblkid --disable-fsck"
PARALLEL_MAKE = ""
-e2miscbins = "mke2fs badblocks tune2fs dumpe2fs blkid logsave e2image fsck \
+do_compile_prepend () {
+ find ./ -print|xargs chmod u=rwX
+ ( cd util; ${BUILD_CC} subst.c -o subst )
+}
+
+e2miscbins = "mke2fs badblocks tune2fs dumpe2fs blkid logsave e2image \
e2undo chattr lsattr uuidgen mklost+found filefrag uuidd e2initrd_helper"
+ext2fsheaders = "ext2_ext_attr.h bitops.h ext2_err.h \
+ ext2_types.h ext2_fs.h ext2_io.h \
+ ext2fs.h"
+e2pheaders = "e2p.h"
+
+do_install_append () {
+ oe_libinstall -a -C lib libe2p ${D}${libdir}/
+ oe_libinstall -a -C lib libext2fs ${D}${libdir}/
+
+ install -d ${D}${includedir}/e2p
+ for h in ${e2pheaders}; do
+ install -m 0644 lib/e2p/$h ${D}${includedir}/e2p/ || die "failed to install $h"
+ done
+
+ install -d ${D}${includedir}/ext2fs
+ for h in ${ext2fsheaders}; do
+ install -m 0644 lib/ext2fs/$h ${D}${includedir}/ext2fs/ || die "failed to install $h"
+ done
+
+ mv ${D}${base_sbindir}/e2fsck ${D}${base_sbindir}/e2fsck.${PN}
+ rm ${D}${base_sbindir}/fsck.ext2
+ rm ${D}${base_sbindir}/fsck.ext3
+ rm ${D}${base_sbindir}/fsck.ext4*
+ mv ${D}${base_sbindir}/mke2fs ${D}${base_sbindir}/mke2fs.${PN}
+ rm ${D}${base_sbindir}/mkfs.ext2
+ rm ${D}${base_sbindir}/mkfs.ext3
+ rm ${D}${base_sbindir}/mkfs.ext4*
+
+ cd ${D}/${base_sbindir}
+ ln -sf ./e2fsck.${PN} fsck.ext2.${PN}
+ ln -sf ./e2fsck.${PN} fsck.ext3.${PN}
+ ln -sf ./e2fsck.${PN} fsck.ext4.${PN}
+ ln -sf ./e2fsck.${PN} fsck.ext4dev.${PN}
+ ln -sf ./mke2fs.${PN} mkfs.ext2.${PN}
+ ln -sf ./mke2fs.${PN} mkfs.ext3.${PN}
+ ln -sf ./mke2fs.${PN} mkfs.ext4.${PN}
+ ln -sf ./mke2fs.${PN} mkfs.ext4dev.${PN}
+
+ ln -sf ./tune2fs findfs
+ ln -sf ./tune2fs e2label
+
+ mv ${D}${bindir}/chattr ${D}${bindir}/chattr.${PN}
+}
+
+pkg_postinst_e2fsprogs () {
+ update-alternatives --install ${base_bindir}/chattr chattr chattr.${PN} 100
+}
+
+pkg_prerm_e2fsprogs () {
+ update-alternatives --remove chattr chattr.${PN}
+}
+
+
+pkg_postinst_e2fsprogs-blkid () {
+ update-alternatives --install ${base_sbindir}/blkid blkid blkid.${PN} 100
+}
+
+pkg_prerm_e2fsprogs-blkid () {
+ update-alternatives --remove blkid blkid.${PN}
+}
+
+pkg_postinst_e2fsprogs-e2fsck () {
+ update-alternatives --install ${base_sbindir}/e2fsck e2fsck e2fsck.${PN} 100
+ update-alternatives --install ${base_sbindir}/fsck.ext2 fsck.ext2 fsck.ext2.${PN} 100
+ update-alternatives --install ${base_sbindir}/fsck.ext3 fsck.ext3 fsck.ext3.${PN} 100
+ update-alternatives --install ${base_sbindir}/fsck.ext4 fsck.ext4 fsck.ext4.${PN} 100
+ update-alternatives --install ${base_sbindir}/fsck.ext4dev fsck.ext4dev fsck.ext4dev.${PN} 100
+}
+
+pkg_prerm_e2fsprogs-e2fsck () {
+ update-alternatives --remove e2fsck e2fsck.${PN}
+ update-alternatives --remove fsck.ext2 fsck.ext2.${PN}
+ update-alternatives --remove fsck.ext3 fsck.ext3.${PN}
+ update-alternatives --remove fsck.ext4 fsck.ext4.${PN}
+ update-alternatives --remove fsck.ext4dev fsck.ext4dev.${PN}
+}
+
+pkg_postinst_e2fsprogs-mke2fs () {
+ update-alternatives --install ${base_sbindir}/mke2fs mke2fs mke2fs.${PN} 100
+ update-alternatives --install ${base_sbindir}/mkfs.ext2 mkfs.ext2 mkfs.ext2.${PN} 100
+ update-alternatives --install ${base_sbindir}/mkfs.ext3 mkfs.ext3 mkfs.ext3.${PN} 100
+ update-alternatives --install ${base_sbindir}/mkfs.ext4 mkfs.ext4 mkfs.ext4.${PN} 100
+ update-alternatives --install ${base_sbindir}/mkfs.ext4dev mkfs.ext4dev mkfs.ext4dev.${PN} 100
+}
+
+pkg_prerm_e2fsprogs-mke2fs () {
+ update-alternatives --remove mke2fs mke2fs.${PN}
+ update-alternatives --remove mkfs.ext2 mkfs.ext2.${PN}
+ update-alternatives --remove mkfs.ext3 mkfs.ext3.${PN}
+ update-alternatives --remove mkfs.ext4 mkfs.ext4.${PN}
+ update-alternatives --remove mkfs.ext4dev mkfs.ext4dev.${PN}
+}
+
+# blkid used to be part of e2fsprogs but is useful outside, add it
+# as an RDEPENDS so that anything relying on it being in e2fsprogs
+# still works
+RDEPENDS_e2fsprogs = "util-linux-ng e2fsprogs-badblocks"
+
+FILES_${PN} += "${libdir}/e2initrd_helper"
+
+PACKAGES =+ "e2fsprogs-e2fsck e2fsprogs-mke2fs e2fsprogs-tune2fs e2fsprogs-badblocks"
+FILES_e2fsprogs-e2fsck = "${base_sbindir}/e2fsck.${PN} ${base_sbindir}/fsck.ext*.${PN}"
+FILES_e2fsprogs-mke2fs = "${base_sbindir}/mke2fs.${PN} ${base_sbindir}/mkfs.ext*.${PN}"
+FILES_e2fsprogs-tune2fs = "${base_sbindir}/tune2fs ${base_sbindir}/e2label ${base_sbindir}/findfs"
+FILES_e2fsprogs-badblocks = "${base_sbindir}/badblocks"
+BBCLASSEXTEND = "native"
diff --git a/recipes/e2fsprogs/e2fsprogs_1.38.bb b/recipes/e2fsprogs/e2fsprogs_1.38.bb
index 8ec469a84a..12fee951ef 100644
--- a/recipes/e2fsprogs/e2fsprogs_1.38.bb
+++ b/recipes/e2fsprogs/e2fsprogs_1.38.bb
@@ -1,6 +1,6 @@
require e2fsprogs.inc
-PR = "r20"
+PR = "${INC_PR}"
SRC_URI += "file://no-hardlinks.patch;patch=1 \
file://mkinstalldirs.patch;patch=1 \
@@ -8,93 +8,3 @@ SRC_URI += "file://no-hardlinks.patch;patch=1 \
"
TARGET_CC_ARCH += "${LDFLAGS}"
-
-do_compile_prepend () {
- find ./ -print|xargs chmod u=rwX
- ( cd util; ${BUILD_CC} subst.c -o subst )
-}
-
-ext2fsheaders = "ext2_ext_attr.h bitops.h ext2_err.h \
- ext2_types.h ext2_fs.h ext2_io.h \
- ext2fs.h"
-e2pheaders = "e2p.h"
-
-do_stage () {
- oe_libinstall -a -C lib libe2p ${STAGING_LIBDIR}/
- oe_libinstall -a -C lib libext2fs ${STAGING_LIBDIR}/
- install -d ${STAGING_INCDIR}/e2p
- for h in ${e2pheaders}; do
- install -m 0644 lib/e2p/$h ${STAGING_INCDIR}/e2p/ || die "failed to install $h"
- done
- install -d ${STAGING_INCDIR}/ext2fs
- for h in ${ext2fsheaders}; do
- install -m 0644 lib/ext2fs/$h ${STAGING_INCDIR}/ext2fs/ || die "failed to install $h"
- done
- autotools_stage_all
-}
-
-# blkid used to be part of e2fsprogs but is useful outside, add it
-# as an RDEPENDS so that anything relying on it being in e2fsprogs
-# still works
-RDEPENDS_e2fsprogs = "e2fsprogs-blkid e2fsprogs-uuidgen e2fsprogs-badblocks"
-
-PACKAGES =+ "e2fsprogs-blkid e2fsprogs-uuidgen e2fsprogs-e2fsck e2fsprogs-mke2fs e2fsprogs-fsck e2fsprogs-tune2fs e2fsprogs-badblocks"
-FILES_e2fsprogs-blkid = "${base_sbindir}/blkid.${PN}"
-FILES_e2fsprogs-uuidgen = "${bindir}/uuidgen"
-FILES_e2fsprogs-fsck = "${base_sbindir}/fsck.${PN}"
-FILES_e2fsprogs-e2fsck = "${base_sbindir}/e2fsck.${PN} ${base_sbindir}/fsck.ext*.${PN}"
-FILES_e2fsprogs-mke2fs = "${base_sbindir}/mke2fs.${PN} ${base_sbindir}/mkfs.ext*.${PN}"
-FILES_e2fsprogs-tune2fs = "${base_sbindir}/tune2fs ${base_sbindir}/e2label ${base_sbindir}/findfs"
-FILES_e2fsprogs-badblocks = "${base_sbindir}/badblocks"
-
-do_install_append () {
- mv ${D}${base_sbindir}/fsck ${D}${base_sbindir}/fsck.${PN}
- mv ${D}${base_sbindir}/blkid ${D}${base_sbindir}/blkid.${PN}
- mv ${D}${base_sbindir}/e2fsck ${D}${base_sbindir}/e2fsck.${PN}
- mv ${D}${base_sbindir}/fsck.ext2 ${D}${base_sbindir}/fsck.ext2.${PN}
- mv ${D}${base_sbindir}/fsck.ext3 ${D}${base_sbindir}/fsck.ext3.${PN}
- mv ${D}${base_sbindir}/mke2fs ${D}${base_sbindir}/mke2fs.${PN}
- mv ${D}${base_sbindir}/mkfs.ext2 ${D}${base_sbindir}/mkfs.ext2.${PN}
- mv ${D}${base_sbindir}/mkfs.ext3 ${D}${base_sbindir}/mkfs.ext3.${PN}
-}
-
-pkg_postinst_e2fsprogs-fsck () {
- update-alternatives --install ${base_sbindir}/fsck fsck fsck.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-fsck () {
- update-alternatives --remove fsck fsck.${PN}
-}
-
-pkg_postinst_e2fsprogs-blkid () {
- update-alternatives --install ${base_sbindir}/blkid blkid blkid.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-blkid () {
- update-alternatives --remove blkid blkid.${PN}
-}
-
-pkg_postinst_e2fsprogs-e2fsck () {
- update-alternatives --install ${base_sbindir}/e2fsck e2fsck e2fsck.${PN} 100
- update-alternatives --install ${base_sbindir}/fsck.ext2 fsck.ext2 fsck.ext2.${PN} 100
- update-alternatives --install ${base_sbindir}/fsck.ext3 fsck.ext3 fsck.ext3.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-e2fsck () {
- update-alternatives --remove e2fsck e2fsck.${PN}
- update-alternatives --remove fsck.ext2 fsck.ext2.${PN}
- update-alternatives --remove fsck.ext3 fsck.ext3.${PN}
-}
-
-pkg_postinst_e2fsprogs-mke2fs () {
- update-alternatives --install ${base_sbindir}/mke2fs mke2fs mke2fs.${PN} 100
- update-alternatives --install ${base_sbindir}/mkfs.ext2 mkfs.ext2 mkfs.ext2.${PN} 100
- update-alternatives --install ${base_sbindir}/mkfs.ext3 mkfs.ext3 mkfs.ext3.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-mke2fs () {
- update-alternatives --remove mke2fs mke2fs.${PN}
- update-alternatives --remove mkfs.ext2 mkfs.ext2.${PN}
- update-alternatives --remove mkfs.ext3 mkfs.ext3.${PN}
-}
-
diff --git a/recipes/e2fsprogs/e2fsprogs_1.41.4.bb b/recipes/e2fsprogs/e2fsprogs_1.41.4.bb
index c2b92323c4..e337dde42b 100644
--- a/recipes/e2fsprogs/e2fsprogs_1.41.4.bb
+++ b/recipes/e2fsprogs/e2fsprogs_1.41.4.bb
@@ -1,96 +1,5 @@
require e2fsprogs.inc
-SRC_URI += "file://mkinstalldirs.patch;patch=1"
-
-DEPENDS += "gettext-native"
-
-PR = "r3"
-
-do_compile_prepend () {
- find ./ -print|xargs chmod u=rwX
- ( cd util; ${BUILD_CC} subst.c -o subst )
-}
-
-ext2fsheaders = "ext2_ext_attr.h bitops.h ext2_err.h \
- ext2_types.h ext2_fs.h ext2_io.h \
- ext2fs.h"
-e2pheaders = "e2p.h"
-
-do_stage () {
- oe_libinstall -a -C lib libe2p ${STAGING_LIBDIR}/
- oe_libinstall -a -C lib libext2fs ${STAGING_LIBDIR}/
- install -d ${STAGING_INCDIR}/e2p
- for h in ${e2pheaders}; do
- install -m 0644 lib/e2p/$h ${STAGING_INCDIR}/e2p/ || die "failed to install $h"
- done
- install -d ${STAGING_INCDIR}/ext2fs
- for h in ${ext2fsheaders}; do
- install -m 0644 lib/ext2fs/$h ${STAGING_INCDIR}/ext2fs/ || die "failed to install $h"
- done
- autotools_stage_all
-}
-
-# blkid used to be part of e2fsprogs but is useful outside, add it
-# as an RDEPENDS so that anything relying on it being in e2fsprogs
-# still works
-RDEPENDS_e2fsprogs = "e2fsprogs-blkid e2fsprogs-uuidgen e2fsprogs-badblocks"
-
-PACKAGES =+ "e2fsprogs-blkid e2fsprogs-uuidgen e2fsprogs-e2fsck e2fsprogs-mke2fs e2fsprogs-fsck e2fsprogs-tune2fs e2fsprogs-badblocks"
-FILES_e2fsprogs-blkid = "${base_sbindir}/blkid.${PN}"
-FILES_e2fsprogs-uuidgen = "${bindir}/uuidgen"
-FILES_e2fsprogs-fsck = "${base_sbindir}/fsck.${PN}"
-FILES_e2fsprogs-e2fsck = "${base_sbindir}/e2fsck.${PN} ${base_sbindir}/fsck.ext*.${PN}"
-FILES_e2fsprogs-mke2fs = "${base_sbindir}/mke2fs.${PN} ${base_sbindir}/mkfs.ext*.${PN}"
-FILES_e2fsprogs-tune2fs = "${base_sbindir}/tune2fs ${base_sbindir}/e2label ${base_sbindir}/findfs"
-FILES_e2fsprogs-badblocks = "${base_sbindir}/badblocks"
-
-do_install_append () {
- mv ${D}${base_sbindir}/fsck ${D}${base_sbindir}/fsck.${PN}
- mv ${D}${base_sbindir}/blkid ${D}${base_sbindir}/blkid.${PN}
- mv ${D}${base_sbindir}/e2fsck ${D}${base_sbindir}/e2fsck.${PN}
- mv ${D}${base_sbindir}/fsck.ext2 ${D}${base_sbindir}/fsck.ext2.${PN}
- mv ${D}${base_sbindir}/fsck.ext3 ${D}${base_sbindir}/fsck.ext3.${PN}
- mv ${D}${base_sbindir}/mke2fs ${D}${base_sbindir}/mke2fs.${PN}
- mv ${D}${base_sbindir}/mkfs.ext2 ${D}${base_sbindir}/mkfs.ext2.${PN}
- mv ${D}${base_sbindir}/mkfs.ext3 ${D}${base_sbindir}/mkfs.ext3.${PN}
-}
+PR = "${INC_PR}"
-pkg_postinst_e2fsprogs-fsck () {
- update-alternatives --install ${base_sbindir}/fsck fsck fsck.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-fsck () {
- update-alternatives --remove fsck fsck.${PN}
-}
-
-pkg_postinst_e2fsprogs-blkid () {
- update-alternatives --install ${base_sbindir}/blkid blkid blkid.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-blkid () {
- update-alternatives --remove blkid blkid.${PN}
-}
-
-pkg_postinst_e2fsprogs-e2fsck () {
- update-alternatives --install ${base_sbindir}/e2fsck e2fsck e2fsck.${PN} 100
- update-alternatives --install ${base_sbindir}/fsck.ext2 fsck.ext2 fsck.ext2.${PN} 100
- update-alternatives --install ${base_sbindir}/fsck.ext3 fsck.ext3 fsck.ext3.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-e2fsck () {
- update-alternatives --remove e2fsck e2fsck.${PN}
- update-alternatives --remove fsck.ext2 fsck.ext2.${PN}
- update-alternatives --remove fsck.ext3 fsck.ext3.${PN}
-}
-
-pkg_postinst_e2fsprogs-mke2fs () {
- update-alternatives --install ${base_sbindir}/mke2fs mke2fs mke2fs.${PN} 100
- update-alternatives --install ${base_sbindir}/mkfs.ext2 mkfs.ext2 mkfs.ext2.${PN} 100
- update-alternatives --install ${base_sbindir}/mkfs.ext3 mkfs.ext3 mkfs.ext3.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-mke2fs () {
- update-alternatives --remove mke2fs mke2fs.${PN}
- update-alternatives --remove mkfs.ext2 mkfs.ext2.${PN}
- update-alternatives --remove mkfs.ext3 mkfs.ext3.${PN}
-}
+SRC_URI += "file://mkinstalldirs.patch;patch=1"
diff --git a/recipes/e2fsprogs/e2fsprogs_1.41.5.bb b/recipes/e2fsprogs/e2fsprogs_1.41.5.bb
index 04b5d1daf5..e337dde42b 100644
--- a/recipes/e2fsprogs/e2fsprogs_1.41.5.bb
+++ b/recipes/e2fsprogs/e2fsprogs_1.41.5.bb
@@ -1,125 +1,5 @@
require e2fsprogs.inc
-PR = "r1"
+PR = "${INC_PR}"
SRC_URI += "file://mkinstalldirs.patch;patch=1"
-
-DEPENDS += "gettext-native"
-
-do_compile_prepend () {
- find ./ -print|xargs chmod u=rwX
- ( cd util; ${BUILD_CC} subst.c -o subst )
-}
-
-ext2fsheaders = "ext2_ext_attr.h bitops.h ext2_err.h \
- ext2_types.h ext2_fs.h ext2_io.h \
- ext2fs.h"
-e2pheaders = "e2p.h"
-
-do_stage () {
- oe_libinstall -a -C lib libe2p ${STAGING_LIBDIR}/
- oe_libinstall -a -C lib libext2fs ${STAGING_LIBDIR}/
- install -d ${STAGING_INCDIR}/e2p
- for h in ${e2pheaders}; do
- install -m 0644 lib/e2p/$h ${STAGING_INCDIR}/e2p/ || die "failed to install $h"
- done
- install -d ${STAGING_INCDIR}/ext2fs
- for h in ${ext2fsheaders}; do
- install -m 0644 lib/ext2fs/$h ${STAGING_INCDIR}/ext2fs/ || die "failed to install $h"
- done
- autotools_stage_all
-}
-
-# blkid used to be part of e2fsprogs but is useful outside, add it
-# as an RDEPENDS so that anything relying on it being in e2fsprogs
-# still works
-RDEPENDS_e2fsprogs = "e2fsprogs-blkid e2fsprogs-uuidgen e2fsprogs-badblocks"
-
-FILES_${PN} += "${libdir}/e2initrd_helper"
-
-PACKAGES =+ "e2fsprogs-blkid e2fsprogs-uuidgen e2fsprogs-e2fsck e2fsprogs-mke2fs e2fsprogs-fsck e2fsprogs-tune2fs e2fsprogs-badblocks"
-FILES_e2fsprogs-blkid = "${base_sbindir}/blkid.${PN}"
-FILES_e2fsprogs-uuidgen = "${bindir}/uuidgen"
-FILES_e2fsprogs-fsck = "${base_sbindir}/fsck.${PN}"
-FILES_e2fsprogs-e2fsck = "${base_sbindir}/e2fsck.${PN} ${base_sbindir}/fsck.ext*.${PN}"
-FILES_e2fsprogs-mke2fs = "${base_sbindir}/mke2fs.${PN} ${base_sbindir}/mkfs.ext*.${PN}"
-FILES_e2fsprogs-tune2fs = "${base_sbindir}/tune2fs ${base_sbindir}/e2label ${base_sbindir}/findfs"
-FILES_e2fsprogs-badblocks = "${base_sbindir}/badblocks"
-
-do_install_append () {
- mv ${D}${base_sbindir}/fsck ${D}${base_sbindir}/fsck.${PN}
- mv ${D}${base_sbindir}/blkid ${D}${base_sbindir}/blkid.${PN}
- mv ${D}${base_sbindir}/e2fsck ${D}${base_sbindir}/e2fsck.${PN}
- rm ${D}${base_sbindir}/fsck.ext2
- rm ${D}${base_sbindir}/fsck.ext3
- rm ${D}${base_sbindir}/fsck.ext4*
- mv ${D}${base_sbindir}/mke2fs ${D}${base_sbindir}/mke2fs.${PN}
- rm ${D}${base_sbindir}/mkfs.ext2
- rm ${D}${base_sbindir}/mkfs.ext3
- rm ${D}${base_sbindir}/mkfs.ext4*
-
- cd ${D}/${base_sbindir}
- ln -sf ./e2fsck.${PN} fsck.ext2.${PN}
- ln -sf ./e2fsck.${PN} fsck.ext3.${PN}
- ln -sf ./e2fsck.${PN} fsck.ext4.${PN}
- ln -sf ./e2fsck.${PN} fsck.ext4dev.${PN}
- ln -sf ./mke2fs.${PN} mkfs.ext2.${PN}
- ln -sf ./mke2fs.${PN} mkfs.ext3.${PN}
- ln -sf ./mke2fs.${PN} mkfs.ext4.${PN}
- ln -sf ./mke2fs.${PN} mkfs.ext4dev.${PN}
-
- ln -sf ./tune2fs findfs
- ln -sf ./tune2fs e2label
-}
-
-pkg_postinst_e2fsprogs () {
- update-alternatives --install ${base_bindir}/chattr chattr chattr.${PN} 100
-}
-
-pkg_postinst_e2fsprogs-fsck () {
- update-alternatives --install ${base_sbindir}/fsck fsck fsck.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-fsck () {
- update-alternatives --remove fsck fsck.${PN}
-}
-
-pkg_postinst_e2fsprogs-blkid () {
- update-alternatives --install ${base_sbindir}/blkid blkid blkid.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-blkid () {
- update-alternatives --remove blkid blkid.${PN}
-}
-
-pkg_postinst_e2fsprogs-e2fsck () {
- update-alternatives --install ${base_sbindir}/e2fsck e2fsck e2fsck.${PN} 100
- update-alternatives --install ${base_sbindir}/fsck.ext2 fsck.ext2 fsck.ext2.${PN} 100
- update-alternatives --install ${base_sbindir}/fsck.ext3 fsck.ext3 fsck.ext3.${PN} 100
- update-alternatives --install ${base_sbindir}/fsck.ext4 fsck.ext4 fsck.ext4.${PN} 100
- update-alternatives --install ${base_sbindir}/fsck.ext4dev fsck.ext4dev fsck.ext4dev.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-e2fsck () {
- update-alternatives --remove e2fsck e2fsck.${PN}
- update-alternatives --remove fsck.ext2 fsck.ext2.${PN}
- update-alternatives --remove fsck.ext3 fsck.ext3.${PN}
- update-alternatives --remove fsck.ext4 fsck.ext4.${PN}
- update-alternatives --remove fsck.ext4dev fsck.ext4dev.${PN}
-}
-
-pkg_postinst_e2fsprogs-mke2fs () {
- update-alternatives --install ${base_sbindir}/mke2fs mke2fs mke2fs.${PN} 100
- update-alternatives --install ${base_sbindir}/mkfs.ext2 mkfs.ext2 mkfs.ext2.${PN} 100
- update-alternatives --install ${base_sbindir}/mkfs.ext3 mkfs.ext3 mkfs.ext3.${PN} 100
- update-alternatives --install ${base_sbindir}/mkfs.ext4 mkfs.ext4 mkfs.ext4.${PN} 100
- update-alternatives --install ${base_sbindir}/mkfs.ext4dev mkfs.ext4dev mkfs.ext4dev.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-mke2fs () {
- update-alternatives --remove mke2fs mke2fs.${PN}
- update-alternatives --remove mkfs.ext2 mkfs.ext2.${PN}
- update-alternatives --remove mkfs.ext3 mkfs.ext3.${PN}
- update-alternatives --remove mkfs.ext4 mkfs.ext4.${PN}
- update-alternatives --remove mkfs.ext4dev mkfs.ext4dev.${PN}
-}
diff --git a/recipes/e2fsprogs/e2fsprogs_1.41.9.bb b/recipes/e2fsprogs/e2fsprogs_1.41.9.bb
index ada93bd9c1..7fbdee6571 100644
--- a/recipes/e2fsprogs/e2fsprogs_1.41.9.bb
+++ b/recipes/e2fsprogs/e2fsprogs_1.41.9.bb
@@ -1,125 +1,7 @@
require e2fsprogs.inc
-DEPENDS += "gettext-native"
+PR = "${INC_PR}"
do_configure() {
oe_runconf
}
-
-do_compile_prepend () {
- find ./ -print|xargs chmod u=rwX
- ( cd util; ${BUILD_CC} subst.c -o subst )
-}
-
-ext2fsheaders = "ext2_ext_attr.h bitops.h ext2_err.h \
- ext2_types.h ext2_fs.h ext2_io.h \
- ext2fs.h"
-e2pheaders = "e2p.h"
-
-do_stage () {
- oe_libinstall -a -C lib libe2p ${STAGING_LIBDIR}/
- oe_libinstall -a -C lib libext2fs ${STAGING_LIBDIR}/
- install -d ${STAGING_INCDIR}/e2p
- for h in ${e2pheaders}; do
- install -m 0644 lib/e2p/$h ${STAGING_INCDIR}/e2p/ || die "failed to install $h"
- done
- install -d ${STAGING_INCDIR}/ext2fs
- for h in ${ext2fsheaders}; do
- install -m 0644 lib/ext2fs/$h ${STAGING_INCDIR}/ext2fs/ || die "failed to install $h"
- done
- autotools_stage_all
-}
-
-# blkid used to be part of e2fsprogs but is useful outside, add it
-# as an RDEPENDS so that anything relying on it being in e2fsprogs
-# still works
-RDEPENDS_e2fsprogs = "e2fsprogs-blkid e2fsprogs-uuidgen e2fsprogs-badblocks"
-
-FILES_${PN} += "${libdir}/e2initrd_helper"
-
-PACKAGES =+ "e2fsprogs-blkid e2fsprogs-uuidgen e2fsprogs-e2fsck e2fsprogs-mke2fs e2fsprogs-fsck e2fsprogs-tune2fs e2fsprogs-badblocks"
-FILES_e2fsprogs-blkid = "${base_sbindir}/blkid.${PN}"
-FILES_e2fsprogs-uuidgen = "${bindir}/uuidgen"
-FILES_e2fsprogs-fsck = "${base_sbindir}/fsck.${PN}"
-FILES_e2fsprogs-e2fsck = "${base_sbindir}/e2fsck.${PN} ${base_sbindir}/fsck.ext*.${PN}"
-FILES_e2fsprogs-mke2fs = "${base_sbindir}/mke2fs.${PN} ${base_sbindir}/mkfs.ext*.${PN}"
-FILES_e2fsprogs-tune2fs = "${base_sbindir}/tune2fs ${base_sbindir}/e2label ${base_sbindir}/findfs"
-FILES_e2fsprogs-badblocks = "${base_sbindir}/badblocks"
-
-do_install_append () {
- mv ${D}${base_sbindir}/fsck ${D}${base_sbindir}/fsck.${PN}
- mv ${D}${base_sbindir}/blkid ${D}${base_sbindir}/blkid.${PN}
- mv ${D}${base_sbindir}/e2fsck ${D}${base_sbindir}/e2fsck.${PN}
- rm ${D}${base_sbindir}/fsck.ext2
- rm ${D}${base_sbindir}/fsck.ext3
- rm ${D}${base_sbindir}/fsck.ext4*
- mv ${D}${base_sbindir}/mke2fs ${D}${base_sbindir}/mke2fs.${PN}
- rm ${D}${base_sbindir}/mkfs.ext2
- rm ${D}${base_sbindir}/mkfs.ext3
- rm ${D}${base_sbindir}/mkfs.ext4*
-
- cd ${D}/${base_sbindir}
- ln -sf ./e2fsck.${PN} fsck.ext2.${PN}
- ln -sf ./e2fsck.${PN} fsck.ext3.${PN}
- ln -sf ./e2fsck.${PN} fsck.ext4.${PN}
- ln -sf ./e2fsck.${PN} fsck.ext4dev.${PN}
- ln -sf ./mke2fs.${PN} mkfs.ext2.${PN}
- ln -sf ./mke2fs.${PN} mkfs.ext3.${PN}
- ln -sf ./mke2fs.${PN} mkfs.ext4.${PN}
- ln -sf ./mke2fs.${PN} mkfs.ext4dev.${PN}
-
- ln -sf ./tune2fs findfs
- ln -sf ./tune2fs e2label
-}
-
-pkg_postinst_e2fsprogs () {
- update-alternatives --install ${base_bindir}/chattr chattr chattr.${PN} 100
-}
-
-pkg_postinst_e2fsprogs-fsck () {
- update-alternatives --install ${base_sbindir}/fsck fsck fsck.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-fsck () {
- update-alternatives --remove fsck fsck.${PN}
-}
-
-pkg_postinst_e2fsprogs-blkid () {
- update-alternatives --install ${base_sbindir}/blkid blkid blkid.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-blkid () {
- update-alternatives --remove blkid blkid.${PN}
-}
-
-pkg_postinst_e2fsprogs-e2fsck () {
- update-alternatives --install ${base_sbindir}/e2fsck e2fsck e2fsck.${PN} 100
- update-alternatives --install ${base_sbindir}/fsck.ext2 fsck.ext2 fsck.ext2.${PN} 100
- update-alternatives --install ${base_sbindir}/fsck.ext3 fsck.ext3 fsck.ext3.${PN} 100
- update-alternatives --install ${base_sbindir}/fsck.ext4 fsck.ext4 fsck.ext4.${PN} 100
- update-alternatives --install ${base_sbindir}/fsck.ext4dev fsck.ext4dev fsck.ext4dev.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-e2fsck () {
- update-alternatives --remove e2fsck e2fsck.${PN}
- update-alternatives --remove fsck.ext2 fsck.ext2.${PN}
- update-alternatives --remove fsck.ext3 fsck.ext3.${PN}
- update-alternatives --remove fsck.ext4 fsck.ext4.${PN}
- update-alternatives --remove fsck.ext4dev fsck.ext4dev.${PN}
-}
-
-pkg_postinst_e2fsprogs-mke2fs () {
- update-alternatives --install ${base_sbindir}/mke2fs mke2fs mke2fs.${PN} 100
- update-alternatives --install ${base_sbindir}/mkfs.ext2 mkfs.ext2 mkfs.ext2.${PN} 100
- update-alternatives --install ${base_sbindir}/mkfs.ext3 mkfs.ext3 mkfs.ext3.${PN} 100
- update-alternatives --install ${base_sbindir}/mkfs.ext4 mkfs.ext4 mkfs.ext4.${PN} 100
- update-alternatives --install ${base_sbindir}/mkfs.ext4dev mkfs.ext4dev mkfs.ext4dev.${PN} 100
-}
-
-pkg_prerm_e2fsprogs-mke2fs () {
- update-alternatives --remove mke2fs mke2fs.${PN}
- update-alternatives --remove mkfs.ext2 mkfs.ext2.${PN}
- update-alternatives --remove mkfs.ext3 mkfs.ext3.${PN}
- update-alternatives --remove mkfs.ext4 mkfs.ext4.${PN}
- update-alternatives --remove mkfs.ext4dev mkfs.ext4dev.${PN}
-}
diff --git a/recipes/efl1/ecore-native_svn.bb b/recipes/efl1/ecore-native_svn.bb
deleted file mode 100644
index 22208b926e..0000000000
--- a/recipes/efl1/ecore-native_svn.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-require ecore.inc
-inherit native
-DEPENDS = "eet-native evas-native"
-PR = "r3"
-
-EXTRA_OECONF = "\
- --enable-ecore-txt \
- --enable-ecore-config \
- --disable-ecore-x-xcb \
- --disable-ecore-x \
- --enable-ecore-job \
- --disable-ecore-directfb \
- --disable-ecore-sdl \
- --enable-ecore-fb \
- --enable-ecore-evas \
- --enable-ecore-evas-fb \
- --disable-ecore-evas-x11-gl \
- --disable-ecore-evas-xrender \
- --disable-ecore-evas-dfb \
- --disable-ecore-evas-sdl \
- --disable-openssl \
- --enable-abstract-sockets \
- --enable-ecore-con \
- --enable-ecore-ipc \
- --enable-ecore-file \
- --enable-inotify \
- --disable-poll \
- --disable-curl \
- --disable-ecore-desktop \
- --disable-ecore-imf \
- --disable-ecore-imf_evas \
-"
diff --git a/recipes/efl1/ecore.inc b/recipes/efl1/ecore.inc
index ef3ba55d55..183f25203a 100644
--- a/recipes/efl1/ecore.inc
+++ b/recipes/efl1/ecore.inc
@@ -1,14 +1,19 @@
DESCRIPTION = "Ecore is the Enlightenment application framework library"
LICENSE = "MIT BSD"
-DEPENDS = "gettext-native virtual/libiconv curl eet evas tslib glib-2.0 \
+DEPENDS = "gettext-native virtual/libiconv tslib curl eet evas glib-2.0 \
libxtst libxcomposite libxinerama libxscrnsaver libxdamage libxrandr libxcursor libxprintutil"
+DEPENDS_virtclass-native = "eet-native evas-native"
# optional
# DEPENDS += "directfb libsdl-x11 openssl virtual/libiconv"
PV = "0.9.9.060+svnr${SRCPV}"
-PR = "r3"
+PR = "r5"
inherit efl
+BBCLASSEXTEND = "native"
+
+SRC_URI += "file://fix-ecore-fb-initialization.patch;patch=1"
+
do_configure_prepend() {
touch ${S}/po/Makefile.in.in || true
sed -i -e 's: po::g' ${S}/Makefile.am
@@ -71,5 +76,3 @@ FILES_${PN}-txt = "${libdir}/libecore_txt*.so.*"
FILES_${PN}-x = "${libdir}/libecore_x*.so.*"
FILES_${PN}-input = "${libdir}/libecore_input*.so.*"
-
-
diff --git a/recipes/efl1/ecore/exit_uclibc.patch b/recipes/efl1/ecore/exit_uclibc.patch
index dea010c116..105aeedcb1 100644
--- a/recipes/efl1/ecore/exit_uclibc.patch
+++ b/recipes/efl1/ecore/exit_uclibc.patch
@@ -1,16 +1,3 @@
-Index: ecore/src/lib/ecore_con/ecore_con_dns.c
-===================================================================
---- ecore.orig/src/lib/ecore_con/ecore_con_dns.c 2009-11-14 00:12:04.279051754 +0100
-+++ ecore/src/lib/ecore_con/ecore_con_dns.c 2009-11-14 00:14:41.685708230 +0100
-@@ -135,7 +135,7 @@
- write(fd[1], "", 1);
- }
- close(fd[1]);
--# ifdef __USE_ISOC99
-+# if defined(__USE_ISOC99) && !defined(__UCLIBC__)
- _Exit(0);
- # else
- _exit(0);
Index: ecore/src/lib/ecore_con/ecore_con_info.c
===================================================================
--- ecore.orig/src/lib/ecore_con/ecore_con_info.c 2009-11-14 00:14:56.056955719 +0100
diff --git a/recipes/efl1/ecore/exit_uclibc_dns.patch b/recipes/efl1/ecore/exit_uclibc_dns.patch
new file mode 100644
index 0000000000..0be2d3d6c0
--- /dev/null
+++ b/recipes/efl1/ecore/exit_uclibc_dns.patch
@@ -0,0 +1,13 @@
+Index: ecore/src/lib/ecore_con/ecore_con_dns.c
+===================================================================
+--- ecore.orig/src/lib/ecore_con/ecore_con_dns.c 2009-11-14 00:12:04.279051754 +0100
++++ ecore/src/lib/ecore_con/ecore_con_dns.c 2009-11-14 00:14:41.685708230 +0100
+@@ -135,7 +135,7 @@
+ write(fd[1], "", 1);
+ }
+ close(fd[1]);
+-# ifdef __USE_ISOC99
++# if defined(__USE_ISOC99) && !defined(__UCLIBC__)
+ _Exit(0);
+ # else
+ _exit(0);
diff --git a/recipes/efl1/ecore/fix-ecore-fb-initialization.patch b/recipes/efl1/ecore/fix-ecore-fb-initialization.patch
new file mode 100644
index 0000000000..2ac61ca63c
--- /dev/null
+++ b/recipes/efl1/ecore/fix-ecore-fb-initialization.patch
@@ -0,0 +1,29 @@
+#
+# The whole ecore-fb init logic is somewhat flawed; with this patch we
+# get at least a working touchscreen w/ tslib again.
+#
+# Signed-off-by: Michael 'Mickey' Lauer <mlauer@vanille-media.de>
+#
+
+Index: ecore/src/lib/ecore_fb/ecore_fb.c
+===================================================================
+--- ecore.orig/src/lib/ecore_fb/ecore_fb.c
++++ ecore/src/lib/ecore_fb/ecore_fb.c
+@@ -46,6 +46,9 @@
+
+ if (!ecore_fb_vt_init())
+ return --_ecore_fb_init_count;
++
++ if (!ecore_fb_ts_init())
++ return --_ecore_fb_init_count;
+
+ ECORE_FB_EVENT_KEY_DOWN = ecore_event_type_new();
+ ECORE_FB_EVENT_KEY_UP = ecore_event_type_new();
+@@ -70,6 +73,7 @@
+ if (--_ecore_fb_init_count != 0)
+ return _ecore_fb_init_count;
+
++ ecore_fb_ts_shutdown();
+ ecore_fb_vt_shutdown();
+
+ return _ecore_fb_init_count;
diff --git a/recipes/efl1/ecore_svn.bb b/recipes/efl1/ecore_svn.bb
index 178e9e95f3..5262c0c91f 100644
--- a/recipes/efl1/ecore_svn.bb
+++ b/recipes/efl1/ecore_svn.bb
@@ -1,9 +1,11 @@
require ecore.inc
-PR = "r7"
+PR = "r9"
-SRC_URI += "file://iconv.patch;patch=1;maxrev=43996 \
- file://exit_uclibc.patch;patch=1 \
- "
+SRC_URI += "\
+ file://iconv.patch;patch=1;maxrev=43996 \
+ file://exit_uclibc_dns.patch;patch=1;maxrev=47076 \
+ file://exit_uclibc.patch;patch=1 \
+"
EXTRA_OECONF = "\
--x-includes=${STAGING_INCDIR}/X11 \
@@ -33,3 +35,13 @@ EXTRA_OECONF = "\
--disable-openssl \
--disable-poll \
"
+
+# List of options which were different in ecore-native,
+# I know it's SCM, but with missing -native.bb is much easier to check here
+#EXTRA_OECONF_virtclass-native = "\
+# --disable-ecore-x \
+# --enable-ecore-evas-fb \
+# --disable-ecore-evas-x11-gl \
+# --disable-curl \
+# --disable-ecore-imf \
+# --disable-ecore-imf_evas \
diff --git a/recipes/efl1/edb_svn.bb b/recipes/efl1/edb_svn.bb
index 06d1cf7ed2..ec642781dd 100644
--- a/recipes/efl1/edb_svn.bb
+++ b/recipes/efl1/edb_svn.bb
@@ -6,4 +6,4 @@ PR = "r1"
inherit efl
-SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk/OLD;module=edb;proto=http"
+SRC_URI = "svn://svn.enlightenment.org/svn/e/OLD;module=edb;proto=http"
diff --git a/recipes/efl1/edje-native_svn.bb b/recipes/efl1/edje-native_svn.bb
index 7b4b79a300..33fe06f41c 100644
--- a/recipes/efl1/edje-native_svn.bb
+++ b/recipes/efl1/edje-native_svn.bb
@@ -1,6 +1,6 @@
require edje_${PV}.bb
inherit native
-PR = "r3"
+PR = "r4"
DEPENDS = "lua5.1-native evas-native ecore-native eet-native embryo-native"
diff --git a/recipes/efl1/edje-sdk_svn.bb b/recipes/efl1/edje-sdk_svn.bb
index 1733380c0b..e91652e16d 100644
--- a/recipes/efl1/edje-sdk_svn.bb
+++ b/recipes/efl1/edje-sdk_svn.bb
@@ -1,7 +1,7 @@
require edje_svn.bb
inherit sdk
-PR = "r3"
+PR = "r4"
SRCNAME = "${@bb.data.getVar('PN', d, 1).replace('-sdk', '')}"
DEPENDS = "evas-native ecore-native eet-native embryo-native"
diff --git a/recipes/efl1/edje_svn.bb b/recipes/efl1/edje_svn.bb
index 433ded5764..e438e1b30b 100644
--- a/recipes/efl1/edje_svn.bb
+++ b/recipes/efl1/edje_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Edje is the Enlightenment graphical design & layout library"
DEPENDS = "lua5.1 eet evas ecore embryo edje-native"
LICENSE = "MIT BSD"
PV = "0.9.92.060+svnr${SRCPV}"
-PR = "r5"
+PR = "r6"
inherit efl
diff --git a/recipes/efl1/efreet_svn.bb b/recipes/efl1/efreet_svn.bb
index 0d0bcdf329..ae442eefd3 100644
--- a/recipes/efl1/efreet_svn.bb
+++ b/recipes/efl1/efreet_svn.bb
@@ -2,10 +2,13 @@ DESCRIPTION = "The Enlightenment freedesktop.org library"
DEPENDS = "ecore"
LICENSE = "MIT BSD"
PV = "0.5.0.060+svnr${SRCPV}"
-PR = "r1"
+PR = "r2"
inherit efl
PACKAGES =+ "${PN}-mime ${PN}-trash"
FILES_${PN}-mime = "${libdir}/libefreet_mime.so.*"
FILES_${PN}-trash = "${libdir}/libefreet_trash.so.*"
+
+# efreet_desktop_cache_create is needed for e-wm start, don't include it in -tests
+FILES_${PN} += "${bindir}/efreet_desktop_cache_create"
diff --git a/recipes/efl1/elementary_svn.bb b/recipes/efl1/elementary_svn.bb
index db75d52160..fc4b451466 100644
--- a/recipes/efl1/elementary_svn.bb
+++ b/recipes/efl1/elementary_svn.bb
@@ -2,36 +2,50 @@ DESCRIPTION = "EFL based widget set for mobile devices"
LICENSE = "LGPL"
DEPENDS = "eet-native efreet evas ecore edje eet edbus"
PV = "0.0.0+svnr${SRCPV}"
-PR = "r7"
+PR = "r8"
inherit efl
-EXTRA_OECONF = " \
- --with-eet-eet=${STAGING_BINDIR_NATIVE}/eet \
- --with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc \
+EXTRA_OECONF = "\
+ --with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc \
+ --with-eet-eet=${STAGING_BINDIR_NATIVE}/eet \
"
SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk/TMP/st;module=elementary;proto=http"
S = "${WORKDIR}/elementary"
-RDEPENDS_${PN} = "elementary-themes"
-RSUGGESTS_${PN} = "elementary-tests"
-
do_compile_append() {
sed -i -e s:${STAGING_DIR_TARGET}::g \
-e s:/${TARGET_SYS}::g \
elementary.pc
}
+PACKAGES =+ "${PN}-configs"
+
+RDEPENDS_${PN} = "\
+ elementary-themes \
+ elementary-configs \
+"
+RSUGGESTS_${PN} = "elementary-tests"
+
FILES_${PN}-themes = "\
${datadir}/elementary/themes \
"
+FILES_${PN}-configs = "\
+ ${datadir}/elementary/config \
+"
+
+FILES_${PN}-dbg += "\
+ ${libdir}/elementary/modules/test_entry/*/.debug \
+"
+
FILES_${PN}-tests = "\
${bindir}/elementary* \
${datadir}/elementary/images \
${datadir}/elementary/objects \
${datadir}/applications/* \
${datadir}/icons/* \
+ ${libdir}/elementary/modules/test_entry/* \
"
diff --git a/recipes/efl1/epdf_svn.bb b/recipes/efl1/epdf_svn.bb
index bc180450a8..be223d2c7a 100644
--- a/recipes/efl1/epdf_svn.bb
+++ b/recipes/efl1/epdf_svn.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "Epdf is the glue between EFL and libpoppler"
LICENSE = "MIT BSD"
-DEPENDS = "poppler evas ecore etk ewl"
+DEPENDS = "poppler evas ecore"
PV = "0.1.0+svnr${SRCPV}"
-PR = "r2"
+PR = "r3"
inherit efl
@@ -12,7 +12,6 @@ SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk/PROTO;module=epdf;proto=http"
# recognize epsilon and doesn't build everything. The next one actually using
# this package is welcome to fix it.
-EXTRA_OECONF = "--enable-etk --enable-ewl"
# add ewl additions
FILES_${PN}-dev += "${libdir}/ewl/tests/*.a ${libdir}/ewl/tests/*.la"
diff --git a/recipes/efl1/epeg_svn.bb b/recipes/efl1/epeg_svn.bb
index dac7284013..3b97262ce7 100644
--- a/recipes/efl1/epeg_svn.bb
+++ b/recipes/efl1/epeg_svn.bb
@@ -6,4 +6,4 @@ PR = "r2"
inherit efl
-SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk/OLD;module=epeg;proto=http"
+SRC_URI = "svn://svn.enlightenment.org/svn/e/OLD;module=epeg;proto=http"
diff --git a/recipes/efl1/epsilon_svn.bb b/recipes/efl1/epsilon_svn.bb
deleted file mode 100644
index b08e7afc1e..0000000000
--- a/recipes/efl1/epsilon_svn.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-DESCRIPTION = "Epsilon is a flexible and powerful image thumbnailing library \
-that is compliant with the freedesktop.org Thumbnail Managing Standard."
-LICENSE = "MIT BSD"
-# can also depend on xine for movie thumbnails
-DEPENDS = "libpng evas ecore edje perl-native"
-PV = "0.3.0.012+svnr${SRCPV}"
-PR = "r4"
-
-inherit efl
-
-SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk/OLD;module=${SRCNAME};proto=http"
-
-# a gstreamer thumbnailer would be nice now that we have emotion using gstreamer as well
-EXTRA_OECONF = "--disable-xine"
-
-# package the thumb daemon seperately
-PACKAGES =+ "${PN}-thumbd"
-FILES_${PN}-thumbd = "${bindir}/epsilon ${bindir}/epsilon_thumbd"
-RRECOMMENDS_${PN} = "${PN}-thumbd"
-
-FILES_${PN}-dev += "${libdir}/${PN}/*/*.a ${libdir}/${PN}/*/*.la"
-FILES_${PN}-dbg += "${libdir}/${PN}/plugins/.debug/*.so"
-
diff --git a/recipes/efl1/esmart_svn.bb b/recipes/efl1/esmart_svn.bb
index 4e938753d9..bdcb6dbb53 100644
--- a/recipes/efl1/esmart_svn.bb
+++ b/recipes/efl1/esmart_svn.bb
@@ -1,11 +1,13 @@
DESCRIPTION = "ESmart is a collection of smart Evas objects"
LICENSE = "MIT BSD"
-DEPENDS = "evas ecore edje imlib2 epsilon libtool"
+DEPENDS = "evas ecore edje imlib2 libtool"
PV = "0.9.0.050+svnr${SRCPV}"
-PR = "r1"
+PR = "r2"
inherit efl
+SRC_URI = "svn://svn.enlightenment.org/svn/e/OLD;module=${PN};proto=http"
+
EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
PACKAGES =+ "${PN}-textentry \
diff --git a/recipes/efl1/etk_svn.bb b/recipes/efl1/etk_svn.bb
deleted file mode 100644
index bb3e4a14c8..0000000000
--- a/recipes/efl1/etk_svn.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-DESCRIPTION = "Etk is an advanced widget toolkit based on the Enlightenment Foundation Libraries."
-DEPENDS = "evas ecore edje"
-LICENSE = "MIT"
-PV = "0.1.0.042+svnr${SRCPV}"
-PR = "r5"
-
-inherit efl
-
-SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk/OLD;module=${SRCNAME};proto=http \
-file://mkinstalldirs"
-
-RRECOMMENDS_${PN} = "\
- etk-engines-software-x11 \
- etk-engines-evas \
- etk-engines-fb \
- etk-engines-x11 \
- etk-engines-software-x11-16 \
-"
-
-do_compile_prepend() {
- touch ${S}/po/etk.pot
- cp ${WORKDIR}/mkinstalldirs ${S}
- sed -i -e 's:@MKINSTALLDIRS@:${S}/mkinstalldirs:g' ${S}/po/Makefile
-}
-
-PACKAGES += "etk-engines-software-x11"
-FILES_${PN}-engines-software-x11 = "${libdir}/etk/engines/ecore_evas_software_x11.so"
-
-PACKAGES =+ "etk-engines-gl-x11"
-FILES_${PN}-engines-gl-x11 = "${libdir}/etk/engines/ecore_evas_gl_x11.so"
-
-PACKAGES =+ "etk-engines-evas"
-FILES_${PN}-engines-evas = "${libdir}/etk/engines/ecore_evas.so"
-
-PACKAGES =+ "etk-engines-fb"
-FILES_${PN}-engines-fb = "${libdir}/etk/engines/ecore_fb.so"
-
-PACKAGES =+ "etk-engines-x11"
-FILES_${PN}-engines-x11 = "${libdir}/etk/engines/ecore_evas_x11.so"
-
-PACKAGES =+ "etk-engines-software-x11-16"
-FILES_${PN}-engines-software-x11-16 = "${libdir}/etk/engines/ecore_evas_software_x11_16.so"
diff --git a/recipes/efl1/evas-native_svn.bb b/recipes/efl1/evas-native_svn.bb
index 0cb192ca9f..a76997626c 100644
--- a/recipes/efl1/evas-native_svn.bb
+++ b/recipes/efl1/evas-native_svn.bb
@@ -1,7 +1,7 @@
require evas.inc
inherit native
DEPENDS = "freetype-native libxext-native libpng-native jpeg-native eet-native eina-native libfribidi-native"
-PR = "r2"
+PR = "r3"
EXTRA_OECONF = "\
--x-includes=${STAGING_INCDIR}/X11 \
@@ -62,57 +62,3 @@ EXTRA_OECONF = "\
--disable-convert-32-rgb-rot-270"
-# evas needs a different oe_libinstall, so copy/paste autotools_stage_all
-do_oldstage() {
- rm -rf ${STAGE_TEMP}
- mkdir -p ${STAGE_TEMP}
- oe_runmake DESTDIR="${STAGE_TEMP}" install
- autotools_stage_dir ${STAGE_TEMP}/${includedir} ${STAGING_INCDIR}
- if [ "${BUILD_SYS}" = "${HOST_SYS}" ]; then
- autotools_stage_dir ${STAGE_TEMP}/${bindir} ${STAGING_DIR_HOST}${layout_bindir}
- autotools_stage_dir ${STAGE_TEMP}/${sbindir} ${STAGING_DIR_HOST}${layout_sbindir}
- autotools_stage_dir ${STAGE_TEMP}/${base_bindir} ${STAGING_DIR_HOST}${layout_base_bindir}
- autotools_stage_dir ${STAGE_TEMP}/${base_sbindir} ${STAGING_DIR_HOST}${layout_base_sbindir}
- autotools_stage_dir ${STAGE_TEMP}/${libexecdir} ${STAGING_DIR_HOST}${layout_libexecdir}
- fi
- if [ -d ${STAGE_TEMP}/${libdir} ]
- then
- olddir=`pwd`
- cd ${STAGE_TEMP}/${libdir}
- las=$(find . -name \*.la -type f)
- cd $olddir
- echo "Found la files: $las"
- if [ -n "$las" ]; then
- # If there are .la files then libtool was used in the
- # build, so install them with magic mangling.
- for i in $las
- do
- dir=$(dirname $i)
- echo "oe_libinstall -C ${STAGE_TEMP}/${libdir}/${dir} -so $(basename $i .la) ${STAGING_LIBDIR}/${dir}"
- oe_libinstall -C ${STAGE_TEMP}/${libdir}/${dir} -so $(basename $i .la) ${STAGING_LIBDIR}/${dir}
- done
- else
- # Otherwise libtool wasn't used, and lib/ can be copied
- # directly.
- echo "cp -fpPR ${STAGE_TEMP}/${libdir}/* ${STAGING_LIBDIR}"
- cp -fpPR ${STAGE_TEMP}/${libdir}/* ${STAGING_LIBDIR}
- fi
-
- fi
- # Ok, this is nasty. pkgconfig.bbclass is usually used to install .pc files,
- # however some packages rely on the presence of .pc files to enable/disable
- # their configurataions in which case we better should not install everything
- # unconditionally, but rather depend on the actual results of make install.
- # The good news though: a) there are not many packages doing this and
- # b) packaged staging will fix that anyways. :M:
- if [ "${AUTOTOOLS_STAGE_PKGCONFIG}" = "1" ]
- then
- echo "cp -f ${STAGE_TEMP}/${libdir}/pkgconfig/*.pc ${STAGING_LIBDIR}/pkgconfig/"
- cp -f ${STAGE_TEMP}/${libdir}/pkgconfig/*.pc ${STAGING_LIBDIR}/pkgconfig/
- fi
- rm -rf ${STAGE_TEMP}/${mandir} || true
- rm -rf ${STAGE_TEMP}/${infodir} || true
- autotools_stage_dir ${STAGE_TEMP}/${datadir} ${STAGING_DATADIR}
- rm -rf ${STAGE_TEMP}
-
-}
diff --git a/recipes/efl1/evas_svn.bb b/recipes/efl1/evas_svn.bb
index d74433e7c6..bdcffa13ca 100644
--- a/recipes/efl1/evas_svn.bb
+++ b/recipes/efl1/evas_svn.bb
@@ -1,5 +1,5 @@
require evas.inc
-PR = "r5"
+PR = "r6"
EVAS_CPU_TWEAKS = ""
EVAS_CPU_TWEAKS_armv7a = "--enable-cpu-neon"
diff --git a/recipes/efl1/ewl_svn.bb b/recipes/efl1/ewl_svn.bb
index 910831ac00..871a43f884 100644
--- a/recipes/efl1/ewl_svn.bb
+++ b/recipes/efl1/ewl_svn.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "The Enlightened Widget Library"
-DEPENDS = "evas ecore edje emotion efreet epsilon"
+DEPENDS = "evas ecore edje emotion efreet"
LICENSE = "MIT BSD"
PV = "0.5.3.050+svnr${SRCPV}"
-PR = "r1"
+PR = "r2"
inherit efl
diff --git a/recipes/efl1/libeflvala_git.bb b/recipes/efl1/libeflvala_git.bb
deleted file mode 100644
index 9040bbd10a..0000000000
--- a/recipes/efl1/libeflvala_git.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "Vala meets the Enlightenment Foundation Libraries"
-AUTHOR = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
-LICENSE = "LGPL"
-SECTION = "devel"
-DEPENDS = "vala-native glib-2.0 dbus dbus-glib eina eet evas ecore edje elementary"
-PV = "0.0.1.0+gitr${SRCREV}"
-PR = "r0"
-
-SRC_URI = "${FREESMARTPHONE_GIT}/libeflvala;protocol=git;branch=master"
-S = "${WORKDIR}/git"
-
-inherit autotools_stage pkgconfig vala
-
-PACKAGES =+ "${PN}-examples"
-FILES_${PN}-examples = "${datadir}/libeflvala ${bindir}/*"
diff --git a/recipes/efl1/libeflvala_svn.bb b/recipes/efl1/libeflvala_svn.bb
new file mode 100644
index 0000000000..8793857df5
--- /dev/null
+++ b/recipes/efl1/libeflvala_svn.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Vala meets the Enlightenment Foundation Libraries"
+AUTHOR = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
+LICENSE = "LGPL"
+SECTION = "devel"
+DEPENDS = "vala-native glib-2.0 dbus dbus-glib eina eet evas ecore edje elementary"
+PV = "0.5.0+svnr${SRCPV}"
+PR = "r0"
+
+SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk/BINDINGS;module=vala;proto=http"
+S = "${WORKDIR}/vala"
+
+inherit autotools_stage pkgconfig vala
+
+PACKAGES =+ "${PN}-examples"
+FILES_${PN}-examples = "${datadir}/libeflvala ${bindir}/*"
diff --git a/recipes/eggdbus/eggdbus_0.6.bb b/recipes/eggdbus/eggdbus_0.6.bb
index 1d8717929b..ff2c5ff747 100644
--- a/recipes/eggdbus/eggdbus_0.6.bb
+++ b/recipes/eggdbus/eggdbus_0.6.bb
@@ -2,9 +2,13 @@ DESCRIPTION = "gobject dbus binding"
HOMEPAGE = "http://cgit.freedesktop.org/~david/eggdbus"
LICENSE = "GPLv2"
-DEPENDS = "dbus glib-2.0"
+DEPENDS = "dbus glib-2.0 dbus-glib eggdbus-native"
+DEPENDS_virtclass-native = "dbus-native glib-2.0-native dbus-glib-native"
-BASE_SRC_URI = "http://cgit.freedesktop.org/~david/${BPN}/snapshot/${BPN}-${PV}.tar.bz2 \
+SRC_URI[eggdbus.md5sum] = "0a111faa54dfba2cf432c2c8e8a76e06"
+SRC_URI[eggdbus.sha256sum] = "3ad26e271c1a879bafcd181e065fe0ed53b542299a773c3188c9edb25b895ed1"
+
+BASE_SRC_URI = "http://cgit.freedesktop.org/~david/${BPN}/snapshot/${BPN}-${PV}.tar.bz2;name=eggdbus \
file://gtk-doc.patch;patch=1 \
"
@@ -20,3 +24,4 @@ EXTRA_OECONF = " --disable-man-pages --disable-gtk-doc-html "
BBCLASSEXTEND = "native"
+PARALLEL_MAKE = ""
diff --git a/recipes/eglibc/eglibc-package.bbclass b/recipes/eglibc/eglibc-package.bbclass
index fcaba47f6e..3dc97b401c 100644
--- a/recipes/eglibc/eglibc-package.bbclass
+++ b/recipes/eglibc/eglibc-package.bbclass
@@ -6,6 +6,8 @@
# See the note in gcc/gcc_3.4.0.oe
#
+inherit qemu
+
python __anonymous () {
import bb, re
uc_os = (re.match('.*uclibc*', bb.data.getVar('TARGET_OS', d, 1)) != None)
@@ -29,11 +31,12 @@ BINARY_LOCALE_ARCHES ?= "arm.* i[3-6]86 x86_64 powerpc"
# Set this to zero if you don't want ldconfig in the output package
USE_LDCONFIG ?= "1"
-PACKAGES = "eglibc-dbg eglibc catchsegv sln nscd ldd localedef eglibc-utils eglibc-dev eglibc-doc eglibc-locale libsegfault eglibc-extra-nss eglibc-thread-db eglibc-pcprofile"
+PACKAGES = "eglibc-dbg eglibc catchsegv sln nscd ldd localedef eglibc-utils eglibc-pic eglibc-dev eglibc-doc eglibc-locale libcidn libmemusage libsegfault eglibc-extra-nss eglibc-thread-db eglibc-pcprofile"
PACKAGES_DYNAMIC = "glibc-gconv-* glibc-charmap-* glibc-localedata-* glibc-binary-localedata-* eglibc-gconv-* eglibc-charmap-* eglibc-localedata-* eglibc-binary-localedata-* locale-base-*"
RPROVIDES_eglibc = "glibc"
RPROVIDES_eglibc-utils = "glibc-utils"
+RPROVIDES_eglibc-pic = "glibc-pic"
RPROVIDES_eglibc-dev = "glibc-dev"
RPROVIDES_eglibc-doc = "glibc-doc"
RPROVIDES_eglibc-locale = "glibc-locale"
@@ -46,9 +49,13 @@ libc_baselibs = "${base_libdir}/libcrypt*.so.* ${base_libdir}/libcrypt-*.so ${ba
FILES_${PN} = "${libc_baselibs} ${libexecdir}/* ${@base_conditional('USE_LDCONFIG', '1', '${base_sbindir}/ldconfig', '', d)}"
FILES_ldd = "${bindir}/ldd"
FILES_libsegfault = "${base_libdir}/libSegFault*"
+FILES_libcidn = "${base_libdir}/libcidn*.so"
+FILES_libmemusage = "${base_libdir}/libmemusage.so"
FILES_eglibc-extra-nss = "${base_libdir}/libnss*"
FILES_sln = "/sbin/sln"
-FILES_eglibc-dev_append = " ${libdir}/*.o ${bindir}/rpcgen ${libdir}/libc_nonshared.a"
+FILES_eglibc-pic = "${libdir}/*_pic.a ${libdir}/*_pic.map ${libdir}/libc_pic/"
+FILES_eglibc-dev_append += "${bindir}/rpcgen ${libdir}/*.a \
+ ${base_libdir}/*.a ${base_libdir}/*.o ${datadir}/aclocal"
FILES_nscd = "${sbindir}/nscd*"
FILES_eglibc-utils = "${bindir}/* ${sbindir}/*"
FILES_eglibc-gconv = "${libdir}/gconv/*"
@@ -76,6 +83,10 @@ EXTRA_OECONF += "${@get_eglibc_fpu_setting(bb, d)}"
OVERRIDES_append = ":${TARGET_ARCH}-${TARGET_OS}"
+do_configure_prepend() {
+ sed -e "s#@BASH@#/bin/sh#" -i ${S}/elf/ldd.bash.in
+}
+
do_install() {
oe_runmake install_root=${D} install
for r in ${rpcsvc}; do
@@ -287,16 +298,10 @@ python package_do_split_gconvs () {
bb.data.setVar('pkg_postrm_%s' % pkgname, bb.data.getVar('locale_base_postrm', d, 1) % (locale, encoding, locale), d)
def output_locale_binary(name, locale, encoding):
- target_arch = bb.data.getVar("TARGET_ARCH", d, 1)
- if target_arch in ("i486", "i586", "i686"):
- target_arch = "i386"
- elif target_arch == "powerpc":
- target_arch = "ppc"
+ qemu = qemu_target_binary(d) + " -s 1048576"
kernel_ver = bb.data.getVar("OLDEST_KERNEL", d, 1)
- if kernel_ver is None:
- qemu = "qemu-%s -s 1048576" % target_arch
- else:
- qemu = "qemu-%s -s 1048576 -r %s" % (target_arch, kernel_ver)
+ if kernel_ver:
+ qemu += " -r %s" % (kernel_ver)
pkgname = 'locale-base-' + legitimize_package_name(name)
m = re.match("(.*)\.(.*)", name)
if m:
diff --git a/recipes/eglibc/eglibc.inc b/recipes/eglibc/eglibc.inc
index 356b838adb..5c06ae6160 100644
--- a/recipes/eglibc/eglibc.inc
+++ b/recipes/eglibc/eglibc.inc
@@ -3,7 +3,7 @@ HOMEPAGE = "http://www.eglibc.org/home"
SECTION = "libs"
PRIORITY = "required"
LICENSE = "LGPL"
-INC_PR = "r8"
+INC_PR = "r9"
# nptl needs unwind support in gcc, which can't be built without glibc.
DEPENDS = "virtual/${TARGET_PREFIX}gcc-intermediate linux-libc-headers"
#this leads to circular deps, so lets not add it yet
diff --git a/recipes/eglibc/eglibc_2.10.bb b/recipes/eglibc/eglibc_2.10.bb
index 3907b095ff..c0098ee4d4 100644
--- a/recipes/eglibc/eglibc_2.10.bb
+++ b/recipes/eglibc/eglibc_2.10.bb
@@ -3,7 +3,7 @@ require eglibc.inc
DEPENDS += "gperf-native"
FILESPATHPKG =. "eglibc-svn:"
PV = "2.10"
-PR = "${INC_PR}.6"
+PR = "${INC_PR}.7"
SVN_REV="9381"
EGLIBC_BRANCH="eglibc-2_10"
SRC_URI = "svn://svn.eglibc.org/branches;module=${EGLIBC_BRANCH};rev=${SVN_REV};proto=svn \
diff --git a/recipes/eglibc/eglibc_2.11.bb b/recipes/eglibc/eglibc_2.11.bb
index 3c7fd04e18..6ab1053dc7 100644
--- a/recipes/eglibc/eglibc_2.11.bb
+++ b/recipes/eglibc/eglibc_2.11.bb
@@ -4,8 +4,8 @@ DEFAULT_PREFERENCE = "-1"
DEPENDS += "gperf-native"
FILESPATHPKG =. "eglibc-svn:"
PV = "2.11"
-PR = "${INC_PR}.1"
-SVN_REV="9497"
+PR = "${INC_PR}.2"
+SVN_REV="9738"
EGLIBC_BRANCH="eglibc-2_11"
SRC_URI = "svn://svn.eglibc.org/branches;module=${EGLIBC_BRANCH};rev=${SVN_REV};proto=svn \
file://eglibc-svn-arm-lowlevellock-include-tls.patch;patch=1 \
diff --git a/recipes/eglibc/eglibc_2.9.bb b/recipes/eglibc/eglibc_2.9.bb
index 792ca83726..13f67e6dc2 100644
--- a/recipes/eglibc/eglibc_2.9.bb
+++ b/recipes/eglibc/eglibc_2.9.bb
@@ -3,7 +3,7 @@ require eglibc.inc
DEPENDS += "gperf-native"
FILESPATHPKG =. "eglibc-svn:"
PV = "2.9"
-PR = "${INC_PR}.6"
+PR = "${INC_PR}.7"
SVN_REV="8690"
EGLIBC_BRANCH="eglibc-2_9"
SRC_URI = "svn://svn.eglibc.org/branches;module=${EGLIBC_BRANCH};rev=${SVN_REV};proto=svn \
diff --git a/recipes/eglibc/eglibc_svn.bb b/recipes/eglibc/eglibc_svn.bb
index c2e0534974..313dca9f95 100644
--- a/recipes/eglibc/eglibc_svn.bb
+++ b/recipes/eglibc/eglibc_svn.bb
@@ -1,11 +1,11 @@
require eglibc.inc
DEPENDS += "gperf-native"
-SRCREV = "9570"
+SRCREV = "9803"
DEFAULT_PREFERENCE = "-1"
FILESPATHPKG =. "eglibc-svn:"
PV = "2.11+svnr${SRCPV}"
-PR = "${INC_PR}.3"
+PR = "${INC_PR}.4"
EGLIBC_BRANCH="trunk"
SRC_URI = "svn://svn.eglibc.org;module=${EGLIBC_BRANCH} \
file://eglibc-svn-arm-lowlevellock-include-tls.patch;patch=1 \
diff --git a/recipes/ekiga/ekiga/rgb16.patch b/recipes/ekiga/ekiga/rgb16.patch
new file mode 100644
index 0000000000..b9c9ab284a
--- /dev/null
+++ b/recipes/ekiga/ekiga/rgb16.patch
@@ -0,0 +1,51 @@
+From: Ying-Chun Liu (PaulLiu) <paulliu@debian.org>
+Subject: Add RGB16 support
+Last-Update: 2010-02-26
+Index: ekiga-3.2.6/lib/gui/xwindow.cpp
+===================================================================
+--- ekiga-3.2.6.orig/lib/gui/xwindow.cpp 2010-02-26 07:53:47.000000000 -0500
++++ ekiga-3.2.6/lib/gui/xwindow.cpp 2010-02-26 07:57:32.000000000 -0500
+@@ -82,6 +82,7 @@
+ {"RGBA", 1, 0, LSBFirst, 0x000000FF, 0x0000FF00, 0x00FF0000}, //RGBA *
+ {"BGR32", 1, 4, MSBFirst, 0x0000FF00, 0x00FF0000, 0xFF000000}, //BGRA
+ {"BGRA", 1, 0, LSBFirst, 0x00FF0000, 0x0000FF00, 0x000000FF}, //BGRA *
++ {"RGB16", 16, 2, LSBFirst, 0x0000F800, 0x000007E0, 0x0000001F}, //RGB16
+ {NULL, 0, 0, 0, 0, 0, 0}
+ };
+
+@@ -1021,6 +1022,17 @@
+ }
+ }
+ }
++ else if (xwattributes.depth == 16) {
++ _depth = 16;
++ if (!XMatchVisualInfo (_display, DefaultScreen (_display), _depth, TrueColor, &_XVInfo)) {
++ PTRACE(4, "X11\tCould not find visual with colordepth of " << _depth << " bits per pixel");
++ _depth = 24;
++ if (!XMatchVisualInfo (_display, DefaultScreen (_display), _depth, TrueColor, &_XVInfo)) {
++ PTRACE(1, "X11\tCould neither find visual with colordepth of 16 bits per pixel nor with 24 bits per pixel");
++ return false;
++ }
++ }
++ }
+ else {
+ _depth = 24;
+ if (!XMatchVisualInfo (_display, DefaultScreen (_display), _depth, TrueColor, &_XVInfo)) {
+Index: ekiga-3.2.6/lib/pixops/pixops.c
+===================================================================
+--- ekiga-3.2.6.orig/lib/pixops/pixops.c 2010-02-26 07:58:06.000000000 -0500
++++ ekiga-3.2.6/lib/pixops/pixops.c 2010-02-26 07:59:22.000000000 -0500
+@@ -157,6 +157,13 @@
+ INNER_LOOP(4, 4, p32=(guint32*)dest;*p32=*((guint32*)p));
+ }
+ }
++ else if (src_channels == 2)
++ {
++ if (dest_channels == 2)
++ {
++ INNER_LOOP (2, 2, dest[0]=p[0];dest[1]=p[1]);
++ }
++ }
+ }
+ }
+
diff --git a/recipes/ekiga/ekiga_git.bb b/recipes/ekiga/ekiga_git.bb
index c5ec7cd83c..91e73d26ff 100644
--- a/recipes/ekiga/ekiga_git.bb
+++ b/recipes/ekiga/ekiga_git.bb
@@ -4,19 +4,30 @@ LICENSE = "GPLv2"
ARM_INSTRUCTION_SET = "arm"
DEFAULT_PREFERENCE = "1"
-PV = "3.2.6+git"
-PR = "r2+gitr${SRCREV}"
-SRCREV = "4af42b2f4fd8e6b52c2c578bb4a5d5ad9c26e8f2"
+PV = "3.3.1+git"
+PR = "r3+gitr${SRCREV}"
+SRCREV = "c81cabbee7901b6643907d08f9a530308044ec22"
inherit gnome
-SRC_URI = "git://git.gnome.org/ekiga;protocol=git;branch=gnome-2-26"
+SRC_URI = "git://git.gnome.org/ekiga;protocol=git;branch=master \
+ file://rgb16.patch;patch=1 \
+"
+
S = "${WORKDIR}/git"
-DEPENDS += " avahi libnotify eds-dbus libgnome gtkmm libsigc++-2.0 gstreamer gst-plugins-good gst-plugins-base gst-plugins-bad opal ptlib gnome-doc-utils"
+DEPENDS += " boost avahi libnotify eds-dbus libgnome gtkmm libsigc++-2.0 gstreamer gst-plugins-good gst-plugins-base gst-plugins-bad opal ptlib gnome-doc-utils"
RDEPENDS += "gst-plugin-app gst-plugin-video4linux2 opal ptlib"
-EXTRA_OECONF = "--enable-static-libs --disable-ldap --disable-gnome --enable-gstreamer --disable-gdu --disable-scrollkeeper "
+EXTRA_OECONF = " \
+# --enable-static-libs \
+ --disable-ldap \
+ --disable-gnome \
+ --enable-gstreamer \
+ --disable-gdu \
+ --disable-scrollkeeper \
+ --with-boost-signals=boost_signals-mt \
+"
do_configure_prepend() {
touch gnome-doc-utils.make
@@ -27,5 +38,6 @@ do_configure_append() {
find ${S} -name Makefile | xargs sed -i s:'-I/usr/include':'-I${STAGING_INCDIR}':g
}
+FILES_${PN}-dbg += "${libdir}/ekiga/*/plugins/.debug ${libdir}/ekiga/*/.debug"
FILES_${PN} += "${datadir}/dbus-1 ${datadir}/icons"
diff --git a/recipes/ekiga/opal_3.8.0.bb b/recipes/ekiga/opal_3.8.0.bb
new file mode 100644
index 0000000000..371d6aedad
--- /dev/null
+++ b/recipes/ekiga/opal_3.8.0.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Open Phone Abstraction Library, implementation of the ITU H.323 teleconferencing protocol, and successor of the openh323 library."
+LICENSE = "MPL"
+
+inherit gnome
+
+DEPENDS += " ffmpeg ptlib virtual/libsdl openldap"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opalvoip/opal-${PV}.tar.bz2;name=opal \
+ "
+SRC_URI[opal.md5sum] = "6fd24f0250974a234c5a3d239fc95d21"
+SRC_URI[opal.sha256sum] = "80af07c69c7ec0402c1360ab03818ffe7629d1ef80e7dbb8cf66d40e0c95c365"
+
+EXTRA_OECONF = "--enable-localgsm --disable-spandsp "
+ARM_INSTRUCTION_SET = "arm"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_configure() {
+ libtoolize --force
+ gnu-configize
+ oe_runconf
+}
+
+FILES_${PN} += "${libdir}/opal-${PV}/*/*.so ${libdir}/opal-${PV}/*/*/*.so"
+FILES_${PN}-dbg += "${libdir}/opal-${PV}/*/.debug ${libdir}/opal-${PV}/*/*/.debug"
diff --git a/recipes/ekiga/ptlib/rgb16.patch b/recipes/ekiga/ptlib/rgb16.patch
new file mode 100644
index 0000000000..f908337e3f
--- /dev/null
+++ b/recipes/ekiga/ptlib/rgb16.patch
@@ -0,0 +1,142 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 10_RGB565.patch.dpatch by Ying-Chun Liu (PaulLiu) <paulliu@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Add support of bpp 16 mode
+
+@DPATCH@
+diff -urNad ptlib-2.6.5~/src/ptlib/common/vconvert.cxx ptlib-2.6.5/src/ptlib/common/vconvert.cxx
+--- ptlib-2.6.5~/src/ptlib/common/vconvert.cxx 2010-02-26 03:25:23.000000000 -0500
++++ ptlib-2.6.5/src/ptlib/common/vconvert.cxx 2010-02-26 03:54:32.000000000 -0500
+@@ -135,6 +135,11 @@
+ unsigned redOffset,
+ unsigned blueOffset
+ ) const;
++ PBoolean YUV420PtoRGB565(
++ const BYTE * yuv,
++ BYTE * rgb,
++ PINDEX * bytesReturned
++ ) const;
+ PBoolean SwapRedAndBlue(
+ const BYTE * src,
+ BYTE * dst,
+@@ -1657,6 +1662,92 @@
+ return PTrue;
+ }
+
++PBoolean PStandardColourConverter::YUV420PtoRGB565(const BYTE * srcFrameBuffer,
++ BYTE * dstFrameBuffer,
++ PINDEX * bytesReturned) const
++{
++ if (srcFrameBuffer == dstFrameBuffer)
++ return PFalse; // Cannot do in-place conversion
++ static const unsigned rgbIncrement = 2;
++
++ unsigned height = PMIN(srcFrameHeight, dstFrameHeight)&(UINT_MAX-1); // Must be even
++ unsigned width = PMIN(srcFrameWidth, dstFrameWidth)&(UINT_MAX-1);
++
++ unsigned yplanesize = srcFrameWidth*srcFrameHeight;
++ const BYTE *yplane = srcFrameBuffer; // 1 byte Y (luminance) for each pixel
++ const BYTE *uplane = yplane+yplanesize; // 1 byte U for a block of 4 pixels
++ const BYTE *vplane = uplane+(yplanesize/4); // 1 byte V for a block of 4 pixels
++
++ BYTE * dstScanLine = dstFrameBuffer;
++
++ unsigned int srcPixpos[4] = { 0, 1, srcFrameWidth, srcFrameWidth + 1 };
++ unsigned int dstPixpos[4] = { 0, rgbIncrement, dstFrameWidth*rgbIncrement, (dstFrameWidth+1)*rgbIncrement };
++
++ if (verticalFlip) {
++ dstScanLine += (dstFrameHeight - 2) * dstFrameWidth * rgbIncrement;
++ dstPixpos[0] = dstFrameWidth*rgbIncrement;
++ dstPixpos[1] = (dstFrameWidth +1)*rgbIncrement;
++ dstPixpos[2] = 0;
++ dstPixpos[3] = 1*rgbIncrement;
++ }
++
++ for (unsigned y = 0; y < height; y += 2)
++ {
++ BYTE * dstPixelGroup = dstScanLine;
++ for (unsigned x = 0; x < width; x += 2)
++ {
++ // The RGB value without luminance
++ long cb = *uplane-128;
++ long cr = *vplane-128;
++ long rd = FIX(1.40200) * cr + ONE_HALF;
++ long gd = -FIX(0.34414) * cb -FIX(0.71414) * cr + ONE_HALF;
++ long bd = FIX(1.77200) * cb + ONE_HALF;
++
++ // Add luminance to each of the 4 pixels
++
++ for (unsigned p = 0; p < 4; p++)
++ {
++ int yvalue = *(yplane + srcPixpos[p]);
++
++ int l = yvalue << SCALEBITS;
++
++ int r = (l+rd)>>SCALEBITS;
++ int g = (l+gd)>>SCALEBITS;
++ int b = (l+bd)>>SCALEBITS;
++
++ BYTE * rgpPtr = dstPixelGroup + dstPixpos[p];
++ WORD r16,g16,b16;
++ WORD color;
++ WORD *colorptr=NULL;
++
++ r16 = ( (LIMIT(r)) >> 3) & 0x001f;
++ g16 = ( (LIMIT(g)) >> 2) & 0x003f;
++ b16 = ( (LIMIT(b)) >> 3) & 0x001f;
++ color = ((r16 << 11) & (0xf800))
++ | ((g16 << 5 ) & (0x07e0))
++ | ((b16 ) & (0x001f));
++ colorptr = (WORD *)(rgpPtr);
++ *colorptr = color;
++ }
++
++ yplane += 2;
++ dstPixelGroup += rgbIncrement*2;
++
++ uplane++;
++ vplane++;
++ }
++
++ yplane += srcFrameWidth;
++
++ dstScanLine += (verticalFlip?-2:2)*rgbIncrement*dstFrameWidth;
++ }
++
++ if (bytesReturned != NULL)
++ *bytesReturned = dstFrameBytes;
++
++ return PTrue;
++}
++
+ PSTANDARD_COLOUR_CONVERTER(SBGGR8,RGB24)
+ {
+ return SBGGR8toRGB(srcFrameBuffer, dstFrameBuffer, bytesReturned);
+@@ -1687,6 +1778,15 @@
+ return YUV420PtoRGB(srcFrameBuffer, dstFrameBuffer, bytesReturned, 4, 2, 0);
+ }
+
++PSTANDARD_COLOUR_CONVERTER(YUV420P,RGB565)
++{
++ return YUV420PtoRGB565(srcFrameBuffer, dstFrameBuffer, bytesReturned);
++}
++
++PSTANDARD_COLOUR_CONVERTER(YUV420P,RGB16)
++{
++ return YUV420PtoRGB565(srcFrameBuffer, dstFrameBuffer, bytesReturned);
++}
+
+ static void SwapRedAndBlueRow(const BYTE * srcRowPtr,
+ BYTE * dstRowPtr,
+diff -urNad ptlib-2.6.5~/src/ptlib/common/videoio.cxx ptlib-2.6.5/src/ptlib/common/videoio.cxx
+--- ptlib-2.6.5~/src/ptlib/common/videoio.cxx 2010-02-26 03:25:23.000000000 -0500
++++ ptlib-2.6.5/src/ptlib/common/videoio.cxx 2010-02-26 03:52:10.000000000 -0500
+@@ -99,6 +99,7 @@
+ { "YUV411P", 12 },
+ { "RGB565", 16 },
+ { "RGB555", 16 },
++ { "RGB16", 16 },
+ { "YUV410", 10 },
+ { "YUV410P", 10 },
+ { "Grey", 8 },
diff --git a/recipes/ekiga/ptlib_2.6.5.bb b/recipes/ekiga/ptlib_2.6.5.bb
index 5466292361..a81b2ead0a 100644
--- a/recipes/ekiga/ptlib_2.6.5.bb
+++ b/recipes/ekiga/ptlib_2.6.5.bb
@@ -1,11 +1,15 @@
DESCRIPTION = "Portable Tools Libary"
LICENSE = "MPL"
+PR = "r1"
+
inherit gnome
DEPENDS += "libgsm openldap openssl expat virtual/libsdl alsa-lib"
-SRC_URI = "${SOURCEFORGE_MIRROR}/opalvoip/ptlib-${PV}.tar.bz2"
+SRC_URI = "${SOURCEFORGE_MIRROR}/opalvoip/ptlib-${PV}.tar.bz2 \
+ file://rgb16.patch;patch=1 \
+"
do_configure() {
libtoolize --force
@@ -25,10 +29,4 @@ do_install_append() {
FILES_${PN} += "${libdir}/ptlib-${PV}/*/*/*.so"
-do_stage() {
- autotools_stage_all
-}
-
-
-
diff --git a/recipes/ekiga/ptlib_2.8.0.bb b/recipes/ekiga/ptlib_2.8.0.bb
new file mode 100644
index 0000000000..5adedc594d
--- /dev/null
+++ b/recipes/ekiga/ptlib_2.8.0.bb
@@ -0,0 +1,33 @@
+DESCRIPTION = "Portable Tools Libary"
+LICENSE = "MPL"
+
+inherit gnome
+
+DEPENDS += "libgsm openldap openssl expat virtual/libsdl alsa-lib"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opalvoip/ptlib-${PV}.tar.bz2;name=ptlib \
+"
+SRC_URI[ptlib.md5sum] = "862ffac32bebbde97ca20320c5b478c6"
+SRC_URI[ptlib.sha256sum] = "e5acadb55d1abd69163b8797bedabc592a567360da79f93dad185988338a5bd3"
+
+EXTRA_OECONF = " --enable-exceptions "
+
+do_configure() {
+ libtoolize --force
+ gnu-configize
+ oe_runconf
+}
+
+do_compile_append() {
+ sed -i -e s:${STAGING_DIR_TARGET}::g \
+ -e s:/${TARGET_SYS}::g \
+ ptlib.pc
+}
+
+do_install_append() {
+ chmod +x ${D}${libdir}/*
+}
+
+FILES_${PN} += "${libdir}/ptlib-${PV}/*/*/*.so"
+
+
diff --git a/recipes/enotes/enotes_svn.bb b/recipes/enotes/enotes_svn.bb
index 4748c758dc..5603469d58 100644
--- a/recipes/enotes/enotes_svn.bb
+++ b/recipes/enotes/enotes_svn.bb
@@ -5,6 +5,7 @@ LICENSE = "GPL"
SECTION = "e/apps"
DEPENDS = "elementary evas sqlite3"
+SRCREV = "19"
PV = "0.2.2+svnr${SRCPV}"
PR = "r2"
SRC_URI = "svn://enotes.googlecode.com/svn/trunk;module=.;proto=http"
diff --git a/recipes/espeak/espeak_1.37.bb b/recipes/espeak/espeak_1.37.bb
index 2a5baf2420..f465f6f270 100644
--- a/recipes/espeak/espeak_1.37.bb
+++ b/recipes/espeak/espeak_1.37.bb
@@ -1,4 +1,5 @@
require espeak.inc
+inherit siteinfo
EXTRA_PHONEMES = '${@base_contains("SITEINFO_ENDIANESS", "be", "espeak-data (= ${PV})", "", d)}'
RDEPENDS_${PN} = "portaudio-v19 ${EXTRA_PHONEMES}"
diff --git a/recipes/estardict/estardict_0.1.bb b/recipes/estardict/estardict_0.1.bb
new file mode 100644
index 0000000000..78942355fb
--- /dev/null
+++ b/recipes/estardict/estardict_0.1.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "EstarDict is a offline dictionary reader"
+HOMEPAGE = "http://www.vaudano.eu/wiki/en/estardict"
+AUTHOR = "Luca Vaudano"
+LICENSE = "GPLv3"
+SECTION = "e/apps"
+DEPENDS = "elementary"
+
+SRC_URI = "http://www.vaudano.eu/projects/${PN}/${PN}-${PV}.tar.gz;name=archive"
+SRC_URI[archive.md5sum] = "cb66965f3f6725cce8010bd8fd0e4618"
+SRC_URI[archive.sha256sum] = "c12fb0608d2de7bdb1b1f1002b691ceea4286e69d8374548c7549e1153c1286e"
+
+inherit autotools
diff --git a/recipes/ettercap/ettercap-ng_0.7.3.bb b/recipes/ettercap/ettercap-ng_0.7.3.bb
index c9e73d9ea0..00bf64da88 100644
--- a/recipes/ettercap/ettercap-ng_0.7.3.bb
+++ b/recipes/ettercap/ettercap-ng_0.7.3.bb
@@ -12,7 +12,7 @@ S = "${WORKDIR}/ettercap-NG-${PV}"
inherit autotools
-EXTRA_OECONF += "--disable-gtk"
+EXTRA_OECONF += "--disable-gtk --with-libncurses=${STAGING_INCDIR}"
FILES_${PN} += "${datadir} ${libdir}/ettercap/*.so"
FILES_${PN}-dbg += "${libdir}/ettercap/.debug"
diff --git a/recipes/evopedia/evopedia_git.bb b/recipes/evopedia/evopedia_git.bb
new file mode 100644
index 0000000000..eaad256916
--- /dev/null
+++ b/recipes/evopedia/evopedia_git.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "evopedia is an offline Wikipedia viewer "
+AUTHOR = "Christian Reitwießner"
+HOMEPAGE = "http://www.reitwiessner.de/openmoko/evopedia.html"
+PRIORITY = "optional"
+LICENSE = "GPL"
+RDEPENDS = "python python-xml python-shell python-netclient python-mime \
+ python-netserver python-io python-compression"
+RRECOMMENDS = "midori"
+PV = "0.3.0-rc3+gitr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "git://github.com/crei/evopedia.git;protocol=http;branch=master"
+
+SRCREV = "2e92cc7b4b709c7551337e7a2c76e6737c241e38"
+S = "${WORKDIR}/git/evopedia"
+
+inherit distutils
+
+PACKAGE_ARCH = "all"
+
+FILES_${PN} += "${datadir}/applications \
+ ${datadir}/evopedia \
+ ${datadir}/pixmaps \
+ "
diff --git a/recipes/expat/expat-2.0.0/autotools.patch b/recipes/expat/expat-2.0.1/autotools.patch
index 77aee3a833..77aee3a833 100644
--- a/recipes/expat/expat-2.0.0/autotools.patch
+++ b/recipes/expat/expat-2.0.1/autotools.patch
diff --git a/recipes/expat/expat-native_1.95.7.bb b/recipes/expat/expat-native_2.0.1.bb
index edfa53ae48..edfa53ae48 100644
--- a/recipes/expat/expat-native_1.95.7.bb
+++ b/recipes/expat/expat-native_2.0.1.bb
diff --git a/recipes/expat/expat.inc b/recipes/expat/expat.inc
index 6d27b77b19..b254f08b74 100644
--- a/recipes/expat/expat.inc
+++ b/recipes/expat/expat.inc
@@ -3,7 +3,7 @@ HOMEPAGE = "http://expat.sf.net/"
SECTION = "libs"
LICENSE = "MIT"
-SRC_URI = "${SOURCEFORGE_MIRROR}/expat/expat-${PV}.tar.gz \
+SRC_URI = "${SOURCEFORGE_MIRROR}/expat/expat-${PV}.tar.gz;name=src \
"
S = "${WORKDIR}/expat-${PV}"
diff --git a/recipes/expat/expat_2.0.0.bb b/recipes/expat/expat_2.0.0.bb
deleted file mode 100644
index 0fd825ee24..0000000000
--- a/recipes/expat/expat_2.0.0.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-require expat.inc
-PR = "r2"
-
-SRC_URI += "file://autotools.patch;patch=1"
-
-inherit lib_package
-
-do_configure() {
- rm -f ${S}/conftools/libtool.m4
- touch ${S}/conftools/libtool.m4
- autotools_do_configure
-}
-
-do_stage() {
- install -m 0644 ${S}/lib/expat.h ${STAGING_INCDIR}/
- install -m 0644 ${S}/lib/expat_external.h ${STAGING_INCDIR}/
- oe_libinstall -so libexpat ${STAGING_LIBDIR}
-}
-
-do_install() {
- oe_runmake prefix="${D}${prefix}" \
- bindir="${D}${bindir}" \
- libdir="${D}${libdir}" \
- includedir="${D}${includedir}" \
- man1dir="${D}${mandir}/man1" \
- install
-}
diff --git a/recipes/expat/expat_2.0.1.bb b/recipes/expat/expat_2.0.1.bb
new file mode 100644
index 0000000000..41739e8889
--- /dev/null
+++ b/recipes/expat/expat_2.0.1.bb
@@ -0,0 +1,29 @@
+require expat.inc
+PR = "r2"
+
+SRC_URI += "file://autotools.patch;patch=1"
+SRC_URI[src.md5sum] = "ee8b492592568805593f81f8cdf2a04c"
+SRC_URI[src.sha256sum] = "847660b4df86e707c9150e33cd8c25bc5cd828f708c7418e765e3e983a2e5e93"
+
+inherit lib_package
+
+do_configure() {
+ rm -f ${S}/conftools/libtool.m4
+ touch ${S}/conftools/libtool.m4
+ autotools_do_configure
+}
+
+do_stage() {
+ install -m 0644 ${S}/lib/expat.h ${STAGING_INCDIR}/
+ install -m 0644 ${S}/lib/expat_external.h ${STAGING_INCDIR}/
+ oe_libinstall -so libexpat ${STAGING_LIBDIR}
+}
+
+do_install() {
+ oe_runmake prefix="${D}${prefix}" \
+ bindir="${D}${bindir}" \
+ libdir="${D}${libdir}" \
+ includedir="${D}${includedir}" \
+ man1dir="${D}${mandir}/man1" \
+ install
+}
diff --git a/recipes/ez-ipupdate/ez-ipupdate_3.0.10.bb b/recipes/ez-ipupdate/ez-ipupdate_3.0.10.bb
index f3434e16f9..661ff96a48 100644
--- a/recipes/ez-ipupdate/ez-ipupdate_3.0.10.bb
+++ b/recipes/ez-ipupdate/ez-ipupdate_3.0.10.bb
@@ -4,12 +4,13 @@ HOMEPAGE = "http://www.ez-ipupdate.com/"
SECTION = "console/network"
PRIORITY = "optional"
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://www.ez-ipupdate.com/dist/ez-ipupdate-${PV}.tar.gz \
file://configure.patch;patch=1 \
file://conffile.patch;patch=1 \
file://zoneedit.patch;patch=1 \
+ file://CVE-2004-0980.patch;patch=1;pnum=0 \
file://init \
file://ipupdate.conf \
"
diff --git a/recipes/ez-ipupdate/files/CVE-2004-0980.patch b/recipes/ez-ipupdate/files/CVE-2004-0980.patch
new file mode 100644
index 0000000000..27b7ee9056
--- /dev/null
+++ b/recipes/ez-ipupdate/files/CVE-2004-0980.patch
@@ -0,0 +1,13 @@
+$FreeBSD: ports/dns/ez-ipupdate/files/patch-ez-ipupdate.c,v 1.1 2004/11/11 15:46:04 naddy Exp $
+
+--- ez-ipupdate.c.orig
++++ ez-ipupdate.c
+@@ -798,7 +798,7 @@
+ sprintf(buf, "message incomplete because your OS sucks: %s\n", fmt);
+ #endif
+
+- syslog(LOG_NOTICE, buf);
++ syslog(LOG_NOTICE, "%s", buf);
+ }
+ else
+ {
diff --git a/recipes/faad2/faad2_2.7.bb b/recipes/faad2/faad2_2.7.bb
new file mode 100644
index 0000000000..e778432840
--- /dev/null
+++ b/recipes/faad2/faad2_2.7.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Library for reading some sort of media format."
+SECTION = "libs"
+LICENSE = "LGPL"
+PRIORITY = "optional"
+
+inherit autotools
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/faac/faad2-src/faad2-${PV}/${PN}-${PV}.tar.bz2;name=faad2 \
+"
+
+SRC_URI[faad2.md5sum] = "4c332fa23febc0e4648064685a3d4332"
+SRC_URI[faad2.sha256sum] = "14561b5d6bc457e825bfd3921ae50a6648f377a9396eaf16d4b057b39a3f63b5"
+
+PACKAGES =+ "libfaad libfaad-dev libmp4ff libmp4ff-dev"
+
+FILES_${PN} = "${bindir}/faad"
+
+FILES_libfaad = "${libdir}/libfaad.so.*"
+FILES_libfaad-dev = "${libdir}/libfaad.so ${libdir}/libfaad.la ${libdir}/libfaad.a ${includedir}/faad.h"
+
+FILES_libmp4ff = "${libdir}/libmp4ff.so.*"
+FILES_libmp4ff-dev = "${libdir}/libmp4ff.so ${libdir}/libmp4ff.la ${libdir}/libmp4ff.a ${includedir}/mp4ff.h"
+
diff --git a/recipes/fastcgi/fastcgi_2.4.0.bb b/recipes/fastcgi/fastcgi_2.4.0.bb
index a575da1d84..147634293a 100644
--- a/recipes/fastcgi/fastcgi_2.4.0.bb
+++ b/recipes/fastcgi/fastcgi_2.4.0.bb
@@ -1,6 +1,6 @@
LICENSE = "Open Market"
DESCRIPTION = "Fast CGI backend (web server to CGI handler) library"
-PR = "r3"
+PR = "r4"
SRC_URI = "http://www.fastcgi.com/dist/fcgi-${PV}.tar.gz \
file://link-against-math.patch;patch=1 \
@@ -13,8 +13,3 @@ LEAD_SONAME = "libfcgi.so*"
PARALLEL_MAKE=""
inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
-
diff --git a/recipes/fbset/fbset_2.1.bb b/recipes/fbset/fbset_2.1.bb
index 9037350bad..6299148579 100644
--- a/recipes/fbset/fbset_2.1.bb
+++ b/recipes/fbset/fbset_2.1.bb
@@ -6,7 +6,7 @@
# Date: 28-May-06
DESCRIPTION = "The fbset console tool"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
RRECOMMENDS = "fbset-modes"
PR = "r2"
diff --git a/recipes/fbv/fbv-1.0b/fbv-1.0b.patch b/recipes/fbv/fbv-1.0b/fbv-1.0b.patch
new file mode 100644
index 0000000000..2ca9d522b9
--- /dev/null
+++ b/recipes/fbv/fbv-1.0b/fbv-1.0b.patch
@@ -0,0 +1,12 @@
+diff -urN fbv-1.0b-0rig/Makefile fbv-1.0b/Makefile
+--- fbv-1.0b-0rig/Makefile 2009-08-20 00:33:58.000000000 +0200
++++ fbv-1.0b/Makefile 2009-08-20 00:34:16.000000000 +0200
+@@ -12,7 +12,7 @@
+ OBJECTS = ${SOURCES:.c=.o}
+
+ OUT = fbv
+-#LIBS = -lungif -L/usr/X11R6/lib -ljpeg -lpng
++LIBS = -L/usr/lib -ljpeg -lpng #-lungif
+
+ all: $(OUT)
+ @echo Build DONE.
diff --git a/recipes/fbv/fbv_1.0b.bb b/recipes/fbv/fbv_1.0b.bb
index 04c70661d6..6016e0a709 100644
--- a/recipes/fbv/fbv_1.0b.bb
+++ b/recipes/fbv/fbv_1.0b.bb
@@ -1,25 +1,28 @@
DESCRIPTION = "Frame Buffer Viewer"
LICENSE = "GPL"
-DEPENDS = "libpng"
-PR = "r1"
+DEPENDS = "libpng jpeg"
+PR = "r2"
SRC_URI = "http://s-tech.elsat.net.pl/fbv/fbv-1.0b.tar.gz \
- file://cross_compile.patch;patch=1"
+ file://cross_compile.patch;patch=1 \
+ file://fbv-1.0b.patch;patch=1 \
+ "
do_configure() {
- CC="${CC}" ./configure --without-libungif --without-bmp \
- --without-libjpeg
+ CC="${CC}" ./configure --without-libungif
}
do_compile() {
- oe_runmake CFLAGS="-O2 -Wall -D_GNU_SOURCE -D__KERNEL_STRICT_NAMES" \
- CC="${CC}"
+ oe_runmake CC="${CC}" \
+ CFLAGS="-O2 -Wall -D_GNU_SOURCE -D__KERNEL_STRICT_NAMES"
}
+
do_install() {
install -d ${D}${bindir}
- install -m 0755 fbv ${D}${bindir}
+ install -m 0755 fbv ${D}${bindir}
- # man
- install -d ${D}${mandir}/man1/
- install -m 0644 fbv.1 ${D}${mandir}/man1/fbv.1
+# man
+ install -d ${D}${mandir}/man1/
+ install -m 0644 fbv.1 ${D}${mandir}/man1/fbv.1
}
+
diff --git a/recipes/fetchmail/fetchmail-6.3.8/CVE-2007-4565.patch b/recipes/fetchmail/fetchmail-6.3.8/CVE-2007-4565.patch
deleted file mode 100644
index d0926848c2..0000000000
--- a/recipes/fetchmail/fetchmail-6.3.8/CVE-2007-4565.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- fetchmail-6.3.8-orig/sink.c
-+++ fetchmail-6.3.8/sink.c
-@@ -262,7 +262,7 @@
- const char *md1 = "MAILER-DAEMON", *md2 = "MAILER-DAEMON@";
-
- /* don't bounce in reply to undeliverable bounces */
-- if (!msg->return_path[0] ||
-+ if (!msg || !msg->return_path[0] ||
- strcmp(msg->return_path, "<>") == 0 ||
- strcasecmp(msg->return_path, md1) == 0 ||
- strncasecmp(msg->return_path, md2, strlen(md2)) == 0)
diff --git a/recipes/fetchmail/fetchmail_6.3.14.bb b/recipes/fetchmail/fetchmail_6.3.14.bb
new file mode 100644
index 0000000000..1934f74690
--- /dev/null
+++ b/recipes/fetchmail/fetchmail_6.3.14.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Fetchmail is a free, full-featured, robust, \
+well-documented remote-mail retrieval and forwarding utility \
+intended to be used over on-demand TCP/IP links \
+(such as SLIP or PPP connections)."
+SECTION = "console/network"
+
+LICENSE = "GPL"
+
+PR = "r2"
+
+SRC_URI = "http://download.berlios.de/fetchmail/${PN}-${PV}.tar.bz2;name=src \
+ "
+
+SRC_URI[src.md5sum] = "86d3cfbce151881d8bf76a1efd5bda6a"
+SRC_URI[src.sha256sum] = "8657f786f5af1857ddb3b50203e6cde2efad43f49828973cbb22f6d431208607"
+
+inherit autotools gettext
+
+FILES_${PN} = "${bindir}/fetchmail"
+PACKAGES += "${PN}conf"
+FILES_${PN}conf = "${libdir}/python*/site-packages/fetchmailconf.py* ${bindir}/fetchmailconf"
+rdepends_${PN}conf = "${PN}"
diff --git a/recipes/fetchmail/fetchmail_6.3.8.bb b/recipes/fetchmail/fetchmail_6.3.8.bb
deleted file mode 100644
index 9b789aae25..0000000000
--- a/recipes/fetchmail/fetchmail_6.3.8.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "Fetchmail is a free, full-featured, robust, \
-well-documented remote-mail retrieval and forwarding utility \
-intended to be used over on-demand TCP/IP links \
-(such as SLIP or PPP connections)."
-SECTION = "console/network"
-
-LICENSE = "GPL"
-
-PR = "r2"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/f/${PN}/${PN}_${PV}.orig.tar.gz \
- file://CVE-2007-4565.patch;patch=1 \
- "
-
-inherit autotools gettext
-
-FILES_${PN} = "${bindir}/fetchmail"
-PACKAGES += "${PN}conf"
-FILES_${PN}conf = "${libdir}/python2.5/site-packages/fetchmailconf.py* ${bindir}/fetchmailconf"
-rdepends_${PN}conf = "${PN}"
diff --git a/recipes/ffalarms/ffalarms/libeflvala.a18c70a312d98cc90e0e7978f845601e82460b39.patch b/recipes/ffalarms/ffalarms/libeflvala.a18c70a312d98cc90e0e7978f845601e82460b39.patch
deleted file mode 100644
index dc3f73c672..0000000000
--- a/recipes/ffalarms/ffalarms/libeflvala.a18c70a312d98cc90e0e7978f845601e82460b39.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Index: a/ffalarms.vala
-===================================================================
---- a/ffalarms.vala (revision 67)
-+++ b/ffalarms.vala (working copy)
-@@ -1407,7 +1407,6 @@
- bx.pack_end(bt);
- bx.pack_end(frame("pad_small"));
- w.inwin_content_set(bx);
-- w.inwin_style_set("minimal_vertical");
- bt.show();
- w.inwin_activate();
- }
-@@ -1476,7 +1475,7 @@
- this.parent = parent;
- }
-
-- public unowned Button add(string label, Evas.SmartCallback cb)
-+ public unowned Button add(string label, Evas.Callback cb)
- {
- unowned Button b;
-
-@@ -1505,7 +1504,7 @@
- hover.content_set("top", box);
- }
-
-- public new unowned Button add(string label, Evas.SmartCallback cb)
-+ public new unowned Button add(string label, Evas.Callback cb)
- {
- unowned Button b = base.add(label, cb);
- b.smart_callback_add("clicked", hover.hide);
diff --git a/recipes/ffalarms/ffalarms_git.bb b/recipes/ffalarms/ffalarms_git.bb
new file mode 100644
index 0000000000..6dc6545f41
--- /dev/null
+++ b/recipes/ffalarms/ffalarms_git.bb
@@ -0,0 +1,33 @@
+DESCRIPTION = "Finger friendly alarms"
+AUTHOR = "Lukasz Pankowski <lukpank@o2.pl>"
+HOMEPAGE = "http://ffalarms.projects.openmoko.org/"
+SECTION = "x11/applications"
+PRIORITY = "optional"
+LICENSE = "GPLv3"
+DEPENDS = "elementary libeflvala libical"
+RDEPENDS = "atd alsa-utils-amixer alsa-utils-alsactl alsa-scenarii-shr ttf-dejavu-sans libical"
+RSUGGESTS = "mplayer alsa-utils-aplay frameworkd"
+PV = "0.3.2+gitr${SRCREV}"
+PR = "r1"
+
+SRC_URI = "git://git.shr-project.org/repo/ffalarms.git;protocol=http;branch=master"
+
+SRCREV = "af7deb209172bfd79614aee10e618127bcfc8a32"
+S = "${WORKDIR}/git"
+
+inherit vala
+
+do_compile() {
+ oe_runmake VAPIDIR=${STAGING_DATADIR}/vala/vapi
+}
+do_install() {
+ oe_runmake install DESTDIR=${D}
+}
+# needed because there is do_stage_append in vala.bbclass and do_stage() was removed..
+do_stage() {
+
+}
+
+FILES_${PN} += "${datadir}/${PN} ${datadir}/applications ${datadir}/pixmaps"
+
+MAINTAINER = "Lukasz Pankowski <lukpank@o2.pl>"
diff --git a/recipes/ffalarms/ffalarms_svn.bb b/recipes/ffalarms/ffalarms_svn.bb
deleted file mode 100644
index be9fbbec41..0000000000
--- a/recipes/ffalarms/ffalarms_svn.bb
+++ /dev/null
@@ -1,37 +0,0 @@
-DESCRIPTION = "Finger friendly alarms"
-HOMEPAGE = "http://ffalarms.projects.openmoko.org/"
-LICENSE = "GPLv3"
-AUTHOR = "Lukasz Pankowski <lukpank@o2.pl>"
-MAINTAINER = "Lukasz Pankowski <lukpank@o2.pl>"
-SECTION = "x11/applications"
-PRIORITY = "optional"
-DEPENDS = "elementary libeflvala libical"
-
-PV = "0.3.1+svnr${SRCPV}"
-PR = "r2"
-
-# needed because there is do_stage_append in vala.bbclass and do_stage() was removed..
-do_stage() {
-
-}
-
-inherit vala
-
-SRC_URI = "svn://svn.projects.openmoko.org/svnroot/ffalarms;module=trunk;proto=https \
- file://libeflvala.a18c70a312d98cc90e0e7978f845601e82460b39.patch;patch=1"
-
-S = "${WORKDIR}/trunk"
-
-FILES_${PN} += "${datadir}/${PN} ${datadir}/applications ${datadir}/pixmaps"
-
-RDEPENDS = "atd alsa-utils-amixer alsa-utils-alsactl virtual/alsa-scenarios ttf-dejavu-sans libical"
-
-RSUGGESTS = "mplayer alsa-utils-aplay frameworkd"
-
-do_compile() {
- oe_runmake VAPIDIR=${STAGING_DATADIR}/vala/vapi
-}
-
-do_install() {
- oe_runmake install DESTDIR=${D}
-}
diff --git a/recipes/ffmpeg/ffmpeg.inc b/recipes/ffmpeg/ffmpeg.inc
index cdb3f7ee16..c855877e8d 100644
--- a/recipes/ffmpeg/ffmpeg.inc
+++ b/recipes/ffmpeg/ffmpeg.inc
@@ -10,6 +10,8 @@ ARM_INSTRUCTION_SET = "arm"
DEPENDS = "zlib libogg libvorbis libtheora faac faad2 ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'lame liba52', d)}"
RSUGGESTS = "mplayer"
+INC_PR = "r13"
+
inherit autotools pkgconfig
LEAD_SONAME = "libavcodec.so"
@@ -28,46 +30,26 @@ EXTRA_OECONF = "\
\
"
-do_stage() {
- for lib in libavcodec libavdevice libavformat \
- libavutil libpostproc libswscale
- do
- oe_libinstall -a -so -C $lib $lib ${STAGING_LIBDIR} || true
- install -d ${STAGING_INCDIR}/$lib
- done
-
- install -d ${STAGING_INCDIR}/ffmpeg
-
- install -m 0644 ${S}/libavcodec/avcodec.h ${STAGING_INCDIR}/ffmpeg/avcodec.h
- install -m 0644 ${S}/libavcodec/opt.h ${STAGING_INCDIR}/ffmpeg/opt.h
- install -m 0644 ${S}/libavcodec/avcodec.h ${STAGING_INCDIR}/libavcodec/avcodec.h
- install -m 0644 ${S}/libavcodec/opt.h ${STAGING_INCDIR}/libavcodec/opt.h
-
- install -m 0644 ${S}/libavdevice/avdevice.h ${STAGING_INCDIR}/ffmpeg/avdevice.h
-
- for h in avformat.h avio.h rtp.h rtsp.h rtspcodes.h
- do
- install -m 0644 ${S}/libavformat/$h ${STAGING_INCDIR}/ffmpeg/$h
- install -m 0644 ${S}/libavformat/$h ${STAGING_INCDIR}/libavformat/$h
- done
-
- for h in adler32.h avstring.h avutil.h base64.h bswap.h \
- common.h crc.h fifo.h integer.h intfloat_readwrite.h \
- log.h lzo.h mathematics.h md5.h mem.h pixfmt.h random*.h \
- rational.h sha1.h
- do
- install -m 0644 ${S}/libavutil/$h ${STAGING_INCDIR}/ffmpeg/$h
- install -m 0644 ${S}/libavutil/$h ${STAGING_INCDIR}/libavutil/$h
- done
+FFMPEG_LIBS = "libavcodec libavdevice libavformat \
+ libavutil libpostproc libswscale"
+
+SYSROOT_PREPROCESS_FUNCS = " \
+ ffmpeg_stage_cleanup \
+ ffmpeg_create_compat_links"
- install -d ${STAGING_INCDIR}/libswscale/
- install -m 0644 ${S}/libswscale/*.h ${STAGING_INCDIR}/ffmpeg/
- install -m 0644 ${S}/libswscale/*.h ${STAGING_INCDIR}/libswscale/
+ffmpeg_create_compat_links() {
+ rm -rf ${SYSROOT_DESTDIR}${STAGING_INCDIR}/ffmpeg
+ mkdir -m 0755 ${SYSROOT_DESTDIR}${STAGING_INCDIR}/ffmpeg
+ cd ${SYSROOT_DESTDIR}${STAGING_INCDIR}/ffmpeg
+
+ for lib in ${FFMPEG_LIBS}; do
+ ln -s ../$lib/*.h '.'
+ done
+}
- install -d ${STAGING_INCDIR}/libpostproc
- install -d ${STAGING_INCDIR}/postproc
- install -m 0644 ${S}/libpostproc/postprocess.h ${STAGING_INCDIR}/libpostproc/postprocess.h
- install -m 0644 ${S}/libpostproc/postprocess.h ${STAGING_INCDIR}/postproc/postprocess.h
+ffmpeg_stage_cleanup() {
+ rm -rf ${SYSROOT_DESTDIR}${STAGING_LIBDIR}/vhook \
+ ${SYSROOT_DESTDIR}${STAGING_DATADIR}
}
diff --git a/recipes/ffmpeg/ffmpeg_0.4.9-pre1.bb b/recipes/ffmpeg/ffmpeg_0.4.9-pre1.bb
index 6e347b16f1..54991f5c0f 100644
--- a/recipes/ffmpeg/ffmpeg_0.4.9-pre1.bb
+++ b/recipes/ffmpeg/ffmpeg_0.4.9-pre1.bb
@@ -1,6 +1,6 @@
require ffmpeg.inc
-PR = "r9"
+PR = "${INC_PR}.0"
SRC_URI = "${SOURCEFORGE_MIRROR}/ffmpeg/ffmpeg-${PV}.tar.gz \
file://configure.patch;patch=0 \
diff --git a/recipes/ffmpeg/ffmpeg_0.5.bb b/recipes/ffmpeg/ffmpeg_0.5.bb
index b80fa8893b..e39e41e160 100644
--- a/recipes/ffmpeg/ffmpeg_0.5.bb
+++ b/recipes/ffmpeg/ffmpeg_0.5.bb
@@ -3,7 +3,7 @@ require ffmpeg.inc
DEPENDS += "schroedinger libgsm"
PE = "1"
-PR = "r5"
+PR = "${INC_PR}.0"
DEFAULT_PREFERENCE = "1"
diff --git a/recipes/ffmpeg/ffmpeg_git.bb b/recipes/ffmpeg/ffmpeg_git.bb
index 1cfc3e2f89..fc9bdf2dee 100644
--- a/recipes/ffmpeg/ffmpeg_git.bb
+++ b/recipes/ffmpeg/ffmpeg_git.bb
@@ -4,7 +4,7 @@ DEPENDS += "schroedinger libgsm"
PE = "1"
PV = "0.5.0+${PR}+gitr${SRCREV}"
-PR = "r0"
+PR = "${INC_PR}.0"
DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/ffmpeg/ffmpeg_svn.bb b/recipes/ffmpeg/ffmpeg_svn.bb
index 2fc16e37d6..620783c07d 100644
--- a/recipes/ffmpeg/ffmpeg_svn.bb
+++ b/recipes/ffmpeg/ffmpeg_svn.bb
@@ -2,15 +2,15 @@ require ffmpeg.inc
DEPENDS += "schroedinger libgsm"
-SRCREV = "21107"
+SRCREV = "22521"
PE = "1"
PV = "0.5.0+${PR}+svnr${SRCPV}"
-PR = "r0"
+PR = "${INC_PR}.0"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_angstrom = "1"
-DEFAULT_PREFERENCE_om-gta02 = "1"
+DEFAULT_PREFERENCE_shr = "1"
SRC_URI = "svn://svn.ffmpeg.org/ffmpeg/;module=trunk"
@@ -44,6 +44,7 @@ EXTRA_OECONF = " \
--enable-libtheora \
--enable-libvorbis \
--arch=${TARGET_ARCH} \
+ --target-os="linux" \
--enable-cross-compile \
--extra-cflags="${TARGET_CFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \
--extra-ldflags="${TARGET_LDFLAGS}" \
diff --git a/recipes/file/file-native_4.18.bb b/recipes/file/file-native_4.18.bb
deleted file mode 100644
index 63554b01fb..0000000000
--- a/recipes/file/file-native_4.18.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require file_${PV}.bb
-inherit native
-
-# avoid dependency loop
-DEPENDS = ""
-PR = "r1"
-
-SRC_URI += "file://native-fix.diff;patch=1"
diff --git a/recipes/file/file-native_4.21.bb b/recipes/file/file-native_4.21.bb
deleted file mode 100644
index 734891d18d..0000000000
--- a/recipes/file/file-native_4.21.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require file_${PV}.bb
-inherit native
-DEPENDS = "zlib-native"
-PR = "r0"
-
-SRC_URI += "file://native-fix.diff;patch=1"
diff --git a/recipes/file/file.inc b/recipes/file/file.inc
new file mode 100644
index 0000000000..1aa4d69596
--- /dev/null
+++ b/recipes/file/file.inc
@@ -0,0 +1,17 @@
+DESCRIPTION = "File attempts to classify files depending \
+on their contents and prints a description if a match is found."
+SECTION = "console/utils"
+LICENSE = "BSD-ADV"
+DEPENDS = "file-native"
+DEPENDS_virtclass-native = ""
+
+INCPR = "r2"
+
+SRC_URI = "ftp://ftp.astron.com/pub/file/file-${PV}.tar.gz"
+
+inherit autotools
+
+NATIVE_INSTALL_WORKS = "1"
+BBCLASSEXTEND = "native"
+
+FILES_${PN} += "${datadir}/misc/magic*"
diff --git a/recipes/file/file_4.18.bb b/recipes/file/file_4.18.bb
index a98c68009e..5433d3e9e6 100644
--- a/recipes/file/file_4.18.bb
+++ b/recipes/file/file_4.18.bb
@@ -1,22 +1,15 @@
-DESCRIPTION = "File attempts to classify files depending \
-on their contents and prints a description if a match is found."
-SECTION = "console/utils"
-LICENSE = "BSD-ADV"
-DEPENDS = "file-native"
+require file.inc
+
+PR = "${INCPR}.0"
SRC_URI = "ftp://ftp.astron.com/pub/file/file-${PV}.tar.gz \
file://dump \
file://filesystems"
-S = "${WORKDIR}/file-${PV}"
-inherit autotools
+SRC_URI_append_virtclass-native = " file://native-fix.diff;patch=1"
do_configure_prepend() {
sed -i -e 's,$(top_builddir)/src/file,file,' ${S}/magic/Makefile.am
cp ${WORKDIR}/dump ${S}/magic/Magdir/
cp ${WORKDIR}/filesystems ${S}/magic/Magdir/
}
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/recipes/file/file_4.21.bb b/recipes/file/file_4.21.bb
index 758f7f36fa..dfe6e1063a 100644
--- a/recipes/file/file_4.21.bb
+++ b/recipes/file/file_4.21.bb
@@ -1,18 +1,13 @@
-DESCRIPTION = "File attempts to classify files depending \
-on their contents and prints a description if a match is found."
-SECTION = "console/utils"
-LICENSE = "BSD-ADV"
-DEPENDS = "file-native"
+require file.inc
+
+DEPENDS_virtclass-native += "zlib-native"
+
+PR = "${INCPR}.0"
SRC_URI = "ftp://ftp.fi.debian.org/pub/gentoo/distfiles/file-${PV}.tar.gz"
-S = "${WORKDIR}/file-${PV}"
-inherit autotools
+SRC_URI_append_virtclass-native = " file://native-fix.diff;patch=1"
do_configure_prepend() {
sed -i -e 's,$(top_builddir)/src/file,file,' ${S}/magic/Makefile.am
}
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/recipes/file/file_5.04.bb b/recipes/file/file_5.04.bb
new file mode 100644
index 0000000000..da14e941be
--- /dev/null
+++ b/recipes/file/file_5.04.bb
@@ -0,0 +1,3 @@
+require file.inc
+
+PR = "${INCPR}.0"
diff --git a/recipes/findutils/findutils-native_4.2.29.bb b/recipes/findutils/findutils-native_4.2.29.bb
deleted file mode 100644
index cb6d72f1e9..0000000000
--- a/recipes/findutils/findutils-native_4.2.29.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require findutils.inc
-
-inherit native
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/findutils-${PV}"
-
-S = "${WORKDIR}/findutils-${PV}"
diff --git a/recipes/findutils/findutils-native_4.4.bb b/recipes/findutils/findutils-native_4.4.bb
deleted file mode 100644
index 1a7b1fe4a8..0000000000
--- a/recipes/findutils/findutils-native_4.4.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require findutils.inc
-
-inherit native
-
-DEFAULT_PREFERENCE = "-1"
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/findutils-${PV}"
-
-S = "${WORKDIR}/findutils-${PV}"
diff --git a/recipes/findutils/findutils.inc b/recipes/findutils/findutils.inc
index 209edd60ad..02b2b1bb5b 100644
--- a/recipes/findutils/findutils.inc
+++ b/recipes/findutils/findutils.inc
@@ -1,11 +1,15 @@
DESCRIPTION = "find, locate, and xargs binaries."
SECTION = "console/utils"
-LICENSE = "GPL"
+LICENSE = "GPLv3"
-SRC_URI = "${GNU_MIRROR}/findutils/findutils-${PV}.tar.gz"
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz;name=archive"
+
+BBCLASSEXTEND = "native"
inherit autotools gettext
+INC_PR = "r2"
+
# diffutils assumes non-glibc compilation with uclibc and
# this causes it to generate its own implementations of
# standard functionality. regex.c actually breaks compilation
@@ -17,3 +21,15 @@ do_install_append() {
cd ${D}${bindir} && mv find find.findutils
cd ${D}${bindir} && mv xargs xargs.findutils
}
+# When staging native package, postinst/prerm is not called and find.findutils is not so usefull in -native
+do_install_virtclass-native () {
+ autotools_do_install
+}
+
+pkg_postinst_${PN} () {
+ for i in find xargs; do update-alternatives --install ${bindir}/$i $i $i.${PN} 100; done
+}
+
+pkg_prerm_${PN} () {
+ for i in find xargs; do update-alternatives --remove $i $i.${PN}; done
+}
diff --git a/recipes/findutils/findutils_4.2.29.bb b/recipes/findutils/findutils_4.2.29.bb
index a89d0924f4..c3c22fb0c2 100644
--- a/recipes/findutils/findutils_4.2.29.bb
+++ b/recipes/findutils/findutils_4.2.29.bb
@@ -1,15 +1,8 @@
require findutils.inc
+LICENSE = "GPLv2"
-PR = "r1"
+PR = "${INC_PR}.0"
SRC_URI += "file://mkinstalldirs.patch;patch=1"
EXTRA_OECONF += " ac_cv_path_SORT=/usr/bin/sort "
-
-pkg_postinst_${PN} () {
- for i in find xargs; do update-alternatives --install ${bindir}/$i $i $i.${PN} 100; done
-}
-
-pkg_prerm_${PN} () {
- for i in find xargs; do update-alternatives --remove $i $i.${PN}; done
-}
diff --git a/recipes/findutils/findutils_4.4.bb b/recipes/findutils/findutils_4.4.bb
deleted file mode 100644
index 25dec2592e..0000000000
--- a/recipes/findutils/findutils_4.4.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-require findutils.inc
-
-PR = "r1"
-DEFAULT_PREFERENCE = "-1"
-
-EXTRA_OECONF += " ac_cv_path_SORT=/usr/bin/sort "
-
-pkg_postinst_${PN} () {
- for i in find xargs; do update-alternatives --install ${bindir}/$i $i $i.${PN} 100; done
-}
-
-pkg_prerm_${PN} () {
- for i in find xargs; do update-alternatives --remove $i $i.${PN}; done
-}
diff --git a/recipes/findutils/findutils_4.5.5.bb b/recipes/findutils/findutils_4.5.5.bb
new file mode 100644
index 0000000000..67ae8e0284
--- /dev/null
+++ b/recipes/findutils/findutils_4.5.5.bb
@@ -0,0 +1,8 @@
+require findutils.inc
+
+PR = "${INC_PR}.0"
+
+# newer version is not available on GNU_MIRROR from .inc file, and old 4.2.29 is not available on alpha.gnu.org
+SRC_URI = "ftp://alpha.gnu.org/gnu/${BPN}/${BPN}-${PV}.tar.gz;name=archive"
+SRC_URI[archive.md5sum] = "39f9dbee5db8e26f8fe01884cb99397b"
+SRC_URI[archive.sha256sum] = "8388e1b26902e8f84320b320994071743b0e98c2831b189e8ba230747e8e0b8d"
diff --git a/recipes/firmwares/wl1251-fw_1.0-p1.bb b/recipes/firmwares/wl1251-fw_1.0-p1.bb
new file mode 100644
index 0000000000..ed4fef22b8
--- /dev/null
+++ b/recipes/firmwares/wl1251-fw_1.0-p1.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Firmware for MSM wl1251 wifi chipset (e.g. trout/HTC Dream)"
+LICENCE = "Texas Instruments"
+
+SRC_URI = "\
+ http://ftp.o2s.ch/pub/openmoko/firmware-wl12xx/wl1251-fw.bin;name=fw \
+ http://ftp.o2s.ch/pub/openmoko/firmware-wl12xx/wl1251-nvs.bin;name=nvs \
+"
+
+SRC_URI[fw.md5sum] = "ebf5c2036d37bc56b4d41ddcbda4311e"
+SRC_URI[fw.sha156sum] = "c4b8a41024caa27218304d9cba4e3099900f365d3b006832457bfb8a563f740a"
+SRC_URI[nvs.md5sum] = "e430dbf16bdc9fe6adfd9e108d059d76"
+SRC_URI[nvs.sha156sum] = "67e4cf4d90fb65610125c2fded850d63900017aecafcadbaf50fe3d0369216f2"
+
+S = "${WORKDIR}/"
+
+do_install() {
+ install -d ${D}${base_libdir}/firmware
+ cp ${S}/wl1251-fw.bin ${D}${base_libdir}/firmware/wl1251-fw.bin
+ cp ${S}/wl1251-nvs.bin ${D}${base_libdir}/firmware/wl1251-nvs.bin
+}
+
+PACKAGES = "${PN}"
+FILES_${PN} += "${base_libdir}/firmware"
+
+PACKAGE_ARCH = "all"
diff --git a/recipes/flex/flex-native_2.5.31.bb b/recipes/flex/flex-native_2.5.31.bb
index 1e9354afde..de3f215ea1 100644
--- a/recipes/flex/flex-native_2.5.31.bb
+++ b/recipes/flex/flex-native_2.5.31.bb
@@ -1,6 +1,6 @@
-require flex.inc
+require flex_${PV}.bb
inherit native
-PR = "r2"
+PR = "r3"
do_stage () {
install -m 0755 flex ${STAGING_BINDIR}
diff --git a/recipes/flex/flex.inc b/recipes/flex/flex.inc
index 4ebd44a61b..37e34fe462 100644
--- a/recipes/flex/flex.inc
+++ b/recipes/flex/flex.inc
@@ -2,9 +2,6 @@ DESCRIPTION = "Flex is a tool for generating programs that recognize lexical pat
SECTION = "devel"
LICENSE = "BSD"
-SRC_URI = "${SOURCEFORGE_MIRROR}/flex/flex-2.5.31.tar.bz2 \
- file://flex-lvalue.diff;patch=1 \
- file://fix-gen.patch;patch=1"
S = "${WORKDIR}/flex-${PV}"
inherit autotools
diff --git a/recipes/flex/flex_2.5.31.bb b/recipes/flex/flex_2.5.31.bb
index e247a03ee8..ae9e6f986b 100644
--- a/recipes/flex/flex_2.5.31.bb
+++ b/recipes/flex/flex_2.5.31.bb
@@ -1,7 +1,10 @@
require flex.inc
PR = "r5"
-SRC_URI += "file://include.patch;patch=1"
+SRC_URI = "${SOURCEFORGE_MIRROR}/flex/flex-${PV}.tar.bz2 \
+ file://flex-lvalue.diff;patch=1 \
+ file://fix-gen.patch;patch=1 \
+ file://include.patch;patch=1"
do_stage() {
oe_libinstall -a libfl ${STAGING_LIBDIR}
diff --git a/recipes/flex/flex_2.5.35.bb b/recipes/flex/flex_2.5.35.bb
new file mode 100644
index 0000000000..4099f20658
--- /dev/null
+++ b/recipes/flex/flex_2.5.35.bb
@@ -0,0 +1,10 @@
+require flex.inc
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/flex/flex-${PV}.tar.bz2;name=flex \
+"
+
+SRC_URI[flex.md5sum] = "10714e50cea54dc7a227e3eddcd44d57"
+SRC_URI[flex.sha256sum] = "0becbd4b2b36b99c67f8c22ab98f7f80c9860aec70f0350a0018f29a88704e7b"
+
+NATIVE_INSTALL_WORKS = "1"
+BBCLASSEXTEND = "native"
diff --git a/recipes/fltk/fltk2_svn.bb b/recipes/fltk/fltk2_svn.bb
index 0d25ff6cb1..95ed5c6d7f 100644
--- a/recipes/fltk/fltk2_svn.bb
+++ b/recipes/fltk/fltk2_svn.bb
@@ -5,6 +5,7 @@ PRIORITY = "optional"
LICENSE = "LGPL"
DEPENDS = "zlib jpeg libpng libxext libxft xinput"
+SRCREV = "6916"
PV = "1.9.9+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/fltk/fltkspacetrader_svn.bb b/recipes/fltk/fltkspacetrader_svn.bb
index 83e6db25a8..b19e5928e6 100644
--- a/recipes/fltk/fltkspacetrader_svn.bb
+++ b/recipes/fltk/fltkspacetrader_svn.bb
@@ -4,11 +4,11 @@ AUTHOR = "Benjamin 'blindcoder' Schieder'
LICENSE = "GPLv2"
SECTION = "x11/game"
DEPENDS = "fltk"
-SRCREV = "62"
-PV = "1.0+svnr${SRCPV}"
+SRCREV = "190"
+PV = "1.2+svnr${SRCPV}"
PR = "r0"
-S = "${WORKDIR}/trunk"
+S = "${WORKDIR}/1.2-stable"
inherit autotools
-SRC_URI = "svn://scavenger.homeip.net/svn/fltkspacetrader;module=trunk;proto=http"
+SRC_URI = "svn://scavenger.homeip.net/svn/fltkspacetrader/tags;module=1.2-stable;proto=http"
diff --git a/recipes/fontconfig/fontconfig_2.2.95.bb b/recipes/fontconfig/fontconfig_2.2.95.bb
index d1aab24951..7f143d1edd 100644
--- a/recipes/fontconfig/fontconfig_2.2.95.bb
+++ b/recipes/fontconfig/fontconfig_2.2.95.bb
@@ -5,7 +5,7 @@ DEPENDS += "fontconfig-native"
SRC_URI += "file://fc-glyphname.patch;patch=1 \
file://fc-lang.patch;patch=1 \
file://local.conf"
-PR = "r8"
+PR = "r9"
do_stage () {
oe_libinstall -so -a -C src libfontconfig ${STAGING_LIBDIR}
diff --git a/recipes/fontconfig/fontconfig_2.3.91.bb b/recipes/fontconfig/fontconfig_2.3.91.bb
index ec6ef8e037..5b8425f189 100644
--- a/recipes/fontconfig/fontconfig_2.3.91.bb
+++ b/recipes/fontconfig/fontconfig_2.3.91.bb
@@ -7,7 +7,7 @@ SRC_URI += "file://fc-glyphname.patch;patch=1 \
file://one-j-too-many.patch;patch=1 \
file://local.conf"
-PR = "r3"
+PR = "r4"
do_stage () {
oe_libinstall -so -a -C src libfontconfig ${STAGING_LIBDIR}
diff --git a/recipes/fontconfig/fontconfig_2.3.95.bb b/recipes/fontconfig/fontconfig_2.3.95.bb
index 035f8467ed..25b4fb731f 100644
--- a/recipes/fontconfig/fontconfig_2.3.95.bb
+++ b/recipes/fontconfig/fontconfig_2.3.95.bb
@@ -2,7 +2,7 @@ require fontconfig.inc
SRC_URI += "file://one-j-too-many.patch;patch=1"
-PR = "r2"
+PR = "r3"
do_stage () {
oe_libinstall -so -a -C src libfontconfig ${STAGING_LIBDIR}
diff --git a/recipes/fontconfig/fontconfig_2.4.1.bb b/recipes/fontconfig/fontconfig_2.4.1.bb
index c1d861cfb9..5b3c5b36d1 100644
--- a/recipes/fontconfig/fontconfig_2.4.1.bb
+++ b/recipes/fontconfig/fontconfig_2.4.1.bb
@@ -1,6 +1,6 @@
require fontconfig.inc
-PR = "r3"
+PR = "r4"
SRC_URI += "https://stage.maemo.org/svn/maemo/projects/haf/trunk/fontconfig/device_symbols.h \
file://configure_fix.patch;patch=1 "
diff --git a/recipes/fontconfig/fontconfig_2.6.0.bb b/recipes/fontconfig/fontconfig_2.6.0.bb
index 5a056b7885..10c934918e 100644
--- a/recipes/fontconfig/fontconfig_2.6.0.bb
+++ b/recipes/fontconfig/fontconfig_2.6.0.bb
@@ -3,7 +3,7 @@ LICENSE = "BSD"
DESCRIPTION = "A library for configuring and customizing font access."
DEPENDS = "expat freetype zlib"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://fontconfig.org/release/fontconfig-${PV}.tar.gz \
file://fix-pkgconfig.patch;patch=1"
diff --git a/recipes/fontconfig/fontconfig_2.6.99.bb b/recipes/fontconfig/fontconfig_2.6.99.bb
index c812350b41..13502309f2 100644
--- a/recipes/fontconfig/fontconfig_2.6.99.bb
+++ b/recipes/fontconfig/fontconfig_2.6.99.bb
@@ -10,6 +10,7 @@ SRCREV = "96194cc3fa484837bf41598ff3f3d09b97c8dba4"
SRC_URI = "git://anongit.freedesktop.org/~behdad/fontconfig;protocol=git \
"
+PR = "r1"
S = "${WORKDIR}/git"
PACKAGES =+ "fontconfig-utils-dbg fontconfig-utils "
diff --git a/recipes/freesmartphone/frameworkd_git.bb b/recipes/freesmartphone/frameworkd_git.bb
index 07ac5f5b47..04f5e139a3 100644
--- a/recipes/freesmartphone/frameworkd_git.bb
+++ b/recipes/freesmartphone/frameworkd_git.bb
@@ -5,7 +5,7 @@ SECTION = "console/network"
DEPENDS = "python-cython-native python-pyrex-native"
LICENSE = "GPL"
PV = "0.9.5.9+gitr${SRCREV}"
-PR = "r2"
+PR = "r3"
inherit distutils update-rc.d
@@ -31,8 +31,14 @@ do_install_append() {
}
pkg_postinst_${PN} () {
- echo "NOTE: if you have old contacts without field types and the"
- echo " tel: prefix instead please use the remove-tel script"
+ echo "*IMPORTANT NOTICE*: There has been a change in internal opimd database structure as well as in the backend mechanism."
+ echo " This change is not backwards compatible so a conversion is needed, furthermore, since new opimd does not (and will not) support working with SIM, importing your SIM data is also required."
+ echo " In order to import SIM contacts, please use PISI."
+ echo " If you still have old contacts with 'tel:' prefix instead of field types (i.e you haven't upgraded since 26.1.2010) please run the 'remove-tel' script first."
+ echo " For the database conversion:"
+ echo " 1) stop frameworkd '/etc/init.d/frameworkd stop'"
+ echo " 2) use the conversion script, called: 'opimd_convert_db' which is already installed in your system"
+ echo " 3) restart your device"
}
RDEPENDS_${PN} += "\
diff --git a/recipes/freesmartphone/libgsm0710mux/abyss.conf b/recipes/freesmartphone/fso-abyss/fso-abyss.conf
index e69de29bb2..e69de29bb2 100644
--- a/recipes/freesmartphone/libgsm0710mux/abyss.conf
+++ b/recipes/freesmartphone/fso-abyss/fso-abyss.conf
diff --git a/recipes/freesmartphone/fso-abyss/om-gta01/fso-abyss.conf b/recipes/freesmartphone/fso-abyss/om-gta01/fso-abyss.conf
new file mode 100644
index 0000000000..b72656b838
--- /dev/null
+++ b/recipes/freesmartphone/fso-abyss/om-gta01/fso-abyss.conf
@@ -0,0 +1,44 @@
+[logging]
+# Log level: DEBUG, INFO (default), WARNING, ERROR
+# Override via environment as FSO_LOG_LEVEL
+log_level = INFO
+# Where to log to: none (default), stderr, stderr:colors, file, syslog
+# Override via environment as FSO_LOG_TO
+log_to = file
+# Log Destination (valid only for log_to = file)
+# Override via environment as FSO_LOG_DESTINATION
+log_destination = /var/log/fso-abyss.log
+
+[libgsm0710mux]
+log_level = INFO
+log_to = file
+log_destination = /var/log/libgsm0710mux.log
+
+# Set to 1, when the first AllocChannel request should open a new MUX session
+muxer_autoopen = 1
+# Set to 1, when the last ReleaseChannel closes the MUX session
+muxer_autoclose = 1
+
+# Communication means
+device_type = serial
+# Communication port
+device_port = /dev/ttySAC0
+# Port speed
+device_speed = 115200
+# MUX mode, set to 0 for 07.10 basic multiplexing, to 1 for advanced mode
+device_mux_mode = 1
+# set maximum 07.10 frame size
+device_mux_framesize = 89
+
+#channel ACK timeout (in seconds)
+device_ack_timeout = 5
+# Set wakeup threshold for device (in seconds) or 0 to disable
+device_wakeup_threshold = 5
+# Set wakeup time for device (in milliseconds)
+device_wakeup_waitms = 250
+
+# DEBUG: Whether to ignore MUX mode
+session_debug_leave_mux_alone = 0
+# DEBUG: Whether to ignore FC mode
+session_debug_leave_fc_alone = 0
+
diff --git a/recipes/freesmartphone/fso-abyss/om-gta02/fso-abyss.conf b/recipes/freesmartphone/fso-abyss/om-gta02/fso-abyss.conf
new file mode 100644
index 0000000000..acfa0f7dcb
--- /dev/null
+++ b/recipes/freesmartphone/fso-abyss/om-gta02/fso-abyss.conf
@@ -0,0 +1,44 @@
+[logging]
+# Log level: DEBUG, INFO (default), WARNING, ERROR
+# Override via environment as FSO_LOG_LEVEL
+log_level = INFO
+# Where to log to: none (default), stderr, stderr:colors, file, syslog
+# Override via environment as FSO_LOG_TO
+log_to = file
+# Log Destination (valid only for log_to = file)
+# Override via environment as FSO_LOG_DESTINATION
+log_destination = /var/log/fso-abyss.log
+
+[libgsm0710mux]
+log_level = INFO
+log_to = file
+log_destination = /var/log/libgsm0710mux.log
+
+# Set to 1, when the first AllocChannel request should open a new MUX session
+muxer_autoopen = 1
+# Set to 1, when the last ReleaseChannel closes the MUX session
+muxer_autoclose = 1
+
+# Communication means
+device_type = serial
+# Communication port
+device_port = /dev/ttySAC0
+# Port speed
+device_speed = 115200
+# MUX mode, set to 0 for 07.10 basic multiplexing, to 1 for advanced mode
+device_mux_mode = 1
+# set maximum 07.10 frame size
+device_mux_framesize = 89
+
+#channel ACK timeout (in seconds)
+device_ack_timeout = 5
+# Set wakeup threshold for device (in seconds) or 0 to disable
+device_wakeup_threshold = 5
+# Set wakeup time for device (in milliseconds)
+device_wakeup_waitms = 250
+
+# DEBUG: Whether to ignore MUX mode
+session_debug_leave_mux_alone = 0
+# DEBUG: Whether to ignore FC mode
+session_debug_leave_fc_alone = 0
+
diff --git a/recipes/freesmartphone/fso-abyss_git.bb b/recipes/freesmartphone/fso-abyss_git.bb
index 4a9126e75c..6cc8e11411 100644
--- a/recipes/freesmartphone/fso-abyss_git.bb
+++ b/recipes/freesmartphone/fso-abyss_git.bb
@@ -4,14 +4,35 @@ AUTHOR = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
SECTION = "console/network"
DEPENDS = "vala-native dbus dbus-glib libgsm0710mux"
LICENSE = "GPL"
-PV = "0.9.0+gitr${SRCREV}"
+SRCREV = "4d7edda0efec7836612c8c64bb1b90695ca07a53"
+PV = "0.9.2+gitr${SRCREV}"
PR = "r0"
SRC_URI = "\
- ${FREESMARTPHONE_GIT}/fso-abyss.git;protocol=git;branch=master \
+ ${FREESMARTPHONE_GIT}/cornucopia.git;protocol=git;branch=master \
+ file://fso-abyss.conf \
"
-S = "${WORKDIR}/git"
+S = "${WORKDIR}/git/tools/fso-abyss"
-inherit autotools
+inherit autotools_stage
-FILES_${PN} += "${datadir}"
+do_install_append() {
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/fso-abyss.conf ${D}${sysconfdir}/
+}
+
+PACKAGES =+ "${PN}-config"
+
+FILES_${PN} += "${sysconfdir} ${datadir}"
+
+RRECOMMENDS_${PN} = "${PN}-config"
+
+FILES_${PN}-config = "\
+ ${sysconfdir}/fso-abyss.conf \
+"
+
+CONFFILES_${PN}-config = "\
+ ${sysconfdir}/fso-abyss.conf \
+"
+
+PACKAGE_ARCH_${PN} = "${BASE_PACKAGE_ARCH}"
diff --git a/recipes/freesmartphone/fso-term_git.bb b/recipes/freesmartphone/fso-term_git.bb
deleted file mode 100644
index acb20cdb05..0000000000
--- a/recipes/freesmartphone/fso-term_git.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-DESCRIPTION = "Term is a versatile muxer-aware terminal program"
-HOMEPAGE = "http://www.freesmartphone.org/index.php/Implementations/fso-term"
-AUTHOR = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
-SECTION = "console/network"
-DEPENDS = "dbus dbus-glib readline libfsoframework"
-LICENSE = "GPL"
-PV = "0.0.0.0+gitr${SRCREV}"
-PR = "r0"
-
-SRC_URI = "\
- ${FREESMARTPHONE_GIT}/fso-term.git;protocol=git;branch=master \
-"
-S = "${WORKDIR}/git"
-
-do_stage() {
- :
-}
-
-inherit autotools vala
-
-FILES_${PN} += "${datadir}"
diff --git a/recipes/freesmartphone/fsodatad_git.bb b/recipes/freesmartphone/fsodatad_git.bb
index f591066b92..e8bf83ce2e 100644
--- a/recipes/freesmartphone/fsodatad_git.bb
+++ b/recipes/freesmartphone/fsodatad_git.bb
@@ -1,6 +1,10 @@
require cornucopia.inc
inherit fso-plugin
PR = "${INC_PR}.2"
-PV = "0.0.0+gitr${SRCREV}"
+PV = "0.1.0+gitr${SRCREV}"
-DEPENDS += "libxml2 mobile-broadband-provider-info"
+DEPENDS += "\
+ libxml2 \
+ mobile-broadband-provider-info \
+"
+RDEPENDS += "mobile-broadband-provider-info"
diff --git a/recipes/freesmartphone/fsodeviced_git.bb b/recipes/freesmartphone/fsodeviced_git.bb
index 39433eec1e..78d39a2016 100644
--- a/recipes/freesmartphone/fsodeviced_git.bb
+++ b/recipes/freesmartphone/fsodeviced_git.bb
@@ -3,10 +3,12 @@ inherit fso-plugin
DEPENDS += "alsa-lib libcanberra libfsoresource"
RDEPENDS += "libcanberra-alsa"
-RRECOMMENDS += "fso-alsa-data"
+# Included in fsodeviced itself now
+# RRECOMMENDS += "fso-alsa-data"
+RPROVIDES_${PN} = "openmoko-alsa-scenarios virtual/alsa-scenarios"
PV = "0.9.0+gitr${SRCREV}"
PE = "1"
-PR = "${INC_PR}.9"
+PR = "${INC_PR}.10"
EXTRA_OECONF = "\
--enable-kernel26-rfkill \
diff --git a/recipes/freesmartphone/fsogsmd_git.bb b/recipes/freesmartphone/fsogsmd_git.bb
index 8056f4bca8..7bacc6e58d 100644
--- a/recipes/freesmartphone/fsogsmd_git.bb
+++ b/recipes/freesmartphone/fsogsmd_git.bb
@@ -1,9 +1,14 @@
require cornucopia.inc
inherit fso-plugin
-PR = "${INC_PR}.2"
-PV = "0.2.0+gitr${SRCREV}"
+PR = "${INC_PR}.0"
+PV = "0.5.0+gitr${SRCREV}"
-DEPENDS += "libfsoresource libgsm0710mux"
+DEPENDS += "libfsoresource libgsm0710mux ppp msmcommd"
+
+EXTRA_OECONF_append = "\
+ --enable-libgsm0710mux \
+ --enable-modem-qualcomm-palm \
+"
do_install_append_shr() {
# remove .service file to disable fsogsmd autostart
diff --git a/recipes/freesmartphone/fsomusicd_git.bb b/recipes/freesmartphone/fsomusicd_git.bb
index c557ad0043..362d0e399c 100644
--- a/recipes/freesmartphone/fsomusicd_git.bb
+++ b/recipes/freesmartphone/fsomusicd_git.bb
@@ -1,21 +1,31 @@
require cornucopia.inc
-DEPENDS += "gstreamer"
+# Seems like bitbake cannot find dynamicaly created package names in
+# gst-plugins.inc. Image creation usually fail with missing RDEPENDS for
+# gst-plugin-mad gst-plugin-flac gst-plugin-wavparse gst-plugin-sid
+# so add recipes needed for runtime dependencies manually here
+
+DEPENDS += "gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'gst-plugins-ugly', d)}"
PV = "0.0.1+gitr${SRCREV}"
-PR = "${INC_PR}.1"
+PR = "${INC_PR}.3"
RDEPENDS += "\
+#gst-plugins-base
gst-plugin-volume \
- gst-plugin-mad \
+ gst-plugin-alsa \
+"
+RRECOMMENDS += "\
+#gst-plugins-base
gst-plugin-ogg \
- gst-plugin-ivorbis \
gst-plugin-audioconvert \
+#gst-plugins-good
gst-plugin-flac \
gst-plugin-wavparse \
- gst-plugin-sid \
- gst-plugin-alsa \
-"
-RRECOMMENDS += "\
- gst-plugin-souphttp \
+ gst-plugin-souphttpsrc \
+#gst-plugins-bad
+ gst-plugin-ivorbis \
gst-plugin-mms \
gst-plugin-modplug \
+#gst-plugins-ugly
+ ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'gst-plugin-mad', d)} \
+ ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'gst-plugin-sid', d)} \
"
diff --git a/recipes/freesmartphone/fsoraw_svn.bb b/recipes/freesmartphone/fsoraw_svn.bb
index 402aea6393..74b1274782 100644
--- a/recipes/freesmartphone/fsoraw_svn.bb
+++ b/recipes/freesmartphone/fsoraw_svn.bb
@@ -4,6 +4,7 @@ PRIORITY = "optional"
HOMEPAGE = "http://noko.sourceforge.net"
LICENSE = "GPL"
DEPENDS = "dbus"
+SRCREV = "20"
PV = "0.0.1+svnr${SRCPV}"
PR = "r0"
diff --git a/recipes/freesmartphone/fsousaged_git.bb b/recipes/freesmartphone/fsousaged_git.bb
index 2bbbae87b6..b2e78962bf 100644
--- a/recipes/freesmartphone/fsousaged_git.bb
+++ b/recipes/freesmartphone/fsousaged_git.bb
@@ -1,4 +1,4 @@
require cornucopia.inc
inherit fso-plugin
-PV = "0.9.0.1+gitr${SRCREV}"
-PR = "${INC_PR}.2"
+PV = "0.9.1.2+gitr${SRCREV}"
+PR = "${INC_PR}.0"
diff --git a/recipes/freesmartphone/libfsobasics_git.bb b/recipes/freesmartphone/libfsobasics_git.bb
index fc095f1751..6567626bde 100644
--- a/recipes/freesmartphone/libfsobasics_git.bb
+++ b/recipes/freesmartphone/libfsobasics_git.bb
@@ -2,5 +2,5 @@ require cornucopia.inc
DESCRIPTION = "freesmartphone.org support library"
DEPENDS += "libnl2"
-PV = "0.8.2.0+gitr${SRCREV}"
+PV = "0.9.9+gitr${SRCREV}"
PR = "${INC_PR}.0"
diff --git a/recipes/freesmartphone/libfsoframework_git.bb b/recipes/freesmartphone/libfsoframework_git.bb
index 5840cdbfbc..7b434abf38 100644
--- a/recipes/freesmartphone/libfsoframework_git.bb
+++ b/recipes/freesmartphone/libfsoframework_git.bb
@@ -1,6 +1,6 @@
require cornucopia.inc
DESCRIPTION = "freesmartphone.org support library"
DEPENDS += "libfsobasics alsa-lib"
-PV = "0.2.0.0+gitr${SRCREV}"
-PR = "${INC_PR}.1"
+PV = "0.8.0+gitr${SRCREV}"
+PR = "${INC_PR}.0"
diff --git a/recipes/freesmartphone/libfsoresource_git.bb b/recipes/freesmartphone/libfsoresource_git.bb
index 40b536f293..234105263c 100644
--- a/recipes/freesmartphone/libfsoresource_git.bb
+++ b/recipes/freesmartphone/libfsoresource_git.bb
@@ -1,5 +1,5 @@
require cornucopia.inc
DESCRIPTION = "freesmartphone.org dbus resource library"
DEPENDS += "libfso-glib"
-PV = "0.1.0+gitr${SRCREV}"
+PV = "0.1.1+gitr${SRCREV}"
PR = "${INC_PR}.0"
diff --git a/recipes/freesmartphone/libfsotransport_git.bb b/recipes/freesmartphone/libfsotransport_git.bb
index a87fe6cf49..f69ed7a2a0 100644
--- a/recipes/freesmartphone/libfsotransport_git.bb
+++ b/recipes/freesmartphone/libfsotransport_git.bb
@@ -1,4 +1,4 @@
require cornucopia.inc
DESCRIPTION = "freesmartphone.org transport library"
-PV = "0.9.4+gitr${SRCREV}"
+PV = "0.9.6+gitr${SRCREV}"
PR = "${INC_PR}.0"
diff --git a/recipes/freesmartphone/libgsm0710mux/om-3d7k/abyss.conf b/recipes/freesmartphone/libgsm0710mux/om-3d7k/abyss.conf
deleted file mode 100644
index 48630146df..0000000000
--- a/recipes/freesmartphone/libgsm0710mux/om-3d7k/abyss.conf
+++ /dev/null
@@ -1,16 +0,0 @@
-[omuxerd]
-# set to 1, when the first AllocChannel request opens a session
-autoopen = 1
-# set to 1, when the last ReleaseChannel closes the session
-autoclose = 1
-# set to 1, when closing the session should close the program
-autoexit = 1
-
-[session]
-# set 0 for 07.10 basic multiplexing, 1 for advanced
-mode = 0
-# set maximum 07.10 frame size
-framesize = 98
-# configure modem port
-port = /dev/ttySAC1
-speed = 115200
diff --git a/recipes/freesmartphone/libgsm0710mux/om-gta01/abyss.conf b/recipes/freesmartphone/libgsm0710mux/om-gta01/abyss.conf
deleted file mode 100644
index 67da210396..0000000000
--- a/recipes/freesmartphone/libgsm0710mux/om-gta01/abyss.conf
+++ /dev/null
@@ -1,15 +0,0 @@
-[omuxerd]
-autoopen = 1
-autoclose = 1
-autoexit = 1
-
-[session]
-mode = 1
-framesize = 98
-port = /dev/ttySAC0
-speed = 115200
-
-[device]
-wakeup_threshold = 6
-wakeup_waitms = 200
-
diff --git a/recipes/freesmartphone/libgsm0710mux/om-gta02/abyss.conf b/recipes/freesmartphone/libgsm0710mux/om-gta02/abyss.conf
deleted file mode 100644
index 67da210396..0000000000
--- a/recipes/freesmartphone/libgsm0710mux/om-gta02/abyss.conf
+++ /dev/null
@@ -1,15 +0,0 @@
-[omuxerd]
-autoopen = 1
-autoclose = 1
-autoexit = 1
-
-[session]
-mode = 1
-framesize = 98
-port = /dev/ttySAC0
-speed = 115200
-
-[device]
-wakeup_threshold = 6
-wakeup_waitms = 200
-
diff --git a/recipes/freesmartphone/libgsm0710mux_git.bb b/recipes/freesmartphone/libgsm0710mux_git.bb
index 69446879c3..b8e333d8d7 100644
--- a/recipes/freesmartphone/libgsm0710mux_git.bb
+++ b/recipes/freesmartphone/libgsm0710mux_git.bb
@@ -3,34 +3,11 @@ AUTHOR = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
LICENSE = "GPL"
SECTION = "devel"
DEPENDS = "glib-2.0 libgsm0710 libfsotransport"
-PV = "0.9.0+gitr${SRCREV}"
+SRCREV = "4d7edda0efec7836612c8c64bb1b90695ca07a53"
+PV = "0.9.2+gitr${SRCREV}"
PR = "r0"
-SRC_URI = "\
- ${FREESMARTPHONE_GIT}/libgsm0710mux;protocol=git;branch=master \
- file://abyss.conf \
-"
-S = "${WORKDIR}/git"
+SRC_URI = "${FREESMARTPHONE_GIT}/cornucopia.git;protocol=git;branch=master"
+S = "${WORKDIR}/git/libgsm0710mux"
inherit autotools_stage pkgconfig vala
-
-do_install_append() {
- install -d ${D}${sysconfdir}
- install -m 0644 ${WORKDIR}/abyss.conf ${D}${sysconfdir}/
-}
-
-PACKAGES =+ "${PN}-config"
-
-FILES_${PN} += "${sysconfdir} ${datadir}"
-
-RRECOMMENDS_${PN} = "${PN}-config"
-
-FILES_${PN}-config = "\
- ${sysconfdir}/abyss.conf \
-"
-
-CONFFILES_${PN}-config = "\
- ${sysconfdir}/abyss.conf \
-"
-
-PACKAGE_ARCH_${PN} = "${BASE_PACKAGE_ARCH}"
diff --git a/recipes/freesmartphone/mdbus2_git.bb b/recipes/freesmartphone/mdbus2_git.bb
new file mode 100644
index 0000000000..0b72f4cea3
--- /dev/null
+++ b/recipes/freesmartphone/mdbus2_git.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Mickey's DBus introspection and calling Program V2"
+AUTHOR = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
+HOMEPAGE = "http://www.freesmartphone.org"
+SECTION = "console/network"
+LICENSE = "GPLv2"
+DEPENDS = "glib-2.0 dbus dbus-glib"
+PV = "2.0.0+gitr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "${FREESMARTPHONE_GIT}/cornucopia.git;protocol=git;branch=master"
+S = "${WORKDIR}/git/tools/mdbus2"
+
+do_stage() {
+ :
+}
+
+inherit autotools_stage vala
diff --git a/recipes/freesmartphone/mickeydbus_git.bb b/recipes/freesmartphone/mdbus_git.bb
index 229ff7f1fd..229ff7f1fd 100644
--- a/recipes/freesmartphone/mickeydbus_git.bb
+++ b/recipes/freesmartphone/mdbus_git.bb
diff --git a/recipes/freesmartphone/mickeydbus2_git.bb b/recipes/freesmartphone/mickeydbus2_git.bb
deleted file mode 100644
index 799cbe72c1..0000000000
--- a/recipes/freesmartphone/mickeydbus2_git.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "Mickey's DBus introspection and calling Program rewritten in vala"
-AUTHOR = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
-HOMEPAGE = "http://www.freesmartphone.org"
-SECTION = "console/network"
-LICENSE = "GPLv2"
-
-DEPENDS = "vala-native glib-2.0 dbus dbus-glib"
-
-PV = "2.0.0+gitr${SRCREV}"
-PR = "r0"
-
-SRC_URI = "${FREESMARTPHONE_GIT}/cornucopia.git;protocol=git;branch=master"
-S = "${WORKDIR}/git/tools/mdbus2"
-
-inherit autotools
-
-
diff --git a/recipes/freesmartphone/msmcommd_git.bb b/recipes/freesmartphone/msmcommd_git.bb
index 15a342273e..1a7a8ae48b 100644
--- a/recipes/freesmartphone/msmcommd_git.bb
+++ b/recipes/freesmartphone/msmcommd_git.bb
@@ -3,10 +3,19 @@ HOMEPAGE = "http://www.freesmartphone.org"
AUTHOR = "Simon Busch <morphis@gravedo.de>"
SECTION = "console/network"
LICENSE = "GPL"
+DEPENDS = "libgee libfsotransport"
+SRCREV = "c3ee57be664e480951b052cd080321b999c2ba4c"
PV = "0.1.0+gitr${SRCREV}"
-PR = "r0"
+PR = "r2"
SRC_URI = "${FREESMARTPHONE_GIT}/msmcomm.git;protocol=git;branch=master"
-S = "${WORKDIR}/git/msmcommd"
+S = "${WORKDIR}/git"
+
+inherit autotools_stage vala
+
+PARALLEL_MAKE = ""
+
+PACKAGES =+ "${PN}-lib ${PN}-term"
+FILES_${PN}-lib = "${libdir}/lib*.so.*"
+FILES_${PN}-term = "${sbindir}/msmvterm"
-inherit autotools
diff --git a/recipes/freesmartphone/mterm2_git.bb b/recipes/freesmartphone/mterm2_git.bb
new file mode 100644
index 0000000000..6e10f9456f
--- /dev/null
+++ b/recipes/freesmartphone/mterm2_git.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "mterm is a versatile muxer-aware terminal program"
+HOMEPAGE = "http://www.freesmartphone.org/index.php/Implementations/fso-term"
+AUTHOR = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
+SECTION = "console/network"
+DEPENDS = "dbus dbus-glib readline libfsoframework libfsotransport"
+LICENSE = "GPL"
+PV = "0.1.0+gitr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "\
+ ${FREESMARTPHONE_GIT}/cornucopia.git;protocol=git;branch=master \
+"
+S = "${WORKDIR}/git/tools/mterm2"
+
+do_stage() {
+ :
+}
+
+inherit autotools vala
+
+FILES_${PN} += "${datadir}"
diff --git a/recipes/freesmartphone/vala-dbus-binding-tool-native_git.bb b/recipes/freesmartphone/vala-dbus-binding-tool-native_git.bb
deleted file mode 100644
index ebae18b628..0000000000
--- a/recipes/freesmartphone/vala-dbus-binding-tool-native_git.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-DESCRIPTION = "Vala DBus Binding Tool"
-SECTION = "console"
-LICENSE = "GPLv2"
-DEPENDS = "vala-native libgee-native intltool-native libxml2-native"
-PV = "0.1.0+gitr${SRCREV}"
-
-SRC_URI = "${FREESMARTPHONE_GIT}/vala-dbus-binding-tool.git;protocol=git;branch=master"
-S = "${WORKDIR}/git"
-
-inherit autotools_stage native
diff --git a/recipes/freesmartphone/zhone2_git.bb b/recipes/freesmartphone/zhone2_git.bb
new file mode 100644
index 0000000000..eb19fbaeec
--- /dev/null
+++ b/recipes/freesmartphone/zhone2_git.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "A demo phone application based on FSO"
+AUTHOR = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
+HOMEPAGE = "http://www.freesmartphone.org"
+SECTION = "x11"
+LICENSE = "GPLv2"
+DEPENDS = "edje-native vala-native evas ecore edje libeflvala libfsobasics libfsoframework libfso-glib"
+PV = "2.0.0+gitr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "${FREESMARTPHONE_GIT}/aurora.git;protocol=git;branch=master"
+S = "${WORKDIR}/git/zhone2"
+
+inherit autotools_stage
diff --git a/recipes/freesmartphone/zhone_git.bb b/recipes/freesmartphone/zhone_git.bb
index 0fcc25c5f6..1200d4097e 100644
--- a/recipes/freesmartphone/zhone_git.bb
+++ b/recipes/freesmartphone/zhone_git.bb
@@ -3,7 +3,7 @@ LICENSE = "GPL"
SECTION = "x11"
DEPENDS = "edje-native python-pyrex-native python-cython-native"
PV = "0.0.2+gitr${SRCREV}"
-PR = "r12"
+PR = "r13"
SRC_URI = "${FREESMARTPHONE_GIT}/zhone.git;protocol=git;branch=master \
file://80zhone"
@@ -19,7 +19,9 @@ do_install_append() {
FILES_${PN} += "${datadir} ${sysconfdir}"
RDEPENDS = "\
- task-python-efl \
+ python-edbus \
+ python-edje \
+ python-ecore \
python-logging \
python-textutils \
python-dbus \
diff --git a/recipes/freetype/freetype-2.3.9/fix-configure.patch b/recipes/freetype/freetype-2.3.9/fix-configure.patch
new file mode 100644
index 0000000000..ecd96738d4
--- /dev/null
+++ b/recipes/freetype/freetype-2.3.9/fix-configure.patch
@@ -0,0 +1,13 @@
+Index: freetype-2.3.6/builds/unix/configure.ac
+===================================================================
+--- freetype-2.3.6.orig/builds/unix/configure.ac
++++ freetype-2.3.6/builds/unix/configure.ac
+@@ -506,8 +506,6 @@ AC_SUBST([FT2_EXTRA_LIBS])
+ AC_SUBST([SYSTEM_ZLIB])
+
+
+-LT_INIT(win32-dll)
+-
+ AC_SUBST([hardcode_libdir_flag_spec])
+ AC_SUBST([wl])
+ AC_SUBST([build_libtool_libs])
diff --git a/recipes/freetype/freetype-2.3.9/libtool-tag.patch b/recipes/freetype/freetype-2.3.9/libtool-tag.patch
new file mode 100644
index 0000000000..2f096cdd46
--- /dev/null
+++ b/recipes/freetype/freetype-2.3.9/libtool-tag.patch
@@ -0,0 +1,20 @@
+--- freetype-2.3.6/builds/unix/unix-cc.in
++++ freetype-2.3.6/builds/unix/unix-cc.in
+@@ -88,7 +88,7 @@
+ #
+ #
+ CCraw := $(CC)
+-CC := $(LIBTOOL) --mode=compile $(CCraw)
++CC := $(LIBTOOL) --tag=CC --mode=compile $(CCraw)
+
+ # Linker flags.
+ #
+@@ -105,7 +105,7 @@
+
+ # Library linking
+ #
+-LINK_LIBRARY = $(LIBTOOL) --mode=link $(CCraw) -o $@ $(OBJECTS_LIST) \
++LINK_LIBRARY = $(LIBTOOL) --tag=CC --mode=link $(CCraw) -o $@ $(OBJECTS_LIST) \
+ -rpath $(libdir) -version-info $(version_info) \
+ $(LDFLAGS) -no-undefined \
+ # -export-symbols $(EXPORTS_LIST)
diff --git a/recipes/freetype/freetype-native_2.3.9.bb b/recipes/freetype/freetype-native_2.3.9.bb
new file mode 100644
index 0000000000..b5e8b307cd
--- /dev/null
+++ b/recipes/freetype/freetype-native_2.3.9.bb
@@ -0,0 +1,21 @@
+require freetype_${PV}.bb
+inherit native
+DEPENDS = ""
+FILESPATH = "${FILE_DIRNAME}/freetype-${PV}:${FILE_DIRNAME}/freetype:${FILE_DIRNAME}/files"
+
+EXTRA_OEMAKE=
+
+do_configure() {
+ (cd builds/unix && gnu-configize) || die "failure running gnu-configize"
+ oe_runconf
+}
+
+do_stage() {
+ autotools_stage_includes
+ oe_libinstall -so -a -C objs libfreetype ${STAGING_LIBDIR}
+}
+
+do_install() {
+ :
+}
+
diff --git a/recipes/freetype/freetype_2.3.9.bb b/recipes/freetype/freetype_2.3.9.bb
new file mode 100644
index 0000000000..eca74c0ce2
--- /dev/null
+++ b/recipes/freetype/freetype_2.3.9.bb
@@ -0,0 +1,41 @@
+DESCRIPTION = "Freetype font rendering library"
+SECTION = "libs"
+LICENSE = "freetype"
+PR = "r0"
+
+SRC_URI = "\
+ ${SOURCEFORGE_MIRROR}/freetype/freetype-${PV}.tar.bz2 \
+ file://no-hardcode.patch;patch=1 \
+ file://fix-configure.patch;patch=1 \
+ file://libtool-tag.patch;patch=1 \
+"
+S = "${WORKDIR}/freetype-${PV}"
+
+inherit autotools pkgconfig binconfig
+
+LIBTOOL = "${HOST_SYS}-libtool"
+EXTRA_OEMAKE = "'LIBTOOL=${LIBTOOL}'"
+EXTRA_OECONF = "--without-zlib"
+
+do_configure() {
+ cd builds/unix
+ libtoolize --force --copy
+ gnu-configize --force
+ aclocal -I .
+ autoconf
+ cd ${S}
+ oe_runconf
+}
+
+do_compile_prepend() {
+ ${BUILD_CC} -o objs/apinames src/tools/apinames.c
+}
+
+do_stage() {
+ export LIBTOOL='${LIBTOOL}'
+ autotools_stage_all
+ oe_libinstall -so -a -C objs libfreetype ${STAGING_LIBDIR}
+}
+
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${bindir}"
diff --git a/recipes/gcc/gcc-cross-initial_csl-arm-2007q3.bb b/recipes/gcc/gcc-cross-initial_csl-arm-2007q3.bb
index c9f03a7920..cfa64dc219 100644
--- a/recipes/gcc/gcc-cross-initial_csl-arm-2007q3.bb
+++ b/recipes/gcc/gcc-cross-initial_csl-arm-2007q3.bb
@@ -4,3 +4,9 @@ require gcc-cross-initial.inc
S = "${WORKDIR}/gcc-4.2"
EXTRA_OECONF += "--disable-libssp --disable-bootstrap --disable-libgomp --disable-libmudflap "
+
+# Hack till we fix *libc properly
+do_install_append() {
+ ln -sf ${CROSS_DIR}/lib/gcc/${TARGET_SYS}/${BINV}/include-fixed/* ${CROSS_DIR}/lib/gcc/${TARGET_SYS}/${BINV}/include/
+}
+
diff --git a/recipes/gcc/gcc-cross-intermediate_csl-arm-2007q3.bb b/recipes/gcc/gcc-cross-intermediate_csl-arm-2007q3.bb
index 5423626a99..35325901de 100644
--- a/recipes/gcc/gcc-cross-intermediate_csl-arm-2007q3.bb
+++ b/recipes/gcc/gcc-cross-intermediate_csl-arm-2007q3.bb
@@ -4,3 +4,9 @@ require gcc-cross-intermediate.inc
S = "${WORKDIR}/gcc-4.2"
EXTRA_OECONF += "--disable-libssp --disable-bootstrap --disable-libgomp --disable-libmudflap "
+
+# Hack till we fix *libc properly
+do_install_append() {
+ ln -sf ${CROSS_DIR}/lib/gcc/${TARGET_SYS}/${BINV}/include-fixed/* ${CROSS_DIR}/lib/gcc/${TARGET_SYS}/${BINV}/include/
+}
+
diff --git a/recipes/gcc/gcc-cross_csl-arm-2007q3.bb b/recipes/gcc/gcc-cross_csl-arm-2007q3.bb
index 34bd251a12..adf7f5ae4c 100644
--- a/recipes/gcc/gcc-cross_csl-arm-2007q3.bb
+++ b/recipes/gcc/gcc-cross_csl-arm-2007q3.bb
@@ -1,4 +1,4 @@
-PR = "r5"
+PR = "r6"
require gcc-csl-arm-2007q3.inc
require gcc-cross4.inc
diff --git a/recipes/gcc/gcc-svn.inc b/recipes/gcc/gcc-svn.inc
index 6583378233..9f97202165 100644
--- a/recipes/gcc/gcc-svn.inc
+++ b/recipes/gcc/gcc-svn.inc
@@ -1,7 +1,7 @@
DEFAULT_PREFERENCE = "-999"
ARM_INSTRUCTION_SET = "arm"
-SRCREV = "156268"
+SRCREV = "156750"
require gcc-common.inc
diff --git a/recipes/gcc/gcc_csl-arm-2007q3.bb b/recipes/gcc/gcc_csl-arm-2007q3.bb
index cc7540af15..2df12ef9ef 100644
--- a/recipes/gcc/gcc_csl-arm-2007q3.bb
+++ b/recipes/gcc/gcc_csl-arm-2007q3.bb
@@ -1,4 +1,4 @@
-PR = "r3"
+PR = "r4"
require gcc-${PV}.inc
require gcc-configure-target.inc
diff --git a/recipes/gd/gd_2.0.33.bb b/recipes/gd/gd_2.0.33.bb
deleted file mode 100644
index 7e47b0883e..0000000000
--- a/recipes/gd/gd_2.0.33.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SECTION = "libs"
-LICENSE = "GD"
-DESCRIPTION = "gd is a library used to create PNG, JPEG, or WBMP images."
-DEPENDS = "libpng jpeg zlib"
-PR = "r2"
-
-SRC_URI = "http://www.boutell.com/gd/http/gd-${PV}.tar.gz"
-S = "${WORKDIR}/gd-${PV}"
-
-inherit autotools binconfig gettext
-
-EXTRA_OECONF += " --with-zlib=${STAGING_LIBDIR}/.. \
- --with-png=${STAGING_LIBDIR}/.. \
- --with-jpeg=${STAGING_LIBDIR}/.. \
- --without-freetype \
- --without-fontconfig \
- --without-xpm \
- --without-x"
-
-EXTRA_OEMAKE = 'LDFLAGS="${LDFLAGS}"'
-
-headers = "gd.h gdcache.h gd_io.h gdfx.h gdfontmb.h \
- gdfontg.h gdfontl.h gdfonts.h gdfontt.h"
-
-do_stage () {
- oe_libinstall -so -a libgd ${STAGING_LIBDIR}/
- for i in ${headers}; do
- install -m 0644 $i ${STAGING_INCDIR}/
- done
-}
diff --git a/recipes/gd/gd_2.0.35+2.0.36rc1.bb b/recipes/gd/gd_2.0.35+2.0.36rc1.bb
new file mode 100644
index 0000000000..efba70e9d5
--- /dev/null
+++ b/recipes/gd/gd_2.0.35+2.0.36rc1.bb
@@ -0,0 +1,33 @@
+SECTION = "libs"
+LICENSE = "GD"
+DESCRIPTION = "gd is a library used to create PNG, JPEG, or WBMP images."
+DEPENDS = "libpng jpeg zlib"
+PR = "r2"
+
+SRC_URI = "http://www.libgd.org/releases/gd-2.0.36RC1.tar.gz;name=src"
+SRC_URI[src.md5sum] = "39ac48e6d5e0012a3bd2248a0102f209"
+SRC_URI[src.sha256sum] = "dd7c1795271221b9237769b96b8cec7fbdc5db7b8954d864ead51fc1296a6ac8"
+
+S = "${WORKDIR}/gd-2.0.36RC1"
+
+inherit autotools binconfig gettext
+
+EXTRA_OECONF += " --with-zlib=${STAGING_LIBDIR}/.. \
+ --with-png=${STAGING_LIBDIR}/.. \
+ --with-jpeg=${STAGING_LIBDIR}/.. \
+ --without-freetype \
+ --without-fontconfig \
+ --without-xpm \
+ --without-x"
+
+EXTRA_OEMAKE = 'LDFLAGS="${LDFLAGS}"'
+
+headers = "gd.h gdcache.h gd_io.h gdfx.h gdfontmb.h \
+ gdfontg.h gdfontl.h gdfonts.h gdfontt.h"
+
+do_stage () {
+ oe_libinstall -so -a libgd ${STAGING_LIBDIR}/
+ for i in ${headers}; do
+ install -m 0644 $i ${STAGING_INCDIR}/
+ done
+}
diff --git a/recipes/gdal/gdal_1.5.2.bb b/recipes/gdal/gdal_1.5.2.bb
index a92e40fadc..f76ba571fa 100644
--- a/recipes/gdal/gdal_1.5.2.bb
+++ b/recipes/gdal/gdal_1.5.2.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "GDAL is a translator library for raster geospatial data formats"
HOMEPAGE = "http://www.gdal.org/"
LICENSE = "MIT"
DEPENDS = "proj-4 sqlite3 zlib jpeg libpng tiff giflib curl jasper expat"
-PR = "r2"
+PR = "r3"
SRC_URI = "http://www.gdal.org/dl/${P}.tar.gz \
file://gdal_config.patch;patch=1 \
@@ -33,8 +33,3 @@ FILES_${PN}-dev += "${datadir}"
do_compile() {
oe_runmake default
}
-
-do_stage() {
- autotools_stage_all
-}
-
diff --git a/recipes/gdb/gdb-cross-sdk_6.6.bb b/recipes/gdb/gdb-cross-sdk_6.6.bb
index 656119cf93..aa6e7563cf 100644
--- a/recipes/gdb/gdb-cross-sdk_6.6.bb
+++ b/recipes/gdb/gdb-cross-sdk_6.6.bb
@@ -1,8 +1,9 @@
require gdb-cross.inc
+LICENSE = "GPLv2"
inherit sdk
-DEPENDS = "ncurses-sdk"
+DEPENDS = "ncurses-sdk zlib-sdk"
PR = "r3"
diff --git a/recipes/gdb/gdb-cross-sdk_6.8.bb b/recipes/gdb/gdb-cross-sdk_6.8.bb
index 6d6fba7993..ff4423ec44 100644
--- a/recipes/gdb/gdb-cross-sdk_6.8.bb
+++ b/recipes/gdb/gdb-cross-sdk_6.8.bb
@@ -4,7 +4,7 @@ LICENSE = "GPLv3"
SRC_URI += "file://gcc-4.3-build-error.patch;patch=1;pnum=0 \
file://gdb-6.8-fix-compile-karmic.patch;patch=1"
-DEPENDS = "ncurses-sdk"
+DEPENDS = "ncurses-sdk zlib-sdk"
inherit sdk
diff --git a/recipes/gdb/gdb-cross-sdk_7.0.bb b/recipes/gdb/gdb-cross-sdk_7.0.bb
index 10e4b1462f..47b8faddb1 100644
--- a/recipes/gdb/gdb-cross-sdk_7.0.bb
+++ b/recipes/gdb/gdb-cross-sdk_7.0.bb
@@ -4,7 +4,7 @@ LICENSE = "GPLv3"
SRC_URI += "\
file://gdb-6.8-fix-compile-karmic.patch;patch=1"
-DEPENDS = "ncurses-sdk"
+DEPENDS = "ncurses-sdk zlib-sdk"
inherit sdk
diff --git a/recipes/gdb/gdb-cross_6.3.bb b/recipes/gdb/gdb-cross_6.3.bb
index 5b27e09959..fd2f97245c 100644
--- a/recipes/gdb/gdb-cross_6.3.bb
+++ b/recipes/gdb/gdb-cross_6.3.bb
@@ -1,4 +1,5 @@
require gdb-cross.inc
+LICENSE = "GPLv2"
inherit cross
diff --git a/recipes/gdb/gdb-cross_6.4.bb b/recipes/gdb/gdb-cross_6.4.bb
index e4946b0fe1..2e6de0895e 100644
--- a/recipes/gdb/gdb-cross_6.4.bb
+++ b/recipes/gdb/gdb-cross_6.4.bb
@@ -1,4 +1,5 @@
require gdb-cross.inc
+LICENSE = "GPLv2"
inherit cross
diff --git a/recipes/gdb/gdb-cross_6.6.bb b/recipes/gdb/gdb-cross_6.6.bb
index 570dd52859..a1851f7777 100644
--- a/recipes/gdb/gdb-cross_6.6.bb
+++ b/recipes/gdb/gdb-cross_6.6.bb
@@ -1,4 +1,6 @@
require gdb-cross.inc
+LICENSE = "GPLv2"
+
inherit cross
PR = "r3"
diff --git a/recipes/gdb/gdb-cross_6.7.1.bb b/recipes/gdb/gdb-cross_6.7.1.bb
index adccebe115..0681029694 100644
--- a/recipes/gdb/gdb-cross_6.7.1.bb
+++ b/recipes/gdb/gdb-cross_6.7.1.bb
@@ -1,4 +1,6 @@
require gdb-cross.inc
+LICENSE = "GPLv3"
+
inherit cross
DEFAULT_PREFERENCE_avr32 = "99"
diff --git a/recipes/gdb/gdb_6.3.bb b/recipes/gdb/gdb_6.3.bb
index 988cfb4c44..69d9e7117d 100644
--- a/recipes/gdb/gdb_6.3.bb
+++ b/recipes/gdb/gdb_6.3.bb
@@ -1,3 +1,4 @@
require gdb.inc
+LICENSE = "GPLv2"
PR = "r4"
diff --git a/recipes/gdb/gdb_6.4.bb b/recipes/gdb/gdb_6.4.bb
index be40f3f12b..b3c53a27ae 100644
--- a/recipes/gdb/gdb_6.4.bb
+++ b/recipes/gdb/gdb_6.4.bb
@@ -1,3 +1,4 @@
require gdb.inc
+LICENSE = "GPLv2"
PR = "r2"
diff --git a/recipes/gdb/gdb_6.6.bb b/recipes/gdb/gdb_6.6.bb
index e4502a648e..501e1164ff 100644
--- a/recipes/gdb/gdb_6.6.bb
+++ b/recipes/gdb/gdb_6.6.bb
@@ -1,4 +1,5 @@
require gdb.inc
+LICENSE = "GPLv2"
PR = "r5"
diff --git a/recipes/gdb/gdb_6.7.1.bb b/recipes/gdb/gdb_6.7.1.bb
index fedf2bf1f1..fb9ed3f1bf 100644
--- a/recipes/gdb/gdb_6.7.1.bb
+++ b/recipes/gdb/gdb_6.7.1.bb
@@ -1,4 +1,5 @@
require gdb.inc
+LICENSE = "GPLv3"
PR = "r1"
diff --git a/recipes/gettext/gettext-0.17/m4_copy.patch b/recipes/gettext/gettext-0.17/m4_copy.patch
new file mode 100644
index 0000000000..2502221379
--- /dev/null
+++ b/recipes/gettext/gettext-0.17/m4_copy.patch
@@ -0,0 +1,53 @@
+@ -0,0 +1,52 @@
+Re: _AC_LANG_OPENMP and m4_copy
+
+Bruno Haible
+Wed, 03 Dec 2008 16:33:38 -0800
+
+Hello Ralf,
+
+Thanks for the report and fix.
+
+Eric Blake wrote:
+> Looks fine to me, but let Bruno chime in before committing. I agree with
+> your approach of fixing gnulib to avoid the problem by not competing when
+> a new-enough autoconf provides the macro
+
+I agree with this approach. But the patch introduces the use of another
+undocumented macro, namely 'm4_version_prereq'. I prefer to get away without
+it, and am committing this:
+
+
+2008-12-03 Ralf Wildenhues <[EMAIL PROTECTED]>
+ Bruno Haible <[EMAIL PROTECTED]>
+
+ * m4/openmp.m4 (AC_OPENMP): Do not define with Autoconf 2.62 or newer.
+
+
+--- gettext-0.17.old/gettext-tools/gnulib-m4/openmp.m4 2007-05-27 21:50:22.000000000 +0200
++++ gettext-0.17/gettext-tools/gnulib-m4/openmp.m4 2010-02-10 16:48:58.000000000 +0100
+@@ -1,11 +1,15 @@
+-# openmp.m4 serial 4
+-dnl Copyright (C) 2006-2007 Free Software Foundation, Inc.
++# openmp.m4 serial 5
++dnl Copyright (C) 2006-2008 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+ dnl with or without modifications, as long as this notice is preserved.
+
+ dnl This file can be removed once we assume autoconf >= 2.62.
+
++dnl Expand to nothing in autoconf >= 2.62. m4_copy has a different
++dnl semantic in autoconf > 2.63.
++m4_ifdef([AC_OPENMP], [], [
++
+ # _AC_LANG_OPENMP
+ # ---------------
+ # Expands to some language dependent source code for testing the presence of
+@@ -90,3 +94,6 @@
+ fi
+ AC_SUBST([OPENMP_]_AC_LANG_PREFIX[FLAGS])
+ ])
++
++])
++
diff --git a/recipes/gettext/gettext_0.17.bb b/recipes/gettext/gettext_0.17.bb
index 2f7faa70fa..36a99f6dc7 100644
--- a/recipes/gettext/gettext_0.17.bb
+++ b/recipes/gettext/gettext_0.17.bb
@@ -2,9 +2,9 @@ DESCRIPTION = "The GNU internationalization library."
HOMEPAGE = "http://www.gnu.org/software/gettext/gettext.html"
SECTION = "libs"
LICENSE = "GPLv3"
-PR = "r5"
+PR = "r6"
DEPENDS = "gettext-native virtual/libiconv ncurses expat"
-DEPENDS_virtclass-native = ""
+DEPENDS_virtclass-native = "libxml2-native"
PROVIDES = "virtual/libintl"
PROVIDES_virtclass-native = ""
RCONFLICTS_gettext-libintl = "proxy-libintl"
@@ -16,6 +16,7 @@ SRC_URI = "${GNU_MIRROR}/gettext/gettext-${PV}.tar.gz \
file://wchar-uclibc.patch;patch=1 \
file://use_open_properly.patch;patch=1 \
file://gettext-autoconf-lib-link-no-L.patch;patch=1 \
+ file://m4_copy.patch;patch=1 \
"
SRC_URI_append_linux-uclibc = " file://gettext-error_print_progname.patch;patch=1"
diff --git a/recipes/gftp/gftp/gftp-2.0.18-188252.patch b/recipes/gftp/gftp/gftp-2.0.18-188252.patch
new file mode 100644
index 0000000000..27b3d48ac8
--- /dev/null
+++ b/recipes/gftp/gftp/gftp-2.0.18-188252.patch
@@ -0,0 +1,77 @@
+Gentoo patch from http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/net-ftp/gftp/files/gftp-2.0.18-188252.patch?rev=1.1
+
+addresses: CVE-2007-3961, CVE-2007-3962
+
+diff --exclude-from=/home/dang/.scripts/diffrc -up -bruN gftp-2.0.18.orig/lib/fsplib/fsplib.c gftp-2.0.18/lib/fsplib/fsplib.c
+--- gftp-2.0.18.orig/lib/fsplib/fsplib.c 2005-01-18 21:03:45.000000000 -0500
++++ gftp-2.0.18/lib/fsplib/fsplib.c 2007-09-21 16:03:01.000000000 -0400
+@@ -612,7 +612,7 @@ int fsp_readdir_r(FSP_DIR *dir,struct di
+ entry->d_reclen = fentry.reclen;
+ strncpy(entry->d_name,fentry.name,MAXNAMLEN);
+
+- if (fentry.namlen > MAXNAMLEN)
++ if (fentry.namlen >= MAXNAMLEN)
+ {
+ entry->d_name[MAXNAMLEN + 1 ] = '\0';
+ #ifdef HAVE_NAMLEN
+@@ -680,9 +680,19 @@ int fsp_readdir_native(FSP_DIR *dir,FSP_
+ /* skip file date and file size */
+ dir->dirpos += 9;
+ /* read file name */
+- entry->name[255 + 1] = '\0';
++ entry->name[255] = '\0';
+ strncpy(entry->name,(char *)( dir->data + dir->dirpos ),MAXNAMLEN);
++ /* check for ASCIIZ encoded filename */
++ if (memchr(dir->data + dir->dirpos,0,dir->datasize - dir->dirpos) != NULL)
++ {
+ namelen = strlen( (char *) dir->data+dir->dirpos);
++ }
++ else
++ {
++ /* \0 terminator not found at end of filename */
++ *result = NULL;
++ return 0;
++ }
+ /* skip over file name */
+ dir->dirpos += namelen +1;
+
+@@ -709,12 +719,12 @@ int fsp_readdir_native(FSP_DIR *dir,FSP_
+
+ struct dirent * fsp_readdir(FSP_DIR *dirp)
+ {
+- static struct dirent entry;
++ static dirent_workaround entry;
+ struct dirent *result;
+
+
+ if (dirp == NULL) return NULL;
+- if ( fsp_readdir_r(dirp,&entry,&result) )
++ if ( fsp_readdir_r(dirp,&entry.dirent,&result) )
+ return NULL;
+ else
+ return result;
+diff --exclude-from=/home/dang/.scripts/diffrc -up -bruN gftp-2.0.18.orig/lib/fsplib/fsplib.h gftp-2.0.18/lib/fsplib/fsplib.h
+--- gftp-2.0.18.orig/lib/fsplib/fsplib.h 2005-01-18 21:04:02.000000000 -0500
++++ gftp-2.0.18/lib/fsplib/fsplib.h 2007-09-21 15:56:37.000000000 -0400
+@@ -1,6 +1,8 @@
+ #ifndef _FSPLIB_H
+ #define _FSPLIB_H 1
+ #include <time.h>
++#include <stddef.h>
++
+ /* The FSP v2 protocol support library - public interface */
+
+ /*
+@@ -138,6 +140,12 @@ typedef struct FSP_FILE {
+ unsigned int pos; /* position of next packet */
+ } FSP_FILE;
+
++
++typedef union dirent_workaround {
++ struct dirent dirent;
++ char fill[offsetof (struct dirent, d_name) + MAXNAMLEN + 1];
++} dirent_workaround;
++
+ /* function prototypes */
+
+ /* session management */
diff --git a/recipes/gftp/gftp/gftp-2.0.18-ipv6.patch b/recipes/gftp/gftp/gftp-2.0.18-ipv6.patch
new file mode 100644
index 0000000000..05454211b8
--- /dev/null
+++ b/recipes/gftp/gftp/gftp-2.0.18-ipv6.patch
@@ -0,0 +1,33 @@
+2006-7-19 Brian Masney <masneyb@gftp.org>
+ * lib/misc.c (gftp_copy_request) - fixes when doing an IPv6 transfer or
+ using ignore PASV address (from (from Aurelien Jarno) (closes GNOME bugzilla #169671)
+
+--- a/trunk/lib/misc.c 2006/07/20 02:32:58 784
++++ b/trunk/lib/misc.c 2006/07/20 02:37:45 785
+@@ -568,8 +568,24 @@
+ newreq->use_proxy = req->use_proxy;
+ newreq->logging_function = req->logging_function;
+ newreq->ai_family = req->ai_family;
+- newreq->free_hostp = 0;
+- newreq->hostp = NULL;
++
++ if (req->hostp)
++ {
++#if defined (HAVE_GETADDRINFO) && defined (HAVE_GAI_STRERROR)
++ newreq->hostp = g_malloc (sizeof(struct addrinfo));
++ memcpy(newreq->hostp, req->hostp, sizeof(struct addrinfo));
++ if (req->current_hostp)
++ newreq->current_hostp = newreq->hostp + (req->current_hostp - req->hostp);
++#else
++ newreq->hostp = g_malloc (sizeof(struct hostent));
++ memcpy(newreq->hostp, req->hostp, sizeof(struct hostent));
++ newreq->host = req->host;
++ newreq->curhost = req->curhost;
++#endif
++ }
++ else
++ newreq->hostp = NULL;
++ newreq->free_hostp = 1;
+
+ gftp_copy_local_options (&newreq->local_options_vars,
+ &newreq->local_options_hash,
diff --git a/recipes/gftp/gftp/gftp-2.0.18-mkinstalldir.patch b/recipes/gftp/gftp/gftp-2.0.18-mkinstalldir.patch
new file mode 100644
index 0000000000..e2781bd928
--- /dev/null
+++ b/recipes/gftp/gftp/gftp-2.0.18-mkinstalldir.patch
@@ -0,0 +1,14 @@
+Index: gftp-2.0.18/po/Makefile.in.in
+===================================================================
+--- gftp-2.0.18.orig/po/Makefile.in.in 2010-03-16 14:07:50.311553658 +0800
++++ gftp-2.0.18/po/Makefile.in.in 2010-03-16 14:08:08.977119831 +0800
+@@ -28,8 +28,7 @@
+
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+-MKINSTALLDIRS = @MKINSTALLDIRS@
+-mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
++mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+
+ GMSGFMT = @GMSGFMT@
+ MSGFMT = @MSGFMT@
diff --git a/recipes/gftp/gftp/gftp-2.0.18-ssh2-read.patch b/recipes/gftp/gftp/gftp-2.0.18-ssh2-read.patch
new file mode 100644
index 0000000000..765741be7b
--- /dev/null
+++ b/recipes/gftp/gftp/gftp-2.0.18-ssh2-read.patch
@@ -0,0 +1,13 @@
+--- gftp-2.0.18.orig/lib/sshv2.c
++++ gftp-2.0.18/lib/sshv2.c
+@@ -1841,7 +1841,7 @@
+ {
+ int ret;
+
+- if ((ret = sshv2_open_file (request, file, startsize, SSH_FXP_OPEN)) < 0)
++ if ((ret = sshv2_open_file (request, file, startsize, SSH_FXF_READ)) < 0)
+ return (ret);
+
+ return (sshv2_get_file_size (request, file));
+
+
diff --git a/recipes/gftp/gftp/gftp-2.0.18-ssl-wildcardcert.patch b/recipes/gftp/gftp/gftp-2.0.18-ssl-wildcardcert.patch
new file mode 100644
index 0000000000..202b2931c9
--- /dev/null
+++ b/recipes/gftp/gftp/gftp-2.0.18-ssl-wildcardcert.patch
@@ -0,0 +1,22 @@
+--- lib/sslcommon.c 2005-01-04 14:32:11.000000000 +0100
++++ lib/sslcommon.c 2006-06-19 15:23:13.000000000 +0200
+@@ -182,7 +182,18 @@
+ X509_NAME_get_text_by_NID (subj, NID_commonName, data, 256) > 0)
+ {
+ data[sizeof (data) - 1] = '\0';
+- if (strcasecmp (data, request->hostname) != 0)
++ /* Check for wildcard CN (must begin with *.) */
++ if (strncmp(data, "*.", 2) == 0)
++ {
++ int hostname_len = strlen(data) - 1;
++ if (strlen(request->hostname) > hostname_len &&
++ strcasecmp (&(data[1]), &(request->hostname[strlen(request->hostname) - hostname_len])) == 0)
++ ok = 1;
++ }
++ else if (strcasecmp (data, request->hostname) == 0)
++ ok = 1;
++
++ if (!ok)
+ {
+ request->logging_function (gftp_logging_error, request,
+ _("ERROR: The host in the SSL certificate (%s) does not match the host that we connected to (%s). Aborting connection.\n"),
diff --git a/recipes/gftp/gftp_2.0.18.bb b/recipes/gftp/gftp_2.0.18.bb
index f5705b1357..fa73486d4a 100644
--- a/recipes/gftp/gftp_2.0.18.bb
+++ b/recipes/gftp/gftp_2.0.18.bb
@@ -6,10 +6,15 @@ DESCRIPTION = "Free multithreaded file transfer client (FTP/HTTP/SSH)."
HOMEPAGE="http://www.gftp.org/"
SECTION = "x11/network"
LICENSE="GPL"
-PR = "r1"
+PR = "r4"
SRC_URI="http://www.gftp.org/gftp-${PV}.tar.bz2 \
- file://configure.patch;patch=1"
+ file://configure.patch;patch=1 \
+ file://gftp-2.0.18-188252.patch;patch=1 \
+ file://gftp-2.0.18-ipv6.patch;patch=1;pnum=2 \
+ file://gftp-2.0.18-ssh2-read.patch;patch=1 \
+ file://gftp-2.0.18-ssl-wildcardcert.patch;patch=1;pnum=0 \
+ file://gftp-2.0.18-mkinstalldir.patch;patch=1 "
DEPENDS="gtk+ openssl"
diff --git a/recipes/gimp/babl_git.bb b/recipes/gimp/babl_git.bb
new file mode 100644
index 0000000000..d7075a560e
--- /dev/null
+++ b/recipes/gimp/babl_git.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Babl is a dynamic, any to any, pixel format conversion library."
+LICENSE = "LGPL"
+
+SRCREV = "5b1129a76f2f91d5f5503b078f975e55d9753312"
+PV = "0.1.3"
+PR = "r1+gitr${SRCREV}"
+PE = "1"
+
+inherit gnome
+
+SRC_URI = "git://git.gnome.org/babl;protocol=git \
+"
+
+S = "${WORKDIR}/git"
+
+FILES_${PN} += "${libdir}/babl-*/"
+FILES_${PN}-dbg += "${libdir}/babl-*/.debug/"
+
+
diff --git a/recipes/gimp/gegl_git.bb b/recipes/gimp/gegl_git.bb
new file mode 100644
index 0000000000..8952cab90e
--- /dev/null
+++ b/recipes/gimp/gegl_git.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "GEGL (Generic Graphics Library) is a graph based image processing framework."
+LICENSE = "LGPL"
+DEPENDS = "babl librsvg glib-2.0 gtk+ pango cairo expat zlib libpng jpeg virtual/libsdl"
+
+SRCREV = "fc674b5420cbc48f4dc6224381b8799db4e7afc4"
+PV = "0.1.3"
+PE = "1"
+PR = "r1+gitr${SRCREV}"
+
+inherit gnome
+
+SRC_URI = "git://git.gnome.org/gegl;protocol=git \
+"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECONF = "--disable-docs "
+
+FILES_${PN} += "${libdir}/gegl-*"
+FILES_${PN}-dbg += "${libdir}/gegl-*/.debug"
+
diff --git a/recipes/gimp/gegl_svn.bb b/recipes/gimp/gegl_svn.bb
index af2e79aaaa..9562ffb456 100644
--- a/recipes/gimp/gegl_svn.bb
+++ b/recipes/gimp/gegl_svn.bb
@@ -19,8 +19,3 @@ EXTRA_OECONF = "--disable-docs "
FILES_${PN} += "${libdir}/gegl-0.0"
FILES_${PN}-dbg += "${libdir}/gegl-0.0/.debug"
-
-do_stage() {
- autotools_stage_all
-}
-
diff --git a/recipes/git/files/autotools.patch b/recipes/git/files/autotools.patch
deleted file mode 100644
index 0666118cde..0000000000
--- a/recipes/git/files/autotools.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Index: git-1.5.2.3/configure.ac
-===================================================================
---- git-1.5.2.3.orig/configure.ac 2007-07-02 10:11:39.000000000 +0200
-+++ git-1.5.2.3/configure.ac 2007-08-04 00:02:13.000000000 +0200
-@@ -235,7 +235,8 @@
- else if (strcmp(buf, "12345"))
- exit(2);]])],
- [ac_cv_c_c99_format=yes],
-- [ac_cv_c_c99_format=no])
-+ [ac_cv_c_c99_format=no],
-+ [ac_cv_c_c99_format=yes])
- ])
- if test $ac_cv_c_c99_format = no; then
- NO_C99_FORMAT=YesPlease
-Index: git-1.5.2.3/config.mak.in
-===================================================================
---- git-1.5.2.3.orig/config.mak.in 2007-07-02 10:11:39.000000000 +0200
-+++ git-1.5.2.3/config.mak.in 2007-08-04 00:07:04.000000000 +0200
-@@ -3,6 +3,7 @@
-
- CC = @CC@
- CFLAGS = @CFLAGS@
-+LDFLAGS = @LDFLAGS@
- AR = @AR@
- TAR = @TAR@
- #INSTALL = @INSTALL@ # needs install-sh or install.sh in sources
diff --git a/recipes/git/files/snprintf-returns-bogus.patch b/recipes/git/files/snprintf-returns-bogus.patch
deleted file mode 100644
index 568bb1f56b..0000000000
--- a/recipes/git/files/snprintf-returns-bogus.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- git-1.6.0.4-orig/configure.ac 2008-11-18 15:28:03.000000000 -0500
-+++ git-1.6.0.4/configure.ac 2008-11-18 15:30:45.000000000 -0500
-@@ -373,7 +373,8 @@
- if (snprintf(buf, 3, "%s", "12345") != 5
- || strcmp(buf, "12")) return 1]])],
- [ac_cv_snprintf_returns_bogus=no],
-- [ac_cv_snprintf_returns_bogus=yes])
-+ [ac_cv_snprintf_returns_bogus=yes],
-+ [ac_cv_snprintf_returns_bogus=no])
- ])
- if test $ac_cv_snprintf_returns_bogus = yes; then
- SNPRINTF_RETURNS_BOGUS=UnfortunatelyYes
diff --git a/recipes/git/git-native_1.6.0.4.bb b/recipes/git/git-native_1.6.0.4.bb
deleted file mode 100644
index 71b111be53..0000000000
--- a/recipes/git/git-native_1.6.0.4.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require git.inc
-inherit native
-DEPENDS = "openssl-native curl-native zlib-native expat-native"
-PR = "r4"
diff --git a/recipes/git/git-native_1.7.0.2.bb b/recipes/git/git-native_1.7.0.2.bb
new file mode 100644
index 0000000000..b55070aa71
--- /dev/null
+++ b/recipes/git/git-native_1.7.0.2.bb
@@ -0,0 +1,8 @@
+require git.inc
+inherit native
+DEPENDS = "openssl-native curl-native zlib-native expat-native"
+PR = "r4"
+SRC_URI[src.md5sum] = "76518fa774b36de81d160b85fa4f19c1"
+SRC_URI[src.sha256sum] = "5601df7fc282fdd66de196b282694eb77dcfc50438f01587de144b3ead1a6b2f"
+
+EXTRA_OECONF_append = " --without-python"
diff --git a/recipes/git/git.inc b/recipes/git/git.inc
index fb88fd4135..8275adb1a2 100644
--- a/recipes/git/git.inc
+++ b/recipes/git/git.inc
@@ -2,9 +2,8 @@ DESCRIPTION = "The git revision control system used by the Linux kernel develope
SECTION = "console/utils"
LICENSE = "GPL"
-SRC_URI = "http://www.kernel.org/pub/software/scm/git/git-${PV}.tar.bz2 \
- file://autotools.patch;patch=1 \
- "
+SRC_URI = "http://www.kernel.org/pub/software/scm/git/git-${PV}.tar.bz2;name=src"
+
S = "${WORKDIR}/git-${PV}"
inherit autotools
diff --git a/recipes/git/git_1.6.0.4.bb b/recipes/git/git_1.6.0.4.bb
deleted file mode 100644
index e839ab960a..0000000000
--- a/recipes/git/git_1.6.0.4.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require git.inc
-
-SRC_URI += "file://snprintf-returns-bogus.patch;patch=1"
-
-DEPENDS = "openssl curl zlib expat"
-RDEPENDS = "perl perl-module-file-path cpio findutils sed"
-PR = "r4"
-
-FILES_${PN}-dbg += "${libexecdir}/git-core/.debug"
diff --git a/recipes/git/git_1.7.0.2.bb b/recipes/git/git_1.7.0.2.bb
new file mode 100644
index 0000000000..40052bb742
--- /dev/null
+++ b/recipes/git/git_1.7.0.2.bb
@@ -0,0 +1,13 @@
+require git.inc
+
+SRC_URI[src.md5sum] = "76518fa774b36de81d160b85fa4f19c1"
+SRC_URI[src.sha256sum] = "5601df7fc282fdd66de196b282694eb77dcfc50438f01587de144b3ead1a6b2f"
+
+EXTRA_OECONF += "ac_cv_snprintf_returns_bogus=no ac_cv_c_c99_format=yes"
+
+
+DEPENDS = "openssl curl zlib expat"
+RDEPENDS = "perl perl-module-file-path cpio findutils sed"
+PR = "r4"
+
+FILES_${PN}-dbg += "${libexecdir}/git-core/.debug"
diff --git a/recipes/glib-2.0/glib-2.0-2.20.3/atomic-thumb.patch b/recipes/glib-2.0/glib-2.0-2.20.3/atomic-thumb.patch
new file mode 100644
index 0000000000..edb6f35956
--- /dev/null
+++ b/recipes/glib-2.0/glib-2.0-2.20.3/atomic-thumb.patch
@@ -0,0 +1,56 @@
+# gatomic.c uses SWP, which doesn't work in Thumb mode.
+# Put that source file into a separate convenience library which is always built as ARM.
+
+---
+ glib/Makefile.am | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+--- glib-2.20.3.orig/glib/Makefile.am
++++ glib-2.20.3/glib/Makefile.am
+@@ -78,10 +78,11 @@ BUILT_EXTRA_DIST = \
+ glib.rc \
+ galias.h \
+ galiasdef.c
+
+ lib_LTLIBRARIES = libglib-2.0.la
++noinst_LTLIBRARIES = libgatomic.la
+
+ if OS_WIN32_AND_DLL_COMPILATION
+ if MS_LIB_AVAILABLE
+ noinst_DATA = glib-2.0.lib
+
+@@ -94,14 +95,18 @@ install-ms-lib:
+ $(install_ms_lib_cmd)
+
+ uninstall-ms-lib:
+ $(uninstall_ms_lib_cmd)
+
++libgatomic_la_CFLAGS = $(CFLAGS) -mno-thumb
++
++libgatomic_la_SOURCES = \
++ gatomic.c
++
+ libglib_2_0_la_SOURCES = \
+ garray.c \
+ gasyncqueue.c \
+- gatomic.c \
+ gbacktrace.c \
+ gbase64.c \
+ gbookmarkfile.c \
+ gbsearcharray.h \
+ gcache.c \
+@@ -286,12 +291,12 @@ endif
+ else
+ pcre_lib =
+ pcre_inc =
+ endif
+
+-libglib_2_0_la_LIBADD = libcharset/libcharset.la $(printf_la) @GIO@ @GSPAWN@ @PLATFORMDEP@ @ICONV_LIBS@ @G_LIBS_EXTRA@ $(pcre_lib)
+-libglib_2_0_la_DEPENDENCIES = libcharset/libcharset.la $(printf_la) @GIO@ @GSPAWN@ @PLATFORMDEP@ $(glib_win32_res) $(glib_def)
++libglib_2_0_la_LIBADD = libcharset/libcharset.la $(printf_la) @GIO@ @GSPAWN@ @PLATFORMDEP@ @ICONV_LIBS@ @G_LIBS_EXTRA@ $(pcre_lib) libgatomic.la
++libglib_2_0_la_DEPENDENCIES = libcharset/libcharset.la $(printf_la) @GIO@ @GSPAWN@ @PLATFORMDEP@ $(glib_win32_res) $(glib_def) libgatomic.la
+
+ libglib_2_0_la_LDFLAGS = \
+ $(glib_win32_res_ldflag) \
+ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+ -export-dynamic $(no_undefined) $(export_symbols)
diff --git a/recipes/glib-2.0/glib-2.0-2.20.3/configure-libtool.patch b/recipes/glib-2.0/glib-2.0-2.20.3/configure-libtool.patch
new file mode 100644
index 0000000000..6056f2f97c
--- /dev/null
+++ b/recipes/glib-2.0/glib-2.0-2.20.3/configure-libtool.patch
@@ -0,0 +1,45 @@
+---
+ configure.in | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- glib-2.20.3.orig/configure.in
++++ glib-2.20.3/configure.in
+@@ -1302,11 +1302,11 @@ G_MODULE_PLUGIN_LIBS=
+ if test x"$glib_native_win32" = xyes; then
+ dnl No use for this on Win32
+ G_MODULE_LDFLAGS=
+ else
+ export SED
+- G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
++ G_MODULE_LDFLAGS=`($host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
+ fi
+ dnl G_MODULE_IMPL= don't reset, so cmd-line can override
+ G_MODULE_NEED_USCORE=0
+ G_MODULE_BROKEN_RTLD_GLOBAL=0
+ G_MODULE_HAVE_DLERROR=0
+@@ -1367,11 +1367,11 @@ if test "$G_MODULE_IMPL" = "G_MODULE_IMP
+ LDFLAGS_orig="$LDFLAGS"
+ LIBS="$G_MODULE_LIBS $LIBS"
+ LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
+ dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
+ echo "void glib_plugin_test(void) { }" > plugin.c
+- ${SHELL} ./libtool --mode=compile ${CC} -shared \
++ ${SHELL} $host_alias-libtool --mode=compile ${CC} -shared \
+ -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null
+ AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
+ glib_cv_rtldglobal_broken,[
+ AC_TRY_RUN([
+ #include <dlfcn.h>
+@@ -1441,11 +1441,11 @@ else
+ G_MODULE_SUPPORTED=true
+ fi
+
+ AC_MSG_CHECKING(for the suffix of module shared libraries)
+ export SED
+-shrext_cmds=`./libtool --config | grep '^shrext_cmds='`
++shrext_cmds=`$host_alias-libtool --config | grep '^shrext_cmds='`
+ eval $shrext_cmds
+ module=yes eval std_shrext=$shrext_cmds
+ # chop the initial dot
+ glib_gmodule_suffix=`echo $std_shrext | sed 's/^\.//'`
+ AC_MSG_RESULT(.$glib_gmodule_suffix)
diff --git a/recipes/glib-2.0/glib-2.0_2.20.3.bb b/recipes/glib-2.0/glib-2.0_2.20.3.bb
new file mode 100644
index 0000000000..f41560b7fd
--- /dev/null
+++ b/recipes/glib-2.0/glib-2.0_2.20.3.bb
@@ -0,0 +1,12 @@
+require glib.inc
+PR = "${INC_PR}.0"
+
+SRC_URI = "\
+ http://ftp.gnome.org/pub/GNOME/sources/glib/2.20/glib-${PV}.tar.bz2;name=tarball \
+ file://glibconfig-sysdefs.h \
+ file://configure-libtool.patch;patch=1 \
+"
+SRC_URI_append_arm = " file://atomic-thumb.patch;patch=1"
+
+SRC_URI[tarball.md5sum] = "1173688c58b4b62809c83bb07a2cf71a"
+SRC_URI[tarball.sha256sum] = "37f098617c2fac11eee4c6289d576300abd0a01825d4c809462f5b698d1127b0"
diff --git a/recipes/glib-2.0/glib-2.0_2.22.4.bb b/recipes/glib-2.0/glib-2.0_2.22.4.bb
index eff5fbd462..c86905e2fa 100644
--- a/recipes/glib-2.0/glib-2.0_2.22.4.bb
+++ b/recipes/glib-2.0/glib-2.0_2.22.4.bb
@@ -22,7 +22,7 @@ SRC_URI_append_arm = " file://atomic-thumb.patch;patch=1"
SRC_URI_append_armv6 = " file://gatomic_armv6.patch;patch=1"
SRC_URI_append_armv7a = " file://gatomic_armv6.patch;patch=1"
-PR = "r0"
+PR = "r1"
inherit autotools gettext
@@ -41,7 +41,8 @@ do_install_append() {
sed -i -e s:${STAGING_BINDIR_NATIVE}:${bindir}:g ${D}${bindir}/glib-mkenums || true
}
-DEPENDS_virtclass-native = "gettext-native gtk-doc-native"
+DEPENDS_virtclass-native = "gettext-native gtk-doc-native \
+ pkgconfig-native"
EXTRA_OECONF_virtclass-native = ""
do_configure_prepend_virtclass-native() {
diff --git a/recipes/glib-2.0/glib.inc b/recipes/glib-2.0/glib.inc
index 53d8d99199..5cc697f070 100644
--- a/recipes/glib-2.0/glib.inc
+++ b/recipes/glib-2.0/glib.inc
@@ -10,7 +10,7 @@ DEPENDS += "glib-2.0-native gtk-doc"
DEPENDS += "virtual/libiconv virtual/libintl"
PACKAGES =+ "gobject-2.0 gmodule-2.0 gthread-2.0 gio-2.0 glib-2.0-utils "
-INC_PR = "r5"
+INC_PR = "r6"
LEAD_SONAME = "libglib-2.0.*"
FILES_glib-2.0-utils = "${bindir}/*"
@@ -28,6 +28,10 @@ FILES_gthread-2.0_chinook-compat = ""
FILES_gmodule-2.0_chinook-compat = ""
FILES_gobject-2.0_chinook-compat = ""
FILES_gio-2.0_chinook-compat = ""
+FILES_gthread-2.0_maemo5-compat = ""
+FILES_gmodule-2.0_maemo5-compat = ""
+FILES_gobject-2.0_maemo5-compat = ""
+FILES_gio-2.0_maemo5-compat = ""
EXTRA_OECONF = "--disable-debug "
diff --git a/recipes/glibc/glibc_2.5.bb b/recipes/glibc/glibc_2.5.bb
index 6792c58a4d..56e7745988 100644
--- a/recipes/glibc/glibc_2.5.bb
+++ b/recipes/glibc/glibc_2.5.bb
@@ -1,5 +1,5 @@
require glibc.inc
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
ARM_INSTRUCTION_SET = "arm"
@@ -49,6 +49,7 @@ SRC_URI = "\
file://zecke-sane-readelf.patch;patch=1 \
file://ldd-unbash.patch;patch=1 \
file://glibc-2.6.1-use-short-for-fnstsw.patch;patch=1 \
+ file://glibc-arm-no-asm-page.patch;patch=1 \
file://generic-bits_select.h \
file://generic-bits_types.h \
file://generic-bits_typesizes.h \
diff --git a/recipes/gmp/gmp.inc b/recipes/gmp/gmp.inc
index 71ea128bc5..67e5c49bda 100644
--- a/recipes/gmp/gmp.inc
+++ b/recipes/gmp/gmp.inc
@@ -3,7 +3,7 @@ DESCRIPTION = "GNU multiprecision arithmetic library"
HOMEPAGE = "http://www.swox.com/gmp/"
LICENSE = "GPL LGPL"
-SRC_URI = "ftp://ftp.gnu.org/gnu/gmp/gmp-${PV}.tar.bz2 \
+SRC_URI = "${GNU_MIRROR}/gmp/gmp-${PV}.tar.bz2;name=gmp \
file://configure.patch;patch=1 \
file://amd64.patch;patch=1"
diff --git a/recipes/gnash/gnash.inc b/recipes/gnash/gnash.inc
index bad1ae60ba..159fb414df 100644
--- a/recipes/gnash/gnash.inc
+++ b/recipes/gnash/gnash.inc
@@ -9,7 +9,7 @@ PR = "r6"
SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gnash/${PV}/gnash-${PV}.tar.bz2 \
"
-inherit autotools pkgconfig
+inherit autotools pkgconfig siteinfo
EXTRA_OECONF = "--enable-gui=gtk \
--enable-renderer=cairo \
diff --git a/recipes/gnome-mplayer/gecko-mediaplayer_0.9.8.bb b/recipes/gnome-mplayer/gecko-mediaplayer_0.9.8.bb
index a9260836da..dcce29c881 100644
--- a/recipes/gnome-mplayer/gecko-mediaplayer_0.9.8.bb
+++ b/recipes/gnome-mplayer/gecko-mediaplayer_0.9.8.bb
@@ -4,7 +4,7 @@ LICENSE = "GPL"
DEPENDS = "firefox gtk+ gconf dbus-glib"
RDEPENDS = "firefox gnome-mplayer"
-PR = "r7"
+PR = "r8"
inherit autotools
diff --git a/recipes/gnome-mplayer/gecko-mediaplayer_svn.bb b/recipes/gnome-mplayer/gecko-mediaplayer_svn.bb
new file mode 100644
index 0000000000..b5c2a48c0f
--- /dev/null
+++ b/recipes/gnome-mplayer/gecko-mediaplayer_svn.bb
@@ -0,0 +1,41 @@
+DESCRIPTION = "Gecko plugin for gnome-mplayer"
+HOMEPAGE = "http://dekorte.homeip.net/download/gecko-mediaplayer/"
+LICENSE = "GPL"
+DEPENDS = "firefox gtk+ gconf dbus-glib"
+RDEPENDS = "firefox gnome-mplayer"
+
+PV = "0.9.9.2+${SRCPV}"
+SRCREV = "385"
+
+inherit autotools
+
+SRC_URI = "svn://gecko-mediaplayer.googlecode.com/svn/;module=trunk;proto=http \
+ file://extensions \
+"
+
+S = "${WORKDIR}/trunk"
+
+# XUL changed API badly, so we need to choose between pre 3.6 and post 3.6 firefox :(
+EXTRA_OECONF = " --enable-new-libxul=yes "
+TARGET_CC_ARCH += " -DHAVE_NEW_XULRUNNER=1 "
+
+do_install_append() {
+ cp -dpR ${WORKDIR}/extens* ${D}${libdir}/mozilla/
+}
+
+PACKAGES =+ "${PN}-firefox-hack"
+RDEPENDS_${PN}-firefox-hack = "${PN}"
+FILES_${PN}-firefox-hack = "${libdir}/mozilla/extensions"
+
+FILES_${PN} += "${sysconfdir}/* \
+ ${libdir}/mozilla/*"
+FILES_${PN}-dbg += "${libdir}/mozilla*/plugins/.debug/*"
+
+pkg_postinst_${PN}-firefox-hack() {
+for firefoxdir in $D${libdir}/firefox-* ; do
+ if [ -e $firefoxdir/extensions/ ] ; then
+ ln -sf ${libdir}/mozilla/extensions/flash@alwaysinnovating.com $firefoxdir/extensions/
+ fi
+done
+}
+
diff --git a/recipes/gnome-mplayer/gnome-mplayer.inc b/recipes/gnome-mplayer/gnome-mplayer.inc
index 07445ce4e6..dc364ffc38 100644
--- a/recipes/gnome-mplayer/gnome-mplayer.inc
+++ b/recipes/gnome-mplayer/gnome-mplayer.inc
@@ -8,7 +8,9 @@ RDEPENDS = "mplayer"
inherit gnome
-SRC_URI = "http://gnome-mplayer.googlecode.com/files/${P}.tar.gz"
+INC_PR = "r10"
+
+SRC_URI = "http://gnome-mplayer.googlecode.com/files/${P}.tar.gz;name=gnomemplayer"
PACKAGES =+ "${PN}-nautilus-extension"
FILES_${PN}-nautilus-extension = "${libdir}/nautilus/extension*/*.so"
@@ -20,4 +22,3 @@ FILES_${PN} += "${datadir}/icons ${datadir}/gnome-control-center/"
do_install_append() {
sed -i "s/OnlyShowIn=GNOME;//" ${D}${datadir}/applications/gnome-mplayer.desktop
}
-
diff --git a/recipes/gnome-mplayer/gnome-mplayer_0.5.3.bb b/recipes/gnome-mplayer/gnome-mplayer_0.5.3.bb
index 81031d0ba2..2bc161f592 100644
--- a/recipes/gnome-mplayer/gnome-mplayer_0.5.3.bb
+++ b/recipes/gnome-mplayer/gnome-mplayer_0.5.3.bb
@@ -1,3 +1,3 @@
require gnome-mplayer.inc
-PR = "r5"
+PR = "${INC_PR}.0"
diff --git a/recipes/gnome-mplayer/gnome-mplayer_0.9.5.bb b/recipes/gnome-mplayer/gnome-mplayer_0.9.5.bb
index 81031d0ba2..2bc161f592 100644
--- a/recipes/gnome-mplayer/gnome-mplayer_0.9.5.bb
+++ b/recipes/gnome-mplayer/gnome-mplayer_0.9.5.bb
@@ -1,3 +1,3 @@
require gnome-mplayer.inc
-PR = "r5"
+PR = "${INC_PR}.0"
diff --git a/recipes/gnome-mplayer/gnome-mplayer_0.9.8.bb b/recipes/gnome-mplayer/gnome-mplayer_0.9.8.bb
index 95b46176af..2ccb2ae949 100644
--- a/recipes/gnome-mplayer/gnome-mplayer_0.9.8.bb
+++ b/recipes/gnome-mplayer/gnome-mplayer_0.9.8.bb
@@ -4,4 +4,4 @@ SRC_URI += "file://gnome-mplayer-svn.diff;patch=1;pnum=0 \
file://default.patch;patch=1 \
"
-PR = "r9"
+PR = "${INC_PR}.0"
diff --git a/recipes/gnome-mplayer/gnome-mplayer_0.9.9.bb b/recipes/gnome-mplayer/gnome-mplayer_0.9.9.bb
new file mode 100644
index 0000000000..556a9a3cb8
--- /dev/null
+++ b/recipes/gnome-mplayer/gnome-mplayer_0.9.9.bb
@@ -0,0 +1,9 @@
+require gnome-mplayer.inc
+
+SRC_URI += "file://default.patch;patch=1 \
+"
+
+SRC_URI[gnomemplayer.md5sum] = "335918da07a62941778444e126ae5ede"
+SRC_URI[gnomemplayer.sha256sum] = "8180f8de085879280be4a6356ae70acd749f37eea48c943870d3caa145d2826d"
+
+PR = "${INC_PR}.0"
diff --git a/recipes/gnome-mplayer/gnome-mplayer_svn.bb b/recipes/gnome-mplayer/gnome-mplayer_svn.bb
index d8c4f528cc..97ed70e896 100644
--- a/recipes/gnome-mplayer/gnome-mplayer_svn.bb
+++ b/recipes/gnome-mplayer/gnome-mplayer_svn.bb
@@ -1,12 +1,16 @@
require gnome-mplayer.inc
-SRCREV = "1610"
-PV = "0.9.8+svnr${SRCPV}"
-PR = "r1"
+SRCREV = "1652"
+PV = "0.9.9+svnr${SRCPV}"
+PR = "${INC_PR}.0"
S = "${WORKDIR}/trunk"
SRC_URI = "svn://gnome-mplayer.googlecode.com/svn/;module=trunk;proto=http \
+ file://default.patch;patch=1 \
"
+# Untested
+DEFAULT_PREFERENCE = "-1"
+
#hack, should use CXX to link:
LDFLAGS_append = " -lstdc++ "
diff --git a/recipes/gnome/eog_2.28.2.bb b/recipes/gnome/eog_2.28.2.bb
index 0a55295b1b..0bb10971ab 100644
--- a/recipes/gnome/eog_2.28.2.bb
+++ b/recipes/gnome/eog_2.28.2.bb
@@ -1,11 +1,31 @@
DESCRIPTION = "Image viewer for gnome"
LICENSE = "GPLv2"
-PR = "r1"
+PR = "r2"
DEPENDS = "gtk+ glib-2.0 gnome-desktop gnome-icon-theme shared-mime-info zlib libexif lcms jpeg dbus-glib libxml2 "
inherit gnome
+do_configure_prepend() {
+ export HOST_SYS=${HOST_SYS}
+ export BUILD_SYS=${BUILD_SYS}
+ export PYGTK_CODEGEN="${STAGING_DATADIR}/pygobject/2.0/codegen/codegen.py"
+ sed -i \
+ -e s:'`$PKG_CONFIG --variable defsdir pygobject-2.0`':\"${STAGING_DATADIR}/pygobject/2.0/defs\":g \
+ -e s:'`$PKG_CONFIG --variable=defsdir pygobject-2.0`':\"${STAGING_DATADIR}/pygobject/2.0/defs\":g \
+ -e s:'`$PKG_CONFIG --variable=defsdir pygtk-2.0`':\"${STAGING_DATADIR}/pygtk/2.0/defs\":g \
+ -e s:'`$PKG_CONFIG --variable=pygtkincludedir pygobject-2.0`':\"${STAGING_INCDIR}/pygtk-2.0\":g \
+ -e s:'`$PKG_CONFIG --variable=datadir pygobject-2.0`':\"${STAGING_DATADIR}\":g \
+ -e s:'`$PKG_CONFIG --variable codegendir pygobject-2.0`':\"${STAGING_DATADIR}/pygobject/2.0/codegen\":g \
+ -e s:'`$PKG_CONFIG --variable=codegendir pygobject-2.0`':\"${STAGING_DATADIR}/pygobject/2.0/codegen\":g \
+ -e s:'`$PKG_CONFIG --variable=codegendir pygtk-2.0`':\"${STAGING_DATADIR}/pygobject/2.0/codegen\":g \
+ -e s:'`$PKG_CONFIG --variable=fixxref pygobject-2.0`':\"${STAGING_DATADIR}/pygobject/xsl/fixxref.py\":g \
+ -e 's:PYTHON_CFLAGS="-I$PY_PREFIX/include/python$PYTHON_VERSION":PYTHON_CFLAGS="-I${STAGING_INCDIR}/python$PYTHON_VERSION":g' \
+ -e s:'`$PKG_CONFIG --variable=defsdir gnome-python-2.0`':\"${STAGING_DATADIR}/pygtk/2.0/defs\":g \
+ -e s:'`$PKG_CONFIG --variable=argtypesdir gnome-python-2.0`':\"${STAGING_DATADIR}/pygtk/2.0/argtypes/\":g \
+ ${S}/configure.ac
+}
+
FILES_${PN}-dbg += "${libdir}/eog/plugins/.debug"
diff --git a/recipes/gnome/gconf-editor_2.28.0.bb b/recipes/gnome/gconf-editor_2.28.0.bb
new file mode 100644
index 0000000000..096b5894f1
--- /dev/null
+++ b/recipes/gnome/gconf-editor_2.28.0.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Editor for the gnome registry"
+LICENSE = "GPLv2"
+DEPENDS = "policykit gnome-doc-utils gconf"
+
+inherit gnome gconf
+
+SRC_URI[archive.md5sum] = "f3f19df4ce47ca27bf69d355f24ac5ba"
+SRC_URI[archive.sha256sum] = "35f5256f1a93e872586bb6b8c81f7ebfdd78ab3edcfa508f59f99f0f75a74839"
+
+do_configure_prepend() {
+ sed -i -e s:docs::g ${S}/Makefile.am
+}
+
+FILES_${PN} += "${datadir}/icons"
diff --git a/recipes/gnome/gconf_2.26.2.bb b/recipes/gnome/gconf_2.26.2.bb
index a7957dd524..58c7149be9 100644
--- a/recipes/gnome/gconf_2.26.2.bb
+++ b/recipes/gnome/gconf_2.26.2.bb
@@ -3,15 +3,15 @@ SECTION = "x11/gnome"
LICENSE = "LGPL"
DEPENDS = "gtk+ orbit2 glib-2.0 libxml2 policykit"
ORBIT_IDL_SRC = "${STAGING_BINDIR_NATIVE}/orbit-idl-2"
-PR = "r2"
+PR = "r3"
S = "${WORKDIR}/GConf-${PV}"
SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/GConf/2.26/GConf-${PV}.tar.bz2"
-EXTRA_OECONF = "--disable-gtk-doc POLKIT_POLICY_FILE_VALIDATE=true"
+EXTRA_OECONF = "--disable-gtk-doc --enable-gtk POLKIT_POLICY_FILE_VALIDATE=true"
-inherit autotools pkgconfig gettext
+inherit autotools gettext
EXTRA_OEMAKE = 'ORBIT_IDL="${ORBIT_IDL_SRC}"'
diff --git a/recipes/gnome/gconf_2.28.0.bb b/recipes/gnome/gconf_2.28.0.bb
new file mode 100644
index 0000000000..225302bbf4
--- /dev/null
+++ b/recipes/gnome/gconf_2.28.0.bb
@@ -0,0 +1,34 @@
+DESCRIPTION = "GNOME configuration database system"
+SECTION = "x11/gnome"
+LICENSE = "LGPL"
+DEPENDS = "gtk+ orbit2 glib-2.0 libxml2 policykit"
+ORBIT_IDL_SRC = "${STAGING_BINDIR_NATIVE}/orbit-idl-2"
+
+S = "${WORKDIR}/GConf-${PV}"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/GConf/2.28/GConf-${PV}.tar.bz2;name=archive"
+SRC_URI[archive.md5sum] = "ad2aeb9c7d906b274954c51a615caeac"
+SRC_URI[archive.sha256sum] = "d057dcfe2bfb2a80e592349c2a78d7dce12d19542aeced466c64fb701c806ac8"
+
+EXTRA_OECONF = " --without-openldap --disable-gtk-doc --enable-gtk POLKIT_POLICY_FILE_VALIDATE=true"
+
+inherit autotools gettext
+
+EXTRA_OEMAKE = 'ORBIT_IDL="${ORBIT_IDL_SRC}"'
+
+do_install_append() {
+ # this directory need to be created to avoid an Error 256 at gdm launch
+ install -d ${D}${sysconfdir}/gconf/gconf.xml.system
+
+ # this stuff is unusable
+ rm ${D}${libdir}/GConf/*/*.*a
+}
+
+FILES_${PN} += "${libdir}/GConf/* \
+ ${datadir}/polkit* \
+ ${datadir}/dbus-1/services/*.service \
+ ${datadir}/dbus-1/system-services/*.service \
+"
+
+FILES_${PN}-dbg += "${libdir}/*/*/.debug"
+FILES_${PN}-dev += "${datadir}/sgml/gconf/gconf-1.0.dtd"
diff --git a/recipes/gnome/gnome-bluetooth_git.bb b/recipes/gnome/gnome-bluetooth_git.bb
index 29bd3ea4f6..2e57df3888 100644
--- a/recipes/gnome/gnome-bluetooth_git.bb
+++ b/recipes/gnome/gnome-bluetooth_git.bb
@@ -2,6 +2,7 @@ LICENSE = "GPL"
SECTION = "x11/gnome"
DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_angstrom = "1"
inherit autotools gnome pkgconfig
diff --git a/recipes/gnome/gnome-doc-utils.inc b/recipes/gnome/gnome-doc-utils.inc
index 15905270f2..a1defa5dd5 100644
--- a/recipes/gnome/gnome-doc-utils.inc
+++ b/recipes/gnome/gnome-doc-utils.inc
@@ -1,12 +1,16 @@
LICENSE = "GPL LGPL"
DEPENDS = "libxml2 libxslt libxslt-native"
-INC_PR = "r4"
+INC_PR = "r5"
inherit gnome
EXTRA_OECONF = "--disable-scrollkeeper"
+do_configure_prepend() {
+ sed -i -e 's: doc::g' ${S}/Makefile.am
+}
+
do_install_append() {
mkdir -p ${D}${datadir}/xml/gnome/xslt/
cp -pPr ${S}/xslt/* ${D}${datadir}/xml/gnome/xslt/
diff --git a/recipes/gnome/gnome-doc-utils_0.19.2.bb b/recipes/gnome/gnome-doc-utils_0.19.2.bb
index 9d0ac09a6d..aa0aa0e233 100644
--- a/recipes/gnome/gnome-doc-utils_0.19.2.bb
+++ b/recipes/gnome/gnome-doc-utils_0.19.2.bb
@@ -2,4 +2,4 @@ require gnome-doc-utils.inc
DEPENDS += "libxml2-native"
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.2"
diff --git a/recipes/gnome/gnome-power-manager_2.28.3.bb b/recipes/gnome/gnome-power-manager_2.28.3.bb
new file mode 100644
index 0000000000..95301751e8
--- /dev/null
+++ b/recipes/gnome/gnome-power-manager_2.28.3.bb
@@ -0,0 +1,45 @@
+LICENSE = "GPLv2"
+DEPENDS = "devicekit-power gtk+ gnome-keyring libgnome libgnomeui hal dbus libglade \
+ libnotify libwnck cairo libunique gnome-panel gstreamer \
+ xrandr policykit-gnome gnome-doc-utils dbus-glib "
+
+inherit gnome
+
+SRC_URI[archive.md5sum] = "1fb329b8a6e9c63f46df1ea4bf3bb275"
+SRC_URI[archive.sha256sum] = "e918f0a7a35f78a7c4c07894951fed6683b3de4266d81ca2f201078729e0efe9"
+
+EXTRA_OECONF = " --disable-scrollkeeper \
+ --disable-keyring \
+ --x-includes=${STAGING_INCDIR} \
+ --x-libraries=${STAGING_LIBDIR} \
+ --with-dpms-ext=${STAGING_INCDIR}/.. \
+ --enable-compile-warnings=no \
+ ac_cv_header_X11_extensions_dpms_h=yes \
+ "
+
+do_configure_prepend() {
+ sed -i -e 's: man ::g' ${S}/Makefile.am
+}
+
+do_configure_append() {
+ rm config.log
+ # Sigh... --enable-compile-warnings=no doesn't actually turn off -Werror
+ for i in $(find ${S} -name "Makefile") ; do
+ sed -i -e s:-Werror::g $i
+ done
+}
+
+PACKAGES =+ "${PN}-applets"
+
+FILES_${PN}-applets = "${bindir}/*applet* \
+ ${libdir}/bonobo/servers \
+ ${datadir}/gnome-2.0/ui"
+
+FILES_${PN} += "${datadir}/icons \
+ ${datadir}/dbus-1 \
+ ${datadir}/gnome/autostart \
+ "
+
+FILES_${PN}-doc += "${datadir}/omf \
+ ${datadir}/gnome/help "
+
diff --git a/recipes/gnome/gnome-python-extras_2.25.3.bb b/recipes/gnome/gnome-python-extras_2.25.3.bb
index cf3d84e9af..225e9832b8 100644
--- a/recipes/gnome/gnome-python-extras_2.25.3.bb
+++ b/recipes/gnome/gnome-python-extras_2.25.3.bb
@@ -1,21 +1,34 @@
LICENSE = "GPL/LGPL"
DEPENDS = "python-pygtk libwnck"
-inherit gnome distutils-base
+PR = "r1"
+
+inherit distutils-base gnome
SRC_URI += "file://acinclude.m4"
-EXTRA_OECONF = "--with-python-includes=${STAGING_INCDIR}/../"
+EXTRA_OECONF = "--with-python-includes=${STAGING_INCDIR}/../ ac_cv_path_PYGTK_CODEGEN=${STAGING_DATADIR}/pygobject/2.0/codegen/codegen.py"
do_configure_prepend() {
install -m 0644 ${WORKDIR}/acinclude.m4 ${S}/
}
do_configure_prepend() {
- sed -i -e s:'`$PKG_CONFIG --variable=defsdir pygtk-2.0`':\"${STAGING_DATADIR}/pygtk/2.0/defs\":g \
- -e s:'`$PKG_CONFIG --variable=defsdir gnome-python-2.0`':\"${STAGING_DATADIR}/pygtk/2.0/defs\":g \
- -e s:'`$PKG_CONFIG --variable=argtypesdir gnome-python-2.0`':\"${STAGING_DATADIR}/pygtk/2.0/argtypes/\":g \
- ${S}/configure.ac
+ export HOST_SYS=${HOST_SYS}
+ export BUILD_SYS=${BUILD_SYS}
+ export PYGTK_CODEGEN="${STAGING_DATADIR}/pygobject/2.0/codegen/codegen.py"
+ sed -i \
+ -e s:'`$PKG_CONFIG --variable defsdir pygobject-2.0`':\"${STAGING_DATADIR}/pygobject/2.0/defs\":g \
+ -e s:'`$PKG_CONFIG --variable=defsdir pygtk-2.0`':\"${STAGING_DATADIR}/pygtk/2.0/defs\":g \
+ -e s:'`$PKG_CONFIG --variable=pygtkincludedir pygobject-2.0`':\"${STAGING_INCDIR}/pygtk-2.0\":g \
+ -e s:'`$PKG_CONFIG --variable=datadir pygobject-2.0`':\"${STAGING_DATADIR}\":g \
+ -e s:'`$PKG_CONFIG --variable codegendir pygobject-2.0`':\"${STAGING_DATADIR}/pygobject/2.0/codegen\":g \
+ -e s:'`$PKG_CONFIG --variable=codegendir pygtk-2.0`':\"${STAGING_DATADIR}/pygobject/2.0/codegen\":g \
+ -e s:'`$PKG_CONFIG --variable=fixxref pygobject-2.0`':\"${STAGING_DATADIR}/pygobject/xsl/fixxref.py\":g \
+ -e 's:PYTHON_CFLAGS="-I$PY_PREFIX/include/python$PYTHON_VERSION":PYTHON_CFLAGS="-I${STAGING_INCDIR}/python$PYTHON_VERSION":g' \
+ -e s:'`$PKG_CONFIG --variable=defsdir gnome-python-2.0`':\"${STAGING_DATADIR}/pygtk/2.0/defs\":g \
+ -e s:'`$PKG_CONFIG --variable=argtypesdir gnome-python-2.0`':\"${STAGING_DATADIR}/pygtk/2.0/argtypes/\":g \
+ ${S}/configure.ac
}
AUTOTOOLS_STAGE_PKGCONFIG = "1"
diff --git a/recipes/gnome/gnome-screensaver_2.28.0.bb b/recipes/gnome/gnome-screensaver_2.28.0.bb
deleted file mode 100644
index 06a4ffe48e..0000000000
--- a/recipes/gnome/gnome-screensaver_2.28.0.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-DESCRIPTION = "GNOME utilities"
-SECTION = "x11/gnome"
-LICENSE = "GPL"
-DEPENDS = "gnome-common glib-2.0 gtk+ gconf"
-
-inherit gnome pkgconfig
-
-PR = "r1"
-
-EXTRA_OECONF = " \
- --with-shadow=${STAGING_INCDIR}/.. \
- "
-
-do_configure_prepend () {
- cp ${STAGING_DATADIR}/gnome-common/data/omf.make ${S}
- sed -i -e 's:$CPPFLAGS -I$includedir:$CPPFLAGS:g' configure.ac
-}
-
-do_stage () {
- autotools_stage_all
-}
-
-FILES_${PN} += "${datadir}/*background* ${datadir}/desktop-directories"
-
-FILES_${PN}-dbg += "${libexecdir}/gnome-screensaver/.debug "
-
-
diff --git a/recipes/gnome/gnome-screensaver_2.28.3.bb b/recipes/gnome/gnome-screensaver_2.28.3.bb
new file mode 100644
index 0000000000..d6468a3533
--- /dev/null
+++ b/recipes/gnome/gnome-screensaver_2.28.3.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "GNOME utilities"
+SECTION = "x11/gnome"
+LICENSE = "GPL"
+DEPENDS = "gnome-menus gnome-desktop gnome-common shadow glib-2.0 gtk+ gconf"
+
+inherit gnome
+
+SRC_URI[archive.md5sum] = "e6fb9b206f3470c04e21474ee6d69687"
+SRC_URI[archive.sha256sum] = "f2ffec4f637883c7db15fb94c3f85a7d59ade3cf1f0107ecebc01df13f0ad5c3"
+
+EXTRA_OECONF = " \
+ --with-shadow=${STAGING_INCDIR}/.. \
+ "
+# requires a too recent, non-default autoconf
+do_configure () {
+ cp ${STAGING_DATADIR}/gnome-common/data/omf.make ${S}
+ sed -i -e 's:$CPPFLAGS -I$includedir:$CPPFLAGS:g' configure.ac
+ sed -i -e 's:$CPPFLAGS -I$includedir:$CPPFLAGS:g' configure
+
+ gnu-configize
+ oe_runconf
+}
+
+FILES_${PN} += "${datadir}/*background* ${datadir}/desktop-directories"
+
+FILES_${PN}-dbg += "${libexecdir}/gnome-screensaver/.debug "
+
+
diff --git a/recipes/gnome/gnome-system-tools_2.28.2.bb b/recipes/gnome/gnome-system-tools_2.28.2.bb
new file mode 100644
index 0000000000..503a111ff2
--- /dev/null
+++ b/recipes/gnome/gnome-system-tools_2.28.2.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "GNOME utilities"
+SECTION = "x11/gnome"
+LICENSE = "GPL"
+DEPENDS = "nautilus gnome-common glib-2.0 gtk+ gconf liboobs system-tools-backends gnome-control-center"
+inherit gnome pkgconfig
+
+SRC_URI += "file://remove-docs.patch;patch=1"
+SRC_URI[archive.md5sum] = "6947cd83c8f83af54e76a36ab3bb6cf0"
+SRC_URI[archive.sha256sum] = "806dd14792149b7f01e84a214b8d6debda53965e1eb74d189c66498adeb2af29"
+
+EXTRA_OECONF = "--disable-scrollkeeper \
+ "
+LDFLAGS += "-lgthread-2.0"
+
+FILES_${PN} += "${libdir}/nautilus/extensions-2.0"
+
+FILES_${PN}-dbg += "${libdir}/nautilus/extensions-2.0/.debug"
+
diff --git a/recipes/gnome/gnome-vfs/03_gnutls27.patch b/recipes/gnome/gnome-vfs/03_gnutls27.patch
new file mode 100644
index 0000000000..de7fafc287
--- /dev/null
+++ b/recipes/gnome/gnome-vfs/03_gnutls27.patch
@@ -0,0 +1,33 @@
+Debian #529827
+GNOME #574589
+Gentoo #253729
+Patch by Gilles Dartiguelongue, fixed for correctly setting have_ssl
+
+Allow gnome-vfs-2.24 to build with gnutls >= 2.7.0
+Use pkg-config in place of gnutls own macro since it's not present anymore.
+
+Index: gnome-vfs-2.24.2/configure.in
+===================================================================
+--- gnome-vfs-2.24.2.orig/configure.in 2009-04-20 12:46:46.000000000 +0200
++++ gnome-vfs-2.24.2/configure.in 2010-02-06 11:55:45.497282437 +0100
+@@ -668,14 +668,14 @@
+ AC_MSG_ERROR([*** Can't use both openssl and gnutls at the same time. Please pick one only. ***])
+ else
+ AC_CHECK_HEADER(gcrypt.h,, AC_MSG_ERROR([*** Need gcrypt.h to compile with GnuTLS support ***]))
+- AM_PATH_LIBGNUTLS(1.0.0, [AC_DEFINE(HAVE_GNUTLS, 1, [Define to 1 if GnuTLS is available])
+- have_ssl=true])
++ PKG_CHECK_MODULES(LIBGNUTLS, gnutls >= 1.0.0, [AC_DEFINE(HAVE_GNUTLS, 1, [Define to 1 if GnuTLS is available])
++ have_ssl=true])
+
+ if test "x${LIBGNUTLS_LIBS}" = "x"; then
+- AM_PATH_LIBGNUTLS(0.5.1, [AC_DEFINE(HAVE_GNUTLS, 1, [Define to 1 if GnuTLS is available])
+- AC_DEFINE(GNUTLS_COMPAT, 1, [FIXME])
+- have_ssl=true],
+- AC_MSG_ERROR([Unable to find GNUTLS]))
++ PKG_CHECK_MODULES(LIBGNUTLS, gnutls >= 0.5.1, [AC_DEFINE(HAVE_GNUTLS, 1, [Define to 1 if GnuTLS is available])
++ AC_DEFINE(GNUTLS_COMPAT, 1, [FIXME])
++ have_ssl=true],
++ AC_MSG_ERROR([Unable to find GNUTLS]))
+ fi
+ fi
+ fi
diff --git a/recipes/gnome/gnome-vfs_2.24.1.bb b/recipes/gnome/gnome-vfs_2.24.1.bb
index 511aabe5a7..367228da23 100644
--- a/recipes/gnome/gnome-vfs_2.24.1.bb
+++ b/recipes/gnome/gnome-vfs_2.24.1.bb
@@ -3,12 +3,13 @@ DEPENDS = "libxml2 gconf gnutls avahi dbus dbus-glib bzip2 gnome-mime-data zlib
RRECOMMENDS = "gnome-vfs-plugin-file shared-mime-info"
# Some legacy packages will require gnome-mime-data to be installed, but use of
# it is deprecated.
-PR = "r1"
+PR = "r2"
inherit gnome
SRC_URI += "file://gconftool-lossage.patch;patch=1;pnum=1 \
- file://gnome-vfs-no-kerberos.patch;patch=1;pnum=0"
+ file://gnome-vfs-no-kerberos.patch;patch=1;pnum=0 \
+ file://03_gnutls27.patch;patch=1"
# This is to provide compatibility with the gnome-vfs DBus fork
PROVIDES = "gnome-vfs-plugin-dbus"
diff --git a/recipes/gnome/libsoup-2.4_2.29.91.bb b/recipes/gnome/libsoup-2.4_2.29.91.bb
new file mode 100644
index 0000000000..46afd2314d
--- /dev/null
+++ b/recipes/gnome/libsoup-2.4_2.29.91.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "An HTTP library implementation in C"
+SECTION = "x11/gnome/libs"
+LICENSE = "GPL"
+DEPENDS = "libproxy glib-2.0 gnutls libxml2 sqlite3 gnome-keyring"
+
+inherit gnome
+
+SRC_URI = "${GNOME_MIRROR}/libsoup/${@gnome_verdir("${PV}")}/libsoup-${PV}.tar.bz2;name=libsoup"
+SRC_URI[libsoup.md5sum] = "900390c0ead254fbb23f3f0b84fd18bb"
+SRC_URI[libsoup.sha256sum] = "626c88f6b87463cb092733d2bcd5672ca69529a766cc6c5cc817f34b49c821b1"
+
+S = "${WORKDIR}/libsoup-${PV}"
+
+PACKAGES =+ "libsoup-gnome"
+FILES_libsoup-gnome = "${libdir}/libsoup-gnome*.so.*"
+FILES_${PN} = "${libdir}/libsoup-2*.so.*"
+FILES_${PN}-dev = "${includedir}/ ${libdir}/"
+FILES_${PN}-doc = "${datadir}/"
diff --git a/recipes/gnome/system-tools-backends-2.8.3/add-angstrom-distro.patch b/recipes/gnome/system-tools-backends-2.8.3/add-angstrom-distro.patch
new file mode 100644
index 0000000000..f258f326c1
--- /dev/null
+++ b/recipes/gnome/system-tools-backends-2.8.3/add-angstrom-distro.patch
@@ -0,0 +1,28 @@
+Index: system-tools-backends-2.8.3/Utils/Platform.pm
+===================================================================
+--- system-tools-backends-2.8.3.orig/Utils/Platform.pm 2010-01-17 16:05:55.794914937 +0000
++++ system-tools-backends-2.8.3/Utils/Platform.pm 2010-01-17 16:13:07.271917106 +0000
+@@ -91,6 +91,7 @@
+ "nexenta-1.0" => [ "Nexenta GNU/Solaris", "1.0", "Ellate" ],
+ "yellowdog-4.1" => [ "Yellow Dog Linux", "4.1", "Sagitta" ],
+ "guadalinex-v4" => [ "Guadalinex", "v4", "Toro" ],
++ "angstrom" => [ "Angstrom", "", "" ],
+ };
+
+ sub get_platform_info
+@@ -141,6 +142,7 @@
+ "vine-3.1" => "vine-3.0",
+ "vlos-1.2" => "gentoo",
+ "nexenta-1.0" => "solaris-2.11",
++ "angstrom" => "debian-3.0",
+ );
+
+ return $metamap{$distro} if ($metamap{$distro});
+@@ -373,6 +375,7 @@
+ [ \&check_ark ],
+ [ \&check_yoper ],
+ [ \&check_distro_file, "/etc/yellowdog-release", "yellowdog", "^Yellow Dog Linux release (\\S+)" ],
++ [ \&check_file_exists, "/etc/angstrom-version", "angstrom" ],
+ ],
+ "FreeBSD" => [[ \&check_freebsd ]],
+ "SunOS" => [[ \&check_solaris ]]
diff --git a/recipes/gnome/system-tools-backends-2.8.3/system-tools-backends b/recipes/gnome/system-tools-backends-2.8.3/system-tools-backends
new file mode 100644
index 0000000000..704c36dbf4
--- /dev/null
+++ b/recipes/gnome/system-tools-backends-2.8.3/system-tools-backends
@@ -0,0 +1,74 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: system-tools-backends
+# Required-Start: $local_fs dbus
+# Required-Stop: $local_fs dbus
+# Should-Start: $syslog
+# Should-Stop: $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 1
+# Short-Description: Gnome System Tools Backends
+# Description: The Gnome System Tools Backends daemon handles root-needed
+# operations to configure your machine with the Gnome System
+# Tools.
+### END INIT INFO
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/bin/system-tools-backends
+PIDDIR=/var/run
+PIDFILE=$PIDDIR/system-tools-backends.pid
+NAME=system-tools-backends
+DESC="System Tools Backends"
+
+test -x $DAEMON || exit 0
+
+set -e
+
+do_start() {
+ echo "Starting $DESC"
+ start-stop-daemon --start --startas $DAEMON --quiet --pidfile $PIDFILE
+}
+
+do_stop() {
+ echo "Stopping $DESC"
+ start-stop-daemon --stop --oknodo --quiet --pidfile $PIDFILE --startas $DAEMON
+}
+
+case "$1" in
+ start)
+ do_start
+ ;;
+ stop)
+ do_stop
+ ;;
+ #reload)
+ #
+ # If the daemon can reload its config files on the fly
+ # for example by sending it SIGHUP, do it here.
+ #
+ # If the daemon responds to changes in its config file
+ # directly anyway, make this a do-nothing entry.
+ #
+ # echo "Reloading $DESC configuration files."
+ # start-stop-daemon --stop --signal 1 --quiet --pidfile \
+ # /var/run/$NAME.pid --exec $DAEMON
+ #;;
+ restart|force-reload)
+ #
+ # If the "reload" option is implemented, move the "force-reload"
+ # option to the "reload" entry above. If not, "force-reload" is
+ # just the same as "restart".
+ #
+ do_stop
+ sleep 5
+ do_start
+ ;;
+ *)
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|restart|reload|force-reload|status}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
diff --git a/recipes/gnome/system-tools-backends_2.8.1.bb b/recipes/gnome/system-tools-backends_2.8.1.bb
index 8e01112419..d4a03f075d 100644
--- a/recipes/gnome/system-tools-backends_2.8.1.bb
+++ b/recipes/gnome/system-tools-backends_2.8.1.bb
@@ -1,5 +1,3 @@
-DEFAULT_PREFERENCE = "-1"
-
DESCRIPTION = "gnome system tools backends"
LICENSE = "GPL"
@@ -35,4 +33,3 @@ FILES_${PN} += " ${libdir}/pkgconfig"
FILES_${PN} += " ${datadir}/dbus-1/system-services"
FILES_${PN} += " ${datadir}/system-tools-backends-2.0/files"
FILES_${PN} += " ${datadir}/system-tools-backends-2.0/scripts"
-
diff --git a/recipes/gnome/system-tools-backends_2.8.3.bb b/recipes/gnome/system-tools-backends_2.8.3.bb
new file mode 100644
index 0000000000..117882395e
--- /dev/null
+++ b/recipes/gnome/system-tools-backends_2.8.3.bb
@@ -0,0 +1,42 @@
+DESCRIPTION = "gnome system tools backends"
+LICENSE = "GPL"
+
+DEPENDS = "dbus dbus-glib glib-2.0 policykit"
+
+# Shadow added so there is a full adduser/deluser
+# (Gnome images tend to pull in shadow anyway)
+RDEPENDS = "shadow"
+
+inherit gnome pkgconfig update-rc.d
+
+SRC_URI += " \
+ file://system-tools-backends \
+ "
+
+SRC_URI_append_angstrom = " \
+ file://add-angstrom-distro.patch;patch=1 \
+ "
+
+do_configure_prepend() {
+ sed -i -e /IT_PROG_INTLTOOL/d ${S}/configure.in
+ sed -i -e /Makefile.in/d ${S}/configure.in
+ sed -i -e 's: po : :g' ${S}/Makefile.am
+ sed -i -e /policy/d ${S}/Makefile.am
+ sed -i -e 's:org.freedesktop.SystemToolsBackends.service \\:org.freedesktop.SystemToolsBackends.service:g' ${S}/Makefile.am
+ sed -i -e 's:@INTLTOOL_POLICY_RULE@::g' ${S}/Makefile.am
+ sed -i -e 's:CC=$(CC):CC="$(CC)":g' ${S}/Net-DBus/Makefile.am
+}
+
+do_install_append () {
+ install -d ${D}/${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/system-tools-backends ${D}/${sysconfdir}/init.d/
+}
+
+INITSCRIPT_NAME = "system-tools-backends"
+INITSCRIPT_PARAMS = "start 50 2 3 4 5 . stop 70 1 ."
+
+FILES_${PN} += " ${sysconfdir}/dbus-1/system.d"
+FILES_${PN} += " ${libdir}/pkgconfig"
+FILES_${PN} += " ${datadir}/dbus-1/system-services"
+FILES_${PN} += " ${datadir}/system-tools-backends-2.0/files"
+FILES_${PN} += " ${datadir}/system-tools-backends-2.0/scripts"
diff --git a/recipes/gnu-config/gnu-config-native_20050701.bb b/recipes/gnu-config/gnu-config-native_20050701.bb
deleted file mode 100644
index 43df124f7f..0000000000
--- a/recipes/gnu-config/gnu-config-native_20050701.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-SECTION = "base"
-require gnu-config_${PV}.bb
-
-inherit native
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gnu-config"
-
-do_stage () {
- install -d ${STAGING_DATADIR}/gnu-config/
- install -d ${STAGING_BINDIR}/
- cat ${WORKDIR}/gnu-configize.in | \
- sed -e 's,@gnu-configdir@,${STAGING_DATADIR}/gnu-config,' \
- -e 's,@autom4te_perllibdir@,${STAGING_DATADIR}/autoconf,' > ${STAGING_BINDIR}/gnu-configize
- chmod 755 ${STAGING_BINDIR}/gnu-configize
- install -m 0644 config.guess config.sub ${STAGING_DATADIR}/gnu-config/
-}
diff --git a/recipes/gnu-config/gnu-config/uclibc.patch b/recipes/gnu-config/gnu-config/uclibc.patch
deleted file mode 100644
index 20a3b11f2f..0000000000
--- a/recipes/gnu-config/gnu-config/uclibc.patch
+++ /dev/null
@@ -1,21 +0,0 @@
---- config.sub.orig 2004-05-14 19:38:36.000000000 -0500
-+++ config.sub 2004-05-14 19:39:17.000000000 -0500
-@@ -118,7 +118,7 @@
- # Here we must recognize all the valid KERNEL-OS combinations.
- maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
- case $maybe_os in
-- nto-qnx* | linux-gnu* | kfreebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
-+ nto-qnx* | linux-gnu* | linux-uclibc* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
-@@ -1135,7 +1135,8 @@
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
-+ | -mingw32* | -linux-gnu* | -linux-uclibc* \
-+ | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
diff --git a/recipes/gnu-config/gnu-config_20050701.bb b/recipes/gnu-config/gnu-config_20050701.bb
index 8ee0a32120..c6a75ac9c0 100644
--- a/recipes/gnu-config/gnu-config_20050701.bb
+++ b/recipes/gnu-config/gnu-config_20050701.bb
@@ -6,7 +6,7 @@ INHIBIT_DEFAULT_DEPS = "1"
FIXEDSRCDATE = "${@bb.data.getVar('FILE', d, 1).split('_')[-1].split('.')[0]}"
PV = "0.1+cvs${FIXEDSRCDATE}"
-PR = "r5"
+PR = "r6"
SRC_URI = "cvs://anonymous@cvs.sv.gnu.org/cvsroot/config;module=config;method=pserver;date=${FIXEDSRCDATE} \
file://config-guess-uclibc.patch;patch=1 \
@@ -23,10 +23,17 @@ do_install () {
${D}${bindir}
cat ${WORKDIR}/gnu-configize.in | \
sed -e 's,@gnu-configdir@,${datadir}/gnu-config,g' \
- -e 's,@autom4te_perllibdir@,${datadir}/autoconf,g' \
- -e 's,/usr/bin/perl,${bindir}/perl,g' > ${D}${bindir}/gnu-configize
+ -e 's,@autom4te_perllibdir@,${datadir}/autoconf,g' > ${D}${bindir}/gnu-configize
+ # In the native case we want the system perl as perl-native can't have built yet
+ if [ "${BUILD_ARCH}" != "${TARGET_ARCH}" ]; then
+ cat ${WORKDIR}/gnu-configize.in | \
+ sed -e 's,/usr/bin/perl,${bindir}/perl,g' > ${D}${bindir}/gnu-configize
+ fi
chmod 755 ${D}${bindir}/gnu-configize
install -m 0644 config.guess config.sub ${D}${datadir}/gnu-config/
}
FILES_${PN} = "${bindir} ${datadir}/gnu-config"
+
+BBCLASSEXTEND = "native"
+NATIVE_INSTALL_WORKS = "1"
diff --git a/recipes/gnuchess/files/gnuchess.desktop b/recipes/gnuchess/files/gnuchess.desktop
new file mode 100644
index 0000000000..5b2eb4002d
--- /dev/null
+++ b/recipes/gnuchess/files/gnuchess.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Name=GNU Chess
+Comment=Chess game of the GNU Project
+Encoding=UTF-8
+Version=4.2.7
+Type=Application
+Exec=/usr/bin/gnuchess.sh
+Terminal=false
+Categories=Game;
+X-MB-SingleInstance=true
+Icon=gnuchess
+
diff --git a/recipes/gnuchess/files/gnuchess.png b/recipes/gnuchess/files/gnuchess.png
new file mode 100644
index 0000000000..a0d2e5fa62
--- /dev/null
+++ b/recipes/gnuchess/files/gnuchess.png
Binary files differ
diff --git a/recipes/gnuchess/files/gnuchess.sh b/recipes/gnuchess/files/gnuchess.sh
new file mode 100644
index 0000000000..2da70498d1
--- /dev/null
+++ b/recipes/gnuchess/files/gnuchess.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+xboard -size Average -font 6x13 -coordFont 6x13 -clockFont 6x13 -fcp "/usr/bin/gnuchess -b- -e 100 -l- -f 1 -p-"
+
diff --git a/recipes/gnuchess/gnuchess_5.021.bb b/recipes/gnuchess/gnuchess_5.021.bb
index 18c94bdab0..8d1afea1bf 100644
--- a/recipes/gnuchess/gnuchess_5.021.bb
+++ b/recipes/gnuchess/gnuchess_5.021.bb
@@ -3,11 +3,23 @@ SECTION = "console"
PRIORITY = "optional"
MAINTAINER = "Andreas Holzer <a.holzer@cheese.at>"
LICENSE = "GPL"
-SRC_URI = "http://members.cheese.at/woody/fltk-chess/gnuchess_5.02.tar.gz"
+PR = "r1"
+RSUGGESTS_${PN} = "xboard"
+SRC_URI = "http://members.cheese.at/woody/fltk-chess/gnuchess_5.02.tar.gz \
+ file://gnuchess.desktop \
+ file://gnuchess.png \
+ file://gnuchess.sh \
+"
S = "${WORKDIR}/chess-5.02/src"
inherit autotools
do_install() {
+ install -d ${D}${bindir}
+ install -d ${D}${datadir}/pixmaps/
+ install -d ${D}${datadir}/applications/
+ install -m 0755 ${WORKDIR}/gnuchess.sh ${D}${bindir}
+ install -m 0644 ${WORKDIR}/gnuchess.png ${D}${datadir}/pixmaps/
+ install -m 0644 ${WORKDIR}/gnuchess.desktop ${D}${datadir}/applications/
install -D ${S}/gnuchess ${D}${bindir}/gnuchess
}
diff --git a/recipes/gnupg/gnupg-1.4.10/long-long-thumb.patch b/recipes/gnupg/gnupg-1.4.10/long-long-thumb.patch
new file mode 100644
index 0000000000..dd4ec73eca
--- /dev/null
+++ b/recipes/gnupg/gnupg-1.4.10/long-long-thumb.patch
@@ -0,0 +1,12 @@
+--- gnupg/mpi/longlong.h~ 2006-02-14 10:09:55.000000000 +0000
++++ gnupg/mpi/longlong.h 2008-10-27 13:11:09.000000000 +0000
+@@ -181,7 +181,7 @@
+ /***************************************
+ ************** ARM ******************
+ ***************************************/
+-#if defined (__arm__) && W_TYPE_SIZE == 32
++#if defined (__arm__) && W_TYPE_SIZE == 32 && !defined(__thumb__)
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("adds %1, %4, %5\n" \
+ "adc %0, %2, %3" \
+
diff --git a/recipes/gnupg/gnupg-1.4.2.2/15_free_caps.patch b/recipes/gnupg/gnupg-1.4.2.2/15_free_caps.patch
deleted file mode 100644
index 20949a7d49..0000000000
--- a/recipes/gnupg/gnupg-1.4.2.2/15_free_caps.patch
+++ /dev/null
@@ -1,93 +0,0 @@
---- /home/weasel/tmp/debian-gpg/gnupg-1.2.5/g10/status.c 2004-07-21 09:59:45.000000000 +0200
-+++ gnupg-1.2.5/g10/status.c 2004-08-01 20:07:42.071690680 +0200
-@@ -346,6 +346,9 @@
- {
- char buf[100];
- struct shmid_ds shmds;
-+#ifdef USE_CAPABILITIES
-+ cap_t caps;
-+#endif
-
- #ifndef IPC_RMID_DEFERRED_RELEASE
- atexit( remove_shmid );
-@@ -371,7 +374,9 @@
- (unsigned)shm_size/1024, shm_area, shm_id );
- if( lock_mem ) {
- #ifdef USE_CAPABILITIES
-- cap_set_proc( cap_from_text("cap_ipc_lock+ep") );
-+ caps = cap_from_text("cap_ipc_lock=ep");
-+ cap_set_proc( caps );
-+ cap_free( caps );
- #endif
- /* (need the cast for Solaris with Sun's workshop compilers) */
- if ( mlock ( (char*)shm_area, shm_size) )
-@@ -380,7 +385,9 @@
- else
- shm_is_locked = 1;
- #ifdef USE_CAPABILITIES
-- cap_set_proc( cap_from_text("cap_ipc_lock+p") );
-+ caps = cap_from_text("cap_ipc_lock=p");
-+ cap_set_proc( caps );
-+ cap_free( caps );
- #endif
- }
-
-@@ -407,7 +414,9 @@
-
- if( lock_mem ) {
- #ifdef USE_CAPABILITIES
-- cap_set_proc( cap_from_text("cap_ipc_lock+ep") );
-+ caps = cap_from_text("cap_ipc_lock=ep");
-+ cap_set_proc( caps );
-+ cap_free( caps );
- #endif
- #ifdef IPC_HAVE_SHM_LOCK
- if ( shmctl (shm_id, SHM_LOCK, 0) )
-@@ -419,7 +428,9 @@
- log_info("Locking shared memory %d failed: No way to do it\n", shm_id );
- #endif
- #ifdef USE_CAPABILITIES
-- cap_set_proc( cap_from_text("cap_ipc_lock+p") );
-+ caps = cap_from_text("cap_ipc_lock=p");
-+ cap_set_proc( caps );
-+ cap_free( caps );
- #endif
- }
-
---- /home/weasel/tmp/debian-gpg/gnupg-1.2.5/util/secmem.c 2004-02-24 17:06:58.000000000 +0100
-+++ gnupg-1.2.5/util/secmem.c 2004-08-01 20:08:10.873412378 +0200
-@@ -97,12 +97,18 @@
- {
- #if defined(USE_CAPABILITIES) && defined(HAVE_MLOCK)
- int err;
-+ cap_t caps;
-+
-+ caps = cap_from_text("cap_ipc_lock=ep");
-+ cap_set_proc( caps );
-+ cap_free( caps );
-
-- cap_set_proc( cap_from_text("cap_ipc_lock+ep") );
- err = mlock( p, n );
- if( err && errno )
- err = errno;
-- cap_set_proc( cap_from_text("cap_ipc_lock+p") );
-+ caps = cap_from_text("cap_ipc_lock=p");
-+ cap_set_proc( caps );
-+ cap_free( caps );
-
- if( err ) {
- if( errno != EPERM
-@@ -301,8 +307,12 @@
- if( !n ) {
- #ifndef __riscos__
- #ifdef USE_CAPABILITIES
-+ cap_t caps;
-+
- /* drop all capabilities */
-- cap_set_proc( cap_from_text("all-eip") );
-+ caps = cap_from_text("all-eip");
-+ cap_set_proc( caps );
-+ cap_free( caps );
-
- #elif !defined(HAVE_DOSISH_SYSTEM)
- uid_t uid;
diff --git a/recipes/gnupg/gnupg-1.4.2.2/16_min_privileges.patch b/recipes/gnupg/gnupg-1.4.2.2/16_min_privileges.patch
deleted file mode 100644
index b29233b33b..0000000000
--- a/recipes/gnupg/gnupg-1.4.2.2/16_min_privileges.patch
+++ /dev/null
@@ -1,68 +0,0 @@
---- gnupg-1.4.0/g10/g10.c 2004-12-16 09:47:36.000000000 +0000
-+++ /tmp/dpep.O5S02c/gnupg-1.4.0/g10/g10.c 2005-02-03 23:31:40.645873299 +0000
-@@ -69,6 +69,11 @@
- #endif
-
-
-+#ifdef USE_CAPABILITIES
-+#include <sys/capability.h>
-+#include <sys/prctl.h>
-+#endif
-+
- enum cmd_and_opt_values
- {
- aNull = 0,
-@@ -1618,6 +1623,10 @@
- #ifdef USE_SHM_COPROCESSING
- ulong requested_shm_size=0;
- #endif
-+#ifdef USE_CAPABILITIES
-+ uid_t curr_uid;
-+ cap_t caps;
-+#endif
-
- #ifdef __riscos__
- opt.lock_once = 1;
-@@ -1629,6 +1638,33 @@
- * when adding any stuff between here and the call to
- * secmem_init() somewhere after the option parsing
- */
-+
-+ /* if we use capabilities and run as root, we can immediately setuid back
-+ * to the normal user and only keep CAP_IPC_LOCK until the shared memory is
-+ * set up.
-+ */
-+#ifdef USE_CAPABILITIES
-+ curr_uid = getuid();
-+ if( curr_uid && !geteuid() ) { /* we are setuid root */
-+ if( prctl( PR_SET_KEEPCAPS, 1, 0, 0, 0 ) ) {
-+ perror( "main(): could not keep capabilities" );
-+ return -100;
-+ }
-+
-+ if( setuid( curr_uid ) ) {
-+ perror( "main(): could not set user id" );
-+ return -100;
-+ }
-+
-+ caps = cap_from_text( "cap_ipc_lock=p" );
-+ if( cap_set_proc( caps ) ) {
-+ perror( "main(): could not install capabilities" );
-+ return -100;
-+ }
-+ cap_free( caps );
-+ }
-+#endif
-+
- log_set_name("gpg");
- secure_random_alloc(); /* put random number into secure memory */
- may_coredump = disable_core_dumps();
-@@ -1747,7 +1783,7 @@
- }
- #endif
- /* initialize the secure memory. */
-- got_secmem=secmem_init( 32768 );
-+ got_secmem=secmem_init( 32768 ); /* this will drop all remaining privileges */
- maybe_setuid = 0;
- /* Okay, we are now working under our real uid */
-
diff --git a/recipes/gnupg/gnupg-1.4.2.2/22_zero_length_mpi_fix.patch b/recipes/gnupg/gnupg-1.4.2.2/22_zero_length_mpi_fix.patch
deleted file mode 100644
index 8f13db4d23..0000000000
--- a/recipes/gnupg/gnupg-1.4.2.2/22_zero_length_mpi_fix.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-diff -urNad gnupg-1.4.2~/mpi/mpicoder.c gnupg-1.4.2/mpi/mpicoder.c
---- gnupg-1.4.2~/mpi/mpicoder.c 2005-05-31 06:30:05.000000000 +0000
-+++ gnupg-1.4.2/mpi/mpicoder.c 2005-09-29 00:52:19.000000000 +0000
-@@ -80,16 +80,20 @@
- mpi_limb_t a;
- MPI val = MPI_NULL;
-
-+ if (nread == nmax)
-+ goto overflow;
- if( (c = iobuf_get(inp)) == -1 )
- goto leave;
-- if (++nread >= nmax)
-- goto overflow;
-+ nread++;
- nbits = c << 8;
-+
-+ if (nread == nmax)
-+ goto overflow;
- if( (c = iobuf_get(inp)) == -1 )
- goto leave;
-- if (++nread >= nmax)
-- goto overflow;
-+ nread++;
- nbits |= c;
-+
- if( nbits > MAX_EXTERN_MPI_BITS ) {
- log_error("mpi too large for this implementation (%u bits)\n", nbits);
- goto leave;
-@@ -112,7 +116,7 @@
- for( ; j > 0; j-- ) {
- a = 0;
- for(; i < BYTES_PER_MPI_LIMB; i++ ) {
-- if (nread >= nmax) {
-+ if (nread == nmax) {
- #ifdef M_DEBUG
- mpi_debug_free (val);
- #else
diff --git a/recipes/gnupg/gnupg-1.4.2.2/30_nm_always_check.patch b/recipes/gnupg/gnupg-1.4.2.2/30_nm_always_check.patch
deleted file mode 100644
index 914f1475b7..0000000000
--- a/recipes/gnupg/gnupg-1.4.2.2/30_nm_always_check.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Originally the test for _'s on symbols was not done when cross-compiling and
-it was assumed that the _'s were appended. The test does in fact work since
-it simply compiles a file and then run's nm on it. So patch this to enable.
-Without this x86 targets fail during linking since the assembler code has
-the _'s appended when it shouldn't.
-
---- gnupg-1.4.2.2/acinclude.m4 2006/09/11 22:11:23 1.1
-+++ gnupg-1.4.2.2/acinclude.m4 2006/09/11 22:17:25
-@@ -673,11 +673,7 @@
- ac_cv_sys_symbol_underscore=yes
- ;;
- *)
-- if test "$cross_compiling" = yes; then
-- ac_cv_sys_symbol_underscore=yes
-- else
-- tmp_do_check="yes"
-- fi
-+ tmp_do_check="yes"
- ;;
- esac
-
diff --git a/recipes/gnupg/gnupg-1.4.2.2/dont_use_mips_h_constraint.patch b/recipes/gnupg/gnupg-1.4.2.2/dont_use_mips_h_constraint.patch
deleted file mode 100644
index e0212b8e4b..0000000000
--- a/recipes/gnupg/gnupg-1.4.2.2/dont_use_mips_h_constraint.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-Avoid using h contraint on mips for gcc >= 4.4 as it has been removed
-on gcc 4.4 onwards
-
-see
-
-http://gcc.gnu.org/gcc-4.4/changes.html
-
--Khem
-
-Index: gnupg-1.4.2.2/mpi/longlong.h
-===================================================================
---- gnupg-1.4.2.2.orig/mpi/longlong.h 2009-12-18 16:44:21.334633084 -0800
-+++ gnupg-1.4.2.2/mpi/longlong.h 2009-12-18 16:48:29.202212344 -0800
-@@ -711,7 +711,15 @@ extern USItype __udiv_qrnnd ();
- ************** MIPS *****************
- ***************************************/
- #if defined (__mips__) && W_TYPE_SIZE == 32
--#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
-+#if (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4)
-+#define umul_ppmm(w1, w0, u, v) \
-+ do { \
-+ UDItype _r; \
-+ _r = (UDItype) u * v; \
-+ (w1) = _r >> 32; \
-+ (w0) = (USItype) _r; \
-+ } while (0)
-+#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7
- #define umul_ppmm(w1, w0, u, v) \
- __asm__ ("multu %2,%3" \
- : "=l" ((USItype)(w0)), \
-@@ -736,7 +744,16 @@ extern USItype __udiv_qrnnd ();
- ************** MIPS/64 **************
- ***************************************/
- #if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64
--#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
-+#if (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4)
-+typedef unsigned int UTItype __attribute__ ((mode (TI)));
-+#define umul_ppmm(w1, w0, u, v) \
-+ do { \
-+ UTItype _r; \
-+ _r = (UTItype) u * v; \
-+ (w1) = _r >> 64; \
-+ (w0) = (UDItype) _r; \
-+ } while (0)
-+#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7
- #define umul_ppmm(w1, w0, u, v) \
- __asm__ ("dmultu %2,%3" \
- : "=l" ((UDItype)(w0)), \
diff --git a/recipes/gnupg/gnupg-1.4.2.2/long-long-thumb.patch b/recipes/gnupg/gnupg-1.4.2.2/long-long-thumb.patch
deleted file mode 100644
index 36e9992772..0000000000
--- a/recipes/gnupg/gnupg-1.4.2.2/long-long-thumb.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- gnupg/mpi/longlong.h~ 2006-02-14 10:09:55.000000000 +0000
-+++ gnupg/mpi/longlong.h 2008-10-27 13:11:09.000000000 +0000
-@@ -181,7 +181,7 @@
- /***************************************
- ************** ARM ******************
- ***************************************/
--#if defined (__arm__) && W_TYPE_SIZE == 32
-+#if defined (__arm__) && W_TYPE_SIZE == 32 && !defined(__thumb__)
- #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("adds %1, %4, %5\n" \
- "adc %0, %2, %3" \
diff --git a/recipes/gnupg/gnupg.inc b/recipes/gnupg/gnupg.inc
index f41dbdc73c..7115d46614 100644
--- a/recipes/gnupg/gnupg.inc
+++ b/recipes/gnupg/gnupg.inc
@@ -9,7 +9,7 @@ inherit autotools gettext
MIRRORS_prepend () {
ftp://ftp.gnupg.org/gcrypt http://mirrors.rootmode.com/ftp.gnupg.org
}
-SRC_URI = "ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-${PV}.tar.bz2"
+SRC_URI = "ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-${PV}.tar.bz2;name=src"
S = "${WORKDIR}/gnupg-${PV}"
# --with-egd-socket=NAME use NAME for the EGD socket
diff --git a/recipes/gnupg/gnupg_1.4.10.bb b/recipes/gnupg/gnupg_1.4.10.bb
new file mode 100644
index 0000000000..38af0873fa
--- /dev/null
+++ b/recipes/gnupg/gnupg_1.4.10.bb
@@ -0,0 +1,13 @@
+require gnupg.inc
+
+DEPENDS += "readline"
+EXTRA_OECONF += "--with-readline=${STAGING_LIBDIR}/.. ac_cv_sys_symbol_underscore=yes"
+# --without-readline do not support fancy command line editing
+
+SRC_URI += "file://long-long-thumb.patch;patch=1"
+SRC_URI[src.md5sum] = "dcf7ed712997888d616e029637bfc303"
+SRC_URI[src.sha256sum] = "a2907f4432d67894e425e48ae85785dd60ecb01658c9682bcd96f5e91043bb38"
+
+S = "${WORKDIR}/gnupg-${PV}"
+
+PR = "r2"
diff --git a/recipes/gnupg/gnupg_1.4.2.2.bb b/recipes/gnupg/gnupg_1.4.2.2.bb
deleted file mode 100644
index 7f21a312ae..0000000000
--- a/recipes/gnupg/gnupg_1.4.2.2.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-require gnupg.inc
-
-DEPENDS += "readline"
-EXTRA_OECONF += "--with-readline=${STAGING_LIBDIR}/.."
-# --without-readline do not support fancy command line editing
-
-SRC_URI += "file://15_free_caps.patch;patch=1 \
- file://16_min_privileges.patch;patch=1 \
- file://22_zero_length_mpi_fix.patch;patch=1 \
- file://30_nm_always_check.patch;patch=1 \
- file://long-long-thumb.patch;patch=1 \
- file://dont_use_mips_h_constraint.patch;patch=1 \
- "
-
-S = "${WORKDIR}/gnupg-${PV}"
-
-PR = "r4"
diff --git a/recipes/gnutls/gnutls-1.6.3/configure_madness.patch b/recipes/gnutls/gnutls-1.6.3/configure_madness.patch
deleted file mode 100644
index bdee81cc54..0000000000
--- a/recipes/gnutls/gnutls-1.6.3/configure_madness.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-Index: gnutls-1.6.3/configure.in
-===================================================================
---- gnutls-1.6.3.orig/configure.in 2008-02-29 09:58:12.000000000 +0000
-+++ gnutls-1.6.3/configure.in 2008-02-29 09:58:15.000000000 +0000
-@@ -574,13 +574,13 @@
- AC_LIBTOOL_WIN32_DLL
- AC_PROG_LIBTOOL
-
--LIBGNUTLS_LIBS="-L${libdir} -lgnutls $LIBTASN1_LIBS $LIBGCRYPT_LIBS $LIBS"
--LIBGNUTLS_CFLAGS="$LIBGCRYPT_CFLAGS $LIBTASN1_CFLAGS -I${includedir}"
-+LIBGNUTLS_LIBS="-lgnutls $LIBTASN1_LIBS $LIBGCRYPT_LIBS $LIBS"
-+LIBGNUTLS_CFLAGS="$LIBGCRYPT_CFLAGS $LIBTASN1_CFLAGS"
- AC_SUBST(LIBGNUTLS_LIBS)
- AC_SUBST(LIBGNUTLS_CFLAGS)
-
--LIBGNUTLS_EXTRA_LIBS="-L${libdir} -lgnutls-extra $LIBOPENCDK_LIBS $LZO_LIBS $LIBGNUTLS_LIBS"
--LIBGNUTLS_EXTRA_CFLAGS="$LIBOPENCDK_CFLAGS -I${includedir}"
-+LIBGNUTLS_EXTRA_LIBS="-lgnutls-extra $LIBOPENCDK_LIBS $LZO_LIBS $LIBGNUTLS_LIBS"
-+LIBGNUTLS_EXTRA_CFLAGS="$LIBOPENCDK_CFLAGS"
- AC_SUBST(LIBGNUTLS_EXTRA_LIBS)
- AC_SUBST(LIBGNUTLS_EXTRA_CFLAGS)
- export ac_full
-Index: gnutls-1.6.3/lib/gnutls.pc.in
-===================================================================
---- gnutls-1.6.3.orig/lib/gnutls.pc.in 2008-02-29 09:58:23.000000000 +0000
-+++ gnutls-1.6.3/lib/gnutls.pc.in 2008-02-29 09:58:49.000000000 +0000
-@@ -18,6 +18,7 @@
- Name: GnuTLS
- Description: Transport Security Layer implementation for the GNU system
- Version: @VERSION@
-+Requires.private: gcrypt
- Libs: -L${libdir} -lgnutls
--Libs.private: @LIBGNUTLS_LIBS@
-+Libs.private: -L${libdir} -lgnutls
- Cflags: -I${includedir}
-Index: gnutls-1.6.3/libextra/gnutls-extra.pc.in
-===================================================================
---- gnutls-1.6.3.orig/libextra/gnutls-extra.pc.in 2008-02-29 09:59:02.000000000 +0000
-+++ gnutls-1.6.3/libextra/gnutls-extra.pc.in 2008-02-29 09:59:31.000000000 +0000
-@@ -18,7 +18,8 @@
- Name: GnuTLS-extra
- Description: Additional add-ons for GnuTLS licensed under GPL
- Requires: gnutls
-+Requires.private: gnutls
- Version: @VERSION@
- Libs: -L${libdir} -lgnutls-extra
--Libs.private: @LIBGNUTLS_EXTRA_LIBS@
-+Libs.private: -L${libdir} -lgnutls-extra
- Cflags: -I${includedir}
diff --git a/recipes/gnutls/gnutls-1.6.3/gnutls-openssl.patch b/recipes/gnutls/gnutls-1.6.3/gnutls-openssl.patch
deleted file mode 100644
index e2c189592f..0000000000
--- a/recipes/gnutls/gnutls-1.6.3/gnutls-openssl.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-Index: gnutls-1.6.0/libextra/gnutls_openssl.c
-===================================================================
---- gnutls-1.6.0.orig/libextra/gnutls_openssl.c 2006-08-13 22:34:09.000000000 +0200
-+++ gnutls-1.6.0/libextra/gnutls_openssl.c 2006-12-12 15:07:59.002227000 +0100
-@@ -256,12 +256,17 @@
- ssl->rfd = (gnutls_transport_ptr_t) - 1;
- ssl->wfd = (gnutls_transport_ptr_t) - 1;
-
-+ ssl->ssl_peek_buffer = NULL;
-+ ssl->ssl_peek_buffer_size = ssl->ssl_peek_avail = 0;
-+
- return ssl;
- }
-
- void
- SSL_free (SSL * ssl)
- {
-+ if (ssl->ssl_peek_buffer)
-+ free(ssl->ssl_peek_buffer);
- gnutls_certificate_free_credentials (ssl->gnutls_cred);
- gnutls_deinit (ssl->gnutls_state);
- free (ssl);
-@@ -285,6 +290,7 @@
- SSL_set_fd (SSL * ssl, int fd)
- {
- gnutls_transport_set_ptr (ssl->gnutls_state, GNUTLS_INT_TO_POINTER (fd));
-+ ssl->rfd = ssl->wfd = fd;
- return 1;
- }
-
-@@ -310,6 +316,17 @@
- return 1;
- }
-
-+int SSL_get_rfd(SSL *ssl)
-+{
-+ return ssl->rfd;
-+}
-+
-+int SSL_get_wfd(SSL *ssl)
-+{
-+ return ssl->wfd;
-+}
-+
-+
- void
- SSL_set_bio (SSL * ssl, BIO * rbio, BIO * wbio)
- {
-@@ -325,6 +342,8 @@
- int
- SSL_pending (SSL * ssl)
- {
-+ if (ssl->ssl_peek_avail)
-+ return ssl->ssl_peek_avail;
- return gnutls_record_check_pending (ssl->gnutls_state);
- }
-
-@@ -480,11 +499,50 @@
- return 1;
- }
-
-+int SSL_peek(SSL *ssl, void *buf, int len)
-+{
-+ if (len > ssl->ssl_peek_buffer_size) {
-+ ssl->ssl_peek_buffer = realloc (ssl->ssl_peek_buffer, len);
-+ ssl->ssl_peek_buffer_size = len;
-+ }
-+
-+ if (ssl->ssl_peek_avail == 0) {
-+
-+ int ret;
-+
-+ ret = gnutls_record_recv(ssl->gnutls_state, ssl->ssl_peek_buffer, len);
-+ ssl->last_error = ret;
-+
-+ if (ret > 0)
-+ ssl->ssl_peek_avail += ret;
-+ }
-+
-+ if (len > ssl->ssl_peek_avail)
-+ len = ssl->ssl_peek_avail;
-+
-+ memcpy (buf, ssl->ssl_peek_buffer, len);
-+
-+ return len;
-+}
-+
- int
- SSL_read (SSL * ssl, void *buf, int len)
- {
- int ret;
-
-+ if (ssl->ssl_peek_avail) {
-+ int n = (ssl->ssl_peek_avail > len) ? len : ssl->ssl_peek_avail;
-+
-+ memcpy (buf, ssl->ssl_peek_buffer, n);
-+
-+ if (ssl->ssl_peek_avail > n)
-+ memmove (ssl->ssl_peek_buffer, ssl->ssl_peek_buffer + n, ssl->ssl_peek_avail - n);
-+
-+ ssl->ssl_peek_avail -= n;
-+
-+ return n;
-+ }
-+
- ret = gnutls_record_recv (ssl->gnutls_state, buf, len);
- ssl->last_error = ret;
-
-Index: gnutls-1.6.0/includes/gnutls/openssl.h
-===================================================================
---- gnutls-1.6.0.orig/includes/gnutls/openssl.h 2006-03-08 11:44:58.000000000 +0100
-+++ gnutls-1.6.0/includes/gnutls/openssl.h 2006-12-12 15:07:26.032227000 +0100
-@@ -164,6 +164,11 @@
-
- gnutls_transport_ptr_t rfd;
- gnutls_transport_ptr_t wfd;
-+
-+ char *ssl_peek_buffer;
-+ size_t ssl_peek_buffer_size;
-+ size_t ssl_peek_avail;
-+
- };
-
- #define rbio gnutls_state
diff --git a/recipes/gnutls/gnutls-1.6.3/gnutls-texinfo-euro.patch b/recipes/gnutls/gnutls-1.6.3/gnutls-texinfo-euro.patch
deleted file mode 100644
index e2a2762424..0000000000
--- a/recipes/gnutls/gnutls-1.6.3/gnutls-texinfo-euro.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-The version of texinfo in Debian Sarge does not understand the @euro{} command.
-This patch replaces the @euro{} command with the word "euro".
-
---- gnutls-1.3.5/doc/signatures.texi.orig 2006-04-26 08:06:40.918268000 +0930
-+++ gnutls-1.3.5/doc/signatures.texi 2006-04-26 08:06:52.446515440 +0930
-@@ -11,8 +11,8 @@
- long as it is difficult enough to generate two different messages with
- the same hash algorithm output. In that case the same signature could
- be used as a proof for both messages. Nobody wants to sign an innocent
--message of donating 1 @euro{} to Greenpeace and find out that he
--donated 1.000.000 @euro{} to Bad Inc.
-+message of donating 1 euro to Greenpeace and find out that he
-+donated 1.000.000 euro to Bad Inc.
-
- For a hash algorithm to be called cryptographic the following three
- requirements must hold
diff --git a/recipes/gnutls/gnutls-2.4.2/configure_madness.patch b/recipes/gnutls/gnutls-2.4.2/configure_madness.patch
deleted file mode 100644
index 19b6b498b4..0000000000
--- a/recipes/gnutls/gnutls-2.4.2/configure_madness.patch
+++ /dev/null
@@ -1,57 +0,0 @@
----
- configure.in | 8 ++++----
- lib/gnutls.pc.in | 3 ++-
- libextra/gnutls-extra.pc.in | 3 ++-
- 3 files changed, 8 insertions(+), 6 deletions(-)
-
---- gnutls-2.4.0.orig/configure.in
-+++ gnutls-2.4.0/configure.in
-@@ -637,17 +637,17 @@ AC_MSG_RESULT([***
- *** Detecting options for shared libraries...
- ])
- AC_LIBTOOL_WIN32_DLL
- AC_PROG_LIBTOOL
-
--LIBGNUTLS_LIBS="-L${libdir} -lgnutls $LIBTASN1_LIBS $LIBGCRYPT_LIBS $LIBS"
--LIBGNUTLS_CFLAGS="$LIBGCRYPT_CFLAGS $LIBTASN1_CFLAGS -I${includedir}"
-+LIBGNUTLS_LIBS="-lgnutls $LIBTASN1_LIBS $LIBGCRYPT_LIBS $LIBS"
-+LIBGNUTLS_CFLAGS="$LIBGCRYPT_CFLAGS $LIBTASN1_CFLAGS"
- AC_SUBST(LIBGNUTLS_LIBS)
- AC_SUBST(LIBGNUTLS_CFLAGS)
-
--LIBGNUTLS_EXTRA_LIBS="-L${libdir} -lgnutls-extra $LZO_LIBS $LIBGNUTLS_LIBS"
--LIBGNUTLS_EXTRA_CFLAGS="-I${includedir}"
-+LIBGNUTLS_EXTRA_LIBS=" -lgnutls-extra $LZO_LIBS $LIBGNUTLS_LIBS"
-+LIBGNUTLS_EXTRA_CFLAGS=""
- AC_SUBST(LIBGNUTLS_EXTRA_LIBS)
- AC_SUBST(LIBGNUTLS_EXTRA_CFLAGS)
- export ac_full
-
- AM_CFLAGS="${AM_CFLAGS} ${LIBGCRYPT_CFLAGS}"
---- gnutls-2.4.0.orig/lib/gnutls.pc.in
-+++ gnutls-2.4.0/lib/gnutls.pc.in
-@@ -16,8 +16,9 @@ libdir=@libdir@
- includedir=@includedir@
-
- Name: GnuTLS
- Description: Transport Security Layer implementation for the GNU system
- Version: @VERSION@
-+Requires.private: libgcrypt
- Libs: -L${libdir} -lgnutls
--Libs.private: @LIBGNUTLS_LIBS@
-+Libs.private: -L${libdir} -lgnutls
- Cflags: -I${includedir}
---- gnutls-2.4.0.orig/libextra/gnutls-extra.pc.in
-+++ gnutls-2.4.0/libextra/gnutls-extra.pc.in
-@@ -16,9 +16,10 @@ libdir=@libdir@
- includedir=@includedir@
-
- Name: GnuTLS-extra
- Description: Additional add-ons for GnuTLS licensed under GPL
- Requires: gnutls
-+Requires.private: gnutls
- Version: @VERSION@
- Libs: -L${libdir} -lgnutls-extra
--Libs.private: @LIBGNUTLS_EXTRA_LIBS@
-+Libs.private: -L${libdir} -lgnutls-extra
- Cflags: -I${includedir}
diff --git a/recipes/gnutls/gnutls-2.4.2/gnutls-openssl.patch b/recipes/gnutls/gnutls-2.4.2/gnutls-openssl.patch
deleted file mode 100644
index e2c189592f..0000000000
--- a/recipes/gnutls/gnutls-2.4.2/gnutls-openssl.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-Index: gnutls-1.6.0/libextra/gnutls_openssl.c
-===================================================================
---- gnutls-1.6.0.orig/libextra/gnutls_openssl.c 2006-08-13 22:34:09.000000000 +0200
-+++ gnutls-1.6.0/libextra/gnutls_openssl.c 2006-12-12 15:07:59.002227000 +0100
-@@ -256,12 +256,17 @@
- ssl->rfd = (gnutls_transport_ptr_t) - 1;
- ssl->wfd = (gnutls_transport_ptr_t) - 1;
-
-+ ssl->ssl_peek_buffer = NULL;
-+ ssl->ssl_peek_buffer_size = ssl->ssl_peek_avail = 0;
-+
- return ssl;
- }
-
- void
- SSL_free (SSL * ssl)
- {
-+ if (ssl->ssl_peek_buffer)
-+ free(ssl->ssl_peek_buffer);
- gnutls_certificate_free_credentials (ssl->gnutls_cred);
- gnutls_deinit (ssl->gnutls_state);
- free (ssl);
-@@ -285,6 +290,7 @@
- SSL_set_fd (SSL * ssl, int fd)
- {
- gnutls_transport_set_ptr (ssl->gnutls_state, GNUTLS_INT_TO_POINTER (fd));
-+ ssl->rfd = ssl->wfd = fd;
- return 1;
- }
-
-@@ -310,6 +316,17 @@
- return 1;
- }
-
-+int SSL_get_rfd(SSL *ssl)
-+{
-+ return ssl->rfd;
-+}
-+
-+int SSL_get_wfd(SSL *ssl)
-+{
-+ return ssl->wfd;
-+}
-+
-+
- void
- SSL_set_bio (SSL * ssl, BIO * rbio, BIO * wbio)
- {
-@@ -325,6 +342,8 @@
- int
- SSL_pending (SSL * ssl)
- {
-+ if (ssl->ssl_peek_avail)
-+ return ssl->ssl_peek_avail;
- return gnutls_record_check_pending (ssl->gnutls_state);
- }
-
-@@ -480,11 +499,50 @@
- return 1;
- }
-
-+int SSL_peek(SSL *ssl, void *buf, int len)
-+{
-+ if (len > ssl->ssl_peek_buffer_size) {
-+ ssl->ssl_peek_buffer = realloc (ssl->ssl_peek_buffer, len);
-+ ssl->ssl_peek_buffer_size = len;
-+ }
-+
-+ if (ssl->ssl_peek_avail == 0) {
-+
-+ int ret;
-+
-+ ret = gnutls_record_recv(ssl->gnutls_state, ssl->ssl_peek_buffer, len);
-+ ssl->last_error = ret;
-+
-+ if (ret > 0)
-+ ssl->ssl_peek_avail += ret;
-+ }
-+
-+ if (len > ssl->ssl_peek_avail)
-+ len = ssl->ssl_peek_avail;
-+
-+ memcpy (buf, ssl->ssl_peek_buffer, len);
-+
-+ return len;
-+}
-+
- int
- SSL_read (SSL * ssl, void *buf, int len)
- {
- int ret;
-
-+ if (ssl->ssl_peek_avail) {
-+ int n = (ssl->ssl_peek_avail > len) ? len : ssl->ssl_peek_avail;
-+
-+ memcpy (buf, ssl->ssl_peek_buffer, n);
-+
-+ if (ssl->ssl_peek_avail > n)
-+ memmove (ssl->ssl_peek_buffer, ssl->ssl_peek_buffer + n, ssl->ssl_peek_avail - n);
-+
-+ ssl->ssl_peek_avail -= n;
-+
-+ return n;
-+ }
-+
- ret = gnutls_record_recv (ssl->gnutls_state, buf, len);
- ssl->last_error = ret;
-
-Index: gnutls-1.6.0/includes/gnutls/openssl.h
-===================================================================
---- gnutls-1.6.0.orig/includes/gnutls/openssl.h 2006-03-08 11:44:58.000000000 +0100
-+++ gnutls-1.6.0/includes/gnutls/openssl.h 2006-12-12 15:07:26.032227000 +0100
-@@ -164,6 +164,11 @@
-
- gnutls_transport_ptr_t rfd;
- gnutls_transport_ptr_t wfd;
-+
-+ char *ssl_peek_buffer;
-+ size_t ssl_peek_buffer_size;
-+ size_t ssl_peek_avail;
-+
- };
-
- #define rbio gnutls_state
diff --git a/recipes/gnutls/gnutls-2.4.2/gnutls-replace-siginterrupt.patch b/recipes/gnutls/gnutls-2.4.2/gnutls-replace-siginterrupt.patch
deleted file mode 100644
index 9b734a9bf9..0000000000
--- a/recipes/gnutls/gnutls-2.4.2/gnutls-replace-siginterrupt.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-Index: gnutls-2.4.2/src/tests.c
-===================================================================
---- gnutls-2.4.2.orig/src/tests.c 2008-09-15 13:04:19.000000000 -0700
-+++ gnutls-2.4.2/src/tests.c 2009-03-04 15:25:09.000000000 -0800
-@@ -491,6 +491,7 @@
- int old, secs = 6;
-
- #ifndef _WIN32
-+ struct sigaction act;
- signal (SIGALRM, got_alarm);
- #endif
-
-@@ -511,7 +512,9 @@
- return TEST_FAILED;
-
- #ifndef _WIN32
-- old = siginterrupt (SIGALRM, 1);
-+ (void) sigaction(SIGALRM, NULL, &act);
-+ act.sa_flags &= ~SA_RESTART;
-+ old = sigaction(SIGALRM, &act, NULL);
- alarm (secs);
- #else
- setsockopt ((int)gnutls_transport_get_ptr (session), SOL_SOCKET, SO_RCVTIMEO,
-@@ -525,7 +528,12 @@
- while (ret > 0);
-
- #ifndef _WIN32
-- siginterrupt (SIGALRM, old);
-+ (void) sigaction(SIGALRM, NULL, &act);
-+ if (old)
-+ act.sa_flags &= ~SA_RESTART;
-+ else
-+ act.sa_flags |= SA_RESTART;
-+ sigaction(SIGALRM, &act, NULL);
- #else
- if (WSAGetLastError () == WSAETIMEDOUT ||
- WSAGetLastError () == WSAECONNABORTED)
diff --git a/recipes/gnutls/gnutls-2.4.2/gnutls-texinfo-euro.patch b/recipes/gnutls/gnutls-2.4.2/gnutls-texinfo-euro.patch
deleted file mode 100644
index e2a2762424..0000000000
--- a/recipes/gnutls/gnutls-2.4.2/gnutls-texinfo-euro.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-The version of texinfo in Debian Sarge does not understand the @euro{} command.
-This patch replaces the @euro{} command with the word "euro".
-
---- gnutls-1.3.5/doc/signatures.texi.orig 2006-04-26 08:06:40.918268000 +0930
-+++ gnutls-1.3.5/doc/signatures.texi 2006-04-26 08:06:52.446515440 +0930
-@@ -11,8 +11,8 @@
- long as it is difficult enough to generate two different messages with
- the same hash algorithm output. In that case the same signature could
- be used as a proof for both messages. Nobody wants to sign an innocent
--message of donating 1 @euro{} to Greenpeace and find out that he
--donated 1.000.000 @euro{} to Bad Inc.
-+message of donating 1 euro to Greenpeace and find out that he
-+donated 1.000.000 euro to Bad Inc.
-
- For a hash algorithm to be called cryptographic the following three
- requirements must hold
diff --git a/recipes/gnutls/gnutls-2.8.5/gnutls-openssl.patch b/recipes/gnutls/gnutls-2.8.5/gnutls-openssl.patch
new file mode 100644
index 0000000000..596bd01ffe
--- /dev/null
+++ b/recipes/gnutls/gnutls-2.8.5/gnutls-openssl.patch
@@ -0,0 +1,149 @@
+---
+ libextra/gnutls_openssl.c | 58 +++++++++++++++++++++++++++++++++++++
+ libextra/includes/gnutls/openssl.h | 5 +++
+ 2 files changed, 63 insertions(+)
+
+--- gnutls-2.8.5.orig/libextra/gnutls_openssl.c
++++ gnutls-2.8.5/libextra/gnutls_openssl.c
+@@ -256,16 +256,21 @@ SSL_new (SSL_CTX * ctx)
+ ssl->options = ctx->options;
+
+ ssl->rfd = (gnutls_transport_ptr_t) - 1;
+ ssl->wfd = (gnutls_transport_ptr_t) - 1;
+
++ ssl->ssl_peek_buffer = NULL;
++ ssl->ssl_peek_buffer_size = ssl->ssl_peek_avail = 0;
++
+ return ssl;
+ }
+
+ void
+ SSL_free (SSL * ssl)
+ {
++ if (ssl->ssl_peek_buffer)
++ free(ssl->ssl_peek_buffer);
+ gnutls_certificate_free_credentials (ssl->gnutls_cred);
+ gnutls_deinit (ssl->gnutls_state);
+ free (ssl);
+ }
+
+@@ -285,10 +290,11 @@ SSL_get_error (SSL * ssl, int ret)
+
+ int
+ SSL_set_fd (SSL * ssl, int fd)
+ {
+ gnutls_transport_set_ptr (ssl->gnutls_state, GNUTLS_INT_TO_POINTER (fd));
++ ssl->rfd = ssl->wfd = fd;
+ return 1;
+ }
+
+ int
+ SSL_set_rfd (SSL * ssl, int fd)
+@@ -310,10 +316,21 @@ SSL_set_wfd (SSL * ssl, int fd)
+ gnutls_transport_set_ptr2 (ssl->gnutls_state, ssl->rfd, ssl->wfd);
+
+ return 1;
+ }
+
++int SSL_get_rfd(SSL *ssl)
++{
++ return ssl->rfd;
++}
++
++int SSL_get_wfd(SSL *ssl)
++{
++ return ssl->wfd;
++}
++
++
+ void
+ SSL_set_bio (SSL * ssl, BIO * rbio, BIO * wbio)
+ {
+ gnutls_transport_set_ptr2 (ssl->gnutls_state, rbio->fd, wbio->fd);
+ /* free(BIO); ? */
+@@ -325,10 +342,12 @@ SSL_set_connect_state (SSL * ssl)
+ }
+
+ int
+ SSL_pending (SSL * ssl)
+ {
++ if (ssl->ssl_peek_avail)
++ return ssl->ssl_peek_avail;
+ return gnutls_record_check_pending (ssl->gnutls_state);
+ }
+
+ void
+ SSL_set_verify (SSL * ssl, int verify_mode,
+@@ -480,15 +499,54 @@ SSL_shutdown (SSL * ssl)
+
+ /* FIXME */
+ return 1;
+ }
+
++int SSL_peek(SSL *ssl, void *buf, int len)
++{
++ if (len > ssl->ssl_peek_buffer_size) {
++ ssl->ssl_peek_buffer = realloc (ssl->ssl_peek_buffer, len);
++ ssl->ssl_peek_buffer_size = len;
++ }
++
++ if (ssl->ssl_peek_avail == 0) {
++
++ int ret;
++
++ ret = gnutls_record_recv(ssl->gnutls_state, ssl->ssl_peek_buffer, len);
++ ssl->last_error = ret;
++
++ if (ret > 0)
++ ssl->ssl_peek_avail += ret;
++ }
++
++ if (len > ssl->ssl_peek_avail)
++ len = ssl->ssl_peek_avail;
++
++ memcpy (buf, ssl->ssl_peek_buffer, len);
++
++ return len;
++}
++
+ int
+ SSL_read (SSL * ssl, void *buf, int len)
+ {
+ int ret;
+
++ if (ssl->ssl_peek_avail) {
++ int n = (ssl->ssl_peek_avail > len) ? len : ssl->ssl_peek_avail;
++
++ memcpy (buf, ssl->ssl_peek_buffer, n);
++
++ if (ssl->ssl_peek_avail > n)
++ memmove (ssl->ssl_peek_buffer, ssl->ssl_peek_buffer + n, ssl->ssl_peek_avail - n);
++
++ ssl->ssl_peek_avail -= n;
++
++ return n;
++ }
++
+ ret = gnutls_record_recv (ssl->gnutls_state, buf, len);
+ ssl->last_error = ret;
+
+ if (ret < 0)
+ {
+--- gnutls-2.8.5.orig/libextra/includes/gnutls/openssl.h
++++ gnutls-2.8.5/libextra/includes/gnutls/openssl.h
+@@ -162,10 +162,15 @@ extern "C"
+ int (*verify_callback) (int, X509_STORE_CTX *);
+ int verify_mode;
+
+ gnutls_transport_ptr_t rfd;
+ gnutls_transport_ptr_t wfd;
++
++ char *ssl_peek_buffer;
++ size_t ssl_peek_buffer_size;
++ size_t ssl_peek_avail;
++
+ };
+
+ #define rbio gnutls_state
+
+ typedef struct {
diff --git a/recipes/gnutls/gnutls-2.8.5/gnutls-replace-siginterrupt.patch b/recipes/gnutls/gnutls-2.8.5/gnutls-replace-siginterrupt.patch
new file mode 100644
index 0000000000..b34930f33e
--- /dev/null
+++ b/recipes/gnutls/gnutls-2.8.5/gnutls-replace-siginterrupt.patch
@@ -0,0 +1,51 @@
+---
+ src/tests.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+--- gnutls-2.8.5.orig/src/tests.c
++++ gnutls-2.8.5/src/tests.c
+@@ -491,10 +491,11 @@ test_bye (gnutls_session_t session)
+ int ret;
+ char data[20];
+ int old, secs = 6;
+
+ #ifndef _WIN32
++ struct sigaction act;
+ signal (SIGALRM, got_alarm);
+ #endif
+
+ ADD_ALL_CIPHERS (session);
+ ADD_ALL_COMP (session);
+@@ -511,11 +512,13 @@ test_bye (gnutls_session_t session)
+ ret = gnutls_bye (session, GNUTLS_SHUT_WR);
+ if (ret < 0)
+ return TEST_FAILED;
+
+ #ifndef _WIN32
+- old = siginterrupt (SIGALRM, 1);
++ (void) sigaction(SIGALRM, NULL, &act);
++ act.sa_flags &= ~SA_RESTART;
++ old = sigaction(SIGALRM, &act, NULL);
+ alarm (secs);
+ #else
+ setsockopt ((int) gnutls_transport_get_ptr (session), SOL_SOCKET,
+ SO_RCVTIMEO, (char *) &secs, sizeof (int));
+ #endif
+@@ -525,11 +528,16 @@ test_bye (gnutls_session_t session)
+ ret = gnutls_record_recv (session, data, sizeof (data));
+ }
+ while (ret > 0);
+
+ #ifndef _WIN32
+- siginterrupt (SIGALRM, old);
++ (void) sigaction(SIGALRM, NULL, &act);
++ if (old)
++ act.sa_flags &= ~SA_RESTART;
++ else
++ act.sa_flags |= SA_RESTART;
++ sigaction(SIGALRM, &act, NULL);
+ #else
+ if (WSAGetLastError () == WSAETIMEDOUT ||
+ WSAGetLastError () == WSAECONNABORTED)
+ alrm = 1;
+ #endif
diff --git a/recipes/gnutls/gnutls-native_2.4.2.bb b/recipes/gnutls/gnutls-native_2.4.2.bb
deleted file mode 100644
index fb896cdb1b..0000000000
--- a/recipes/gnutls/gnutls-native_2.4.2.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require gnutls_${PV}.bb
-
-inherit native
-
diff --git a/recipes/gnutls/gnutls.inc b/recipes/gnutls/gnutls.inc
index 004161a9f6..60f7d33c47 100644
--- a/recipes/gnutls/gnutls.inc
+++ b/recipes/gnutls/gnutls.inc
@@ -1,24 +1,15 @@
DESCRIPTION = "GNU Transport Layer Security Library"
HOMEPAGE = "http://www.gnu.org/software/gnutls/"
-DEPENDS = "zlib libgcrypt lzo guile-native"
+DEPENDS = "zlib libgcrypt lzo guile-native gettext"
LICENSE = "LGPL"
-SRC_URI = "ftp://ftp.gnutls.org/pub/gnutls/gnutls-${PV}.tar.bz2"
+SRC_URI = "ftp://ftp.gnutls.org/pub/gnutls/gnutls-${PV}.tar.bz2;name=gnutls"
inherit autotools binconfig pkgconfig
-EXTRA_OECONF = "--with-included-opencdk --with-included-libtasn1"
-
-do_stage() {
- oe_libinstall -C lib/.libs -so -a libgnutls ${STAGING_LIBDIR}
- oe_libinstall -C libextra/.libs -so -a libgnutls-extra ${STAGING_LIBDIR}
- oe_libinstall -C libextra/.libs -so -a libgnutls-openssl ${STAGING_LIBDIR}
- autotools_stage_includes
+INC_PR = "r8"
- install -d ${STAGING_DATADIR}/aclocal
- cp ${S}/lib/libgnutls.m4 ${STAGING_DATADIR}/aclocal/
- cp ${S}/libextra/libgnutls-extra.m4 ${STAGING_DATADIR}/aclocal/
-}
+EXTRA_OECONF = "--with-included-opencdk --with-included-libtasn1"
PACKAGES =+ "${PN}-openssl ${PN}-extra ${PN}-bin ${PN}-xx"
@@ -34,3 +25,5 @@ FILES_${PN}-dev += "${bindir}/*-config ${bindir}/gnutls-cli-debug"
FILES_${PN}-extra = "${libdir}/libgnutls-extra.so.*"
FILES_${PN}-openssl = "${libdir}/libgnutls-openssl.so.*"
FILES_${PN}-xx = "${libdir}/libgnutlsxx.so.*"
+
+BBCLASSEXTEND = "native"
diff --git a/recipes/gnutls/gnutls_1.4.5.bb b/recipes/gnutls/gnutls_1.4.5.bb
deleted file mode 100644
index a5e58735a0..0000000000
--- a/recipes/gnutls/gnutls_1.4.5.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require gnutls.inc
-
-# fix wrong dependency
-do_configure_prepend() {
- sed -i s,gcrypt,libgcrypt, lib/gnutls.pc.in
-}
-
-PR = "r3"
diff --git a/recipes/gnutls/gnutls_1.6.3.bb b/recipes/gnutls/gnutls_1.6.3.bb
deleted file mode 100644
index 7a89835237..0000000000
--- a/recipes/gnutls/gnutls_1.6.3.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-require gnutls.inc
-
-SRC_URI += "\
- file://gnutls-openssl.patch;patch=1 \
- file://gnutls-texinfo-euro.patch;patch=1 \
- file://configure_madness.patch;patch=1 \
- "
-
-# fix wrong dependency
-do_configure_prepend() {
- sed -i s,gcrypt,libgcrypt, lib/gnutls.pc.in
-}
-
-PR = "r6"
diff --git a/recipes/gnutls/gnutls_2.4.2.bb b/recipes/gnutls/gnutls_2.4.2.bb
deleted file mode 100644
index d8266c2c0f..0000000000
--- a/recipes/gnutls/gnutls_2.4.2.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require gnutls.inc
-LICENSE_${PN}-extra = "GPLv3"
-
-SRC_URI += "\
- file://gnutls-openssl.patch;patch=1 \
- file://gnutls-texinfo-euro.patch;patch=1 \
- file://configure_madness.patch;patch=1 \
- file://gnutls-replace-siginterrupt.patch;patch=1 \
- "
-
-PR = "r4"
diff --git a/recipes/gnutls/gnutls_2.8.5.bb b/recipes/gnutls/gnutls_2.8.5.bb
new file mode 100644
index 0000000000..ec8a1188f3
--- /dev/null
+++ b/recipes/gnutls/gnutls_2.8.5.bb
@@ -0,0 +1,17 @@
+require gnutls.inc
+LICENSE_${PN}-extra = "GPLv3"
+
+SRC_URI += "\
+ file://gnutls-openssl.patch;patch=1 \
+ file://gnutls-replace-siginterrupt.patch;patch=1 \
+ "
+
+EXTRA_OECONF += " --without-libgcrypt-prefix "
+
+do_configure_prepend() {
+
+ cd ${S} && rm -rf m4/ aclocal.m4 lib/m4/libtool.m4 lib/m4/lt*m4
+}
+
+SRC_URI[gnutls.md5sum] = "e3b2788b79bfc82acbe717e3c54d4e92"
+SRC_URI[gnutls.sha256sum] = "9249c29df71551e302e0186f4e1876dd6cc4c6cf2974b432c22525dde815cae8"
diff --git a/recipes/gpdf/files/aclocal-lossage.patch b/recipes/gpdf/files/aclocal-lossage.patch
deleted file mode 100644
index cdbe8100bd..0000000000
--- a/recipes/gpdf/files/aclocal-lossage.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- gpdf-2.7.90/Makefile.am.old 2004-08-03 20:32:38.000000000 +0100
-+++ gpdf-2.7.90/Makefile.am 2004-08-03 20:27:11.000000000 +0100
-@@ -43,7 +43,7 @@
-
- DISTCHECK_CONFIGURE_FLAGS = --disable-schemas-install
-
--ACLOCAL_AMFLAGS = -I $(datadir)/aclocal -I $(datadir)/aclocal/gnome2-macros
-+# ACLOCAL_AMFLAGS = -I $(datadir)/aclocal -I $(datadir)/aclocal/gnome2-macros
-
- CLEANFILES = \
- $(schema_DATA) \
diff --git a/recipes/gpdf/files/desktop.patch b/recipes/gpdf/files/desktop.patch
deleted file mode 100644
index e76e63328a..0000000000
--- a/recipes/gpdf/files/desktop.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- gpdf-2.7.90/gpdf.desktop.in.old 2004-08-05 15:31:09.000000000 +0100
-+++ gpdf-2.7.90/gpdf.desktop.in 2004-08-05 15:31:19.000000000 +0100
-@@ -3,7 +3,7 @@
- _Name=PDF Viewer
- _Comment=View PDF files
- Exec=gpdf %U
--Icon=gnome-pdf
-+Icon=gnome-pdf.png
- Terminal=false
- Type=Application
- Categories=GNOME;Application;Graphics;VectorGraphics;Viewer;
diff --git a/recipes/gpdf/files/gpdf-2.10.0-gcc4-2.patch b/recipes/gpdf/files/gpdf-2.10.0-gcc4-2.patch
deleted file mode 100644
index d45becb346..0000000000
--- a/recipes/gpdf/files/gpdf-2.10.0-gcc4-2.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-diff -Naur gpdf-2.10.0.orig/xpdf/TextOutputDev.h gpdf-2.10.0/xpdf/TextOutputDev.h
---- gpdf-2.10.0.orig/xpdf/TextOutputDev.h 2005-08-23 21:59:57.000000000 +0000
-+++ gpdf-2.10.0/xpdf/TextOutputDev.h 2005-08-23 22:00:10.000000000 +0000
-@@ -166,6 +166,8 @@
- // TextLine
- //------------------------------------------------------------------------
-
-+class TextBlock;
-+
- class TextLine {
- public:
-
-@@ -223,6 +225,8 @@
- // TextBlock
- //------------------------------------------------------------------------
-
-+class TextPage;
-+
- class TextBlock {
- public:
-
-@@ -342,6 +346,8 @@
- // TextPage
- //------------------------------------------------------------------------
-
-+class TextLineFrag;
-+
- class TextPage {
- public:
-
diff --git a/recipes/gpdf/gpdf_2.10.0.bb b/recipes/gpdf/gpdf_2.10.0.bb
deleted file mode 100644
index 30c42dcb0c..0000000000
--- a/recipes/gpdf/gpdf_2.10.0.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-LICENSE = "GPL"
-SECTION = "x11/utils"
-PR = "r0"
-
-inherit gnome
-
-SRC_URI_append = " file://gpdf-2.10.0-gcc4-2.patch;patch=1"
-
-DEPENDS = "gtk+ libgnomeui libbonoboui gnome-vfs gconf gettext libglade \
- libgnomeprint libgnomeprintui gnome-common"
-
-EXTRA_OECONF = "--disable-schemas-install"
-
-do_configure_prepend () {
- cp ${STAGING_DATADIR}/gnome-common/data/omf.make ${S}/help
-}
diff --git a/recipes/gpdf/gpdf_2.7.90.bb b/recipes/gpdf/gpdf_2.7.90.bb
deleted file mode 100644
index 975523530a..0000000000
--- a/recipes/gpdf/gpdf_2.7.90.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-LICENSE = "GPL"
-SECTION = "x11/utils"
-PR = "r2"
-
-inherit gnome gettext
-
-DEPENDS = "gtk+ libgnomeui libbonoboui gnome-vfs gconf gettext libglade \
- libgnomeprint libgnomeprintui gnome-common"
-
-EXTRA_OECONF = "--disable-schemas-install"
-
-SRC_URI += "file://aclocal-lossage.patch;patch=1 \
- file://desktop.patch;patch=1"
diff --git a/recipes/gpdf/gpdf_2.8.0.bb b/recipes/gpdf/gpdf_2.8.0.bb
deleted file mode 100644
index b4afdb02b8..0000000000
--- a/recipes/gpdf/gpdf_2.8.0.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-LICENSE = "GPL"
-SECTION = "x11/utils"
-PR = "r0"
-
-inherit gnome
-
-DEPENDS = "gtk+ libgnomeui libbonoboui gnome-vfs gconf gettext libglade \
- libgnomeprint libgnomeprintui gnome-common"
-
-EXTRA_OECONF = "--disable-schemas-install"
-
-SRC_URI += "file://aclocal-lossage.patch;patch=1 \
- file://desktop.patch;patch=1"
-
-do_configure_prepend () {
- cp ${STAGING_DATADIR}/gnome-common/data/omf.make ${S}/help
-}
diff --git a/recipes/gpdf/gpdf_2.8.2.bb b/recipes/gpdf/gpdf_2.8.2.bb
deleted file mode 100644
index 3943ff93e1..0000000000
--- a/recipes/gpdf/gpdf_2.8.2.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-LICENSE = "GPL"
-SECTION = "x11/utils"
-PR = "r0"
-
-inherit gnome
-
-DEPENDS = "gtk+ libgnomeui libbonoboui gnome-vfs gconf gettext libglade \
- libgnomeprint libgnomeprintui gnome-common"
-
-EXTRA_OECONF = "--disable-schemas-install"
-
-SRC_URI += "file://aclocal-lossage.patch;patch=1"
-
-do_configure_prepend () {
- cp ${STAGING_DATADIR}/gnome-common/data/omf.make ${S}/help
-}
diff --git a/recipes/gpe-icons/gpe-theme-neo_git.bb b/recipes/gpe-icons/gpe-theme-neo_git.bb
index 402eef6ea8..f0f4e0f3d7 100644
--- a/recipes/gpe-icons/gpe-theme-neo_git.bb
+++ b/recipes/gpe-icons/gpe-theme-neo_git.bb
@@ -1,12 +1,12 @@
DESCRIPTION = "nEo GPE theme - a very fast, high contrast GPE theme"
HOMEPAGE = "http://jmccloud.jm.funpic.de"
AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
-RDEPENDS = "gpe-filemanager gpe-sketchbook"
-RRECOMMENDS = "elementary-theme-neo e-wm-theme-illume-neo gtk-theme-neo libframeworkd-phonegui-efl-theme-neo etk-theme-neo icon-theme-neo"
+RSUGGESTS = "gpe-filemanager gpe-sketchbook elementary-theme-neo e-wm-theme-illume-neo gtk-theme-neo etk-theme-neo icon-theme-neo"
LICENSE = "unknown"
+SRCREV = "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
PV = "0.2-${EFL_SRCREV}+gitr${SRCREV}"
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.2"
SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
diff --git a/recipes/gperf/gperf-native_3.0.3.bb b/recipes/gperf/gperf-native_3.0.3.bb
deleted file mode 100644
index 103d1aa3c2..0000000000
--- a/recipes/gperf/gperf-native_3.0.3.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require gperf_${PV}.bb
-
-S = "${WORKDIR}/gperf-${PV}"
-
-inherit native
-
-do_stage() {
- install -d ${STAGING_BINDIR_NATIVE}
- install ${S}/src/gperf ${STAGING_BINDIR_NATIVE}
-}
diff --git a/recipes/gperf/gperf_3.0.3.bb b/recipes/gperf/gperf_3.0.3.bb
index 7abfb8fbfb..30b40be560 100644
--- a/recipes/gperf/gperf_3.0.3.bb
+++ b/recipes/gperf/gperf_3.0.3.bb
@@ -6,3 +6,6 @@ SRC_URI = "${GNU_MIRROR}/gperf/gperf-${PV}.tar.gz \
file://autoreconf.patch;patch=1"
inherit autotools
+
+NATIVE_INSTALL_WORKS = "1"
+BBCLASSEXTEND = "native"
diff --git a/recipes/gpsd/files/60-gpsd.rules b/recipes/gpsd/files/60-gpsd.rules
new file mode 100644
index 0000000000..c01db068de
--- /dev/null
+++ b/recipes/gpsd/files/60-gpsd.rules
@@ -0,0 +1,47 @@
+# udev rules for gpsd
+# $Id$
+#
+# GPSes don't have their own USB device class. They're serial-over-USB
+# devices, so what you see is actually the ID of the serial-over-USB chip.
+# Fortunately, just two of these account for over 80% of consumer-grade
+# GPS sensors. The gpsd.hotplug.wrapper script will tell a running gpsd
+# that it should look at the device that just went active, because it
+# might be a GPS.
+#
+# The following setup works on Debian - something similar will apply on
+# other distributions:
+#
+# /etc/udev/gpsd.rules
+# /etc/udev/rules.d/025_gpsd.rules -> ../gpsd.rules
+# /lib/udev/gpsd.hotplug.wrapper
+# /lib/udev/gpsd.hotplug
+#
+# Setting the link in /etc/udev/rules.d activates the rule and determines
+# when to run it on boot (similar to init.d processing).
+
+SUBSYSTEM!="tty", GOTO="gpsd_rules_end"
+
+# Prolific Technology, Inc. PL2303 Serial Port
+ATTR{idVendor}=="067b", ATTR{idProduct}=="2303", SYMLINK+="gps%n", RUN+="/lib/udev/gpsd.hotplug.wrapper"
+# ATEN International Co., Ltd UC-232A Serial Port [pl2303]
+ATTR{idVendor}=="0557", ATTR{idProduct}=="2008", SYMLINK+="gps%n", RUN+="/lib/udev/gpsd.hotplug.wrapper"
+# FTDI 8U232AM
+ATTR{idVendor}=="0403", ATTR{idProduct}=="6001", SYMLINK+="gps%n", RUN+="/lib/udev/gpsd.hotplug.wrapper"
+# Cypress M8/CY7C64013 (DeLorme uses these)
+ATTR{idVendor}=="1163", ATTR{idProduct}=="0100", SYMLINK+="gps%n", RUN+="/lib/udev/gpsd.hotplug.wrapper"
+# PS-360 OEM (Microsoft GPS sold with Street and Trips 2005)
+ATTR{idVendor}=="067b", ATTR{idProduct}=="aaa0", SYMLINK+="gps%n", RUN+="/lib/udev/gpsd.hotplug.wrapper"
+# Garmin International GPSmap, various models (tested with Garmin GPS 18 USB)
+ATTR{idVendor}=="091e", ATTR{idProduct}=="0003", SYMLINK+="gps%n", RUN+="/lib/udev/gpsd.hotplug.wrapper"
+# Cygnal Integrated Products, Inc. CP210x Composite Device (Used by Holux m241)
+ATTR{idVendor}=="10c4", ATTR{idProduct}=="ea60", SYMLINK+="gps%n", RUN+="/lib/udev/gpsd.hotplug.wrapper"
+# u-blox AG, u-blox 5 (tested with Navilock NL-402U)
+ATTR{idVendor}=="1546", ATTR{idProduct}=="01a5", SYMLINK="gps%n", RUN+="/lib/udev/gpsd.hotplug.wrapper"
+# FTDI FT232
+ATTR{idVendor}=="0403", ATTR{idProduct}=="6001", SYMLINK="gps%n", RUN+="/lib/udev/gpsd.hotplug.wrapper"
+# u-blox 4
+SYSFS{idVendor}=="1546", SYSFS{idProduct}=="01a4", SYMLINK="gps%n", RUN+="/lib/udev/gpsd.hotplug.wrapper"
+
+ACTION=="remove", RUN+="/lib/udev/gpsd.hotplug.wrapper"
+
+LABEL="gpsd_rules_end"
diff --git a/recipes/gpsd/files/gpsd b/recipes/gpsd/files/gpsd
index 91f09c1b75..fde4285569 100755
--- a/recipes/gpsd/files/gpsd
+++ b/recipes/gpsd/files/gpsd
@@ -1,87 +1,135 @@
#!/bin/sh
+### BEGIN INIT INFO
+# Provides: gpsd
+# Required-Start: $remote_fs $network
+# Should-Start: bluetooth dbus udev
+# Required-Stop: $remote_fs $network
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: GPS (Global Positioning System) daemon start/stop script
+# Description: Start/Stop script for the gpsd service daemon,
+# which is able to monitor one or more GPS devices
+# connected to a host computer, making all data on
+# the location and movements of the sensors available
+# to be queried on TCP port 2947.
+### END INIT INFO
+
+# Author: Bernd Zeimetz <bzed@debian.org>
#
-# gpsd This shell script starts and stops gpsd.
-#
-# chkconfig: 345 90 40
-# description: Gpsd manages access to a serial- or USB-connected GPS
-# processname: gpsd
+# Please remove the "Author" lines above and replace them
+# with your own name if you copy and modify this script.
-# Source function library.
-#. /etc/rc.d/init.d/functions
+# Do NOT "set -e"
-RETVAL=0
-DAEMON=/usr/sbin/gpsd
-prog="gpsd"
+# PATH should only include /usr/* if it runs after the mountnfs.sh script
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC="GPS (Global Positioning System) daemon"
+NAME=gpsd
+DAEMON=/usr/sbin/$NAME
+PIDFILE=/var/run/$NAME.pid
+SCRIPTNAME=/etc/init.d/$NAME
-test -f /etc/default/$prog && . /etc/default/$prog
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
-start() {
- # Start daemons.
- echo -n "Starting $prog: "
- # We don't use the daemon function here because of a known bug
- # in initlog -- it spuriously returns a nonzero status when
- # starting daemons that fork themselves. See
- # http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=130629
- # for discussion. Fortunately:
- #
- # 1. gpsd startup can't fail, or at least not in the absence of
- # much larger resource-exhaustion problems that would be very obvious.
- #
- # 2. We don't need all the logging crud that daemon/initlog sets
- # up -- gpsd does its own syslog calls.
- #
-
- if test -x /etc/init.d/gps-hardware
- then
- if ! ( /etc/init.d/gps-hardware status | grep -q "ready" )
- then
- /etc/init.d/gps-hardware start
- fi
- fi
-
- if [ -e "${GPS_DEV}" ]
- then
- start-stop-daemon -S -x ${DAEMON} -- ${GPSD_OPTS} ${GPS_DEV}
- echo "success"
- else
- # User needs to symlink ${GPS_DEV} to the right thing
- echo "No ${GPS_DEV} GPS device, aborting gpsd startup. Check /etc/default/$prog"
- fi
- RETVAL=$?
- echo
- return $RETVAL
+# Read configuration, if present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+if [ -z "$GPSD_SOCKET" ] && [ -z "$DEVICES" ]; then
+ GPSD_SOCKET=/var/run/gpsd.sock
+fi
+
+if [ -n "$GPSD_SOCKET" ]; then
+ GPSD_OPTIONS="$GPSD_OPTIONS -F $GPSD_SOCKET"
+fi
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+ # Return
+ # 0 if daemon has been started
+ # 1 if daemon was already running
+ # 2 if daemon could not be started
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
+ || return 1
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
+ $GPSD_OPTIONS -P $PIDFILE $GPS_DEVICES \
+ || return 2
}
-stop() {
- # Stop daemons.
- echo -n "Shutting down $prog: "
- start-stop-daemon -K -x ${DAEMON}
-# killproc gpsd
- RETVAL=$?
- echo
- return $RETVAL
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+ # Return
+ # 0 if daemon has been stopped
+ # 1 if daemon was already stopped
+ # 2 if daemon could not be stopped
+ # other if a failure occurred
+ start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
+ RETVAL="$?"
+ [ "$RETVAL" = 2 ] && return 2
+ # Many daemons don't delete their pidfiles when they exit.
+ rm -f $PIDFILE
+ return "$RETVAL"
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+ #
+ # If the daemon can reload its configuration without
+ # restarting (for example, when it is sent a SIGHUP),
+ # then implement that here.
+ #
+ start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
+ return 0
}
-# See how we were called.
case "$1" in
start)
- start
+ echo "Starting $DESC" "$NAME"
+ do_start
+ return $?
;;
stop)
- stop
- ;;
- restart|reload)
- stop
- start
- RETVAL=$?
+ echo "Stopping $DESC" "$NAME"
+ do_stop
+ return $?
;;
status)
-# status gpsd
-# RETVAL=$?
+ ;;
+ reload|force-reload)
+ echo "Reloading $DESC" "$NAME"
+ do_reload
+ return $?
+ ;;
+ restart)
+ #
+ # If the "reload" option is implemented then remove the
+ # 'force-reload' alias
+ #
+ echo "Restarting $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1)
+ do_start
+ return $?
+ ;;
+ *)
+ # Failed to stop
+ return 1
+ ;;
+ esac
;;
*)
- echo "Usage: $0 {start|stop|restart|status}"
- exit 1
+ echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
+ exit 3
+ ;;
esac
-exit $RETVAL
+:
diff --git a/recipes/gpsd/files/gpsd-default b/recipes/gpsd/files/gpsd-default
index c345edf974..0ceff03824 100644
--- a/recipes/gpsd/files/gpsd-default
+++ b/recipes/gpsd/files/gpsd-default
@@ -1,3 +1,5 @@
# If you must specify a non-NMEA driver, uncomment and modify the next line
-#GPSD_OPTS=
-GPS_DEV="/dev/ttyS3"
+GPSD_SOCKET="/var/run/gpsd.sock"
+GPSD_OPTIONS=""
+GPS_DEVICES=""
+
diff --git a/recipes/gpsd/files/libtool.patch b/recipes/gpsd/files/libtool.patch
new file mode 100644
index 0000000000..37a7557aea
--- /dev/null
+++ b/recipes/gpsd/files/libtool.patch
@@ -0,0 +1,14 @@
+--- a/Makefile.am 2010-01-22 21:27:04.000000000 +0100
++++ b/Makefile.am 2010-01-22 21:27:43.000000000 +0100
+@@ -225,9 +225,9 @@
+ # Warning: This overrides autoconf's normal link-line generatyion process
+ if LIBGPSMM_ENABLE
+ libgps_la_SOURCES += libgpsmm.cpp
+-libgps_la_LINK = /bin/sh ./libtool --tag=CXX --mode=link g++ $(libgps_la_LDFLAGS) -o $@
++libgps_la_LINK = $(LIBTOOL) --tag=CXX --mode=link g++ $(libgps_la_LDFLAGS) -o $@
+ else
+-libgps_la_LINK = /bin/sh ./libtool --tag=CC --mode=link gcc $(libgps_la_LDFLAGS) -o $@
++libgps_la_LINK = $(LIBTOOL) --tag=CC --mode=link gcc $(libgps_la_LDFLAGS) -o $@
+ endif
+
+ nodist_libgps_la_SOURCES = packet_names.h ais_json.i
diff --git a/recipes/gpsd/gpsd-device-config_0.bb b/recipes/gpsd/gpsd-device-config_0.bb
new file mode 100644
index 0000000000..1691c2edd8
--- /dev/null
+++ b/recipes/gpsd/gpsd-device-config_0.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "Configuration for machine specific gps devices"
+SECTION = "console/network"
+PRIORITY = "optional"
+LICENSE = "GPL"
+RDEPENDS_${PN} = "gpsd"
+PR = "r0"
+
+SRC_URI_append_om-gta01 = " \
+ file://restart_gllin.sh \
+ file://gpsd-default \
+ file://gps-hardware \
+"
+
+do_install_append_om-gta01() {
+ install -d ${D}${sysconfdir}/apm/resume.d
+ install -m 755 ${WORKDIR}/om-gta01/restart_gllin.sh ${D}/${sysconfdir}/apm/resume.d
+ install -d ${D}${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/om-gta01/gps-hardware ${D}${sysconfdir}/init.d
+ install -d ${D}/${sysconfdir}/default
+ install -m 0644 ${WORKDIR}/om-gta01/gpsd-default ${D}/${sysconfdir}/default/gpsd.default
+}
+
+pkg_postinst_append_om-gta01() {
+ update-alternatives --install ${sysconfdir}/default/gpsd gpsd-defaults ${sysconfdir}/default/gpsd.default 50
+}
+
+pkg_postrm_append_om-gta01() {
+ update-alternatives --remove gpsd-defaults ${sysconfdir}/default/gpsd.default
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/recipes/gpsd/gpsd.inc b/recipes/gpsd/gpsd.inc
index a917fbea11..85bb36b962 100644
--- a/recipes/gpsd/gpsd.inc
+++ b/recipes/gpsd/gpsd.inc
@@ -4,20 +4,17 @@ PRIORITY = "optional"
LICENSE = "GPL"
DEPENDS = "dbus-glib ncurses python"
PROVIDES = "virtual/gpsd"
+INC_PR = "r4"
EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \
--x-libraries=${STAGING_LIBDIR} \
--enable-dbus \
- --enable-python"
+"
-SRC_URI = "http://download.berlios.de/gpsd/gpsd-${PV}.tar.gz \
+SRC_URI = "http://download.berlios.de/gpsd/gpsd-${PV}.tar.gz;name=gpsd \
file://gpsd-default \
- file://gps-hardware \
- file://gpsd"
-
-SRC_URI_append_om-gta01 = " \
- file://restart_gllin.sh \
-"
+ file://gpsd \
+ file://60-gpsd.rules"
inherit autotools_stage update-rc.d
@@ -28,6 +25,8 @@ LDFLAGS += "-L${STAGING_LIBDIR} -lm"
export STAGING_INCDIR
export STAGING_LIBDIR
+TARGET_CC_ARCH += "${LDFLAGS}"
+
do_compile_prepend() {
export BUILD_SYS="${BUILD_SYS}"
export HOST_SYS="${HOST_SYS}"
@@ -40,44 +39,47 @@ do_install_prepend() {
}
do_install_append() {
- install -d ${D}/${sysconfdir}/init.d
- install -d ${D}/dev
- install -m 0755 ${WORKDIR}/gpsd ${D}/${sysconfdir}/init.d/
- install -m 0755 ${WORKDIR}/gps-hardware ${D}/${sysconfdir}/init.d/gps-hardware.default
- install -d ${D}/${sysconfdir}/default
- install -m 0644 ${WORKDIR}/gpsd-default ${D}/${sysconfdir}/default/gpsd.default
-}
-
-do_install_append_om-gta01() {
- install -d ${D}/${sysconfdir}/apm/resume.d
- install -m 755 ${WORKDIR}/restart_gllin.sh ${D}/${sysconfdir}/apm/resume.d
+ install -d ${D}/${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/gpsd ${D}/${sysconfdir}/init.d/
+ install -d ${D}/${sysconfdir}/default
+ install -m 0644 ${WORKDIR}/gpsd-default ${D}/${sysconfdir}/default/gpsd.default
+
+ #support for udev
+ install -d ${D}/${sysconfdir}/udev/rules.d
+ install -m 0644 ${WORKDIR}/60-gpsd.rules ${D}/${sysconfdir}/udev/rules.d
+ install -d ${D}${base_libdir}/udev/
+ install -m 0755 ${S}/gpsd.hotplug ${D}${base_libdir}/udev/
+ install -m 0755 ${S}/gpsd.hotplug.wrapper ${D}${base_libdir}/udev/
}
pkg_postinst_${PN}-conf() {
update-alternatives --install ${sysconfdir}/default/gpsd gpsd-defaults ${sysconfdir}/default/gpsd.default 10
- update-alternatives --install ${sysconfdir}/init.d/gps-hardware gps-hardware ${sysconfdir}/init.d/gps-hardware.default 10
}
pkg_postrm_${PN}-conf() {
- update-alternatives --remove gpsd-defaults ${sysconfdir}/default/gpsd.default
- update-alternatives --remove gps-hardware ${sysconfdir}/init.d/gps-hardware.default
+ update-alternatives --remove gpsd-defaults ${sysconfdir}/default/gpsd.default
}
-SRC_URI_OVERRIDES_PACKAGE_ARCH = "0"
-
-PACKAGES =+ "libgps python-pygps gpsd-conf gpsd-gpsctl gps-utils"
-
-PACKAGE_ARCH_gpsd-conf = "${MACHINE_ARCH}"
+PACKAGES =+ "libgps python-pygps gpsd-udev gpsd-conf gpsd-gpsctl gps-utils"
RDEPENDS_${PN} = "gpsd-gpsctl"
-RRECOMMENDS_${PN} = "gpsd-conf"
+RRECOMMENDS_${PN} = "gpsd-conf gpsd-udev"
+
+DESCRIPTION_gpsd-udev = "udev relevant files to use gpsd hotplugging"
+FILES_gpsd-udev = "${base_libdir}/* ${sysconfdir}/udev/*"
+RDEPENDS_gpsd-udev += "udev gpsd-conf"
+DESCRIPTION_libgps = "C service library used for communicating with gpsd"
FILES_libgps = "${libdir}/*.so.*"
+
+DESCRIPTION_gpsd-conf = "gpsd configuration files and init scripts"
FILES_gpsd-conf = "${sysconfdir}"
+
+DESCRIPTION_gpsd-gpsctl = "Tool for tweaking GPS modes"
FILES_gpsd-gpsctl = "${bindir}/gpsctl"
-FILES_gps-utils = "${bindir}/*"
-# might split them up even more fine granular
+DESCRIPTION_gps-utils = "Utils used for simulating, monitoring,... a GPS"
+FILES_gps-utils = "${bindir}/*"
RDEPENDS_gps-utils = "python-pygps"
DESCRIPTION_python-pygps = "Python bindings to gpsd"
diff --git a/recipes/gpsd/gpsd_2.39.bb b/recipes/gpsd/gpsd_2.39.bb
new file mode 100644
index 0000000000..95260ff2be
--- /dev/null
+++ b/recipes/gpsd/gpsd_2.39.bb
@@ -0,0 +1,5 @@
+require gpsd.inc
+
+PR = "r0"
+# make attempts to link gpspacket.so without waiting for all compiler tasks:
+PARALLEL_MAKE = ""
diff --git a/recipes/gpsd/gpsd_2.90.bb b/recipes/gpsd/gpsd_2.90.bb
new file mode 100644
index 0000000000..2131ef7d63
--- /dev/null
+++ b/recipes/gpsd/gpsd_2.90.bb
@@ -0,0 +1,9 @@
+require gpsd.inc
+
+SRC_URI += "file://libtool.patch;patch=1"
+SRC_URI[gpsd.md5sum] = "a23c728b8734c542d559c485857238d2"
+SRC_URI[gpsd.sha256sum] = "8c81461266fc95aae6519ec996d7e4f4801fb5a02dbcc7a5d1c130bf7fe0cd53"
+
+PR = "${INC_PR}.0"
+
+PARALLEL_MAKE = ""
diff --git a/recipes/grip/grip-3.2.0/no-host-includes.patch b/recipes/grip/grip-3.2.0/no-host-includes.patch
new file mode 100644
index 0000000000..66fca367ee
--- /dev/null
+++ b/recipes/grip/grip-3.2.0/no-host-includes.patch
@@ -0,0 +1,10 @@
+Index: grip-3.2.0/src/Makefile.am
+===================================================================
+--- grip-3.2.0.orig/src/Makefile.am 2010-03-16 14:46:01.651553829 +0800
++++ grip-3.2.0/src/Makefile.am 2010-03-16 14:46:05.240303128 +0800
+@@ -1,4 +1,4 @@
+-INCLUDES = -I$(top_srcdir) -I$(includedir) \
++INCLUDES = -I$(top_srcdir) \
+ -DGNOME_ICONDIR=\""$(datadir)/pixmaps"\" \
+ -DG_LOG_DOMAIN=\"grip\" -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
+ -I../intl -I$(top_srcdir)/intl \
diff --git a/recipes/grip/grip-3.2.0/patch-src::discdb b/recipes/grip/grip-3.2.0/patch-src::discdb
new file mode 100644
index 0000000000..1d300b270f
--- /dev/null
+++ b/recipes/grip/grip-3.2.0/patch-src::discdb
@@ -0,0 +1,20 @@
+--- src/discdb.c.orig Thu Apr 15 21:23:37 2004
++++ src/discdb.c Wed Mar 16 19:02:09 2005
+@@ -311,7 +311,7 @@
+ query->query_match=MATCH_EXACT;
+ query->query_matches=0;
+
+- while((inbuffer=DiscDBReadLine(&dataptr))) {
++ while(query->query_matches < MAX_INEXACT_MATCHES && (inbuffer=DiscDBReadLine(&dataptr))) {
+ query->query_list[query->query_matches].list_genre=
+ DiscDBGenreValue(g_strstrip(strtok(inbuffer," ")));
+
+@@ -331,7 +331,7 @@
+ query->query_match=MATCH_INEXACT;
+ query->query_matches=0;
+
+- while((inbuffer=DiscDBReadLine(&dataptr))) {
++ while(query->query_matches < MAX_INEXACT_MATCHES && (inbuffer=DiscDBReadLine(&dataptr))) {
+ query->query_list[query->query_matches].list_genre=
+ DiscDBGenreValue(g_strstrip(strtok(inbuffer," ")));
+
diff --git a/recipes/grip/grip-3.2.0/patch-src::main.c b/recipes/grip/grip-3.2.0/patch-src::main.c
new file mode 100644
index 0000000000..40f1bc169b
--- /dev/null
+++ b/recipes/grip/grip-3.2.0/patch-src::main.c
@@ -0,0 +1,11 @@
+--- src/main.c.orig
++++ src/main.c
+@@ -163,7 +163,7 @@
+ GNOME_PARAM_POPT_TABLE,options,
+ GNOME_PROGRAM_STANDARD_PROPERTIES,NULL);
+
+- bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF8");
++ bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
+
+ /* Session Management */
+
diff --git a/recipes/grip/grip-3.3.1/no-host-includes.patch b/recipes/grip/grip-3.3.1/no-host-includes.patch
new file mode 100644
index 0000000000..66fca367ee
--- /dev/null
+++ b/recipes/grip/grip-3.3.1/no-host-includes.patch
@@ -0,0 +1,10 @@
+Index: grip-3.2.0/src/Makefile.am
+===================================================================
+--- grip-3.2.0.orig/src/Makefile.am 2010-03-16 14:46:01.651553829 +0800
++++ grip-3.2.0/src/Makefile.am 2010-03-16 14:46:05.240303128 +0800
+@@ -1,4 +1,4 @@
+-INCLUDES = -I$(top_srcdir) -I$(includedir) \
++INCLUDES = -I$(top_srcdir) \
+ -DGNOME_ICONDIR=\""$(datadir)/pixmaps"\" \
+ -DG_LOG_DOMAIN=\"grip\" -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
+ -I../intl -I$(top_srcdir)/intl \
diff --git a/recipes/grip/grip_3.2.0.bb b/recipes/grip/grip_3.2.0.bb
index 063803138d..81c36709f6 100644
--- a/recipes/grip/grip_3.2.0.bb
+++ b/recipes/grip/grip_3.2.0.bb
@@ -5,7 +5,12 @@
HOMEPAGE="http://www.nostatic.org/grip/"
LICENSE="GPL"
-SRC_URI="${SOURCEFORGE_MIRROR}/grip/grip-${PV}.tar.gz"
+SRC_URI="${SOURCEFORGE_MIRROR}/grip/grip-${PV}.tar.gz \
+ file://patch-src::discdb;patch=1;pnum=0 \
+ file://patch-src::main.c;patch=1;pnum=0 \
+ file://no-host-includes.patch;patch=1 "
DEPENDS="libgnomeui vte curl cdparanoia id3lib"
+PR = "r3"
+
inherit autotools
diff --git a/recipes/grip/grip_3.3.1.bb b/recipes/grip/grip_3.3.1.bb
new file mode 100644
index 0000000000..965d0464ea
--- /dev/null
+++ b/recipes/grip/grip_3.3.1.bb
@@ -0,0 +1,17 @@
+# Copyright (C) 2005, Advanced Micro Devices, Inc. All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+
+DESCRIPTION="A cd-player and cd-ripper for the Gnome desktop"
+HOMEPAGE="http://www.nostatic.org/grip/"
+LICENSE="GPL"
+
+SRC_URI="${SOURCEFORGE_MIRROR}/${PN}/${PV}/${P}.tar.gz;name=grip \
+ file://no-host-includes.patch;patch=1 "
+SRC_URI[grip.md5sum] = "4b4233999b9f2bc85c711092553ea9aa"
+SRC_URI[grip.sha256sum] = "d46394a1062ed066f9c633b010fd1059e63d9ed791bbb7a85bc6567cf0fd66fd"
+
+DEPENDS="libgnomeui vte curl cdparanoia id3lib"
+
+PR = "r0"
+
+inherit autotools
diff --git a/recipes/gstreamer/gst-common.inc b/recipes/gstreamer/gst-common.inc
index c6a3fd057d..c7420eede9 100644
--- a/recipes/gstreamer/gst-common.inc
+++ b/recipes/gstreamer/gst-common.inc
@@ -12,8 +12,3 @@ OE_LT_RPATH_ALLOW[export]="1"
AUTOTOOLS_STAGE_PKGCONFIG = "1"
-do_stage() {
- autotools_stage_all
-}
-
-
diff --git a/recipes/gstreamer/gst-ffmpeg_0.10.10.bb b/recipes/gstreamer/gst-ffmpeg_0.10.10.bb
new file mode 100644
index 0000000000..bf3206f592
--- /dev/null
+++ b/recipes/gstreamer/gst-ffmpeg_0.10.10.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "FFmpeg-based GStreamer plug-in"
+SECTION = "multimedia"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+HOMEPAGE = "http://www.gstreamer.net/"
+DEPENDS = "ffmpeg gstreamer gst-plugins-base zlib"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2;name=archive \
+ file://lower-rank.diff;patch=1 \
+"
+SRC_URI[archive.md5sum] = "447292deff5f3748444e6a5fba41da29"
+SRC_URI[archive.sha256sum] = "697114483444a0a469028857a1d58145c99e6f5d2cd7edd8cb04cdc3fc72ad94"
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
+
+EXTRA_OECONF = " --with-system-ffmpeg "
+
+# We do this because the install program is called with -s which causes it to
+# call "strip" and it then mangles cross compiled stuff..
+PATH_prepend="${CROSS_DIR}/${TARGET_SYS}/bin:"
+
+# Hack to get STAGING_LIBDIR into the linker path when building ffmpeg
+CC = "${CCACHE} ${HOST_PREFIX}gcc ${TARGET_CC_ARCH} -L${STAGING_LIBDIR}"
+
diff --git a/recipes/gstreamer/gst-plugin-bc/gst-debug.diff b/recipes/gstreamer/gst-plugin-bc/gst-debug.diff
new file mode 100644
index 0000000000..d7b3849c15
--- /dev/null
+++ b/recipes/gstreamer/gst-plugin-bc/gst-debug.diff
@@ -0,0 +1,20 @@
+--- /tmp/gstplayer.c 2010-03-08 12:42:37.000000000 +0100
++++ git/bc-app/gstplayer.c 2010-03-08 12:42:45.000000000 +0100
+@@ -237,7 +237,7 @@
+ void
+ gst_player_seek (GstPlayer * self, gint value)
+ {
+- GST_DEBUG ("seek: %lu", value);
++ GST_DEBUG ("seek: %d", value);
+ gst_element_seek (self->pipeline, 1.0,
+ GST_FORMAT_TIME,
+ SEEK_FLAGS,
+@@ -251,7 +251,7 @@
+ void
+ gst_player_seek_absolute (GstPlayer * self, guint64 value)
+ {
+- GST_DEBUG ("absolute: %lu", value);
++ GST_DEBUG ("absolute: %"G_GUINT64_FORMAT, value);
+ gst_element_seek (self->pipeline, 1.0,
+ GST_FORMAT_TIME,
+ SEEK_FLAGS,
diff --git a/recipes/gstreamer/gst-plugin-bc_git.bb b/recipes/gstreamer/gst-plugin-bc_git.bb
new file mode 100644
index 0000000000..b27c47e63a
--- /dev/null
+++ b/recipes/gstreamer/gst-plugin-bc_git.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "GStreamer elements for IMG BufferClass API"
+LICENSE = "GPLv3"
+
+PV = "0.10.1.1"
+PR = "r1"
+PR_append = "+gitr${SRCREV}"
+
+inherit autotools
+
+SRC_URI = "git://gitorious.org/gst-plugin-bc/gst-plugin-bc.git;protocol=git \
+ http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-0.10.25.tar.bz2 \
+ file://gst-debug.diff;patch=1 \
+"
+
+SRCREV = "e14e249ef6cb67e91be9198b71efc61eb84c11b5"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECONF = " --enable-gles2-example "
+
+# bitbake git fetcher doesn't handle git submodules currently
+do_configure_prepend () {
+ cp -rf ${WORKDIR}/gstreamer-0.10.25/common/* ${S}/common/
+ autopoint
+}
+
+ALLOW_EMPTY = "1"
+
+require gst-plugins-package.inc
+
diff --git a/recipes/gstreamer/gst-plugin-gles/omap3_fix_renderbuffer_storage.patch b/recipes/gstreamer/gst-plugin-gles/omap3_fix_renderbuffer_storage.patch
deleted file mode 100644
index 32911bf499..0000000000
--- a/recipes/gstreamer/gst-plugin-gles/omap3_fix_renderbuffer_storage.patch
+++ /dev/null
@@ -1,29 +0,0 @@
---- /tmp/gstgldisplay.c 2009-09-28 00:49:48.000000000 +0530
-+++ git/gst-libs/gst/gl/gstgldisplay.c 2009-09-30 02:31:20.000000000 +0530
-@@ -1172,7 +1172,7 @@ gst_gl_display_thread_init_download (Gst
- glGenRenderbuffersEXT (1, &display->download_depth_buffer);
- glBindRenderbufferEXT (GL_RENDERBUFFER_EXT,
- display->download_depth_buffer);
-- glRenderbufferStorageEXT (GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT,
-+ glRenderbufferStorageEXT (GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT16,
- display->download_width, display->download_height);
-
- //setup a first texture to render to
-@@ -1536,7 +1536,7 @@ gst_gl_display_thread_gen_fbo (GstGLDisp
- //setup the render buffer for depth
- glGenRenderbuffersEXT (1, &display->generated_depth_buffer);
- glBindRenderbufferEXT (GL_RENDERBUFFER_EXT, display->generated_depth_buffer);
-- glRenderbufferStorageEXT (GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT,
-+ glRenderbufferStorageEXT (GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT16,
- display->gen_fbo_width, display->gen_fbo_height);
-
- //setup a texture to render to
-@@ -2422,7 +2422,7 @@ gst_gl_display_thread_init_upload_fbo (G
- //setup the render buffer for depth
- glGenRenderbuffersEXT (1, &display->upload_depth_buffer);
- glBindRenderbufferEXT (GL_RENDERBUFFER_EXT, display->upload_depth_buffer);
-- glRenderbufferStorageEXT (GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT,
-+ glRenderbufferStorageEXT (GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT16,
- display->upload_width, display->upload_height);
-
- //a fake texture is attached to the upload FBO (cannot init without it)
diff --git a/recipes/gstreamer/gst-plugin-gles_git.bb b/recipes/gstreamer/gst-plugin-gles_git.bb
index b4938dc9f6..60b1ae5c7b 100644
--- a/recipes/gstreamer/gst-plugin-gles_git.bb
+++ b/recipes/gstreamer/gst-plugin-gles_git.bb
@@ -1,9 +1,11 @@
+require gst-plugins-package.inc
+
DESCRIPTION = "GStreamer OpenGL/GLES2 plugins"
LICENSE = "LGPL"
-SRCREV = "18f5c4875006606b28aa9aa366abbc5dd1e16b60"
+SRCREV = "3d5ba149ee8c290bf9995cd2f6826b0ff2920adf"
-PR = "r1"
+PR = "r3"
PR_append = "+gitr${SRCREV}"
PV = "0.10"
@@ -12,18 +14,18 @@ DEPENDS = "virtual/libsdl libgles-omap3 gstreamer gst-plugins-base"
SRC_URI = "git://anongit.freedesktop.org/gstreamer/gst-plugins-gl;protocol=git \
http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-0.10.23.tar.bz2 \
- file://omap3_fix_renderbuffer_storage.patch;patch=1 \
"
S = "${WORKDIR}/git"
inherit autotools pkgconfig
-EXTRA_OECONF = "--disable-tests --disable-examples"
+EXTRA_OECONF = " --disable-rpath --disable-tests --disable-examples"
do_configure_prepend () {
cp -rf ${WORKDIR}/gstreamer-0.10.23/common/* ${S}/common/
cp -rf ${WORKDIR}/gstreamer-0.10.23/po/* ${S}/po/
+ autopoint --force
sed -i -e '/po /d' ${S}/Makefile.am
}
@@ -36,7 +38,6 @@ do_configure () {
sed -i -e 's:-Wl,-rpath-link,${STAGING_LIBDIR}::g' -e s:\Werror\:\Wno-error\:g $i
done
}
-
GST_LIBV = 0.10
do_install() {
@@ -45,15 +46,6 @@ do_install() {
install -m 0755 gst-libs/gst/gl/.libs/libgstgl-0.10.so.0.0.0 ${D}${libdir}/libgstgl-0.10.so.0
}
-
-FILES_${PN} = "${libdir}/gstreamer-0.10/libgstopengl.so \
- ${libdir}/libgstgl-0.10.so.0"
-
-FILES_${PN}-dev += "\
- ${libdir}/gstreamer-0.10/libgstopengl.* \
-"
-
-FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
-
-INSANE_SKIP_${PN} = True
+# bad rpaths we can't get rid off..
+INSANE_SKIP_gst-plugin-opengl = True
diff --git a/recipes/gstreamer/gst-plugins-bad_0.10.18.bb b/recipes/gstreamer/gst-plugins-bad_0.10.18.bb
new file mode 100644
index 0000000000..82710c7b25
--- /dev/null
+++ b/recipes/gstreamer/gst-plugins-bad_0.10.18.bb
@@ -0,0 +1,9 @@
+require gst-plugins.inc
+
+SRC_URI[archive.md5sum] = "84838893b447e774d401a698ff812b32"
+SRC_URI[archive.sha256sum] = "2f800127e00da0f157358f87b06563b3de23cbc630fbf6295b43405e52e02070"
+
+DEPENDS += "orc-native gst-plugins-base openssl directfb"
+
+# We don't have vdpau headers in OE and it creates crosscompile badness
+EXTRA_OECONF_append = " --disable-vdpau "
diff --git a/recipes/gstreamer/gst-plugins-base/gst-plugins-base_rowstride.patch b/recipes/gstreamer/gst-plugins-base/gst-plugins-base_rowstride.patch
new file mode 100644
index 0000000000..3c0cffa036
--- /dev/null
+++ b/recipes/gstreamer/gst-plugins-base/gst-plugins-base_rowstride.patch
@@ -0,0 +1,1577 @@
+From 32a7af0874fe13774c65919941c3be59b72c646a Mon Sep 17 00:00:00 2001
+From: Rob Clark <rob@ti.com>
+Date: Thu, 30 Jul 2009 14:50:05 -0500
+Subject: [PATCH] add rowstride support to video utility functions
+
+This is a combination of 7 commits:
+* add rowstride support to video utility functions
+* stridetransform: skeletal implementation of stridetransform element
+* stridetransform: implement caps negotiation and related parts
+* stridetransform: implement transform function
+* audioconvert: add NEON acceleration for some conversions
+* add gst_stride_transform_transform_size()
+* fix a small typo.. need to use the smaller of {new_width, orig_width} for the line-by-line copy to avoid overwriting past end of buffer
+---
+ configure.ac | 2 +
+ gst-libs/gst/video/gstvideofilter.c | 8 +-
+ gst-libs/gst/video/video.c | 234 +++++++++++++++---
+ gst-libs/gst/video/video.h | 39 ++-
+ gst/audioconvert/Makefile.am | 1 +
+ gst/audioconvert/armv7.c | 209 ++++++++++++++++
+ gst/audioconvert/audioconvert.c | 20 +-
+ gst/audioconvert/gstaudioquantize.c | 4 +-
+ gst/audioconvert/gstchannelmix.c | 4 +-
+ gst/stride/Makefile.am | 15 ++
+ gst/stride/gststridetransform.c | 471 +++++++++++++++++++++++++++++++++++
+ gst/stride/gststridetransform.h | 80 ++++++
+ gst/stride/plugin.c | 45 ++++
+ 13 files changed, 1064 insertions(+), 68 deletions(-)
+ create mode 100644 gst/audioconvert/armv7.c
+ create mode 100644 gst/stride/Makefile.am
+ create mode 100644 gst/stride/gststridetransform.c
+ create mode 100644 gst/stride/gststridetransform.h
+ create mode 100644 gst/stride/plugin.c
+
+diff --git a/configure.ac b/configure.ac
+index 6a39c73..5da8ac2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -319,6 +319,7 @@ AG_GST_CHECK_PLUGIN(ffmpegcolorspace)
+ AG_GST_CHECK_PLUGIN(gdp)
+ AG_GST_CHECK_PLUGIN(playback)
+ AG_GST_CHECK_PLUGIN(audioresample)
++AG_GST_CHECK_PLUGIN(stride)
+ AG_GST_CHECK_PLUGIN(subparse)
+ AG_GST_CHECK_PLUGIN(tcp)
+ AG_GST_CHECK_PLUGIN(typefind)
+@@ -739,6 +740,7 @@ gst/ffmpegcolorspace/Makefile
+ gst/gdp/Makefile
+ gst/playback/Makefile
+ gst/audioresample/Makefile
++gst/stride/Makefile
+ gst/subparse/Makefile
+ gst/tcp/Makefile
+ gst/typefind/Makefile
+diff --git a/gst-libs/gst/video/gstvideofilter.c b/gst-libs/gst/video/gstvideofilter.c
+index 2d08a60..6b2d7b7 100644
+--- a/gst-libs/gst/video/gstvideofilter.c
++++ b/gst-libs/gst/video/gstvideofilter.c
+@@ -21,7 +21,7 @@
+ /**
+ * SECTION:gstvideofilter
+ * @short_description: Base class for video filters
+- *
++ *
+ * <refsect2>
+ * <para>
+ * Provides useful functions and a base class for video filters.
+@@ -78,14 +78,14 @@ gst_video_filter_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
+ guint * size)
+ {
+ GstVideoFormat fmt;
+- gint width, height;
++ gint width, height, rowstride;
+
+- if (!gst_video_format_parse_caps (caps, &fmt, &width, &height)) {
++ if (!gst_video_format_parse_caps_strided (caps, &fmt, &width, &height, &rowstride)) {
+ GST_WARNING_OBJECT (btrans, "Failed to parse caps %" GST_PTR_FORMAT, caps);
+ return FALSE;
+ }
+
+- *size = gst_video_format_get_size (fmt, width, height);
++ *size = gst_video_format_get_size_strided (fmt, width, height, rowstride);
+
+ GST_DEBUG_OBJECT (btrans, "Returning size %u bytes for caps %"
+ GST_PTR_FORMAT, *size, caps);
+diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c
+index ab1d8c0..1815bf1 100644
+--- a/gst-libs/gst/video/video.c
++++ b/gst-libs/gst/video/video.c
+@@ -31,7 +31,7 @@
+ *
+ * <refsect2>
+ * <para>
+- * This library contains some helper functions and includes the
++ * This library contains some helper functions and includes the
+ * videosink and videofilter base classes.
+ * </para>
+ * </refsect2>
+@@ -51,7 +51,7 @@ static GstVideoFormat gst_video_format_from_rgb24_masks (int red_mask,
+ *
+ * A convenience function to retrieve a GValue holding the framerate
+ * from the caps on a pad.
+- *
++ *
+ * The pad needs to have negotiated caps containing a framerate property.
+ *
+ * Returns: NULL if the pad has no configured caps or the configured caps
+@@ -104,7 +104,7 @@ gst_video_frame_rate (GstPad * pad)
+ *
+ * Inspect the caps of the provided pad and retrieve the width and height of
+ * the video frames it is configured for.
+- *
++ *
+ * The pad needs to have negotiated caps containing width and height properties.
+ *
+ * Returns: TRUE if the width and height could be retrieved.
+@@ -156,13 +156,13 @@ gst_video_get_size (GstPad * pad, gint * width, gint * height)
+ * @display_par_n: Numerator of the pixel aspect ratio of the display device
+ * @display_par_d: Denominator of the pixel aspect ratio of the display device
+ *
+- * Given the Pixel Aspect Ratio and size of an input video frame, and the
+- * pixel aspect ratio of the intended display device, calculates the actual
++ * Given the Pixel Aspect Ratio and size of an input video frame, and the
++ * pixel aspect ratio of the intended display device, calculates the actual
+ * display ratio the video will be rendered with.
+ *
+- * Returns: A boolean indicating success and a calculated Display Ratio in the
+- * dar_n and dar_d parameters.
+- * The return value is FALSE in the case of integer overflow or other error.
++ * Returns: A boolean indicating success and a calculated Display Ratio in the
++ * dar_n and dar_d parameters.
++ * The return value is FALSE in the case of integer overflow or other error.
+ *
+ * Since: 0.10.7
+ */
+@@ -250,28 +250,15 @@ gst_video_format_parse_caps_interlaced (GstCaps * caps, gboolean * interlaced)
+ }
+
+ /**
+- * gst_video_format_parse_caps:
+- * @caps: the #GstCaps to parse
+- * @format: the #GstVideoFormat of the video represented by @caps (output)
+- * @width: the width of the video represented by @caps, may be NULL (output)
+- * @height: the height of the video represented by @caps, may be NULL (output)
+- *
+- * Determines the #GstVideoFormat of @caps and places it in the location
+- * pointed to by @format. Extracts the size of the video and places it
+- * in the location pointed to by @width and @height. If @caps does not
+- * represent one of the raw video formats listed in #GstVideoFormat, the
+- * function will fail and return FALSE.
+- *
+- * Since: 0.10.16
+- *
+- * Returns: TRUE if @caps was parsed correctly.
++ * see gst_video_format_parse_caps_strided and gst_video_format_parse_caps
+ */
+-gboolean
+-gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
+- int *width, int *height)
++static gboolean
++parse_caps (GstCaps * caps, GstVideoFormat * format, gint *width, gint *height,
++ gboolean stride_ok, gint *rowstride)
+ {
+ GstStructure *structure;
+ gboolean ok = TRUE;
++ gboolean strided = FALSE;
+
+ if (!gst_caps_is_fixed (caps))
+ return FALSE;
+@@ -279,7 +266,10 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
+ structure = gst_caps_get_structure (caps, 0);
+
+ if (format) {
+- if (gst_structure_has_name (structure, "video/x-raw-yuv")) {
++ if (gst_structure_has_name (structure, "video/x-raw-yuv") ||
++ (stride_ok &&
++ gst_structure_has_name (structure, "video/x-raw-yuv-strided") &&
++ (strided=TRUE) /* single '=' intentional */)) {
+ guint32 fourcc;
+
+ ok &= gst_structure_get_fourcc (structure, "format", &fourcc);
+@@ -288,7 +278,10 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
+ if (*format == GST_VIDEO_FORMAT_UNKNOWN) {
+ ok = FALSE;
+ }
+- } else if (gst_structure_has_name (structure, "video/x-raw-rgb")) {
++ } else if (gst_structure_has_name (structure, "video/x-raw-rgb") ||
++ (stride_ok &&
++ gst_structure_has_name (structure, "video/x-raw-rgb-strided") &&
++ (strided=TRUE) /* single '=' intentional */)) {
+ int depth;
+ int bpp;
+ int endianness;
+@@ -333,6 +326,10 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
+ }
+ }
+
++ /* note: should we require that the caps have these fields, even if
++ * the caller does not particularly request them??
++ */
++
+ if (width) {
+ ok &= gst_structure_get_int (structure, "width", width);
+ }
+@@ -341,11 +338,70 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
+ ok &= gst_structure_get_int (structure, "height", height);
+ }
+
++ if (rowstride) {
++ if (strided) {
++ ok &= gst_structure_get_int (structure, "rowstride", rowstride);
++ } else {
++ *rowstride = 0; /* not a strided format */
++ }
++ }
++
+ return ok;
+ }
+
+
+ /**
++ * gst_video_format_parse_caps_strided:
++ * @caps: the #GstCaps to parse
++ * @format: the #GstVideoFormat of the video represented by @caps (output)
++ * @width: the width of the video represented by @caps, may be NULL (output)
++ * @height: the height of the video represented by @caps, may be NULL (output)
++ * @rowstride: the rowstride (in bytes) represented by @caps, or 0 if there
++ * is no rowstride, may be NULL (output)
++ *
++ * Determines the #GstVideoFormat of @caps and places it in the location
++ * pointed to by @format. Extracts the size of the video and places it
++ * in the location pointed to by @width and @height. Extracts the row-
++ * stride and places it in the location pointed to by @rowstride. If
++ * @caps does not represent one of the raw video formats listed in
++ * #GstVideoFormat, the function will fail and return FALSE.
++ *
++ * Since: ???
++ *
++ * Returns: TRUE if @caps was parsed correctly.
++ */
++gboolean
++gst_video_format_parse_caps_strided (GstCaps * caps, GstVideoFormat * format,
++ int *width, int *height, int *rowstride)
++{
++ return parse_caps (caps, format, width, height, TRUE, rowstride);
++}
++
++/**
++ * gst_video_format_parse_caps:
++ * @caps: the #GstCaps to parse
++ * @format: the #GstVideoFormat of the video represented by @caps (output)
++ * @width: the width of the video represented by @caps, may be NULL (output)
++ * @height: the height of the video represented by @caps, may be NULL (output)
++ *
++ * Determines the #GstVideoFormat of @caps and places it in the location
++ * pointed to by @format. Extracts the size of the video and places it
++ * in the location pointed to by @width and @height. If @caps does not
++ * represent one of the raw video formats listed in #GstVideoFormat, the
++ * function will fail and return FALSE.
++ *
++ * Since: 0.10.16
++ *
++ * Returns: TRUE if @caps was parsed correctly.
++ */
++gboolean
++gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
++ int *width, int *height)
++{
++ return parse_caps (caps, format, width, height, FALSE, NULL);
++}
++
++/**
+ * gst_video_parse_caps_framerate:
+ * @caps: pointer to a #GstCaps instance
+ * @fps_n: pointer to integer to hold numerator of frame rate (output)
+@@ -444,10 +500,11 @@ gst_video_format_new_caps_interlaced (GstVideoFormat format, int width,
+ }
+
+ /**
+- * gst_video_format_new_caps:
++ * gst_video_format_new_caps_strided:
+ * @format: the #GstVideoFormat describing the raw video format
+ * @width: width of video
+ * @height: height of video
++ * @rowstride: the rowstride (in bytes), or 0 if no rowstride
+ * @framerate_n: numerator of frame rate
+ * @framerate_d: denominator of frame rate
+ * @par_n: numerator of pixel aspect ratio
+@@ -455,26 +512,29 @@ gst_video_format_new_caps_interlaced (GstVideoFormat format, int width,
+ *
+ * Creates a new #GstCaps object based on the parameters provided.
+ *
+- * Since: 0.10.16
++ * Since: ???
+ *
+ * Returns: a new #GstCaps object, or NULL if there was an error
+ */
+ GstCaps *
+-gst_video_format_new_caps (GstVideoFormat format, int width, int height,
++gst_video_format_new_caps_strided (GstVideoFormat format,
++ int width, int height, int rowstride,
+ int framerate_n, int framerate_d, int par_n, int par_d)
+ {
++ GstCaps *caps = NULL;
++
+ g_return_val_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN, NULL);
+ g_return_val_if_fail (width > 0 && height > 0, NULL);
+
+ if (gst_video_format_is_yuv (format)) {
+- return gst_caps_new_simple ("video/x-raw-yuv",
++ caps = gst_caps_new_simple (
++ rowstride ? "video/x-raw-yuv-strided" : "video/x-raw-yuv",
+ "format", GST_TYPE_FOURCC, gst_video_format_to_fourcc (format),
+ "width", G_TYPE_INT, width,
+ "height", G_TYPE_INT, height,
+ "framerate", GST_TYPE_FRACTION, framerate_n, framerate_d,
+ "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, NULL);
+- }
+- if (gst_video_format_is_rgb (format)) {
++ } else if (gst_video_format_is_rgb (format)) {
+ GstCaps *caps;
+ int red_mask;
+ int blue_mask;
+@@ -526,7 +586,8 @@ gst_video_format_new_caps (GstVideoFormat format, int width, int height,
+ mask >> (8 * gst_video_format_get_component_offset (format, 2, width,
+ height));
+
+- caps = gst_caps_new_simple ("video/x-raw-rgb",
++ caps = gst_caps_new_simple (
++ rowstride ? "video/x-raw-rgb-strided" : "video/x-raw-rgb",
+ "bpp", G_TYPE_INT, bpp,
+ "depth", G_TYPE_INT, depth,
+ "endianness", G_TYPE_INT, G_BIG_ENDIAN,
+@@ -543,9 +604,39 @@ gst_video_format_new_caps (GstVideoFormat format, int width, int height,
+ height));
+ gst_caps_set_simple (caps, "alpha_mask", G_TYPE_INT, alpha_mask, NULL);
+ }
+- return caps;
++ } else {
++ return NULL;
++ }
++
++ if (rowstride) {
++ gst_caps_set_simple (caps, "rowstride", G_TYPE_INT, rowstride, NULL);
+ }
+- return NULL;
++
++ return caps;
++}
++
++/**
++ * gst_video_format_new_caps:
++ * @format: the #GstVideoFormat describing the raw video format
++ * @width: width of video
++ * @height: height of video
++ * @framerate_n: numerator of frame rate
++ * @framerate_d: denominator of frame rate
++ * @par_n: numerator of pixel aspect ratio
++ * @par_d: denominator of pixel aspect ratio
++ *
++ * Creates a new #GstCaps object based on the parameters provided.
++ *
++ * Since: 0.10.16
++ *
++ * Returns: a new #GstCaps object, or NULL if there was an error
++ */
++GstCaps *
++gst_video_format_new_caps (GstVideoFormat format, int width, int height,
++ int framerate_n, int framerate_d, int par_n, int par_d)
++{
++ return gst_video_format_new_caps_strided (format, width, height, 0,
++ framerate_n, framerate_d, par_n, par_d);
+ }
+
+ /**
+@@ -643,7 +734,7 @@ gst_video_format_to_fourcc (GstVideoFormat format)
+ * @blue_mask: blue bit mask
+ *
+ * Converts red, green, blue bit masks into the corresponding
+- * #GstVideoFormat.
++ * #GstVideoFormat.
+ *
+ * Since: 0.10.16
+ *
+@@ -796,7 +887,7 @@ gst_video_format_is_yuv (GstVideoFormat format)
+ /**
+ * gst_video_format_has_alpha:
+ * @format: a #GstVideoFormat
+- *
++ *
+ * Returns TRUE or FALSE depending on if the video format provides an
+ * alpha channel.
+ *
+@@ -1328,6 +1419,71 @@ gst_video_format_get_size (GstVideoFormat format, int width, int height)
+ }
+
+ /**
++ * gst_video_format_get_size_strided:
++ * @format: a #GstVideoFormat
++ * @width: the width of video (in pixels)
++ * @height: the height of video (in pixels)
++ * @rowstride: the rowstride (in bytes), or 0 if no rowstride (in which
++ * case the returned value is same as #gst_video_format_get_size())
++ *
++ * Calculates the total number of bytes in the raw video format, for a buffer
++ * which may have a rowstride in bytes
++ *
++ * Since: ???
++ *
++ * Returns: size (in bytes) of raw video format
++ */
++int
++gst_video_format_get_size_strided (GstVideoFormat format,
++ int width, int height, int rowstride)
++{
++ if(!rowstride)
++ return gst_video_format_get_size (format, width, height);
++
++ g_return_val_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN, 0);
++ g_return_val_if_fail (width > 0 && height > 0, 0);
++
++ switch (format) {
++ /* all packed formats have the same calculation, ie. rowstride * height
++ */
++ case GST_VIDEO_FORMAT_RGBx:
++ case GST_VIDEO_FORMAT_BGRx:
++ case GST_VIDEO_FORMAT_xRGB:
++ case GST_VIDEO_FORMAT_xBGR:
++ case GST_VIDEO_FORMAT_RGBA:
++ case GST_VIDEO_FORMAT_BGRA:
++ case GST_VIDEO_FORMAT_ARGB:
++ case GST_VIDEO_FORMAT_ABGR:
++ case GST_VIDEO_FORMAT_RGB:
++ case GST_VIDEO_FORMAT_BGR:
++ case GST_VIDEO_FORMAT_YUY2:
++ case GST_VIDEO_FORMAT_YVYU:
++ case GST_VIDEO_FORMAT_UYVY:
++ case GST_VIDEO_FORMAT_AYUV:
++ case GST_VIDEO_FORMAT_v210:
++ case GST_VIDEO_FORMAT_v216:
++ return GST_ROUND_UP_4 (rowstride * height);
++
++ /* these planar formats have 2x sub-sampling in the vertical direction,
++ * so U/V have half as many rows as Y:
++ */
++ case GST_VIDEO_FORMAT_I420:
++ case GST_VIDEO_FORMAT_YV12:
++ return GST_ROUND_UP_4 (2 * rowstride * height);
++
++ /* these planar formats have no sub-sampling in the vertical direction,
++ * so each plane has 'height' number of rows
++ */
++ case GST_VIDEO_FORMAT_Y41B:
++ case GST_VIDEO_FORMAT_Y42B:
++ case GST_VIDEO_FORMAT_Y444:
++ return GST_ROUND_UP_4 (3 * rowstride * height);
++ default:
++ return 0;
++ }
++}
++
++/**
+ * gst_video_format_convert:
+ * @format: a #GstVideoFormat
+ * @width: the width of video
+diff --git a/gst-libs/gst/video/video.h b/gst-libs/gst/video/video.h
+index 162a766..ed20179 100644
+--- a/gst-libs/gst/video/video.h
++++ b/gst-libs/gst/video/video.h
+@@ -33,7 +33,7 @@ G_BEGIN_DECLS
+ * @GST_VIDEO_FORMAT_I420: planar 4:2:0 YUV
+ * @GST_VIDEO_FORMAT_YV12: planar 4:2:0 YVU (like I420 but UV planes swapped)
+ * @GST_VIDEO_FORMAT_YUY2: packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...)
+- * @GST_VIDEO_FORMAT_UYVY: packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...)
++ * @GST_VIDEO_FORMAT_UYVY: packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...)
+ * @GST_VIDEO_FORMAT_AYUV: packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...)
+ * @GST_VIDEO_FORMAT_RGBx: sparse rgb packed into 32 bit, space last
+ * @GST_VIDEO_FORMAT_BGRx: sparse reverse rgb packed into 32 bit, space last
+@@ -167,13 +167,13 @@ typedef enum {
+
+ #define GST_VIDEO_CAPS_RGBx \
+ __GST_VIDEO_CAPS_MAKE_32 (1, 2, 3)
+-
++
+ #define GST_VIDEO_CAPS_xRGB \
+ __GST_VIDEO_CAPS_MAKE_32 (2, 3, 4)
+-
++
+ #define GST_VIDEO_CAPS_BGRx \
+ __GST_VIDEO_CAPS_MAKE_32 (3, 2, 1)
+-
++
+ #define GST_VIDEO_CAPS_xBGR \
+ __GST_VIDEO_CAPS_MAKE_32 (4, 3, 2)
+
+@@ -181,13 +181,13 @@ typedef enum {
+
+ #define GST_VIDEO_CAPS_RGBA \
+ __GST_VIDEO_CAPS_MAKE_32A (1, 2, 3, 4)
+-
++
+ #define GST_VIDEO_CAPS_ARGB \
+ __GST_VIDEO_CAPS_MAKE_32A (2, 3, 4, 1)
+-
++
+ #define GST_VIDEO_CAPS_BGRA \
+ __GST_VIDEO_CAPS_MAKE_32A (3, 2, 1, 4)
+-
++
+ #define GST_VIDEO_CAPS_ABGR \
+ __GST_VIDEO_CAPS_MAKE_32A (4, 3, 2, 1)
+
+@@ -203,9 +203,9 @@ typedef enum {
+ #define GST_VIDEO_CAPS_BGRx_HOST_ENDIAN \
+ GST_VIDEO_CAPS_xRGB
+ #endif
+-
++
+ /* 15/16 bit */
+-
++
+ #define GST_VIDEO_CAPS_RGB_16 \
+ "video/x-raw-rgb, " \
+ "bpp = (int) 16, " \
+@@ -237,6 +237,16 @@ typedef enum {
+ "height = " GST_VIDEO_SIZE_RANGE ", " \
+ "framerate = " GST_VIDEO_FPS_RANGE
+
++
++#define GST_VIDEO_CAPS_YUV_STRIDED(fourcc, rowstride) \
++ GST_VIDEO_CAPS_YUV(fourcc) "; " \
++ "video/x-raw-yuv-strided, " \
++ "format = (fourcc) " fourcc ", " \
++ "rowstride = (int) " rowstride ", " \
++ "width = " GST_VIDEO_SIZE_RANGE ", " \
++ "height = " GST_VIDEO_SIZE_RANGE ", " \
++ "framerate = " GST_VIDEO_FPS_RANGE
++
+ /* buffer flags */
+
+ /**
+@@ -276,13 +286,15 @@ gboolean gst_video_get_size (GstPad *pad,
+ gint *height);
+
+ gboolean gst_video_calculate_display_ratio (guint *dar_n, guint *dar_d,
+- guint video_width, guint video_height,
+- guint video_par_n, guint video_par_d,
++ guint video_width, guint video_height,
++ guint video_par_n, guint video_par_d,
+ guint display_par_n, guint display_par_d);
+
+ gboolean gst_video_format_parse_caps (GstCaps *caps, GstVideoFormat *format,
+ int *width, int *height);
+ gboolean gst_video_format_parse_caps_interlaced (GstCaps *caps, gboolean *interlaced);
++gboolean gst_video_format_parse_caps_strided (GstCaps * caps, GstVideoFormat * format,
++ int *width, int *height, int *rowstride);
+ gboolean gst_video_parse_caps_framerate (GstCaps *caps,
+ int *fps_n, int *fps_d);
+ gboolean gst_video_parse_caps_pixel_aspect_ratio (GstCaps *caps,
+@@ -293,6 +305,9 @@ GstCaps * gst_video_format_new_caps (GstVideoFormat format,
+ GstCaps * gst_video_format_new_caps_interlaced (GstVideoFormat format,
+ int width, int height, int framerate_n, int framerate_d,
+ int par_n, int par_d, gboolean interlaced);
++GstCaps * gst_video_format_new_caps_strided (GstVideoFormat format,
++ int width, int height, int rowstride,
++ int framerate_n, int framerate_d, int par_n, int par_d);
+ GstVideoFormat gst_video_format_from_fourcc (guint32 fourcc);
+ guint32 gst_video_format_to_fourcc (GstVideoFormat format);
+ gboolean gst_video_format_is_rgb (GstVideoFormat format);
+@@ -308,6 +323,8 @@ int gst_video_format_get_component_height (GstVideoFormat format, int component,
+ int gst_video_format_get_component_offset (GstVideoFormat format, int component,
+ int width, int height);
+ int gst_video_format_get_size (GstVideoFormat format, int width, int height);
++int gst_video_format_get_size_strided (GstVideoFormat format,
++ int width, int height, int rowstride);
+ gboolean gst_video_format_convert (GstVideoFormat format, int width, int height,
+ int fps_n, int fps_d,
+ GstFormat src_format, gint64 src_value,
+diff --git a/gst/audioconvert/Makefile.am b/gst/audioconvert/Makefile.am
+index 94978bb..2d273db 100644
+--- a/gst/audioconvert/Makefile.am
++++ b/gst/audioconvert/Makefile.am
+@@ -5,6 +5,7 @@ libgstaudioconvert_la_SOURCES = \
+ audioconvert.c \
+ gstchannelmix.c \
+ gstaudioquantize.c \
++ armv7.c \
+ plugin.c
+
+ libgstaudioconvert_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+diff --git a/gst/audioconvert/armv7.c b/gst/audioconvert/armv7.c
+new file mode 100644
+index 0000000..e39d29d
+--- /dev/null
++++ b/gst/audioconvert/armv7.c
+@@ -0,0 +1,209 @@
++/* GStreamer
++ *
++ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
++ *
++ * Description: NEON/VFP accelerated functions for armv7 architecture
++ * Created on: Aug 8, 2009
++ * Author: Rob Clark <rob@ti.com>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library 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.
++ */
++
++#ifdef __ARM_NEON__
++#include <arm_neon.h>
++#include <string.h>
++
++#include "audioconvert.h"
++
++
++void
++gst_audio_quantize_quantize_signed_tpdf_none (AudioConvertCtx *ctx,
++ gint32 *src, gint32 *dst, gint count)
++{
++ static guint32 state[4] = {
++ 0xdeadbeef,
++ 0x305b8cc9,
++ 0x6c46ec93,
++ 0xad13b0cd
++ };
++
++ gint scale = ctx->out_scale;
++ count *= ctx->out.channels;
++
++ if (scale > 0) {
++ guint32 mask = 0xffffffff & (0xffffffff << scale);
++ guint32 bias = (1U << (scale - 1)) >> 1;
++ gint32 dither = (1<<(scale - 1));
++
++ int32x4_t vrand;
++ uint32x4_t vstate;
++ uint32x4_t v12345;
++ int32x4_t vtmp;
++ uint32x4_t vmask;
++
++ vstate = vld1q_u32 (state);
++ v12345 = vmovq_n_u32 (12345);
++ vmask = vmovq_n_u32 (mask);
++
++ /* until we have less 4 words less to process, use vector instructions
++ * to do everything 4x at a time:
++ */
++ for (;;count-=4) {
++ int64x2_t vtmp_lo;
++ int64x2_t vtmp_hi;
++ uint32x4_t vstate2;
++ int32x2_t vrand_lo;
++ int32x2_t vrand_hi;
++
++ /* generate next eight random words: (see gst_fast_random_uint32())
++ *
++ * state = state * 1103515245 + 12345
++ */
++ vstate2 = vmulq_n_u32 (vstate, 1103515245);
++ vstate2 = vaddq_u32 (vstate2, v12345);
++ vstate = vmulq_n_u32 (vstate2, 1103515245);
++ vstate = vaddq_u32 (vstate2, v12345);
++
++ /* generate next four scaled random values:
++ *
++ * gint32 start = bias - dither;
++ * gint32 end = bias + dither - 1;
++ * gint64 tmp1 = gst_fast_random_uint32 ();
++ * gint64 tmp2 = gst_fast_random_uint32 ();
++ * rand = (gint32)(((tmp1+tmp2) * (end - start)) / (1LLU<<32) + start);
++ *
++ * need to split vstate and vstate2 into 2*2 int64x2_t and add....
++ */
++ vstate2 = vaddq_u32 (vstate, vstate2); /* tmp1+tmp2 */
++ vtmp_lo = vreinterpretq_s64_u64 ( /* * (end-start) */
++ vmull_n_u32 (vget_low_u32 (vstate2), (2*dither) - 1));
++ vtmp_hi = vreinterpretq_s64_u64 ( /* * (end-start) */
++ vmull_n_u32 (vget_high_u32 (vstate2), (2*dither) - 1));
++
++ vtmp_lo = vshrq_n_s64 (vtmp_lo, 32); /* / (1LLU<<32) */
++ vtmp_hi = vshrq_n_s64 (vtmp_hi, 32); /* / (1LLU<<32) */
++
++
++ /* now want to put vtmp_hi and vtmp_lo back together..
++ * then add 'start' (bias-dither).. which is negative..
++ */
++ vrand_lo = vmovn_s64 (vtmp_lo);
++ vrand_hi = vmovn_s64 (vtmp_hi);
++ vrand = vcombine_s32 (vrand_lo, vrand_hi);
++ vrand = vaddq_s32 (vrand, vmovq_n_s32 (bias-dither));
++
++ /* load next 4 words:
++ */
++ vtmp = vld1q_s32 (src);
++ src += 4;
++
++ /* perform saturating add of random noise... we don't want the
++ * value to wrap around:
++ *
++ * XXX I *think* vqaddq will handle saturation for underflow too..
++ */
++ vtmp = vqaddq_s32 (vtmp, vrand);
++ vtmp = vreinterpretq_s32_u32 (
++ vandq_u32 (vreinterpretq_u32_s32 (vtmp), vmask));
++
++ /* we check for less than four remaining words at the end, before
++ * we store the result back.. the assumption is that it shouldn't
++ * cause a segfault to read past the end of 'src', and there is no
++ * harm in processing a few garbage words. But we definitely don't
++ * want to write past the end of 'dst'
++ */
++ if (count<4) break;
++
++ /* store 4 words to result:
++ */
++ vst1q_s32 (dst, vtmp);
++ dst += 4;
++ }
++
++ vst1q_u32 (state, vstate);
++
++ /* at this point, we could have 0-3 result bytes in vtmp to write
++ * back out to 'dst':
++ */
++ if (count) {
++ gint32 tmpdst[4];
++ gint32 *tmpp = tmpdst;
++
++ vst1q_s32 (tmpdst, vtmp);
++
++ while (count--) {
++ *dst++ = *tmpp++;
++ }
++ }
++
++ } else {
++ memmove (dst, src, count);
++ }
++}
++
++void
++gst_audio_convert_unpack_float_le (gfloat * src, gint32 * dst, gint s, gint count)
++{
++ float32x4_t vsrc;
++ float32x4_t v05;
++ int32x4_t vdst;
++
++ v05 = vmovq_n_f32 (0.5);
++
++ for (;;count-=4) {
++
++ /* load next 4 words:
++ */
++ vsrc = vld1q_f32 ((float32_t *)src);
++ src += 4;
++
++ /* convert to int:
++ */
++ vsrc = vmulq_n_f32 (vsrc, 2147483647.0);
++ vsrc = vaddq_f32 (vsrc, v05);
++ vdst = vcvtq_s32_f32 (vsrc);
++
++ /* we check for less than four remaining words at the end, before
++ * we store the result back.. the assumption is that it shouldn't
++ * cause a segfault to read past the end of 'src', and there is no
++ * harm in processing a few garbage words. But we definitely don't
++ * want to write past the end of 'dst'
++ */
++ if (count<4) break;
++
++ /* store 4 words to result:
++ */
++ vst1q_s32 (dst, vdst);
++ dst += 4;
++ }
++
++ /* at this point, we could have 0-3 result bytes in vtmp to write
++ * back out to 'dst':
++ */
++ if (count) {
++ gint32 tmpdst[4];
++ gint32 *tmpp = tmpdst;
++
++ vst1q_s32 (tmpdst, vdst);
++
++ while (count--) {
++ *dst++ = *tmpp++;
++ }
++ }
++}
++
++
++#endif
+diff --git a/gst/audioconvert/audioconvert.c b/gst/audioconvert/audioconvert.c
+index 4780324..c18d217 100644
+--- a/gst/audioconvert/audioconvert.c
++++ b/gst/audioconvert/audioconvert.c
+@@ -38,11 +38,11 @@
+ * unpack code
+ */
+ #define MAKE_UNPACK_FUNC_NAME(name) \
+-audio_convert_unpack_##name
++gst_audio_convert_unpack_##name
+
+ /* unpack from integer to signed integer 32 */
+ #define MAKE_UNPACK_FUNC_II(name, stride, sign, READ_FUNC) \
+-static void \
++void __attribute__((weak)) \
+ MAKE_UNPACK_FUNC_NAME (name) (guint8 *src, gint32 *dst, \
+ gint scale, gint count) \
+ { \
+@@ -54,7 +54,7 @@ MAKE_UNPACK_FUNC_NAME (name) (guint8 *src, gint32 *dst, \
+
+ /* unpack from float to signed integer 32 */
+ #define MAKE_UNPACK_FUNC_FI(name, type, READ_FUNC) \
+-static void \
++void __attribute__((weak)) \
+ MAKE_UNPACK_FUNC_NAME (name) (type * src, gint32 * dst, gint s, gint count) \
+ { \
+ gdouble temp; \
+@@ -68,7 +68,7 @@ MAKE_UNPACK_FUNC_NAME (name) (type * src, gint32 * dst, gint s, gint count) \
+
+ /* unpack from float to float 64 (double) */
+ #define MAKE_UNPACK_FUNC_FF(name, type, FUNC) \
+-static void \
++void __attribute__((weak)) \
+ MAKE_UNPACK_FUNC_NAME (name) (type * src, gdouble * dst, gint s, \
+ gint count) \
+ { \
+@@ -78,7 +78,7 @@ MAKE_UNPACK_FUNC_NAME (name) (type * src, gdouble * dst, gint s, \
+
+ /* unpack from int to float 64 (double) */
+ #define MAKE_UNPACK_FUNC_IF(name, stride, sign, READ_FUNC) \
+-static void \
++void __attribute__((weak)) \
+ MAKE_UNPACK_FUNC_NAME (name) (guint8 * src, gdouble * dst, gint scale, \
+ gint count) \
+ { \
+@@ -158,7 +158,7 @@ audio_convert_pack_##name
+
+ /* pack from signed integer 32 to integer */
+ #define MAKE_PACK_FUNC_II(name, stride, sign, WRITE_FUNC) \
+-static void \
++void __attribute__((weak)) \
+ MAKE_PACK_FUNC_NAME (name) (gint32 *src, guint8 * dst, \
+ gint scale, gint count) \
+ { \
+@@ -172,7 +172,7 @@ MAKE_PACK_FUNC_NAME (name) (gint32 *src, guint8 * dst, \
+
+ /* pack from signed integer 32 to float */
+ #define MAKE_PACK_FUNC_IF(name, type, FUNC) \
+-static void \
++void __attribute__((weak)) \
+ MAKE_PACK_FUNC_NAME (name) (gint32 * src, type * dst, gint scale, \
+ gint count) \
+ { \
+@@ -182,7 +182,7 @@ MAKE_PACK_FUNC_NAME (name) (gint32 * src, type * dst, gint scale, \
+
+ /* pack from float 64 (double) to float */
+ #define MAKE_PACK_FUNC_FF(name, type, FUNC) \
+-static void \
++void __attribute__((weak)) \
+ MAKE_PACK_FUNC_NAME (name) (gdouble * src, type * dst, gint s, \
+ gint count) \
+ { \
+@@ -194,7 +194,7 @@ MAKE_PACK_FUNC_NAME (name) (gdouble * src, type * dst, gint s, \
+ * the floats are already in the correct range. Only a cast is needed.
+ */
+ #define MAKE_PACK_FUNC_FI_S(name, stride, WRITE_FUNC) \
+-static void \
++void __attribute__((weak)) \
+ MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale, \
+ gint count) \
+ { \
+@@ -212,7 +212,7 @@ MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale, \
+ * and an addition of 2^(target_depth-1) to get in the correct unsigned
+ * range. */
+ #define MAKE_PACK_FUNC_FI_U(name, stride, WRITE_FUNC) \
+-static void \
++void __attribute__((weak)) \
+ MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale, \
+ gint count) \
+ { \
+diff --git a/gst/audioconvert/gstaudioquantize.c b/gst/audioconvert/gstaudioquantize.c
+index 2155397..be959c4 100644
+--- a/gst/audioconvert/gstaudioquantize.c
++++ b/gst/audioconvert/gstaudioquantize.c
+@@ -46,7 +46,7 @@ gst_audio_quantize_quantize_##name
+
+ #define MAKE_QUANTIZE_FUNC_I(name, DITHER_INIT_FUNC, ADD_DITHER_FUNC, \
+ ROUND_FUNC) \
+-static void \
++void __attribute__((weak)) \
+ MAKE_QUANTIZE_FUNC_NAME (name) (AudioConvertCtx *ctx, gint32 *src, \
+ gint32 *dst, gint count) \
+ { \
+@@ -86,7 +86,7 @@ MAKE_QUANTIZE_FUNC_NAME (name) (AudioConvertCtx *ctx, gint32 *src, \
+ #define MAKE_QUANTIZE_FUNC_F(name, DITHER_INIT_FUNC, NS_INIT_FUNC, \
+ ADD_NS_FUNC, ADD_DITHER_FUNC, \
+ UPDATE_ERROR_FUNC) \
+-static void \
++void __attribute__((weak)) \
+ MAKE_QUANTIZE_FUNC_NAME (name) (AudioConvertCtx *ctx, gdouble *src, \
+ gdouble *dst, gint count) \
+ { \
+diff --git a/gst/audioconvert/gstchannelmix.c b/gst/audioconvert/gstchannelmix.c
+index 1dbfcce..9ace1cb 100644
+--- a/gst/audioconvert/gstchannelmix.c
++++ b/gst/audioconvert/gstchannelmix.c
+@@ -663,7 +663,7 @@ gst_channel_mix_passthrough (AudioConvertCtx * this)
+
+ /* IMPORTANT: out_data == in_data is possible, make sure to not overwrite data
+ * you might need later on! */
+-void
++void __attribute__((weak))
+ gst_channel_mix_mix_int (AudioConvertCtx * this,
+ gint32 * in_data, gint32 * out_data, gint samples)
+ {
+@@ -702,7 +702,7 @@ gst_channel_mix_mix_int (AudioConvertCtx * this,
+ }
+ }
+
+-void
++void __attribute__((weak))
+ gst_channel_mix_mix_float (AudioConvertCtx * this,
+ gdouble * in_data, gdouble * out_data, gint samples)
+ {
+diff --git a/gst/stride/Makefile.am b/gst/stride/Makefile.am
+new file mode 100644
+index 0000000..1adc197
+--- /dev/null
++++ b/gst/stride/Makefile.am
+@@ -0,0 +1,15 @@
++plugin_LTLIBRARIES = libgststridetransform.la
++
++libgststridetransform_la_SOURCES = \
++ gststridetransform.c \
++ plugin.c
++
++libgststridetransform_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
++libgststridetransform_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
++libgststridetransform_la_LIBADD = \
++ $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
++ $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
++libgststridetransform_la_LIBTOOLFLAGS = --tag=disable-static
++
++noinst_HEADERS = \
++ gststridetransform.h
+diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c
+new file mode 100644
+index 0000000..ea52500
+--- /dev/null
++++ b/gst/stride/gststridetransform.c
+@@ -0,0 +1,471 @@
++/* GStreamer
++ *
++ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
++ *
++ * Description: V4L2 sink element
++ * Created on: Jul 30, 2009
++ * Author: Rob Clark <rob@ti.com>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library 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.
++ */
++
++
++/**
++ * SECTION:element-stridetransform
++ *
++ * stridetransform can be used to convert between video buffers
++ * with and without stride, or between buffers with differing
++ * stride
++ *
++ * <refsect2>
++ * <title>Example launch lines</title>
++ * |[
++ * gst-launch videotestsrc ! video/x-raw-yuv,format=(fourcc)YUY2,width=320,height=240,framerate=30/1 !
++ * stridetransform ! video/x-raw-yuv-strided,format=(fourcc)YUY2,width=320,height=240,rowstride=700,framerate=30/1 !
++ * stridetransform ! video/x-raw-yuv,format=(fourcc)YUY2,width=320,height=240,framerate=30/1 !
++ * v4l2sink
++ * ]| This pipeline ???? TODO
++ * </refsect2>
++ */
++
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#include <string.h>
++#include <gst/video/video.h>
++
++#include "gst/gst-i18n-plugin.h"
++#include "gststridetransform.h"
++
++
++static const GstElementDetails stridetransform_details =
++GST_ELEMENT_DETAILS ("Stride transform",
++ "Filter/Converter/Video",
++ "Convert between video buffers with and without stride, or with differing stride",
++ "Rob Clark <rob@ti.com>,");
++
++
++/* TODO: add rgb formats too! */
++#define SUPPORTED_CAPS \
++ GST_VIDEO_CAPS_YUV_STRIDED ("{ I420, YV12, YUY2, UYVY }", "[ 0, max ]")
++
++
++static GstStaticPadTemplate src_template =
++GST_STATIC_PAD_TEMPLATE ("src",
++ GST_PAD_SRC,
++ GST_PAD_ALWAYS,
++ GST_STATIC_CAPS (SUPPORTED_CAPS)
++ );
++
++static GstStaticPadTemplate sink_template =
++GST_STATIC_PAD_TEMPLATE ("sink",
++ GST_PAD_SINK,
++ GST_PAD_ALWAYS,
++ GST_STATIC_CAPS (SUPPORTED_CAPS)
++ );
++
++
++GST_DEBUG_CATEGORY (stridetransform_debug);
++#define GST_CAT_DEFAULT stridetransform_debug
++
++/* type functions */
++static void gst_stride_transform_dispose (GObject *obj);
++
++/* GstBaseTransform functions */
++static gboolean gst_stride_transform_get_unit_size (GstBaseTransform *base,
++ GstCaps *caps, guint *size);
++static gboolean gst_stride_transform_transform_size (GstBaseTransform *base,
++ GstPadDirection direction,
++ GstCaps *caps, guint size,
++ GstCaps *othercaps, guint *othersize);
++static GstCaps *gst_stride_transform_transform_caps (GstBaseTransform *base,
++ GstPadDirection direction, GstCaps *caps);
++static gboolean gst_stride_transform_set_caps (GstBaseTransform *base,
++ GstCaps *incaps, GstCaps *outcaps);
++static GstFlowReturn gst_stride_transform_transform (GstBaseTransform *base,
++ GstBuffer *inbuf, GstBuffer *outbuf);
++static GstFlowReturn gst_stride_transform_transform_ip (GstBaseTransform *base,
++ GstBuffer *buf);
++
++GST_BOILERPLATE (GstStrideTransform, gst_stride_transform, GstVideoFilter, GST_TYPE_VIDEO_FILTER);
++
++
++static void
++gst_stride_transform_base_init (gpointer g_class)
++{
++ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
++
++ GST_DEBUG_CATEGORY_INIT (stridetransform_debug, "stride", 0, "stride transform element");
++
++ gst_element_class_set_details (gstelement_class, &stridetransform_details);
++
++ gst_element_class_add_pad_template (gstelement_class,
++ gst_static_pad_template_get (&sink_template));
++ gst_element_class_add_pad_template (gstelement_class,
++ gst_static_pad_template_get (&src_template));
++}
++
++static void
++gst_stride_transform_class_init (GstStrideTransformClass *klass)
++{
++ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
++ GstBaseTransformClass *basetransform_class = GST_BASE_TRANSFORM_CLASS (klass);
++
++ gobject_class->dispose = gst_stride_transform_dispose;
++
++ basetransform_class->get_unit_size =
++ GST_DEBUG_FUNCPTR (gst_stride_transform_get_unit_size);
++ basetransform_class->transform_size =
++ GST_DEBUG_FUNCPTR (gst_stride_transform_transform_size);
++ basetransform_class->transform_caps =
++ GST_DEBUG_FUNCPTR (gst_stride_transform_transform_caps);
++ basetransform_class->set_caps =
++ GST_DEBUG_FUNCPTR (gst_stride_transform_set_caps);
++ basetransform_class->transform_ip =
++ GST_DEBUG_FUNCPTR (gst_stride_transform_transform_ip);
++ basetransform_class->transform =
++ GST_DEBUG_FUNCPTR (gst_stride_transform_transform);
++
++ basetransform_class->passthrough_on_same_caps = TRUE;
++}
++
++static void
++gst_stride_transform_init (GstStrideTransform *self, GstStrideTransformClass *klass)
++{
++ GST_DEBUG_OBJECT (self, "not implemented");
++}
++
++
++static void
++gst_stride_transform_dispose (GObject *object)
++{
++ GstStrideTransform *self = GST_STRIDE_TRANSFORM (object);
++ GST_DEBUG_OBJECT (self, "not implemented");
++ G_OBJECT_CLASS (parent_class)->dispose (object);
++}
++
++/**
++ * figure out the required buffer size based on @caps
++ */
++static gboolean
++gst_stride_transform_get_unit_size (GstBaseTransform *base,
++ GstCaps *caps, guint *size)
++{
++ GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
++ GstVideoFormat format;
++ gint width, height, rowstride;
++
++ g_return_val_if_fail (gst_video_format_parse_caps_strided (
++ caps, &format, &width, &height, &rowstride), FALSE);
++
++ *size = gst_video_format_get_size_strided (format, width, height, rowstride);
++
++ GST_DEBUG_OBJECT (self,
++ "format=%d, width=%d, height=%d, rowstride=%d -> size=%d",
++ format, width, height, rowstride, *size);
++
++ return TRUE;
++}
++
++/**
++ * Default transform_size function is no good, as it assumes that the output
++ * buffer size is a multiple of the unit size.. which doesn't hold true.
++ */
++static gboolean
++gst_stride_transform_transform_size (GstBaseTransform *base,
++ GstPadDirection direction,
++ GstCaps *caps, guint size,
++ GstCaps *othercaps, guint *othersize)
++{
++ GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
++ guint idx = (direction == GST_PAD_SINK) ? 0 : 1;
++
++ if (self->cached_caps[idx] != othercaps)
++ {
++ if (!gst_stride_transform_get_unit_size (base, othercaps,
++ &(self->cached_size[idx])))
++ {
++ return FALSE;
++ }
++ }
++
++ *othersize = self->cached_size[idx];
++
++ return TRUE;
++}
++
++
++
++/**
++ * helper to add all fields, other than rowstride to @caps, copied from @s.
++ */
++static void
++add_all_fields (GstCaps *caps, const gchar *name, GstStructure *s, gboolean rowstride)
++{
++ gint idx;
++ GstStructure *new_s = gst_structure_new (name, NULL);
++
++ if (rowstride) {
++ gst_structure_set (new_s, "rowstride", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
++ }
++
++ idx = gst_structure_n_fields (s) - 1;
++ while (idx >= 0) {
++ const gchar *name = gst_structure_nth_field_name (s, idx);
++ if (strcmp ("rowstride", name)) {
++ const GValue *val = gst_structure_get_value (s, name);
++ gst_structure_set_value (new_s, name, val);
++ }
++ idx--;
++ }
++
++ gst_caps_merge_structure (caps, new_s);
++}
++
++
++/**
++ * we can transform @caps to strided or non-strided caps with otherwise
++ * identical parameters
++ */
++static GstCaps *
++gst_stride_transform_transform_caps (GstBaseTransform *base,
++ GstPadDirection direction, GstCaps *caps)
++{
++ GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
++ GstCaps *ret;
++ GstStructure *s;
++
++ g_return_val_if_fail (GST_CAPS_IS_SIMPLE (caps), NULL);
++
++ GST_DEBUG_OBJECT (self, "direction=%d, caps=%p", direction, caps);
++ LOG_CAPS (self, caps);
++
++ ret = gst_caps_new_empty ();
++ s = gst_caps_get_structure (caps, 0);
++
++ if (gst_structure_has_name (s, "video/x-raw-yuv") ||
++ gst_structure_has_name (s, "video/x-raw-yuv-strided")) {
++
++ add_all_fields (ret, "video/x-raw-yuv", s, FALSE);
++ add_all_fields (ret, "video/x-raw-yuv-strided", s, TRUE);
++
++ } else if (gst_structure_has_name (s, "video/x-raw-rgb") ||
++ gst_structure_has_name (s, "video/x-raw-rgb-strided")) {
++
++ add_all_fields (ret, "video/x-raw-rgb", s, FALSE);
++ add_all_fields (ret, "video/x-raw-rgb-strided", s, TRUE);
++
++ }
++
++ LOG_CAPS (self, ret);
++
++ return ret;
++}
++
++/**
++ * at this point, we have identical fourcc, width, and height for @incaps
++ * and @outcaps.. so we need to extract these to use for transforming,
++ * plus the requested rowstride of the @incaps and @outcaps
++ */
++static gboolean
++gst_stride_transform_set_caps (GstBaseTransform *base,
++ GstCaps *incaps, GstCaps *outcaps)
++{
++ GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
++ GstVideoFormat format;
++ gint width, height;
++
++ LOG_CAPS (self, incaps);
++ LOG_CAPS (self, outcaps);
++
++ g_return_val_if_fail (gst_video_format_parse_caps_strided (incaps,
++ &self->format, &self->width, &self->height, &self->in_rowstride), FALSE);
++ g_return_val_if_fail (gst_video_format_parse_caps_strided (outcaps,
++ &format, &width, &height, &self->out_rowstride), FALSE);
++
++ g_return_val_if_fail (self->format == format, FALSE);
++ g_return_val_if_fail (self->width == width, FALSE);
++ g_return_val_if_fail (self->height == height, FALSE);
++
++ return TRUE;
++}
++
++/* ************************************************************************* */
++
++/**
++ * Convert from one stride to another... like memmove, but can convert stride in
++ * the process. This function is not aware of pixels, only of bytes. So widths
++ * are given in bytes, not pixels. The new_buf and orig_buf can point to the
++ * same buffers to do an in-place conversion, but the buffer should be large
++ * enough.
++ */
++static void
++stridemove (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, gint height)
++{
++ int row;
++
++ GST_DEBUG ("new_buf=%p, orig_buf=%p, new_width=%d, orig_width=%d, height=%d",
++ new_buf, orig_buf, new_width, orig_width, height);
++ /* if increasing the stride, work from bottom-up to avoid overwriting data
++ * that has not been moved yet.. otherwise, work in the opposite order,
++ * for the same reason.
++ */
++ if (new_width > orig_width) {
++ for (row=height-1; row>=0; row--) {
++ memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width);
++ }
++ } else {
++ for (row=0; row<height; row++) {
++ memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), new_width);
++ }
++ }
++}
++
++
++/**
++ * Convert from a non-strided buffer to strided. The two buffer pointers could
++ * be pointing to the same memory block for in-place transform.. assuming that
++ * the buffer is large enough
++ *
++ * @strided: the pointer to the resulting strided buffer
++ * @unstrided: the pointer to the initial unstrided buffer
++ * @fourcc: the color format
++ * @stride: the stride, in bytes
++ * @width: the width in pixels
++ * @height: the height in pixels
++ */
++static GstFlowReturn
++stridify (GstStrideTransform *self, guchar *strided, guchar *unstrided)
++{
++ gint width = self->width;
++ gint height = self->height;
++ gint stride = self->out_rowstride;
++
++ switch (self->format) {
++#if 0 /* TODO */
++ case GST_VIDEO_FORMAT_NV12:
++ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
++ stridemove (strided, unstrided, stride, width, height * 1.5);
++ return GST_FLOW_OK;
++#endif
++ case GST_VIDEO_FORMAT_I420:
++ case GST_VIDEO_FORMAT_YV12:
++ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
++ stridemove (
++ strided + (int)(height*stride*1.5),
++ unstrided + (int)(height*width*1.5),
++ stride, width/2, height); /* move U/V */
++ stridemove (
++ strided + (height*stride),
++ unstrided + (height*width),
++ stride, width/2, height); /* move V/U */
++ stridemove (strided, unstrided, stride, width, height); /* move Y */
++ return GST_FLOW_OK;
++ case GST_VIDEO_FORMAT_YUY2:
++ case GST_VIDEO_FORMAT_UYVY:
++ g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR);
++ stridemove (strided, unstrided, stride, width*2, height);
++ return GST_FLOW_OK;
++ default:
++ GST_WARNING ("unknown color format!\n");
++ return GST_FLOW_ERROR;
++ }
++}
++
++
++/**
++ * Convert from a strided buffer to non-strided. The two buffer pointers could
++ * be pointing to the same memory block for in-place transform..
++ *
++ * @unstrided: the pointer to the resulting unstrided buffer
++ * @strided: the pointer to the initial strided buffer
++ */
++static GstFlowReturn
++unstridify (GstStrideTransform *self, guchar *unstrided, guchar *strided)
++{
++ gint width = self->width;
++ gint height = self->height;
++ gint stride = self->in_rowstride;
++
++ switch (self->format) {
++#if 0 /* TODO */
++ case GST_VIDEO_FORMAT_NV12:
++ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
++ stridemove (unstrided, strided, width, stride, height * 1.5);
++ return GST_FLOW_OK;
++#endif
++ case GST_VIDEO_FORMAT_I420:
++ case GST_VIDEO_FORMAT_YV12:
++ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
++ stridemove (unstrided, strided, width, stride, height); /* move Y */
++ stridemove (
++ unstrided + (height*width),
++ strided + (height*stride),
++ width/2, stride, height); /* move V/U */
++ stridemove (
++ unstrided + (int)(height*width*1.5),
++ strided + (int)(height*stride*1.5),
++ width/2, stride, height); /* move U/V */
++ return GST_FLOW_OK;
++ case GST_VIDEO_FORMAT_YUY2:
++ case GST_VIDEO_FORMAT_UYVY:
++ g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR);
++ stridemove (unstrided, strided, width*2, stride, height);
++ return GST_FLOW_OK;
++ default:
++ GST_WARNING ("unknown color format!\n");
++ return GST_FLOW_ERROR;
++ }
++}
++
++
++static GstFlowReturn
++gst_stride_transform_transform (GstBaseTransform *base,
++ GstBuffer *inbuf, GstBuffer *outbuf)
++{
++ GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
++
++ GST_DEBUG_OBJECT (self, "inbuf=%p (size=%d), outbuf=%p (size=%d)",
++ inbuf, GST_BUFFER_SIZE (inbuf),
++ outbuf, GST_BUFFER_SIZE (outbuf));
++
++ if (self->in_rowstride && self->out_rowstride) {
++ GST_DEBUG_OBJECT (self, "not implemented"); // TODO
++ return GST_FLOW_ERROR;
++ } else if (self->in_rowstride) {
++ return unstridify (self,
++ GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf));
++ } else if (self->out_rowstride) {
++ return stridify (self,
++ GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf));
++ }
++
++ GST_DEBUG_OBJECT (self, "this shouldn't happen! in_rowstride=%d, out_rowstride=%d",
++ self->in_rowstride, self->out_rowstride);
++
++ return GST_FLOW_ERROR;
++}
++
++static GstFlowReturn
++gst_stride_transform_transform_ip (GstBaseTransform *base,
++ GstBuffer *buf)
++{
++ /* transform function is safe to call with same buffer ptr:
++ */
++ return gst_stride_transform_transform (base, buf, buf);
++}
+diff --git a/gst/stride/gststridetransform.h b/gst/stride/gststridetransform.h
+new file mode 100644
+index 0000000..481959e
+--- /dev/null
++++ b/gst/stride/gststridetransform.h
+@@ -0,0 +1,80 @@
++/* GStreamer
++ *
++ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
++ *
++ * Description: V4L2 sink element
++ * Created on: Jul 2, 2009
++ * Author: Rob Clark <rob@ti.com>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library 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.
++ */
++
++#ifndef __GSTSTRIDETRANSFORM_H__
++#define __GSTSTRIDETRANSFORM_H__
++
++
++#include <gst/video/gstvideofilter.h>
++#include <gst/video/video.h>
++
++
++G_BEGIN_DECLS
++
++#define GST_TYPE_STRIDE_TRANSFORM \
++ (gst_stride_transform_get_type())
++#define GST_STRIDE_TRANSFORM(obj) \
++ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_STRIDE_TRANSFORM,GstStrideTransform))
++#define GST_STRIDE_TRANSFORM_CLASS(klass) \
++ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_STRIDE_TRANSFORM,GstStrideTransformClass))
++#define GST_IS_STRIDE_TRANSFORM(obj) \
++ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_STRIDE_TRANSFORM))
++#define GST_IS_STRIDE_TRANSFORM_CLASS(klass) \
++ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_STRIDE_TRANSFORM))
++
++typedef struct _GstStrideTransform GstStrideTransform;
++typedef struct _GstStrideTransformClass GstStrideTransformClass;
++
++/**
++ * GstStrideTransform:
++ *
++ * Opaque datastructure.
++ */
++struct _GstStrideTransform {
++ GstVideoFilter videofilter;
++
++ /*< private >*/
++ GstVideoFormat format;
++ gint width, height;
++ gint in_rowstride;
++ gint out_rowstride;
++
++ /* for caching the tranform_size() results.. */
++ GstCaps *cached_caps[2];
++ guint cached_size[2];
++};
++
++struct _GstStrideTransformClass {
++ GstVideoFilterClass parent_class;
++};
++
++GType gst_stride_transform_get_type (void);
++
++G_END_DECLS
++
++
++#define LOG_CAPS(obj, caps) GST_DEBUG_OBJECT (obj, "%s: %"GST_PTR_FORMAT, #caps, caps)
++
++
++#endif /* __GSTSTRIDETRANSFORM_H__ */
+diff --git a/gst/stride/plugin.c b/gst/stride/plugin.c
+new file mode 100644
+index 0000000..7672bdc
+--- /dev/null
++++ b/gst/stride/plugin.c
+@@ -0,0 +1,45 @@
++/* GStreamer
++ *
++ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
++ *
++ * Description: V4L2 sink element
++ * Created on: Jul 30, 2009
++ * Author: Rob Clark <rob@ti.com>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library 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.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#include "gststridetransform.h"
++
++static gboolean
++plugin_init (GstPlugin * plugin)
++{
++ if (!gst_element_register (plugin, "stridetransform",
++ GST_RANK_PRIMARY, gst_stride_transform_get_type ()))
++ return FALSE;
++
++ return TRUE;
++}
++
++GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
++ GST_VERSION_MINOR,
++ "stridetransform",
++ "Convert video from strided to non-strided, or between different row-strides",
++ plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
+--
+1.6.3.1
+
diff --git a/recipes/gstreamer/gst-plugins-base/ivorbis-thumb.patch b/recipes/gstreamer/gst-plugins-base/ivorbis-thumb.patch
new file mode 100644
index 0000000000..83b13e279b
--- /dev/null
+++ b/recipes/gstreamer/gst-plugins-base/ivorbis-thumb.patch
@@ -0,0 +1,12 @@
+diff -uNr base/ext/vorbis.orig//gstvorbisdeclib.c base/ext/vorbis/gstvorbisdeclib.c
+--- base/ext/vorbis.orig//gstvorbisdeclib.c 2010-02-15 13:03:13.000000000 +0100
++++ base/ext/vorbis/gstvorbisdeclib.c 2010-03-18 18:48:10.000000000 +0100
+@@ -56,7 +56,7 @@
+ #else
+
+ /* Taken from Tremor, misc.h */
+-#ifdef _ARM_ASSEM_
++#if defined(_ARM_ASSEM_) && !defined(__thumb__)
+ static inline ogg_int32_t
+ CLIP_TO_15 (ogg_int32_t x)
+ {
diff --git a/recipes/gstreamer/gst-plugins-base_0.10.25.bb b/recipes/gstreamer/gst-plugins-base_0.10.25.bb
index 5852991463..b933d74290 100644
--- a/recipes/gstreamer/gst-plugins-base_0.10.25.bb
+++ b/recipes/gstreamer/gst-plugins-base_0.10.25.bb
@@ -1,9 +1,10 @@
require gst-plugins.inc
SRC_URI += "file://fix-playbin2.patch;patch=1 \
+ file://gst-plugins-base_rowstride.patch;patch=1 \
"
-PR = "${INC_PR}.2"
+PR = "${INC_PR}.3"
PROVIDES += "gst-plugins"
diff --git a/recipes/gstreamer/gst-plugins-base_0.10.28.bb b/recipes/gstreamer/gst-plugins-base_0.10.28.bb
new file mode 100644
index 0000000000..058f6a6c0f
--- /dev/null
+++ b/recipes/gstreamer/gst-plugins-base_0.10.28.bb
@@ -0,0 +1,27 @@
+require gst-plugins.inc
+
+SRC_URI += " \
+ file://gst-plugins-base_rowstride.patch;patch=1 \
+ file://ivorbis-thumb.patch;patch=1 \
+"
+
+SRC_URI[archive.md5sum] = "0107cf985ac90544bae70288220f5bab"
+SRC_URI[archive.sha256sum] = "132b6fd7749fcbfa9ad88c854aada44b6870c4175bda21cdb01a52b59a98e14f"
+
+PR = "${INC_PR}.1"
+
+PROVIDES += "gst-plugins"
+
+# gst-plugins-base only builds the alsa plugin
+# if alsa has been built and is present. You will
+# not get an error if this is not present, just
+# a missing alsa plugin
+DEPENDS += "udev cdparanoia pango libtheora alsa-lib libsm virtual/libx11 freetype gnome-vfs libxv"
+
+# Needs a udev that enabled gudev, which isn't the default
+EXTRA_OECONF_append = " --with-gudev"
+
+do_configure_prepend() {
+ sed -i -e s:QtGui:NoQtGui:g ${S}/configure.ac
+}
+
diff --git a/recipes/gstreamer/gst-plugins-good_0.10.17.bb b/recipes/gstreamer/gst-plugins-good_0.10.17.bb
index 1bcb05556e..c53fc479fd 100644
--- a/recipes/gstreamer/gst-plugins-good_0.10.17.bb
+++ b/recipes/gstreamer/gst-plugins-good_0.10.17.bb
@@ -3,12 +3,13 @@ require gst-plugins.inc
SRC_URI += "file://flvdemux-ecma.diff;patch=1 \
"
-PR = "r2"
+PR = "r3"
inherit gconf
-DEPENDS += "hal pulseaudio speex libsoup-2.4 flac gst-plugins-base openssl popt esound"
+DEPENDS += "hal pulseaudio speex libsoup-2.4 flac gst-plugins-base openssl popt esound libv4l"
PACKAGES =+ "gst-plugin-gconfelements"
FILES_gst-plugin-gconfelements += "${sysconfdir}/gconf"
+EXTRA_OECONF += " --with-libv4l2 "
diff --git a/recipes/gstreamer/gst-plugins-good_0.10.21.bb b/recipes/gstreamer/gst-plugins-good_0.10.21.bb
new file mode 100644
index 0000000000..d93a37d53c
--- /dev/null
+++ b/recipes/gstreamer/gst-plugins-good_0.10.21.bb
@@ -0,0 +1,16 @@
+require gst-plugins.inc
+
+SRC_URI += "file://flvdemux-ecma.diff;patch=1 \
+"
+
+SRC_URI[archive.md5sum] = "9bc5c9b390edbb96bda42fc553eae5ae"
+SRC_URI[archive.sha256sum] = "24445a1cf56302ab4ad5f56055d5c3d81c704b8f9f6875fe78a25d4f72716d22"
+
+inherit gconf
+
+DEPENDS += "hal pulseaudio speex libsoup-2.4 flac gst-plugins-base openssl popt esound libv4l"
+
+PACKAGES =+ "gst-plugin-gconfelements"
+FILES_gst-plugin-gconfelements += "${sysconfdir}/gconf"
+
+EXTRA_OECONF += " --with-libv4l2 "
diff --git a/recipes/gstreamer/gst-plugins-package.inc b/recipes/gstreamer/gst-plugins-package.inc
new file mode 100644
index 0000000000..cf240f81bf
--- /dev/null
+++ b/recipes/gstreamer/gst-plugins-package.inc
@@ -0,0 +1,37 @@
+LIBV = "0.10"
+
+python populate_packages_prepend () {
+ gst_libdir = bb.data.expand('${libdir}/gstreamer-${LIBV}', d)
+ postinst = bb.data.getVar('plugin_postinst', d, 1)
+ glibdir = bb.data.expand('${libdir}', d)
+
+ do_split_packages(d, glibdir, '^lib(.*)\.so\.*', 'lib%s', 'gstreamer %s library', extra_depends='', allow_links=True)
+ do_split_packages(d, gst_libdir, '^libgst(.*)\.so$', 'gst-plugin-%s', 'GStreamer plugin for %s', postinst=postinst, extra_depends='')
+ do_split_packages(d, gst_libdir, '^libgst(.*)\.l?a$', 'gst-plugin-%s-dev', 'GStreamer plugin for %s (development files)', extra_depends='')
+
+ pn = bb.data.getVar('PN', d, 1)
+ metapkg = pn + '-meta'
+ bb.data.setVar('ALLOW_EMPTY_' + metapkg, "1", d)
+ bb.data.setVar('FILES_' + metapkg, "", d)
+ blacklist = [ pn + '-locale', pn + '-dev', pn + '-dbg', pn + '-doc' ]
+ metapkg_rdepends = []
+ packages = bb.data.getVar('PACKAGES', d, 1).split()
+ for pkg in packages[1:]:
+ if not pkg in blacklist and not pkg in metapkg_rdepends and not pkg.endswith('-dev') and not pkg.count('locale') and not pkg.count('-static'):
+ metapkg_rdepends.append(pkg)
+ bb.data.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends), d)
+ bb.data.setVar('DESCRIPTION_' + metapkg, pn + ' meta package', d)
+ packages.append(metapkg)
+ bb.data.setVar('PACKAGES', ' '.join(packages), d)
+
+}
+
+ALLOW_EMPTY = "1"
+
+PACKAGES += "${PN}-apps"
+FILES_${PN}-apps = "${bindir}"
+
+FILES_${PN} = "${datadir}/gstreamer-0.10"
+FILES_${PN}-dbg += "${libdir}/gstreamer-${LIBV}/.debug"
+
+
diff --git a/recipes/gstreamer/gst-plugins-ugly_0.10.14.bb b/recipes/gstreamer/gst-plugins-ugly_0.10.14.bb
new file mode 100644
index 0000000000..d8295f5763
--- /dev/null
+++ b/recipes/gstreamer/gst-plugins-ugly_0.10.14.bb
@@ -0,0 +1,21 @@
+require gst-plugins.inc
+
+PR = "${INC_PR}.0"
+
+DEPENDS += "gst-plugins-base mpeg2dec libsidplay"
+
+SRC_URI += "\
+ file://gstmad_16bit.patch;patch=1 \
+ file://gstsid_autofoo_HACK.patch;patch=1 \
+"
+
+SRC_URI[archive.md5sum] = "0bc0d27bcce88c73ef6c81e88624e686"
+SRC_URI[archive.sha256sum] = "78dba9963e130cfd09f294b60219e6562459c5d848bc3b38a653db7f21fc850b"
+
+python() {
+ # Don't build, if we are building an ENTERPRISE distro
+ enterprise = bb.data.getVar("ENTERPRISE_DISTRO", d, 1)
+ if enterprise == "1":
+ raise bb.parse.SkipPackage("gst-plugins-ugly will only build if ENTERPRISE_DISTRO != 1")
+}
+
diff --git a/recipes/gstreamer/gst-plugins.inc b/recipes/gstreamer/gst-plugins.inc
index b76741e130..b060eb2bd4 100644
--- a/recipes/gstreamer/gst-plugins.inc
+++ b/recipes/gstreamer/gst-plugins.inc
@@ -1,4 +1,6 @@
require gst-common.inc
+require gst-plugins-package.inc
+
DESCRIPTION = "Plugins for GStreamer"
DEPENDS = "gstreamer libmikmod liboil libogg tremor libvorbis"
DEPENDS += "${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'libmad libid3tag', d)}"
@@ -7,50 +9,25 @@ INC_PR = "r7"
PACKAGES_DYNAMIC = "gst-plugin-*"
-SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2"
+SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2;name=archive"
EXTRA_OECONF = "--enable-introspection=no --disable-aalib --disable-shout2 --disable-sdl --disable-cdaudio --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR} "
EXTRA_OECONF_append_shr = " --disable-dvdnav "
acpaths = "-I ${S}/common/m4 -I ${S}/m4"
-OE_LT_RPATH_ALLOW = "any"
-OE_LT_RPATH_ALLOW[export]="1"
-
-LIBV = "0.10"
-
-python populate_packages_prepend () {
- gst_libdir = bb.data.expand('${libdir}/gstreamer-${LIBV}', d)
- postinst = bb.data.getVar('plugin_postinst', d, 1)
- glibdir = bb.data.expand('${libdir}', d)
-
- do_split_packages(d, glibdir, '^lib(.*)\.so\.*', 'lib%s', 'gstreamer %s library', extra_depends='', allow_links=True)
- do_split_packages(d, gst_libdir, '^libgst(.*)\.so$', 'gst-plugin-%s', 'GStreamer plugin for %s', postinst=postinst, extra_depends='')
- do_split_packages(d, gst_libdir, '^libgst(.*)\.l?a$', 'gst-plugin-%s-dev', 'GStreamer plugin for %s (development files)', extra_depends='')
-
- pn = bb.data.getVar('PN', d, 1)
- metapkg = pn + '-meta'
- bb.data.setVar('ALLOW_EMPTY_' + metapkg, "1", d)
- bb.data.setVar('FILES_' + metapkg, "", d)
- blacklist = [ pn + '-locale', pn + '-dev', pn + '-dbg', pn + '-doc' ]
- metapkg_rdepends = []
- packages = bb.data.getVar('PACKAGES', d, 1).split()
- for pkg in packages[1:]:
- if not pkg in blacklist and not pkg in metapkg_rdepends and not pkg.endswith('-dev') and not pkg.count('locale') and not pkg.count('-static'):
- metapkg_rdepends.append(pkg)
- bb.data.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends), d)
- bb.data.setVar('DESCRIPTION_' + metapkg, pn + ' meta package', d)
- packages.append(metapkg)
- bb.data.setVar('PACKAGES', ' '.join(packages), d)
-
+# Fix up path to gstconfig.h
+do_configure_prepend() {
+ sed -i -e 's:`$PKG_CONFIG --variable=includedir gstreamer-0.10`:${STAGING_INCDIR}/gstreamer-0.10:g' ${S}/configure.ac
}
-ALLOW_EMPTY = "1"
-
-PACKAGES += "${PN}-apps"
-FILES_${PN}-apps = "${bindir}"
+do_configure_append() {
+ for i in $(find ${S} -name "Makefile") ; do
+ sed -i -e s:/usr/bin/orcc:${STAGING_BINDIR_NATIVE}/orcc:g $i
+ done
+}
-FILES_${PN} = "${datadir}/gstreamer-0.10"
-FILES_${PN}-dbg += "${libdir}/gstreamer-${LIBV}/.debug"
+OE_LT_RPATH_ALLOW = "any"
+OE_LT_RPATH_ALLOW[export]="1"
diff --git a/recipes/gstreamer/gst-rtsp_0.10.4.bb b/recipes/gstreamer/gst-rtsp_0.10.4.bb
index 11c57aa71f..ac7565bd9b 100644
--- a/recipes/gstreamer/gst-rtsp_0.10.4.bb
+++ b/recipes/gstreamer/gst-rtsp_0.10.4.bb
@@ -5,8 +5,7 @@ DEPENDS = "gst-plugins-base gstreamer"
SRC_URI = "http://people.freedesktop.org/~wtay/gst-rtsp-${PV}.tar.bz2"
-inherit autotools_stage
+inherit autotools
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
diff --git a/recipes/gstreamer/gstreamer.inc b/recipes/gstreamer/gstreamer.inc
index 87a6f82135..aff25e7baa 100644
--- a/recipes/gstreamer/gstreamer.inc
+++ b/recipes/gstreamer/gstreamer.inc
@@ -5,10 +5,10 @@ It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime.
DEPENDS = "libxml2 glib-2.0 gettext-native popt"
-SRC_URI = "http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.bz2"
+SRC_URI = "http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.bz2;name=archive"
EXTRA_OECONF = "--disable-docs-build --disable-dependency-tracking --with-check=no"
FILES_${PN} += " ${libdir}/gstreamer-0.10/*.so"
FILES_${PN}-dev += " ${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
-FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
+FILES_${PN}-dbg += "${libexecdir}/gstreamer-0.10/.debug ${libdir}/gstreamer-0.10/.debug"
diff --git a/recipes/gstreamer/gstreamer_0.10.28.bb b/recipes/gstreamer/gstreamer_0.10.28.bb
new file mode 100644
index 0000000000..c44646c60d
--- /dev/null
+++ b/recipes/gstreamer/gstreamer_0.10.28.bb
@@ -0,0 +1,11 @@
+require gstreamer.inc
+
+SRC_URI[archive.md5sum] = "1c7accac718fe211ff91323c27d4ae02"
+SRC_URI[archive.sha256sum] = "61613ec7574d22230e8cc893f91b66faec6b21288a22d2f21c9d9eeb7667eb2c"
+
+EXTRA_OECONF += "ac_cv_func_register_printf_function=no"
+
+do_configure_prepend() {
+ sed -i -e s:docs::g Makefile.am
+}
+
diff --git a/recipes/gtk+/gtk+-2.12.0/no-demos.patch b/recipes/gtk+/gtk+-2.12.0/no-demos.patch
deleted file mode 100644
index 0fc4c48d1a..0000000000
--- a/recipes/gtk+/gtk+-2.12.0/no-demos.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100
-+++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
-
- # require automake 1.4
diff --git a/recipes/gtk+/gtk+-2.12.11/no-demos.patch b/recipes/gtk+/gtk+-2.12.11/no-demos.patch
deleted file mode 100644
index 0fc4c48d1a..0000000000
--- a/recipes/gtk+/gtk+-2.12.11/no-demos.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100
-+++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
-
- # require automake 1.4
diff --git a/recipes/gtk+/gtk+-2.12.3/no-demos.patch b/recipes/gtk+/gtk+-2.12.3/no-demos.patch
deleted file mode 100644
index 0fc4c48d1a..0000000000
--- a/recipes/gtk+/gtk+-2.12.3/no-demos.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100
-+++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
-
- # require automake 1.4
diff --git a/recipes/gtk+/gtk+-2.14.1/no-demos.patch b/recipes/gtk+/gtk+-2.14.1/no-demos.patch
deleted file mode 100644
index 0fc4c48d1a..0000000000
--- a/recipes/gtk+/gtk+-2.14.1/no-demos.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100
-+++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
-
- # require automake 1.4
diff --git a/recipes/gtk+/gtk+-2.14.2/no-demos.patch b/recipes/gtk+/gtk+-2.14.2/no-demos.patch
deleted file mode 100644
index 0fc4c48d1a..0000000000
--- a/recipes/gtk+/gtk+-2.14.2/no-demos.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100
-+++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
-
- # require automake 1.4
diff --git a/recipes/gtk+/gtk+-2.16.4/no-demos.patch b/recipes/gtk+/gtk+-2.16.4/no-demos.patch
deleted file mode 100644
index 0fc4c48d1a..0000000000
--- a/recipes/gtk+/gtk+-2.16.4/no-demos.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100
-+++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
-
- # require automake 1.4
diff --git a/recipes/gtk+/gtk+-2.16.6/no-demos.patch b/recipes/gtk+/gtk+-2.16.6/no-demos.patch
deleted file mode 100644
index 0fc4c48d1a..0000000000
--- a/recipes/gtk+/gtk+-2.16.6/no-demos.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100
-+++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
-
- # require automake 1.4
diff --git a/recipes/gtk+/gtk+-2.18.0/no-demos.patch b/recipes/gtk+/gtk+-2.18.0/no-demos.patch
deleted file mode 100644
index 0fc4c48d1a..0000000000
--- a/recipes/gtk+/gtk+-2.18.0/no-demos.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100
-+++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
-
- # require automake 1.4
diff --git a/recipes/gtk+/gtk+-2.18.3/no-demos.patch b/recipes/gtk+/gtk+-2.18.3/no-demos.patch
deleted file mode 100644
index 0fc4c48d1a..0000000000
--- a/recipes/gtk+/gtk+-2.18.3/no-demos.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100
-+++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
-
- # require automake 1.4
diff --git a/recipes/gtk+/gtk+-native-1.2_1.2.10.bb b/recipes/gtk+/gtk+-native-1.2_1.2.10.bb
deleted file mode 100644
index f5ad1a58ab..0000000000
--- a/recipes/gtk+/gtk+-native-1.2_1.2.10.bb
+++ /dev/null
@@ -1,58 +0,0 @@
-DESCRIPTION = "GTK+1.2 is a deprecated library provided for running programs not yet converted to GTK+2.0"
-HOMEPAGE = "http://www.gtk.org"
-SECTION = "libs"
-LICENSE = "LGPL"
-PRIORITY = "optional"
-DEPENDS = "glib-1.2 jpeg libpng libxext"
-
-PR = "r1"
-
-FILESPATH =+ "${FILE_DIRNAME}/gtk+-1.2-1.2.10:"
-SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v1.2/gtk+-${PV}.tar.gz \
- file://gtk+1.2-reconf-fix;patch=1 \
- file://no-xwc;patch=1"
-S = "${WORKDIR}/gtk+-${PV}"
-
-inherit autotools pkgconfig flow-lossage
-
-do_configure_prepend() {
- install -d m4
- rm -f ltconfig libtool ltmain.sh
- libtoolize --force
-}
-
-FILES_${PN} += "${datadir}/themes"
-FILES_${PN}-dev += "${datadir}/gtk-1.2/include ${libdir}/gtk-1.2/include"
-
-
-EXTRA_OECONF = "--enable-debug=no --disable-glibtest --disable-xim"
-# --disable-cruft
-
-LIBV = "1.2.10"
-
-gtk_include = "fnmatch.h gtk.h gtkaccelgroup.h gtkaccellabel.h gtkadjustment.h gtkalignment.h gtkarg.h gtkarrow.h gtkaspectframe.h gtkbbox.h gtkbin.h gtkbindings.h gtkbox.h gtkbutton.h gtkcalendar.h gtkcheckbutton.h gtkcheckmenuitem.h gtkclist.h gtkcolorsel.h gtkcombo.h gtkcompat.h gtkcontainer.h gtkctree.h gtkcurve.h gtkdata.h gtkdebug.h gtkdialog.h gtkdnd.h gtkdrawingarea.h gtkeditable.h gtkentry.h gtkenums.h gtkeventbox.h gtkfeatures.h gtkfilesel.h gtkfixed.h gtkfontsel.h gtkframe.h gtkgamma.h gtkgc.h gtkhandlebox.h gtkhbbox.h gtkhbox.h gtkhpaned.h gtkhruler.h gtkhscale.h gtkhscrollbar.h gtkhseparator.h gtkimage.h gtkinputdialog.h gtkintl.h gtkinvisible.h gtkitem.h gtkitemfactory.h gtklabel.h gtklayout.h gtklist.h gtklistitem.h gtkmain.h gtkmarshal.h gtkmenu.h gtkmenubar.h gtkmenufactory.h gtkmenuitem.h gtkmenushell.h gtkmisc.h gtknotebook.h gtkobject.h gtkoptionmenu.h gtkpacker.h gtkpaned.h gtkpixmap.h gtkplug.h gtkpreview.h gtkprivate.h gtkprogress.h gtkprogressbar.h gtkradiobutton.h gtkradiomenuitem.h gtkrange.h gtkrc.h gtkruler.h gtkscale.h gtkscrollbar.h gtkscrolledwindow.h gtkselection.h gtkseparator.h gtksignal.h gtksocket.h gtkspinbutton.h gtkstatusbar.h gtkstyle.h gtktable.h gtktearoffmenuitem.h gtktext.h gtkthemes.h gtktipsquery.h gtktogglebutton.h gtktoolbar.h gtktooltips.h gtktree.h gtktreeitem.h gtktypebuiltins.h gtktypeutils.h gtkvbbox.h gtkvbox.h gtkviewport.h gtkvpaned.h gtkvruler.h gtkvscale.h gtkvscrollbar.h gtkvseparator.h gtkwidget.h gtkwindow.h makeenums.h stamp-gtkmarshal.h stamp-gtktypebuiltins.h"
-gdk_include = "MwmUtil.h gdk.h gdkcursors.h gdki18n.h gdkinput.h gdkinputcommon.h gdkinputgxi.h gdkinputnone.h gdkinputxfree.h gdkkeysyms.h gdkprivate.h gdkrgb.h gdktypes.h gdkx.h gxid_lib.h gxid_proto.h"
-
-do_stage () {
- oe_libinstall -so -C gtk libgtk-1.2 ${STAGING_LIBDIR}
- oe_libinstall -so -C gdk libgdk-1.2 ${STAGING_LIBDIR}
-
- mkdir -p ${STAGING_INCDIR}/gtk-1.2/gtk
- for i in ${gtk_include}; do
- install -m 0644 gtk/$i ${STAGING_INCDIR}/gtk-1.2/gtk/$i
- done
-
- mkdir -p ${STAGING_INCDIR}/gtk-1.2/gdk
- for i in ${gdk_include}; do
- install -m 0644 gdk/$i ${STAGING_INCDIR}/gtk-1.2/gdk/$i
- done
-
- mkdir -p ${STAGING_LIBDIR}/gtk-1.2/include
-
- install -m 0644 gtk.m4 ${STAGING_DATADIR}/aclocal/
-}
-
-do_install_append () {
- install -d ${D}${sysconfdir}/gtk-1.2
-}
-
diff --git a/recipes/gtk+/gtk+-native_2.12.11.bb b/recipes/gtk+/gtk+-native_2.12.11.bb
deleted file mode 100644
index 812c354ad0..0000000000
--- a/recipes/gtk+/gtk+-native_2.12.11.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-
-require gtk+_2.12.11.bb
-
-inherit native
-
-DEPENDS += "atk-native pango-native cairo-native"
-PROVIDES = "gtk+-native"
-
-EXTRA_OECONF += "--without-libtiff --disable-modules"
-
-PR = "r2"
-
-do_install_append() {
-
- # this tool is required by gnome-keyring 2.26.0 to get built
- # it is written in Python and use only Python xml
- install -d ${STAGING_BINDIR_NATIVE}
- install -m 0755 ${S}/gtk/gtk-builder-convert ${STAGING_BINDIR_NATIVE}
-}
-
diff --git a/recipes/gtk+/gtk+.inc b/recipes/gtk+/gtk+.inc
index e619a6af28..6c8f0de65c 100644
--- a/recipes/gtk+/gtk+.inc
+++ b/recipes/gtk+/gtk+.inc
@@ -5,25 +5,28 @@ SECTION = "libs"
LICENSE = "LGPL"
PRIORITY = "optional"
DEPENDS = "glib-2.0 tiff pango atk jpeg libpng libxext libxcursor gtk-doc libgcrypt cups \
- libxrandr libxdamage libxrender libxcomposite cairo jasper"
+ libxrandr libxdamage libxrender libxcomposite cairo jasper gtk+-native"
PROVIDES = "gdk-pixbuf"
MAJ_VER = "${@bb.data.getVar('PV',d,1).split('.')[0]}.${@bb.data.getVar('PV',d,1).split('.')[1]}"
SRC_URI = "http://download.gnome.org/sources/gtk+/${MAJ_VER}/gtk+-${PV}.tar.bz2 \
file://hardcoded_libtool.patch;patch=1 \
- file://no-demos.patch;patch=1 \
file://run-iconcache.patch;patch=1 \
file://toggle-font.diff;patch=1;pnum=0 \
file://xsettings.patch;patch=1 \
"
-INC_PR = "r7"
+INC_PR = "r8"
inherit autotools pkgconfig
LEAD_SONAME = "libgtk-x11-2.0.so"
LIBV = "2.10.0"
+PACKAGES =+ "${PN}-demo ${PN}-demo-source"
+FILES_${PN}-demo = "${bindir}/gtk-demo"
+FILES_${PN}-demo-source = "${datadir}/gtk-2.0/demo"
+
FILES_${PN} = "${bindir}/gdk-pixbuf-query-loaders \
${bindir}/gtk-update-icon-cache \
${bindir}/gtk-query-immodules-2.0 \
@@ -63,6 +66,23 @@ do_install_append () {
rm -f ${D}${libdir}/gtk-2.0/*/*.la ${D}${libdir}/gtk-2.0/${LIBV}/*/*.la
}
+do_install_virtclass-native () {
+ autotools_do_install
+
+ mkdir -p ${D}${libdir}/gtk-2.0/include
+ install -m 0644 gdk/gdkconfig.h ${D}${libdir}/gtk-2.0/include/gdkconfig.h
+ # Copy over all headers, since the maemo stuff needs access to the private api. *sigh*
+ cp gtk/*.h ${D}${includedir}/gtk-2.0/gtk/
+
+ install -m 0644 m4macros/gtk-2.0.m4 ${STAGING_DATADIR}/aclocal/
+
+ install -d ${D}${sysconfdir}/gtk-2.0
+ rm -f ${D}${libdir}/gtk-2.0/*/*.la ${D}${libdir}/gtk-2.0/${LIBV}/*/*.la
+
+ mkdir -p "${D}${sysconfdir}/gtk-2.0"
+ ${B}/gdk-pixbuf/gdk-pixbuf-query-loaders ${B}/gdk-pixbuf/.libs/*.so | sed 's:${B}/gdk-pixbuf/.libs:${STAGING_LIBDIR}/gtk-2.0/${LIBV}/loaders:' > "${D}${sysconfdir}/gtk-2.0/gdk-pixbuf.loaders"
+}
+
postinst_prologue() {
if [ "x$D" != "x" ]; then
exit 1
diff --git a/recipes/gtk+/gtk+_2.18.6.bb b/recipes/gtk+/gtk+_2.18.6.bb
index 674a88a731..69f8ff5e59 100644
--- a/recipes/gtk+/gtk+_2.18.6.bb
+++ b/recipes/gtk+/gtk+_2.18.6.bb
@@ -1,24 +1,22 @@
require gtk+.inc
-PR = "${INC_PR}.1"
+SRC_URI_append_virtclass-native = " file://no-demos.patch;patch=1 \
+"
+
+PR = "${INC_PR}.4"
BBCLASSEXTEND = "native"
-DEPENDS_virtclass-native = "atk-native pango-native cairo-native"
+DEPENDS_virtclass-native = "libpng-native atk-native pango-native cairo-native libxrender-native libxext-native"
+RRECOMMENDS_${PN}_virtclass-native = ""
+PROVIDES_virtclass-native = "gdk-pixbuf-csource-native"
# Enable xkb selectively
XKBTOGGLE = " --disable-xkb"
XKBTOGGLE_angstrom = ""
EXTRA_OECONF = "--with-libtiff ${XKBTOGGLE} --disable-glibtest gio_can_sniff=yes"
-EXTRA_OECONF_append_virtclass-native = " --without-libtiff --disable-modules"
-
-do_install_virtclass-native () {
- autotools_do_install
- find ${D}${libdir} -name "libpixbufloader-*.la" -exec rm \{\} \;
- rm ${D}${bindir}/gdk-pixbuf-csource
- echo "going native!"
-}
+EXTRA_OECONF_append_virtclass-native = " --without-libtiff --without-libjpeg"
PACKAGES_DYNAMIC = "gtk-module-* gdk-pixbuf-loader-* gtk-immodule-* gtk-printbackend-*"
diff --git a/recipes/gtk-webcore/files/no-static-templates.patch b/recipes/gtk-webcore/files/no-static-templates.patch
new file mode 100644
index 0000000000..2cfb41f655
--- /dev/null
+++ b/recipes/gtk-webcore/files/no-static-templates.patch
@@ -0,0 +1,21 @@
+diff -urN JavaScriptCore-0rig/kjs/protected_values.cpp JavaScriptCore/kjs/protected_values.cpp
+--- JavaScriptCore-0rig/kjs/protected_values.cpp 2010-02-26 12:57:50.000000000 +0100
++++ JavaScriptCore/kjs/protected_values.cpp 2010-02-26 12:59:13.000000000 +0100
+@@ -195,7 +195,7 @@
+
+ template <int size> static unsigned hash(ValueImp *pointer);
+
+-template <> static inline unsigned hash<4>(ValueImp *pointer)
++template <> inline unsigned hash<4>(ValueImp *pointer)
+ {
+ int a = (int)(intptr_t)PHI;
+ int b = (int)(intptr_t)pointer;
+@@ -214,7 +214,7 @@
+ return (unsigned)c;
+ }
+
+-template <> static inline unsigned hash<8>(ValueImp *pointer)
++template <> inline unsigned hash<8>(ValueImp *pointer)
+ {
+ int a = (int)PHI;
+ int b = (int)(intptr_t)pointer;
diff --git a/recipes/gtk-webcore/midori_0.2.3.bb b/recipes/gtk-webcore/midori_0.2.3.bb
new file mode 100644
index 0000000000..b8f23e4a5f
--- /dev/null
+++ b/recipes/gtk-webcore/midori_0.2.3.bb
@@ -0,0 +1,39 @@
+require midori.inc
+
+DEPENDS += "python-native python-docutils-native"
+
+SRC_URI = "http://archive.xfce.org/src/apps/midori/0.2/midori-${PV}.tar.bz2;name=midori \
+ file://waf"
+SRC_URI[midori.md5sum] = "7289b170ab14925c2dc889f57a0b6a70"
+SRC_URI[midori.sha256sum] = "01edb228d248dca0f3e3be6f41421a301291cb14849e9ef5a155ddf11947dfac"
+
+SRC_URI_append_shr = " file://config \
+ "
+
+do_configure() {
+ cp -f ${WORKDIR}/waf ${S}/
+ sed -i -e 's:, shell=False::g' wscript
+ ./configure \
+ --prefix=${prefix} \
+ --bindir=${bindir} \
+ --sbindir=${sbindir} \
+ --libexecdir=${libexecdir} \
+ --datadir=${datadir} \
+ --sysconfdir=${sysconfdir} \
+ --sharedstatedir=${sharedstatedir} \
+ --localstatedir=${localstatedir} \
+ --libdir=${libdir} \
+ --includedir=${includedir} \
+ --infodir=${infodir} \
+ --mandir=${mandir} \
+ ${EXTRA_OECONF}
+
+ sed -i /LINK_CC/d ./_build_/c4che/default.cache.py
+ echo "LINK_CC = '${CXX}'" >> ./_build_/c4che/default.cache.py
+}
+
+do_install_append_shr() {
+ install -d ${D}${sysconfdir}/xdg/midori
+ install -m 0644 ${WORKDIR}/config ${D}${sysconfdir}/xdg/midori
+}
+
diff --git a/recipes/gtk-webcore/midori_0.2.4.bb b/recipes/gtk-webcore/midori_0.2.4.bb
new file mode 100644
index 0000000000..d75076fbfc
--- /dev/null
+++ b/recipes/gtk-webcore/midori_0.2.4.bb
@@ -0,0 +1,39 @@
+require midori.inc
+
+DEPENDS += "python-native python-docutils-native"
+
+SRC_URI = "http://archive.xfce.org/src/apps/midori/0.2/midori-${PV}.tar.bz2;name=midori \
+ file://waf"
+SRC_URI[midori.md5sum] = "ccd2ae162993c2c92c9e0eac7778c62d"
+SRC_URI[midori.sha256sum] = "02a2b13e2ca51badae828b0a331af92f09ae3d6a9ab0a56e647544db64f7790f"
+
+SRC_URI_append_shr = " file://config \
+ "
+
+do_configure() {
+ cp -f ${WORKDIR}/waf ${S}/
+ sed -i -e 's:, shell=False::g' wscript
+ ./configure \
+ --prefix=${prefix} \
+ --bindir=${bindir} \
+ --sbindir=${sbindir} \
+ --libexecdir=${libexecdir} \
+ --datadir=${datadir} \
+ --sysconfdir=${sysconfdir} \
+ --sharedstatedir=${sharedstatedir} \
+ --localstatedir=${localstatedir} \
+ --libdir=${libdir} \
+ --includedir=${includedir} \
+ --infodir=${infodir} \
+ --mandir=${mandir} \
+ ${EXTRA_OECONF}
+
+ sed -i /LINK_CC/d ./_build_/c4che/default.cache.py
+ echo "LINK_CC = '${CXX}'" >> ./_build_/c4che/default.cache.py
+}
+
+do_install_append_shr() {
+ install -d ${D}${sysconfdir}/xdg/midori
+ install -m 0644 ${WORKDIR}/config ${D}${sysconfdir}/xdg/midori
+}
+
diff --git a/recipes/gtk-webcore/osb-jscore_svn.bb b/recipes/gtk-webcore/osb-jscore_svn.bb
index 52c56f98b5..af85764842 100644
--- a/recipes/gtk-webcore/osb-jscore_svn.bb
+++ b/recipes/gtk-webcore/osb-jscore_svn.bb
@@ -4,10 +4,12 @@ LICENSE = "GPL"
PRIORITY = "optional"
PV = "0.5.2+svnr${SRCPV}"
-PR = "r1"
+PR = "r2"
SRC_URI = "svn://gtk-webcore.svn.sourceforge.net/svnroot/gtk-webcore/trunk;module=JavaScriptCore;proto=https \
- file://gcc4-fno-threadsafe-statics-JavaScriptCore.patch;patch=1"
+ file://gcc4-fno-threadsafe-statics-JavaScriptCore.patch;patch=1 \
+ file://no-static-templates.patch;patch=1 \
+ "
S = "${WORKDIR}/JavaScriptCore"
diff --git a/recipes/gzip/gzip-1.3.13/configure.patch b/recipes/gzip/gzip-1.3.13/configure.patch
new file mode 100644
index 0000000000..55e8c77345
--- /dev/null
+++ b/recipes/gzip/gzip-1.3.13/configure.patch
@@ -0,0 +1,15 @@
+Index: gzip-1.3.13/configure.ac
+===================================================================
+--- gzip-1.3.13.orig/configure.ac 2010-03-15 13:15:37.457912205 +0800
++++ gzip-1.3.13/configure.ac 2010-03-15 13:17:46.497912101 +0800
+@@ -27,8 +27,8 @@
+ AC_CONFIG_SRCDIR(gzip.c)
+ AC_CONFIG_AUX_DIR(build-aux)
+ AC_CONFIG_HEADERS([lib/config.h:lib/config.hin])
+-AM_INIT_AUTOMAKE([1.11 dist-xz])
+-AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
++AM_INIT_AUTOMAKE([1.10])
++m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+ AC_PROG_CC_STDC
+ AM_PROG_CC_C_O
diff --git a/recipes/gzip/gzip-1.3.5/configure.patch b/recipes/gzip/gzip-1.3.5/configure.patch
deleted file mode 100644
index 64e901a9a4..0000000000
--- a/recipes/gzip/gzip-1.3.5/configure.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- gzip-1.3.5/./configure.in~configure
-+++ gzip-1.3.5/./configure.in
-@@ -18,8 +18,8 @@
- # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- # 02111-1307, USA.
-
--AC_PREREQ(2.54)
--AC_INIT(gzip, 1.3.5, bug-gzip@gnu.org)
-+AC_PREREQ(2.57)
-+AC_INIT([gzip],[1.3.5],[bug-gzip@gnu.org])
- AC_CONFIG_SRCDIR(gzip.c)
- AM_INIT_AUTOMAKE
-
-@@ -39,9 +39,8 @@
-
- AC_CACHE_CHECK([for underline in external names], [gzip_cv_underline],
- [gzip_cv_underline=yes
-- AC_TRY_COMPILE([int foo() {return 0;}], [],
-- [nm conftest.$OBJEXT | grep _foo >/dev/null 2>&1 ||
-- gzip_cv_underline=no])])
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[int foo() {return 0;}]], [[]])],[nm conftest.$OBJEXT | grep _foo >/dev/null 2>&1 ||
-+ gzip_cv_underline=no],[])])
- if test $gzip_cv_underline = no; then
- ASCPP="${ASCPP} -DNO_UNDERLINE"
- fi
diff --git a/recipes/gzip/gzip_1.3.13.bb b/recipes/gzip/gzip_1.3.13.bb
new file mode 100644
index 0000000000..86c1abede6
--- /dev/null
+++ b/recipes/gzip/gzip_1.3.13.bb
@@ -0,0 +1,38 @@
+LICENSE = "GPL"
+SECTION = "console/utils"
+PRIORITY = "required"
+DESCRIPTION = "gzip (GNU zip) is a compression utility designed \
+to be a replacement for 'compress'. The GNU Project uses it as \
+the standard compression program for its system."
+PR = "r1"
+
+SRC_URI = "${GNU_MIRROR}/gzip/gzip-${PV}.tar.gz;name=src \
+ file://configure.patch;patch=1"
+SRC_URI[src.md5sum] = "c54a31b93e865f6a4410b2dc64662706"
+SRC_URI[src.sha256sum] = "1d06ff9f5c523651bed3dcde6e6aa8118eee48b22534a157a2588705fa517ca3"
+
+S = "${WORKDIR}/gzip-${PV}"
+
+inherit autotools
+
+do_install () {
+ autotools_do_install
+ # Rename and move files into /bin (FHS)
+ install -d ${D}${base_bindir}
+ mv ${D}${bindir}/gunzip ${D}${base_bindir}/gunzip.${PN}
+ mv ${D}${bindir}/gzip ${D}${base_bindir}/gzip.${PN}
+ mv ${D}${bindir}/zcat ${D}${base_bindir}/zcat.${PN}
+}
+
+pkg_postinst_${PN} () {
+ update-alternatives --install ${base_bindir}/gunzip gunzip gunzip.${PN} 100
+ update-alternatives --install ${base_bindir}/gzip gzip gzip.${PN} 100
+ update-alternatives --install ${base_bindir}/zcat zcat zcat.${PN} 100
+}
+
+pkg_prerm_${PN} () {
+ update-alternatives --remove gunzip gunzip.${PN}
+ update-alternatives --remove gzip gzip.${PN}
+ update-alternatives --remove zcat zcat.${PN}
+}
+
diff --git a/recipes/gzip/gzip_1.3.5.bb b/recipes/gzip/gzip_1.3.5.bb
deleted file mode 100644
index a0c49864b4..0000000000
--- a/recipes/gzip/gzip_1.3.5.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-LICENSE = "GPL"
-SECTION = "console/utils"
-PRIORITY = "required"
-DESCRIPTION = "gzip (GNU zip) is a compression utility designed \
-to be a replacement for 'compress'. The GNU Project uses it as \
-the standard compression program for its system."
-PR = "r1"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/g/gzip/gzip_${PV}.orig.tar.gz \
- file://configure.patch;patch=1"
-
-S = "${WORKDIR}/gzip-${PV}"
-
-inherit autotools
-
-do_install () {
- autotools_do_install
- # Rename and move files into /bin (FHS)
- install -d ${D}${base_bindir}
- mv ${D}${bindir}/gunzip ${D}${base_bindir}/gunzip.${PN}
- mv ${D}${bindir}/gzip ${D}${base_bindir}/gzip.${PN}
- mv ${D}${bindir}/zcat ${D}${base_bindir}/zcat.${PN}
-}
-
-pkg_postinst_${PN} () {
- update-alternatives --install ${base_bindir}/gunzip gunzip gunzip.${PN} 100
- update-alternatives --install ${base_bindir}/gzip gzip gzip.${PN} 100
- update-alternatives --install ${base_bindir}/zcat zcat zcat.${PN} 100
-}
-
-pkg_prerm_${PN} () {
- update-alternatives --remove gunzip gunzip.${PN}
- update-alternatives --remove gzip gzip.${PN}
- update-alternatives --remove zcat zcat.${PN}
-}
-
diff --git a/recipes/hal/consolekit_0.3.0.bb b/recipes/hal/consolekit_0.3.0.bb
index 10f1879e38..f2180bc714 100644
--- a/recipes/hal/consolekit_0.3.0.bb
+++ b/recipes/hal/consolekit_0.3.0.bb
@@ -2,19 +2,23 @@ DESCRIPTION = "ConsoleKit is a framework for defining and tracking users, login
LICENSE = "GPLv2"
DEPENDS = "policykit libpam dbus"
-PR = "r1"
+PR = "r3"
inherit gnome
SRC_URI = "http://people.freedesktop.org/~mccann/dist/ConsoleKit-${PV}.tar.bz2"
S = "${WORKDIR}/ConsoleKit-${PV}"
+EXTRA_OECONF += "--enable-pam-module --with-pam-module-dir=${libdir}/security"
+
do_stage () {
autotools_stage_all
}
+PACKAGES += "pam-plugin-ck-connector"
FILES_${PN} += "${libdir}/ConsoleKit ${datadir}/dbus-1 ${datadir}/PolicyKit"
-
-
+FILES_${PN}-dbg += ""${libdir}/security/.debug/*.so"
+FILES_pam-plugin-ck-connector += "${libdir}/security/*.so"
+RDEPENDS_pam-plugin-ck-connector += "${PN}"
diff --git a/recipes/hal/consolekit_0.4.1.bb b/recipes/hal/consolekit_0.4.1.bb
new file mode 100644
index 0000000000..9a6751c0c2
--- /dev/null
+++ b/recipes/hal/consolekit_0.4.1.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "ConsoleKit is a framework for defining and tracking users, login sessions, and seats."
+LICENSE = "GPLv2"
+DEPENDS = "policykit dbus ${@base_contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
+
+PR = "r2"
+
+inherit gnome
+
+SRC_URI = "http://www.freedesktop.org/software/ConsoleKit/dist/ConsoleKit-${PV}.tar.bz2;name=archive"
+SRC_URI[archive.md5sum] = "48eda4483cc97841d5f88e8e003eb6d7"
+SRC_URI[archive.sha256sum] = "f032adc6146d745034315054c5822a7a09f30e20a40d6e802221fa977354403e"
+
+S = "${WORKDIR}/ConsoleKit-${PV}"
+
+EXTRA_OECONF = " ${@base_contains('DISTRO_FEATURES', 'pam', '--enable-pam-module --with-pam-module-dir=${libdir}/security', '--disable-pam-module', d)} "
+
+FILES_${PN} += "${libdir}/ConsoleKit ${datadir}/dbus-1 ${datadir}/PolicyKit ${datadir}/polkit*"
+
+PACKAGES =+ "pam-plugin-ck-connector"
+FILES_pam-plugin-ck-connector += "${libdir}/security/*.so"
+RDEPENDS_pam-plugin-ck-connector += "${PN}"
+
+
+
diff --git a/recipes/hal/hal.inc b/recipes/hal/hal.inc
index 72df07f8bd..b93089428f 100644
--- a/recipes/hal/hal.inc
+++ b/recipes/hal/hal.inc
@@ -9,7 +9,7 @@ S = "${WORKDIR}/hal-${PV}"
inherit autotools pkgconfig
-DEPENDS = "virtual/kernel util-linux-ng dbus-glib udev intltool intltool-native expat virtual/libusb0 gperf-native"
+DEPENDS = "consolekit virtual/kernel util-linux-ng dbus-glib udev intltool intltool-native expat virtual/libusb0 gperf-native"
RDEPENDS += "hal-info udev-utils"
RRECOMMENDS += "eject"
@@ -45,15 +45,6 @@ do_install_append() {
rm -rf ${D}/${sysconfdir}/rc.d || true
}
-do_stage() {
- oe_libinstall -C libhal -a -so libhal ${STAGING_LIBDIR}
- oe_libinstall -C libhal-storage -a -so libhal-storage ${STAGING_LIBDIR}
-
- install -d ${STAGING_INCDIR}/hal
- install -m 0644 libhal/libhal.h ${STAGING_INCDIR}/hal
- install -m 0644 libhal-storage/libhal-storage.h ${STAGING_INCDIR}/hal
-}
-
# At the time the postinst runs, dbus might not be setup so only restart if running
pkg_postinst_hal () {
# can't do this offline
diff --git a/recipes/hping/hping2_1.9.9+2.0.0rc3.bb b/recipes/hping/hping2_1.9.9+2.0.0rc3.bb
index 471be84d29..f8f4bb7281 100644
--- a/recipes/hping/hping2_1.9.9+2.0.0rc3.bb
+++ b/recipes/hping/hping2_1.9.9+2.0.0rc3.bb
@@ -14,6 +14,8 @@ SRC_URI = "http://www.hping.org/hping2.0.0-rc3.tar.gz \
file://hping2_configure.patch;patch=1"
S = "${WORKDIR}/hping2-rc3"
+inherit siteinfo
+
#
# We've patched configure to accept byte order and ostype as env
# variables Pass those values in to stop it trying to figure it out
diff --git a/recipes/i2c-tools/i2c-tools_3.0.1.bb b/recipes/i2c-tools/i2c-tools_3.0.1.bb
index c8ea32a5f1..7bbad35272 100644
--- a/recipes/i2c-tools/i2c-tools_3.0.1.bb
+++ b/recipes/i2c-tools/i2c-tools_3.0.1.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Set of i2c tools for linux"
SECTION = "base"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
SRC_URI = "http://dl.lm-sensors.org/i2c-tools/releases/i2c-tools-${PV}.tar.bz2"
diff --git a/recipes/i2c-tools/i2c-tools_3.0.2.bb b/recipes/i2c-tools/i2c-tools_3.0.2.bb
index c44af1e3ba..e86763d857 100644
--- a/recipes/i2c-tools/i2c-tools_3.0.2.bb
+++ b/recipes/i2c-tools/i2c-tools_3.0.2.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Set of i2c tools for linux"
SECTION = "base"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
diff --git a/recipes/ibrdtn/files/0001-fix-header-include-for-gcc44.patch b/recipes/ibrdtn/files/0001-fix-header-include-for-gcc44.patch
new file mode 100644
index 0000000000..c2024c05c5
--- /dev/null
+++ b/recipes/ibrdtn/files/0001-fix-header-include-for-gcc44.patch
@@ -0,0 +1,22 @@
+ibrdtn: Fix include for stricter GCC 4.4 header handling
+
+GCC 4.4 is stricter on its headers so we need to make sure the uint64_t is
+really available or the compiler errors out:
+src/data/BlockFactory.cpp:101: error: ‘uint64_t’ was not declared in this scope
+src/data/BlockFactory.cpp:101: error: expected ‘;’ before ‘i’
+src/data/BlockFactory.cpp:101: error: ‘i’ was not declared in this scope
+
+--
+
+Index: ibrdtn-0.1.1/src/data/BlockFactory.cpp
+===================================================================
+--- ibrdtn-0.1.1.orig/src/data/BlockFactory.cpp 2010-02-12 13:25:37.000000000 +0100
++++ ibrdtn-0.1.1/src/data/BlockFactory.cpp 2010-02-12 13:25:49.000000000 +0100
+@@ -5,6 +5,7 @@
+ * Author: morgenro
+ */
+
++#include <stdint.h>
+ #include "data/BlockFactory.h"
+ #include "data/SDNV.h"
+ #include "data/Exceptions.h"
diff --git a/recipes/ibrdtn/ibrdtn_0.1.1.bb b/recipes/ibrdtn/ibrdtn_0.1.1.bb
new file mode 100644
index 0000000000..90e9e43964
--- /dev/null
+++ b/recipes/ibrdtn/ibrdtn_0.1.1.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Implementation of the bundle protocol RFC5050"
+HOMEPAGE = "http://www.ibr.cs.tu-bs.de/projects/ibr-dtn/"
+SECTION = "devel"
+DEPENDS = "libpthread-stubs sqlite3 lua5.1"
+PR = "r0"
+
+SRC_URI = "http://www.ibr.cs.tu-bs.de/projects/ibr-dtn/releases/ibrdtn-${PV}.tar.gz \
+ file://0001-fix-header-include-for-gcc44.patch;patch=1 \
+ "
+
+inherit autotools
+
+EXTRA_OECONF = "--prefix=${D} --exec-prefix=${D} --libdir=${STAGING_LIBDIR} --includedir=${STAGING_INCDIR}"
+
+do_configure() {
+ oe_runconf
+}
diff --git a/recipes/iksemel/iksemel-1.4/r25.diff b/recipes/iksemel/iksemel-1.4/r25.diff
new file mode 100644
index 0000000000..e666ce07b6
--- /dev/null
+++ b/recipes/iksemel/iksemel-1.4/r25.diff
@@ -0,0 +1,32 @@
+Taken from upstream subversion repository:
+
+http://code.google.com/p/iksemel/source/detail?r=25
+
+===================================================================
+---
+ configure.ac | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- iksemel-1.4.orig/configure.ac
++++ iksemel-1.4/configure.ac
+@@ -43,11 +43,19 @@ AM_CONDITIONAL(DO_POSIX, test "x$defio"
+ dnl Checks for library functions
+ AC_SEARCH_LIBS(recv,socket)
+ AC_CHECK_FUNCS(getopt_long)
+ AC_CHECK_FUNCS(getaddrinfo)
+
+-AM_PATH_LIBGNUTLS(,AC_DEFINE(HAVE_GNUTLS,,"Use libgnutls"))
++dnl Check GNU TLS
++PKG_CHECK_MODULES(GNUTLS, gnutls >= 2.0.0, have_gnutls=yes, have_gnutls=no)
++if test "x$have_gnutls" = "xyes"; then
++ LIBGNUTLS_CFLAGS="$GNUTLS_CFLAGS"
++ LIBGNUTLS_LIBS="$GNUTLS_LIBS"
++ AC_SUBST(LIBGNUTLS_CFLAGS)
++ AC_SUBST(LIBGNUTLS_LIBS)
++ AC_DEFINE(HAVE_GNUTLS, 1, [whether to use GnuTSL support.])
++fi
+
+ dnl Check -Wall flag of GCC
+ if test "x$GCC" = "xyes"; then
+ if test -z "`echo "$CFLAGS" | grep "\-Wall" 2> /dev/null`" ; then
+ CFLAGS="$CFLAGS -Wall"
diff --git a/recipes/iksemel/iksemel_1.2.bb b/recipes/iksemel/iksemel_1.2.bb
index 903d8f046d..c393f687d8 100644
--- a/recipes/iksemel/iksemel_1.2.bb
+++ b/recipes/iksemel/iksemel_1.2.bb
@@ -2,7 +2,7 @@ LICENSE = "LGPL"
DESCRIPTION = "A simple, powerful XML-parsing library written in C."
SECTION = "libs"
PRIORITY = "optional"
-DEPENDS = "glibc gnutls"
+DEPENDS = "gnutls"
PR = "r0"
inherit pkgconfig autotools
diff --git a/recipes/iksemel/iksemel_1.4.bb b/recipes/iksemel/iksemel_1.4.bb
new file mode 100644
index 0000000000..85c1fe969e
--- /dev/null
+++ b/recipes/iksemel/iksemel_1.4.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Fast and portable XML parser and Jabber protocol library"
+AUTHOR = "Gurer Ozen <meduketto at gmail.com>"
+HOMEPAGE = "http://iksemel.googlecode.com"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+DEPENDS = "gnutls"
+PR = "r1"
+
+SRC_URI = "http://iksemel.googlecode.com/files/${P}.tar.gz;name=archive \
+ file://r25.diff;patch=1"
+SRC_URI[archive.md5sum] = "532e77181694f87ad5eb59435d11c1ca"
+SRC_URI[archive.sha256sum] = "458c1b8fb3349076a6cecf26c29db1d561315d84e16bfcfba419f327f502e244"
+
+inherit autotools_stage pkgconfig
diff --git a/recipes/imagemagick/imagemagick-native_6.3.5-10.bb b/recipes/imagemagick/imagemagick-native_6.3.5-10.bb
index 0dcf8d4eca..d2efd36cc1 100644
--- a/recipes/imagemagick/imagemagick-native_6.3.5-10.bb
+++ b/recipes/imagemagick/imagemagick-native_6.3.5-10.bb
@@ -2,5 +2,5 @@ require imagemagick_${PV}.bb
DEPENDS ="libtool-native"
# FIXME: There is much more checked libraries. All should be added or explicitly disabled to get consistent results.
# tiff-native does not exist
-DEPENDS += "bzip2-native jpeg-native libpng-native zlib-native"
+DEPENDS += "bzip2-native jpeg-native libpng-native librsvg-native zlib-native"
inherit native
diff --git a/recipes/imagemagick/imagemagick_6.3.5-10.bb b/recipes/imagemagick/imagemagick_6.3.5-10.bb
index e23d11dc24..b399741352 100644
--- a/recipes/imagemagick/imagemagick_6.3.5-10.bb
+++ b/recipes/imagemagick/imagemagick_6.3.5-10.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "ImageMagick is an image convertion tools"
SECTION = "console/utils"
LICENSE = "GPL"
-DEPENDS = "tiff jpeg libpng tiff zlib"
-PR = "r6"
+DEPENDS = "tiff jpeg libpng librsvg tiff zlib"
+PR = "r7"
SRC_URI = "ftp://ftp.nluug.nl/pub/ImageMagick/ImageMagick-${PV}.tar.bz2 \
file://PerlMagic_MakePatch;patch=1 \
diff --git a/recipes/imagemagick/imagemagick_6.4.4-1.bb b/recipes/imagemagick/imagemagick_6.4.4-1.bb
index c2216a21df..bc16b0c0b9 100644
--- a/recipes/imagemagick/imagemagick_6.4.4-1.bb
+++ b/recipes/imagemagick/imagemagick_6.4.4-1.bb
@@ -2,9 +2,9 @@ DESCRIPTION = "ImageMagick is an image convertion tools"
SECTION = "console/utils"
LICENSE = "GPL"
# FIXME: There is much more checked libraries. All should be added or explicitly disabled to get consistent results.
-DEPENDS = "bzip2 jpeg libpng tiff zlib"
+DEPENDS = "bzip2 jpeg libpng librsvg tiff zlib"
-PR = "r2"
+PR = "r3"
SRC_URI = "ftp://ftp.nluug.nl/pub/ImageMagick/ImageMagick-${PV}.tar.bz2 \
file://PerlMagic_MakePatch;patch=1 \
diff --git a/recipes/images/altboot-console-image.bb b/recipes/images/altboot-console-image.bb
deleted file mode 100644
index ff5984981a..0000000000
--- a/recipes/images/altboot-console-image.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require console-image.bb
-
-ANGSTROM_EXTRA_INSTALL += " altboot "
-
-export IMAGE_BASENAME = "altboot-console-image"
-
diff --git a/recipes/images/altboot-x11-image.bb b/recipes/images/altboot-x11-image.bb
deleted file mode 100644
index d4b129e48c..0000000000
--- a/recipes/images/altboot-x11-image.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require x11-image.bb
-
-ANGSTROM_EXTRA_INSTALL += " altboot "
-export IMAGE_BASENAME = "altboot-x11-image"
diff --git a/recipes/images/angstrom-gnome-image.bb b/recipes/images/angstrom-gnome-image.bb
index f3e18b1d75..e15e9947bf 100644
--- a/recipes/images/angstrom-gnome-image.bb
+++ b/recipes/images/angstrom-gnome-image.bb
@@ -2,21 +2,30 @@ DESCRIPTION = "Image based on the GNOME desktop"
inherit image
+XSERVER ?= "xserver-xorg \
+ xf86-input-evdev \
+ xf86-input-mouse \
+ xf86-video-fbdev \
+ xf86-video-sisusb \
+ xf86-input-keyboard \
+"
+
export IMAGE_BASENAME = "GNOME-image"
IMAGE_LINGUAS = "de-de fr-fr en-gb en-us pt-br es-es kn-in ml-in ta-in"
ROOTFS_POSTPROCESS_COMMAND += 'install_linguas;'
+IMAGE_PREPROCESS_COMMAND = "create_etc_timestamp"
IMAGE_LOGIN_MANAGER = "shadow"
+IMAGE_SPLASH = "exquisite exquisite-themes exquisite-theme-angstrom"
ANGSTROM_EXTRA_INSTALL ?= ""
-SPLASH = "psplash-angstrom"
-
IMAGE_INSTALL += " \
task-base-extended \
${ANGSTROM_EXTRA_INSTALL} \
- ${SPLASH} \
+ ${IMAGE_SPLASH} \
angstrom-task-gnome \
+ bash \
"
diff --git a/recipes/images/angstrom-x-image.bb b/recipes/images/angstrom-x-image.bb
index 3f322fbce2..78422f6f79 100644
--- a/recipes/images/angstrom-x-image.bb
+++ b/recipes/images/angstrom-x-image.bb
@@ -2,27 +2,34 @@ DESCRIPTION = "Image based on the GNOME desktop"
inherit image
-XSERVER ?= ""
+XSERVER ?= "xserver-xorg \
+ xf86-input-evdev \
+ xf86-input-mouse \
+ xf86-video-fbdev \
+ xf86-video-sisusb \
+ xf86-input-keyboard \
+"
export IMAGE_BASENAME = "X-image"
IMAGE_LINGUAS = "de-de fr-fr en-gb en-us pt-br es-es kn-in ml-in ta-in"
ROOTFS_POSTPROCESS_COMMAND += 'install_linguas;'
+IMAGE_PREPROCESS_COMMAND = "create_etc_timestamp"
IMAGE_LOGIN_MANAGER = "shadow"
+IMAGE_SPLASH = "exquisite exquisite-themes exquisite-theme-angstrom"
ANGSTROM_EXTRA_INSTALL ?= ""
-SPLASH = "psplash-angstrom"
-
IMAGE_INSTALL += " \
task-base-extended \
${ANGSTROM_EXTRA_INSTALL} \
- ${SPLASH} \
+ ${IMAGE_SPLASH} \
${XSERVER} \
angstrom-task-gnome \
openbox \
e-wm-config-angstrom \
task-xfce46-base task-xfce46-extras \
+ bash \
"
diff --git a/recipes/images/e-image-core.bb b/recipes/images/e-image-core.bb
index f6e0c33659..0eec2b99d1 100644
--- a/recipes/images/e-image-core.bb
+++ b/recipes/images/e-image-core.bb
@@ -1,10 +1,10 @@
DESCRIPTION = "An X11-based distribution with the Enlightenment Window Manager"
DEPENDS = "${MACHINE_TASK_PROVIDER} \
- xserver-kdrive \
+ ${XSERVER} \
task-e-x11-core"
-IMAGE_INSTALL = "${MACHINE_TASK_PROVIDER} task-e-x11-core xserver-kdrive-fbdev glibc-charmap-utf-8 glibc-localedata-i18n"
+IMAGE_INSTALL = "${MACHINE_TASK_PROVIDER} task-e-x11-core ${XSERVER} glibc-charmap-utf-8 glibc-localedata-i18n"
IMAGE_LINGUAS = ""
inherit image
diff --git a/recipes/images/fso-image-nox.bb b/recipes/images/fso-image-nox.bb
index d241919367..d393cdb396 100644
--- a/recipes/images/fso-image-nox.bb
+++ b/recipes/images/fso-image-nox.bb
@@ -57,14 +57,14 @@ PYTHON_NOX_INSTALL = "\
# This list should be edited -- in particular, s3c24xx-gpio is large
# and statically linked. If not needed, we can save some flash on the
# GTA01 by getting rid of it in the base image. Other candidates
-# might include nano, mickeydbus, powertop, sysstat, and tcpdump.
+# might include nano, mdbus, powertop, sysstat, and tcpdump.
TOOLS_NOX_INSTALL = "\
dosfstools \
htop \
iptables \
lsof \
- mickeydbus \
+ mdbus \
mtd-utils \
nano \
powertop \
diff --git a/recipes/images/fso-image.inc b/recipes/images/fso-image.inc
index 6c381a054b..88fc1679ab 100644
--- a/recipes/images/fso-image.inc
+++ b/recipes/images/fso-image.inc
@@ -130,8 +130,11 @@ fso_rootfs_postprocess() {
# set sensible default DNS entries
echo "nameserver 208.67.222.222" > ./etc/resolv.conf
echo "nameserver 208.67.220.220" >> ./etc/resolv.conf
- # remove autostart of gspd (if installed), we have fso-gpsd and this conflicts
+ # remove autostart of certain packages which we rather want to start on demand
rm -f ./etc/init.d/gpsd
+ rm -f ./etc/init.d/*blue*
+ rm -f ./etc/init.d/*connman*
+ rm -f ./etc/init.d/*avahi*
# silence printk
mkdir -p ./etc/profile.d/
echo "echo 0 0 0 0 >/proc/sys/kernel/printk" >./etc/profile.d/printk.sh
diff --git a/recipes/images/fso2-console-image.bb b/recipes/images/fso2-console-image.bb
index 60bd6fc720..4140bc47c9 100644
--- a/recipes/images/fso2-console-image.bb
+++ b/recipes/images/fso2-console-image.bb
@@ -5,7 +5,7 @@
require fso-image.inc
PV = "1.1"
-PR = "r1"
+PR = "r3"
IMAGE_INSTALL = "\
task-base \
diff --git a/recipes/images/fso2-demo-image.bb b/recipes/images/fso2-demo-image.bb
new file mode 100644
index 0000000000..3e2f93c66b
--- /dev/null
+++ b/recipes/images/fso2-demo-image.bb
@@ -0,0 +1,17 @@
+#------------------------------------------------------
+# FSO-compliant Console Image Recipe
+#------------------------------------------------------
+
+require fso-image.inc
+
+PV = "1.0"
+PR = "r0"
+
+IMAGE_INSTALL = "\
+ task-base \
+ task-fso2-compliance \
+ task-cli-tools \
+ task-cli-tools-python \
+ \
+ zhone2 \
+"
diff --git a/recipes/images/illume-image.bb b/recipes/images/illume-image.bb
index 3ab006ae9c..9482257d39 100644
--- a/recipes/images/illume-image.bb
+++ b/recipes/images/illume-image.bb
@@ -77,7 +77,7 @@ DEV_INSTALL = "\
TOOLS_INSTALL = "\
dosfstools \
lsof \
- mickeydbus \
+ mdbus \
mtd-utils \
nano \
powertop \
@@ -94,7 +94,7 @@ AUDIO_INSTALL = "\
${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'gst-plugin-mad', d)} \
gst-plugin-modplug \
gst-plugin-sid \
- fso-sounds \
+# fso-sounds \
"
GTK_INSTALL = "\
@@ -138,9 +138,9 @@ APPS_INSTALL = "\
elementary-alarm \
expedite \
expedite-themes \
- libefso \
- essential-dialer \
- elementary-sms \
+# libefso \
+# essential-dialer \
+# elementary-sms \
"
IMAGE_INSTALL = "\
diff --git a/recipes/images/initramfs-kexecboot-image.bb b/recipes/images/initramfs-kexecboot-image.bb
new file mode 100644
index 0000000000..68b16f9c79
--- /dev/null
+++ b/recipes/images/initramfs-kexecboot-image.bb
@@ -0,0 +1,24 @@
+# Initramfs image providing kexecboot
+# a linux as bootloader implementation
+
+#export IMAGE_BASENAME = "initramfs-kexecboot-image"
+
+DEPENDS = "lzma-native"
+
+IMAGE_FSTYPES = "cpio.gz cpio.lzma"
+
+# avoid circular dependencies
+EXTRA_IMAGEDEPENDS = ""
+
+IMAGE_INSTALL = "kexecboot"
+
+IMAGE_LINGUAS = ""
+IMAGE_LOGIN_MANAGER = ""
+IMAGE_INIT_MANAGER = ""
+IMAGE_INITSCRIPTS = ""
+IMAGE_DEV_MANAGER = ""
+
+FEED_DEPLOYDIR_BASE_URI = ""
+ONLINE_PACKAGE_MANAGEMENT = "none"
+
+inherit image
diff --git a/recipes/images/shr-image.bb b/recipes/images/shr-image.bb
index e889f2dfb9..3d72ca0b53 100644
--- a/recipes/images/shr-image.bb
+++ b/recipes/images/shr-image.bb
@@ -7,24 +7,12 @@ RDEPENDS += "\
task-shr-apps \
task-shr-games \
task-shr-gtk \
+ task-shr-cli \
"
IMAGE_INSTALL += "\
task-shr-apps \
task-shr-games \
task-shr-gtk \
+ task-shr-cli \
"
-
-# perform some SHR convenience tweaks to the rootfs
-shr_rootfs_postprocess_append() {
- curdir=$PWD
- cd ${IMAGE_ROOTFS}
-
-
- #Replace desktop files
- echo "Icon=pidgin.png" >> ./usr/share/applications/pidgin.desktop
- sed -i "s/^X-Icon-path.*$//g" ./usr/share/applications/vagalume.desktop
-
- cd $curdir
-}
-
diff --git a/recipes/images/shr-image.inc b/recipes/images/shr-image.inc
index bbda84d93b..3bdcdfc100 100644
--- a/recipes/images/shr-image.inc
+++ b/recipes/images/shr-image.inc
@@ -3,14 +3,12 @@
#------------------------------------------------------
PV = "2.0"
-PR = "r10"
+PR = "r13"
DEPENDS += "task-shr-minimal"
RDEPENDS += "\
- ${MACHINE_TASK_PROVIDER} \
- task-base \
task-shr-minimal-base \
task-shr-minimal-cli \
task-shr-minimal-fso \
@@ -18,23 +16,16 @@ RDEPENDS += "\
task-shr-minimal-audio \
task-shr-minimal-gtk \
task-shr-minimal-x \
- task-x11-illume \
- task-fso2-compliance \
- task-fonts-truetype-core \
"
IMAGE_INSTALL += "\
- ${MACHINE_TASK_PROVIDER} \
- task-base \
task-shr-minimal-base \
task-shr-minimal-cli \
+ task-shr-minimal-fso \
task-shr-minimal-apps \
task-shr-minimal-audio \
task-shr-minimal-gtk \
task-shr-minimal-x \
- task-x11-illume \
- task-fso2-compliance \
- task-fonts-truetype-core \
"
inherit image
@@ -130,7 +121,6 @@ shr_rootfs_gta02_postprocess() {
cd ${IMAGE_ROOTFS}/boot
ln -s uImage uImage-GTA02.bin
cd $curdir
- #sed -i 's/#SCORouting=PCM/SCORouting=PCM/' ${IMAGE_ROOTFS}/etc/bluetooth/audio.conf
}
shr_rootfs_gta01_postprocess() {
@@ -139,14 +129,15 @@ shr_rootfs_gta01_postprocess() {
cd ${IMAGE_ROOTFS}/boot
ln -s uImage uImage-GTA01.bin
cd $curdir
- #sed -i 's/#SCORouting=PCM/SCORouting=PCM/' ${IMAGE_ROOTFS}/etc/bluetooth/audio.conf
}
+# We don't want /boot directory in jffs2/ubi/ubifs images
+IMAGE_CMD_jffs2 = "mv ${IMAGE_ROOTFS}/boot ${IMAGE_ROOTFS}-boot && mkfs.jffs2 -x lzo --root=${IMAGE_ROOTFS} --faketime --output=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 ${EXTRA_IMAGECMD} && mv ${IMAGE_ROOTFS}-boot ${IMAGE_ROOTFS}/boot"
+IMAGE_CMD_ubi = "mv ${IMAGE_ROOTFS}/boot ${IMAGE_ROOTFS}-boot && echo \[ubifs\] > ubinize.cfg ; echo mode=ubi >> ubinize.cfg ; echo image=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs >> ubinize.cfg ; echo vol_id=0 >> ubinize.cfg ; echo vol_type=dynamic >> ubinize.cfg ; echo vol_name=${UBI_VOLNAME} >> ubinize.cfg ; echo vol_flags=autoresize >> ubinize.cfg;mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs ${MKUBIFS_ARGS} && ubinize -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubi ${UBINIZE_ARGS} ubinize.cfg && mv ${IMAGE_ROOTFS}-boot ${IMAGE_ROOTFS}/boot"
+IMAGE_CMD_ubifs = "mv ${IMAGE_ROOTFS}/boot ${IMAGE_ROOTFS}-boot && mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.ubifs.img ${MKUBIFS_ARGS} && mv ${IMAGE_ROOTFS}-boot ${IMAGE_ROOTFS}/boot"
+
ROOTFS_POSTPROCESS_COMMAND += " shr_rootfs_postprocess"
+ROOTFS_POSTPROCESS_COMMAND += " install_linguas"
ROOTFS_POSTPROCESS_COMMAND_append_om-gta02 = ";shr_rootfs_gta02_postprocess"
ROOTFS_POSTPROCESS_COMMAND_append_om-gta01 = ";shr_rootfs_gta01_postprocess"
-
-#do_testlab() {
-# :
-#}
diff --git a/recipes/images/xfce46-image.bb b/recipes/images/xfce46-image.bb
index 8f8e240f3f..c5e55adb71 100644
--- a/recipes/images/xfce46-image.bb
+++ b/recipes/images/xfce46-image.bb
@@ -1,3 +1,5 @@
+PR = "r1"
+
export IMAGE_BASENAME = "xfce46-image"
XSERVER ?= "xserver-xorg \
@@ -7,8 +9,10 @@ XSERVER ?= "xserver-xorg \
xf86-input-keyboard \
"
-DEPENDS = "virtual/xserver ${MACHINE_TASK_PROVIDER} task-xfce46-base task-xfce46-extras"
+DEPENDS = "virtual/xserver ${MACHINE_TASK_PROVIDER} task-xfce46-base task-xfce46-extras \
+"
-IMAGE_INSTALL = "${XSERVER} ${MACHINE_TASK_PROVIDER} task-xfce46-base task-xfce46-extras"
+IMAGE_INSTALL = "${XSERVER} ${MACHINE_TASK_PROVIDER} task-xfce46-base task-xfce46-extras \
+"
inherit image
diff --git a/recipes/inetutils/inetutils_1.5.bb b/recipes/inetutils/inetutils_1.5.bb
index 17f202cfbe..f904ba5437 100644
--- a/recipes/inetutils/inetutils_1.5.bb
+++ b/recipes/inetutils/inetutils_1.5.bb
@@ -6,7 +6,7 @@ networking utilities and servers including ftp, ftpd, rcp, \
rexec, rlogin, rlogind, rsh, rshd, syslog, syslogd, talk, \
talkd, telnet, telnetd, tftp, tftpd, and uucpd."
-PR = "r1"
+PR = "r2"
SRC_URI = "${GNU_MIRROR}/inetutils/inetutils-${PV}.tar.gz \
"
@@ -16,6 +16,7 @@ inherit autotools
EXTRA_OECONF = "--with-ncurses-include-dir=${STAGING_INCDIR}"
do_configure_prepend () {
+ cp ${STAGING_DATADIR_NATIVE}/gettext/config.rpath ${S}/build-aux/config.rpath
rm -f ${S}/glob/configure*
}
diff --git a/recipes/initscripts/files/umountfs b/recipes/initscripts/files/umountfs
index ec75b0c4a4..79bb48f74e 100644
--- a/recipes/initscripts/files/umountfs
+++ b/recipes/initscripts/files/umountfs
@@ -10,9 +10,9 @@ swapoff -a
# We leave /proc mounted.
echo "Unmounting local filesystems..."
-mount -o remount,ro /mnt/ram
-umount -f -a -r
-
+grep -q /mnt/ram /proc/mounts && mount -o remount,ro /mnt/ram
mount -o remount,ro /
+umount -f -a -r > /dev/null 2>&1
+
: exit 0
diff --git a/recipes/initscripts/initscripts-1.0/sysfs.sh b/recipes/initscripts/initscripts-1.0/sysfs.sh
index 4486128ad5..b2426147a7 100644
--- a/recipes/initscripts/initscripts-1.0/sysfs.sh
+++ b/recipes/initscripts/initscripts-1.0/sysfs.sh
@@ -4,7 +4,7 @@ if [ -e /proc ] && ! [ -e /proc/mounts ]; then
mount -t proc proc /proc
fi
-if [ -e /sys ] && grep -q sysfs /proc/filesystems; then
+if [ -e /sys ] && ! [ -e /sys/kernel ] && grep -q sysfs /proc/filesystems; then
mount sysfs /sys -t sysfs
fi
diff --git a/recipes/initscripts/initscripts_1.0.bb b/recipes/initscripts/initscripts_1.0.bb
index 664214436e..2c0689ffc8 100644
--- a/recipes/initscripts/initscripts_1.0.bb
+++ b/recipes/initscripts/initscripts_1.0.bb
@@ -4,7 +4,7 @@ PRIORITY = "required"
DEPENDS = "makedevs"
RDEPENDS = "makedevs"
LICENSE = "GPL"
-PR = "r115"
+PR = "r117"
SRC_URI = "file://functions \
file://halt \
diff --git a/recipes/intone-video/intone-video_svn.bb b/recipes/intone-video/intone-video_svn.bb
index 0f7979f122..352a1f571d 100644
--- a/recipes/intone-video/intone-video_svn.bb
+++ b/recipes/intone-video/intone-video_svn.bb
@@ -6,6 +6,7 @@ SECTION = "e/apps"
DEPENDS = "elementary eina sqlite3 edbus"
RDEPENDS = "mplayer lame libxv libsdl-x11"
+SRCREV = "12"
PV = "0.13+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/intone/intone_svn.bb b/recipes/intone/intone_svn.bb
index d964a475c4..c92590f2c0 100644
--- a/recipes/intone/intone_svn.bb
+++ b/recipes/intone/intone_svn.bb
@@ -6,6 +6,7 @@ SECTION = "e/apps"
DEPENDS = "elementary eina sqlite3 edbus libvorbis id3lib"
RDEPENDS = "mplayer lame libxv libsdl-x11"
+SRCREV = "75"
PV = "0.66+svnr${SRCPV}"
PR = "r3"
diff --git a/recipes/iproute2/iproute2.inc b/recipes/iproute2/iproute2.inc
index 3b3d5b9b92..e755ce5abc 100644
--- a/recipes/iproute2/iproute2.inc
+++ b/recipes/iproute2/iproute2.inc
@@ -1,7 +1,7 @@
DESCRIPTION = "kernel routing and traffic control utilities"
HOMEPAGE = "http://linux-net.osdl.org/index.php/Iproute2"
SECTION = "base"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS = "flex-native bison-native"
INC_PR = "r3"
diff --git a/recipes/ipsec-tools/ipsec-tools.inc b/recipes/ipsec-tools/ipsec-tools.inc
index ed265f12ed..cb7b411626 100644
--- a/recipes/ipsec-tools/ipsec-tools.inc
+++ b/recipes/ipsec-tools/ipsec-tools.inc
@@ -5,9 +5,9 @@ SECTION = "console/network"
LICENSE = "BSD"
DEPENDS = "virtual/kernel openssl readline flex"
-SRC_URI = "${SOURCEFORGE_MIRROR}/ipsec-tools/ipsec-tools-${PV}.tar.bz2 \
- file://racoon-search-missing.patch;patch=1 \
- file://gcc-4.2.patch;patch=1"
+SRC_URI = "${SOURCEFORGE_MIRROR}/ipsec-tools/ipsec-tools-${PV}.tar.bz2;name=ipsec-tools-${PV}"
+
+INC_PR = "r2"
inherit autotools
diff --git a/recipes/ipsec-tools/ipsec-tools_0.6.6.bb b/recipes/ipsec-tools/ipsec-tools_0.6.6.bb
index 1ccc60c18d..c8842b75fd 100644
--- a/recipes/ipsec-tools/ipsec-tools_0.6.6.bb
+++ b/recipes/ipsec-tools/ipsec-tools_0.6.6.bb
@@ -1,3 +1,5 @@
-PR = "r1"
+PR = "${INC_PR}.0"
require ipsec-tools.inc
+
+SRC_URI += "file://racoon-search-missing.patch;patch=1 file://gcc-4.2.patch;patch=1" \ No newline at end of file
diff --git a/recipes/ipsec-tools/ipsec-tools_0.6.7.bb b/recipes/ipsec-tools/ipsec-tools_0.6.7.bb
index 3f23b198c1..c8842b75fd 100644
--- a/recipes/ipsec-tools/ipsec-tools_0.6.7.bb
+++ b/recipes/ipsec-tools/ipsec-tools_0.6.7.bb
@@ -1,3 +1,5 @@
-PR = "r0"
+PR = "${INC_PR}.0"
require ipsec-tools.inc
+
+SRC_URI += "file://racoon-search-missing.patch;patch=1 file://gcc-4.2.patch;patch=1" \ No newline at end of file
diff --git a/recipes/ipsec-tools/ipsec-tools_0.7.2.bb b/recipes/ipsec-tools/ipsec-tools_0.7.2.bb
new file mode 100644
index 0000000000..4255598ed8
--- /dev/null
+++ b/recipes/ipsec-tools/ipsec-tools_0.7.2.bb
@@ -0,0 +1,8 @@
+PR = "${INC_PR}.0"
+
+require ipsec-tools.inc
+
+SRC_URI[ipsec-tools-0.7.2.md5sum] = "72861f005746ee27984b2ee715ecc629"
+SRC_URI[ipsec-tools-0.7.2.sha256sum] = "08722ff6c62de3e042fef337454f03622a79053108d6dcc686c9c854f9f9e031"
+
+EXTRA_OECONF += " --disable-security-context" \ No newline at end of file
diff --git a/recipes/iscsi-target/files/2.6.31.patch b/recipes/iscsi-target/files/2.6.31.patch
new file mode 100644
index 0000000000..74c91f5d4c
--- /dev/null
+++ b/recipes/iscsi-target/files/2.6.31.patch
@@ -0,0 +1,16 @@
+Index: iscsitarget-1.4.19/patches/compat-2.6.31.patch
+===================================================================
+--- /dev/null
++++ iscsitarget-1.4.19/patches/compat-2.6.31.patch
+@@ -0,0 +1,11 @@
++--- sync/kernel/file-io.c 2009-12-10 17:43:36.000000000 -0500
+++++ trunk/kernel/file-io.c 2008-12-04 17:35:21.000000000 -0500
++@@ -88,7 +88,7 @@
++ count = lu->blk_cnt << lu->blk_shift;
++ }
++
++- res = filemap_write_and_wait_range(mapping, ppos, ppos + count - 1);
+++ res = sync_page_range(inode, mapping, ppos, count);
++ if (res) {
++ eprintk("I/O error: syncing pages failed: %d\n", res);
++ return -EIO;
diff --git a/recipes/iscsi-target/files/2.6.32.patch b/recipes/iscsi-target/files/2.6.32.patch
new file mode 100644
index 0000000000..bda0d20470
--- /dev/null
+++ b/recipes/iscsi-target/files/2.6.32.patch
@@ -0,0 +1,107 @@
+Index: x/kernel/file-io.c
+===================================================================
+--- x/kernel/file-io.c (revision 276)
++++ x/kernel/file-io.c (working copy)
+@@ -88,7 +88,7 @@
+ count = lu->blk_cnt << lu->blk_shift;
+ }
+
+- res = sync_page_range(inode, mapping, ppos, count);
++ res = filemap_write_and_wait_range(mapping, ppos, ppos + count - 1);
+ if (res) {
+ eprintk("I/O error: syncing pages failed: %d\n", res);
+ return -EIO;
+Index: x/dkms.conf
+===================================================================
+--- x/dkms.conf (revision 276)
++++ x/dkms.conf (working copy)
+@@ -20,33 +20,36 @@
+ # Patches newest - oldest, distro spec at bottom
+ #
+
+-PATCH[0]="compat-2.6.29.patch"
+-PATCH_MATCH[0]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29)"
++PATCH[0]="compat-2.6.31.patch"
++PATCH_MATCH[0]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)"
+
+-PATCH[1]="compat-2.6.28.patch"
+-PATCH_MATCH[1]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28)"
++PATCH[1]="compat-2.6.29.patch"
++PATCH_MATCH[1]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29)"
+
+-PATCH[2]="compat-2.6.25-2.6.27.patch"
+-PATCH_MATCH[2]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23|24|25|26|27)"
++PATCH[2]="compat-2.6.28.patch"
++PATCH_MATCH[2]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28)"
+
+-PATCH[3]="compat-2.6.24.patch"
+-PATCH_MATCH[3]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23|24)"
++PATCH[3]="compat-2.6.25-2.6.27.patch"
++PATCH_MATCH[3]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23|24|25|26|27)"
+
+-PATCH[4]="compat-2.6.23.patch"
+-PATCH_MATCH[4]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23)"
++PATCH[4]="compat-2.6.24.patch"
++PATCH_MATCH[4]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23|24)"
+
+-PATCH[5]="compat-2.6.22.patch"
+-PATCH_MATCH[5]="2\.6\.(9|14|15|16|17|18|19|20|21|22)"
++PATCH[5]="compat-2.6.23.patch"
++PATCH_MATCH[5]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23)"
+
+-PATCH[6]="compat-2.6.19-2.6.21.patch"
+-PATCH_MATCH[6]="2\.6\.(9|14|15|16|17|18|19|20|21)"
++PATCH[6]="compat-2.6.22.patch"
++PATCH_MATCH[6]="2\.6\.(9|14|15|16|17|18|19|20|21|22)"
+
+-PATCH[7]="compat-2.6.14-2.6.18.patch"
+-PATCH_MATCH[7]="2\.6\.(9|14|15|16|17|18)"
++PATCH[7]="compat-2.6.19-2.6.21.patch"
++PATCH_MATCH[7]="2\.6\.(9|14|15|16|17|18|19|20|21)"
+
+-PATCH[8]="compat-sles10sp2.patch"
+-PATCH_MATCH[8]="2\.6\.16\.60-.*"
++PATCH[8]="compat-2.6.14-2.6.18.patch"
++PATCH_MATCH[8]="2\.6\.(9|14|15|16|17|18)"
+
+-PATCH[9]="compat-rhel4.patch"
+-PATCH_MATCH[9]="2\.6\.9-.*\.(el|plus\.c4)"
++PATCH[9]="compat-sles10sp2.patch"
++PATCH_MATCH[9]="2\.6\.16\.60-.*"
+
++PATCH[10]="compat-rhel4.patch"
++PATCH_MATCH[10]="2\.6\.9-.*\.(el|plus\.c4)"
++
+Index: x/patches/compat-2.6.31.patch
+===================================================================
+--- x/patches/compat-2.6.31.patch (revision 0)
++++ x/patches/compat-2.6.31.patch (revision 0)
+@@ -0,0 +1,11 @@
++--- sync/kernel/file-io.c 2009-12-10 17:43:36.000000000 -0500
+++++ trunk/kernel/file-io.c 2008-12-04 17:35:21.000000000 -0500
++@@ -88,7 +88,7 @@
++ count = lu->blk_cnt << lu->blk_shift;
++ }
++
++- res = filemap_write_and_wait_range(mapping, ppos, ppos + count - 1);
+++ res = sync_page_range(inode, mapping, ppos, count);
++ if (res) {
++ eprintk("I/O error: syncing pages failed: %d\n", res);
++ return -EIO;
+Index: x/Makefile
+===================================================================
+--- x/Makefile (revision 276)
++++ x/Makefile (working copy)
+@@ -51,6 +51,11 @@
+ # base first the earlier patch sets will not need to be modified.
+ #
+
++# Compatibility patch for kernels <= 2.6.31
++ifeq ($(call kver_le,2,6,31),1)
++ PATCHES := $(PATCHES) compat-2.6.31.patch
++endif
++
+ # Compatibility patch for kernels <= 2.6.29
+ ifeq ($(call kver_le,2,6,29),1)
+ PATCHES := $(PATCHES) compat-2.6.29.patch
+
diff --git a/recipes/iscsi-target/iscsi-target_1.4.19.bb b/recipes/iscsi-target/iscsi-target_1.4.19.bb
new file mode 100644
index 0000000000..ce23e2ff91
--- /dev/null
+++ b/recipes/iscsi-target/iscsi-target_1.4.19.bb
@@ -0,0 +1,50 @@
+DESCRIPTION = "iSCSI Enterprise Target is for building an iSCSI storage system on Linux"
+HOMEPAGE = "http://iscsitarget.sourceforge.net/"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/iscsitarget/iscsitarget-${PV}.tar.gz;name=iscsitarget1419targz \
+
+ file://libs.patch;patch=1 \
+ file://2.6.31.patch;patch=1 \
+ file://2.6.32.patch;patch=1 \
+ file://ietd.conf \
+ file://init"
+SRC_URI[iscsitarget1419targz.md5sum] = "9beca214c28949cce1716b49fec57de4"
+SRC_URI[iscsitarget1419targz.sha256sum] = "a9fc5e43a2806b8aa95513b2af06d97bb9181ef5fedc906d69144d93a86e664a"
+S = "${WORKDIR}/iscsitarget-${PV}"
+
+
+DEPENDS = "openssl"
+RRECOMMENDS = "kernel-module-crc32c kernel-module-libcrc32c"
+
+inherit module
+
+do_configure() {
+}
+
+CFLAGS = "-isystem${STAGING_KERNEL_DIR}/include -I${STAGING_INCDIR} -L${STAGING_LIBDIR}"
+LDFLAGS = "-L${STAGING_LIBDIR}"
+FILES_${PN} += " ${base_sbindir}"
+
+do_compile() {
+ oe_runmake KSRC=${STAGING_KERNEL_DIR} CFLAGS='${CFLAGS}' LDFLAGS='${LDFLAGS}'
+}
+
+do_install() {
+ # Module
+ install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/iscsi
+ install -m 0644 kernel/iscsi_trgt.ko ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/iscsi/iscsi_trgt.ko
+
+ # Userspace utilities
+ install -d ${D}${base_sbindir}
+ install -m 0755 usr/ietd ${D}${base_sbindir}/ietd
+ install -m 0755 usr/ietadm ${D}${base_sbindir}/ietadm
+
+ # Config files, init scripts
+ mkdir -p ${D}${sysconfdir}/init.d
+ install -m 0755 ../init ${D}${sysconfdir}/init.d/iscsi-target
+ install -m 0644 ${WORKDIR}/ietd.conf ${D}${sysconfdir}/
+ install -m 0644 etc/initiators.allow ${D}${sysconfdir}/
+ install -m 0644 etc/initiators.deny ${D}${sysconfdir}/
+}
diff --git a/recipes/kexecboot/device_table-oldmmc.txt b/recipes/kexecboot/device_table-oldmmc.txt
deleted file mode 100644
index 2b61c01849..0000000000
--- a/recipes/kexecboot/device_table-oldmmc.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-#<path> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>
-#/dev/mem c 640 0 0 1 1 0 0 -
-#
-#type can be one of:
-# f A regular file
-# d Directory
-# c Character special device file
-# b Block special device file
-# p Fifo (named pipe)
-
-/dev d 755 0 0 - - - - -
-/dev/initctl p 600 0 0 - - - - -
-/dev/apm_bios c 660 0 46 10 134 - - -
-/dev/fb0 c 600 0 0 29 0 - - -
-/dev/hda b 660 0 6 3 0 - - -
-/dev/hda b 660 0 6 3 1 1 1 19
-/dev/kmem c 640 0 15 1 2 - - -
-/dev/mem c 640 0 15 1 1 - - -
-/dev/null c 666 0 0 1 3 - - -
-/dev/ram b 640 0 0 1 0 0 1 4
-/dev/tty c 662 0 5 5 0 - - -
-/dev/tty c 666 0 5 4 0 0 1 9
-/dev/ttyS c 640 0 5 4 64 0 1 1
-/dev/ttySA c 640 0 5 204 5 0 1 1
-/dev/zero c 644 0 0 1 5 - - -
-/dev/mtd c 660 0 6 90 0 0 2 8
-/dev/mtdblock b 640 0 0 31 0 0 1 8
-/dev/console c 662 0 5 5 1 - - -
-/dev/random c 644 0 0 1 8 - - -
-/dev/urandom c 644 0 0 1 9 - - -
-/dev/ptmx c 644 0 0 5 2 - - -
-
-# mmc numbers are assigned dynamicly so if you have other dynamic assigned block devices it may be wrong
-/dev/mmcblk0 b 660 0 6 254 0 - - -
-/dev/mmcblk0p b 660 0 6 254 1 1 1 7
-/dev/event0 c 660 0 0 13 64 - - -
diff --git a/recipes/kexecboot/initramfs-kexecboot-image.bb b/recipes/kexecboot/initramfs-kexecboot-image.bb
deleted file mode 100644
index 890287d3f6..0000000000
--- a/recipes/kexecboot/initramfs-kexecboot-image.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-# Initramfs image providing kexecboot
-# a linux as bootloader implementation
-PR = "r2"
-
-ONLINE_PACKAGE_MANAGEMENT = "none"
-IMAGE_FSTYPES = "cpio.gz cpio.lzma"
-DEPENDS = "lzma-native"
-
-# Deprecated: device nodes are populated by kexecboot now
-# These devices need mmcblk* to be 254 instead of 179
-IMAGE_DEVICE_TABLES_hx4700 = "device_table-oldmmc.txt"
-IMAGE_DEVICE_TABLES_h2200 = "device_table-oldmmc.txt"
-
-export IMAGE_BASENAME = "initramfs-kexecboot-image"
-
-# avoid circular dependencies
-EXTRA_IMAGEDEPENDS = ""
-
-IMAGE_INSTALL = "kexecboot"
-
-IMAGE_LINGUAS = ""
-IMAGE_LOGIN_MANAGER = ""
-IMAGE_INIT_MANAGER = ""
-IMAGE_INITSCRIPTS = ""
-IMAGE_DEV_MANAGER = ""
-
-inherit image
diff --git a/recipes/kexecboot/kexecboot-cfg_0.1.bb b/recipes/kexecboot/kexecboot-cfg_0.1.bb
index b867457e22..f988f46781 100644
--- a/recipes/kexecboot/kexecboot-cfg_0.1.bb
+++ b/recipes/kexecboot/kexecboot-cfg_0.1.bb
@@ -18,7 +18,7 @@ CMDLINE_ROTATE_akita = "fbcon=rotate:1"
CMDLINE_ROTATE_collie = "fbcon=rotate:1"
CMDLINE_ROTATE_poodle = "fbcon=rotate:1"
-#CMDLINE_OTHER = "dyntick=enable"
+#CMDLINE_OTHER = "dyntick=enable"
CMDLINE_OTHER = ""
CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
@@ -37,28 +37,24 @@ do_configure_prepend () {
do_install_prepend () {
- echo "# Show this label in kexecboot menu." >> ${S}/boot.cfg
- echo "LABEL=${DISTRO}" >> ${S}/boot.cfg
- echo "#" >> ${S}/boot.cfg
-
- echo "# Specify full path to the kernel." >> ${S}/boot.cfg
- echo "KERNEL=/boot/${KERNEL_IMAGETYPE}" >> ${S}/boot.cfg
- echo "#" >> ${S}/boot.cfg
-
- echo "# Append this tags to the kernel cmdline." >> ${S}/boot.cfg
- echo "APPEND=${CMDLINE}" >> ${S}/boot.cfg
- echo "#" >> ${S}/boot.cfg
-
- echo "# Specify full path for a custom distro-icon for the menu-item." >> ${S}/boot.cfg
- echo "# If not set, use device-icons as default (NAND, SD, CF, ...)." >> ${S}/boot.cfg
- echo "#ICON=/boot/icon.xpm" >> ${S}/boot.cfg
- echo "#" >> ${S}/boot.cfg
-
- echo "# Priority of item in kexecboot menu." >> ${S}/boot.cfg
- echo "# Items with highest priority will be shown at top of menu." >> ${S}/boot.cfg
- echo "# Default: 0 (lowest, ordered by device ordering)" >> ${S}/boot.cfg
- echo "#PRIORITY=10" >> ${S}/boot.cfg
- echo "#" >> ${S}/boot.cfg
+echo '# Show this label in kexecboot menu.
+LABEL=${DISTRO}
+#
+# Specify full kernel path on target.
+KERNEL=/boot/${KERNEL_IMAGETYPE}
+#
+# Append this tags to the kernel cmdline.
+APPEND=${CMDLINE}
+#
+# Specify full path for a custom distro-icon for the menu-item.
+# If not set, use device-icons as default (NAND, SD, CF, ...).
+# ICON=/boot/icon.xpm
+#
+# Priority of item in kexecboot menu.
+# Items with highest priority will be shown at top of menu.
+# Default: 0 (lowest, ordered by device ordering)
+# PRIORITY=10
+#' >> ${S}/boot.cfg
}
do_install () {
diff --git a/recipes/kexecboot/kexecboot.inc b/recipes/kexecboot/kexecboot.inc
index 5db3414821..3f37f9e720 100644
--- a/recipes/kexecboot/kexecboot.inc
+++ b/recipes/kexecboot/kexecboot.inc
@@ -9,12 +9,24 @@ inherit autotools
# ./make-image-header.sh <file>.png HAND
SRC_URI += "file://logo-img.h \
- file://logo.png \
- "
+ file://logo.png \
+ "
export CC=${TARGET_PREFIX}klcc
-# for output on serial console: --enable-debug
+# Defaults as in ver 0.5+0.6b
+# --with_static_linking=no
+# --with_fbmenu=yes
+# --with_cfgfiles=yes
+# --with_icons=yes
+# --with_zaurus=no
+# --with_zimage=yes
+# --with_uimage=no
+# --with_machine_kernel=no
+# --enable_devices_recreating="yes"
+# --enable_debug="no"
+# --enable_host_debug="no"
+
EXTRA_OECONF_akita = "--with-zaurus"
EXTRA_OECONF_c7x0 = "--with-zaurus"
EXTRA_OECONF_spitz = "--with-zaurus"
@@ -24,20 +36,20 @@ EXTRA_OECONF_tosa = "--with-zaurus"
EXTRA_OECONF_omap3 = "--with-uimage"
do_configure_prepend () {
- install -m 0644 ${WORKDIR}/logo-img.h ${S}/res/
- install -m 0644 ${WORKDIR}/logo.png ${S}/res/
+ install -m 0644 ${WORKDIR}/logo-img.h ${S}/res/
+ install -m 0644 ${WORKDIR}/logo.png ${S}/res/
}
do_install () {
- install -d ${D}${bindir}
- install -m 0755 kexecboot ${D}${bindir}/
+ install -d ${D}${bindir}
+ install -m 0755 kexecboot ${D}${bindir}/
- install -d ${D}/proc
- install -d ${D}/mnt
+ install -d ${D}/proc
+ install -d ${D}/mnt
}
FILES_${PN} += " ${bindir}/kexecboot /init /proc /mnt"
pkg_postinst_${PN} () {
- ln -sf ${bindir}/kexecboot $D/init
+ ln -sf ${bindir}/kexecboot $D/init
}
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/akita/defconfig b/recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/akita/defconfig
deleted file mode 100644
index a66b4b0a2f..0000000000
--- a/recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/akita/defconfig
+++ /dev/null
@@ -1,1307 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.33-rc3
-# Sun Jan 10 14:55:55 2010
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_HAVE_LATENCYTOP_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_ARCH_HAS_CPUFREQ=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-CONFIG_CONSTRUCTORS=y
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-
-#
-# RCU Subsystem
-#
-CONFIG_TREE_RCU=y
-# CONFIG_TREE_PREEMPT_RCU is not set
-# CONFIG_TINY_RCU is not set
-# CONFIG_RCU_TRACE is not set
-CONFIG_RCU_FANOUT=32
-# CONFIG_RCU_FANOUT_EXACT is not set
-# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_GROUP_SCHED is not set
-# CONFIG_CGROUPS is not set
-# CONFIG_SYSFS_DEPRECATED_V2 is not set
-# CONFIG_RELAY is not set
-# CONFIG_NAMESPACES is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE="initramfs.cpio.lzma"
-CONFIG_INITRAMFS_ROOT_UID=0
-CONFIG_INITRAMFS_ROOT_GID=0
-CONFIG_RD_GZIP=y
-# CONFIG_RD_BZIP2 is not set
-CONFIG_RD_LZMA=y
-# CONFIG_INITRAMFS_COMPRESSION_NONE is not set
-# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
-# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
-CONFIG_INITRAMFS_COMPRESSION_LZMA=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_ANON_INODES=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-# CONFIG_SYSCTL_SYSCALL is not set
-# CONFIG_KALLSYMS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-# CONFIG_ELF_CORE is not set
-# CONFIG_BASE_FULL is not set
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_AIO=y
-
-#
-# Kernel Performance Events And Counters
-#
-CONFIG_VM_EVENT_COUNTERS=y
-# CONFIG_SLUB_DEBUG is not set
-# CONFIG_COMPAT_BRK is not set
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-# CONFIG_SLOB is not set
-# CONFIG_PROFILING is not set
-CONFIG_HAVE_OPROFILE=y
-CONFIG_HAVE_KPROBES=y
-CONFIG_HAVE_KRETPROBES=y
-CONFIG_HAVE_CLK=y
-
-#
-# GCOV-based kernel profiling
-#
-# CONFIG_SLOW_WORK is not set
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_RT_MUTEXES=y
-CONFIG_BASE_SMALL=1
-# CONFIG_MODULES is not set
-CONFIG_BLOCK=y
-# CONFIG_LBDAF is not set
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_INTEGRITY is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_DEADLINE=y
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="deadline"
-# CONFIG_INLINE_SPIN_TRYLOCK is not set
-# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK is not set
-# CONFIG_INLINE_SPIN_LOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-CONFIG_INLINE_SPIN_UNLOCK=y
-# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
-# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_READ_TRYLOCK is not set
-# CONFIG_INLINE_READ_LOCK is not set
-# CONFIG_INLINE_READ_LOCK_BH is not set
-# CONFIG_INLINE_READ_LOCK_IRQ is not set
-# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-CONFIG_INLINE_READ_UNLOCK=y
-# CONFIG_INLINE_READ_UNLOCK_BH is not set
-CONFIG_INLINE_READ_UNLOCK_IRQ=y
-# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_WRITE_TRYLOCK is not set
-# CONFIG_INLINE_WRITE_LOCK is not set
-# CONFIG_INLINE_WRITE_LOCK_BH is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-CONFIG_INLINE_WRITE_UNLOCK=y
-# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
-# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-# CONFIG_MUTEX_SPIN_ON_OWNER is not set
-CONFIG_FREEZER=y
-
-#
-# System Type
-#
-CONFIG_MMU=y
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_GEMINI is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_STMP3XXX is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_NOMADIK is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_DOVE is not set
-# CONFIG_ARCH_KIRKWOOD is not set
-# CONFIG_ARCH_LOKI is not set
-# CONFIG_ARCH_MV78XX0 is not set
-# CONFIG_ARCH_ORION5X is not set
-# CONFIG_ARCH_MMP is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_W90X900 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_MSM is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_S3C64XX is not set
-# CONFIG_ARCH_S5PC1XX is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_U300 is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_BCMRING is not set
-# CONFIG_ARCH_U8500 is not set
-
-#
-# Intel PXA2xx/PXA3xx Implementations
-#
-
-#
-# Intel/Marvell Dev Platforms (sorted by hardware release time)
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_MACH_ZYLONITE300 is not set
-# CONFIG_MACH_ZYLONITE320 is not set
-# CONFIG_MACH_LITTLETON is not set
-# CONFIG_MACH_TAVOREVB is not set
-# CONFIG_MACH_SAAR is not set
-
-#
-# Third Party Dev Platforms (sorted by vendor name)
-#
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_ARCH_VIPER is not set
-# CONFIG_MACH_ARCOM_ZEUS is not set
-# CONFIG_MACH_BALLOON3 is not set
-# CONFIG_MACH_CSB726 is not set
-# CONFIG_MACH_ARMCORE is not set
-# CONFIG_MACH_EM_X270 is not set
-# CONFIG_MACH_EXEDA is not set
-# CONFIG_MACH_CM_X300 is not set
-# CONFIG_ARCH_GUMSTIX is not set
-# CONFIG_MACH_INTELMOTE2 is not set
-# CONFIG_MACH_STARGATE2 is not set
-# CONFIG_MACH_XCEP is not set
-# CONFIG_TRIZEPS_PXA is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_PCM027 is not set
-# CONFIG_MACH_COLIBRI is not set
-# CONFIG_MACH_COLIBRI300 is not set
-# CONFIG_MACH_COLIBRI320 is not set
-
-#
-# End-user Products (sorted by vendor name)
-#
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_H5000 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_MIOA701 is not set
-# CONFIG_PXA_EZX is not set
-# CONFIG_MACH_MP900C is not set
-# CONFIG_ARCH_PXA_PALM is not set
-CONFIG_PXA_SHARPSL=y
-CONFIG_SHARPSL_PM=y
-# CONFIG_MACH_POODLE is not set
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-# CONFIG_MACH_TOSA is not set
-# CONFIG_ARCH_PXA_ESERIES is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-CONFIG_PLAT_PXA=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_PABRT_LEGACY=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_ARM_L1_CACHE_SHIFT=5
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARP_SCOOP=y
-CONFIG_COMMON_CLKDEV=y
-
-#
-# Bus support
-#
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_PCCARD=y
-CONFIG_PCMCIA=y
-# CONFIG_PCMCIA_LOAD_CIS is not set
-# CONFIG_PCMCIA_IOCTL is not set
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_SOC_COMMON=y
-CONFIG_PCMCIA_PXA2XX=y
-# CONFIG_PCMCIA_DEBUG is not set
-
-#
-# Kernel Features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_1G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_HZ=100
-CONFIG_AEABI=y
-# CONFIG_OABI_COMPAT is not set
-# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
-# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
-# CONFIG_HIGHMEM is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_SPLIT_PTLOCK_CPUS=999999
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=0
-CONFIG_VIRT_TO_BUS=y
-# CONFIG_KSM is not set
-CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
-CONFIG_ALIGNMENT_TRAP=y
-# CONFIG_UACCESS_WITH_MEMCPY is not set
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0
-CONFIG_ZBOOT_ROM_BSS=0
-CONFIG_CMDLINE="console=tty1 console=ttyS0,115200n8 loglevel=3 "
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-CONFIG_ATAGS_PROC=y
-
-#
-# CPU Power Management
-#
-# CONFIG_CPU_FREQ is not set
-# CONFIG_CPU_IDLE is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND=y
-CONFIG_SUSPEND_FREEZER=y
-CONFIG_APM_EMULATION=y
-# CONFIG_PM_RUNTIME is not set
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-# CONFIG_NET is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_DEVTMPFS is not set
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-CONFIG_FIRMWARE_IN_KERNEL=y
-CONFIG_EXTRA_FIRMWARE=""
-# CONFIG_SYS_HYPERVISOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-# CONFIG_MTD_AR7_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-# CONFIG_MTD_OOPS is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_PHYSMAP=y
-# CONFIG_MTD_GPIO_ADDR is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SST25L is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_H1900 is not set
-# CONFIG_MTD_NAND_GPIO is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# LPDDR flash memory drivers
-#
-# CONFIG_MTD_LPDDR is not set
-
-#
-# UBI - Unsorted block images
-#
-CONFIG_MTD_UBI=y
-CONFIG_MTD_UBI_WL_THRESHOLD=4096
-CONFIG_MTD_UBI_BEB_RESERVE=1
-# CONFIG_MTD_UBI_GLUEBI is not set
-
-#
-# UBI debugging options
-#
-# CONFIG_MTD_UBI_DEBUG is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-
-#
-# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
-#
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_MG_DISK is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_AD525X_DPOT is not set
-# CONFIG_ICS932S401 is not set
-# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_ISL29003 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_TI_DAC7512 is not set
-# CONFIG_C2PORT is not set
-
-#
-# EEPROM support
-#
-# CONFIG_EEPROM_AT24 is not set
-# CONFIG_EEPROM_AT25 is not set
-# CONFIG_EEPROM_LEGACY is not set
-# CONFIG_EEPROM_MAX6875 is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_IWMC3200TOP is not set
-CONFIG_HAVE_IDE=y
-CONFIG_IDE=y
-
-#
-# Please see Documentation/ide/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_IDE_GD=y
-CONFIG_IDE_GD_ATA=y
-# CONFIG_IDE_GD_ATAPI is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-CONFIG_IDE_PROC_FS=y
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-# CONFIG_INPUT_SPARSEKMAP is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_APMPOWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ADP5588 is not set
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_QT2160 is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_GPIO is not set
-CONFIG_KEYBOARD_MATRIX=y
-# CONFIG_KEYBOARD_LM8323 is not set
-# CONFIG_KEYBOARD_MAX7359 is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_OPENCORES is not set
-# CONFIG_KEYBOARD_PXA27x is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_ADS7846=y
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
-# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
-# CONFIG_TOUCHSCREEN_AD7879 is not set
-# CONFIG_TOUCHSCREEN_CORGI is not set
-# CONFIG_TOUCHSCREEN_DYNAPRO is not set
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-# CONFIG_TOUCHSCREEN_MCS5000 is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_TOUCHSCREEN_TSC2007 is not set
-# CONFIG_TOUCHSCREEN_W90X900 is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_UINPUT is not set
-# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_CONSOLE_TRANSLATIONS=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_DEVKMEM is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-# CONFIG_SERIAL_MAX3100 is not set
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_COMPAT=y
-# CONFIG_I2C_CHARDEV is not set
-CONFIG_I2C_HELPER_AUTO=y
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# I2C system bus drivers (mostly embedded / system-on-chip)
-#
-# CONFIG_I2C_DESIGNWARE is not set
-# CONFIG_I2C_GPIO is not set
-# CONFIG_I2C_OCORES is not set
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_SIMTEC is not set
-
-#
-# External I2C/SMBus adapter drivers
-#
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_TAOS_EVM is not set
-
-#
-# Other I2C/SMBus bus drivers
-#
-# CONFIG_I2C_PCA_PLATFORM is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-CONFIG_SPI=y
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-# CONFIG_SPI_BITBANG is not set
-# CONFIG_SPI_GPIO is not set
-CONFIG_SPI_PXA2XX=y
-# CONFIG_SPI_XILINX is not set
-# CONFIG_SPI_DESIGNWARE is not set
-
-#
-# SPI Protocol Masters
-#
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-
-#
-# PPS support
-#
-# CONFIG_PPS is not set
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_GPIOLIB=y
-# CONFIG_GPIO_SYSFS is not set
-
-#
-# Memory mapped GPIO expanders:
-#
-
-#
-# I2C GPIO expanders:
-#
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_PCA953X is not set
-# CONFIG_GPIO_PCF857X is not set
-
-#
-# PCI GPIO expanders:
-#
-
-#
-# SPI GPIO expanders:
-#
-# CONFIG_GPIO_MAX7301 is not set
-# CONFIG_GPIO_MCP23S08 is not set
-# CONFIG_GPIO_MC33880 is not set
-
-#
-# AC97 GPIO expanders:
-#
-# CONFIG_W1 is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_BATTERY_DS2782 is not set
-# CONFIG_BATTERY_BQ27x00 is not set
-# CONFIG_BATTERY_MAX17040 is not set
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Native drivers
-#
-# CONFIG_SENSORS_AD7414 is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADCXX is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADT7462 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7473 is not set
-# CONFIG_SENSORS_ADT7475 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_G760A is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM70 is not set
-# CONFIG_SENSORS_LM73 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_LTC4215 is not set
-# CONFIG_SENSORS_LTC4245 is not set
-# CONFIG_SENSORS_LM95241 is not set
-CONFIG_SENSORS_MAX1111=y
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_SHT15 is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_TMP401 is not set
-# CONFIG_SENSORS_TMP421 is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83L786NG is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_SENSORS_LIS3_SPI is not set
-# CONFIG_SENSORS_LIS3_I2C is not set
-# CONFIG_THERMAL is not set
-# CONFIG_WATCHDOG is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-# CONFIG_SSB is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_MFD_ASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_TPS65010 is not set
-# CONFIG_TWL4030_CORE is not set
-# CONFIG_MFD_TMIO is not set
-# CONFIG_MFD_T7L66XB is not set
-# CONFIG_MFD_TC6387XB is not set
-# CONFIG_MFD_TC6393XB is not set
-# CONFIG_PMIC_DA903X is not set
-# CONFIG_PMIC_ADP5520 is not set
-# CONFIG_MFD_WM8400 is not set
-# CONFIG_MFD_WM831X is not set
-# CONFIG_MFD_WM8350_I2C is not set
-# CONFIG_MFD_PCF50633 is not set
-# CONFIG_MFD_MC13783 is not set
-# CONFIG_AB3100_CORE is not set
-# CONFIG_EZX_PCAP is not set
-# CONFIG_MFD_88PM8607 is not set
-# CONFIG_AB4500_CORE is not set
-# CONFIG_REGULATOR is not set
-# CONFIG_MEDIA_SUPPORT is not set
-
-#
-# Graphics support
-#
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_BOOT_VESA_SUPPORT is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_OVERLAY is not set
-# CONFIG_FB_PXA_SMARTPANEL is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_FB_BROADSHEET is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_CORGI=y
-# CONFIG_LCD_LMS283GF05 is not set
-# CONFIG_LCD_LTV350QV is not set
-# CONFIG_LCD_ILI9320 is not set
-# CONFIG_LCD_TDO24M is not set
-# CONFIG_LCD_VGG2432A4 is not set
-# CONFIG_LCD_PLATFORM is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_GENERIC=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-# CONFIG_SOUND is not set
-# CONFIG_HID_SUPPORT is not set
-# CONFIG_USB_SUPPORT is not set
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD/SDIO Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-# CONFIG_SDIO_UART is not set
-# CONFIG_MMC_TEST is not set
-
-#
-# MMC/SD/SDIO Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_SDHCI is not set
-# CONFIG_MMC_AT91 is not set
-# CONFIG_MMC_ATMELMCI is not set
-# CONFIG_MMC_SPI is not set
-# CONFIG_MEMSTICK is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_PCA9532 is not set
-CONFIG_LEDS_GPIO=y
-CONFIG_LEDS_GPIO_PLATFORM=y
-# CONFIG_LEDS_LP3944 is not set
-# CONFIG_LEDS_PCA955X is not set
-# CONFIG_LEDS_DAC124S085 is not set
-# CONFIG_LEDS_BD2802 is not set
-# CONFIG_LEDS_LT3593 is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_GPIO is not set
-# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
-
-#
-# iptables trigger is under Netfilter config (LED target)
-#
-# CONFIG_ACCESSIBILITY is not set
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS is not set
-# CONFIG_DMADEVICES is not set
-# CONFIG_AUXDISPLAY is not set
-# CONFIG_UIO is not set
-
-#
-# TI VLYNQ
-#
-# CONFIG_STAGING is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_EXT4_FS=y
-# CONFIG_EXT4_FS_XATTR is not set
-# CONFIG_EXT4_DEBUG is not set
-CONFIG_JBD=y
-CONFIG_JBD2=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_BTRFS_FS is not set
-# CONFIG_NILFS2_FS is not set
-# CONFIG_FILE_LOCKING is not set
-# CONFIG_FSNOTIFY is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_INOTIFY is not set
-# CONFIG_INOTIFY_USER is not set
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# Caches
-#
-# CONFIG_FSCACHE is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-# CONFIG_PROC_PAGE_MONITOR is not set
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_CONFIGFS_FS is not set
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_UBIFS_FS=y
-# CONFIG_UBIFS_FS_XATTR is not set
-CONFIG_UBIFS_FS_ADVANCED_COMPR=y
-CONFIG_UBIFS_FS_LZO=y
-CONFIG_UBIFS_FS_ZLIB=y
-# CONFIG_UBIFS_FS_DEBUG is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_OMFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SYSV68_PARTITION is not set
-# CONFIG_NLS is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_ENABLE_WARN_DEPRECATED is not set
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_FRAME_WARN=2048
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_STRIP_ASM_SYMS is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_MEMORY_INIT is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-# CONFIG_LATENCYTOP is not set
-# CONFIG_SYSCTL_SYSCALL_CHECK is not set
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_TRACING_SUPPORT=y
-# CONFIG_FTRACE is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_ARM_UNWIND is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_OC_ETM is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITYFS is not set
-# CONFIG_DEFAULT_SECURITY_SELINUX is not set
-# CONFIG_DEFAULT_SECURITY_SMACK is not set
-# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
-CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_DEFAULT_SECURITY=""
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_ALGAPI2=y
-# CONFIG_CRYPTO_MANAGER is not set
-# CONFIG_CRYPTO_MANAGER2 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-# CONFIG_CRYPTO_CBC is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-# CONFIG_CRYPTO_ECB is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_VMAC is not set
-
-#
-# Digest
-#
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_GHASH is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_WP512 is not set
-
-#
-# Ciphers
-#
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-
-#
-# Compression
-#
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_ZLIB is not set
-CONFIG_CRYPTO_LZO=y
-
-#
-# Random Number Generation
-#
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-# CONFIG_CRYPTO_HW is not set
-# CONFIG_BINARY_PRINTF is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-# CONFIG_CRC_CCITT is not set
-CONFIG_CRC16=y
-# CONFIG_CRC_T10DIF is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_DECOMPRESS_GZIP=y
-CONFIG_DECOMPRESS_LZMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/c7x0/defconfig b/recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/c7x0/defconfig
deleted file mode 100644
index 5b125baad0..0000000000
--- a/recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/c7x0/defconfig
+++ /dev/null
@@ -1,1304 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.33-rc3
-# Wed Jan 13 00:16:41 2010
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_HAVE_LATENCYTOP_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_ARCH_HAS_CPUFREQ=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-CONFIG_CONSTRUCTORS=y
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-
-#
-# RCU Subsystem
-#
-CONFIG_TREE_RCU=y
-# CONFIG_TREE_PREEMPT_RCU is not set
-# CONFIG_TINY_RCU is not set
-# CONFIG_RCU_TRACE is not set
-CONFIG_RCU_FANOUT=32
-# CONFIG_RCU_FANOUT_EXACT is not set
-# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_GROUP_SCHED is not set
-# CONFIG_CGROUPS is not set
-# CONFIG_SYSFS_DEPRECATED_V2 is not set
-# CONFIG_RELAY is not set
-# CONFIG_NAMESPACES is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE="initramfs.cpio.lzma"
-CONFIG_INITRAMFS_ROOT_UID=0
-CONFIG_INITRAMFS_ROOT_GID=0
-CONFIG_RD_GZIP=y
-# CONFIG_RD_BZIP2 is not set
-CONFIG_RD_LZMA=y
-# CONFIG_INITRAMFS_COMPRESSION_NONE is not set
-# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
-# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
-CONFIG_INITRAMFS_COMPRESSION_LZMA=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_ANON_INODES=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-# CONFIG_SYSCTL_SYSCALL is not set
-# CONFIG_KALLSYMS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-# CONFIG_ELF_CORE is not set
-# CONFIG_BASE_FULL is not set
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_AIO=y
-
-#
-# Kernel Performance Events And Counters
-#
-CONFIG_VM_EVENT_COUNTERS=y
-# CONFIG_SLUB_DEBUG is not set
-# CONFIG_COMPAT_BRK is not set
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-# CONFIG_SLOB is not set
-# CONFIG_PROFILING is not set
-CONFIG_HAVE_OPROFILE=y
-CONFIG_HAVE_KPROBES=y
-CONFIG_HAVE_KRETPROBES=y
-CONFIG_HAVE_CLK=y
-
-#
-# GCOV-based kernel profiling
-#
-# CONFIG_SLOW_WORK is not set
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_RT_MUTEXES=y
-CONFIG_BASE_SMALL=1
-# CONFIG_MODULES is not set
-CONFIG_BLOCK=y
-# CONFIG_LBDAF is not set
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_INTEGRITY is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_DEADLINE=y
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="deadline"
-# CONFIG_INLINE_SPIN_TRYLOCK is not set
-# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK is not set
-# CONFIG_INLINE_SPIN_LOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-CONFIG_INLINE_SPIN_UNLOCK=y
-# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
-# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_READ_TRYLOCK is not set
-# CONFIG_INLINE_READ_LOCK is not set
-# CONFIG_INLINE_READ_LOCK_BH is not set
-# CONFIG_INLINE_READ_LOCK_IRQ is not set
-# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-CONFIG_INLINE_READ_UNLOCK=y
-# CONFIG_INLINE_READ_UNLOCK_BH is not set
-CONFIG_INLINE_READ_UNLOCK_IRQ=y
-# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_WRITE_TRYLOCK is not set
-# CONFIG_INLINE_WRITE_LOCK is not set
-# CONFIG_INLINE_WRITE_LOCK_BH is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-CONFIG_INLINE_WRITE_UNLOCK=y
-# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
-# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-# CONFIG_MUTEX_SPIN_ON_OWNER is not set
-CONFIG_FREEZER=y
-
-#
-# System Type
-#
-CONFIG_MMU=y
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_GEMINI is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_STMP3XXX is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_NOMADIK is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_DOVE is not set
-# CONFIG_ARCH_KIRKWOOD is not set
-# CONFIG_ARCH_LOKI is not set
-# CONFIG_ARCH_MV78XX0 is not set
-# CONFIG_ARCH_ORION5X is not set
-# CONFIG_ARCH_MMP is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_W90X900 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_MSM is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_S3C64XX is not set
-# CONFIG_ARCH_S5PC1XX is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_U300 is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_BCMRING is not set
-# CONFIG_ARCH_U8500 is not set
-
-#
-# Intel PXA2xx/PXA3xx Implementations
-#
-
-#
-# Intel/Marvell Dev Platforms (sorted by hardware release time)
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_MACH_ZYLONITE300 is not set
-# CONFIG_MACH_ZYLONITE320 is not set
-# CONFIG_MACH_LITTLETON is not set
-# CONFIG_MACH_TAVOREVB is not set
-# CONFIG_MACH_SAAR is not set
-
-#
-# Third Party Dev Platforms (sorted by vendor name)
-#
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_ARCH_VIPER is not set
-# CONFIG_MACH_ARCOM_ZEUS is not set
-# CONFIG_MACH_BALLOON3 is not set
-# CONFIG_MACH_CSB726 is not set
-# CONFIG_MACH_ARMCORE is not set
-# CONFIG_MACH_EM_X270 is not set
-# CONFIG_MACH_EXEDA is not set
-# CONFIG_MACH_CM_X300 is not set
-# CONFIG_ARCH_GUMSTIX is not set
-# CONFIG_MACH_INTELMOTE2 is not set
-# CONFIG_MACH_STARGATE2 is not set
-# CONFIG_MACH_XCEP is not set
-# CONFIG_TRIZEPS_PXA is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_PCM027 is not set
-# CONFIG_MACH_COLIBRI is not set
-# CONFIG_MACH_COLIBRI300 is not set
-# CONFIG_MACH_COLIBRI320 is not set
-
-#
-# End-user Products (sorted by vendor name)
-#
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_H5000 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_MIOA701 is not set
-# CONFIG_PXA_EZX is not set
-# CONFIG_MACH_MP900C is not set
-# CONFIG_ARCH_PXA_PALM is not set
-CONFIG_PXA_SHARPSL=y
-CONFIG_SHARPSL_PM=y
-# CONFIG_MACH_POODLE is not set
-CONFIG_MACH_CORGI=y
-CONFIG_MACH_SHEPHERD=y
-CONFIG_MACH_HUSKY=y
-# CONFIG_MACH_AKITA is not set
-# CONFIG_MACH_SPITZ is not set
-# CONFIG_MACH_BORZOI is not set
-# CONFIG_MACH_TOSA is not set
-# CONFIG_ARCH_PXA_ESERIES is not set
-CONFIG_PXA25x=y
-CONFIG_PXA_SHARP_C7xx=y
-CONFIG_PXA_SSP=y
-CONFIG_PLAT_PXA=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_PABRT_LEGACY=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_ARM_L1_CACHE_SHIFT=5
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARP_SCOOP=y
-CONFIG_COMMON_CLKDEV=y
-
-#
-# Bus support
-#
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_PCCARD=y
-CONFIG_PCMCIA=y
-# CONFIG_PCMCIA_LOAD_CIS is not set
-# CONFIG_PCMCIA_IOCTL is not set
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_SOC_COMMON=y
-CONFIG_PCMCIA_PXA2XX=y
-# CONFIG_PCMCIA_DEBUG is not set
-
-#
-# Kernel Features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_1G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_HZ=100
-CONFIG_AEABI=y
-# CONFIG_OABI_COMPAT is not set
-# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
-# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
-# CONFIG_HIGHMEM is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_SPLIT_PTLOCK_CPUS=999999
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=0
-CONFIG_VIRT_TO_BUS=y
-# CONFIG_KSM is not set
-CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
-CONFIG_ALIGNMENT_TRAP=y
-# CONFIG_UACCESS_WITH_MEMCPY is not set
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0
-CONFIG_ZBOOT_ROM_BSS=0
-CONFIG_CMDLINE="console=tty1 console=ttyS0,115200n8 loglevel=3 "
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-CONFIG_ATAGS_PROC=y
-
-#
-# CPU Power Management
-#
-# CONFIG_CPU_FREQ is not set
-# CONFIG_CPU_IDLE is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND=y
-CONFIG_SUSPEND_FREEZER=y
-CONFIG_APM_EMULATION=y
-# CONFIG_PM_RUNTIME is not set
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-# CONFIG_NET is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_DEVTMPFS is not set
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-CONFIG_FIRMWARE_IN_KERNEL=y
-CONFIG_EXTRA_FIRMWARE=""
-# CONFIG_SYS_HYPERVISOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-# CONFIG_MTD_AR7_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-# CONFIG_MTD_OOPS is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_PHYSMAP=y
-# CONFIG_MTD_PHYSMAP_COMPAT is not set
-# CONFIG_MTD_GPIO_ADDR is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SST25L is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_H1900 is not set
-# CONFIG_MTD_NAND_GPIO is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# LPDDR flash memory drivers
-#
-# CONFIG_MTD_LPDDR is not set
-
-#
-# UBI - Unsorted block images
-#
-CONFIG_MTD_UBI=y
-CONFIG_MTD_UBI_WL_THRESHOLD=4096
-CONFIG_MTD_UBI_BEB_RESERVE=1
-# CONFIG_MTD_UBI_GLUEBI is not set
-
-#
-# UBI debugging options
-#
-# CONFIG_MTD_UBI_DEBUG is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-
-#
-# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
-#
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_MG_DISK is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_AD525X_DPOT is not set
-# CONFIG_ICS932S401 is not set
-# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_ISL29003 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_TI_DAC7512 is not set
-# CONFIG_C2PORT is not set
-
-#
-# EEPROM support
-#
-# CONFIG_EEPROM_AT24 is not set
-# CONFIG_EEPROM_AT25 is not set
-# CONFIG_EEPROM_LEGACY is not set
-# CONFIG_EEPROM_MAX6875 is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_IWMC3200TOP is not set
-CONFIG_HAVE_IDE=y
-CONFIG_IDE=y
-
-#
-# Please see Documentation/ide/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_IDE_GD=y
-CONFIG_IDE_GD_ATA=y
-# CONFIG_IDE_GD_ATAPI is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-CONFIG_IDE_PROC_FS=y
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-# CONFIG_INPUT_SPARSEKMAP is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_APMPOWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ADP5588 is not set
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_QT2160 is not set
-CONFIG_KEYBOARD_CORGI=y
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_KEYBOARD_MATRIX=y
-# CONFIG_KEYBOARD_LM8323 is not set
-# CONFIG_KEYBOARD_MAX7359 is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_OPENCORES is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_ADS7846=y
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
-# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
-# CONFIG_TOUCHSCREEN_AD7879 is not set
-# CONFIG_TOUCHSCREEN_CORGI is not set
-# CONFIG_TOUCHSCREEN_DYNAPRO is not set
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-# CONFIG_TOUCHSCREEN_MCS5000 is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_TOUCHSCREEN_TSC2007 is not set
-# CONFIG_TOUCHSCREEN_W90X900 is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_UINPUT is not set
-# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_CONSOLE_TRANSLATIONS=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_DEVKMEM is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-# CONFIG_SERIAL_MAX3100 is not set
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_COMPAT=y
-# CONFIG_I2C_CHARDEV is not set
-CONFIG_I2C_HELPER_AUTO=y
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# I2C system bus drivers (mostly embedded / system-on-chip)
-#
-# CONFIG_I2C_DESIGNWARE is not set
-# CONFIG_I2C_GPIO is not set
-# CONFIG_I2C_OCORES is not set
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_SIMTEC is not set
-
-#
-# External I2C/SMBus adapter drivers
-#
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_TAOS_EVM is not set
-
-#
-# Other I2C/SMBus bus drivers
-#
-# CONFIG_I2C_PCA_PLATFORM is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-CONFIG_SPI=y
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-# CONFIG_SPI_BITBANG is not set
-# CONFIG_SPI_GPIO is not set
-CONFIG_SPI_PXA2XX=y
-# CONFIG_SPI_XILINX is not set
-# CONFIG_SPI_DESIGNWARE is not set
-
-#
-# SPI Protocol Masters
-#
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-
-#
-# PPS support
-#
-# CONFIG_PPS is not set
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_GPIOLIB=y
-# CONFIG_GPIO_SYSFS is not set
-
-#
-# Memory mapped GPIO expanders:
-#
-
-#
-# I2C GPIO expanders:
-#
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_PCA953X is not set
-# CONFIG_GPIO_PCF857X is not set
-
-#
-# PCI GPIO expanders:
-#
-
-#
-# SPI GPIO expanders:
-#
-# CONFIG_GPIO_MAX7301 is not set
-# CONFIG_GPIO_MCP23S08 is not set
-# CONFIG_GPIO_MC33880 is not set
-
-#
-# AC97 GPIO expanders:
-#
-# CONFIG_W1 is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_BATTERY_DS2782 is not set
-# CONFIG_BATTERY_BQ27x00 is not set
-# CONFIG_BATTERY_MAX17040 is not set
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Native drivers
-#
-# CONFIG_SENSORS_AD7414 is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADCXX is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADT7462 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7473 is not set
-# CONFIG_SENSORS_ADT7475 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_G760A is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM70 is not set
-# CONFIG_SENSORS_LM73 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_LTC4215 is not set
-# CONFIG_SENSORS_LTC4245 is not set
-# CONFIG_SENSORS_LM95241 is not set
-CONFIG_SENSORS_MAX1111=y
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_SHT15 is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_TMP401 is not set
-# CONFIG_SENSORS_TMP421 is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83L786NG is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_SENSORS_LIS3_SPI is not set
-# CONFIG_SENSORS_LIS3_I2C is not set
-# CONFIG_THERMAL is not set
-# CONFIG_WATCHDOG is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-# CONFIG_SSB is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_MFD_ASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_TPS65010 is not set
-# CONFIG_TWL4030_CORE is not set
-# CONFIG_MFD_TMIO is not set
-# CONFIG_MFD_T7L66XB is not set
-# CONFIG_MFD_TC6387XB is not set
-# CONFIG_MFD_TC6393XB is not set
-# CONFIG_PMIC_DA903X is not set
-# CONFIG_PMIC_ADP5520 is not set
-# CONFIG_MFD_WM8400 is not set
-# CONFIG_MFD_WM831X is not set
-# CONFIG_MFD_WM8350_I2C is not set
-# CONFIG_MFD_PCF50633 is not set
-# CONFIG_MFD_MC13783 is not set
-# CONFIG_AB3100_CORE is not set
-# CONFIG_EZX_PCAP is not set
-# CONFIG_MFD_88PM8607 is not set
-# CONFIG_AB4500_CORE is not set
-# CONFIG_REGULATOR is not set
-# CONFIG_MEDIA_SUPPORT is not set
-
-#
-# Graphics support
-#
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_BOOT_VESA_SUPPORT is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MBX is not set
-CONFIG_FB_W100=y
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_FB_BROADSHEET is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_CORGI=y
-# CONFIG_LCD_LMS283GF05 is not set
-# CONFIG_LCD_LTV350QV is not set
-# CONFIG_LCD_ILI9320 is not set
-# CONFIG_LCD_TDO24M is not set
-# CONFIG_LCD_VGG2432A4 is not set
-# CONFIG_LCD_PLATFORM is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_GENERIC=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-# CONFIG_SOUND is not set
-# CONFIG_HID_SUPPORT is not set
-# CONFIG_USB_SUPPORT is not set
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD/SDIO Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-# CONFIG_SDIO_UART is not set
-# CONFIG_MMC_TEST is not set
-
-#
-# MMC/SD/SDIO Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_SDHCI is not set
-# CONFIG_MMC_AT91 is not set
-# CONFIG_MMC_ATMELMCI is not set
-# CONFIG_MMC_SPI is not set
-# CONFIG_MEMSTICK is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_PCA9532 is not set
-CONFIG_LEDS_GPIO=y
-CONFIG_LEDS_GPIO_PLATFORM=y
-# CONFIG_LEDS_LP3944 is not set
-# CONFIG_LEDS_PCA955X is not set
-# CONFIG_LEDS_DAC124S085 is not set
-# CONFIG_LEDS_BD2802 is not set
-# CONFIG_LEDS_LT3593 is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_GPIO is not set
-# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
-
-#
-# iptables trigger is under Netfilter config (LED target)
-#
-# CONFIG_ACCESSIBILITY is not set
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS is not set
-# CONFIG_DMADEVICES is not set
-# CONFIG_AUXDISPLAY is not set
-# CONFIG_UIO is not set
-
-#
-# TI VLYNQ
-#
-# CONFIG_STAGING is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_EXT4_FS=y
-# CONFIG_EXT4_FS_XATTR is not set
-# CONFIG_EXT4_DEBUG is not set
-CONFIG_JBD=y
-CONFIG_JBD2=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_BTRFS_FS is not set
-# CONFIG_NILFS2_FS is not set
-# CONFIG_FILE_LOCKING is not set
-# CONFIG_FSNOTIFY is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_INOTIFY is not set
-# CONFIG_INOTIFY_USER is not set
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# Caches
-#
-# CONFIG_FSCACHE is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-# CONFIG_PROC_PAGE_MONITOR is not set
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_CONFIGFS_FS is not set
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_UBIFS_FS=y
-# CONFIG_UBIFS_FS_XATTR is not set
-CONFIG_UBIFS_FS_ADVANCED_COMPR=y
-CONFIG_UBIFS_FS_LZO=y
-CONFIG_UBIFS_FS_ZLIB=y
-# CONFIG_UBIFS_FS_DEBUG is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_OMFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SYSV68_PARTITION is not set
-# CONFIG_NLS is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_ENABLE_WARN_DEPRECATED is not set
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_FRAME_WARN=2048
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_STRIP_ASM_SYMS is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_MEMORY_INIT is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-# CONFIG_LATENCYTOP is not set
-# CONFIG_SYSCTL_SYSCALL_CHECK is not set
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_TRACING_SUPPORT=y
-# CONFIG_FTRACE is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_ARM_UNWIND is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_OC_ETM is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITYFS is not set
-# CONFIG_DEFAULT_SECURITY_SELINUX is not set
-# CONFIG_DEFAULT_SECURITY_SMACK is not set
-# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
-CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_DEFAULT_SECURITY=""
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_ALGAPI2=y
-# CONFIG_CRYPTO_MANAGER is not set
-# CONFIG_CRYPTO_MANAGER2 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-# CONFIG_CRYPTO_CBC is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-# CONFIG_CRYPTO_ECB is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_VMAC is not set
-
-#
-# Digest
-#
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_GHASH is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_WP512 is not set
-
-#
-# Ciphers
-#
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-
-#
-# Compression
-#
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_ZLIB is not set
-CONFIG_CRYPTO_LZO=y
-
-#
-# Random Number Generation
-#
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-# CONFIG_CRYPTO_HW is not set
-# CONFIG_BINARY_PRINTF is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-# CONFIG_CRC_CCITT is not set
-CONFIG_CRC16=y
-# CONFIG_CRC_T10DIF is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_DECOMPRESS_GZIP=y
-CONFIG_DECOMPRESS_LZMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/spitz/defconfig b/recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/spitz/defconfig
deleted file mode 100644
index a66b4b0a2f..0000000000
--- a/recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/spitz/defconfig
+++ /dev/null
@@ -1,1307 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.33-rc3
-# Sun Jan 10 14:55:55 2010
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_HAVE_LATENCYTOP_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_ARCH_HAS_CPUFREQ=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-CONFIG_CONSTRUCTORS=y
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-
-#
-# RCU Subsystem
-#
-CONFIG_TREE_RCU=y
-# CONFIG_TREE_PREEMPT_RCU is not set
-# CONFIG_TINY_RCU is not set
-# CONFIG_RCU_TRACE is not set
-CONFIG_RCU_FANOUT=32
-# CONFIG_RCU_FANOUT_EXACT is not set
-# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_GROUP_SCHED is not set
-# CONFIG_CGROUPS is not set
-# CONFIG_SYSFS_DEPRECATED_V2 is not set
-# CONFIG_RELAY is not set
-# CONFIG_NAMESPACES is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE="initramfs.cpio.lzma"
-CONFIG_INITRAMFS_ROOT_UID=0
-CONFIG_INITRAMFS_ROOT_GID=0
-CONFIG_RD_GZIP=y
-# CONFIG_RD_BZIP2 is not set
-CONFIG_RD_LZMA=y
-# CONFIG_INITRAMFS_COMPRESSION_NONE is not set
-# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
-# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
-CONFIG_INITRAMFS_COMPRESSION_LZMA=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_ANON_INODES=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-# CONFIG_SYSCTL_SYSCALL is not set
-# CONFIG_KALLSYMS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-# CONFIG_ELF_CORE is not set
-# CONFIG_BASE_FULL is not set
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_AIO=y
-
-#
-# Kernel Performance Events And Counters
-#
-CONFIG_VM_EVENT_COUNTERS=y
-# CONFIG_SLUB_DEBUG is not set
-# CONFIG_COMPAT_BRK is not set
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-# CONFIG_SLOB is not set
-# CONFIG_PROFILING is not set
-CONFIG_HAVE_OPROFILE=y
-CONFIG_HAVE_KPROBES=y
-CONFIG_HAVE_KRETPROBES=y
-CONFIG_HAVE_CLK=y
-
-#
-# GCOV-based kernel profiling
-#
-# CONFIG_SLOW_WORK is not set
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_RT_MUTEXES=y
-CONFIG_BASE_SMALL=1
-# CONFIG_MODULES is not set
-CONFIG_BLOCK=y
-# CONFIG_LBDAF is not set
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_INTEGRITY is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_DEADLINE=y
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="deadline"
-# CONFIG_INLINE_SPIN_TRYLOCK is not set
-# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK is not set
-# CONFIG_INLINE_SPIN_LOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-CONFIG_INLINE_SPIN_UNLOCK=y
-# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
-# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_READ_TRYLOCK is not set
-# CONFIG_INLINE_READ_LOCK is not set
-# CONFIG_INLINE_READ_LOCK_BH is not set
-# CONFIG_INLINE_READ_LOCK_IRQ is not set
-# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-CONFIG_INLINE_READ_UNLOCK=y
-# CONFIG_INLINE_READ_UNLOCK_BH is not set
-CONFIG_INLINE_READ_UNLOCK_IRQ=y
-# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_WRITE_TRYLOCK is not set
-# CONFIG_INLINE_WRITE_LOCK is not set
-# CONFIG_INLINE_WRITE_LOCK_BH is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-CONFIG_INLINE_WRITE_UNLOCK=y
-# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
-# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-# CONFIG_MUTEX_SPIN_ON_OWNER is not set
-CONFIG_FREEZER=y
-
-#
-# System Type
-#
-CONFIG_MMU=y
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_GEMINI is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_STMP3XXX is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_NOMADIK is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_DOVE is not set
-# CONFIG_ARCH_KIRKWOOD is not set
-# CONFIG_ARCH_LOKI is not set
-# CONFIG_ARCH_MV78XX0 is not set
-# CONFIG_ARCH_ORION5X is not set
-# CONFIG_ARCH_MMP is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_W90X900 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_MSM is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_S3C64XX is not set
-# CONFIG_ARCH_S5PC1XX is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_U300 is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_BCMRING is not set
-# CONFIG_ARCH_U8500 is not set
-
-#
-# Intel PXA2xx/PXA3xx Implementations
-#
-
-#
-# Intel/Marvell Dev Platforms (sorted by hardware release time)
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_MACH_ZYLONITE300 is not set
-# CONFIG_MACH_ZYLONITE320 is not set
-# CONFIG_MACH_LITTLETON is not set
-# CONFIG_MACH_TAVOREVB is not set
-# CONFIG_MACH_SAAR is not set
-
-#
-# Third Party Dev Platforms (sorted by vendor name)
-#
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_ARCH_VIPER is not set
-# CONFIG_MACH_ARCOM_ZEUS is not set
-# CONFIG_MACH_BALLOON3 is not set
-# CONFIG_MACH_CSB726 is not set
-# CONFIG_MACH_ARMCORE is not set
-# CONFIG_MACH_EM_X270 is not set
-# CONFIG_MACH_EXEDA is not set
-# CONFIG_MACH_CM_X300 is not set
-# CONFIG_ARCH_GUMSTIX is not set
-# CONFIG_MACH_INTELMOTE2 is not set
-# CONFIG_MACH_STARGATE2 is not set
-# CONFIG_MACH_XCEP is not set
-# CONFIG_TRIZEPS_PXA is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_PCM027 is not set
-# CONFIG_MACH_COLIBRI is not set
-# CONFIG_MACH_COLIBRI300 is not set
-# CONFIG_MACH_COLIBRI320 is not set
-
-#
-# End-user Products (sorted by vendor name)
-#
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_H5000 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_MIOA701 is not set
-# CONFIG_PXA_EZX is not set
-# CONFIG_MACH_MP900C is not set
-# CONFIG_ARCH_PXA_PALM is not set
-CONFIG_PXA_SHARPSL=y
-CONFIG_SHARPSL_PM=y
-# CONFIG_MACH_POODLE is not set
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-# CONFIG_MACH_TOSA is not set
-# CONFIG_ARCH_PXA_ESERIES is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-CONFIG_PLAT_PXA=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_PABRT_LEGACY=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_ARM_L1_CACHE_SHIFT=5
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARP_SCOOP=y
-CONFIG_COMMON_CLKDEV=y
-
-#
-# Bus support
-#
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_PCCARD=y
-CONFIG_PCMCIA=y
-# CONFIG_PCMCIA_LOAD_CIS is not set
-# CONFIG_PCMCIA_IOCTL is not set
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_SOC_COMMON=y
-CONFIG_PCMCIA_PXA2XX=y
-# CONFIG_PCMCIA_DEBUG is not set
-
-#
-# Kernel Features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_1G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_HZ=100
-CONFIG_AEABI=y
-# CONFIG_OABI_COMPAT is not set
-# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
-# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
-# CONFIG_HIGHMEM is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_SPLIT_PTLOCK_CPUS=999999
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=0
-CONFIG_VIRT_TO_BUS=y
-# CONFIG_KSM is not set
-CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
-CONFIG_ALIGNMENT_TRAP=y
-# CONFIG_UACCESS_WITH_MEMCPY is not set
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0
-CONFIG_ZBOOT_ROM_BSS=0
-CONFIG_CMDLINE="console=tty1 console=ttyS0,115200n8 loglevel=3 "
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-CONFIG_ATAGS_PROC=y
-
-#
-# CPU Power Management
-#
-# CONFIG_CPU_FREQ is not set
-# CONFIG_CPU_IDLE is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND=y
-CONFIG_SUSPEND_FREEZER=y
-CONFIG_APM_EMULATION=y
-# CONFIG_PM_RUNTIME is not set
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-# CONFIG_NET is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_DEVTMPFS is not set
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-CONFIG_FIRMWARE_IN_KERNEL=y
-CONFIG_EXTRA_FIRMWARE=""
-# CONFIG_SYS_HYPERVISOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-# CONFIG_MTD_AR7_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-# CONFIG_MTD_OOPS is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_PHYSMAP=y
-# CONFIG_MTD_GPIO_ADDR is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SST25L is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_H1900 is not set
-# CONFIG_MTD_NAND_GPIO is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# LPDDR flash memory drivers
-#
-# CONFIG_MTD_LPDDR is not set
-
-#
-# UBI - Unsorted block images
-#
-CONFIG_MTD_UBI=y
-CONFIG_MTD_UBI_WL_THRESHOLD=4096
-CONFIG_MTD_UBI_BEB_RESERVE=1
-# CONFIG_MTD_UBI_GLUEBI is not set
-
-#
-# UBI debugging options
-#
-# CONFIG_MTD_UBI_DEBUG is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-
-#
-# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
-#
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_MG_DISK is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_AD525X_DPOT is not set
-# CONFIG_ICS932S401 is not set
-# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_ISL29003 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_TI_DAC7512 is not set
-# CONFIG_C2PORT is not set
-
-#
-# EEPROM support
-#
-# CONFIG_EEPROM_AT24 is not set
-# CONFIG_EEPROM_AT25 is not set
-# CONFIG_EEPROM_LEGACY is not set
-# CONFIG_EEPROM_MAX6875 is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_IWMC3200TOP is not set
-CONFIG_HAVE_IDE=y
-CONFIG_IDE=y
-
-#
-# Please see Documentation/ide/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_IDE_GD=y
-CONFIG_IDE_GD_ATA=y
-# CONFIG_IDE_GD_ATAPI is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-CONFIG_IDE_PROC_FS=y
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-# CONFIG_INPUT_SPARSEKMAP is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_APMPOWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ADP5588 is not set
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_QT2160 is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_GPIO is not set
-CONFIG_KEYBOARD_MATRIX=y
-# CONFIG_KEYBOARD_LM8323 is not set
-# CONFIG_KEYBOARD_MAX7359 is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_OPENCORES is not set
-# CONFIG_KEYBOARD_PXA27x is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_ADS7846=y
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
-# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
-# CONFIG_TOUCHSCREEN_AD7879 is not set
-# CONFIG_TOUCHSCREEN_CORGI is not set
-# CONFIG_TOUCHSCREEN_DYNAPRO is not set
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-# CONFIG_TOUCHSCREEN_MCS5000 is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_TOUCHSCREEN_TSC2007 is not set
-# CONFIG_TOUCHSCREEN_W90X900 is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_UINPUT is not set
-# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_CONSOLE_TRANSLATIONS=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_DEVKMEM is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-# CONFIG_SERIAL_MAX3100 is not set
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_COMPAT=y
-# CONFIG_I2C_CHARDEV is not set
-CONFIG_I2C_HELPER_AUTO=y
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# I2C system bus drivers (mostly embedded / system-on-chip)
-#
-# CONFIG_I2C_DESIGNWARE is not set
-# CONFIG_I2C_GPIO is not set
-# CONFIG_I2C_OCORES is not set
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_SIMTEC is not set
-
-#
-# External I2C/SMBus adapter drivers
-#
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_TAOS_EVM is not set
-
-#
-# Other I2C/SMBus bus drivers
-#
-# CONFIG_I2C_PCA_PLATFORM is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-CONFIG_SPI=y
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-# CONFIG_SPI_BITBANG is not set
-# CONFIG_SPI_GPIO is not set
-CONFIG_SPI_PXA2XX=y
-# CONFIG_SPI_XILINX is not set
-# CONFIG_SPI_DESIGNWARE is not set
-
-#
-# SPI Protocol Masters
-#
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-
-#
-# PPS support
-#
-# CONFIG_PPS is not set
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_GPIOLIB=y
-# CONFIG_GPIO_SYSFS is not set
-
-#
-# Memory mapped GPIO expanders:
-#
-
-#
-# I2C GPIO expanders:
-#
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_PCA953X is not set
-# CONFIG_GPIO_PCF857X is not set
-
-#
-# PCI GPIO expanders:
-#
-
-#
-# SPI GPIO expanders:
-#
-# CONFIG_GPIO_MAX7301 is not set
-# CONFIG_GPIO_MCP23S08 is not set
-# CONFIG_GPIO_MC33880 is not set
-
-#
-# AC97 GPIO expanders:
-#
-# CONFIG_W1 is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_BATTERY_DS2782 is not set
-# CONFIG_BATTERY_BQ27x00 is not set
-# CONFIG_BATTERY_MAX17040 is not set
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Native drivers
-#
-# CONFIG_SENSORS_AD7414 is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADCXX is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADT7462 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7473 is not set
-# CONFIG_SENSORS_ADT7475 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_G760A is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM70 is not set
-# CONFIG_SENSORS_LM73 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_LTC4215 is not set
-# CONFIG_SENSORS_LTC4245 is not set
-# CONFIG_SENSORS_LM95241 is not set
-CONFIG_SENSORS_MAX1111=y
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_SHT15 is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_TMP401 is not set
-# CONFIG_SENSORS_TMP421 is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83L786NG is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_SENSORS_LIS3_SPI is not set
-# CONFIG_SENSORS_LIS3_I2C is not set
-# CONFIG_THERMAL is not set
-# CONFIG_WATCHDOG is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-# CONFIG_SSB is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_MFD_ASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_TPS65010 is not set
-# CONFIG_TWL4030_CORE is not set
-# CONFIG_MFD_TMIO is not set
-# CONFIG_MFD_T7L66XB is not set
-# CONFIG_MFD_TC6387XB is not set
-# CONFIG_MFD_TC6393XB is not set
-# CONFIG_PMIC_DA903X is not set
-# CONFIG_PMIC_ADP5520 is not set
-# CONFIG_MFD_WM8400 is not set
-# CONFIG_MFD_WM831X is not set
-# CONFIG_MFD_WM8350_I2C is not set
-# CONFIG_MFD_PCF50633 is not set
-# CONFIG_MFD_MC13783 is not set
-# CONFIG_AB3100_CORE is not set
-# CONFIG_EZX_PCAP is not set
-# CONFIG_MFD_88PM8607 is not set
-# CONFIG_AB4500_CORE is not set
-# CONFIG_REGULATOR is not set
-# CONFIG_MEDIA_SUPPORT is not set
-
-#
-# Graphics support
-#
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_BOOT_VESA_SUPPORT is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_OVERLAY is not set
-# CONFIG_FB_PXA_SMARTPANEL is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_FB_BROADSHEET is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_CORGI=y
-# CONFIG_LCD_LMS283GF05 is not set
-# CONFIG_LCD_LTV350QV is not set
-# CONFIG_LCD_ILI9320 is not set
-# CONFIG_LCD_TDO24M is not set
-# CONFIG_LCD_VGG2432A4 is not set
-# CONFIG_LCD_PLATFORM is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_GENERIC=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-# CONFIG_SOUND is not set
-# CONFIG_HID_SUPPORT is not set
-# CONFIG_USB_SUPPORT is not set
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD/SDIO Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-# CONFIG_SDIO_UART is not set
-# CONFIG_MMC_TEST is not set
-
-#
-# MMC/SD/SDIO Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_SDHCI is not set
-# CONFIG_MMC_AT91 is not set
-# CONFIG_MMC_ATMELMCI is not set
-# CONFIG_MMC_SPI is not set
-# CONFIG_MEMSTICK is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_PCA9532 is not set
-CONFIG_LEDS_GPIO=y
-CONFIG_LEDS_GPIO_PLATFORM=y
-# CONFIG_LEDS_LP3944 is not set
-# CONFIG_LEDS_PCA955X is not set
-# CONFIG_LEDS_DAC124S085 is not set
-# CONFIG_LEDS_BD2802 is not set
-# CONFIG_LEDS_LT3593 is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_GPIO is not set
-# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
-
-#
-# iptables trigger is under Netfilter config (LED target)
-#
-# CONFIG_ACCESSIBILITY is not set
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS is not set
-# CONFIG_DMADEVICES is not set
-# CONFIG_AUXDISPLAY is not set
-# CONFIG_UIO is not set
-
-#
-# TI VLYNQ
-#
-# CONFIG_STAGING is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_EXT4_FS=y
-# CONFIG_EXT4_FS_XATTR is not set
-# CONFIG_EXT4_DEBUG is not set
-CONFIG_JBD=y
-CONFIG_JBD2=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_BTRFS_FS is not set
-# CONFIG_NILFS2_FS is not set
-# CONFIG_FILE_LOCKING is not set
-# CONFIG_FSNOTIFY is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_INOTIFY is not set
-# CONFIG_INOTIFY_USER is not set
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# Caches
-#
-# CONFIG_FSCACHE is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-# CONFIG_PROC_PAGE_MONITOR is not set
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_CONFIGFS_FS is not set
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_UBIFS_FS=y
-# CONFIG_UBIFS_FS_XATTR is not set
-CONFIG_UBIFS_FS_ADVANCED_COMPR=y
-CONFIG_UBIFS_FS_LZO=y
-CONFIG_UBIFS_FS_ZLIB=y
-# CONFIG_UBIFS_FS_DEBUG is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_OMFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SYSV68_PARTITION is not set
-# CONFIG_NLS is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_ENABLE_WARN_DEPRECATED is not set
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_FRAME_WARN=2048
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_STRIP_ASM_SYMS is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_MEMORY_INIT is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-# CONFIG_LATENCYTOP is not set
-# CONFIG_SYSCTL_SYSCALL_CHECK is not set
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_TRACING_SUPPORT=y
-# CONFIG_FTRACE is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_ARM_UNWIND is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_OC_ETM is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITYFS is not set
-# CONFIG_DEFAULT_SECURITY_SELINUX is not set
-# CONFIG_DEFAULT_SECURITY_SMACK is not set
-# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
-CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_DEFAULT_SECURITY=""
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_ALGAPI2=y
-# CONFIG_CRYPTO_MANAGER is not set
-# CONFIG_CRYPTO_MANAGER2 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-# CONFIG_CRYPTO_CBC is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-# CONFIG_CRYPTO_ECB is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_VMAC is not set
-
-#
-# Digest
-#
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_GHASH is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_WP512 is not set
-
-#
-# Ciphers
-#
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-
-#
-# Compression
-#
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_ZLIB is not set
-CONFIG_CRYPTO_LZO=y
-
-#
-# Random Number Generation
-#
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-# CONFIG_CRYPTO_HW is not set
-# CONFIG_BINARY_PRINTF is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-# CONFIG_CRC_CCITT is not set
-CONFIG_CRC16=y
-# CONFIG_CRC_T10DIF is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_DECOMPRESS_GZIP=y
-CONFIG_DECOMPRESS_LZMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32/akita/defconfig b/recipes/kexecboot/linux-kexecboot-2.6.32/akita/defconfig
index e9d89fed15..c6c4a0b835 100644
--- a/recipes/kexecboot/linux-kexecboot-2.6.32/akita/defconfig
+++ b/recipes/kexecboot/linux-kexecboot-2.6.32/akita/defconfig
@@ -33,6 +33,13 @@ CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_LZO=y
+# CONFIG_KERNEL_GZIP is not set
+# CONFIG_KERNEL_BZIP2 is not set
+CONFIG_KERNEL_LZMA=y
+# CONFIG_KERNEL_LZO is not set
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
@@ -61,12 +68,14 @@ CONFIG_INITRAMFS_SOURCE="initramfs.cpio.gz"
CONFIG_INITRAMFS_ROOT_UID=0
CONFIG_INITRAMFS_ROOT_GID=0
CONFIG_RD_GZIP=y
-CONFIG_RD_BZIP2=y
+# CONFIG_RD_BZIP2 is not set
CONFIG_RD_LZMA=y
+# CONFIG_RD_LZO is not set
# CONFIG_INITRAMFS_COMPRESSION_NONE is not set
-CONFIG_INITRAMFS_COMPRESSION_GZIP=y
+# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
-# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set
+CONFIG_INITRAMFS_COMPRESSION_LZMA=y
+# CONFIG_INITRAMFS_COMPRESSION_LZO is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
@@ -546,14 +555,14 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_QT2160 is not set
# CONFIG_KEYBOARD_CORGI is not set
# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_GPIO=y
+# CONFIG_KEYBOARD_GPIO is not set
CONFIG_KEYBOARD_MATRIX=y
# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_MAX7359 is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_OPENCORES is not set
# CONFIG_KEYBOARD_PXA27x is not set
-CONFIG_KEYBOARD_SPITZ=y
+# CONFIG_KEYBOARD_SPITZ is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
@@ -1235,7 +1244,6 @@ CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_DECOMPRESS_GZIP=y
-CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32/c7x0/defconfig b/recipes/kexecboot/linux-kexecboot-2.6.32/c7x0/defconfig
index 496213c6cb..d8804340df 100644
--- a/recipes/kexecboot/linux-kexecboot-2.6.32/c7x0/defconfig
+++ b/recipes/kexecboot/linux-kexecboot-2.6.32/c7x0/defconfig
@@ -33,6 +33,13 @@ CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_LZO=y
+# CONFIG_KERNEL_GZIP is not set
+# CONFIG_KERNEL_BZIP2 is not set
+CONFIG_KERNEL_LZMA=y
+# CONFIG_KERNEL_LZO is not set
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
@@ -62,10 +69,12 @@ CONFIG_INITRAMFS_ROOT_GID=0
CONFIG_RD_GZIP=y
# CONFIG_RD_BZIP2 is not set
CONFIG_RD_LZMA=y
+# CONFIG_RD_LZO is not set
# CONFIG_INITRAMFS_COMPRESSION_NONE is not set
# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
CONFIG_INITRAMFS_COMPRESSION_LZMA=y
+# CONFIG_INITRAMFS_COMPRESSION_LZO is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
@@ -545,9 +554,9 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ATKBD is not set
# CONFIG_QT2160 is not set
-CONFIG_KEYBOARD_CORGI=y
+# CONFIG_KEYBOARD_CORGI is not set
# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_GPIO=y
+# CONFIG_KEYBOARD_GPIO is not set
CONFIG_KEYBOARD_MATRIX=y
# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_MAX7359 is not set
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32/spitz/defconfig b/recipes/kexecboot/linux-kexecboot-2.6.32/spitz/defconfig
index e9d89fed15..c6c4a0b835 100644
--- a/recipes/kexecboot/linux-kexecboot-2.6.32/spitz/defconfig
+++ b/recipes/kexecboot/linux-kexecboot-2.6.32/spitz/defconfig
@@ -33,6 +33,13 @@ CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_LZO=y
+# CONFIG_KERNEL_GZIP is not set
+# CONFIG_KERNEL_BZIP2 is not set
+CONFIG_KERNEL_LZMA=y
+# CONFIG_KERNEL_LZO is not set
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
@@ -61,12 +68,14 @@ CONFIG_INITRAMFS_SOURCE="initramfs.cpio.gz"
CONFIG_INITRAMFS_ROOT_UID=0
CONFIG_INITRAMFS_ROOT_GID=0
CONFIG_RD_GZIP=y
-CONFIG_RD_BZIP2=y
+# CONFIG_RD_BZIP2 is not set
CONFIG_RD_LZMA=y
+# CONFIG_RD_LZO is not set
# CONFIG_INITRAMFS_COMPRESSION_NONE is not set
-CONFIG_INITRAMFS_COMPRESSION_GZIP=y
+# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
-# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set
+CONFIG_INITRAMFS_COMPRESSION_LZMA=y
+# CONFIG_INITRAMFS_COMPRESSION_LZO is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
@@ -546,14 +555,14 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_QT2160 is not set
# CONFIG_KEYBOARD_CORGI is not set
# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_GPIO=y
+# CONFIG_KEYBOARD_GPIO is not set
CONFIG_KEYBOARD_MATRIX=y
# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_MAX7359 is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_OPENCORES is not set
# CONFIG_KEYBOARD_PXA27x is not set
-CONFIG_KEYBOARD_SPITZ=y
+# CONFIG_KEYBOARD_SPITZ is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
@@ -1235,7 +1244,6 @@ CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_DECOMPRESS_GZIP=y
-CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/ARM-Add-support-for-LZMA-compressed-kernel-images.patch b/recipes/kexecboot/linux-kexecboot-2.6.33/ARM-Add-support-for-LZMA-compressed-kernel-images.patch
index 42905c552e..42905c552e 100644
--- a/recipes/kexecboot/linux-kexecboot-2.6.32+2.6.33-rc6/ARM-Add-support-for-LZMA-compressed-kernel-images.patch
+++ b/recipes/kexecboot/linux-kexecboot-2.6.33/ARM-Add-support-for-LZMA-compressed-kernel-images.patch
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.33/akita/defconfig b/recipes/kexecboot/linux-kexecboot-2.6.33/akita/defconfig
new file mode 100644
index 0000000000..a9bcc7bd94
--- /dev/null
+++ b/recipes/kexecboot/linux-kexecboot-2.6.33/akita/defconfig
@@ -0,0 +1,1320 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.33-rc6
+# Tue Feb 9 22:56:42 2010
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_LZO=y
+# CONFIG_KERNEL_GZIP is not set
+# CONFIG_KERNEL_BZIP2 is not set
+CONFIG_KERNEL_LZMA=y
+# CONFIG_KERNEL_LZO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_TINY_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE="initramfs.cpio.lzma"
+CONFIG_INITRAMFS_ROOT_UID=0
+CONFIG_INITRAMFS_ROOT_GID=0
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+CONFIG_RD_LZMA=y
+# CONFIG_RD_LZO is not set
+# CONFIG_INITRAMFS_COMPRESSION_NONE is not set
+# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
+# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
+CONFIG_INITRAMFS_COMPRESSION_LZMA=y
+# CONFIG_INITRAMFS_COMPRESSION_LZO is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+# CONFIG_SYSCTL_SYSCALL is not set
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+# CONFIG_BASE_FULL is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_SLOW_WORK is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=1
+# CONFIG_MODULES is not set
+CONFIG_BLOCK=y
+# CONFIG_LBDAF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+CONFIG_INLINE_SPIN_UNLOCK=y
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+CONFIG_INLINE_READ_UNLOCK=y
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+CONFIG_INLINE_READ_UNLOCK_IRQ=y
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+CONFIG_INLINE_WRITE_UNLOCK=y
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_DOVE is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_U8500 is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+
+#
+# Intel/Marvell Dev Platforms (sorted by hardware release time)
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_MACH_ZYLONITE300 is not set
+# CONFIG_MACH_ZYLONITE320 is not set
+# CONFIG_MACH_LITTLETON is not set
+# CONFIG_MACH_TAVOREVB is not set
+# CONFIG_MACH_SAAR is not set
+
+#
+# Third Party Dev Platforms (sorted by vendor name)
+#
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_VIPER is not set
+# CONFIG_MACH_ARCOM_ZEUS is not set
+# CONFIG_MACH_BALLOON3 is not set
+# CONFIG_MACH_CSB726 is not set
+# CONFIG_MACH_ARMCORE is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_EXEDA is not set
+# CONFIG_MACH_CM_X300 is not set
+# CONFIG_ARCH_GUMSTIX is not set
+# CONFIG_MACH_INTELMOTE2 is not set
+# CONFIG_MACH_STARGATE2 is not set
+# CONFIG_MACH_XCEP is not set
+# CONFIG_TRIZEPS_PXA is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_PCM027 is not set
+# CONFIG_MACH_COLIBRI is not set
+# CONFIG_MACH_COLIBRI300 is not set
+# CONFIG_MACH_COLIBRI320 is not set
+
+#
+# End-user Products (sorted by vendor name)
+#
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_H5000 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_MIOA701 is not set
+# CONFIG_PXA_EZX is not set
+# CONFIG_MACH_MP900C is not set
+# CONFIG_ARCH_PXA_PALM is not set
+CONFIG_PXA_SHARPSL=y
+CONFIG_SHARPSL_PM=y
+# CONFIG_MACH_POODLE is not set
+# CONFIG_MACH_CORGI is not set
+# CONFIG_MACH_SHEPHERD is not set
+# CONFIG_MACH_HUSKY is not set
+CONFIG_MACH_AKITA=y
+CONFIG_MACH_SPITZ=y
+CONFIG_MACH_BORZOI=y
+# CONFIG_MACH_TOSA is not set
+# CONFIG_ARCH_PXA_ESERIES is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SHARP_Cxx00=y
+CONFIG_PXA_SSP=y
+CONFIG_PLAT_PXA=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARP_SCOOP=y
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCCARD=y
+CONFIG_PCMCIA=y
+# CONFIG_PCMCIA_LOAD_CIS is not set
+# CONFIG_PCMCIA_IOCTL is not set
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_SOC_COMMON=y
+CONFIG_PCMCIA_PXA2XX=y
+# CONFIG_PCMCIA_DEBUG is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=999999
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=tty1 console=ttyS0,115200n8 loglevel=3 "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_APM_EMULATION=y
+# CONFIG_PM_RUNTIME is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+# CONFIG_NET is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_PHYSMAP=y
+# CONFIG_MTD_PHYSMAP_COMPAT is not set
+# CONFIG_MTD_GPIO_ADDR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_H1900 is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+
+#
+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
+#
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_TI_DAC7512 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IWMC3200TOP is not set
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=y
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_IDE_GD=y
+CONFIG_IDE_GD_ATA=y
+# CONFIG_IDE_GD_ATAPI is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+# CONFIG_INPUT_SPARSEKMAP is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_APMPOWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_QT2160 is not set
+# CONFIG_KEYBOARD_CORGI is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_KEYBOARD_MATRIX=y
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+# CONFIG_KEYBOARD_SPITZ is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
+# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_CORGI is not set
+# CONFIG_TOUCHSCREEN_DYNAPRO is not set
+# CONFIG_TOUCHSCREEN_EETI is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MCS5000 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_TOUCHSCREEN_W90X900 is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_UINPUT is not set
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_DEVKMEM is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+# CONFIG_I2C_CHARDEV is not set
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_PXA2XX=y
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_DESIGNWARE is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_ADP5588 is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_DS2782 is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_BATTERY_MAX17040 is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Native drivers
+#
+# CONFIG_SENSORS_AD7414 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADT7462 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ADT7473 is not set
+# CONFIG_SENSORS_ADT7475 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_G760A is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM73 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_LTC4215 is not set
+# CONFIG_SENSORS_LTC4245 is not set
+# CONFIG_SENSORS_LM95241 is not set
+CONFIG_SENSORS_MAX1111=y
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_SHT15 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+# CONFIG_SENSORS_AMC6821 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_TMP401 is not set
+# CONFIG_SENSORS_TMP421 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_SENSORS_LIS3_SPI is not set
+# CONFIG_SENSORS_LIS3_I2C is not set
+# CONFIG_THERMAL is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_MFD_88PM8607 is not set
+# CONFIG_AB4500_CORE is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_OVERLAY is not set
+# CONFIG_FB_PXA_SMARTPANEL is not set
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_W100 is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_CORGI=y
+# CONFIG_LCD_LMS283GF05 is not set
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_ILI9320 is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_LCD_PLATFORM is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_GENERIC=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_SOUND is not set
+# CONFIG_HID_SUPPORT is not set
+# CONFIG_USB_SUPPORT is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_AT91 is not set
+# CONFIG_MMC_ATMELMCI is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+# CONFIG_LEDS_LT3593 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_EXT4_FS=y
+# CONFIG_EXT4_FS_XATTR is not set
+# CONFIG_EXT4_DEBUG is not set
+CONFIG_JBD=y
+CONFIG_JBD2=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+# CONFIG_FILE_LOCKING is not set
+# CONFIG_FSNOTIFY is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_INOTIFY is not set
+# CONFIG_INOTIFY_USER is not set
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+# CONFIG_PROC_PAGE_MONITOR is not set
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_UBIFS_FS=y
+# CONFIG_UBIFS_FS_XATTR is not set
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+# CONFIG_NLS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=2048
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_MEMORY_INIT is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_FTRACE is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_ARM_UNWIND is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_OC_ETM is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+# CONFIG_CRYPTO_MANAGER is not set
+# CONFIG_CRYPTO_MANAGER2 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_ZLIB is not set
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+# CONFIG_CRYPTO_HW is not set
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+# CONFIG_CRC_CCITT is not set
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_LZMA=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.33/c7x0/defconfig b/recipes/kexecboot/linux-kexecboot-2.6.33/c7x0/defconfig
new file mode 100644
index 0000000000..632a25d75c
--- /dev/null
+++ b/recipes/kexecboot/linux-kexecboot-2.6.33/c7x0/defconfig
@@ -0,0 +1,1316 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.33-rc6
+# Tue Feb 9 22:56:42 2010
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_LZO=y
+# CONFIG_KERNEL_GZIP is not set
+# CONFIG_KERNEL_BZIP2 is not set
+CONFIG_KERNEL_LZMA=y
+# CONFIG_KERNEL_LZO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_TINY_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE="initramfs.cpio.lzma"
+CONFIG_INITRAMFS_ROOT_UID=0
+CONFIG_INITRAMFS_ROOT_GID=0
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+CONFIG_RD_LZMA=y
+# CONFIG_RD_LZO is not set
+# CONFIG_INITRAMFS_COMPRESSION_NONE is not set
+# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
+# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
+CONFIG_INITRAMFS_COMPRESSION_LZMA=y
+# CONFIG_INITRAMFS_COMPRESSION_LZO is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+# CONFIG_SYSCTL_SYSCALL is not set
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+# CONFIG_BASE_FULL is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_SLOW_WORK is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=1
+# CONFIG_MODULES is not set
+CONFIG_BLOCK=y
+# CONFIG_LBDAF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+CONFIG_INLINE_SPIN_UNLOCK=y
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+CONFIG_INLINE_READ_UNLOCK=y
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+CONFIG_INLINE_READ_UNLOCK_IRQ=y
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+CONFIG_INLINE_WRITE_UNLOCK=y
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_DOVE is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_U8500 is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+
+#
+# Intel/Marvell Dev Platforms (sorted by hardware release time)
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_MACH_ZYLONITE300 is not set
+# CONFIG_MACH_ZYLONITE320 is not set
+# CONFIG_MACH_LITTLETON is not set
+# CONFIG_MACH_TAVOREVB is not set
+# CONFIG_MACH_SAAR is not set
+
+#
+# Third Party Dev Platforms (sorted by vendor name)
+#
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_VIPER is not set
+# CONFIG_MACH_ARCOM_ZEUS is not set
+# CONFIG_MACH_BALLOON3 is not set
+# CONFIG_MACH_CSB726 is not set
+# CONFIG_MACH_ARMCORE is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_EXEDA is not set
+# CONFIG_MACH_CM_X300 is not set
+# CONFIG_ARCH_GUMSTIX is not set
+# CONFIG_MACH_INTELMOTE2 is not set
+# CONFIG_MACH_STARGATE2 is not set
+# CONFIG_MACH_XCEP is not set
+# CONFIG_TRIZEPS_PXA is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_PCM027 is not set
+# CONFIG_MACH_COLIBRI is not set
+# CONFIG_MACH_COLIBRI300 is not set
+# CONFIG_MACH_COLIBRI320 is not set
+
+#
+# End-user Products (sorted by vendor name)
+#
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_H5000 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_MIOA701 is not set
+# CONFIG_PXA_EZX is not set
+# CONFIG_MACH_MP900C is not set
+# CONFIG_ARCH_PXA_PALM is not set
+CONFIG_PXA_SHARPSL=y
+CONFIG_SHARPSL_PM=y
+# CONFIG_MACH_POODLE is not set
+CONFIG_MACH_CORGI=y
+CONFIG_MACH_SHEPHERD=y
+CONFIG_MACH_HUSKY=y
+# CONFIG_MACH_AKITA is not set
+# CONFIG_MACH_SPITZ is not set
+# CONFIG_MACH_BORZOI is not set
+# CONFIG_MACH_TOSA is not set
+# CONFIG_ARCH_PXA_ESERIES is not set
+CONFIG_PXA25x=y
+CONFIG_PXA_SHARP_C7xx=y
+CONFIG_PXA_SSP=y
+CONFIG_PLAT_PXA=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARP_SCOOP=y
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCCARD=y
+CONFIG_PCMCIA=y
+# CONFIG_PCMCIA_LOAD_CIS is not set
+# CONFIG_PCMCIA_IOCTL is not set
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_SOC_COMMON=y
+CONFIG_PCMCIA_PXA2XX=y
+# CONFIG_PCMCIA_DEBUG is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=999999
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=tty1 console=ttyS0,115200n8 loglevel=3 "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_APM_EMULATION=y
+# CONFIG_PM_RUNTIME is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+# CONFIG_NET is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_PHYSMAP=y
+# CONFIG_MTD_PHYSMAP_COMPAT is not set
+# CONFIG_MTD_GPIO_ADDR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_H1900 is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+
+#
+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
+#
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_TI_DAC7512 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IWMC3200TOP is not set
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=y
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_IDE_GD=y
+CONFIG_IDE_GD_ATA=y
+# CONFIG_IDE_GD_ATAPI is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+# CONFIG_INPUT_SPARSEKMAP is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_APMPOWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_QT2160 is not set
+# CONFIG_KEYBOARD_CORGI is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_KEYBOARD_MATRIX=y
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_SPITZ is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
+# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_CORGI is not set
+# CONFIG_TOUCHSCREEN_DYNAPRO is not set
+# CONFIG_TOUCHSCREEN_EETI is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MCS5000 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_TOUCHSCREEN_W90X900 is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_UINPUT is not set
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_DEVKMEM is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+# CONFIG_I2C_CHARDEV is not set
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_PXA2XX=y
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_DESIGNWARE is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_ADP5588 is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_DS2782 is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_BATTERY_MAX17040 is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Native drivers
+#
+# CONFIG_SENSORS_AD7414 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADT7462 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ADT7473 is not set
+# CONFIG_SENSORS_ADT7475 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_G760A is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM73 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_LTC4215 is not set
+# CONFIG_SENSORS_LTC4245 is not set
+# CONFIG_SENSORS_LM95241 is not set
+CONFIG_SENSORS_MAX1111=y
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_SHT15 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+# CONFIG_SENSORS_AMC6821 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_TMP401 is not set
+# CONFIG_SENSORS_TMP421 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_SENSORS_LIS3_SPI is not set
+# CONFIG_SENSORS_LIS3_I2C is not set
+# CONFIG_THERMAL is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_MFD_88PM8607 is not set
+# CONFIG_AB4500_CORE is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+CONFIG_FB_W100=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_CORGI=y
+# CONFIG_LCD_LMS283GF05 is not set
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_ILI9320 is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_LCD_PLATFORM is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_GENERIC=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_SOUND is not set
+# CONFIG_HID_SUPPORT is not set
+# CONFIG_USB_SUPPORT is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_AT91 is not set
+# CONFIG_MMC_ATMELMCI is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+# CONFIG_LEDS_LT3593 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_EXT4_FS=y
+# CONFIG_EXT4_FS_XATTR is not set
+# CONFIG_EXT4_DEBUG is not set
+CONFIG_JBD=y
+CONFIG_JBD2=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+# CONFIG_FILE_LOCKING is not set
+# CONFIG_FSNOTIFY is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_INOTIFY is not set
+# CONFIG_INOTIFY_USER is not set
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+# CONFIG_PROC_PAGE_MONITOR is not set
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_UBIFS_FS=y
+# CONFIG_UBIFS_FS_XATTR is not set
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+# CONFIG_NLS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=2048
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_MEMORY_INIT is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_FTRACE is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_ARM_UNWIND is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_OC_ETM is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+# CONFIG_CRYPTO_MANAGER is not set
+# CONFIG_CRYPTO_MANAGER2 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_ZLIB is not set
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+# CONFIG_CRYPTO_HW is not set
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+# CONFIG_CRC_CCITT is not set
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_LZMA=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.33/spitz/defconfig b/recipes/kexecboot/linux-kexecboot-2.6.33/spitz/defconfig
new file mode 100644
index 0000000000..a9bcc7bd94
--- /dev/null
+++ b/recipes/kexecboot/linux-kexecboot-2.6.33/spitz/defconfig
@@ -0,0 +1,1320 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.33-rc6
+# Tue Feb 9 22:56:42 2010
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_LZO=y
+# CONFIG_KERNEL_GZIP is not set
+# CONFIG_KERNEL_BZIP2 is not set
+CONFIG_KERNEL_LZMA=y
+# CONFIG_KERNEL_LZO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_TINY_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE="initramfs.cpio.lzma"
+CONFIG_INITRAMFS_ROOT_UID=0
+CONFIG_INITRAMFS_ROOT_GID=0
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+CONFIG_RD_LZMA=y
+# CONFIG_RD_LZO is not set
+# CONFIG_INITRAMFS_COMPRESSION_NONE is not set
+# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
+# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
+CONFIG_INITRAMFS_COMPRESSION_LZMA=y
+# CONFIG_INITRAMFS_COMPRESSION_LZO is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+# CONFIG_SYSCTL_SYSCALL is not set
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+# CONFIG_BASE_FULL is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_SLOW_WORK is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=1
+# CONFIG_MODULES is not set
+CONFIG_BLOCK=y
+# CONFIG_LBDAF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+CONFIG_INLINE_SPIN_UNLOCK=y
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+CONFIG_INLINE_READ_UNLOCK=y
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+CONFIG_INLINE_READ_UNLOCK_IRQ=y
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+CONFIG_INLINE_WRITE_UNLOCK=y
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_DOVE is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_U8500 is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+
+#
+# Intel/Marvell Dev Platforms (sorted by hardware release time)
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_MACH_ZYLONITE300 is not set
+# CONFIG_MACH_ZYLONITE320 is not set
+# CONFIG_MACH_LITTLETON is not set
+# CONFIG_MACH_TAVOREVB is not set
+# CONFIG_MACH_SAAR is not set
+
+#
+# Third Party Dev Platforms (sorted by vendor name)
+#
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_VIPER is not set
+# CONFIG_MACH_ARCOM_ZEUS is not set
+# CONFIG_MACH_BALLOON3 is not set
+# CONFIG_MACH_CSB726 is not set
+# CONFIG_MACH_ARMCORE is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_EXEDA is not set
+# CONFIG_MACH_CM_X300 is not set
+# CONFIG_ARCH_GUMSTIX is not set
+# CONFIG_MACH_INTELMOTE2 is not set
+# CONFIG_MACH_STARGATE2 is not set
+# CONFIG_MACH_XCEP is not set
+# CONFIG_TRIZEPS_PXA is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_PCM027 is not set
+# CONFIG_MACH_COLIBRI is not set
+# CONFIG_MACH_COLIBRI300 is not set
+# CONFIG_MACH_COLIBRI320 is not set
+
+#
+# End-user Products (sorted by vendor name)
+#
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_H5000 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_MIOA701 is not set
+# CONFIG_PXA_EZX is not set
+# CONFIG_MACH_MP900C is not set
+# CONFIG_ARCH_PXA_PALM is not set
+CONFIG_PXA_SHARPSL=y
+CONFIG_SHARPSL_PM=y
+# CONFIG_MACH_POODLE is not set
+# CONFIG_MACH_CORGI is not set
+# CONFIG_MACH_SHEPHERD is not set
+# CONFIG_MACH_HUSKY is not set
+CONFIG_MACH_AKITA=y
+CONFIG_MACH_SPITZ=y
+CONFIG_MACH_BORZOI=y
+# CONFIG_MACH_TOSA is not set
+# CONFIG_ARCH_PXA_ESERIES is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SHARP_Cxx00=y
+CONFIG_PXA_SSP=y
+CONFIG_PLAT_PXA=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARP_SCOOP=y
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCCARD=y
+CONFIG_PCMCIA=y
+# CONFIG_PCMCIA_LOAD_CIS is not set
+# CONFIG_PCMCIA_IOCTL is not set
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_SOC_COMMON=y
+CONFIG_PCMCIA_PXA2XX=y
+# CONFIG_PCMCIA_DEBUG is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=999999
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=tty1 console=ttyS0,115200n8 loglevel=3 "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_APM_EMULATION=y
+# CONFIG_PM_RUNTIME is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+# CONFIG_NET is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_PHYSMAP=y
+# CONFIG_MTD_PHYSMAP_COMPAT is not set
+# CONFIG_MTD_GPIO_ADDR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_H1900 is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+
+#
+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
+#
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_TI_DAC7512 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IWMC3200TOP is not set
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=y
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_IDE_GD=y
+CONFIG_IDE_GD_ATA=y
+# CONFIG_IDE_GD_ATAPI is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+# CONFIG_INPUT_SPARSEKMAP is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_APMPOWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_QT2160 is not set
+# CONFIG_KEYBOARD_CORGI is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_KEYBOARD_MATRIX=y
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+# CONFIG_KEYBOARD_SPITZ is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
+# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_CORGI is not set
+# CONFIG_TOUCHSCREEN_DYNAPRO is not set
+# CONFIG_TOUCHSCREEN_EETI is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MCS5000 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_TOUCHSCREEN_W90X900 is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_UINPUT is not set
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_DEVKMEM is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+# CONFIG_I2C_CHARDEV is not set
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_PXA2XX=y
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_DESIGNWARE is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_ADP5588 is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_DS2782 is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_BATTERY_MAX17040 is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Native drivers
+#
+# CONFIG_SENSORS_AD7414 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADT7462 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ADT7473 is not set
+# CONFIG_SENSORS_ADT7475 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_G760A is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM73 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_LTC4215 is not set
+# CONFIG_SENSORS_LTC4245 is not set
+# CONFIG_SENSORS_LM95241 is not set
+CONFIG_SENSORS_MAX1111=y
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_SHT15 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+# CONFIG_SENSORS_AMC6821 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_TMP401 is not set
+# CONFIG_SENSORS_TMP421 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_SENSORS_LIS3_SPI is not set
+# CONFIG_SENSORS_LIS3_I2C is not set
+# CONFIG_THERMAL is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_MFD_88PM8607 is not set
+# CONFIG_AB4500_CORE is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_OVERLAY is not set
+# CONFIG_FB_PXA_SMARTPANEL is not set
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_W100 is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_CORGI=y
+# CONFIG_LCD_LMS283GF05 is not set
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_ILI9320 is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_LCD_PLATFORM is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_GENERIC=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_SOUND is not set
+# CONFIG_HID_SUPPORT is not set
+# CONFIG_USB_SUPPORT is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_AT91 is not set
+# CONFIG_MMC_ATMELMCI is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+# CONFIG_LEDS_LT3593 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_EXT4_FS=y
+# CONFIG_EXT4_FS_XATTR is not set
+# CONFIG_EXT4_DEBUG is not set
+CONFIG_JBD=y
+CONFIG_JBD2=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+# CONFIG_FILE_LOCKING is not set
+# CONFIG_FSNOTIFY is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_INOTIFY is not set
+# CONFIG_INOTIFY_USER is not set
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+# CONFIG_PROC_PAGE_MONITOR is not set
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_UBIFS_FS=y
+# CONFIG_UBIFS_FS_XATTR is not set
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+# CONFIG_NLS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=2048
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_MEMORY_INIT is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_FTRACE is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_ARM_UNWIND is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_OC_ETM is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+# CONFIG_CRYPTO_MANAGER is not set
+# CONFIG_CRYPTO_MANAGER2 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_ZLIB is not set
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+# CONFIG_CRYPTO_HW is not set
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+# CONFIG_CRC_CCITT is not set
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_LZMA=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/recipes/kexecboot/linux-kexecboot.inc b/recipes/kexecboot/linux-kexecboot.inc
index 82f2c53491..5621e698f9 100644
--- a/recipes/kexecboot/linux-kexecboot.inc
+++ b/recipes/kexecboot/linux-kexecboot.inc
@@ -1,12 +1,11 @@
-# We set PR here, since a change in the kexecboot recipe will need to get picked up by *all* the kernels:
-PR = "r18"
+# We set INC_PR here, since a change in the kexecboot recipe will need to get picked up by *all* the kernels:
+INC_PR = "r19"
LOGO_SIZE = '${@base_conditional("GUI_MACHINE_CLASS", "bigscreen", "vga", "qvga", d)}'
SRC_URI = "file://${LOGO_SIZE}/logo_linux_clut224.ppm.bz2"
require ../linux/linux.inc
-DONT_CHECK_KERNELSIZE = ""
INITRAMFS_IMAGE = "initramfs-kexecboot-image"
# here we set master console on serial
@@ -26,6 +25,9 @@ BASRC = "http://www.orca.cx/zaurus/patches"
CHSRC = "http://oz.drigon.com/patches"
TKSRC = "http://www.informatik.hu-berlin.de/~tkunze/zaurus/patches"
+KERNEL_IMAGE_MAXSIZE = "1294336"
+KERNEL_IMAGE_MAXSIZE_collie = "1048576"
+
KERNEL_IMAGE_BASE_NAME = "${KERNEL_IMAGETYPE}-kexecboot-${PV}-${PR}-${MACHINE}"
KERNEL_IMAGE_SYMLINK_NAME = "${KERNEL_IMAGETYPE}-kexecboot-${MACHINE}"
@@ -42,11 +44,11 @@ def kernel_version_less_or_equal(variable, checkvalue, truevalue, falsevalue, d)
# force lzma compression for kernel (linux-kexecboot >= 2.6.32)
# force lzma compression for initramfs (linux-kexecboot >= 2.6.30)
-KERNEL_COMPRESSION = '${@kernel_version_less_or_equal("PV", "2.6.32", "", "CONFIG_KERNEL_LZMA=y", d)}'
+KERNEL_COMPRESSION = '${@kernel_version_less_or_equal("PV", "2.6.31", "", "CONFIG_KERNEL_LZMA=y", d)}'
-INITRAMFS_COMPRESSION = '${@kernel_version_less_or_equal("PV", "2.6.30", "", "CONFIG_INITRAMFS_COMPRESSION_LZMA=y", d)}'
-INITRAMFS_COMPRESSION_SUFFIX = '${@kernel_version_less_or_equal("PV", "2.6.30", "gz", "lzma", d)}'
-RD_COMPRESSION = '${@kernel_version_less_or_equal("PV", "2.6.30", "", "CONFIG_RD_LZMA=y", d)}'
+INITRAMFS_COMPRESSION = '${@kernel_version_less_or_equal("PV", "2.6.29", "", "CONFIG_INITRAMFS_COMPRESSION_LZMA=y", d)}'
+INITRAMFS_COMPRESSION_SUFFIX = '${@kernel_version_less_or_equal("PV", "2.6.29", "gz", "lzma", d)}'
+RD_COMPRESSION = '${@kernel_version_less_or_equal("PV", "2.6.29", "", "CONFIG_RD_LZMA=y", d)}'
do_configure[depends] += "${INITRAMFS_IMAGE}:do_rootfs"
diff --git a/recipes/kexecboot/linux-kexecboot_2.6.21-hh20.bb b/recipes/kexecboot/linux-kexecboot_2.6.21-hh20.bb
index 7667037037..01e7f1c66a 100644
--- a/recipes/kexecboot/linux-kexecboot_2.6.21-hh20.bb
+++ b/recipes/kexecboot/linux-kexecboot_2.6.21-hh20.bb
@@ -1,5 +1,7 @@
require linux-kexecboot.inc
+PR = "${INC_PR}.0"
+
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_hx4700 = "1"
DEFAULT_PREFERENCE_h2200 = "1"
diff --git a/recipes/kexecboot/linux-kexecboot_2.6.24.bb b/recipes/kexecboot/linux-kexecboot_2.6.24.bb
index e950ab0abf..07efd57ef8 100644
--- a/recipes/kexecboot/linux-kexecboot_2.6.24.bb
+++ b/recipes/kexecboot/linux-kexecboot_2.6.24.bb
@@ -1,5 +1,7 @@
require linux-kexecboot.inc
+PR = "${INC_PR}.0"
+
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_collie = "-1"
DEFAULT_PREFERENCE_poodle = "1"
diff --git a/recipes/kexecboot/linux-kexecboot_2.6.26.bb b/recipes/kexecboot/linux-kexecboot_2.6.26.bb
index 345d2ac764..9dfa8c0bb8 100644
--- a/recipes/kexecboot/linux-kexecboot_2.6.26.bb
+++ b/recipes/kexecboot/linux-kexecboot_2.6.26.bb
@@ -1,5 +1,7 @@
require linux-kexecboot.inc
+PR = "${INC_PR}.0"
+
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_qemuarm = "-1"
DEFAULT_PREFERENCE_qemux86 = "-1"
diff --git a/recipes/kexecboot/linux-kexecboot_2.6.29.bb b/recipes/kexecboot/linux-kexecboot_2.6.29.bb
index 4064c98582..b840f17eb7 100644
--- a/recipes/kexecboot/linux-kexecboot_2.6.29.bb
+++ b/recipes/kexecboot/linux-kexecboot_2.6.29.bb
@@ -1,5 +1,7 @@
require linux-kexecboot.inc
+PR = "${INC_PR}.0"
+
COMPATIBLE_MACHINE = "omap5912osk|omap1710h3|omap2430sdp|omap2420h4|beagleboard|omap3evm|omap3-pandora|overo|omapzoom"
SRCREV = "58cf2f1425abfd3a449f9fe985e48be2d2555022"
diff --git a/recipes/kexecboot/linux-kexecboot_2.6.32+2.6.33-rc6.bb b/recipes/kexecboot/linux-kexecboot_2.6.32+2.6.33-rc6.bb
deleted file mode 100644
index 64d0c1d5eb..0000000000
--- a/recipes/kexecboot/linux-kexecboot_2.6.32+2.6.33-rc6.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-require linux-kexecboot.inc
-
-KERNEL_RELEASE = "2.6.33-rc6"
-OLD_KERNEL_RELEASE = "2.6.32"
-PV = "${OLD_KERNEL_RELEASE}+${KERNEL_RELEASE}"
-
-S = "${WORKDIR}/linux-${OLD_KERNEL_RELEASE}"
-
-# Mark archs/machines that this kernel supports
-DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_akita = "-1"
-DEFAULT_PREFERENCE_c7x0 = "-1"
-DEFAULT_PREFERENCE_collie = "-1"
-DEFAULT_PREFERENCE_poodle = "-1"
-DEFAULT_PREFERENCE_spitz = "1"
-DEFAULT_PREFERENCE_tosa = "-1"
-
-SRC_URI += "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${OLD_KERNEL_RELEASE}.tar.bz2;name=kernel \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-${KERNEL_RELEASE}.bz2;name=rc6;patch=1 \
- file://ARM-Add-support-for-LZMA-compressed-kernel-images.patch;patch=1;status=pending \
- file://defconfig"
-
-SRC_URI[rc6.md5sum] = "1d20a0359a18b8822a742d62a4bae2f5"
-SRC_URI[rc6.sha256sum] = "8b8ac844b7154d952469587bcb9d2cff089cc71ccd7522e38eedcdc1f2c007a5"
-SRC_URI[kernel.md5sum] = "260551284ac224c3a43c4adac7df4879"
-SRC_URI[kernel.sha256sum] = "5099786d80b8407d98a619df00209c2353517f22d804fdd9533b362adcb4504e"
diff --git a/recipes/kexecboot/linux-kexecboot_2.6.32.bb b/recipes/kexecboot/linux-kexecboot_2.6.32.bb
index ccb8cd642f..1851fa8bc3 100644
--- a/recipes/kexecboot/linux-kexecboot_2.6.32.bb
+++ b/recipes/kexecboot/linux-kexecboot_2.6.32.bb
@@ -1,5 +1,7 @@
require linux-kexecboot.inc
+PR = "${INC_PR}.0"
+
S = "${WORKDIR}/linux-${PV}"
S_omap3 = "${WORKDIR}/git"
diff --git a/recipes/kexecboot/linux-kexecboot_2.6.33.bb b/recipes/kexecboot/linux-kexecboot_2.6.33.bb
new file mode 100644
index 0000000000..52c9ff1a87
--- /dev/null
+++ b/recipes/kexecboot/linux-kexecboot_2.6.33.bb
@@ -0,0 +1,15 @@
+require linux-kexecboot.inc
+
+PR = "${INC_PR}.0"
+
+S = "${WORKDIR}/linux-${PV}"
+
+# Mark archs/machines that this kernel supports
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI += "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2;name=kernel \
+ file://ARM-Add-support-for-LZMA-compressed-kernel-images.patch;patch=1;status=pending \
+ file://defconfig"
+
+SRC_URI[kernel.md5sum] = "c3883760b18d50e8d78819c54d579b00"
+SRC_URI[kernel.sha256sum] = "63e237de3b3c4c46a21833b9ce7e20574548d52dabbd1a8bf376041e4455d5c6"
diff --git a/recipes/klibc/files/fstype-sane-vfat-and-jffs2-for-1.5.patch b/recipes/klibc/files/fstype-sane-vfat-and-jffs2-for-1.5.patch
new file mode 100644
index 0000000000..041f67988c
--- /dev/null
+++ b/recipes/klibc/files/fstype-sane-vfat-and-jffs2-for-1.5.patch
@@ -0,0 +1,63 @@
+Index: klibc-1.5/usr/kinit/fstype/fstype.c
+===================================================================
+--- klibc-1.5.orig/usr/kinit/fstype/fstype.c 2008-02-28 00:48:35.319254938 +0100
++++ klibc-1.5/usr/kinit/fstype/fstype.c 2008-02-28 00:52:20.583257793 +0100
+@@ -20,7 +20,7 @@
+ #include <netinet/in.h>
+ #include <sys/utsname.h>
+ #include <sys/vfs.h>
+-
++#include <linux/types.h>
+ #define cpu_to_be32(x) __cpu_to_be32(x) /* Needed by romfs_fs.h */
+
+ #include "romfs_fs.h"
+@@ -37,6 +37,12 @@
+ #include "ocfs2_fs.h"
+ #include "nilfs_fs.h"
+
++#if __BYTE_ORDER == __BIG_ENDIAN
++#include <linux/byteorder/big_endian.h>
++#else
++#include <linux/byteorder/little_endian.h>
++#endif
++
+ /*
+ * Slightly cleaned up version of jfs_superblock to
+ * avoid pulling in other kernel header files.
+@@ -59,6 +65,27 @@
+ /* Swap needs the definition of block size */
+ #include "swap_fs.h"
+
++static int jffs2_image(const unsigned char *buf, unsigned long *blocks)
++{
++ // Very sloppy! ;-E
++ if (*buf == 0x85 && buf[1] == 0x19)
++ return 1;
++
++ return 0;
++}
++
++static int vfat_image(const unsigned char *buf, unsigned long *blocks)
++{
++ const struct romfs_super_block *sb =
++ (const struct romfs_super_block *)buf;
++ if (!strncmp(buf + 54, "FAT12 ", 8)
++ || !strncmp(buf + 54, "FAT16 ", 8)
++ || !strncmp(buf + 82, "FAT32 ", 8))
++ return 1;
++
++ return 0;
++}
++
+ static int gzip_image(const void *buf, unsigned long long *bytes)
+ {277 304
+ const unsigned char *p = buf;
+@@ -490,6 +517,8 @@
+ {1, "ext3", ext3_image},
+ {1, "ext2", ext2_image},
+ {1, "minix", minix_image},
++ {0, "jffs2", jffs2_image},
++ {0, "vfat", vfat_image},
+ {1, "nilfs2", nilfs2_image},
+ {2, "ocfs2", ocfs2_image},
+ {8, "reiserfs", reiserfs_image},
diff --git a/recipes/klibc/files/isystem.patch b/recipes/klibc/files/isystem.patch
new file mode 100644
index 0000000000..ccdf9ed92d
--- /dev/null
+++ b/recipes/klibc/files/isystem.patch
@@ -0,0 +1,13 @@
+Index: klibc-1.5.15/klcc/klcc.in
+===================================================================
+--- klibc-1.5.15.orig/klcc/klcc.in 2009-12-14 00:32:41.373661102 +0100
++++ klibc-1.5.15/klcc/klcc.in 2009-12-14 00:34:20.855735356 +0100
+@@ -147,7 +147,7 @@
+ } elsif ( $a =~ /^-([fmwWQdO]|std=|ansi|pedantic|M[GPD]|MMD)/ ) {
+ # Options to gcc
+ push(@ccopt, $a);
+- } elsif ( $a =~ /^-([DUI]|M[FQT])(.*)$/ ) {
++ } elsif ( $a =~ /^-([DUI]|M[FQT]|isystem)(.*)$/ ) {
+ # Options to gcc, which can take either a conjoined argument
+ # (-DFOO) or a disjoint argument (-D FOO)
+ push(@ccopt, $a);
diff --git a/recipes/klibc/files/mntproc-definitions.patch b/recipes/klibc/files/mntproc-definitions.patch
new file mode 100644
index 0000000000..5db24cd3aa
--- /dev/null
+++ b/recipes/klibc/files/mntproc-definitions.patch
@@ -0,0 +1,20 @@
+Description: MNTPROC_MNT and MNTPROC_UMNT are no longer defined by the
+ kernel. Hack around this by restoring the old definitions.
+Upstream: http://thread.gmane.org/gmane.linux.nfs/28059 suggests a better
+ fix is in progress.
+
+diff -Nur -x '*.orig' -x '*~' klibc-1.5.15/usr/kinit/nfsmount/mount.c klibc-1.5.15.new/usr/kinit/nfsmount/mount.c
+--- klibc-1.5.15/usr/kinit/nfsmount/mount.c 2009-01-04 19:28:03.000000000 +0000
++++ klibc-1.5.15.new/usr/kinit/nfsmount/mount.c 2009-10-04 22:52:44.000000000 +0100
+@@ -44,6 +44,11 @@
+
+ #define MNT_REPLY_MINSIZE (sizeof(struct rpc_reply) + sizeof(uint32_t))
+
++#ifndef MNTPROC_MNT
++# define MNTPROC_MNT 1
++# define MNTPROC_UMNT 3
++#endif /* MNTPROC_MNT */
++
+ static int get_ports(uint32_t server, const struct nfs_mount_data *data)
+ {
+ uint32_t nfs_ver, mount_ver;
diff --git a/recipes/klibc/files/signal-cleanup.patch b/recipes/klibc/files/signal-cleanup.patch
new file mode 100644
index 0000000000..ce7f5ebf72
--- /dev/null
+++ b/recipes/klibc/files/signal-cleanup.patch
@@ -0,0 +1,38 @@
+Description: Cope with header changes in kernel commit
+ 63b852a6b67d0820d388b0ecd0da83ccb4048b8d.
+
+Index: klibc-1.5.15/usr/include/arch/i386/klibc/archsignal.h
+===================================================================
+--- klibc-1.5.15.orig/usr/include/arch/i386/klibc/archsignal.h 2009-01-04 11:28:03.000000000 -0800
++++ klibc-1.5.15/usr/include/arch/i386/klibc/archsignal.h 2009-11-11 14:21:10.000000000 -0800
+@@ -96,7 +96,12 @@ typedef struct {
+ #define MINSIGSTKSZ 2048
+ #define SIGSTKSZ 8192
+
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)
++#include <asm-generic/signal-defs.h>
++#else
+ #include <asm-generic/signal.h>
++#endif
+
+ /* This uses gcc anonymous union support... */
+ struct siginfo;
+Index: klibc-1.5.15/usr/include/arch/sparc/klibc/archsignal.h
+===================================================================
+--- klibc-1.5.15.orig/usr/include/arch/sparc/klibc/archsignal.h 2009-01-04 11:28:03.000000000 -0800
++++ klibc-1.5.15/usr/include/arch/sparc/klibc/archsignal.h 2009-11-09 15:06:29.000000000 -0800
+@@ -11,13 +11,6 @@
+ #define __WANT_POSIX1B_SIGNALS__
+ #include <asm/signal.h>
+
+-struct sigaction {
+- __sighandler_t sa_handler;
+- unsigned long sa_flags;
+- void (*sa_restorer)(void); /* Not used by Linux/SPARC */
+- sigset_t sa_mask;
+-};
+-
+ /* Not actually used by the kernel... */
+ #define SA_RESTORER 0x80000000
+
diff --git a/recipes/klibc/klibc-1.5.15+1.5.16/1.5.15+1.5.16.patch b/recipes/klibc/klibc-1.5.15+1.5.16/1.5.15+1.5.16.patch
new file mode 100644
index 0000000000..3d2c14b65f
--- /dev/null
+++ b/recipes/klibc/klibc-1.5.15+1.5.16/1.5.15+1.5.16.patch
@@ -0,0 +1,721 @@
+diff --git a/scripts/Kbuild.install b/scripts/Kbuild.install
+index 44c8f76..de918f0 100644
+--- a/scripts/Kbuild.install
++++ b/scripts/Kbuild.install
+@@ -95,16 +95,7 @@ header:
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)lib
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)bin
+- $(Q)set -e ; for d in linux asm asm-$(KLIBCARCH) asm-generic $(ASMKLIBCARCH); do \
+- for r in $(KLIBCKERNELSRC)/include $(KLIBCKERNELOBJ)/include \
+- $(KLIBCKERNELOBJ)/include2 ; do \
+- [ ! -d $$r/$$d ] && continue; \
+- mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)include/$$d ; \
+- cp -rfL $$r/$$d/. \
+- $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/$$d/. ; \
+- done ; \
+- done
+- $(Q)cd $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include && ln -sf asm-$(KLIBCARCH) asm
++ $(Q)make -C $(KLIBCKERNELSRC) ARCH=$(KLIBCARCH) INSTALL_HDR_PATH=$(INSTALLROOT)$(INSTALLDIR)/$(KCROSS) headers_install
+ $(Q)cp -rf usr/include/. $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/.
+ $(Q)$(install-data) $(srctree)/klcc/klcc.1 $(INSTALLROOT)$(mandir)/man1/$(KCROSS)klcc.1
+ $(Q)$(install-bin) $(objtree)/klcc/$(KCROSS)klcc $(INSTALLROOT)$(bindir)
+diff --git a/usr/include/klibc/compiler.h b/usr/include/klibc/compiler.h
+index 816a4ee..9dee742 100644
+--- a/usr/include/klibc/compiler.h
++++ b/usr/include/klibc/compiler.h
+@@ -24,7 +24,12 @@
+ /* Use "extern inline" even in the gcc3+ case to avoid warnings in ctype.h */
+ #ifdef __GNUC__
+ # if __GNUC__ >= 3
+-# define __must_inline extern __inline__ __attribute__((always_inline))
++# ifdef __GNUC_STDC_INLINE__
++# define __must_inline extern __inline__ \
++ __attribute__((__gnu_inline__,__always_inline__))
++# else
++# define __must_inline extern __inline__ __attribute__((__always_inline__))
++# endif
+ # else
+ # define __must_inline extern __inline__
+ # endif
+diff --git a/usr/include/mntent.h b/usr/include/mntent.h
+new file mode 100644
+index 0000000..210610c
+--- /dev/null
++++ b/usr/include/mntent.h
+@@ -0,0 +1,19 @@
++#ifndef _MNTENT_H
++#define _MNTENT_H 1
++
++struct mntent {
++ char *mnt_fsname; /* name of mounted file system */
++ char *mnt_dir; /* file system path prefix */
++ char *mnt_type; /* mount type (see mntent.h) */
++ char *mnt_opts; /* mount options (see mntent.h) */
++ int mnt_freq; /* dump frequency in days */
++ int mnt_passno; /* pass number on parallel fsck */
++};
++
++extern FILE *setmntent(const char *, const char *);
++
++extern struct mntent *getmntent(FILE *);
++
++extern int endmntent(FILE *fp);
++
++#endif /* mntent.h */
+diff --git a/usr/include/string.h b/usr/include/string.h
+index ae8270e..0c8c046 100644
+--- a/usr/include/string.h
++++ b/usr/include/string.h
+@@ -44,5 +44,6 @@ __extern char *strsep(char **, const char *);
+ __extern size_t strspn(const char *, const char *);
+ __extern char *strstr(const char *, const char *);
+ __extern char *strtok(char *, const char *);
++__extern char *strtok_r(char *, const char *, char **);
+
+ #endif /* _STRING_H */
+diff --git a/usr/kinit/ipconfig/dhcp_proto.c b/usr/kinit/ipconfig/dhcp_proto.c
+index d4f2c09..f3cfd52 100644
+--- a/usr/kinit/ipconfig/dhcp_proto.c
++++ b/usr/kinit/ipconfig/dhcp_proto.c
+@@ -49,24 +49,26 @@ static uint8_t dhcp_end[] = {
+
+ /* Both iovecs below have to have the same structure, since dhcp_send()
+ pokes at the internals */
+-#define DHCP_IOV_LEN 6
++#define DHCP_IOV_LEN 7
+
+-static struct iovec dhcp_discover_iov[] = {
++static struct iovec dhcp_discover_iov[DHCP_IOV_LEN] = {
+ /* [0] = ip + udp header */
+ /* [1] = bootp header */
+ [2] = {dhcp_discover_hdr, sizeof(dhcp_discover_hdr)},
+ [3] = {dhcp_params, sizeof(dhcp_params)},
+- /* [4] = DHCP vendor class */
+- [5] = {dhcp_end, sizeof(dhcp_end)}
++ /* [4] = optional vendor class */
++ /* [5] = optional hostname */
++ /* [6] = {dhcp_end, sizeof(dhcp_end)} */
+ };
+
+-static struct iovec dhcp_request_iov[] = {
++static struct iovec dhcp_request_iov[DHCP_IOV_LEN] = {
+ /* [0] = ip + udp header */
+ /* [1] = bootp header */
+ [2] = {dhcp_request_hdr, sizeof(dhcp_request_hdr)},
+ [3] = {dhcp_params, sizeof(dhcp_params)},
+- /* [4] = DHCP vendor class */
+- [5] = {dhcp_end, sizeof(dhcp_end)}
++ /* [4] = optional vendor class */
++ /* [5] = optional hostname */
++ /* [6] = {dhcp_end, sizeof(dhcp_end)} */
+ };
+
+ /*
+@@ -164,6 +166,8 @@ static int dhcp_recv(struct netdev *dev)
+ static int dhcp_send(struct netdev *dev, struct iovec *vec)
+ {
+ struct bootp_hdr bootp;
++ char dhcp_hostname[SYS_NMLN+2];
++ int i = 4;
+
+ memset(&bootp, 0, sizeof(struct bootp_hdr));
+
+@@ -171,7 +175,8 @@ static int dhcp_send(struct netdev *dev, struct iovec *vec)
+ bootp.htype = dev->hwtype;
+ bootp.hlen = dev->hwlen;
+ bootp.xid = dev->bootp.xid;
+- bootp.ciaddr = dev->ip_addr;
++ bootp.ciaddr = INADDR_NONE;
++ bootp.yiaddr = dev->ip_addr;
+ bootp.giaddr = INADDR_ANY;
+ bootp.secs = htons(time(NULL) - dev->open_time);
+ memcpy(bootp.chaddr, dev->hwaddr, 16);
+@@ -179,12 +184,35 @@ static int dhcp_send(struct netdev *dev, struct iovec *vec)
+ vec[1].iov_base = &bootp;
+ vec[1].iov_len = sizeof(struct bootp_hdr);
+
+- vec[4].iov_base = vendor_class_identifier;
+- vec[4].iov_len = vendor_class_identifier_len;
+-
+ DEBUG(("xid %08x secs %d ", bootp.xid, ntohs(bootp.secs)));
+
+- return packet_send(dev, vec, DHCP_IOV_LEN);
++ if (vendor_class_identifier_len > 2) {
++ vec[i].iov_base = vendor_class_identifier;
++ vec[i].iov_len = vendor_class_identifier_len;
++ i++;
++
++ DEBUG(("vendor_class_identifier \"%.*s\" ",
++ vendor_class_identifier_len-2,
++ vendor_class_identifier+2));
++ }
++
++ if (dev->reqhostname[0] != '\0') {
++ int len = strlen(dev->reqhostname);
++ dhcp_hostname[0] = 12;
++ dhcp_hostname[1] = len;
++ memcpy(dhcp_hostname+2, dev->reqhostname, len);
++
++ vec[i].iov_base = dhcp_hostname;
++ vec[i].iov_len = len+2;
++ i++;
++
++ DEBUG(("hostname %.*s ", len, dhcp_hostname+2));
++ }
++
++ vec[i].iov_base = dhcp_end;
++ vec[i].iov_len = sizeof(dhcp_end);
++
++ return packet_send(dev, vec, i);
+ }
+
+ /*
+diff --git a/usr/kinit/ipconfig/main.c b/usr/kinit/ipconfig/main.c
+index 2ded0f3..619edf7 100644
+--- a/usr/kinit/ipconfig/main.c
++++ b/usr/kinit/ipconfig/main.c
+@@ -522,6 +522,8 @@ static int parse_device(struct netdev *dev, const char *ip)
+ case 4:
+ strncpy(dev->hostname, ip, SYS_NMLN - 1);
+ dev->hostname[SYS_NMLN - 1] = '\0';
++ memcpy(dev->reqhostname, dev->hostname,
++ SYS_NMLN);
+ break;
+ case 5:
+ dev->name = ip;
+@@ -569,6 +571,8 @@ static void bringup_one_dev(struct netdev *template, struct netdev *dev)
+ dev->ip_nameserver[1] = template->ip_nameserver[1];
+ if (template->hostname[0] != '\0')
+ strcpy(dev->hostname, template->hostname);
++ if (template->reqhostname[0] != '\0')
++ strcpy(dev->reqhostname, template->reqhostname);
+ dev->caps &= template->caps;
+
+ bringup_device(dev);
+diff --git a/usr/kinit/ipconfig/netdev.h b/usr/kinit/ipconfig/netdev.h
+index fb6640a..26d076a 100644
+--- a/usr/kinit/ipconfig/netdev.h
++++ b/usr/kinit/ipconfig/netdev.h
+@@ -4,7 +4,7 @@
+ #include <sys/utsname.h>
+ #include <net/if.h>
+
+-#define BPLEN 40
++#define BPLEN 256
+ #define FNLEN 128 /* from DHCP RFC 2131 */
+
+ struct netdev {
+@@ -35,6 +35,7 @@ struct netdev {
+ uint32_t ip_gateway; /* my gateway */
+ uint32_t ip_nameserver[2]; /* two nameservers */
+ uint32_t serverid; /* dhcp serverid */
++ char reqhostname[SYS_NMLN]; /* requested hostname */
+ char hostname[SYS_NMLN]; /* hostname */
+ char dnsdomainname[SYS_NMLN]; /* dns domain name */
+ char nisdomainname[SYS_NMLN]; /* nis domain name */
+diff --git a/usr/klibc/Kbuild b/usr/klibc/Kbuild
+index 20890c5..ab5212b 100644
+--- a/usr/klibc/Kbuild
++++ b/usr/klibc/Kbuild
+@@ -36,6 +36,7 @@ klib-y := vsnprintf.o snprintf.o vsprintf.o sprintf.o \
+ strncat.o strlcpy.o strlcat.o \
+ strstr.o strncmp.o strncpy.o strrchr.o \
+ strxspn.o strspn.o strcspn.o strpbrk.o strsep.o strtok.o \
++ strtok_r.o \
+ fnmatch.o \
+ gethostname.o getdomainname.o getcwd.o \
+ seteuid.o setegid.o \
+@@ -55,7 +56,8 @@ klib-y := vsnprintf.o snprintf.o vsprintf.o sprintf.o \
+ ctype/ispunct.o ctype/isspace.o ctype/isupper.o \
+ ctype/isxdigit.o ctype/tolower.o ctype/toupper.o \
+ userdb/getgrgid.o userdb/getgrnam.o userdb/getpwnam.o \
+- userdb/getpwuid.o userdb/root_group.o userdb/root_user.o
++ userdb/getpwuid.o userdb/root_group.o userdb/root_user.o \
++ setmntent.o endmntent.o getmntent.o
+
+ klib-$(CONFIG_KLIBC_ERRLIST) += errlist.o
+
+diff --git a/usr/klibc/endmntent.c b/usr/klibc/endmntent.c
+new file mode 100644
+index 0000000..419c317
+--- /dev/null
++++ b/usr/klibc/endmntent.c
+@@ -0,0 +1,9 @@
++#include <stdio.h>
++#include <mntent.h>
++
++int endmntent(FILE *fp)
++{
++ if (fp)
++ fclose(fp);
++ return 1;
++}
+diff --git a/usr/klibc/getmntent.c b/usr/klibc/getmntent.c
+new file mode 100644
+index 0000000..8af27f3
+--- /dev/null
++++ b/usr/klibc/getmntent.c
+@@ -0,0 +1,61 @@
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <mntent.h>
++
++#define BUFLEN 1024
++
++struct mntent *getmntent_r(FILE *fp, struct mntent *mntbuf, char *buf,
++ int buflen)
++{
++ char *line = NULL, *saveptr = NULL;
++ const char *sep = " \t\n";
++
++ if (!fp || !mntbuf || !buf)
++ return NULL;
++
++ while ((line = fgets(buf, buflen, fp)) != NULL) {
++ if (buf[0] == '#' || buf[0] == '\n')
++ continue;
++ break;
++ }
++
++ if (!line)
++ return NULL;
++
++ mntbuf->mnt_fsname = strtok_r(buf, sep, &saveptr);
++ if (!mntbuf->mnt_fsname)
++ return NULL;
++
++ mntbuf->mnt_dir = strtok_r(NULL, sep, &saveptr);
++ if (!mntbuf->mnt_fsname)
++ return NULL;
++
++ mntbuf->mnt_type = strtok_r(NULL, sep, &saveptr);
++ if (!mntbuf->mnt_type)
++ return NULL;
++
++ mntbuf->mnt_opts = strtok_r(NULL, sep, &saveptr);
++ if (!mntbuf->mnt_opts)
++ mntbuf->mnt_opts = "";
++
++ line = strtok_r(NULL, sep, &saveptr);
++ mntbuf->mnt_freq = !line ? 0 : atoi(line);
++
++ line = strtok_r(NULL, sep, &saveptr);
++ mntbuf->mnt_passno = !line ? 0 : atoi(line);
++
++ return mntbuf;
++}
++
++struct mntent *getmntent(FILE *fp)
++{
++ static char *buf = NULL;
++ static struct mntent mntbuf;
++
++ buf = malloc(BUFLEN);
++ if (!buf)
++ perror("malloc");
++
++ return getmntent_r(fp, &mntbuf, buf, BUFLEN);
++}
+diff --git a/usr/klibc/setmntent.c b/usr/klibc/setmntent.c
+new file mode 100644
+index 0000000..d23e141
+--- /dev/null
++++ b/usr/klibc/setmntent.c
+@@ -0,0 +1,7 @@
++#include <stdio.h>
++#include <mntent.h>
++
++FILE *setmntent(const char *filename, const char *type)
++{
++ return fopen(filename, type);
++}
+diff --git a/usr/klibc/strtok.c b/usr/klibc/strtok.c
+index c2671af..6b169a1 100644
+--- a/usr/klibc/strtok.c
++++ b/usr/klibc/strtok.c
+@@ -8,12 +8,5 @@ char *strtok(char *s, const char *delim)
+ {
+ static char *holder;
+
+- if (s)
+- holder = s;
+-
+- do {
+- s = strsep(&holder, delim);
+- } while (s && !*s);
+-
+- return s;
++ return strtok_r(s, delim, &holder);
+ }
+diff --git a/usr/klibc/strtok_r.c b/usr/klibc/strtok_r.c
+new file mode 100644
+index 0000000..695d516
+--- /dev/null
++++ b/usr/klibc/strtok_r.c
+@@ -0,0 +1,13 @@
++#include <string.h>
++
++char *strtok_r(char *s, const char *delim, char **holder)
++{
++ if (s)
++ *holder = s;
++
++ do {
++ s = strsep(holder, delim);
++ } while (s && !*s);
++
++ return s;
++}
+diff --git a/usr/klibc/version b/usr/klibc/version
+index f6ed435..0ed0610 100644
+--- a/usr/klibc/version
++++ b/usr/klibc/version
+@@ -1 +1 @@
+-1.5.15
++1.5.16
+diff --git a/usr/utils/Kbuild b/usr/utils/Kbuild
+index 5b6dc28..354a364 100644
+--- a/usr/utils/Kbuild
++++ b/usr/utils/Kbuild
+@@ -3,7 +3,7 @@
+ #
+
+ progs := chroot dd mkdir mkfifo mknod mount pivot_root umount
+-progs += true false sleep ln nuke minips cat
++progs += true false sleep ln nuke minips cat ls
+ progs += uname halt kill readlink cpio sync dmesg
+
+ static-y := $(addprefix static/, $(progs))
+@@ -36,6 +36,8 @@ static/sleep-y := sleep.o
+ shared/sleep-y := sleep.o
+ static/ln-y := ln.o
+ shared/ln-y := ln.o
++static/ls-y := ls.o
++shared/ls-y := ls.o
+ static/nuke-y := nuke.o
+ shared/nuke-y := nuke.o
+ static/minips-y := minips.o
+diff --git a/usr/utils/ls.c b/usr/utils/ls.c
+new file mode 100644
+index 0000000..859142a
+--- /dev/null
++++ b/usr/utils/ls.c
+@@ -0,0 +1,202 @@
++#include <stdio.h>
++#include <stdlib.h>
++#include <dirent.h>
++#include <unistd.h>
++#include <sys/stat.h>
++#include <sys/types.h>
++#include <sys/sysmacros.h>
++
++#define STAT_ISSET(mode, mask) (((mode) & mask) == mask)
++
++static size_t max_linksiz = 128;
++static int max_nlinks = 1;
++static int max_size = 1;
++static int max_uid = 1;
++static int max_gid = 1;
++static int max_min = 1;
++static int max_maj = 1;
++
++static void do_preformat(const struct stat *st)
++{
++ int bytes;
++
++ if ((bytes = snprintf(NULL, 0, "%ju", (uintmax_t) st->st_nlink)) > max_nlinks)
++ max_nlinks = bytes;
++
++ if ((bytes = snprintf(NULL, 0, "%ju", (uintmax_t) st->st_uid)) > max_uid)
++ max_uid = bytes;
++
++ if ((bytes = snprintf(NULL, 0, "%ju", (uintmax_t) st->st_gid)) > max_gid)
++ max_gid = bytes;
++
++ if (S_ISCHR(st->st_mode) || S_ISBLK(st->st_mode)) {
++ if ((bytes = snprintf(NULL, 0, "%u", major(st->st_rdev))) > max_maj)
++ max_maj = bytes;
++
++ if ((bytes = snprintf(NULL, 0, "%u", minor(st->st_rdev))) > max_min)
++ max_min = bytes;
++
++ max_size = max_maj + max_min + 1;
++ }
++ else {
++ if ((bytes = snprintf(NULL, 0, "%ju", (uintmax_t) st->st_size)) > max_size)
++ max_size = bytes;
++ }
++ return;
++}
++
++static void do_stat(const struct stat *st, const char *path)
++{
++ char *fmt, *link_name;
++ int rc;
++
++ switch (st->st_mode & S_IFMT) {
++ case S_IFBLK: putchar('b'); break;
++ case S_IFCHR: putchar('c'); break;
++ case S_IFDIR: putchar('d'); break;
++ case S_IFIFO: putchar('p'); break;
++ case S_IFLNK: putchar('l'); break;
++ case S_IFSOCK: putchar('s'); break;
++ case S_IFREG: putchar('-'); break;
++ default: putchar('?'); break;
++ }
++ putchar(STAT_ISSET(st->st_mode, S_IRUSR) ? 'r' : '-');
++ putchar(STAT_ISSET(st->st_mode, S_IWUSR) ? 'w' : '-');
++
++ !STAT_ISSET(st->st_mode, S_ISUID) ?
++ putchar(STAT_ISSET(st->st_mode, S_IXUSR) ? 'x' : '-') :
++ putchar('S');
++
++ putchar(STAT_ISSET(st->st_mode, S_IRGRP) ? 'r' : '-');
++ putchar(STAT_ISSET(st->st_mode, S_IWGRP) ? 'w' : '-');
++
++ !STAT_ISSET(st->st_mode, S_ISGID) ?
++ putchar(STAT_ISSET(st->st_mode, S_IXGRP) ? 'x' : '-') :
++ putchar('S');
++
++ putchar(STAT_ISSET(st->st_mode, S_IROTH) ? 'r' : '-');
++ putchar(STAT_ISSET(st->st_mode, S_IWOTH) ? 'w' : '-');
++
++ !STAT_ISSET(st->st_mode, S_ISVTX) ?
++ putchar(STAT_ISSET(st->st_mode, S_IXOTH) ? 'x' : '-') :
++ putchar(S_ISDIR(st->st_mode) ? 't' : 'T');
++
++ if (S_ISCHR(st->st_mode) || S_ISBLK(st->st_mode)) {
++ rc = asprintf(&fmt," %%%dju %%%dju %%%dju %%%du,%%%du %%s",
++ max_nlinks, max_uid, max_gid, max_maj, max_min);
++ if (rc == -1) {
++ perror("asprintf");
++ exit(1);
++ }
++ fprintf(stdout, fmt,
++ (uintmax_t) st->st_nlink,
++ (uintmax_t) st->st_uid,
++ (uintmax_t) st->st_gid,
++ major(st->st_rdev),
++ minor(st->st_rdev),
++ path);
++ }
++ else {
++ rc = asprintf(&fmt," %%%dju %%%dju %%%dju %%%dju %%s",
++ max_nlinks, max_uid, max_gid, max_size);
++ if (rc == -1) {
++ perror("asprintf");
++ exit(1);
++ }
++ fprintf(stdout, fmt,
++ (uintmax_t) st->st_nlink,
++ (uintmax_t) st->st_uid,
++ (uintmax_t) st->st_gid,
++ (uintmax_t) st->st_size,
++ path);
++ }
++ free(fmt);
++
++ if (S_ISLNK(st->st_mode)) {
++ if ((link_name = malloc(max_linksiz)) == NULL) {
++ perror("malloc");
++ exit(1);
++ }
++ if ((rc = readlink(path, link_name, max_linksiz)) == -1) {
++ free(link_name);
++ perror("readlink");
++ exit(1);
++ }
++ link_name[rc] = '\0';
++ fprintf(stdout, " -> %s", link_name);
++ free(link_name);
++ }
++
++ putchar('\n');
++ return;
++}
++
++static void do_dir(const char *path, int preformat)
++{
++ DIR *dir;
++ struct dirent *dent;
++ struct stat st;
++
++ if (chdir(path) == -1) {
++ perror(path);
++ exit(1);
++ }
++
++ if ((dir = opendir(path)) == NULL) {
++ perror(path);
++ exit(1);
++ }
++
++ while ((dent = readdir(dir)) != NULL) {
++ if (lstat(dent->d_name, &st)) {
++ perror(dent->d_name);
++ exit(1);
++ }
++ (preformat) ?
++ do_preformat(&st) :
++ do_stat(&st, dent->d_name);
++ }
++
++ closedir(dir);
++}
++
++int main(int argc, char *argv[])
++{
++ int i;
++ struct stat st;
++
++ if (argc == 1) {
++ do_dir(".", 1);
++ do_dir(".", 0);
++ return 0;
++ }
++
++ for (i = 1; i < argc; i++) {
++ if (argv[i][0] == '-' && argv[i][1] == 'h') {
++ fprintf(stdout, "Usage: ls [-h] [FILE ...]\n");
++ return 0;
++ }
++
++ if (lstat(argv[i], &st)) {
++ perror(argv[i]);
++ exit(1);
++ }
++
++ S_ISDIR(st.st_mode) ?
++ do_dir(argv[i], 1) :
++ do_preformat(&st);
++ }
++
++ for (i = 1; i < argc; i++) {
++ if (lstat(argv[i], &st)) {
++ perror(argv[i]);
++ exit(1);
++ }
++
++ S_ISDIR(st.st_mode) ?
++ do_dir(argv[i], 0) :
++ do_stat(&st, argv[i]);
++ }
++
++ return 0;
++}
+diff --git a/usr/utils/mount_main.c b/usr/utils/mount_main.c
+index b5993cc..ee08720 100644
+--- a/usr/utils/mount_main.c
++++ b/usr/utils/mount_main.c
+@@ -7,14 +7,52 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
++#include <mntent.h>
+
+ #include "mount_opts.h"
+
++#define _PATH_MOUNTED "/etc/mtab"
++#define _PATH_PROC_MOUNTS "/proc/mounts"
++
+ char *progname;
+
+ static struct extra_opts extra;
+ static unsigned long rwflag;
+
++static __noreturn usage(void)
++{
++ fprintf(stderr, "Usage: %s [-r] [-w] [-o options] [-t type] [-f] [-i] "
++ "[-n] device directory\n", progname);
++ exit(1);
++}
++
++static __noreturn print_mount(char *type)
++{
++ FILE *mfp;
++ struct mntent *mnt;
++
++ mfp = setmntent(_PATH_PROC_MOUNTS, "r");
++ if (!mfp)
++ mfp = setmntent(_PATH_MOUNTED, "r");
++ if (!mfp)
++ perror("setmntent");
++
++ while ((mnt = getmntent(mfp)) != NULL) {
++ if (mnt->mnt_fsname && !strncmp(mnt->mnt_fsname, "no", 2))
++ continue;
++ if (type && mnt->mnt_type && strcmp(type, mnt->mnt_type))
++ continue;
++ printf("%s on %s", mnt->mnt_fsname, mnt->mnt_dir);
++ if (mnt->mnt_type != NULL && mnt->mnt_type != '\0')
++ printf (" type %s", mnt->mnt_type);
++ if (mnt->mnt_opts != NULL && mnt->mnt_opts != '\0')
++ printf (" (%s)", mnt->mnt_opts);
++ printf("\n");
++ }
++ endmntent(mfp);
++ exit(0);
++}
++
+ static int
+ do_mount(char *dev, char *dir, char *type, unsigned long rwflag, void *data)
+ {
+@@ -66,10 +104,18 @@ int main(int argc, char *argv[])
+ rwflag = MS_VERBOSE;
+
+ do {
+- c = getopt(argc, argv, "no:rt:wfi");
++ c = getopt(argc, argv, "fhino:rt:w");
+ if (c == EOF)
+ break;
+ switch (c) {
++ case 'f':
++ /* we can't edit /etc/mtab yet anyway; exit */
++ exit(0);
++ case 'i':
++ /* ignore for now; no support for mount helpers */
++ break;
++ case 'h':
++ usage();
+ case 'n':
+ /* no mtab writing */
+ break;
+@@ -85,12 +131,6 @@ int main(int argc, char *argv[])
+ case 'w':
+ rwflag &= ~MS_RDONLY;
+ break;
+- case 'f':
+- /* we can't edit /etc/mtab yet anyway; exit */
+- exit(0);
+- case 'i':
+- /* ignore for now; no support for mount helpers */
+- break;
+ case '?':
+ fprintf(stderr, "%s: invalid option -%c\n",
+ progname, optopt);
+@@ -98,6 +138,9 @@ int main(int argc, char *argv[])
+ }
+ } while (1);
+
++ if (optind == argc)
++ print_mount(type);
++
+ /*
+ * If remount, bind or move was specified, then we don't
+ * have a "type" as such. Use the dummy "none" type.
+@@ -105,11 +148,8 @@ int main(int argc, char *argv[])
+ if (rwflag & MS_TYPE)
+ type = "none";
+
+- if (optind + 2 != argc || type == NULL) {
+- fprintf(stderr, "Usage: %s [-r] [-w] [-o options] [-t type] [-f] [-i] "
+- "[-n] device directory\n", progname);
+- exit(1);
+- }
++ if (optind + 2 != argc || type == NULL)
++ usage();
+
+ return do_mount(argv[optind], argv[optind + 1], type, rwflag,
+ extra.str);
diff --git a/recipes/klibc/klibc-1.5.15+1.5.16/modprobe.patch b/recipes/klibc/klibc-1.5.15+1.5.16/modprobe.patch
new file mode 100644
index 0000000000..5a120722cc
--- /dev/null
+++ b/recipes/klibc/klibc-1.5.15+1.5.16/modprobe.patch
@@ -0,0 +1,1985 @@
+Index: klibc-1.5/usr/utils/Kbuild
+===================================================================
+--- klibc-1.5.orig/usr/utils/Kbuild 2008-03-07 22:01:45.223695348 +0100
++++ klibc-1.5/usr/utils/Kbuild 2008-03-07 22:48:44.660783243 +0100
+@@ -3,8 +3,8 @@
+ #
+
+ progs := chroot dd mkdir mkfifo mknod mount pivot_root umount
+-progs += true false sleep ln nuke minips cat ls
+-progs += uname halt kill readlink cpio sync dmesg
++progs += true false sleep ln nuke minips cat ls losetup
++progs += uname halt kill readlink cpio sync dmesg modprobe
+
+ static-y := $(addprefix static/, $(progs))
+ shared-y := $(addprefix shared/, $(progs))
+@@ -54,7 +54,10 @@
+ shared/cpio-y := cpio.o
+ static/sync-y := sync.o
+ shared/sync-y := sync.o
+-
++static/modprobe-y := modprobe.o
++shared/modprobe-y := modprobe.o
++static/losetup-y := losetup.o
++shared/losetup-y := losetup.o
+ # Additionally linked targets
+ always := static/reboot static/poweroff shared/reboot shared/poweroff
+
+Index: klibc-1.5/usr/utils/list.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ klibc-1.5/usr/utils/list.h 2008-03-07 22:33:22.287688586 +0100
+@@ -0,0 +1,238 @@
++/* Stolen from Linux Kernel Source's list.h -- GPL. */
++#ifndef _MODINITTOOLS_LIST_H
++#define _MODINITTOOLS_LIST_H
++
++#undef offsetof
++#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
++
++/**
++ * container_of - cast a member of a structure out to the containing structure
++ *
++ * @ptr: the pointer to the member.
++ * @type: the type of the container struct this is embedded in.
++ * @member: the name of the member within the struct.
++ *
++ */
++#define container_of(ptr, type, member) ({ \
++ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
++ (type *)( (char *)__mptr - offsetof(type,member) );})
++
++/*
++ * Simple doubly linked list implementation.
++ *
++ * Some of the internal functions ("__xxx") are useful when
++ * manipulating whole lists rather than single entries, as
++ * sometimes we already know the next/prev entries and we can
++ * generate better code by using them directly rather than
++ * using the generic single-entry routines.
++ */
++
++struct list_head {
++ struct list_head *next, *prev;
++};
++
++#define LIST_HEAD_INIT(name) { &(name), &(name) }
++
++#define LIST_HEAD(name) \
++ struct list_head name = LIST_HEAD_INIT(name)
++
++#define INIT_LIST_HEAD(ptr) do { \
++ (ptr)->next = (ptr); (ptr)->prev = (ptr); \
++} while (0)
++
++/*
++ * Insert a new entry between two known consecutive entries.
++ *
++ * This is only for internal list manipulation where we know
++ * the prev/next entries already!
++ */
++static inline void __list_add(struct list_head *new,
++ struct list_head *prev,
++ struct list_head *next)
++{
++ next->prev = new;
++ new->next = next;
++ new->prev = prev;
++ prev->next = new;
++}
++
++/**
++ * list_add - add a new entry
++ * @new: new entry to be added
++ * @head: list head to add it after
++ *
++ * Insert a new entry after the specified head.
++ * This is good for implementing stacks.
++ */
++static inline void list_add(struct list_head *new, struct list_head *head)
++{
++ __list_add(new, head, head->next);
++}
++
++/**
++ * list_add_tail - add a new entry
++ * @new: new entry to be added
++ * @head: list head to add it before
++ *
++ * Insert a new entry before the specified head.
++ * This is useful for implementing queues.
++ */
++static inline void list_add_tail(struct list_head *new, struct list_head *head)
++{
++ __list_add(new, head->prev, head);
++}
++
++/*
++ * Delete a list entry by making the prev/next entries
++ * point to each other.
++ *
++ * This is only for internal list manipulation where we know
++ * the prev/next entries already!
++ */
++static inline void __list_del(struct list_head * prev, struct list_head * next)
++{
++ next->prev = prev;
++ prev->next = next;
++}
++
++/**
++ * list_del - deletes entry from list.
++ * @entry: the element to delete from the list.
++ * Note: list_empty on entry does not return true after this, the entry is
++ * in an undefined state.
++ */
++static inline void list_del(struct list_head *entry)
++{
++ __list_del(entry->prev, entry->next);
++}
++
++/**
++ * list_del_init - deletes entry from list and reinitialize it.
++ * @entry: the element to delete from the list.
++ */
++static inline void list_del_init(struct list_head *entry)
++{
++ __list_del(entry->prev, entry->next);
++ INIT_LIST_HEAD(entry);
++}
++
++/**
++ * list_move - delete from one list and add as another's head
++ * @list: the entry to move
++ * @head: the head that will precede our entry
++ */
++static inline void list_move(struct list_head *list, struct list_head *head)
++{
++ __list_del(list->prev, list->next);
++ list_add(list, head);
++}
++
++/**
++ * list_move_tail - delete from one list and add as another's tail
++ * @list: the entry to move
++ * @head: the head that will follow our entry
++ */
++static inline void list_move_tail(struct list_head *list,
++ struct list_head *head)
++{
++ __list_del(list->prev, list->next);
++ list_add_tail(list, head);
++}
++
++/**
++ * list_empty - tests whether a list is empty
++ * @head: the list to test.
++ */
++static inline int list_empty(struct list_head *head)
++{
++ return head->next == head;
++}
++
++static inline void __list_splice(struct list_head *list,
++ struct list_head *head)
++{
++ struct list_head *first = list->next;
++ struct list_head *last = list->prev;
++ struct list_head *at = head->next;
++
++ first->prev = head;
++ head->next = first;
++
++ last->next = at;
++ at->prev = last;
++}
++
++/**
++ * list_splice - join two lists
++ * @list: the new list to add.
++ * @head: the place to add it in the first list.
++ */
++static inline void list_splice(struct list_head *list, struct list_head *head)
++{
++ if (!list_empty(list))
++ __list_splice(list, head);
++}
++
++/**
++ * list_splice_init - join two lists and reinitialise the emptied list.
++ * @list: the new list to add.
++ * @head: the place to add it in the first list.
++ *
++ * The list at @list is reinitialised
++ */
++static inline void list_splice_init(struct list_head *list,
++ struct list_head *head)
++{
++ if (!list_empty(list)) {
++ __list_splice(list, head);
++ INIT_LIST_HEAD(list);
++ }
++}
++
++/**
++ * list_entry - get the struct for this entry
++ * @ptr: the &struct list_head pointer.
++ * @type: the type of the struct this is embedded in.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_entry(ptr, type, member) \
++ container_of(ptr, type, member)
++
++/**
++ * list_for_each - iterate over a list
++ * @pos: the &struct list_head to use as a loop counter.
++ * @head: the head for your list.
++ */
++#define list_for_each(pos, head) \
++ for (pos = (head)->next; pos != (head); pos = pos->next)
++
++/**
++ * list_for_each_prev - iterate over a list backwards
++ * @pos: the &struct list_head to use as a loop counter.
++ * @head: the head for your list.
++ */
++#define list_for_each_prev(pos, head) \
++ for (pos = (head)->prev; pos != (head); pos = pos->prev)
++
++/**
++ * list_for_each_safe - iterate over a list safe against removal of list entry
++ * @pos: the &struct list_head to use as a loop counter.
++ * @n: another &struct list_head to use as temporary storage
++ * @head: the head for your list.
++ */
++#define list_for_each_safe(pos, n, head) \
++ for (pos = (head)->next, n = pos->next; pos != (head); \
++ pos = n, n = pos->next)
++
++/**
++ * list_for_each_entry - iterate over list of given type
++ * @pos: the type * to use as a loop counter.
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry(pos, head, member) \
++ for (pos = list_entry((head)->next, typeof(*pos), member); \
++ &pos->member != (head); \
++ pos = list_entry(pos->member.next, typeof(*pos), member))
++
++#endif
+Index: klibc-1.5/usr/utils/modprobe.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ klibc-1.5/usr/utils/modprobe.c 2008-03-08 03:05:51.847688952 +0100
+@@ -0,0 +1,1710 @@
++/* modprobe.c: insert a module into the kernel, intelligently.
++ Copyright (C) 2001 Rusty Russell.
++ Copyright (C) 2002, 2003 Rusty Russell, IBM Corporation.
++
++ 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
++*/
++#define _GNU_SOURCE /* asprintf */
++
++#include <sys/utsname.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <sys/mman.h>
++#include <fcntl.h>
++#include <stdarg.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <ctype.h>
++#include <string.h>
++#include <errno.h>
++#include <unistd.h>
++#include <dirent.h>
++#include <limits.h>
++#include <elf.h>
++#include <getopt.h>
++#include <fnmatch.h>
++#include <asm/unistd.h>
++#include <sys/wait.h>
++#include <syslog.h>
++#include <zlib.h>
++
++#define streq(a,b) (strcmp((a),(b)) == 0)
++#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
++
++#include "list.h"
++static inline void try_old_version(const char *progname, char *argv[])
++{
++}
++extern long init_module(void *, unsigned long, const char *);
++extern long delete_module(const char *, unsigned int);
++
++struct module {
++ struct list_head list;
++ char *modname;
++ char filename[0];
++};
++
++#ifndef MODULE_DIR
++#define MODULE_DIR "/lib/modules"
++#endif
++
++typedef void (*errfn_t)(const char *fmt, ...);
++
++/* Do we use syslog or stderr for messages? */
++static int log;
++
++static void message(const char *prefix, const char *fmt, va_list *arglist)
++{
++ char *buf, *buf2;
++
++ vasprintf(&buf, fmt, *arglist);
++ asprintf(&buf2, "%s%s", prefix, buf);
++
++ if (log)
++ syslog(LOG_NOTICE, "%s", buf2);
++ else
++ fprintf(stderr, "%s", buf2);
++ free(buf2);
++ free(buf);
++}
++void *grab_contents(gzFile *gzfd, unsigned long *size)
++{
++ unsigned int max = 16384;
++ void *buffer = malloc(max);
++ int ret;
++
++ if (!buffer)
++ return NULL;
++
++ *size = 0;
++ while ((ret = gzread(gzfd, buffer + *size, max - *size)) > 0) {
++ *size += ret;
++ if (*size == max) {
++ buffer = realloc(buffer, max *= 2);
++ if (!buffer)
++ return NULL;
++ }
++ }
++ if (ret < 0) {
++ free(buffer);
++ buffer = NULL;
++ }
++ return buffer;
++}
++
++void *grab_fd(int fd, unsigned long *size)
++{
++ gzFile gzfd;
++
++ gzfd = gzdopen(fd, "rb");
++ if (!gzfd)
++ return NULL;
++
++ /* gzclose(gzfd) would close fd, which would drop locks.
++ Don't blame zlib: POSIX locking semantics are so horribly
++ broken that they should be ripped out. */
++ return grab_contents(gzfd, size);
++}
++void release_file(void *data, unsigned long size)
++{
++ free(data);
++}
++
++
++static int warned = 0;
++static void warn(const char *fmt, ...)
++{
++ va_list arglist;
++ warned++;
++ va_start(arglist, fmt);
++ message("WARNING: ", fmt, &arglist);
++ va_end(arglist);
++}
++
++static void fatal(const char *fmt, ...)
++{
++ va_list arglist;
++ va_start(arglist, fmt);
++ message("FATAL: ", fmt, &arglist);
++ va_end(arglist);
++ exit(1);
++}
++
++
++static void grammar(const char *cmd, const char *filename, unsigned int line)
++{
++ warn("%s line %u: ignoring bad line starting with '%s'\n",
++ filename, line, cmd);
++}
++
++static void *do_nofail(void *ptr, const char *file, int line, const char *expr)
++{
++ if (!ptr) {
++ fatal("Memory allocation failure %s line %d: %s.\n",
++ file, line, expr);
++ }
++ return ptr;
++}
++
++#define NOFAIL(ptr) do_nofail((ptr), __FILE__, __LINE__, #ptr)
++
++static void print_usage(const char *progname)
++{
++ fprintf(stderr,
++ "Usage: %s [-v] [-V] [-C config-file] [-n] [-i] [-q] [-b] [-o <modname>] <modname> [parameters...]\n"
++ "%s -r [-n] [-i] [-v] <modulename> ...\n"
++ "%s -l -t <dirname> [ -a <modulename> ...]\n",
++ progname, progname, progname);
++ exit(1);
++}
++
++static int fgetc_wrapped(FILE *file, unsigned int *linenum)
++{
++ for (;;) {
++ int ch = fgetc(file);
++ if (ch != '\\')
++ return ch;
++ ch = fgetc(file);
++ if (ch != '\n')
++ return ch;
++ if (linenum)
++ (*linenum)++;
++ }
++}
++
++static char *getline_wrapped(FILE *file, unsigned int *linenum)
++{
++ int size = 1024;
++ int i = 0;
++ char *buf = NOFAIL(malloc(size));
++ for(;;) {
++ int ch = fgetc_wrapped(file, linenum);
++ if (i == size) {
++ size *= 2;
++ buf = NOFAIL(realloc(buf, size));
++ }
++ if (ch < 0 && i == 0) {
++ free(buf);
++ return NULL;
++ }
++ if (ch < 0 || ch == '\n') {
++ if (linenum)
++ (*linenum)++;
++ buf[i] = '\0';
++ return NOFAIL(realloc(buf, i+1));
++ }
++ buf[i++] = ch;
++ }
++}
++
++static struct module *find_module(const char *filename, struct list_head *list)
++{
++ struct module *i;
++
++ list_for_each_entry(i, list, list) {
++ if (strcmp(i->filename, filename) == 0)
++ return i;
++ }
++ return NULL;
++}
++
++/* Convert filename to the module name. Works if filename == modname, too. */
++static void filename2modname(char *modname, const char *filename)
++{
++ const char *afterslash;
++ unsigned int i;
++
++ afterslash = strrchr(filename, '/');
++ if (!afterslash)
++ afterslash = filename;
++ else
++ afterslash++;
++
++ /* Convert to underscores, stop at first . */
++ for (i = 0; afterslash[i] && afterslash[i] != '.'; i++) {
++ if (afterslash[i] == '-')
++ modname[i] = '_';
++ else
++ modname[i] = afterslash[i];
++ }
++ modname[i] = '\0';
++}
++
++static int lock_file(const char *filename)
++{
++ int fd = open(filename, O_RDWR, 0);
++
++ if (fd >= 0) {
++ struct flock lock;
++ lock.l_type = F_WRLCK;
++ lock.l_whence = SEEK_SET;
++ lock.l_start = 0;
++ lock.l_len = 1;
++ fcntl(fd, F_SETLKW, &lock);
++ } else
++ /* Read-only filesystem? There goes locking... */
++ fd = open(filename, O_RDONLY, 0);
++ return fd;
++}
++
++static void unlock_file(int fd)
++{
++ /* Valgrind is picky... */
++ close(fd);
++}
++
++static void add_module(char *filename, int namelen, struct list_head *list)
++{
++ struct module *mod;
++
++ /* If it's a duplicate: move it to the end, so it gets
++ inserted where it is *first* required. */
++ mod = find_module(filename, list);
++ if (mod)
++ list_del(&mod->list);
++ else {
++ /* No match. Create a new module. */
++ mod = NOFAIL(malloc(sizeof(struct module) + namelen + 1));
++ memcpy(mod->filename, filename, namelen);
++ mod->filename[namelen] = '\0';
++ mod->modname = NOFAIL(malloc(namelen + 1));
++ filename2modname(mod->modname, mod->filename);
++ }
++
++ list_add_tail(&mod->list, list);
++}
++
++/* Compare len chars of a to b, with _ and - equivalent. */
++static int modname_equal(const char *a, const char *b, unsigned int len)
++{
++ unsigned int i;
++
++ if (strlen(b) != len)
++ return 0;
++
++ for (i = 0; i < len; i++) {
++ if ((a[i] == '_' || a[i] == '-')
++ && (b[i] == '_' || b[i] == '-'))
++ continue;
++ if (a[i] != b[i])
++ return 0;
++ }
++ return 1;
++}
++
++/* Fills in list of modules if this is the line we want. */
++static int add_modules_dep_line(char *line,
++ const char *name,
++ struct list_head *list)
++{
++ char *ptr;
++ int len;
++ char *modname;
++
++ /* Ignore lines without : or which start with a # */
++ ptr = strchr(line, ':');
++ if (ptr == NULL || line[strspn(line, "\t ")] == '#')
++ return 0;
++
++ /* Is this the module we are looking for? */
++ *ptr = '\0';
++ if (strrchr(line, '/'))
++ modname = strrchr(line, '/') + 1;
++ else
++ modname = line;
++
++ len = strlen(modname);
++ if (strchr(modname, '.'))
++ len = strchr(modname, '.') - modname;
++ if (!modname_equal(modname, name, len))
++ return 0;
++
++ /* Create the list. */
++ add_module(line, ptr - line, list);
++
++ ptr++;
++ for(;;) {
++ char *dep_start;
++ ptr += strspn(ptr, " \t");
++ if (*ptr == '\0')
++ break;
++ dep_start = ptr;
++ ptr += strcspn(ptr, " \t");
++ add_module(dep_start, ptr - dep_start, list);
++ }
++ return 1;
++}
++
++static void read_depends(const char *dirname,
++ const char *start_name,
++ struct list_head *list)
++{
++ char *modules_dep_name;
++ char *line;
++ FILE *modules_dep;
++ int done = 0;
++
++ asprintf(&modules_dep_name, "%s/%s", dirname, "modules.dep");
++ modules_dep = fopen(modules_dep_name, "r");
++ if (!modules_dep)
++ fatal("Could not load %s: %s\n",
++ modules_dep_name, strerror(errno));
++
++ /* Stop at first line, as we can have duplicates (eg. symlinks
++ from boot/ */
++ while (!done && (line = getline_wrapped(modules_dep, NULL)) != NULL) {
++ done = add_modules_dep_line(line, start_name, list);
++ free(line);
++ }
++ fclose(modules_dep);
++ free(modules_dep_name);
++}
++
++/* We use error numbers in a loose translation... */
++static const char *insert_moderror(int err)
++{
++ switch (err) {
++ case ENOEXEC:
++ return "Invalid module format";
++ case ENOENT:
++ return "Unknown symbol in module, or unknown parameter (see dmesg)";
++ case ENOSYS:
++ return "Kernel does not have module support";
++ default:
++ return strerror(err);
++ }
++}
++
++static const char *remove_moderror(int err)
++{
++ switch (err) {
++ case ENOENT:
++ return "No such module";
++ case ENOSYS:
++ return "Kernel does not have module unloading support";
++ default:
++ return strerror(err);
++ }
++}
++
++/* Is module in /proc/modules? If so, fill in usecount if not NULL.
++ 0 means no, 1 means yes, -1 means unknown.
++ */
++static int module_in_kernel(const char *modname, unsigned int *usecount)
++{
++ FILE *proc_modules;
++ char *line;
++
++again:
++ /* Might not be mounted yet. Don't fail. */
++ proc_modules = fopen("/proc/modules", "r");
++ if (!proc_modules)
++ return -1;
++
++ while ((line = getline_wrapped(proc_modules, NULL)) != NULL) {
++ char *entry = strtok(line, " \n");
++
++ if (entry && streq(entry, modname)) {
++ /* If it exists, usecount is the third entry. */
++ if (!strtok(NULL, " \n"))
++ goto out;
++
++ if (!(entry = strtok(NULL, " \n"))) /* usecount */
++ goto out;
++ else
++ if (usecount)
++ *usecount = atoi(entry);
++
++ /* Followed by - then status. */
++ if (strtok(NULL, " \n")
++ && (entry = strtok(NULL, " \n")) != NULL) {
++ /* Locking will fail on ro fs, we might hit
++ * cases where module is in flux. Spin. */
++ if (streq(entry, "Loading")
++ || streq(entry, "Unloading")) {
++ usleep(100000);
++ free(line);
++ fclose(proc_modules);
++ goto again;
++ }
++ }
++
++ out:
++ free(line);
++ fclose(proc_modules);
++ return 1;
++ }
++ free(line);
++ }
++ fclose(proc_modules);
++ return 0;
++}
++
++static void replace_modname(struct module *module,
++ void *mem, unsigned long len,
++ const char *oldname, const char *newname)
++{
++ char *p;
++
++ /* 64 - sizeof(unsigned long) - 1 */
++ if (strlen(newname) > 55)
++ fatal("New name %s is too long\n", newname);
++
++ /* Find where it is in the module structure. Don't assume layout! */
++ for (p = mem; p < (char *)mem + len - strlen(oldname); p++) {
++ if (memcmp(p, oldname, strlen(oldname)) == 0) {
++ strcpy(p, newname);
++ return;
++ }
++ }
++
++ warn("Could not find old name in %s to replace!\n", module->filename);
++}
++
++static void *get_section32(void *file,
++ unsigned long size,
++ const char *name,
++ unsigned long *secsize)
++{
++ Elf32_Ehdr *hdr = file;
++ Elf32_Shdr *sechdrs = file + hdr->e_shoff;
++ const char *secnames;
++ unsigned int i;
++
++ /* Too short? */
++ if (size < sizeof(*hdr))
++ return NULL;
++ if (size < hdr->e_shoff + hdr->e_shnum * sizeof(sechdrs[0]))
++ return NULL;
++ if (size < sechdrs[hdr->e_shstrndx].sh_offset)
++ return NULL;
++
++ secnames = file + sechdrs[hdr->e_shstrndx].sh_offset;
++ for (i = 1; i < hdr->e_shnum; i++)
++ if (strcmp(secnames + sechdrs[i].sh_name, name) == 0) {
++ *secsize = sechdrs[i].sh_size;
++ return file + sechdrs[i].sh_offset;
++ }
++ return NULL;
++}
++
++static void *get_section64(void *file,
++ unsigned long size,
++ const char *name,
++ unsigned long *secsize)
++{
++ Elf64_Ehdr *hdr = file;
++ Elf64_Shdr *sechdrs = file + hdr->e_shoff;
++ const char *secnames;
++ unsigned int i;
++
++ /* Too short? */
++ if (size < sizeof(*hdr))
++ return NULL;
++ if (size < hdr->e_shoff + hdr->e_shnum * sizeof(sechdrs[0]))
++ return NULL;
++ if (size < sechdrs[hdr->e_shstrndx].sh_offset)
++ return NULL;
++
++ secnames = file + sechdrs[hdr->e_shstrndx].sh_offset;
++ for (i = 1; i < hdr->e_shnum; i++)
++ if (strcmp(secnames + sechdrs[i].sh_name, name) == 0) {
++ *secsize = sechdrs[i].sh_size;
++ return file + sechdrs[i].sh_offset;
++ }
++ return NULL;
++}
++
++static int elf_ident(void *mod, unsigned long size)
++{
++ /* "\177ELF" <byte> where byte = 001 for 32-bit, 002 for 64 */
++ char *ident = mod;
++
++ if (size < EI_CLASS || memcmp(mod, ELFMAG, SELFMAG) != 0)
++ return ELFCLASSNONE;
++ return ident[EI_CLASS];
++}
++
++static void *get_section(void *file,
++ unsigned long size,
++ const char *name,
++ unsigned long *secsize)
++{
++ switch (elf_ident(file, size)) {
++ case ELFCLASS32:
++ return get_section32(file, size, name, secsize);
++ case ELFCLASS64:
++ return get_section64(file, size, name, secsize);
++ default:
++ return NULL;
++ }
++}
++
++static void rename_module(struct module *module,
++ void *mod,
++ unsigned long len,
++ const char *newname)
++{
++ void *modstruct;
++ unsigned long modstruct_len;
++
++ /* Old-style */
++ modstruct = get_section(mod, len, ".gnu.linkonce.this_module",
++ &modstruct_len);
++ /* New-style */
++ if (!modstruct)
++ modstruct = get_section(mod, len, "__module", &modstruct_len);
++ if (!modstruct)
++ warn("Could not find module name to change in %s\n",
++ module->filename);
++ else
++ replace_modname(module, modstruct, modstruct_len,
++ module->modname, newname);
++}
++
++/* Kernel told to ignore these sections if SHF_ALLOC not set. */
++static void invalidate_section32(void *mod, const char *secname)
++{
++ Elf32_Ehdr *hdr = mod;
++ Elf32_Shdr *sechdrs = mod + hdr->e_shoff;
++ const char *secnames = mod + sechdrs[hdr->e_shstrndx].sh_offset;
++ unsigned int i;
++
++ for (i = 1; i < hdr->e_shnum; i++)
++ if (strcmp(secnames+sechdrs[i].sh_name, secname) == 0)
++ sechdrs[i].sh_flags &= ~SHF_ALLOC;
++}
++
++static void invalidate_section64(void *mod, const char *secname)
++{
++ Elf64_Ehdr *hdr = mod;
++ Elf64_Shdr *sechdrs = mod + hdr->e_shoff;
++ const char *secnames = mod + sechdrs[hdr->e_shstrndx].sh_offset;
++ unsigned int i;
++
++ for (i = 1; i < hdr->e_shnum; i++)
++ if (strcmp(secnames+sechdrs[i].sh_name, secname) == 0)
++ sechdrs[i].sh_flags &= ~(unsigned long long)SHF_ALLOC;
++}
++
++static void strip_section(struct module *module,
++ void *mod,
++ unsigned long len,
++ const char *secname)
++{
++ switch (elf_ident(mod, len)) {
++ case ELFCLASS32:
++ invalidate_section32(mod, secname);
++ break;
++ case ELFCLASS64:
++ invalidate_section64(mod, secname);
++ break;
++ default:
++ warn("Unknown module format in %s: not forcing version\n",
++ module->filename);
++ }
++}
++
++static const char *next_string(const char *string, unsigned long *secsize)
++{
++ /* Skip non-zero chars */
++ while (string[0]) {
++ string++;
++ if ((*secsize)-- <= 1)
++ return NULL;
++ }
++
++ /* Skip any zero padding. */
++ while (!string[0]) {
++ string++;
++ if ((*secsize)-- <= 1)
++ return NULL;
++ }
++ return string;
++}
++
++static void clear_magic(struct module *module, void *mod, unsigned long len)
++{
++ const char *p;
++ unsigned long modlen;
++
++ /* Old-style: __vermagic section */
++ strip_section(module, mod, len, "__vermagic");
++
++ /* New-style: in .modinfo section */
++ for (p = get_section(mod, len, ".modinfo", &modlen);
++ p;
++ p = next_string(p, &modlen)) {
++ if (strncmp(p, "vermagic=", strlen("vermagic=")) == 0) {
++ memset((char *)p, 0, strlen(p));
++ return;
++ }
++ }
++}
++
++struct module_options
++{
++ struct module_options *next;
++ char *modulename;
++ char *options;
++};
++
++struct module_command
++{
++ struct module_command *next;
++ char *modulename;
++ char *command;
++};
++
++struct module_alias
++{
++ struct module_alias *next;
++ char *module;
++};
++
++struct module_blacklist
++{
++ struct module_blacklist *next;
++ char *modulename;
++};
++
++/* Link in a new option line from the config file. */
++static struct module_options *
++add_options(const char *modname,
++ const char *option,
++ struct module_options *options)
++{
++ struct module_options *new;
++ char *tab;
++
++ new = NOFAIL(malloc(sizeof(*new)));
++ new->modulename = NOFAIL(strdup(modname));
++ new->options = NOFAIL(strdup(option));
++ /* We can handle tabs, kernel can't. */
++ for (tab = strchr(new->options, '\t'); tab; tab = strchr(tab, '\t'))
++ *tab = ' ';
++ new->next = options;
++ return new;
++}
++
++/* Link in a new install line from the config file. */
++static struct module_command *
++add_command(const char *modname,
++ const char *command,
++ struct module_command *commands)
++{
++ struct module_command *new;
++
++ new = NOFAIL(malloc(sizeof(*new)));
++ new->modulename = NOFAIL(strdup(modname));
++ new->command = NOFAIL(strdup(command));
++ new->next = commands;
++ return new;
++}
++
++/* Link in a new alias line from the config file. */
++static struct module_alias *
++add_alias(const char *modname, struct module_alias *aliases)
++{
++ struct module_alias *new;
++
++ new = NOFAIL(malloc(sizeof(*new)));
++ new->module = NOFAIL(strdup(modname));
++ new->next = aliases;
++ return new;
++}
++
++/* Link in a new blacklist line from the config file. */
++static struct module_blacklist *
++add_blacklist(const char *modname, struct module_blacklist *blacklist)
++{
++ struct module_blacklist *new;
++
++ new = NOFAIL(malloc(sizeof(*new)));
++ new->modulename = NOFAIL(strdup(modname));
++ new->next = blacklist;
++ return new;
++}
++
++/* Find blacklist commands if any. */
++static int
++find_blacklist(const char *modname, const struct module_blacklist *blacklist)
++{
++ while (blacklist) {
++ if (strcmp(blacklist->modulename, modname) == 0)
++ return 1;
++ blacklist = blacklist->next;
++ }
++ return 0;
++}
++
++/* return a new alias list, with backlisted elems filtered out */
++static struct module_alias *
++apply_blacklist(const struct module_alias *aliases,
++ const struct module_blacklist *blacklist)
++{
++ struct module_alias *result = NULL;
++ while (aliases) {
++ char *modname = aliases->module;
++ if (!find_blacklist(modname, blacklist))
++ result = add_alias(modname, result);
++ aliases = aliases->next;
++ }
++ return result;
++}
++
++/* Find install commands if any. */
++static const char *find_command(const char *modname,
++ const struct module_command *commands)
++{
++ while (commands) {
++ if (fnmatch(commands->modulename, modname, 0) == 0)
++ return commands->command;
++ commands = commands->next;
++ }
++ return NULL;
++}
++
++static char *append_option(char *options, const char *newoption)
++{
++ options = NOFAIL(realloc(options, strlen(options) + 1
++ + strlen(newoption) + 1));
++ if (strlen(options)) strcat(options, " ");
++ strcat(options, newoption);
++ return options;
++}
++
++/* Add to options */
++static char *add_extra_options(const char *modname,
++ char *optstring,
++ const struct module_options *options)
++{
++ while (options) {
++ if (strcmp(options->modulename, modname) == 0)
++ optstring = append_option(optstring, options->options);
++ options = options->next;
++ }
++ return optstring;
++}
++
++/* If we don't flush, then child processes print before we do */
++static void verbose_printf(int verbose, const char *fmt, ...)
++{
++ va_list arglist;
++
++ if (verbose) {
++ va_start(arglist, fmt);
++ vprintf(fmt, arglist);
++ fflush(stdout);
++ va_end(arglist);
++ }
++}
++
++/* Do an install/remove command: replace $CMDLINE_OPTS if it's specified. */
++static void do_command(const char *modname,
++ const char *command,
++ int verbose, int dry_run,
++ errfn_t error,
++ const char *type,
++ const char *cmdline_opts)
++{
++ int ret;
++ char *p, *replaced_cmd = NOFAIL(strdup(command));
++
++ while ((p = strstr(replaced_cmd, "$CMDLINE_OPTS")) != NULL) {
++ char *new;
++ asprintf(&new, "%.*s%s%s",
++ p - replaced_cmd, replaced_cmd, cmdline_opts,
++ p + strlen("$CMDLINE_OPTS"));
++ NOFAIL(new);
++ free(replaced_cmd);
++ replaced_cmd = new;
++ }
++
++ verbose_printf(verbose, "%s %s\n", type, replaced_cmd);
++ if (dry_run)
++ return;
++
++ setenv("MODPROBE_MODULE", modname, 1);
++ ret = system(replaced_cmd);
++ if (ret == -1 || WEXITSTATUS(ret))
++ error("Error running %s command for %s\n", type, modname);
++ free(replaced_cmd);
++}
++
++/* Actually do the insert. Frees second arg. */
++static void insmod(struct list_head *list,
++ char *optstring,
++ const char *newname,
++ int first_time,
++ errfn_t error,
++ int dry_run,
++ int verbose,
++ const struct module_options *options,
++ const struct module_command *commands,
++ int ignore_commands,
++ int ignore_proc,
++ int strip_vermagic,
++ int strip_modversion,
++ const char *cmdline_opts)
++{
++ int ret, fd;
++ unsigned long len;
++ void *map;
++ const char *command;
++ struct module *mod = list_entry(list->next, struct module, list);
++
++ /* Take us off the list. */
++ list_del(&mod->list);
++
++ /* Do things we (or parent) depend on first, but don't die if
++ * they fail. */
++ if (!list_empty(list)) {
++ insmod(list, NOFAIL(strdup("")), NULL, 0, warn,
++ dry_run, verbose, options, commands, 0, ignore_proc,
++ strip_vermagic, strip_modversion, cmdline_opts);
++ }
++
++ /* Lock before we look, in case it's initializing. */
++ fd = lock_file(mod->filename);
++ if (fd < 0) {
++ error("Could not open '%s': %s\n",
++ mod->filename, strerror(errno));
++ goto out_optstring;
++ }
++
++ /* Don't do ANYTHING if already in kernel. */
++ if (!ignore_proc
++ && module_in_kernel(newname ?: mod->modname, NULL) == 1) {
++ if (first_time)
++ error("Module %s already in kernel.\n",
++ newname ?: mod->modname);
++ goto out_unlock;
++ }
++
++ command = find_command(mod->modname, commands);
++ if (command && !ignore_commands) {
++ /* It might recurse: unlock. */
++ unlock_file(fd);
++ do_command(mod->modname, command, verbose, dry_run, error,
++ "install", cmdline_opts);
++ goto out_optstring;
++ }
++
++ map = grab_fd(fd, &len);
++ if (!map) {
++ error("Could not read '%s': %s\n",
++ mod->filename, strerror(errno));
++ goto out_unlock;
++ }
++
++ /* Rename it? */
++ if (newname)
++ rename_module(mod, map, len, newname);
++
++ if (strip_modversion)
++ strip_section(mod, map, len, "__versions");
++ if (strip_vermagic)
++ clear_magic(mod, map, len);
++
++ /* Config file might have given more options */
++ optstring = add_extra_options(mod->modname, optstring, options);
++
++ verbose_printf(verbose, "insmod %s %s\n", mod->filename, optstring);
++
++ if (dry_run)
++ goto out;
++
++ ret = init_module(map, len, optstring);
++ if (ret != 0) {
++ if (errno == EEXIST) {
++ if (first_time)
++ error("Module %s already in kernel.\n",
++ newname ?: mod->modname);
++ goto out_unlock;
++ }
++ error("Error inserting %s (%s): %s\n",
++ mod->modname, mod->filename, insert_moderror(errno));
++ }
++ out:
++ release_file(map, len);
++ out_unlock:
++ unlock_file(fd);
++ out_optstring:
++ free(optstring);
++ return;
++}
++
++/* Do recursive removal. */
++static void rmmod(struct list_head *list,
++ const char *name,
++ int first_time,
++ errfn_t error,
++ int dry_run,
++ int verbose,
++ struct module_command *commands,
++ int ignore_commands,
++ int ignore_inuse,
++ const char *cmdline_opts)
++{
++ const char *command;
++ unsigned int usecount = 0;
++ int lock;
++ struct module *mod = list_entry(list->next, struct module, list);
++
++ /* Take first one off the list. */
++ list_del(&mod->list);
++
++ /* Ignore failure; it's best effort here. */
++ lock = lock_file(mod->filename);
++
++ if (!name)
++ name = mod->modname;
++
++ /* Even if renamed, find commands to orig. name. */
++ command = find_command(mod->modname, commands);
++ if (command && !ignore_commands) {
++ /* It might recurse: unlock. */
++ unlock_file(lock);
++ do_command(mod->modname, command, verbose, dry_run, error,
++ "remove", cmdline_opts);
++ goto remove_rest_no_unlock;
++ }
++
++ if (module_in_kernel(name, &usecount) == 0)
++ goto nonexistent_module;
++
++ if (usecount != 0) {
++ if (!ignore_inuse)
++ error("Module %s is in use.\n", name);
++ goto remove_rest;
++ }
++
++ verbose_printf(verbose, "rmmod %s\n", mod->filename);
++
++ if (dry_run)
++ goto remove_rest;
++
++ if (delete_module(name, O_EXCL) != 0) {
++ if (errno == ENOENT)
++ goto nonexistent_module;
++ error("Error removing %s (%s): %s\n",
++ name, mod->filename,
++ remove_moderror(errno));
++ }
++
++ remove_rest:
++ unlock_file(lock);
++ remove_rest_no_unlock:
++ /* Now do things we depend. */
++ if (!list_empty(list))
++ rmmod(list, NULL, 0, warn, dry_run, verbose, commands,
++ 0, 1, cmdline_opts);
++ return;
++
++nonexistent_module:
++ if (first_time)
++ fatal("Module %s is not in kernel.\n", mod->modname);
++ goto remove_rest;
++}
++
++/* Does path contain directory(s) subpath? */
++static int type_matches(const char *path, const char *subpath)
++{
++ char *subpath_with_slashes;
++ int ret;
++
++ asprintf(&subpath_with_slashes, "/%s/", subpath);
++ NOFAIL(subpath_with_slashes);
++
++ ret = (strstr(path, subpath_with_slashes) != NULL);
++ free(subpath_with_slashes);
++ return ret;
++}
++
++static char *underscores(char *string)
++{
++ if (string) {
++ unsigned int i;
++ for (i = 0; string[i]; i++)
++ if (string[i] == '-')
++ string[i] = '_';
++ }
++ return string;
++}
++
++static int do_wildcard(const char *dirname,
++ const char *type,
++ const char *wildcard)
++{
++ char modules_dep_name[strlen(dirname) + sizeof("modules.dep") + 1];
++ char *line, *wcard;
++ FILE *modules_dep;
++
++ /* Canonicalize wildcard */
++ wcard = strdup(wildcard);
++ underscores(wcard);
++
++ sprintf(modules_dep_name, "%s/%s", dirname, "modules.dep");
++ modules_dep = fopen(modules_dep_name, "r");
++ if (!modules_dep)
++ fatal("Could not load %s: %s\n",
++ modules_dep_name, strerror(errno));
++
++ while ((line = getline_wrapped(modules_dep, NULL)) != NULL) {
++ char *ptr;
++
++ /* Ignore lines without : or which start with a # */
++ ptr = strchr(line, ':');
++ if (ptr == NULL || line[strspn(line, "\t ")] == '#')
++ goto next;
++ *ptr = '\0';
++
++ /* "type" must match complete directory component(s). */
++ if (!type || type_matches(line, type)) {
++ char modname[strlen(line)+1];
++
++ filename2modname(modname, line);
++ if (fnmatch(wcard, modname, 0) == 0)
++ printf("%s\n", line);
++ }
++ next:
++ free(line);
++ }
++
++ free(wcard);
++ return 0;
++}
++
++static char *strsep_skipspace(char **string, char *delim)
++{
++ if (!*string)
++ return NULL;
++ *string += strspn(*string, delim);
++ return strsep(string, delim);
++}
++
++/* Recursion */
++static int read_config(const char *filename,
++ const char *name,
++ int dump_only,
++ int removing,
++ struct module_options **options,
++ struct module_command **commands,
++ struct module_alias **alias,
++ struct module_blacklist **blacklist);
++
++/* FIXME: Maybe should be extended to "alias a b [and|or c]...". --RR */
++static int read_config_file(const char *filename,
++ const char *name,
++ int dump_only,
++ int removing,
++ struct module_options **options,
++ struct module_command **commands,
++ struct module_alias **aliases,
++ struct module_blacklist **blacklist)
++{
++ char *line;
++ unsigned int linenum = 0;
++ FILE *cfile;
++
++ cfile = fopen(filename, "r");
++ if (!cfile)
++ return 0;
++
++ while ((line = getline_wrapped(cfile, &linenum)) != NULL) {
++ char *ptr = line;
++ char *cmd, *modname;
++
++ if (dump_only)
++ printf("%s\n", line);
++
++ cmd = strsep_skipspace(&ptr, "\t ");
++ if (cmd == NULL || cmd[0] == '#' || cmd[0] == '\0')
++ continue;
++
++ if (strcmp(cmd, "alias") == 0) {
++ char *wildcard
++ = underscores(strsep_skipspace(&ptr, "\t "));
++ char *realname
++ = underscores(strsep_skipspace(&ptr, "\t "));
++
++ if (!wildcard || !realname)
++ grammar(cmd, filename, linenum);
++ else if (fnmatch(wildcard,name,0) == 0)
++ *aliases = add_alias(realname, *aliases);
++ } else if (strcmp(cmd, "include") == 0) {
++ struct module_alias *newalias = NULL;
++ char *newfilename;
++
++ newfilename = strsep_skipspace(&ptr, "\t ");
++ if (!newfilename)
++ grammar(cmd, filename, linenum);
++ else {
++ if (!read_config(newfilename, name,
++ dump_only, removing,
++ options, commands, &newalias,
++ blacklist))
++ warn("Failed to open included"
++ " config file %s: %s\n",
++ newfilename, strerror(errno));
++
++ /* Files included override aliases,
++ etc that was already set ... */
++ if (newalias)
++ *aliases = newalias;
++ }
++ } else if (strcmp(cmd, "options") == 0) {
++ modname = strsep_skipspace(&ptr, "\t ");
++ if (!modname || !ptr)
++ grammar(cmd, filename, linenum);
++ else {
++ ptr += strspn(ptr, "\t ");
++ *options = add_options(underscores(modname),
++ ptr, *options);
++ }
++ } else if (strcmp(cmd, "install") == 0) {
++ modname = strsep_skipspace(&ptr, "\t ");
++ if (!modname || !ptr)
++ grammar(cmd, filename, linenum);
++ else if (!removing) {
++ ptr += strspn(ptr, "\t ");
++ *commands = add_command(underscores(modname),
++ ptr, *commands);
++ }
++ } else if (strcmp(cmd, "blacklist") == 0) {
++ modname = strsep_skipspace(&ptr, "\t ");
++ if (!modname)
++ grammar(cmd, filename, linenum);
++ else if (!removing) {
++ *blacklist = add_blacklist(underscores(modname),
++ *blacklist);
++ }
++ } else if (strcmp(cmd, "remove") == 0) {
++ modname = strsep_skipspace(&ptr, "\t ");
++ if (!modname || !ptr)
++ grammar(cmd, filename, linenum);
++ else if (removing) {
++ ptr += strspn(ptr, "\t ");
++ *commands = add_command(underscores(modname),
++ ptr, *commands);
++ }
++ } else
++ grammar(cmd, filename, linenum);
++
++ free(line);
++ }
++ fclose(cfile);
++ return 1;
++}
++
++/* Simple format, ignore lines starting with #, one command per line.
++ Returns true or false. */
++static int read_config(const char *filename,
++ const char *name,
++ int dump_only,
++ int removing,
++ struct module_options **options,
++ struct module_command **commands,
++ struct module_alias **aliases,
++ struct module_blacklist **blacklist)
++{
++ DIR *dir;
++ int ret = 0;
++
++ /* ignore everything in this directory */
++ if (streq(filename, "/etc/modprobe.d/arch"))
++ return 1;
++
++ /* Reiser4 has file/directory duality: treat it as both. */
++ dir = opendir(filename);
++ if (dir) {
++ struct dirent *i;
++ while ((i = readdir(dir)) != NULL) {
++ if (!streq(i->d_name,".") && !streq(i->d_name,"..")) {
++ char sub[strlen(filename) + 1
++ + strlen(i->d_name) + 1];
++
++ sprintf(sub, "%s/%s", filename, i->d_name);
++ if (!read_config(sub, name,
++ dump_only, removing, options,
++ commands, aliases, blacklist))
++ warn("Failed to open"
++ " config file %s: %s\n",
++ sub, strerror(errno));
++ }
++ }
++ closedir(dir);
++ ret = 1;
++ }
++
++ if (read_config_file(filename, name, dump_only, removing,
++ options, commands, aliases, blacklist))
++ ret = 1;
++
++ return ret;
++}
++
++static const char *default_configs[] =
++{
++ "/etc/modprobe.conf",
++ "/etc/modprobe.d",
++};
++
++static void read_toplevel_config(const char *filename,
++ const char *name,
++ int dump_only,
++ int removing,
++ struct module_options **options,
++ struct module_command **commands,
++ struct module_alias **aliases,
++ struct module_blacklist **blacklist)
++{
++ unsigned int i;
++
++ if (filename) {
++ if (!read_config(filename, name, dump_only, removing,
++ options, commands, aliases, blacklist))
++ fatal("Failed to open config file %s: %s\n",
++ filename, strerror(errno));
++ return;
++ }
++
++ /* Try defaults. */
++ for (i = 0; i < ARRAY_SIZE(default_configs); i++) {
++ if (read_config(default_configs[i], name, dump_only, removing,
++ options, commands, aliases, blacklist))
++ return;
++ }
++}
++
++static void add_to_env_var(const char *option)
++{
++ const char *oldenv;
++
++ if ((oldenv = getenv("MODPROBE_OPTIONS")) != NULL) {
++ char *newenv;
++ asprintf(&newenv, "%s %s", oldenv, option);
++ setenv("MODPROBE_OPTIONS", newenv, 1);
++ } else
++ setenv("MODPROBE_OPTIONS", option, 1);
++}
++
++/* Prepend options from environment. */
++static char **merge_args(char *args, char *argv[], int *argc)
++{
++ char *arg, *argstring;
++ char **newargs = NULL;
++ unsigned int i, num_env = 0;
++
++ if (!args)
++ return argv;
++
++ argstring = NOFAIL(strdup(args));
++ for (arg = strtok(argstring, " "); arg; arg = strtok(NULL, " ")) {
++ num_env++;
++ newargs = NOFAIL(realloc(newargs,
++ sizeof(newargs[0])
++ * (num_env + *argc + 1)));
++ newargs[num_env] = arg;
++ }
++
++ /* Append commandline args */
++ newargs[0] = argv[0];
++ for (i = 1; i <= *argc; i++)
++ newargs[num_env+i] = argv[i];
++
++ *argc += num_env;
++ return newargs;
++}
++
++static char *gather_options(char *argv[])
++{
++ char *optstring = NOFAIL(strdup(""));
++
++ /* Rest is module options */
++ while (*argv) {
++ /* Quote value if it contains spaces. */
++ unsigned int eq = strcspn(*argv, "=");
++
++ if (strchr(*argv+eq, ' ') && !strchr(*argv, '"')) {
++ char quoted[strlen(*argv) + 3];
++ (*argv)[eq] = '\0';
++ sprintf(quoted, "%s=\"%s\"", *argv, *argv+eq+1);
++ optstring = append_option(optstring, quoted);
++ } else
++ optstring = append_option(optstring, *argv);
++ argv++;
++ }
++ return optstring;
++}
++
++static void handle_module(const char *modname,
++ struct list_head *todo_list,
++ const char *newname,
++ int remove,
++ char *options,
++ int first_time,
++ errfn_t error,
++ int dry_run,
++ int verbose,
++ struct module_options *modoptions,
++ struct module_command *commands,
++ int ignore_commands,
++ int ignore_proc,
++ int strip_vermagic,
++ int strip_modversion,
++ int unknown_silent,
++ const char *cmdline_opts)
++{
++ if (list_empty(todo_list)) {
++ const char *command;
++
++ /* The dependencies have to be real modules, but
++ handle case where the first is completely bogus. */
++ command = find_command(modname, commands);
++ if (command && !ignore_commands) {
++ do_command(modname, command, verbose, dry_run, error,
++ remove ? "remove":"install", cmdline_opts);
++ return;
++ }
++
++ if (unknown_silent)
++ exit(1);
++ error("Module %s not found.\n", modname);
++ return;
++ }
++
++ if (remove)
++ rmmod(todo_list, newname, first_time, error, dry_run, verbose,
++ commands, ignore_commands, 0, cmdline_opts);
++ else
++ insmod(todo_list, NOFAIL(strdup(options)), newname,
++ first_time, error, dry_run, verbose, modoptions,
++ commands, ignore_commands, ignore_proc, strip_vermagic,
++ strip_modversion, cmdline_opts);
++}
++
++static struct option options[] = { { "verbose", 0, NULL, 'v' },
++ { "version", 0, NULL, 'V' },
++ { "config", 1, NULL, 'C' },
++ { "name", 1, NULL, 'o' },
++ { "remove", 0, NULL, 'r' },
++ { "showconfig", 0, NULL, 'c' },
++ { "autoclean", 0, NULL, 'k' },
++ { "quiet", 0, NULL, 'q' },
++ { "show", 0, NULL, 'n' },
++ { "dry-run", 0, NULL, 'n' },
++ { "syslog", 0, NULL, 's' },
++ { "type", 1, NULL, 't' },
++ { "list", 0, NULL, 'l' },
++ { "all", 0, NULL, 'a' },
++ { "ignore-install", 0, NULL, 'i' },
++ { "ignore-remove", 0, NULL, 'i' },
++ { "force", 0, NULL, 'f' },
++ { "force-vermagic", 0, NULL, 1 },
++ { "force-modversion", 0, NULL, 2 },
++ { "set-version", 1, NULL, 'S' },
++ { "show-depends", 0, NULL, 'D' },
++ { "first-time", 0, NULL, 3 },
++ { "use-blacklist", 0, NULL, 'b' },
++ { NULL, 0, NULL, 0 } };
++
++#define MODPROBE_DEVFSD_CONF "/etc/modprobe.devfs"
++
++/* This is a horrible hack to allow devfsd, which calls modprobe with
++ -C /etc/modules.conf or /etc/modules.devfs, to work. FIXME. */
++/* Modern devfsd or variants should use -q explicitly in 2.6. */
++static int is_devfs_call(char *argv[])
++{
++ unsigned int i;
++
++ /* Look for "/dev" arg */
++ for (i = 1; argv[i]; i++) {
++ if (strncmp(argv[i], "/dev/", 5) == 0)
++ return 1;
++ }
++ return 0;
++}
++
++int main(int argc, char *argv[])
++{
++ struct utsname buf;
++ struct stat statbuf;
++ int opt;
++ int dump_only = 0;
++ int dry_run = 0;
++ int remove = 0;
++ int verbose = 0;
++ int unknown_silent = 0;
++ int list_only = 0;
++ int all = 0;
++ int ignore_commands = 0;
++ int strip_vermagic = 0;
++ int strip_modversion = 0;
++ int ignore_proc = 0;
++ int first_time = 0;
++ int use_blacklist = 0;
++ unsigned int i, num_modules;
++ char *type = NULL;
++ const char *config = NULL;
++ char *dirname, *optstring;
++ char *newname = NULL;
++ char *aliasfilename, *symfilename;
++ errfn_t error = fatal;
++
++ /* Prepend options from environment. */
++ argv = merge_args(getenv("MODPROBE_OPTIONS"), argv, &argc);
++
++ /* --set-version overrides version, and disables backwards compat. */
++ for (opt = 1; opt < argc; opt++)
++ if (strncmp(argv[opt],"--set-version",strlen("--set-version"))
++ == 0)
++ break;
++
++ if (opt == argc)
++ try_old_version("modprobe", argv);
++
++ uname(&buf);
++ while ((opt = getopt_long(argc, argv, "vVC:o:rknqQsclt:aifb", options, NULL)) != -1){
++ switch (opt) {
++ case 'v':
++ add_to_env_var("-v");
++ verbose = 1;
++ break;
++ case 'V':
++ puts("module-init-tools version 3.2.2");
++ exit(0);
++ case 'S':
++ strncpy(buf.release, optarg, sizeof(buf.release));
++ buf.release[sizeof(buf.release)-1] = '\0';
++ break;
++ case 'C':
++ if (is_devfs_call(argv)) {
++ if (streq("/etc/modules.devfs", optarg)) {
++ config = MODPROBE_DEVFSD_CONF;
++ add_to_env_var("-C");
++ add_to_env_var(config);
++ /* Fall thru to -q */
++ } else if (streq("/etc/modules.conf", optarg))
++ /* Ignore config, fall thru to -q */
++ ;
++ else {
++ /* False alarm. Treat as normal. */
++ config = optarg;
++ add_to_env_var("-C");
++ add_to_env_var(config);
++ break;
++ }
++ } else {
++ config = optarg;
++ add_to_env_var("-C");
++ add_to_env_var(config);
++ break;
++ }
++ case 'q':
++ unknown_silent = 1;
++ add_to_env_var("-q");
++ break;
++ case 'D':
++ dry_run = 1;
++ ignore_proc = 1;
++ verbose = 1;
++ add_to_env_var("-D");
++ break;
++ case 'o':
++ newname = optarg;
++ break;
++ case 'r':
++ remove = 1;
++ break;
++ case 'c':
++ dump_only = 1;
++ break;
++ case 't':
++ type = optarg;
++ break;
++ case 'l':
++ list_only = 1;
++ break;
++ case 'a':
++ all = 1;
++ error = warn;
++ break;
++ case 'k':
++ /* FIXME: This should actually do something */
++ break;
++ case 'n':
++ dry_run = 1;
++ break;
++ case 's':
++ add_to_env_var("-s");
++ log = 1;
++ break;
++ case 'i':
++ ignore_commands = 1;
++ break;
++ case 'f':
++ strip_vermagic = 1;
++ strip_modversion = 1;
++ break;
++ case 'b':
++ use_blacklist = 1;
++ break;
++ case 1:
++ strip_vermagic = 1;
++ break;
++ case 2:
++ strip_modversion = 1;
++ break;
++ case 3:
++ first_time = 1;
++ break;
++ default:
++ print_usage(argv[0]);
++ }
++ }
++
++ /* If stderr not open, go to syslog */
++ if (log || fstat(STDERR_FILENO, &statbuf) != 0) {
++ openlog("modprobe", LOG_CONS, LOG_DAEMON);
++ log = 1;
++ }
++
++ if (argc < optind + 1 && !dump_only && !list_only && !remove)
++ print_usage(argv[0]);
++
++ dirname = NOFAIL(malloc(strlen(buf.release) + sizeof(MODULE_DIR) + 1));
++ sprintf(dirname, "%s/%s", MODULE_DIR, buf.release);
++ aliasfilename = NOFAIL(malloc(strlen(dirname)
++ + sizeof("/modules.alias")));
++ sprintf(aliasfilename, "%s/modules.alias", dirname);
++ symfilename = NOFAIL(malloc(strlen(dirname)
++ + sizeof("/modules.symbols")));
++ sprintf(symfilename, "%s/modules.symbols", dirname);
++
++ /* Old-style -t xxx wildcard? Only with -l. */
++ if (list_only) {
++ if (optind+1 < argc)
++ fatal("Can't have multiple wildcards\n");
++ /* fprintf(stderr, "man find\n"); return 1; */
++ return do_wildcard(dirname, type, argv[optind]?:"*");
++ }
++ if (type)
++ fatal("-t only supported with -l");
++
++ if (dump_only) {
++ struct module_command *commands = NULL;
++ struct module_options *modoptions = NULL;
++ struct module_alias *aliases = NULL;
++ struct module_blacklist *blacklist = NULL;
++
++ read_toplevel_config(config, "", 1, 0,
++ &modoptions, &commands, &aliases, &blacklist);
++ read_config(aliasfilename, "", 1, 0,&modoptions, &commands,
++ &aliases, &blacklist);
++ read_config(symfilename, "", 1, 0, &modoptions, &commands,
++ &aliases, &blacklist);
++ exit(0);
++ }
++
++ if (remove || all) {
++ num_modules = argc - optind;
++ optstring = NOFAIL(strdup(""));
++ } else {
++ num_modules = 1;
++ optstring = gather_options(argv+optind+1);
++ }
++
++ /* num_modules is always 1 except for -r or -a. */
++ for (i = 0; i < num_modules; i++) {
++ struct module_command *commands = NULL;
++ struct module_options *modoptions = NULL;
++ struct module_alias *aliases = NULL;
++ struct module_blacklist *blacklist = NULL;
++ LIST_HEAD(list);
++ char *modulearg = argv[optind + i];
++
++ /* Convert name we are looking for */
++ underscores(modulearg);
++
++ /* Returns the resolved alias, options */
++ read_toplevel_config(config, modulearg, 0,
++ remove, &modoptions, &commands, &aliases, &blacklist);
++
++ /* No luck? Try symbol names, if starts with symbol:. */
++ if (!aliases
++ && strncmp(modulearg, "symbol:", strlen("symbol:")) == 0)
++ read_config(symfilename, modulearg, 0,
++ remove, &modoptions, &commands,
++ &aliases, &blacklist);
++
++ if (!aliases) {
++ /* We only use canned aliases as last resort. */
++ read_depends(dirname, modulearg, &list);
++
++ if (list_empty(&list)
++ && !find_command(modulearg, commands))
++ {
++ read_config(aliasfilename, modulearg, 0,
++ remove, &modoptions, &commands,
++ &aliases, &blacklist);
++ aliases = apply_blacklist(aliases, blacklist);
++ }
++ }
++
++ if (aliases) {
++ errfn_t err = error;
++
++ /* More than one alias? Don't bail out on failure. */
++ if (aliases->next)
++ err = warn;
++ while (aliases) {
++ /* Add the options for this alias. */
++ char *opts = NOFAIL(strdup(optstring));
++ opts = add_extra_options(modulearg,
++ opts, modoptions);
++
++ read_depends(dirname, aliases->module, &list);
++ handle_module(aliases->module, &list, newname,
++ remove, opts, first_time, err,
++ dry_run, verbose, modoptions,
++ commands, ignore_commands,
++ ignore_proc, strip_vermagic,
++ strip_modversion,
++ unknown_silent,
++ optstring);
++
++ aliases = aliases->next;
++ INIT_LIST_HEAD(&list);
++ }
++ } else {
++ if (use_blacklist
++ && find_blacklist(modulearg, blacklist))
++ continue;
++
++ handle_module(modulearg, &list, newname, remove,
++ optstring, first_time, error, dry_run,
++ verbose, modoptions, commands,
++ ignore_commands, ignore_proc,
++ strip_vermagic, strip_modversion,
++ unknown_silent, optstring);
++ }
++ }
++ if (log)
++ closelog();
++
++ return 0;
++}
diff --git a/recipes/klibc/klibc-1.5.15+1.5.16/socket.h.patch b/recipes/klibc/klibc-1.5.15+1.5.16/socket.h.patch
new file mode 100644
index 0000000000..016fadbcf4
--- /dev/null
+++ b/recipes/klibc/klibc-1.5.15+1.5.16/socket.h.patch
@@ -0,0 +1,139 @@
+upstream: http://www.zytor.com/pipermail/klibc/2010-February/002486.html,http://www.zytor.com/pipermail/klibc/2010-February/002487.html,http://www.zytor.com/pipermail/klibc/2010-February/002488.html
+status: pending
+comment: squashed 3 commits togheter
+
+Subject: Add relevant socket.h definitions
+From: maximilian attems <max@stro.at>
+Date: Tue Feb 23 06:02:42 PST 2010
+
+
+linux-2.6 9c501935a3cdcf6b1d35aaee3aa11c7a7051a305 cleaned
+<linux/socket.h> from allmost any userspace export.
+
+thus define the stuff that used to be there in klibc socket.h
+
+Signed-off-by: maximilian attems <max@stro.at>
+---
+
+diff --git a/usr/include/sys/socket.h b/usr/include/sys/socket.h
+index 7d47087..a6357d1 100644
+--- a/usr/include/sys/socket.h
++++ b/usr/include/sys/socket.h
+@@ -9,6 +9,9 @@
+ #include <klibc/compiler.h>
+ #include <klibc/sysconfig.h>
+ #include <linux/socket.h>
++#include <linux/sockios.h> /* the SIOCxxx I/O controls */
++#include <linux/uio.h> /* iovec support */
++#include <asm/socket.h> /* arch-dependent defines */
+ #if _KLIBC_HAS_ARCHSOCKET_H
+ #include <klibc/archsocket.h>
+ #endif
+@@ -27,6 +30,40 @@
+ # define SOCK_PACKET 10
+ #endif
+
++
++typedef unsigned short sa_family_t;
++
++struct sockaddr {
++ sa_family_t sa_family; /* address family, AF_xxx */
++ char sa_data[14]; /* 14 bytes of protocol address */
++};
++
++
++/*
++ * As we do 4.4BSD message passing we use a 4.4BSD message passing
++ * system, not 4.3. Thus msg_accrights(len) are now missing. They
++ * belong in an obscure libc emulation or the bin.
++ */
++
++struct msghdr {
++ void * msg_name; /* Socket name */
++ int msg_namelen; /* Length of name */
++ struct iovec * msg_iov; /* Data blocks */
++ size_t msg_iovlen; /* Number of blocks */
++ void * msg_control; /* Per protocol magic (eg BSD file descriptor passing) */
++ size_t msg_controllen; /* Length of cmsg list */
++ unsigned msg_flags;
++};
++
++
++/* address families */
++#define AF_INET 2 /* Internet IP Protocol */
++#define AF_INET6 10 /* IP version 6 */
++#define AF_PACKET 17 /* Packet family */
++
++/* Flags we can use with send/ and recv. */
++#define MSG_PEEK 2
++
+ typedef int socklen_t;
+
+ __extern int socket(int, int, int);
+diff --git a/usr/kinit/nfsmount/nfsmount.h b/usr/kinit/nfsmount/nfsmount.h
+index 6d958bc..59c20cb 100644
+--- a/usr/kinit/nfsmount/nfsmount.h
++++ b/usr/kinit/nfsmount/nfsmount.h
+@@ -3,6 +3,9 @@
+
+ #include <linux/nfs_mount.h>
+
++#define MNTPROC_MNT 1
++#define MNTPROC_UMNT 3
++
+ extern int nfs_port;
+
+ extern int nfsmount_main(int argc, char *argv[]);
+diff --git a/usr/kinit/nfsmount/dummypmap.c b/usr/kinit/nfsmount/dummypmap.c
+index 43abe37..481e23b 100644
+--- a/usr/kinit/nfsmount/dummypmap.c
++++ b/usr/kinit/nfsmount/dummypmap.c
+@@ -39,7 +39,7 @@ struct portmap_reply {
+
+ static int bind_portmap(void)
+ {
+- int sock = socket(PF_INET, SOCK_DGRAM, 0);
++ int sock = socket(AF_INET, SOCK_DGRAM, 0);
+ struct sockaddr_in sin;
+
+ if (sock < 0)
+diff --git a/usr/kinit/nfsmount/mount.c b/usr/kinit/nfsmount/mount.c
+index a55af91..f18cffa 100644
+--- a/usr/kinit/nfsmount/mount.c
++++ b/usr/kinit/nfsmount/mount.c
+@@ -290,9 +290,9 @@ int nfs_mount(const char *pathname, const char *hostname,
+ mounted = 1;
+
+ if (data->flags & NFS_MOUNT_TCP) {
+- sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
++ sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ } else {
+- sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
++ sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ }
+
+ if (sock == -1) {
+diff --git a/usr/kinit/nfsmount/sunrpc.c b/usr/kinit/nfsmount/sunrpc.c
+index 6607cf7..6fb81a1 100644
+--- a/usr/kinit/nfsmount/sunrpc.c
++++ b/usr/kinit/nfsmount/sunrpc.c
+@@ -152,7 +152,7 @@ struct client *tcp_client(uint32_t server, uint16_t port, uint32_t flags)
+
+ memset(clnt, 0, sizeof(clnt));
+
+- if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
++ if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
+ perror("socket");
+ goto bail;
+ }
+@@ -197,7 +197,7 @@ struct client *udp_client(uint32_t server, uint16_t port, uint32_t flags)
+
+ memset(clnt, 0, sizeof(clnt));
+
+- if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) {
++ if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) {
+ perror("socket");
+ goto bail;
+ }
+--
+1.6.6.1
diff --git a/recipes/klibc/klibc-1.5.15+1.5.16/staging.patch b/recipes/klibc/klibc-1.5.15+1.5.16/staging.patch
new file mode 100644
index 0000000000..9418c6b764
--- /dev/null
+++ b/recipes/klibc/klibc-1.5.15+1.5.16/staging.patch
@@ -0,0 +1,134 @@
+Index: klibc-1.5/Makefile
+===================================================================
+--- klibc-1.5.orig/Makefile 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/Makefile 2008-02-24 15:25:15.213824149 +0100
+@@ -33,7 +33,7 @@
+ export PERL := perl
+
+ # Location for installation
+-export prefix = /usr
++export prefix = $(INST)
+ export bindir = $(prefix)/bin
+ export libdir = $(prefix)/lib
+ export mandir = $(prefix)/man
+Index: klibc-1.5/scripts/Kbuild.install
+===================================================================
+--- klibc-1.5.orig/scripts/Kbuild.install 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/scripts/Kbuild.install 2008-02-24 15:24:28.085825030 +0100
+@@ -88,16 +88,12 @@
+ header:
+ $(Q)echo " INSTALL headers + man pages to $(INSTALLROOT)$(INSTALLDIR)"
+ $(Q)mkdir -p $(INSTALLROOT)$(bindir)
+- $(Q)mkdir -p $(INSTALLROOT)$(mandir)/man1
+- $(Q)mkdir -p $(INSTALLROOT)$(SHLIBDIR)
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)
+ $(Q)-rm -rf $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)lib
+- $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)bin
+ $(Q)make -C $(KLIBCKERNELSRC) ARCH=$(KLIBCARCH) INSTALL_HDR_PATH=$(INSTALLROOT)$(INSTALLDIR)/$(KCROSS) headers_install
+ $(Q)cp -rf usr/include/. $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/.
+- $(Q)$(install-data) $(srctree)/klcc/klcc.1 $(INSTALLROOT)$(mandir)/man1/$(KCROSS)klcc.1
+ $(Q)$(install-bin) $(objtree)/klcc/$(KCROSS)klcc $(INSTALLROOT)$(bindir)
+
+ footer: header
+Index: klibc-1.5/usr/dash/Kbuild
+===================================================================
+--- klibc-1.5.orig/usr/dash/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/dash/Kbuild 2008-02-24 15:13:50.189827040 +0100
+@@ -107,5 +107,3 @@
+ $(obj)/arith.c: $(obj)/arith.h
+ $(Q):
+
+-# Targets to install
+-install-y := sh.shared
+Index: klibc-1.5/usr/gzip/Kbuild
+===================================================================
+--- klibc-1.5.orig/usr/gzip/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/gzip/Kbuild 2008-02-24 15:13:50.197824604 +0100
+@@ -21,5 +21,3 @@
+ # Cleaning
+ targets := gzip gzip.g gunzip zcat
+
+-# Targets to install
+-install-y := gzip gunzip zcat
+Index: klibc-1.5/usr/kinit/fstype/Kbuild
+===================================================================
+--- klibc-1.5.orig/usr/kinit/fstype/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/kinit/fstype/Kbuild 2008-02-24 15:13:50.201824503 +0100
+@@ -21,5 +21,3 @@
+ # Cleaning
+ clean-dirs := static shared
+
+-# install binary
+-install-y := $(shared-y)
+Index: klibc-1.5/usr/kinit/ipconfig/Kbuild
+===================================================================
+--- klibc-1.5.orig/usr/kinit/ipconfig/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/kinit/ipconfig/Kbuild 2008-02-24 15:13:50.205824123 +0100
+@@ -27,5 +27,3 @@
+ # Cleaning
+ clean-dirs := static shared
+
+-# install binary
+-install-y := $(shared-y)
+Index: klibc-1.5/usr/kinit/Kbuild
+===================================================================
+--- klibc-1.5.orig/usr/kinit/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/kinit/Kbuild 2008-02-24 15:13:50.209824302 +0100
+@@ -33,5 +33,3 @@
+ subdir- := fstype ipconfig nfsmount resume run-init
+
+
+-# install binary
+-install-y := kinit kinit.shared
+Index: klibc-1.5/usr/kinit/nfsmount/Kbuild
+===================================================================
+--- klibc-1.5.orig/usr/kinit/nfsmount/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/kinit/nfsmount/Kbuild 2008-02-24 15:13:50.213824201 +0100
+@@ -23,5 +23,3 @@
+
+ clean-dirs := static shared
+
+-# Install binary
+-install-y := $(shared-y)
+Index: klibc-1.5/usr/kinit/resume/Kbuild
+===================================================================
+--- klibc-1.5.orig/usr/kinit/resume/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/kinit/resume/Kbuild 2008-02-24 15:13:50.217824380 +0100
+@@ -26,5 +26,3 @@
+ # Cleaning
+ clean-dirs := static shared
+
+-# install binary
+-install-y := $(shared-y)
+Index: klibc-1.5/usr/kinit/run-init/Kbuild
+===================================================================
+--- klibc-1.5.orig/usr/kinit/run-init/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/kinit/run-init/Kbuild 2008-02-24 15:13:50.221824559 +0100
+@@ -25,5 +25,3 @@
+ # Cleaning
+ clean-dirs := static shared
+
+-# install binary
+-install-y := $(shared-y)
+Index: klibc-1.5/usr/klibc/Kbuild
+===================================================================
+--- klibc-1.5.orig/usr/klibc/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/klibc/Kbuild 2008-02-24 15:13:50.229824358 +0100
+@@ -175,5 +175,3 @@
+ $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)lib))
+ $(Q)$(install-lib) $(obj)/klibc-$(SOLIBHASH).so \
+ $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)lib
+- $(Q)$(install-lib) $(obj)/klibc-$(SOLIBHASH).so \
+- $(INSTALLROOT)$(SHLIBDIR)
+Index: klibc-1.5/usr/utils/Kbuild
+===================================================================
+--- klibc-1.5.orig/usr/utils/Kbuild 2007-03-04 02:52:10.000000000 +0100
++++ klibc-1.5/usr/utils/Kbuild 2008-02-24 15:13:50.229824358 +0100
+@@ -66,5 +66,3 @@
+ # Clean deletes the static and shared dir
+ clean-dirs := static shared
+
+-# install only install the shared binaries
+-install-y := $(shared-y) shared/reboot shared/poweroff
diff --git a/recipes/klibc/klibc-1.5.15+1.5.16/wc.patch b/recipes/klibc/klibc-1.5.15+1.5.16/wc.patch
new file mode 100644
index 0000000000..362030e69e
--- /dev/null
+++ b/recipes/klibc/klibc-1.5.15+1.5.16/wc.patch
@@ -0,0 +1,236 @@
+Index: klibc-1.5/usr/utils/Kbuild
+===================================================================
+--- klibc-1.5.orig/usr/utils/Kbuild 2008-04-14 23:21:57.702294843 +0200
++++ klibc-1.5/usr/utils/Kbuild 2008-04-14 23:24:38.817291977 +0200
+@@ -3,7 +3,7 @@
+ #
+
+ progs := chroot dd mkdir mkfifo mknod mount pivot_root umount
+-progs += true false sleep ln nuke minips cat ls losetup
++progs += true false sleep ln nuke minips cat ls losetup wc
+ progs += uname halt kill readlink cpio sync dmesg modprobe
+
+ static-y := $(addprefix static/, $(progs))
+@@ -56,6 +56,9 @@
+ shared/modprobe-y := modprobe.o
+ static/losetup-y := losetup.o
+ shared/losetup-y := losetup.o
++static/wc-y := wc.o
++shared/wc-y := wc.o
++
+ # Additionally linked targets
+ always := static/reboot static/poweroff shared/reboot shared/poweroff
+
+Index: klibc-1.5/usr/utils/wc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ klibc-1.5/usr/utils/wc.c 2008-04-14 23:25:15.449292711 +0200
+@@ -0,0 +1,208 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * wc implementation for busybox
++ *
++ * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org>
++ *
++ * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
++ */
++
++/* BB_AUDIT SUSv3 _NOT_ compliant -- option -m is not currently supported. */
++/* http://www.opengroup.org/onlinepubs/007904975/utilities/wc.html */
++
++/* Mar 16, 2003 Manuel Novoa III (mjn3@codepoet.org)
++ *
++ * Rewritten to fix a number of problems and do some size optimizations.
++ * Problems in the previous busybox implementation (besides bloat) included:
++ * 1) broken 'wc -c' optimization (read note below)
++ * 2) broken handling of '-' args
++ * 3) no checking of ferror on EOF returns
++ * 4) isprint() wasn't considered when word counting.
++ *
++ * TODO:
++ *
++ * When locale support is enabled, count multibyte chars in the '-m' case.
++ *
++ * NOTES:
++ *
++ * The previous busybox wc attempted an optimization using stat for the
++ * case of counting chars only. I omitted that because it was broken.
++ * It didn't take into account the possibility of input coming from a
++ * pipe, or input from a file with file pointer not at the beginning.
++ *
++ * To implement such a speed optimization correctly, not only do you
++ * need the size, but also the file position. Note also that the
++ * file position may be past the end of file. Consider the example
++ * (adapted from example in gnu wc.c)
++ *
++ * echo hello > /tmp/testfile &&
++ * (dd ibs=1k skip=1 count=0 &> /dev/null; wc -c) < /tmp/testfile
++ *
++ * for which 'wc -c' should output '0'.
++ */
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++#undef isspace
++#undef isprint
++#define isspace(c) ((((c) == ' ') || (((unsigned int)((c) - 9)) <= (13 - 9))))
++#define isprint(c) (((unsigned int)((c) - 0x20)) <= (0x7e - 0x20))
++#define isspace_given_isprint(c) ((c) == ' ')
++
++#define COUNT_T unsigned long
++#define COUNT_FMT "u"
++#define optind 1
++FILE *fopen_or_warn_stdin(const char *filename)
++{
++ FILE *fp = stdin;
++
++ if (filename[0]) {
++ fp = fopen(filename, "r");
++ }
++
++ return fp;
++}
++
++enum {
++ WC_LINES = 0,
++ WC_WORDS = 1,
++ WC_CHARS = 2,
++ WC_LENGTH = 3
++};
++
++int main(int argc, char **argv)
++{
++ FILE *fp;
++ const char *s, *arg;
++ const char *start_fmt = "%9"COUNT_FMT;
++ const char *fname_fmt = " %s\n";
++ COUNT_T *pcounts;
++ COUNT_T counts[4];
++ COUNT_T totals[4];
++ unsigned linepos;
++ unsigned u;
++ int num_files = 0;
++ int c;
++ signed char status = EXIT_SUCCESS;
++ signed char in_word;
++ unsigned print_type;
++
++ print_type = getopt(argc, argv, "lwcL");
++
++ if (print_type == 0) {
++ print_type = (1 << WC_LINES) | (1 << WC_WORDS) | (1 << WC_CHARS);
++ }
++
++ argv += optind;
++ if (!argv[0]) {
++ *--argv = (char *) "wc";
++ fname_fmt = "\n";
++ if (!((print_type-1) & print_type)) /* exactly one option? */
++ start_fmt = "%"COUNT_FMT;
++ }
++
++ memset(totals, 0, sizeof(totals));
++
++ pcounts = counts;
++
++ while ((arg = *argv++) != 0) {
++ ++num_files;
++ fp = fopen_or_warn_stdin(arg);
++ if (!fp) {
++ status = EXIT_FAILURE;
++ continue;
++ }
++
++ memset(counts, 0, sizeof(counts));
++ linepos = 0;
++ in_word = 0;
++
++ do {
++ /* Our -w doesn't match GNU wc exactly... oh well */
++
++ ++counts[WC_CHARS];
++ c = getc(fp);
++ if (isprint(c)) {
++ ++linepos;
++ if (!isspace_given_isprint(c)) {
++ in_word = 1;
++ continue;
++ }
++ } else if (((unsigned int)(c - 9)) <= 4) {
++ /* \t 9
++ * \n 10
++ * \v 11
++ * \f 12
++ * \r 13
++ */
++ if (c == '\t') {
++ linepos = (linepos | 7) + 1;
++ } else { /* '\n', '\r', '\f', or '\v' */
++ DO_EOF:
++ if (linepos > counts[WC_LENGTH]) {
++ counts[WC_LENGTH] = linepos;
++ }
++ if (c == '\n') {
++ ++counts[WC_LINES];
++ }
++ if (c != '\v') {
++ linepos = 0;
++ }
++ }
++ } else if (c == EOF) {
++/* if (ferror(fp)) {
++ status = EXIT_FAILURE;
++ }
++*/ --counts[WC_CHARS];
++ goto DO_EOF; /* Treat an EOF as '\r'. */
++ } else {
++ continue;
++ }
++
++ counts[WC_WORDS] += in_word;
++ in_word = 0;
++ if (c == EOF) {
++ break;
++ }
++ } while (1);
++
++ if (totals[WC_LENGTH] < counts[WC_LENGTH]) {
++ totals[WC_LENGTH] = counts[WC_LENGTH];
++ }
++ totals[WC_LENGTH] -= counts[WC_LENGTH];
++
++ if(fp != stdin)
++ fclose(fp);
++
++ OUTPUT:
++ /* coreutils wc tries hard to print pretty columns
++ * (saves results for all files, find max col len etc...)
++ * we won't try that hard, it will bloat us too much */
++ s = start_fmt;
++ u = 0;
++ do {
++ if (print_type & (1 << u)) {
++ printf(s, pcounts[u]);
++ s = " %9"COUNT_FMT; /* Ok... restore the leading space. */
++ }
++ totals[u] += pcounts[u];
++ } while (++u < 4);
++ printf(fname_fmt, arg);
++ }
++
++ /* If more than one file was processed, we want the totals. To save some
++ * space, we set the pcounts ptr to the totals array. This has the side
++ * effect of trashing the totals array after outputting it, but that's
++ * irrelavent since we no longer need it. */
++ if (num_files > 1) {
++ num_files = 0; /* Make sure we don't get here again. */
++ arg = "total";
++ pcounts = totals;
++ --argv;
++ goto OUTPUT;
++ }
++
++ fflush(stdout);
++ exit(status);
++}
diff --git a/recipes/klibc/klibc-1.5.15/fstype-sane-vfat-and-jffs2-for-1.5.patch b/recipes/klibc/klibc-1.5.15/fstype-sane-vfat-and-jffs2-for-1.5.patch
deleted file mode 100644
index 6eb604e45c..0000000000
--- a/recipes/klibc/klibc-1.5.15/fstype-sane-vfat-and-jffs2-for-1.5.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-Index: klibc-1.5/usr/kinit/fstype/fstype.c
-===================================================================
---- klibc-1.5.orig/usr/kinit/fstype/fstype.c 2008-02-28 00:48:35.319254938 +0100
-+++ klibc-1.5/usr/kinit/fstype/fstype.c 2008-02-28 00:52:20.583257793 +0100
-@@ -20,7 +20,7 @@
- #include <netinet/in.h>
- #include <sys/utsname.h>
- #include <sys/vfs.h>
--
-+#include <linux/types.h>
- #define cpu_to_be32(x) __cpu_to_be32(x) /* Needed by romfs_fs.h */
-
- #include "romfs_fs.h"
-@@ -37,6 +37,12 @@
- #include "ocfs2_fs.h"
- #include "nilfs_fs.h"
-
-+#if __BYTE_ORDER == __BIG_ENDIAN
-+#include <linux/byteorder/big_endian.h>
-+#else
-+#include <linux/byteorder/little_endian.h>
-+#endif
-+
- /*
- * Slightly cleaned up version of jfs_superblock to
- * avoid pulling in other kernel header files.
-@@ -59,6 +65,27 @@
- /* Swap needs the definition of block size */
- #include "swap_fs.h"
-
-+static int jffs2_image(const unsigned char *buf, unsigned long *blocks)
-+{
-+ // Very sloppy! ;-E
-+ if (*buf == 0x85 && buf[1] == 0x19)
-+ return 1;
-+
-+ return 0;
-+}
-+
-+static int vfat_image(const unsigned char *buf, unsigned long *blocks)
-+{
-+ const struct romfs_super_block *sb =
-+ (const struct romfs_super_block *)buf;
-+ if (!strncmp(buf + 54, "FAT12 ", 8)
-+ || !strncmp(buf + 54, "FAT16 ", 8)
-+ || !strncmp(buf + 82, "FAT32 ", 8))
-+ return 1;
-+
-+ return 0;
-+}
-+
- static int gzip_image(const void *buf, unsigned long long *bytes)
- {277 304
- const unsigned char *p = buf;
-@@ -490,6 +517,8 @@
- {1, "ext3", ext3_image},
- {1, "ext2", ext2_image},
- {1, "minix", minix_image},
-+ {0, "jffs2", jffs2_image},
-+ {0, "vfat", vfat_image},
- {1, "nilfs2", nilfs2_image},
- {2, "ocfs2", ocfs2_image},
- {8, "reiserfs", reiserfs_image},
diff --git a/recipes/klibc/klibc-1.5.15/isystem.patch b/recipes/klibc/klibc-1.5.15/isystem.patch
deleted file mode 100644
index 2ec40c16c2..0000000000
--- a/recipes/klibc/klibc-1.5.15/isystem.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: klibc-1.5.15/klcc/klcc.in
-===================================================================
---- klibc-1.5.15.orig/klcc/klcc.in 2009-12-14 00:32:41.373661102 +0100
-+++ klibc-1.5.15/klcc/klcc.in 2009-12-14 00:34:20.855735356 +0100
-@@ -147,7 +147,7 @@
- } elsif ( $a =~ /^-([fmwWQdO]|std=|ansi|pedantic|M[GPD]|MMD)/ ) {
- # Options to gcc
- push(@ccopt, $a);
-- } elsif ( $a =~ /^-([DUI]|M[FQT])(.*)$/ ) {
-+ } elsif ( $a =~ /^-([DUI]|M[FQT]|isystem)(.*)$/ ) {
- # Options to gcc, which can take either a conjoined argument
- # (-DFOO) or a disjoint argument (-D FOO)
- push(@ccopt, $a);
diff --git a/recipes/klibc/klibc-1.5.15/mntproc-definitions.patch b/recipes/klibc/klibc-1.5.15/mntproc-definitions.patch
deleted file mode 100644
index eea606be2b..0000000000
--- a/recipes/klibc/klibc-1.5.15/mntproc-definitions.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Description: MNTPROC_MNT and MNTPROC_UMNT are no longer defined by the
- kernel. Hack around this by restoring the old definitions.
-Upstream: http://thread.gmane.org/gmane.linux.nfs/28059 suggests a better
- fix is in progress.
-
-diff -Nur -x '*.orig' -x '*~' klibc-1.5.15/usr/kinit/nfsmount/mount.c klibc-1.5.15.new/usr/kinit/nfsmount/mount.c
---- klibc-1.5.15/usr/kinit/nfsmount/mount.c 2009-01-04 19:28:03.000000000 +0000
-+++ klibc-1.5.15.new/usr/kinit/nfsmount/mount.c 2009-10-04 22:52:44.000000000 +0100
-@@ -44,6 +44,11 @@
-
- #define MNT_REPLY_MINSIZE (sizeof(struct rpc_reply) + sizeof(uint32_t))
-
-+#ifndef MNTPROC_MNT
-+# define MNTPROC_MNT 1
-+# define MNTPROC_UMNT 3
-+#endif /* MNTPROC_MNT */
-+
- static int get_ports(uint32_t server, const struct nfs_mount_data *data)
- {
- uint32_t nfs_ver, mount_ver;
diff --git a/recipes/klibc/klibc-1.5.15/signal-cleanup.patch b/recipes/klibc/klibc-1.5.15/signal-cleanup.patch
deleted file mode 100644
index c64cd5bbb6..0000000000
--- a/recipes/klibc/klibc-1.5.15/signal-cleanup.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Description: Cope with header changes in kernel commit
- 63b852a6b67d0820d388b0ecd0da83ccb4048b8d.
-
-Index: klibc-1.5.15/usr/include/arch/i386/klibc/archsignal.h
-===================================================================
---- klibc-1.5.15.orig/usr/include/arch/i386/klibc/archsignal.h 2009-01-04 11:28:03.000000000 -0800
-+++ klibc-1.5.15/usr/include/arch/i386/klibc/archsignal.h 2009-11-11 14:21:10.000000000 -0800
-@@ -96,7 +96,12 @@ typedef struct {
- #define MINSIGSTKSZ 2048
- #define SIGSTKSZ 8192
-
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)
-+#include <asm-generic/signal-defs.h>
-+#else
- #include <asm-generic/signal.h>
-+#endif
-
- /* This uses gcc anonymous union support... */
- struct siginfo;
-Index: klibc-1.5.15/usr/include/arch/sparc/klibc/archsignal.h
-===================================================================
---- klibc-1.5.15.orig/usr/include/arch/sparc/klibc/archsignal.h 2009-01-04 11:28:03.000000000 -0800
-+++ klibc-1.5.15/usr/include/arch/sparc/klibc/archsignal.h 2009-11-09 15:06:29.000000000 -0800
-@@ -11,13 +11,6 @@
- #define __WANT_POSIX1B_SIGNALS__
- #include <asm/signal.h>
-
--struct sigaction {
-- __sighandler_t sa_handler;
-- unsigned long sa_flags;
-- void (*sa_restorer)(void); /* Not used by Linux/SPARC */
-- sigset_t sa_mask;
--};
--
- /* Not actually used by the kernel... */
- #define SA_RESTORER 0x80000000
-
diff --git a/recipes/klibc/klibc-common.inc b/recipes/klibc/klibc-common.inc
index 3b0eb1c45b..20154ccb92 100644
--- a/recipes/klibc/klibc-common.inc
+++ b/recipes/klibc/klibc-common.inc
@@ -5,13 +5,7 @@ use with initramfs. It is deliberately written for small size, \
minimal entaglement, and portability, not speed."
LICENSE = "BSD-ADV"
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/klibc/${KLIBC_FETCHDIR}/klibc-${PV}.tar.bz2 \
- file://fstype-sane-vfat-and-jffs2-for-1.5.patch;patch=1 \
- file://modprobe.patch;patch=1 \
- file://losetup.patch;patch=1 \
- file://dash_readopt.patch;patch=1 \
- file://wc.patch;patch=1 \
- "
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/klibc/${KLIBC_FETCHDIR}/klibc-${PV}.tar.bz2"
S = "${WORKDIR}/klibc-${PV}"
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -29,16 +23,13 @@ KLIBC_ARCH_pentium = 'i386'
# could be fixed, but for the moment:
ARM_INSTRUCTION_SET = "arm"
-SRC_URI_append_linux-gnueabi = "file://klibc-config-eabi.patch;patch=1 \
- "
-SRC_URI_append_linux-uclibceabi = "file://klibc-config-eabi.patch;patch=1 \
- "
+SRC_URI_append_linux-gnueabi = "file://klibc-config-eabi.patch;patch=1"
+SRC_URI_append_linux-uclibceabi = "file://klibc-config-eabi.patch;patch=1"
EXTRA_OEMAKE = "'KLIBCARCH=${KLIBC_ARCH}' \
'CROSS_COMPILE=${TARGET_PREFIX}' \
"
do_configure () {
- ln -sf ${STAGING_KERNEL_DIR} linux
+ ln -sf ${STAGING_KERNEL_DIR} linux
}
-
diff --git a/recipes/klibc/klibc-utils-static_1.5.15+1.5.16.bb b/recipes/klibc/klibc-utils-static_1.5.15+1.5.16.bb
new file mode 100644
index 0000000000..f7c69ba090
--- /dev/null
+++ b/recipes/klibc/klibc-utils-static_1.5.15+1.5.16.bb
@@ -0,0 +1,135 @@
+require klibc-common.inc
+PR = "r1"
+
+KLIBC_FETCHDIR = "Testing"
+
+DEFAULT_PREFERENCE = "-1"
+
+# temporary override here in the recipe
+# until 1.5.16 is released
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/klibc/${KLIBC_FETCHDIR}/klibc-1.5.15.tar.bz2 \
+ file://1.5.15+1.5.16.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/klibc-1.5.15"
+
+#
+# end override
+
+SRC_URI += "file://fstype-sane-vfat-and-jffs2-for-1.5.patch;patch=1 \
+ file://modprobe.patch;patch=1 \
+ file://losetup.patch;patch=1 \
+ file://dash_readopt.patch;patch=1 \
+ file://wc.patch;patch=1 \
+ file://staging.patch;patch=1 \
+ file://klibc_kexecsyscall.patch;patch=1 \
+ file://mntproc-definitions.patch;patch=1 \
+ file://signal-cleanup.patch;patch=1 \
+ file://isystem.patch;patch=1 \
+ "
+
+FILESPATHPKG =. "klibc-${PV}:"
+
+# We only want the static utils. klibc build both. So we install only what we want.
+do_install() {
+ install -d ${D}${base_bindir}
+ install -d ${D}${base_sbindir}
+ install -m 755 usr/dash/sh ${D}${base_bindir}
+ install -m 755 usr/gzip/gzip ${D}${base_bindir}
+ install -m 755 usr/kinit/kinit ${D}${base_bindir}
+ install -m 755 usr/kinit/fstype/static/fstype ${D}${base_bindir}
+ install -m 755 usr/kinit/ipconfig/static/ipconfig ${D}${base_bindir}
+ install -m 755 usr/kinit/nfsmount/static/nfsmount ${D}${base_bindir}
+ install -m 755 usr/kinit/resume/static/resume ${D}${base_bindir}
+ install -m 755 usr/kinit/run-init/static/run-init ${D}${base_bindir}
+ install -m 755 usr/utils/static/cat ${D}${base_bindir}
+ install -m 755 usr/utils/static/chroot ${D}${base_bindir}
+ install -m 755 usr/utils/static/cpio ${D}${base_bindir}
+ install -m 755 usr/utils/static/dd ${D}${base_bindir}
+ install -m 755 usr/utils/static/dmesg ${D}${base_bindir}
+ install -m 755 usr/utils/static/false ${D}${base_bindir}
+ install -m 755 usr/utils/static/halt ${D}${base_bindir}
+ install -m 755 usr/utils/static/kill ${D}${base_bindir}
+ install -m 755 usr/utils/static/ln ${D}${base_bindir}
+ install -m 755 usr/utils/static/minips ${D}${base_bindir}
+ install -m 755 usr/utils/static/mkdir ${D}${base_bindir}
+ install -m 755 usr/utils/static/mkfifo ${D}${base_bindir}
+ install -m 755 usr/utils/static/mknod ${D}${base_bindir}
+ install -m 755 usr/utils/static/mount ${D}${base_bindir}
+ install -m 755 usr/utils/static/nuke ${D}${base_bindir}
+ install -m 755 usr/utils/static/pivot_root ${D}${base_bindir}
+ install -m 755 usr/utils/static/poweroff ${D}${base_bindir}
+ install -m 755 usr/utils/static/readlink ${D}${base_bindir}
+ install -m 755 usr/utils/static/reboot ${D}${base_bindir}
+ install -m 755 usr/utils/static/sleep ${D}${base_bindir}
+ install -m 755 usr/utils/static/sync ${D}${base_bindir}
+ install -m 755 usr/utils/static/true ${D}${base_bindir}
+ install -m 755 usr/utils/static/umount ${D}${base_bindir}
+ install -m 755 usr/utils/static/uname ${D}${base_bindir}
+ install -m 755 usr/utils/static/modprobe ${D}${base_sbindir}
+ install -m 755 usr/utils/static/losetup ${D}${base_bindir}
+ install -m 755 usr/utils/static/wc ${D}${base_bindir}
+ install -m 755 usr/utils/static/ls ${D}${base_bindir}
+ cd ${D}${base_bindir}
+ ln -s gzip gunzip
+ ln -s gzip zcat
+ cd -
+}
+
+PACKAGES = "klibc-utils-static-sh klibc-utils-static-gzip \
+ klibc-utils-static-kinit klibc-utils-static-fstype \
+ klibc-utils-static-ipconfig klibc-utils-static-nfsmount \
+ klibc-utils-static-resume klibc-utils-static-run-init \
+ klibc-utils-static-cat klibc-utils-static-chroot \
+ klibc-utils-static-cpio klibc-utils-static-dd \
+ klibc-utils-static-dmesg klibc-utils-static-false \
+ klibc-utils-static-halt klibc-utils-static-kill \
+ klibc-utils-static-ln klibc-utils-static-minips \
+ klibc-utils-static-mkdir klibc-utils-static-mkfifo \
+ klibc-utils-static-mknod klibc-utils-static-mount \
+ klibc-utils-static-nuke klibc-utils-static-pivot-root \
+ klibc-utils-static-poweroff klibc-utils-static-readlink \
+ klibc-utils-static-reboot klibc-utils-static-sleep \
+ klibc-utils-static-sync \
+ klibc-utils-static-true klibc-utils-static-umount \
+ klibc-utils-static-uname klibc-utils-static-modprobe \
+ klibc-utils-static-losetup klibc-utils-static-wc \
+ klibc-utils-static-ls"
+
+FILES_klibc-utils-static-sh = "${base_bindir}/sh"
+FILES_klibc-utils-static-gzip = "${base_bindir}/gzip ${base_bindir}/gunzip ${base_bindir}/zcat"
+FILES_klibc-utils-static-kinit = "${base_bindir}/kinit"
+FILES_klibc-utils-static-fstype = "${base_bindir}/fstype"
+FILES_klibc-utils-static-ipconfig = "${base_bindir}/ipconfig"
+FILES_klibc-utils-static-nfsmount = "${base_bindir}/nfsmount"
+FILES_klibc-utils-static-resume = "${base_bindir}/resume"
+FILES_klibc-utils-static-run-init = "${base_bindir}/run-init"
+FILES_klibc-utils-static-cat = "${base_bindir}/cat"
+FILES_klibc-utils-static-chroot = "${base_bindir}/chroot"
+FILES_klibc-utils-static-cpio = "${base_bindir}/cpio"
+FILES_klibc-utils-static-dd = "${base_bindir}/dd"
+FILES_klibc-utils-static-dmesg = "${base_bindir}/dmesg"
+FILES_klibc-utils-static-false = "${base_bindir}/false"
+FILES_klibc-utils-static-halt = "${base_bindir}/halt"
+FILES_klibc-utils-static-kill = "${base_bindir}/kill"
+FILES_klibc-utils-static-ln = "${base_bindir}/ln"
+FILES_klibc-utils-static-minips = "${base_bindir}/minips"
+FILES_klibc-utils-static-mkdir = "${base_bindir}/mkdir"
+FILES_klibc-utils-static-mkfifo = "${base_bindir}/mkfifo"
+FILES_klibc-utils-static-mknod = "${base_bindir}/mknod"
+FILES_klibc-utils-static-mount = "${base_bindir}/mount"
+FILES_klibc-utils-static-nuke = "${base_bindir}/nuke"
+FILES_klibc-utils-static-pivot-root = "${base_bindir}/pivot_root"
+FILES_klibc-utils-static-poweroff = "${base_bindir}/poweroff"
+FILES_klibc-utils-static-readlink = "${base_bindir}/readlink"
+FILES_klibc-utils-static-reboot = "${base_bindir}/reboot"
+FILES_klibc-utils-static-sleep = "${base_bindir}/sleep"
+FILES_klibc-utils-static-sync = "${base_bindir}/sync"
+FILES_klibc-utils-static-true = "${base_bindir}/true"
+FILES_klibc-utils-static-umount = "${base_bindir}/umount"
+FILES_klibc-utils-static-uname = "${base_bindir}/uname"
+FILES_klibc-utils-static-modprobe = "${base_sbindir}/modprobe"
+FILES_klibc-utils-static-losetup = "${base_bindir}/losetup"
+FILES_klibc-utils-static-wc = "${base_bindir}/wc"
+FILES_klibc-utils-static-ls = "${base_bindir}/ls"
diff --git a/recipes/klibc/klibc-utils-static_1.5.15.bb b/recipes/klibc/klibc-utils-static_1.5.15.bb
index c1b3e6dd94..4d61967292 100644
--- a/recipes/klibc/klibc-utils-static_1.5.15.bb
+++ b/recipes/klibc/klibc-utils-static_1.5.15.bb
@@ -1,8 +1,20 @@
require klibc-common.inc
-
-PR = "r2"
+PR = "r3"
KLIBC_FETCHDIR = "Testing"
+
+SRC_URI += "file://fstype-sane-vfat-and-jffs2-for-1.5.patch;patch=1 \
+ file://modprobe.patch;patch=1 \
+ file://losetup.patch;patch=1 \
+ file://dash_readopt.patch;patch=1 \
+ file://wc.patch;patch=1 \
+ file://staging.patch;patch=1 \
+ file://klibc_kexecsyscall.patch;patch=1 \
+ file://mntproc-definitions.patch;patch=1 \
+ file://signal-cleanup.patch;patch=1 \
+ file://isystem.patch;patch=1 \
+ "
+
FILESPATHPKG =. "klibc-${PV}:"
# We only want the static utils. klibc build both. So we install only what we want.
@@ -11,12 +23,12 @@ do_install() {
install -d ${D}${base_sbindir}
install -m 755 usr/dash/sh ${D}${base_bindir}
install -m 755 usr/gzip/gzip ${D}${base_bindir}
- install -m 755 usr/kinit/kinit ${D}${base_bindir}
- install -m 755 usr/kinit/fstype/static/fstype ${D}${base_bindir}
- install -m 755 usr/kinit/ipconfig/static/ipconfig ${D}${base_bindir}
- install -m 755 usr/kinit/nfsmount/static/nfsmount ${D}${base_bindir}
- install -m 755 usr/kinit/resume/static/resume ${D}${base_bindir}
- install -m 755 usr/kinit/run-init/static/run-init ${D}${base_bindir}
+ install -m 755 usr/kinit/kinit ${D}${base_bindir}
+ install -m 755 usr/kinit/fstype/static/fstype ${D}${base_bindir}
+ install -m 755 usr/kinit/ipconfig/static/ipconfig ${D}${base_bindir}
+ install -m 755 usr/kinit/nfsmount/static/nfsmount ${D}${base_bindir}
+ install -m 755 usr/kinit/resume/static/resume ${D}${base_bindir}
+ install -m 755 usr/kinit/run-init/static/run-init ${D}${base_bindir}
install -m 755 usr/utils/static/cat ${D}${base_bindir}
install -m 755 usr/utils/static/chroot ${D}${base_bindir}
install -m 755 usr/utils/static/cpio ${D}${base_bindir}
@@ -41,33 +53,33 @@ do_install() {
install -m 755 usr/utils/static/true ${D}${base_bindir}
install -m 755 usr/utils/static/umount ${D}${base_bindir}
install -m 755 usr/utils/static/uname ${D}${base_bindir}
- install -m 755 usr/utils/static/modprobe ${D}${base_sbindir}
- install -m 755 usr/utils/static/losetup ${D}${base_bindir}
- install -m 755 usr/utils/static/wc ${D}${base_bindir}
+ install -m 755 usr/utils/static/modprobe ${D}${base_sbindir}
+ install -m 755 usr/utils/static/losetup ${D}${base_bindir}
+ install -m 755 usr/utils/static/wc ${D}${base_bindir}
cd ${D}${base_bindir}
- ln -s gzip gunzip
+ ln -s gzip gunzip
ln -s gzip zcat
- cd -
+ cd -
}
PACKAGES = "klibc-utils-static-sh klibc-utils-static-gzip \
klibc-utils-static-kinit klibc-utils-static-fstype \
- klibc-utils-static-ipconfig klibc-utils-static-nfsmount \
- klibc-utils-static-resume klibc-utils-static-run-init \
- klibc-utils-static-cat klibc-utils-static-chroot \
+ klibc-utils-static-ipconfig klibc-utils-static-nfsmount \
+ klibc-utils-static-resume klibc-utils-static-run-init \
+ klibc-utils-static-cat klibc-utils-static-chroot \
klibc-utils-static-cpio klibc-utils-static-dd \
klibc-utils-static-dmesg klibc-utils-static-false \
klibc-utils-static-halt klibc-utils-static-kill \
klibc-utils-static-ln klibc-utils-static-minips \
klibc-utils-static-mkdir klibc-utils-static-mkfifo \
- klibc-utils-static-mknod klibc-utils-static-mount \
- klibc-utils-static-nuke klibc-utils-static-pivot-root \
- klibc-utils-static-poweroff klibc-utils-static-readlink \
- klibc-utils-static-reboot klibc-utils-static-sleep \
- klibc-utils-static-sync \
- klibc-utils-static-true klibc-utils-static-umount \
- klibc-utils-static-uname klibc-utils-static-modprobe \
- klibc-utils-static-losetup klibc-utils-static-wc"
+ klibc-utils-static-mknod klibc-utils-static-mount \
+ klibc-utils-static-nuke klibc-utils-static-pivot-root \
+ klibc-utils-static-poweroff klibc-utils-static-readlink \
+ klibc-utils-static-reboot klibc-utils-static-sleep \
+ klibc-utils-static-sync \
+ klibc-utils-static-true klibc-utils-static-umount \
+ klibc-utils-static-uname klibc-utils-static-modprobe \
+ klibc-utils-static-losetup klibc-utils-static-wc"
FILES_klibc-utils-static-sh = "${base_bindir}/sh"
FILES_klibc-utils-static-gzip = "${base_bindir}/gzip ${base_bindir}/gunzip ${base_bindir}/zcat"
diff --git a/recipes/klibc/klibc-utils-static_1.5.bb b/recipes/klibc/klibc-utils-static_1.5.bb
index a4e31de95c..78763ef95a 100644
--- a/recipes/klibc/klibc-utils-static_1.5.bb
+++ b/recipes/klibc/klibc-utils-static_1.5.bb
@@ -1,22 +1,31 @@
require klibc-common.inc
-
-PR = "r12"
+PR = "r13"
KLIBC_FETCHDIR = "Stable"
+
+SRC_URI += "file://fstype-sane-vfat-and-jffs2-for-1.5.patch;patch=1 \
+ file://modprobe.patch;patch=1 \
+ file://losetup.patch;patch=1 \
+ file://dash_readopt.patch;patch=1 \
+ file://wc.patch;patch=1 \
+ file://staging.patch;patch=1 \
+ file://klibc_kexecsyscall.patch;patch=1 \
+ "
+
FILESPATHPKG =. "klibc-${PV}:"
-# We only want the static utils. klibc build both. So we install only what we want.
+# We only want the static utils. klibc build both. So we install only what we want.
do_install() {
install -d ${D}${base_bindir}
install -d ${D}${base_sbindir}
install -m 755 usr/dash/sh ${D}${base_bindir}
install -m 755 usr/gzip/gzip ${D}${base_bindir}
- install -m 755 usr/kinit/kinit ${D}${base_bindir}
- install -m 755 usr/kinit/fstype/static/fstype ${D}${base_bindir}
- install -m 755 usr/kinit/ipconfig/static/ipconfig ${D}${base_bindir}
- install -m 755 usr/kinit/nfsmount/static/nfsmount ${D}${base_bindir}
- install -m 755 usr/kinit/resume/static/resume ${D}${base_bindir}
- install -m 755 usr/kinit/run-init/static/run-init ${D}${base_bindir}
+ install -m 755 usr/kinit/kinit ${D}${base_bindir}
+ install -m 755 usr/kinit/fstype/static/fstype ${D}${base_bindir}
+ install -m 755 usr/kinit/ipconfig/static/ipconfig ${D}${base_bindir}
+ install -m 755 usr/kinit/nfsmount/static/nfsmount ${D}${base_bindir}
+ install -m 755 usr/kinit/resume/static/resume ${D}${base_bindir}
+ install -m 755 usr/kinit/run-init/static/run-init ${D}${base_bindir}
install -m 755 usr/utils/static/cat ${D}${base_bindir}
install -m 755 usr/utils/static/chroot ${D}${base_bindir}
install -m 755 usr/utils/static/cpio ${D}${base_bindir}
@@ -40,41 +49,41 @@ do_install() {
install -m 755 usr/utils/static/true ${D}${base_bindir}
install -m 755 usr/utils/static/umount ${D}${base_bindir}
install -m 755 usr/utils/static/uname ${D}${base_bindir}
- install -m 755 usr/utils/static/modprobe ${D}${base_sbindir}
- install -m 755 usr/utils/static/losetup ${D}${base_bindir}
- install -m 755 usr/utils/static/wc ${D}${base_bindir}
+ install -m 755 usr/utils/static/modprobe ${D}${base_sbindir}
+ install -m 755 usr/utils/static/losetup ${D}${base_bindir}
+ install -m 755 usr/utils/static/wc ${D}${base_bindir}
cd ${D}${base_bindir}
- ln -s gzip gunzip
+ ln -s gzip gunzip
ln -s gzip zcat
- cd -
+ cd -
}
PACKAGES = "klibc-utils-static-sh klibc-utils-static-gzip \
klibc-utils-static-kinit klibc-utils-static-fstype \
- klibc-utils-static-ipconfig klibc-utils-static-nfsmount \
- klibc-utils-static-resume klibc-utils-static-run-init \
- klibc-utils-static-cat klibc-utils-static-chroot \
+ klibc-utils-static-ipconfig klibc-utils-static-nfsmount \
+ klibc-utils-static-resume klibc-utils-static-run-init \
+ klibc-utils-static-cat klibc-utils-static-chroot \
klibc-utils-static-cpio klibc-utils-static-dd \
klibc-utils-static-false klibc-utils-static-halt \
klibc-utils-static-insmod klibc-utils-static-kill \
klibc-utils-static-ln klibc-utils-static-minips \
klibc-utils-static-mkdir klibc-utils-static-mkfifo \
- klibc-utils-static-mknod klibc-utils-static-mount \
- klibc-utils-static-nuke klibc-utils-static-pivot-root \
- klibc-utils-static-poweroff klibc-utils-static-readlink \
- klibc-utils-static-reboot klibc-utils-static-sleep \
- klibc-utils-static-true klibc-utils-static-umount \
- klibc-utils-static-uname klibc-utils-static-modprobe \
- klibc-utils-static-losetup klibc-utils-static-wc"
+ klibc-utils-static-mknod klibc-utils-static-mount \
+ klibc-utils-static-nuke klibc-utils-static-pivot-root \
+ klibc-utils-static-poweroff klibc-utils-static-readlink \
+ klibc-utils-static-reboot klibc-utils-static-sleep \
+ klibc-utils-static-true klibc-utils-static-umount \
+ klibc-utils-static-uname klibc-utils-static-modprobe \
+ klibc-utils-static-losetup klibc-utils-static-wc"
FILES_klibc-utils-static-sh = "${base_bindir}/sh"
FILES_klibc-utils-static-gzip = "${base_bindir}/gzip ${base_bindir}/gunzip ${base_bindir}/zcat"
-FILES_klibc-utils-static-kinit = "${base_bindir}/kinit"
-FILES_klibc-utils-static-fstype = "${base_bindir}/fstype"
-FILES_klibc-utils-static-ipconfig = "${base_bindir}/ipconfig"
-FILES_klibc-utils-static-nfsmount = "${base_bindir}/nfsmount"
-FILES_klibc-utils-static-resume = "${base_bindir}/resume"
-FILES_klibc-utils-static-run-init = "${base_bindir}/run-init"
+FILES_klibc-utils-static-kinit = "${base_bindir}/kinit"
+FILES_klibc-utils-static-fstype = "${base_bindir}/fstype"
+FILES_klibc-utils-static-ipconfig = "${base_bindir}/ipconfig"
+FILES_klibc-utils-static-nfsmount = "${base_bindir}/nfsmount"
+FILES_klibc-utils-static-resume = "${base_bindir}/resume"
+FILES_klibc-utils-static-run-init = "${base_bindir}/run-init"
FILES_klibc-utils-static-cat = "${base_bindir}/cat"
FILES_klibc-utils-static-chroot = "${base_bindir}/chroot"
FILES_klibc-utils-static-cpio = "${base_bindir}/cpio"
diff --git a/recipes/klibc/klibc_1.5.15+1.5.16.bb b/recipes/klibc/klibc_1.5.15+1.5.16.bb
new file mode 100644
index 0000000000..a44922af6a
--- /dev/null
+++ b/recipes/klibc/klibc_1.5.15+1.5.16.bb
@@ -0,0 +1,6 @@
+require klibc_1.5.15+1.5.16.inc
+PR = "r1"
+
+KLIBC_FETCHDIR = "Testing"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/klibc/klibc_1.5.15+1.5.16.inc b/recipes/klibc/klibc_1.5.15+1.5.16.inc
new file mode 100644
index 0000000000..7685cf8411
--- /dev/null
+++ b/recipes/klibc/klibc_1.5.15+1.5.16.inc
@@ -0,0 +1,178 @@
+require klibc-common.inc
+
+# temporary override here in the recipe
+# until 1.5.16 is released
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/klibc/${KLIBC_FETCHDIR}/klibc-1.5.15.tar.bz2 \
+ file://1.5.15+1.5.16.patch;patch=1 \
+ "
+
+SRC_URI += "file://fstype-sane-vfat-and-jffs2-for-1.5.patch;patch=1 \
+ file://modprobe.patch;patch=1 \
+ file://losetup.patch;patch=1 \
+ file://dash_readopt.patch;patch=1 \
+ file://wc.patch;patch=1 \
+ file://staging.patch;patch=1 \
+ file://klibc_kexecsyscall.patch;patch=1 \
+ file://mntproc-definitions.patch;patch=1 \
+ file://signal-cleanup.patch;patch=1 \
+ file://isystem.patch;patch=1 \
+ file://socket.h.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/klibc-1.5.15"
+
+# end temporary overrides
+
+# we want only the shared programms and the lib so we chose them manually
+do_install() {
+ install -d ${D}${base_bindir}
+ install -m 755 usr/dash/sh.shared ${D}${base_bindir}/sh
+ install -m 755 usr/gzip/gzip ${D}${base_bindir}
+ install -m 755 usr/kinit/kinit.shared ${D}${base_bindir}/kinit
+ install -m 755 usr/kinit/fstype/shared/fstype ${D}${base_bindir}
+ install -m 755 usr/kinit/ipconfig/shared/ipconfig ${D}${base_bindir}
+ install -m 755 usr/kinit/nfsmount/shared/nfsmount ${D}${base_bindir}
+ install -m 755 usr/kinit/resume/shared/resume ${D}${base_bindir}
+ install -m 755 usr/kinit/run-init/shared/run-init ${D}${base_bindir}
+ install -m 755 usr/utils/shared/cat ${D}${base_bindir}
+ install -m 755 usr/utils/shared/chroot ${D}${base_bindir}
+ install -m 755 usr/utils/shared/cpio ${D}${base_bindir}
+ install -m 755 usr/utils/shared/dd ${D}${base_bindir}
+ install -m 755 usr/utils/shared/dmesg ${D}${base_bindir}
+ install -m 755 usr/utils/shared/false ${D}${base_bindir}
+ install -m 755 usr/utils/shared/halt ${D}${base_bindir}
+ install -m 755 usr/utils/shared/kill ${D}${base_bindir}
+ install -m 755 usr/utils/shared/ln ${D}${base_bindir}
+ install -m 755 usr/utils/shared/minips ${D}${base_bindir}
+ install -m 755 usr/utils/shared/mkdir ${D}${base_bindir}
+ install -m 755 usr/utils/shared/mkfifo ${D}${base_bindir}
+ install -m 755 usr/utils/shared/mknod ${D}${base_bindir}
+ install -m 755 usr/utils/shared/mount ${D}${base_bindir}
+ install -m 755 usr/utils/shared/nuke ${D}${base_bindir}
+ install -m 755 usr/utils/shared/pivot_root ${D}${base_bindir}
+ install -m 755 usr/utils/shared/poweroff ${D}${base_bindir}
+ install -m 755 usr/utils/shared/readlink ${D}${base_bindir}
+ install -m 755 usr/utils/shared/reboot ${D}${base_bindir}
+ install -m 755 usr/utils/shared/sleep ${D}${base_bindir}
+ install -m 755 usr/utils/shared/sync ${D}${base_bindir}
+ install -m 755 usr/utils/shared/true ${D}${base_bindir}
+ install -m 755 usr/utils/shared/umount ${D}${base_bindir}
+ install -m 755 usr/utils/shared/uname ${D}${base_bindir}
+ install -m 755 usr/utils/shared/modprobe ${D}${base_bindir}
+ install -m 755 usr/utils/shared/losetup ${D}${base_bindir}
+ install -m 755 usr/utils/shared/wc ${D}${base_bindir}
+ install -m 755 usr/utils/shared/ls ${D}${base_bindir}
+
+ install -d ${D}${base_libdir}
+ install -m 755 usr/klibc/klibc-*.so ${D}${base_libdir}
+ cd ${D}${base_libdir}
+ ln -s klibc-*.so klibc.so
+ cd -
+ cd ${D}${base_bindir}
+ ln -s gzip gunzip
+ ln -s gzip zcat
+ cd -
+}
+
+export INST=${STAGING_DIR_TARGET}
+do_stage() {
+ oe_runmake install
+ cp '${STAGING_DIR_TARGET}/bin/klcc' '${CROSS_DIR}/bin/${TARGET_PREFIX}klcc'
+}
+
+PACKAGES = "${PN} ${PN}-dev klibc-utils-sh klibc-utils-kinit \
+ klibc-utils-fstype klibc-utils-ipconfig \
+ klibc-utils-nfsmount klibc-utils-resume \
+ klibc-utils-run-init klibc-utils-cat \
+ klibc-utils-chroot klibc-utils-cpio \
+ klibc-utils-dd klibc-utils-dmesg \
+ klibc-utils-false klibc-utils-halt \
+ klibc-utils-kill klibc-utils-ln \
+ klibc-utils-minips klibc-utils-mkdir \
+ klibc-utils-mkfifo klibc-utils-mknod \
+ klibc-utils-mount klibc-utils-nuke \
+ klibc-utils-pivot-root klibc-utils-poweroff \
+ klibc-utils-readlink klibc-utils-reboot \
+ klibc-utils-sleep \
+ klibc-utils-sync klibc-utils-true \
+ klibc-utils-umount klibc-utils-uname \
+ klibc-utils-gzip klibc-utils-modprobe \
+ klibc-utils-losetup klibc-utils-wc \
+ klibc-utils-ls"
+
+FILES_${PN} = "${base_libdir}/klibc-*.so"
+FILES_${PN}-dev = "${base_libdir}/klibc.so"
+FILES_klibc-utils-sh = "${base_bindir}/sh"
+FILES_klibc-utils-gzip = "${base_bindir}/gzip ${base_bindir}/gunzip ${base_bindir}/zcat"
+FILES_klibc-utils-kinit = "${base_bindir}/kinit"
+FILES_klibc-utils-fstype = "${base_bindir}/fstype"
+FILES_klibc-utils-ipconfig = "${base_bindir}/ipconfig"
+FILES_klibc-utils-nfsmount = "${base_bindir}/nfsmount"
+FILES_klibc-utils-resume = "${base_bindir}/resume"
+FILES_klibc-utils-run-init = "${base_bindir}/run-init"
+FILES_klibc-utils-cat = "${base_bindir}/cat"
+FILES_klibc-utils-chroot = "${base_bindir}/chroot"
+FILES_klibc-utils-cpio = "${base_bindir}/cpio"
+FILES_klibc-utils-dd = "${base_bindir}/dd"
+FILES_klibc-utils-dmesg = "${base_bindir}/dmesg"
+FILES_klibc-utils-false = "${base_bindir}/false"
+FILES_klibc-utils-halt = "${base_bindir}/halt"
+FILES_klibc-utils-kill = "${base_bindir}/kill"
+FILES_klibc-utils-ln = "${base_bindir}/ln"
+FILES_klibc-utils-minips = "${base_bindir}/minips"
+FILES_klibc-utils-mkdir = "${base_bindir}/mkdir"
+FILES_klibc-utils-mkfifo = "${base_bindir}/mkfifo"
+FILES_klibc-utils-mknod = "${base_bindir}/mknod"
+FILES_klibc-utils-mount = "${base_bindir}/mount"
+FILES_klibc-utils-nuke = "${base_bindir}/nuke"
+FILES_klibc-utils-pivot-root = "${base_bindir}/pivot_root"
+FILES_klibc-utils-poweroff = "${base_bindir}/poweroff"
+FILES_klibc-utils-readlink = "${base_bindir}/readlink"
+FILES_klibc-utils-reboot = "${base_bindir}/reboot"
+FILES_klibc-utils-sleep = "${base_bindir}/sleep"
+FILES_klibc-utils-sync = "${base_bindir}/sync"
+FILES_klibc-utils-true = "${base_bindir}/true"
+FILES_klibc-utils-umount = "${base_bindir}/umount"
+FILES_klibc-utils-uname = "${base_bindir}/uname"
+FILES_klibc-utils-modprobe = "${base_bindir}/modprobe"
+FILES_klibc-utils-losetup = "${base_bindir}/losetup"
+FILES_klibc-utils-wc = "${base_bindir}/wc"
+FILES_klibc-utils-ls = "${base_bindir}/ls"
+
+# Yes we want exactly the klibc that was compiled with the utils
+RDEPENDS_klibc-utils-sh = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-kinit = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-fstype = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-ipconfig = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-nfsmount = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-resume = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-run-init = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-cat = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-chroot = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-cpio = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-dd = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-dmesg = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-false = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-halt = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-kill = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-ln = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-minips = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-mkdir = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-mkfifo = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-mknod = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-mount = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-nuke = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-pivot-root = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-poweroff = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-readlink = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-reboot = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-sleep = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-sync = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-true = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-umount = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-uname = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-modprobe = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-losetup = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-wc = "${PN} (=${PV}-${PR})"
+RDEPENDS_klibc-utils-ls = "${PN} (=${PV}-${PR})"
diff --git a/recipes/klibc/klibc_1.5.15.bb b/recipes/klibc/klibc_1.5.15.bb
index 97898f2b8e..32f070d67f 100644
--- a/recipes/klibc/klibc_1.5.15.bb
+++ b/recipes/klibc/klibc_1.5.15.bb
@@ -1,4 +1,4 @@
require klibc_1.5.15.inc
-PR = "r5"
+PR = "r6"
KLIBC_FETCHDIR = "Testing"
diff --git a/recipes/klibc/klibc_1.5.15.inc b/recipes/klibc/klibc_1.5.15.inc
index 6615ac2899..fa4fae13f8 100644
--- a/recipes/klibc/klibc_1.5.15.inc
+++ b/recipes/klibc/klibc_1.5.15.inc
@@ -1,11 +1,16 @@
require klibc-common.inc
-SRC_URI += "file://staging.patch;patch=1 \
- file://klibc_kexecsyscall.patch;patch=1 \
- file://mntproc-definitions.patch;patch=1 \
- file://signal-cleanup.patch;patch=1 \
+SRC_URI += "file://fstype-sane-vfat-and-jffs2-for-1.5.patch;patch=1 \
+ file://modprobe.patch;patch=1 \
+ file://losetup.patch;patch=1 \
+ file://dash_readopt.patch;patch=1 \
+ file://wc.patch;patch=1 \
+ file://staging.patch;patch=1 \
+ file://klibc_kexecsyscall.patch;patch=1 \
+ file://mntproc-definitions.patch;patch=1 \
+ file://signal-cleanup.patch;patch=1 \
file://isystem.patch;patch=1 \
- "
+ "
# we want only the shared programms and the lib so we chose them manually
do_install() {
@@ -18,7 +23,7 @@ do_install() {
install -m 755 usr/kinit/nfsmount/shared/nfsmount ${D}${base_bindir}
install -m 755 usr/kinit/resume/shared/resume ${D}${base_bindir}
install -m 755 usr/kinit/run-init/shared/run-init ${D}${base_bindir}
- install -m 755 usr/utils/shared/cat ${D}${base_bindir}
+ install -m 755 usr/utils/shared/cat ${D}${base_bindir}
install -m 755 usr/utils/shared/chroot ${D}${base_bindir}
install -m 755 usr/utils/shared/cpio ${D}${base_bindir}
install -m 755 usr/utils/shared/dd ${D}${base_bindir}
@@ -42,45 +47,45 @@ do_install() {
install -m 755 usr/utils/shared/true ${D}${base_bindir}
install -m 755 usr/utils/shared/umount ${D}${base_bindir}
install -m 755 usr/utils/shared/uname ${D}${base_bindir}
- install -m 755 usr/utils/shared/modprobe ${D}${base_bindir}
- install -m 755 usr/utils/shared/losetup ${D}${base_bindir}
- install -m 755 usr/utils/shared/wc ${D}${base_bindir}
+ install -m 755 usr/utils/shared/modprobe ${D}${base_bindir}
+ install -m 755 usr/utils/shared/losetup ${D}${base_bindir}
+ install -m 755 usr/utils/shared/wc ${D}${base_bindir}
- install -d ${D}${base_libdir}
- install -m 755 usr/klibc/klibc-*.so ${D}${base_libdir}
- cd ${D}${base_libdir}
- ln -s klibc-*.so klibc.so
- cd -
+ install -d ${D}${base_libdir}
+ install -m 755 usr/klibc/klibc-*.so ${D}${base_libdir}
+ cd ${D}${base_libdir}
+ ln -s klibc-*.so klibc.so
+ cd -
cd ${D}${base_bindir}
- ln -s gzip gunzip
+ ln -s gzip gunzip
ln -s gzip zcat
- cd -
+ cd -
}
export INST=${STAGING_DIR_TARGET}
do_stage() {
- oe_runmake install
+ oe_runmake install
cp '${STAGING_DIR_TARGET}/bin/klcc' '${CROSS_DIR}/bin/${TARGET_PREFIX}klcc'
}
PACKAGES = "${PN} ${PN}-dev klibc-utils-sh klibc-utils-kinit \
- klibc-utils-fstype klibc-utils-ipconfig \
- klibc-utils-nfsmount klibc-utils-resume \
- klibc-utils-run-init klibc-utils-cat \
- klibc-utils-chroot klibc-utils-cpio \
- klibc-utils-dd klibc-utils-dmesg \
- klibc-utils-false klibc-utils-halt \
- klibc-utils-kill klibc-utils-ln \
- klibc-utils-minips klibc-utils-mkdir \
- klibc-utils-mkfifo klibc-utils-mknod \
+ klibc-utils-fstype klibc-utils-ipconfig \
+ klibc-utils-nfsmount klibc-utils-resume \
+ klibc-utils-run-init klibc-utils-cat \
+ klibc-utils-chroot klibc-utils-cpio \
+ klibc-utils-dd klibc-utils-dmesg \
+ klibc-utils-false klibc-utils-halt \
+ klibc-utils-kill klibc-utils-ln \
+ klibc-utils-minips klibc-utils-mkdir \
+ klibc-utils-mkfifo klibc-utils-mknod \
klibc-utils-mount klibc-utils-nuke \
klibc-utils-pivot-root klibc-utils-poweroff \
- klibc-utils-readlink klibc-utils-reboot \
- klibc-utils-sleep \
+ klibc-utils-readlink klibc-utils-reboot \
+ klibc-utils-sleep \
klibc-utils-sync klibc-utils-true \
klibc-utils-umount klibc-utils-uname \
klibc-utils-gzip klibc-utils-modprobe \
- klibc-utils-losetup klibc-utils-wc"
+ klibc-utils-losetup klibc-utils-wc"
FILES_${PN} = "${base_libdir}/klibc-*.so"
FILES_${PN}-dev = "${base_libdir}/klibc.so"
diff --git a/recipes/klibc/klibc_1.5.bb b/recipes/klibc/klibc_1.5.bb
index 3dd4d645ec..bbdf7d001c 100644
--- a/recipes/klibc/klibc_1.5.bb
+++ b/recipes/klibc/klibc_1.5.bb
@@ -1,4 +1,4 @@
require klibc_1.5.inc
-PR = "r9"
+PR = "r10"
KLIBC_FETCHDIR = "Stable"
diff --git a/recipes/klibc/klibc_1.5.inc b/recipes/klibc/klibc_1.5.inc
index d4cc830314..5c10df76f4 100644
--- a/recipes/klibc/klibc_1.5.inc
+++ b/recipes/klibc/klibc_1.5.inc
@@ -1,8 +1,13 @@
require klibc-common.inc
-SRC_URI += "file://staging.patch;patch=1 \
- file://klibc_kexecsyscall.patch;patch=1 \
- "
+SRC_URI += "file://fstype-sane-vfat-and-jffs2-for-1.5.patch;patch=1 \
+ file://modprobe.patch;patch=1 \
+ file://losetup.patch;patch=1 \
+ file://dash_readopt.patch;patch=1 \
+ file://wc.patch;patch=1 \
+ file://staging.patch;patch=1 \
+ file://klibc_kexecsyscall.patch;patch=1 \
+ "
# we want only the shared programms and the lib so we chose them manually
do_install() {
@@ -15,7 +20,7 @@ do_install() {
install -m 755 usr/kinit/nfsmount/shared/nfsmount ${D}${base_bindir}
install -m 755 usr/kinit/resume/shared/resume ${D}${base_bindir}
install -m 755 usr/kinit/run-init/shared/run-init ${D}${base_bindir}
- install -m 755 usr/utils/shared/cat ${D}${base_bindir}
+ install -m 755 usr/utils/shared/cat ${D}${base_bindir}
install -m 755 usr/utils/shared/chroot ${D}${base_bindir}
install -m 755 usr/utils/shared/cpio ${D}${base_bindir}
install -m 755 usr/utils/shared/dd ${D}${base_bindir}
@@ -38,48 +43,48 @@ do_install() {
install -m 755 usr/utils/shared/true ${D}${base_bindir}
install -m 755 usr/utils/shared/umount ${D}${base_bindir}
install -m 755 usr/utils/shared/uname ${D}${base_bindir}
- install -m 755 usr/utils/shared/modprobe ${D}${base_bindir}
- install -m 755 usr/utils/shared/losetup ${D}${base_bindir}
- install -m 755 usr/utils/shared/wc ${D}${base_bindir}
+ install -m 755 usr/utils/shared/modprobe ${D}${base_bindir}
+ install -m 755 usr/utils/shared/losetup ${D}${base_bindir}
+ install -m 755 usr/utils/shared/wc ${D}${base_bindir}
- install -d ${D}${base_libdir}
- install -m 755 usr/klibc/klibc-*.so ${D}${base_libdir}
- cd ${D}${base_libdir}
- ln -s klibc-*.so klibc.so
- cd -
+ install -d ${D}${base_libdir}
+ install -m 755 usr/klibc/klibc-*.so ${D}${base_libdir}
+ cd ${D}${base_libdir}
+ ln -s klibc-*.so klibc.so
+ cd -
cd ${D}${base_bindir}
- ln -s gzip gunzip
+ ln -s gzip gunzip
ln -s gzip zcat
- cd -
+ cd -
}
export INST=${STAGING_DIR_TARGET}
do_stage() {
- oe_runmake install
+ oe_runmake install
cp '${STAGING_DIR_TARGET}/bin/klcc' '${CROSS_DIR}/bin/${TARGET_PREFIX}klcc'
}
PACKAGES = "${PN} ${PN}-dev klibc-utils-sh klibc-utils-kinit \
- klibc-utils-fstype klibc-utils-ipconfig \
- klibc-utils-nfsmount klibc-utils-resume \
- klibc-utils-run-init klibc-utils-cat \
- klibc-utils-chroot klibc-utils-cpio \
- klibc-utils-dd klibc-utils-false \
- klibc-utils-halt klibc-utils-insmod \
- klibc-utils-kill klibc-utils-ln \
- klibc-utils-minips klibc-utils-mkdir \
- klibc-utils-mkfifo klibc-utils-mknod \
+ klibc-utils-fstype klibc-utils-ipconfig \
+ klibc-utils-nfsmount klibc-utils-resume \
+ klibc-utils-run-init klibc-utils-cat \
+ klibc-utils-chroot klibc-utils-cpio \
+ klibc-utils-dd klibc-utils-false \
+ klibc-utils-halt klibc-utils-insmod \
+ klibc-utils-kill klibc-utils-ln \
+ klibc-utils-minips klibc-utils-mkdir \
+ klibc-utils-mkfifo klibc-utils-mknod \
klibc-utils-mount klibc-utils-nuke \
klibc-utils-pivot-root klibc-utils-poweroff \
- klibc-utils-readlink klibc-utils-reboot \
+ klibc-utils-readlink klibc-utils-reboot \
klibc-utils-sleep klibc-utils-true \
klibc-utils-umount klibc-utils-uname \
klibc-utils-gzip klibc-utils-modprobe \
- klibc-utils-losetup klibc-utils-wc"
+ klibc-utils-losetup klibc-utils-wc"
FILES_${PN} = "${base_libdir}/klibc-*.so"
FILES_${PN}-dev = "${base_libdir}/klibc.so"
-FILES_klibc-utils-sh = "${base_bindir}/so"
+FILES_klibc-utils-sh = "${base_bindir}/sh"
FILES_klibc-utils-gzip = "${base_bindir}/gzip ${base_bindir}/gunzip ${base_bindir}/zcat"
FILES_klibc-utils-kinit = "${base_bindir}/kinit"
FILES_klibc-utils-fstype = "${base_bindir}/fstype"
diff --git a/recipes/lftp/lftp_3.5.1.bb b/recipes/lftp/lftp_3.5.1.bb
deleted file mode 100644
index 0b37ce8988..0000000000
--- a/recipes/lftp/lftp_3.5.1.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-LICENSE = "GPL"
-DESCRIPTION = "lftp is a sophisticated command line based file \
-transfer program. Supported protocols include FTP, HTTP, \
-and FISH."
-HOMEPAGE = "http://lftp.yar.ru"
-SECTION = "console/network"
-DEPENDS = "readline gnutls"
-
-SRC_URI = "http://ftp.yars.free.net/pub/source/lftp/old/lftp-${PV}.tar.bz2"
-
-EXTRA_OECONF = "--disable-largefile --disable-rpath --with-included-readline=no"
-
-do_configure_prepend () {
- rm ${S}/m4/iconv.m4
-}
-
-inherit autotools gettext
diff --git a/recipes/lftp/lftp_4.0.5.bb b/recipes/lftp/lftp_4.0.5.bb
new file mode 100644
index 0000000000..11f181e5aa
--- /dev/null
+++ b/recipes/lftp/lftp_4.0.5.bb
@@ -0,0 +1,20 @@
+LICENSE = "GPL"
+DESCRIPTION = "lftp is a sophisticated command line based file \
+transfer program. Supported protocols include FTP, HTTP, \
+and FISH."
+HOMEPAGE = "http://lftp.yar.ru"
+SECTION = "console/network"
+DEPENDS = "readline gnutls"
+
+SRC_URI = "http://ftp.yars.free.net/pub/source/lftp/lftp-${PV}.tar.bz2;name=u1"
+
+EXTRA_OECONF = "--disable-largefile --disable-rpath --with-included-readline=no"
+
+do_configure_prepend () {
+ rm ${S}/m4/iconv.m4
+}
+
+inherit autotools gettext
+
+SRC_URI[u1.md5sum] = "5400cad5f91e131ac2ded7c24aea594c"
+SRC_URI[u1.sha256sum] = "5c1f94f5780ed3cb51fe00439fbfa4e8b4bd28564c3248cb21f6ee9fd794c473"
diff --git a/recipes/liba52/files/01-enable-pic.diff b/recipes/liba52/files/01-enable-pic.diff
new file mode 100644
index 0000000000..ed1accd37a
--- /dev/null
+++ b/recipes/liba52/files/01-enable-pic.diff
@@ -0,0 +1,23 @@
+Description: Disabling -prefer-non-pic which enables -fPIC
+Bug-Debian: http://bugs.debian.org/401590
+Author: Daniel Baumann <daniel@debian.org>, Dmitrijs Ledkovs <dmitrij.ledkov@gmail.com>
+
+
+---
+ liba52/configure.incl | 3 ---
+ 1 files changed, 0 insertions(+), 3 deletions(-)
+
+Index: a52dec-deb/liba52/configure.incl
+===================================================================
+--- a52dec-deb.orig/liba52/configure.incl 2009-12-05 02:52:12.000000000 +0000
++++ a52dec-deb/liba52/configure.incl 2009-12-05 03:23:45.000000000 +0000
+@@ -1,9 +1,6 @@
+ AC_SUBST([LIBA52_CFLAGS])
+ AC_SUBST([LIBA52_LIBS])
+
+-dnl avoid -fPIC when possible
+-LIBA52_CFLAGS="$LIBA52_CFLAGS -prefer-non-pic"
+-
+ AC_ARG_ENABLE([double],
+ [ --enable-double use double-precision samples])
+ if test x"$enable_double" = x"yes"; then
diff --git a/recipes/liba52/liba52_0.7.4.bb b/recipes/liba52/liba52_0.7.4.bb
index 743fa30f83..ea87cbef4f 100644
--- a/recipes/liba52/liba52_0.7.4.bb
+++ b/recipes/liba52/liba52_0.7.4.bb
@@ -2,11 +2,12 @@ DESCRIPTION = "Library for reading some sort of media format."
LICENSE = "GPL"
SECTION = "libs"
PRIORITY = "optional"
-PR = "r1"
+PR = "r2"
inherit autotools
-SRC_URI = "http://liba52.sourceforge.net/files/a52dec-${PV}.tar.gz"
+SRC_URI = "http://liba52.sourceforge.net/files/a52dec-${PV}.tar.gz \
+ file://01-enable-pic.diff;patch=1"
S = "${WORKDIR}/a52dec-${PV}"
EXTRA_OECONF = " --enable-shared "
diff --git a/recipes/libdlo/kernel-module-udlfb_git.bb b/recipes/libdlo/kernel-module-udlfb_git.bb
new file mode 100644
index 0000000000..24dc2f36dd
--- /dev/null
+++ b/recipes/libdlo/kernel-module-udlfb_git.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "Framebuffer console driver for displaylink based usb devices"
+LICENSE = "GPLv2"
+
+# Make sure you have:
+# CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_VIRTUAL=y
+# CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_SYS_IMAGEBLIT=y
+# CONFIG_FB_SYS_IMAGEBLIT_MODULE=y
+# CONFIG_FB_SYS_COPYAREA=y
+# CONFIG_FB_SYS_COPYAREA_MODULE=y
+# CONFIG_FB_SYS_FILLRECT=y
+# CONFIG_FB_SYS_FILLRECT_MODULE=y
+# enabled in your kernel
+
+PV = "0.4"
+PR_append = "b+gitr${SRCREV}"
+
+SRCREV = "c01f96f2de105c1898cbd1708fe5472ca0f7a7e2"
+SRC_URI = "git://git.plugable.com/webdav/udlfb;protocol=http;branch=master"
+
+inherit module
+
+S = "${WORKDIR}/git"
+
+MODULE_MAKE_FLAGS += " -C ${STAGING_KERNEL_DIR} SUBDIRS=${S}"
+
+
diff --git a/recipes/libffi/libffi/autoconf-2.64.patch b/recipes/libffi/libffi/autoconf-2.64.patch
new file mode 100644
index 0000000000..7e5a41e141
--- /dev/null
+++ b/recipes/libffi/libffi/autoconf-2.64.patch
@@ -0,0 +1,24 @@
+From cc8c1160a690a1eafc35e745da5f24e258436bda Mon Sep 17 00:00:00 2001
+From: Mike Lundy <mike@fluffypenguin.org>
+Date: Fri, 2 Oct 2009 12:28:13 -0700
+Subject: [PATCH] fix libffi for autoconf-2.64
+
+---
+ libffi-3.0.8/configure.ac | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git libffi-3.0.8/configure.ac libffi-3.0.8/configure.ac
+index 6a7e7fb..4c3f190 100644
+--- libffi-3.0.8/configure.ac
++++ libffi-3.0.8/configure.ac
+@@ -20,6 +20,7 @@ AM_INIT_AUTOMAKE
+ m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
+ m4_define([_AC_ARG_VAR_PRECIOUS],[])
+ AC_PROG_CC
++m4_undefine([_AC_ARG_VAR_PRECIOUS])
+ m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
+
+ AC_SUBST(CFLAGS)
+--
+1.6.4
+
diff --git a/recipes/libffi/libffi_3.0.8.bb b/recipes/libffi/libffi_3.0.8.bb
index d24e9715d4..adde932bbe 100644
--- a/recipes/libffi/libffi_3.0.8.bb
+++ b/recipes/libffi/libffi_3.0.8.bb
@@ -24,7 +24,8 @@ FILES_${PN}-dev = "${includedir}/${TARGET_SYS}/ffi* \
${libdir}/pkgconfig \
"
-SRC_URI = "ftp://sourceware.org/pub/libffi/${P}.tar.gz"
+SRC_URI = "ftp://sourceware.org/pub/libffi/${P}.tar.gz \
+ file://autoconf-2.64.patch;patch=1"
EXTRA_OECONF = "--with-gnu-ld \
--enable-shared \
diff --git a/recipes/libgcrypt/libgcrypt.inc b/recipes/libgcrypt/libgcrypt.inc
index afec2fde90..77dd1d9132 100644
--- a/recipes/libgcrypt/libgcrypt.inc
+++ b/recipes/libgcrypt/libgcrypt.inc
@@ -19,7 +19,4 @@ do_install_append() {
cp ${S}/src/*.pc ${D}/${libdir}/pkgconfig/
}
-do_stage() {
- autotools_stage_all
-}
-
+BBCLASSEXTEND = "native"
diff --git a/recipes/libgpg-error/libgpg-error.inc b/recipes/libgpg-error/libgpg-error.inc
index 400c1668a6..581d8839af 100644
--- a/recipes/libgpg-error/libgpg-error.inc
+++ b/recipes/libgpg-error/libgpg-error.inc
@@ -4,6 +4,7 @@ PRIORITY = "optional"
LICENSE = "GPL LGPL FDL"
DEPENDS += "virtual/libiconv"
+DEPENDS_virtclass-native = ""
SRC_URI = "ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-${PV}.tar.gz \
file://pkgconfig.patch;patch=1"
@@ -30,3 +31,5 @@ do_stage() {
install -d ${STAGING_DATADIR}/aclocal
install -m 0644 src/gpg-error.m4 ${STAGING_DATADIR}/aclocal/
}
+
+BBCLASSEXTEND = "native"
diff --git a/recipes/libgsasl/libgsasl_1.4.0.bb b/recipes/libgsasl/libgsasl_1.4.0.bb
new file mode 100644
index 0000000000..2e6b4619c9
--- /dev/null
+++ b/recipes/libgsasl/libgsasl_1.4.0.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "GNU SASL is an implementation of the Simple Authentication and Security Layer framework and a few common SASL mechanisms."
+HOMEPAGE = "http://www.gnu.org/software/gsasl/"
+DEPENDS = "libidn"
+PR = "r0"
+
+SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz;name=libgsasl"
+SRC_URI[libgsasl.md5sum] = "e1e5ffac3f260a0412b8820d8e5229ab"
+SRC_URI[libgsasl.sha256sum] = "1e3d42c414e09a8fb16fb3ce5fac2a3b3324048e123b7f682fb05b12c51bede8"
+
+S = ${WORKDIR}/${PN}-${PV}
+
+EXTRA_OECONF = "--with-libidn-prefix=${STAGING_DIR}/${HOST_SYS}"
+
+inherit autotools
diff --git a/recipes/libidn/libidn_1.15.bb b/recipes/libidn/libidn_1.15.bb
deleted file mode 100644
index 0a68a796c7..0000000000
--- a/recipes/libidn/libidn_1.15.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-LICENSE = "LGPL"
-DESCRIPTION = "Implementation of the Stringprep, Punycode and IDNA specifications defined by the IETF Internationalized Domain Names (IDN) working group."
-SECTION = "libs"
-PRIORITY = "optional"
-PR = "r0"
-
-inherit pkgconfig autotools
-
-SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz"
-
-EXTRA_OECONF = " --disable-tld"
-
-do_configure_prepend () {
- autoreconf -f -i -s
-}
-
-do_stage () {
- autotools_stage_all
-}
diff --git a/recipes/libidn/libidn_1.18.bb b/recipes/libidn/libidn_1.18.bb
new file mode 100644
index 0000000000..7cba6699be
--- /dev/null
+++ b/recipes/libidn/libidn_1.18.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Implementation of the Stringprep, Punycode and IDNA specifications defined by the IETF Internationalized Domain Names (IDN) working group."
+SECTION = "libs"
+LICENSE = "LGPL"
+PRIORITY = "optional"
+PR = "r0"
+
+SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz;name=libidn"
+SRC_URI[libidn.md5sum] = "66f115347439f56386f37a3ad92c1da2"
+SRC_URI[libidn.sha256sum] = "b824ef81319f4ba1a2e49b7208a3ad820a1baa7369e4555b8e45227e5796e77c"
+
+EXTRA_OECONF = "--disable-tld"
+
+inherit autotools
diff --git a/recipes/libnl/libnl_1.1.bb b/recipes/libnl/libnl_1.1.bb
index 3895ec5558..c92f7ffe10 100644
--- a/recipes/libnl/libnl_1.1.bb
+++ b/recipes/libnl/libnl_1.1.bb
@@ -2,7 +2,11 @@ DESCRIPTION = "libnl is a library for applications dealing with netlink sockets"
SECTION = "libs/network"
LICENSE = "LGPL"
HOMEPAGE = "http://people.suug.ch/~tgr/libnl"
-PR = "r2"
+
+# If you get errors like : undefined reference to `nl_handle_alloc
+# do a bitbake -c clean libnl2
+
+PR = "r3"
inherit autotools pkgconfig
@@ -16,6 +20,3 @@ SRC_URI = "\
file://netlink-local-fix.patch;patch=1 \
"
-do_stage () {
- autotools_stage_all prefix=${prefix}
-}
diff --git a/recipes/libol/libol_0.3.18.bb b/recipes/libol/libol_0.3.18.bb
index 7dc48f92df..0a9ad8a89b 100644
--- a/recipes/libol/libol_0.3.18.bb
+++ b/recipes/libol/libol_0.3.18.bb
@@ -1,12 +1,8 @@
DESCRIPTION = "A tiny C support library"
SECTION = "libs"
LICENSE = "GPL"
-PR = "r8"
+PR = "r9"
SRC_URI = "http://www.balabit.com/downloads/files/libol/0.3/${P}.tar.gz"
inherit autotools binconfig
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/recipes/liboop/liboop_1.0.bb b/recipes/liboop/liboop_1.0.bb
index 676ecbe700..b27fb5fd42 100644
--- a/recipes/liboop/liboop_1.0.bb
+++ b/recipes/liboop/liboop_1.0.bb
@@ -8,6 +8,9 @@ S = "${WORKDIR}/liboop-${PV}"
inherit autotools pkgconfig
+EXTRA_OECONF = "--without-tcl --without-glib \
+ --without-readline --without-adns"
+
headers = "oop.h oop-adns.h oop-glib.h \
oop-tcl.h oop-www.h oop-rl.h \
oop-read.h"
diff --git a/recipes/libpcap/libpcap-1.0.0/0001-Fix-some-problems-that-show-up-in-autoconf-2.64-and-.patch b/recipes/libpcap/libpcap-1.0.0/0001-Fix-some-problems-that-show-up-in-autoconf-2.64-and-.patch
new file mode 100644
index 0000000000..bd5f725d36
--- /dev/null
+++ b/recipes/libpcap/libpcap-1.0.0/0001-Fix-some-problems-that-show-up-in-autoconf-2.64-and-.patch
@@ -0,0 +1,140 @@
+From d1a3a92fab103210ab5f61780a731bce9a8909b5 Mon Sep 17 00:00:00 2001
+From: Guy Harris <guy@alum.mit.edu>
+Date: Sat, 2 Jan 2010 14:15:46 -0800
+Subject: [PATCH] Fix some problems that show up in autoconf 2.64 and later.
+
+---
+ aclocal.m4 | 60 ++++++++++++++++++++++++++++++++++++---------------------
+ configure | 9 ++++---
+ configure.in | 2 +
+ 3 files changed, 45 insertions(+), 26 deletions(-)
+
+Index: libpcap-1.0.0/aclocal.m4
+===================================================================
+--- libpcap-1.0.0.orig/aclocal.m4
++++ libpcap-1.0.0/aclocal.m4
+@@ -23,30 +23,21 @@ dnl LBL autoconf macros
+ dnl
+
+ dnl
+-dnl Determine which compiler we're using (cc or gcc)
+-dnl If using gcc, determine the version number
+-dnl If using cc, require that it support ansi prototypes
+-dnl If using gcc, use -O2 (otherwise use -O)
+-dnl If using cc, explicitly specify /usr/local/include
+-dnl
+-dnl usage:
+-dnl
+-dnl AC_LBL_C_INIT(copt, incls)
+-dnl
+-dnl results:
++dnl Do whatever AC_LBL_C_INIT work is necessary before using AC_PROG_CC.
+ dnl
+-dnl $1 (copt set)
+-dnl $2 (incls set)
+-dnl CC
+-dnl LDFLAGS
+-dnl ac_cv_lbl_gcc_vers
+-dnl LBL_CFLAGS
++dnl It appears that newer versions of autoconf (2.64 and later) will,
++dnl if you use AC_TRY_COMPILE in a macro, stick AC_PROG_CC at the
++dnl beginning of the macro, even if the macro itself calls AC_PROG_CC.
++dnl See section 20.8 "Expanded Before Required" in the Autoconf
++dnl documentation.
++dnl
++dnl This causes a steaming heap of fail in our case, as we were, in
++dnl AC_LBL_C_INIT, doing the tests we now do in AC_LBL_C_PREPARE,
++dnl calling AC_PROG_CC, and then doing the tests we now do in
++dnl AC_LBL_C_INIT.
+ dnl
+-AC_DEFUN([AC_LBL_C_INIT],
+- [AC_PREREQ(2.12)
+- AC_BEFORE([$0], [AC_PROG_CC])
+- AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
+- AC_BEFORE([$0], [AC_LBL_DEVEL])
++AC_DEFUN(AC_LBL_C_INIT_BEFORE_CC,
++[
+ AC_ARG_WITH(gcc, [ --without-gcc don't use gcc])
+ $1="-O"
+ $2=""
+@@ -72,7 +63,32 @@ AC_DEFUN([AC_LBL_C_INIT],
+ CC=cc
+ export CC
+ fi
+- AC_PROG_CC
++])
++
++dnl
++dnl Determine which compiler we're using (cc or gcc)
++dnl If using gcc, determine the version number
++dnl If using cc, require that it support ansi prototypes
++dnl If using gcc, use -O2 (otherwise use -O)
++dnl If using cc, explicitly specify /usr/local/include
++dnl
++dnl usage:
++dnl
++dnl AC_LBL_C_INIT(copt, incls)
++dnl
++dnl results:
++dnl
++dnl $1 (copt set)
++dnl $2 (incls set)
++dnl CC
++dnl LDFLAGS
++dnl ac_cv_lbl_gcc_vers
++dnl LBL_CFLAGS
++dnl
++AC_DEFUN(AC_LBL_C_INIT,
++ [AC_PREREQ(2.50)
++ AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
++ AC_BEFORE([$0], [AC_LBL_DEVEL])
+ if test "$GCC" = yes ; then
+ if test "$SHLICC2" = yes ; then
+ ac_cv_lbl_gcc_vers=2
+Index: libpcap-1.0.0/configure
+===================================================================
+--- libpcap-1.0.0.orig/configure
++++ libpcap-1.0.0/configure
+@@ -1893,9 +1893,6 @@ test -n "$target_alias" &&
+
+
+
+-
+-
+-
+ # Check whether --with-gcc was given.
+ if test "${with_gcc+set}" = set; then
+ withval=$with_gcc;
+@@ -1962,7 +1959,8 @@ fi
+ CC=cc
+ export CC
+ fi
+- ac_ext=c
++
++ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+@@ -2881,6 +2879,9 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS con
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
++
++
++
+ if test "$GCC" = yes ; then
+ if test "$SHLICC2" = yes ; then
+ ac_cv_lbl_gcc_vers=2
+Index: libpcap-1.0.0/configure.in
+===================================================================
+--- libpcap-1.0.0.orig/configure.in
++++ libpcap-1.0.0/configure.in
+@@ -12,6 +12,8 @@ AC_INIT(pcap.c)
+
+ AC_CANONICAL_SYSTEM
+
++AC_LBL_C_INIT_BEFORE_CC(V_CCOPT, V_INCLS)
++AC_PROG_CC
+ AC_LBL_C_INIT(V_CCOPT, V_INCLS, V_LIBS)
+ AC_LBL_C_INLINE
+ AC_C___ATTRIBUTE__
diff --git a/recipes/libpcap/libpcap_1.0.0.bb b/recipes/libpcap/libpcap_1.0.0.bb
index 6dfc056930..2ce1bc44cc 100644
--- a/recipes/libpcap/libpcap_1.0.0.bb
+++ b/recipes/libpcap/libpcap_1.0.0.bb
@@ -5,6 +5,11 @@ SRC_URI = "http://www.tcpdump.org/release/libpcap-${PV}.tar.gz"
SRC_URI += "file://aclocal.patch;patch=1"
SRC_URI += "file://ieee80215-arphrd.patch;patch=1"
SRC_URI += "file://ldflags.patch;patch=1"
+SRC_URI += "file://0001-Fix-some-problems-that-show-up-in-autoconf-2.64-and-.patch;patch=1"
+
+do_configure_prepend() {
+ cat ${S}/aclocal.m4 >>${S}/acinclude.m4
+}
do_compile () {
oe_runmake
diff --git a/recipes/libpng/libpng-native_1.2.37.bb b/recipes/libpng/libpng-native_1.2.37.bb
new file mode 100644
index 0000000000..3c36b52138
--- /dev/null
+++ b/recipes/libpng/libpng-native_1.2.37.bb
@@ -0,0 +1,6 @@
+require libpng_${PV}.bb
+require libpng-native.inc
+
+PR = "r1"
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libpng-${PV}"
diff --git a/recipes/libpng/libpng.inc b/recipes/libpng/libpng.inc
index 831f951e99..fc1feb8941 100644
--- a/recipes/libpng/libpng.inc
+++ b/recipes/libpng/libpng.inc
@@ -7,7 +7,7 @@ DEPENDS = "zlib"
INC_PR = "r2"
-SRC_URI = "${SOURCEFORGE_MIRROR}/libpng/libpng-${PV}.tar.bz2"
+SRC_URI = "${SOURCEFORGE_MIRROR}/libpng/libpng-${PV}.tar.bz2;name=tarball"
S = "${WORKDIR}/libpng-${PV}"
inherit autotools pkgconfig binconfig
diff --git a/recipes/libpng/libpng_1.2.37.bb b/recipes/libpng/libpng_1.2.37.bb
new file mode 100644
index 0000000000..752b6e68ab
--- /dev/null
+++ b/recipes/libpng/libpng_1.2.37.bb
@@ -0,0 +1,8 @@
+require libpng.inc
+
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://makefile_fix.patch;patch=1"
+
+SRC_URI[tarball.md5sum] = "6d1ee0888dbb711214943cb19c294b49"
+SRC_URI[tarball.sha256sum] = "682960b55527b54bada90e959c2d42679444a1db43677c77eb645a29645f86d1"
diff --git a/recipes/librsvg/librsvg-native_2.26.0.bb b/recipes/librsvg/librsvg-native_2.26.0.bb
index 0a0a274469..5ec1b285f1 100644
--- a/recipes/librsvg/librsvg-native_2.26.0.bb
+++ b/recipes/librsvg/librsvg-native_2.26.0.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "Library for rendering SVG files"
SECTION = "x11/utils"
DEPENDS = "cairo-native pango-native gdk-pixbuf-csource-native"
LICENSE = "LGPL"
+PR = "r1"
inherit native autotools_stage
diff --git a/recipes/libsndfile/libsndfile1_1.0.20.bb b/recipes/libsndfile/libsndfile1_1.0.20.bb
deleted file mode 100644
index 1458b7acfa..0000000000
--- a/recipes/libsndfile/libsndfile1_1.0.20.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-DESCRIPTION = "An audio format Conversion library"
-HOMEPAGE = "http://www.mega-nerd.com/libsndfile"
-AUTHOR = "Erik de Castro Lopo"
-SECTION = "libs/multimedia"
-LICENSE = "LGPL"
-DEPENDS = "sqlite3"
-PR = "r1"
-
-
-SRC_URI = "http://www.mega-nerd.com/libsndfile/libsndfile-${PV}.tar.gz \
- "
-
-S = "${WORKDIR}/libsndfile-${PV}"
-
-inherit autotools_stage lib_package pkgconfig
-
-do_configure_prepend_arm() {
- export ac_cv_sys_largefile_source=1
- export ac_cv_sys_file_offset_bits=64
- ac_cv_sizeof_off_t=8
-}
-
-do_configure_prepend_chinook-compat () {
-
- for i in lt~obsolete.m4 ltsugar.m4 libtool.m4 ltoptions.m4 ltversion.m4
- do
- rm ${S}/M4/${i}
- done
-}
-
-PACKAGES =+ "${PN}-octave"
-FILES_${PN}-octave += "/usr/share/octave/site/m"
diff --git a/recipes/libsndfile/libsndfile1_1.0.21.bb b/recipes/libsndfile/libsndfile1_1.0.21.bb
new file mode 100644
index 0000000000..5144e1fba0
--- /dev/null
+++ b/recipes/libsndfile/libsndfile1_1.0.21.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "An audio format Conversion library"
+HOMEPAGE = "http://www.mega-nerd.com/libsndfile"
+AUTHOR = "Erik de Castro Lopo"
+SECTION = "libs/multimedia"
+LICENSE = "LGPL"
+DEPENDS = "sqlite3"
+PR = "r0"
+
+SRC_URI = "http://www.mega-nerd.com/libsndfile/files/libsndfile-${PV}.tar.gz;name=libsndfile1021targz"
+SRC_URI[libsndfile1021targz.md5sum] = "880a40ec636ab2185b97f8927299b292"
+SRC_URI[libsndfile1021targz.sha256sum] = "7e9083a2551ff347276d82cdb61f2b4f9cd137c0b76433800e991583ded8ea67"
+
+S = "${WORKDIR}/libsndfile-${PV}"
+
+inherit autotools_stage lib_package pkgconfig
+
+do_configure_prepend_arm() {
+ ac_cv_sizeof_off_t=8
+}
+
+do_configure_prepend_chinook-compat () {
+
+ for i in lt~obsolete.m4 ltsugar.m4 libtool.m4 ltoptions.m4 ltversion.m4
+ do
+ rm ${S}/M4/${i}
+ done
+}
+
+PACKAGES =+ "${PN}-octave"
+FILES_${PN}-octave += "/usr/share/octave/site/m"
diff --git a/recipes/libspf2/libspf2_1.0.4.bb b/recipes/libspf2/libspf2_1.0.4.bb
deleted file mode 100644
index 8254d25f7c..0000000000
--- a/recipes/libspf2/libspf2_1.0.4.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "libspf2 is a complete and robust implementation of SPF which \
-provides support for many MTAs."
-SECTION = "libs/network"
-LICENSE = "GPL"
-SRC_URI = "http://www.libspf2.org/spf/libspf2-${PV}.tar.gz"
-S = "${WORKDIR}/libspf2-${PV}"
-
-inherit autotools
-
-PACKAGES =+ "${PN}-bin"
-FILES_${PN}-bin = "${bindir}"
-FILES_${PN} = "${libdir}/lib*.so.*"
diff --git a/recipes/libspf2/libspf2_1.2.9.bb b/recipes/libspf2/libspf2_1.2.9.bb
new file mode 100644
index 0000000000..0f491c9b73
--- /dev/null
+++ b/recipes/libspf2/libspf2_1.2.9.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "libspf2 is a complete and robust implementation of SPF which \
+provides support for many MTAs."
+SECTION = "libs/network"
+LICENSE = "LGPL"
+SRC_URI = "http://www.libspf2.org/spf/libspf2-${PV}.tar.gz;name=src"
+S = "${WORKDIR}/libspf2-${PV}"
+
+SRC_URI[src.md5sum] = "3305df4d1b13ca964d80b23bb5e4e2b6"
+SRC_URI[src.sha256sum] = "4837f6b063b1431673754cbf6bef8979de5ffc4d7f26f6b93abd42787ba04862"
+
+inherit autotools
+
+PACKAGES =+ "${PN}-bin-dbg ${PN}-bin"
+FILES_${PN}-bin = "${bindir}"
+FILES_${PN}-bin-dbg = "${bindir}/.debug"
+FILES_${PN} = "${libdir}/lib*.so.*"
diff --git a/recipes/libtiff/tiff_3.8.2.bb b/recipes/libtiff/tiff_3.8.2.bb
deleted file mode 100644
index 00edb40eb3..0000000000
--- a/recipes/libtiff/tiff_3.8.2.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "This software provides support for the Tag Image File Format (TIFF)"
-LICENSE = "${PN}"
-HOMEPAGE = "http://www.remotesensing.org/libtiff/"
-DEPENDS = "zlib jpeg lzo"
-PV = "3.8.2+4.0.0beta2"
-
-SRC_URI = "ftp://ftp.remotesensing.org/pub/libtiff/tiff-4.0.0beta2.tar.gz"
-S = "${WORKDIR}/${PN}-4.0.0beta2"
-
-inherit autotools_stage
-
-PACKAGES =+ "tiffxx tiffxx-dbg tiffxx-dev tiff-utils tiff-utils-dbg"
-FILES_tiffxx = "${libdir}/libtiffxx.so.*"
-FILES_tiffxx-dev = "${libdir}/libtiffxx.so ${libdir}/libtiffxx.*a"
-FILES_tiffxx-dbg += "${libdir}/.debug/libtiffxx.so*"
-FILES_tiff-utils = "${bindir}/*"
-FILES_tiff-utils-dbg += "${bindir}/.debug/"
diff --git a/recipes/libtiff/tiff_3.9.2.bb b/recipes/libtiff/tiff_3.9.2.bb
new file mode 100644
index 0000000000..5f022e0b1d
--- /dev/null
+++ b/recipes/libtiff/tiff_3.9.2.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "This software provides support for the Tag Image File Format (TIFF)"
+LICENSE = "${PN}"
+HOMEPAGE = "http://www.remotesensing.org/libtiff/"
+DEPENDS = "zlib jpeg lzo"
+PV = "3.9.2+4.0.0beta5"
+
+PR = "r1"
+
+SRC_URI = "ftp://ftp.remotesensing.org/pub/libtiff/tiff-4.0.0beta5.tar.gz;name=tiff400beta5targz"
+SRC_URI[tiff400beta5targz.md5sum] = "a0a83604e38a299fae9f0b1a39c04870"
+SRC_URI[tiff400beta5targz.sha256sum] = "64b61567782643a841e33a8d031d0d6a9b3e436108829e2e947183f8dcdc6ec7"
+
+S = "${WORKDIR}/${PN}-4.0.0beta5"
+
+inherit autotools
+
+# requires a too recent, non-default autoconf
+do_configure() {
+ gnu-configize
+ oe_runconf
+}
+
+PACKAGES =+ "tiffxx tiffxx-dbg tiffxx-dev tiff-utils tiff-utils-dbg"
+FILES_tiffxx = "${libdir}/libtiffxx.so.*"
+FILES_tiffxx-dev = "${libdir}/libtiffxx.so ${libdir}/libtiffxx.*a"
+FILES_tiffxx-dbg += "${libdir}/.debug/libtiffxx.so*"
+FILES_tiff-utils = "${bindir}/*"
+FILES_tiff-utils-dbg += "${bindir}/.debug/"
diff --git a/recipes/libungif/libungif_4.1.3.bb b/recipes/libungif/libungif_4.1.3.bb
index caf0427551..db16ff931d 100644
--- a/recipes/libungif/libungif_4.1.3.bb
+++ b/recipes/libungif/libungif_4.1.3.bb
@@ -2,7 +2,7 @@ SECTION = "libs"
DESCRIPTION = "shared library for GIF images"
SRC_URI = "${SOURCEFORGE_MIRROR}/giflib/libungif-${PV}.tar.bz2"
LICENSE = "MIT"
-PR = "r1"
+PR = "r2"
PACKAGES += "${PN}-utils"
diff --git a/recipes/libunwind/libunwind.inc b/recipes/libunwind/libunwind.inc
new file mode 100644
index 0000000000..b4ccce8661
--- /dev/null
+++ b/recipes/libunwind/libunwind.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "a portable and efficient C programming interface (API) to determine the call-chain of a program"
+HOMEPAGE = "http://www.nongnu.org/libunwind"
+LICENSE = "MIT"
+INC_PR = "r0"
+
+SRC_URI = "http://download.savannah.nongnu.org/releases/libunwind/${PN}-${PV}.tar.gz;name=archive"
+
+S = "${WORKDIR}/${PN}-${PV}"
+
+inherit autotools
+
+BBCLASSEXTEND = "native"
diff --git a/recipes/libunwind/libunwind_0.99.bb b/recipes/libunwind/libunwind_0.99.bb
new file mode 100644
index 0000000000..b7d0612007
--- /dev/null
+++ b/recipes/libunwind/libunwind_0.99.bb
@@ -0,0 +1,5 @@
+require libunwind.inc
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "3e9ca08118e22165a7f07d01d61a2d0d"
+SRC_URI[archive.sha256sum] = "56083aae17eab3ccb7a36b95f0430f5a5f258755bf193bb5ca4fd4b918356164"
diff --git a/recipes/libusb/files/libusb-shortok.patch b/recipes/libusb/files/libusb-shortok.patch
new file mode 100644
index 0000000000..4e7831af36
--- /dev/null
+++ b/recipes/libusb/files/libusb-shortok.patch
@@ -0,0 +1,32 @@
+The USBFS_URB_SHORT_NOT_OK flag is valid for IN urbs only. When USB
+debugging is enabled in the linux kernel its usb_submit_urb() function
+will validate and reject OUT urbs where this flag is set.
+
+E.g. you will see something like
+
+ usb 1-1.4: BOGUS urb flags, 1 --> 0
+
+when sending bulk urbs.
+
+This patch sets USBFS_URB_SHORT_NOT_OK only for IN urbs.
+
+
+Index: libusb-1.0.6/libusb/os/linux_usbfs.c
+===================================================================
+--- libusb-1.0.6.orig/libusb/os/linux_usbfs.c
++++ libusb-1.0.6/libusb/os/linux_usbfs.c
+@@ -1360,11 +1360,13 @@ static int submit_bulk_transfer(struct u
+
+ for (i = 0; i < num_urbs; i++) {
+ struct usbfs_urb *urb = &urbs[i];
++ int is_out = ((transfer->endpoint & LIBUSB_ENDPOINT_DIR_MASK)
++ == LIBUSB_ENDPOINT_OUT);
+ urb->usercontext = itransfer;
+ urb->type = urb_type;
+ urb->endpoint = transfer->endpoint;
+ urb->buffer = transfer->buffer + (i * MAX_BULK_BUFFER_LENGTH);
+- if (supports_flag_bulk_continuation)
++ if (supports_flag_bulk_continuation && !is_out)
+ urb->flags = USBFS_URB_SHORT_NOT_OK;
+ if (i == num_urbs - 1 && last_urb_partial)
+ urb->buffer_length = transfer->length % MAX_BULK_BUFFER_LENGTH;
diff --git a/recipes/libusb/libusb-compat-0.1.3/gcc-3-compatibility.patch b/recipes/libusb/libusb-compat-0.1.3/gcc-3-compatibility.patch
new file mode 100644
index 0000000000..e6142f735c
--- /dev/null
+++ b/recipes/libusb/libusb-compat-0.1.3/gcc-3-compatibility.patch
@@ -0,0 +1,26 @@
+Index: libusb-compat-0.1.2/configure.ac
+===================================================================
+--- libusb-compat-0.1.2.orig/configure.ac 2009-06-11 22:49:08.000000000 +0000
++++ libusb-compat-0.1.2/configure.ac 2009-06-26 21:44:08.000000000 +0000
+@@ -56,7 +56,7 @@
+ CFLAGS="$saved_cflags"
+
+ AC_DEFINE([API_EXPORTED], [__attribute__((visibility("default")))], [Default visibility])
+-AM_CFLAGS="-std=gnu99 $inline_cflags -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wno-pointer-sign -Wshadow"
++AM_CFLAGS="-std=gnu99 $inline_cflags -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wshadow"
+ AC_SUBST(AM_CFLAGS)
+
+ AC_CONFIG_FILES([libusb.pc] [libusb-config] [Makefile] [libusb/Makefile] [examples/Makefile])
+Index: libusb-compat-0.1.2/libusb/Makefile.am
+===================================================================
+--- libusb-compat-0.1.2.orig/libusb/Makefile.am 2008-06-17 23:13:02.000000000 +0000
++++ libusb-compat-0.1.2/libusb/Makefile.am 2009-06-26 21:44:08.000000000 +0000
+@@ -2,7 +2,7 @@
+ lib_LTLIBRARIES = libusb.la
+
+ libusb_la_SOURCES = core.c usbi.h
+-libusb_la_CFLAGS = -fvisibility=hidden $(AM_CFLAGS) $(LIBUSB_1_0_CFLAGS)
++libusb_la_CFLAGS = $(AM_CFLAGS) $(LIBUSB_1_0_CFLAGS)
+ libusb_la_LIBADD = $(LIBUSB_1_0_LIBS)
+ libusb_la_LDFLAGS = -version-info $(LT_MAJOR):$(LT_REVISION):$(LT_AGE) \
+ -release 0.1
diff --git a/recipes/libusb/libusb-compat_0.1.2.bb b/recipes/libusb/libusb-compat_0.1.2.bb
index 8ce111f2d8..6de1d482ff 100644
--- a/recipes/libusb/libusb-compat_0.1.2.bb
+++ b/recipes/libusb/libusb-compat_0.1.2.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "libusb-0 compatibility library using libusb-1"
HOMEPAGE = "http://libusb.sf.net"
SECTION = "libs"
-LICENSE = "LGPL"
+LICENSE = "LGPLv2.1"
PROVIDES = "virtual/libusb0"
PE = "1"
PR = "r0"
diff --git a/recipes/libusb/libusb-compat_0.1.3.bb b/recipes/libusb/libusb-compat_0.1.3.bb
new file mode 100644
index 0000000000..85a5561685
--- /dev/null
+++ b/recipes/libusb/libusb-compat_0.1.3.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "libusb-0 compatibility library using libusb-1"
+HOMEPAGE = "http://libusb.sf.net"
+SECTION = "libs"
+LICENSE = "LGPLv2.1"
+PROVIDES = "virtual/libusb0"
+PE = "1"
+PR = "r0"
+
+DEPENDS = "libusb1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/libusb/${P}.tar.bz2;name=libusbcompat013tarbz2"
+SRC_URI[libusbcompat013tarbz2.md5sum] = "570ac2ea085b80d1f74ddc7c6a93c0eb"
+SRC_URI[libusbcompat013tarbz2.sha256sum] = "a590a03b6188030ee1ca1a0af55685fcde005ca807b963970f839be776031d94"
+
+SRC_URI_append_nylon = " file://gcc-3-compatibility.patch;patch=1"
+
+inherit autotools_stage binconfig lib_package
+
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
+EXTRA_OECONF = "--disable-build-docs"
diff --git a/recipes/libusb/libusb1_1.0.2.bb b/recipes/libusb/libusb1_1.0.2.bb
index 145e4cbe97..2b1360192c 100644
--- a/recipes/libusb/libusb1_1.0.2.bb
+++ b/recipes/libusb/libusb1_1.0.2.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "library to provide userspace access to USB devices"
HOMEPAGE = "http://libusb.sf.net"
SECTION = "libs"
-LICENSE = "LGPL"
+LICENSE = "LGPLv2.1"
SRC_URI = "${SOURCEFORGE_MIRROR}/libusb/libusb-${PV}.tar.bz2"
S = "${WORKDIR}/libusb-${PV}"
diff --git a/recipes/libusb/libusb1_1.0.4.bb b/recipes/libusb/libusb1_1.0.4.bb
index d2d4937f2c..5221f6e7f1 100644
--- a/recipes/libusb/libusb1_1.0.4.bb
+++ b/recipes/libusb/libusb1_1.0.4.bb
@@ -1,9 +1,14 @@
DESCRIPTION = "library to provide userspace access to USB devices"
HOMEPAGE = "http://libusb.sf.net"
SECTION = "libs"
-LICENSE = "LGPL"
+LICENSE = "LGPLv2.1"
-SRC_URI = "${SOURCEFORGE_MIRROR}/libusb/libusb-${PV}.tar.bz2"
+PR = "r1"
+
+SRC_URI = " \
+ ${SOURCEFORGE_MIRROR}/libusb/libusb-${PV}.tar.bz2 \
+ file://libusb-shortok.patch;patch=1 \
+ "
S = "${WORKDIR}/libusb-${PV}"
inherit autotools
diff --git a/recipes/libusb/libusb_0.1.12.bb b/recipes/libusb/libusb_0.1.12.bb
index ccf4a5850e..3b5ac65a55 100644
--- a/recipes/libusb/libusb_0.1.12.bb
+++ b/recipes/libusb/libusb_0.1.12.bb
@@ -1,9 +1,9 @@
DESCRIPTION = "libusb is a library to provide userspace access to USB devices."
HOMEPAGE = "http://libusb.sf.net"
SECTION = "libs"
-LICENSE = "LGPL"
+LICENSE = "LGPLv2.1"
PROVIDES = "virtual/libusb0"
-PR = "r3"
+PR = "r4"
SRC_URI = "${SOURCEFORGE_MIRROR}/libusb/libusb-${PV}.tar.gz \
file://configure_fix.patch;patch=1"
diff --git a/recipes/libvorbis/libvorbis-1.2.3/patch-lib_backends.h b/recipes/libvorbis/libvorbis-1.2.3/patch-lib_backends.h
new file mode 100644
index 0000000000..44da9d3107
--- /dev/null
+++ b/recipes/libvorbis/libvorbis-1.2.3/patch-lib_backends.h
@@ -0,0 +1,11 @@
+$FreeBSD: ports/audio/libvorbis/files/patch-lib_backends.h,v 1.1 2009/11/24 21:32:39 naddy Exp $
+--- lib/backends.h.orig 2009-11-24 21:46:47.000000000 +0100
++++ lib/backends.h 2009-11-24 21:46:47.000000000 +0100
+@@ -109,6 +109,7 @@ typedef struct vorbis_info_residue0{
+ /* first stage (lossless partitioning) */
+ int grouping; /* group n vectors per partition */
+ int partitions; /* possible codebooks for a partition */
++ int partvals; /* partitions ^ groupbook dim */
+ int groupbook; /* huffbook for partitioning */
+ int secondstages[64]; /* expanded out to pointers in lookup */
+ int booklist[512]; /* list of second stage books */
diff --git a/recipes/libvorbis/libvorbis-1.2.3/patch-lib_codebook.c b/recipes/libvorbis/libvorbis-1.2.3/patch-lib_codebook.c
new file mode 100644
index 0000000000..ed76a9edea
--- /dev/null
+++ b/recipes/libvorbis/libvorbis-1.2.3/patch-lib_codebook.c
@@ -0,0 +1,11 @@
+$FreeBSD: ports/audio/libvorbis/files/patch-lib_codebook.c,v 1.3 2009/11/24 21:32:39 naddy Exp $
+--- lib/codebook.c.orig 2009-07-09 11:12:08.000000000 +0200
++++ lib/codebook.c 2009-11-24 21:46:47.000000000 +0100
+@@ -198,6 +198,7 @@ int vorbis_staticbook_unpack(oggpack_buf
+ for(i=0;i<s->entries;){
+ long num=oggpack_read(opb,_ilog(s->entries-i));
+ if(num==-1)goto _eofout;
++ if(length>32)goto _errout;
+ for(j=0;j<num && i<s->entries;j++,i++)
+ s->lengthlist[i]=length;
+ length++;
diff --git a/recipes/libvorbis/libvorbis-1.2.3/patch-lib_modes_residue_44.h b/recipes/libvorbis/libvorbis-1.2.3/patch-lib_modes_residue_44.h
new file mode 100644
index 0000000000..13bc016feb
--- /dev/null
+++ b/recipes/libvorbis/libvorbis-1.2.3/patch-lib_modes_residue_44.h
@@ -0,0 +1,30 @@
+$FreeBSD: ports/audio/libvorbis/files/patch-lib_modes_residue_44.h,v 1.1 2009/11/24 21:32:39 naddy Exp $
+--- lib/modes/residue_44.h.orig 2009-07-09 11:12:08.000000000 +0200
++++ lib/modes/residue_44.h 2009-11-24 21:46:47.000000000 +0100
+@@ -22,7 +22,7 @@
+ /***** residue backends *********************************************/
+
+ static const vorbis_info_residue0 _residue_44_low={
+- 0,-1, -1, 9,-1,
++ 0,-1, -1, 9,-1,-1,
+ /* 0 1 2 3 4 5 6 7 */
+ {0},
+ {-1},
+@@ -31,7 +31,7 @@ static const vorbis_info_residue0 _resid
+ };
+
+ static const vorbis_info_residue0 _residue_44_mid={
+- 0,-1, -1, 10,-1,
++ 0,-1, -1, 10,-1,-1,
+ /* 0 1 2 3 4 5 6 7 8 */
+ {0},
+ {-1},
+@@ -40,7 +40,7 @@ static const vorbis_info_residue0 _resid
+ };
+
+ static const vorbis_info_residue0 _residue_44_high={
+- 0,-1, -1, 10,-1,
++ 0,-1, -1, 10,-1,-1,
+ /* 0 1 2 3 4 5 6 7 8 */
+ {0},
+ {-1},
diff --git a/recipes/libvorbis/libvorbis-1.2.3/patch-lib_modes_residue_44u.h b/recipes/libvorbis/libvorbis-1.2.3/patch-lib_modes_residue_44u.h
new file mode 100644
index 0000000000..4c0cb74ae1
--- /dev/null
+++ b/recipes/libvorbis/libvorbis-1.2.3/patch-lib_modes_residue_44u.h
@@ -0,0 +1,30 @@
+$FreeBSD: ports/audio/libvorbis/files/patch-lib_modes_residue_44u.h,v 1.1 2009/11/24 21:32:39 naddy Exp $
+--- lib/modes/residue_44u.h.orig 2009-07-08 07:40:12.000000000 +0200
++++ lib/modes/residue_44u.h 2009-11-24 21:46:47.000000000 +0100
+@@ -23,7 +23,7 @@
+
+
+ static const vorbis_info_residue0 _residue_44_low_un={
+- 0,-1, -1, 8,-1,
++ 0,-1, -1, 8,-1,-1,
+ {0},
+ {-1},
+ { .5, 1.5, 1.5, 2.5, 2.5, 4.5, 28.5},
+@@ -31,7 +31,7 @@ static const vorbis_info_residue0 _resid
+ };
+
+ static const vorbis_info_residue0 _residue_44_mid_un={
+- 0,-1, -1, 10,-1,
++ 0,-1, -1, 10,-1,-1,
+ /* 0 1 2 3 4 5 6 7 8 9 */
+ {0},
+ {-1},
+@@ -40,7 +40,7 @@ static const vorbis_info_residue0 _resid
+ };
+
+ static const vorbis_info_residue0 _residue_44_hi_un={
+- 0,-1, -1, 10,-1,
++ 0,-1, -1, 10,-1,-1,
+ /* 0 1 2 3 4 5 6 7 8 9 */
+ {0},
+ {-1},
diff --git a/recipes/libvorbis/libvorbis-1.2.3/patch-lib_res0.c b/recipes/libvorbis/libvorbis-1.2.3/patch-lib_res0.c
new file mode 100644
index 0000000000..910311b271
--- /dev/null
+++ b/recipes/libvorbis/libvorbis-1.2.3/patch-lib_res0.c
@@ -0,0 +1,40 @@
+$FreeBSD: ports/audio/libvorbis/files/patch-lib_res0.c,v 1.3 2009/11/24 21:32:39 naddy Exp $
+--- lib/res0.c.orig 2009-11-24 21:51:43.000000000 +0100
++++ lib/res0.c 2009-11-24 21:52:01.000000000 +0100
+@@ -238,6 +238,10 @@ vorbis_info_residue *res0_unpack(vorbis_
+
+ /* verify the phrasebook is not specifying an impossible or
+ inconsistent partitioning scheme. */
++ /* modify the phrasebook ranging check from r16327; an early beta
++ encoder had a bug where it used an oversized phrasebook by
++ accident. These files should continue to be playable, but don't
++ allow an exploit */
+ {
+ int entries = ci->book_param[info->groupbook]->entries;
+ int dim = ci->book_param[info->groupbook]->dim;
+@@ -247,6 +251,7 @@ vorbis_info_residue *res0_unpack(vorbis_
+ if(partvals > entries) goto errout;
+ dim--;
+ }
++ info->partvals = partvals;
+ }
+
+ return(info);
+@@ -667,7 +672,7 @@ static int _01inverse(vorbis_block *vb,v
+ for(j=0;j<ch;j++){
+ int temp=vorbis_book_decode(look->phrasebook,&vb->opb);
+
+- if(temp==-1)goto eopbreak;
++ if(temp==-1 || temp>=info->partvals)goto eopbreak;
+ partword[j][l]=look->decodemap[temp];
+ if(partword[j][l]==NULL)goto errout;
+ }
+@@ -883,7 +888,7 @@ int res2_inverse(vorbis_block *vb,vorbis
+ if(s==0){
+ /* fetch the partition word */
+ int temp=vorbis_book_decode(look->phrasebook,&vb->opb);
+- if(temp==-1)goto eopbreak;
++ if(temp==-1 || temp>info->partvals)goto eopbreak;
+ partword[l]=look->decodemap[temp];
+ if(partword[l]==NULL)goto errout;
+ }
diff --git a/recipes/libvorbis/libvorbis_1.2.3.bb b/recipes/libvorbis/libvorbis_1.2.3.bb
index 1173809d48..87d4d3cab3 100644
--- a/recipes/libvorbis/libvorbis_1.2.3.bb
+++ b/recipes/libvorbis/libvorbis_1.2.3.bb
@@ -1,10 +1,15 @@
require libvorbis.inc
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
SRC_URI = "http://downloads.xiph.org/releases/vorbis/libvorbis-${PV}.tar.gz \
file://configure_powerpc-no-fixed-cpu.patch;patch=1 \
+ file://patch-lib_backends.h;patch=1;pnum=0 \
+ file://patch-lib_codebook.c;patch=1;pnum=0 \
+ file://patch-lib_modes_residue_44.h;patch=1;pnum=0 \
+ file://patch-lib_modes_residue_44u.h;patch=1;pnum=0 \
+ file://patch-lib_res0.c;patch=1;pnum=0 \
"
# override should be handeld by pkgconfig now
diff --git a/recipes/libwmf/files/libwmf-0.2.8.4-intoverflow.patch b/recipes/libwmf/files/libwmf-0.2.8.4-intoverflow.patch
new file mode 100644
index 0000000000..50d915c010
--- /dev/null
+++ b/recipes/libwmf/files/libwmf-0.2.8.4-intoverflow.patch
@@ -0,0 +1,31 @@
+http://cvs.fedoraproject.org/viewvc/devel/libwmf/libwmf-0.2.8.4-intoverflow.patch?view=log
+
+CVE-2006-3376 libwmf integer overflow
+
+--- libwmf-0.2.8.4.orig/src/player.c 2002-12-10 19:30:26.000000000 +0000
++++ libwmf-0.2.8.4/src/player.c 2006-07-12 15:12:52.000000000 +0100
+@@ -42,6 +42,7 @@
+ #include "player/defaults.h" /* Provides: default settings */
+ #include "player/record.h" /* Provides: parameter mechanism */
+ #include "player/meta.h" /* Provides: record interpreters */
++#include <stdint.h>
+
+ /**
+ * @internal
+@@ -132,8 +134,14 @@
+ }
+ }
+
+-/* P->Parameters = (unsigned char*) wmf_malloc (API,(MAX_REC_SIZE(API)-3) * 2 * sizeof (unsigned char));
+- */ P->Parameters = (unsigned char*) wmf_malloc (API,(MAX_REC_SIZE(API) ) * 2 * sizeof (unsigned char));
++ if (MAX_REC_SIZE(API) > UINT32_MAX / 2)
++ {
++ API->err = wmf_E_InsMem;
++ WMF_DEBUG (API,"bailing...");
++ return (API->err);
++ }
++
++ P->Parameters = (unsigned char*) wmf_malloc (API,(MAX_REC_SIZE(API) ) * 2 * sizeof (unsigned char));
+
+ if (ERR (API))
+ { WMF_DEBUG (API,"bailing...");
diff --git a/recipes/libwmf/files/libwmf-0.2.8.4-useafterfree.patch b/recipes/libwmf/files/libwmf-0.2.8.4-useafterfree.patch
new file mode 100644
index 0000000000..4d2d285641
--- /dev/null
+++ b/recipes/libwmf/files/libwmf-0.2.8.4-useafterfree.patch
@@ -0,0 +1,14 @@
+
+http://cvs.fedoraproject.org/viewvc/devel/libwmf/libwmf-0.2.8.4-useafterfree.patch?view=log
+Resolves: CVE-2009-1364
+
+--- libwmf-0.2.8.4/src/extra/gd/gd_clip.c.CVE-2009-1364-im-clip-list 2009-04-24 04:06:44.000000000 -0400
++++ libwmf-0.2.8.4/src/extra/gd/gd_clip.c 2009-04-24 04:08:30.000000000 -0400
+@@ -70,6 +70,7 @@ void gdClipSetAdd(gdImagePtr im,gdClipRe
+ { more = gdRealloc (im->clip->list,(im->clip->max + 8) * sizeof (gdClipRectangle));
+ if (more == 0) return;
+ im->clip->max += 8;
++ im->clip->list = more;
+ }
+ im->clip->list[im->clip->count] = (*rect);
+ im->clip->count++;
diff --git a/recipes/libwmf/libwmf-native_0.2.8.4.bb b/recipes/libwmf/libwmf-native_0.2.8.4.bb
index a33461fcdb..4b7c2259b6 100644
--- a/recipes/libwmf/libwmf-native_0.2.8.4.bb
+++ b/recipes/libwmf/libwmf-native_0.2.8.4.bb
@@ -1,4 +1,6 @@
require libwmf_0.2.8.4.bb
inherit native
-SRC_URI = "${SOURCEFORGE_MIRROR}/wvware/libwmf/${PV}/libwmf-${PV}.tar.gz;name=tarball"
+SRC_URI = "${SOURCEFORGE_MIRROR}/wvware/${PN}/${PV}/libwmf-${PV}.tar.gz;name=tarball \
+ file://libwmf-0.2.8.4-intoverflow.patch;patch=1 \
+ file://libwmf-0.2.8.4-useafterfree.patch;patch=1"
diff --git a/recipes/libwmf/libwmf_0.2.8.4.bb b/recipes/libwmf/libwmf_0.2.8.4.bb
index fc02940eb3..37e69e3a2b 100644
--- a/recipes/libwmf/libwmf_0.2.8.4.bb
+++ b/recipes/libwmf/libwmf_0.2.8.4.bb
@@ -1,6 +1,8 @@
inherit autotools_stage
-SRC_URI = "${SOURCEFORGE_MIRROR}/wvware/${PN}/${PV}/${P}.tar.gz;name=tarball"
+SRC_URI = "${SOURCEFORGE_MIRROR}/wvware/${PN}/${PV}/${P}.tar.gz;name=tarball \
+ file://libwmf-0.2.8.4-intoverflow.patch;patch=1 \
+ file://libwmf-0.2.8.4-useafterfree.patch;patch=1"
SRC_URI[tarball.md5sum] = "d1177739bf1ceb07f57421f0cee191e0"
SRC_URI[tarball.sha256sum] = "5b345c69220545d003ad52bfd035d5d6f4f075e65204114a9e875e84895a7cf8"
@@ -10,3 +12,4 @@ LICENSE = "GPL-2"
SECTION = "libs"
+PR="r1"
diff --git a/recipes/libxml/libxml2-native.inc b/recipes/libxml/libxml2-native.inc
deleted file mode 100644
index 3f67152ca1..0000000000
--- a/recipes/libxml/libxml2-native.inc
+++ /dev/null
@@ -1,27 +0,0 @@
-DESCRIPTION = "GNOME XML library"
-DEPENDS = "python-native"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libxml2-${PV}"
-
-SRC_URI = "ftp://xmlsoft.org/libxml2/libxml2-${PV}.tar.gz"
-S = "${WORKDIR}/libxml2-${PV}"
-
-inherit autotools native pkgconfig distutils-native-base
-
-do_configure_prepend () {
- EXTRA_LIBXML2_OECONF="\
- --with-python=${PYTHON_DIR} \
- --without-debug \
- --without-legacy \
- --with-catalog \
- --without-docbook \
- --with-c14n \
- "
-}
-
-do_configure (){
- autotools_do_configure ${EXTRA_LIBXML2_OECONF}
-}
-
-do_stage () {
- oe_runmake install
-}
diff --git a/recipes/libxml/libxml2-native_2.7.3.bb b/recipes/libxml/libxml2-native_2.7.3.bb
deleted file mode 100644
index 48e35986f6..0000000000
--- a/recipes/libxml/libxml2-native_2.7.3.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require libxml2-native.inc
-PR = "r0"
diff --git a/recipes/libxml/libxml2.inc b/recipes/libxml/libxml2.inc
index 101489e8d2..8d4900208e 100644
--- a/recipes/libxml/libxml2.inc
+++ b/recipes/libxml/libxml2.inc
@@ -2,25 +2,37 @@ DESCRIPTION = "GNOME XML Parser library"
SECTION = "libs"
PRIORITY = "optional"
LICENSE = "MIT"
+DEPENDS_virtclass-native = "python-native"
-SRC_URI = "ftp://xmlsoft.org/libxml2/libxml2-${PV}.tar.gz"
+SRC_URI = "ftp://xmlsoft.org/libxml2/libxml2-${PV}.tar.gz;name=archive"
+S = "${WORKDIR}/${BPN}-${PV}"
-INC_PR = "r2"
+INC_PR = "r6"
+
+BBCLASSEXTEND = "native"
inherit autotools pkgconfig binconfig
-EXTRA_OECONF = "--without-python --without-debug --without-legacy --with-catalog --with-docbook --with-c14n"
+EXTRA_OECONF = "\
+ --without-debug \
+ --without-legacy \
+ --with-catalog \
+ --with-docbook \
+ --with-c14n"
-export LDFLAGS += "-ldl"
+EXTRA_OECONF_append = " --without-python"
+EXTRA_OECONF_append_virtclass-native = " --with-python=${PYTHON_DIR}"
-do_stage() {
- autotools_stage_all
- install -d ${STAGING_DATADIR}/aclocal/
- install -d ${STAGING_BINDIR_CROSS}
+export LDFLAGS += "-ldl"
+do_install_append() {
install -m 0644 libxml.m4 ${STAGING_DATADIR}/aclocal/
#this is need it by php during its install
- install -m 0755 xml2-config ${STAGING_BINDIR_CROSS}
+ install -d ${STAGING_BINDIR_CROSS}
+ install -m 0755 xml2-config ${STAGING_BINDIR_CROSS}/
+}
+do_install_append_virtclass-native() {
+ :
}
DEBIANNAME_${PN} = "libxml2"
diff --git a/recipes/libxml/libxml2_2.7.3.bb b/recipes/libxml/libxml2_2.7.3.bb
index 5c92770eab..636ee91cd1 100644
--- a/recipes/libxml/libxml2_2.7.3.bb
+++ b/recipes/libxml/libxml2_2.7.3.bb
@@ -1,4 +1,4 @@
require libxml2.inc
-PR = "${INC_PR}.1"
+PR = "${INC_PR}.0"
diff --git a/recipes/libxml/libxml2_2.7.6.bb b/recipes/libxml/libxml2_2.7.6.bb
new file mode 100644
index 0000000000..4f56f73077
--- /dev/null
+++ b/recipes/libxml/libxml2_2.7.6.bb
@@ -0,0 +1,6 @@
+require libxml2.inc
+
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "7740a8ec23878a2f50120e1faa2730f2"
+SRC_URI[archive.sha256sum] = "238c4f0203c012e5776522640c0fb3ac532c4064981c1ce3e74c00b75501d761"
diff --git a/recipes/libxml/libxml2_2.7.7.bb b/recipes/libxml/libxml2_2.7.7.bb
new file mode 100644
index 0000000000..ff416f2f1d
--- /dev/null
+++ b/recipes/libxml/libxml2_2.7.7.bb
@@ -0,0 +1,6 @@
+require libxml2.inc
+
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "9abc9959823ca9ff904f1fbcf21df066"
+SRC_URI[archive.sha256sum] = "af5b781418ba4fff556fa43c50086658ea8a2f31909c2b625c2ce913a1d9eb68"
diff --git a/recipes/libxslt/libxslt-native_1.1.17.bb b/recipes/libxslt/libxslt-native_1.1.17.bb
deleted file mode 100644
index 6134b2bf57..0000000000
--- a/recipes/libxslt/libxslt-native_1.1.17.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require libxslt_${PV}.bb
-inherit native
-
-DEPENDS = "libxml2-native (>=2.6.25)"
diff --git a/recipes/libxslt/libxslt-native_1.1.21.bb b/recipes/libxslt/libxslt-native_1.1.21.bb
deleted file mode 100644
index 5157aaacbf..0000000000
--- a/recipes/libxslt/libxslt-native_1.1.21.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require libxslt_${PV}.bb
-inherit native
-
-DEPENDS = "libxml2-native (>=2.6.27)"
diff --git a/recipes/libxslt/libxslt_1.1.22.bb b/recipes/libxslt/libxslt_1.1.22.bb
index 86fe70dff2..068ff874cd 100644
--- a/recipes/libxslt/libxslt_1.1.22.bb
+++ b/recipes/libxslt/libxslt_1.1.22.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
PRIORITY = "optional"
DEPENDS = "libxml2 (>=2.6.27)"
LICENSE = "MIT"
-PR = "r1"
+PR = "r2"
SRC_URI = "ftp://xmlsoft.org/libxml2/libxslt-${PV}.tar.gz \
file://pkgconfig_fix.patch;patch=1"
@@ -11,11 +11,10 @@ S = "${WORKDIR}/libxslt-${PV}"
inherit autotools pkgconfig
-EXTRA_OECONF = "--without-python --without-debug --without-mem-debug --without-crypto"
+NATIVE_INSTALL_WORKS = "1"
+BBCLASSEXTEND = "native"
-do_stage () {
- autotools_stage_all
-}
+EXTRA_OECONF = "--without-python --without-debug --without-mem-debug --without-crypto"
PACKAGES = "${PN}-dbg ${PN}-dev ${PN}-utils ${PN} ${PN}-doc ${PN}-locale"
diff --git a/recipes/libyaml/libyaml_0.1.2.bb b/recipes/libyaml/libyaml_0.1.2.bb
index 0ab816bd33..43dad92087 100644
--- a/recipes/libyaml/libyaml_0.1.2.bb
+++ b/recipes/libyaml/libyaml_0.1.2.bb
@@ -2,12 +2,9 @@ DESCRIPTION = "LibYAML is a YAML parser and emitter written in C."
HOMEPAGE = "http://pyyaml.org/wiki/LibYAML"
SECTION = "libs/devel"
LICENSE = "MIT"
+PR = "r1"
SRC_URI = "http://pyyaml.org/download/libyaml/yaml-${PV}.tar.gz"
S = "${WORKDIR}/yaml-${PV}"
inherit autotools
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/recipes/libyaml/libyaml_0.1.3.bb b/recipes/libyaml/libyaml_0.1.3.bb
new file mode 100644
index 0000000000..6c53db1eaa
--- /dev/null
+++ b/recipes/libyaml/libyaml_0.1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "LibYAML is a YAML parser and emitter written in C."
+HOMEPAGE = "http://pyyaml.org/wiki/LibYAML"
+SECTION = "libs/devel"
+LICENSE = "MIT"
+PR="r0"
+
+SRC_URI = "http://pyyaml.org/download/libyaml/yaml-${PV}.tar.gz;name=libyaml"
+SRC_URI[libyaml.md5sum] = "b8ab9064e8e0330423fe640de76608cd"
+SRC_URI[libyaml.sha256sum] = "a8bbad7e5250b3735126b7e3bd9f6fce9db19d6be7cc13abad17a24b59ec144a"
+
+S = "${WORKDIR}/yaml-${PV}"
+
+inherit autotools
diff --git a/recipes/lighttpd/lighttpd.inc b/recipes/lighttpd/lighttpd.inc
index dd35db1f75..f3084ab08b 100644
--- a/recipes/lighttpd/lighttpd.inc
+++ b/recipes/lighttpd/lighttpd.inc
@@ -3,32 +3,32 @@ SECTION = "net"
LICENSE = "BSD"
DEPENDS = "libpcre"
RDEPENDS_${PN} += " \
- lighttpd-module-access \
- lighttpd-module-accesslog \
- lighttpd-module-indexfile \
- lighttpd-module-dirlisting \
- lighttpd-module-staticfile \
- "
-
-INC_PR = "r7"
-
-SRC_URI = "http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-${PV}.tar.gz \
- file://index.html \
- file://lighttpd.conf \
- file://lighttpd \
- "
-
-EXTRA_OECONF=" \
- --without-bzip2 \
- --without-ldap \
- --without-lua \
- --without-memcache \
- --with-pcre \
- --without-webdav-props \
- --without-webdav-locks \
- --without-openssl \
- --disable-static \
- "
+ lighttpd-module-access \
+ lighttpd-module-accesslog \
+ lighttpd-module-indexfile \
+ lighttpd-module-dirlisting \
+ lighttpd-module-staticfile \
+"
+
+INC_PR = "r9"
+
+SRC_URI = "http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-${PV}.tar.gz;name=src \
+ file://index.html \
+ file://lighttpd.conf \
+ file://lighttpd \
+"
+
+EXTRA_OECONF = " \
+ --without-bzip2 \
+ --without-ldap \
+ --without-lua \
+ --without-memcache \
+ --with-pcre \
+ --without-webdav-props \
+ --without-webdav-locks \
+ --without-openssl \
+ --disable-static \
+"
inherit autotools pkgconfig update-rc.d gettext
@@ -36,18 +36,16 @@ INITSCRIPT_NAME = "lighttpd"
INITSCRIPT_PARAMS = "defaults 70"
do_install_append() {
- install -d ${D}${sysconfdir}/init.d ${D}/www/logs ${D}/www/pages/dav ${D}/www/var
- install -m 0755 ${WORKDIR}/lighttpd ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/lighttpd.conf ${D}${sysconfdir}
- install -m 0644 ${WORKDIR}/index.html ${D}/www/pages/
-}
-
-do_stage() {
- autotools_stage_all
+ install -d ${D}${sysconfdir}/init.d ${D}/www/logs ${D}/www/pages/dav ${D}/www/var
+ install -m 0755 ${WORKDIR}/lighttpd ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/lighttpd.conf ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/index.html ${D}/www/pages/
}
FILES_${PN} += "${sysconfdir} /www"
+CONFFILES_${PN} = "${sysconfdir}/lighttpd.conf"
+
PACKAGES_DYNAMIC = "lighttpd-module-*"
python populate_packages_prepend () {
diff --git a/recipes/lighttpd/lighttpd_1.4.25.bb b/recipes/lighttpd/lighttpd_1.4.25.bb
deleted file mode 100644
index 04442ced17..0000000000
--- a/recipes/lighttpd/lighttpd_1.4.25.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require lighttpd.inc
-
-PR = "${INC_PR}.0"
-
-DEFAULT_PREFERENCE = "-1"
-
diff --git a/recipes/lighttpd/lighttpd_1.4.26.bb b/recipes/lighttpd/lighttpd_1.4.26.bb
new file mode 100644
index 0000000000..071efc3a32
--- /dev/null
+++ b/recipes/lighttpd/lighttpd_1.4.26.bb
@@ -0,0 +1,8 @@
+require lighttpd.inc
+
+PR = "${INC_PR}.0"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI[src.md5sum] = "3ce5be17a4dac3c384a8a452c664b840"
+SRC_URI[src.sha256sum] = "08fc11864a0ad6d2871f32e6d0b0eaeb070f78698a72959f812526173145986e"
diff --git a/recipes/linux-libc-headers/linux-libc-headers-2.6.31/scsi-use-__u8.patch b/recipes/linux-libc-headers/linux-libc-headers-2.6.31/scsi-use-__u8.patch
new file mode 100644
index 0000000000..b75487965a
--- /dev/null
+++ b/recipes/linux-libc-headers/linux-libc-headers-2.6.31/scsi-use-__u8.patch
@@ -0,0 +1,26 @@
+This patch is from
+http://patchwork.kernel.org/patch/38102/
+It seems its still under discussion and it will involve glibc to get it fixed correctly.
+for now OE uses scsi headers from kernel and not from glibc.
+
+-Khem
+
+Index: linux-2.6.31/include/scsi/scsi.h
+===================================================================
+--- linux-2.6.31.orig/include/scsi/scsi.h 2010-03-11 19:44:49.134590561 -0800
++++ linux-2.6.31/include/scsi/scsi.h 2010-03-11 19:45:12.744466326 -0800
+@@ -142,10 +142,10 @@ struct scsi_cmnd;
+
+ /* defined in T10 SCSI Primary Commands-2 (SPC2) */
+ struct scsi_varlen_cdb_hdr {
+- u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */
+- u8 control;
+- u8 misc[5];
+- u8 additional_cdb_length; /* total cdb length - 8 */
++ __u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */
++ __u8 control;
++ __u8 misc[5];
++ __u8 additional_cdb_length; /* total cdb length - 8 */
+ __be16 service_action;
+ /* service specific data follows */
+ };
diff --git a/recipes/linux-libc-headers/linux-libc-headers-2.6.32/scsi-use-__u8.patch b/recipes/linux-libc-headers/linux-libc-headers-2.6.32/scsi-use-__u8.patch
new file mode 100644
index 0000000000..b75487965a
--- /dev/null
+++ b/recipes/linux-libc-headers/linux-libc-headers-2.6.32/scsi-use-__u8.patch
@@ -0,0 +1,26 @@
+This patch is from
+http://patchwork.kernel.org/patch/38102/
+It seems its still under discussion and it will involve glibc to get it fixed correctly.
+for now OE uses scsi headers from kernel and not from glibc.
+
+-Khem
+
+Index: linux-2.6.31/include/scsi/scsi.h
+===================================================================
+--- linux-2.6.31.orig/include/scsi/scsi.h 2010-03-11 19:44:49.134590561 -0800
++++ linux-2.6.31/include/scsi/scsi.h 2010-03-11 19:45:12.744466326 -0800
+@@ -142,10 +142,10 @@ struct scsi_cmnd;
+
+ /* defined in T10 SCSI Primary Commands-2 (SPC2) */
+ struct scsi_varlen_cdb_hdr {
+- u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */
+- u8 control;
+- u8 misc[5];
+- u8 additional_cdb_length; /* total cdb length - 8 */
++ __u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */
++ __u8 control;
++ __u8 misc[5];
++ __u8 additional_cdb_length; /* total cdb length - 8 */
+ __be16 service_action;
+ /* service specific data follows */
+ };
diff --git a/recipes/linux-libc-headers/linux-libc-headers.inc b/recipes/linux-libc-headers/linux-libc-headers.inc
index dc0267697f..0487e65fab 100644
--- a/recipes/linux-libc-headers/linux-libc-headers.inc
+++ b/recipes/linux-libc-headers/linux-libc-headers.inc
@@ -5,6 +5,3 @@ LICENSE = "GPL"
RDEPENDS_${PN}-dev = ""
RRECOMMENDS_${PN}-dbg = "${PN}-dev (= ${EXTENDPV})"
-do_install_append() {
- rm -rf ${D}${includedir}/scsi
-}
diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.11.1.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.11.1.bb
index e316a2c6c1..75a6251038 100644
--- a/recipes/linux-libc-headers/linux-libc-headers_2.6.11.1.bb
+++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.11.1.bb
@@ -7,7 +7,7 @@ HOMEPAGE = "http://ep09.pld-linux.org/~mmazur/linux-libc-headers/"
# standard linux kernel license applies.
# since we assume GPL for linux i think we can also assume it here
INHIBIT_DEFAULT_DEPS = "1"
-PR = "r3"
+PR = "r4"
SRC_URI = "http://ep09.pld-linux.org/~mmazur/linux-libc-headers/linux-libc-headers-${PV}.tar.bz2 \
file://keyboard.patch;patch=1"
@@ -43,16 +43,8 @@ do_configure () {
fi
}
-do_stage () {
- install -d ${STAGING_INCDIR}
- rm -rf ${STAGING_INCDIR}/linux ${STAGING_INCDIR}/asm
- cp -pfLR include/linux ${STAGING_INCDIR}/
- cp -pfLR include/asm ${STAGING_INCDIR}/
-}
-
do_install() {
install -d ${D}${includedir}
cp -pfLR include/linux ${D}${includedir}/
cp -pfLR include/asm ${D}${includedir}/
}
-
diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.15.99.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.15.99.bb
index 0c61d2acc4..e8d59d8ecc 100644
--- a/recipes/linux-libc-headers/linux-libc-headers_2.6.15.99.bb
+++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.15.99.bb
@@ -13,7 +13,7 @@ require linux-libc-headers.inc
# since we assume GPL for linux i think we can also assume it here
DEFAULT_PREFERENCE = "-1"
INHIBIT_DEFAULT_DEPS = "1"
-PR = "r5"
+PR = "r6"
SRC_URI = "http://ewi546.ewi.utwente.nl/OE/eabi/linux-libc-headers-${PV}.tar.bz2 \
file://keyboard.patch;patch=1 \
@@ -55,14 +55,6 @@ do_configure () {
fi
}
-do_stage () {
- install -d ${STAGING_INCDIR}
- rm -rf ${STAGING_INCDIR}/linux ${STAGING_INCDIR}/asm ${STAGING_INCDIR}/asm-generic
- cp -pfLR include/linux ${STAGING_INCDIR}/
- cp -pfLR include/asm ${STAGING_INCDIR}/
- cp -pfLR include/asm-generic ${STAGING_INCDIR}/
-}
-
do_install() {
install -d ${D}${includedir}
cp -pfLR include/linux ${D}${includedir}/
diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.18+2.6.19-rc1.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.18+2.6.19-rc1.bb
index 3a6de1c72e..a07ff08740 100644
--- a/recipes/linux-libc-headers/linux-libc-headers_2.6.18+2.6.19-rc1.bb
+++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.18+2.6.19-rc1.bb
@@ -2,6 +2,7 @@ require linux-libc-headers.inc
DEFAULT_PREFERENCE = "-1"
INHIBIT_DEFAULT_DEPS = "1"
+PR = "r1"
SRC_URI = " \
${KERNELORG_MIRROR}/pub/linux/kernel/people/dwmw2/kernel-headers/snapshot/linux-kernel-headers-2.6.19-rc1.tar.bz2 \
@@ -38,23 +39,3 @@ do_install() {
cp -pfLR ${S}${includedir}/asm-${ARCH} ${D}${includedir}/asm
cp -pfLR ${S}${includedir}/asm-generic ${D}${includedir}/
}
-
-do_stage () {
- set_arch
- install -d ${STAGING_INCDIR}
- rm -rf ${STAGING_INCDIR}/linux ${STAGING_INCDIR}/asm ${STAGING_INCDIR}/asm-generic
- cp -pfLR ${S}${includedir}/linux ${STAGING_INCDIR}/
- cp -pfLR ${S}${includedir}/asm-${ARCH} ${STAGING_INCDIR}/asm
- cp -pfLR ${S}${includedir}/asm-generic ${STAGING_INCDIR}/
-}
-
-do_stage_append_nylon () {
- install -d ${STAGING_INCDIR}/asm/
- cp -vpPR include/asm-${ARCH}/* ${STAGING_INCDIR}/asm/
- install -d ${CROSS_DIR}/${TARGET_SYS}/include/asm/
- cp -vpPR include/asm-${ARCH}/* ${CROSS_DIR}/${TARGET_SYS}/include/asm/
- cp -vpPR include/linux/* ${STAGING_INCDIR}/linux/
- install -d ${CROSS_DIR}/${TARGET_SYS}/include/linux/
- cp -vpPR include/linux/* ${CROSS_DIR}/${TARGET_SYS}/include/linux/
-}
-
diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.18.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.18.bb
index 60d621b1dc..60472165b7 100644
--- a/recipes/linux-libc-headers/linux-libc-headers_2.6.18.bb
+++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.18.bb
@@ -2,7 +2,7 @@ require linux-libc-headers.inc
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native"
-PR = "r3"
+PR = "r4"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 \
file://arm-syscall-define.patch;patch=1"
@@ -39,42 +39,14 @@ do_compile () {
do_install() {
set_arch
oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=${ARCH}
-}
-
-do_install_append_arm() {
- cp include/asm-arm/procinfo.h ${D}${includedir}/asm
-}
-
-STAGE_TEMP="${WORKDIR}/temp-staging"
-
-do_stage () {
- set_arch
- rm -rf ${STAGE_TEMP}
- mkdir -p ${STAGE_TEMP}
- oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}${exec_prefix} ARCH=${ARCH}
- if [ "${ARCH}" == "arm" ]; then
- cp include/asm-arm/procinfo.h ${STAGE_TEMP}${includedir}/asm
- fi
- install -d ${STAGING_INCDIR}
- rm -rf ${STAGING_INCDIR}/linux ${STAGING_INCDIR}/asm ${STAGING_INCDIR}/asm-generic
- cp -pfLR ${STAGE_TEMP}${includedir}/linux ${STAGING_INCDIR}/
- cp -pfLR ${STAGE_TEMP}${includedir}/asm ${STAGING_INCDIR}/
- cp -pfLR ${STAGE_TEMP}${includedir}/asm-generic ${STAGING_INCDIR}/
- # Add UTS_RELEASE to version.h. UTS_RELEASE was moved from version.h to
+ # Add UTS_RELEASE to version.h. UTS_RELEASE was moved from version.h to
# utsrelease.h in order to avoid recompiling a kernel every time a localversion
- # changed. Since the our headers are static and we're not compiling an
- # actual kernel, re-adding UTS_RELEASE does't hurt, and it allows uclibc to
+ # changed. Since the our headers are static and we're not compiling an
+ # actual kernel, re-adding UTS_RELEASE does't hurt, and it allows uclibc to
# compile with kernel headers that work with EABI on ARM
echo '#define UTS_RELEASE "2.6.18"' >> ${STAGING_INCDIR}/linux/version.h
}
-do_stage_append_nylon () {
- install -d ${STAGING_INCDIR}/asm/
- cp -vpPR include/asm-${ARCH}/* ${STAGING_INCDIR}/asm/
- install -d ${CROSS_DIR}/${TARGET_SYS}/include/asm/
- cp -vpPR include/asm-${ARCH}/* ${CROSS_DIR}/${TARGET_SYS}/include/asm/
- cp -vpPR include/linux/* ${STAGING_INCDIR}/linux/
- install -d ${CROSS_DIR}/${TARGET_SYS}/include/linux/
- cp -vpPR include/linux/* ${CROSS_DIR}/${TARGET_SYS}/include/linux/
+do_install_append_arm() {
+ cp include/asm-arm/procinfo.h ${D}${includedir}/asm
}
-
diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.20.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.20.bb
index c826d138b6..420f889f11 100644
--- a/recipes/linux-libc-headers/linux-libc-headers_2.6.20.bb
+++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.20.bb
@@ -2,7 +2,7 @@ require linux-libc-headers.inc
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native"
-PR = "r10"
+PR = "r11"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://procinfo.h \
@@ -48,21 +48,3 @@ do_install() {
do_install_append_arm() {
cp ${WORKDIR}/procinfo.h ${D}${includedir}/asm/
}
-
-STAGE_TEMP="${WORKDIR}/temp-staging"
-
-do_stage () {
- set_arch
- echo $ARCH
- rm -rf ${STAGE_TEMP}
- mkdir -p ${STAGE_TEMP}
- oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}${exec_prefix} ARCH=$ARCH
- if [ "$ARCH" = "arm" ]; then
- cp ${WORKDIR}/procinfo.h ${STAGE_TEMP}${includedir}/asm/
- fi
- install -d ${STAGING_INCDIR}
- rm -rf ${STAGING_INCDIR}/linux ${STAGING_INCDIR}/asm ${STAGING_INCDIR}/asm-generic
- cp -pfLR ${STAGE_TEMP}${includedir}/linux ${STAGING_INCDIR}/
- cp -pfLR ${STAGE_TEMP}${includedir}/asm ${STAGING_INCDIR}/
- cp -pfLR ${STAGE_TEMP}${includedir}/asm-generic ${STAGING_INCDIR}/
-}
diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.22.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.22.bb
index 0e5debcfa3..fc57465863 100644
--- a/recipes/linux-libc-headers/linux-libc-headers_2.6.22.bb
+++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.22.bb
@@ -2,7 +2,7 @@ require linux-libc-headers.inc
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native"
-PR = "r2"
+PR = "r3"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://procinfo.h"
@@ -46,21 +46,3 @@ do_install() {
do_install_append_arm() {
cp ${WORKDIR}/procinfo.h ${D}${includedir}/asm/
}
-
-STAGE_TEMP="${WORKDIR}/temp-staging"
-
-do_stage () {
- set_arch
- echo $ARCH
- rm -rf ${STAGE_TEMP}
- mkdir -p ${STAGE_TEMP}
- oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}${exec_prefix} ARCH=$ARCH
- if [ "$ARCH" = "arm" ]; then
- cp ${WORKDIR}/procinfo.h ${STAGE_TEMP}${includedir}/asm/
- fi
- install -d ${STAGING_INCDIR}
- rm -rf ${STAGING_INCDIR}/linux ${STAGING_INCDIR}/asm ${STAGING_INCDIR}/asm-generic
- cp -pfLR ${STAGE_TEMP}${includedir}/linux ${STAGING_INCDIR}/
- cp -pfLR ${STAGE_TEMP}${includedir}/asm ${STAGING_INCDIR}/
- cp -pfLR ${STAGE_TEMP}${includedir}/asm-generic ${STAGING_INCDIR}/
-}
diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.23.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.23.bb
index 95152f1b22..1ff38f0dd2 100644
--- a/recipes/linux-libc-headers/linux-libc-headers_2.6.23.bb
+++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.23.bb
@@ -2,7 +2,7 @@ require linux-libc-headers.inc
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native"
-PR = "r4"
+PR = "r5"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://procinfo.h \
@@ -47,21 +47,3 @@ do_install() {
do_install_append_arm() {
cp ${WORKDIR}/procinfo.h ${D}${includedir}/asm/
}
-
-STAGE_TEMP="${WORKDIR}/temp-staging"
-
-do_stage () {
- set_arch
- echo $ARCH
- rm -rf ${STAGE_TEMP}
- mkdir -p ${STAGE_TEMP}
- oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}${exec_prefix} ARCH=$ARCH
- if [ "$ARCH" = "arm" ]; then
- cp ${WORKDIR}/procinfo.h ${STAGE_TEMP}${includedir}/asm/
- fi
- install -d ${STAGING_INCDIR}
- rm -rf ${STAGING_INCDIR}/linux ${STAGING_INCDIR}/asm ${STAGING_INCDIR}/asm-generic
- cp -pfLR ${STAGE_TEMP}${includedir}/linux ${STAGING_INCDIR}/
- cp -pfLR ${STAGE_TEMP}${includedir}/asm ${STAGING_INCDIR}/
- cp -pfLR ${STAGE_TEMP}${includedir}/asm-generic ${STAGING_INCDIR}/
-}
diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.25.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.25.bb
index 9289d390c4..3f2306c477 100644
--- a/recipes/linux-libc-headers/linux-libc-headers_2.6.25.bb
+++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.25.bb
@@ -2,7 +2,7 @@ require linux-libc-headers.inc
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native"
-PR = "r3"
+PR = "r4"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://reinstate-a.out.h.patch;patch=1 \
@@ -50,21 +50,3 @@ do_install() {
do_install_append_arm() {
cp ${WORKDIR}/procinfo.h ${D}${includedir}/asm/
}
-
-STAGE_TEMP="${WORKDIR}/temp-staging"
-
-do_stage () {
- set_arch
- echo $ARCH
- rm -rf ${STAGE_TEMP}
- mkdir -p ${STAGE_TEMP}
- oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}${exec_prefix} ARCH=$ARCH
- if [ "$ARCH" = "arm" ]; then
- cp ${WORKDIR}/procinfo.h ${STAGE_TEMP}${includedir}/asm/
- fi
- install -d ${STAGING_INCDIR}
- rm -rf ${STAGING_INCDIR}/linux ${STAGING_INCDIR}/asm ${STAGING_INCDIR}/asm-generic
- cp -pfLR ${STAGE_TEMP}${includedir}/linux ${STAGING_INCDIR}/
- cp -pfLR ${STAGE_TEMP}${includedir}/asm ${STAGING_INCDIR}/
- cp -pfLR ${STAGE_TEMP}${includedir}/asm-generic ${STAGING_INCDIR}/
-}
diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.29.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.29.bb
index 6caddc0c2f..37bab5592f 100644
--- a/recipes/linux-libc-headers/linux-libc-headers_2.6.29.bb
+++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.29.bb
@@ -2,7 +2,7 @@ require linux-libc-headers.inc
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native"
-PR = "r0"
+PR = "r1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
"
@@ -42,8 +42,3 @@ do_install() {
set_arch
oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=$ARCH
}
-
-do_stage () {
- set_arch
- oe_runmake headers_install INSTALL_HDR_PATH=${STAGING_DIR_HOST}${layout_prefix} ARCH=$ARCH
-}
diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.30.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.30.bb
index 5fa6670602..c29b8efb41 100644
--- a/recipes/linux-libc-headers/linux-libc-headers_2.6.30.bb
+++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.30.bb
@@ -2,7 +2,7 @@ require linux-libc-headers.inc
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native"
-PR = "r0"
+PR = "r1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://uio-header.patch;patch=1 \
@@ -45,8 +45,3 @@ do_install() {
set_arch
oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=$ARCH
}
-
-do_stage () {
- set_arch
- oe_runmake headers_install INSTALL_HDR_PATH=${STAGING_DIR_HOST}${layout_prefix} ARCH=$ARCH
-}
diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.31.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.31.bb
index 33872e6f89..f01af4ecde 100644
--- a/recipes/linux-libc-headers/linux-libc-headers_2.6.31.bb
+++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.31.bb
@@ -2,12 +2,13 @@ require linux-libc-headers.inc
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native"
-PR = "r0"
+PR = "r3"
DEFAULT_PREFERENCE = "-1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://0001-implement-TIF_RESTORE_SIGMASK-support-and-enable-the.patch;patch=1 \
+ file://scsi-use-__u8.patch;patch=1 \
"
S = "${WORKDIR}/linux-${PV}"
@@ -44,8 +45,3 @@ do_install() {
set_arch
oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=$ARCH
}
-
-do_stage () {
- set_arch
- oe_runmake headers_install INSTALL_HDR_PATH=${STAGING_DIR_HOST}${layout_prefix} ARCH=$ARCH
-}
diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.32.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.32.bb
index 4b98f055a4..29d52cfc51 100644
--- a/recipes/linux-libc-headers/linux-libc-headers_2.6.32.bb
+++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.32.bb
@@ -2,12 +2,13 @@ require linux-libc-headers.inc
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native"
-PR = "r0"
+PR = "r3"
DEFAULT_PREFERENCE = "-1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://export_sa_family_t.patch;patch=1 \
+ file://scsi-use-__u8.patch;patch=1 \
"
S = "${WORKDIR}/linux-${PV}"
@@ -44,8 +45,3 @@ do_install() {
set_arch
oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=$ARCH
}
-
-do_stage () {
- set_arch
- oe_runmake headers_install INSTALL_HDR_PATH=${STAGING_DIR_HOST}${layout_prefix} ARCH=$ARCH
-}
diff --git a/recipes/linux/LAB-kernel_2.6.13-hh2.bb b/recipes/linux/LAB-kernel_2.6.13-hh2.bb
index f03a7db402..8340043f82 100644
--- a/recipes/linux/LAB-kernel_2.6.13-hh2.bb
+++ b/recipes/linux/LAB-kernel_2.6.13-hh2.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Liux As Bootloader kernelm"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_HOST = "arm.*-linux"
COMPATIBLE_MACHINE = "h2200"
diff --git a/recipes/linux/LAB-kernel_cvs.bb b/recipes/linux/LAB-kernel_cvs.bb
index 0daa4742f3..2ee43c7ac8 100644
--- a/recipes/linux/LAB-kernel_cvs.bb
+++ b/recipes/linux/LAB-kernel_cvs.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Liux As Bootloader kernelm"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PV = "${K_MAJOR}.${K_MINOR}.${K_MICRO}-hh${HHV}+cvs${SRCDATE}"
#!BIG FAT WARNING:
diff --git a/recipes/linux/c7x0-kernels-2.4-embedix.bb b/recipes/linux/c7x0-kernels-2.4-embedix.bb
index 60b7a5cafb..95bdfbce61 100644
--- a/recipes/linux/c7x0-kernels-2.4-embedix.bb
+++ b/recipes/linux/c7x0-kernels-2.4-embedix.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Build all c7x0 kernels in one go"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PROVIDES = "virtual/kernel"
PR = "r1"
diff --git a/recipes/linux/chumby-kernel_2.6.16-chumby-1.2.bb b/recipes/linux/chumby-kernel_2.6.16-chumby-1.2.bb
index 4967c1ec35..91d32c98f6 100644
--- a/recipes/linux/chumby-kernel_2.6.16-chumby-1.2.bb
+++ b/recipes/linux/chumby-kernel_2.6.16-chumby-1.2.bb
@@ -2,7 +2,7 @@ require linux.inc
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the Chumby"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r4"
SRC_URI = "http://files.chumby.com/source/ironforge/build396/linux-2.6.16-chumby-1.2.tar.gz \
diff --git a/recipes/linux/collie-kernels-2.4-embedix.bb b/recipes/linux/collie-kernels-2.4-embedix.bb
index 1445e41151..d5f9a7d749 100644
--- a/recipes/linux/collie-kernels-2.4-embedix.bb
+++ b/recipes/linux/collie-kernels-2.4-embedix.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Build all collie kernels in one go"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PROVIDES = "virtual/kernel"
PR = "r2"
diff --git a/recipes/linux/compulab-pxa270_2.6.16.bb b/recipes/linux/compulab-pxa270_2.6.16.bb
index 6dc92f69b6..71b7c8f009 100644
--- a/recipes/linux/compulab-pxa270_2.6.16.bb
+++ b/recipes/linux/compulab-pxa270_2.6.16.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the Compulab PXA270 system"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r6"
do_unpack[depends] += "unzip-native:do_populate_staging"
diff --git a/recipes/linux/devkitidp-pxa255_2.6.19.bb b/recipes/linux/devkitidp-pxa255_2.6.19.bb
index f9eb6a7777..6f098d9ff3 100644
--- a/recipes/linux/devkitidp-pxa255_2.6.19.bb
+++ b/recipes/linux/devkitidp-pxa255_2.6.19.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the BSQUARE PXA255 DevKitIDP"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r4"
DEPENDS = "u-boot"
diff --git a/recipes/linux/ep93xx-kernel_2.6.17+2.6.18-rc1.bb b/recipes/linux/ep93xx-kernel_2.6.17+2.6.18-rc1.bb
index b233dd7870..d3a079da36 100644
--- a/recipes/linux/ep93xx-kernel_2.6.17+2.6.18-rc1.bb
+++ b/recipes/linux/ep93xx-kernel_2.6.17+2.6.18-rc1.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for Cirrus Logic ep39xx compatible machines"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
COMPATIBLE_MACHINE = "ep93xx"
diff --git a/recipes/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb b/recipes/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb
index 9aab5d8bed..9bd3a4ad92 100644
--- a/recipes/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb
+++ b/recipes/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for Cirrus Logic ep39xx compatible machines"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
COMPATIBLE_MACHINE = "ep93xx"
diff --git a/recipes/linux/gumstix-linux.inc b/recipes/linux/gumstix-linux.inc
index 030abf2c88..0b80cc86fe 100644
--- a/recipes/linux/gumstix-linux.inc
+++ b/recipes/linux/gumstix-linux.inc
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for custom configurations"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
inherit kernel
diff --git a/recipes/linux/gumstix_2.6.5-gnalm1-gum0.bb b/recipes/linux/gumstix_2.6.5-gnalm1-gum0.bb
index 9af2696d66..2bab58ec43 100644
--- a/recipes/linux/gumstix_2.6.5-gnalm1-gum0.bb
+++ b/recipes/linux/gumstix_2.6.5-gnalm1-gum0.bb
@@ -3,7 +3,7 @@ BROKEN = "1"
SECTION = "kernel"
DESCRIPTION = "Linux kernel for OMAP processors"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_MACHINE = "gumstix"
diff --git a/recipes/linux/handhelds-pxa_2.4.19-rmk6-pxa1-hh42.bb b/recipes/linux/handhelds-pxa_2.4.19-rmk6-pxa1-hh42.bb
index 21e3c18534..0b76adba52 100644
--- a/recipes/linux/handhelds-pxa_2.4.19-rmk6-pxa1-hh42.bb
+++ b/recipes/linux/handhelds-pxa_2.4.19-rmk6-pxa1-hh42.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel for PXA25x based devices."
-LICENSE = "GPL"
+LICENSE = "GPLv2"
#PR = "r1"
diff --git a/recipes/linux/handhelds-sa_2.4.19-rmk6-pxa1-hh42.bb b/recipes/linux/handhelds-sa_2.4.19-rmk6-pxa1-hh42.bb
index adca8740de..65fdbda6da 100644
--- a/recipes/linux/handhelds-sa_2.4.19-rmk6-pxa1-hh42.bb
+++ b/recipes/linux/handhelds-sa_2.4.19-rmk6-pxa1-hh42.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel for StrongArm processor based devices."
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/linux/ipod_2.4.24-ipod0.bb b/recipes/linux/ipod_2.4.24-ipod0.bb
index b0fe9886e5..2704d1da38 100644
--- a/recipes/linux/ipod_2.4.24-ipod0.bb
+++ b/recipes/linux/ipod_2.4.24-ipod0.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for Ipods"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
KV = "2.4.24"
PV = "${KV}-ipod0"
diff --git a/recipes/linux/ixp4xx-kernel.inc b/recipes/linux/ixp4xx-kernel.inc
index 910819e666..6422177f34 100644
--- a/recipes/linux/ixp4xx-kernel.inc
+++ b/recipes/linux/ixp4xx-kernel.inc
@@ -24,7 +24,7 @@
#
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the Intel IXP4xx device"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS = "arm-kernel-shim devio-native"
@@ -153,7 +153,7 @@ SRC_URI += "${IXP4XX_PATCHES}"
COMPATIBLE_HOST = 'arm.*-linux.*'
COMPATIBLE_MACHINE = '(ixp4xx|nslu2|fsg3)'
-inherit kernel
+inherit kernel siteinfo
ARCH = "arm"
diff --git a/recipes/linux/linux-2.6.20/nhk15/0001-kbuild-include-limits.h-in-sumversion.c-for-path_max.patch b/recipes/linux/linux-2.6.20/nhk15/0001-kbuild-include-limits.h-in-sumversion.c-for-path_max.patch
deleted file mode 100644
index 4871601c97..0000000000
--- a/recipes/linux/linux-2.6.20/nhk15/0001-kbuild-include-limits.h-in-sumversion.c-for-path_max.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From fc31c7716355a226b8ed4e16f4581e5c8fa53570 Mon Sep 17 00:00:00 2001
-From: Mike Frysinger <vapier@gentoo.org>
-Date: Thu, 17 May 2007 14:57:20 -0400
-Subject: [PATCH] kbuild: include limits.h in sumversion.c for PATH_MAX
-
-POSIX says limits.h defines PATH_MAX so we should include it (which fixes
-compiling on some systems like OS X).
-
-Signed-off-by: Mike Frysinger <vapier@gentoo.org>
-Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
----
- scripts/mod/sumversion.c | 1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/scripts/mod/sumversion.c b/scripts/mod/sumversion.c
-index 6873d5a..d9cc690 100644
---- a/scripts/mod/sumversion.c
-+++ b/scripts/mod/sumversion.c
-@@ -7,6 +7,7 @@
- #include <ctype.h>
- #include <errno.h>
- #include <string.h>
-+#include <limits.h>
- #include "modpost.h"
-
- /*
---
-1.6.3.3
-
diff --git a/recipes/linux/linux-2.6.20/nhk15/audio_codec_patch_base_v5.6.0.patch b/recipes/linux/linux-2.6.20/nhk15/audio_codec_patch_base_v5.6.0.patch
index 1a7bd9e836..5b9c187fbc 100644
--- a/recipes/linux/linux-2.6.20/nhk15/audio_codec_patch_base_v5.6.0.patch
+++ b/recipes/linux/linux-2.6.20/nhk15/audio_codec_patch_base_v5.6.0.patch
@@ -1,7 +1,14 @@
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c
---- linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c 2008-11-24 14:06:25.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c 2008-11-26 18:37:16.000000000 +0530
-@@ -1292,12 +1292,14 @@ static int link_msp (struct instance_des
+---
+ drivers/media/nomadik_mm/saa/nomadik-saa.c | 4 +++-
+ sound/arm/nomadik_alsa.c | 4 ++++
+ sound/nomadik_stw5095.c | 17 +++++++++++++++++
+ 3 files changed, 24 insertions(+), 1 deletion(-)
+
+--- linux-2.6.20.orig/drivers/media/nomadik_mm/saa/nomadik-saa.c
++++ linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c
+@@ -1290,16 +1290,18 @@ static int link_msp (struct instance_des
+
+ }
else
{
/*Configure Output sink for audiocodec*/
@@ -17,15 +24,18 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c ../new/linu
down(&saa_desc->open_lock);
if(saa_desc->msp_out_flag != 0){
printk ("SAA_DRV ERROR : MSP OUT already used \n");
-diff -Nauprw linux-2.6.20/sound/arm/nomadik_alsa.c ../new/linux-2.6.20/sound/arm/nomadik_alsa.c
---- linux-2.6.20/sound/arm/nomadik_alsa.c 2008-11-24 14:06:29.000000000 +0530
-+++ ../new/linux-2.6.20/sound/arm/nomadik_alsa.c 2008-11-26 18:36:26.000000000 +0530
-@@ -568,10 +568,14 @@ static int snd_nomadik_alsa_pcm_open(snd
+ up(&saa_desc->open_lock);
+ return -EBUSY;
+--- linux-2.6.20.orig/sound/arm/nomadik_alsa.c
++++ linux-2.6.20/sound/arm/nomadik_alsa.c
+@@ -566,14 +566,18 @@ static int snd_nomadik_alsa_pcm_open(snd
+ /* Set the hardware configuration */
+ stream_id = substream->pstr->stream;
if (stream_id == SNDRV_PCM_STREAM_PLAYBACK) {
runtime->hw = snd_nomadik_playback_hw;
/* configure the output sink for the acodec */
+ #if 0
-+ if(codec_conf.codec_output != chip->output_device){
++ if(codec_conf.codec_output != chip->output_device){
if ((error = nomadik_acodec_select_output(chip->output_device, USER_ALSA))) {
printk("ALSA: ERROR: select output failed\n");
return error;
@@ -35,10 +45,13 @@ diff -Nauprw linux-2.6.20/sound/arm/nomadik_alsa.c ../new/linux-2.6.20/sound/arm
} else {
runtime->hw = snd_nomadik_capture_hw;
/* configure the input source for the acodec */
-diff -Nauprw linux-2.6.20/sound/nomadik_stw5095.c ../new/linux-2.6.20/sound/nomadik_stw5095.c
---- linux-2.6.20/sound/nomadik_stw5095.c 2008-11-24 14:06:29.000000000 +0530
-+++ ../new/linux-2.6.20/sound/nomadik_stw5095.c 2008-11-26 18:36:04.000000000 +0530
-@@ -3237,6 +3237,7 @@ t_codec_error nomadik_acodec_setuser(t_a
+ if ((error = nomadik_acodec_select_input(chip->input_device, USER_ALSA))) {
+ printk("ALSA: ERROR: select input failed\n");
+--- linux-2.6.20.orig/sound/nomadik_stw5095.c
++++ linux-2.6.20/sound/nomadik_stw5095.c
+@@ -3235,19 +3235,32 @@ t_codec_error nomadik_acodec_setuser(t_a
+ * Unset the current user for acodec.
+ */
t_codec_error nomadik_acodec_unsetuser(t_acodec_user user)
{
@@ -46,11 +59,13 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5095.c ../new/linux-2.6.20/sound/noma
t_codec_error codec_error = CODEC_OK;
if(g_codec_system_context.cur_user != user){
-@@ -3246,6 +3247,18 @@ t_codec_error nomadik_acodec_unsetuser(t
+ printk
+ ("ERROR : Trying to free audiocodec already in use by other user %d\n", g_codec_system_context.cur_user);
+ return CODEC_ERROR;
}
else {
g_codec_system_context.cur_user = NO_USER;
-+
++
+ err = STMPE2401_Install_Callback(STMPE0, EGPIO_PIN_7 ,NULL,(void*)user);
+ if (err != STMPE2401_OK)
+ {
@@ -65,7 +80,11 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5095.c ../new/linux-2.6.20/sound/noma
nomadik_acodec_powerdown(0);
}
-@@ -3282,6 +3295,10 @@ static void codec_callback1(void *user)
+ return (codec_error);
+ }
+@@ -3280,10 +3293,14 @@ static void codec_callback1(void *user)
+ {
+ int err,codec_error;
uint8 byte_value;
t_acodec_user t;
t = (t_acodec_user) user;
@@ -76,3 +95,5 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5095.c ../new/linux-2.6.20/sound/noma
err = STMPE2401_GetGpioVal(STMPE0,EGPIO_PIN_7,&byte_value);
switch(byte_value) {
+ case 0:
+ err = STMPE2401_SetGpioAltFunction(STMPE0,EGPIO_PIN_12,STMPE2401_PRIMARY_FUNCTION);
diff --git a/recipes/linux/linux-2.6.20/nhk15/hrw-make-create-kconfig-executable.patch b/recipes/linux/linux-2.6.20/nhk15/hrw-make-create-kconfig-executable.patch
index 7a2ccae78e..8cb13ba2f0 100644
--- a/recipes/linux/linux-2.6.20/nhk15/hrw-make-create-kconfig-executable.patch
+++ b/recipes/linux/linux-2.6.20/nhk15/hrw-make-create-kconfig-executable.patch
@@ -12,6 +12,6 @@
@echo "Generating $(TOPDIR)/arch/arm/mach-nomadik/Kconfig"
+ @chmod 755 ./create_kconfig.pl
@./create_kconfig.pl $(TOPDIR)/arch/arm/mach-nomadik
- endif
+ endif
# end of Auto board configuration/dependency resolution
diff --git a/recipes/linux/linux-2.6.20/nhk15/linux-2.6.20_01_dec_2.patch b/recipes/linux/linux-2.6.20/nhk15/linux-2.6.20_01_dec_2.patch
index 4876337dfd..62be30a268 100644
--- a/recipes/linux/linux-2.6.20/nhk15/linux-2.6.20_01_dec_2.patch
+++ b/recipes/linux/linux-2.6.20/nhk15/linux-2.6.20_01_dec_2.patch
@@ -1,7 +1,13 @@
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c
---- linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c 2008-11-24 14:06:26.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c 2008-12-01 17:31:42.589136000 +0530
-@@ -38,6 +38,7 @@
+---
+ drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c | 2910 +++++++++++++++++++++---
+ drivers/media/video/v4l2-nomadik.c | 2
+ 2 files changed, 2644 insertions(+), 268 deletions(-)
+
+--- linux-2.6.20.orig/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c
+@@ -36,10 +36,11 @@
+ #include <linux/delay.h>
+
#include "nomadik_sva_vpip.h"
#define VPIP_DEFAULT_LOG_LEVEL 4
@@ -9,7 +15,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
int vpip_debug = VPIP_DEFAULT_LOG_LEVEL;
module_param(vpip_debug, int, 0644);
-@@ -790,20 +791,29 @@ return ret_val;
+ MODULE_PARM_DESC(vpip_debug,"Debug level for VPIP messages");
+
+@@ -788,79 +789,106 @@ IRP_ASSERT(irp_write_packet(srv_open,
+ return ret_val;
+ }EXPORT_SYMBOL(write_pages_exposure);
@@ -41,7 +51,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ModeManagerStatus_bThisLoLevelState , 0x0100, 0x0000 },
{ ModeManagerStatus_bNextLoLevelState , 0x0102, 0x0000 },
{ ModeManagerStatus_bHiLevelState , 0x0104, 0x0000 },
-@@ -813,52 +823,70 @@ struct nomadik_vpip_param vpip_default_p
+ { ModeManagerStatus_bCycles , 0x0106, 0x0000 },
+ { ModeManagerStatus_fModeStaticSetupsChanged , 0x0108, 0x0000 },
+ { ModeManagerStatus_bTestCoin , 0x010a, 0x0000 },
{ ModeManagerStatus_fCycleForTest , 0x010c, 0x0000 },
{ ModeManagerStatus_bNumberOfFramesStreamed , 0x010e, 0x0000 },
{ ModeManagerStatus_bPrevFrameCountForExposure , 0x0110, 0x0000 },
@@ -138,7 +150,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ PipeSetupBankB_uwPipeOutputSize_X_LSByte , 0x0402, 0x0000 },
{ PipeSetupBankB_uwPipeOutputSize_X_MSByte , 0x0401, 0x0000 },
{ PipeSetupBankB_uwPipeOutputSize_Y_LSByte , 0x0406, 0x0000 },
-@@ -871,22 +899,37 @@ struct nomadik_vpip_param vpip_default_p
+ { PipeSetupBankB_uwPipeOutputSize_Y_MSByte , 0x0405, 0x0000 },
+ { PipeSetupBankB_bPipeOutputFormat , 0x0408, 0x0000 },
+@@ -869,26 +897,41 @@ struct nomadik_vpip_param vpip_default_p
+ { PipeSetupBankB_fEnableItuEmbeddedCodes , 0x040e, 0x0000 },
+ { PipeSetupBankB_bPixValidLineTypes , 0x0410, 0x0000 },
{ PipeSetupBankB_fGenerateVSync , 0x0412, 0x0000 },
{ PipeSetupBankB_fCb_Cr_Flip , 0x0414, 0x0000 },
{ PipeSetupBankB_fY_CbCr_Flip , 0x0416, 0x0000 },
@@ -177,7 +193,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ LocalPipe0SetupBank_uwPipeOutputSize_X_LSByte , 0x0682, 0x0000 },
{ LocalPipe0SetupBank_uwPipeOutputSize_X_MSByte , 0x0681, 0x0000 },
{ LocalPipe0SetupBank_uwPipeOutputSize_Y_LSByte , 0x0686, 0x0000 },
-@@ -899,13 +942,19 @@ struct nomadik_vpip_param vpip_default_p
+ { LocalPipe0SetupBank_uwPipeOutputSize_Y_MSByte , 0x0685, 0x0000 },
+ { LocalPipe0SetupBank_bPipeOutputFormat , 0x0688, 0x0000 },
+@@ -897,83 +940,119 @@ struct nomadik_vpip_param vpip_default_p
+ { LocalPipe0SetupBank_fEnableItuEmbeddedCodes , 0x068e, 0x0000 },
+ { LocalPipe0SetupBank_bPixValidLineTypes , 0x0690, 0x0000 },
{ LocalPipe0SetupBank_fGenerateVSync , 0x0692, 0x0000 },
{ LocalPipe0SetupBank_fCb_Cr_Flip , 0x0694, 0x0000 },
{ LocalPipe0SetupBank_fY_CbCr_Flip , 0x0696, 0x0000 },
@@ -197,7 +217,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ Pipe0Control_fOverrideOFCropRegisters , 0x070e, 0x0000 },
{ Pipe0Control_uwHCropRising_LSByte , 0x0712, 0x0000 },
{ Pipe0Control_uwHCropRising_MSByte , 0x0711, 0x0000 },
-@@ -915,27 +964,45 @@ struct nomadik_vpip_param vpip_default_p
+ { Pipe0Control_uwHCropFalling_LSByte , 0x0716, 0x0000 },
+ { Pipe0Control_uwHCropFalling_MSByte , 0x0715, 0x0000 },
+ { Pipe0Control_uwVCropRisingCrse_LSByte , 0x071a, 0x0000 },
{ Pipe0Control_uwVCropRisingCrse_MSByte , 0x0719, 0x0000 },
{ Pipe0Control_uwVCropFallingCrse_LSByte , 0x071e, 0x0000 },
{ Pipe0Control_uwVCropFallingCrse_MSByte , 0x071d, 0x0000 },
@@ -246,7 +268,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ MasterI2cStatus_bResourceStatus , 0x0a00, 0x0000 },
{ MasterI2cStatus_uwI2CClkDiv_LSByte , 0x0a04, 0x0000 },
{ MasterI2cStatus_uwI2CClkDiv_MSByte , 0x0a03, 0x0000 },
-@@ -943,24 +1010,36 @@ struct nomadik_vpip_param vpip_default_p
+ { MasterI2cStatus_fTransactionError , 0x0a06, 0x0000 },
{ MasterI2cStatus_bNumberOfTransactionFailures , 0x0a08, 0x0000 },
{ MasterI2cStatus_bNumberOfConsecutiveGrabFailures , 0x0a0a, 0x0000 },
{ MasterI2cStatus_bNumberOfForcedReleases , 0x0a0c, 0x0000 },
@@ -286,7 +308,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingSensorConstraints_uwMinimumPrePllClockDiv_LSByte , 0x0c02, 0x0000 },
{ VideoTimingSensorConstraints_uwMinimumPrePllClockDiv_MSByte , 0x0c01, 0x0000 },
{ VideoTimingSensorConstraints_uwMaximumPrePllClockDiv_LSByte , 0x0c06, 0x0000 },
-@@ -971,7 +1050,7 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingSensorConstraints_uwMaximumPrePllClockDiv_MSByte , 0x0c05, 0x0000 },
+ { VideoTimingSensorConstraints_fpMinimumPllInputFrequency_Mhz_LSByte , 0x0c0a, 0x0000 },
+ { VideoTimingSensorConstraints_fpMinimumPllInputFrequency_Mhz_MSByte , 0x0c09, 0x0000 },
+ { VideoTimingSensorConstraints_uwMinimumPllMultiplier_LSByte , 0x0c0e, 0x0000 },
{ VideoTimingSensorConstraints_uwMinimumPllMultiplier_MSByte , 0x0c0d, 0x0000 },
{ VideoTimingSensorConstraints_uwMaximumPllMultiplier_LSByte , 0x0c12, 0x0000 },
{ VideoTimingSensorConstraints_uwMaximumPllMultiplier_MSByte , 0x0c11, 0x0000 },
@@ -295,7 +320,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingSensorConstraints_fpMaximumPllOutputFrequency_Mhz_MSByte , 0x0c15, 0x0000 },
{ VideoTimingSensorConstraints_uwMinimumVTSysClockDiv_LSByte , 0x0c1a, 0x0000 },
{ VideoTimingSensorConstraints_uwMinimumVTSysClockDiv_MSByte , 0x0c19, 0x0000 },
-@@ -993,6 +1072,9 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingSensorConstraints_uwMaximumVTSysClockDiv_LSByte , 0x0c1e, 0x0000 },
+ { VideoTimingSensorConstraints_uwMaximumVTSysClockDiv_MSByte , 0x0c1d, 0x0000 },
+@@ -991,17 +1070,23 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingSensorConstraints_uwMaximumOPSysClockDiv_MSByte , 0x0c35, 0x0000 },
+ { VideoTimingSensorConstraints_fpMaximumOPSystemClockFrequency_Mhz_LSByte , 0x0c3a, 0x0000 },
{ VideoTimingSensorConstraints_fpMaximumOPSystemClockFrequency_Mhz_MSByte , 0x0c39, 0x0000 },
{ VideoTimingSensorConstraints_fpMaximumOPPixelClockFrequency_Mhz_LSByte , 0x0c3e, 0x0000 },
{ VideoTimingSensorConstraints_fpMaximumOPPixelClockFrequency_Mhz_MSByte , 0x0c3d, 0x0000 },
@@ -305,7 +334,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorScalingSubSamplingCapabilities_bSensorScalingMode , 0x0c80, 0x0000 },
{ SensorScalingSubSamplingCapabilities_uwScalerMMin_LSByte , 0x0c84, 0x0000 },
{ SensorScalingSubSamplingCapabilities_uwScalerMMin_MSByte , 0x0c83, 0x0000 },
-@@ -1000,6 +1082,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorScalingSubSamplingCapabilities_uwScalerMMax_LSByte , 0x0c88, 0x0000 },
{ SensorScalingSubSamplingCapabilities_uwScalerMMax_MSByte , 0x0c87, 0x0000 },
{ SensorScalingSubSamplingCapabilities_uwMaxOddInc_LSByte , 0x0c8c, 0x0000 },
{ SensorScalingSubSamplingCapabilities_uwMaxOddInc_MSByte , 0x0c8b, 0x0000 },
@@ -315,7 +344,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingOutput_uwPrePllClockDiv_LSByte , 0x0d02, 0x0000 },
{ VideoTimingOutput_uwPrePllClockDiv_MSByte , 0x0d01, 0x0000 },
{ VideoTimingOutput_fpPllInputFrequency_Mhz_LSByte , 0x0d06, 0x0000 },
-@@ -1028,7 +1113,13 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingOutput_fpPllInputFrequency_Mhz_MSByte , 0x0d05, 0x0000 },
+ { VideoTimingOutput_uwPllMultiplier_LSByte , 0x0d0a, 0x0000 },
+@@ -1026,24 +1111,36 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingOutput_uwOPPixelClockDiv_MSByte , 0x0d2d, 0x0000 },
+ { VideoTimingOutput_fpOPPixelClockFrequency_Mhz_LSByte , 0x0d32, 0x0000 },
{ VideoTimingOutput_fpOPPixelClockFrequency_Mhz_MSByte , 0x0d31, 0x0000 },
{ VideoTimingOutput_fpOutputTimingClockDerating_LSByte , 0x0d36, 0x0000 },
{ VideoTimingOutput_fpOutputTimingClockDerating_MSByte , 0x0d35, 0x0000 },
@@ -329,7 +362,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingInputsFarSensor_VideoTimingMode , 0x0e00, 0x0001 },
{ VideoTimingInputsFarSensor_bSensorBitsPerSystemClock , 0x0e02, 0x0002 },
{ VideoTimingInputsFarSensor_uwCsiRawFormat_LSByte , 0x0e06, 0x0000 },
-@@ -1037,11 +1128,17 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingInputsFarSensor_uwCsiRawFormat_MSByte , 0x0e05, 0x0808 },
+ { VideoTimingInputsFarSensor_fpHostRxMaxDataRate_Mbps_LSByte , 0x0e0a, 0x0000 },
{ VideoTimingInputsFarSensor_fpHostRxMaxDataRate_Mbps_MSByte , 0x0e09, 0x508a },
{ VideoTimingInputsFarSensor_VsyncPolarity , 0x0e0c, 0x0000 },
{ VideoTimingInputsFarSensor_HsyncPolarity , 0x0e0e, 0x0000 },
@@ -347,7 +381,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingFarSensorConstraints_uwMinimumPrePllClockDiv_LSByte , 0x0f02, 0x0000 },
{ VideoTimingFarSensorConstraints_uwMinimumPrePllClockDiv_MSByte , 0x0f01, 0x0000 },
{ VideoTimingFarSensorConstraints_uwMaximumPrePllClockDiv_LSByte , 0x0f06, 0x0000 },
-@@ -1074,6 +1171,9 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingFarSensorConstraints_uwMaximumPrePllClockDiv_MSByte , 0x0f05, 0x0000 },
+ { VideoTimingFarSensorConstraints_fpMinimumPllInputFrequency_Mhz_LSByte , 0x0f0a, 0x0000 },
+@@ -1072,17 +1169,23 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingFarSensorConstraints_uwMaximumOPSysClockDiv_MSByte , 0x0f35, 0x0000 },
+ { VideoTimingFarSensorConstraints_fpMaximumOPSystemClockFrequency_Mhz_LSByte , 0x0f3a, 0x0000 },
{ VideoTimingFarSensorConstraints_fpMaximumOPSystemClockFrequency_Mhz_MSByte , 0x0f39, 0x0000 },
{ VideoTimingFarSensorConstraints_fpMaximumOPPixelClockFrequency_Mhz_LSByte , 0x0f3e, 0x0000 },
{ VideoTimingFarSensorConstraints_fpMaximumOPPixelClockFrequency_Mhz_MSByte , 0x0f3d, 0x0000 },
@@ -357,7 +395,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorFarScalingSubSamplingCapabilities_bSensorScalingMode , 0x0f80, 0x0000 },
{ SensorFarScalingSubSamplingCapabilities_uwScalerMMin_LSByte , 0x0f84, 0x0000 },
{ SensorFarScalingSubSamplingCapabilities_uwScalerMMin_MSByte , 0x0f83, 0x0000 },
-@@ -1081,6 +1181,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFarScalingSubSamplingCapabilities_uwScalerMMax_LSByte , 0x0f88, 0x0000 },
{ SensorFarScalingSubSamplingCapabilities_uwScalerMMax_MSByte , 0x0f87, 0x0000 },
{ SensorFarScalingSubSamplingCapabilities_uwMaxOddInc_LSByte , 0x0f8c, 0x0000 },
{ SensorFarScalingSubSamplingCapabilities_uwMaxOddInc_MSByte , 0x0f8b, 0x0000 },
@@ -367,7 +405,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingFarOutput_uwPrePllClockDiv_LSByte , 0x1002, 0x0000 },
{ VideoTimingFarOutput_uwPrePllClockDiv_MSByte , 0x1001, 0x0000 },
{ VideoTimingFarOutput_fpPllInputFrequency_Mhz_LSByte , 0x1006, 0x0000 },
-@@ -1109,7 +1212,13 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingFarOutput_fpPllInputFrequency_Mhz_MSByte , 0x1005, 0x0000 },
+ { VideoTimingFarOutput_uwPllMultiplier_LSByte , 0x100a, 0x0000 },
+@@ -1107,24 +1210,36 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingFarOutput_uwOPPixelClockDiv_MSByte , 0x102d, 0x0000 },
+ { VideoTimingFarOutput_fpOPPixelClockFrequency_Mhz_LSByte , 0x1032, 0x0000 },
{ VideoTimingFarOutput_fpOPPixelClockFrequency_Mhz_MSByte , 0x1031, 0x0000 },
{ VideoTimingFarOutput_fpOutputTimingClockDerating_LSByte , 0x1036, 0x0000 },
{ VideoTimingFarOutput_fpOutputTimingClockDerating_MSByte , 0x1035, 0x0000 },
@@ -381,7 +423,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingInputsNearSensor_VideoTimingMode , 0x1100, 0x0001 },
{ VideoTimingInputsNearSensor_bSensorBitsPerSystemClock , 0x1102, 0x0002 },
{ VideoTimingInputsNearSensor_uwCsiRawFormat_LSByte , 0x1106, 0x0000 },
-@@ -1118,11 +1227,17 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingInputsNearSensor_uwCsiRawFormat_MSByte , 0x1105, 0x0808 },
+ { VideoTimingInputsNearSensor_fpHostRxMaxDataRate_Mbps_LSByte , 0x110a, 0x0000 },
{ VideoTimingInputsNearSensor_fpHostRxMaxDataRate_Mbps_MSByte , 0x1109, 0x508a },
{ VideoTimingInputsNearSensor_VsyncPolarity , 0x110c, 0x0000 },
{ VideoTimingInputsNearSensor_HsyncPolarity , 0x110e, 0x0000 },
@@ -399,7 +442,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingNearSensorConstraints_uwMinimumPrePllClockDiv_LSByte , 0x1202, 0x0000 },
{ VideoTimingNearSensorConstraints_uwMinimumPrePllClockDiv_MSByte , 0x1201, 0x0000 },
{ VideoTimingNearSensorConstraints_uwMaximumPrePllClockDiv_LSByte , 0x1206, 0x0000 },
-@@ -1155,6 +1270,9 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingNearSensorConstraints_uwMaximumPrePllClockDiv_MSByte , 0x1205, 0x0000 },
+ { VideoTimingNearSensorConstraints_fpMinimumPllInputFrequency_Mhz_LSByte , 0x120a, 0x0000 },
+@@ -1153,17 +1268,23 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingNearSensorConstraints_uwMaximumOPSysClockDiv_MSByte , 0x1235, 0x0000 },
+ { VideoTimingNearSensorConstraints_fpMaximumOPSystemClockFrequency_Mhz_LSByte , 0x123a, 0x0000 },
{ VideoTimingNearSensorConstraints_fpMaximumOPSystemClockFrequency_Mhz_MSByte , 0x1239, 0x0000 },
{ VideoTimingNearSensorConstraints_fpMaximumOPPixelClockFrequency_Mhz_LSByte , 0x123e, 0x0000 },
{ VideoTimingNearSensorConstraints_fpMaximumOPPixelClockFrequency_Mhz_MSByte , 0x123d, 0x0000 },
@@ -409,7 +456,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorNearScalingSubSamplingCapabilities_bSensorScalingMode , 0x1280, 0x0000 },
{ SensorNearScalingSubSamplingCapabilities_uwScalerMMin_LSByte , 0x1284, 0x0000 },
{ SensorNearScalingSubSamplingCapabilities_uwScalerMMin_MSByte , 0x1283, 0x0000 },
-@@ -1162,6 +1280,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorNearScalingSubSamplingCapabilities_uwScalerMMax_LSByte , 0x1288, 0x0000 },
{ SensorNearScalingSubSamplingCapabilities_uwScalerMMax_MSByte , 0x1287, 0x0000 },
{ SensorNearScalingSubSamplingCapabilities_uwMaxOddInc_LSByte , 0x128c, 0x0000 },
{ SensorNearScalingSubSamplingCapabilities_uwMaxOddInc_MSByte , 0x128b, 0x0000 },
@@ -419,7 +466,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingNearOutput_uwPrePllClockDiv_LSByte , 0x1302, 0x0000 },
{ VideoTimingNearOutput_uwPrePllClockDiv_MSByte , 0x1301, 0x0000 },
{ VideoTimingNearOutput_fpPllInputFrequency_Mhz_LSByte , 0x1306, 0x0000 },
-@@ -1190,35 +1311,47 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingNearOutput_fpPllInputFrequency_Mhz_MSByte , 0x1305, 0x0000 },
+ { VideoTimingNearOutput_uwPllMultiplier_LSByte , 0x130a, 0x0000 },
+@@ -1188,39 +1309,51 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingNearOutput_uwOPPixelClockDiv_MSByte , 0x132d, 0x0000 },
+ { VideoTimingNearOutput_fpOPPixelClockFrequency_Mhz_LSByte , 0x1332, 0x0000 },
{ VideoTimingNearOutput_fpOPPixelClockFrequency_Mhz_MSByte , 0x1331, 0x0000 },
{ VideoTimingNearOutput_fpOutputTimingClockDerating_LSByte , 0x1336, 0x0000 },
{ VideoTimingNearOutput_fpOutputTimingClockDerating_MSByte , 0x1335, 0x0000 },
@@ -476,7 +527,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorCapabilitiesFarSensor_uwSensorIntegrationTimeCapability_LSByte , 0x1502, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorIntegrationTimeCapability_MSByte , 0x1501, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorMinimumCoarseIntegrationLines_LSByte , 0x1506, 0x0000 },
-@@ -1230,8 +1363,10 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesFarSensor_uwSensorMinimumCoarseIntegrationLines_MSByte , 0x1505, 0x0000 },
+ { SensorCapabilitiesFarSensor_uwSensorCoarseIntegrationTimeMaxMargin_LSByte , 0x150a, 0x0000 },
+@@ -1228,12 +1361,14 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesFarSensor_uwSensorMinimumFineIntegrationPixels_LSByte , 0x150e, 0x0000 },
+ { SensorCapabilitiesFarSensor_uwSensorMinimumFineIntegrationPixels_MSByte , 0x150d, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorFineIntegrationTimeMaxMargin_LSByte , 0x1512, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorFineIntegrationTimeMaxMargin_MSByte , 0x1511, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorAnalogGainMinimum_LSByte , 0x1516, 0x0000 },
@@ -487,7 +542,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorCapabilitiesFarSensor_uwSensorAnalogGainMaximum_MSByte , 0x1519, 0x0080 },
{ SensorCapabilitiesFarSensor_uwSensorAnalogGainCodeStep_LSByte , 0x151e, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorAnalogGainCodeStep_MSByte , 0x151d, 0x0000 },
-@@ -1265,7 +1400,11 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesFarSensor_uwSensorAnalogGainType_LSByte , 0x1522, 0x0000 },
+ { SensorCapabilitiesFarSensor_uwSensorAnalogGainType_MSByte , 0x1521, 0x0000 },
+@@ -1263,11 +1398,15 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesFarSensor_uwSensorDigitalGainCapability_LSByte , 0x1554, 0x0000 },
+ { SensorCapabilitiesFarSensor_uwSensorDigitalGainCapability_MSByte , 0x1553, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorDigitalGainMinimum_LSByte , 0x1558, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorDigitalGainMinimum_MSByte , 0x1557, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorDataPedestal_LSByte , 0x155c, 0x0000 },
@@ -499,7 +558,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorCapabilitiesNearSensor_uwSensorIntegrationTimeCapability_LSByte , 0x1582, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorIntegrationTimeCapability_MSByte , 0x1581, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorMinimumCoarseIntegrationLines_LSByte , 0x1586, 0x0000 },
-@@ -1278,8 +1417,8 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesNearSensor_uwSensorMinimumCoarseIntegrationLines_MSByte , 0x1585, 0x0000 },
+ { SensorCapabilitiesNearSensor_uwSensorCoarseIntegrationTimeMaxMargin_LSByte , 0x158a, 0x0000 },
+@@ -1276,12 +1415,12 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesNearSensor_uwSensorMinimumFineIntegrationPixels_MSByte , 0x158d, 0x0000 },
+ { SensorCapabilitiesNearSensor_uwSensorFineIntegrationTimeMaxMargin_LSByte , 0x1592, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorFineIntegrationTimeMaxMargin_MSByte , 0x1591, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorAnalogGainMinimum_LSByte , 0x1596, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorAnalogGainMinimum_MSByte , 0x1595, 0x0000 },
@@ -510,7 +573,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorCapabilitiesNearSensor_uwSensorAnalogGainCodeStep_LSByte , 0x159e, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorAnalogGainCodeStep_MSByte , 0x159d, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorAnalogGainType_LSByte , 0x15a2, 0x0000 },
-@@ -1313,6 +1452,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesNearSensor_uwSensorAnalogGainType_MSByte , 0x15a1, 0x0000 },
+ { SensorCapabilitiesNearSensor_fpSensorAnalogGainConstM0_LSByte , 0x15a6, 0x0000 },
+@@ -1311,10 +1450,13 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesNearSensor_uwSensorDigitalGainCapability_MSByte , 0x15d3, 0x0000 },
+ { SensorCapabilitiesNearSensor_uwSensorDigitalGainMinimum_LSByte , 0x15d8, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorDigitalGainMinimum_MSByte , 0x15d7, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorDataPedestal_LSByte , 0x15dc, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorDataPedestal_MSByte , 0x15db, 0x0000 },
@@ -520,7 +587,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorCapabilitiesCurrentSensor_uwSensorIntegrationTimeCapability_LSByte , 0x1602, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorIntegrationTimeCapability_MSByte , 0x1601, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorMinimumCoarseIntegrationLines_LSByte , 0x1606, 0x0000 },
-@@ -1324,8 +1466,10 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesCurrentSensor_uwSensorMinimumCoarseIntegrationLines_MSByte , 0x1605, 0x0000 },
+ { SensorCapabilitiesCurrentSensor_uwSensorCoarseIntegrationTimeMaxMargin_LSByte , 0x160a, 0x0000 },
+@@ -1322,12 +1464,14 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesCurrentSensor_uwSensorMinimumFineIntegrationPixels_LSByte , 0x160e, 0x0000 },
+ { SensorCapabilitiesCurrentSensor_uwSensorMinimumFineIntegrationPixels_MSByte , 0x160d, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorFineIntegrationTimeMaxMargin_LSByte , 0x1612, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorFineIntegrationTimeMaxMargin_MSByte , 0x1611, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorAnalogGainMinimum_LSByte , 0x1616, 0x0000 },
@@ -531,7 +602,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorCapabilitiesCurrentSensor_uwSensorAnalogGainMaximum_MSByte , 0x1619, 0x0080 },
{ SensorCapabilitiesCurrentSensor_uwSensorAnalogGainCodeStep_LSByte , 0x161e, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorAnalogGainCodeStep_MSByte , 0x161d, 0x0000 },
-@@ -1360,6 +1504,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesCurrentSensor_uwSensorAnalogGainType_LSByte , 0x1622, 0x0000 },
+ { SensorCapabilitiesCurrentSensor_uwSensorAnalogGainType_MSByte , 0x1621, 0x0000 },
+@@ -1358,10 +1502,13 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesCurrentSensor_uwSensorDigitalGainCapability_MSByte , 0x1653, 0x0000 },
+ { SensorCapabilitiesCurrentSensor_uwSensorDigitalGainMinimum_LSByte , 0x1658, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorDigitalGainMinimum_MSByte , 0x1657, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorDataPedestal_LSByte , 0x165c, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorDataPedestal_MSByte , 0x165b, 0x0000 },
@@ -541,7 +616,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorFrameConstraintsFar_uwVTXAddrMin_LSByte , 0x1682, 0x0000 },
{ SensorFrameConstraintsFar_uwVTXAddrMin_MSByte , 0x1681, 0x0000 },
{ SensorFrameConstraintsFar_uwVTYAddrMin_LSByte , 0x1686, 0x0000 },
-@@ -1388,6 +1535,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFrameConstraintsFar_uwVTYAddrMin_MSByte , 0x1685, 0x0000 },
+ { SensorFrameConstraintsFar_uwVTXAddrMax_LSByte , 0x168a, 0x0000 },
+@@ -1386,10 +1533,13 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFrameConstraintsFar_uwMaxVTLineLengthPck_MSByte , 0x16ad, 0x0000 },
+ { SensorFrameConstraintsFar_uwMinVTLineBlankingPck_LSByte , 0x16b2, 0x0000 },
{ SensorFrameConstraintsFar_uwMinVTLineBlankingPck_MSByte , 0x16b1, 0x0000 },
{ SensorFrameConstraintsFar_uwMinVTFrameBlanking_LSByte , 0x16b6, 0x0000 },
{ SensorFrameConstraintsFar_uwMinVTFrameBlanking_MSByte , 0x16b5, 0x0000 },
@@ -551,7 +630,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorFrameConstraintsNear_uwVTXAddrMin_LSByte , 0x1702, 0x0000 },
{ SensorFrameConstraintsNear_uwVTXAddrMin_MSByte , 0x1701, 0x0000 },
{ SensorFrameConstraintsNear_uwVTYAddrMin_LSByte , 0x1706, 0x0000 },
-@@ -1416,8 +1566,14 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFrameConstraintsNear_uwVTYAddrMin_MSByte , 0x1705, 0x0000 },
+ { SensorFrameConstraintsNear_uwVTXAddrMax_LSByte , 0x170a, 0x0000 },
+@@ -1414,12 +1564,18 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFrameConstraintsNear_uwMaxVTLineLengthPck_MSByte , 0x172d, 0x0000 },
+ { SensorFrameConstraintsNear_uwMinVTLineBlankingPck_LSByte , 0x1732, 0x0000 },
{ SensorFrameConstraintsNear_uwMinVTLineBlankingPck_MSByte , 0x1731, 0x0000 },
{ SensorFrameConstraintsNear_uwMinVTFrameBlanking_LSByte , 0x1736, 0x0000 },
{ SensorFrameConstraintsNear_uwMinVTFrameBlanking_MSByte , 0x1735, 0x0000 },
@@ -568,7 +651,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ CurrentFrameDimension_uwVTFrameLengthLines_LSByte , 0x1802, 0x0000 },
{ CurrentFrameDimension_uwVTFrameLengthLines_MSByte , 0x1801, 0x0000 },
{ CurrentFrameDimension_uwVTLineLengthPck_LSByte , 0x1806, 0x0000 },
-@@ -1449,6 +1605,9 @@ struct nomadik_vpip_param vpip_default_p
+ { CurrentFrameDimension_uwVTLineLengthPck_MSByte , 0x1805, 0x0000 },
+ { CurrentFrameDimension_uwVTXAddrStart_LSByte , 0x180a, 0x0000 },
+@@ -1447,10 +1603,13 @@ struct nomadik_vpip_param vpip_default_p
+ { CurrentFrameDimension_bScalingMode , 0x1834, 0x0000 },
+ { CurrentFrameDimension_fpScaleFactor_LSByte , 0x1838, 0x0000 },
{ CurrentFrameDimension_fpScaleFactor_MSByte , 0x1837, 0x0000 },
{ CurrentFrameDimension_uwScalerM_LSByte , 0x183c, 0x0000 },
{ CurrentFrameDimension_uwScalerM_MSByte , 0x183b, 0x0000 },
@@ -578,7 +665,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorFrameConstraints_uwVTXAddrMin_LSByte , 0x1882, 0x0000 },
{ SensorFrameConstraints_uwVTXAddrMin_MSByte , 0x1881, 0x0000 },
{ SensorFrameConstraints_uwVTYAddrMin_LSByte , 0x1886, 0x0000 },
-@@ -1477,12 +1636,18 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFrameConstraints_uwVTYAddrMin_MSByte , 0x1885, 0x0000 },
+ { SensorFrameConstraints_uwVTXAddrMax_LSByte , 0x188a, 0x0000 },
+@@ -1475,16 +1634,22 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFrameConstraints_uwMaxVTLineLengthPck_MSByte , 0x18ad, 0x0000 },
+ { SensorFrameConstraints_uwMinVTLineBlankingPck_LSByte , 0x18b2, 0x0000 },
{ SensorFrameConstraints_uwMinVTLineBlankingPck_MSByte , 0x18b1, 0x0000 },
{ SensorFrameConstraints_uwMinVTFrameBlanking_LSByte , 0x18b6, 0x0000 },
{ SensorFrameConstraints_uwMinVTFrameBlanking_MSByte , 0x18b5, 0x0000 },
@@ -597,7 +688,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FrameDimensionStatus_fFrameLengthChangePending , 0x1980, 0x0000 },
{ FrameDimensionStatus_fFrameDimensionChangePending , 0x1982, 0x0000 },
{ FrameDimensionStatus_uwVTFrameLengthPending_lines_LSByte , 0x1986, 0x0000 },
-@@ -1505,49 +1670,93 @@ struct nomadik_vpip_param vpip_default_p
+ { FrameDimensionStatus_uwVTFrameLengthPending_lines_MSByte , 0x1985, 0x0000 },
+ { FrameDimensionStatus_fFrameLengthChangeInhibitedForCoarseExposure , 0x1988, 0x0000 },
+@@ -1503,53 +1668,97 @@ struct nomadik_vpip_param vpip_default_p
+ { FrameDimensionStatus_uwMaximumSensorFOVY_LSByte , 0x19a4, 0x0000 },
+ { FrameDimensionStatus_uwMaximumSensorFOVY_MSByte , 0x19a3, 0x0000 },
{ FrameDimensionStatus_uwOPXOutputSize_LSByte , 0x19a8, 0x0000 },
{ FrameDimensionStatus_uwOPXOutputSize_MSByte , 0x19a7, 0x0000 },
{ FrameDimensionStatus_fSensorPreScaleFactorChanged , 0x19aa, 0x0000 },
@@ -706,7 +801,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FlashManagerStatus_fFlashSequencePending , 0x1d00, 0x0000 },
{ FlashManagerStatus_cNumberFramesRequiredForPreFlashes , 0x1d02, 0x0000 },
{ FlashManagerStatus_fpMainFlashPulseWidth_us_LSByte , 0x1d06, 0x0000 },
-@@ -1571,24 +1780,29 @@ struct nomadik_vpip_param vpip_default_p
+ { FlashManagerStatus_fpMainFlashPulseWidth_us_MSByte , 0x1d05, 0x0000 },
+ { FlashManagerStatus_fpPreFlashPulseWidth_us_LSByte , 0x1d0a, 0x0000 },
+@@ -1569,46 +1778,61 @@ struct nomadik_vpip_param vpip_default_p
+ { FlashManagerStatus_wStartPreFlashPixel_LSByte , 0x1d26, 0x0000 },
+ { FlashManagerStatus_wStartPreFlashPixel_MSByte , 0x1d25, 0x0000 },
{ FlashManagerStatus_cNumberFramesRequired , 0x1d28, 0x0000 },
{ FlashManagerStatus_fPreFlashPending , 0x1d2a, 0x0000 },
{ FlashManagerStatus_fMainFlashPending , 0x1d2c, 0x0000 },
@@ -740,7 +839,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ExposureControls_uwFlashGunModeCoarseIntegration_lines_LSByte , 0x1da6, 0x0000 },
{ ExposureControls_uwFlashGunModeCoarseIntegration_lines_MSByte , 0x1da5, 0x0000 },
{ ExposureControls_uwFlashGunModeFineIntegration_pixels_LSByte , 0x1daa, 0x0000 },
-@@ -1599,14 +1813,24 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureControls_uwFlashGunModeFineIntegration_pixels_MSByte , 0x1da9, 0x0000 },
+ { ExposureControls_uwFlashGunModeCodedAnalogGain_LSByte , 0x1dae, 0x0000 },
+ { ExposureControls_uwFlashGunModeCodedAnalogGain_MSByte , 0x1dad, 0x0000 },
+ { ExposureControls_fpFlashGunModeDigitalGain_LSByte , 0x1db2, 0x0000 },
{ ExposureControls_fpFlashGunModeDigitalGain_MSByte , 0x1db1, 0x0000 },
{ ExposureControls_fFreezeAutoExposure , 0x1db4, 0x0000 },
{ ExposureControls_fpUserMaximumIntegrationTime_us_LSByte , 0x1db8, 0x0000 },
@@ -767,7 +869,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ExposureStatus_fWhiteBalanceGainIncludedInCurrentExposure , 0x1e04, 0x0000 },
{ ExposureStatus_fBadExposureForIterativeWhiteBalance , 0x1e06, 0x0000 },
{ ExposureStatus_uwCoarseIntegrationPending_lines_LSByte , 0x1e0a, 0x0000 },
-@@ -1630,6 +1854,9 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureStatus_uwCoarseIntegrationPending_lines_MSByte , 0x1e09, 0x0000 },
+ { ExposureStatus_uwFineIntegrationPending_pixels_LSByte , 0x1e0e, 0x0000 },
+@@ -1628,31 +1852,46 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureStatus_fpTotalIntegrationTimePending_us_MSByte , 0x1e27, 0x0000 },
+ { ExposureStatus_uwCodedAnalogGainPending_LSByte , 0x1e2c, 0x0000 },
{ ExposureStatus_uwCodedAnalogGainPending_MSByte , 0x1e2b, 0x0000 },
{ ExposureStatus_fExposureIsStableforAutoFocus , 0x1e2e, 0x0000 },
{ ExposureStatus_bRuntimeExposureTarget , 0x1e30, 0x0000 },
@@ -777,7 +883,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ExposureParametersApplied_uwCoarseIntegration_lines_LSByte , 0x1e82, 0x0000 },
{ ExposureParametersApplied_uwCoarseIntegration_lines_MSByte , 0x1e81, 0x0000 },
{ ExposureParametersApplied_uwFineIntegration_pixels_LSByte , 0x1e86, 0x0000 },
-@@ -1638,8 +1865,14 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureParametersApplied_uwFineIntegration_pixels_MSByte , 0x1e85, 0x0000 },
+ { ExposureParametersApplied_uwCodedAnalogGain_LSByte , 0x1e8a, 0x0000 },
{ ExposureParametersApplied_uwCodedAnalogGain_MSByte , 0x1e89, 0x0000 },
{ ExposureParametersApplied_fpDigitalGain_LSByte , 0x1e8e, 0x0000 },
{ ExposureParametersApplied_fpDigitalGain_MSByte , 0x1e8d, 0x0000 },
@@ -792,7 +899,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ExposureCycleTest_fpInitialDesiredExposureTime_LSByte , 0x1f82, 0x0000 },
{ ExposureCycleTest_fpInitialDesiredExposureTime_MSByte , 0x1f81, 0x0000 },
{ ExposureCycleTest_fpFinalDesiredExposureTime_LSByte , 0x1f86, 0x0000 },
-@@ -1647,10 +1880,16 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureCycleTest_fpFinalDesiredExposureTime_MSByte , 0x1f85, 0x0000 },
{ ExposureCycleTest_fpExposureStep_LSByte , 0x1f8a, 0x0000 },
{ ExposureCycleTest_fpExposureStep_MSByte , 0x1f89, 0x0000 },
{ ExposureCycleTest_bStepDirection , 0x1f8c, 0x0000 },
@@ -809,7 +916,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ExposureAlgorithmControls_fpMaximumStep_LSByte , 0x2082, 0x0000 },
{ ExposureAlgorithmControls_fpMaximumStep_MSByte , 0x2081, 0x0000 },
{ ExposureAlgorithmControls_fpMinimumStep_LSByte , 0x2086, 0x0000 },
-@@ -1664,9 +1903,14 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureAlgorithmControls_fpMinimumStep_MSByte , 0x2085, 0x0000 },
+ { ExposureAlgorithmControls_fpMinimumDesiredExposureTime_us_LSByte , 0x208a, 0x0000 },
+@@ -1662,13 +1901,18 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureAlgorithmControls_fpMaximumNegativeStepThreshold_LSByte , 0x2092, 0x0000 },
+ { ExposureAlgorithmControls_fpMaximumNegativeStepThreshold_MSByte , 0x2091, 0x0000 },
{ ExposureAlgorithmControls_fpRelativeOnTargetStabilityThreshold_LSByte , 0x2096, 0x0000 },
{ ExposureAlgorithmControls_fpRelativeOnTargetStabilityThreshold_MSByte , 0x2095, 0x0000 },
{ ExposureAlgorithmControls_fpDigitalGainFloor_LSByte , 0x209a, 0x0000 },
@@ -824,7 +935,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ExposureAlgorithmControls_fpRelativeIntTimeHysThreshold_LSByte , 0x20a2, 0x0000 },
{ ExposureAlgorithmControls_fpRelativeIntTimeHysThreshold_MSByte , 0x20a1, 0x0000 },
{ ExposureAlgorithmControls_fpRelativeDigitalGainHysThreshold_LSByte , 0x20a6, 0x0000 },
-@@ -1682,34 +1926,61 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureAlgorithmControls_fpRelativeDigitalGainHysThreshold_MSByte , 0x20a5, 0x0000 },
+ { ExposureAlgorithmControls_fpRelativeCompilationProblemThreshold_LSByte , 0x20aa, 0x0000 },
+@@ -1680,53 +1924,103 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureAlgorithmControls_fpMaximumManualExposureTime_s_LSByte , 0x20b6, 0x0000 },
+ { ExposureAlgorithmControls_fpMaximumManualExposureTime_s_MSByte , 0x20b5, 0x0000 },
{ ExposureAlgorithmControls_fpRelativeStabilityThresholdForAutoFocus_LSByte , 0x20ba, 0x0000 },
{ ExposureAlgorithmControls_fpRelativeStabilityThresholdForAutoFocus_MSByte , 0x20b9, 0x0000 },
{ ExposureAlgorithmControls_bLeakShift , 0x20bc, 0x0000 },
@@ -891,7 +1006,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ WhiteBalanceStatus_bStatus , 0x2380, 0x0000 },
{ WhiteBalanceStatus_fUnityGainsUsed , 0x2382, 0x0000 },
{ WhiteBalanceStatus_fpRedGain_LSByte , 0x2386, 0x0000 },
-@@ -1718,13 +1989,36 @@ struct nomadik_vpip_param vpip_default_p
+ { WhiteBalanceStatus_fpRedGain_MSByte , 0x2385, 0x0000 },
+ { WhiteBalanceStatus_fpGreenGain_LSByte , 0x238a, 0x0000 },
{ WhiteBalanceStatus_fpGreenGain_MSByte , 0x2389, 0x0000 },
{ WhiteBalanceStatus_fpBlueGain_LSByte , 0x238e, 0x0000 },
{ WhiteBalanceStatus_fpBlueGain_MSByte , 0x238d, 0x0000 },
@@ -928,7 +1044,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ MinWeightedWBControls_fDisable , 0x2500, 0x0000 },
{ MinWeightedWBControls_uwSaturationThreshold_LSByte , 0x2504, 0x0000 },
{ MinWeightedWBControls_uwSaturationThreshold_MSByte , 0x2503, 0x0300 },
-@@ -1737,6 +2031,9 @@ struct nomadik_vpip_param vpip_default_p
+ { MinWeightedWBControls_fpRedTiltGain_LSByte , 0x2508, 0x0000 },
+ { MinWeightedWBControls_fpRedTiltGain_MSByte , 0x2507, 0x3e00 },
+@@ -1735,38 +2029,56 @@ struct nomadik_vpip_param vpip_default_p
+ { MinWeightedWBControls_fpGreen2TiltGain_LSByte , 0x2510, 0x0000 },
+ { MinWeightedWBControls_fpGreen2TiltGain_MSByte , 0x250f, 0x3e40 },
{ MinWeightedWBControls_fpBlueTiltGain_LSByte , 0x2514, 0x0000 },
{ MinWeightedWBControls_fpBlueTiltGain_MSByte , 0x2513, 0x3e40 },
{ MinWeightedWBControls_GreenChannelToAccumulate , 0x2516, 0x0000 },
@@ -938,7 +1058,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ MinWeightedWBStatus_uwZone_X_Offset_LSByte , 0x2582, 0x0000 },
{ MinWeightedWBStatus_uwZone_X_Offset_MSByte , 0x2581, 0x0000 },
{ MinWeightedWBStatus_uwZone_Y_Offset_LSByte , 0x2586, 0x0000 },
-@@ -1747,24 +2044,39 @@ struct nomadik_vpip_param vpip_default_p
+ { MinWeightedWBStatus_uwZone_Y_Offset_MSByte , 0x2585, 0x0000 },
+ { MinWeightedWBStatus_uwZone_X_Size_LSByte , 0x258a, 0x0000 },
+ { MinWeightedWBStatus_uwZone_X_Size_MSByte , 0x2589, 0x0000 },
+ { MinWeightedWBStatus_uwZone_Y_Size_LSByte , 0x258e, 0x0000 },
{ MinWeightedWBStatus_uwZone_Y_Size_MSByte , 0x258d, 0x0000 },
{ MinWeightedWBStatus_fpNumberMacroPixel_LSByte , 0x2592, 0x0000 },
{ MinWeightedWBStatus_fpNumberMacroPixel_MSByte , 0x2591, 0x0000 },
@@ -988,7 +1111,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutomaticFrameRateStatus_fpImpliedGain_LSByte , 0x2782, 0x0000 },
{ AutomaticFrameRateStatus_fpImpliedGain_MSByte , 0x2781, 0x0000 },
{ AutomaticFrameRateStatus_uwMaximumFrameLength_lines_LSByte , 0x2786, 0x0000 },
-@@ -1781,9 +2093,20 @@ struct nomadik_vpip_param vpip_default_p
+ { AutomaticFrameRateStatus_uwMaximumFrameLength_lines_MSByte , 0x2785, 0x0000 },
+ { AutomaticFrameRateStatus_uwMinimumFrameLength_lines_LSByte , 0x278a, 0x0000 },
+@@ -1779,32 +2091,99 @@ struct nomadik_vpip_param vpip_default_p
+ { AutomaticFrameRateStatus_uwCurrentFrameLength_lines_MSByte , 0x2795, 0x0000 },
+ { AutomaticFrameRateStatus_uwDesiredFrameLength_lines_LSByte , 0x279a, 0x0000 },
{ AutomaticFrameRateStatus_uwDesiredFrameLength_lines_MSByte , 0x2799, 0x0000 },
{ AutomaticFrameRateStatus_fAutomaticFrameRateStable , 0x279c, 0x0000 },
{ AutomaticFrameRateStatus_fAutomaticFrameRateClip , 0x279e, 0x0000 },
@@ -1009,7 +1136,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ StaticFrameRateStatus_uwRequestedFrameRate_Hz_LSByte , 0x2882, 0x0000 },
{ StaticFrameRateStatus_uwRequestedFrameRate_Hz_MSByte , 0x2881, 0x0000 },
{ StaticFrameRateStatus_uwMaxFrameRate_Hz_LSByte , 0x2886, 0x0000 },
-@@ -1794,15 +2117,71 @@ struct nomadik_vpip_param vpip_default_p
+ { StaticFrameRateStatus_uwMaxFrameRate_Hz_MSByte , 0x2885, 0x0000 },
+ { StaticFrameRateStatus_uwMinFrameRate_Hz_LSByte , 0x288a, 0x0000 },
+ { StaticFrameRateStatus_uwMinFrameRate_Hz_MSByte , 0x2889, 0x0000 },
+ { StaticFrameRateStatus_fChangePending , 0x288c, 0x0000 },
{ StaticFrameRateStatus_uwRequiredFrameLength_lines_LSByte , 0x2890, 0x0000 },
{ StaticFrameRateStatus_uwRequiredFrameLength_lines_MSByte , 0x288f, 0x0000 },
{ StaticFrameRateStatus_ClipFrameRate , 0x2892, 0x0000 },
@@ -1081,7 +1211,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_ColourMatrixFarSensor_fpRInR_LSByte , 0x2b02, 0x0000 },
{ ColourEngine0_ColourMatrixFarSensor_fpRInR_MSByte , 0x2b01, 0x3fd3 },
{ ColourEngine0_ColourMatrixFarSensor_fpGInR_LSByte , 0x2b06, 0x0000 },
-@@ -1821,6 +2200,8 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixFarSensor_fpGInR_MSByte , 0x2b05, 0xbce0 },
+ { ColourEngine0_ColourMatrixFarSensor_fpBInR_LSByte , 0x2b0a, 0x0000 },
+@@ -1819,10 +2198,12 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixFarSensor_fpRInB_MSByte , 0x2b19, 0xb717 },
+ { ColourEngine0_ColourMatrixFarSensor_fpGInB_LSByte , 0x2b1e, 0x0000 },
{ ColourEngine0_ColourMatrixFarSensor_fpGInB_MSByte , 0x2b1d, 0xbd29 },
{ ColourEngine0_ColourMatrixFarSensor_fpBInB_LSByte , 0x2b22, 0x0000 },
{ ColourEngine0_ColourMatrixFarSensor_fpBInB_MSByte , 0x2b21, 0x3fc6 },
@@ -1090,7 +1224,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_ColourMatrixNearSensor_fpRInR_LSByte , 0x2b82, 0x0002 },
{ ColourEngine0_ColourMatrixNearSensor_fpRInR_MSByte , 0x2b81, 0x6400 },
{ ColourEngine0_ColourMatrixNearSensor_fpGInR_LSByte , 0x2b86, 0x0002 },
-@@ -1839,6 +2220,9 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixNearSensor_fpGInR_MSByte , 0x2b85, 0x6400 },
+ { ColourEngine0_ColourMatrixNearSensor_fpBInR_LSByte , 0x2b8a, 0x0002 },
+@@ -1837,10 +2218,13 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixNearSensor_fpRInB_MSByte , 0x2b99, 0xe900 },
+ { ColourEngine0_ColourMatrixNearSensor_fpGInB_LSByte , 0x2b9e, 0x0000 },
{ ColourEngine0_ColourMatrixNearSensor_fpGInB_MSByte , 0x2b9d, 0xe900 },
{ ColourEngine0_ColourMatrixNearSensor_fpBInB_LSByte , 0x2ba2, 0x0000 },
{ ColourEngine0_ColourMatrixNearSensor_fpBInB_MSByte , 0x2ba1, 0xe900 },
@@ -1100,7 +1238,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_ColourMatrixDamped_wRInR_LSByte , 0x2c02, 0x0000 },
{ ColourEngine0_ColourMatrixDamped_wRInR_MSByte , 0x2c01, 0x0000 },
{ ColourEngine0_ColourMatrixDamped_wGInR_LSByte , 0x2c06, 0x0000 },
-@@ -1857,6 +2241,18 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixDamped_wGInR_MSByte , 0x2c05, 0x0000 },
+ { ColourEngine0_ColourMatrixDamped_wBInR_LSByte , 0x2c0a, 0x0000 },
+@@ -1855,17 +2239,53 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixDamped_wRInB_MSByte , 0x2c19, 0x0000 },
+ { ColourEngine0_ColourMatrixDamped_wGInB_LSByte , 0x2c1e, 0x0000 },
{ ColourEngine0_ColourMatrixDamped_wGInB_MSByte , 0x2c1d, 0x0000 },
{ ColourEngine0_ColourMatrixDamped_wBInB_LSByte , 0x2c22, 0x0000 },
{ ColourEngine0_ColourMatrixDamped_wBInB_MSByte , 0x2c21, 0x0000 },
@@ -1119,7 +1261,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_ColourMatrixDamperControl_fDisableMatrixDamping , 0x2c80, 0x0000 },
{ ColourEngine0_ColourMatrixDamperControl_DamperLowThreshold_LSByte , 0x2c84, 0x0000 },
{ ColourEngine0_ColourMatrixDamperControl_DamperLowThreshold_MSByte , 0x2c83, 0x62ac },
-@@ -1864,6 +2260,30 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixDamperControl_DamperHighThreshold_LSByte , 0x2c88, 0x0000 },
{ ColourEngine0_ColourMatrixDamperControl_DamperHighThreshold_MSByte , 0x2c87, 0x64ac },
{ ColourEngine0_ColourMatrixDamperControl_MinimumDamperOutput_LSByte , 0x2c8c, 0x0000 },
{ ColourEngine0_ColourMatrixDamperControl_MinimumDamperOutput_MSByte , 0x2c8b, 0x0000 },
@@ -1150,7 +1292,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_ApertureCorrectionControls_fDisableCorrection , 0x2d00, 0x0000 },
{ ColourEngine0_ApertureCorrectionControls_bMaxGain , 0x2d02, 0x0010 },
{ ColourEngine0_ApertureCorrectionControls_fDisableGainDamping , 0x2d04, 0x0000 },
-@@ -1882,9 +2302,25 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ApertureCorrectionControls_DamperLowThreshold_Gain_LSByte , 0x2d08, 0x0000 },
+ { ColourEngine0_ApertureCorrectionControls_DamperLowThreshold_Gain_MSByte , 0x2d07, 0x5871 },
+@@ -1880,21 +2300,53 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ApertureCorrectionControls_DamperLowThreshold_Coring_MSByte , 0x2d19, 0x5871 },
+ { ColourEngine0_ApertureCorrectionControls_DamperHighThreshold_Coring_LSByte , 0x2d1e, 0x0000 },
{ ColourEngine0_ApertureCorrectionControls_DamperHighThreshold_Coring_MSByte , 0x2d1d, 0x63d1 },
{ ColourEngine0_ApertureCorrectionControls_MinimumDamperOutput_Coring_LSByte , 0x2d22, 0x0000 },
{ ColourEngine0_ApertureCorrectionControls_MinimumDamperOutput_Coring_MSByte , 0x2d21, 0x3a00 },
@@ -1176,7 +1322,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_GammaCorrection_fEnabled , 0x2e00, 0x0001 },
{ ColourEngine0_GammaCorrection_bMode , 0x2e02, 0x0001 },
{ ColourEngine0_GammaCorrection_SharpRed , 0x2e04, 0x0013 },
-@@ -1893,6 +2329,22 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_GammaCorrection_SharpGreen , 0x2e06, 0x0013 },
+ { ColourEngine0_GammaCorrection_SharpBlue , 0x2e08, 0x0013 },
{ ColourEngine0_GammaCorrection_SoftRed , 0x2e0a, 0x0013 },
{ ColourEngine0_GammaCorrection_SoftGreen , 0x2e0c, 0x0013 },
{ ColourEngine0_GammaCorrection_SoftBlue , 0x2e0e, 0x0013 },
@@ -1199,7 +1346,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ NoraControls_fDisable , 0x2e80, 0x0001 },
{ NoraControls_fDisableNoraPromoting , 0x2e82, 0x0000 },
{ NoraControls_bMaximumValue , 0x2e84, 0x0001 },
-@@ -1905,7 +2357,33 @@ struct nomadik_vpip_param vpip_default_p
+ { NoraControls_fDifferentTextureDegreeForBlue , 0x2e86, 0x0000 },
+ { NoraControls_fSplitNoiseLevel , 0x2e88, 0x0000 },
+@@ -1903,11 +2355,37 @@ struct nomadik_vpip_param vpip_default_p
+ { NoraControls_DamperLowThreshold_MSByte , 0x2e8d, 0x4000 },
+ { NoraControls_DamperHighThreshold_LSByte , 0x2e92, 0x0000 },
{ NoraControls_DamperHighThreshold_MSByte , 0x2e91, 0x4500 },
{ NoraControls_MinimumDamperOutput_LSByte , 0x2e96, 0x0000 },
{ NoraControls_MinimumDamperOutput_MSByte , 0x2e95, 0x0000 },
@@ -1233,7 +1384,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ScytheFilterControls_fDisableFilter , 0x2f80, 0x0000 },
{ ScytheFilterControls_fSquareLaw , 0x2f82, 0x0000 },
{ ScytheFilterControls_fDisablePromotingLow , 0x2f84, 0x0000 },
-@@ -1924,6 +2402,29 @@ struct nomadik_vpip_param vpip_default_p
+ { ScytheFilterControls_fDisablePromotingHigh , 0x2f86, 0x0000 },
+ { ScytheFilterControls_bMaxWeightLow , 0x2f88, 0x0010 },
+@@ -1922,10 +2400,33 @@ struct nomadik_vpip_param vpip_default_p
+ { ScytheFilterControls_fpDamperHighThresholdHigh_MSByte , 0x2f99, 0x68dc },
+ { ScytheFilterControls_fpMinimumDamperOutputLow_LSByte , 0x2f9e, 0x0000 },
{ ScytheFilterControls_fpMinimumDamperOutputLow_MSByte , 0x2f9d, 0x3a00 },
{ ScytheFilterControls_fpMinimumDamperOutputHigh_LSByte , 0x2fa2, 0x0000 },
{ ScytheFilterControls_fpMinimumDamperOutputHigh_MSByte , 0x2fa1, 0x3a00 },
@@ -1263,7 +1418,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ JackFilterControls_fDisableFilter , 0x3000, 0x0000 },
{ JackFilterControls_fSquareLaw , 0x3002, 0x0000 },
{ JackFilterControls_fDisablePromotingLow , 0x3004, 0x0000 },
-@@ -1942,10 +2443,25 @@ struct nomadik_vpip_param vpip_default_p
+ { JackFilterControls_fDisablePromotingHigh , 0x3006, 0x0000 },
+ { JackFilterControls_bMaxWeightLow , 0x3008, 0x0010 },
+@@ -1940,103 +2441,208 @@ struct nomadik_vpip_param vpip_default_p
+ { JackFilterControls_fpDamperHighThresholdHigh_MSByte , 0x3019, 0x68dc },
+ { JackFilterControls_fpMinimumDamperOutputLow_LSByte , 0x301e, 0x0000 },
{ JackFilterControls_fpMinimumDamperOutputLow_MSByte , 0x301d, 0x0000 },
{ JackFilterControls_fpMinimumDamperOutputHigh_LSByte , 0x3022, 0x0000 },
{ JackFilterControls_fpMinimumDamperOutputHigh_MSByte , 0x3021, 0x0000 },
@@ -1289,7 +1448,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VfpnControls_fEnableCorrection , 0x3100, 0x0000 },
{ VfpnControls_uwMaximumPixelValue_LSByte , 0x3104, 0x0000 },
{ VfpnControls_uwMaximumPixelValue_MSByte , 0x3103, 0x03ff },
-@@ -1954,15 +2470,61 @@ struct nomadik_vpip_param vpip_default_p
+ { VfpnControls_uwMinimumPixelValue_LSByte , 0x3108, 0x0000 },
+ { VfpnControls_uwMinimumPixelValue_MSByte , 0x3107, 0x0000 },
{ VfpnControls_uwPixelSaturationLevel_LSByte , 0x310c, 0x0000 },
{ VfpnControls_uwPixelSaturationLevel_MSByte , 0x310b, 0x03ff },
{ VfpnControls_bLogThreshLog , 0x310e, 0x0004 },
@@ -1354,7 +1514,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AntiVignetteControls_bFilterCoeff_R2_b , 0x3208, 0x0000 },
{ AntiVignetteControls_bFilterCoeff_R4_r , 0x320a, 0x0000 },
{ AntiVignetteControls_bFilterCoeff_R4_gr , 0x320c, 0x0000 },
-@@ -1972,8 +2534,8 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteControls_bFilterCoeff_R4_gb , 0x320e, 0x0000 },
+ { AntiVignetteControls_bFilterCoeff_R4_b , 0x3210, 0x0000 },
+ { AntiVignetteControls_uwHorizontalOffset_LSByte , 0x3214, 0x0000 },
{ AntiVignetteControls_uwHorizontalOffset_MSByte , 0x3213, 0x0000 },
{ AntiVignetteControls_uwVerticalOffset_LSByte , 0x3218, 0x0000 },
{ AntiVignetteControls_uwVerticalOffset_MSByte , 0x3217, 0x0000 },
@@ -1365,7 +1527,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AntiVignetteControls_uwHorizontalOffset_r_LSByte , 0x3220, 0x0000 },
{ AntiVignetteControls_uwHorizontalOffset_r_MSByte , 0x321f, 0x0000 },
{ AntiVignetteControls_uwHorizontalOffset_gr_LSByte , 0x3224, 0x0000 },
-@@ -1983,18 +2545,22 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteControls_uwHorizontalOffset_gr_MSByte , 0x3223, 0x0000 },
+ { AntiVignetteControls_uwHorizontalOffset_gb_LSByte , 0x3228, 0x0000 },
+ { AntiVignetteControls_uwHorizontalOffset_gb_MSByte , 0x3227, 0x0000 },
{ AntiVignetteControls_uwHorizontalOffset_b_LSByte , 0x322c, 0x0000 },
{ AntiVignetteControls_uwHorizontalOffset_b_MSByte , 0x322b, 0x0000 },
{ AntiVignetteControls_uwVerticalOffset_r_LSByte , 0x3230, 0x0000 },
@@ -1394,7 +1558,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AntiVignetteStatus_fXScaleEnabled , 0x3280, 0x0000 },
{ AntiVignetteStatus_bXScale , 0x3282, 0x0000 },
{ AntiVignetteStatus_fYScaleEnabled , 0x3284, 0x0000 },
-@@ -2003,13 +2569,35 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteStatus_bYScale , 0x3286, 0x0000 },
+ { AntiVignetteStatus_uwHorizontalSize_LSByte , 0x328a, 0x0000 },
{ AntiVignetteStatus_uwHorizontalSize_MSByte , 0x3289, 0x0000 },
{ AntiVignetteStatus_uwVerticalSize_LSByte , 0x328e, 0x0000 },
{ AntiVignetteStatus_uwVerticalSize_MSByte , 0x328d, 0x0000 },
@@ -1431,7 +1596,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_RadialApertureCorrectionApplicationInputs_uwHOffset_LSByte , 0x3402, 0x0000 },
{ ColourEngine0_RadialApertureCorrectionApplicationInputs_uwHOffset_MSByte , 0x3401, 0x0000 },
{ ColourEngine0_RadialApertureCorrectionApplicationInputs_uwVOffset_LSByte , 0x3406, 0x0000 },
-@@ -2018,9 +2606,21 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_RadialApertureCorrectionApplicationInputs_uwVOffset_MSByte , 0x3405, 0x0000 },
+ { ColourEngine0_RadialApertureCorrectionApplicationInputs_uwHScalingFactor_LSByte , 0x340a, 0x0000 },
{ ColourEngine0_RadialApertureCorrectionApplicationInputs_uwHScalingFactor_MSByte , 0x3409, 0x0000 },
{ ColourEngine0_RadialApertureCorrectionApplicationInputs_uwVScalingFactor_LSByte , 0x340e, 0x0000 },
{ ColourEngine0_RadialApertureCorrectionApplicationInputs_uwVScalingFactor_MSByte , 0x340d, 0x0000 },
@@ -1453,7 +1619,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_CoderOutputSignalRange_uwLumaExcursion_LSByte , 0x3502, 0x0000 },
{ ColourEngine0_CoderOutputSignalRange_uwLumaExcursion_MSByte , 0x3501, 0x0000 },
{ ColourEngine0_CoderOutputSignalRange_uwLumaMidpointTimes2_LSByte , 0x3506, 0x0000 },
-@@ -2029,12 +2629,18 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_CoderOutputSignalRange_uwLumaMidpointTimes2_MSByte , 0x3505, 0x0000 },
+ { ColourEngine0_CoderOutputSignalRange_uwChromaExcursion_LSByte , 0x350a, 0x0000 },
{ ColourEngine0_CoderOutputSignalRange_uwChromaExcursion_MSByte , 0x3509, 0x0000 },
{ ColourEngine0_CoderOutputSignalRange_uwChromaMidpointTimes2_LSByte , 0x350e, 0x0000 },
{ ColourEngine0_CoderOutputSignalRange_uwChromaMidpointTimes2_MSByte , 0x350d, 0x0000 },
@@ -1472,7 +1639,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_OutputCoderMatrix_w0_0_LSByte , 0x3602, 0x0000 },
{ ColourEngine0_OutputCoderMatrix_w0_0_MSByte , 0x3601, 0x0000 },
{ ColourEngine0_OutputCoderMatrix_w0_1_LSByte , 0x3606, 0x0000 },
-@@ -2053,6 +2659,20 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_OutputCoderMatrix_w0_1_MSByte , 0x3605, 0x0000 },
+ { ColourEngine0_OutputCoderMatrix_w0_2_LSByte , 0x360a, 0x0000 },
+@@ -2051,37 +2657,91 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_OutputCoderMatrix_w2_0_MSByte , 0x3619, 0x0000 },
+ { ColourEngine0_OutputCoderMatrix_w2_1_LSByte , 0x361e, 0x0000 },
{ ColourEngine0_OutputCoderMatrix_w2_1_MSByte , 0x361d, 0x0000 },
{ ColourEngine0_OutputCoderMatrix_w2_2_LSByte , 0x3622, 0x0000 },
{ ColourEngine0_OutputCoderMatrix_w2_2_MSByte , 0x3621, 0x0000 },
@@ -1493,7 +1664,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_FadeToBlack_fDisable , 0x3680, 0x0001 },
{ ColourEngine0_FadeToBlack_fpBlackValue_LSByte , 0x3684, 0x0000 },
{ ColourEngine0_FadeToBlack_fpBlackValue_MSByte , 0x3683, 0x0000 },
-@@ -2062,10 +2682,48 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_FadeToBlack_fpDamperLowThreshold_LSByte , 0x3688, 0x0000 },
+ { ColourEngine0_FadeToBlack_fpDamperLowThreshold_MSByte , 0x3687, 0x63d1 },
+ { ColourEngine0_FadeToBlack_fpDamperHighThreshold_LSByte , 0x368c, 0x0000 },
{ ColourEngine0_FadeToBlack_fpDamperHighThreshold_MSByte , 0x368b, 0x656f },
{ ColourEngine0_FadeToBlack_fpDamperOutput_LSByte , 0x3690, 0x0000 },
{ ColourEngine0_FadeToBlack_fpDamperOutput_MSByte , 0x368f, 0x0000 },
@@ -1542,7 +1715,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ZoomMgrParams_fAntiZip , 0x3780, 0x0000 },
{ ZoomMgrParams_bFilterCrispness0 , 0x3782, 0x0000 },
{ ZoomMgrParams_bFilterCrispness1 , 0x3784, 0x0000 },
-@@ -2074,12 +2732,14 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrParams_fInFromOutARLock , 0x3786, 0x0000 },
+ { ZoomMgrParams_bPrescaleFactor , 0x3788, 0x0000 },
{ ZoomMgrParams_bPrescaleType , 0x378a, 0x0000 },
{ ZoomMgrParams_fp16ZoomRange_LSByte , 0x378e, 0x0000 },
{ ZoomMgrParams_fp16ZoomRange_MSByte , 0x378d, 0x100 },
@@ -1558,7 +1732,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ZoomMgrCtrl_bChgOverMarginShift , 0x380c, 0x0000 },
{ ZoomMgrCtrl_fCheckDataRate , 0x380e, 0x0000 },
{ ZoomMgrCtrl_fSetAlternateInitWOI , 0x3810, 0x0000 },
-@@ -2091,6 +2751,9 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrCtrl_fSetX_Byte0 , 0x3812, 0x0000 },
+ { ZoomMgrCtrl_fSetX_Byte1 , 0x3814, 0x0000 },
+@@ -2089,10 +2749,13 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrCtrl_fSetX_Byte3 , 0x3818, 0x0000 },
+ { ZoomMgrCtrl_fp16P0ScaleLowLimit_LSByte , 0x381c, 0x0000 },
{ ZoomMgrCtrl_fp16P0ScaleLowLimit_MSByte , 0x381b, 0x0000 },
{ ZoomMgrCtrl_fp16P1ScaleLowLimit_LSByte , 0x3820, 0x0000 },
{ ZoomMgrCtrl_fp16P1ScaleLowLimit_MSByte , 0x381f, 0x0000 },
@@ -1568,7 +1746,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ZoomMgrStatus_fReady , 0x3880, 0x0000 },
{ ZoomMgrStatus_bDeviceTestCoin , 0x3882, 0x0000 },
{ ZoomMgrStatus_bNextCmd , 0x3884, 0x0000 },
-@@ -2124,6 +2787,24 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrStatus_bLastCmd , 0x3886, 0x0000 },
+ { ZoomMgrStatus_bCommandStatus , 0x3888, 0x0000 },
+@@ -2122,10 +2785,28 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrStatus_fMinFOVX_Byte3 , 0x38b8, 0x0000 },
+ { ZoomMgrStatus_uwXOrigin_LSByte , 0x38bc, 0x0000 },
{ ZoomMgrStatus_uwXOrigin_MSByte , 0x38bb, 0x0000 },
{ ZoomMgrStatus_uwYOrigin_LSByte , 0x38c0, 0x0000 },
{ ZoomMgrStatus_uwYOrigin_MSByte , 0x38bf, 0x0000 },
@@ -1593,7 +1775,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ WhiteBalanceConstrainerControls_fpRedA_LSByte , 0x3902, 0x0000 },
{ WhiteBalanceConstrainerControls_fpRedA_MSByte , 0x3901, 0x0000 },
{ WhiteBalanceConstrainerControls_fpBlueA_LSByte , 0x3906, 0x0000 },
-@@ -2135,6 +2816,9 @@ struct nomadik_vpip_param vpip_default_p
+ { WhiteBalanceConstrainerControls_fpBlueA_MSByte , 0x3905, 0x0000 },
+ { WhiteBalanceConstrainerControls_fpRedB_LSByte , 0x390a, 0x0000 },
+@@ -2133,25 +2814,34 @@ struct nomadik_vpip_param vpip_default_p
+ { WhiteBalanceConstrainerControls_fpBlueB_LSByte , 0x390e, 0x0000 },
+ { WhiteBalanceConstrainerControls_fpBlueB_MSByte , 0x390d, 0x3acf },
{ WhiteBalanceConstrainerControls_fpMaximumDistanceAllowedFromLocus_LSByte , 0x3912, 0x0000 },
{ WhiteBalanceConstrainerControls_fpMaximumDistanceAllowedFromLocus_MSByte , 0x3911, 0x2e8e },
{ WhiteBalanceConstrainerControls_fEnableConstrainedWhiteBalance , 0x3914, 0x0001 },
@@ -1603,7 +1789,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ WhiteBalanceConstrainerOutput_fpOutputRedGain_LSByte , 0x3982, 0x0000 },
{ WhiteBalanceConstrainerOutput_fpOutputRedGain_MSByte , 0x3981, 0x0000 },
{ WhiteBalanceConstrainerOutput_fpOutputGreenGain_LSByte , 0x3986, 0x0000 },
-@@ -2142,6 +2826,9 @@ struct nomadik_vpip_param vpip_default_p
+ { WhiteBalanceConstrainerOutput_fpOutputGreenGain_MSByte , 0x3985, 0x0000 },
{ WhiteBalanceConstrainerOutput_fpOutputBlueGain_LSByte , 0x398a, 0x0000 },
{ WhiteBalanceConstrainerOutput_fpOutputBlueGain_MSByte , 0x3989, 0x0000 },
{ WhiteBalanceConstrainerOutput_fAreGainsConstrained , 0x398c, 0x0000 },
@@ -1613,7 +1799,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ WhiteBalanceConstrainerInternal_fpGradientOfLocusAB_LSByte , 0x3a02, 0x0000 },
{ WhiteBalanceConstrainerInternal_fpGradientOfLocusAB_MSByte , 0x3a01, 0x0000 },
{ WhiteBalanceConstrainerInternal_fpDistanceOfInputPointFromLocusAB_LSByte , 0x3a06, 0x0000 },
-@@ -2150,6 +2837,9 @@ struct nomadik_vpip_param vpip_default_p
+ { WhiteBalanceConstrainerInternal_fpDistanceOfInputPointFromLocusAB_MSByte , 0x3a05, 0x0000 },
+ { WhiteBalanceConstrainerInternal_fpConstrainedRedPoint_LSByte , 0x3a0a, 0x0000 },
{ WhiteBalanceConstrainerInternal_fpConstrainedRedPoint_MSByte , 0x3a09, 0x0000 },
{ WhiteBalanceConstrainerInternal_fpConstrainedBluePoint_LSByte , 0x3a0e, 0x0000 },
{ WhiteBalanceConstrainerInternal_fpConstrainedBluePoint_MSByte , 0x3a0d, 0x0000 },
@@ -1623,7 +1810,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ModeSetupBank1_uwInputImageSize_X_LSByte , 0x3a82, 0x0000 },
{ ModeSetupBank1_uwInputImageSize_X_MSByte , 0x3a81, 0x0000 },
{ ModeSetupBank1_uwInputImageSize_Y_LSByte , 0x3a86, 0x0000 },
-@@ -2162,7 +2852,7 @@ struct nomadik_vpip_param vpip_default_p
+ { ModeSetupBank1_uwInputImageSize_Y_MSByte , 0x3a85, 0x0000 },
+ { ModeSetupBank1_uwMaxImageSize_X_LSByte , 0x3a8a, 0x0000 },
+@@ -2160,11 +2850,11 @@ struct nomadik_vpip_param vpip_default_p
+ { ModeSetupBank1_uwMaxImageSize_Y_MSByte , 0x3a8d, 0x0000 },
+ { ModeSetupBank1_uwMinImageSize_X_LSByte , 0x3a92, 0x0000 },
{ ModeSetupBank1_uwMinImageSize_X_MSByte , 0x3a91, 0x0000 },
{ ModeSetupBank1_uwMinImageSize_Y_LSByte , 0x3a96, 0x0000 },
{ ModeSetupBank1_uwMinImageSize_Y_MSByte , 0x3a95, 0x0000 },
@@ -1632,7 +1823,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ModeSetupBank1_fLowPowerStreaming , 0x3a9a, 0x0000 },
{ ModeSetupBank1_bTestMode , 0x3a9c, 0x0000 },
{ ModeSetupBank1_bNumberOfStatusLines , 0x3a9e, 0x0000 },
-@@ -2175,9 +2865,18 @@ struct nomadik_vpip_param vpip_default_p
+ { ModeSetupBank1_bNumberOfDarkLines , 0x3aa0, 0x0000 },
+ { ModeSetupBank1_bNumberOfBlackLines , 0x3aa2, 0x0000 },
+@@ -2173,13 +2863,22 @@ struct nomadik_vpip_param vpip_default_p
+ { ModeSetupBank1_uwNumberOfInterFrameLines_LSByte , 0x3aaa, 0x0000 },
+ { ModeSetupBank1_uwNumberOfInterFrameLines_MSByte , 0x3aa9, 0x0000 },
{ ModeSetupBank1_bNumberOfDummyColumns , 0x3aac, 0x0000 },
{ ModeSetupBank1_bInputImageSource , 0x3aae, 0x0000 },
{ ModeSetupBank1_bOutputImageDestination , 0x3ab0, 0x0000 },
@@ -1652,7 +1847,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AntiVignetteControlsFar_bFilterCoeff_R2_r , 0x3c02, 0x0000 },
{ AntiVignetteControlsFar_bFilterCoeff_R2_gr , 0x3c04, 0x0000 },
{ AntiVignetteControlsFar_bFilterCoeff_R2_gb , 0x3c06, 0x0000 },
-@@ -2213,7 +2912,10 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteControlsFar_bFilterCoeff_R2_b , 0x3c08, 0x0000 },
+ { AntiVignetteControlsFar_bFilterCoeff_R4_r , 0x3c0a, 0x0000 },
+@@ -2211,11 +2910,14 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteControlsFar_bUnityOffset_r , 0x3c3e, 0x0000 },
+ { AntiVignetteControlsFar_bUnityOffset_gr , 0x3c40, 0x0000 },
{ AntiVignetteControlsFar_bUnityOffset_gb , 0x3c42, 0x0000 },
{ AntiVignetteControlsFar_bUnityOffset_b , 0x3c44, 0x0000 },
{ AntiVignetteControlsFar_fAdaptiveAntiVignetteEnable , 0x3c46, 0x0000 },
@@ -1664,7 +1863,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AntiVignetteControlsNear_bFilterCoeff_R2_r , 0x3c82, 0x0000 },
{ AntiVignetteControlsNear_bFilterCoeff_R2_gr , 0x3c84, 0x0000 },
{ AntiVignetteControlsNear_bFilterCoeff_R2_gb , 0x3c86, 0x0000 },
-@@ -2249,6 +2951,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteControlsNear_bFilterCoeff_R2_b , 0x3c88, 0x0000 },
+ { AntiVignetteControlsNear_bFilterCoeff_R4_r , 0x3c8a, 0x0000 },
+@@ -2247,19 +2949,25 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteControlsNear_bUnityOffset_r , 0x3cbe, 0x0000 },
+ { AntiVignetteControlsNear_bUnityOffset_gr , 0x3cc0, 0x0000 },
{ AntiVignetteControlsNear_bUnityOffset_gb , 0x3cc2, 0x0000 },
{ AntiVignetteControlsNear_bUnityOffset_b , 0x3cc4, 0x0000 },
{ AntiVignetteControlsNear_fAdaptiveAntiVignetteEnable , 0x3cc6, 0x0000 },
@@ -1674,7 +1877,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AFStatsControls_fAbsSquareEnabled , 0x3d00, 0x0000 },
{ AFStatsControls_bCoringValue , 0x3d02, 0x0000 },
{ AFStatsControls_bWindowsSystem , 0x3d04, 0x0000 },
-@@ -2258,6 +2963,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AFStatsControls_bHRatio_Num , 0x3d06, 0x0000 },
+ { AFStatsControls_bHRatio_Den , 0x3d08, 0x0000 },
+ { AFStatsControls_bVRatio_Num , 0x3d0a, 0x0000 },
{ AFStatsControls_bVRatio_Den , 0x3d0c, 0x0000 },
{ AFStatsControls_bHostActiveZonesCounter , 0x3d0e, 0x0000 },
{ AFStatsControls_fAutoRefresh , 0x3d10, 0x0000 },
@@ -1684,7 +1889,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AFStatsStatus_bAFStats_Error , 0x3d80, 0x0000 },
{ AFStatsStatus_fAbsSquareEnabled , 0x3d82, 0x0000 },
{ AFStatsStatus_bCoringValue , 0x3d84, 0x0000 },
-@@ -2282,6 +2990,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AFStatsStatus_bWindowsSystem , 0x3d86, 0x0000 },
+ { AFStatsStatus_bActiveZonesCounter , 0x3d88, 0x0000 },
+@@ -2280,10 +2988,13 @@ struct nomadik_vpip_param vpip_default_p
+ { AFStatsStatus_udwMaxFocusMeasurePerPixel_Byte1 , 0x3da6, 0x0000 },
+ { AFStatsStatus_udwMaxFocusMeasurePerPixel_Byte2 , 0x3da8, 0x0000 },
{ AFStatsStatus_udwMaxFocusMeasurePerPixel_Byte3 , 0x3daa, 0x0000 },
{ AFStatsStatus_uwStartingAFZoneLine_LSByte , 0x3dae, 0x0000 },
{ AFStatsStatus_uwStartingAFZoneLine_MSByte , 0x3dad, 0x0000 },
@@ -1694,7 +1903,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AFFocusStats_udwStatsValue_0_Byte0 , 0x3e00, 0x0000 },
{ AFFocusStats_udwStatsValue_0_Byte1 , 0x3e02, 0x0000 },
{ AFFocusStats_udwStatsValue_0_Byte2 , 0x3e04, 0x0000 },
-@@ -2310,6 +3021,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AFFocusStats_udwStatsValue_0_Byte3 , 0x3e06, 0x0000 },
+ { AFFocusStats_udwStatsValue_1_Byte0 , 0x3e08, 0x0000 },
+@@ -2308,17 +3019,52 @@ struct nomadik_vpip_param vpip_default_p
+ { AFFocusStats_udwStatsValue_5_Byte3 , 0x3e2e, 0x0000 },
+ { AFFocusStats_udwStatsValue_6_Byte0 , 0x3e30, 0x0000 },
{ AFFocusStats_udwStatsValue_6_Byte1 , 0x3e32, 0x0000 },
{ AFFocusStats_udwStatsValue_6_Byte2 , 0x3e34, 0x0000 },
{ AFFocusStats_udwStatsValue_6_Byte3 , 0x3e36, 0x0000 },
@@ -1704,7 +1917,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AFLightStats_bStatsValue_0 , 0x3e80, 0x0000 },
{ AFLightStats_bStatsValue_1 , 0x3e82, 0x0000 },
{ AFLightStats_bStatsValue_2 , 0x3e84, 0x0000 },
-@@ -2317,6 +3031,38 @@ struct nomadik_vpip_param vpip_default_p
+ { AFLightStats_bStatsValue_3 , 0x3e86, 0x0000 },
{ AFLightStats_bStatsValue_4 , 0x3e88, 0x0000 },
{ AFLightStats_bStatsValue_5 , 0x3e8a, 0x0000 },
{ AFLightStats_bStatsValue_6 , 0x3e8c, 0x0000 },
@@ -1743,7 +1956,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FLADriverLowLevelParameters_wMinPosition_LSByte , 0x3f02, 0x0000 },
{ FLADriverLowLevelParameters_wMinPosition_MSByte , 0x3f01, 0x0000 },
{ FLADriverLowLevelParameters_wMaxPosition_LSByte , 0x3f06, 0x0000 },
-@@ -2344,6 +3090,9 @@ struct nomadik_vpip_param vpip_default_p
+ { FLADriverLowLevelParameters_wMaxPosition_MSByte , 0x3f05, 0x0000 },
+ { FLADriverLowLevelParameters_wHomePosition_LSByte , 0x3f0a, 0x0000 },
+@@ -2342,20 +3088,26 @@ struct nomadik_vpip_param vpip_default_p
+ { FLADriverLowLevelParameters_bNVM_PS_IBias , 0x3f2c, 0x0000 },
+ { FLADriverLowLevelParameters_bNVM_PS_RampGain , 0x3f2e, 0x0000 },
{ FLADriverLowLevelParameters_bNVM_PS_Type , 0x3f30, 0x0000 },
{ FLADriverLowLevelParameters_uwNVM_minidriver_m_c_LSByte , 0x3f34, 0x0000 },
{ FLADriverLowLevelParameters_uwNVM_minidriver_m_c_MSByte , 0x3f33, 0x0000 },
@@ -1753,7 +1970,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FLADriverControls_bMMode , 0x3f80, 0x0000 },
{ FLADriverControls_wTargetPosition_LSByte , 0x3f84, 0x0000 },
{ FLADriverControls_wTargetPosition_MSByte , 0x3f83, 0x0000 },
-@@ -2354,6 +3103,9 @@ struct nomadik_vpip_param vpip_default_p
+ { FLADriverControls_wPositionTolerance_LSByte , 0x3f88, 0x0000 },
+ { FLADriverControls_wPositionTolerance_MSByte , 0x3f87, 0x0000 },
+ { FLADriverControls_uwTimeLimit_ms_LSByte , 0x3f8c, 0x0000 },
+ { FLADriverControls_uwTimeLimit_ms_MSByte , 0x3f8b, 0x0000 },
{ FLADriverControls_bTrigger , 0x3f8e, 0x0000 },
{ FLADriverControls_bSlewMode , 0x3f90, 0x0000 },
{ FLADriverControls_bSlewRate , 0x3f92, 0x0000 },
@@ -1763,7 +1983,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FLADriverStatus_wLensPosition_LSByte , 0x4002, 0x0000 },
{ FLADriverStatus_wLensPosition_MSByte , 0x4001, 0x0000 },
{ FLADriverStatus_fLensIsMoving , 0x4004, 0x0000 },
-@@ -2365,6 +3117,9 @@ struct nomadik_vpip_param vpip_default_p
+ { FLADriverStatus_fLimitsExceeded , 0x4006, 0x0000 },
+ { FLADriverStatus_fLensIsAtHome , 0x4008, 0x0000 },
+@@ -2363,10 +3115,13 @@ struct nomadik_vpip_param vpip_default_p
+ { FLADriverStatus_bSkippedFrames , 0x400c, 0x0000 },
+ { FLADriverStatus_bCycles , 0x400e, 0x0000 },
{ FLADriverStatus_bMiniDriverTimeoutError , 0x4010, 0x0000 },
{ FLADriverStatus_wTargetPosition , 0x4012, 0x0000 },
{ FLADriverStatus_bLowLevelPosition , 0x4014, 0x0000 },
@@ -1773,7 +1997,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FocusControls_fErrorReset , 0x4080, 0x0000 },
{ FocusControls_bRange , 0x4082, 0x0000 },
{ FocusControls_bMode , 0x4084, 0x0000 },
-@@ -2376,6 +3131,9 @@ struct nomadik_vpip_param vpip_default_p
+ { FocusControls_bAFCommand , 0x4086, 0x0000 },
+ { FocusControls_bLensCommand , 0x4088, 0x0000 },
+@@ -2374,10 +3129,13 @@ struct nomadik_vpip_param vpip_default_p
+ { FocusControls_fTestCoinEnabled , 0x408c, 0x0000 },
+ { FocusControls_bControlCoin , 0x408e, 0x0000 },
{ FocusControls_fInternalStats_Disable , 0x4090, 0x0000 },
{ FocusControls_bActuator_Disable , 0x4092, 0x0000 },
{ FocusControls_fInhibitAutoMetering , 0x4094, 0x0000 },
@@ -1783,7 +2011,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FocusStatus_bModeStatus , 0x4100, 0x0000 },
{ FocusStatus_bAFCommandStatus , 0x4102, 0x0000 },
{ FocusStatus_bLensCommandStatus , 0x4104, 0x0000 },
-@@ -2391,6 +3149,30 @@ struct nomadik_vpip_param vpip_default_p
+ { FocusStatus_fAutoFocusEnabled , 0x4106, 0x0000 },
+ { FocusStatus_bRange , 0x4108, 0x0000 },
+@@ -2389,10 +3147,34 @@ struct nomadik_vpip_param vpip_default_p
+ { FocusStatus_fRunForTest , 0x4114, 0x0000 },
+ { FocusStatus_bStatusCoin , 0x4116, 0x0000 },
{ FocusStatus_fInternalStats_Disabled , 0x4118, 0x0000 },
{ FocusStatus_bActuator_Disabled , 0x411a, 0x0000 },
{ FocusStatus_bLastUsedAFSensor , 0x411c, 0x0000 },
@@ -1814,7 +2046,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FocusRangeConstants_wFullRange_LensMinPosition_LSByte , 0x4182, 0x0000 },
{ FocusRangeConstants_wFullRange_LensMinPosition_MSByte , 0x4181, 0x0000 },
{ FocusRangeConstants_wFullRange_LensMaxPosition_LSByte , 0x4186, 0x0000 },
-@@ -2409,6 +3191,34 @@ struct nomadik_vpip_param vpip_default_p
+ { FocusRangeConstants_wFullRange_LensMaxPosition_MSByte , 0x4185, 0x03ff },
+ { FocusRangeConstants_wFullRange_LensRecoveryPosition_LSByte , 0x418a, 0x0000 },
+@@ -2407,10 +3189,38 @@ struct nomadik_vpip_param vpip_default_p
+ { FocusRangeConstants_wMacro_LensMinPosition_MSByte , 0x4199, 0x0000 },
+ { FocusRangeConstants_wMacro_LensMaxPosition_LSByte , 0x419e, 0x0000 },
{ FocusRangeConstants_wMacro_LensMaxPosition_MSByte , 0x419d, 0x03ff },
{ FocusRangeConstants_wMacro_LensRecoveryPosition_LSByte , 0x41a2, 0x0000 },
{ FocusRangeConstants_wMacro_LensRecoveryPosition_MSByte , 0x41a1, 0x01ff },
@@ -1849,7 +2085,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusControls_bHostCmd , 0x4200, 0x0000 },
{ AutoFocusControls_fFreezeIfStable , 0x4202, 0x0000 },
{ AutoFocusControls_fFMTesting_AutoDisable , 0x4204, 0x0001 },
-@@ -2432,6 +3242,35 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusControls_fFastAFAlgoStart , 0x4206, 0x0000 },
+ { AutoFocusControls_fBackLight_Enable , 0x4208, 0x0000 },
+@@ -2430,10 +3240,39 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusControls_fEnableTrakingZoneVariation , 0x4224, 0x0000 },
+ { AutoFocusControls_fEnableFunctionThresholdTest , 0x4226, 0x0001 },
{ AutoFocusControls_fForceTestState , 0x4228, 0x0000 },
{ AutoFocusControls_bManualAFNextState , 0x422a, 0x0000 },
{ AutoFocusControls_fResetHCSPos , 0x422c, 0x0001 },
@@ -1885,7 +2125,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusConstants_bCoarseStep , 0x4280, 0x0078 },
{ AutoFocusConstants_bFineStep , 0x4282, 0x0014 },
{ AutoFocusConstants_bFullSearchStep , 0x4284, 0x0000 },
-@@ -2456,11 +3295,17 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusConstants_bLeakyIntegratorConstant , 0x4286, 0x0000 },
+ { AutoFocusConstants_uwFineThreshold_LSByte , 0x428a, 0x0000 },
+@@ -2454,15 +3293,21 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusConstants_bLightGap , 0x42a6, 0x0000 },
+ { AutoFocusConstants_uwDeltaValue_LSByte , 0x42aa, 0x0000 },
{ AutoFocusConstants_uwDeltaValue_MSByte , 0x42a9, 0x0000 },
{ AutoFocusConstants_uwMaxFineTh_LSByte , 0x42ae, 0x0000 },
{ AutoFocusConstants_uwMaxFineTh_MSByte , 0x42ad, 0x0000 },
@@ -1903,7 +2147,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusStatus_bCycles , 0x4380, 0x0000 },
{ AutoFocusStatus_bHostCmd , 0x4382, 0x0000 },
{ AutoFocusStatus_bAF_PrevState , 0x4384, 0x0000 },
-@@ -2495,10 +3340,16 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusStatus_bAF_State , 0x4386, 0x0000 },
+ { AutoFocusStatus_bAF_NextState , 0x4388, 0x0000 },
+@@ -2493,14 +3338,20 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusStatus_uwTotalCoarseVariation_LSByte , 0x43bc, 0x0000 },
+ { AutoFocusStatus_uwTotalCoarseVariation_MSByte , 0x43bb, 0x0000 },
{ AutoFocusStatus_uwTotalFineVariation_LSByte , 0x43c0, 0x0000 },
{ AutoFocusStatus_uwTotalFineVariation_MSByte , 0x43bf, 0x0000 },
{ AutoFocusStatus_bCountVariationRegion , 0x43c2, 0x0000 },
@@ -1920,7 +2168,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusMeasureData_udwFocusMeasure_Byte0 , 0x4480, 0x0000 },
{ AutoFocusMeasureData_udwFocusMeasure_Byte1 , 0x4482, 0x0000 },
{ AutoFocusMeasureData_udwFocusMeasure_Byte2 , 0x4484, 0x0000 },
-@@ -2555,6 +3406,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusMeasureData_udwFocusMeasure_Byte3 , 0x4486, 0x0000 },
+ { AutoFocusMeasureData_udwPrevFocusMeasure_Byte0 , 0x4488, 0x0000 },
+@@ -2553,24 +3404,33 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusMeasureData_udwCurrentFocusMeasureDifference_Byte3 , 0x44e6, 0x0000 },
+ { AutoFocusMeasureData_udwOldTrackingFocusMeasure_Byte0 , 0x44e8, 0x0000 },
{ AutoFocusMeasureData_udwOldTrackingFocusMeasure_Byte1 , 0x44ea, 0x0000 },
{ AutoFocusMeasureData_udwOldTrackingFocusMeasure_Byte2 , 0x44ec, 0x0000 },
{ AutoFocusMeasureData_udwOldTrackingFocusMeasure_Byte3 , 0x44ee, 0x0000 },
@@ -1930,7 +2182,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusWeightControls_bWeight_0 , 0x4500, 0x0000 },
{ AutoFocusWeightControls_bWeight_1 , 0x4502, 0x0000 },
{ AutoFocusWeightControls_bWeight_2 , 0x4504, 0x0000 },
-@@ -2562,6 +3416,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusWeightControls_bWeight_3 , 0x4506, 0x0000 },
{ AutoFocusWeightControls_bWeight_4 , 0x4508, 0x0000 },
{ AutoFocusWeightControls_bWeight_5 , 0x450a, 0x0000 },
{ AutoFocusWeightControls_bWeight_6 , 0x450c, 0x0000 },
@@ -1940,7 +2192,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusDynamicWeight_bWeight_0 , 0x4580, 0x0000 },
{ AutoFocusDynamicWeight_bWeight_1 , 0x4582, 0x0000 },
{ AutoFocusDynamicWeight_bWeight_2 , 0x4584, 0x0000 },
-@@ -2569,6 +3426,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusDynamicWeight_bWeight_3 , 0x4586, 0x0000 },
{ AutoFocusDynamicWeight_bWeight_4 , 0x4588, 0x0000 },
{ AutoFocusDynamicWeight_bWeight_5 , 0x458a, 0x0000 },
{ AutoFocusDynamicWeight_bWeight_6 , 0x458c, 0x0000 },
@@ -1950,7 +2202,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusThresholds_uwCoarseThreshold_LSByte , 0x4602, 0x0000 },
{ AutoFocusThresholds_uwCoarseThreshold_MSByte , 0x4601, 0x0000 },
{ AutoFocusThresholds_uwFineThreshold_LSByte , 0x4606, 0x0000 },
-@@ -2585,6 +3445,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusThresholds_uwFineThreshold_MSByte , 0x4605, 0x0000 },
+ { AutoFocusThresholds_uwBeforeMotionBlur_LSByte , 0x460a, 0x0000 },
+@@ -2583,10 +3443,13 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusThresholds_udwCurrentVariation_Byte3 , 0x4616, 0x0000 },
+ { AutoFocusThresholds_udwLowFocusMeasureValue_Byte0 , 0x4618, 0x0000 },
{ AutoFocusThresholds_udwLowFocusMeasureValue_Byte1 , 0x461a, 0x0000 },
{ AutoFocusThresholds_udwLowFocusMeasureValue_Byte2 , 0x461c, 0x0000 },
{ AutoFocusThresholds_udwLowFocusMeasureValue_Byte3 , 0x461e, 0x0000 },
@@ -1960,7 +2216,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusHeuristicConstants_uwLensPositionInputMax_LSByte , 0x4682, 0x0000 },
{ AutoFocusHeuristicConstants_uwLensPositionInputMax_MSByte , 0x4681, 0x0000 },
{ AutoFocusHeuristicConstants_uwLensPositionInputMin_LSByte , 0x4686, 0x0000 },
-@@ -2601,6 +3464,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusHeuristicConstants_uwLensPositionInputMin_MSByte , 0x4685, 0x0000 },
+ { AutoFocusHeuristicConstants_bBrightnessInputMax , 0x4688, 0x0000 },
+@@ -2599,10 +3462,13 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusHeuristicConstants_uwFineToCoarseMax_MSByte , 0x4695, 0x0000 },
+ { AutoFocusHeuristicConstants_uwFineToCoarseMin_LSByte , 0x469a, 0x0000 },
{ AutoFocusHeuristicConstants_uwFineToCoarseMin_MSByte , 0x4699, 0x0000 },
{ AutoFocusHeuristicConstants_bHighToMaxFMShiftFactor , 0x469c, 0x0000 },
{ AutoFocusHeuristicConstants_bLowToHighFMShiftFactor , 0x469e, 0x0000 },
@@ -1970,7 +2230,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusThHeuristicInput_udwFocusMeasureInputMax_Byte0 , 0x4700, 0x0000 },
{ AutoFocusThHeuristicInput_udwFocusMeasureInputMax_Byte1 , 0x4702, 0x0000 },
{ AutoFocusThHeuristicInput_udwFocusMeasureInputMax_Byte2 , 0x4704, 0x0000 },
-@@ -2616,19 +3482,31 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusThHeuristicInput_udwFocusMeasureInputMax_Byte3 , 0x4706, 0x0000 },
+ { AutoFocusThHeuristicInput_udwFocusMeasureInputMin_Byte0 , 0x4708, 0x0000 },
+@@ -2614,23 +3480,35 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusThHeuristicInput_udwFocusMeasureInput_Byte2 , 0x4714, 0x0000 },
+ { AutoFocusThHeuristicInput_udwFocusMeasureInput_Byte3 , 0x4716, 0x0000 },
{ AutoFocusThHeuristicInput_uwLensPositionInput_LSByte , 0x471a, 0x0000 },
{ AutoFocusThHeuristicInput_uwLensPositionInput_MSByte , 0x4719, 0x0000 },
{ AutoFocusThHeuristicInput_bBrightnessInput , 0x471c, 0x0000 },
@@ -2004,7 +2268,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ MiscPageElements_fEnableIntelligentFlash , 0x4904, 0x0000 },
{ MiscPageElements_fEligibleFrameForMetering , 0x4906, 0x0000 },
{ MiscPageElements_fFlashGunIlluminatedFrameStreamed , 0x4908, 0x0000 },
-@@ -2642,7 +3520,13 @@ struct nomadik_vpip_param vpip_default_p
+ { MiscPageElements_VpipCut , 0x490a, 0x0000 },
+ { MiscPageElements_bGPIOClockFrequency_Mhz , 0x490c, 0x0000 },
+@@ -2640,42 +3518,60 @@ struct nomadik_vpip_param vpip_default_p
+ { MiscPageElements_fEnableDelayWhenStoppingSensor , 0x4914, 0x0000 },
+ { MiscPageElements_fTriggerFlashOnStreaming , 0x4916, 0x0000 },
{ MiscPageElements_fDoNotOutputFrameInIntelligentFlash , 0x4918, 0x0000 },
{ MiscPageElements_fDisableToshibaInit , 0x491a, 0x0000 },
{ MiscPageElements_bNumberofFramesTobeSkippedByRx , 0x491c, 0x0000 },
@@ -2018,7 +2286,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ MasterI2cClockControl_bCountFall , 0x4a00, 0x0000 },
{ MasterI2cClockControl_bCountRise , 0x4a02, 0x0000 },
{ MasterI2cClockControl_bCountHigh , 0x4a04, 0x0000 },
-@@ -2652,6 +3536,9 @@ struct nomadik_vpip_param vpip_default_p
+ { MasterI2cClockControl_bCountBuffer , 0x4a06, 0x0000 },
+ { MasterI2cClockControl_bCountHoldData , 0x4a08, 0x0000 },
+ { MasterI2cClockControl_bCountSetupData , 0x4a0a, 0x0000 },
{ MasterI2cClockControl_bCountHoldStart , 0x4a0c, 0x0000 },
{ MasterI2cClockControl_bCountSetupStart , 0x4a0e, 0x0000 },
{ MasterI2cClockControl_bCountSetupStop , 0x4a10, 0x0000 },
@@ -2028,7 +2298,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ZoomMgrFOVCtrl_bShiftCenter , 0x4a80, 0x0000 },
{ ZoomMgrFOVCtrl_uwXOrigin_LSByte , 0x4a84, 0x0000 },
{ ZoomMgrFOVCtrl_uwXOrigin_MSByte , 0x4a83, 0x0000 },
-@@ -2660,11 +3547,17 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrFOVCtrl_uwYOrigin_LSByte , 0x4a88, 0x0000 },
+ { ZoomMgrFOVCtrl_uwYOrigin_MSByte , 0x4a87, 0x0000 },
{ ZoomMgrFOVCtrl_fRestrictMaxFOVToChosenFOV , 0x4a8a, 0x0000 },
{ ZoomMgrFOVCtrl_fCalculateMinFOVAlways , 0x4a8c, 0x0000 },
{ ZoomMgrFOVCtrl_fInhibitMaxFOVAtModeStaticChange , 0x4a8e, 0x0000 },
@@ -2046,7 +2317,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ZoomMgrStripeCtrl_bStripeControl , 0x4b80, 0x0000 },
{ ZoomMgrStripeCtrl_uwStripeStartAddr_LSByte , 0x4b84, 0x0000 },
{ ZoomMgrStripeCtrl_uwStripeStartAddr_MSByte , 0x4b83, 0x0000 },
-@@ -2674,6 +3567,9 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrStripeCtrl_uwStripeSize_LSByte , 0x4b88, 0x0000 },
+ { ZoomMgrStripeCtrl_uwStripeSize_MSByte , 0x4b87, 0x0000 },
+ { ZoomMgrStripeCtrl_uwStripeInMinLineSize_LSByte , 0x4b8c, 0x0000 },
{ ZoomMgrStripeCtrl_uwStripeInMinLineSize_MSByte , 0x4b8b, 0x0000 },
{ ZoomMgrStripeCtrl_uwBmsFrameLength_LSByte , 0x4b90, 0x0000 },
{ ZoomMgrStripeCtrl_uwBmsFrameLength_MSByte , 0x4b8f, 0x0000 },
@@ -2056,7 +2329,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ LftStripeParam_uwGPSISize_LSByte , 0x4c02, 0x0000 },
{ LftStripeParam_uwGPSISize_MSByte , 0x4c01, 0x0000 },
{ LftStripeParam_uwGPSOSize_LSByte , 0x4c06, 0x0000 },
-@@ -2694,6 +3590,9 @@ struct nomadik_vpip_param vpip_default_p
+ { LftStripeParam_uwGPSOSize_MSByte , 0x4c05, 0x0000 },
+ { LftStripeParam_uwRightBorder_LSByte , 0x4c0a, 0x0000 },
+@@ -2692,10 +3588,13 @@ struct nomadik_vpip_param vpip_default_p
+ { LftStripeParam_uwStripeInCropSize_MSByte , 0x4c1d, 0x0000 },
+ { LftStripeParam_uwStripeOutCropStart_LSByte , 0x4c22, 0x0000 },
{ LftStripeParam_uwStripeOutCropStart_MSByte , 0x4c21, 0x0000 },
{ LftStripeParam_uwStripeOutCropSize_LSByte , 0x4c26, 0x0000 },
{ LftStripeParam_uwStripeOutCropSize_MSByte , 0x4c25, 0x0000 },
@@ -2066,7 +2343,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ RgtStripeParam_uwGPSISize_LSByte , 0x4c82, 0x0000 },
{ RgtStripeParam_uwGPSISize_MSByte , 0x4c81, 0x0000 },
{ RgtStripeParam_uwGPSOSize_LSByte , 0x4c86, 0x0000 },
-@@ -2714,6 +3613,9 @@ struct nomadik_vpip_param vpip_default_p
+ { RgtStripeParam_uwGPSOSize_MSByte , 0x4c85, 0x0000 },
+ { RgtStripeParam_uwRightBorder_LSByte , 0x4c8a, 0x0000 },
+@@ -2712,34 +3611,70 @@ struct nomadik_vpip_param vpip_default_p
+ { RgtStripeParam_uwStripeInCropSize_MSByte , 0x4c9d, 0x0000 },
+ { RgtStripeParam_uwStripeOutCropStart_LSByte , 0x4ca2, 0x0000 },
{ RgtStripeParam_uwStripeOutCropStart_MSByte , 0x4ca1, 0x0000 },
{ RgtStripeParam_uwStripeOutCropSize_LSByte , 0x4ca6, 0x0000 },
{ RgtStripeParam_uwStripeOutCropSize_MSByte , 0x4ca5, 0x0000 },
@@ -2076,7 +2357,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ DigitalGainStatus_uwCodedGreen1Gain_LSByte , 0x4d02, 0x0000 },
{ DigitalGainStatus_uwCodedGreen1Gain_MSByte , 0x4d01, 0x0000 },
{ DigitalGainStatus_uwCodedRedGain_LSByte , 0x4d06, 0x0000 },
-@@ -2722,10 +3624,16 @@ struct nomadik_vpip_param vpip_default_p
+ { DigitalGainStatus_uwCodedRedGain_MSByte , 0x4d05, 0x0000 },
+ { DigitalGainStatus_uwCodedBlueGain_LSByte , 0x4d0a, 0x0000 },
{ DigitalGainStatus_uwCodedBlueGain_MSByte , 0x4d09, 0x0000 },
{ DigitalGainStatus_uwCodedGreen2Gain_LSByte , 0x4d0e, 0x0000 },
{ DigitalGainStatus_uwCodedGreen2Gain_MSByte , 0x4d0d, 0x0000 },
@@ -2093,7 +2375,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AntiFlickerExposureStatus_fpFlickerFreePeriod_us_LSByte , 0x4e02, 0x0000 },
{ AntiFlickerExposureStatus_fpFlickerFreePeriod_us_MSByte , 0x4e01, 0x0000 },
{ AntiFlickerExposureStatus_fpGainedFlickerFreeTimePeriod_us_LSByte , 0x4e06, 0x0000 },
-@@ -2734,10 +3642,37 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiFlickerExposureStatus_fpGainedFlickerFreeTimePeriod_us_MSByte , 0x4e05, 0x0000 },
+ { AntiFlickerExposureStatus_uwMaxFlickerFreeBunches_LSByte , 0x4e0a, 0x0000 },
{ AntiFlickerExposureStatus_uwMaxFlickerFreeBunches_MSByte , 0x4e09, 0x0000 },
{ AntiFlickerExposureStatus_fpConstrainedFlickerFreePeriod_us_LSByte , 0x4e0e, 0x0000 },
{ AntiFlickerExposureStatus_fpConstrainedFlickerFreePeriod_us_MSByte , 0x4e0d, 0x0000 },
@@ -2131,7 +2414,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorSetupFarSensor_uwGuaranteedDataSaturationLevel_LSByte , 0x5002, 0x0000 },
{ SensorSetupFarSensor_uwGuaranteedDataSaturationLevel_MSByte , 0x5001, 0x043f },
{ SensorSetupFarSensor_uwMinimumSensorRxPixelValue_LSByte , 0x5006, 0x0000 },
-@@ -2751,6 +3686,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorSetupFarSensor_uwMinimumSensorRxPixelValue_MSByte , 0x5005, 0x0004 },
+ { SensorSetupFarSensor_uwMaximumSensorRxPixelValue_LSByte , 0x500a, 0x0000 },
+@@ -2749,10 +3684,13 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorSetupFarSensor_fpGreenTiltGain_LSByte , 0x5012, 0x0000 },
+ { SensorSetupFarSensor_fpGreenTiltGain_MSByte , 0x5011, 0x3e00 },
{ SensorSetupFarSensor_fpBlueTiltGain_LSByte , 0x5016, 0x0000 },
{ SensorSetupFarSensor_fpBlueTiltGain_MSByte , 0x5015, 0x3e00 },
{ SensorSetupFarSensor_BlackCorrectionOffset , 0x5018, 0x0000 },
@@ -2141,7 +2428,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorSetupNearSensor_uwGuaranteedDataSaturationLevel_LSByte , 0x5082, 0x0000 },
{ SensorSetupNearSensor_uwGuaranteedDataSaturationLevel_MSByte , 0x5081, 0x0000 },
{ SensorSetupNearSensor_uwMinimumSensorRxPixelValue_LSByte , 0x5086, 0x0000 },
-@@ -2764,6 +3702,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorSetupNearSensor_uwMinimumSensorRxPixelValue_MSByte , 0x5085, 0x0000 },
+ { SensorSetupNearSensor_uwMaximumSensorRxPixelValue_LSByte , 0x508a, 0x0000 },
+@@ -2762,10 +3700,13 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorSetupNearSensor_fpGreenTiltGain_LSByte , 0x5092, 0x0000 },
+ { SensorSetupNearSensor_fpGreenTiltGain_MSByte , 0x5091, 0x0000 },
{ SensorSetupNearSensor_fpBlueTiltGain_LSByte , 0x5096, 0x0000 },
{ SensorSetupNearSensor_fpBlueTiltGain_MSByte , 0x5095, 0x0000 },
{ SensorSetupNearSensor_BlackCorrectionOffset , 0x5098, 0x0000 },
@@ -2151,7 +2442,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ToshibaOtpRead_otp_inf_2 , 0x5100, 0x0000 },
{ ToshibaOtpRead_otp_inf_1 , 0x5102, 0x0000 },
{ ToshibaOtpRead_otp_inf_0 , 0x5104, 0x0000 },
-@@ -2775,8 +3716,24 @@ struct nomadik_vpip_param vpip_default_p
+ { ToshibaOtpRead_otp_mac_2 , 0x5106, 0x0000 },
+ { ToshibaOtpRead_otp_mac_1 , 0x5108, 0x0000 },
+@@ -2773,20 +3714,71 @@ struct nomadik_vpip_param vpip_default_p
+ { ToshibaOtpRead_otp_posA_1 , 0x510c, 0x0000 },
+ { ToshibaOtpRead_otp_posA_0 , 0x510e, 0x0000 },
{ ToshibaOtpRead_otp_posB_1 , 0x5110, 0x0000 },
{ ToshibaOtpRead_otp_posB_0 , 0x5112, 0x0000 },
{ ToshibaOtpRead_otp_register_map_ver , 0x5114, 0x0000 },
@@ -2176,7 +2471,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ReferenceIlluminantCasts_fpCAST0_LSByte , 0x5202, 0x0000 },
{ ReferenceIlluminantCasts_fpCAST0_MSByte , 0x5201, 0x38b8 },
{ ReferenceIlluminantCasts_fpCAST1_LSByte , 0x5206, 0x0000 },
-@@ -2785,6 +3742,41 @@ struct nomadik_vpip_param vpip_default_p
+ { ReferenceIlluminantCasts_fpCAST1_MSByte , 0x5205, 0x396d },
+ { ReferenceIlluminantCasts_fpCAST2_LSByte , 0x520a, 0x0000 },
{ ReferenceIlluminantCasts_fpCAST2_MSByte , 0x5209, 0x3a1b },
{ ReferenceIlluminantCasts_fpCAST3_LSByte , 0x520e, 0x0000 },
{ ReferenceIlluminantCasts_fpCAST3_MSByte , 0x520d, 0x3af2 },
@@ -2218,7 +2514,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AdaptiveAVParameter_B_bAvUnityOffset_Day , 0x5280, 0x0040 },
{ AdaptiveAVParameter_B_bAvCoeffR2_Day , 0x5282, 0x003e },
{ AdaptiveAVParameter_B_bAvCoeffR4_Day , 0x5284, 0x00e8 },
-@@ -2813,6 +3805,38 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_B_wAvHOffset_Day_LSByte , 0x5288, 0x0000 },
+ { AdaptiveAVParameter_B_wAvHOffset_Day_MSByte , 0x5287, 0x0003 },
+@@ -2811,10 +3803,42 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_B_bAvCoeffR4_HOR , 0x52ae, 0x00f0 },
+ { AdaptiveAVParameter_B_wAvHOffset_HOR_LSByte , 0x52b2, 0x0000 },
{ AdaptiveAVParameter_B_wAvHOffset_HOR_MSByte , 0x52b1, 0x000b },
{ AdaptiveAVParameter_B_wAvVOffset_HOR_LSByte , 0x52b6, 0x0000 },
{ AdaptiveAVParameter_B_wAvVOffset_HOR_MSByte , 0x52b5, 0x001d },
@@ -2257,7 +2557,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AdaptiveAVParameter_GB_bAvUnityOffset_Day , 0x5300, 0x0040 },
{ AdaptiveAVParameter_GB_bAvCoeffR2_Day , 0x5302, 0x0047 },
{ AdaptiveAVParameter_GB_bAvCoeffR4_Day , 0x5304, 0x00ec },
-@@ -2841,6 +3865,39 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_GB_wAvHOffset_Day_LSByte , 0x5308, 0x0000 },
+ { AdaptiveAVParameter_GB_wAvHOffset_Day_MSByte , 0x5307, 0x000a },
+@@ -2839,10 +3863,43 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_GB_bAvCoeffR4_HOR , 0x532e, 0x00f0 },
+ { AdaptiveAVParameter_GB_wAvHOffset_HOR_LSByte , 0x5332, 0x0000 },
{ AdaptiveAVParameter_GB_wAvHOffset_HOR_MSByte , 0x5331, 0x000c },
{ AdaptiveAVParameter_GB_wAvVOffset_HOR_LSByte , 0x5336, 0x0000 },
{ AdaptiveAVParameter_GB_wAvVOffset_HOR_MSByte , 0x5335, 0x0014 },
@@ -2297,7 +2601,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AdaptiveAVParameter_GR_bAvUnityOffset_Day , 0x5380, 0x0040 },
{ AdaptiveAVParameter_GR_bAvCoeffR2_Day , 0x5382, 0x0048 },
{ AdaptiveAVParameter_GR_bAvCoeffR4_Day , 0x5384, 0x00e8 },
-@@ -2869,6 +3926,38 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_GR_wAvHOffset_Day_LSByte , 0x5388, 0x0000 },
+ { AdaptiveAVParameter_GR_wAvHOffset_Day_MSByte , 0x5387, 0x0009 },
+@@ -2867,10 +3924,42 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_GR_bAvCoeffR4_HOR , 0x53ae, 0x00ef },
+ { AdaptiveAVParameter_GR_wAvHOffset_HOR_LSByte , 0x53b2, 0x0000 },
{ AdaptiveAVParameter_GR_wAvHOffset_HOR_MSByte , 0x53b1, 0x000c },
{ AdaptiveAVParameter_GR_wAvVOffset_HOR_LSByte , 0x53b6, 0x0000 },
{ AdaptiveAVParameter_GR_wAvVOffset_HOR_MSByte , 0x53b5, 0x0001 },
@@ -2336,7 +2644,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AdaptiveAVParameter_R_bAvUnityOffset_Day , 0x5400, 0x0040 },
{ AdaptiveAVParameter_R_bAvCoeffR2_Day , 0x5402, 0x0067 },
{ AdaptiveAVParameter_R_bAvCoeffR4_Day , 0x5404, 0x00f6 },
-@@ -2897,17 +3986,39 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_R_wAvHOffset_Day_LSByte , 0x5408, 0x0000 },
+ { AdaptiveAVParameter_R_wAvHOffset_Day_MSByte , 0x5407, 0x000a },
+@@ -2895,21 +3984,43 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_R_bAvCoeffR4_HOR , 0x542e, 0x00f7 },
+ { AdaptiveAVParameter_R_wAvHOffset_HOR_LSByte , 0x5432, 0x0000 },
{ AdaptiveAVParameter_R_wAvHOffset_HOR_MSByte , 0x5431, 0x000a },
{ AdaptiveAVParameter_R_wAvVOffset_HOR_LSByte , 0x5436, 0x0000 },
{ AdaptiveAVParameter_R_wAvVOffset_HOR_MSByte , 0x5435, 0x0004 },
@@ -2376,7 +2688,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ DynamicConstrainedWBControls_fpRedA_LSByte , 0x5582, 0x0000 },
{ DynamicConstrainedWBControls_fpRedA_MSByte , 0x5581, 0x3881 },
{ DynamicConstrainedWBControls_fpBlueA_LSByte , 0x5586, 0x0000 },
-@@ -2919,6 +4030,8 @@ struct nomadik_vpip_param vpip_default_p
+ { DynamicConstrainedWBControls_fpBlueA_MSByte , 0x5585, 0x3c68 },
+ { DynamicConstrainedWBControls_fpDamperLowThreshold_LSByte , 0x558a, 0x0000 },
+@@ -2917,10 +4028,12 @@ struct nomadik_vpip_param vpip_default_p
+ { DynamicConstrainedWBControls_fpMinimumDamperOutput_LSByte , 0x558e, 0x0000 },
+ { DynamicConstrainedWBControls_fpMinimumDamperOutput_MSByte , 0x558d, 0x3a66 },
{ DynamicConstrainedWBControls_fpDamperHighThreshold_LSByte , 0x5592, 0x0000 },
{ DynamicConstrainedWBControls_fpDamperHighThreshold_MSByte , 0x5591, 0x5a71 },
{ DynamicConstrainedWBControls_fDamperDisable , 0x5594, 0x0000 },
@@ -2385,7 +2701,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ Toshiba_AF_NVM_Read_NVM_Far2Near_inf_LSByte , 0x5602, 0x0000 },
{ Toshiba_AF_NVM_Read_NVM_Far2Near_inf_MSByte , 0x5601, 0x0000 },
{ Toshiba_AF_NVM_Read_NVM_Near2Far_inf_LSByte , 0x5606, 0x0000 },
-@@ -2931,6 +4044,23 @@ struct nomadik_vpip_param vpip_default_p
+ { Toshiba_AF_NVM_Read_NVM_Near2Far_inf_MSByte , 0x5605, 0x0000 },
+ { Toshiba_AF_NVM_Read_NVM_Far2Near_mac_LSByte , 0x560a, 0x0000 },
+@@ -2929,27 +4042,81 @@ struct nomadik_vpip_param vpip_default_p
+ { Toshiba_AF_NVM_Read_NVM_Near2Far_mac_MSByte , 0x560d, 0x0000 },
+ { Toshiba_AF_NVM_Read_NVM_Pos_A_LSByte , 0x5612, 0x0000 },
{ Toshiba_AF_NVM_Read_NVM_Pos_A_MSByte , 0x5611, 0x0000 },
{ Toshiba_AF_NVM_Read_NVM_Pos_B_LSByte , 0x5616, 0x0000 },
{ Toshiba_AF_NVM_Read_NVM_Pos_B_MSByte , 0x5615, 0x0000 },
@@ -2409,7 +2729,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ Toshiba_Vcm_Parameters_wLowLevelMacroPos_LSByte , 0x5682, 0x0000 },
{ Toshiba_Vcm_Parameters_wLowLevelMacroPos_MSByte , 0x5681, 0x0000 },
{ Toshiba_Vcm_Parameters_wLowLevelInfinityPos_LSByte , 0x5686, 0x0000 },
-@@ -2941,13 +4071,50 @@ struct nomadik_vpip_param vpip_default_p
+ { Toshiba_Vcm_Parameters_wLowLevelInfinityPos_MSByte , 0x5685, 0x0000 },
+ { Toshiba_Vcm_Parameters_bSlewControlModeEnable , 0x5688, 0x0000 },
+ { Toshiba_Vcm_Parameters_bSlewModeForSmallerStep , 0x568a, 0x0001 },
+ { Toshiba_Vcm_Parameters_bSlewRateForSmallerStep , 0x568c, 0x0004 },
{ Toshiba_Vcm_Parameters_bSlewModeForLargerStep , 0x568e, 0x0008 },
{ Toshiba_Vcm_Parameters_bSlewRateForLargerStep , 0x5690, 0x0007 },
{ Toshiba_Vcm_Parameters_bThresholdStepSize , 0x5692, 0x00b0 },
@@ -2460,7 +2783,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine1_ColourMatrixFarSensor_fpRInR_LSByte , 0x5802, 0x0000 },
{ ColourEngine1_ColourMatrixFarSensor_fpRInR_MSByte , 0x5801, 0x3f0c },
{ ColourEngine1_ColourMatrixFarSensor_fpGInR_LSByte , 0x5806, 0x0000 },
-@@ -2966,6 +4133,8 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine1_ColourMatrixFarSensor_fpGInR_MSByte , 0x5805, 0xb887 },
+ { ColourEngine1_ColourMatrixFarSensor_fpBInR_LSByte , 0x580a, 0x0000 },
+@@ -2964,10 +4131,12 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine1_ColourMatrixFarSensor_fpRInB_MSByte , 0x5819, 0xbc6e },
+ { ColourEngine1_ColourMatrixFarSensor_fpGInB_LSByte , 0x581e, 0x0000 },
{ ColourEngine1_ColourMatrixFarSensor_fpGInB_MSByte , 0x581d, 0xc01b },
{ ColourEngine1_ColourMatrixFarSensor_fpBInB_LSByte , 0x5822, 0x0000 },
{ ColourEngine1_ColourMatrixFarSensor_fpBInB_MSByte , 0x5821, 0x41b7 },
@@ -2469,7 +2796,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine1_ColourMatrixNearSensor_fpRInR_LSByte , 0x5882, 0x0000 },
{ ColourEngine1_ColourMatrixNearSensor_fpRInR_MSByte , 0x5881, 0x0000 },
{ ColourEngine1_ColourMatrixNearSensor_fpGInR_LSByte , 0x5886, 0x0000 },
-@@ -2984,24 +4153,50 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine1_ColourMatrixNearSensor_fpGInR_MSByte , 0x5885, 0x0000 },
+ { ColourEngine1_ColourMatrixNearSensor_fpBInR_LSByte , 0x588a, 0x0000 },
+@@ -2982,106 +4151,155 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine1_ColourMatrixNearSensor_fpRInB_MSByte , 0x5899, 0x0000 },
+ { ColourEngine1_ColourMatrixNearSensor_fpGInB_LSByte , 0x589e, 0x0000 },
{ ColourEngine1_ColourMatrixNearSensor_fpGInB_MSByte , 0x589d, 0x0000 },
{ ColourEngine1_ColourMatrixNearSensor_fpBInB_LSByte , 0x58a2, 0x0000 },
{ ColourEngine1_ColourMatrixNearSensor_fpBInB_MSByte , 0x58a1, 0x0000 },
@@ -2523,7 +2854,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ModeSetupBank3_bActiveSensor , 0x3b98,0x2},
-@@ -3011,20 +4206,25 @@ EXPORT_SYMBOL(vpip_default_params);
+ };
+ EXPORT_SYMBOL(vpip_default_params);
+
struct nomadik_vpip_param vpip_default_params_orig[2700]=
@@ -2552,7 +2885,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ModeManagerStatus_bThisLoLevelState , 0x0100, 0x0000 },
{ ModeManagerStatus_bNextLoLevelState , 0x0102, 0x0000 },
{ ModeManagerStatus_bHiLevelState , 0x0104, 0x0000 },
-@@ -3034,52 +4234,70 @@ struct nomadik_vpip_param vpip_default_p
+ { ModeManagerStatus_bCycles , 0x0106, 0x0000 },
+ { ModeManagerStatus_fModeStaticSetupsChanged , 0x0108, 0x0000 },
+ { ModeManagerStatus_bTestCoin , 0x010a, 0x0000 },
{ ModeManagerStatus_fCycleForTest , 0x010c, 0x0000 },
{ ModeManagerStatus_bNumberOfFramesStreamed , 0x010e, 0x0000 },
{ ModeManagerStatus_bPrevFrameCountForExposure , 0x0110, 0x0000 },
@@ -2649,7 +2984,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ PipeSetupBankB_uwPipeOutputSize_X_LSByte , 0x0402, 0x0000 },
{ PipeSetupBankB_uwPipeOutputSize_X_MSByte , 0x0401, 0x0000 },
{ PipeSetupBankB_uwPipeOutputSize_Y_LSByte , 0x0406, 0x0000 },
-@@ -3092,22 +4310,37 @@ struct nomadik_vpip_param vpip_default_p
+ { PipeSetupBankB_uwPipeOutputSize_Y_MSByte , 0x0405, 0x0000 },
+ { PipeSetupBankB_bPipeOutputFormat , 0x0408, 0x0000 },
+@@ -3090,26 +4308,41 @@ struct nomadik_vpip_param vpip_default_p
+ { PipeSetupBankB_fEnableItuEmbeddedCodes , 0x040e, 0x0000 },
+ { PipeSetupBankB_bPixValidLineTypes , 0x0410, 0x0000 },
{ PipeSetupBankB_fGenerateVSync , 0x0412, 0x0000 },
{ PipeSetupBankB_fCb_Cr_Flip , 0x0414, 0x0000 },
{ PipeSetupBankB_fY_CbCr_Flip , 0x0416, 0x0000 },
@@ -2688,7 +3027,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ LocalPipe0SetupBank_uwPipeOutputSize_X_LSByte , 0x0682, 0x0000 },
{ LocalPipe0SetupBank_uwPipeOutputSize_X_MSByte , 0x0681, 0x0000 },
{ LocalPipe0SetupBank_uwPipeOutputSize_Y_LSByte , 0x0686, 0x0000 },
-@@ -3120,13 +4353,19 @@ struct nomadik_vpip_param vpip_default_p
+ { LocalPipe0SetupBank_uwPipeOutputSize_Y_MSByte , 0x0685, 0x0000 },
+ { LocalPipe0SetupBank_bPipeOutputFormat , 0x0688, 0x0000 },
+@@ -3118,83 +4351,119 @@ struct nomadik_vpip_param vpip_default_p
+ { LocalPipe0SetupBank_fEnableItuEmbeddedCodes , 0x068e, 0x0000 },
+ { LocalPipe0SetupBank_bPixValidLineTypes , 0x0690, 0x0000 },
{ LocalPipe0SetupBank_fGenerateVSync , 0x0692, 0x0000 },
{ LocalPipe0SetupBank_fCb_Cr_Flip , 0x0694, 0x0000 },
{ LocalPipe0SetupBank_fY_CbCr_Flip , 0x0696, 0x0000 },
@@ -2708,7 +3051,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ Pipe0Control_fOverrideOFCropRegisters , 0x070e, 0x0000 },
{ Pipe0Control_uwHCropRising_LSByte , 0x0712, 0x0000 },
{ Pipe0Control_uwHCropRising_MSByte , 0x0711, 0x0000 },
-@@ -3136,27 +4375,45 @@ struct nomadik_vpip_param vpip_default_p
+ { Pipe0Control_uwHCropFalling_LSByte , 0x0716, 0x0000 },
+ { Pipe0Control_uwHCropFalling_MSByte , 0x0715, 0x0000 },
+ { Pipe0Control_uwVCropRisingCrse_LSByte , 0x071a, 0x0000 },
{ Pipe0Control_uwVCropRisingCrse_MSByte , 0x0719, 0x0000 },
{ Pipe0Control_uwVCropFallingCrse_LSByte , 0x071e, 0x0000 },
{ Pipe0Control_uwVCropFallingCrse_MSByte , 0x071d, 0x0000 },
@@ -2757,7 +3102,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ MasterI2cStatus_bResourceStatus , 0x0a00, 0x0000 },
{ MasterI2cStatus_uwI2CClkDiv_LSByte , 0x0a04, 0x0000 },
{ MasterI2cStatus_uwI2CClkDiv_MSByte , 0x0a03, 0x0000 },
-@@ -3164,24 +4421,36 @@ struct nomadik_vpip_param vpip_default_p
+ { MasterI2cStatus_fTransactionError , 0x0a06, 0x0000 },
{ MasterI2cStatus_bNumberOfTransactionFailures , 0x0a08, 0x0000 },
{ MasterI2cStatus_bNumberOfConsecutiveGrabFailures , 0x0a0a, 0x0000 },
{ MasterI2cStatus_bNumberOfForcedReleases , 0x0a0c, 0x0000 },
@@ -2797,7 +3142,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingSensorConstraints_uwMinimumPrePllClockDiv_LSByte , 0x0c02, 0x0000 },
{ VideoTimingSensorConstraints_uwMinimumPrePllClockDiv_MSByte , 0x0c01, 0x0000 },
{ VideoTimingSensorConstraints_uwMaximumPrePllClockDiv_LSByte , 0x0c06, 0x0000 },
-@@ -3192,7 +4461,7 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingSensorConstraints_uwMaximumPrePllClockDiv_MSByte , 0x0c05, 0x0000 },
+ { VideoTimingSensorConstraints_fpMinimumPllInputFrequency_Mhz_LSByte , 0x0c0a, 0x0000 },
+ { VideoTimingSensorConstraints_fpMinimumPllInputFrequency_Mhz_MSByte , 0x0c09, 0x0000 },
+ { VideoTimingSensorConstraints_uwMinimumPllMultiplier_LSByte , 0x0c0e, 0x0000 },
{ VideoTimingSensorConstraints_uwMinimumPllMultiplier_MSByte , 0x0c0d, 0x0000 },
{ VideoTimingSensorConstraints_uwMaximumPllMultiplier_LSByte , 0x0c12, 0x0000 },
{ VideoTimingSensorConstraints_uwMaximumPllMultiplier_MSByte , 0x0c11, 0x0000 },
@@ -2806,7 +3154,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingSensorConstraints_fpMaximumPllOutputFrequency_Mhz_MSByte , 0x0c15, 0x0000 },
{ VideoTimingSensorConstraints_uwMinimumVTSysClockDiv_LSByte , 0x0c1a, 0x0000 },
{ VideoTimingSensorConstraints_uwMinimumVTSysClockDiv_MSByte , 0x0c19, 0x0000 },
-@@ -3214,6 +4483,9 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingSensorConstraints_uwMaximumVTSysClockDiv_LSByte , 0x0c1e, 0x0000 },
+ { VideoTimingSensorConstraints_uwMaximumVTSysClockDiv_MSByte , 0x0c1d, 0x0000 },
+@@ -3212,17 +4481,23 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingSensorConstraints_uwMaximumOPSysClockDiv_MSByte , 0x0c35, 0x0000 },
+ { VideoTimingSensorConstraints_fpMaximumOPSystemClockFrequency_Mhz_LSByte , 0x0c3a, 0x0000 },
{ VideoTimingSensorConstraints_fpMaximumOPSystemClockFrequency_Mhz_MSByte , 0x0c39, 0x0000 },
{ VideoTimingSensorConstraints_fpMaximumOPPixelClockFrequency_Mhz_LSByte , 0x0c3e, 0x0000 },
{ VideoTimingSensorConstraints_fpMaximumOPPixelClockFrequency_Mhz_MSByte , 0x0c3d, 0x0000 },
@@ -2816,7 +3168,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorScalingSubSamplingCapabilities_bSensorScalingMode , 0x0c80, 0x0000 },
{ SensorScalingSubSamplingCapabilities_uwScalerMMin_LSByte , 0x0c84, 0x0000 },
{ SensorScalingSubSamplingCapabilities_uwScalerMMin_MSByte , 0x0c83, 0x0000 },
-@@ -3221,6 +4493,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorScalingSubSamplingCapabilities_uwScalerMMax_LSByte , 0x0c88, 0x0000 },
{ SensorScalingSubSamplingCapabilities_uwScalerMMax_MSByte , 0x0c87, 0x0000 },
{ SensorScalingSubSamplingCapabilities_uwMaxOddInc_LSByte , 0x0c8c, 0x0000 },
{ SensorScalingSubSamplingCapabilities_uwMaxOddInc_MSByte , 0x0c8b, 0x0000 },
@@ -2826,7 +3178,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingOutput_uwPrePllClockDiv_LSByte , 0x0d02, 0x0000 },
{ VideoTimingOutput_uwPrePllClockDiv_MSByte , 0x0d01, 0x0000 },
{ VideoTimingOutput_fpPllInputFrequency_Mhz_LSByte , 0x0d06, 0x0000 },
-@@ -3249,7 +4524,13 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingOutput_fpPllInputFrequency_Mhz_MSByte , 0x0d05, 0x0000 },
+ { VideoTimingOutput_uwPllMultiplier_LSByte , 0x0d0a, 0x0000 },
+@@ -3247,24 +4522,36 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingOutput_uwOPPixelClockDiv_MSByte , 0x0d2d, 0x0000 },
+ { VideoTimingOutput_fpOPPixelClockFrequency_Mhz_LSByte , 0x0d32, 0x0000 },
{ VideoTimingOutput_fpOPPixelClockFrequency_Mhz_MSByte , 0x0d31, 0x0000 },
{ VideoTimingOutput_fpOutputTimingClockDerating_LSByte , 0x0d36, 0x0000 },
{ VideoTimingOutput_fpOutputTimingClockDerating_MSByte , 0x0d35, 0x0000 },
@@ -2840,7 +3196,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingInputsFarSensor_VideoTimingMode , 0x0e00, 0x0001 },
{ VideoTimingInputsFarSensor_bSensorBitsPerSystemClock , 0x0e02, 0x0002 },
{ VideoTimingInputsFarSensor_uwCsiRawFormat_LSByte , 0x0e06, 0x0000 },
-@@ -3258,11 +4539,17 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingInputsFarSensor_uwCsiRawFormat_MSByte , 0x0e05, 0x0808 },
+ { VideoTimingInputsFarSensor_fpHostRxMaxDataRate_Mbps_LSByte , 0x0e0a, 0x0000 },
{ VideoTimingInputsFarSensor_fpHostRxMaxDataRate_Mbps_MSByte , 0x0e09, 0x508a },
{ VideoTimingInputsFarSensor_VsyncPolarity , 0x0e0c, 0x0000 },
{ VideoTimingInputsFarSensor_HsyncPolarity , 0x0e0e, 0x0000 },
@@ -2858,7 +3215,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingFarSensorConstraints_uwMinimumPrePllClockDiv_LSByte , 0x0f02, 0x0000 },
{ VideoTimingFarSensorConstraints_uwMinimumPrePllClockDiv_MSByte , 0x0f01, 0x0000 },
{ VideoTimingFarSensorConstraints_uwMaximumPrePllClockDiv_LSByte , 0x0f06, 0x0000 },
-@@ -3295,6 +4582,9 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingFarSensorConstraints_uwMaximumPrePllClockDiv_MSByte , 0x0f05, 0x0000 },
+ { VideoTimingFarSensorConstraints_fpMinimumPllInputFrequency_Mhz_LSByte , 0x0f0a, 0x0000 },
+@@ -3293,17 +4580,23 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingFarSensorConstraints_uwMaximumOPSysClockDiv_MSByte , 0x0f35, 0x0000 },
+ { VideoTimingFarSensorConstraints_fpMaximumOPSystemClockFrequency_Mhz_LSByte , 0x0f3a, 0x0000 },
{ VideoTimingFarSensorConstraints_fpMaximumOPSystemClockFrequency_Mhz_MSByte , 0x0f39, 0x0000 },
{ VideoTimingFarSensorConstraints_fpMaximumOPPixelClockFrequency_Mhz_LSByte , 0x0f3e, 0x0000 },
{ VideoTimingFarSensorConstraints_fpMaximumOPPixelClockFrequency_Mhz_MSByte , 0x0f3d, 0x0000 },
@@ -2868,7 +3229,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorFarScalingSubSamplingCapabilities_bSensorScalingMode , 0x0f80, 0x0000 },
{ SensorFarScalingSubSamplingCapabilities_uwScalerMMin_LSByte , 0x0f84, 0x0000 },
{ SensorFarScalingSubSamplingCapabilities_uwScalerMMin_MSByte , 0x0f83, 0x0000 },
-@@ -3302,6 +4592,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFarScalingSubSamplingCapabilities_uwScalerMMax_LSByte , 0x0f88, 0x0000 },
{ SensorFarScalingSubSamplingCapabilities_uwScalerMMax_MSByte , 0x0f87, 0x0000 },
{ SensorFarScalingSubSamplingCapabilities_uwMaxOddInc_LSByte , 0x0f8c, 0x0000 },
{ SensorFarScalingSubSamplingCapabilities_uwMaxOddInc_MSByte , 0x0f8b, 0x0000 },
@@ -2878,7 +3239,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingFarOutput_uwPrePllClockDiv_LSByte , 0x1002, 0x0000 },
{ VideoTimingFarOutput_uwPrePllClockDiv_MSByte , 0x1001, 0x0000 },
{ VideoTimingFarOutput_fpPllInputFrequency_Mhz_LSByte , 0x1006, 0x0000 },
-@@ -3330,7 +4623,13 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingFarOutput_fpPllInputFrequency_Mhz_MSByte , 0x1005, 0x0000 },
+ { VideoTimingFarOutput_uwPllMultiplier_LSByte , 0x100a, 0x0000 },
+@@ -3328,24 +4621,36 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingFarOutput_uwOPPixelClockDiv_MSByte , 0x102d, 0x0000 },
+ { VideoTimingFarOutput_fpOPPixelClockFrequency_Mhz_LSByte , 0x1032, 0x0000 },
{ VideoTimingFarOutput_fpOPPixelClockFrequency_Mhz_MSByte , 0x1031, 0x0000 },
{ VideoTimingFarOutput_fpOutputTimingClockDerating_LSByte , 0x1036, 0x0000 },
{ VideoTimingFarOutput_fpOutputTimingClockDerating_MSByte , 0x1035, 0x0000 },
@@ -2892,7 +3257,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingInputsNearSensor_VideoTimingMode , 0x1100, 0x0001 },
{ VideoTimingInputsNearSensor_bSensorBitsPerSystemClock , 0x1102, 0x0002 },
{ VideoTimingInputsNearSensor_uwCsiRawFormat_LSByte , 0x1106, 0x0000 },
-@@ -3339,11 +4638,17 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingInputsNearSensor_uwCsiRawFormat_MSByte , 0x1105, 0x0808 },
+ { VideoTimingInputsNearSensor_fpHostRxMaxDataRate_Mbps_LSByte , 0x110a, 0x0000 },
{ VideoTimingInputsNearSensor_fpHostRxMaxDataRate_Mbps_MSByte , 0x1109, 0x508a },
{ VideoTimingInputsNearSensor_VsyncPolarity , 0x110c, 0x0000 },
{ VideoTimingInputsNearSensor_HsyncPolarity , 0x110e, 0x0000 },
@@ -2910,7 +3276,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingNearSensorConstraints_uwMinimumPrePllClockDiv_LSByte , 0x1202, 0x0000 },
{ VideoTimingNearSensorConstraints_uwMinimumPrePllClockDiv_MSByte , 0x1201, 0x0000 },
{ VideoTimingNearSensorConstraints_uwMaximumPrePllClockDiv_LSByte , 0x1206, 0x0000 },
-@@ -3376,6 +4681,9 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingNearSensorConstraints_uwMaximumPrePllClockDiv_MSByte , 0x1205, 0x0000 },
+ { VideoTimingNearSensorConstraints_fpMinimumPllInputFrequency_Mhz_LSByte , 0x120a, 0x0000 },
+@@ -3374,17 +4679,23 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingNearSensorConstraints_uwMaximumOPSysClockDiv_MSByte , 0x1235, 0x0000 },
+ { VideoTimingNearSensorConstraints_fpMaximumOPSystemClockFrequency_Mhz_LSByte , 0x123a, 0x0000 },
{ VideoTimingNearSensorConstraints_fpMaximumOPSystemClockFrequency_Mhz_MSByte , 0x1239, 0x0000 },
{ VideoTimingNearSensorConstraints_fpMaximumOPPixelClockFrequency_Mhz_LSByte , 0x123e, 0x0000 },
{ VideoTimingNearSensorConstraints_fpMaximumOPPixelClockFrequency_Mhz_MSByte , 0x123d, 0x0000 },
@@ -2920,7 +3290,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorNearScalingSubSamplingCapabilities_bSensorScalingMode , 0x1280, 0x0000 },
{ SensorNearScalingSubSamplingCapabilities_uwScalerMMin_LSByte , 0x1284, 0x0000 },
{ SensorNearScalingSubSamplingCapabilities_uwScalerMMin_MSByte , 0x1283, 0x0000 },
-@@ -3383,6 +4691,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorNearScalingSubSamplingCapabilities_uwScalerMMax_LSByte , 0x1288, 0x0000 },
{ SensorNearScalingSubSamplingCapabilities_uwScalerMMax_MSByte , 0x1287, 0x0000 },
{ SensorNearScalingSubSamplingCapabilities_uwMaxOddInc_LSByte , 0x128c, 0x0000 },
{ SensorNearScalingSubSamplingCapabilities_uwMaxOddInc_MSByte , 0x128b, 0x0000 },
@@ -2930,7 +3300,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VideoTimingNearOutput_uwPrePllClockDiv_LSByte , 0x1302, 0x0000 },
{ VideoTimingNearOutput_uwPrePllClockDiv_MSByte , 0x1301, 0x0000 },
{ VideoTimingNearOutput_fpPllInputFrequency_Mhz_LSByte , 0x1306, 0x0000 },
-@@ -3411,35 +4722,47 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingNearOutput_fpPllInputFrequency_Mhz_MSByte , 0x1305, 0x0000 },
+ { VideoTimingNearOutput_uwPllMultiplier_LSByte , 0x130a, 0x0000 },
+@@ -3409,39 +4720,51 @@ struct nomadik_vpip_param vpip_default_p
+ { VideoTimingNearOutput_uwOPPixelClockDiv_MSByte , 0x132d, 0x0000 },
+ { VideoTimingNearOutput_fpOPPixelClockFrequency_Mhz_LSByte , 0x1332, 0x0000 },
{ VideoTimingNearOutput_fpOPPixelClockFrequency_Mhz_MSByte , 0x1331, 0x0000 },
{ VideoTimingNearOutput_fpOutputTimingClockDerating_LSByte , 0x1336, 0x0000 },
{ VideoTimingNearOutput_fpOutputTimingClockDerating_MSByte , 0x1335, 0x0000 },
@@ -2987,7 +3361,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorCapabilitiesFarSensor_uwSensorIntegrationTimeCapability_LSByte , 0x1502, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorIntegrationTimeCapability_MSByte , 0x1501, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorMinimumCoarseIntegrationLines_LSByte , 0x1506, 0x0000 },
-@@ -3451,8 +4774,10 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesFarSensor_uwSensorMinimumCoarseIntegrationLines_MSByte , 0x1505, 0x0000 },
+ { SensorCapabilitiesFarSensor_uwSensorCoarseIntegrationTimeMaxMargin_LSByte , 0x150a, 0x0000 },
+@@ -3449,12 +4772,14 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesFarSensor_uwSensorMinimumFineIntegrationPixels_LSByte , 0x150e, 0x0000 },
+ { SensorCapabilitiesFarSensor_uwSensorMinimumFineIntegrationPixels_MSByte , 0x150d, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorFineIntegrationTimeMaxMargin_LSByte , 0x1512, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorFineIntegrationTimeMaxMargin_MSByte , 0x1511, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorAnalogGainMinimum_LSByte , 0x1516, 0x0000 },
@@ -2998,7 +3376,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorCapabilitiesFarSensor_uwSensorAnalogGainMaximum_MSByte , 0x1519, 0x0080 },
{ SensorCapabilitiesFarSensor_uwSensorAnalogGainCodeStep_LSByte , 0x151e, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorAnalogGainCodeStep_MSByte , 0x151d, 0x0000 },
-@@ -3486,7 +4811,11 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesFarSensor_uwSensorAnalogGainType_LSByte , 0x1522, 0x0000 },
+ { SensorCapabilitiesFarSensor_uwSensorAnalogGainType_MSByte , 0x1521, 0x0000 },
+@@ -3484,11 +4809,15 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesFarSensor_uwSensorDigitalGainCapability_LSByte , 0x1554, 0x0000 },
+ { SensorCapabilitiesFarSensor_uwSensorDigitalGainCapability_MSByte , 0x1553, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorDigitalGainMinimum_LSByte , 0x1558, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorDigitalGainMinimum_MSByte , 0x1557, 0x0000 },
{ SensorCapabilitiesFarSensor_uwSensorDataPedestal_LSByte , 0x155c, 0x0000 },
@@ -3010,7 +3392,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorCapabilitiesNearSensor_uwSensorIntegrationTimeCapability_LSByte , 0x1582, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorIntegrationTimeCapability_MSByte , 0x1581, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorMinimumCoarseIntegrationLines_LSByte , 0x1586, 0x0000 },
-@@ -3499,8 +4828,8 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesNearSensor_uwSensorMinimumCoarseIntegrationLines_MSByte , 0x1585, 0x0000 },
+ { SensorCapabilitiesNearSensor_uwSensorCoarseIntegrationTimeMaxMargin_LSByte , 0x158a, 0x0000 },
+@@ -3497,12 +4826,12 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesNearSensor_uwSensorMinimumFineIntegrationPixels_MSByte , 0x158d, 0x0000 },
+ { SensorCapabilitiesNearSensor_uwSensorFineIntegrationTimeMaxMargin_LSByte , 0x1592, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorFineIntegrationTimeMaxMargin_MSByte , 0x1591, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorAnalogGainMinimum_LSByte , 0x1596, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorAnalogGainMinimum_MSByte , 0x1595, 0x0000 },
@@ -3021,7 +3407,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorCapabilitiesNearSensor_uwSensorAnalogGainCodeStep_LSByte , 0x159e, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorAnalogGainCodeStep_MSByte , 0x159d, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorAnalogGainType_LSByte , 0x15a2, 0x0000 },
-@@ -3534,6 +4863,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesNearSensor_uwSensorAnalogGainType_MSByte , 0x15a1, 0x0000 },
+ { SensorCapabilitiesNearSensor_fpSensorAnalogGainConstM0_LSByte , 0x15a6, 0x0000 },
+@@ -3532,10 +4861,13 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesNearSensor_uwSensorDigitalGainCapability_MSByte , 0x15d3, 0x0000 },
+ { SensorCapabilitiesNearSensor_uwSensorDigitalGainMinimum_LSByte , 0x15d8, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorDigitalGainMinimum_MSByte , 0x15d7, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorDataPedestal_LSByte , 0x15dc, 0x0000 },
{ SensorCapabilitiesNearSensor_uwSensorDataPedestal_MSByte , 0x15db, 0x0000 },
@@ -3031,7 +3421,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorCapabilitiesCurrentSensor_uwSensorIntegrationTimeCapability_LSByte , 0x1602, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorIntegrationTimeCapability_MSByte , 0x1601, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorMinimumCoarseIntegrationLines_LSByte , 0x1606, 0x0000 },
-@@ -3545,8 +4877,10 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesCurrentSensor_uwSensorMinimumCoarseIntegrationLines_MSByte , 0x1605, 0x0000 },
+ { SensorCapabilitiesCurrentSensor_uwSensorCoarseIntegrationTimeMaxMargin_LSByte , 0x160a, 0x0000 },
+@@ -3543,12 +4875,14 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesCurrentSensor_uwSensorMinimumFineIntegrationPixels_LSByte , 0x160e, 0x0000 },
+ { SensorCapabilitiesCurrentSensor_uwSensorMinimumFineIntegrationPixels_MSByte , 0x160d, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorFineIntegrationTimeMaxMargin_LSByte , 0x1612, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorFineIntegrationTimeMaxMargin_MSByte , 0x1611, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorAnalogGainMinimum_LSByte , 0x1616, 0x0000 },
@@ -3042,7 +3436,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorCapabilitiesCurrentSensor_uwSensorAnalogGainMaximum_MSByte , 0x1619, 0x0080 },
{ SensorCapabilitiesCurrentSensor_uwSensorAnalogGainCodeStep_LSByte , 0x161e, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorAnalogGainCodeStep_MSByte , 0x161d, 0x0000 },
-@@ -3581,6 +4915,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesCurrentSensor_uwSensorAnalogGainType_LSByte , 0x1622, 0x0000 },
+ { SensorCapabilitiesCurrentSensor_uwSensorAnalogGainType_MSByte , 0x1621, 0x0000 },
+@@ -3579,10 +4913,13 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorCapabilitiesCurrentSensor_uwSensorDigitalGainCapability_MSByte , 0x1653, 0x0000 },
+ { SensorCapabilitiesCurrentSensor_uwSensorDigitalGainMinimum_LSByte , 0x1658, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorDigitalGainMinimum_MSByte , 0x1657, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorDataPedestal_LSByte , 0x165c, 0x0000 },
{ SensorCapabilitiesCurrentSensor_uwSensorDataPedestal_MSByte , 0x165b, 0x0000 },
@@ -3052,7 +3450,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorFrameConstraintsFar_uwVTXAddrMin_LSByte , 0x1682, 0x0000 },
{ SensorFrameConstraintsFar_uwVTXAddrMin_MSByte , 0x1681, 0x0000 },
{ SensorFrameConstraintsFar_uwVTYAddrMin_LSByte , 0x1686, 0x0000 },
-@@ -3609,6 +4946,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFrameConstraintsFar_uwVTYAddrMin_MSByte , 0x1685, 0x0000 },
+ { SensorFrameConstraintsFar_uwVTXAddrMax_LSByte , 0x168a, 0x0000 },
+@@ -3607,10 +4944,13 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFrameConstraintsFar_uwMaxVTLineLengthPck_MSByte , 0x16ad, 0x0000 },
+ { SensorFrameConstraintsFar_uwMinVTLineBlankingPck_LSByte , 0x16b2, 0x0000 },
{ SensorFrameConstraintsFar_uwMinVTLineBlankingPck_MSByte , 0x16b1, 0x0000 },
{ SensorFrameConstraintsFar_uwMinVTFrameBlanking_LSByte , 0x16b6, 0x0000 },
{ SensorFrameConstraintsFar_uwMinVTFrameBlanking_MSByte , 0x16b5, 0x0000 },
@@ -3062,7 +3464,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorFrameConstraintsNear_uwVTXAddrMin_LSByte , 0x1702, 0x0000 },
{ SensorFrameConstraintsNear_uwVTXAddrMin_MSByte , 0x1701, 0x0000 },
{ SensorFrameConstraintsNear_uwVTYAddrMin_LSByte , 0x1706, 0x0000 },
-@@ -3637,8 +4977,14 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFrameConstraintsNear_uwVTYAddrMin_MSByte , 0x1705, 0x0000 },
+ { SensorFrameConstraintsNear_uwVTXAddrMax_LSByte , 0x170a, 0x0000 },
+@@ -3635,12 +4975,18 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFrameConstraintsNear_uwMaxVTLineLengthPck_MSByte , 0x172d, 0x0000 },
+ { SensorFrameConstraintsNear_uwMinVTLineBlankingPck_LSByte , 0x1732, 0x0000 },
{ SensorFrameConstraintsNear_uwMinVTLineBlankingPck_MSByte , 0x1731, 0x0000 },
{ SensorFrameConstraintsNear_uwMinVTFrameBlanking_LSByte , 0x1736, 0x0000 },
{ SensorFrameConstraintsNear_uwMinVTFrameBlanking_MSByte , 0x1735, 0x0000 },
@@ -3079,7 +3485,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ CurrentFrameDimension_uwVTFrameLengthLines_LSByte , 0x1802, 0x0000 },
{ CurrentFrameDimension_uwVTFrameLengthLines_MSByte , 0x1801, 0x0000 },
{ CurrentFrameDimension_uwVTLineLengthPck_LSByte , 0x1806, 0x0000 },
-@@ -3670,6 +5016,9 @@ struct nomadik_vpip_param vpip_default_p
+ { CurrentFrameDimension_uwVTLineLengthPck_MSByte , 0x1805, 0x0000 },
+ { CurrentFrameDimension_uwVTXAddrStart_LSByte , 0x180a, 0x0000 },
+@@ -3668,10 +5014,13 @@ struct nomadik_vpip_param vpip_default_p
+ { CurrentFrameDimension_bScalingMode , 0x1834, 0x0000 },
+ { CurrentFrameDimension_fpScaleFactor_LSByte , 0x1838, 0x0000 },
{ CurrentFrameDimension_fpScaleFactor_MSByte , 0x1837, 0x0000 },
{ CurrentFrameDimension_uwScalerM_LSByte , 0x183c, 0x0000 },
{ CurrentFrameDimension_uwScalerM_MSByte , 0x183b, 0x0000 },
@@ -3089,7 +3499,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorFrameConstraints_uwVTXAddrMin_LSByte , 0x1882, 0x0000 },
{ SensorFrameConstraints_uwVTXAddrMin_MSByte , 0x1881, 0x0000 },
{ SensorFrameConstraints_uwVTYAddrMin_LSByte , 0x1886, 0x0000 },
-@@ -3698,12 +5047,18 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFrameConstraints_uwVTYAddrMin_MSByte , 0x1885, 0x0000 },
+ { SensorFrameConstraints_uwVTXAddrMax_LSByte , 0x188a, 0x0000 },
+@@ -3696,16 +5045,22 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorFrameConstraints_uwMaxVTLineLengthPck_MSByte , 0x18ad, 0x0000 },
+ { SensorFrameConstraints_uwMinVTLineBlankingPck_LSByte , 0x18b2, 0x0000 },
{ SensorFrameConstraints_uwMinVTLineBlankingPck_MSByte , 0x18b1, 0x0000 },
{ SensorFrameConstraints_uwMinVTFrameBlanking_LSByte , 0x18b6, 0x0000 },
{ SensorFrameConstraints_uwMinVTFrameBlanking_MSByte , 0x18b5, 0x0000 },
@@ -3108,7 +3522,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FrameDimensionStatus_fFrameLengthChangePending , 0x1980, 0x0000 },
{ FrameDimensionStatus_fFrameDimensionChangePending , 0x1982, 0x0000 },
{ FrameDimensionStatus_uwVTFrameLengthPending_lines_LSByte , 0x1986, 0x0000 },
-@@ -3726,49 +5081,93 @@ struct nomadik_vpip_param vpip_default_p
+ { FrameDimensionStatus_uwVTFrameLengthPending_lines_MSByte , 0x1985, 0x0000 },
+ { FrameDimensionStatus_fFrameLengthChangeInhibitedForCoarseExposure , 0x1988, 0x0000 },
+@@ -3724,53 +5079,97 @@ struct nomadik_vpip_param vpip_default_p
+ { FrameDimensionStatus_uwMaximumSensorFOVY_LSByte , 0x19a4, 0x0000 },
+ { FrameDimensionStatus_uwMaximumSensorFOVY_MSByte , 0x19a3, 0x0000 },
{ FrameDimensionStatus_uwOPXOutputSize_LSByte , 0x19a8, 0x0000 },
{ FrameDimensionStatus_uwOPXOutputSize_MSByte , 0x19a7, 0x0000 },
{ FrameDimensionStatus_fSensorPreScaleFactorChanged , 0x19aa, 0x0000 },
@@ -3217,7 +3635,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FlashManagerStatus_fFlashSequencePending , 0x1d00, 0x0000 },
{ FlashManagerStatus_cNumberFramesRequiredForPreFlashes , 0x1d02, 0x0000 },
{ FlashManagerStatus_fpMainFlashPulseWidth_us_LSByte , 0x1d06, 0x0000 },
-@@ -3792,24 +5191,29 @@ struct nomadik_vpip_param vpip_default_p
+ { FlashManagerStatus_fpMainFlashPulseWidth_us_MSByte , 0x1d05, 0x0000 },
+ { FlashManagerStatus_fpPreFlashPulseWidth_us_LSByte , 0x1d0a, 0x0000 },
+@@ -3790,46 +5189,61 @@ struct nomadik_vpip_param vpip_default_p
+ { FlashManagerStatus_wStartPreFlashPixel_LSByte , 0x1d26, 0x0000 },
+ { FlashManagerStatus_wStartPreFlashPixel_MSByte , 0x1d25, 0x0000 },
{ FlashManagerStatus_cNumberFramesRequired , 0x1d28, 0x0000 },
{ FlashManagerStatus_fPreFlashPending , 0x1d2a, 0x0000 },
{ FlashManagerStatus_fMainFlashPending , 0x1d2c, 0x0000 },
@@ -3251,7 +3673,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ExposureControls_uwFlashGunModeCoarseIntegration_lines_LSByte , 0x1da6, 0x0000 },
{ ExposureControls_uwFlashGunModeCoarseIntegration_lines_MSByte , 0x1da5, 0x0000 },
{ ExposureControls_uwFlashGunModeFineIntegration_pixels_LSByte , 0x1daa, 0x0000 },
-@@ -3820,14 +5224,24 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureControls_uwFlashGunModeFineIntegration_pixels_MSByte , 0x1da9, 0x0000 },
+ { ExposureControls_uwFlashGunModeCodedAnalogGain_LSByte , 0x1dae, 0x0000 },
+ { ExposureControls_uwFlashGunModeCodedAnalogGain_MSByte , 0x1dad, 0x0000 },
+ { ExposureControls_fpFlashGunModeDigitalGain_LSByte , 0x1db2, 0x0000 },
{ ExposureControls_fpFlashGunModeDigitalGain_MSByte , 0x1db1, 0x0000 },
{ ExposureControls_fFreezeAutoExposure , 0x1db4, 0x0000 },
{ ExposureControls_fpUserMaximumIntegrationTime_us_LSByte , 0x1db8, 0x0000 },
@@ -3278,7 +3703,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ExposureStatus_fWhiteBalanceGainIncludedInCurrentExposure , 0x1e04, 0x0000 },
{ ExposureStatus_fBadExposureForIterativeWhiteBalance , 0x1e06, 0x0000 },
{ ExposureStatus_uwCoarseIntegrationPending_lines_LSByte , 0x1e0a, 0x0000 },
-@@ -3851,6 +5265,9 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureStatus_uwCoarseIntegrationPending_lines_MSByte , 0x1e09, 0x0000 },
+ { ExposureStatus_uwFineIntegrationPending_pixels_LSByte , 0x1e0e, 0x0000 },
+@@ -3849,31 +5263,46 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureStatus_fpTotalIntegrationTimePending_us_MSByte , 0x1e27, 0x0000 },
+ { ExposureStatus_uwCodedAnalogGainPending_LSByte , 0x1e2c, 0x0000 },
{ ExposureStatus_uwCodedAnalogGainPending_MSByte , 0x1e2b, 0x0000 },
{ ExposureStatus_fExposureIsStableforAutoFocus , 0x1e2e, 0x0000 },
{ ExposureStatus_bRuntimeExposureTarget , 0x1e30, 0x0000 },
@@ -3288,7 +3717,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ExposureParametersApplied_uwCoarseIntegration_lines_LSByte , 0x1e82, 0x0000 },
{ ExposureParametersApplied_uwCoarseIntegration_lines_MSByte , 0x1e81, 0x0000 },
{ ExposureParametersApplied_uwFineIntegration_pixels_LSByte , 0x1e86, 0x0000 },
-@@ -3859,8 +5276,14 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureParametersApplied_uwFineIntegration_pixels_MSByte , 0x1e85, 0x0000 },
+ { ExposureParametersApplied_uwCodedAnalogGain_LSByte , 0x1e8a, 0x0000 },
{ ExposureParametersApplied_uwCodedAnalogGain_MSByte , 0x1e89, 0x0000 },
{ ExposureParametersApplied_fpDigitalGain_LSByte , 0x1e8e, 0x0000 },
{ ExposureParametersApplied_fpDigitalGain_MSByte , 0x1e8d, 0x0000 },
@@ -3303,7 +3733,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ExposureCycleTest_fpInitialDesiredExposureTime_LSByte , 0x1f82, 0x0000 },
{ ExposureCycleTest_fpInitialDesiredExposureTime_MSByte , 0x1f81, 0x0000 },
{ ExposureCycleTest_fpFinalDesiredExposureTime_LSByte , 0x1f86, 0x0000 },
-@@ -3868,10 +5291,16 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureCycleTest_fpFinalDesiredExposureTime_MSByte , 0x1f85, 0x0000 },
{ ExposureCycleTest_fpExposureStep_LSByte , 0x1f8a, 0x0000 },
{ ExposureCycleTest_fpExposureStep_MSByte , 0x1f89, 0x0000 },
{ ExposureCycleTest_bStepDirection , 0x1f8c, 0x0000 },
@@ -3320,7 +3750,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ExposureAlgorithmControls_fpMaximumStep_LSByte , 0x2082, 0x0000 },
{ ExposureAlgorithmControls_fpMaximumStep_MSByte , 0x2081, 0x0000 },
{ ExposureAlgorithmControls_fpMinimumStep_LSByte , 0x2086, 0x0000 },
-@@ -3885,9 +5314,14 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureAlgorithmControls_fpMinimumStep_MSByte , 0x2085, 0x0000 },
+ { ExposureAlgorithmControls_fpMinimumDesiredExposureTime_us_LSByte , 0x208a, 0x0000 },
+@@ -3883,13 +5312,18 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureAlgorithmControls_fpMaximumNegativeStepThreshold_LSByte , 0x2092, 0x0000 },
+ { ExposureAlgorithmControls_fpMaximumNegativeStepThreshold_MSByte , 0x2091, 0x0000 },
{ ExposureAlgorithmControls_fpRelativeOnTargetStabilityThreshold_LSByte , 0x2096, 0x0000 },
{ ExposureAlgorithmControls_fpRelativeOnTargetStabilityThreshold_MSByte , 0x2095, 0x0000 },
{ ExposureAlgorithmControls_fpDigitalGainFloor_LSByte , 0x209a, 0x0000 },
@@ -3335,7 +3769,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ExposureAlgorithmControls_fpRelativeIntTimeHysThreshold_LSByte , 0x20a2, 0x0000 },
{ ExposureAlgorithmControls_fpRelativeIntTimeHysThreshold_MSByte , 0x20a1, 0x0000 },
{ ExposureAlgorithmControls_fpRelativeDigitalGainHysThreshold_LSByte , 0x20a6, 0x0000 },
-@@ -3903,34 +5337,61 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureAlgorithmControls_fpRelativeDigitalGainHysThreshold_MSByte , 0x20a5, 0x0000 },
+ { ExposureAlgorithmControls_fpRelativeCompilationProblemThreshold_LSByte , 0x20aa, 0x0000 },
+@@ -3901,53 +5335,103 @@ struct nomadik_vpip_param vpip_default_p
+ { ExposureAlgorithmControls_fpMaximumManualExposureTime_s_LSByte , 0x20b6, 0x0000 },
+ { ExposureAlgorithmControls_fpMaximumManualExposureTime_s_MSByte , 0x20b5, 0x0000 },
{ ExposureAlgorithmControls_fpRelativeStabilityThresholdForAutoFocus_LSByte , 0x20ba, 0x0000 },
{ ExposureAlgorithmControls_fpRelativeStabilityThresholdForAutoFocus_MSByte , 0x20b9, 0x0000 },
{ ExposureAlgorithmControls_bLeakShift , 0x20bc, 0x0000 },
@@ -3402,7 +3840,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ WhiteBalanceStatus_bStatus , 0x2380, 0x0000 },
{ WhiteBalanceStatus_fUnityGainsUsed , 0x2382, 0x0000 },
{ WhiteBalanceStatus_fpRedGain_LSByte , 0x2386, 0x0000 },
-@@ -3939,13 +5400,36 @@ struct nomadik_vpip_param vpip_default_p
+ { WhiteBalanceStatus_fpRedGain_MSByte , 0x2385, 0x0000 },
+ { WhiteBalanceStatus_fpGreenGain_LSByte , 0x238a, 0x0000 },
{ WhiteBalanceStatus_fpGreenGain_MSByte , 0x2389, 0x0000 },
{ WhiteBalanceStatus_fpBlueGain_LSByte , 0x238e, 0x0000 },
{ WhiteBalanceStatus_fpBlueGain_MSByte , 0x238d, 0x0000 },
@@ -3439,7 +3878,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ MinWeightedWBControls_fDisable , 0x2500, 0x0000 },
{ MinWeightedWBControls_uwSaturationThreshold_LSByte , 0x2504, 0x0000 },
{ MinWeightedWBControls_uwSaturationThreshold_MSByte , 0x2503, 0x0300 },
-@@ -3958,6 +5442,9 @@ struct nomadik_vpip_param vpip_default_p
+ { MinWeightedWBControls_fpRedTiltGain_LSByte , 0x2508, 0x0000 },
+ { MinWeightedWBControls_fpRedTiltGain_MSByte , 0x2507, 0x3e00 },
+@@ -3956,38 +5440,56 @@ struct nomadik_vpip_param vpip_default_p
+ { MinWeightedWBControls_fpGreen2TiltGain_LSByte , 0x2510, 0x0000 },
+ { MinWeightedWBControls_fpGreen2TiltGain_MSByte , 0x250f, 0x3e40 },
{ MinWeightedWBControls_fpBlueTiltGain_LSByte , 0x2514, 0x0000 },
{ MinWeightedWBControls_fpBlueTiltGain_MSByte , 0x2513, 0x3e40 },
{ MinWeightedWBControls_GreenChannelToAccumulate , 0x2516, 0x0000 },
@@ -3449,7 +3892,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ MinWeightedWBStatus_uwZone_X_Offset_LSByte , 0x2582, 0x0000 },
{ MinWeightedWBStatus_uwZone_X_Offset_MSByte , 0x2581, 0x0000 },
{ MinWeightedWBStatus_uwZone_Y_Offset_LSByte , 0x2586, 0x0000 },
-@@ -3968,24 +5455,39 @@ struct nomadik_vpip_param vpip_default_p
+ { MinWeightedWBStatus_uwZone_Y_Offset_MSByte , 0x2585, 0x0000 },
+ { MinWeightedWBStatus_uwZone_X_Size_LSByte , 0x258a, 0x0000 },
+ { MinWeightedWBStatus_uwZone_X_Size_MSByte , 0x2589, 0x0000 },
+ { MinWeightedWBStatus_uwZone_Y_Size_LSByte , 0x258e, 0x0000 },
{ MinWeightedWBStatus_uwZone_Y_Size_MSByte , 0x258d, 0x0000 },
{ MinWeightedWBStatus_fpNumberMacroPixel_LSByte , 0x2592, 0x0000 },
{ MinWeightedWBStatus_fpNumberMacroPixel_MSByte , 0x2591, 0x0000 },
@@ -3499,7 +3945,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutomaticFrameRateStatus_fpImpliedGain_LSByte , 0x2782, 0x0000 },
{ AutomaticFrameRateStatus_fpImpliedGain_MSByte , 0x2781, 0x0000 },
{ AutomaticFrameRateStatus_uwMaximumFrameLength_lines_LSByte , 0x2786, 0x0000 },
-@@ -4002,9 +5504,20 @@ struct nomadik_vpip_param vpip_default_p
+ { AutomaticFrameRateStatus_uwMaximumFrameLength_lines_MSByte , 0x2785, 0x0000 },
+ { AutomaticFrameRateStatus_uwMinimumFrameLength_lines_LSByte , 0x278a, 0x0000 },
+@@ -4000,32 +5502,99 @@ struct nomadik_vpip_param vpip_default_p
+ { AutomaticFrameRateStatus_uwCurrentFrameLength_lines_MSByte , 0x2795, 0x0000 },
+ { AutomaticFrameRateStatus_uwDesiredFrameLength_lines_LSByte , 0x279a, 0x0000 },
{ AutomaticFrameRateStatus_uwDesiredFrameLength_lines_MSByte , 0x2799, 0x0000 },
{ AutomaticFrameRateStatus_fAutomaticFrameRateStable , 0x279c, 0x0000 },
{ AutomaticFrameRateStatus_fAutomaticFrameRateClip , 0x279e, 0x0000 },
@@ -3520,7 +3970,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ StaticFrameRateStatus_uwRequestedFrameRate_Hz_LSByte , 0x2882, 0x0000 },
{ StaticFrameRateStatus_uwRequestedFrameRate_Hz_MSByte , 0x2881, 0x0000 },
{ StaticFrameRateStatus_uwMaxFrameRate_Hz_LSByte , 0x2886, 0x0000 },
-@@ -4015,15 +5528,71 @@ struct nomadik_vpip_param vpip_default_p
+ { StaticFrameRateStatus_uwMaxFrameRate_Hz_MSByte , 0x2885, 0x0000 },
+ { StaticFrameRateStatus_uwMinFrameRate_Hz_LSByte , 0x288a, 0x0000 },
+ { StaticFrameRateStatus_uwMinFrameRate_Hz_MSByte , 0x2889, 0x0000 },
+ { StaticFrameRateStatus_fChangePending , 0x288c, 0x0000 },
{ StaticFrameRateStatus_uwRequiredFrameLength_lines_LSByte , 0x2890, 0x0000 },
{ StaticFrameRateStatus_uwRequiredFrameLength_lines_MSByte , 0x288f, 0x0000 },
{ StaticFrameRateStatus_ClipFrameRate , 0x2892, 0x0000 },
@@ -3592,7 +4045,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_ColourMatrixFarSensor_fpRInR_LSByte , 0x2b02, 0x0000 },
{ ColourEngine0_ColourMatrixFarSensor_fpRInR_MSByte , 0x2b01, 0x3fd3 },
{ ColourEngine0_ColourMatrixFarSensor_fpGInR_LSByte , 0x2b06, 0x0000 },
-@@ -4042,6 +5611,8 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixFarSensor_fpGInR_MSByte , 0x2b05, 0xbce0 },
+ { ColourEngine0_ColourMatrixFarSensor_fpBInR_LSByte , 0x2b0a, 0x0000 },
+@@ -4040,10 +5609,12 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixFarSensor_fpRInB_MSByte , 0x2b19, 0xb717 },
+ { ColourEngine0_ColourMatrixFarSensor_fpGInB_LSByte , 0x2b1e, 0x0000 },
{ ColourEngine0_ColourMatrixFarSensor_fpGInB_MSByte , 0x2b1d, 0xbd29 },
{ ColourEngine0_ColourMatrixFarSensor_fpBInB_LSByte , 0x2b22, 0x0000 },
{ ColourEngine0_ColourMatrixFarSensor_fpBInB_MSByte , 0x2b21, 0x3fc6 },
@@ -3601,7 +4058,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_ColourMatrixNearSensor_fpRInR_LSByte , 0x2b82, 0x0002 },
{ ColourEngine0_ColourMatrixNearSensor_fpRInR_MSByte , 0x2b81, 0x6400 },
{ ColourEngine0_ColourMatrixNearSensor_fpGInR_LSByte , 0x2b86, 0x0002 },
-@@ -4060,6 +5631,9 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixNearSensor_fpGInR_MSByte , 0x2b85, 0x6400 },
+ { ColourEngine0_ColourMatrixNearSensor_fpBInR_LSByte , 0x2b8a, 0x0002 },
+@@ -4058,10 +5629,13 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixNearSensor_fpRInB_MSByte , 0x2b99, 0xe900 },
+ { ColourEngine0_ColourMatrixNearSensor_fpGInB_LSByte , 0x2b9e, 0x0000 },
{ ColourEngine0_ColourMatrixNearSensor_fpGInB_MSByte , 0x2b9d, 0xe900 },
{ ColourEngine0_ColourMatrixNearSensor_fpBInB_LSByte , 0x2ba2, 0x0000 },
{ ColourEngine0_ColourMatrixNearSensor_fpBInB_MSByte , 0x2ba1, 0xe900 },
@@ -3611,7 +4072,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_ColourMatrixDamped_wRInR_LSByte , 0x2c02, 0x0000 },
{ ColourEngine0_ColourMatrixDamped_wRInR_MSByte , 0x2c01, 0x0000 },
{ ColourEngine0_ColourMatrixDamped_wGInR_LSByte , 0x2c06, 0x0000 },
-@@ -4078,6 +5652,18 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixDamped_wGInR_MSByte , 0x2c05, 0x0000 },
+ { ColourEngine0_ColourMatrixDamped_wBInR_LSByte , 0x2c0a, 0x0000 },
+@@ -4076,17 +5650,53 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixDamped_wRInB_MSByte , 0x2c19, 0x0000 },
+ { ColourEngine0_ColourMatrixDamped_wGInB_LSByte , 0x2c1e, 0x0000 },
{ ColourEngine0_ColourMatrixDamped_wGInB_MSByte , 0x2c1d, 0x0000 },
{ ColourEngine0_ColourMatrixDamped_wBInB_LSByte , 0x2c22, 0x0000 },
{ ColourEngine0_ColourMatrixDamped_wBInB_MSByte , 0x2c21, 0x0000 },
@@ -3630,7 +4095,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_ColourMatrixDamperControl_fDisableMatrixDamping , 0x2c80, 0x0000 },
{ ColourEngine0_ColourMatrixDamperControl_DamperLowThreshold_LSByte , 0x2c84, 0x0000 },
{ ColourEngine0_ColourMatrixDamperControl_DamperLowThreshold_MSByte , 0x2c83, 0x62ac },
-@@ -4085,6 +5671,30 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ColourMatrixDamperControl_DamperHighThreshold_LSByte , 0x2c88, 0x0000 },
{ ColourEngine0_ColourMatrixDamperControl_DamperHighThreshold_MSByte , 0x2c87, 0x64ac },
{ ColourEngine0_ColourMatrixDamperControl_MinimumDamperOutput_LSByte , 0x2c8c, 0x0000 },
{ ColourEngine0_ColourMatrixDamperControl_MinimumDamperOutput_MSByte , 0x2c8b, 0x0000 },
@@ -3661,7 +4126,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_ApertureCorrectionControls_fDisableCorrection , 0x2d00, 0x0000 },
{ ColourEngine0_ApertureCorrectionControls_bMaxGain , 0x2d02, 0x0010 },
{ ColourEngine0_ApertureCorrectionControls_fDisableGainDamping , 0x2d04, 0x0000 },
-@@ -4103,9 +5713,25 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ApertureCorrectionControls_DamperLowThreshold_Gain_LSByte , 0x2d08, 0x0000 },
+ { ColourEngine0_ApertureCorrectionControls_DamperLowThreshold_Gain_MSByte , 0x2d07, 0x5871 },
+@@ -4101,21 +5711,53 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_ApertureCorrectionControls_DamperLowThreshold_Coring_MSByte , 0x2d19, 0x5871 },
+ { ColourEngine0_ApertureCorrectionControls_DamperHighThreshold_Coring_LSByte , 0x2d1e, 0x0000 },
{ ColourEngine0_ApertureCorrectionControls_DamperHighThreshold_Coring_MSByte , 0x2d1d, 0x63d1 },
{ ColourEngine0_ApertureCorrectionControls_MinimumDamperOutput_Coring_LSByte , 0x2d22, 0x0000 },
{ ColourEngine0_ApertureCorrectionControls_MinimumDamperOutput_Coring_MSByte , 0x2d21, 0x3a00 },
@@ -3687,7 +4156,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_GammaCorrection_fEnabled , 0x2e00, 0x0001 },
{ ColourEngine0_GammaCorrection_bMode , 0x2e02, 0x0001 },
{ ColourEngine0_GammaCorrection_SharpRed , 0x2e04, 0x0013 },
-@@ -4114,6 +5740,22 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_GammaCorrection_SharpGreen , 0x2e06, 0x0013 },
+ { ColourEngine0_GammaCorrection_SharpBlue , 0x2e08, 0x0013 },
{ ColourEngine0_GammaCorrection_SoftRed , 0x2e0a, 0x0013 },
{ ColourEngine0_GammaCorrection_SoftGreen , 0x2e0c, 0x0013 },
{ ColourEngine0_GammaCorrection_SoftBlue , 0x2e0e, 0x0013 },
@@ -3710,7 +4180,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ NoraControls_fDisable , 0x2e80, 0x0001 },
{ NoraControls_fDisableNoraPromoting , 0x2e82, 0x0000 },
{ NoraControls_bMaximumValue , 0x2e84, 0x0001 },
-@@ -4126,7 +5768,33 @@ struct nomadik_vpip_param vpip_default_p
+ { NoraControls_fDifferentTextureDegreeForBlue , 0x2e86, 0x0000 },
+ { NoraControls_fSplitNoiseLevel , 0x2e88, 0x0000 },
+@@ -4124,11 +5766,37 @@ struct nomadik_vpip_param vpip_default_p
+ { NoraControls_DamperLowThreshold_MSByte , 0x2e8d, 0x4000 },
+ { NoraControls_DamperHighThreshold_LSByte , 0x2e92, 0x0000 },
{ NoraControls_DamperHighThreshold_MSByte , 0x2e91, 0x4500 },
{ NoraControls_MinimumDamperOutput_LSByte , 0x2e96, 0x0000 },
{ NoraControls_MinimumDamperOutput_MSByte , 0x2e95, 0x0000 },
@@ -3744,7 +4218,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ScytheFilterControls_fDisableFilter , 0x2f80, 0x0000 },
{ ScytheFilterControls_fSquareLaw , 0x2f82, 0x0000 },
{ ScytheFilterControls_fDisablePromotingLow , 0x2f84, 0x0000 },
-@@ -4145,6 +5813,29 @@ struct nomadik_vpip_param vpip_default_p
+ { ScytheFilterControls_fDisablePromotingHigh , 0x2f86, 0x0000 },
+ { ScytheFilterControls_bMaxWeightLow , 0x2f88, 0x0010 },
+@@ -4143,10 +5811,33 @@ struct nomadik_vpip_param vpip_default_p
+ { ScytheFilterControls_fpDamperHighThresholdHigh_MSByte , 0x2f99, 0x68dc },
+ { ScytheFilterControls_fpMinimumDamperOutputLow_LSByte , 0x2f9e, 0x0000 },
{ ScytheFilterControls_fpMinimumDamperOutputLow_MSByte , 0x2f9d, 0x3a00 },
{ ScytheFilterControls_fpMinimumDamperOutputHigh_LSByte , 0x2fa2, 0x0000 },
{ ScytheFilterControls_fpMinimumDamperOutputHigh_MSByte , 0x2fa1, 0x3a00 },
@@ -3774,7 +4252,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ JackFilterControls_fDisableFilter , 0x3000, 0x0000 },
{ JackFilterControls_fSquareLaw , 0x3002, 0x0000 },
{ JackFilterControls_fDisablePromotingLow , 0x3004, 0x0000 },
-@@ -4163,10 +5854,25 @@ struct nomadik_vpip_param vpip_default_p
+ { JackFilterControls_fDisablePromotingHigh , 0x3006, 0x0000 },
+ { JackFilterControls_bMaxWeightLow , 0x3008, 0x0010 },
+@@ -4161,103 +5852,208 @@ struct nomadik_vpip_param vpip_default_p
+ { JackFilterControls_fpDamperHighThresholdHigh_MSByte , 0x3019, 0x68dc },
+ { JackFilterControls_fpMinimumDamperOutputLow_LSByte , 0x301e, 0x0000 },
{ JackFilterControls_fpMinimumDamperOutputLow_MSByte , 0x301d, 0x0000 },
{ JackFilterControls_fpMinimumDamperOutputHigh_LSByte , 0x3022, 0x0000 },
{ JackFilterControls_fpMinimumDamperOutputHigh_MSByte , 0x3021, 0x0000 },
@@ -3800,7 +4282,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ VfpnControls_fEnableCorrection , 0x3100, 0x0000 },
{ VfpnControls_uwMaximumPixelValue_LSByte , 0x3104, 0x0000 },
{ VfpnControls_uwMaximumPixelValue_MSByte , 0x3103, 0x03ff },
-@@ -4175,15 +5881,61 @@ struct nomadik_vpip_param vpip_default_p
+ { VfpnControls_uwMinimumPixelValue_LSByte , 0x3108, 0x0000 },
+ { VfpnControls_uwMinimumPixelValue_MSByte , 0x3107, 0x0000 },
{ VfpnControls_uwPixelSaturationLevel_LSByte , 0x310c, 0x0000 },
{ VfpnControls_uwPixelSaturationLevel_MSByte , 0x310b, 0x03ff },
{ VfpnControls_bLogThreshLog , 0x310e, 0x0004 },
@@ -3865,7 +4348,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AntiVignetteControls_bFilterCoeff_R2_b , 0x3208, 0x0000 },
{ AntiVignetteControls_bFilterCoeff_R4_r , 0x320a, 0x0000 },
{ AntiVignetteControls_bFilterCoeff_R4_gr , 0x320c, 0x0000 },
-@@ -4193,8 +5945,8 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteControls_bFilterCoeff_R4_gb , 0x320e, 0x0000 },
+ { AntiVignetteControls_bFilterCoeff_R4_b , 0x3210, 0x0000 },
+ { AntiVignetteControls_uwHorizontalOffset_LSByte , 0x3214, 0x0000 },
{ AntiVignetteControls_uwHorizontalOffset_MSByte , 0x3213, 0x0000 },
{ AntiVignetteControls_uwVerticalOffset_LSByte , 0x3218, 0x0000 },
{ AntiVignetteControls_uwVerticalOffset_MSByte , 0x3217, 0x0000 },
@@ -3876,7 +4361,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AntiVignetteControls_uwHorizontalOffset_r_LSByte , 0x3220, 0x0000 },
{ AntiVignetteControls_uwHorizontalOffset_r_MSByte , 0x321f, 0x0000 },
{ AntiVignetteControls_uwHorizontalOffset_gr_LSByte , 0x3224, 0x0000 },
-@@ -4204,18 +5956,22 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteControls_uwHorizontalOffset_gr_MSByte , 0x3223, 0x0000 },
+ { AntiVignetteControls_uwHorizontalOffset_gb_LSByte , 0x3228, 0x0000 },
+ { AntiVignetteControls_uwHorizontalOffset_gb_MSByte , 0x3227, 0x0000 },
{ AntiVignetteControls_uwHorizontalOffset_b_LSByte , 0x322c, 0x0000 },
{ AntiVignetteControls_uwHorizontalOffset_b_MSByte , 0x322b, 0x0000 },
{ AntiVignetteControls_uwVerticalOffset_r_LSByte , 0x3230, 0x0000 },
@@ -3905,7 +4392,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AntiVignetteStatus_fXScaleEnabled , 0x3280, 0x0000 },
{ AntiVignetteStatus_bXScale , 0x3282, 0x0000 },
{ AntiVignetteStatus_fYScaleEnabled , 0x3284, 0x0000 },
-@@ -4224,13 +5980,35 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteStatus_bYScale , 0x3286, 0x0000 },
+ { AntiVignetteStatus_uwHorizontalSize_LSByte , 0x328a, 0x0000 },
{ AntiVignetteStatus_uwHorizontalSize_MSByte , 0x3289, 0x0000 },
{ AntiVignetteStatus_uwVerticalSize_LSByte , 0x328e, 0x0000 },
{ AntiVignetteStatus_uwVerticalSize_MSByte , 0x328d, 0x0000 },
@@ -3942,7 +4430,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_RadialApertureCorrectionApplicationInputs_uwHOffset_LSByte , 0x3402, 0x0000 },
{ ColourEngine0_RadialApertureCorrectionApplicationInputs_uwHOffset_MSByte , 0x3401, 0x0000 },
{ ColourEngine0_RadialApertureCorrectionApplicationInputs_uwVOffset_LSByte , 0x3406, 0x0000 },
-@@ -4239,9 +6017,21 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_RadialApertureCorrectionApplicationInputs_uwVOffset_MSByte , 0x3405, 0x0000 },
+ { ColourEngine0_RadialApertureCorrectionApplicationInputs_uwHScalingFactor_LSByte , 0x340a, 0x0000 },
{ ColourEngine0_RadialApertureCorrectionApplicationInputs_uwHScalingFactor_MSByte , 0x3409, 0x0000 },
{ ColourEngine0_RadialApertureCorrectionApplicationInputs_uwVScalingFactor_LSByte , 0x340e, 0x0000 },
{ ColourEngine0_RadialApertureCorrectionApplicationInputs_uwVScalingFactor_MSByte , 0x340d, 0x0000 },
@@ -3964,7 +4453,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_CoderOutputSignalRange_uwLumaExcursion_LSByte , 0x3502, 0x0000 },
{ ColourEngine0_CoderOutputSignalRange_uwLumaExcursion_MSByte , 0x3501, 0x0000 },
{ ColourEngine0_CoderOutputSignalRange_uwLumaMidpointTimes2_LSByte , 0x3506, 0x0000 },
-@@ -4250,12 +6040,18 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_CoderOutputSignalRange_uwLumaMidpointTimes2_MSByte , 0x3505, 0x0000 },
+ { ColourEngine0_CoderOutputSignalRange_uwChromaExcursion_LSByte , 0x350a, 0x0000 },
{ ColourEngine0_CoderOutputSignalRange_uwChromaExcursion_MSByte , 0x3509, 0x0000 },
{ ColourEngine0_CoderOutputSignalRange_uwChromaMidpointTimes2_LSByte , 0x350e, 0x0000 },
{ ColourEngine0_CoderOutputSignalRange_uwChromaMidpointTimes2_MSByte , 0x350d, 0x0000 },
@@ -3983,7 +4473,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_OutputCoderMatrix_w0_0_LSByte , 0x3602, 0x0000 },
{ ColourEngine0_OutputCoderMatrix_w0_0_MSByte , 0x3601, 0x0000 },
{ ColourEngine0_OutputCoderMatrix_w0_1_LSByte , 0x3606, 0x0000 },
-@@ -4274,6 +6070,20 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_OutputCoderMatrix_w0_1_MSByte , 0x3605, 0x0000 },
+ { ColourEngine0_OutputCoderMatrix_w0_2_LSByte , 0x360a, 0x0000 },
+@@ -4272,37 +6068,91 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_OutputCoderMatrix_w2_0_MSByte , 0x3619, 0x0000 },
+ { ColourEngine0_OutputCoderMatrix_w2_1_LSByte , 0x361e, 0x0000 },
{ ColourEngine0_OutputCoderMatrix_w2_1_MSByte , 0x361d, 0x0000 },
{ ColourEngine0_OutputCoderMatrix_w2_2_LSByte , 0x3622, 0x0000 },
{ ColourEngine0_OutputCoderMatrix_w2_2_MSByte , 0x3621, 0x0000 },
@@ -4004,7 +4498,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine0_FadeToBlack_fDisable , 0x3680, 0x0001 },
{ ColourEngine0_FadeToBlack_fpBlackValue_LSByte , 0x3684, 0x0000 },
{ ColourEngine0_FadeToBlack_fpBlackValue_MSByte , 0x3683, 0x0000 },
-@@ -4283,10 +6093,48 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine0_FadeToBlack_fpDamperLowThreshold_LSByte , 0x3688, 0x0000 },
+ { ColourEngine0_FadeToBlack_fpDamperLowThreshold_MSByte , 0x3687, 0x63d1 },
+ { ColourEngine0_FadeToBlack_fpDamperHighThreshold_LSByte , 0x368c, 0x0000 },
{ ColourEngine0_FadeToBlack_fpDamperHighThreshold_MSByte , 0x368b, 0x656f },
{ ColourEngine0_FadeToBlack_fpDamperOutput_LSByte , 0x3690, 0x0000 },
{ ColourEngine0_FadeToBlack_fpDamperOutput_MSByte , 0x368f, 0x0000 },
@@ -4053,7 +4549,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ZoomMgrParams_fAntiZip , 0x3780, 0x0000 },
{ ZoomMgrParams_bFilterCrispness0 , 0x3782, 0x0000 },
{ ZoomMgrParams_bFilterCrispness1 , 0x3784, 0x0000 },
-@@ -4295,12 +6143,14 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrParams_fInFromOutARLock , 0x3786, 0x0000 },
+ { ZoomMgrParams_bPrescaleFactor , 0x3788, 0x0000 },
{ ZoomMgrParams_bPrescaleType , 0x378a, 0x0000 },
{ ZoomMgrParams_fp16ZoomRange_LSByte , 0x378e, 0x0000 },
{ ZoomMgrParams_fp16ZoomRange_MSByte , 0x378d, 0x100 },
@@ -4069,7 +4566,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ZoomMgrCtrl_bChgOverMarginShift , 0x380c, 0x0000 },
{ ZoomMgrCtrl_fCheckDataRate , 0x380e, 0x0000 },
{ ZoomMgrCtrl_fSetAlternateInitWOI , 0x3810, 0x0000 },
-@@ -4312,6 +6162,9 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrCtrl_fSetX_Byte0 , 0x3812, 0x0000 },
+ { ZoomMgrCtrl_fSetX_Byte1 , 0x3814, 0x0000 },
+@@ -4310,10 +6160,13 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrCtrl_fSetX_Byte3 , 0x3818, 0x0000 },
+ { ZoomMgrCtrl_fp16P0ScaleLowLimit_LSByte , 0x381c, 0x0000 },
{ ZoomMgrCtrl_fp16P0ScaleLowLimit_MSByte , 0x381b, 0x0000 },
{ ZoomMgrCtrl_fp16P1ScaleLowLimit_LSByte , 0x3820, 0x0000 },
{ ZoomMgrCtrl_fp16P1ScaleLowLimit_MSByte , 0x381f, 0x0000 },
@@ -4079,7 +4580,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ZoomMgrStatus_fReady , 0x3880, 0x0000 },
{ ZoomMgrStatus_bDeviceTestCoin , 0x3882, 0x0000 },
{ ZoomMgrStatus_bNextCmd , 0x3884, 0x0000 },
-@@ -4345,6 +6198,24 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrStatus_bLastCmd , 0x3886, 0x0000 },
+ { ZoomMgrStatus_bCommandStatus , 0x3888, 0x0000 },
+@@ -4343,10 +6196,28 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrStatus_fMinFOVX_Byte3 , 0x38b8, 0x0000 },
+ { ZoomMgrStatus_uwXOrigin_LSByte , 0x38bc, 0x0000 },
{ ZoomMgrStatus_uwXOrigin_MSByte , 0x38bb, 0x0000 },
{ ZoomMgrStatus_uwYOrigin_LSByte , 0x38c0, 0x0000 },
{ ZoomMgrStatus_uwYOrigin_MSByte , 0x38bf, 0x0000 },
@@ -4104,7 +4609,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ WhiteBalanceConstrainerControls_fpRedA_LSByte , 0x3902, 0x0000 },
{ WhiteBalanceConstrainerControls_fpRedA_MSByte , 0x3901, 0x0000 },
{ WhiteBalanceConstrainerControls_fpBlueA_LSByte , 0x3906, 0x0000 },
-@@ -4356,6 +6227,9 @@ struct nomadik_vpip_param vpip_default_p
+ { WhiteBalanceConstrainerControls_fpBlueA_MSByte , 0x3905, 0x0000 },
+ { WhiteBalanceConstrainerControls_fpRedB_LSByte , 0x390a, 0x0000 },
+@@ -4354,25 +6225,34 @@ struct nomadik_vpip_param vpip_default_p
+ { WhiteBalanceConstrainerControls_fpBlueB_LSByte , 0x390e, 0x0000 },
+ { WhiteBalanceConstrainerControls_fpBlueB_MSByte , 0x390d, 0x3acf },
{ WhiteBalanceConstrainerControls_fpMaximumDistanceAllowedFromLocus_LSByte , 0x3912, 0x0000 },
{ WhiteBalanceConstrainerControls_fpMaximumDistanceAllowedFromLocus_MSByte , 0x3911, 0x2e8e },
{ WhiteBalanceConstrainerControls_fEnableConstrainedWhiteBalance , 0x3914, 0x0001 },
@@ -4114,7 +4623,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ WhiteBalanceConstrainerOutput_fpOutputRedGain_LSByte , 0x3982, 0x0000 },
{ WhiteBalanceConstrainerOutput_fpOutputRedGain_MSByte , 0x3981, 0x0000 },
{ WhiteBalanceConstrainerOutput_fpOutputGreenGain_LSByte , 0x3986, 0x0000 },
-@@ -4363,6 +6237,9 @@ struct nomadik_vpip_param vpip_default_p
+ { WhiteBalanceConstrainerOutput_fpOutputGreenGain_MSByte , 0x3985, 0x0000 },
{ WhiteBalanceConstrainerOutput_fpOutputBlueGain_LSByte , 0x398a, 0x0000 },
{ WhiteBalanceConstrainerOutput_fpOutputBlueGain_MSByte , 0x3989, 0x0000 },
{ WhiteBalanceConstrainerOutput_fAreGainsConstrained , 0x398c, 0x0000 },
@@ -4124,7 +4633,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ WhiteBalanceConstrainerInternal_fpGradientOfLocusAB_LSByte , 0x3a02, 0x0000 },
{ WhiteBalanceConstrainerInternal_fpGradientOfLocusAB_MSByte , 0x3a01, 0x0000 },
{ WhiteBalanceConstrainerInternal_fpDistanceOfInputPointFromLocusAB_LSByte , 0x3a06, 0x0000 },
-@@ -4371,6 +6248,9 @@ struct nomadik_vpip_param vpip_default_p
+ { WhiteBalanceConstrainerInternal_fpDistanceOfInputPointFromLocusAB_MSByte , 0x3a05, 0x0000 },
+ { WhiteBalanceConstrainerInternal_fpConstrainedRedPoint_LSByte , 0x3a0a, 0x0000 },
{ WhiteBalanceConstrainerInternal_fpConstrainedRedPoint_MSByte , 0x3a09, 0x0000 },
{ WhiteBalanceConstrainerInternal_fpConstrainedBluePoint_LSByte , 0x3a0e, 0x0000 },
{ WhiteBalanceConstrainerInternal_fpConstrainedBluePoint_MSByte , 0x3a0d, 0x0000 },
@@ -4134,7 +4644,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ModeSetupBank1_uwInputImageSize_X_LSByte , 0x3a82, 0x0000 },
{ ModeSetupBank1_uwInputImageSize_X_MSByte , 0x3a81, 0x0000 },
{ ModeSetupBank1_uwInputImageSize_Y_LSByte , 0x3a86, 0x0000 },
-@@ -4383,7 +6263,7 @@ struct nomadik_vpip_param vpip_default_p
+ { ModeSetupBank1_uwInputImageSize_Y_MSByte , 0x3a85, 0x0000 },
+ { ModeSetupBank1_uwMaxImageSize_X_LSByte , 0x3a8a, 0x0000 },
+@@ -4381,11 +6261,11 @@ struct nomadik_vpip_param vpip_default_p
+ { ModeSetupBank1_uwMaxImageSize_Y_MSByte , 0x3a8d, 0x0000 },
+ { ModeSetupBank1_uwMinImageSize_X_LSByte , 0x3a92, 0x0000 },
{ ModeSetupBank1_uwMinImageSize_X_MSByte , 0x3a91, 0x0000 },
{ ModeSetupBank1_uwMinImageSize_Y_LSByte , 0x3a96, 0x0000 },
{ ModeSetupBank1_uwMinImageSize_Y_MSByte , 0x3a95, 0x0000 },
@@ -4143,7 +4657,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ModeSetupBank1_fLowPowerStreaming , 0x3a9a, 0x0000 },
{ ModeSetupBank1_bTestMode , 0x3a9c, 0x0000 },
{ ModeSetupBank1_bNumberOfStatusLines , 0x3a9e, 0x0000 },
-@@ -4396,9 +6276,18 @@ struct nomadik_vpip_param vpip_default_p
+ { ModeSetupBank1_bNumberOfDarkLines , 0x3aa0, 0x0000 },
+ { ModeSetupBank1_bNumberOfBlackLines , 0x3aa2, 0x0000 },
+@@ -4394,13 +6274,22 @@ struct nomadik_vpip_param vpip_default_p
+ { ModeSetupBank1_uwNumberOfInterFrameLines_LSByte , 0x3aaa, 0x0000 },
+ { ModeSetupBank1_uwNumberOfInterFrameLines_MSByte , 0x3aa9, 0x0000 },
{ ModeSetupBank1_bNumberOfDummyColumns , 0x3aac, 0x0000 },
{ ModeSetupBank1_bInputImageSource , 0x3aae, 0x0000 },
{ ModeSetupBank1_bOutputImageDestination , 0x3ab0, 0x0000 },
@@ -4163,7 +4681,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AntiVignetteControlsFar_bFilterCoeff_R2_r , 0x3c02, 0x0000 },
{ AntiVignetteControlsFar_bFilterCoeff_R2_gr , 0x3c04, 0x0000 },
{ AntiVignetteControlsFar_bFilterCoeff_R2_gb , 0x3c06, 0x0000 },
-@@ -4434,7 +6323,10 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteControlsFar_bFilterCoeff_R2_b , 0x3c08, 0x0000 },
+ { AntiVignetteControlsFar_bFilterCoeff_R4_r , 0x3c0a, 0x0000 },
+@@ -4432,11 +6321,14 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteControlsFar_bUnityOffset_r , 0x3c3e, 0x0000 },
+ { AntiVignetteControlsFar_bUnityOffset_gr , 0x3c40, 0x0000 },
{ AntiVignetteControlsFar_bUnityOffset_gb , 0x3c42, 0x0000 },
{ AntiVignetteControlsFar_bUnityOffset_b , 0x3c44, 0x0000 },
{ AntiVignetteControlsFar_fAdaptiveAntiVignetteEnable , 0x3c46, 0x0000 },
@@ -4175,7 +4697,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AntiVignetteControlsNear_bFilterCoeff_R2_r , 0x3c82, 0x0000 },
{ AntiVignetteControlsNear_bFilterCoeff_R2_gr , 0x3c84, 0x0000 },
{ AntiVignetteControlsNear_bFilterCoeff_R2_gb , 0x3c86, 0x0000 },
-@@ -4470,6 +6362,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteControlsNear_bFilterCoeff_R2_b , 0x3c88, 0x0000 },
+ { AntiVignetteControlsNear_bFilterCoeff_R4_r , 0x3c8a, 0x0000 },
+@@ -4468,19 +6360,25 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiVignetteControlsNear_bUnityOffset_r , 0x3cbe, 0x0000 },
+ { AntiVignetteControlsNear_bUnityOffset_gr , 0x3cc0, 0x0000 },
{ AntiVignetteControlsNear_bUnityOffset_gb , 0x3cc2, 0x0000 },
{ AntiVignetteControlsNear_bUnityOffset_b , 0x3cc4, 0x0000 },
{ AntiVignetteControlsNear_fAdaptiveAntiVignetteEnable , 0x3cc6, 0x0000 },
@@ -4185,7 +4711,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AFStatsControls_fAbsSquareEnabled , 0x3d00, 0x0000 },
{ AFStatsControls_bCoringValue , 0x3d02, 0x0000 },
{ AFStatsControls_bWindowsSystem , 0x3d04, 0x0000 },
-@@ -4479,6 +6374,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AFStatsControls_bHRatio_Num , 0x3d06, 0x0000 },
+ { AFStatsControls_bHRatio_Den , 0x3d08, 0x0000 },
+ { AFStatsControls_bVRatio_Num , 0x3d0a, 0x0000 },
{ AFStatsControls_bVRatio_Den , 0x3d0c, 0x0000 },
{ AFStatsControls_bHostActiveZonesCounter , 0x3d0e, 0x0000 },
{ AFStatsControls_fAutoRefresh , 0x3d10, 0x0000 },
@@ -4195,7 +4723,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AFStatsStatus_bAFStats_Error , 0x3d80, 0x0000 },
{ AFStatsStatus_fAbsSquareEnabled , 0x3d82, 0x0000 },
{ AFStatsStatus_bCoringValue , 0x3d84, 0x0000 },
-@@ -4503,6 +6401,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AFStatsStatus_bWindowsSystem , 0x3d86, 0x0000 },
+ { AFStatsStatus_bActiveZonesCounter , 0x3d88, 0x0000 },
+@@ -4501,10 +6399,13 @@ struct nomadik_vpip_param vpip_default_p
+ { AFStatsStatus_udwMaxFocusMeasurePerPixel_Byte1 , 0x3da6, 0x0000 },
+ { AFStatsStatus_udwMaxFocusMeasurePerPixel_Byte2 , 0x3da8, 0x0000 },
{ AFStatsStatus_udwMaxFocusMeasurePerPixel_Byte3 , 0x3daa, 0x0000 },
{ AFStatsStatus_uwStartingAFZoneLine_LSByte , 0x3dae, 0x0000 },
{ AFStatsStatus_uwStartingAFZoneLine_MSByte , 0x3dad, 0x0000 },
@@ -4205,7 +4737,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AFFocusStats_udwStatsValue_0_Byte0 , 0x3e00, 0x0000 },
{ AFFocusStats_udwStatsValue_0_Byte1 , 0x3e02, 0x0000 },
{ AFFocusStats_udwStatsValue_0_Byte2 , 0x3e04, 0x0000 },
-@@ -4531,6 +6432,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AFFocusStats_udwStatsValue_0_Byte3 , 0x3e06, 0x0000 },
+ { AFFocusStats_udwStatsValue_1_Byte0 , 0x3e08, 0x0000 },
+@@ -4529,17 +6430,52 @@ struct nomadik_vpip_param vpip_default_p
+ { AFFocusStats_udwStatsValue_5_Byte3 , 0x3e2e, 0x0000 },
+ { AFFocusStats_udwStatsValue_6_Byte0 , 0x3e30, 0x0000 },
{ AFFocusStats_udwStatsValue_6_Byte1 , 0x3e32, 0x0000 },
{ AFFocusStats_udwStatsValue_6_Byte2 , 0x3e34, 0x0000 },
{ AFFocusStats_udwStatsValue_6_Byte3 , 0x3e36, 0x0000 },
@@ -4215,7 +4751,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AFLightStats_bStatsValue_0 , 0x3e80, 0x0000 },
{ AFLightStats_bStatsValue_1 , 0x3e82, 0x0000 },
{ AFLightStats_bStatsValue_2 , 0x3e84, 0x0000 },
-@@ -4538,6 +6442,38 @@ struct nomadik_vpip_param vpip_default_p
+ { AFLightStats_bStatsValue_3 , 0x3e86, 0x0000 },
{ AFLightStats_bStatsValue_4 , 0x3e88, 0x0000 },
{ AFLightStats_bStatsValue_5 , 0x3e8a, 0x0000 },
{ AFLightStats_bStatsValue_6 , 0x3e8c, 0x0000 },
@@ -4254,7 +4790,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FLADriverLowLevelParameters_wMinPosition_LSByte , 0x3f02, 0x0000 },
{ FLADriverLowLevelParameters_wMinPosition_MSByte , 0x3f01, 0x0000 },
{ FLADriverLowLevelParameters_wMaxPosition_LSByte , 0x3f06, 0x0000 },
-@@ -4565,6 +6501,9 @@ struct nomadik_vpip_param vpip_default_p
+ { FLADriverLowLevelParameters_wMaxPosition_MSByte , 0x3f05, 0x0000 },
+ { FLADriverLowLevelParameters_wHomePosition_LSByte , 0x3f0a, 0x0000 },
+@@ -4563,20 +6499,26 @@ struct nomadik_vpip_param vpip_default_p
+ { FLADriverLowLevelParameters_bNVM_PS_IBias , 0x3f2c, 0x0000 },
+ { FLADriverLowLevelParameters_bNVM_PS_RampGain , 0x3f2e, 0x0000 },
{ FLADriverLowLevelParameters_bNVM_PS_Type , 0x3f30, 0x0000 },
{ FLADriverLowLevelParameters_uwNVM_minidriver_m_c_LSByte , 0x3f34, 0x0000 },
{ FLADriverLowLevelParameters_uwNVM_minidriver_m_c_MSByte , 0x3f33, 0x0000 },
@@ -4264,7 +4804,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FLADriverControls_bMMode , 0x3f80, 0x0000 },
{ FLADriverControls_wTargetPosition_LSByte , 0x3f84, 0x0000 },
{ FLADriverControls_wTargetPosition_MSByte , 0x3f83, 0x0000 },
-@@ -4575,6 +6514,9 @@ struct nomadik_vpip_param vpip_default_p
+ { FLADriverControls_wPositionTolerance_LSByte , 0x3f88, 0x0000 },
+ { FLADriverControls_wPositionTolerance_MSByte , 0x3f87, 0x0000 },
+ { FLADriverControls_uwTimeLimit_ms_LSByte , 0x3f8c, 0x0000 },
+ { FLADriverControls_uwTimeLimit_ms_MSByte , 0x3f8b, 0x0000 },
{ FLADriverControls_bTrigger , 0x3f8e, 0x0000 },
{ FLADriverControls_bSlewMode , 0x3f90, 0x0000 },
{ FLADriverControls_bSlewRate , 0x3f92, 0x0000 },
@@ -4274,7 +4817,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FLADriverStatus_wLensPosition_LSByte , 0x4002, 0x0000 },
{ FLADriverStatus_wLensPosition_MSByte , 0x4001, 0x0000 },
{ FLADriverStatus_fLensIsMoving , 0x4004, 0x0000 },
-@@ -4586,6 +6528,9 @@ struct nomadik_vpip_param vpip_default_p
+ { FLADriverStatus_fLimitsExceeded , 0x4006, 0x0000 },
+ { FLADriverStatus_fLensIsAtHome , 0x4008, 0x0000 },
+@@ -4584,10 +6526,13 @@ struct nomadik_vpip_param vpip_default_p
+ { FLADriverStatus_bSkippedFrames , 0x400c, 0x0000 },
+ { FLADriverStatus_bCycles , 0x400e, 0x0000 },
{ FLADriverStatus_bMiniDriverTimeoutError , 0x4010, 0x0000 },
{ FLADriverStatus_wTargetPosition , 0x4012, 0x0000 },
{ FLADriverStatus_bLowLevelPosition , 0x4014, 0x0000 },
@@ -4284,7 +4831,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FocusControls_fErrorReset , 0x4080, 0x0000 },
{ FocusControls_bRange , 0x4082, 0x0000 },
{ FocusControls_bMode , 0x4084, 0x0000 },
-@@ -4597,6 +6542,9 @@ struct nomadik_vpip_param vpip_default_p
+ { FocusControls_bAFCommand , 0x4086, 0x0000 },
+ { FocusControls_bLensCommand , 0x4088, 0x0000 },
+@@ -4595,10 +6540,13 @@ struct nomadik_vpip_param vpip_default_p
+ { FocusControls_fTestCoinEnabled , 0x408c, 0x0000 },
+ { FocusControls_bControlCoin , 0x408e, 0x0000 },
{ FocusControls_fInternalStats_Disable , 0x4090, 0x0000 },
{ FocusControls_bActuator_Disable , 0x4092, 0x0000 },
{ FocusControls_fInhibitAutoMetering , 0x4094, 0x0000 },
@@ -4294,7 +4845,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FocusStatus_bModeStatus , 0x4100, 0x0000 },
{ FocusStatus_bAFCommandStatus , 0x4102, 0x0000 },
{ FocusStatus_bLensCommandStatus , 0x4104, 0x0000 },
-@@ -4612,6 +6560,30 @@ struct nomadik_vpip_param vpip_default_p
+ { FocusStatus_fAutoFocusEnabled , 0x4106, 0x0000 },
+ { FocusStatus_bRange , 0x4108, 0x0000 },
+@@ -4610,10 +6558,34 @@ struct nomadik_vpip_param vpip_default_p
+ { FocusStatus_fRunForTest , 0x4114, 0x0000 },
+ { FocusStatus_bStatusCoin , 0x4116, 0x0000 },
{ FocusStatus_fInternalStats_Disabled , 0x4118, 0x0000 },
{ FocusStatus_bActuator_Disabled , 0x411a, 0x0000 },
{ FocusStatus_bLastUsedAFSensor , 0x411c, 0x0000 },
@@ -4325,7 +4880,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ FocusRangeConstants_wFullRange_LensMinPosition_LSByte , 0x4182, 0x0000 },
{ FocusRangeConstants_wFullRange_LensMinPosition_MSByte , 0x4181, 0x0000 },
{ FocusRangeConstants_wFullRange_LensMaxPosition_LSByte , 0x4186, 0x0000 },
-@@ -4630,6 +6602,34 @@ struct nomadik_vpip_param vpip_default_p
+ { FocusRangeConstants_wFullRange_LensMaxPosition_MSByte , 0x4185, 0x03ff },
+ { FocusRangeConstants_wFullRange_LensRecoveryPosition_LSByte , 0x418a, 0x0000 },
+@@ -4628,10 +6600,38 @@ struct nomadik_vpip_param vpip_default_p
+ { FocusRangeConstants_wMacro_LensMinPosition_MSByte , 0x4199, 0x0000 },
+ { FocusRangeConstants_wMacro_LensMaxPosition_LSByte , 0x419e, 0x0000 },
{ FocusRangeConstants_wMacro_LensMaxPosition_MSByte , 0x419d, 0x03ff },
{ FocusRangeConstants_wMacro_LensRecoveryPosition_LSByte , 0x41a2, 0x0000 },
{ FocusRangeConstants_wMacro_LensRecoveryPosition_MSByte , 0x41a1, 0x01ff },
@@ -4360,7 +4919,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusControls_bHostCmd , 0x4200, 0x0000 },
{ AutoFocusControls_fFreezeIfStable , 0x4202, 0x0000 },
{ AutoFocusControls_fFMTesting_AutoDisable , 0x4204, 0x0001 },
-@@ -4653,6 +6653,35 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusControls_fFastAFAlgoStart , 0x4206, 0x0000 },
+ { AutoFocusControls_fBackLight_Enable , 0x4208, 0x0000 },
+@@ -4651,10 +6651,39 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusControls_fEnableTrakingZoneVariation , 0x4224, 0x0000 },
+ { AutoFocusControls_fEnableFunctionThresholdTest , 0x4226, 0x0001 },
{ AutoFocusControls_fForceTestState , 0x4228, 0x0000 },
{ AutoFocusControls_bManualAFNextState , 0x422a, 0x0000 },
{ AutoFocusControls_fResetHCSPos , 0x422c, 0x0001 },
@@ -4396,7 +4959,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusConstants_bCoarseStep , 0x4280, 0x0078 },
{ AutoFocusConstants_bFineStep , 0x4282, 0x0014 },
{ AutoFocusConstants_bFullSearchStep , 0x4284, 0x0000 },
-@@ -4677,11 +6706,17 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusConstants_bLeakyIntegratorConstant , 0x4286, 0x0000 },
+ { AutoFocusConstants_uwFineThreshold_LSByte , 0x428a, 0x0000 },
+@@ -4675,15 +6704,21 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusConstants_bLightGap , 0x42a6, 0x0000 },
+ { AutoFocusConstants_uwDeltaValue_LSByte , 0x42aa, 0x0000 },
{ AutoFocusConstants_uwDeltaValue_MSByte , 0x42a9, 0x0000 },
{ AutoFocusConstants_uwMaxFineTh_LSByte , 0x42ae, 0x0000 },
{ AutoFocusConstants_uwMaxFineTh_MSByte , 0x42ad, 0x0000 },
@@ -4414,7 +4981,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusStatus_bCycles , 0x4380, 0x0000 },
{ AutoFocusStatus_bHostCmd , 0x4382, 0x0000 },
{ AutoFocusStatus_bAF_PrevState , 0x4384, 0x0000 },
-@@ -4716,10 +6751,16 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusStatus_bAF_State , 0x4386, 0x0000 },
+ { AutoFocusStatus_bAF_NextState , 0x4388, 0x0000 },
+@@ -4714,14 +6749,20 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusStatus_uwTotalCoarseVariation_LSByte , 0x43bc, 0x0000 },
+ { AutoFocusStatus_uwTotalCoarseVariation_MSByte , 0x43bb, 0x0000 },
{ AutoFocusStatus_uwTotalFineVariation_LSByte , 0x43c0, 0x0000 },
{ AutoFocusStatus_uwTotalFineVariation_MSByte , 0x43bf, 0x0000 },
{ AutoFocusStatus_bCountVariationRegion , 0x43c2, 0x0000 },
@@ -4431,7 +5002,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusMeasureData_udwFocusMeasure_Byte0 , 0x4480, 0x0000 },
{ AutoFocusMeasureData_udwFocusMeasure_Byte1 , 0x4482, 0x0000 },
{ AutoFocusMeasureData_udwFocusMeasure_Byte2 , 0x4484, 0x0000 },
-@@ -4776,6 +6817,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusMeasureData_udwFocusMeasure_Byte3 , 0x4486, 0x0000 },
+ { AutoFocusMeasureData_udwPrevFocusMeasure_Byte0 , 0x4488, 0x0000 },
+@@ -4774,24 +6815,33 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusMeasureData_udwCurrentFocusMeasureDifference_Byte3 , 0x44e6, 0x0000 },
+ { AutoFocusMeasureData_udwOldTrackingFocusMeasure_Byte0 , 0x44e8, 0x0000 },
{ AutoFocusMeasureData_udwOldTrackingFocusMeasure_Byte1 , 0x44ea, 0x0000 },
{ AutoFocusMeasureData_udwOldTrackingFocusMeasure_Byte2 , 0x44ec, 0x0000 },
{ AutoFocusMeasureData_udwOldTrackingFocusMeasure_Byte3 , 0x44ee, 0x0000 },
@@ -4441,7 +5016,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusWeightControls_bWeight_0 , 0x4500, 0x0000 },
{ AutoFocusWeightControls_bWeight_1 , 0x4502, 0x0000 },
{ AutoFocusWeightControls_bWeight_2 , 0x4504, 0x0000 },
-@@ -4783,6 +6827,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusWeightControls_bWeight_3 , 0x4506, 0x0000 },
{ AutoFocusWeightControls_bWeight_4 , 0x4508, 0x0000 },
{ AutoFocusWeightControls_bWeight_5 , 0x450a, 0x0000 },
{ AutoFocusWeightControls_bWeight_6 , 0x450c, 0x0000 },
@@ -4451,7 +5026,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusDynamicWeight_bWeight_0 , 0x4580, 0x0000 },
{ AutoFocusDynamicWeight_bWeight_1 , 0x4582, 0x0000 },
{ AutoFocusDynamicWeight_bWeight_2 , 0x4584, 0x0000 },
-@@ -4790,6 +6837,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusDynamicWeight_bWeight_3 , 0x4586, 0x0000 },
{ AutoFocusDynamicWeight_bWeight_4 , 0x4588, 0x0000 },
{ AutoFocusDynamicWeight_bWeight_5 , 0x458a, 0x0000 },
{ AutoFocusDynamicWeight_bWeight_6 , 0x458c, 0x0000 },
@@ -4461,7 +5036,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusThresholds_uwCoarseThreshold_LSByte , 0x4602, 0x0000 },
{ AutoFocusThresholds_uwCoarseThreshold_MSByte , 0x4601, 0x0000 },
{ AutoFocusThresholds_uwFineThreshold_LSByte , 0x4606, 0x0000 },
-@@ -4806,6 +6856,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusThresholds_uwFineThreshold_MSByte , 0x4605, 0x0000 },
+ { AutoFocusThresholds_uwBeforeMotionBlur_LSByte , 0x460a, 0x0000 },
+@@ -4804,10 +6854,13 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusThresholds_udwCurrentVariation_Byte3 , 0x4616, 0x0000 },
+ { AutoFocusThresholds_udwLowFocusMeasureValue_Byte0 , 0x4618, 0x0000 },
{ AutoFocusThresholds_udwLowFocusMeasureValue_Byte1 , 0x461a, 0x0000 },
{ AutoFocusThresholds_udwLowFocusMeasureValue_Byte2 , 0x461c, 0x0000 },
{ AutoFocusThresholds_udwLowFocusMeasureValue_Byte3 , 0x461e, 0x0000 },
@@ -4471,7 +5050,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusHeuristicConstants_uwLensPositionInputMax_LSByte , 0x4682, 0x0000 },
{ AutoFocusHeuristicConstants_uwLensPositionInputMax_MSByte , 0x4681, 0x0000 },
{ AutoFocusHeuristicConstants_uwLensPositionInputMin_LSByte , 0x4686, 0x0000 },
-@@ -4822,6 +6875,9 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusHeuristicConstants_uwLensPositionInputMin_MSByte , 0x4685, 0x0000 },
+ { AutoFocusHeuristicConstants_bBrightnessInputMax , 0x4688, 0x0000 },
+@@ -4820,10 +6873,13 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusHeuristicConstants_uwFineToCoarseMax_MSByte , 0x4695, 0x0000 },
+ { AutoFocusHeuristicConstants_uwFineToCoarseMin_LSByte , 0x469a, 0x0000 },
{ AutoFocusHeuristicConstants_uwFineToCoarseMin_MSByte , 0x4699, 0x0000 },
{ AutoFocusHeuristicConstants_bHighToMaxFMShiftFactor , 0x469c, 0x0000 },
{ AutoFocusHeuristicConstants_bLowToHighFMShiftFactor , 0x469e, 0x0000 },
@@ -4481,7 +5064,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AutoFocusThHeuristicInput_udwFocusMeasureInputMax_Byte0 , 0x4700, 0x0000 },
{ AutoFocusThHeuristicInput_udwFocusMeasureInputMax_Byte1 , 0x4702, 0x0000 },
{ AutoFocusThHeuristicInput_udwFocusMeasureInputMax_Byte2 , 0x4704, 0x0000 },
-@@ -4837,19 +6893,31 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusThHeuristicInput_udwFocusMeasureInputMax_Byte3 , 0x4706, 0x0000 },
+ { AutoFocusThHeuristicInput_udwFocusMeasureInputMin_Byte0 , 0x4708, 0x0000 },
+@@ -4835,23 +6891,35 @@ struct nomadik_vpip_param vpip_default_p
+ { AutoFocusThHeuristicInput_udwFocusMeasureInput_Byte2 , 0x4714, 0x0000 },
+ { AutoFocusThHeuristicInput_udwFocusMeasureInput_Byte3 , 0x4716, 0x0000 },
{ AutoFocusThHeuristicInput_uwLensPositionInput_LSByte , 0x471a, 0x0000 },
{ AutoFocusThHeuristicInput_uwLensPositionInput_MSByte , 0x4719, 0x0000 },
{ AutoFocusThHeuristicInput_bBrightnessInput , 0x471c, 0x0000 },
@@ -4515,7 +5102,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ MiscPageElements_fEnableIntelligentFlash , 0x4904, 0x0000 },
{ MiscPageElements_fEligibleFrameForMetering , 0x4906, 0x0000 },
{ MiscPageElements_fFlashGunIlluminatedFrameStreamed , 0x4908, 0x0000 },
-@@ -4863,7 +6931,13 @@ struct nomadik_vpip_param vpip_default_p
+ { MiscPageElements_VpipCut , 0x490a, 0x0000 },
+ { MiscPageElements_bGPIOClockFrequency_Mhz , 0x490c, 0x0000 },
+@@ -4861,42 +6929,60 @@ struct nomadik_vpip_param vpip_default_p
+ { MiscPageElements_fEnableDelayWhenStoppingSensor , 0x4914, 0x0000 },
+ { MiscPageElements_fTriggerFlashOnStreaming , 0x4916, 0x0000 },
{ MiscPageElements_fDoNotOutputFrameInIntelligentFlash , 0x4918, 0x0000 },
{ MiscPageElements_fDisableToshibaInit , 0x491a, 0x0000 },
{ MiscPageElements_bNumberofFramesTobeSkippedByRx , 0x491c, 0x0000 },
@@ -4529,7 +5120,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ MasterI2cClockControl_bCountFall , 0x4a00, 0x0000 },
{ MasterI2cClockControl_bCountRise , 0x4a02, 0x0000 },
{ MasterI2cClockControl_bCountHigh , 0x4a04, 0x0000 },
-@@ -4873,6 +6947,9 @@ struct nomadik_vpip_param vpip_default_p
+ { MasterI2cClockControl_bCountBuffer , 0x4a06, 0x0000 },
+ { MasterI2cClockControl_bCountHoldData , 0x4a08, 0x0000 },
+ { MasterI2cClockControl_bCountSetupData , 0x4a0a, 0x0000 },
{ MasterI2cClockControl_bCountHoldStart , 0x4a0c, 0x0000 },
{ MasterI2cClockControl_bCountSetupStart , 0x4a0e, 0x0000 },
{ MasterI2cClockControl_bCountSetupStop , 0x4a10, 0x0000 },
@@ -4539,7 +5132,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ZoomMgrFOVCtrl_bShiftCenter , 0x4a80, 0x0000 },
{ ZoomMgrFOVCtrl_uwXOrigin_LSByte , 0x4a84, 0x0000 },
{ ZoomMgrFOVCtrl_uwXOrigin_MSByte , 0x4a83, 0x0000 },
-@@ -4881,11 +6958,17 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrFOVCtrl_uwYOrigin_LSByte , 0x4a88, 0x0000 },
+ { ZoomMgrFOVCtrl_uwYOrigin_MSByte , 0x4a87, 0x0000 },
{ ZoomMgrFOVCtrl_fRestrictMaxFOVToChosenFOV , 0x4a8a, 0x0000 },
{ ZoomMgrFOVCtrl_fCalculateMinFOVAlways , 0x4a8c, 0x0000 },
{ ZoomMgrFOVCtrl_fInhibitMaxFOVAtModeStaticChange , 0x4a8e, 0x0000 },
@@ -4557,7 +5151,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ZoomMgrStripeCtrl_bStripeControl , 0x4b80, 0x0000 },
{ ZoomMgrStripeCtrl_uwStripeStartAddr_LSByte , 0x4b84, 0x0000 },
{ ZoomMgrStripeCtrl_uwStripeStartAddr_MSByte , 0x4b83, 0x0000 },
-@@ -4895,6 +6978,9 @@ struct nomadik_vpip_param vpip_default_p
+ { ZoomMgrStripeCtrl_uwStripeSize_LSByte , 0x4b88, 0x0000 },
+ { ZoomMgrStripeCtrl_uwStripeSize_MSByte , 0x4b87, 0x0000 },
+ { ZoomMgrStripeCtrl_uwStripeInMinLineSize_LSByte , 0x4b8c, 0x0000 },
{ ZoomMgrStripeCtrl_uwStripeInMinLineSize_MSByte , 0x4b8b, 0x0000 },
{ ZoomMgrStripeCtrl_uwBmsFrameLength_LSByte , 0x4b90, 0x0000 },
{ ZoomMgrStripeCtrl_uwBmsFrameLength_MSByte , 0x4b8f, 0x0000 },
@@ -4567,7 +5163,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ LftStripeParam_uwGPSISize_LSByte , 0x4c02, 0x0000 },
{ LftStripeParam_uwGPSISize_MSByte , 0x4c01, 0x0000 },
{ LftStripeParam_uwGPSOSize_LSByte , 0x4c06, 0x0000 },
-@@ -4915,6 +7001,9 @@ struct nomadik_vpip_param vpip_default_p
+ { LftStripeParam_uwGPSOSize_MSByte , 0x4c05, 0x0000 },
+ { LftStripeParam_uwRightBorder_LSByte , 0x4c0a, 0x0000 },
+@@ -4913,10 +6999,13 @@ struct nomadik_vpip_param vpip_default_p
+ { LftStripeParam_uwStripeInCropSize_MSByte , 0x4c1d, 0x0000 },
+ { LftStripeParam_uwStripeOutCropStart_LSByte , 0x4c22, 0x0000 },
{ LftStripeParam_uwStripeOutCropStart_MSByte , 0x4c21, 0x0000 },
{ LftStripeParam_uwStripeOutCropSize_LSByte , 0x4c26, 0x0000 },
{ LftStripeParam_uwStripeOutCropSize_MSByte , 0x4c25, 0x0000 },
@@ -4577,7 +5177,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ RgtStripeParam_uwGPSISize_LSByte , 0x4c82, 0x0000 },
{ RgtStripeParam_uwGPSISize_MSByte , 0x4c81, 0x0000 },
{ RgtStripeParam_uwGPSOSize_LSByte , 0x4c86, 0x0000 },
-@@ -4935,6 +7024,9 @@ struct nomadik_vpip_param vpip_default_p
+ { RgtStripeParam_uwGPSOSize_MSByte , 0x4c85, 0x0000 },
+ { RgtStripeParam_uwRightBorder_LSByte , 0x4c8a, 0x0000 },
+@@ -4933,34 +7022,70 @@ struct nomadik_vpip_param vpip_default_p
+ { RgtStripeParam_uwStripeInCropSize_MSByte , 0x4c9d, 0x0000 },
+ { RgtStripeParam_uwStripeOutCropStart_LSByte , 0x4ca2, 0x0000 },
{ RgtStripeParam_uwStripeOutCropStart_MSByte , 0x4ca1, 0x0000 },
{ RgtStripeParam_uwStripeOutCropSize_LSByte , 0x4ca6, 0x0000 },
{ RgtStripeParam_uwStripeOutCropSize_MSByte , 0x4ca5, 0x0000 },
@@ -4587,7 +5191,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ DigitalGainStatus_uwCodedGreen1Gain_LSByte , 0x4d02, 0x0000 },
{ DigitalGainStatus_uwCodedGreen1Gain_MSByte , 0x4d01, 0x0000 },
{ DigitalGainStatus_uwCodedRedGain_LSByte , 0x4d06, 0x0000 },
-@@ -4943,10 +7035,16 @@ struct nomadik_vpip_param vpip_default_p
+ { DigitalGainStatus_uwCodedRedGain_MSByte , 0x4d05, 0x0000 },
+ { DigitalGainStatus_uwCodedBlueGain_LSByte , 0x4d0a, 0x0000 },
{ DigitalGainStatus_uwCodedBlueGain_MSByte , 0x4d09, 0x0000 },
{ DigitalGainStatus_uwCodedGreen2Gain_LSByte , 0x4d0e, 0x0000 },
{ DigitalGainStatus_uwCodedGreen2Gain_MSByte , 0x4d0d, 0x0000 },
@@ -4604,7 +5209,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AntiFlickerExposureStatus_fpFlickerFreePeriod_us_LSByte , 0x4e02, 0x0000 },
{ AntiFlickerExposureStatus_fpFlickerFreePeriod_us_MSByte , 0x4e01, 0x0000 },
{ AntiFlickerExposureStatus_fpGainedFlickerFreeTimePeriod_us_LSByte , 0x4e06, 0x0000 },
-@@ -4955,10 +7053,37 @@ struct nomadik_vpip_param vpip_default_p
+ { AntiFlickerExposureStatus_fpGainedFlickerFreeTimePeriod_us_MSByte , 0x4e05, 0x0000 },
+ { AntiFlickerExposureStatus_uwMaxFlickerFreeBunches_LSByte , 0x4e0a, 0x0000 },
{ AntiFlickerExposureStatus_uwMaxFlickerFreeBunches_MSByte , 0x4e09, 0x0000 },
{ AntiFlickerExposureStatus_fpConstrainedFlickerFreePeriod_us_LSByte , 0x4e0e, 0x0000 },
{ AntiFlickerExposureStatus_fpConstrainedFlickerFreePeriod_us_MSByte , 0x4e0d, 0x0000 },
@@ -4642,7 +5248,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorSetupFarSensor_uwGuaranteedDataSaturationLevel_LSByte , 0x5002, 0x0000 },
{ SensorSetupFarSensor_uwGuaranteedDataSaturationLevel_MSByte , 0x5001, 0x043f },
{ SensorSetupFarSensor_uwMinimumSensorRxPixelValue_LSByte , 0x5006, 0x0000 },
-@@ -4972,6 +7097,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorSetupFarSensor_uwMinimumSensorRxPixelValue_MSByte , 0x5005, 0x0004 },
+ { SensorSetupFarSensor_uwMaximumSensorRxPixelValue_LSByte , 0x500a, 0x0000 },
+@@ -4970,10 +7095,13 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorSetupFarSensor_fpGreenTiltGain_LSByte , 0x5012, 0x0000 },
+ { SensorSetupFarSensor_fpGreenTiltGain_MSByte , 0x5011, 0x3e00 },
{ SensorSetupFarSensor_fpBlueTiltGain_LSByte , 0x5016, 0x0000 },
{ SensorSetupFarSensor_fpBlueTiltGain_MSByte , 0x5015, 0x3e00 },
{ SensorSetupFarSensor_BlackCorrectionOffset , 0x5018, 0x0000 },
@@ -4652,7 +5262,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ SensorSetupNearSensor_uwGuaranteedDataSaturationLevel_LSByte , 0x5082, 0x0000 },
{ SensorSetupNearSensor_uwGuaranteedDataSaturationLevel_MSByte , 0x5081, 0x0000 },
{ SensorSetupNearSensor_uwMinimumSensorRxPixelValue_LSByte , 0x5086, 0x0000 },
-@@ -4985,6 +7113,9 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorSetupNearSensor_uwMinimumSensorRxPixelValue_MSByte , 0x5085, 0x0000 },
+ { SensorSetupNearSensor_uwMaximumSensorRxPixelValue_LSByte , 0x508a, 0x0000 },
+@@ -4983,10 +7111,13 @@ struct nomadik_vpip_param vpip_default_p
+ { SensorSetupNearSensor_fpGreenTiltGain_LSByte , 0x5092, 0x0000 },
+ { SensorSetupNearSensor_fpGreenTiltGain_MSByte , 0x5091, 0x0000 },
{ SensorSetupNearSensor_fpBlueTiltGain_LSByte , 0x5096, 0x0000 },
{ SensorSetupNearSensor_fpBlueTiltGain_MSByte , 0x5095, 0x0000 },
{ SensorSetupNearSensor_BlackCorrectionOffset , 0x5098, 0x0000 },
@@ -4662,7 +5276,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ToshibaOtpRead_otp_inf_2 , 0x5100, 0x0000 },
{ ToshibaOtpRead_otp_inf_1 , 0x5102, 0x0000 },
{ ToshibaOtpRead_otp_inf_0 , 0x5104, 0x0000 },
-@@ -4996,8 +7127,24 @@ struct nomadik_vpip_param vpip_default_p
+ { ToshibaOtpRead_otp_mac_2 , 0x5106, 0x0000 },
+ { ToshibaOtpRead_otp_mac_1 , 0x5108, 0x0000 },
+@@ -4994,20 +7125,71 @@ struct nomadik_vpip_param vpip_default_p
+ { ToshibaOtpRead_otp_posA_1 , 0x510c, 0x0000 },
+ { ToshibaOtpRead_otp_posA_0 , 0x510e, 0x0000 },
{ ToshibaOtpRead_otp_posB_1 , 0x5110, 0x0000 },
{ ToshibaOtpRead_otp_posB_0 , 0x5112, 0x0000 },
{ ToshibaOtpRead_otp_register_map_ver , 0x5114, 0x0000 },
@@ -4687,7 +5305,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ReferenceIlluminantCasts_fpCAST0_LSByte , 0x5202, 0x0000 },
{ ReferenceIlluminantCasts_fpCAST0_MSByte , 0x5201, 0x38b8 },
{ ReferenceIlluminantCasts_fpCAST1_LSByte , 0x5206, 0x0000 },
-@@ -5006,6 +7153,41 @@ struct nomadik_vpip_param vpip_default_p
+ { ReferenceIlluminantCasts_fpCAST1_MSByte , 0x5205, 0x396d },
+ { ReferenceIlluminantCasts_fpCAST2_LSByte , 0x520a, 0x0000 },
{ ReferenceIlluminantCasts_fpCAST2_MSByte , 0x5209, 0x3a1b },
{ ReferenceIlluminantCasts_fpCAST3_LSByte , 0x520e, 0x0000 },
{ ReferenceIlluminantCasts_fpCAST3_MSByte , 0x520d, 0x3af2 },
@@ -4729,7 +5348,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AdaptiveAVParameter_B_bAvUnityOffset_Day , 0x5280, 0x0040 },
{ AdaptiveAVParameter_B_bAvCoeffR2_Day , 0x5282, 0x003e },
{ AdaptiveAVParameter_B_bAvCoeffR4_Day , 0x5284, 0x00e8 },
-@@ -5034,6 +7216,38 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_B_wAvHOffset_Day_LSByte , 0x5288, 0x0000 },
+ { AdaptiveAVParameter_B_wAvHOffset_Day_MSByte , 0x5287, 0x0003 },
+@@ -5032,10 +7214,42 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_B_bAvCoeffR4_HOR , 0x52ae, 0x00f0 },
+ { AdaptiveAVParameter_B_wAvHOffset_HOR_LSByte , 0x52b2, 0x0000 },
{ AdaptiveAVParameter_B_wAvHOffset_HOR_MSByte , 0x52b1, 0x000b },
{ AdaptiveAVParameter_B_wAvVOffset_HOR_LSByte , 0x52b6, 0x0000 },
{ AdaptiveAVParameter_B_wAvVOffset_HOR_MSByte , 0x52b5, 0x001d },
@@ -4768,7 +5391,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AdaptiveAVParameter_GB_bAvUnityOffset_Day , 0x5300, 0x0040 },
{ AdaptiveAVParameter_GB_bAvCoeffR2_Day , 0x5302, 0x0047 },
{ AdaptiveAVParameter_GB_bAvCoeffR4_Day , 0x5304, 0x00ec },
-@@ -5062,6 +7276,39 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_GB_wAvHOffset_Day_LSByte , 0x5308, 0x0000 },
+ { AdaptiveAVParameter_GB_wAvHOffset_Day_MSByte , 0x5307, 0x000a },
+@@ -5060,10 +7274,43 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_GB_bAvCoeffR4_HOR , 0x532e, 0x00f0 },
+ { AdaptiveAVParameter_GB_wAvHOffset_HOR_LSByte , 0x5332, 0x0000 },
{ AdaptiveAVParameter_GB_wAvHOffset_HOR_MSByte , 0x5331, 0x000c },
{ AdaptiveAVParameter_GB_wAvVOffset_HOR_LSByte , 0x5336, 0x0000 },
{ AdaptiveAVParameter_GB_wAvVOffset_HOR_MSByte , 0x5335, 0x0014 },
@@ -4808,7 +5435,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AdaptiveAVParameter_GR_bAvUnityOffset_Day , 0x5380, 0x0040 },
{ AdaptiveAVParameter_GR_bAvCoeffR2_Day , 0x5382, 0x0048 },
{ AdaptiveAVParameter_GR_bAvCoeffR4_Day , 0x5384, 0x00e8 },
-@@ -5090,6 +7337,38 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_GR_wAvHOffset_Day_LSByte , 0x5388, 0x0000 },
+ { AdaptiveAVParameter_GR_wAvHOffset_Day_MSByte , 0x5387, 0x0009 },
+@@ -5088,10 +7335,42 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_GR_bAvCoeffR4_HOR , 0x53ae, 0x00ef },
+ { AdaptiveAVParameter_GR_wAvHOffset_HOR_LSByte , 0x53b2, 0x0000 },
{ AdaptiveAVParameter_GR_wAvHOffset_HOR_MSByte , 0x53b1, 0x000c },
{ AdaptiveAVParameter_GR_wAvVOffset_HOR_LSByte , 0x53b6, 0x0000 },
{ AdaptiveAVParameter_GR_wAvVOffset_HOR_MSByte , 0x53b5, 0x0001 },
@@ -4847,7 +5478,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ AdaptiveAVParameter_R_bAvUnityOffset_Day , 0x5400, 0x0040 },
{ AdaptiveAVParameter_R_bAvCoeffR2_Day , 0x5402, 0x0067 },
{ AdaptiveAVParameter_R_bAvCoeffR4_Day , 0x5404, 0x00f6 },
-@@ -5118,17 +7397,39 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_R_wAvHOffset_Day_LSByte , 0x5408, 0x0000 },
+ { AdaptiveAVParameter_R_wAvHOffset_Day_MSByte , 0x5407, 0x000a },
+@@ -5116,21 +7395,43 @@ struct nomadik_vpip_param vpip_default_p
+ { AdaptiveAVParameter_R_bAvCoeffR4_HOR , 0x542e, 0x00f7 },
+ { AdaptiveAVParameter_R_wAvHOffset_HOR_LSByte , 0x5432, 0x0000 },
{ AdaptiveAVParameter_R_wAvHOffset_HOR_MSByte , 0x5431, 0x000a },
{ AdaptiveAVParameter_R_wAvVOffset_HOR_LSByte , 0x5436, 0x0000 },
{ AdaptiveAVParameter_R_wAvVOffset_HOR_MSByte , 0x5435, 0x0004 },
@@ -4887,7 +5522,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ DynamicConstrainedWBControls_fpRedA_LSByte , 0x5582, 0x0000 },
{ DynamicConstrainedWBControls_fpRedA_MSByte , 0x5581, 0x3881 },
{ DynamicConstrainedWBControls_fpBlueA_LSByte , 0x5586, 0x0000 },
-@@ -5140,6 +7441,8 @@ struct nomadik_vpip_param vpip_default_p
+ { DynamicConstrainedWBControls_fpBlueA_MSByte , 0x5585, 0x3c68 },
+ { DynamicConstrainedWBControls_fpDamperLowThreshold_LSByte , 0x558a, 0x0000 },
+@@ -5138,10 +7439,12 @@ struct nomadik_vpip_param vpip_default_p
+ { DynamicConstrainedWBControls_fpMinimumDamperOutput_LSByte , 0x558e, 0x0000 },
+ { DynamicConstrainedWBControls_fpMinimumDamperOutput_MSByte , 0x558d, 0x3a66 },
{ DynamicConstrainedWBControls_fpDamperHighThreshold_LSByte , 0x5592, 0x0000 },
{ DynamicConstrainedWBControls_fpDamperHighThreshold_MSByte , 0x5591, 0x5a71 },
{ DynamicConstrainedWBControls_fDamperDisable , 0x5594, 0x0000 },
@@ -4896,7 +5535,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ Toshiba_AF_NVM_Read_NVM_Far2Near_inf_LSByte , 0x5602, 0x0000 },
{ Toshiba_AF_NVM_Read_NVM_Far2Near_inf_MSByte , 0x5601, 0x0000 },
{ Toshiba_AF_NVM_Read_NVM_Near2Far_inf_LSByte , 0x5606, 0x0000 },
-@@ -5152,6 +7455,23 @@ struct nomadik_vpip_param vpip_default_p
+ { Toshiba_AF_NVM_Read_NVM_Near2Far_inf_MSByte , 0x5605, 0x0000 },
+ { Toshiba_AF_NVM_Read_NVM_Far2Near_mac_LSByte , 0x560a, 0x0000 },
+@@ -5150,27 +7453,81 @@ struct nomadik_vpip_param vpip_default_p
+ { Toshiba_AF_NVM_Read_NVM_Near2Far_mac_MSByte , 0x560d, 0x0000 },
+ { Toshiba_AF_NVM_Read_NVM_Pos_A_LSByte , 0x5612, 0x0000 },
{ Toshiba_AF_NVM_Read_NVM_Pos_A_MSByte , 0x5611, 0x0000 },
{ Toshiba_AF_NVM_Read_NVM_Pos_B_LSByte , 0x5616, 0x0000 },
{ Toshiba_AF_NVM_Read_NVM_Pos_B_MSByte , 0x5615, 0x0000 },
@@ -4920,7 +5563,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ Toshiba_Vcm_Parameters_wLowLevelMacroPos_LSByte , 0x5682, 0x0000 },
{ Toshiba_Vcm_Parameters_wLowLevelMacroPos_MSByte , 0x5681, 0x0000 },
{ Toshiba_Vcm_Parameters_wLowLevelInfinityPos_LSByte , 0x5686, 0x0000 },
-@@ -5162,13 +7482,50 @@ struct nomadik_vpip_param vpip_default_p
+ { Toshiba_Vcm_Parameters_wLowLevelInfinityPos_MSByte , 0x5685, 0x0000 },
+ { Toshiba_Vcm_Parameters_bSlewControlModeEnable , 0x5688, 0x0000 },
+ { Toshiba_Vcm_Parameters_bSlewModeForSmallerStep , 0x568a, 0x0001 },
+ { Toshiba_Vcm_Parameters_bSlewRateForSmallerStep , 0x568c, 0x0004 },
{ Toshiba_Vcm_Parameters_bSlewModeForLargerStep , 0x568e, 0x0008 },
{ Toshiba_Vcm_Parameters_bSlewRateForLargerStep , 0x5690, 0x0007 },
{ Toshiba_Vcm_Parameters_bThresholdStepSize , 0x5692, 0x00b0 },
@@ -4971,7 +5617,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine1_ColourMatrixFarSensor_fpRInR_LSByte , 0x5802, 0x0000 },
{ ColourEngine1_ColourMatrixFarSensor_fpRInR_MSByte , 0x5801, 0x3f0c },
{ ColourEngine1_ColourMatrixFarSensor_fpGInR_LSByte , 0x5806, 0x0000 },
-@@ -5187,6 +7544,8 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine1_ColourMatrixFarSensor_fpGInR_MSByte , 0x5805, 0xb887 },
+ { ColourEngine1_ColourMatrixFarSensor_fpBInR_LSByte , 0x580a, 0x0000 },
+@@ -5185,10 +7542,12 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine1_ColourMatrixFarSensor_fpRInB_MSByte , 0x5819, 0xbc6e },
+ { ColourEngine1_ColourMatrixFarSensor_fpGInB_LSByte , 0x581e, 0x0000 },
{ ColourEngine1_ColourMatrixFarSensor_fpGInB_MSByte , 0x581d, 0xc01b },
{ ColourEngine1_ColourMatrixFarSensor_fpBInB_LSByte , 0x5822, 0x0000 },
{ ColourEngine1_ColourMatrixFarSensor_fpBInB_MSByte , 0x5821, 0x41b7 },
@@ -4980,7 +5630,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ColourEngine1_ColourMatrixNearSensor_fpRInR_LSByte , 0x5882, 0x0000 },
{ ColourEngine1_ColourMatrixNearSensor_fpRInR_MSByte , 0x5881, 0x0000 },
{ ColourEngine1_ColourMatrixNearSensor_fpGInR_LSByte , 0x5886, 0x0000 },
-@@ -5205,8 +7564,30 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine1_ColourMatrixNearSensor_fpGInR_MSByte , 0x5885, 0x0000 },
+ { ColourEngine1_ColourMatrixNearSensor_fpBInR_LSByte , 0x588a, 0x0000 },
+@@ -5203,31 +7562,63 @@ struct nomadik_vpip_param vpip_default_p
+ { ColourEngine1_ColourMatrixNearSensor_fpRInB_MSByte , 0x5899, 0x0000 },
+ { ColourEngine1_ColourMatrixNearSensor_fpGInB_LSByte , 0x589e, 0x0000 },
{ ColourEngine1_ColourMatrixNearSensor_fpGInB_MSByte , 0x589d, 0x0000 },
{ ColourEngine1_ColourMatrixNearSensor_fpBInB_LSByte , 0x58a2, 0x0000 },
{ ColourEngine1_ColourMatrixNearSensor_fpBInB_MSByte , 0x58a1, 0x0000 },
@@ -5011,7 +5665,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
{ ToshibaTechnicalParamTuner_uwHostLevelMacroPos_LSByte , 0x5982, 0x0000 },
{ ToshibaTechnicalParamTuner_uwHostLevelMacroPos_MSByte , 0x5981, 0x0000 },
{ ToshibaTechnicalParamTuner_uwHostLevelInfinityPos_LSByte , 0x5986, 0x0000 },
-@@ -5216,16 +7597,26 @@ struct nomadik_vpip_param vpip_default_p
+ { ToshibaTechnicalParamTuner_uwHostLevelInfinityPos_MSByte , 0x5985, 0x0000 },
+ { ToshibaTechnicalParamTuner_uwDefAFMaxStandardRange_um_LSByte , 0x598a, 0x0000 },
+ { ToshibaTechnicalParamTuner_uwDefAFMaxStandardRange_um_MSByte , 0x5989, 0x012c },
{ ToshibaTechnicalParamTuner_bDefFineStepParam_um , 0x598c, 0x0008 },
{ ToshibaTechnicalParamTuner_bDefCoarseStepParam_um , 0x598e, 0x0030 },
{ ToshibaTechnicalParamTuner_fHostDefTechParam , 0x5990, 0x0002 },
@@ -5040,7 +5696,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
int sva_vpip_auto_focus(struct sva_device_open *open, struct vpip_autofocus_id *mode)
{
-@@ -6234,63 +8625,12 @@ static int irp_start_fw(struct sva_servi
+ struct sva_service_open *srv_open;
+ u16 vpip_state=0;
+@@ -6232,67 +8623,16 @@ static int irp_start_fw(struct sva_servi
+ IRP_ASSERT(irp_write_packet(srv_open, vpip_default_params[VfpnControls_bLogThreshLog].addr,vpip_default_params[VfpnControls_bLogThreshLog].val));// 0x4));
+ IRP_ASSERT(irp_write_packet(srv_open, vpip_default_params[AntiFlickerExposureControls_bMainsFrequency_Hz].addr,vpip_default_params[AntiFlickerExposureControls_bMainsFrequency_Hz].val));// 0x32));
@@ -5105,7 +5765,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
/**
Update only configuration registers
-@@ -6310,6 +8650,7 @@ static int irp_start_fw(struct sva_servi
+ */
+ case PipeSetupBankB_fCb_Cr_Flip :
+@@ -6308,10 +8648,11 @@ static int irp_start_fw(struct sva_servi
+ case SensorCapabilitiesFarSensor_uwSensorAnalogGainMaximum_MSByte :
+ case SensorCapabilitiesFarSensor_uwSensorDataPedestal_MSByte :
case SensorCapabilitiesCurrentSensor_uwSensorAnalogGainMinimum_MSByte :
case SensorCapabilitiesCurrentSensor_uwSensorAnalogGainMaximum_MSByte :
case FlashManagerControl_bMode :
@@ -5113,7 +5777,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case FlashManagerControl_bFlashType :
case FlashManagerControl_fOrMainAndPreFlashPulse :
case FlashManagerControl_RefPointCalcMode :
-@@ -6327,8 +8668,6 @@ static int irp_start_fw(struct sva_servi
+ case FlashManagerControl_wIntegrationStartPosition_MSByte :
+ case FlashManagerControl_fOverrideIntegrationStartPosition :
+@@ -6325,12 +8666,10 @@ static int irp_start_fw(struct sva_servi
+ case FlashManagerControl_wMainFlashStartLine_MSByte :
+ case FlashManagerControl_wMainFlashStartPixel_MSByte :
case FlashManagerControl_cPreFlashStartFrame :
case FlashManagerControl_wPreFlashStartLine_MSByte :
case FlashManagerControl_wPreFlashStartPixel_MSByte :
@@ -5122,7 +5790,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case FlashManagerControl_bTotalFramesRequired :
case ExposureControls_bMode :
case ExposureControls_bMetering :
-@@ -6348,6 +8687,8 @@ static int irp_start_fw(struct sva_servi
+ case ExposureControls_fpColdStartDesiredTime_us_MSByte :
+ case ExposureControls_iExposureCompensation :
+@@ -6346,10 +8685,12 @@ static int irp_start_fw(struct sva_servi
+ case ExposureControls_fEnableHighClipForDesiredExposureTime :
+ case ExposureControls_bAntiFlickerMode :
case ExposureControls_fInhibitExposurePresetModeForFlash :
case ExposureAlgorithmControls_fpDigitalGainFloor_MSByte :
case ExposureAlgorithmControls_fpDigitalGainCeiling_MSByte :
@@ -5131,7 +5803,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case WhiteBalanceControls_bMode :
case WhiteBalanceControls_bManualRedGain :
case WhiteBalanceControls_bManualGreenGain :
-@@ -6376,8 +8717,9 @@ static int irp_start_fw(struct sva_servi
+ case WhiteBalanceControls_bManualBlueGain :
+ case WhiteBalanceControls_bMiscSettings :
+@@ -6374,12 +8715,13 @@ static int irp_start_fw(struct sva_servi
+ case AutomaticFrameRateControl_bUserMaximumFrameRate_Hz :
+ case AutomaticFrameRateControl_bRelativeChange_num :
case AutomaticFrameRateControl_bRelativeChange_den :
case AutomaticFrameRateControl_fDivorceMinFrameRateFromMaxIntegration :
@@ -5142,7 +5818,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case ColourEngine0_ColourMatrixFarSensor_fpRInR_MSByte :
case ColourEngine0_ColourMatrixFarSensor_fpGInR_MSByte :
case ColourEngine0_ColourMatrixFarSensor_fpBInR_MSByte :
-@@ -6421,6 +8763,7 @@ static int irp_start_fw(struct sva_servi
+ case ColourEngine0_ColourMatrixFarSensor_fpRInG_MSByte :
+ case ColourEngine0_ColourMatrixFarSensor_fpGInG_MSByte :
+@@ -6419,10 +8761,11 @@ static int irp_start_fw(struct sva_servi
+ case ColourEngine0_GammaCorrection_SharpBlue :
+ case ColourEngine0_GammaCorrection_SoftRed :
case ColourEngine0_GammaCorrection_SoftGreen :
case ColourEngine0_GammaCorrection_SoftBlue :
@@ -5150,7 +5830,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case NoraControls_fDisable :
case NoraControls_fDisableNoraPromoting :
case NoraControls_bMaximumValue :
-@@ -6442,6 +8785,8 @@ static int irp_start_fw(struct sva_servi
+ case NoraControls_fDifferentTextureDegreeForBlue :
+ case NoraControls_fSplitNoiseLevel :
+@@ -6440,10 +8783,12 @@ static int irp_start_fw(struct sva_servi
+ case ScytheFilterControls_fpDamperLowThresholdHigh_MSByte :
+ case ScytheFilterControls_fpDamperHighThresholdLow_MSByte :
case ScytheFilterControls_fpDamperHighThresholdHigh_MSByte :
case ScytheFilterControls_fpMinimumDamperOutputLow_MSByte :
case ScytheFilterControls_fpMinimumDamperOutputHigh_MSByte :
@@ -5159,7 +5843,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case JackFilterControls_fDisableFilter :
case JackFilterControls_fSquareLaw :
case JackFilterControls_fDisablePromotingLow :
-@@ -6454,6 +8799,11 @@ static int irp_start_fw(struct sva_servi
+ case JackFilterControls_fDisablePromotingHigh :
+ case JackFilterControls_bMaxWeightLow :
+@@ -6452,10 +8797,15 @@ static int irp_start_fw(struct sva_servi
+ case JackFilterControls_fpDamperLowThresholdHigh_MSByte :
+ case JackFilterControls_fpDamperHighThresholdLow_MSByte :
case JackFilterControls_fpDamperHighThresholdHigh_MSByte :
case JackFilterControls_fpMinimumDamperOutputLow_MSByte :
case JackFilterControls_fpMinimumDamperOutputHigh_MSByte :
@@ -5171,7 +5859,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case AntiVignetteControls_fDisableFilter :
case AntiVignetteControls_bFilterCoeff_R2_r :
case AntiVignetteControls_bFilterCoeff_R2_gr :
-@@ -6480,6 +8830,9 @@ static int irp_start_fw(struct sva_servi
+ case AntiVignetteControls_bFilterCoeff_R2_gb :
+ case AntiVignetteControls_bFilterCoeff_R2_b :
+@@ -6478,10 +8828,13 @@ static int irp_start_fw(struct sva_servi
+ case AntiVignetteControls_bUnityOffset_r :
+ case AntiVignetteControls_bUnityOffset_gr :
case AntiVignetteControls_bUnityOffset_gb :
case AntiVignetteControls_bUnityOffset_b :
case AntiVignetteControls_fAdaptiveAntiVignetteEnable :
@@ -5181,7 +5873,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case ColourEngine0_RadialApertureCorrectionControl_fEnableCorrection :
case ColourEngine0_RadialApertureCorrectionHostInputs_bQvec0 :
case ColourEngine0_RadialApertureCorrectionHostInputs_bQvec1 :
-@@ -6497,6 +8850,7 @@ static int irp_start_fw(struct sva_servi
+ case ColourEngine0_RadialApertureCorrectionHostInputs_bCofShift :
+ case ColourEngine0_RadialApertureCorrectionHostInputs_bOutShift :
+@@ -6495,26 +8848,30 @@ static int irp_start_fw(struct sva_servi
+ case ColourEngine0_CoderOutputSignalRange_uwChromaMidpointTimes2_MSByte :
+ case ColourEngine0_FadeToBlack_fDisable :
case ColourEngine0_FadeToBlack_fpBlackValue_MSByte :
case ColourEngine0_FadeToBlack_fpDamperLowThreshold_MSByte :
case ColourEngine0_FadeToBlack_fpDamperHighThreshold_MSByte :
@@ -5189,7 +5885,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case WhiteBalanceConstrainerControls_fpRedB_MSByte :
case WhiteBalanceConstrainerControls_fpBlueB_MSByte :
case WhiteBalanceConstrainerControls_fpMaximumDistanceAllowedFromLocus_MSByte :
-@@ -6504,6 +8858,8 @@ static int irp_start_fw(struct sva_servi
+ case WhiteBalanceConstrainerControls_fEnableConstrainedWhiteBalance :
case WhiteBalanceGainLimit_fpWhiteBalanceGainLimit_MSByte :
case FLADriverLowLevelParameters_bFramesToSkip :
@@ -5198,7 +5894,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case FocusRangeConstants_wFullRange_LensMinPosition_MSByte :
case FocusRangeConstants_wFullRange_LensMaxPosition_MSByte :
case FocusRangeConstants_wFullRange_LensRecoveryPosition_MSByte :
-@@ -6513,6 +8869,7 @@ static int irp_start_fw(struct sva_servi
+ case FocusRangeConstants_wLandscape_LensMinPosition_MSByte :
+ case FocusRangeConstants_wLandscape_LensMaxPosition_MSByte :
+ case FocusRangeConstants_wLandscape_LensRecoveryPosition_MSByte :
case FocusRangeConstants_wMacro_LensMinPosition_MSByte :
case FocusRangeConstants_wMacro_LensMaxPosition_MSByte :
case FocusRangeConstants_wMacro_LensRecoveryPosition_MSByte :
@@ -5206,7 +5904,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case AutoFocusControls_fFMTesting_AutoDisable :
case AutoFocusControls_fBackLight_Enable :
case AutoFocusControls_fBackupSolution :
-@@ -6533,10 +8890,14 @@ static int irp_start_fw(struct sva_servi
+ case AutoFocusControls_fCheckExposureStable_Enable :
+ case AutoFocusControls_fEnableSimpleCoarseThEvaluation :
+@@ -6531,25 +8888,33 @@ static int irp_start_fw(struct sva_servi
+ case AutoFocusControls_fEnableTrakingZoneVariation :
+ case AutoFocusControls_fEnableFunctionThresholdTest :
case AutoFocusControls_fResetHCSPos :
case AutoFocusConstants_bCoarseStep :
case AutoFocusConstants_bFineStep :
@@ -5221,7 +5923,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case SensorSetupFarSensor_uwGuaranteedDataSaturationLevel_MSByte :
case SensorSetupFarSensor_uwMinimumSensorRxPixelValue_MSByte :
case SensorSetupFarSensor_uwMaximumSensorRxPixelValue_MSByte :
-@@ -6544,10 +8905,14 @@ static int irp_start_fw(struct sva_servi
+ case SensorSetupFarSensor_fpRedTiltGain_MSByte :
case SensorSetupFarSensor_fpGreenTiltGain_MSByte :
case SensorSetupFarSensor_fpBlueTiltGain_MSByte :
case SensorSetupFarSensor_BlackCorrectionOffset :
@@ -5236,7 +5938,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case AdaptiveAVParameter_B_bAvUnityOffset_Day :
case AdaptiveAVParameter_B_bAvCoeffR2_Day :
case AdaptiveAVParameter_B_bAvCoeffR4_Day :
-@@ -6628,27 +8993,33 @@ static int irp_start_fw(struct sva_servi
+ case AdaptiveAVParameter_B_wAvHOffset_Day_MSByte :
+ case AdaptiveAVParameter_B_wAvVOffset_Day_MSByte :
+@@ -6626,31 +8991,37 @@ static int irp_start_fw(struct sva_servi
+ case AdaptiveAVParameter_R_bAvUnityOffset_HOR :
+ case AdaptiveAVParameter_R_bAvCoeffR2_HOR :
case AdaptiveAVParameter_R_bAvCoeffR4_HOR :
case AdaptiveAVParameter_R_wAvHOffset_HOR_MSByte :
case AdaptiveAVParameter_R_wAvVOffset_HOR_MSByte :
@@ -5270,7 +5976,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
case AdaptiveColourMatrix_fpNormalisedRedGain0_MSByte :
case AdaptiveColourMatrix_fpNormalisedRedGain1_MSByte :
case AdaptiveColourMatrix_bChooseAdaptiveColourMatrix:
-@@ -6667,6 +9038,9 @@ static int irp_start_fw(struct sva_servi
+
+ IRP_ASSERT(irp_write_packet(srv_open, vpip_default_params[vpip_update_iteration].addr,vpip_default_params[vpip_update_iteration].val));// 0));
+@@ -6665,10 +9036,13 @@ static int irp_start_fw(struct sva_servi
+ //IRP_ASSERT(irp_write_packet(srv_open, vpip_default_params[vpip_update_iteration].addr,vpip_default_params[vpip_update_iteration].val));// 0));
+ break;
}
@@ -5280,7 +5990,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
}
-@@ -6681,6 +9055,8 @@ static int irp_start_fw(struct sva_servi
+
+
+@@ -6679,10 +9053,12 @@ static int irp_start_fw(struct sva_servi
+
+
@@ -5289,10 +6003,13 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
/* debug: depict whether the firmware was able to talk to sensor */
IRP_ASSERT(irp_read_packet(srv_open, vpip_default_params[SensorInformation_fFarSensorAvailable].addr, &vpip_state));
dbgprintk(1,"checking for SensorInformation=%d FAR sensor state \n", vpip_state);
-diff -Nauprw linux-2.6.20/drivers/media/video/v4l2-nomadik.c ../new/linux-2.6.20/drivers/media/video/v4l2-nomadik.c
---- linux-2.6.20/drivers/media/video/v4l2-nomadik.c 2008-11-24 14:06:24.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/video/v4l2-nomadik.c 2008-12-01 17:35:51.646833000 +0530
-@@ -38,7 +38,7 @@ MODULE_PARM_DESC(v4l2_nomadik_debug,"Deb
+ IRP_ASSERT(irp_read_packet(srv_open, vpip_default_params[SensorInformation_fNearSensorAvailable].addr, &vpip_state));
+ dbgprintk(1,"checking for SensorInformation=%d NEAR sensor state \n", vpip_state);
+--- linux-2.6.20.orig/drivers/media/video/v4l2-nomadik.c
++++ linux-2.6.20/drivers/media/video/v4l2-nomadik.c
+@@ -36,11 +36,11 @@ MODULE_PARM_DESC(v4l2_nomadik_debug,"Deb
+ } while(0)
+
struct v4l2_sva_dev *dev;
extern struct sva_device sva;
static struct semaphore driver_mutex;
@@ -5301,3 +6018,5 @@ diff -Nauprw linux-2.6.20/drivers/media/video/v4l2-nomadik.c ../new/linux-2.6.20
extern struct nomadik_vpip_param vpip_default_params[];//defined in nomadik_sva_vpip.c
extern int VPIP_VERSION;
+
+ int sva_vpip_auto_focus(struct sva_device_open *open, struct vpip_autofocus_id *mode);
diff --git a/recipes/linux/linux-2.6.20/nhk15/nomadik_baseline_linux_2620.patch b/recipes/linux/linux-2.6.20/nhk15/nomadik_baseline_linux_2620.patch
index 40c9c43ac2..7ee8bb8af6 100644
--- a/recipes/linux/linux-2.6.20/nhk15/nomadik_baseline_linux_2620.patch
+++ b/recipes/linux/linux-2.6.20/nhk15/nomadik_baseline_linux_2620.patch
@@ -1,7 +1,2357 @@
-diff -Nauprw linux-2.6.20/arch/arm/common/rtctime.c ../new/linux-2.6.20/arch/arm/common/rtctime.c
---- linux-2.6.20/arch/arm/common/rtctime.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/common/rtctime.c 2007-11-21 11:51:41.000000000 +0530
-@@ -201,13 +201,13 @@ static int rtc_ioctl(struct inode *inode
+---
+ .gitignore | 47
+ Documentation/DocBook/Makefile | 3
+ Documentation/DocBook/kgdb.tmpl | 234
+ Documentation/arm/STM-Nomadik/HOWTO-add_newboard.txt | 111
+ Documentation/arm/STM-Nomadik/HOWTO-nfsboot.txt | 106
+ Documentation/arm/STM-Nomadik/debug_strategy.txt | 66
+ Documentation/arm/STM-Nomadik/dma_user_guide.txt | 420
+ Documentation/arm/STM-Nomadik/faqs.txt | 53
+ Documentation/arm/STM-Nomadik/gpio_user_guide.txt | 140
+ Documentation/arm/STM-Nomadik/irq_usrguide.txt | 171
+ Documentation/arm/STM-Nomadik/power_management.txt | 122
+ MAINTAINERS | 9
+ Makefile | 18
+ arch/arm/Kconfig | 25
+ arch/arm/Makefile | 34
+ arch/arm/common/rtctime.c | 4
+ arch/arm/configs/ndk10_defconfig | 1205 +
+ arch/arm/configs/ndk15_defconfig | 1221 +
+ arch/arm/configs/ndk15b06_defconfig | 1221 +
+ arch/arm/configs/nhk15_defconfig | 1458 +
+ arch/arm/kernel/Makefile | 1
+ arch/arm/kernel/armksyms.c | 14
+ arch/arm/kernel/dma.c | 1
+ arch/arm/kernel/entry-armv.S | 2
+ arch/arm/kernel/irq.c | 12
+ arch/arm/kernel/kgdb-jmp.S | 30
+ arch/arm/kernel/kgdb.c | 208
+ arch/arm/kernel/setup.c | 5
+ arch/arm/kernel/traps.c | 11
+ arch/arm/lib/Makefile | 2
+ arch/arm/lib/gcclib.h | 25
+ arch/arm/lib/longlong.h | 184
+ arch/arm/lib/udivdi3.c | 246
+ arch/arm/mach-nomadik/Kconfig-nomadik | 267
+ arch/arm/mach-nomadik/Makefile | 166
+ arch/arm/mach-nomadik/Makefile.boot | 4
+ arch/arm/mach-nomadik/clock.c | 127
+ arch/arm/mach-nomadik/clock.h | 25
+ arch/arm/mach-nomadik/cpu.c | 293
+ arch/arm/mach-nomadik/create_kconfig.pl | 55
+ arch/arm/mach-nomadik/deep_sleep.S | 655
+ arch/arm/mach-nomadik/dfs.S | 355
+ arch/arm/mach-nomadik/dma.c | 1337 +
+ arch/arm/mach-nomadik/fsmc.c | 113
+ arch/arm/mach-nomadik/gpio.c | 916 +
+ arch/arm/mach-nomadik/irq.c | 231
+ arch/arm/mach-nomadik/l2cc.c | 152
+ arch/arm/mach-nomadik/msp.c | 2062 ++
+ arch/arm/mach-nomadik/msp.h | 383
+ arch/arm/mach-nomadik/mtu.c | 589
+ arch/arm/mach-nomadik/ndk10_cut_a1_Kconfig | 28
+ arch/arm/mach-nomadik/ndk10_cut_b06_Kconfig | 35
+ arch/arm/mach-nomadik/ndk10_cut_b0_Kconfig | 35
+ arch/arm/mach-nomadik/ndk10_devices.c | 1225 +
+ arch/arm/mach-nomadik/ndk15_devices.c | 1001 +
+ arch/arm/mach-nomadik/ndk15_rev2_b_03_Kconfig | 37
+ arch/arm/mach-nomadik/ndk15_rev2_b_05_Kconfig | 37
+ arch/arm/mach-nomadik/ndk15_rev2_b_06_Kconfig | 42
+ arch/arm/mach-nomadik/ndk15_rev3_c_02_Kconfig | 42
+ arch/arm/mach-nomadik/ndk15c02_devices.c | 1023 +
+ arch/arm/mach-nomadik/nhk15_Kconfig | 36
+ arch/arm/mach-nomadik/nhk15_devices.c | 1009 +
+ arch/arm/mach-nomadik/normal.S | 199
+ arch/arm/mach-nomadik/pm.c | 79
+ arch/arm/mach-nomadik/power.c | 1316 +
+ arch/arm/mach-nomadik/rtc.c | 327
+ arch/arm/mach-nomadik/sleep.c | 280
+ arch/arm/mach-nomadik/slow.S | 199
+ arch/arm/mach-nomadik/soft_sleep.S | 206
+ arch/arm/mach-nomadik/ssp.c | 930 +
+ arch/arm/mach-nomadik/stn8810_devices.c | 1071 +
+ arch/arm/mach-nomadik/stn8815_devices.c | 1971 ++
+ arch/arm/mach-nomadik/timer.c | 366
+ arch/arm/mm/Kconfig | 23
+ arch/arm/mm/extable.c | 7
+ arch/arm/mm/init.c | 1
+ arch/arm/mm/proc-arm926.S | 30
+ arch/arm/oprofile/common.c | 3
+ drivers/Makefile | 2
+ drivers/char/keyboard.c | 1
+ drivers/cpufreq/Kconfig | 4
+ drivers/hwmon/Kconfig | 13
+ drivers/hwmon/Makefile | 1
+ drivers/hwmon/lis3lv02dl.c | 489
+ drivers/i2c/Kconfig | 1
+ drivers/i2c/Makefile | 3
+ drivers/i2c/busses/Kconfig | 10
+ drivers/i2c/busses/Makefile | 22
+ drivers/i2c/busses/i2c-nomadik.c | 1250 +
+ drivers/i2c/busses/i2c-nomadik.h | 93
+ drivers/i2c/busses/i2c-stn8810.c | 1723 ++
+ drivers/i2c/busses/i2c-stn8815.c | 1817 ++
+ drivers/i2c/chips/Kconfig | 9
+ drivers/i2c/chips/Makefile | 6
+ drivers/i2c/chips/epio-nomadik.c | 195
+ drivers/input/input.c | 13
+ drivers/input/keyboard/Kconfig | 13
+ drivers/input/keyboard/Makefile | 7
+ drivers/input/keyboard/kpd-nomadik.c | 359
+ drivers/input/touchscreen/Kconfig | 20
+ drivers/input/touchscreen/Makefile | 8
+ drivers/input/touchscreen/touchp-nomadik.c | 755 +
+ drivers/input/touchscreen/touchp2003-nomadik.c | 566
+ drivers/media/Kconfig | 2
+ drivers/media/Makefile | 4
+ drivers/media/nomadik_mm/Kconfig | 23
+ drivers/media/nomadik_mm/Makefile | 8
+ drivers/media/nomadik_mm/hcl/hloader/hloader.c | 3632 ++++
+ drivers/media/nomadik_mm/hcl/hloader/hloader.h | 170
+ drivers/media/nomadik_mm/hcl/hloader/hloader_p.h | 451
+ drivers/media/nomadik_mm/hcl/include/debug.h | 316
+ drivers/media/nomadik_mm/hcl/include/hcl_defs.h | 290
+ drivers/media/nomadik_mm/hcl/include/hloader.h | 170
+ drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h | 1761 ++
+ drivers/media/nomadik_mm/hcl/include/platform_os.h | 72
+ drivers/media/nomadik_mm/hcl/include/sva.h | 2148 ++
+ drivers/media/nomadik_mm/hcl/saa/audio_services.c | 142
+ drivers/media/nomadik_mm/hcl/saa/audio_services.h | 39
+ drivers/media/nomadik_mm/hcl/saa/ha_api_params.h | 1064 +
+ drivers/media/nomadik_mm/hcl/saa/ha_codec_info.h | 204
+ drivers/media/nomadik_mm/hcl/saa/ha_codec_params.h | 686
+ drivers/media/nomadik_mm/hcl/saa/ha_effect_info.h | 122
+ drivers/media/nomadik_mm/hcl/saa/ha_effect_params.h | 1342 +
+ drivers/media/nomadik_mm/hcl/saa/ha_hcl_fw_interface.h | 163
+ drivers/media/nomadik_mm/hcl/saa/hti.c | 271
+ drivers/media/nomadik_mm/hcl/saa/hti.h | 159
+ drivers/media/nomadik_mm/hcl/saa/hti_protocol.h | 134
+ drivers/media/nomadik_mm/hcl/saa/saa.c | 2538 +++
+ drivers/media/nomadik_mm/hcl/saa/saa.h | 306
+ drivers/media/nomadik_mm/hcl/saa/saa_base.c | 557
+ drivers/media/nomadik_mm/hcl/saa/saa_hwp.h | 275
+ drivers/media/nomadik_mm/hcl/saa/saa_irq.c | 432
+ drivers/media/nomadik_mm/hcl/saa/saap.h | 160
+ drivers/media/nomadik_mm/hcl/sva/common/sva_capabilities.c | 63
+ drivers/media/nomadik_mm/hcl/sva/common/sva_capabilities.h | 46
+ drivers/media/nomadik_mm/hcl/sva/common/sva_fifo.h | 335
+ drivers/media/nomadik_mm/hcl/sva/common/sva_hwp.h | 646
+ drivers/media/nomadik_mm/hcl/sva/common/sva_internalneeds.c | 131
+ drivers/media/nomadik_mm/hcl/sva/common/sva_internalneeds.h | 61
+ drivers/media/nomadik_mm/hcl/sva/common/sva_service.h | 337
+ drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.c | 486
+ drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.h | 80
+ drivers/media/nomadik_mm/hcl/sva/common/sva_timemgtp.h | 49
+ drivers/media/nomadik_mm/hcl/sva/common/svap.h | 188
+ drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264.c | 3030 ++++
+ drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264.h | 110
+ drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpb.c | 3101 ++++
+ drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpb.h | 232
+ drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpbp.h | 98
+ drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_slicemap.c | 312
+ drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_slicemap.h | 53
+ drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264p.h | 156
+ drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2.c | 2126 ++
+ drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2.h | 181
+ drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2p.c | 789 +
+ drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2p.h | 35
+ drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4.c | 2211 ++
+ drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4.h | 170
+ drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4p.c | 686
+ drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4p.h | 35
+ drivers/media/nomadik_mm/hcl/sva/decode/sva.h | 18
+ drivers/media/nomadik_mm/hcl/sva/decode/sva_dc_algo.h | 135
+ drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.c | 2357 +++
+ drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.h | 97
+ drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.c | 655
+ drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.h | 364
+ drivers/media/nomadik_mm/hcl/sva/decode/sva_decodepp.h | 40
+ drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1.c | 2044 ++
+ drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1.h | 194
+ drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1p.c | 714
+ drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1p.h | 37
+ drivers/media/nomadik_mm/hcl/sva/display/sva_display.c | 5661 +++++++
+ drivers/media/nomadik_mm/hcl/sva/display/sva_display.h | 99
+ drivers/media/nomadik_mm/hcl/sva/display/sva_displayp.h | 424
+ drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.c | 3648 ++++
+ drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.h | 112
+ drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brcp.h | 262
+ drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264.c | 4739 ++++++
+ drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264.h | 79
+ drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264p.h | 646
+ drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4.c | 2556 +++
+ drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4.h | 69
+ drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4p.h | 246
+ drivers/media/nomadik_mm/hcl/sva/encode/sva_ec_algo.h | 187
+ drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.c | 4594 ++++++
+ drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.h | 90
+ drivers/media/nomadik_mm/hcl/sva/encode/sva_encodep.h | 340
+ drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgt.c | 896 +
+ drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgt.h | 97
+ drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgtp.h | 84
+ drivers/media/nomadik_mm/hcl/sva/events_management/sva_irqmgt.c | 225
+ drivers/media/nomadik_mm/hcl/sva/events_management/sva_irqmgt.h | 42
+ drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgt.c | 1907 ++
+ drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgt.h | 180
+ drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgtp.h | 304
+ drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.c | 3810 +++++
+ drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.h | 88
+ drivers/media/nomadik_mm/hcl/sva/grab/sva_grabp.h | 411
+ drivers/media/nomadik_mm/hcl/sva/include/sva_bufferlistmgt.h | 87
+ drivers/media/nomadik_mm/hcl/sva/include/sva_buffermgt.h | 111
+ drivers/media/nomadik_mm/hcl/sva/include/sva_capabilities.h | 46
+ drivers/media/nomadik_mm/hcl/sva/include/sva_dc_mpeg2.h | 181
+ drivers/media/nomadik_mm/hcl/sva/include/sva_decode.h | 97
+ drivers/media/nomadik_mm/hcl/sva/include/sva_display.h | 99
+ drivers/media/nomadik_mm/hcl/sva/include/sva_encode.h | 90
+ drivers/media/nomadik_mm/hcl/sva/include/sva_eventmgt.h | 97
+ drivers/media/nomadik_mm/hcl/sva/include/sva_fifo.h | 335
+ drivers/media/nomadik_mm/hcl/sva/include/sva_fwmgt.h | 180
+ drivers/media/nomadik_mm/hcl/sva/include/sva_grab.h | 89
+ drivers/media/nomadik_mm/hcl/sva/include/sva_host_interface.h | 290
+ drivers/media/nomadik_mm/hcl/sva/include/sva_internalneeds.h | 60
+ drivers/media/nomadik_mm/hcl/sva/include/sva_irqmgt.h | 42
+ drivers/media/nomadik_mm/hcl/sva/include/sva_memorymgt.h | 163
+ drivers/media/nomadik_mm/hcl/sva/include/sva_openservice.h | 62
+ drivers/media/nomadik_mm/hcl/sva/include/sva_openservicemgt.h | 71
+ drivers/media/nomadik_mm/hcl/sva/include/sva_service.h | 337
+ drivers/media/nomadik_mm/hcl/sva/include/sva_stab.h | 89
+ drivers/media/nomadik_mm/hcl/sva/include/sva_still_decode.h | 111
+ drivers/media/nomadik_mm/hcl/sva/include/sva_still_encode.h | 96
+ drivers/media/nomadik_mm/hcl/sva/include/sva_taskmgt.h | 403
+ drivers/media/nomadik_mm/hcl/sva/include/sva_timemgt.h | 80
+ drivers/media/nomadik_mm/hcl/sva/include/sva_tvo.h | 89
+ drivers/media/nomadik_mm/hcl/sva/include/svap.h | 193
+ drivers/media/nomadik_mm/hcl/sva/include/t1xhv_host_interface.h | 1725 ++
+ drivers/media/nomadik_mm/hcl/sva/include/t1xhv_retarget.h | 41
+ drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgt.c | 541
+ drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgt.h | 87
+ drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgtp.h | 73
+ drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgt.c | 1212 +
+ drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgt.h | 111
+ drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgtp.h | 83
+ drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgt.c | 1578 ++
+ drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgt.h | 163
+ drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgtp.h | 105
+ drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservice.h | 62
+ drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgt.c | 620
+ drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgt.h | 71
+ drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgtp.h | 56
+ drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.c | 2855 +++
+ drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.h | 89
+ drivers/media/nomadik_mm/hcl/sva/stab/sva_stabp.h | 284
+ drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpeg.c | 1047 +
+ drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpeg.h | 70
+ drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpegp.h | 74
+ drivers/media/nomadik_mm/hcl/sva/still_decode/sva_sdc_algo.h | 96
+ drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decode.c | 3174 ++++
+ drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decode.h | 111
+ drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decodep.h | 267
+ drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpeg.c | 682
+ drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpeg.h | 63
+ drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpegp.h | 62
+ drivers/media/nomadik_mm/hcl/sva/still_encode/sva_sec_algo.h | 152
+ drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encode.c | 3752 ++++
+ drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encode.h | 96
+ drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encodep.h | 248
+ drivers/media/nomadik_mm/hcl/sva/sva.c | 1827 ++
+ drivers/media/nomadik_mm/hcl/sva/sva.h | 2148 ++
+ drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgt.c | 1701 ++
+ drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgt.h | 93
+ drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgtp.h | 134
+ drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgt.c | 3573 ++++
+ drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgt.h | 403
+ drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgtp.h | 359
+ drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskschl.c | 19
+ drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.c | 2478 +++
+ drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.h | 89
+ drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvop.h | 278
+ drivers/media/nomadik_mm/opengl/Makefile | 18
+ drivers/media/nomadik_mm/opengl/ogl.c | 565
+ drivers/media/nomadik_mm/opengl/ogl.h | 65
+ drivers/media/nomadik_mm/opengl/ogl_ioctl.h | 56
+ drivers/media/nomadik_mm/saa/Makefile | 20
+ drivers/media/nomadik_mm/saa/README | 72
+ drivers/media/nomadik_mm/saa/nomadik-fwload.c | 229
+ drivers/media/nomadik_mm/saa/nomadik-fwload.h | 47
+ drivers/media/nomadik_mm/saa/nomadik-saa.c | 4406 +++++
+ drivers/media/nomadik_mm/saa/nomadik-saa.h | 204
+ drivers/media/nomadik_mm/saa/saaioctl.h | 498
+ drivers/media/nomadik_mm/sva/Makefile | 58
+ drivers/media/nomadik_mm/sva/nomadik_camera.h | 206
+ drivers/media/nomadik_mm/sva/nomadik_defs.h | 76
+ drivers/media/nomadik_mm/sva/nomadik_pepperpot.c | 1189 +
+ drivers/media/nomadik_mm/sva/nomadik_pepperpot.h | 153
+ drivers/media/nomadik_mm/sva/nomadik_sva.c | 4951 ++++++
+ drivers/media/nomadik_mm/sva/nomadik_sva.h | 225
+ drivers/media/nomadik_mm/sva/nomadik_sva_mpeg4.c | 432
+ drivers/media/nomadik_mm/sva/nomadik_sva_services.h | 3826 +++++
+ drivers/media/nomadik_mm/sva/nomadik_sva_utils.c | 964 +
+ drivers/media/nomadik_mm/sva/nomadik_sva_utils.h | 49
+ drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c | 6984 +++++++++
+ drivers/media/nomadik_mm/sva/nomadik_sva_vpip.h | 589
+ drivers/media/video/Kconfig | 7
+ drivers/media/video/Makefile | 8
+ drivers/media/video/hcl_defs.h | 280
+ drivers/media/video/nomadik_camera.h | 206
+ drivers/media/video/nomadik_defs.h | 76
+ drivers/media/video/nomadik_sva.h | 225
+ drivers/media/video/nomadik_sva_services.h | 3832 +++++
+ drivers/media/video/nomadik_sva_utils.h | 49
+ drivers/media/video/platform_os.h | 55
+ drivers/media/video/sva.h | 2148 ++
+ drivers/media/video/v4l2-nomadik.c | 1590 ++
+ drivers/media/video/v4l2-nomadik.h | 70
+ drivers/misc/Kconfig | 27
+ drivers/misc/Makefile | 4
+ drivers/misc/batt-nomadik.c | 1307 +
+ drivers/misc/etm-nomadik.c | 207
+ drivers/misc/pexp-nomadik.c | 2847 +++
+ drivers/misc/sif-nomadik.c | 560
+ drivers/mmc/Kconfig | 27
+ drivers/mmc/Makefile | 9
+ drivers/mmc/mmc-nomadik.c | 1435 +
+ drivers/mtd/maps/Kconfig | 7
+ drivers/mtd/maps/Makefile | 11
+ drivers/mtd/maps/norflash-nomadik.c | 411
+ drivers/mtd/nand/Kconfig | 6
+ drivers/mtd/nand/Makefile | 5
+ drivers/mtd/nand/nandflash-nomadik.c | 296
+ drivers/mtd/onenand/Kconfig | 38
+ drivers/mtd/onenand/Makefile | 3
+ drivers/mtd/onenand/generic.c | 62
+ drivers/mtd/onenand/onenand_base.c | 1139 +
+ drivers/mtd/onenand/onenand_bbt.c | 33
+ drivers/mtd/onenand/onenand_sim.c | 495
+ drivers/net/Makefile | 1
+ drivers/net/kgdboe.c | 294
+ drivers/net/smc91x.c | 100
+ drivers/net/smc91x.h | 133
+ drivers/serial/amba-pl011.c | 101
+ drivers/spi/Kconfig | 8
+ drivers/spi/Makefile | 2
+ drivers/spi/spi-nomadik.c | 1000 +
+ drivers/usb/Kconfig | 2
+ drivers/usb/Makefile | 1
+ drivers/usb/gadget/file_storage.c | 15
+ drivers/usb/nomadik/Kconfig | 176
+ drivers/usb/nomadik/Makefile | 97
+ drivers/usb/nomadik/board.h | 58
+ drivers/usb/nomadik/debug.h | 104
+ drivers/usb/nomadik/dma.h | 308
+ drivers/usb/nomadik/g_ep0.c | 858 +
+ drivers/usb/nomadik/logx | 1
+ drivers/usb/nomadik/musb_bus_direct.c | 371
+ drivers/usb/nomadik/musb_cross.h | 131
+ drivers/usb/nomadik/musb_debug.c | 190
+ drivers/usb/nomadik/musb_epdescriptors.h | 48
+ drivers/usb/nomadik/musb_epfifocfg.c | 429
+ drivers/usb/nomadik/musb_hcd.c | 869 +
+ drivers/usb/nomadik/musb_host.c | 2791 +++
+ drivers/usb/nomadik/musb_host.h | 101
+ drivers/usb/nomadik/musb_ioctl.c | 321
+ drivers/usb/nomadik/musb_ioctl.h | 32
+ drivers/usb/nomadik/musb_plat_uds.c | 2306 +++
+ drivers/usb/nomadik/musb_procfs.c | 413
+ drivers/usb/nomadik/musb_virthub.c | 840 +
+ drivers/usb/nomadik/musb_virthub.h | 240
+ drivers/usb/nomadik/musbdefs.h | 828 +
+ drivers/usb/nomadik/musbhdrc.h | 315
+ drivers/usb/nomadik/musbhsfc.h | 150
+ drivers/usb/nomadik/nomadik_udc.c | 2845 +++
+ drivers/usb/nomadik/nomadik_udc.h | 663
+ drivers/usb/nomadik/otg_func.c | 196
+ drivers/usb/nomadik/otg_pwm.c | 46
+ drivers/usb/nomadik/plat_arc.h | 92
+ drivers/usb/nomadik/plat_cnf.h | 208
+ drivers/video/Makefile | 1
+ drivers/video/amba-clcd.c | 115
+ drivers/video/fbmem.c | 1
+ drivers/video/nomadik/Makefile | 15
+ drivers/video/nomadik/hcl/debug.h | 313
+ drivers/video/nomadik/hcl/hcl_defs.h | 286
+ drivers/video/nomadik/hcl/platform_os.h | 79
+ drivers/video/nomadik/hcl/sga.c | 3161 ++++
+ drivers/video/nomadik/hcl/sga.h | 937 +
+ drivers/video/nomadik/hcl/sga_irq.c | 206
+ drivers/video/nomadik/hcl/sga_irq.h | 99
+ drivers/video/nomadik/hcl/sga_irqp.h | 239
+ drivers/video/nomadik/hcl/sga_p.h | 175
+ drivers/video/nomadik/sga_defs.h | 87
+ drivers/video/nomadik/sga_err.h | 45
+ drivers/video/nomadik/sga_interface.h | 119
+ drivers/video/nomadik/sga_ioctlfns.c | 473
+ drivers/video/nomadik/sga_ioctlfns.h | 50
+ drivers/video/nomadik/sga_main.c | 651
+ drivers/video/nomadik/sga_main.h | 123
+ drivers/video/nomadik/sga_typs.h | 37
+ fs/Kconfig | 4
+ fs/Makefile | 3
+ fs/proc/proc_misc.c | 42
+ fs/yaffs2/Kconfig | 156
+ fs/yaffs2/Makefile | 10
+ fs/yaffs2/devextras.h | 264
+ fs/yaffs2/moduleconfig.h | 65
+ fs/yaffs2/yaffs_checkptrw.c | 404
+ fs/yaffs2/yaffs_checkptrw.h | 35
+ fs/yaffs2/yaffs_ecc.c | 331
+ fs/yaffs2/yaffs_ecc.h | 44
+ fs/yaffs2/yaffs_fs.c | 2297 +++
+ fs/yaffs2/yaffs_guts.c | 7532 ++++++++++
+ fs/yaffs2/yaffs_guts.h | 904 +
+ fs/yaffs2/yaffs_mtdif.c | 241
+ fs/yaffs2/yaffs_mtdif.h | 27
+ fs/yaffs2/yaffs_mtdif1.c | 369
+ fs/yaffs2/yaffs_mtdif1.h | 28
+ fs/yaffs2/yaffs_mtdif2.c | 232
+ fs/yaffs2/yaffs_mtdif2.h | 29
+ fs/yaffs2/yaffs_nand.c | 134
+ fs/yaffs2/yaffs_nand.h | 44
+ fs/yaffs2/yaffs_nandemul2k.h | 39
+ fs/yaffs2/yaffs_packedtags1.c | 52
+ fs/yaffs2/yaffs_packedtags1.h | 37
+ fs/yaffs2/yaffs_packedtags2.c | 182
+ fs/yaffs2/yaffs_packedtags2.h | 38
+ fs/yaffs2/yaffs_qsort.c | 160
+ fs/yaffs2/yaffs_qsort.h | 23
+ fs/yaffs2/yaffs_tagscompat.c | 530
+ fs/yaffs2/yaffs_tagscompat.h | 40
+ fs/yaffs2/yaffs_tagsvalidity.c | 28
+ fs/yaffs2/yaffs_tagsvalidity.h | 24
+ fs/yaffs2/yaffsinterface.h | 21
+ fs/yaffs2/yportenv.h | 200
+ include/asm-arm/arch-nomadik/audiocodec.h | 444
+ include/asm-arm/arch-nomadik/bits.h | 61
+ include/asm-arm/arch-nomadik/debug-macro.S | 38
+ include/asm-arm/arch-nomadik/debug.h | 148
+ include/asm-arm/arch-nomadik/defs.h | 245
+ include/asm-arm/arch-nomadik/dma.h | 362
+ include/asm-arm/arch-nomadik/entry-macro.S | 210
+ include/asm-arm/arch-nomadik/epio.h | 24
+ include/asm-arm/arch-nomadik/fsmc.h | 203
+ include/asm-arm/arch-nomadik/gpio.h | 529
+ include/asm-arm/arch-nomadik/hardware.h | 107
+ include/asm-arm/arch-nomadik/i2c.h | 419
+ include/asm-arm/arch-nomadik/io.h | 37
+ include/asm-arm/arch-nomadik/irqs.h | 137
+ include/asm-arm/arch-nomadik/kpd.h | 56
+ include/asm-arm/arch-nomadik/memory.h | 41
+ include/asm-arm/arch-nomadik/mmc.h | 234
+ include/asm-arm/arch-nomadik/msp-spi.h | 343
+ include/asm-arm/arch-nomadik/msp.h | 322
+ include/asm-arm/arch-nomadik/mtu.h | 90
+ include/asm-arm/arch-nomadik/nandflash.h | 42
+ include/asm-arm/arch-nomadik/ndk10_devices.h | 160
+ include/asm-arm/arch-nomadik/ndk15_devices.h | 248
+ include/asm-arm/arch-nomadik/ndk15c02_devices.h | 169
+ include/asm-arm/arch-nomadik/nhk15_devices.h | 131
+ include/asm-arm/arch-nomadik/param.h | 19
+ include/asm-arm/arch-nomadik/pexp.h | 355
+ include/asm-arm/arch-nomadik/power.h | 180
+ include/asm-arm/arch-nomadik/smp.h | 19
+ include/asm-arm/arch-nomadik/spi.h | 521
+ include/asm-arm/arch-nomadik/ssp-spi.h | 280
+ include/asm-arm/arch-nomadik/stn8810_devices.h | 120
+ include/asm-arm/arch-nomadik/stn8815_devices.h | 165
+ include/asm-arm/arch-nomadik/stw5094ap.h | 176
+ include/asm-arm/arch-nomadik/stw5095.h | 1387 +
+ include/asm-arm/arch-nomadik/sva.h | 43
+ include/asm-arm/arch-nomadik/system.h | 62
+ include/asm-arm/arch-nomadik/timex.h | 71
+ include/asm-arm/arch-nomadik/touchp.h | 145
+ include/asm-arm/arch-nomadik/touchp2003.h | 42
+ include/asm-arm/arch-nomadik/udc.h | 490
+ include/asm-arm/arch-nomadik/uncompress.h | 71
+ include/asm-arm/arch-nomadik/vmalloc.h | 32
+ include/asm-arm/kgdb.h | 91
+ include/asm-arm/system.h | 41
+ include/asm-generic/kgdb.h | 34
+ include/linux/amba/clcd.h | 24
+ include/linux/dwarf2-lang.h | 300
+ include/linux/dwarf2.h | 775 +
+ include/linux/i2c.h | 13
+ include/linux/kgdb.h | 271
+ include/linux/miscdevice.h | 1
+ include/linux/module.h | 28
+ include/linux/mtd/bbm.h | 11
+ include/linux/mtd/mtd.h | 1
+ include/linux/mtd/nand.h | 52
+ include/linux/mtd/onenand.h | 31
+ include/linux/mtd/onenand_regs.h | 8
+ include/linux/netpoll.h | 2
+ include/linux/usb.h | 4
+ include/linux/v4l2-nomadikdefs.h | 12
+ include/linux/videodev2.h | 11
+ init/Kconfig | 15
+ kernel/Makefile | 1
+ kernel/kgdb.c | 1963 ++
+ kernel/module.c | 216
+ kernel/pid.c | 11
+ kernel/power/main.c | 2
+ kernel/sched.c | 6
+ kernel/softlockup.c | 4
+ kernel/timer.c | 8
+ lib/Kconfig.debug | 79
+ net/core/netpoll.c | 5
+ net/sunrpc/xprtsock.c | 5
+ scripts/Makefile | 1
+ scripts/Makefile.modpost | 2
+ scripts/dwarfh.awk | 19
+ scripts/kconfig/Makefile | 32
+ scripts/ksymhash/Makefile | 35
+ scripts/ksymhash/elflib.c | 164
+ scripts/ksymhash/elflib.h | 142
+ scripts/ksymhash/empty.c | 1
+ scripts/ksymhash/ksymhash.c | 126
+ scripts/ksymhash/mk_elfconfig.c | 66
+ scripts/mod/modpost.c | 23
+ sound/Kconfig | 36
+ sound/Makefile | 9
+ sound/arm/Kconfig | 11
+ sound/arm/Makefile | 3
+ sound/arm/nomadik_alsa.c | 1038 +
+ sound/arm/nomadik_alsa.h | 83
+ sound/nomadik_stw5094.c | 2280 +++
+ sound/nomadik_stw5095.c | 3529 ++++
+ 514 files changed, 244969 insertions(+), 622 deletions(-)
+
+--- linux-2.6.20.orig/.gitignore
++++ /dev/null
+@@ -1,47 +0,0 @@
+-#
+-# NOTE! Don't add files that are generated in specific
+-# subdirectories here. Add them in the ".gitignore" file
+-# in that subdirectory instead.
+-#
+-# Normal rules
+-#
+-.*
+-*.o
+-*.a
+-*.s
+-*.ko
+-*.so
+-*.mod.c
+-*.i
+-*.lst
+-*.symtypes
+-
+-#
+-# Top-level generic files
+-#
+-tags
+-TAGS
+-vmlinux*
+-System.map
+-Module.symvers
+-
+-#
+-# Generated include files
+-#
+-include/asm
+-include/asm-*/asm-offsets.h
+-include/config
+-include/linux/autoconf.h
+-include/linux/compile.h
+-include/linux/version.h
+-include/linux/utsrelease.h
+-
+-# stgit generated dirs
+-patches-*
+-
+-# quilt's files
+-patches
+-series
+-
+-# cscope files
+-cscope.*
+--- linux-2.6.20.orig/Documentation/DocBook/Makefile
++++ linux-2.6.20/Documentation/DocBook/Makefile
+@@ -9,11 +9,12 @@
+ DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \
+ kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
+ procfs-guide.xml writing_usb_driver.xml \
+ kernel-api.xml filesystems.xml lsm.xml usb.xml \
+ gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
+- genericirq.xml
++ genericirq.xml \
++ kgdb.xml
+
+ ###
+ # The build process is as follows (targets):
+ # (xmldocs)
+ # file.tmpl --> file.xml +--> file.ps (psdocs)
+--- /dev/null
++++ linux-2.6.20/Documentation/DocBook/kgdb.tmpl
+@@ -0,0 +1,234 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
++ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
++
++<book id="kgdbInternals">
++ <bookinfo>
++ <title>KGDB Internals</title>
++
++ <authorgroup>
++ <author>
++ <firstname>Tom</firstname>
++ <surname>Rini</surname>
++ <affiliation>
++ <address>
++ <email>trini@kernel.crashing.org</email>
++ </address>
++ </affiliation>
++ </author>
++ </authorgroup>
++
++ <authorgroup>
++ <author>
++ <firstname>Amit S.</firstname>
++ <surname>Kale</surname>
++ <affiliation>
++ <address>
++ <email>amitkale@linsyssoft.com</email>
++ </address>
++ </affiliation>
++ </author>
++ </authorgroup>
++
++ <copyright>
++ <year>2004-2005</year>
++ <holder>MontaVista Software, Inc.</holder>
++ </copyright>
++ <copyright>
++ <year>2004</year>
++ <holder>Amit S. Kale</holder>
++ </copyright>
++
++ <legalnotice>
++ <para>
++ This file is licensed under the terms of the GNU General Public License
++ version 2. This program is licensed "as is" without any warranty of any
++ kind, whether express or implied.
++ </para>
++
++ </legalnotice>
++ </bookinfo>
++
++<toc></toc>
++ <chapter id="Introduction">
++ <title>Introduction</title>
++ <para>
++ kgdb is a source level debugger for linux kernel. It is used along
++ with gdb to debug a linux kernel. Kernel developers can debug a kernel
++ similar to application programs with the use of kgdb. It makes it
++ possible to place breakpoints in kernel code, step through the code
++ and observe variables.
++ </para>
++ <para>
++ Two machines are required for using kgdb. One of these machines is a
++ development machine and the other is a test machine. The machines are
++ typically connected through a serial line, a null-modem cable which
++ connects their serial ports. It is also possible however, to use an
++ ethernet connection between the machines. The kernel to be debugged
++ runs on the test machine. gdb runs on the development machine. The
++ serial line or ethernet connection is used by gdb to communicate to
++ the kernel being debugged.
++ </para>
++ </chapter>
++ <chapter id="CompilingAKernel">
++ <title>Compiling a kernel</title>
++ <para>
++ To enable <symbol>CONFIG_KGDB</symbol>, look under the "Kernel debugging"
++ and then select "KGDB: kernel debugging with remote gdb".
++ </para>
++ <para>
++ The first choice for I/O is <symbol>CONFIG_KGDB_ONLY_MODULES</symbol>.
++ This means that you will only be able to use KGDB after loading a
++ kernel module that defines how you want to be able to talk with
++ KGDB. There are two other choices (more on some architectures) that
++ can be enabled as modules later, if not picked here.
++ </para>
++ <para>The first of these is <symbol>CONFIG_KGDB_8250_NOMODULE</symbol>.
++ This has sub-options such as <symbol>CONFIG_KGDB_SIMPLE_SERIAL</symbol>
++ which toggles choosing the serial port by ttyS number or by specifying
++ a port and IRQ number.
++ </para>
++ <para>
++ The second of these choices on most systems for I/O is
++ <symbol>CONFIG_KGDBOE</symbol>. This requires that the machine to be
++ debugged has an ethernet card which supports the netpoll API, such as
++ the cards supported by <symbol>CONFIG_E100</symbol>. There are no
++ sub-options for this, but a kernel command line option is required.
++ </para>
++ </chapter>
++ <chapter id="BootingTheKernel">
++ <title>Booting the kernel</title>
++ <para>
++ The Kernel command line option <constant>kgdbwait</constant> makes kgdb
++ wait for gdb connection during booting of a kernel. If the
++ <symbol>CONFIG_KGDB_8250</symbol> driver is used (or if applicable,
++ another serial driver) this breakpoint will happen very early on, before
++ console output. If you wish to change serial port information and you
++ have enabled both <symbol>CONFIG_KGDB_8250</symbol> and
++ <symbol>CONFIG_KGDB_SIMPLE_SERIAL</symbol> then you must pass the option
++ <constant>kgdb8250=&lt;io or mmio&gt;,&lt;address&gt;,&lt;baud
++ rate&gt;,&lt;irq&gt;</constant> before <constant>kgdbwait</constant>.
++ The values <constant>io</constant> or <constant>mmio</constant> refer to
++ if the address being passed next needs to be memory mapped
++ (<constant>mmio</constant>) or not. The <constant>address</constant> must
++ be passed in hex and is the hardware address and will be remapped if
++ passed as <constant>mmio</constant>. The value
++ <constant>baud rate</constant> and <constant>irq</constant> are base-10.
++ The supported values for <constant>baud rate</constant> are
++ <constant>9600</constant>, <constant>19200</constant>,
++ <constant>38400</constant>, <constant>57600</constant>, and
++ <constant>115200</constant>.
++ </para>
++ <para>
++ To have KGDB stop the kernel and wait, with the compiled values for the
++ serial driver, pass in: <constant>kgdbwait</constant>.
++ </para>
++ <para>
++ To specify the values of the serial port at boot:
++ <constant>kgdb8250=io,3f8,115200,3</constant>.
++ On IA64 this could also be:
++ <constant>kgdb8250=mmio,0xff5e0000,115200,74</constant>
++ And to have KGDB also stop the kernel and wait for GDB to connect, pass in
++ <constant>kgdbwait</constant> after this arguement.
++ </para>
++ <para>
++ To configure the <symbol>CONFIG_KGDBOE</symbol> driver, pass in
++ <constant>kgdboe=[src-port]@&lt;src-ip&gt;/[dev],[tgt-port]@&lt;tgt-ip&gt;/[tgt-macaddr]</constant>
++ where:
++ <itemizedlist>
++ <listitem><para>src-port (optional): source for UDP packets (defaults to <constant>6443</constant>)</para></listitem>
++ <listitem><para>src-ip: source IP to use (interface address)</para></listitem>
++ <listitem><para>dev (optional): network interface (<constant>eth0</constant>)</para></listitem>
++ <listitem><para>tgt-port (optional): port GDB will use (defaults to <constant>6442</constant>)</para></listitem>
++ <listitem><para>tgt-ip: IP address GDB will be connecting from</para></listitem>
++ <listitem><para>tgt-macaddr (optional): ethernet MAC address for logging agent (default is broadcast)</para></listitem>
++ </itemizedlist>
++ </para>
++ <para>
++ The <symbol>CONFIG_KGDBOE</symbol> driver can be reconfigured at run
++ time, if <symbol>CONFIG_SYSFS</symbol> and
++ <symbol>CONFIG_MODULES</symbol> by echo'ing a new config string to
++ <constant>/sys/module/kgdboe/parameter/kgdboe</constant>. The
++ driver can be unconfigured with the special string
++ <constant>not_configured</constant>.
++ </para>
++ </chapter>
++ <chapter id="ConnectingGDB">
++ <title>Connecting gdb</title>
++ <para>
++ If you have used any of the methods to have KGDB stop and create
++ an initial breakpoint described in the previous chapter, kgdb prints
++ the message "Waiting for connection from remote gdb..." on the console
++ and waits for connection from gdb. At this point you connect gdb to kgdb.
++ </para>
++ <para>
++ Example (serial):
++ </para>
++ <programlisting>
++ % gdb ./vmlinux
++ (gdb) set remotebaud 115200
++ (gdb) target remote /dev/ttyS0
++ </programlisting>
++ <para>
++ Example (ethernet):
++ </para>
++ <programlisting>
++ % gdb ./vmlinux
++ (gdb) target remote udp:192.168.2.2:6443
++ </programlisting>
++ <para>
++ Once connected, you can debug a kernel the way you would debug an
++ application program.
++ </para>
++ </chapter>
++ <chapter id="CommonBackEndReq">
++ <title>The common backend (required)</title>
++ <para>
++ There are a few flags which must be set on every architecture in
++ their &lt;asm/kgdb.h&gt; file. These are:
++ <itemizedlist>
++ <listitem>
++ <para>
++ NUMREGBYTES: The size in bytes of all of the registers, so
++ that we can ensure they will all fit into a packet.
++ </para>
++ <para>
++ BUFMAX: The size in bytes of the buffer GDB will read into.
++ This must be larger than NUMREGBYTES.
++ </para>
++ <para>
++ CACHE_FLUSH_IS_SAFE: Set to one if it always safe to call
++ flush_cache_range or flush_icache_range. On some architectures,
++ these functions may not be safe to call on SMP since we keep other
++ CPUs in a holding pattern.
++ </para>
++ </listitem>
++ </itemizedlist>
++ </para>
++ <para>
++ There are also the following functions for the common backend,
++ found in kernel/kgdb.c that must be supplied by the
++ architecture-specific backend. No weak version of these is provided.
++ </para>
++!Iinclude/linux/kgdb.h
++ </chapter>
++ <chapter id="CommonBackEndOpt">
++ <title>The common backend (optional)</title>
++ <para>
++ These functions are part of the common backend, found in kernel/kgdb.c
++ and are optionally implemented. Some functions (with _hw_ in the name)
++ end up being required on arches which use hardware breakpoints.
++ </para>
++!Ikernel/kgdb.c
++ </chapter>
++ <chapter id="DriverSpecificFunctions">
++ <title>Driver-Specific Functions</title>
++ <para>
++ Some of the I/O drivers have additional functions that can be
++ called, that are specific to the driver. Calls from other places
++ to these functions must be wrapped in #ifdefs for the driver in
++ question.
++ </para>
++!Idrivers/serial/8250_kgdb.c
++ </chapter>
++</book>
+--- /dev/null
++++ linux-2.6.20/Documentation/arm/STM-Nomadik/HOWTO-add_newboard.txt
+@@ -0,0 +1,111 @@
++Filename: ./Documentation/arm/STM-Nomadik/HOWTO-add_newboard.txt
++Author: Prafulla Wadaskar (prafulla.wadaskar@st.com)
++Owner: STMicroelectronics
++Purpose:
++ This HOWTO explains guidlines for addition of new Nomadik
++ board support to the kernel source code
++===============================================================================
++
++This document is valid subject to assumption -
++1. valid kernel source code with Nomadik support is available
++
++Nomadik BSP kernel file naming conventions
++============================================
++It is strongly recommended to follow below filename conventions while adding
++new board support for Nomadik
++1. All the Nomadik architecture specific code must be in mach-nomadik and
++ arch-nomadik folders in a kernel tree.
++2. Generic and Nomadik specific device drives may be located into the respective
++ folder in the kernel source tree (ex. nomadik keypad driver in
++ drivers/input/keyboard/kpd-nomadik.c)
++3. all Nomadik specific files in mach-nomadik and arch-nomadik folders should
++ be named as <comp>.c/h
++ (ex. gpio.h, msp.c)
++4. all Nomadik platform specific files are named as <platform>_<purpose>.c/h
++ (ex. ndk10_devices.c, ndk15_devices.h)
++5. all Nomadik soc specific files are named as <soc>_<purpose>.c/h
++ (ex. stn8810_devices.h, stn8815_devices.c)
++
++Important definations
++==============================
++1. target: It is a unique identity to describe supported board with a specific
++ board version and specific SOC version.
++ target is created by combination of board (i.e. platform) and
++ Nomadik chip version (i.e. soc)
++
++2. platform: It is refered for board to be supported.
++ One plaform may be supported by several targets
++ One plaform may be supported by several socs
++
++3. soc: It is refered for the Nomadik chip version to be suported.
++ same soc may be supported on several platforms
++
++Hence any Nomadik borad is identified as a "target" and supported by "soc"
++ specific code and "platform" specific code well interfaced with generic
++ code.
++
++Device driver Support for Nomadik:
++====================================
++1. All the drivers suported on a target can be either SOC or platform specific
++2. A platform specific code for all supported driver will be refered from a
++ single file <platform_name>_devices.c through device specific interface.
++3. A Nomadik chip specific code for all supported driver will be refered from a
++ single file <soc_name>_devices.c through device specific interface.
++4. Each device specific header file <pltfomr_name>_devices.h and
++ <soc_name>_devices.h must be maintained to share a common hardware
++ parameters across the drivers. Those two files are included in
++ asm/arch/hardware.h which is further refered through asm/hardware.h
++ Hence any kernel code seeking for hardware specific information (like
++ base address, irqnos) can be made available by just including
++ <asm/hardware.h>
++5. Each header file described here should have relevent declaration related to
++ the scope of its usage. ex. <platform_name>_devices.h should only have
++ platforms specific declration.
++
++Any Nomadik target can be supported by following set of files:-
++ arch/arch/mach-nomadik/<soc_name>_devices.c
++ inclue/asm-arm/arch-nomadik/<soc_name>_devices.h
++ arch/arch/mach-nomadik/<platform_name>_devices.c
++ inclue/asm-arm/arch-nomadik/<platform_name>_devices.h
++
++But Generally, New board support will be added for already suported SOCs
++hence, to add support for any new Nomadik target only three files need to be
++added, those are:-
++ arch/arch/mach-nomadik/<target_name>_Kconfig
++ arch/arch/mach-nomadik/<platform_name>_devices.c
++ inclue/asm-arm/arch0-nomadik/<platform_name>_devices.h
++
++Steps to follow to add new target support for Nomadik
++========================================================
++1. Add ./arch/arm/mach-nomadik/<target_name>_Kconfig file for board
++ configuration, <target_name> specified here will reflect as machine name.
++
++ During make config/menuconfig arch/arm/mach-nomadik/Kconfig will be
++ checked, and if is not found, it will be created automatically using
++ all <target_name>_Kconfig files and Kconfig_nomadik file.
++ 1. <target_name>_Kconfig file contain board specific configuration
++ 2. Kconfig_nomadik contains generic configuration for all nomadik
++ platforms
++ for details refer provided ndk10_cut_a1_Kconfig file
++
++2. Add ./arch/arm/mach-nomadik/<platform_name>_devices.c file
++ This file contains all the platfrom specific functions and data
++ structures used by rest of the code. Any driver suported for Nomadik
++ platform must access all the paramters through this file
++ (for ex. base addres, irq number and other plaform specific data
++ structures and function)
++ It is recommended to refer such file for already suported platform
++
++3. Add ./include/asm-arm/arch-nomadik/<platform_name>_devices.h file
++ This file must contain all the declarations for this platform
++ which may be refered by the other drivers and kernel code.
++ Note that this file is refered by some assembly code hence the
++ content of this files must be maintained simple, standard and
++ generic.
++ It is recommended to refer such file for already suported platform
++
++With the above addition/modification New target support will be available.
++Select newly supported target in kernel configuration, build and execute
++the code on new target
++===============================================================================
++
+--- /dev/null
++++ linux-2.6.20/Documentation/arm/STM-Nomadik/HOWTO-nfsboot.txt
+@@ -0,0 +1,106 @@
++This HOWTO esplains mounting the root file system via NFS on Nomadik Platform (nfsroot)
++
++As you know, all of us spend lot of time in-
++1. Unzip/mount initrd to put the modules/application under test
++2. Copying modules/applications to initrd
++3. Unmount/gzip operation with initrd
++4. Then load huge initrd and kernel each time to target board
++ for execution.
++
++So for each time even for a small change we need to repeat this process, and
++downloading and system re-initialization eats lot of our development time.
++Nfsroot is a good solution to overcome above issues.
++
++Root file system can be mounted via NFS (nfsroot) on host and can be accessed
++from your target machin.
++
++Advantages of this method are:-
++===============================
++1. No need to download ramdiks time to time (saves lot of time)
++2. Since file system is on NFS, runtime results/logs dooes not vanishes
++ in case of nomadik-system crash
++3. Since file system is on NFS, it is transperant to host and target
++4. Making, updating, mounting, unmounting, zipping, unzipping activities
++ associated with ramdisk can be totally avoided (saves lot of time)
++5. Offers comfortable and fast development environment
++
++Host configuration to enable root NFS:-
++========================================
++1. Copy a "target" folder from toolchain at some fixed path on your Linux
++ host
++2. Switch to the dev folder of newly created target folder and create
++ a node for console with command "mknod console c 5 1"
++3. Then swtich to the target folder and create a symbolic link with
++ command "ln -s /bin/busybox linuxrc
++4. FTP and TFTP should be enabled on the host system. You can check the
++ configuration by issuing the following command
++
++#> chkconfig --list | grep ftp
++
++Output should look like :-
++vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
++ gssftp: off
++ tftp: on
++
++Note: Method of enabling FTP can be different for different versions of Linux.
++
++5. NFS should be enabled. Same can also be checked with the following
++ command
++
++#> chkconfig --list | grep nfs
++
++Output should looklike
++nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
++
++6. Also, check the entries of the /etc/xinetd.d/tftp file accordingly.
++ In our case, it is :
++
++service tftp
++{
++ disable = no
++ socket_type = dgram
++ protocol = udp
++ wait = yes
++ user = root
++ server = /usr/sbin/in.tftpd
++ server_args = -T 100000000 -v -c -s
++/local_no_backup
++# server_args = -s /tftpboot
++ per_source = 11
++ cps = 100 2
++ flags = IPv4
++}
++
++7. Also make the entries in /etc/exports for the file systems that need
++ to be shared. For options used, please refer the man pages of exports.
++ In our case, it is :
++
++/rtrt *(rw,insecure,no_root_squash,async)
++/local_no_backup/target *(rw,insecure,no_root_squash,async)
++
++How to enable NFS feature in your development?
++===============================================
++1. Of cource you need to work on ethernet based environment
++2. Enable ethernet driver in your kernel image
++3. Enable following settings in your kernel image to enable nfsroot
++a. Networking options --->IP: kernel level autoconfiguration
++b. Networking options --->IP: BOOTP support
++c. File systems --->Network File Systems --->NFS file system support
++d. File systems --->Network File Systems --->Provide NFSv3 client support
++e. File systems --->Network File Systems --->Root file system on NFS
++4. Then compile kernel image, prepare uimage and download into the target
++5. Set the command line arguments as -
++
++ "set bootargs root=/dev/nfs nfsroot=<HOST_IP_ADDR>:/<PATH>/ramdisk
++ip=<TARGET_IP_ADDR>:<HOST_IP_ADDR>:<GATWAY_IP_ADDR_FOR_TARGET>:255.255.255.0:nomadik:: console=ttyAMA1 mac=<MAC_ADDRESS> init=linuxrc"
++
++for example:-
++"set bootargs root=/dev/nfs nfsroot=10.199.3.88:/local_no_backup/target
++ip=10.199.32.165:10.199.3.88:10.199.32.254:255.255.255.0:NDK10_165::
++mac=00:0D:88:45:5D:A5 console=ttyAMA1,115200n8 init=linuxrc"
++
++6. And then boot the kernel with command "bootm 0x100000"
++ (initrd address not needed since NFS)
++
++Start enjoying the advantages of root NFS
++
+--- /dev/null
++++ linux-2.6.20/Documentation/arm/STM-Nomadik/debug_strategy.txt
+@@ -0,0 +1,66 @@
++
++ * 1.1 Nomadik Development Debugging Strategy
++ * ==========================================
++ *
++ * DEBUGGING LEVELS
++ * 0 To disable all debug messages
++ * 1 To enable normal debug macro- nmdk_dbg
++ * 2 To enable flow trace debug macro- nmdk_dbg_ftrace
++ * 4 To enable interrupt and timer debug macroc- nmdk_dbg2
++ * 8 To enable any special debug messages defined by macro- nmdk_dbg3
++ *
++ *
++ * 1.2 How to use Debuggign strategy in driver development ?
++ * =========================================================
++ *
++ * 1. include debug-nomadik.h file in c code
++ * (path: include/asm-arm/arch/nomadik/debug-nomadik.h)
++ * 2. define NMDK_DEBUG to required debug level (this can be automated
++ * to pass build time debug levels -as done for keypad driver.
++ * See driver/input/keypad makefile)
++ * 3. define NMDK_DEBUG_PFX to a small string to identify debug message
++ * This is an optional setting, if you don't define NMDK_DEBUG_PFX,
++ * by default "Nomadik" will be selected.
++ * 4. define NMDK_DBG to desired Kerlen debug level
++ * This is an optional setting, if you don't define NMDK_DBG,
++ * by default KERN_DEBUG will be used
++ * This generally need to set to KERN_ERR to force debug messages to
++ * appear on the console
++ *
++ *
++ * 1.3 How to activate debug messages?
++ *====================================
++ *
++ * Debug messages can be activated during build time by passing desired
++ * debug level either hardcoding in source file or as a make parameter
++ *
++ * 1. Enabling Debug messages by passing additional parameter to make
++ * This is a recommended method of debug messages implimentation.
++ * this method give flexibility to enable/disable debug messages
++ * during build without modifying code
++ * (a) To enable this you need to updated driver make file with:-
++ * ex.
++ * ifdef <DRVNAME>_DEBUG
++ * CFLAGS += -<DRVNAME>_DEBUG=$(<DRVNAME>_DEBUG)
++ * endif
++ *
++ * (b) Same <DRVNAME>_DEBUG must be used to define NMDK_DEBUG as
++ * explained in (1.2.2)
++ * (c) Debug parameter must be passed to the make with desired debug
++ * level as explained in (1.1)
++ * ex. make <DRVNAME>_DEBUG=1
++ * (d) you can AND several debug levels togather to enable respective
++ * debug mesages
++ * (e) even you can pass additional parameters to enable debug messages
++ * of more than one module
++ * ex. make <DRV1>_DEBUG=1 <DRV2>_DEBUG=4 ...
++ *
++ * 2. Enabling Debug messages by hardcoding in source file
++ * This is simplest implimentation, just define NMDK_DEBUG to
++ * desired debug level and compile the code, the disadvantage of this
++ * method is, it does not offer flexibility and code with debug message
++ * may become part of your release if not taken care properly.
++ *
++ */
++
++
+--- /dev/null
++++ linux-2.6.20/Documentation/arm/STM-Nomadik/dma_user_guide.txt
+@@ -0,0 +1,420 @@
++Filename: ./Documentation/arm/STM-Nomadik/dma_user_guide.txt
++Author: Prafulla Wadaskar (prafulla.wadaskar@st.com)
++Owner: STMicroelectronics
++Purpose:
++ This Users Guide explains DMA implimentation and its usage
++ for client drivers on Nomadik platforms
++=============================================================================
++
++This document is valid subject to assumption -
++1. valid kernel source code with Nomadik support is available
++2. you are familier with Kernal DMA interface
++ (References: ./Documentation/DMA-API.txt)
++
++DMA Configuration:
++===================
++By default Nomadik DMA driver is configured to link staticlly with kernel.
++This DMA driver provides low level interface to the kernel DMA interface.
++To use DMA APIs, client driver should only include <asm/dma.h>
++
++Definations:
++============
++1. DMA Channel: The logical DMA channel can be used for a DMA transfer
++2. Pipe: the physical DMA chanel H/w that is used to a DMA transfer
++3. DMAC: Direct Memory Access Controller (Nomadik has two DMACs)
++
++Brief Architecture:
++===================
++DMA dirver is registered as amba device and will be probed only if
++matches peripharal ID, the SOC specific data/function iterface is provided
++through platfrom_data pointer to allign driver design in sync with multiboard
++strategy.
++There are two DMA controllers having 8 pipes each, there could be number of
++dma channels which will use any one available pipe for dma transfer at run time
++Kernel DMA interface defines and controls the interface, whereas the h/w
++specific APIs are mapped through methods provided by upper layer (i,e.
++arch/arm/kernel/dma.c). The configuration, usage and features provided by this
++driver is explained below.
++
++This Users guide explains-
++1. Support for Standard DMA APIs for Nomadik DMA usage
++2. Additional DMA APIs to facilitate effieient/flexible DMA usage
++3. DMA Channel configuration.
++ a) Mode of operation: Transfer type
++ b) Mode of operation: flow control
++ c) Mode of operation: Double Buffered Transfer
++ d) Mode of operation: Infinite DMA Transfer
++ e) Mode of operation: Infinite DMA Transfer
++ f) Mode of operation: Pipe reservation
++ g) Mode of operation: Channel Priority
++ h) Mode of operation: Queueing DMA transfer requests
++4. DMA Interrupt hanndling for callback functions.
++5. Scatter-gather Support
++6. /proc/dma interfce.
++7. HOWTO add new DMAable peripharal device support
++
++1. Support for Standard DMA APIs for Nomadik DMA usage
++======================================================
++Standard kernel DMA interface exports APIs out of which request_dma, enable_dma,
++disable_dma, free_dma, dma_channel_active, set_dma_sg, __set_dma_addr, set_dma_count,
++are supported for Nomadik DMA Usage.
++For any DMA transfer you need to follow a sequence-
++ a) request_dma : to request a DMA channel be to used for transfer,
++ in this request you need to pass configuration
++ b) request_irq : to register DMA callback function
++ c) __set_dma_srcaddr : to set src DMAble address (mapped to __set_dma_addr)
++ d) __set_dma_destaddr : to set dest DMAble address (mapped to set_dma_speed)
++ e) set_dma_count : to set transfer size in bytes
++ f) set_dma_mode : to set/ulter mode of operation (optional)
++ g) enable_dma : to start transfer
++ h) dma_channel_active : to know the status of scheduled transfer (optional)
++ i) disable dma : to stop transfer (optional)
++ j) free_irq : to free irq used for callback (optional)
++ k) free_dma : to free requested DMA channel
++
++2. Additional DMA APIs for effieient/flexible DMA usage
++=======================================================
++Following additional APIs are provided for effieient/flexible DMA usage
++ a) request_available_dma
++ : This is a wrapper over request_dma,
++ this API will search, allocate and return available
++ free DMA channel.
++ b) suspend_DMA : to pause currently active DMA transfer
++ c) resume_DMA : to resume previously paused DMA transfer
++
++3. DMA Channel Configureation:
++==============================
++Durring request_dma system call you need to pass a pointer of pre-filled DMA
++Channel configuration structure nmdk_dma_info defined in asm/arch/dma.h
++i.e.-
++struct nmdk_dma_info {
++ u32 mode; /* Mode of operation(xfer type/flow cntrl etc)*/
++ char *srcdevtype; /* source device type configuration*/
++ char *destdevtype; /* desitnation device type configuration*/
++ u32 config; /* User programmable dmadev configuration*/
++};
++
++Each DMA channle has source DMA device and a destination DMA device, a DMA
++channel is a hardware that connects two DMAable devices for data transfer.
++So to have a successfull DMA transfer you need to configure all these three.
++Below picture gives some idea about it-
++
++
++ --------------------
++ srcdevtype, src_addr | | destdevtype, dest_addr
++ def dmadev config | | default dmadev configuration
++ | |
++ (Src DMA periph)------>| DMA Channel |--------> (Dest DMA peripharal)
++ | |
++ --------------------
++ (mode of operation)
++ (User configuration)
++ (Xfer Size in bytes)
++
++DMAable devices and their default configurations are SOC specific and declared
++in arch/arm/mach-nomadik/<SOC_NAME>_devices.c file (will be explained latter
++in this guide). Each DMAble device is identified by unique name, during
++configuration the src and dest dmadev names need to be specified.
++
++Transfer Size in bytes, src_addr and dest_addr not a part of configuration as
++they keeps changing and need to be provided before enable_dma request
++
++User programmable dmadev configuration: These are optional configuration on
++the top of default for the changable paramters (specially Brust size and
++transfer width). This will be exmpained latter in this guide
++
++for ex, to configure a dma chnnel for memory to MSP peripharal DMA transfer
++the sructure should be filled as-
++
++ struct nmdk_dma_info test_dma_config =
++ {
++ .mode = MEM_TO_MEM,
++ .srcdevtype = "mem",
++ .destdevtype = "msp0rx",
++ .config = NULL,
++ };
++
++Out of all configuration parameter "mode" is very important since it decides
++the mode of DMA channel operation, there are several features supported all
++are configurable through mode.
++
++ a) Mode of operation: Transfer type
++ there are four basic modes of operation those are
++ MEM_TO_MEM, MEM_TO_PERIPH, PERIPH_TO_MEM, PERIPH_TO_PERIPH
++ you should program any one as per you need.
++
++ for ex. dma_info.mode=MEM_TO_PERIPH;
++
++ b) Mode of operation: flow control
++ By default flow controller is DMA controller, if you want to program
++ flow controller as peripharal you can use the provided macros as
++
++ for ex. dma_info.mode=FLOW_CNTRL_DMA(MEM_TO_PERIPH);
++ To mention the flow controller is DMA controller.
++
++ for ex. dma_info.mode=FLOW_CNTRL_PERIPH(MEM_TO_PERIPH);
++ To mention the flow controller is peripharal controller.
++
++ Flow controller device cannot be peripharal for MEM_TO_MEM transter
++
++ c) Mode of operation: Double Buffered Transfer
++ There are some peripharals like SAA(Smart Audio Accelerator) who
++ requires DMA transfers to be done in double buffer mode, in double
++ buffered mode of operation the current dma requested in divided in two,
++ equal sequential transfers before scheduling.
++
++ By default standard single buffered transfer mode is programmed,
++ to configure Double Buffered Transfer mode a macro DMA_DOUBLE_BUFFERED
++ should be ORed with other configuration parameters
++
++ for ex. dma_info.mode=DMA_DOUBLE_BUFFERED |
++ FLOW_CNTRL_DMA(MEM_TO_PERIPH);
++
++ d) Mode of operation: Infinite DMA Transfer
++ If you want to establish DMA transafer between two DMAble devices
++ infinitely without CPUs intervention, this means once transfer is
++ scheduled, it will reschedule it self at completion automatically.
++
++ By default infinite DMA transfer is disabled,
++ to configure Infinite DMA Transfer mode a macro DMA_INFINITE_XFER
++ should be ORed with other configuration parameters
++
++ for ex. dma_info.mode=DMA_INFINITE_XFER |
++ FLOW_CNTRL_DMA(MEM_TO_PERIPH);
++
++ In Infinite DMA transfer mode, you will never receive completion
++ interrupt and callback interrupt handler cannot be executed
++
++ e) Mode of operation: Pipe reservation
++ Reserving a pipe will dediate a pipe for a channel
++ By default pipe is not reserved at the time of configuration. when you
++ schedule a enable_dma request, system looks for the available pipe and
++ schedules a transfer on it. This adds more flexibility to system to
++ handle more channels on limited pipes. In case the all the pipes are
++ busy the request will be deffered,
++ if you want to avoid this behavior, i.e. whenever you request enable_dma
++ pipe must be available to execute it, then you can reserve a pipe during
++ configuration.
++
++ to reserve a pipe, a macro DMA_PIPE_RESERVED
++ should be ORed with other configuration parameters
++
++ for ex. dma_info.mode=DMA_PIPE_RESERVED |
++ FLOW_CNTRL_DMA(MEM_TO_PERIPH);
++
++ g) Mode of operation: Channel Priority
++ At hardware level there are total 16 DMA pipes (i.e. 8 on each
++ DMAC) each having its priority (i.e. pipe 0 having highest and 7 with
++ lowest). but since the pipes are allocated dynamically you never know
++ which pipe will be assigned to which channel. To take care of this
++ issue driver has in-built channel priority policy manager
++
++ Priority DMAC0 PIPES DMAC1 PIPES Policy
++ -----------------------------------------------------
++ Highest | 0 | | 1 | HIGH
++ . | 2 | | 3 | (0->15)
++ . -----------------------------------------------------
++ . | 4 | | 5 | NORMAL
++ . | 6 | | 7 | (4->15)
++ . -----------------------------------------------------
++ . | 8 | | 9 | LOW
++ . | 10 | | 11 | (8->15)
++ . -----------------------------------------------------
++ . | 12 | | 13 | UNDEFINED (fm 15->0)
++ Lowest | 14 | | 15 | For MEM-To MEM Xfer (15->12)
++ -----------------------------------------------------
++
++ Channel priority setup during configuration tells additional
++ information to the driver that the channel under request has a
++ particular priority. And the pipe allocation policy of a driver
++ allocates a pipe accordingly for a transfer under schedule.
++
++ By default DMA_EXCH_PRIORITY_UNDEFINED is set for each channel, as
++ per policy the free and available pipe search will be started from
++ lowest to highest.
++ there are three other priorities HIGH, NORMAL and LOW which can be set
++ by ORing respective macro with other configuration parameters
++
++ for ex. dma_info.mode=DMA_EXCH_PRIORITY_HIGH |
++ FLOW_CNTRL_DMA(MEM_TO_PERIPH);
++
++ Channel priority setup macros for configurations-
++ DMA_EXCH_PRIORITY_UNDEFINED
++ DMA_EXCH_PRIORITY_LOW
++ DMA_EXCH_PRIORITY_NORMAL
++ DMA_EXCH_PRIORITY_HIGH
++
++ h) Mode of operation: Queueing DMA transfer requests
++ In the standard kernel DMA interface channel queueing is not allowed
++ once enable_dma request is executed system discards all subsequent
++ enable_dma request untill DMA finishes first scheduled request.
++ Nomadik DMA driver provides you flexibility to enable and use this
++ feature if required. Enabling this feature will accept all subsequent
++ enable_dma requests and queue them in a pipe, as system finishes
++ current transfer, next pre-scheduled transfer in a queue will be
++ executed, thus all enable_dma requests can be processed.
++
++ This feature can be enabled by ORing a macro DMA_QUEUE_ENABLED with
++ other configuration parameters
++
++ for ex. dma_info.mode=DMA_QUEUE_ENABLED |
++ FLOW_CNTRL_DMA(MEM_TO_PERIPH);
++
++4. DMA Interrupt hanndling for callback functions.
++======================================================
++When you schedule a DMA transfer, there should be a mechanism by which you know
++the transfer is finished sucessfully. In Nomadik DMA transfer a terminal
++count interrupt will be generated at the end of sucessfull transfer which can
++be requested and processed like any other standard interrupt.
++
++There are S/w decoded IRQs associated with all DMA channels.
++the macro IRQNO_FOR_DMACH(dmach) is provided to find irq for a DMA channel and
++the macro DMACH_FOR_IRQNO(irq) can be used to find DMA channel for irq number
++
++The DMA callback functions can be invoked as interrupt handler and requested
++through standard system calls i.e request_irq and free_irq.
++
++It is recommented to use your own tasklets to do deffered processing
++since it may block other DMA interuppts being processed in time.
++
++Below system messages indicates that irqno 188 to 191 are DMA interrupts
++root@NDK10_A0:/home/prafulla/alsa# cat /proc/interrupts
++ CPU0
++ 4: 12077:PL02 - Nomadik Timer Tick
++ 10: 0 - rtc
++ 11: 0 - ssp
++ 17: 581:PL08 - uart-pl011
++ 19: 6:PL10 - msp
++ 20: 33 - i2c0
++ 21: 296 - i2c1
++ 22: 81:PL02 - NMDK_MMC (data)
++ 26: 1 - SAA0
++ 27: 0 - SAA1
++113: 0 - mmc_detect
++168: 19176:PL08 - eth0
++188: 46 dummy dmaclbk-sdmmc->mem
++189: 0 dummy <NULL>
++190: 10462 dummy dmaclbk-msp0rx->mem
++191: 10437 dummy dmaclbk-mem->msp0tx
++Err: 0
++
++5. Scatter-gather Support
++======================================================
++The Nomadik DMA driver supprts scatter-gather transfer for MEM_TO_PERIPH and
++PERIPH_TO_MEM type of data transfer. to use scatter gather suport following
++sequence must be executed.
++ a) request_dma, request_irq
++ b) get the *sg and sg_len form the upper layers
++ c) execute dma_map_sg with above information
++ d) set peripharal DMA address (__set_dma_srcaddr / __set_dma_srcaddr)
++ e) set memory DMA address using set_dma_sg API with sg information
++ f) set_dma_count for transfer size
++ g) execute enable_dma
++ h) wait for transfer complete event through callback
++ i) unmap sg list using dma_unmap_sg
++ j) free_dma
++
++6. /proc/dma interfce.
++======================================================
++/proc/dma entry is created to show the information of allocated DMA resources
++executing cat /proc/dma will list the allocation of all used DMA channles
++
++for ex-
++root@NDK10_A0:/home/prafulla/alsa# cat /proc/dma
++ 0: DMACH: sdmmc->mem
++ 1: DMACH: mem->sdmmc
++ 2: DMACH: msp0rx->mem
++ 3: DMACH: mem->msp0tx
++
++7. HOWTO add new DMA peripharal device support
++======================================================
++As per multiboard strategy
++(ref : ./Documentation/arm/STM-Nomadik/HOWTO-add_newboard.txt)
++for each supported SOC there is an arch/arm/mach-nomadik/<SOC>_devices.c
++In this file there is data structure "dmadev_default_config_tbl"
++Add a new entry for the table for new DMA peripharal device
++(refer Architecture.DMA Support Chapter fo SOC specification)
++
++for ex-
++ {.id = "sdmmc",
++ .config = ( DMA_AHB_M0 | DMA_ADR_NOINC | DMA_WIDTH_WORD |
++ DMA_BSIZE_8 | DMA_REQUEST_LINE(21) |
++ DMA_DEV_BSIZE_CONFIGURABLE | DMA_DEV_WIDTH_CONFIGURABLE |
++ DMA_DEV_DMAC1_CANBE_USED ),},
++
++ explaination:
++ id: This is the unique identification string will be used in
++ configuration as srcdevtype or destdevtype.
++ config: This should be ORed value of following selection
++ a) DMA_AHB_M0 : to select AHB master 0 for this device
++ or
++ DMA_AHB_M1 : to select AHB master 1 for this device
++
++ b) DMA_ADR_INC : to indicate DMA address is incremented after
++ each transfer (memory, buffer case)
++ or
++ DMA_ADR_NOINC : to indicate DMA address is not incremented
++ after each transfer (fifo case)
++
++ c) DMA_WIDTH_WORD : to select word(32bits) as transfer width
++ or
++ DMA_WIDTH_HALFWORD: to select halfword(16bits) as transfer width
++ or
++ DMA_WIDTH_BYTE : to select byte(8bits) as transfer width
++
++ d) DMA_BSIZE_1 : to indicate 1 byte makes one DMA brust
++ or
++ DMA_BSIZE_4 : to indicate 4 bytes makes one DMA brust
++ or
++ DMA_BSIZE_8 : to indicate 8 bytes makes one DMA brust
++ or
++ DMA_BSIZE_16 : to indicate 16 bytes makes one DMA brust
++ or
++ DMA_BSIZE_32 : to indicate 32 bytes makes one DMA brust
++ or
++ DMA_BSIZE_64 : to indicate 64 bytes makes one DMA brust
++ or
++ DMA_BSIZE_128 : to indicate 128 bytes makes one DMA brust
++ or
++ DMA_BSIZE_256 : to indicate 256 bytes makes one DMA brust
++
++ e) DMA_REQUEST_LINE(x) : program peripharal request line number
++ (x less than 32)
++
++ f) DMA_DEV_BSIZE_CONFIGURABLE: to indicate the burst size can be
++ probrammed by user
++ or
++ DMA_DEV_BSIZE_NOT_CONFIGURABLE: to indicate the burst size can
++ not be probrammed by user
++ g) DMA_DEV_DWIDTH_CONFIGURABLE: to indicate the transfer width can
++ be probrammed by user
++ or
++ DMA_DEV_DWIDTH_NOT_CONFIGURABLE: to indicate the transfer width
++ can not be probrammed by user
++
++ h) DMA_DEV_DMAC1_CANBE_USED: to indicate DMA controller1 can be
++ used for the transfer
++ or
++ DMA_DEV_DMAC0_CANBE_USED: to indicate DMA controller0 can be
++ used for the transfer
++ or
++ DMA_DEV_BOTH_DMACS_CANBE_USED: to indicate both DMA controllers
++ 0 and 1 can be used for the transfer
++
++8. System Limitations and Solutions:
++=====================================
++1. MAX_DMA_CHANNELS: This macro is defined (include/asm-arm/arch-nomadik/dma.h)
++ that defiens max no. of dma channels that can be used simultenously. if in
++ complex system scenario these channels are insuffienent, you may increase
++ this number as per your needs.
++2. MAX_DMA_LLIS: This macro is defined (include/asm-arm/arch-nomadik/dma.h)
++ that defiens max no. of LLIs used internally by dma driver. lli pool is
++ internally maitained by driver and aquired whenver there is a enable_dma
++ request and freed at each dma transfer completion. In a dynamic system
++ usage a run time message "unable to find free lli.. rechecking..." can be
++ observed, if such case you may increase the defined value for this macro,
++ Assiging very large value eats free DMAble memory.
++
++==============================================================================
++
++
+--- /dev/null
++++ linux-2.6.20/Documentation/arm/STM-Nomadik/faqs.txt
+@@ -0,0 +1,53 @@
++Filename: ./Documentation/arm/STM-Nomadik/faqs.txt
++Author: Prafulla Wadaskar (prafulla.wadaskar@st.com)
++Owner: STMicroelectronics
++Purpose:
++ This documents describes frequesnty occuring problems and
++ their brief solutions while using Nomadik-BSP
++=============================================================================
++
++This document is valid subject to assumption -
++1. valid kernel source code with Nomadik support is available
++
++F.A.Qs
++======
++Q: I am not getting console on CLCD even though CLCD is enabled
++A: check your command line arguments, there should not be any console related
++ configuration, in this case by default console will be configured to CLCD.
++ In this case system will seek console input from standard input device.
++
++Q: NFS boot is giving messages "server not responding" very frequently
++A: This may be due to network congestion, try NFS boot using "tcp" option
++ (Ex. root=/dev/nfs nfsroot=<server_ipadr>:<mount_point_path>,tcp
++ ip=<host_ipadr>:<server_ipadr>:<gateway_ipard>:255.255.255.0:<hostname>::
++ console=ttyAMA1 mem=64M init=linuxrc)
++
++Q. How to enable/Disable cursor on CLCD panel?
++A. Create a dummy node "mknod /dev/dummy c 4 0 ".
++ execute a command "echo -e "\033[?1c" > /dev/dummy" to disable the cursor
++ and "echo -e "\033[?0c" > /dev/dummy" to enable the cursor
++ You can also use the "setterm" program to control this and other aspects of
++ the console. "setterm -cursor off > /dev/tty0" will do what you want.
++ "man setterm" will give a vast list of stuff.
++ There is more here:
++ http://linux.bri.st.com/docs/manual/distribution/distribution_guide10.php
++
++Q. How to disable CLCD screen blanking
++A. Create a dummy node "mknod /dev/dummy c 4 0 ".
++ Execute a command "echo -e "\033[9;0]" > /dev/dummy", this will set
++ screen blanking interval to 0 and will not blank the screen at all.
++
++Q. Generally when the kernel is up and running, CLCD is active but after some
++ time screen gets blanked, How to unblank the already blanked CLCD screen ?
++A. Create a dummy node "mknod /dev/dummy c 4 0 ".
++ Execute a command "echo -e "\033[13]" > /dev/dummy", this will activate
++ CLCD screen.
++
++Q. How to enable L2 Cache for Nomadik SOCs
++A. Switch to kernel source path, execute "make menuconfig"
++ Enable option "Enable L2 Cache controller" at location "x -> System Type"
++ L2CC is not available on STn8810 SOC versions
++
++==============================================================================
++
++
+--- /dev/null
++++ linux-2.6.20/Documentation/arm/STM-Nomadik/gpio_user_guide.txt
+@@ -0,0 +1,140 @@
++Filename: ./Documentation/arm/STM-Nomadik/gpio_user_guide.txt
++Author: Prafulla Wadaskar (prafulla.wadaskar@st.com)
++Owner: STMicroelectronics
++Purpose:
++ This Users Guide explains GPIO implimentation and its usage
++ from other drivers for Nomadik platforms
++=============================================================================
++
++This document is valid subject to assumption -
++1. valid kernel source code with Nomadik support is available
++
++GPIO Configuration:
++===================
++By default GPIO driver is configured to link staticlly with kernel becasue
++it is tightly coupled with irq.c. GPIO is necessary for Nomadik architecture
++
++Brief Architecture:
++GPIO dirver is registered as amba device and will be probed only if
++matches peripharal ID, the SOC specific data and function iterface is provided
++through platfrom_data pointer to allign driver code in sync with multiboard
++strategy.
++
++GPIO driver mainly provides two kinds of functionality
++1. GPIO Interrupt hanndling and control.
++2. Exported GPIO APIs
++ 2.1 Usage of GPIO pins/block for read write APIs
++ 2.2 Configuration for Alternate functions APIs
++
++1. GPIO Interrupt hanndling and control:-
++==============================================
++VIC generates a common interrupt for all 32 pins in a block, there are such
++three to four blocks in a SOC, Each GPIO interrupt can be considered as
++standard IRQ and can be processed through generic system call (please refer
++irq_usrguide.txt). Further GPIO interrupts are softdecoded hence canot be
++programmed as priority interrupts individually,
++
++2. Exported GPIO APIs
++=====================
++All exported GPIOs are protected against call before initialization. This
++means if the GPIO driver cannot be probled due to any reasons and you try to
++use GPIO exported APIs, and error will be returned.
++APIS nomadik_gpio_readpin and nomadik_gpio_readblock are not protected against
++interrupt configuration becasue reading a GPIO does not harm its usage from
++other context. Where as all other APIS are protected against interrupt
++cnfiguration. This means if the interrupt is already requested on a GPIO pin
++the same pin cannot be configured untill you free that interrupt.
++
++2.1 Usage of GPIO pins/block for read write APIs
++================================================
++ a) nomadik_gpio_setpinconfig:
++ Individual pin can be configured for desired operation.
++ for ex.
++ mmc_pin.dev_name = "test";
++ mmc_pin.mode = GPIO_MODE_SOFTWARE;
++ mmc_pin.direction = GPIO_DIR_OUTPUT;
++ mmc_pin.debounce = GPIO_DEBOUNCE_ENABLE;
++ mmc_pin.debounce_time = GPIO_DEBOUNCE_TIME_60_MICROSEC;
++ ret = nomadik_gpio_setpinconfig(GPIO_PIN_75, &mmc_pin);
++
++ The above code will configure GPIO_PIN_75 in GPIO mode used as output
++ pin, enabled debouncing logic and set debounce time to 60 miroseconds.
++ debounce logic will be enabled if supported by the SOC version.
++ dev_name is a client device name to which the GPIO will be allocated.
++
++ b) nomadik_gpio_resetpinconfig:
++ sets the particular pin to its reset state.
++
++ c) nomadik_gpio_writepin;
++ write HIGN or LOW value on specified pin
++
++ d) nomadik_gpio_readpin;
++ reads HIGN or LOW value from specified pin
++
++ e) nomadik_gpio_readblock;
++ write multiple bits on specifed group of GPIOs
++ ex.
++ err = nomadik_gpio_writeblock(GPIO_BLOCK_32_BITS_64_TO_95,
++ , 0x0000aa00, 0x0000fc00);
++
++ The above code writes HIGH on GPIO_PIN_74, LOW on GPIO_PIN_75,
++ HIGH on GPIO_PIN_76, LOW on GPIO_PIN_77, and HIGN on GPIO_PIN_78
++
++ f) nomadik_gpio_writeblock;
++ reads multiple bits on specifed group of GPIOs
++
++2.2 Configuration for Alternate functions APIs
++================================================
++ a) nomadik_gpio_altfuncenable:
++ Sets the group of GPIOs dedicated for spefic alternate mode of
++ operation.
++
++ for ex.
++ retval = nomadik_gpio_altfuncenable(GPIO_ALT_I2C_0, "I2C_0");
++
++ The above code configures GPIOs 62 abd 63 (in case of stn8810) for
++ altfun_A, the detailed information which pins to be configured in which
++ mode for specified gpio_alt_function value(GPIO_ALT_I2C_0) is decided by
++ the gpio_altfun_tbl[] declared in <SOC>_devices.c. It has table entries
++ whcih controls altfun configuration.
++
++ for example entry in table
++ {.altfun = GPIO_ALT_I2C_0,.start = 62,.end = 63,.cont = 0,.type =
++ GPIO_ALTF_A,},
++ states that- for gpio_alt_function value GPIO_ALT_I2C_0, from gpio pins 62
++ to 63 needs to be configured for alternate function A. cont=0 specifies that
++ there are no further pins to be configured for GPIO_ALT_I2C_0.
++
++ example for cont=1
++ {.altfun = GPIO_ALT_MM_CARD,.start = 8,.end = 10,.cont = 1,.type =
++ GPIO_ALTF_A,},
++ {.altfun = GPIO_ALT_SD_CARD,.start = 82,.end = 87,.cont = 1,.type =
++ GPIO_ALTF_A,},
++ {.altfun = GPIO_ALT_MM_CARD,.start = 14,.end = 16,.cont = 0,.type =
++ GPIO_ALTF_A,},
++
++ In the above example cont=1 in first and second declaration states that there
++ are additional entries in sequence to configure pins (82 to 87) and (14 to 16)
++ in altfun A mode for the same gpio_alt_function value GPIO_ALT_MM_CARD
++
++ b) nomadik_gpio_altfuncdisable:
++ This API reconfigures the group of GPIOs dedicated for specific
++ alternate mode of operation in to GPIO mode.
++
++Secured GPIO Access:
++===================
++To prevent GPIO resources getting used/altered by unauthorised way, a method
++is provided to give secured control. When gpio is requested by setpinconfig,
++you need to specify dev_name, GPIO driver records the information that the
++particular pin is alloocated the client named "dev_name", while doing
++resetpinconfig the same dev_id must be passed.
++Simillarly the same should be followed while requesting enabling/disabling altfunction.
++When the GPIO is requested for interrupt, the specified devname will be
++configured as client name.
++
++/proc/gpio interface:
++====================
++/proc/gpio entry is created to show the information of allocated GPIO resources
++
++=======================================================================================
++
+--- /dev/null
++++ linux-2.6.20/Documentation/arm/STM-Nomadik/irq_usrguide.txt
+@@ -0,0 +1,171 @@
++Filename: ./Documentation/arm/STM-Nomadik/irq_usrguide.txt
++Author: Prafulla Wadaskar (prafulla.wadaskar@st.com)
++Owner: STMicroelectronics
++Created: 9th June 2007
++
++Purpose:
++This Users Guide explains interrupts implimentation and its usage from other
++client drivers for Nomadik platforms
++
++This document is valid subject to assumption -
++1. valid kernel source code with Nomadik support is available
++
++Generic:
++========
++All the available interrupts can be used in through standard system calls
++To use nomadik interrupts, include <linux/interrupt.h> ONLY in your code
++Interrupt numbers generic to all Nomadik cuts are defined in irqs.h
++Interrupt numbers specific to Nomadik cut is defined in <soc>_devices.h
++(refer HOWTO-add_newboard.txt for more information)
++
++IRQ Description:
++================
++for stn8810 chip:
++ IRQ0 to IRQ31 : IRQ lines provided by the VIC for different
++ on-chip peripharals.
++ IRQ32 to IRQ127 : IRQ lines for GPIO interrupts
++
++for stn8815 chip:
++ IRQ0 to IRQ63 : IRQ lines provided by the VIC for different
++ on-chip peripharals.
++ IRQ64 to IRQ191 : IRQ lines for GPIO interrupts
++
++Specific:
++========
++1. Vectored Interrupt Controller (VIC) Interrupt Priority configuration:-
++========================================================================
++Generally whenever there is IRQ request to the VIC it will be processed
++immediately, if two or more IRQs active at a time then first in a sequence
++(i.e lower in number) will be processed first (this depends how you decode
++irqnr in entry-macro.S).
++
++Vectored interrupt processing hardware on Nomadik SOC is used to detect,
++process and service the interrupts in prioritized manner.
++This provides faster interrupt processing for comples decision.
++This adds more flexibility to the system and to the driver developers to
++take complex decision making about which interrupt to be proceesed first
++when more than one IRQ goes active at a time.
++
++also while processing priority interrupt all lower priority interrupts will
++be disabled by hardware whereas all higher priority interrupts will be active.
++This adds a benefit to use SA_IRQPRIORITY_x over SA_INTERRUPT becasue
++SA_INTERRUPT disables all interrupt while processign it.
++
++Any 15 (maximum) IRQs lines of VIC can be programmed for priority,
++GPIO_IRQs cannot be programmed for priority since the are softdecoded.
++
++How to program a interrupt for desired priority?
++================================================
++this can be done in two ways
++a. using request_irq
++ for ex.
++ err = request_irq(IRQ_UART1, test_inthandle, SA_IRQPRIORITY_4,
++ "test", test_data);
++
++ will request IRQ with interrupt priority level 4
++
++b) using set_irq_type
++ This call can be used any time after requesting a interrupt to
++ to enable/disable/change priority level for specific IRQ line
++
++ For ex.
++ set_irq_type(IRQ_UART1, SA_IRQPRIORITY_10);
++
++ will enable priority level for pre-requested IRQ
++ if IRQ was requested with different priority level earlier,
++ this call will change it to specified level
++
++How to disable interrupt priority for a IRQ?
++===========================================
++a) using set_irq_type api
++ This call can be used any time after requesting a interrupt to
++ to enable/disable/change priority level for specific IRQ line
++
++ For ex.
++ set_irq_type(IRQ_UART1, SA_IRQPRIORITY_DISABLE);
++
++ will disable priority level for pre-requested IRQ and will configure
++ if as normal IRQ
++
++How to know which IRQs are programmed for priority?
++===================================================
++executing cat /proc/interrupts interface will display all interrupt information
++if any IRQ is programmed with some priority then it will reflect as-
++
++# cat /proc/interrupts
++ CPU0
++ 4: 143193 Nomadik Timer Tick
++ 10: 0 rtc
++ 11: 0 ssp
++ 13: 1 dma1
++ 15: 0 dma0
++ 17: 745 uart-pl011
++ 20: 0 i2c0
++ 21: 4 i2c1
++ 22: 132 NMDK_MMC (data)
++ 30: 0:PL07 msp1
++ 31: 0 msp2
++ 72: 122 nmdk-kp
++ 77: 433 eth0
++ 79: 5175 nmdk-tp
++ 81: 32 mmc_detect
++Err: 0
++#
++
++Above message indicates that IRQ30 for msp1 is programmed as priority interrupt
++with level 7.
++
++2. GPIO Interrupt hanndling and control:-
++==============================================
++GPIO Interrupt control is handled through standard system calls. The macros
++(IRQNO_GPIO(x) and GPIO_PIN_FOR_IRQ(x)) are provided to find out interrupt
++number associated with GPIO and vice-versa.
++Following system calls are suported for GPIO interrupt control:-
++a) request_irq/ free_irq:
++ works in a standard way to request and free GPIO interrupt.
++ When request_irq is invoked for GPIO, it first configures GPIO pin
++ for input operation with debounce disable (if supported). Then it sets
++ interrupt type for falling edge detection by default if not specified
++ in interrupt_flags. You can set type of interrupt during request by
++ passing required SA_TTRIGGER_ flags. GPIO interrupt type will be set
++ during request_irq call if the requested interrupt is NOT shared.
++
++ for ex.
++ err = request_irq(IRQNO_GPIO(x), test_inthandle, SA_TRIGGER_RISING,
++ "test", test_data);
++
++ will request rising edge interrupt for GPIO x
++
++b) enable_irq/disable_irq:
++ These are standard system calls can be used to enable or disable GPIO
++ irqs whenever required.
++
++ for ex.
++ enable_irq(IRQNO_GPIO(x));
++
++ will enable interrupt for GPIO x
++
++c) set_irq_type:
++ By defult interrupt is requested as falling edge through request_irq call.
++ If you want to use other type of interrupt detection, this call can be used.
++ This call will be necessary to configure shared GPIO interrupt
++
++ For ex.
++ set_irq_type(IRQNO_GPIO(x), SA_TRIGGER_LOW);
++ sets irq type as low level detection
++
++ set_irq_type(IRQNO_GPIO(x), (SA_TRIGGER_RISING|SA_TRIGGER_FALLING);
++ sets irq type for both edges detection
++
++ Please note that set_irq_type overwites previous irq_type, hence the GPIO
++ interrupt behaviour depends upon where you call this API.
++
++ for ex. if you set_irq_type first and then requested interrupt, the
++ request_irq will overwrite the previously set irq type and vice versa.
++
++d) enable_irq_wake/disable_irq_wake:
++ the frame work is provided to handle these call for GPIO interrupt to
++ enable/disable wakup event generation to the power management unit.
++
++===============================================================================
++
+--- /dev/null
++++ linux-2.6.20/Documentation/arm/STM-Nomadik/power_management.txt
+@@ -0,0 +1,122 @@
++
++ * 1 Nomadik Power Management Strategy
++ * ==========================================
++ * Power in nomadik can be saved by following features
++ * 1. Enable idle tick suppression or dynamic tick
++ * 2. Frequency scaling
++ * 3. Voltage scaling
++ * 4. Take system into soft sleep
++ * 5. Take system into deep sleep
++ * 6. Taking individual device (eg. CLCD) into suspend state
++ *
++ *
++ * 1.1 How to Enable idle tick suppression or dynamic tick
++ * =========================================================
++ *
++ * 1. Select CONFIG_NO_IDLE_HZ in kernel features in kernel configuration
++ * 2. To enable dynamic tick
++ * echo -n 1 > /sys/devices/system/timer/timer0/dyn_tick
++ * 3. Dynamic tick can be disabled by
++ * echo -n 0 > /sys/devices/system/timer/timer0/dyn_tick
++ * 4. In idle thread, arm put itself in WFI, hence power is saved. By using
++ * dynamic tick we can put ARM in WFI for longer duration
++ *
++ * 1.2 Scaling frequencies
++ *====================================
++ * 1. Select CONFIG_CPU_FREQ & CONFIG_CPU_FREQ_NOMADIK in kernel configuration
++ * during compilation
++ * 2. Check current frequency (In Khz) by
++ * cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
++ * 3. Change system freq by
++ * echo -n <freq in khz > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
++ * If entered freq is not supported in system then next higher valid
++ * frequency is set
++ * 4. For frequencies which require voltage change, new voltage will be
++ * reflected. It can be checked by voltage sysfs file
++ * 5. If mapping for frequency and voltage is changed then change is required
++ * in arch/arm/mach-nomadik/power.c
++ * 6. If different SDRAM parameters are to be changed then change is required
++ * in arch/arm/mach-nomadik/power.c
++ * 7. If frequencies are to be altered then change is required in arch/arm/mach-nomadik/power.c
++ *
++ *
++ * 1.3 Scaling Voltage
++ *====================================
++ * 1. To enable voltage scaling either CONFIG_CPU_FREQ or CONFIG_PM_NOMADIK
++ * must be selected in configuration
++ * 2. Current voltage can be checked by
++ * cat /sys/nomadik/current_voltage
++ * VOLTAGE will be shown in milli volt
++ * 3. To change in current voltage without changing frequency use
++ * echo < voltage in milli volt > > current_voltage
++ * However directly changing voltage without frequency is not recommended
++ * but can be used for performance/testing purpose.
++ * 4. If voltages are to be altered then change is required in arch/arm/mach-nomadik/power.c
++ *
++ *
++ * 1.4 Taking system into soft sleep
++ *====================================
++ * 1. Select CONFIG_PM and CONFIG_NOMADIK_PM and CONFIG_NOMADIK_RTC
++ * 2. Change required sleep type to softsleep by
++ * echo -n softsleep > /sys/nomadik/sleep_type
++ * 3. To take system into sleep use
++ * echo -n mem > /sys/power/state
++ * 4. Wakeup can be done by RTC or keypad/touch panel/MMC
++ * 5. To specify rtc wakeup duration ( sleeping time )
++ echo -n <sleep duration in seconds > >sleep_duration
++ Default sleep duratioon is 15 seconds
++ * 6. To take system directly into soft sleep without linux power management
++ * framework use
++ * echo 1 > /sys/nomadik/softsleep_enable
++ * This is to be used when we are sure that no driver is active i.e.
++ * driver need not be be suspended. This interface can save transition
++ * time but is not recommended. It can be used for testing purpose.
++ *
++ *
++ * 1.5 Taking system into deep sleep
++ *====================================
++ * 1. Select CONFIG_PM and CONFIG_NOMADIK_PM and CONFIG_NOMADIK_RTC
++ * 2. Change required sleep type to deepsleep by
++ * echo -n deepsleep > /sys/nomadik/sleep_type
++ * 3. To take system into sleep use
++ * echo -n mem > /sys/power/state
++ * 4. Wakeup can be done by RTC or keypad/touch panel/MMC
++ * 5. To specify rtc wakeup duration ( sleeping time )
++ * echo -n <sleep duration in seconds > >sleep_duration
++ * Default sleep duration is 15 seconds
++ *
++ * 1.6 Taking Individual device into suspend/resume state
++ *=======================================================
++ * 1. Individual device can be taken into suspended state by writing into sysfs
++ * file. Similiarly device can be resumed back
++ * 2. For example to take CLCD into suspend state use
++ echo -n 2 > /sys/devices/mb:c0/power/state
++ * 3. For example to take CLCD into resumed state use
++ echo -n 0 > /sys/devices/mb:c0/power/state
++ * 4. Similar things can be done for other devices. Few devices such as RTC,
++ * GPIO should not be takne into suspend state by this interface.
++ *
++ *
++ * 1.7 Enabling/Disabling Individual devices(Keypad, Touchpanel, MMC) as wakeup devices
++ *===================================================================================
++ * 1. To enable a device (for e.g. keypad ) to be able to wakeup system from sleep do
++ * echo enabled > /sys/devices/platform/nmdk-kp.0/power/wakeup
++ * 2. To enable a device (for e.g. keypad ) to be able to wakeup system from sleep do
++ * echo disabled > /sys/devices/platform/nmdk-kp.0/power/wakeup
++ * If a device's wakeup state is disabled, it cannot be used for waking the
++ * system from sleep.
++ * 3. Above steps are applicable for any device that can wakeup the system
++ *
++ *
++ * 1.8 To add a device that can be used to wakeup
++ *================================================
++ * 1. To make a platform device to be able to wakeup a system, change is
++ * required in board specific file like arch/arm/mach-nomadik/ndk15_devices.c
++ * 2. To make a amba device to be able to wakeup a system, change is required
++ * in platform specific file like arch/arm/mach-nomadik/stn8815_devices.c
++ *
++ *
++ *
++ */
++
++
+--- linux-2.6.20.orig/MAINTAINERS
++++ linux-2.6.20/MAINTAINERS
+@@ -1939,10 +1939,19 @@ M: ebiederm@xmission.com
+ W: http://www.xmission.com/~ebiederm/files/kexec/
+ L: linux-kernel@vger.kernel.org
+ L: fastboot@osdl.org
+ S: Maintained
+
++KGDB
++P: Tom Rini
++P: Amit S. Kale
++M: trini@kernel.crashing.org
++M: amitkale@linsyssoft.com
++W: http://sourceforge.net/projects/kgdb
++L: kgdb-bugreport@lists.sourceforge.net
++S: Maintained
++
+ KPROBES
+ P: Prasanna S Panchamukhi
+ M: prasanna@in.ibm.com
+ P: Ananth N Mavinakayanahalli
+ M: ananth@in.ibm.com
+--- linux-2.6.20.orig/Makefile
++++ linux-2.6.20/Makefile
+@@ -10,11 +10,11 @@ NAME = Homicidal Dwarf Hamster
+ # Comments in this file are targeted only to the developer, do not
+ # expect to learn how to build the kernel reading this file.
+
+ # Do not:
+ # o use make's built-in rules and variables
+-# (this increases performance and avoid hard-to-debug behavour);
++# (this increases performance and avoids hard-to-debug behaviour);
+ # o print "Entering directory ...";
+ MAKEFLAGS += -rR --no-print-directory
+
+ # We are using a recursive build, so we need to do a little thinking
+ # to get the ordering right.
+@@ -319,11 +319,11 @@ AFLAGS := -D__ASSEMBLY__
+ # Read KERNELRELEASE from include/config/kernel.release (if it exists)
+ KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
+ KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
+
+ export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
+-export ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC
++export ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CFLAGS CROSS_COMPILE AS LD CC
+ export CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE
+ export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
+
+ export CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
+ export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
+@@ -495,11 +495,11 @@ CFLAGS += -fno-omit-frame-pointer $(cal
+ else
+ CFLAGS += -fomit-frame-pointer
+ endif
+
+ ifdef CONFIG_DEBUG_INFO
+-CFLAGS += -g
++CFLAGS += -gdwarf-2
+ endif
+
+ # Force gcc to behave correct even for buggy distributions
+ CFLAGS += $(call cc-option, -fno-stack-protector)
+
+@@ -528,11 +528,10 @@ export INSTALL_PATH ?= /boot
+ #
+ # INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
+ # relocations required by build roots. This is not defined in the
+ # makefile but the argument can be passed to make if needed.
+ #
+-
+ MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
+ export MODLIB
+
+ #
+ # INSTALL_MOD_STRIP, if defined, will cause modules to be
+@@ -574,11 +573,11 @@ libs-y := $(libs-y1) $(libs-y2)
+
+ # Build vmlinux
+ # ---------------------------------------------------------------------------
+ # vmlinux is built from the objects selected by $(vmlinux-init) and
+ # $(vmlinux-main). Most are built-in.o files from top-level directories
+-# in the kernel tree, others are specified in arch/$(ARCH)Makefile.
++# in the kernel tree, others are specified in arch/$(ARCH)/Makefile.
+ # Ordering when linking is important, and $(vmlinux-init) must be first.
+ #
+ # vmlinux
+ # ^
+ # |
+@@ -732,18 +731,20 @@ debug_kallsyms: .tmp_map$(last_kallsyms)
+
+ .tmp_map2: .tmp_map1
+
+ endif # ifdef CONFIG_KALLSYMS
+
++include $(srctree)/scripts/ksymhash/Makefile
+ # vmlinux image - including updated kernel symbols
+ vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
+ ifdef CONFIG_HEADERS_CHECK
+ $(Q)$(MAKE) -f $(srctree)/Makefile headers_check
+ endif
+ $(call if_changed_rule,vmlinux__)
+ $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $@
+ $(Q)rm -f .old_version
++ $(rule_ksymhash)
+
+ # The actual objects are generated when descending,
+ # make sure no implicit rule kicks in
+ $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ;
+
+@@ -1480,11 +1481,16 @@ endif
+ clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj
+
+ endif # skip-makefile
+
+ PHONY += FORCE
+-FORCE:
++include/linux/dwarf2-defs.h: $(srctree)/include/linux/dwarf2.h $(srctree)/scripts/dwarfh.awk
++ mkdir -p include/linux/
++ awk -f $(srctree)/scripts/dwarfh.awk $(srctree)/include/linux/dwarf2.h > include/linux/dwarf2-defs.h
++
++FORCE: include/linux/dwarf2-defs.h
++
+
+ # Cancel implicit rules on top Makefile, `-rR' will apply to sub-makes.
+ Makefile: ;
+
+ # Declare the contents of the .PHONY variable as phony. We keep that
+--- linux-2.6.20.orig/arch/arm/Kconfig
++++ linux-2.6.20/arch/arm/Kconfig
+@@ -117,11 +117,11 @@ source "init/Kconfig"
+
+ menu "System Type"
+
+ choice
+ prompt "ARM system type"
+- default ARCH_VERSATILE
++ default ARCH_NOMADIK
+
+ config ARCH_AAEC2000
+ bool "Agilent AAEC-2000 based"
+ select ARM_AMBA
+ help
+@@ -201,10 +201,18 @@ config ARCH_NETX
+ bool "Hilscher NetX based"
+ select ARM_VIC
+ help
+ This enables support for systems based on the Hilscher NetX Soc
+
++config ARCH_NOMADIK
++ bool "Nomadik"
++ select ARM_AMBA
++ select ISA_DMA_API
++ select ICST525
++ help
++ Support for ARM's NOMADIK platform.
++
+ config ARCH_H720X
+ bool "Hynix HMS720x-based"
+ select ISA_DMA_API
+ help
+ This enables support for systems based on the Hynix HMS720x
+@@ -379,10 +387,11 @@ source "arch/arm/mach-realview/Kconfig"
+
+ source "arch/arm/mach-at91rm9200/Kconfig"
+
+ source "arch/arm/mach-netx/Kconfig"
+
++source "arch/arm/mach-nomadik/Kconfig"
+ # Definitions to make life easier
+ config ARCH_ACORN
+ bool
+
+ config PLAT_IOP
+@@ -738,11 +747,11 @@ config XIP_PHYS_ADDR
+ be linked for and stored to. This address is dependent on your
+ own flash usage.
+
+ endmenu
+
+-if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX )
++if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_NOMADIK )
+
+ menu "CPU Frequency scaling"
+
+ source "drivers/cpufreq/Kconfig"
+
+@@ -774,10 +783,21 @@ config CPU_FREQ_IMX
+ help
+ This enables the CPUfreq driver for i.MX CPUs.
+
+ If in doubt, say N.
+
++config CPU_FREQ_NOMADIK
++ tristate "CPUfreq driver for ARM Nomadik CPUs"
++ depends on ARCH_NOMADIK && CPU_FREQ && NOMADIK_NDK15
++ default y
++ select NOMADIK_DMA
++ help
++ This enables the CPUfreq driver for ARM Nomadik CPUs.
++
++ For details, take a look at <file:Documentation/cpu-freq>.
++
++ If in doubt, say Y.
+ endmenu
+
+ endif
+
+ menu "Floating point emulation"
+@@ -908,10 +928,11 @@ if PCMCIA || ARCH_CLPS7500 || ARCH_IOP32
+ || ARCH_S3C2410 || ARCH_SA1100 || ARCH_SHARK || FOOTBRIDGE \
+ || ARCH_IXP23XX
+ source "drivers/ide/Kconfig"
+ endif
+
++
+ source "drivers/scsi/Kconfig"
+
+ source "drivers/ata/Kconfig"
+
+ source "drivers/md/Kconfig"
+--- linux-2.6.20.orig/arch/arm/Makefile
++++ linux-2.6.20/arch/arm/Makefile
+@@ -18,11 +18,11 @@ GZFLAGS :=-9
+ # Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb:
+ CFLAGS +=$(call cc-option,-marm,)
+
+ # Do not use arch/arm/defconfig - it's always outdated.
+ # Select a platform tht is kept up-to-date
+-KBUILD_DEFCONFIG := versatile_defconfig
++KBUILD_DEFCONFIG := ndk15_defconfig
+
+ # defines filename extension depending memory manement type.
+ ifeq ($(CONFIG_MMU),)
+ MMUEXT := -nommu
+ endif
+@@ -87,10 +87,11 @@ CHECKFLAGS += -D__arm__
+
+ #Default value
+ head-y := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
+ textofs-y := 0x00008000
+
++
+ machine-$(CONFIG_ARCH_RPC) := rpc
+ machine-$(CONFIG_ARCH_EBSA110) := ebsa110
+ machine-$(CONFIG_ARCH_CLPS7500) := clps7500
+ incdir-$(CONFIG_ARCH_CLPS7500) := cl7500
+ machine-$(CONFIG_FOOTBRIDGE) := footbridge
+@@ -104,10 +105,11 @@ ifeq ($(CONFIG_ARCH_SA1100),y)
+ textofs-$(CONFIG_SA1111) := 0x00208000
+ endif
+ machine-$(CONFIG_ARCH_PXA) := pxa
+ machine-$(CONFIG_ARCH_L7200) := l7200
+ machine-$(CONFIG_ARCH_INTEGRATOR) := integrator
++ machine-$(CONFIG_ARCH_NOMADIK) := nomadik
+ textofs-$(CONFIG_ARCH_CLPS711X) := 0x00028000
+ machine-$(CONFIG_ARCH_CLPS711X) := clps711x
+ machine-$(CONFIG_ARCH_IOP32X) := iop32x
+ machine-$(CONFIG_ARCH_IOP33X) := iop33x
+ machine-$(CONFIG_ARCH_IOP13XX) := iop13xx
+@@ -198,16 +200,25 @@ ifneq ($(KBUILD_SRC),)
+ else
+ $(Q)ln -fsn $(INCDIR) include/asm-arm/arch
+ endif
+ @touch $@
+
+-archprepare: maketools
++archprepare: maketools machprepare
+
+-PHONY += maketools FORCE
++PHONY += maketools machprepare machclean machmrproper FORCE
+ maketools: include/linux/version.h include/asm-arm/.arch FORCE
+ $(Q)$(MAKE) $(build)=arch/arm/tools include/asm-arm/mach-types.h
+
++
++# Machine specific preparation if it exists
++MACHPREPARE_PATH = $(strip `grep "machprepare:" $(MACHINE)Makefile* | grep -o $(MACHINE)`)
++
++machprepare:
++ifeq ($(wildcard $(TOPDIR)/.config), $(TOPDIR)/.config)
++ $(Q)set -e; for i in $(MACHPREPARE_PATH); do $(MAKE) -C $$i $@; done
++endif
++
+ # Convert bzImage to zImage
+ bzImage: zImage
+
+ zImage Image xipImage bootpImage uImage: vmlinux
+ $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
+@@ -216,12 +227,27 @@ zinstall install: vmlinux
+ $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
+
+ CLEAN_FILES += include/asm-arm/mach-types.h \
+ include/asm-arm/arch include/asm-arm/.arch
+
++# Machine specific mrproper operation if it exists
++MACHMRPROPER_PATH =`find arch/$(ARCH)/mach-*/ -name Makefile | xargs grep machmrproper: | sed 's/Makefile:machmrproper://g' | sed 's/Makefile://g'`
++
++machmrproper:
++ $(Q)set -e; for i in $(MACHMRPROPER_PATH); do $(MAKE) -C $$i $@; done
++
++# We use MRPROPER_FILES
++archmrproper: machmrproper
++
++# Machine specific clean operation
++MACHCLEAN_PATH = `find arch/$(ARCH)/mach-*/ -name Makefile | xargs grep machclean: | sed 's/Makefile:machclean://g' | sed 's/Makefile://g'`
++
++machclean:
++ $(Q)set -e; for i in $(MACHCLEAN_PATH); do $(MAKE) -C $$i $@; done
++
+ # We use MRPROPER_FILES and CLEAN_FILES now
+-archclean:
++archclean: machclean
+ $(Q)$(MAKE) $(clean)=$(boot)
+
+ # My testing targets (bypasses dependencies)
+ bp:; $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/bootpImage
+ i zi:; $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
+--- linux-2.6.20.orig/arch/arm/common/rtctime.c
++++ linux-2.6.20/arch/arm/common/rtctime.c
+@@ -199,17 +199,17 @@ static int rtc_ioctl(struct inode *inode
+ ret = -EFAULT;
+ break;
}
alrm.enabled = 0;
alrm.pending = 0;
@@ -17,9 +2367,10 @@ diff -Nauprw linux-2.6.20/arch/arm/common/rtctime.c ../new/linux-2.6.20/arch/arm
break;
case RTC_RD_TIME:
-diff -Nauprw linux-2.6.20/arch/arm/configs/ndk10_defconfig ../new/linux-2.6.20/arch/arm/configs/ndk10_defconfig
---- linux-2.6.20/arch/arm/configs/ndk10_defconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/configs/ndk10_defconfig 2007-11-21 11:51:41.000000000 +0530
+ ret = rtc_arm_read_time(ops, &tm);
+ if (ret)
+--- /dev/null
++++ linux-2.6.20/arch/arm/configs/ndk10_defconfig
@@ -0,0 +1,1205 @@
+#
+# Automatically generated make config: don't edit
@@ -1226,14 +3577,13 @@ diff -Nauprw linux-2.6.20/arch/arm/configs/ndk10_defconfig ../new/linux-2.6.20/a
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
-diff -Nauprw linux-2.6.20/arch/arm/configs/ndk15b06_defconfig ../new/linux-2.6.20/arch/arm/configs/ndk15b06_defconfig
---- linux-2.6.20/arch/arm/configs/ndk15b06_defconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/configs/ndk15b06_defconfig 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/configs/ndk15_defconfig
@@ -0,0 +1,1221 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20
-+# Thu Aug 16 17:22:36 2007
++# Thu Aug 16 16:12:48 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
@@ -1365,25 +3715,25 @@ diff -Nauprw linux-2.6.20/arch/arm/configs/ndk15b06_defconfig ../new/linux-2.6.2
+# CONFIG_NOMADIK_NDK10_CUT_A1 is not set
+# CONFIG_NOMADIK_NDK10_CUT_B06 is not set
+# CONFIG_NOMADIK_NDK10_CUT_B0 is not set
-+# CONFIG_NOMADIK_NDK15_REV2_B_03 is not set
++CONFIG_NOMADIK_NDK15_REV2_B_03=y
+# CONFIG_NOMADIK_NDK15_REV2_B_05 is not set
-+CONFIG_NOMADIK_NDK15_REV2_B_06=y
++# CONFIG_NOMADIK_NDK15_REV2_B_06 is not set
+# CONFIG_NOMADIK_NDK15_REV3_C_02 is not set
-+CONFIG_NOMADIK_TARGET="NDK15_Rev2_B_06"
++CONFIG_NOMADIK_TARGET="NDK15_Rev2_B_03"
+CONFIG_NOMADIK_SOC="stn8815"
+CONFIG_NOMADIK_PLATFORM="ndk15"
-+CONFIG_NOMADIK_TARGET_EXTRA_CFLAGS="-D__RELEASE -D__STN_8815=20 "
-+CONFIG_NOMADIK_CPLD_V2010=y
-+CONFIG_NOMADIK_NDK15=y
++CONFIG_NOMADIK_TARGET_EXTRA_CFLAGS="-D__RELEASE -D__STN_8815=10"
+
+#
-+# Nomadik chip used STn8815S22 cut B0 (marked STN8815BBS22H11 Secure)
++# Nomadik chip used STn8815S22 cut A0 (marked STN8815AAS22)
+#
+
+#
+# Target board CPLD version 2.0.1.0
+#
-+CONFIG_NOMADIK_STN8815BBS22H11=y
++CONFIG_NOMADIK_CPLD_V2010=y
++CONFIG_NOMADIK_NDK15=y
++CONFIG_NOMADIK_NDK15_REV2_MMC=y
+CONFIG_NOMADIK_GPIO=y
+CONFIG_GPIO_PROC=y
+CONFIG_NOMADIK_DMA=y
@@ -2451,14 +4801,13 @@ diff -Nauprw linux-2.6.20/arch/arm/configs/ndk15b06_defconfig ../new/linux-2.6.2
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
-diff -Nauprw linux-2.6.20/arch/arm/configs/ndk15_defconfig ../new/linux-2.6.20/arch/arm/configs/ndk15_defconfig
---- linux-2.6.20/arch/arm/configs/ndk15_defconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/configs/ndk15_defconfig 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/configs/ndk15b06_defconfig
@@ -0,0 +1,1221 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20
-+# Thu Aug 16 16:12:48 2007
++# Thu Aug 16 17:22:36 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
@@ -2590,25 +4939,25 @@ diff -Nauprw linux-2.6.20/arch/arm/configs/ndk15_defconfig ../new/linux-2.6.20/a
+# CONFIG_NOMADIK_NDK10_CUT_A1 is not set
+# CONFIG_NOMADIK_NDK10_CUT_B06 is not set
+# CONFIG_NOMADIK_NDK10_CUT_B0 is not set
-+CONFIG_NOMADIK_NDK15_REV2_B_03=y
++# CONFIG_NOMADIK_NDK15_REV2_B_03 is not set
+# CONFIG_NOMADIK_NDK15_REV2_B_05 is not set
-+# CONFIG_NOMADIK_NDK15_REV2_B_06 is not set
++CONFIG_NOMADIK_NDK15_REV2_B_06=y
+# CONFIG_NOMADIK_NDK15_REV3_C_02 is not set
-+CONFIG_NOMADIK_TARGET="NDK15_Rev2_B_03"
++CONFIG_NOMADIK_TARGET="NDK15_Rev2_B_06"
+CONFIG_NOMADIK_SOC="stn8815"
+CONFIG_NOMADIK_PLATFORM="ndk15"
-+CONFIG_NOMADIK_TARGET_EXTRA_CFLAGS="-D__RELEASE -D__STN_8815=10"
++CONFIG_NOMADIK_TARGET_EXTRA_CFLAGS="-D__RELEASE -D__STN_8815=20 "
++CONFIG_NOMADIK_CPLD_V2010=y
++CONFIG_NOMADIK_NDK15=y
+
+#
-+# Nomadik chip used STn8815S22 cut A0 (marked STN8815AAS22)
++# Nomadik chip used STn8815S22 cut B0 (marked STN8815BBS22H11 Secure)
+#
+
+#
+# Target board CPLD version 2.0.1.0
+#
-+CONFIG_NOMADIK_CPLD_V2010=y
-+CONFIG_NOMADIK_NDK15=y
-+CONFIG_NOMADIK_NDK15_REV2_MMC=y
++CONFIG_NOMADIK_STN8815BBS22H11=y
+CONFIG_NOMADIK_GPIO=y
+CONFIG_GPIO_PROC=y
+CONFIG_NOMADIK_DMA=y
@@ -3676,9 +6025,8 @@ diff -Nauprw linux-2.6.20/arch/arm/configs/ndk15_defconfig ../new/linux-2.6.20/a
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
-diff -Nauprw linux-2.6.20/arch/arm/configs/nhk15_defconfig ../new/linux-2.6.20/arch/arm/configs/nhk15_defconfig
---- linux-2.6.20/arch/arm/configs/nhk15_defconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/configs/nhk15_defconfig 2008-11-19 16:47:02.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/configs/nhk15_defconfig
@@ -0,0 +1,1458 @@
+#
+# Automatically generated make config: don't edit
@@ -4617,7 +6965,7 @@ diff -Nauprw linux-2.6.20/arch/arm/configs/nhk15_defconfig ../new/linux-2.6.20/a
+# CONFIG_DVB is not set
+
+#
-+# NOMADIK Audio Video Drivers(SAA and SVA)
++# NOMADIK Audio Video Drivers(SAA and SVA)
+#
+CONFIG_NOMADIK_SAA=m
+CONFIG_NOMADIK_SVA=m
@@ -5138,80 +7486,25 @@ diff -Nauprw linux-2.6.20/arch/arm/configs/nhk15_defconfig ../new/linux-2.6.20/a
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
-diff -Nauprw linux-2.6.20/arch/arm/Kconfig ../new/linux-2.6.20/arch/arm/Kconfig
---- linux-2.6.20/arch/arm/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -119,7 +119,7 @@ menu "System Type"
-
- choice
- prompt "ARM system type"
-- default ARCH_VERSATILE
-+ default ARCH_NOMADIK
-
- config ARCH_AAEC2000
- bool "Agilent AAEC-2000 based"
-@@ -203,6 +203,14 @@ config ARCH_NETX
- help
- This enables support for systems based on the Hilscher NetX Soc
-
-+config ARCH_NOMADIK
-+ bool "Nomadik"
-+ select ARM_AMBA
-+ select ISA_DMA_API
-+ select ICST525
-+ help
-+ Support for ARM's NOMADIK platform.
-+
- config ARCH_H720X
- bool "Hynix HMS720x-based"
- select ISA_DMA_API
-@@ -381,6 +389,7 @@ source "arch/arm/mach-at91rm9200/Kconfig
-
- source "arch/arm/mach-netx/Kconfig"
-
-+source "arch/arm/mach-nomadik/Kconfig"
- # Definitions to make life easier
- config ARCH_ACORN
- bool
-@@ -740,7 +749,7 @@ config XIP_PHYS_ADDR
-
- endmenu
-
--if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX )
-+if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_NOMADIK )
-
- menu "CPU Frequency scaling"
-
-@@ -776,6 +785,17 @@ config CPU_FREQ_IMX
-
- If in doubt, say N.
-
-+config CPU_FREQ_NOMADIK
-+ tristate "CPUfreq driver for ARM Nomadik CPUs"
-+ depends on ARCH_NOMADIK && CPU_FREQ && NOMADIK_NDK15
-+ default y
-+ select NOMADIK_DMA
-+ help
-+ This enables the CPUfreq driver for ARM Nomadik CPUs.
-+
-+ For details, take a look at <file:Documentation/cpu-freq>.
-+
-+ If in doubt, say Y.
- endmenu
-
- endif
-@@ -910,6 +930,7 @@ if PCMCIA || ARCH_CLPS7500 || ARCH_IOP32
- source "drivers/ide/Kconfig"
- endif
+--- linux-2.6.20.orig/arch/arm/kernel/Makefile
++++ linux-2.6.20/arch/arm/kernel/Makefile
+@@ -17,10 +17,11 @@ obj-$(CONFIG_FIQ) += fiq.o
+ obj-$(CONFIG_MODULES) += armksyms.o module.o
+ obj-$(CONFIG_ARTHUR) += arthur.o
+ obj-$(CONFIG_ISA_DMA) += dma-isa.o
+ obj-$(CONFIG_PCI) += bios32.o isa.o
+ obj-$(CONFIG_SMP) += smp.o
++obj-$(CONFIG_KGDB) += kgdb.o kgdb-jmp.o
+ obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o
-+
- source "drivers/scsi/Kconfig"
+ obj-$(CONFIG_CRUNCH) += crunch.o crunch-bits.o
+ AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312
- source "drivers/ata/Kconfig"
-diff -Nauprw linux-2.6.20/arch/arm/kernel/armksyms.c ../new/linux-2.6.20/arch/arm/kernel/armksyms.c
---- linux-2.6.20/arch/arm/kernel/armksyms.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/kernel/armksyms.c 2007-11-21 11:51:41.000000000 +0530
-@@ -31,6 +31,13 @@ extern void __lshrdi3(void);
+--- linux-2.6.20.orig/arch/arm/kernel/armksyms.c
++++ linux-2.6.20/arch/arm/kernel/armksyms.c
+@@ -29,10 +29,17 @@ extern void __ashrdi3(void);
+ extern void __divsi3(void);
+ extern void __lshrdi3(void);
extern void __modsi3(void);
extern void __muldi3(void);
extern void __ucmpdi2(void);
@@ -5225,7 +7518,11 @@ diff -Nauprw linux-2.6.20/arch/arm/kernel/armksyms.c ../new/linux-2.6.20/arch/ar
extern void __udivsi3(void);
extern void __umodsi3(void);
extern void __do_div64(void);
-@@ -139,6 +146,13 @@ EXPORT_SYMBOL(__modsi3);
+
+ extern void __aeabi_idiv(void);
+@@ -137,10 +144,17 @@ EXPORT_SYMBOL(__divsi3);
+ EXPORT_SYMBOL(__lshrdi3);
+ EXPORT_SYMBOL(__modsi3);
EXPORT_SYMBOL(__muldi3);
EXPORT_SYMBOL(__ucmpdi2);
EXPORT_SYMBOL(__udivsi3);
@@ -5239,10 +7536,13 @@ diff -Nauprw linux-2.6.20/arch/arm/kernel/armksyms.c ../new/linux-2.6.20/arch/ar
EXPORT_SYMBOL(__umodsi3);
EXPORT_SYMBOL(__do_div64);
-diff -Nauprw linux-2.6.20/arch/arm/kernel/dma.c ../new/linux-2.6.20/arch/arm/kernel/dma.c
---- linux-2.6.20/arch/arm/kernel/dma.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/kernel/dma.c 2007-11-21 11:51:41.000000000 +0530
-@@ -228,6 +228,7 @@ int dma_channel_active(dmach_t channel)
+ #ifdef CONFIG_AEABI
+ EXPORT_SYMBOL(__aeabi_idiv);
+--- linux-2.6.20.orig/arch/arm/kernel/dma.c
++++ linux-2.6.20/arch/arm/kernel/dma.c
+@@ -226,10 +226,11 @@ EXPORT_SYMBOL(disable_dma);
+ */
+ int dma_channel_active(dmach_t channel)
{
return dma_chan[channel].active;
}
@@ -5250,10 +7550,13 @@ diff -Nauprw linux-2.6.20/arch/arm/kernel/dma.c ../new/linux-2.6.20/arch/arm/ker
void set_dma_page(dmach_t channel, char pagenr)
{
-diff -Nauprw linux-2.6.20/arch/arm/kernel/entry-armv.S ../new/linux-2.6.20/arch/arm/kernel/entry-armv.S
---- linux-2.6.20/arch/arm/kernel/entry-armv.S 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/kernel/entry-armv.S 2007-11-21 11:51:41.000000000 +0530
-@@ -15,6 +15,7 @@
+ printk(KERN_ERR "dma%d: trying to set_dma_page\n", channel);
+ }
+--- linux-2.6.20.orig/arch/arm/kernel/entry-armv.S
++++ linux-2.6.20/arch/arm/kernel/entry-armv.S
+@@ -13,10 +13,11 @@
+ *
+ * Note: there is a StrongARM bug in the STMIA rn, {regs}^ instruction that causes
* it to save wrong values... Be aware!
*/
@@ -5261,7 +7564,11 @@ diff -Nauprw linux-2.6.20/arch/arm/kernel/entry-armv.S ../new/linux-2.6.20/arch/
#include <asm/memory.h>
#include <asm/glue.h>
#include <asm/vfpmacros.h>
-@@ -239,6 +240,7 @@ svc_preempt:
+ #include <asm/arch/entry-macro.S>
+ #include <asm/thread_notify.h>
+@@ -237,10 +238,11 @@ svc_preempt:
+ ldr r0, [tsk, #TI_FLAGS] @ get new tasks TI_FLAGS
+ tst r0, #_TIF_NEED_RESCHED
beq preempt_return @ go again
b 1b
#endif
@@ -5269,10 +7576,13 @@ diff -Nauprw linux-2.6.20/arch/arm/kernel/entry-armv.S ../new/linux-2.6.20/arch/
.align 5
__und_svc:
-diff -Nauprw linux-2.6.20/arch/arm/kernel/irq.c ../new/linux-2.6.20/arch/arm/kernel/irq.c
---- linux-2.6.20/arch/arm/kernel/irq.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/kernel/irq.c 2007-11-21 11:51:41.000000000 +0530
-@@ -76,7 +76,19 @@ int show_interrupts(struct seq_file *p,
+ svc_entry
+
+--- linux-2.6.20.orig/arch/arm/kernel/irq.c
++++ linux-2.6.20/arch/arm/kernel/irq.c
+@@ -74,11 +74,23 @@ int show_interrupts(struct seq_file *p,
+ if (!action)
+ goto unlock;
seq_printf(p, "%3d: ", i);
for_each_present_cpu(cpu)
@@ -5284,7 +7594,7 @@ diff -Nauprw linux-2.6.20/arch/arm/kernel/irq.c ../new/linux-2.6.20/arch/arm/ker
+ if (action->flags & SA_IRQPRIORITY_MASK)
+ seq_printf(p, "%10u:PL%02d", kstat_cpu(cpu).irqs[i],
+ (int)(action->flags)>>4 & 0x0f);
-+ else
++ else
seq_printf(p, "%10u ", kstat_cpu(cpu).irqs[i]);
+#else
+ seq_printf(p, "%10u ", kstat_cpu(cpu).irqs[i]);
@@ -5292,9 +7602,43 @@ diff -Nauprw linux-2.6.20/arch/arm/kernel/irq.c ../new/linux-2.6.20/arch/arm/ker
seq_printf(p, " %10s", irq_desc[i].chip->name ? : "-");
seq_printf(p, " %s", action->name);
for (action = action->next; action; action = action->next)
-diff -Nauprw linux-2.6.20/arch/arm/kernel/kgdb.c ../new/linux-2.6.20/arch/arm/kernel/kgdb.c
---- linux-2.6.20/arch/arm/kernel/kgdb.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/kernel/kgdb.c 2008-10-20 13:37:44.000000000 +0530
+ seq_printf(p, ", %s", action->name);
+
+--- /dev/null
++++ linux-2.6.20/arch/arm/kernel/kgdb-jmp.S
+@@ -0,0 +1,30 @@
++/*
++ * arch/arm/kernel/kgdb-jmp.S
++ *
++ * Trivial setjmp and longjmp procedures to support bus error recovery
++ * which may occur during kgdb memory read/write operations.
++ *
++ * Author: MontaVista Software, Inc. <source@mvista.com>
++ * source@mvista.com
++ *
++ * 2002-2005 (c) MontaVista Software, Inc. This file is licensed under the
++ * terms of the GNU General Public License version 2. This program as licensed
++ * "as is" without any warranty of any kind, whether express or implied.
++ */
++#include <linux/linkage.h>
++
++ENTRY (kgdb_fault_setjmp)
++ /* Save registers */
++ stmia r0, {r0-r14}
++ str lr,[r0, #60]
++ mrs r1,cpsr
++ str r1,[r0,#64]
++ ldr r1,[r0,#4]
++ mov r0, #0
++ mov pc,lr
++
++ENTRY (kgdb_fault_longjmp)
++ /* Restore registers */
++ mov r1,#1
++ str r1,[r0]
++ ldmia r0,{r0-pc}^
+--- /dev/null
++++ linux-2.6.20/arch/arm/kernel/kgdb.c
@@ -0,0 +1,208 @@
+/*
+ * arch/arm/kernel/kgdb.c
@@ -5504,55 +7848,11 @@ diff -Nauprw linux-2.6.20/arch/arm/kernel/kgdb.c ../new/linux-2.6.20/arch/arm/ke
+ .gdb_bpt_instr = {0xe7, 0xff, 0xde, 0xfe}
+#endif
+};
-diff -Nauprw linux-2.6.20/arch/arm/kernel/kgdb-jmp.S ../new/linux-2.6.20/arch/arm/kernel/kgdb-jmp.S
---- linux-2.6.20/arch/arm/kernel/kgdb-jmp.S 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/kernel/kgdb-jmp.S 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,30 @@
-+/*
-+ * arch/arm/kernel/kgdb-jmp.S
-+ *
-+ * Trivial setjmp and longjmp procedures to support bus error recovery
-+ * which may occur during kgdb memory read/write operations.
-+ *
-+ * Author: MontaVista Software, Inc. <source@mvista.com>
-+ * source@mvista.com
-+ *
-+ * 2002-2005 (c) MontaVista Software, Inc. This file is licensed under the
-+ * terms of the GNU General Public License version 2. This program as licensed
-+ * "as is" without any warranty of any kind, whether express or implied.
-+ */
-+#include <linux/linkage.h>
-+
-+ENTRY (kgdb_fault_setjmp)
-+ /* Save registers */
-+ stmia r0, {r0-r14}
-+ str lr,[r0, #60]
-+ mrs r1,cpsr
-+ str r1,[r0,#64]
-+ ldr r1,[r0,#4]
-+ mov r0, #0
-+ mov pc,lr
-+
-+ENTRY (kgdb_fault_longjmp)
-+ /* Restore registers */
-+ mov r1,#1
-+ str r1,[r0]
-+ ldmia r0,{r0-pc}^
-diff -Nauprw linux-2.6.20/arch/arm/kernel/Makefile ../new/linux-2.6.20/arch/arm/kernel/Makefile
---- linux-2.6.20/arch/arm/kernel/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/kernel/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -19,6 +19,7 @@ obj-$(CONFIG_ARTHUR) += arthur.o
- obj-$(CONFIG_ISA_DMA) += dma-isa.o
- obj-$(CONFIG_PCI) += bios32.o isa.o
- obj-$(CONFIG_SMP) += smp.o
-+obj-$(CONFIG_KGDB) += kgdb.o kgdb-jmp.o
- obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o
-
- obj-$(CONFIG_CRUNCH) += crunch.o crunch-bits.o
-diff -Nauprw linux-2.6.20/arch/arm/kernel/setup.c ../new/linux-2.6.20/arch/arm/kernel/setup.c
---- linux-2.6.20/arch/arm/kernel/setup.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/kernel/setup.c 2007-11-21 11:51:41.000000000 +0530
-@@ -829,6 +829,11 @@ void __init setup_arch(char **cmdline_p)
+--- linux-2.6.20.orig/arch/arm/kernel/setup.c
++++ linux-2.6.20/arch/arm/kernel/setup.c
+@@ -827,10 +827,15 @@ void __init setup_arch(char **cmdline_p)
+ conswitchp = &vga_con;
+ #elif defined(CONFIG_DUMMY_CONSOLE)
conswitchp = &dummy_con;
#endif
#endif
@@ -5564,10 +7864,13 @@ diff -Nauprw linux-2.6.20/arch/arm/kernel/setup.c ../new/linux-2.6.20/arch/arm/k
}
-diff -Nauprw linux-2.6.20/arch/arm/kernel/traps.c ../new/linux-2.6.20/arch/arm/kernel/traps.c
---- linux-2.6.20/arch/arm/kernel/traps.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/kernel/traps.c 2007-11-21 11:51:41.000000000 +0530
-@@ -279,6 +279,7 @@ asmlinkage void do_undefinstr(struct pt_
+ static int __init topology_init(void)
+ {
+--- linux-2.6.20.orig/arch/arm/kernel/traps.c
++++ linux-2.6.20/arch/arm/kernel/traps.c
+@@ -277,25 +277,29 @@ asmlinkage void do_undefinstr(struct pt_
+ {
+ unsigned int correction = thumb_mode(regs) ? 2 : 4;
unsigned int instr;
struct undef_hook *hook;
siginfo_t info;
@@ -5575,7 +7878,9 @@ diff -Nauprw linux-2.6.20/arch/arm/kernel/traps.c ../new/linux-2.6.20/arch/arm/k
void __user *pc;
/*
-@@ -288,12 +289,15 @@ asmlinkage void do_undefinstr(struct pt_
+ * According to the ARM ARM, PC is 2 or 4 bytes ahead,
+ * depending whether we're in Thumb mode or not.
+ * Correct this offset.
*/
regs->ARM_pc -= correction;
@@ -5591,7 +7896,11 @@ diff -Nauprw linux-2.6.20/arch/arm/kernel/traps.c ../new/linux-2.6.20/arch/arm/k
spin_lock_irq(&undef_lock);
list_for_each_entry(hook, &undef_hook, node) {
-@@ -682,6 +686,13 @@ EXPORT_SYMBOL(abort);
+ if ((instr & hook->instr_mask) == hook->instr_val &&
+ (regs->ARM_cpsr & hook->cpsr_mask) == hook->cpsr_val) {
+@@ -680,10 +684,17 @@ void abort(void)
+ }
+ EXPORT_SYMBOL(abort);
void __init trap_init(void)
{
@@ -5605,9 +7914,25 @@ diff -Nauprw linux-2.6.20/arch/arm/kernel/traps.c ../new/linux-2.6.20/arch/arm/k
unsigned long vectors = CONFIG_VECTORS_BASE;
extern char __stubs_start[], __stubs_end[];
extern char __vectors_start[], __vectors_end[];
-diff -Nauprw linux-2.6.20/arch/arm/lib/gcclib.h ../new/linux-2.6.20/arch/arm/lib/gcclib.h
---- linux-2.6.20/arch/arm/lib/gcclib.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/lib/gcclib.h 2007-11-21 11:51:41.000000000 +0530
+ extern char __kuser_helper_start[], __kuser_helper_end[];
+ int kuser_sz = __kuser_helper_end - __kuser_helper_start;
+--- linux-2.6.20.orig/arch/arm/lib/Makefile
++++ linux-2.6.20/arch/arm/lib/Makefile
+@@ -11,11 +11,11 @@ lib-y := backtrace.o changebit.o csumip
+ strncpy_from_user.o strnlen_user.o \
+ strchr.o strrchr.o \
+ testchangebit.o testclearbit.o testsetbit.o \
+ ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
+ ucmpdi2.o lib1funcs.o div64.o sha1.o \
+- io-readsb.o io-writesb.o io-readsl.o io-writesl.o
++ io-readsb.o io-writesb.o io-readsl.o io-writesl.o udivdi3.o \
+
+ mmu-y := clear_user.o copy_page.o getuser.o putuser.o
+
+ # the code in uaccess.S is not preemption safe and
+ # probably faster on ARMv3 only
+--- /dev/null
++++ linux-2.6.20/arch/arm/lib/gcclib.h
@@ -0,0 +1,25 @@
+/* gcclib.h -- definitions for various functions 'borrowed' from gcc-2.95.3 */
+/* I Molton 29/07/01 */
@@ -5634,9 +7959,8 @@ diff -Nauprw linux-2.6.20/arch/arm/lib/gcclib.h ../new/linux-2.6.20/arch/arm/lib
+ DItype ll;
+} DIunion;
+
-diff -Nauprw linux-2.6.20/arch/arm/lib/longlong.h ../new/linux-2.6.20/arch/arm/lib/longlong.h
---- linux-2.6.20/arch/arm/lib/longlong.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/lib/longlong.h 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/lib/longlong.h
@@ -0,0 +1,184 @@
+/* longlong.h -- based on code from gcc-2.95.3
+
@@ -5822,21 +8146,8 @@ diff -Nauprw linux-2.6.20/arch/arm/lib/longlong.h ../new/linux-2.6.20/arch/arm/l
+ \
+ (count) = SI_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \
+ } while (0)
-diff -Nauprw linux-2.6.20/arch/arm/lib/Makefile ../new/linux-2.6.20/arch/arm/lib/Makefile
---- linux-2.6.20/arch/arm/lib/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/lib/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -13,7 +13,7 @@ lib-y := backtrace.o changebit.o csumip
- testchangebit.o testclearbit.o testsetbit.o \
- ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
- ucmpdi2.o lib1funcs.o div64.o sha1.o \
-- io-readsb.o io-writesb.o io-readsl.o io-writesl.o
-+ io-readsb.o io-writesb.o io-readsl.o io-writesl.o udivdi3.o \
-
- mmu-y := clear_user.o copy_page.o getuser.o putuser.o
-
-diff -Nauprw linux-2.6.20/arch/arm/lib/udivdi3.c ../new/linux-2.6.20/arch/arm/lib/udivdi3.c
---- linux-2.6.20/arch/arm/lib/udivdi3.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/lib/udivdi3.c 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/lib/udivdi3.c
@@ -0,0 +1,246 @@
+/* More subroutines needed by GCC output code on some machines. */
+/* Compile this one with gcc. */
@@ -6084,9 +8395,454 @@ diff -Nauprw linux-2.6.20/arch/arm/lib/udivdi3.c ../new/linux-2.6.20/arch/arm/li
+ return w;
+}
+
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/clock.c ../new/linux-2.6.20/arch/arm/mach-nomadik/clock.c
---- linux-2.6.20/arch/arm/mach-nomadik/clock.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/clock.c 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/Kconfig-nomadik
+@@ -0,0 +1,267 @@
++if ARCH_NOMADIK
++
++# The GPIO_PIN_23 is shared between MMC and MSP0.
++# by default this pin is used for MMC for NOMADIK_NDK15_REV2_B_03 target
++# to use this pin for MSP it should be configured 'n'
++config NOMADIK_NDK15_REV2_MMC
++ bool
++ default y if NOMADIK_NDK15_REV2_B_03
++
++config NOMADIK_NDK10_CUTA
++ bool
++ default y if NOMADIK_NDK10_CUT_A1
++
++config NOMADIK_NDK10_CUTB
++ bool
++ default y if (NOMADIK_NDK10_CUT_B0 || NOMADIK_NDK10_CUT_B06)
++
++config NOMADIK_GPIO
++ bool
++ default y
++
++config NOMADIK_ENABLE_L2CACHE
++ bool "Enable L2 Cache controller"
++ depends on (NOMADIK_NDK15 || NOMADIK_NHK15)
++ default y if NOMADIK_STN8815CAS22H11
++ select L2CACHE_ENABLE
++ help
++ Nomadik Chip version for this platfrom supports L2 Cache
++ by default it is enabled, if you want to check system
++ performanence without L2 Cache, then say no here
++
++config GPIO_PROC
++ bool
++ default y
++ depends on NOMADIK_GPIO
++
++config NOMADIK_DMA
++ tristate "NOMADIK DMA SUPPORT"
++ depends on ISA_DMA_API
++ default y
++ help
++ Nomadik DMA low level driver for standrd DMA interface
++
++config NOMADIK_SSP
++ tristate "NOMADIK SSP SUPPORT"
++ depends on (NOMADIK_DMA && NOMADIK_SPI)
++ default m
++ help
++ Depends on Nomadik DMA driver and SPI driver
++
++config NOMADIK_MSP
++ tristate "NOMADIK MSP SUPPORT"
++ depends on (NOMADIK_DMA && NOMADIK_SPI)
++ default m
++ help
++ Depends on Nomadik DMA driver and SPI driver
++
++config NOMADIK_MTU
++ tristate "NOMADIK MTU SUPPORT"
++ default m
++ help
++ The driver offers 8 MTU units tobe used.
++ In case of module only MTU1 unit will be
++ available with 4 timers:
++ MTU1_T0, MTU1_T1, MTU1_T2 & MTU1_T3
++
++config NOMADIK_MTU_SYSTEM_TICK
++ bool "NOMADIK MTU SYSTEM TICK SUPPORT"
++ depends on NOMADIK_MTU
++ help
++ This will prevent the system tick to be used through MTU.
++ default y
++
++config NOMADIK_RTC
++ bool "NOMADIK RTC/RTT SUPPORT"
++ default y
++ help
++ The driver offers RTC and RTT support.
++ The RTC can be used through /dev/rtc interface for real
++ time calculations, alarms, long delays if required
++ If unsure say Y here.
++
++config NOMADIK_PM
++ bool "NOMADIK POWER MANAGEMENT SUPPORT"
++ depends on ( (NOMADIK_NHK15 || NOMADIK_NDK15) && NOMADIK_RTC )
++ default y
++ select PM if NOMADIK_PM
++ help
++ Nomadik Power Management Driver
++
++config NOMADIK_SVA_INIT_MEM
++ bool "NOMADIK SVA MEMORY at initialisation"
++ default n
++ help
++ The driver uses physically contiguous memory allocated
++ at kernel initialisation time.
++ If unsure say N here.
++
++config FORCE_MAX_ZONEORDER
++ int "Maximum zone order"
++ default "13"
++ help
++ For use cases having large memory requirements choosing a
++ larger memory size is advised.
++
++config NOMADIK_SVA_MEM_SIZE
++ int "SVA initial memory size" if NOMADIK_SVA_INIT_MEM
++ default "4"
++ help
++ For use cases having large memory requirements choosing a
++ larger memory size is advised.
++
++config NOMADIK_SVA_VPIP
++ bool "NOMADIK SVA VPIP support"
++ default y
++ help
++ This enables the support for VPIP in SVA driver. This allows to
++ create IRP services in SVA to grab the images from sensor CCP0.
++ Warning: This disables Ethernet & MTD devices.
++
++config NOMADIK_SAA_INIT_MEM
++ bool "NOMADIK SAA MEMORY at initialisation"
++ default n
++ help
++ The SAA driver uses physically contiguous memory allocated
++ at kernel initialisation time.
++ If unsure say N here.
++
++#Configuration for default display setup
++choice
++ prompt "Default Display Type"
++ depends on FB
++ default FB_NOMADIK_QVGA_PORTRAIT
++
++config FB_NOMADIK_VGA
++ bool "CLCD VGA"
++
++config FB_NOMADIK_CRT
++ bool "CRT VGA"
++
++config FB_NOMADIK_QVGA_PORTRAIT
++ bool "CLCD QVGA Portrait"
++
++config FB_NOMADIK_QVGA_LANDSCAPE
++ bool "CLCD QVGA Landscape"
++
++config FB_NOMADIK_WVGA
++ bool "CLCD WVGA"
++endchoice
++
++choice
++ prompt "Default Display BPP"
++ depends on FB
++ default FB_NOMADIK_PANEL_24BPP_PACKED
++
++config FB_NOMADIK_PANEL_8BPP
++ bool "8 BPP"
++
++config FB_NOMADIK_PANEL_16BPP
++ bool "16 BPP"
++
++config FB_NOMADIK_PANEL_24BPP
++ bool "24 BPP"
++
++config FB_NOMADIK_PANEL_24BPP_PACKED
++ bool "24 BPP Packed"
++
++endchoice
++
++config FB_NOMADIK_ACCLN
++ bool "Nomadik Graphics Acceleration"
++ tristate
++ depends on FB
++ default y
++ help
++ enable hw accln for graphics on nomadik
++
++config FB_NOMADIK_PANEL_BPP
++ int
++ default 16 if !FB
++ default 8 if FB_NOMADIK_PANEL_8BPP
++ default 16 if FB_NOMADIK_PANEL_16BPP
++ default 24 if FB_NOMADIK_PANEL_24BPP_PACKED
++ default 32 if FB_NOMADIK_PANEL_24BPP
++
++config FB_NOMADIK_PANEL_NAME
++ string
++ default "VGA" if !FB
++ default "VGA" if FB_NOMADIK_VGA
++ default "CRT" if FB_NOMADIK_CRT
++ default "QVGA_Portrait" if FB_NOMADIK_QVGA_PORTRAIT
++ default "QVGA_Landscape" if FB_NOMADIK_QVGA_LANDSCAPE
++ default "WVGA" if FB_NOMADIK_WVGA
++
++config FB_NOMADIK_PANEL_XRES
++ int
++ default 800 if FB_NOMADIK_WVGA
++ default 640 if !FB
++ default 640 if ( FB_NOMADIK_VGA || FB_NOMADIK_CRT)
++ default 240 if FB_NOMADIK_QVGA_PORTRAIT
++ default 320 if FB_NOMADIK_QVGA_LANDSCAPE
++
++config FB_NOMADIK_PANEL_YRES
++ int
++ default 480 if !FB
++ default 480 if ( FB_NOMADIK_VGA || FB_NOMADIK_CRT || FB_NOMADIK_WVGA)
++ default 320 if FB_NOMADIK_QVGA_PORTRAIT
++ default 240 if FB_NOMADIK_QVGA_LANDSCAPE
++
++config FB_NOMADIK_PANEL_LFMARGIN
++ hex
++ default 0xD6 if FB_NOMADIK_WVGA
++ default 0x21 if !FB
++ default 0x21 if FB_NOMADIK_VGA
++ default 0x29 if FB_NOMADIK_CRT
++ default 0x13 if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
++
++config FB_NOMADIK_PANEL_RTMARGIN
++ hex
++ default 0x27 if FB_NOMADIK_WVGA
++ default 0x40 if !FB
++ default 0x40 if FB_NOMADIK_VGA
++ default 0x09 if FB_NOMADIK_CRT
++ default 0x2f if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
++
++config FB_NOMADIK_PANEL_UPRMARGIN
++ hex
++ default 0x22 if FB_NOMADIK_WVGA
++ default 0x07 if !FB
++ default 0x07 if FB_NOMADIK_VGA
++ default 0x19 if FB_NOMADIK_CRT
++ default 0x04 if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
++
++config FB_NOMADIK_PANEL_LWRMARGIN
++ hex
++ default 0xA if FB_NOMADIK_WVGA
++ default 0x24 if !FB
++ default 0x24 if FB_NOMADIK_VGA
++ default 0x02 if FB_NOMADIK_CRT
++ default 0x0f if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
++
++config FB_NOMADIK_PANEL_HSLEN
++ hex
++ default 0x1 if FB_NOMADIK_WVGA
++ default 0x40 if !FB
++ default 0x40 if FB_NOMADIK_VGA
++ default 0x61 if FB_NOMADIK_CRT
++ default 0x13 if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
++
++config FB_NOMADIK_PANEL_VSLEN
++ hex
++ default 0x1 if FB_NOMADIK_WVGA
++ default 0x19 if !FB
++ default 0x19 if FB_NOMADIK_VGA
++ default 0x02 if FB_NOMADIK_CRT
++ default 0x04 if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
++
++config FB_NOMADIK_PANEL_TIM2VAL
++ hex
++ default 0x031f1822 if FB_NOMADIK_WVGA
++ default 0x027f1800 if !FB
++ default 0x027f1800 if (FB_NOMADIK_VGA)
++ default 0x027f3800 if (FB_NOMADIK_CRT)
++ default 0x00ef1804 if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
++#Configuration for default display setup ends here
++
++endif
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/Makefile
+@@ -0,0 +1,166 @@
++#
++# Makefile for the linux kernel.
++#
++
++ifeq ($(wildcard $(TOPDIR)/.config), $(TOPDIR)/.config)
++include $(TOPDIR)/.config
++endif
++
++# Object file lists.
++
++TARGET_NAME = $(shell echo $(CONFIG_NOMADIK_TARGET))
++SOC_NAME = $(shell echo $(CONFIG_NOMADIK_SOC))
++PLATFORM_NAME = $(shell echo $(CONFIG_NOMADIK_PLATFORM))
++NMDK_EXTRA_CFLAGS = $(shell echo $(CONFIG_NOMADIK_TARGET_EXTRA_CFLAGS))
++
++EXTRA_CFLAGS-y := $(NMDK_EXTRA_CFLAGS)
++EXTRA_CFLAGS-$(CONFIG_NOMADIK_MTU) += -DCONFIG_MTU0
++CFLAGS += $(EXTRA_CFLAGS-y)
++
++# NMDKDBG_FLAGS maintainence for all Nomadik debuging strategy
++# Add new entry for new component to be supported here
++NMDKDBG_FLAGS :=
++
++ifdef VIC_DEBUG
++NMDKDBG_FLAGS += -DVIC_DEBUG=$(VIC_DEBUG)
++endif
++
++ifdef RTC_DEBUG
++NMDKDBG_FLAGS += -DRTC_DEBUG=$(RTC_DEBUG)
++endif
++
++ifdef GPIO_DEBUG
++NMDKDBG_FLAGS += -DGPIO_DEBUG=$(GPIO_DEBUG)
++endif
++
++ifdef DMA_DEBUG
++NMDKDBG_FLAGS += -DDMA_DEBUG=$(DMA_DEBUG)
++endif
++
++ifdef EPIO_DEBUG
++NMDKDBG_FLAGS += -DEPIO_DEBUG=$(EPIO_DEBUG)
++endif
++
++ifdef SPI_DEBUG
++NMDKDBG_FLAGS += -DSPI_DEBUG=$(SPI_DEBUG)
++endif
++
++ifdef SSP_DEBUG
++NMDKDBG_FLAGS += -DSSP_DEBUG=$(SSP_DEBUG)
++endif
++
++ifdef MSP_DEBUG
++NMDKDBG_FLAGS += -DMSP_DEBUG=$(MSP_DEBUG)
++endif
++
++ifdef KEYPAD_DEBUG
++NMDKDBG_FLAGS += -DKEYPAD_DEBUG=$(KEYPAD_DEBUG)
++endif
++
++ifdef TOUCHP_DEBUG
++NMDKDBG_FLAGS += -DTOUCHP_DEBUG=$(TOUCHP_DEBUG)
++endif
++
++ifdef POWER_DEBUG
++NMDKDBG_FLAGS += -DPOWER_DEBUG=$(POWER_DEBUG)
++endif
++
++ifdef PM_DEBUG
++NMDKDBG_FLAGS += -DPM_DEBUG=$(PM_DEBUG)
++endif
++
++ifdef CPUFREQ_DEBUG
++NMDKDBG_FLAGS += -DCPUFREQ_DEBUG=$(CPUFREQ_DEBUG)
++endif
++
++ifdef SLEEP_DEBUG
++NMDKDBG_FLAGS += -DSLEEP_DEBUG=$(SLEEP_DEBUG)
++endif
++
++ifdef SVA_DEBUG
++NMDKDBG_FLAGS += -DSVA_DEBUG=$(SVA_DEBUG)
++endif
++#export the nomadik debug flags for driver/* build
++CFLAGS += $(NMDKDBG_FLAGS)
++
++obj-y := gpio.o clock.o timer.o irq.o fsmc.o
++
++obj-y += $(SOC_NAME)_devices.o
++obj-y += $(PLATFORM_NAME)_devices.o
++
++# Soc Specific modules
++
++obj-$(CONFIG_NOMADIK_PM) += sleep.o deep_sleep.o soft_sleep.o normal.o slow.o pm.o
++
++ifeq ($(CONFIG_NOMADIK_PM),y)
++obj-y += power.o
++endif
++
++ifeq ($(CONFIG_L2CACHE_ENABLE),y)
++obj-y += l2cc.o
++endif
++ifeq ($(CONFIG_CPU_FREQ_NOMADIK),y)
++obj-y += power.o slow.o
++endif
++
++obj-$(CONFIG_CPU_FREQ_NOMADIK) += cpu.o dfs.o
++obj-$(CONFIG_NOMADIK_DMA) += nmdkmod_DMA.o
++obj-$(CONFIG_NOMADIK_SSP) += nmdkmod_ssp.o
++obj-$(CONFIG_NOMADIK_MSP) += nmdkmod_msp.o
++obj-$(CONFIG_NOMADIK_MTU) += nmdkmod_mtu.o
++obj-$(CONFIG_NOMADIK_RTC) += nmdkmod_rtc.o
++
++nmdkmod_gpio-objs := gpio.o
++nmdkmod_DMA-objs := dma.o
++nmdkmod_ssp-objs := ssp.o
++nmdkmod_msp-objs := msp.o
++nmdkmod_mtu-objs := mtu.o
++nmdkmod_rtc-objs := rtc.o
++
++# Auto board configuration/dependency resolution
++#include $(TOPDIR)/.config
++
++SOC_HEADER = include/asm-arm/arch-nomadik/soc_devices.h
++PDEV_HEADER = include/asm-arm/arch-nomadik/board_devices.h
++
++$(TOPDIR)/.platform:
++ $(Q)echo "Generating $@"
++ $(Q)echo $(CONFIG_NOMADIK_PLATFORM) > $@
++
++$(TOPDIR)/.soc:
++ $(Q)echo "Generating $@"
++ $(Q)echo $(CONFIG_NOMADIK_SOC) > $@
++
++$(TOPDIR)/.target:
++ $(Q)echo "Generating $@"
++ $(Q)echo $(CONFIG_NOMADIK_TARGET) > $@
++
++$(TOPDIR)/$(PDEV_HEADER):
++ $(Q)echo "Generating SYMLINK $(PDEV_HEADER) -> $(PLATFORM_NAME)_devices.h"
++ $(Q)rm -rf $@
++ $(Q)ln -s $(PLATFORM_NAME)_devices.h $@
++
++$(TOPDIR)/$(SOC_HEADER):
++ $(Q)echo "Generating SYMLINK $(SOC_HEADER) -> $(SOC_NAME)_devices.h"
++ $(Q)rm -rf $@
++ $(Q)ln -s $(SOC_NAME)_devices.h $@
++
++# machprepare kjhsdk dfsdf
++machprepare: $(TOPDIR)/.platform $(TOPDIR)/.soc $(TOPDIR)/.target $(TOPDIR)/$(PDEV_HEADER) $(TOPDIR)/$(SOC_HEADER)
++
++# machprepare kjhsdk j
++machclean:
++ $(Q)rm -rf *mod.o *.mod.c *.o *.ko
++
++machmrproper:
++ $(Q)rm -rf $(TOPDIR)/$(SOC_HEADER) $(TOPDIR)/$(PDEV_HEADER) $(TOPDIR)/arch/arm/mach-nomadik/Kconfig $(TOPDIR)/.soc $(TOPDIR)/.target $(TOPDIR)/.platform
++
++#This will resolve any machin specific dependency for configuration
++#This will generate Kconfig file if not present
++machconfig:
++ifneq ($(wildcard $(TOPDIR)/arch/arm/mach-nomadik/Kconfig), $(TOPDIR)/arch/arm/mach-nomadik/Kconfig)
++ @echo "Generating $(TOPDIR)/arch/arm/mach-nomadik/Kconfig"
++ @./create_kconfig.pl $(TOPDIR)/arch/arm/mach-nomadik
++endif
++
++# end of Auto board configuration/dependency resolution
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/Makefile.boot
+@@ -0,0 +1,4 @@
++ zreladdr-y := 0x00008000
++params_phys-y := 0x00000100
++initrd_phys-y := 0x00800000
++
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/clock.c
@@ -0,0 +1,127 @@
+/*
+ * linux/arch/arm/mach-nomadik/clock.c
@@ -6215,9 +8971,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/clock.c ../new/linux-2.6.20/arch
+}
+
+arch_initcall(clk_init);
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/clock.h ../new/linux-2.6.20/arch/arm/mach-nomadik/clock.h
---- linux-2.6.20/arch/arm/mach-nomadik/clock.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/clock.h 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/clock.h
@@ -0,0 +1,25 @@
+/*
+ * linux/arch/arm/mach-nomadik/clock.h
@@ -6244,9 +8999,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/clock.h ../new/linux-2.6.20/arch
+
+int clk_register(struct clk *clk);
+void clk_unregister(struct clk *clk);
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/cpu.c ../new/linux-2.6.20/arch/arm/mach-nomadik/cpu.c
---- linux-2.6.20/arch/arm/mach-nomadik/cpu.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/cpu.c 2008-07-04 23:45:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/cpu.c
@@ -0,0 +1,293 @@
+/*
+ * linux/arch/arm/mach-nomadik/cpu.c
@@ -6404,7 +9158,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/cpu.c ../new/linux-2.6.20/arch/a
+ } else
+ nmdk_dbg2("i2c write vcore_data = 0x%x\n", vcore_data);
+
-+#ifdef CPUFREQ_DEBUG
++#ifdef CPUFREQ_DEBUG
+ vcore_data = 0;
+
+ result =
@@ -6435,7 +9189,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/cpu.c ../new/linux-2.6.20/arch/a
+ nomadik_i2c_write_register(I2C_TOUAREG_CLIENT, &vcore_data,
+ 0x1E, 1);
+ /**
-+ * Here even if we are not able to set lower voltage. Still system can
++ * Here even if we are not able to set lower voltage. Still system can
+ * work with previous voltage
+ */
+
@@ -6457,7 +9211,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/cpu.c ../new/linux-2.6.20/arch/a
+ set_cpus_allowed(current, cpus_allowed);
+
+ cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
-+#if CPUFREQ_DEBUG
++#if CPUFREQ_DEBUG
+ {
+ int j;
+ for(j=0; j <= 0x124; j+=4)
@@ -6541,16 +9295,15 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/cpu.c ../new/linux-2.6.20/arch/a
+
+module_init(nomadik_cpu_init);
+module_exit(nomadik_cpu_exit);
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/create_kconfig.pl ../new/linux-2.6.20/arch/arm/mach-nomadik/create_kconfig.pl
---- linux-2.6.20/arch/arm/mach-nomadik/create_kconfig.pl 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/create_kconfig.pl 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/create_kconfig.pl
@@ -0,0 +1,55 @@
+#! /usr/bin/perl
+#
+# gen_nomadik_kconfig.pl: Generates Kconfig in arch/arm/mach-nomadik/ considering all board specific Kconfig files.
+
+$VAR=@ARGV;
-+if (@ARGV != 1)
++if (@ARGV != 1)
+{
+ print "Usage: ./create_kconfig.pl <filepath>\n";
+ print "example: ./create_kconfig.pl arch/arm/mach-nomadik\n";
@@ -6600,9 +9353,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/create_kconfig.pl ../new/linux-2
+print KCONFIG "endif\n\n";
+close KCONFIG;
+
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S
---- linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S 2008-10-20 13:37:44.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S
@@ -0,0 +1,655 @@
+/*
+ * arch/arm/mach-nomadik/deep_sleep.S
@@ -6630,24 +9382,24 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+
+.global nomadik_deep_sleep
+.extern L2dummyPointer
-+
++
+nomadik_deep_sleep:
+ /*Store all the general purpose registers along with the link register*/
+ stmfd sp!,{r0-r12,lr}
+
+ /* save the first parameter passed to function nomadik_deep_sleep to r12*/
+ mov r12,r0
-+
++
+ /* save the second parameter passed to function nomadik_deep_sleep to the variable addr - mpmc_base*/
+ ldr r11, =mpmc_base
+ str r1,[r11]
-+
++
+ /* save the third parameter passed to function nomadik_deep_sleep to the variable addr - backup_ram_base */
+ ldr r11, =backup_ram_base
+ str r2,[r11]
+
+
-+
++
+ ldr r11, =backup_ram_store
+ mov r10,#0x250
+ add r10, r2, r10
@@ -6667,7 +9419,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ mov r0,#0
+ mcr p15,0,r0,c7,c10,4
+#endif
-+
++
+ /* Storing the enabled values of VIC */
+ ldr r0, =vic_base
+ ldr r0, [r0,#0x0]
@@ -6724,127 +9476,127 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+
+
+
-+ mrc p15,0, r0,c5,c0,0 /* FSR--Domain Fault */
++ mrc p15,0, r0,c5,c0,0 /* FSR--Domain Fault */
+ mrc p15,0, r1,c5,c0,1 /* FSR--Instruction Fault */
-+
++
+ mrc p15,0, r2,c6,c0,0 /* FAR */
-+
++
+ mrc p15,0, r3,c9,c0,0 /* Read Dcache Lockdown */
+ mrc p15,0, r4,c9,c0,1 /* Read ICache Lockdown */
-+
++
+ mrc p15,0, r5,c9,c1,0 /* Read Data TLB */
+ mrc p15,0, r6,c9,c1,1 /* Read Instruction TCM region register */
-+
++
+ mrc p15,0, r7,c10,c0,0 /* Data TLB LockDown operation */
-+
++
+ mrc p15,0, r8,c13,c0,0 /* FCSE--PID */
+ mrc p15,0, r9,c13,c0,1 /* Context-ID */
-+
++
+ /* Save all these registers onto the stack */
+ stmfd sp!, {r0-r9}
-+
++
+ /*Move sp to non banked register. sp is not shared in banked modes.*/
-+ mov r6, sp
-+
++ mov r6, sp
++
+ /* Store the two user mode registers*/
+ sub r6,r6,#0x8
-+ stmia r6, {sp, lr}^
++ stmia r6, {sp, lr}^
+ mov r0,r0
+
+ /* Save current mode with interrupts disabled*/
+ mrs r7, cpsr
-+ stmfd r6!, {r7}
++ stmfd r6!, {r7}
+ bic r7,r7,#0xf
+
+ /* move the first par from r12 to r3 */
+ mov r3,r12
-+
++
+ /** Following are the registers that are used
+ R6:- Stack Pointer
+ R7:- CPSR Value [IRQ Disabled , FIQ Disabled, Mode bit Cleared]
-+ R8:- Virtual Address of Backup SRAM (0xA0010250)
++ R8:- Virtual Address of Backup SRAM (0xA0010250)
+ R9:- UART1 Base Register [Debug Device Base Register]
+ R10:- MPMC Base Register
+ R11:- SRC Base Register
+ R12:- PMU Base Register
+ */
-+
-+ ldr r8,=backup_ram_store
++
++ ldr r8,=backup_ram_store
+ ldr r8, [r8,#0]
+
+ ldr r9,=uart1_base
+ ldr r9, [r9,#0]
-+
++
+ ldr r10,=mpmc_base
+ ldr r10, [r10,#0]
+
-+ ldr r11,=src_base
++ ldr r11,=src_base
+ ldr r11, [r11,#0]
+
+ ldr r12,=pmu_base
+ ldr r12, [r12,#0]
-+
++
+ /*Store the jump back address at this location (physical Address) */
-+ ldr r0, =backup_ram_base
++ ldr r0, =backup_ram_base
+ ldr r0, [r0,#0]
+
+ ldr r1, =after_deep_sleep
-+ mov r2, #0xC0000000
++ mov r2, #0xC0000000
+ sub r1, r1, r2 /* Change from VA to PA */
-+
++
+ str r1, [r0]
-+
++
+ /*Enter FIQ mode-Interrupt disabled and save the banked registers*/
-+ orr r0,r7,#0x1
-+ msr cpsr_cxsf,r0
-+
-+ mrs r0,spsr
++ orr r0,r7,#0x1
++ msr cpsr_cxsf,r0
++
++ mrs r0,spsr
+ stmfd r6!, {r0,r8-r14} /* store r8 to r14 and spsr */
-+
++
+ /*Enter IRQ mode-Interrupt disabled Save: r13,r14 and spsr*/
+ orr r0,r7,#0x2
+ msr cpsr_cxsf,r0 /* enter IRQ mode with IRQ/FIQ disable */
-+
++
+ mrs r0,spsr
+ stmfd r6!, {r0,r13,r14}
-+
++
+
+ /*Enter Abort mode-IRQ/FIQ disable. Save r13,r14 and spsr */
+ orr r0,r7,#0x7
-+ msr cpsr_cxsf,r0
-+
++ msr cpsr_cxsf,r0
++
+ mrs r0,spsr
+ stmfd r6!, {r0,r13,r14}
-+
-+
++
++
+ /*Enter Undef Mode-IRQ/FIQ disable. Save r13,r14 and spsr */
+ orr r0,r7,#0xB
-+ msr cpsr_cxsf,r0
-+
++ msr cpsr_cxsf,r0
++
+ mrs r0,spsr
+ stmfd r6!, {r0,r13,r14}
-+
++
+
+ /*Store the top of stack [VA] in the Scratch-Pad Register*/
+ str r6,[r12,#0x14]
-+
++
+ /*Go back in SVC mode*/
+ orr r0,r7,#0x3
+ msr cpsr_cxsf,r0
-+
++
+ /* Store MMU registers */
+ /*Domain Register on Back-up RAM structure*/
+ mrc p15,0,r0,c3,c0,0
+ str r0,[r8]
-+
++
+ /*TTB Register*/
+ mrc p15,0,r0,c2,c0,0
+ str r0,[r8,#0x4]
-+
++
+ /*MMU Enable Register*/
+ mrc p15,0,r0,c1,c0,0
+ str r0,[r8,#0x8]
-+
++
+ /* Virtual Address of MMU Enable*/
+ adr r0,mmu_enabled
+ str r0,[r8,#0xC]
@@ -6854,22 +9606,22 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ ldr r0,[r11]
+ bic r0,r0,#0x100
+ str r0,[r11]
-+
++
+ /*Enable the Mode Status Register*/
-+ mov r0,#0
++ mov r0,#0
+ str r0,[r11,#0x8]
-+
++
+ /* Clear the PMU bit - for entering the deep sleep mode instead sleep*/
+ ldr r0,[r12]
+ bic r0,r0,#0x10
+ str r0,[r12]
-+
++
+ /*Store the value of Scratch-Pad Register*/
-+ ldr r0,=backup_ram_base_phys
++ ldr r0,=backup_ram_base_phys
+ ldr r0,[r0,#0x0]
+ str r0,[r12,#0x10]
-+
-+ /*Program to wake-up in Normal mode*/
++
++ /*Program to wake-up in Normal mode*/
+ ldr r0,[r11,#0x4]
+ bic r0,r0,#0xf
+ orr r0,r0,#0x9
@@ -6879,7 +9631,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+clean_dcache:
+ mrc p15,0,r15,c7,c10,3
+ bne clean_dcache
-+
++
+ /*Drain Write Buffers*/
+ mov r0,#0
+ mcr p15,0,r0,c7,c10,4
@@ -6888,7 +9640,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ ldr r0, [r0]
+ mov r1, #0
+ cmp r1, r0
-+ stmneia r0!,{r1-r8}
++ stmneia r0!,{r1-r8}
+
+#ifdef CONFIG_L2CACHE_ENABLE
+ v_l2_cache_clean_and_invalidate r0, r1
@@ -6909,11 +9661,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ addls r4, r4, #0x20
+ bls fetch_loop
+
-+
++
+cache_prefetch_start:
+ ldr r10, =mpmc_base
+ ldr r10,[r10,#0x0]
-+
++
+/* Check sdram is idle */
+poll_loop:
+ ldr r1,[r10, #0x4]
@@ -6921,7 +9673,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ cmp r1,#0
+ bne poll_loop
+
-+ /*Put SDRAM in self-refresh mode*/
++ /*Put SDRAM in self-refresh mode*/
+ ldr r1,[r10, #0x20]
+ bic r1,r1,#0x1
+ orr r1,r1,#0x04
@@ -6948,7 +9700,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ cmp r1,#0x0
+ bne goto_sleep
+
-+
++
+ nop
+ nop
+ nop
@@ -6957,7 +9709,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+
+
+
-+/* For deepsleep this much pre-fetch is enough */
++/* For deepsleep this much pre-fetch is enough */
+cache_prefetch_end:
+ mov r0, r0
+ mov r0, r0
@@ -6968,7 +9720,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+after_deep_sleep:
+/* Restore the MMU registers */
+
-+
++
+
+ ldr r8,=backup_ram_store_phys
+ mov r9, #0xC0000000
@@ -6981,7 +9733,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ /*Domain Register*/
+ ldr r0,[r8, #0x0]
+ mcr p15,0,r0,c3,c0,0
-+
++
+ /*TTB Register*/
+ ldr r0,[r8,#0x4]
+ mcr p15,0,r0,c2,c0,0
@@ -6999,7 +9751,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ mov r0, r0
+ mov r0, r0
+ mov r0, r0
-+
++
+
+
+mmu_enabled:
@@ -7014,7 +9766,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ ldr r12, =pmu_base
+ ldr r12, [r12,#0]
+ ldr r10, =mpmc_base
-+ ldr r10, [r10,#0]
++ ldr r10, [r10,#0]
+
+
+
@@ -7032,7 +9784,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ cmp r0, #0x20
+ bne wait_norm1
+
-+
++
+ /* Remove the chip from Interrupt mode */
+ ldr r0,[r11, #0x4]
+ bic r0,r0,#0x1
@@ -7051,74 +9803,74 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ ldr r6,[r12,#0x14]
+
+ /* Store the value of cpsr in r7*/
-+ mrs r7,cpsr
++ mrs r7,cpsr
+ orr r7,r7,#0xC0 /*Not Needed*/
+ bic r7,r7,#0xf
-+
++
+ /*Move to undef mode and restore everything*/
+ orr r0,r7,#0xB
-+ msr cpsr_cxsf,r0
-+
++ msr cpsr_cxsf,r0
++
+ ldmfd r6!, {r0,r13,r14}
+ msr spsr_cxsf,r0
-+
++
+ /*Enter Abort mode-IRQ/FIQ disable. Save r13,r14 and spsr */
+ orr r0,r7,#0x7
-+ msr cpsr_cxsf,r0
-+
++ msr cpsr_cxsf,r0
++
+ ldmfd r6!, {r0,r13,r14}
+ msr spsr_cxsf,r0
-+
++
+ /*Enter IRQ mode-Interrupt disabled Save: r13,r14 and spsr*/
+ orr r0,r7,#0x2
-+ msr cpsr_cxsf,r0
-+
++ msr cpsr_cxsf,r0
++
+ ldmfd r6!, {r0,r13,r14}
+ msr spsr_cxsf,r0
-+
-+
++
++
+ /*Enter FIQ mode-Interrupt disabled and save the banked registers. Save: r8-r14 and spsr*/
-+ orr r0,r7,#0x1
-+ msr cpsr_cxsf,r0
-+
-+ ldmfd r6!, {r0,r8-r14}
++ orr r0,r7,#0x1
++ msr cpsr_cxsf,r0
++
++ ldmfd r6!, {r0,r8-r14}
+ msr spsr_cxsf,r0
-+
++
+ /* Here we will restore our cpsr..IRQ/FIQ Disabled*/
+ ldr r0, [r6]
+ msr cpsr_cxsf, r0
+ add r6, r6,#4
-+
++
+ /*Now only two user-mode registers are left*/
-+ ldmia r6,{sp, lr}^
++ ldmia r6,{sp, lr}^
+ mov r0,r0
+ add r6,r6,#8
-+
++
+ /*Restore sp*/
+ mov sp,r6
-+
-+
++
++
+ /*ReStore the remaining items*/
+ ldmfd sp!, {r0-r9}
-+
-+ mcr p15,0, r0,c5,c0,0 /*FSR--Domain Fault */
++
++ mcr p15,0, r0,c5,c0,0 /*FSR--Domain Fault */
+ mcr p15,0, r1,c5,c0,1 /*FSR--Instruction Fault */
+
+ mcr p15,0, r2,c6,c0,0 /* FAR */
-+
++
+ mcr p15,0, r3,c9,c0,0 /* Read Dcache Lockdown */
+ mcr p15,0, r4,c9,c0,1 /* Read ICache Lockdown */
-+
++
+ mcr p15,0, r5,c9,c1,0 /* Read Data TLB */
+ mcr p15,0, r6,c9,c1,1 /* Read Instruction Lockdown */
-+
++
+ mcr p15,0, r7,c10,c0,0 /* Data TLB LockDown operation */
-+
++
+ mcr p15,0, r8,c13,c0,0 /* FCSE--PID */
+ mcr p15,0, r9,c13,c0,1 /* Context-ID */
+
+
-+
++
+
+
+
@@ -7173,7 +9925,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ str r3, [r0, #0x10] /* Interrupt Enable register */
+ str r4, [r0, #0x30]
+ str r5, [r0, #0x54] /* Default VAR */
-+
++
+
+
+ /*Clean entire DCache using test and clean*/
@@ -7181,7 +9933,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ mrc p15,0,r15,c7,c14,3
+ bne clean_dcache_end
+
-+
++
+ /* Invalidate I cache and Dcache */
+ mov r0,#0
+ mcr p15,0,r0,c7,c7,0
@@ -7225,8 +9977,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ mov r1, #0x66
+ str r1, [r0]
+#endif
-+
-+
++
++
+/*Try to go back also...FIQ Disabled...IRQ Disabled*/
+ ldmfd sp!,{r0-r12,pc}
+
@@ -7236,7 +9988,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+src_phys:
+ .word 0x101E0000
+backup_ram_store_phys:
-+ .word 0x80010250
++ .word 0x80010250
+mtu0_base:
+ .word 0xf01E2000
+
@@ -7250,18 +10002,17 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/deep_sleep.S ../new/linux-2.6.20
+ .word 0xf0100000
+backup_ram_base_phys:
+ .word 0x80010000
-+vic_base:
++vic_base:
+ .word 0xf0140000
+mpmc_base:
+ .word 0xf0110000
+backup_ram_store:
-+ .word 0x80010250
++ .word 0x80010250
+backup_ram_base:
+ .word 0x80010000
+.end
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/arm/mach-nomadik/dfs.S
---- linux-2.6.20/arch/arm/mach-nomadik/dfs.S 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/dfs.S 2008-07-28 15:20:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/dfs.S
@@ -0,0 +1,355 @@
+/*
+ * arch/arm/mach-nomadik/sleep.c
@@ -7282,7 +10033,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/a
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
-+ * Low-level Nomadik DFS support
++ * Low-level Nomadik DFS support
+ */
+
+.align 5
@@ -7292,17 +10043,17 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/a
+dfs:
+ stmfd sp!,{r4-r12,lr}
+
-+ str r3, bkup_adr_base
++ str r3, bkup_adr_base
+ add r4, r3, #8
-+ str r4, bkup_adr
++ str r4, bkup_adr
+ add r4, r3, #0x1c8
-+ str r4, bkup_data
++ str r4, bkup_data
+ add r4, r3, #0x388
-+ str r4, bkup_action
++ str r4, bkup_action
+ add r4, r3, #0x3f8
-+ str r4, bkup_size
++ str r4, bkup_size
+
-+ ldr r9, bkup_size
++ ldr r9, bkup_size
+ ldr r9,[r9]
+ ldr r10,bkup_adr
+ ldr r11,bkup_data
@@ -7311,32 +10062,32 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/a
+ mrc p15, 0, r3, c10, c0, 0 /* read the lockdown register */
+ orr r3, r3, #1 /* set the preserved bit */
+ mcr p15, 0, r3, c10, c0, 0 /* write to the lockdown register */
-+
+
+
+
-+ ldr r4, mpmc_base
-+ mcr p15, 0, r4, c8, c7, 1
-+ ldr r4, [r4]
-+ mrc p15, 0, r3, c10, c0, 0
-+
-+
-+ ldr r4, src_base
-+ mcr p15, 0, r4, c8, c7, 1
-+ ldr r4, [r4]
-+ mrc p15, 0, r3, c10, c0, 0
-+
++
++ ldr r4, mpmc_base
++ mcr p15, 0, r4, c8, c7, 1
++ ldr r4, [r4]
++ mrc p15, 0, r3, c10, c0, 0
++
++
++ ldr r4, src_base
++ mcr p15, 0, r4, c8, c7, 1
++ ldr r4, [r4]
++ mrc p15, 0, r3, c10, c0, 0
++
+ ldr r4, bkup_adr_base
+ mcr p15, 0, r4, c8, c7, 1
-+ ldr r4, [r4]
-+ mrc p15, 0, r3, c10, c0, 0
-+
-+
++ ldr r4, [r4]
++ mrc p15, 0, r3, c10, c0, 0
++
++
+ bic r3, r3, #1 /* clear preserve bit */
-+ mcr p15, 0, r3, c10, c0, 0 /* write to the lockdown register */
-+
++ mcr p15, 0, r3, c10, c0, 0 /* write to the lockdown register */
++
+ ldr r7,mpmc_base
-+ ldr r8,src_base
++ ldr r8,src_base
+
+/*
+ mov r7, #0xf0
@@ -7369,7 +10120,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/a
+
+
+cache_prefetch_start1:
-+
++
+ /**
+ *Put SDRAM in self-refresh mode
+ */
@@ -7408,7 +10159,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/a
+ and r3,r3,#0x78
+ cmp r3,#0x10
+ bne wait_till_slow_mode
-+
++
+ ldr r3,[r8]
+ bic r3,r3,#0x6000
+ orr r3,r3,r2,LSL #13
@@ -7420,7 +10171,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/a
+ orr r3,r3,r0
+ orr r3,r3,r1,LSL #8
+ str r3,[r8,#0x14]
-+
++
+ /**
+ *Move the system in Normal mode
+ */
@@ -7429,14 +10180,14 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/a
+ and r0,r0,r1
+ orr r0,r0,#0x4
+ str r0,[r8, #0x0]
-+
++
+wait_till_normal_mode:
+ ldr r0,[r8, #0x0]
+ and r0,r0,#0x78
+ cmp r0, #0x20
+ bne wait_till_normal_mode
-+
-+
++
++
+#define ACTION_WRITE 0x01
+#define ACTION_WRITE_AND 0x02
+#define ACTION_WRITE_OR 0x03
@@ -7449,18 +10200,18 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/a
+/*
+ ldr r12,bkup_size
+ ldr r9,[r12]
-+
++
+ ldr r10,bkup_adr
+ ldr r11,bkup_data
+ ldr r12,bkup_action
+*/
-+
++
+
+ mov r8,#0x0
+loop1:
+ cmp r8,r9
+ beq end1
-+
++
+ ldr r7,[r10]
+ ldr r6,[r11]
+ ldr r5,[r12]
@@ -7471,11 +10222,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/a
+ mov r5,r5,LSR r2
+ and r5,r5,#0xFF
+
-+
++
+ /**
+ Decide action to be taken
+ */
-+ ldr r4,=ACTION_WRITE
++ ldr r4,=ACTION_WRITE
+ cmp r5,r4
+ beq action_write
+ ldr r4,=ACTION_WRITE_AND
@@ -7537,7 +10288,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/a
+ sub r6,r6,#0x1
+ b action_wait
+action_end:
-+
++
+ add r10,r10,#0x4
+ add r11,r11,#0x4
+ /**
@@ -7564,17 +10315,17 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/a
+ ldr r1,[r10]
+ orr r1,r1,#0x2
+ str r1,[r10]
-+
++
+ /* Wait for the DLL to lock */
+waitlock:
+ ldr r1,[r10,#0x4]
+ and r1,r1,#0x8
+ cmp r1,#0x0
+ beq waitlock
-+
++
+ /* Exit DDR-SDRAM from self-refresh mode */
+ ldr r1,[r10, #0x20]
-+ bic r1,r1,#0x04
++ bic r1,r1,#0x04
+ str r1,[r10, #0x20]
+
+ /* Wait for DDR-SDRAM to exit from self-refresh */
@@ -7583,7 +10334,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/a
+ and r1,r1,#0x4
+ cmp r1,#0x4
+ beq loop_refresh
-+
++
+
+ ldmfd sp!,{r4-r12,pc}
+
@@ -7614,13 +10365,12 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dfs.S ../new/linux-2.6.20/arch/a
+ .word 0xf0110000
+uart1_base :
+ .word 0xf01fb000
-+
+
+
+
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/arm/mach-nomadik/dma.c
---- linux-2.6.20/arch/arm/mach-nomadik/dma.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/dma.c 2008-07-04 23:45:04.000000000 +0530
++
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/dma.c
@@ -0,0 +1,1337 @@
+/*
+ * arch/arm/mach-nomadik/dma.c
@@ -7736,7 +10486,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+static struct dmach_lli *p_lli_pipe[MAX_DMA_HWCHANNELS];
+struct dmach_lli *lli_ptr_log = NULL;
+struct dmach_lli *lli_ptr_phy = NULL;
-+#define nomadik_dma_lli_phy_to_logical(x) ((struct dmach_lli *)((u32)(x + (lli_ptr_log - lli_ptr_phy)) & ~0x01))
++#define nomadik_dma_lli_phy_to_logical(x) ((struct dmach_lli *)((u32)(x + (lli_ptr_log - lli_ptr_phy)) & ~0x01))
+
+#define nomadik_dmach_is_active_n_enabled(x) (x & 0x00020001)
+#define nomadik_dma_is_pipe_busy(pipe) (p_lli_pipe[pipe])
@@ -7747,14 +10497,14 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ * @pipeadr: pipe address w.r.to which channel irq needs for foundout
+ *
+ * finds the pipe number assoicated with channel
-+ * if any transfer is already scheduled on a pipe, returns the channel irq of scheduled DMA
++ * if any transfer is already scheduled on a pipe, returns the channel irq of scheduled DMA
+ * if pipe is free, returns null
+ */
+static int nomadik_dma_channel_of_pipe(struct dmach_register *pipeadr)
+{
+ u32 pipe;
+ struct dma_struct * dma;
-+
++
+ pipe= (((u32)pipeadr & 0x0fff) - 0x0100)*2/sizeof(struct dmach_register);
+ if ((u32 *)pipeadr > (u32 *)socdat->dirqdesc[IRQ_DMA1].chip_data) pipe++;
+ if (p_lli_pipe[pipe]) {
@@ -7799,7 +10549,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ }
+ } while (count);
+ release_dma_lock(flags);
-+ return p_lli;
++ return p_lli;
+}
+
+/**
@@ -7838,7 +10588,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ * clears any pending interrupt on a pipe
+ * marks pipe as busy
+ * Enables DMA to strat transfer
-+ * if pipe is busy then
++ * if pipe is busy then
+ * queues the lli on the pipe
+ */
+static void nomadik_dma_schedule_xfer_on_pipe(volatile struct dmach_register *p_pipe, struct dmach_lli *p_lli)
@@ -7851,7 +10601,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ i= (((u32)p_pipe & 0x0fff) - 0x0100)/sizeof(struct dmach_register);
+ pipe = i*2;
+ if ((u32 *)p_pipe > (u32 *)socdat->dirqdesc[IRQ_DMA1].chip_data) pipe++;
-+
++
+ p_lli->mem1.p_lli_qh = (struct dmach_lli *)NULL; /*Marked this lli as last in queue*/
+ p_lli_curr = p_lli_pipe[pipe];
+ mb();
@@ -7897,9 +10647,9 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ * clears any pending interrupt on a pipe
+ * marks pipe as busy
+ * Enables DMA to strat transfer
-+ * if the queue is empty then
++ * if the queue is empty then
+ * marks the pipe as free if not reserved by requesting DMA Channel
-+ * otherwise marks the pipe as free
++ * otherwise marks the pipe as free
+ */
+static void nomadik_dma_free_procesed_pipe(volatile struct dmach_register *p_pipe)
+{
@@ -7927,7 +10677,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ /*p_dma_reg->tcicr |= 1UL<<i;*/
+ p_dma_reg->eicr |= 1UL<<i;
+ nmdk_dbg2("previous interrupt cleaned(%p) intno %d", p_dma_reg, i);
-+
++
+ /* program pipe for a transfer*/
+ p_lli_pipe[pipe] = p_lli;
+ p_lli_hw = nomadik_dma_lli_phy_to_logical(p_lli->mem3.p_lli_hw);
@@ -7945,7 +10695,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ } else {
+ if ((u32)dmaconfig_mode(dma) & DMA_PIPE_RESERVED)
+ p_lli_pipe[pipe] = (struct dmach_lli *)0xffffffff;
-+ else {
++ else {
+ p_lli_pipe[pipe] = (struct dmach_lli *)NULL;
+ dmaconfig_pipeadr(dma) = (u32)0;
+ }
@@ -7961,7 +10711,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ * finds out the pipe no associated with a pipe
+ * stops current transfer
+ * traverse through lli heads and flush all queued llis including scheduled one
-+ * marks the pipe as free
++ * marks the pipe as free
+ */
+static void nomadik_dma_flush_pipe(volatile struct dmach_register *p_pipe)
+{
@@ -7984,16 +10734,16 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ nextt:
+// if ((u32)dmaconfig_mode(dma) & DMA_PIPE_RESERVED)
+// p_lli_pipe[pipe] = (struct dmach_lli *)0xffffffff;
-+// else
++// else
+ p_lli_pipe[pipe] = (struct dmach_lli *)NULL;
+}
+
+/**
+ * nomadik_dma_check_update_userconfig - updates config as per user configs
-+ * @dma: DMA channel structure pointer
++ * @dma: DMA channel structure pointer
+ *
-+ * checks the user configuration
-+ * if some use configuration is provided by clinet driver during
++ * checks the user configuration
++ * if some use configuration is provided by clinet driver during
+ * configuration then abstracts it and updates Channel configuration
+ * data accordingly
+ */
@@ -8021,8 +10771,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+
+/**
+ * nomadik_dma_usrdevconfig - updates user configuration as per type
-+ * @config: user configuration information
-+ * @type: src or destincation peripharal indicator (0= means src)
++ * @config: user configuration information
++ * @type: src or destincation peripharal indicator (0= means src)
+ *
+ * checks provided configuration and returns configuration converting
+ * it for soruce or destination peripharal. this API is provided to
@@ -8056,9 +10806,9 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+
+/**
+ * nomadik_dmach_configure - configures DMA Channel processing default and user configuration
-+ * @srcdmadev: name of srouce DMAble device IP
-+ * @destdmadev: name of dest DMAble device IP
-+ * @dma: DMA channel data structure pointer
++ * @srcdmadev: name of srouce DMAble device IP
++ * @destdmadev: name of dest DMAble device IP
++ * @dma: DMA channel data structure pointer
+ *
+ * finds out the defult configuration for src and dest devices scanning the config_tbl
+ * prepares DMA configuration from default config of src and dest dmadevices and user
@@ -8103,7 +10853,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+
+/**
+ * nomadik_dma_find_dmahwpipe - Finds and returns free and compatible DMA pipe
-+ * @dma: DMA channel data structure pointer
++ * @dma: DMA channel data structure pointer
+ *
+ * searches a free pipe as per channel priority policy manager
+ * (refer ./Documentation//arm/STM-Nomadik/dma_user_guide.txt)
@@ -8161,7 +10911,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ nmdk_dbg("DMAHW PIPE%d assigned for Dma Channel %d",i, DMACH_FOR_IRQNO(dma->dma_irq));
+ release_dma_lock(flags);
+ return (void *)p_dmach_reg;
-+ } while ((*(++p_pipe)) != POLICY_CHECK_END);
++ } while ((*(++p_pipe)) != POLICY_CHECK_END);
+ release_dma_lock(flags);
+ nmdk_error("All HW DMA Chanels busy...");
+ return NULL;
@@ -8169,18 +10919,18 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+
+/**
+ * nomadik_dma_req - low level method for request_dma API
-+ * @channel: DMA channel number
-+ * @dma: DMA channel data structure pointer
++ * @channel: DMA channel number
++ * @dma: DMA channel data structure pointer
+ *
+ * Check for configuration is passed by client
+ * prepares basic channel configuration from dma info provided by client
-+ * generate dmach id string from src and dest dmadevtypes
++ * generate dmach id string from src and dest dmadevtypes
+ * find and reserved a pipe in case of reserved mode requested by client
+ * returns NULL in case of sucess, negative value in case for failure
+ */
+static int nomadik_dma_req(dmach_t channel, dma_t *dma)
+{
-+ struct nmdk_dma_info *dma_info =
++ struct nmdk_dma_info *dma_info =
+ (struct nmdk_dma_info *)dma->device_id;
+ int error;
+
@@ -8217,7 +10967,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ error =-1;
+ goto err_exit;
+ }
-+
++
+ if (! dma_info->srcdevtype) {
+ nmdk_error("srcdevtype not specified");
+ error =-DMA_SRC_DEVICE_NOT_CONFIGURED;
@@ -8230,7 +10980,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ }
+ error = nomadik_dmach_configure(dma_info->srcdevtype, dma_info->destdevtype, dma);
+ if (error) goto err_exit;
-+
++
+ /* generate dmach id string from src and dest dmadevtypes */
+ sprintf(dmach_name + (channel * MAX_DMA_CHNAME_SIZE ),
+ "dmaclbk-%s->%s", dma_info->srcdevtype, dma_info->destdevtype);
@@ -8256,8 +11006,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+
+/**
+ * nomadik_dma_en - low level method for enable_dma API
-+ * @channel: DMA channel number
-+ * @dma: DMA channel data structure pointer
++ * @channel: DMA channel number
++ * @dma: DMA channel data structure pointer
+ *
+ * Checks for channel configured properly
+ * allocates llis for transfer
@@ -8282,7 +11032,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ if (dma->mode) {
+ if (((u32)dmaconfig_mode(dma) & FLOW_CNTRL_DEST_PERIPH(PERIPH_TO_PERIPH) ==
+ (dma->mode & FLOW_CNTRL_DEST_PERIPH(PERIPH_TO_PERIPH)) {
-+ dmaconfig_mode(dma) = (u32)dma->mode;
++ dmaconfig_mode(dma) = (u32)dma->mode;
+ }
+ }
+ } else {
@@ -8392,7 +11142,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ if ((u32)dmaconfig_mode(dma) & DMA_INFINITE_XFER) {
+ p_lli_next->mem3.next = p_lli_start->mem3.p_lli_hw;
+ } else {
-+ p_lli_next->mem4.cr |= (1<<31);
++ p_lli_next->mem4.cr |= (1<<31);
+ }
+ } /*mode & DMA_DOUBLE_BUFFERED*/
+ else {
@@ -8417,7 +11167,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ p_lli_next->mem1.sadr += dmacnt_chkval *(((u32)dmaconfig_config(dma) & 0x000c0000)>>17);
+ if (p_lli_next->mem4.cr & (DMA_ADR_INC<<1))
+ p_lli_next->mem2.dadr += dmacnt_chkval *(((u32)dmaconfig_config(dma) & 0x000c0000)>>17);
-+
++
+ p_lli_curr = p_lli_next;
+ dmacnt -= dmacnt_chkval;
+ tmpcnt--;
@@ -8426,7 +11176,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ if ((u32)dmaconfig_mode(dma) & DMA_INFINITE_XFER) {
+ p_lli_curr->mem3.next = p_lli_start->mem3.p_lli_hw;
+ } else {
-+ p_lli_curr->mem4.cr |= (1<<31);
++ p_lli_curr->mem4.cr |= (1<<31);
+ }
+ }
+ nmdk_dbg("lli_start(%p)", p_lli_start);
@@ -8463,14 +11213,14 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ return;
+
+exit_en:
-+ if (p_lli_start) nomadik_dma_deallocate_llis(p_lli_start);
++ if (p_lli_start) nomadik_dma_deallocate_llis(p_lli_start);
+ return;
+}
+
+/**
+ * nomadik_dma_dis - low level method for disable_dma API
-+ * @channel: DMA channel number
-+ * @dma: DMA channel data structure pointer
++ * @channel: DMA channel number
++ * @dma: DMA channel data structure pointer
+ *
+ * disables a transfer on a pipe if associated with a requested channel
+ */
@@ -8501,9 +11251,9 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+
+/* find the available dma chanel and requests the same */
+/**
-+ * request_available_dma - Wrapper over request_dma API
-+ * @dmach_config_info: DMA channel number
-+ * @dma: DMA channel data structure pointer
++ * request_available_dma - Wrapper over request_dma API
++ * @dmach_config_info: DMA channel number
++ * @dma: DMA channel data structure pointer
+ *
+ * Wrapper over request_dma API for free and available DMA channel search
+ * returns DMA Channel number , negative error value in case of failure
@@ -8532,7 +11282,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+
+/**
+ * suspend_dma - Pauses DMA transfer for this channel
-+ * @channel: DMA channel number
++ * @channel: DMA channel number
+ *
+ * This API will pause current dma if it is ongoing
+ * also this API is used to pause all active on going DMA channels involved
@@ -8601,8 +11351,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+
+/**
+ * nomadik_dma_residue - low level method for get_dma_residue API
-+ * @channel: DMA channel number
-+ * @dma: DMA channel data structure pointer
++ * @channel: DMA channel number
++ * @dma: DMA channel data structure pointer
+ *
+ * Pause the channel, read the control register, resume the channel
+ * May not be an accurate value
@@ -8611,7 +11361,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+static int nomadik_dma_residue(dmach_t channel, dma_t *dma)
+{
+ volatile unsigned int r = 0;
-+ volatile struct dmach_register *p_dmach_reg =
++ volatile struct dmach_register *p_dmach_reg =
+ (struct dmach_register *)dmaconfig_pipeadr(dma);
+
+ if ((p_dmach_reg == NULL) || p_dmach_reg == (void *)0xffffffff) return -1;
@@ -8629,7 +11379,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+
+/**
+ * resume_dma - Resume already suspended DMA transfer for this channel
-+ * @channel: DMA channel number
++ * @channel: DMA channel number
+ *
+ * This API will resume current dma if it is suspended previously
+ * also this API is used to resume all active and paused DMA channels involved
@@ -8695,9 +11445,9 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+
+/**
+ * nomadik_dma_set_destadr - low level method for set_dma_speed API
-+ * @channel: DMA channel number
-+ * @dma: DMA channel data structure pointer
-+ * @cycle: sonsidered as destination DMA address
++ * @channel: DMA channel number
++ * @dma: DMA channel data structure pointer
++ * @cycle: sonsidered as destination DMA address
+ *
+ * Since ther is no API to program destination DMA address.
+ * set_dma_speed is used to fulfill this need.
@@ -8712,8 +11462,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+
+/**
+ * nomadik_dma_interrupt - Interrupt handler for DMA controller
-+ * @irq: interrupt request number
-+ * @desc: irq structure pointer
++ * @irq: interrupt request number
++ * @desc: irq structure pointer
+ *
+ * checks and find out the source DMA channel who generated interrupt
+ * if interrupt generated is Terminal count then
@@ -8853,7 +11603,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ set_irq_handler(i, handle_simple_irq);
+ set_irq_flags(i, IRQF_VALID);
+ socdat->dirqdesc[i].chip_data= NULL; //&p_dma_reg->dmach[ret];
-+ if (i < MAX_DMA_CHANNELS) p_lli_pipe[DMACH_FOR_IRQNO(i)] = NULL;
++ if (i < MAX_DMA_CHANNELS) p_lli_pipe[DMACH_FOR_IRQNO(i)] = NULL;
+ /* dma chanel data structure initialization */
+ dmachan[DMACH_FOR_IRQNO(i)].d_ops = &nomadik_dma_ops;
+ dmachan[DMACH_FOR_IRQNO(i)].dma_irq = i;
@@ -8904,16 +11654,16 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+ if (!(dmac)) {
+ for (i = (MAX_DMA_IRQ-MAX_DMA_CHANNELS); i < MAX_DMA_IRQ; i++) {
+ //set_irq_chip(i, 0x00);
-+ set_irq_handler(i, handle_bad_irq);
++ set_irq_handler(i, handle_bad_irq);
+ dma_chan[DMACH_FOR_IRQNO(i)].d_ops = NULL;
+ }
+ }
+
-+ set_irq_handler(dev->irq[0], handle_bad_irq);
++ set_irq_handler(dev->irq[0], handle_bad_irq);
+
+ dma_free_coherent(NULL,
+ ((MAX_DMA_CHANNELS*(sizeof(struct dmach_lli))*8)+256),
-+ (void *)lli_ptr_log, (dma_addr_t)lli_ptr_phy );
++ (void *)lli_ptr_log, (dma_addr_t)lli_ptr_phy );
+ lli_ptr_phy = lli_ptr_log = NULL;
+
+ iounmap(p_dma_reg);
@@ -8959,9 +11709,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/dma.c ../new/linux-2.6.20/arch/a
+MODULE_AUTHOR("ST Microelectronics");
+MODULE_DESCRIPTION("Nomadik DMA Controllers (0 and 1)");
+MODULE_LICENSE("GPL");
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/fsmc.c ../new/linux-2.6.20/arch/arm/mach-nomadik/fsmc.c
---- linux-2.6.20/arch/arm/mach-nomadik/fsmc.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/fsmc.c 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/fsmc.c
@@ -0,0 +1,113 @@
+/*
+ * linux/arch/arm/mach-nomadik/fsmc.c
@@ -9013,7 +11762,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/fsmc.c ../new/linux-2.6.20/arch/
+{
+ struct fsmc_nomadik_info *data = NULL;
+
-+ data = platform_get_drvdata(pdev);
++ data = platform_get_drvdata(pdev);
+ if(data){
+ iounmap(data->fsmc_reg);
+ kfree(data);
@@ -9076,9 +11825,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/fsmc.c ../new/linux-2.6.20/arch/
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("ST Microelectronics (sachin.verma@st.com)");
+MODULE_DESCRIPTION("FSMC driver for Nomadik Platform");
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/gpio.c ../new/linux-2.6.20/arch/arm/mach-nomadik/gpio.c
---- linux-2.6.20/arch/arm/mach-nomadik/gpio.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/gpio.c 2008-09-16 23:41:14.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/gpio.c
@@ -0,0 +1,916 @@
+/*
+ * linux/arch/arm/mach-nomadik/gpio.c
@@ -9996,9 +12744,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/gpio.c ../new/linux-2.6.20/arch/
+MODULE_AUTHOR("Prafulla WADASKAR <prafulla.wadaskar@st.com>");
+MODULE_DESCRIPTION("Nomadik GPIO Driver");
+MODULE_LICENSE("GPL");
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/irq.c ../new/linux-2.6.20/arch/arm/mach-nomadik/irq.c
---- linux-2.6.20/arch/arm/mach-nomadik/irq.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/irq.c 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/irq.c
@@ -0,0 +1,231 @@
+/*
+ * linux/arch/arm/mach-nomadik/irq.c
@@ -10145,16 +12892,16 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/irq.c ../new/linux-2.6.20/arch/a
+/**
+ * nomadik_vic_set_type - To enable/disable/change priority logic
+ *
-+ * callback function for set_irq_type sys call
++ * callback function for set_irq_type sys call
+ * This function will be called in the context of request_irq.
+ * This function is used to configure the interrupt priotity requested
+ * through request_irq sytem call
+ *
-+ * This function can be invoked by set_irq_type sys call ,using which
-+ * you can enable/disable/change preprogrammed priority
++ * This function can be invoked by set_irq_type sys call ,using which
++ * you can enable/disable/change preprogrammed priority
+ *
+ * Note: this function will NOT be invoked if interrupt is requested as
-+ * shared irq (i.e. SA_SHIRQ is specifed during requerst_irq),
++ * shared irq (i.e. SA_SHIRQ is specifed during requerst_irq),
+ */
+static int nomadik_vic_set_type(unsigned int irq, unsigned int type)
+{
@@ -10171,7 +12918,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/irq.c ../new/linux-2.6.20/arch/a
+ * SA_TIMER flag, hence exit if SA_TIMER flag is set for irq
+ */
+ if (irq_desc[irq].action->flags & IRQF_TIMER) return(-1);
-+ if ((type & SA_NMDK_PRIORITYIRQ) != SA_NMDK_PRIORITYIRQ) return(-1);
++ if ((type & SA_NMDK_PRIORITYIRQ) != SA_NMDK_PRIORITYIRQ) return(-1);
+ /*
+ * if this function is invoked by set_irq_type call
+ * then store input type as flags
@@ -10190,7 +12937,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/irq.c ../new/linux-2.6.20/arch/a
+ if (!priority_level) {
+ p_vic_register->vcr[priority_level] &= ~VIC_VECTORED_IRQ_EN;
+ vic_chip = &nomadik_vic_chip;
-+ } else
++ } else
+ vic_chip = &nomadik_vic_priority_chip;
+ spin_lock_irqsave(&vic_lock, flags);
+ desc->chip = vic_chip;
@@ -10225,286 +12972,14 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/irq.c ../new/linux-2.6.20/arch/a
+ }
+ if (i < VIC_VECTORED_IRQ_NUM) {
+ /*Disable all vectored interrupts */
-+ p_vic_register->vcr[i] = (u32)NULL;
-+ p_vic_register->var[i] = (u32)NULL;
++ p_vic_register->vcr[i] = (u32)NULL;
++ p_vic_register->var[i] = (u32)NULL;
+ }
+ }
+ nmdk_info("Module initialized Ver("VIC_VER")");
+}
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/Kconfig-nomadik ../new/linux-2.6.20/arch/arm/mach-nomadik/Kconfig-nomadik
---- linux-2.6.20/arch/arm/mach-nomadik/Kconfig-nomadik 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/Kconfig-nomadik 2008-07-17 16:42:38.000000000 +0530
-@@ -0,0 +1,267 @@
-+if ARCH_NOMADIK
-+
-+# The GPIO_PIN_23 is shared between MMC and MSP0.
-+# by default this pin is used for MMC for NOMADIK_NDK15_REV2_B_03 target
-+# to use this pin for MSP it should be configured 'n'
-+config NOMADIK_NDK15_REV2_MMC
-+ bool
-+ default y if NOMADIK_NDK15_REV2_B_03
-+
-+config NOMADIK_NDK10_CUTA
-+ bool
-+ default y if NOMADIK_NDK10_CUT_A1
-+
-+config NOMADIK_NDK10_CUTB
-+ bool
-+ default y if (NOMADIK_NDK10_CUT_B0 || NOMADIK_NDK10_CUT_B06)
-+
-+config NOMADIK_GPIO
-+ bool
-+ default y
-+
-+config NOMADIK_ENABLE_L2CACHE
-+ bool "Enable L2 Cache controller"
-+ depends on (NOMADIK_NDK15 || NOMADIK_NHK15)
-+ default y if NOMADIK_STN8815CAS22H11
-+ select L2CACHE_ENABLE
-+ help
-+ Nomadik Chip version for this platfrom supports L2 Cache
-+ by default it is enabled, if you want to check system
-+ performanence without L2 Cache, then say no here
-+
-+config GPIO_PROC
-+ bool
-+ default y
-+ depends on NOMADIK_GPIO
-+
-+config NOMADIK_DMA
-+ tristate "NOMADIK DMA SUPPORT"
-+ depends on ISA_DMA_API
-+ default y
-+ help
-+ Nomadik DMA low level driver for standrd DMA interface
-+
-+config NOMADIK_SSP
-+ tristate "NOMADIK SSP SUPPORT"
-+ depends on (NOMADIK_DMA && NOMADIK_SPI)
-+ default m
-+ help
-+ Depends on Nomadik DMA driver and SPI driver
-+
-+config NOMADIK_MSP
-+ tristate "NOMADIK MSP SUPPORT"
-+ depends on (NOMADIK_DMA && NOMADIK_SPI)
-+ default m
-+ help
-+ Depends on Nomadik DMA driver and SPI driver
-+
-+config NOMADIK_MTU
-+ tristate "NOMADIK MTU SUPPORT"
-+ default m
-+ help
-+ The driver offers 8 MTU units tobe used.
-+ In case of module only MTU1 unit will be
-+ available with 4 timers:
-+ MTU1_T0, MTU1_T1, MTU1_T2 & MTU1_T3
-+
-+config NOMADIK_MTU_SYSTEM_TICK
-+ bool "NOMADIK MTU SYSTEM TICK SUPPORT"
-+ depends on NOMADIK_MTU
-+ help
-+ This will prevent the system tick to be used through MTU.
-+ default y
-+
-+config NOMADIK_RTC
-+ bool "NOMADIK RTC/RTT SUPPORT"
-+ default y
-+ help
-+ The driver offers RTC and RTT support.
-+ The RTC can be used through /dev/rtc interface for real
-+ time calculations, alarms, long delays if required
-+ If unsure say Y here.
-+
-+config NOMADIK_PM
-+ bool "NOMADIK POWER MANAGEMENT SUPPORT"
-+ depends on ( (NOMADIK_NHK15 || NOMADIK_NDK15) && NOMADIK_RTC )
-+ default y
-+ select PM if NOMADIK_PM
-+ help
-+ Nomadik Power Management Driver
-+
-+config NOMADIK_SVA_INIT_MEM
-+ bool "NOMADIK SVA MEMORY at initialisation"
-+ default n
-+ help
-+ The driver uses physically contiguous memory allocated
-+ at kernel initialisation time.
-+ If unsure say N here.
-+
-+config FORCE_MAX_ZONEORDER
-+ int "Maximum zone order"
-+ default "13"
-+ help
-+ For use cases having large memory requirements choosing a
-+ larger memory size is advised.
-+
-+config NOMADIK_SVA_MEM_SIZE
-+ int "SVA initial memory size" if NOMADIK_SVA_INIT_MEM
-+ default "4"
-+ help
-+ For use cases having large memory requirements choosing a
-+ larger memory size is advised.
-+
-+config NOMADIK_SVA_VPIP
-+ bool "NOMADIK SVA VPIP support"
-+ default y
-+ help
-+ This enables the support for VPIP in SVA driver. This allows to
-+ create IRP services in SVA to grab the images from sensor CCP0.
-+ Warning: This disables Ethernet & MTD devices.
-+
-+config NOMADIK_SAA_INIT_MEM
-+ bool "NOMADIK SAA MEMORY at initialisation"
-+ default n
-+ help
-+ The SAA driver uses physically contiguous memory allocated
-+ at kernel initialisation time.
-+ If unsure say N here.
-+
-+#Configuration for default display setup
-+choice
-+ prompt "Default Display Type"
-+ depends on FB
-+ default FB_NOMADIK_QVGA_PORTRAIT
-+
-+config FB_NOMADIK_VGA
-+ bool "CLCD VGA"
-+
-+config FB_NOMADIK_CRT
-+ bool "CRT VGA"
-+
-+config FB_NOMADIK_QVGA_PORTRAIT
-+ bool "CLCD QVGA Portrait"
-+
-+config FB_NOMADIK_QVGA_LANDSCAPE
-+ bool "CLCD QVGA Landscape"
-+
-+config FB_NOMADIK_WVGA
-+ bool "CLCD WVGA"
-+endchoice
-+
-+choice
-+ prompt "Default Display BPP"
-+ depends on FB
-+ default FB_NOMADIK_PANEL_24BPP_PACKED
-+
-+config FB_NOMADIK_PANEL_8BPP
-+ bool "8 BPP"
-+
-+config FB_NOMADIK_PANEL_16BPP
-+ bool "16 BPP"
-+
-+config FB_NOMADIK_PANEL_24BPP
-+ bool "24 BPP"
-+
-+config FB_NOMADIK_PANEL_24BPP_PACKED
-+ bool "24 BPP Packed"
-+
-+endchoice
-+
-+config FB_NOMADIK_ACCLN
-+ bool "Nomadik Graphics Acceleration"
-+ tristate
-+ depends on FB
-+ default y
-+ help
-+ enable hw accln for graphics on nomadik
-+
-+config FB_NOMADIK_PANEL_BPP
-+ int
-+ default 16 if !FB
-+ default 8 if FB_NOMADIK_PANEL_8BPP
-+ default 16 if FB_NOMADIK_PANEL_16BPP
-+ default 24 if FB_NOMADIK_PANEL_24BPP_PACKED
-+ default 32 if FB_NOMADIK_PANEL_24BPP
-+
-+config FB_NOMADIK_PANEL_NAME
-+ string
-+ default "VGA" if !FB
-+ default "VGA" if FB_NOMADIK_VGA
-+ default "CRT" if FB_NOMADIK_CRT
-+ default "QVGA_Portrait" if FB_NOMADIK_QVGA_PORTRAIT
-+ default "QVGA_Landscape" if FB_NOMADIK_QVGA_LANDSCAPE
-+ default "WVGA" if FB_NOMADIK_WVGA
-+
-+config FB_NOMADIK_PANEL_XRES
-+ int
-+ default 800 if FB_NOMADIK_WVGA
-+ default 640 if !FB
-+ default 640 if ( FB_NOMADIK_VGA || FB_NOMADIK_CRT)
-+ default 240 if FB_NOMADIK_QVGA_PORTRAIT
-+ default 320 if FB_NOMADIK_QVGA_LANDSCAPE
-+
-+config FB_NOMADIK_PANEL_YRES
-+ int
-+ default 480 if !FB
-+ default 480 if ( FB_NOMADIK_VGA || FB_NOMADIK_CRT || FB_NOMADIK_WVGA)
-+ default 320 if FB_NOMADIK_QVGA_PORTRAIT
-+ default 240 if FB_NOMADIK_QVGA_LANDSCAPE
-+
-+config FB_NOMADIK_PANEL_LFMARGIN
-+ hex
-+ default 0xD6 if FB_NOMADIK_WVGA
-+ default 0x21 if !FB
-+ default 0x21 if FB_NOMADIK_VGA
-+ default 0x29 if FB_NOMADIK_CRT
-+ default 0x13 if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
-+
-+config FB_NOMADIK_PANEL_RTMARGIN
-+ hex
-+ default 0x27 if FB_NOMADIK_WVGA
-+ default 0x40 if !FB
-+ default 0x40 if FB_NOMADIK_VGA
-+ default 0x09 if FB_NOMADIK_CRT
-+ default 0x2f if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
-+
-+config FB_NOMADIK_PANEL_UPRMARGIN
-+ hex
-+ default 0x22 if FB_NOMADIK_WVGA
-+ default 0x07 if !FB
-+ default 0x07 if FB_NOMADIK_VGA
-+ default 0x19 if FB_NOMADIK_CRT
-+ default 0x04 if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
-+
-+config FB_NOMADIK_PANEL_LWRMARGIN
-+ hex
-+ default 0xA if FB_NOMADIK_WVGA
-+ default 0x24 if !FB
-+ default 0x24 if FB_NOMADIK_VGA
-+ default 0x02 if FB_NOMADIK_CRT
-+ default 0x0f if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
-+
-+config FB_NOMADIK_PANEL_HSLEN
-+ hex
-+ default 0x1 if FB_NOMADIK_WVGA
-+ default 0x40 if !FB
-+ default 0x40 if FB_NOMADIK_VGA
-+ default 0x61 if FB_NOMADIK_CRT
-+ default 0x13 if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
-+
-+config FB_NOMADIK_PANEL_VSLEN
-+ hex
-+ default 0x1 if FB_NOMADIK_WVGA
-+ default 0x19 if !FB
-+ default 0x19 if FB_NOMADIK_VGA
-+ default 0x02 if FB_NOMADIK_CRT
-+ default 0x04 if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
-+
-+config FB_NOMADIK_PANEL_TIM2VAL
-+ hex
-+ default 0x031f1822 if FB_NOMADIK_WVGA
-+ default 0x027f1800 if !FB
-+ default 0x027f1800 if (FB_NOMADIK_VGA)
-+ default 0x027f3800 if (FB_NOMADIK_CRT)
-+ default 0x00ef1804 if (FB_NOMADIK_QVGA_PORTRAIT || FB_NOMADIK_QVGA_LANDSCAPE)
-+#Configuration for default display setup ends here
-+
-+endif
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/l2cc.c ../new/linux-2.6.20/arch/arm/mach-nomadik/l2cc.c
---- linux-2.6.20/arch/arm/mach-nomadik/l2cc.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/l2cc.c 2008-07-04 23:45:55.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/l2cc.c
@@ -0,0 +1,152 @@
+/*
+ * linux/arch/arm/mach-nomadik/stn8815_devices.c
@@ -10658,187 +13133,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/l2cc.c ../new/linux-2.6.20/arch/
+ cache_sync();
+}
+EXPORT_SYMBOL(l210_flush_range);
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/Makefile ../new/linux-2.6.20/arch/arm/mach-nomadik/Makefile
---- linux-2.6.20/arch/arm/mach-nomadik/Makefile 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/Makefile 2008-07-04 23:45:06.000000000 +0530
-@@ -0,0 +1,166 @@
-+#
-+# Makefile for the linux kernel.
-+#
-+
-+ifeq ($(wildcard $(TOPDIR)/.config), $(TOPDIR)/.config)
-+include $(TOPDIR)/.config
-+endif
-+
-+# Object file lists.
-+
-+TARGET_NAME = $(shell echo $(CONFIG_NOMADIK_TARGET))
-+SOC_NAME = $(shell echo $(CONFIG_NOMADIK_SOC))
-+PLATFORM_NAME = $(shell echo $(CONFIG_NOMADIK_PLATFORM))
-+NMDK_EXTRA_CFLAGS = $(shell echo $(CONFIG_NOMADIK_TARGET_EXTRA_CFLAGS))
-+
-+EXTRA_CFLAGS-y := $(NMDK_EXTRA_CFLAGS)
-+EXTRA_CFLAGS-$(CONFIG_NOMADIK_MTU) += -DCONFIG_MTU0
-+CFLAGS += $(EXTRA_CFLAGS-y)
-+
-+# NMDKDBG_FLAGS maintainence for all Nomadik debuging strategy
-+# Add new entry for new component to be supported here
-+NMDKDBG_FLAGS :=
-+
-+ifdef VIC_DEBUG
-+NMDKDBG_FLAGS += -DVIC_DEBUG=$(VIC_DEBUG)
-+endif
-+
-+ifdef RTC_DEBUG
-+NMDKDBG_FLAGS += -DRTC_DEBUG=$(RTC_DEBUG)
-+endif
-+
-+ifdef GPIO_DEBUG
-+NMDKDBG_FLAGS += -DGPIO_DEBUG=$(GPIO_DEBUG)
-+endif
-+
-+ifdef DMA_DEBUG
-+NMDKDBG_FLAGS += -DDMA_DEBUG=$(DMA_DEBUG)
-+endif
-+
-+ifdef EPIO_DEBUG
-+NMDKDBG_FLAGS += -DEPIO_DEBUG=$(EPIO_DEBUG)
-+endif
-+
-+ifdef SPI_DEBUG
-+NMDKDBG_FLAGS += -DSPI_DEBUG=$(SPI_DEBUG)
-+endif
-+
-+ifdef SSP_DEBUG
-+NMDKDBG_FLAGS += -DSSP_DEBUG=$(SSP_DEBUG)
-+endif
-+
-+ifdef MSP_DEBUG
-+NMDKDBG_FLAGS += -DMSP_DEBUG=$(MSP_DEBUG)
-+endif
-+
-+ifdef KEYPAD_DEBUG
-+NMDKDBG_FLAGS += -DKEYPAD_DEBUG=$(KEYPAD_DEBUG)
-+endif
-+
-+ifdef TOUCHP_DEBUG
-+NMDKDBG_FLAGS += -DTOUCHP_DEBUG=$(TOUCHP_DEBUG)
-+endif
-+
-+ifdef POWER_DEBUG
-+NMDKDBG_FLAGS += -DPOWER_DEBUG=$(POWER_DEBUG)
-+endif
-+
-+ifdef PM_DEBUG
-+NMDKDBG_FLAGS += -DPM_DEBUG=$(PM_DEBUG)
-+endif
-+
-+ifdef CPUFREQ_DEBUG
-+NMDKDBG_FLAGS += -DCPUFREQ_DEBUG=$(CPUFREQ_DEBUG)
-+endif
-+
-+ifdef SLEEP_DEBUG
-+NMDKDBG_FLAGS += -DSLEEP_DEBUG=$(SLEEP_DEBUG)
-+endif
-+
-+ifdef SVA_DEBUG
-+NMDKDBG_FLAGS += -DSVA_DEBUG=$(SVA_DEBUG)
-+endif
-+#export the nomadik debug flags for driver/* build
-+CFLAGS += $(NMDKDBG_FLAGS)
-+
-+obj-y := gpio.o clock.o timer.o irq.o fsmc.o
-+
-+obj-y += $(SOC_NAME)_devices.o
-+obj-y += $(PLATFORM_NAME)_devices.o
-+
-+# Soc Specific modules
-+
-+obj-$(CONFIG_NOMADIK_PM) += sleep.o deep_sleep.o soft_sleep.o normal.o slow.o pm.o
-+
-+ifeq ($(CONFIG_NOMADIK_PM),y)
-+obj-y += power.o
-+endif
-+
-+ifeq ($(CONFIG_L2CACHE_ENABLE),y)
-+obj-y += l2cc.o
-+endif
-+ifeq ($(CONFIG_CPU_FREQ_NOMADIK),y)
-+obj-y += power.o slow.o
-+endif
-+
-+obj-$(CONFIG_CPU_FREQ_NOMADIK) += cpu.o dfs.o
-+obj-$(CONFIG_NOMADIK_DMA) += nmdkmod_DMA.o
-+obj-$(CONFIG_NOMADIK_SSP) += nmdkmod_ssp.o
-+obj-$(CONFIG_NOMADIK_MSP) += nmdkmod_msp.o
-+obj-$(CONFIG_NOMADIK_MTU) += nmdkmod_mtu.o
-+obj-$(CONFIG_NOMADIK_RTC) += nmdkmod_rtc.o
-+
-+nmdkmod_gpio-objs := gpio.o
-+nmdkmod_DMA-objs := dma.o
-+nmdkmod_ssp-objs := ssp.o
-+nmdkmod_msp-objs := msp.o
-+nmdkmod_mtu-objs := mtu.o
-+nmdkmod_rtc-objs := rtc.o
-+
-+# Auto board configuration/dependency resolution
-+#include $(TOPDIR)/.config
-+
-+SOC_HEADER = include/asm-arm/arch-nomadik/soc_devices.h
-+PDEV_HEADER = include/asm-arm/arch-nomadik/board_devices.h
-+
-+$(TOPDIR)/.platform:
-+ $(Q)echo "Generating $@"
-+ $(Q)echo $(CONFIG_NOMADIK_PLATFORM) > $@
-+
-+$(TOPDIR)/.soc:
-+ $(Q)echo "Generating $@"
-+ $(Q)echo $(CONFIG_NOMADIK_SOC) > $@
-+
-+$(TOPDIR)/.target:
-+ $(Q)echo "Generating $@"
-+ $(Q)echo $(CONFIG_NOMADIK_TARGET) > $@
-+
-+$(TOPDIR)/$(PDEV_HEADER):
-+ $(Q)echo "Generating SYMLINK $(PDEV_HEADER) -> $(PLATFORM_NAME)_devices.h"
-+ $(Q)rm -rf $@
-+ $(Q)ln -s $(PLATFORM_NAME)_devices.h $@
-+
-+$(TOPDIR)/$(SOC_HEADER):
-+ $(Q)echo "Generating SYMLINK $(SOC_HEADER) -> $(SOC_NAME)_devices.h"
-+ $(Q)rm -rf $@
-+ $(Q)ln -s $(SOC_NAME)_devices.h $@
-+
-+# machprepare kjhsdk dfsdf
-+machprepare: $(TOPDIR)/.platform $(TOPDIR)/.soc $(TOPDIR)/.target $(TOPDIR)/$(PDEV_HEADER) $(TOPDIR)/$(SOC_HEADER)
-+
-+# machprepare kjhsdk j
-+machclean:
-+ $(Q)rm -rf *mod.o *.mod.c *.o *.ko
-+
-+machmrproper:
-+ $(Q)rm -rf $(TOPDIR)/$(SOC_HEADER) $(TOPDIR)/$(PDEV_HEADER) $(TOPDIR)/arch/arm/mach-nomadik/Kconfig $(TOPDIR)/.soc $(TOPDIR)/.target $(TOPDIR)/.platform
-+
-+#This will resolve any machin specific dependency for configuration
-+#This will generate Kconfig file if not present
-+machconfig:
-+ifneq ($(wildcard $(TOPDIR)/arch/arm/mach-nomadik/Kconfig), $(TOPDIR)/arch/arm/mach-nomadik/Kconfig)
-+ @echo "Generating $(TOPDIR)/arch/arm/mach-nomadik/Kconfig"
-+ @./create_kconfig.pl $(TOPDIR)/arch/arm/mach-nomadik
-+endif
-+
-+# end of Auto board configuration/dependency resolution
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/Makefile.boot ../new/linux-2.6.20/arch/arm/mach-nomadik/Makefile.boot
---- linux-2.6.20/arch/arm/mach-nomadik/Makefile.boot 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/Makefile.boot 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,4 @@
-+ zreladdr-y := 0x00008000
-+params_phys-y := 0x00000100
-+initrd_phys-y := 0x00800000
-+
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/msp.c ../new/linux-2.6.20/arch/arm/mach-nomadik/msp.c
---- linux-2.6.20/arch/arm/mach-nomadik/msp.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/msp.c 2008-11-19 16:47:02.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/msp.c
@@ -0,0 +1,2062 @@
+/*
+ * Driver for Nomadik STN8810/STN8815 MSP device.
@@ -12902,9 +15198,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/msp.c ../new/linux-2.6.20/arch/a
+MODULE_AUTHOR("STMicroelectronics Pvt Ltd");
+MODULE_DESCRIPTION("NOMADIK MSP driver");
+MODULE_LICENSE("GPL");
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/msp.h ../new/linux-2.6.20/arch/arm/mach-nomadik/msp.h
---- linux-2.6.20/arch/arm/mach-nomadik/msp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/msp.h 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/msp.h
@@ -0,0 +1,383 @@
+/*linux/drivers/char/nomadik-msp.h
+ *
@@ -12992,7 +15287,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/msp.h ../new/linux-2.6.20/arch/a
+ volatile u16 *it_mono_data_flow;
+ volatile u32 *it_stereo_data_flow;
+ volatile u32 it_halfwords_count;
-+ volatile u32 flow_error_count;
++ volatile u32 flow_error_count;
+} msp_mode_status;
+
+
@@ -13086,7 +15381,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/msp.h ../new/linux-2.6.20/arch/a
+};
+
+#define RX_ENABLE_MASK 0x00000001
-+#define RX_FIFO_ENABLE_MASK 0x00000002
++#define RX_FIFO_ENABLE_MASK 0x00000002
+#define RX_FRAME_SYNC_MASK 0x00000004
+#define DIRECT_COMPANDING_MASK 0x00000008
+#define RX_SYNC_SEL_MASK 0x00000010
@@ -13134,7 +15429,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/msp.h ../new/linux-2.6.20/arch/a
+
+
+/* Use this to clear the clock mode bits to non-spi */
-+#define MSP_NON_SPI_CLK_MASK 0x00600000
++#define MSP_NON_SPI_CLK_MASK 0x00600000
+
+#define P1ELEN_BIT 0
+#define P1FLEN_BIT 3
@@ -13289,29 +15584,28 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/msp.h ../new/linux-2.6.20/arch/a
+
+#endif
+
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/mtu.c ../new/linux-2.6.20/arch/arm/mach-nomadik/mtu.c
---- linux-2.6.20/arch/arm/mach-nomadik/mtu.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/mtu.c 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/mtu.c
@@ -0,0 +1,589 @@
-+/*
++/*
+ * Multiple Timer Unit (MTU) driver.
+ * Written by Vinayak Pane <vinayak.pane@st.com>
-+ *
++ *
+ * Nomadik MTU driver.
+ *
+ * This driver provides an interface for device drivers to utilize both MTUs.
-+ * which includes total 8 timers, Those can be registered against various purposes
-+ * within kernel.
-+ * It keeps track of used & unused timer units. It handles MTU interrupts
++ * which includes total 8 timers, Those can be registered against various purposes
++ * within kernel.
++ * It keeps track of used & unused timer units. It handles MTU interrupts
+ * & their respective multiplexing.
+ *
+ * NOTE:
+ * This device is NOT registered with amba bus device -:
-+ * Even though this driver should be registered with AMBA bus devices,
-+ * we cant do this becasue of Amba driver initialised/probed sequence issue.
-+ * MTU is used as underlying part of system timer. The system timer
-+ * is initialised and used very early before the actual Amba devices
-+ * are initialised/probed. Therefore this probe function is not invoked
++ * Even though this driver should be registered with AMBA bus devices,
++ * we cant do this becasue of Amba driver initialised/probed sequence issue.
++ * MTU is used as underlying part of system timer. The system timer
++ * is initialised and used very early before the actual Amba devices
++ * are initialised/probed. Therefore this probe function is not invoked
+ * before the system timer is initialised!!
+ * However we can catergories this driver in platform/system drivers.
+ */
@@ -13425,7 +15719,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/mtu.c ../new/linux-2.6.20/arch/a
+#define TySZ 0x0002
+static int mtu_change_counter_size(mtu_timer_t timer)
+{
-+ /* by default the timer counter is 16-bit only,
++ /* by default the timer counter is 16-bit only,
+ we can change its size to 32-bit here. */
+
+ unsigned long timer_cr = 0;
@@ -13487,12 +15781,12 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/mtu.c ../new/linux-2.6.20/arch/a
+
+/***************************************************************
+ * functiion : mtu0_timer_interrupt_handler
-+ * Description:
++ * Description:
+ * Interrupt of MTU Unit 0 is handled.
+ * With the priority as MTU0_T0, MTU0_T1,
-+ * MTU0_T2, MTU0_T3. And then the corrosponding
++ * MTU0_T2, MTU0_T3. And then the corrosponding
+ * timer unit's interrupt handler will be called.
-+ * Returns:
++ * Returns:
+ * IRQ_HANDLED - ret val from the sub-irq
+ * IRQ_HANDLED - if the corrosponding irq is not present.
+ ****************************************************************/
@@ -13576,8 +15870,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/mtu.c ../new/linux-2.6.20/arch/a
+ return -1;
+
+ spin_lock(&mtu_inuse_lock);
-+ /* make sure that unregistered timer interrupts are cleared
-+ icr_flag = mtu_intr_reg_readl(timer, TxICR);
++ /* make sure that unregistered timer interrupts are cleared
++ icr_flag = mtu_intr_reg_readl(timer, TxICR);
+ : returns Zero always. */
+ if (timer > 4)
+ clean_icrs = mtu_inuse >> 4;
@@ -13697,7 +15991,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/mtu.c ../new/linux-2.6.20/arch/a
+ /* lets ignore the LSB part now, MTU supports 32bit counter regi only */
+ mtu_load_counter(mtu->timer, mtu_interval_ns);
+
-+ /* XXX: if BG-load-register is passed we have to calculate the
++ /* XXX: if BG-load-register is passed we have to calculate the
+ * mtu_bg_interval_ns load value and then load it. */
+ if (mtu->bg_interval.tv64 == mtu->interval.tv64) /* right now, this much is supported */
+ mtu_bg_load_counter(mtu->timer, mtu_interval_ns);
@@ -13834,7 +16128,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/mtu.c ../new/linux-2.6.20/arch/a
+
+ mtu_intr_reg_writel(MTU1_T0, all_icr_clear, TxICR);
+
-+ /*
++ /*
+ * setup an interrupt for the Timer units
+ */
+#if defined(CONFIG_MTU0) && defined(CONFIG_NOMADIK_MTU_SYSTEM_TICK)
@@ -13882,17 +16176,16 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/mtu.c ../new/linux-2.6.20/arch/a
+MODULE_AUTHOR("ST Microelectronics");
+
+/* vim: set ts=4 noet sw=4 */
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_a1_Kconfig ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_a1_Kconfig
---- linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_a1_Kconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_a1_Kconfig 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_a1_Kconfig
@@ -0,0 +1,28 @@
+if NOMADIK_NDK10_CUT_A1
+
+#target name configuration
+config NOMADIK_TARGET
-+ string
++ string
+ default NDK10_Cut_A1
-+
++
+# nomadik soc chip name configuration for this target
+config NOMADIK_SOC
+ string
@@ -13914,9 +16207,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_a1_Kconfig ../new/linu
+ default y
+
+endif
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b06_Kconfig ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b06_Kconfig
---- linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b06_Kconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b06_Kconfig 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b06_Kconfig
@@ -0,0 +1,35 @@
+if NOMADIK_NDK10_CUT_B06
+
@@ -13924,9 +16216,9 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b06_Kconfig ../new/lin
+
+#target name configuration for this target
+config NOMADIK_TARGET
-+ string
++ string
+ default NDK10_Cut_B06
-+
++
+# nomadik soc chip name configuration for this target
+config NOMADIK_SOC
+ string
@@ -13953,9 +16245,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b06_Kconfig ../new/lin
+ default y
+
+endif
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b0_Kconfig ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b0_Kconfig
---- linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b0_Kconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b0_Kconfig 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b0_Kconfig
@@ -0,0 +1,35 @@
+if NOMADIK_NDK10_CUT_B0
+
@@ -13963,9 +16254,9 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b0_Kconfig ../new/linu
+
+#target name configuration for this target
+config NOMADIK_TARGET
-+ string
++ string
+ default NDK10_Cut_B0
-+
++
+# nomadik soc chip name configuration for this target
+config NOMADIK_SOC
+ string
@@ -13992,9 +16283,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_cut_b0_Kconfig ../new/linu
+ default y
+
+endif
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c
---- linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c
@@ -0,0 +1,1225 @@
+/*
+ * linux/arch/arm/mach-nomadik/ndk10_devices.c
@@ -14254,7 +16544,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c ../new/linux-2.6
+ base = ioremap(0x36400000, SZ_4K);
+
+ /*
-+ * Set Display control LCD*
++ * Set Display control LCD*
+ * Set bit 26 of pmu->ctrl register to 0. CLCD/DIF selection
+ */
+ pmu_base = (unsigned char *)IO_ADDRESS(NOMADIK_PMU_BASE);
@@ -14277,7 +16567,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c ../new/linux-2.6
+
+ /*
+ * Change in cpld register on cob10
-+ * UART1 trasnceiver enable, uart0 enable
++ * UART1 trasnceiver enable, uart0 enable
+ */
+ writew((0x218 | (readw(cpld_base + 02) & ~(0x238))), (cpld_base + 02));
+
@@ -14287,7 +16577,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c ../new/linux-2.6
+ */
+ writew((0xc00 | readw(cpld_base + 02)), (cpld_base + 02));
+
-+ /*
++ /*
+ * Setting as copied from CMM file (backlite disabled)
+ */
+ writew(0xc000, base);
@@ -14471,8 +16761,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c ../new/linux-2.6
+
+void nomadik_nandflash_init(void)
+{
-+ /*
-+ * FSMC initialization
++ /*
++ * FSMC initialization
+ * 0x0000001e => PCR0
+ * 0x000d0a00 => PMEM0
+ * 0x00100a00 => PATT0
@@ -14486,7 +16776,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c ../new/linux-2.6
+ nmdknand_pin_config.trig = GPIO_TRIG_DISABLE;
+ nmdknand_pin_config.debounce = GPIO_DEBOUNCE_UNCHANGED;
+ if(nomadik_gpio_setpinconfig(NAND_GPIO, &nmdknand_pin_config))
-+ return -1;
++ return -1;
+ if(nomadik_gpio_writepin(NAND_GPIO, 1, "nand"))
+ return -1;
+
@@ -14609,7 +16899,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c ../new/linux-2.6
+ .eccbytes = 6,
+ .eccpos = {2, 3, 4, 5, 6, 7},
+ .oobavail = MTD_NANDECC_AUTOPLACE,
-+ .oobfree = {
++ .oobfree = {
+ { .offset = 8,
+ .length = 8,
+ },
@@ -14738,7 +17028,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c ../new/linux-2.6
+static struct flash_platform_data nomadik_nor_flash_data = {
+ .name = "nomadik_nor",
+ .map_name = "cfi_probe",
-+ //.width = NMDK_FLASH_BUSWIDTH,
++ //.width = NMDK_FLASH_BUSWIDTH,
+ .parts = nmdkflash_main_partitions,
+ .nr_parts = ARRAY_SIZE(nmdkflash_main_partitions),
+};
@@ -14781,7 +17071,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c ../new/linux-2.6
+ if (err) {
+ nmdk_error("Error in configuring pin%d for clkout", GPIO_PIN_55);
+ }
-+
++
+ /* disable NOR flash write protection */
+ /* CHECK if this clashes with NOR and NAND settings of FSMC */
+ *((volatile unsigned short *)(NOMADIK_CPLD_RGPO1_VA)) |=
@@ -15221,12 +17511,12 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk10_devices.c ../new/linux-2.6
+}
+
+
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c
---- linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,1023 @@
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c
+@@ -0,0 +1,1001 @@
+/*
-+ * linux/arch/arm/mach-nomadik/ndk15c02_devices.c
++ * linux/arch/arm/mach-nomadik/ndk15_devices.c
++ *
+ *
+ * Copyright (C) STMicroelectronics
+ *
@@ -15234,7 +17524,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ * it under the terms of the GNU General Public License version 2, as
+ * published by the Free Software Foundation.
+ *
-+ * NDK15C02 board specifc driver defination
++ * NDK15B0x board specifc driver defination
+ */
+#include <linux/types.h>
+#include <linux/kernel.h>
@@ -15304,7 +17594,6 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ /* not implimented for this board */
+}
+
-+//#ifdef CONFIG_MMC_NOMADIK
+/*
+ * Settings to configure MMC controller for NDK10
+ */
@@ -15357,52 +17646,9 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ nomadik_gpio_altfuncdisable(GPIO_ALT_SD_CARD, dev->dev.bus_id);
+ nomadik_gpio_resetpinconfig(GPIO_PIN_75, dev->dev.bus_id);
+}
-+//#endif
-+
-+static int fsmc_platform_init(void)
-+{
-+ unsigned char __iomem *fsmc_base;
-+
-+ nmdk_dbg_ftrace();
-+ /*Following Settings done for NAND flash protect off */
-+ fsmc_base = (unsigned char *)IO_ADDRESS(NOMADIK_FSMC_BASE);
-+
-+ /* for NOR accesss */
-+ /* Initialize the fsmc bank 0 */
-+ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BCR0)) = 0x10db;
-+ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BTR0)) = 0x03333333;
-+ /* Initialize the fsmc bank 1 used for ethernet controller */
-+ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BCR1)) = 0x10db;
-+ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BTR1)) = 0x00000702; /*old 00000702 */
-+
-+ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BCR0)) |= 0x80;
-+ /* Above Settings done for NAND flash protect off */
-+ return 0;
-+}
-+
-+static struct resource fsmc_resources[] = {
-+ [0] = {
-+ .start = NOMADIK_FSMC_BASE,
-+ .end = NOMADIK_FSMC_BASE + SZ_4K - 1,
-+ .flags = IORESOURCE_MEM,
-+ },
-+};
-+
-+struct fsmc_platform_data fsmc_data = {
-+ .init = fsmc_platform_init,
-+};
-+
-+static struct platform_device fsmc_device = {
-+ .name = "NOMADIK-FSMC",
-+ .id = 0,
-+ .dev = {
-+ .platform_data = &fsmc_data,
-+ },
-+ .num_resources = ARRAY_SIZE(fsmc_resources),
-+ .resource = fsmc_resources,
-+};
+
+#ifdef CONFIG_MTD
++
+static struct resource nandflash_resources[] = {
+ [0] = {
+ .name = "cmem_address",
@@ -15427,15 +17673,15 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+#define NAND_STM_LP_OPTIONS \
+ (NAND_BUSWIDTH_16 | NAND_COPYBACK | NAND_CACHEPRG | NAND_NO_PADDING)
+
-+int nomadik_nandflash_exit(void)
++static int nomadik_nandflash_exit(void)
+{
+ return 0;
+
+}
-+int nomadik_nandflash_init(void)
++static int nomadik_nandflash_init(void)
+{
-+ /*
-+ * FSMC initialization
++ /*
++ * FSMC initialization
+ * 0x0000001e => PCR0
+ * 0x000d0a00 => PMEM0
+ * 0x00100a00 => PATT0
@@ -15449,12 +17695,22 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ nmdknand_pin_config.debounce = GPIO_DEBOUNCE_UNCHANGED;
+ nmdknand_pin_config.dev_name = "nand";
+ /*nomadik_gpio_allocatepin(NAND_GPIO, &nand_handle);ppw */
-+ nomadik_gpio_setpinconfig(NAND_GPIO, &nmdknand_pin_config);
-+ nomadik_gpio_writepin(NAND_GPIO, 1, nmdknand_pin_config.dev_name);
++ if(nomadik_gpio_setpinconfig(NAND_GPIO, &nmdknand_pin_config))
++ return -1;
++ if(nomadik_gpio_writepin(NAND_GPIO, 1, nmdknand_pin_config.dev_name))
++ return -1;
++
++
+ /*Following Settings done for NAND flash protect off */
-+ nomadik_gpio_setpinconfig(NAND_FLASH_PROTOFF, &nmdknand_pin_config);
-+ nomadik_gpio_writepin(NAND_FLASH_PROTOFF, 1, nmdknand_pin_config.dev_name);
-+ nomadik_gpio_resetpinconfig(NAND_FLASH_PROTOFF, nmdknand_pin_config.dev_name);
++ /* this was moved from board init to here */
++ /* This pin Conflicts with touchpanel TOUCHP_CS0*/
++ if(nomadik_gpio_setpinconfig(NAND_FLASH_PROTOFF, &nmdknand_pin_config))
++ return -1;
++ if(nomadik_gpio_writepin(NAND_FLASH_PROTOFF, 1, nmdknand_pin_config.dev_name))
++ return -1;
++ if(nomadik_gpio_resetpinconfig(NAND_FLASH_PROTOFF, nmdknand_pin_config.dev_name ))
++ return -1;
++
+
+ *((volatile unsigned long *)(NOMADIK_FSMC_VA + FSMC_PCR0)) =
+ DEFAULT_PCR0_VALUE;
@@ -15465,7 +17721,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ return 0;
+}
+
-+const unsigned char lookup_t[256] = {
++static const unsigned char lookup_t[256] = {
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
@@ -15571,17 +17827,22 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+}
+
+static struct nand_ecclayout nand_oob = {
-+
+ .eccbytes = 12,
-+
-+
-+
+ .eccpos = {2, 3, 4, 18, 19, 20, 34, 35, 36, 50, 51, 52},
+ .oobavail = MTD_NANDECC_AUTOPLACE,
-+ .oobfree = {
++ .oobfree = {
+ { .offset = 8,
+ .length = 8,
+ },
++ { .offset = 24,
++ .length = 8,
++ },
++ { .offset = 40,
++ .length = 8,
++ },
++ { .offset = 56,
++ .length = 8,
++ },
+ },
+};
+
@@ -15607,9 +17868,9 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ .size = 800 * 0x000020000}, /*100 Mbytes */
+};
+
-+uint8_t scan_ff_pattern[] = { 0xff, 0xff };
++static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
+
-+struct nand_bbt_descr bbt_desc = {
++static struct nand_bbt_descr bbt_desc = {
+ .options = 0,
+ .offs = 0,
+ .len = 2,
@@ -15709,23 +17970,6 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+
+#endif
+
-+#undef NMDK_DEBUG /*board*/
-+#undef NMDK_DEBUG_PFX
-+#undef NMDK_DBG
-+
-+
-+#ifdef CONFIG_SMC91X
-+static void nomadik_smc91x_irq_init(void)
-+{
-+ /* Reset ethernet controller */
-+ nomadik_epio_write_aux_gpo1(nomadik_epio_read_aux_gpo1() &
-+ (unsigned long)(~LAN_RST));
-+ /* Enabling ethernet interrupts */
-+ nomadik_epio_write_cob_ctl(nomadik_epio_read_cob_ctl() & (u16)(~GPIO106_LAN_IT));
-+ /*type need to be set in case of shared irq */
-+ set_irq_type(IRQNO_GPIO(SMC91111_IRQ), SA_TRIGGER_RISING);
-+}
-+
+static struct resource smc91x_resources[] = {
+ [0] = {
+ .name = "smc91x-regs",
@@ -15746,12 +17990,10 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ .num_resources = ARRAY_SIZE(smc91x_resources),
+ .resource = smc91x_resources,
+};
-+#endif
+
+/*
+ * touchpanel
+ */
-+#ifdef CONFIG_TOUCHSCREEN_NOMADIK
+#ifndef TOUCHP_DEBUG
+#define TOUCHP_DEBUG 0 /* default debug messages are disabled */
+#endif /* */
@@ -15792,44 +18034,37 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+gpio_error nomadik_tp_gpio_board_init(struct t_adsContext * p_adsContext)
+{
+ gpio_error status = GPIO_OK;
-+
++ gpio_config config_cspin;
++ gpio_data touchp_cs1;
+ nmdk_dbg_ftrace();
++
+ nomadik_epio_write_cob_ctl(nomadik_epio_read_cob_ctl() | BIOS_TCHSCR);
+
-+#if defined TOUCHP_CS0 && defined TOUCHP_CS1
-+ {
-+ gpio_config config_cspin;
+ /* Set SPICSn_TCHSCR pin configuration */
+ config_cspin.mode = GPIO_MODE_SOFTWARE;
+ config_cspin.direction = GPIO_DIR_OUTPUT;
+ config_cspin.debounce = GPIO_DEBOUNCE_DISABLE;
+ config_cspin.dev_name = "Touchp";
-+ status = nomadik_gpio_setpinconfig(TOUCHP_CS0, &config_cspin);
-+ if (status) {
-+ nmdk_error("GPIO %d configuration failure (nmdk_error:%d)",
-+ TOUCHP_CS0, status);
-+ goto err_TOUCHP_CS0;
++ /*
++ * TOUCHP_CS1 need to be high always to select ad7843 cs properly
++ * this pin will be set high by nand_init(NAND_PROT_OFF)
++ * if this pin is not high and set it high
++ */
++ status |= nomadik_gpio_readpin(TOUCHP_CS1, &touchp_cs1);
++ if (!touchp_cs1) {
++ status |= nomadik_gpio_setpinconfig(TOUCHP_CS1, &config_cspin);
++ status |= nomadik_gpio_writepin(TOUCHP_CS1, 1, config_cspin.dev_name);
++ status |= nomadik_gpio_resetpinconfig(TOUCHP_CS1, config_cspin.dev_name);
+ }
-+
-+ status = nomadik_gpio_setpinconfig(TOUCHP_CS1, &config_cspin);
++ status |= nomadik_gpio_setpinconfig(TOUCHP_CS0, &config_cspin);
+ if (status) {
+ nmdk_error("GPIO %d configuration failure (nmdk_error:%d)",
-+ TOUCHP_CS1, status);
-+ goto err_TOUCHP_CS1;
-+ }
++ TOUCHP_CS0, status);
++ return (status);
+ }
-+#endif
+ /* Set PENIRQ pin configuration */
-+ set_irq_type(p_adsContext->irq, SA_TRIGGER_FALLING);
-+
-+ return status;
-+
-+#if defined TOUCHP_CS0 && defined TOUCHP_CS1
-+ err_TOUCHP_CS1:
-+ nomadik_gpio_resetpinconfig(TOUCHP_CS1, "Touchp");
-+ err_TOUCHP_CS0:
++ set_irq_type(p_adsContext->irq, SA_TRIGGER_RISING);
+ return status;
-+#endif
+}
+
+/**
@@ -15843,10 +18078,12 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ gpio_error status = GPIO_OK;
+
+ nmdk_dbg_ftrace();
-+#if defined TOUCHP_CS0 && defined TOUCHP_CS1
++ /* Enable CPLD logic for access/interrupts on ndk15 in case of int mode */
++ if (!p_adsContext->mode) {
++ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() &
++ (u16)~TSIT_MSK);
++ }
+ status |= nomadik_gpio_resetpinconfig(TOUCHP_CS0, "Touchp");
-+ status |= nomadik_gpio_resetpinconfig(TOUCHP_CS1, "Touchp");
-+#endif
+ nomadik_epio_write_cob_ctl(nomadik_epio_read_cob_ctl() & (u16)~BIOS_TCHSCR);
+ return status;
+}
@@ -15857,11 +18094,10 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+t_bool nomadik_tp_pen_down(struct t_adsContext * p_adsContext)
+{
+ gpio_data pen_down;
-+
+ nmdk_dbg_ftrace();
-+ nomadik_gpio_readpin(GPIO_PIN_FOR_IRQ(p_adsContext->irq), &pen_down);
-+ nmdk_dbg2("pen_down = 0x%d (pin%d)",
-+ pen_down, GPIO_PIN_FOR_IRQ(p_adsContext->irq));
++ pen_down = nomadik_epio_read_aux_gpi1();
++ pen_down &= TCHSCR_PENIRQ;
++ nmdk_dbg2("pen_down = 0x%d", pen_down);
+ return ((t_bool) pen_down);
+}
+
@@ -15871,7 +18107,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+void nomadik_tp_pen_down_irq_enable(struct t_adsContext *p_adsContext)
+{
+ nmdk_dbg_ftrace();
-+ enable_irq(p_adsContext->irq);
++ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() | TSIT_MSK);
+}
+
+/**
@@ -15880,7 +18116,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+void nomadik_tp_pen_down_irq_disable(struct t_adsContext *p_adsContext)
+{
+ nmdk_dbg_ftrace();
-+ disable_irq(p_adsContext->irq);
++ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() &
++ (unsigned short)(~TSIT_MSK));
+}
+
+/**
@@ -15891,10 +18128,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+void nomadik_tp_spi_cs_disable(void)
+{
+ nmdk_dbg_ftrace();
-+#if defined TOUCHP_CS0 && defined TOUCHP_CS1
+ nomadik_gpio_writepin(TOUCHP_CS0, 1, "Touchp");
-+ nomadik_gpio_writepin(TOUCHP_CS1, 1, "Touchp");
-+#endif
+}
+
+/**
@@ -15905,10 +18139,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+void nomadik_tp_spi_cs_enable(void)
+{
+ nmdk_dbg_ftrace();
-+#if defined TOUCHP_CS0 && defined TOUCHP_CS1
+ nomadik_gpio_writepin(TOUCHP_CS0, 0, "Touchp");
-+ nomadik_gpio_writepin(TOUCHP_CS1, 1, "Touchp");
-+#endif
+}
+
+static struct touchp_device touchp_board = {
@@ -15920,7 +18151,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ .pirq_dis = nomadik_tp_pen_down_irq_disable,
+ .cs_en = nomadik_tp_spi_cs_disable,
+ .cs_dis = nomadik_tp_spi_cs_enable,
-+ .samples = 100, /*samples per second*/
++ .samples = 20, /*samples per second*/
+ .pollsamples = 10, /*polling per second*/
+};
+
@@ -15941,17 +18172,15 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ .num_resources = ARRAY_SIZE(touchp_resources),
+ .resource = touchp_resources,
+};
-+#undef NMDK_DEBUG
-+#undef NMDK_DEBUG_PFX
-+#undef NMDK_DBG
-+#endif
+
-+#ifdef CONFIG_KEYPAD_NOMADIK
+#define KEYPAD_NAME "KEYPAD"
+#ifndef KEYPAD_DEBUG
+#define KEYPAD_DEBUG 0
+#endif
+
++#undef NMDK_DEBUG
++#undef NMDK_DEBUG_PFX
++#undef NMDK_DBG
+#define NMDK_DEBUG KEYPAD_DEBUG /* enables/disables nmdk_dbg msgs */
+#define NMDK_DEBUG_PFX KEYPAD_NAME /* msg header represents this module */
+#define NMDK_DBG KERN_ERR /* message level */
@@ -16088,8 +18317,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ }
+ if (!kp->mode) { /* true if interrupt mode operation */
+ /* pull down all rows to detect any keypress */
-+ nomadik_epio_write_keypad(KSCAN_ALLROWS);
-+ set_irq_type(kp->irq, SA_TRIGGER_FALLING);
++ nomadik_epio_write_keypad(0x00);
++ /* enable keypad interrupt through CPLD logic */
++ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() |
++ KEYP_MSK);
++ set_irq_type(kp->irq, SA_TRIGGER_RISING);
+ /*
+ * TBD logic should be added to detect proper switch settings
+ * on a board to detect valid interrupt
@@ -16107,8 +18339,6 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+int nomadik_kp_exit_key_hardware(struct keypad_t *kp)
+{
+ nmdk_dbg_ftrace();
-+ /* pull up all columns so that interrupt will not be raised*/
-+ nomadik_epio_write_keypad(KSCAN_ALLCOLS |KSCAN_ALLCOLS);
+ return 0;
+}
+
@@ -16119,7 +18349,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ */
+int nomadik_kp_key_irqen(struct keypad_t *kp)
+{
-+ /*enable_irq(kp->irq);*/
++ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() | KEYP_MSK);
+ return 0;
+}
+
@@ -16130,7 +18360,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ */
+int nomadik_kp_key_irqdis(struct keypad_t *kp)
+{
-+ /*disable_irq(kp->irq);*/
++ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() &
++ (unsigned short)(~KEYP_MSK));
+ return 0;
+}
+
@@ -16180,35 +18411,78 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ .num_resources = ARRAY_SIZE(keypad_resources),
+ .resource = keypad_resources,
+};
-+#undef NMDK_DEBUG
-+#undef NMDK_DEBUG_PFX
-+#undef NMDK_DBG
-+#endif
++
++static struct resource fsmc_resources[] = {
++ [0] = {
++ .start = NOMADIK_FSMC_BASE,
++ .end = NOMADIK_FSMC_BASE + SZ_4K - 1,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++static int fsmc_platform_init(void)
++{
++ unsigned char __iomem *fsmc_base;
++
++ nmdk_dbg_ftrace();
++ /*Following Settings done for NAND flash protect off */
++ fsmc_base = (unsigned char *)IO_ADDRESS(NOMADIK_FSMC_BASE);
++
++ /* for NOR accesss */
++ /* Initialize the fsmc bank 0 */
++ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BCR0)) = 0x10db;
++ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BTR0)) = 0x03333333;
++ /* Initialize the fsmc bank 1 used for ethernet controller */
++ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BCR1)) = 0x10db;
++ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BTR1)) = 0x00000702; /*old 00000702 */
++
++ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BCR0)) |= 0x80;
++ /* Above Settings done for NAND flash protect off */
++ return 0;
++}
++
++struct fsmc_platform_data fsmc_data = {
++ .init = fsmc_platform_init,
++};
++
++static struct platform_device fsmc_device = {
++ .name = "NOMADIK-FSMC",
++ .id = 0,
++ .dev = {
++ .platform_data = &fsmc_data,
++ },
++ .num_resources = ARRAY_SIZE(fsmc_resources),
++ .resource = fsmc_resources,
++};
+
+#ifdef CONFIG_CPLD_I2C
-+#define EPIO_NAME "EPIO"
-+#ifndef EPIO_DEBUG
-+#define EPIO_DEBUG 0
-+#endif
++static void nomadik_smc91x_irq_init(void)
++{
++ nmdk_dbg_ftrace();
++ /* Reset ethernet controller */
++ nomadik_epio_write_aux_gpo1(nomadik_epio_read_aux_gpo1() &
++ (unsigned long)(~LAN_RST));
++ /* Enabling ethernet interrupts */
++ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() | LAN_MSK);
++ /*type need to be set in case of shared irq */
++ set_irq_type(IRQNO_GPIO(SMC91111_IRQ), SA_TRIGGER_RISING);
++}
+
-+#define NMDK_DEBUG EPIO_DEBUG /* enables/disables nmdk_dbg msgs */
-+#define NMDK_DEBUG_PFX EPIO_NAME /* msg header represents this module */
-+#define NMDK_DBG KERN_ERR /* message level */
-+
+static void nomadik_epio_plat_init(void)
+{
+ nmdk_dbg_ftrace();
+ /* Initializing CPLD registers for initial values */
-+ nomadik_epio_write_cob_ctl(0x0030); /* reset value */
++ nomadik_epio_write_cob_ctl(0x0001); /* reset value led on */
+ nomadik_epio_write_keypad(0xff00); /* COL7:0 set to high Z */
-+ nomadik_epio_write_msp_conf(0x794); /* reset value */
-+ nomadik_epio_write_uart_conf(0x0694); /* UART1 enabled for rs232 port*/
-+ nomadik_epio_write_ssp_conf(0x0124); /* reset value */
-+ nomadik_epio_write_aux_gpo1(0x2880); /* reset value */
-+ nomadik_epio_write_aux_gpo2(0x018a); /* reset value */
-+#ifdef CONFIG_SMC91X
++ //nomadik_epio_write_msp_conf(0x0000); /* reset value */
++ nomadik_epio_write_msp_conf(CDC_MSP0); /* reset value */
++ nomadik_epio_write_uart_conf(DBG_UART1);/* UART1 enabled for rs232 port*/
++ nomadik_epio_write_ssp_conf(0x0000); /* reset value */
++ nomadik_epio_write_aux_gpo1(0x6888); /* reset value */
++ nomadik_epio_write_aux_gpi1(0x0000); /* reset value */
++ nomadik_epio_write_it_mngt(0x0000); /* all interrupts masked */
++
+ nomadik_smc91x_irq_init();
-+#endif
+}
+
+static struct platform_device epio_device = {
@@ -16218,25 +18492,16 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+ .platform_data = nomadik_epio_plat_init,
+ },
+};
-+#undef NMDK_DEBUG
-+#undef NMDK_DEBUG_PFX
-+#undef NMDK_DBG
-+#endif /*CONFIG_CPLD_I2C*/
++#endif
+
+static struct platform_device *nmdk_platform_devices[] __initdata = {
+ &fsmc_device,
-+#ifdef CONFIG_CPLD_I2C
++#ifdef CONFIG_CPLD_I2C
+ &epio_device,
+#endif
-+#ifdef CONFIG_KEYPAD_NOMADIK
+ &keypad_device,
-+#endif
-+#ifdef CONFIG_SMC91X
+ &smc91x_device,
-+#endif
-+#ifdef CONFIG_TOUCHSCREEN_NOMADIK
+ &touchp_device,
-+#endif
+#ifdef CONFIG_MTD
+ &nomadik_nand_flash,
+ &nomadik_nor_flash,
@@ -16247,14 +18512,184 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c ../new/linux-
+{
+ platform_add_devices(nmdk_platform_devices,
+ ARRAY_SIZE(nmdk_platform_devices));
++ device_init_wakeup(&keypad_device.dev, 1);
++ device_init_wakeup(&touchp_device.dev, 1);
+}
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c
---- linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c 2008-09-17 13:23:32.000000000 +0530
-@@ -0,0 +1,1001 @@
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_03_Kconfig
+@@ -0,0 +1,37 @@
++if NOMADIK_NDK15_REV2_B_03
++
++comment "Nomadik chip used STn8815S22 cut A0 (marked STN8815AAS22)"
++comment "Target board CPLD version 2.0.1.0"
++
++#target name configuration for this target
++config NOMADIK_TARGET
++ string
++ default NDK15_Rev2_B_03
++
++# nomadik cpld identification name for this target
++config NOMADIK_CPLD_V2010
++ bool
++ default y
++
++# nomadik soc chip name configuration for this targe
++config NOMADIK_SOC
++ string
++ default stn8815
++
++# nomadik platform name configuration for this targe
++config NOMADIK_PLATFORM
++ string
++ default ndk15
++
++# EXTRA_CFLAGS configuration for this target
++config NOMADIK_TARGET_EXTRA_CFLAGS
++ string
++ default "-D__RELEASE -D__STN_8815=10"
++
++
++# Basic platform type configuration for this targe
++config NOMADIK_NDK15
++ bool
++ default y
++
++endif
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_05_Kconfig
+@@ -0,0 +1,37 @@
++if NOMADIK_NDK15_REV2_B_05
++
++comment "Nomadik chip used STn8815S22 cut A0 (marked STN8815AAS22H11 Secure)"
++comment "Target board CPLD version 2.0.1.0"
++
++#target name configuration for this target
++config NOMADIK_TARGET
++ string
++ default NDK15_Rev2_B_05
++
++# nomadik cpld identification name for this target
++config NOMADIK_CPLD_V2010
++ bool
++ default y
++
++# nomadik soc chip name configuration for this targe
++config NOMADIK_SOC
++ string
++ default stn8815
++
++# nomadik platform name configuration for this targe
++config NOMADIK_PLATFORM
++ string
++ default ndk15
++
++# EXTRA_CFLAGS configuration for this target
++config NOMADIK_TARGET_EXTRA_CFLAGS
++ string
++ default "-D__RELEASE -D__STN_8815=10"
++
++
++# Basic platform type configuration for this targe
++config NOMADIK_NDK15
++ bool
++ default y
++
++endif
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_06_Kconfig
+@@ -0,0 +1,42 @@
++if NOMADIK_NDK15_REV2_B_06
++
++comment "Nomadik chip used STn8815S22 cut B0 (marked STN8815BBS22H11 Secure)"
++comment "Target board CPLD version 2.0.1.0"
++
++#target name configuration for this target
++config NOMADIK_TARGET
++ string
++ default NDK15_Rev2_B_06
++
++# nomadik cpld identification name for this target
++config NOMADIK_CPLD_V2010
++ bool
++ default y
++
++# nomadik soc chip name configuration for this targe
++config NOMADIK_SOC
++ string
++ default stn8815
++
++# nomadik soc chip cut name configuration for this targe only
++config NOMADIK_STN8815BBS22H11
++ bool
++ default y
++
++# nomadik platform name configuration for this targe
++config NOMADIK_PLATFORM
++ string
++ default ndk15
++
++# EXTRA_CFLAGS configuration for this target
++config NOMADIK_TARGET_EXTRA_CFLAGS
++ string
++ default "-D__RELEASE -D__STN_8815=20 "
++
++
++# Basic platform type configuration for this targe
++config NOMADIK_NDK15
++ bool
++ default y
++
++endif
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev3_c_02_Kconfig
+@@ -0,0 +1,42 @@
++if NOMADIK_NDK15_REV3_C_02
++
++comment "Nomadik chip used STn8815 cutC0 (marked STN8815CAS22H11 Secure)"
++comment "Target board CPLD version 3.0.1.2"
++
++#target name configuration for this target
++config NOMADIK_TARGET
++ string
++ default NDK15_Rev3_C_02
++
++# nomadik cpld identification name for this target
++config NOMADIK_CPLD_V3012
++ bool
++ default y
++
++# nomadik soc chip name configuration for this target
++config NOMADIK_SOC
++ string
++ default stn8815
++
++# nomadik soc chip cut name configuration for this targe only
++config NOMADIK_STN8815CAS22H11
++ bool
++ default y
++
++# nomadik platform name configuration for this targe
++config NOMADIK_PLATFORM
++ string
++ default ndk15c02
++
++# EXTRA_CFLAGS configuration for this target
++config NOMADIK_TARGET_EXTRA_CFLAGS
++ string
++ default "-D__RELEASE -D__STN_8815=30 "
++
++
++# Basic platform type configuration for this targe
++config NOMADIK_NDK15
++ bool
++ default y
++
++endif
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/ndk15c02_devices.c
+@@ -0,0 +1,1023 @@
+/*
-+ * linux/arch/arm/mach-nomadik/ndk15_devices.c
-+ *
++ * linux/arch/arm/mach-nomadik/ndk15c02_devices.c
+ *
+ * Copyright (C) STMicroelectronics
+ *
@@ -16262,7 +18697,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ * it under the terms of the GNU General Public License version 2, as
+ * published by the Free Software Foundation.
+ *
-+ * NDK15B0x board specifc driver defination
++ * NDK15C02 board specifc driver defination
+ */
+#include <linux/types.h>
+#include <linux/kernel.h>
@@ -16332,6 +18767,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ /* not implimented for this board */
+}
+
++//#ifdef CONFIG_MMC_NOMADIK
+/*
+ * Settings to configure MMC controller for NDK10
+ */
@@ -16384,9 +18820,52 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ nomadik_gpio_altfuncdisable(GPIO_ALT_SD_CARD, dev->dev.bus_id);
+ nomadik_gpio_resetpinconfig(GPIO_PIN_75, dev->dev.bus_id);
+}
++//#endif
+
-+#ifdef CONFIG_MTD
++static int fsmc_platform_init(void)
++{
++ unsigned char __iomem *fsmc_base;
++
++ nmdk_dbg_ftrace();
++ /*Following Settings done for NAND flash protect off */
++ fsmc_base = (unsigned char *)IO_ADDRESS(NOMADIK_FSMC_BASE);
++
++ /* for NOR accesss */
++ /* Initialize the fsmc bank 0 */
++ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BCR0)) = 0x10db;
++ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BTR0)) = 0x03333333;
++ /* Initialize the fsmc bank 1 used for ethernet controller */
++ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BCR1)) = 0x10db;
++ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BTR1)) = 0x00000702; /*old 00000702 */
++
++ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BCR0)) |= 0x80;
++ /* Above Settings done for NAND flash protect off */
++ return 0;
++}
++
++static struct resource fsmc_resources[] = {
++ [0] = {
++ .start = NOMADIK_FSMC_BASE,
++ .end = NOMADIK_FSMC_BASE + SZ_4K - 1,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++struct fsmc_platform_data fsmc_data = {
++ .init = fsmc_platform_init,
++};
++
++static struct platform_device fsmc_device = {
++ .name = "NOMADIK-FSMC",
++ .id = 0,
++ .dev = {
++ .platform_data = &fsmc_data,
++ },
++ .num_resources = ARRAY_SIZE(fsmc_resources),
++ .resource = fsmc_resources,
++};
+
++#ifdef CONFIG_MTD
+static struct resource nandflash_resources[] = {
+ [0] = {
+ .name = "cmem_address",
@@ -16411,15 +18890,15 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+#define NAND_STM_LP_OPTIONS \
+ (NAND_BUSWIDTH_16 | NAND_COPYBACK | NAND_CACHEPRG | NAND_NO_PADDING)
+
-+static int nomadik_nandflash_exit(void)
++int nomadik_nandflash_exit(void)
+{
+ return 0;
+
+}
-+static int nomadik_nandflash_init(void)
++int nomadik_nandflash_init(void)
+{
-+ /*
-+ * FSMC initialization
++ /*
++ * FSMC initialization
+ * 0x0000001e => PCR0
+ * 0x000d0a00 => PMEM0
+ * 0x00100a00 => PATT0
@@ -16433,22 +18912,12 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ nmdknand_pin_config.debounce = GPIO_DEBOUNCE_UNCHANGED;
+ nmdknand_pin_config.dev_name = "nand";
+ /*nomadik_gpio_allocatepin(NAND_GPIO, &nand_handle);ppw */
-+ if(nomadik_gpio_setpinconfig(NAND_GPIO, &nmdknand_pin_config))
-+ return -1;
-+ if(nomadik_gpio_writepin(NAND_GPIO, 1, nmdknand_pin_config.dev_name))
-+ return -1;
-+
-+
++ nomadik_gpio_setpinconfig(NAND_GPIO, &nmdknand_pin_config);
++ nomadik_gpio_writepin(NAND_GPIO, 1, nmdknand_pin_config.dev_name);
+ /*Following Settings done for NAND flash protect off */
-+ /* this was moved from board init to here */
-+ /* This pin Conflicts with touchpanel TOUCHP_CS0*/
-+ if(nomadik_gpio_setpinconfig(NAND_FLASH_PROTOFF, &nmdknand_pin_config))
-+ return -1;
-+ if(nomadik_gpio_writepin(NAND_FLASH_PROTOFF, 1, nmdknand_pin_config.dev_name))
-+ return -1;
-+ if(nomadik_gpio_resetpinconfig(NAND_FLASH_PROTOFF, nmdknand_pin_config.dev_name ))
-+ return -1;
-+
++ nomadik_gpio_setpinconfig(NAND_FLASH_PROTOFF, &nmdknand_pin_config);
++ nomadik_gpio_writepin(NAND_FLASH_PROTOFF, 1, nmdknand_pin_config.dev_name);
++ nomadik_gpio_resetpinconfig(NAND_FLASH_PROTOFF, nmdknand_pin_config.dev_name);
+
+ *((volatile unsigned long *)(NOMADIK_FSMC_VA + FSMC_PCR0)) =
+ DEFAULT_PCR0_VALUE;
@@ -16459,7 +18928,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ return 0;
+}
+
-+static const unsigned char lookup_t[256] = {
++const unsigned char lookup_t[256] = {
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
@@ -16565,22 +19034,17 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+}
+
+static struct nand_ecclayout nand_oob = {
++
+ .eccbytes = 12,
++
++
++
+ .eccpos = {2, 3, 4, 18, 19, 20, 34, 35, 36, 50, 51, 52},
+ .oobavail = MTD_NANDECC_AUTOPLACE,
-+ .oobfree = {
++ .oobfree = {
+ { .offset = 8,
+ .length = 8,
+ },
-+ { .offset = 24,
-+ .length = 8,
-+ },
-+ { .offset = 40,
-+ .length = 8,
-+ },
-+ { .offset = 56,
-+ .length = 8,
-+ },
+ },
+};
+
@@ -16606,9 +19070,9 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ .size = 800 * 0x000020000}, /*100 Mbytes */
+};
+
-+static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
++uint8_t scan_ff_pattern[] = { 0xff, 0xff };
+
-+static struct nand_bbt_descr bbt_desc = {
++struct nand_bbt_descr bbt_desc = {
+ .options = 0,
+ .offs = 0,
+ .len = 2,
@@ -16708,6 +19172,23 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+
+#endif
+
++#undef NMDK_DEBUG /*board*/
++#undef NMDK_DEBUG_PFX
++#undef NMDK_DBG
++
++
++#ifdef CONFIG_SMC91X
++static void nomadik_smc91x_irq_init(void)
++{
++ /* Reset ethernet controller */
++ nomadik_epio_write_aux_gpo1(nomadik_epio_read_aux_gpo1() &
++ (unsigned long)(~LAN_RST));
++ /* Enabling ethernet interrupts */
++ nomadik_epio_write_cob_ctl(nomadik_epio_read_cob_ctl() & (u16)(~GPIO106_LAN_IT));
++ /*type need to be set in case of shared irq */
++ set_irq_type(IRQNO_GPIO(SMC91111_IRQ), SA_TRIGGER_RISING);
++}
++
+static struct resource smc91x_resources[] = {
+ [0] = {
+ .name = "smc91x-regs",
@@ -16728,10 +19209,12 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ .num_resources = ARRAY_SIZE(smc91x_resources),
+ .resource = smc91x_resources,
+};
++#endif
+
+/*
+ * touchpanel
+ */
++#ifdef CONFIG_TOUCHSCREEN_NOMADIK
+#ifndef TOUCHP_DEBUG
+#define TOUCHP_DEBUG 0 /* default debug messages are disabled */
+#endif /* */
@@ -16772,37 +19255,44 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+gpio_error nomadik_tp_gpio_board_init(struct t_adsContext * p_adsContext)
+{
+ gpio_error status = GPIO_OK;
-+ gpio_config config_cspin;
-+ gpio_data touchp_cs1;
-+ nmdk_dbg_ftrace();
+
++ nmdk_dbg_ftrace();
+ nomadik_epio_write_cob_ctl(nomadik_epio_read_cob_ctl() | BIOS_TCHSCR);
+
++#if defined TOUCHP_CS0 && defined TOUCHP_CS1
++ {
++ gpio_config config_cspin;
+ /* Set SPICSn_TCHSCR pin configuration */
+ config_cspin.mode = GPIO_MODE_SOFTWARE;
+ config_cspin.direction = GPIO_DIR_OUTPUT;
+ config_cspin.debounce = GPIO_DEBOUNCE_DISABLE;
+ config_cspin.dev_name = "Touchp";
-+ /*
-+ * TOUCHP_CS1 need to be high always to select ad7843 cs properly
-+ * this pin will be set high by nand_init(NAND_PROT_OFF)
-+ * if this pin is not high and set it high
-+ */
-+ status |= nomadik_gpio_readpin(TOUCHP_CS1, &touchp_cs1);
-+ if (!touchp_cs1) {
-+ status |= nomadik_gpio_setpinconfig(TOUCHP_CS1, &config_cspin);
-+ status |= nomadik_gpio_writepin(TOUCHP_CS1, 1, config_cspin.dev_name);
-+ status |= nomadik_gpio_resetpinconfig(TOUCHP_CS1, config_cspin.dev_name);
-+ }
-+ status |= nomadik_gpio_setpinconfig(TOUCHP_CS0, &config_cspin);
++ status = nomadik_gpio_setpinconfig(TOUCHP_CS0, &config_cspin);
+ if (status) {
+ nmdk_error("GPIO %d configuration failure (nmdk_error:%d)",
+ TOUCHP_CS0, status);
-+ return (status);
++ goto err_TOUCHP_CS0;
++ }
++
++ status = nomadik_gpio_setpinconfig(TOUCHP_CS1, &config_cspin);
++ if (status) {
++ nmdk_error("GPIO %d configuration failure (nmdk_error:%d)",
++ TOUCHP_CS1, status);
++ goto err_TOUCHP_CS1;
+ }
++ }
++#endif
+ /* Set PENIRQ pin configuration */
-+ set_irq_type(p_adsContext->irq, SA_TRIGGER_RISING);
++ set_irq_type(p_adsContext->irq, SA_TRIGGER_FALLING);
++
+ return status;
++
++#if defined TOUCHP_CS0 && defined TOUCHP_CS1
++ err_TOUCHP_CS1:
++ nomadik_gpio_resetpinconfig(TOUCHP_CS1, "Touchp");
++ err_TOUCHP_CS0:
++ return status;
++#endif
+}
+
+/**
@@ -16816,12 +19306,10 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ gpio_error status = GPIO_OK;
+
+ nmdk_dbg_ftrace();
-+ /* Enable CPLD logic for access/interrupts on ndk15 in case of int mode */
-+ if (!p_adsContext->mode) {
-+ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() &
-+ (u16)~TSIT_MSK);
-+ }
++#if defined TOUCHP_CS0 && defined TOUCHP_CS1
+ status |= nomadik_gpio_resetpinconfig(TOUCHP_CS0, "Touchp");
++ status |= nomadik_gpio_resetpinconfig(TOUCHP_CS1, "Touchp");
++#endif
+ nomadik_epio_write_cob_ctl(nomadik_epio_read_cob_ctl() & (u16)~BIOS_TCHSCR);
+ return status;
+}
@@ -16832,10 +19320,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+t_bool nomadik_tp_pen_down(struct t_adsContext * p_adsContext)
+{
+ gpio_data pen_down;
++
+ nmdk_dbg_ftrace();
-+ pen_down = nomadik_epio_read_aux_gpi1();
-+ pen_down &= TCHSCR_PENIRQ;
-+ nmdk_dbg2("pen_down = 0x%d", pen_down);
++ nomadik_gpio_readpin(GPIO_PIN_FOR_IRQ(p_adsContext->irq), &pen_down);
++ nmdk_dbg2("pen_down = 0x%d (pin%d)",
++ pen_down, GPIO_PIN_FOR_IRQ(p_adsContext->irq));
+ return ((t_bool) pen_down);
+}
+
@@ -16845,7 +19334,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+void nomadik_tp_pen_down_irq_enable(struct t_adsContext *p_adsContext)
+{
+ nmdk_dbg_ftrace();
-+ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() | TSIT_MSK);
++ enable_irq(p_adsContext->irq);
+}
+
+/**
@@ -16854,8 +19343,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+void nomadik_tp_pen_down_irq_disable(struct t_adsContext *p_adsContext)
+{
+ nmdk_dbg_ftrace();
-+ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() &
-+ (unsigned short)(~TSIT_MSK));
++ disable_irq(p_adsContext->irq);
+}
+
+/**
@@ -16866,7 +19354,10 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+void nomadik_tp_spi_cs_disable(void)
+{
+ nmdk_dbg_ftrace();
++#if defined TOUCHP_CS0 && defined TOUCHP_CS1
+ nomadik_gpio_writepin(TOUCHP_CS0, 1, "Touchp");
++ nomadik_gpio_writepin(TOUCHP_CS1, 1, "Touchp");
++#endif
+}
+
+/**
@@ -16877,7 +19368,10 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+void nomadik_tp_spi_cs_enable(void)
+{
+ nmdk_dbg_ftrace();
++#if defined TOUCHP_CS0 && defined TOUCHP_CS1
+ nomadik_gpio_writepin(TOUCHP_CS0, 0, "Touchp");
++ nomadik_gpio_writepin(TOUCHP_CS1, 1, "Touchp");
++#endif
+}
+
+static struct touchp_device touchp_board = {
@@ -16889,7 +19383,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ .pirq_dis = nomadik_tp_pen_down_irq_disable,
+ .cs_en = nomadik_tp_spi_cs_disable,
+ .cs_dis = nomadik_tp_spi_cs_enable,
-+ .samples = 20, /*samples per second*/
++ .samples = 100, /*samples per second*/
+ .pollsamples = 10, /*polling per second*/
+};
+
@@ -16910,15 +19404,17 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ .num_resources = ARRAY_SIZE(touchp_resources),
+ .resource = touchp_resources,
+};
++#undef NMDK_DEBUG
++#undef NMDK_DEBUG_PFX
++#undef NMDK_DBG
++#endif
+
++#ifdef CONFIG_KEYPAD_NOMADIK
+#define KEYPAD_NAME "KEYPAD"
+#ifndef KEYPAD_DEBUG
+#define KEYPAD_DEBUG 0
+#endif
+
-+#undef NMDK_DEBUG
-+#undef NMDK_DEBUG_PFX
-+#undef NMDK_DBG
+#define NMDK_DEBUG KEYPAD_DEBUG /* enables/disables nmdk_dbg msgs */
+#define NMDK_DEBUG_PFX KEYPAD_NAME /* msg header represents this module */
+#define NMDK_DBG KERN_ERR /* message level */
@@ -17055,11 +19551,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ }
+ if (!kp->mode) { /* true if interrupt mode operation */
+ /* pull down all rows to detect any keypress */
-+ nomadik_epio_write_keypad(0x00);
-+ /* enable keypad interrupt through CPLD logic */
-+ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() |
-+ KEYP_MSK);
-+ set_irq_type(kp->irq, SA_TRIGGER_RISING);
++ nomadik_epio_write_keypad(KSCAN_ALLROWS);
++ set_irq_type(kp->irq, SA_TRIGGER_FALLING);
+ /*
+ * TBD logic should be added to detect proper switch settings
+ * on a board to detect valid interrupt
@@ -17077,6 +19570,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+int nomadik_kp_exit_key_hardware(struct keypad_t *kp)
+{
+ nmdk_dbg_ftrace();
++ /* pull up all columns so that interrupt will not be raised*/
++ nomadik_epio_write_keypad(KSCAN_ALLCOLS |KSCAN_ALLCOLS);
+ return 0;
+}
+
@@ -17087,7 +19582,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ */
+int nomadik_kp_key_irqen(struct keypad_t *kp)
+{
-+ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() | KEYP_MSK);
++ /*enable_irq(kp->irq);*/
+ return 0;
+}
+
@@ -17098,8 +19593,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ */
+int nomadik_kp_key_irqdis(struct keypad_t *kp)
+{
-+ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() &
-+ (unsigned short)(~KEYP_MSK));
++ /*disable_irq(kp->irq);*/
+ return 0;
+}
+
@@ -17149,78 +19643,35 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ .num_resources = ARRAY_SIZE(keypad_resources),
+ .resource = keypad_resources,
+};
++#undef NMDK_DEBUG
++#undef NMDK_DEBUG_PFX
++#undef NMDK_DBG
++#endif
+
-+static struct resource fsmc_resources[] = {
-+ [0] = {
-+ .start = NOMADIK_FSMC_BASE,
-+ .end = NOMADIK_FSMC_BASE + SZ_4K - 1,
-+ .flags = IORESOURCE_MEM,
-+ },
-+};
-+
-+static int fsmc_platform_init(void)
-+{
-+ unsigned char __iomem *fsmc_base;
-+
-+ nmdk_dbg_ftrace();
-+ /*Following Settings done for NAND flash protect off */
-+ fsmc_base = (unsigned char *)IO_ADDRESS(NOMADIK_FSMC_BASE);
-+
-+ /* for NOR accesss */
-+ /* Initialize the fsmc bank 0 */
-+ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BCR0)) = 0x10db;
-+ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BTR0)) = 0x03333333;
-+ /* Initialize the fsmc bank 1 used for ethernet controller */
-+ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BCR1)) = 0x10db;
-+ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BTR1)) = 0x00000702; /*old 00000702 */
-+
-+ *((volatile u32 *)(NOMADIK_FSMC_VA + FSMC_BCR0)) |= 0x80;
-+ /* Above Settings done for NAND flash protect off */
-+ return 0;
-+}
-+
-+struct fsmc_platform_data fsmc_data = {
-+ .init = fsmc_platform_init,
-+};
-+
-+static struct platform_device fsmc_device = {
-+ .name = "NOMADIK-FSMC",
-+ .id = 0,
-+ .dev = {
-+ .platform_data = &fsmc_data,
-+ },
-+ .num_resources = ARRAY_SIZE(fsmc_resources),
-+ .resource = fsmc_resources,
-+};
++#ifdef CONFIG_CPLD_I2C
++#define EPIO_NAME "EPIO"
++#ifndef EPIO_DEBUG
++#define EPIO_DEBUG 0
++#endif
+
-+#ifdef CONFIG_CPLD_I2C
-+static void nomadik_smc91x_irq_init(void)
-+{
-+ nmdk_dbg_ftrace();
-+ /* Reset ethernet controller */
-+ nomadik_epio_write_aux_gpo1(nomadik_epio_read_aux_gpo1() &
-+ (unsigned long)(~LAN_RST));
-+ /* Enabling ethernet interrupts */
-+ nomadik_epio_write_it_mngt(nomadik_epio_read_it_mngt() | LAN_MSK);
-+ /*type need to be set in case of shared irq */
-+ set_irq_type(IRQNO_GPIO(SMC91111_IRQ), SA_TRIGGER_RISING);
-+}
++#define NMDK_DEBUG EPIO_DEBUG /* enables/disables nmdk_dbg msgs */
++#define NMDK_DEBUG_PFX EPIO_NAME /* msg header represents this module */
++#define NMDK_DBG KERN_ERR /* message level */
+
+static void nomadik_epio_plat_init(void)
+{
+ nmdk_dbg_ftrace();
+ /* Initializing CPLD registers for initial values */
-+ nomadik_epio_write_cob_ctl(0x0001); /* reset value led on */
++ nomadik_epio_write_cob_ctl(0x0030); /* reset value */
+ nomadik_epio_write_keypad(0xff00); /* COL7:0 set to high Z */
-+ //nomadik_epio_write_msp_conf(0x0000); /* reset value */
-+ nomadik_epio_write_msp_conf(CDC_MSP0); /* reset value */
-+ nomadik_epio_write_uart_conf(DBG_UART1);/* UART1 enabled for rs232 port*/
-+ nomadik_epio_write_ssp_conf(0x0000); /* reset value */
-+ nomadik_epio_write_aux_gpo1(0x6888); /* reset value */
-+ nomadik_epio_write_aux_gpi1(0x0000); /* reset value */
-+ nomadik_epio_write_it_mngt(0x0000); /* all interrupts masked */
-+
++ nomadik_epio_write_msp_conf(0x794); /* reset value */
++ nomadik_epio_write_uart_conf(0x0694); /* UART1 enabled for rs232 port*/
++ nomadik_epio_write_ssp_conf(0x0124); /* reset value */
++ nomadik_epio_write_aux_gpo1(0x2880); /* reset value */
++ nomadik_epio_write_aux_gpo2(0x018a); /* reset value */
++#ifdef CONFIG_SMC91X
+ nomadik_smc91x_irq_init();
++#endif
+}
+
+static struct platform_device epio_device = {
@@ -17230,16 +19681,25 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+ .platform_data = nomadik_epio_plat_init,
+ },
+};
-+#endif
++#undef NMDK_DEBUG
++#undef NMDK_DEBUG_PFX
++#undef NMDK_DBG
++#endif /*CONFIG_CPLD_I2C*/
+
+static struct platform_device *nmdk_platform_devices[] __initdata = {
+ &fsmc_device,
-+#ifdef CONFIG_CPLD_I2C
++#ifdef CONFIG_CPLD_I2C
+ &epio_device,
+#endif
++#ifdef CONFIG_KEYPAD_NOMADIK
+ &keypad_device,
++#endif
++#ifdef CONFIG_SMC91X
+ &smc91x_device,
++#endif
++#ifdef CONFIG_TOUCHSCREEN_NOMADIK
+ &touchp_device,
++#endif
+#ifdef CONFIG_MTD
+ &nomadik_nand_flash,
+ &nomadik_nor_flash,
@@ -17250,156 +19710,19 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_devices.c ../new/linux-2.6
+{
+ platform_add_devices(nmdk_platform_devices,
+ ARRAY_SIZE(nmdk_platform_devices));
-+ device_init_wakeup(&keypad_device.dev, 1);
-+ device_init_wakeup(&touchp_device.dev, 1);
+}
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_03_Kconfig ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_03_Kconfig
---- linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_03_Kconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_03_Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,37 @@
-+if NOMADIK_NDK15_REV2_B_03
-+
-+comment "Nomadik chip used STn8815S22 cut A0 (marked STN8815AAS22)"
-+comment "Target board CPLD version 2.0.1.0"
-+
-+#target name configuration for this target
-+config NOMADIK_TARGET
-+ string
-+ default NDK15_Rev2_B_03
-+
-+# nomadik cpld identification name for this target
-+config NOMADIK_CPLD_V2010
-+ bool
-+ default y
-+
-+# nomadik soc chip name configuration for this targe
-+config NOMADIK_SOC
-+ string
-+ default stn8815
-+
-+# nomadik platform name configuration for this targe
-+config NOMADIK_PLATFORM
-+ string
-+ default ndk15
-+
-+# EXTRA_CFLAGS configuration for this target
-+config NOMADIK_TARGET_EXTRA_CFLAGS
-+ string
-+ default "-D__RELEASE -D__STN_8815=10"
-+
-+
-+# Basic platform type configuration for this targe
-+config NOMADIK_NDK15
-+ bool
-+ default y
-+
-+endif
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_05_Kconfig ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_05_Kconfig
---- linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_05_Kconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_05_Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,37 @@
-+if NOMADIK_NDK15_REV2_B_05
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/nhk15_Kconfig
+@@ -0,0 +1,36 @@
++if NOMADIK_NHK15
+
-+comment "Nomadik chip used STn8815S22 cut A0 (marked STN8815AAS22H11 Secure)"
-+comment "Target board CPLD version 2.0.1.0"
++comment "Nomadik chip used STn8815"
+
+#target name configuration for this target
+config NOMADIK_TARGET
-+ string
-+ default NDK15_Rev2_B_05
-+
-+# nomadik cpld identification name for this target
-+config NOMADIK_CPLD_V2010
-+ bool
-+ default y
-+
-+# nomadik soc chip name configuration for this targe
-+config NOMADIK_SOC
-+ string
-+ default stn8815
-+
-+# nomadik platform name configuration for this targe
-+config NOMADIK_PLATFORM
-+ string
-+ default ndk15
-+
-+# EXTRA_CFLAGS configuration for this target
-+config NOMADIK_TARGET_EXTRA_CFLAGS
+ string
-+ default "-D__RELEASE -D__STN_8815=10"
-+
-+
-+# Basic platform type configuration for this targe
-+config NOMADIK_NDK15
-+ bool
-+ default y
-+
-+endif
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_06_Kconfig ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_06_Kconfig
---- linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_06_Kconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev2_b_06_Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,42 @@
-+if NOMADIK_NDK15_REV2_B_06
-+
-+comment "Nomadik chip used STn8815S22 cut B0 (marked STN8815BBS22H11 Secure)"
-+comment "Target board CPLD version 2.0.1.0"
-+
-+#target name configuration for this target
-+config NOMADIK_TARGET
-+ string
-+ default NDK15_Rev2_B_06
-+
-+# nomadik cpld identification name for this target
-+config NOMADIK_CPLD_V2010
-+ bool
-+ default y
-+
-+# nomadik soc chip name configuration for this targe
-+config NOMADIK_SOC
-+ string
-+ default stn8815
-+
-+# nomadik soc chip cut name configuration for this targe only
-+config NOMADIK_STN8815BBS22H11
-+ bool
-+ default y
-+
-+# nomadik platform name configuration for this targe
-+config NOMADIK_PLATFORM
-+ string
-+ default ndk15
-+
-+# EXTRA_CFLAGS configuration for this target
-+config NOMADIK_TARGET_EXTRA_CFLAGS
-+ string
-+ default "-D__RELEASE -D__STN_8815=20 "
-+
-+
-+# Basic platform type configuration for this targe
-+config NOMADIK_NDK15
-+ bool
-+ default y
-+
-+endif
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev3_c_02_Kconfig ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev3_c_02_Kconfig
---- linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev3_c_02_Kconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev3_c_02_Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,42 @@
-+if NOMADIK_NDK15_REV3_C_02
-+
-+comment "Nomadik chip used STn8815 cutC0 (marked STN8815CAS22H11 Secure)"
-+comment "Target board CPLD version 3.0.1.2"
-+
-+#target name configuration for this target
-+config NOMADIK_TARGET
-+ string
-+ default NDK15_Rev3_C_02
++ default NHK15
+
-+# nomadik cpld identification name for this target
-+config NOMADIK_CPLD_V3012
-+ bool
-+ default y
-+
+# nomadik soc chip name configuration for this target
+config NOMADIK_SOC
+ string
@@ -17413,23 +19736,22 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ndk15_rev3_c_02_Kconfig ../new/l
+# nomadik platform name configuration for this targe
+config NOMADIK_PLATFORM
+ string
-+ default ndk15c02
++ default nhk15
+
+# EXTRA_CFLAGS configuration for this target
+config NOMADIK_TARGET_EXTRA_CFLAGS
+ string
-+ default "-D__RELEASE -D__STN_8815=30 "
++ default "-D__RELEASE -D__STN_8815=40 "
+
+
+# Basic platform type configuration for this targe
-+config NOMADIK_NDK15
++config NOMADIK_NHK15
+ bool
+ default y
+
+endif
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c ../new/linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c
---- linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c 2008-09-17 13:23:32.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c
@@ -0,0 +1,1009 @@
+/*
+ * linux/arch/arm/mach-nomadik/nhk15_devices.c
@@ -17495,8 +19817,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c ../new/linux-2.6
+#define NMDK_DEBUG_PFX BOARD_NAME /* msg header represents this module */
+#define NMDK_DBG KERN_ERR /* message level */
+
-+#define INT_USBOTG 23
-+#define NOMADIK_USB_BASE 0x10170000
++#define INT_USBOTG 23
++#define NOMADIK_USB_BASE 0x10170000
+#ifdef CONFIG_SMC91X
+static void nomadik_smc91x_irq_init(void);
+#endif
@@ -17628,7 +19950,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c ../new/linux-2.6
+}
+int nomadik_nandflash_init(void)
+{
-+#if 1
++#if 1
+ /*
+ * FSMC initialization
+ * 0x0000000e => PCR0
@@ -17754,7 +20076,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c ../new/linux-2.6
+ .eccbytes = 12,
+ .eccpos = {2, 3, 4, 18, 19, 20, 34, 35, 36, 50, 51, 52},
+ .oobavail = MTD_NANDECC_AUTOPLACE,
-+ .oobfree = {
++ .oobfree = {
+ { .offset = 8,
+ .length = 8,
+ },
@@ -17853,7 +20175,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c ../new/linux-2.6
+{ int ret=0;
+ int fsmc_err=1;
+ int board=8820;
-+
++
+ /*Set the reset signal to high*/
+ ret = STMPE2401_SetGpioAltFunction(STMPE1,EGPIO_PIN_9,STMPE2401_PRIMARY_FUNCTION);
+ if (ret != STMPE2401_OK)
@@ -17862,7 +20184,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c ../new/linux-2.6
+ if (ret != STMPE2401_OK)
+ nmdk_error("Couldn't set STMPE1 :%d in Output direction\n", EGPIO_PIN_9);
+ ret = STMPE2401_SetGpioVal( STMPE1, EGPIO_PIN_9, 1);
-+
++
+ /*Configure other GPIO pins to ALT FUNC A*/
+ ret = nomadik_gpio_altfuncenable(GPIO_ALT_ONENAND, "onenand");
+ if (ret)
@@ -17974,7 +20296,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c ../new/linux-2.6
+static void nomadik_smc91x_irq_init(void)
+{
+ t_STMPE2401_error err;
-+
++
+ nomadik_gpio_altfuncenable(GPIO_ALT_ETHERNET, "ETH");
+ /*reset the ethernet controller which is conected thro port expander 1*/
+ err = STMPE2401_SetGpioAltFunction(STMPE1,EGPIO_PIN_10,STMPE2401_PRIMARY_FUNCTION);
@@ -18059,7 +20381,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c ../new/linux-2.6
+ udelay(1000); /*1ms*/
+#endif
+ nomadik_st2590_init();
-+
++
+ return 0;
+}
+
@@ -18137,7 +20459,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c ../new/linux-2.6
+ err = STMPE2401_SetGpioAltFunction( STMPE1 , EGPIO_PIN_6 , STMPE2401_PRIMARY_FUNCTION );
+ err |= STMPE2401_SetGpioDir( STMPE1,EGPIO_PIN_6,STMPE2401_GPIO_IN );
+ err |= STMPE2401_SetGpioPull(STMPE1,EGPIO_PIN_6,STMPE2401_FLOATING );
-+
++
+ err = STMPE2401_Install_Callback(STMPE1, STMPE2401_GPIO_IRQ(6), callback,(void*)p);
+ if (err != STMPE2401_OK) {
+ printk("Couldn't setup touch screen callback\n");
@@ -18149,7 +20471,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c ../new/linux-2.6
+ err = STMPE2401_ClearGpioEdgeStatus(STMPE1,(0x1<<EGPIO_PIN_6));
+ if (err != STMPE2401_OK) {
+ printk("Couldn't clear touch screen edge status \n");
-+ }
++ }
+ /*err = STMPE2401_InterruptAbilitation(STMPE1, STMPE2401_ENABLE_INTERRUPT );
+ if (err != STMPE2401_OK) {
+ printk("Couldn't enable touch screen callback\n");
@@ -18195,7 +20517,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c ../new/linux-2.6
+static int nomadik_tsc2003_read_pin_val(u8 * Value)
+{
+ t_STMPE2401_error err;
-+
++
+ err = STMPE2401_GetGpioVal(STMPE1 , EGPIO_PIN_6, Value);
+ return (err != STMPE2401_OK);
+}
@@ -18416,7 +20738,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c ../new/linux-2.6
+
+static struct platform_device *nmdk_platform_devices[] __initdata = {
+ &fsmc_device,
-+ &nomadik_udc_device,
++ &nomadik_udc_device,
+#ifdef CONFIG_MTD
+#ifdef CONFIG_MTD_NAND
+ &nomadik_nand_flash,
@@ -18440,49 +20762,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_devices.c ../new/linux-2.6
+ platform_add_devices(nmdk_platform_devices,
+ ARRAY_SIZE(nmdk_platform_devices));
+}
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/nhk15_Kconfig ../new/linux-2.6.20/arch/arm/mach-nomadik/nhk15_Kconfig
---- linux-2.6.20/arch/arm/mach-nomadik/nhk15_Kconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/nhk15_Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,36 @@
-+if NOMADIK_NHK15
-+
-+comment "Nomadik chip used STn8815"
-+
-+#target name configuration for this target
-+config NOMADIK_TARGET
-+ string
-+ default NHK15
-+
-+# nomadik soc chip name configuration for this target
-+config NOMADIK_SOC
-+ string
-+ default stn8815
-+
-+# nomadik soc chip cut name configuration for this targe only
-+config NOMADIK_STN8815CAS22H11
-+ bool
-+ default y
-+
-+# nomadik platform name configuration for this targe
-+config NOMADIK_PLATFORM
-+ string
-+ default nhk15
-+
-+# EXTRA_CFLAGS configuration for this target
-+config NOMADIK_TARGET_EXTRA_CFLAGS
-+ string
-+ default "-D__RELEASE -D__STN_8815=40 "
-+
-+
-+# Basic platform type configuration for this targe
-+config NOMADIK_NHK15
-+ bool
-+ default y
-+
-+endif
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/normal.S ../new/linux-2.6.20/arch/arm/mach-nomadik/normal.S
---- linux-2.6.20/arch/arm/mach-nomadik/normal.S 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/normal.S 2008-07-28 15:20:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/normal.S
@@ -0,0 +1,199 @@
+/*
+ * arch/arm/mach-nomadik/normal.S
@@ -18523,14 +20804,14 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/normal.S ../new/linux-2.6.20/arc
+ stmfd sp!,{r0-r12,lr}
+
+ ldr r10,=mpmc_base
-+ ldr r11,=src_base
++ ldr r11,=src_base
+ ldr r12,=pmu_base
+ ldr r9,=uart_base
+
+
+ ldr r2, [r11]
-+
-+#if NORMAL_DEBUG
++
++#if NORMAL_DEBUG
+ mov r0, #97
+ str r0, [r9]
+#endif
@@ -18547,7 +20828,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/normal.S ../new/linux-2.6.20/arc
+ bls pfetch
+
+.align 5
-+
++
+cache_prefetch_start:
+ ldr r10, =mpmc_base
+
@@ -18558,7 +20839,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/normal.S ../new/linux-2.6.20/arc
+ cmp r1,#0
+ bne poll_status
+
-+ /* Put SDRAM in self-refresh mode*/
++ /* Put SDRAM in self-refresh mode*/
+ ldr r1,[r10, #0x20]
+ bic r1,r1,#0x1
+ orr r1,r1,#0x04
@@ -18574,7 +20855,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/normal.S ../new/linux-2.6.20/arc
+
+ /**
+ * Stop the DLL, leave SDMC on
-+ Moving 0xff9 into sdmc control register for stopping and adding dll
++ Moving 0xff9 into sdmc control register for stopping and adding dll
+ cmd value
+ */
+ mov r1, #0xff0
@@ -18589,7 +20870,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/normal.S ../new/linux-2.6.20/arc
+ cmp r1,#0
+ bne wait_dll_lock
+
-+#if NORMAL_DEBUG
++#if NORMAL_DEBUG
+ mov r0, #98
+ str r0, [r9]
+#endif
@@ -18610,13 +20891,13 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/normal.S ../new/linux-2.6.20/arc
+
+
+
-+#if NORMAL_DEBUG
++#if NORMAL_DEBUG
+ mov r0, #99
+ str r0, [r9]
+#endif
+
+
-+
++
+ ldr r1,[r11]
+/** Routine to put the chip in normal Mode
+ bic r1, r1, #0x7
@@ -18636,7 +20917,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/normal.S ../new/linux-2.6.20/arc
+ bne wait_normal_mode
+
+
-+#if NORMAL_DEBUG
++#if NORMAL_DEBUG
+ mov r0, #100
+ str r0, [r9]
+#endif
@@ -18644,7 +20925,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/normal.S ../new/linux-2.6.20/arc
+
+ /* Exit DDR-SDRAM from self-refresh mode */
+ ldr r1,[r10, #0x20]
-+ bic r1,r1,#0x04
++ bic r1,r1,#0x04
+ str r1,[r10, #0x20]
+
+
@@ -18654,8 +20935,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/normal.S ../new/linux-2.6.20/arc
+ and r1,r1,#0x4
+ cmp r1,#0x4
+ beq loop_refresh
-+
-+#if NORMAL_DEBUG
++
++#if NORMAL_DEBUG
+ mov r0, #101
+ str r0, [r9]
+#endif
@@ -18674,7 +20955,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/normal.S ../new/linux-2.6.20/arc
+ mov r0,r0
+
+
-+#if NORMAL_DEBUG
++#if NORMAL_DEBUG
+
+ mov r0, #102
+ str r0, [r9]
@@ -18683,9 +20964,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/normal.S ../new/linux-2.6.20/arc
+ ldmfd sp!,{r0-r12,pc}
+
+
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/pm.c ../new/linux-2.6.20/arch/arm/mach-nomadik/pm.c
---- linux-2.6.20/arch/arm/mach-nomadik/pm.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/pm.c 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/pm.c
@@ -0,0 +1,79 @@
+/*
+ * NOMADIK Power Management Routines
@@ -18766,9 +21046,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/pm.c ../new/linux-2.6.20/arch/ar
+}
+
+device_initcall(nomadik_pm_init);
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/power.c ../new/linux-2.6.20/arch/arm/mach-nomadik/power.c
---- linux-2.6.20/arch/arm/mach-nomadik/power.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/power.c 2008-11-19 16:47:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/power.c
@@ -0,0 +1,1316 @@
+/*
+ * linux/arch/arm/mach-nomadik/power.c
@@ -20086,9 +22365,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/power.c ../new/linux-2.6.20/arch
+
+core_initcall(nomadik_power_init);
+
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/rtc.c ../new/linux-2.6.20/arch/arm/mach-nomadik/rtc.c
---- linux-2.6.20/arch/arm/mach-nomadik/rtc.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/rtc.c 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/rtc.c
@@ -0,0 +1,327 @@
+/*
+ * linux/arch/arm/mach-nomadik/rtc.c
@@ -20266,7 +22544,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/rtc.c ../new/linux-2.6.20/arch/a
+ {
+ int tmp = 0;
+
-+ /*
++ /*
+ * The max we can do is 8192Hz.
+ */
+ if ((arg < 2) || (arg > 8192))
@@ -20417,9 +22695,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/rtc.c ../new/linux-2.6.20/arch/a
+MODULE_AUTHOR("Prafulla WADASKAR <prafulla.wadaskar@st.com>");
+MODULE_DESCRIPTION("Nomadik RTC/RTT driver");
+MODULE_LICENSE("GPL v2");
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/sleep.c ../new/linux-2.6.20/arch/arm/mach-nomadik/sleep.c
---- linux-2.6.20/arch/arm/mach-nomadik/sleep.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/sleep.c 2008-08-21 18:04:17.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/sleep.c
@@ -0,0 +1,280 @@
+/*
+ * arch/arm/mach-nomadik/sleep.c
@@ -20701,9 +22978,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/sleep.c ../new/linux-2.6.20/arch
+
+ return 0;
+}
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/slow.S ../new/linux-2.6.20/arch/arm/mach-nomadik/slow.S
---- linux-2.6.20/arch/arm/mach-nomadik/slow.S 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/slow.S 2008-07-28 15:20:45.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/slow.S
@@ -0,0 +1,199 @@
+/*
+ * arch/arm/mach-nomadik/slow.S
@@ -20744,14 +23020,14 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/slow.S ../new/linux-2.6.20/arch/
+ stmfd sp!,{r0-r12,lr}
+
+ ldr r10,=mpmc_base
-+ ldr r11,=src_base
++ ldr r11,=src_base
+ ldr r12,=pmu_base
+ ldr r9,=uart_base
+
+
+ ldr r2, [r11]
-+
-+#if SLOW_DEBUG
++
++#if SLOW_DEBUG
+ mov r0, #97
+ str r0, [r9]
+#endif
@@ -20768,7 +23044,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/slow.S ../new/linux-2.6.20/arch/
+ bls pfetch
+
+.align 5
-+
++
+cache_prefetch_start:
+ ldr r10, =mpmc_base
+
@@ -20779,7 +23055,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/slow.S ../new/linux-2.6.20/arch/
+ cmp r1,#0
+ bne poll_status
+
-+ /* Put SDRAM in self-refresh mode*/
++ /* Put SDRAM in self-refresh mode*/
+ ldr r1,[r10, #0x20]
+ bic r1,r1,#0x1
+ orr r1,r1,#0x04
@@ -20795,7 +23071,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/slow.S ../new/linux-2.6.20/arch/
+
+ /**
+ * Stop the DLL, leave SDMC on
-+ Moving 0xff9 into sdmc control register for stopping and adding dll
++ Moving 0xff9 into sdmc control register for stopping and adding dll
+ cmd value
+ */
+ mov r1, #0xff0
@@ -20810,7 +23086,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/slow.S ../new/linux-2.6.20/arch/
+ cmp r1,#0
+ bne wait_dll_lock
+
-+#if SLOW_DEBUG
++#if SLOW_DEBUG
+ mov r0, #98
+ str r0, [r9]
+#endif
@@ -20831,14 +23107,14 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/slow.S ../new/linux-2.6.20/arch/
+
+
+
-+#if SLOW_DEBUG
++#if SLOW_DEBUG
+ mov r0, #99
+ str r0, [r9]
+#endif
+
+
+#if 1
-+
++
+ ldr r1,[r11]
+/** Routine to put the chip in Slow Mode
+*/
@@ -20857,7 +23133,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/slow.S ../new/linux-2.6.20/arch/
+
+#endif
+
-+#if SLOW_DEBUG
++#if SLOW_DEBUG
+ mov r0, #100
+ str r0, [r9]
+#endif
@@ -20865,7 +23141,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/slow.S ../new/linux-2.6.20/arch/
+
+ /* Exit DDR-SDRAM from self-refresh mode */
+ ldr r1,[r10, #0x20]
-+ bic r1,r1,#0x04
++ bic r1,r1,#0x04
+ str r1,[r10, #0x20]
+
+
@@ -20875,8 +23151,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/slow.S ../new/linux-2.6.20/arch/
+ and r1,r1,#0x4
+ cmp r1,#0x4
+ beq loop_refresh
-+
-+#if SLOW_DEBUG
++
++#if SLOW_DEBUG
+ mov r0, #101
+ str r0, [r9]
+#endif
@@ -20895,7 +23171,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/slow.S ../new/linux-2.6.20/arch/
+ mov r0,r0
+
+
-+#if SLOW_DEBUG
++#if SLOW_DEBUG
+
+ mov r0, #102
+ str r0, [r9]
@@ -20904,9 +23180,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/slow.S ../new/linux-2.6.20/arch/
+ ldmfd sp!,{r0-r12,pc}
+
+
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/soft_sleep.S ../new/linux-2.6.20/arch/arm/mach-nomadik/soft_sleep.S
---- linux-2.6.20/arch/arm/mach-nomadik/soft_sleep.S 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/soft_sleep.S 2008-07-28 15:20:47.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/soft_sleep.S
@@ -0,0 +1,206 @@
+/*
+ * arch/arm/mach-nomadik/soft_sleep.S
@@ -20947,16 +23222,16 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/soft_sleep.S ../new/linux-2.6.20
+
+
+ mrs r7, cpsr
-+ stmfd sp!, {r7}
++ stmfd sp!, {r7}
+ bic r7,r7,#0xf
+
+
-+
++
+ ldr r10,=mpmc_base
-+ ldr r11,=src_base
++ ldr r11,=src_base
+ ldr r12,=pmu_base
-+
-+
++
++
+ /* Go back in SVC mode*/
+ orr r0,r7,#0x3
+ msr cpsr_cxsf,r0
@@ -20966,7 +23241,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/soft_sleep.S ../new/linux-2.6.20
+ mcr p15,0,r0,c7,c10,4
+
+
-+ /* Program to wake-up in Normal mode*/
++ /* Program to wake-up in Normal mode*/
+ ldr r0,[r11,#0x4]
+ bic r0,r0,#0xf
+ orr r0,r0,#0x9
@@ -20990,7 +23265,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/soft_sleep.S ../new/linux-2.6.20
+
+.align 5
+
-+
++
+cache_prefetch_start:
+ ldr r10, =mpmc_base
+
@@ -21000,7 +23275,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/soft_sleep.S ../new/linux-2.6.20
+ cmp r1,#0
+ bne poll_status
+
-+ /* Put SDRAM in self-refresh mode*/
++ /* Put SDRAM in self-refresh mode*/
+ ldr r1,[r10, #0x20]
+ bic r1,r1,#0x1
+ orr r1,r1,#0x04
@@ -21012,7 +23287,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/soft_sleep.S ../new/linux-2.6.20
+ and r1,r1,#0x4
+ cmp r1,#0x0
+ beq wait_self_refresh
-+
++
+/** Routine to put the chip in Sleep Mode
+*/
+ ldr r11,=src_base
@@ -21058,7 +23333,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/soft_sleep.S ../new/linux-2.6.20
+
+
+/* Bring out the SDRAM from self refresh */
-+ /*Put SDRAM in self-refresh mode*/
++ /*Put SDRAM in self-refresh mode*/
+ ldr r1,[r10, #0x20]
+ bic r1,r1,#0x04
+ str r1,[r10, #0x20]
@@ -21079,7 +23354,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/soft_sleep.S ../new/linux-2.6.20
+ mov r0,r0
+ mov r0,r0
+ mov r0,r0
-+
++
+/* This is to add some delay */
+ mov r0, #0
+while_loop:
@@ -21088,35 +23363,34 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/soft_sleep.S ../new/linux-2.6.20
+ bne while_loop
+
+
-+
++
+ /* Remove the chip from Interrupt mode */
+ ldr r0,[r11, #0x4]
+ bic r0,r0,#0x1
+ str r0,[r11, #0x4]
-+
++
+ /* Clear the interrupt mode status bit*/
+ mov r0, #0x0
+ str r0, [r11, #0x8]
+
+
+ /* Store the value of cpsr in r7*/
-+ mrs r7,cpsr
++ mrs r7,cpsr
+ orr r7,r7,#0xC0 /*Not Needed*/
+ bic r7,r7,#0xf
-+
-+
++
++
+ ldr r0, [sp]
+ msr cpsr_cxsf, r0
+ add sp, sp,#4
-+
-+
++
++
+
+ ldmfd sp!,{r0-r12,pc}
+
+
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ssp.c ../new/linux-2.6.20/arch/arm/mach-nomadik/ssp.c
---- linux-2.6.20/arch/arm/mach-nomadik/ssp.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/ssp.c 2008-07-04 23:45:10.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/ssp.c
@@ -0,0 +1,930 @@
+/*
+ * arch/arm/mach-nomadik/ssp.c
@@ -22048,9 +24322,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/ssp.c ../new/linux-2.6.20/arch/a
+MODULE_AUTHOR("Sachin Verma, <sachin.verma@st.com>");
+MODULE_DESCRIPTION("NOMADIK SPI Controller Driver");
+MODULE_LICENSE("GPL");
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/stn8810_devices.c ../new/linux-2.6.20/arch/arm/mach-nomadik/stn8810_devices.c
---- linux-2.6.20/arch/arm/mach-nomadik/stn8810_devices.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/stn8810_devices.c 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/stn8810_devices.c
@@ -0,0 +1,1071 @@
+/*
+ * linux/arch/arm/mach-nomadik/stn8810_devices.c
@@ -22488,13 +24761,13 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/stn8810_devices.c ../new/linux-2
+
+/**
+ * dmadev_default_config_tbl - Deffault dma device configuration table
-+ * To support new dmadevice, add new default confiuration to this table
++ * To support new dmadevice, add new default confiuration to this table
+ * refer /Documentation/arm/STM-Nomadik/dma_user_guide.txt for the same
+ */
+static struct dmadev_description dmadev_default_config_tbl[] = {
+ {.id = "mem",
-+ .config = ( DMA_AHB_M1 | DMA_ADR_INC | DMA_WIDTH_WORD |
-+ DMA_BSIZE_4 | DMA_REQUEST_LINE(31) |
++ .config = ( DMA_AHB_M1 | DMA_ADR_INC | DMA_WIDTH_WORD |
++ DMA_BSIZE_4 | DMA_REQUEST_LINE(31) |
+ DMA_DEV_BSIZE_CONFIGURABLE | DMA_DEV_WIDTH_CONFIGURABLE |
+ DMA_DEV_BOTH_DMACS_CANBE_USED ),},
+ {.id = "sdmmc",
@@ -22593,7 +24866,7 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/stn8810_devices.c ../new/linux-2
+
+void __init arch_dma_init(struct dma_t *dma)
+{
-+ dma_data.dma_chan = dma;
++ dma_data.dma_chan = dma;
+};
+
+static struct amba_device dma0_device = {
@@ -23074,13 +25347,13 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/stn8810_devices.c ../new/linux-2
+#ifdef CONFIG_NOMADIK_SVA_INIT_MEM
+
+ unsigned long gfp_address = 0;
-+
++
+ gfp_address = __get_free_pages(GFP_KERNEL, get_order(CONFIG_NOMADIK_SVA_MEM_SIZE * SZ_1M));
+ if(gfp_address) {
+ sva_data.init_bus_address = (__u32) gfp_address - PAGE_OFFSET;
+ sva_data.init_logical_address = ioremap(sva_data.init_bus_address,
+ CONFIG_NOMADIK_SVA_MEM_SIZE * SZ_1M);
-+ }
++ }
+ if(!sva_data.init_logical_address) {
+ printk(KERN_ERR"SVA driver %d MB memory boot memory allocation failed\n",CONFIG_NOMADIK_SVA_MEM_SIZE);
+
@@ -23123,9 +25396,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/stn8810_devices.c ../new/linux-2
+ .init_machine = nomadik_platform_init,
+MACHINE_END
+
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/stn8815_devices.c ../new/linux-2.6.20/arch/arm/mach-nomadik/stn8815_devices.c
---- linux-2.6.20/arch/arm/mach-nomadik/stn8815_devices.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/stn8815_devices.c 2008-11-19 16:47:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/stn8815_devices.c
@@ -0,0 +1,1971 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -25098,9 +27370,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/stn8815_devices.c ../new/linux-2
+ 0x00000100,.map_io = nomadik_map_io,.init_irq =
+ nomadik_platform_init_irq,.timer = &nomadik_timer,.init_machine =
+ nomadik_platform_init, MACHINE_END
-diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/timer.c ../new/linux-2.6.20/arch/arm/mach-nomadik/timer.c
---- linux-2.6.20/arch/arm/mach-nomadik/timer.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mach-nomadik/timer.c 2008-07-04 23:45:12.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/arch/arm/mach-nomadik/timer.c
@@ -0,0 +1,366 @@
+/*
+ * linux/arch/arm/mach-nomadik/timer.c
@@ -25393,8 +27664,8 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/timer.c ../new/linux-2.6.20/arch
+ if (ticks > 1) {
+ val = mtu_reg->tmr_value1;
+
-+ /*
-+ * Conservatively assuming that max. 2 timer counts can be
++ /*
++ * Conservatively assuming that max. 2 timer counts can be
+ * taken in this processing. Below condition looks unlikely
+ */
+ if ((mtu_reg->tmr_mis & 0x1) || (val <= 2)) {
@@ -25468,122 +27739,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mach-nomadik/timer.c ../new/linux-2.6.20/arch
+ .dyn_tick = &nomadik_dyn_tick,
+#endif
+};
-diff -Nauprw linux-2.6.20/arch/arm/Makefile ../new/linux-2.6.20/arch/arm/Makefile
---- linux-2.6.20/arch/arm/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -20,7 +20,7 @@ CFLAGS +=$(call cc-option,-marm,)
-
- # Do not use arch/arm/defconfig - it's always outdated.
- # Select a platform tht is kept up-to-date
--KBUILD_DEFCONFIG := versatile_defconfig
-+KBUILD_DEFCONFIG := ndk15_defconfig
-
- # defines filename extension depending memory manement type.
- ifeq ($(CONFIG_MMU),)
-@@ -89,6 +89,7 @@ CHECKFLAGS += -D__arm__
- head-y := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
- textofs-y := 0x00008000
-
-+
- machine-$(CONFIG_ARCH_RPC) := rpc
- machine-$(CONFIG_ARCH_EBSA110) := ebsa110
- machine-$(CONFIG_ARCH_CLPS7500) := clps7500
-@@ -106,6 +107,7 @@ endif
- machine-$(CONFIG_ARCH_PXA) := pxa
- machine-$(CONFIG_ARCH_L7200) := l7200
- machine-$(CONFIG_ARCH_INTEGRATOR) := integrator
-+ machine-$(CONFIG_ARCH_NOMADIK) := nomadik
- textofs-$(CONFIG_ARCH_CLPS711X) := 0x00028000
- machine-$(CONFIG_ARCH_CLPS711X) := clps711x
- machine-$(CONFIG_ARCH_IOP32X) := iop32x
-@@ -200,12 +202,21 @@ else
- endif
- @touch $@
-
--archprepare: maketools
-+archprepare: maketools machprepare
-
--PHONY += maketools FORCE
-+PHONY += maketools machprepare machclean machmrproper FORCE
- maketools: include/linux/version.h include/asm-arm/.arch FORCE
- $(Q)$(MAKE) $(build)=arch/arm/tools include/asm-arm/mach-types.h
-
-+
-+# Machine specific preparation if it exists
-+MACHPREPARE_PATH = $(strip `grep "machprepare:" $(MACHINE)Makefile* | grep -o $(MACHINE)`)
-+
-+machprepare:
-+ifeq ($(wildcard $(TOPDIR)/.config), $(TOPDIR)/.config)
-+ $(Q)set -e; for i in $(MACHPREPARE_PATH); do $(MAKE) -C $$i $@; done
-+endif
-+
- # Convert bzImage to zImage
- bzImage: zImage
-
-@@ -218,8 +229,23 @@ zinstall install: vmlinux
- CLEAN_FILES += include/asm-arm/mach-types.h \
- include/asm-arm/arch include/asm-arm/.arch
-
-+# Machine specific mrproper operation if it exists
-+MACHMRPROPER_PATH =`find arch/$(ARCH)/mach-*/ -name Makefile | xargs grep machmrproper: | sed 's/Makefile:machmrproper://g' | sed 's/Makefile://g'`
-+
-+machmrproper:
-+ $(Q)set -e; for i in $(MACHMRPROPER_PATH); do $(MAKE) -C $$i $@; done
-+
-+# We use MRPROPER_FILES
-+archmrproper: machmrproper
-+
-+# Machine specific clean operation
-+MACHCLEAN_PATH = `find arch/$(ARCH)/mach-*/ -name Makefile | xargs grep machclean: | sed 's/Makefile:machclean://g' | sed 's/Makefile://g'`
-+
-+machclean:
-+ $(Q)set -e; for i in $(MACHCLEAN_PATH); do $(MAKE) -C $$i $@; done
-+
- # We use MRPROPER_FILES and CLEAN_FILES now
--archclean:
-+archclean: machclean
- $(Q)$(MAKE) $(clean)=$(boot)
-
- # My testing targets (bypasses dependencies)
-diff -Nauprw linux-2.6.20/arch/arm/mm/extable.c ../new/linux-2.6.20/arch/arm/mm/extable.c
---- linux-2.6.20/arch/arm/mm/extable.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mm/extable.c 2007-11-21 11:51:41.000000000 +0530
-@@ -2,6 +2,7 @@
- * linux/arch/arm/mm/extable.c
- */
- #include <linux/module.h>
-+#include <linux/kgdb.h>
- #include <asm/uaccess.h>
-
- int fixup_exception(struct pt_regs *regs)
-@@ -11,6 +12,12 @@ int fixup_exception(struct pt_regs *regs
- fixup = search_exception_tables(instruction_pointer(regs));
- if (fixup)
- regs->ARM_pc = fixup->fixup;
-+#ifdef CONFIG_KGDB
-+ if (atomic_read(&debugger_active) && kgdb_may_fault)
-+ /* Restore our previous state. */
-+ kgdb_fault_longjmp(kgdb_fault_jmp_regs);
-+ /* Not reached. */
-+#endif
-
- return fixup != NULL;
- }
-diff -Nauprw linux-2.6.20/arch/arm/mm/init.c ../new/linux-2.6.20/arch/arm/mm/init.c
---- linux-2.6.20/arch/arm/mm/init.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mm/init.c 2007-11-21 11:51:41.000000000 +0530
-@@ -89,7 +89,6 @@ void show_mem(void)
- printk("%d pages shared\n", shared);
- printk("%d pages swap cached\n", cached);
- }
--
- /*
- * FIXME: We really want to avoid allocating the bootmap bitmap
- * over the top of the initrd. Hopefully, this is located towards
-diff -Nauprw linux-2.6.20/arch/arm/mm/Kconfig ../new/linux-2.6.20/arch/arm/mm/Kconfig
---- linux-2.6.20/arch/arm/mm/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mm/Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -60,7 +60,7 @@ config CPU_ARM710
+--- linux-2.6.20.orig/arch/arm/mm/Kconfig
++++ linux-2.6.20/arch/arm/mm/Kconfig
+@@ -58,11 +58,11 @@ config CPU_ARM710
+ Say Y if you want support for the ARM710 processor.
+ Otherwise, say N.
# ARM720T
config CPU_ARM720T
@@ -25592,7 +27752,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/Kconfig ../new/linux-2.6.20/arch/arm/mm/Kc
default y if ARCH_CLPS711X || ARCH_L7200 || ARCH_CDB89712 || ARCH_H720X
select CPU_32v4T
select CPU_ABRT_LV4T
-@@ -109,7 +109,7 @@ config CPU_ARM9TDMI
+ select CPU_CACHE_V4
+ select CPU_CACHE_VIVT
+@@ -107,11 +107,11 @@ config CPU_ARM9TDMI
+ Otherwise, say N.
+
# ARM920T
config CPU_ARM920T
bool "Support ARM920T processor"
@@ -25601,7 +27765,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/Kconfig ../new/linux-2.6.20/arch/arm/mm/Kc
default y if CPU_S3C2410 || CPU_S3C2440 || CPU_S3C2442 || ARCH_AT91RM9200
select CPU_32v4T
select CPU_ABRT_EV4T
-@@ -131,7 +131,7 @@ config CPU_ARM920T
+ select CPU_CACHE_V4WT
+ select CPU_CACHE_VIVT
+@@ -129,11 +129,11 @@ config CPU_ARM920T
+ Otherwise, say N.
+
# ARM922T
config CPU_ARM922T
bool "Support ARM922T processor" if ARCH_INTEGRATOR
@@ -25610,7 +27778,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/Kconfig ../new/linux-2.6.20/arch/arm/mm/Kc
default y if ARCH_LH7A40X
select CPU_32v4T
select CPU_ABRT_EV4T
-@@ -168,10 +168,15 @@ config CPU_ARM925T
+ select CPU_CACHE_V4WT
+ select CPU_CACHE_VIVT
+@@ -166,14 +166,19 @@ config CPU_ARM925T
+ device family.
+
Say Y if you want support for the ARM925T processor.
Otherwise, say N.
@@ -25627,7 +27799,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/Kconfig ../new/linux-2.6.20/arch/arm/mm/Kc
default y if ARCH_VERSATILE_PB || MACH_VERSATILE_AB || ARCH_OMAP730 || ARCH_OMAP16XX || ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || ARCH_AT91SAM9260 || ARCH_AT91SAM9261
select CPU_32v5
select CPU_ABRT_EV5TJ
-@@ -223,7 +228,7 @@ config CPU_ARM946E
+ select CPU_CACHE_VIVT
+ select CPU_CP15_MMU
+@@ -221,11 +226,11 @@ config CPU_ARM946E
+ Otherwise, say N.
+
# ARM1020 - needs validating
config CPU_ARM1020
bool "Support ARM1020T (rev 0) processor"
@@ -25636,7 +27812,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/Kconfig ../new/linux-2.6.20/arch/arm/mm/Kc
select CPU_32v5
select CPU_ABRT_EV4T
select CPU_CACHE_V4WT
-@@ -241,7 +246,7 @@ config CPU_ARM1020
+ select CPU_CACHE_VIVT
+ select CPU_CP15_MMU
+@@ -239,11 +244,11 @@ config CPU_ARM1020
+ Otherwise, say N.
+
# ARM1020E - needs validating
config CPU_ARM1020E
bool "Support ARM1020E processor"
@@ -25645,7 +27825,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/Kconfig ../new/linux-2.6.20/arch/arm/mm/Kc
select CPU_32v5
select CPU_ABRT_EV4T
select CPU_CACHE_V4WT
-@@ -254,7 +259,7 @@ config CPU_ARM1020E
+ select CPU_CACHE_VIVT
+ select CPU_CP15_MMU
+@@ -252,11 +257,11 @@ config CPU_ARM1020E
+ depends on n
+
# ARM1022E
config CPU_ARM1022
bool "Support ARM1022E processor"
@@ -25654,7 +27838,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/Kconfig ../new/linux-2.6.20/arch/arm/mm/Kc
select CPU_32v5
select CPU_ABRT_EV4T
select CPU_CACHE_VIVT
-@@ -272,7 +277,7 @@ config CPU_ARM1022
+ select CPU_CP15_MMU
+ select CPU_COPY_V4WB if MMU # can probably do better
+@@ -270,11 +275,11 @@ config CPU_ARM1022
+ Otherwise, say N.
+
# ARM1026EJ-S
config CPU_ARM1026
bool "Support ARM1026EJ-S processor"
@@ -25663,7 +27851,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/Kconfig ../new/linux-2.6.20/arch/arm/mm/Kc
select CPU_32v5
select CPU_ABRT_EV5T # But need Jazelle, but EV5TJ ignores bit 10
select CPU_CACHE_VIVT
-@@ -345,7 +350,7 @@ config CPU_XSC3
+ select CPU_CP15_MMU
+ select CPU_COPY_V4WB if MMU # can probably do better
+@@ -343,11 +348,11 @@ config CPU_XSC3
+ select IO_36
+
# ARMv6
config CPU_V6
bool "Support ARM V6 processor"
@@ -25672,10 +27864,53 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/Kconfig ../new/linux-2.6.20/arch/arm/mm/Kc
select CPU_32v6
select CPU_ABRT_EV6
select CPU_CACHE_V6
-diff -Nauprw linux-2.6.20/arch/arm/mm/proc-arm926.S ../new/linux-2.6.20/arch/arm/mm/proc-arm926.S
---- linux-2.6.20/arch/arm/mm/proc-arm926.S 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/mm/proc-arm926.S 2008-10-20 13:37:44.000000000 +0530
-@@ -24,6 +24,10 @@
+ select CPU_CACHE_VIPT
+ select CPU_CP15_MMU
+--- linux-2.6.20.orig/arch/arm/mm/extable.c
++++ linux-2.6.20/arch/arm/mm/extable.c
+@@ -1,16 +1,23 @@
+ /*
+ * linux/arch/arm/mm/extable.c
+ */
+ #include <linux/module.h>
++#include <linux/kgdb.h>
+ #include <asm/uaccess.h>
+
+ int fixup_exception(struct pt_regs *regs)
+ {
+ const struct exception_table_entry *fixup;
+
+ fixup = search_exception_tables(instruction_pointer(regs));
+ if (fixup)
+ regs->ARM_pc = fixup->fixup;
++#ifdef CONFIG_KGDB
++ if (atomic_read(&debugger_active) && kgdb_may_fault)
++ /* Restore our previous state. */
++ kgdb_fault_longjmp(kgdb_fault_jmp_regs);
++ /* Not reached. */
++#endif
+
+ return fixup != NULL;
+ }
+--- linux-2.6.20.orig/arch/arm/mm/init.c
++++ linux-2.6.20/arch/arm/mm/init.c
+@@ -87,11 +87,10 @@ void show_mem(void)
+ printk("%d reserved pages\n", reserved);
+ printk("%d slab pages\n", slab);
+ printk("%d pages shared\n", shared);
+ printk("%d pages swap cached\n", cached);
+ }
+-
+ /*
+ * FIXME: We really want to avoid allocating the bootmap bitmap
+ * over the top of the initrd. Hopefully, this is located towards
+ * the start of a bank, so if we allocate the bootmap bitmap at
+ * the end, we won't clash.
+--- linux-2.6.20.orig/arch/arm/mm/proc-arm926.S
++++ linux-2.6.20/arch/arm/mm/proc-arm926.S
+@@ -22,19 +22,24 @@
+ *
+ * These are the low level assembler for performing cache and TLB
* functions on the arm926.
*
* CONFIG_CPU_ARM926_CPU_IDLE -> nohlt
@@ -25686,7 +27921,9 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/proc-arm926.S ../new/linux-2.6.20/arch/arm
*/
#include <linux/linkage.h>
#include <linux/init.h>
-@@ -33,6 +37,7 @@
+ #include <asm/assembler.h>
+ #include <asm/elf.h>
+ #include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h>
#include <asm/page.h>
#include <asm/ptrace.h>
@@ -25694,14 +27931,18 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/proc-arm926.S ../new/linux-2.6.20/arch/arm
#include "proc-macros.S"
/*
-@@ -65,9 +70,15 @@ ENTRY(cpu_arm926_proc_fin)
+ * This is the maximum size of an area which will be invalidated
+ * using the single invalidate entry instructions. Anything larger
+@@ -63,13 +68,19 @@ ENTRY(cpu_arm926_proc_init)
+ ENTRY(cpu_arm926_proc_fin)
+ stmfd sp!, {lr}
mov ip, #PSR_F_BIT | PSR_I_BIT | SVC_MODE
msr cpsr_c, ip
bl arm926_flush_kern_cache_all
+#ifdef CONFIG_L2CACHE_ENABLE
+ v_l2_cache_clean_and_invalidate r0, r1
+ v_l2_cache_sync r0, r1
-+ v_l2_cache_disable r0,r1
++ v_l2_cache_disable r0,r1
+#endif
mrc p15, 0, r0, c1, c0, 0 @ ctrl register
bic r0, r0, #0x1000 @ ...i............
@@ -25710,7 +27951,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/proc-arm926.S ../new/linux-2.6.20/arch/arm
mcr p15, 0, r0, c1, c0, 0 @ disable caches
ldmfd sp!, {pc}
-@@ -253,6 +264,9 @@ ENTRY(arm926_dma_inv_range)
+ /*
+ * cpu_arm926_reset(loc)
+@@ -251,10 +262,13 @@ ENTRY(arm926_dma_inv_range)
+ bic r0, r0, #CACHE_DLINESIZE - 1
+ 1: mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry
add r0, r0, #CACHE_DLINESIZE
cmp r0, r1
blo 1b
@@ -25720,7 +27965,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/proc-arm926.S ../new/linux-2.6.20/arch/arm
mcr p15, 0, r0, c7, c10, 4 @ drain WB
mov pc, lr
-@@ -274,6 +288,9 @@ ENTRY(arm926_dma_clean_range)
+ /*
+ * dma_clean_range(start, end)
+@@ -272,10 +286,13 @@ ENTRY(arm926_dma_clean_range)
+ 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry
+ add r0, r0, #CACHE_DLINESIZE
cmp r0, r1
blo 1b
#endif
@@ -25730,7 +27979,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/proc-arm926.S ../new/linux-2.6.20/arch/arm
mcr p15, 0, r0, c7, c10, 4 @ drain WB
mov pc, lr
-@@ -296,6 +313,9 @@ ENTRY(arm926_dma_flush_range)
+ /*
+ * dma_flush_range(start, end)
+@@ -294,10 +311,13 @@ ENTRY(arm926_dma_flush_range)
+ mcr p15, 0, r0, c7, c10, 1 @ clean D entry
+ #endif
add r0, r0, #CACHE_DLINESIZE
cmp r0, r1
blo 1b
@@ -25740,7 +27993,11 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/proc-arm926.S ../new/linux-2.6.20/arch/arm
mcr p15, 0, r0, c7, c10, 4 @ drain WB
mov pc, lr
-@@ -341,6 +361,10 @@ ENTRY(cpu_arm926_switch_mm)
+ ENTRY(arm926_cache_fns)
+ .long arm926_flush_kern_cache_all
+@@ -339,10 +359,14 @@ ENTRY(cpu_arm926_switch_mm)
+ @ && 'Clean & Invalidate whole DCache'
+ 1: mrc p15, 0, r15, c7, c14, 3 @ test,clean,invalidate
bne 1b
#endif
mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache
@@ -25751,12 +28008,16 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/proc-arm926.S ../new/linux-2.6.20/arch/arm
mcr p15, 0, ip, c7, c10, 4 @ drain WB
mcr p15, 0, r0, c2, c0, 0 @ load page table pointer
mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs
-@@ -411,6 +435,12 @@ __arm926_setup:
+ #endif
+ mov pc, lr
+@@ -409,10 +433,16 @@ __arm926_setup:
+ bic r0, r0, r5
+ orr r0, r0, r6
#ifdef CONFIG_CPU_CACHE_ROUND_ROBIN
orr r0, r0, #0x4000 @ .1.. .... .... ....
#endif
+#if CONFIG_L2CACHE_ENABLE
-+ l2_cache_disable r2, r3 @disable L2 Cache
++ l2_cache_disable r2, r3 @disable L2 Cache
+ l2_cache_configure r2, r3 @configures L2 Cache Controller
+ l2_cache_invalidate r2, r3
+ l2_cache_enable r2, r3 @enable L2 Cache
@@ -25764,10 +28025,13 @@ diff -Nauprw linux-2.6.20/arch/arm/mm/proc-arm926.S ../new/linux-2.6.20/arch/arm
mov pc, lr
.size __arm926_setup, . - __arm926_setup
-diff -Nauprw linux-2.6.20/arch/arm/oprofile/common.c ../new/linux-2.6.20/arch/arm/oprofile/common.c
---- linux-2.6.20/arch/arm/oprofile/common.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/arch/arm/oprofile/common.c 2008-09-17 13:23:32.000000000 +0530
-@@ -153,10 +153,11 @@ int __init oprofile_arch_init(struct opr
+ /*
+ * R
+--- linux-2.6.20.orig/arch/arm/oprofile/common.c
++++ linux-2.6.20/arch/arm/oprofile/common.c
+@@ -151,14 +151,15 @@ int __init oprofile_arch_init(struct opr
+ ops->setup = op_arm_setup;
+ ops->shutdown = op_arm_stop;
ops->start = op_arm_start;
ops->stop = op_arm_stop;
ops->cpu_type = op_arm_model->name;
@@ -25780,1482 +28044,39 @@ diff -Nauprw linux-2.6.20/arch/arm/oprofile/common.c ../new/linux-2.6.20/arch/ar
return ret;
}
-diff -Nauprw linux-2.6.20/Documentation/arm/STM-Nomadik/debug_strategy.txt ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/debug_strategy.txt
---- linux-2.6.20/Documentation/arm/STM-Nomadik/debug_strategy.txt 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/debug_strategy.txt 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,66 @@
-+
-+ * 1.1 Nomadik Development Debugging Strategy
-+ * ==========================================
-+ *
-+ * DEBUGGING LEVELS
-+ * 0 To disable all debug messages
-+ * 1 To enable normal debug macro- nmdk_dbg
-+ * 2 To enable flow trace debug macro- nmdk_dbg_ftrace
-+ * 4 To enable interrupt and timer debug macroc- nmdk_dbg2
-+ * 8 To enable any special debug messages defined by macro- nmdk_dbg3
-+ *
-+ *
-+ * 1.2 How to use Debuggign strategy in driver development ?
-+ * =========================================================
-+ *
-+ * 1. include debug-nomadik.h file in c code
-+ * (path: include/asm-arm/arch/nomadik/debug-nomadik.h)
-+ * 2. define NMDK_DEBUG to required debug level (this can be automated
-+ * to pass build time debug levels -as done for keypad driver.
-+ * See driver/input/keypad makefile)
-+ * 3. define NMDK_DEBUG_PFX to a small string to identify debug message
-+ * This is an optional setting, if you don't define NMDK_DEBUG_PFX,
-+ * by default "Nomadik" will be selected.
-+ * 4. define NMDK_DBG to desired Kerlen debug level
-+ * This is an optional setting, if you don't define NMDK_DBG,
-+ * by default KERN_DEBUG will be used
-+ * This generally need to set to KERN_ERR to force debug messages to
-+ * appear on the console
-+ *
-+ *
-+ * 1.3 How to activate debug messages?
-+ *====================================
-+ *
-+ * Debug messages can be activated during build time by passing desired
-+ * debug level either hardcoding in source file or as a make parameter
-+ *
-+ * 1. Enabling Debug messages by passing additional parameter to make
-+ * This is a recommended method of debug messages implimentation.
-+ * this method give flexibility to enable/disable debug messages
-+ * during build without modifying code
-+ * (a) To enable this you need to updated driver make file with:-
-+ * ex.
-+ * ifdef <DRVNAME>_DEBUG
-+ * CFLAGS += -<DRVNAME>_DEBUG=$(<DRVNAME>_DEBUG)
-+ * endif
-+ *
-+ * (b) Same <DRVNAME>_DEBUG must be used to define NMDK_DEBUG as
-+ * explained in (1.2.2)
-+ * (c) Debug parameter must be passed to the make with desired debug
-+ * level as explained in (1.1)
-+ * ex. make <DRVNAME>_DEBUG=1
-+ * (d) you can AND several debug levels togather to enable respective
-+ * debug mesages
-+ * (e) even you can pass additional parameters to enable debug messages
-+ * of more than one module
-+ * ex. make <DRV1>_DEBUG=1 <DRV2>_DEBUG=4 ...
-+ *
-+ * 2. Enabling Debug messages by hardcoding in source file
-+ * This is simplest implimentation, just define NMDK_DEBUG to
-+ * desired debug level and compile the code, the disadvantage of this
-+ * method is, it does not offer flexibility and code with debug message
-+ * may become part of your release if not taken care properly.
-+ *
-+ */
-+
-+
-diff -Nauprw linux-2.6.20/Documentation/arm/STM-Nomadik/dma_user_guide.txt ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/dma_user_guide.txt
---- linux-2.6.20/Documentation/arm/STM-Nomadik/dma_user_guide.txt 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/dma_user_guide.txt 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,420 @@
-+Filename: ./Documentation/arm/STM-Nomadik/dma_user_guide.txt
-+Author: Prafulla Wadaskar (prafulla.wadaskar@st.com)
-+Owner: STMicroelectronics
-+Purpose:
-+ This Users Guide explains DMA implimentation and its usage
-+ for client drivers on Nomadik platforms
-+=============================================================================
-+
-+This document is valid subject to assumption -
-+1. valid kernel source code with Nomadik support is available
-+2. you are familier with Kernal DMA interface
-+ (References: ./Documentation/DMA-API.txt)
-+
-+DMA Configuration:
-+===================
-+By default Nomadik DMA driver is configured to link staticlly with kernel.
-+This DMA driver provides low level interface to the kernel DMA interface.
-+To use DMA APIs, client driver should only include <asm/dma.h>
-+
-+Definations:
-+============
-+1. DMA Channel: The logical DMA channel can be used for a DMA transfer
-+2. Pipe: the physical DMA chanel H/w that is used to a DMA transfer
-+3. DMAC: Direct Memory Access Controller (Nomadik has two DMACs)
-+
-+Brief Architecture:
-+===================
-+DMA dirver is registered as amba device and will be probed only if
-+matches peripharal ID, the SOC specific data/function iterface is provided
-+through platfrom_data pointer to allign driver design in sync with multiboard
-+strategy.
-+There are two DMA controllers having 8 pipes each, there could be number of
-+dma channels which will use any one available pipe for dma transfer at run time
-+Kernel DMA interface defines and controls the interface, whereas the h/w
-+specific APIs are mapped through methods provided by upper layer (i,e.
-+arch/arm/kernel/dma.c). The configuration, usage and features provided by this
-+driver is explained below.
-+
-+This Users guide explains-
-+1. Support for Standard DMA APIs for Nomadik DMA usage
-+2. Additional DMA APIs to facilitate effieient/flexible DMA usage
-+3. DMA Channel configuration.
-+ a) Mode of operation: Transfer type
-+ b) Mode of operation: flow control
-+ c) Mode of operation: Double Buffered Transfer
-+ d) Mode of operation: Infinite DMA Transfer
-+ e) Mode of operation: Infinite DMA Transfer
-+ f) Mode of operation: Pipe reservation
-+ g) Mode of operation: Channel Priority
-+ h) Mode of operation: Queueing DMA transfer requests
-+4. DMA Interrupt hanndling for callback functions.
-+5. Scatter-gather Support
-+6. /proc/dma interfce.
-+7. HOWTO add new DMAable peripharal device support
-+
-+1. Support for Standard DMA APIs for Nomadik DMA usage
-+======================================================
-+Standard kernel DMA interface exports APIs out of which request_dma, enable_dma,
-+disable_dma, free_dma, dma_channel_active, set_dma_sg, __set_dma_addr, set_dma_count,
-+are supported for Nomadik DMA Usage.
-+For any DMA transfer you need to follow a sequence-
-+ a) request_dma : to request a DMA channel be to used for transfer,
-+ in this request you need to pass configuration
-+ b) request_irq : to register DMA callback function
-+ c) __set_dma_srcaddr : to set src DMAble address (mapped to __set_dma_addr)
-+ d) __set_dma_destaddr : to set dest DMAble address (mapped to set_dma_speed)
-+ e) set_dma_count : to set transfer size in bytes
-+ f) set_dma_mode : to set/ulter mode of operation (optional)
-+ g) enable_dma : to start transfer
-+ h) dma_channel_active : to know the status of scheduled transfer (optional)
-+ i) disable dma : to stop transfer (optional)
-+ j) free_irq : to free irq used for callback (optional)
-+ k) free_dma : to free requested DMA channel
-+
-+2. Additional DMA APIs for effieient/flexible DMA usage
-+=======================================================
-+Following additional APIs are provided for effieient/flexible DMA usage
-+ a) request_available_dma
-+ : This is a wrapper over request_dma,
-+ this API will search, allocate and return available
-+ free DMA channel.
-+ b) suspend_DMA : to pause currently active DMA transfer
-+ c) resume_DMA : to resume previously paused DMA transfer
-+
-+3. DMA Channel Configureation:
-+==============================
-+Durring request_dma system call you need to pass a pointer of pre-filled DMA
-+Channel configuration structure nmdk_dma_info defined in asm/arch/dma.h
-+i.e.-
-+struct nmdk_dma_info {
-+ u32 mode; /* Mode of operation(xfer type/flow cntrl etc)*/
-+ char *srcdevtype; /* source device type configuration*/
-+ char *destdevtype; /* desitnation device type configuration*/
-+ u32 config; /* User programmable dmadev configuration*/
-+};
-+
-+Each DMA channle has source DMA device and a destination DMA device, a DMA
-+channel is a hardware that connects two DMAable devices for data transfer.
-+So to have a successfull DMA transfer you need to configure all these three.
-+Below picture gives some idea about it-
-+
-+
-+ --------------------
-+ srcdevtype, src_addr | | destdevtype, dest_addr
-+ def dmadev config | | default dmadev configuration
-+ | |
-+ (Src DMA periph)------>| DMA Channel |--------> (Dest DMA peripharal)
-+ | |
-+ --------------------
-+ (mode of operation)
-+ (User configuration)
-+ (Xfer Size in bytes)
-+
-+DMAable devices and their default configurations are SOC specific and declared
-+in arch/arm/mach-nomadik/<SOC_NAME>_devices.c file (will be explained latter
-+in this guide). Each DMAble device is identified by unique name, during
-+configuration the src and dest dmadev names need to be specified.
-+
-+Transfer Size in bytes, src_addr and dest_addr not a part of configuration as
-+they keeps changing and need to be provided before enable_dma request
-+
-+User programmable dmadev configuration: These are optional configuration on
-+the top of default for the changable paramters (specially Brust size and
-+transfer width). This will be exmpained latter in this guide
-+
-+for ex, to configure a dma chnnel for memory to MSP peripharal DMA transfer
-+the sructure should be filled as-
-+
-+ struct nmdk_dma_info test_dma_config =
-+ {
-+ .mode = MEM_TO_MEM,
-+ .srcdevtype = "mem",
-+ .destdevtype = "msp0rx",
-+ .config = NULL,
-+ };
-+
-+Out of all configuration parameter "mode" is very important since it decides
-+the mode of DMA channel operation, there are several features supported all
-+are configurable through mode.
-+
-+ a) Mode of operation: Transfer type
-+ there are four basic modes of operation those are
-+ MEM_TO_MEM, MEM_TO_PERIPH, PERIPH_TO_MEM, PERIPH_TO_PERIPH
-+ you should program any one as per you need.
-+
-+ for ex. dma_info.mode=MEM_TO_PERIPH;
-+
-+ b) Mode of operation: flow control
-+ By default flow controller is DMA controller, if you want to program
-+ flow controller as peripharal you can use the provided macros as
-+
-+ for ex. dma_info.mode=FLOW_CNTRL_DMA(MEM_TO_PERIPH);
-+ To mention the flow controller is DMA controller.
-+
-+ for ex. dma_info.mode=FLOW_CNTRL_PERIPH(MEM_TO_PERIPH);
-+ To mention the flow controller is peripharal controller.
-+
-+ Flow controller device cannot be peripharal for MEM_TO_MEM transter
-+
-+ c) Mode of operation: Double Buffered Transfer
-+ There are some peripharals like SAA(Smart Audio Accelerator) who
-+ requires DMA transfers to be done in double buffer mode, in double
-+ buffered mode of operation the current dma requested in divided in two,
-+ equal sequential transfers before scheduling.
-+
-+ By default standard single buffered transfer mode is programmed,
-+ to configure Double Buffered Transfer mode a macro DMA_DOUBLE_BUFFERED
-+ should be ORed with other configuration parameters
-+
-+ for ex. dma_info.mode=DMA_DOUBLE_BUFFERED |
-+ FLOW_CNTRL_DMA(MEM_TO_PERIPH);
-+
-+ d) Mode of operation: Infinite DMA Transfer
-+ If you want to establish DMA transafer between two DMAble devices
-+ infinitely without CPUs intervention, this means once transfer is
-+ scheduled, it will reschedule it self at completion automatically.
-+
-+ By default infinite DMA transfer is disabled,
-+ to configure Infinite DMA Transfer mode a macro DMA_INFINITE_XFER
-+ should be ORed with other configuration parameters
-+
-+ for ex. dma_info.mode=DMA_INFINITE_XFER |
-+ FLOW_CNTRL_DMA(MEM_TO_PERIPH);
-+
-+ In Infinite DMA transfer mode, you will never receive completion
-+ interrupt and callback interrupt handler cannot be executed
-+
-+ e) Mode of operation: Pipe reservation
-+ Reserving a pipe will dediate a pipe for a channel
-+ By default pipe is not reserved at the time of configuration. when you
-+ schedule a enable_dma request, system looks for the available pipe and
-+ schedules a transfer on it. This adds more flexibility to system to
-+ handle more channels on limited pipes. In case the all the pipes are
-+ busy the request will be deffered,
-+ if you want to avoid this behavior, i.e. whenever you request enable_dma
-+ pipe must be available to execute it, then you can reserve a pipe during
-+ configuration.
-+
-+ to reserve a pipe, a macro DMA_PIPE_RESERVED
-+ should be ORed with other configuration parameters
-+
-+ for ex. dma_info.mode=DMA_PIPE_RESERVED |
-+ FLOW_CNTRL_DMA(MEM_TO_PERIPH);
-+
-+ g) Mode of operation: Channel Priority
-+ At hardware level there are total 16 DMA pipes (i.e. 8 on each
-+ DMAC) each having its priority (i.e. pipe 0 having highest and 7 with
-+ lowest). but since the pipes are allocated dynamically you never know
-+ which pipe will be assigned to which channel. To take care of this
-+ issue driver has in-built channel priority policy manager
-+
-+ Priority DMAC0 PIPES DMAC1 PIPES Policy
-+ -----------------------------------------------------
-+ Highest | 0 | | 1 | HIGH
-+ . | 2 | | 3 | (0->15)
-+ . -----------------------------------------------------
-+ . | 4 | | 5 | NORMAL
-+ . | 6 | | 7 | (4->15)
-+ . -----------------------------------------------------
-+ . | 8 | | 9 | LOW
-+ . | 10 | | 11 | (8->15)
-+ . -----------------------------------------------------
-+ . | 12 | | 13 | UNDEFINED (fm 15->0)
-+ Lowest | 14 | | 15 | For MEM-To MEM Xfer (15->12)
-+ -----------------------------------------------------
-+
-+ Channel priority setup during configuration tells additional
-+ information to the driver that the channel under request has a
-+ particular priority. And the pipe allocation policy of a driver
-+ allocates a pipe accordingly for a transfer under schedule.
-+
-+ By default DMA_EXCH_PRIORITY_UNDEFINED is set for each channel, as
-+ per policy the free and available pipe search will be started from
-+ lowest to highest.
-+ there are three other priorities HIGH, NORMAL and LOW which can be set
-+ by ORing respective macro with other configuration parameters
-+
-+ for ex. dma_info.mode=DMA_EXCH_PRIORITY_HIGH |
-+ FLOW_CNTRL_DMA(MEM_TO_PERIPH);
-+
-+ Channel priority setup macros for configurations-
-+ DMA_EXCH_PRIORITY_UNDEFINED
-+ DMA_EXCH_PRIORITY_LOW
-+ DMA_EXCH_PRIORITY_NORMAL
-+ DMA_EXCH_PRIORITY_HIGH
-+
-+ h) Mode of operation: Queueing DMA transfer requests
-+ In the standard kernel DMA interface channel queueing is not allowed
-+ once enable_dma request is executed system discards all subsequent
-+ enable_dma request untill DMA finishes first scheduled request.
-+ Nomadik DMA driver provides you flexibility to enable and use this
-+ feature if required. Enabling this feature will accept all subsequent
-+ enable_dma requests and queue them in a pipe, as system finishes
-+ current transfer, next pre-scheduled transfer in a queue will be
-+ executed, thus all enable_dma requests can be processed.
-+
-+ This feature can be enabled by ORing a macro DMA_QUEUE_ENABLED with
-+ other configuration parameters
-+
-+ for ex. dma_info.mode=DMA_QUEUE_ENABLED |
-+ FLOW_CNTRL_DMA(MEM_TO_PERIPH);
-+
-+4. DMA Interrupt hanndling for callback functions.
-+======================================================
-+When you schedule a DMA transfer, there should be a mechanism by which you know
-+the transfer is finished sucessfully. In Nomadik DMA transfer a terminal
-+count interrupt will be generated at the end of sucessfull transfer which can
-+be requested and processed like any other standard interrupt.
-+
-+There are S/w decoded IRQs associated with all DMA channels.
-+the macro IRQNO_FOR_DMACH(dmach) is provided to find irq for a DMA channel and
-+the macro DMACH_FOR_IRQNO(irq) can be used to find DMA channel for irq number
-+
-+The DMA callback functions can be invoked as interrupt handler and requested
-+through standard system calls i.e request_irq and free_irq.
-+
-+It is recommented to use your own tasklets to do deffered processing
-+since it may block other DMA interuppts being processed in time.
-+
-+Below system messages indicates that irqno 188 to 191 are DMA interrupts
-+root@NDK10_A0:/home/prafulla/alsa# cat /proc/interrupts
-+ CPU0
-+ 4: 12077:PL02 - Nomadik Timer Tick
-+ 10: 0 - rtc
-+ 11: 0 - ssp
-+ 17: 581:PL08 - uart-pl011
-+ 19: 6:PL10 - msp
-+ 20: 33 - i2c0
-+ 21: 296 - i2c1
-+ 22: 81:PL02 - NMDK_MMC (data)
-+ 26: 1 - SAA0
-+ 27: 0 - SAA1
-+113: 0 - mmc_detect
-+168: 19176:PL08 - eth0
-+188: 46 dummy dmaclbk-sdmmc->mem
-+189: 0 dummy <NULL>
-+190: 10462 dummy dmaclbk-msp0rx->mem
-+191: 10437 dummy dmaclbk-mem->msp0tx
-+Err: 0
-+
-+5. Scatter-gather Support
-+======================================================
-+The Nomadik DMA driver supprts scatter-gather transfer for MEM_TO_PERIPH and
-+PERIPH_TO_MEM type of data transfer. to use scatter gather suport following
-+sequence must be executed.
-+ a) request_dma, request_irq
-+ b) get the *sg and sg_len form the upper layers
-+ c) execute dma_map_sg with above information
-+ d) set peripharal DMA address (__set_dma_srcaddr / __set_dma_srcaddr)
-+ e) set memory DMA address using set_dma_sg API with sg information
-+ f) set_dma_count for transfer size
-+ g) execute enable_dma
-+ h) wait for transfer complete event through callback
-+ i) unmap sg list using dma_unmap_sg
-+ j) free_dma
-+
-+6. /proc/dma interfce.
-+======================================================
-+/proc/dma entry is created to show the information of allocated DMA resources
-+executing cat /proc/dma will list the allocation of all used DMA channles
-+
-+for ex-
-+root@NDK10_A0:/home/prafulla/alsa# cat /proc/dma
-+ 0: DMACH: sdmmc->mem
-+ 1: DMACH: mem->sdmmc
-+ 2: DMACH: msp0rx->mem
-+ 3: DMACH: mem->msp0tx
-+
-+7. HOWTO add new DMA peripharal device support
-+======================================================
-+As per multiboard strategy
-+(ref : ./Documentation/arm/STM-Nomadik/HOWTO-add_newboard.txt)
-+for each supported SOC there is an arch/arm/mach-nomadik/<SOC>_devices.c
-+In this file there is data structure "dmadev_default_config_tbl"
-+Add a new entry for the table for new DMA peripharal device
-+(refer Architecture.DMA Support Chapter fo SOC specification)
-+
-+for ex-
-+ {.id = "sdmmc",
-+ .config = ( DMA_AHB_M0 | DMA_ADR_NOINC | DMA_WIDTH_WORD |
-+ DMA_BSIZE_8 | DMA_REQUEST_LINE(21) |
-+ DMA_DEV_BSIZE_CONFIGURABLE | DMA_DEV_WIDTH_CONFIGURABLE |
-+ DMA_DEV_DMAC1_CANBE_USED ),},
-+
-+ explaination:
-+ id: This is the unique identification string will be used in
-+ configuration as srcdevtype or destdevtype.
-+ config: This should be ORed value of following selection
-+ a) DMA_AHB_M0 : to select AHB master 0 for this device
-+ or
-+ DMA_AHB_M1 : to select AHB master 1 for this device
-+
-+ b) DMA_ADR_INC : to indicate DMA address is incremented after
-+ each transfer (memory, buffer case)
-+ or
-+ DMA_ADR_NOINC : to indicate DMA address is not incremented
-+ after each transfer (fifo case)
-+
-+ c) DMA_WIDTH_WORD : to select word(32bits) as transfer width
-+ or
-+ DMA_WIDTH_HALFWORD: to select halfword(16bits) as transfer width
-+ or
-+ DMA_WIDTH_BYTE : to select byte(8bits) as transfer width
-+
-+ d) DMA_BSIZE_1 : to indicate 1 byte makes one DMA brust
-+ or
-+ DMA_BSIZE_4 : to indicate 4 bytes makes one DMA brust
-+ or
-+ DMA_BSIZE_8 : to indicate 8 bytes makes one DMA brust
-+ or
-+ DMA_BSIZE_16 : to indicate 16 bytes makes one DMA brust
-+ or
-+ DMA_BSIZE_32 : to indicate 32 bytes makes one DMA brust
-+ or
-+ DMA_BSIZE_64 : to indicate 64 bytes makes one DMA brust
-+ or
-+ DMA_BSIZE_128 : to indicate 128 bytes makes one DMA brust
-+ or
-+ DMA_BSIZE_256 : to indicate 256 bytes makes one DMA brust
-+
-+ e) DMA_REQUEST_LINE(x) : program peripharal request line number
-+ (x less than 32)
-+
-+ f) DMA_DEV_BSIZE_CONFIGURABLE: to indicate the burst size can be
-+ probrammed by user
-+ or
-+ DMA_DEV_BSIZE_NOT_CONFIGURABLE: to indicate the burst size can
-+ not be probrammed by user
-+ g) DMA_DEV_DWIDTH_CONFIGURABLE: to indicate the transfer width can
-+ be probrammed by user
-+ or
-+ DMA_DEV_DWIDTH_NOT_CONFIGURABLE: to indicate the transfer width
-+ can not be probrammed by user
-+
-+ h) DMA_DEV_DMAC1_CANBE_USED: to indicate DMA controller1 can be
-+ used for the transfer
-+ or
-+ DMA_DEV_DMAC0_CANBE_USED: to indicate DMA controller0 can be
-+ used for the transfer
-+ or
-+ DMA_DEV_BOTH_DMACS_CANBE_USED: to indicate both DMA controllers
-+ 0 and 1 can be used for the transfer
-+
-+8. System Limitations and Solutions:
-+=====================================
-+1. MAX_DMA_CHANNELS: This macro is defined (include/asm-arm/arch-nomadik/dma.h)
-+ that defiens max no. of dma channels that can be used simultenously. if in
-+ complex system scenario these channels are insuffienent, you may increase
-+ this number as per your needs.
-+2. MAX_DMA_LLIS: This macro is defined (include/asm-arm/arch-nomadik/dma.h)
-+ that defiens max no. of LLIs used internally by dma driver. lli pool is
-+ internally maitained by driver and aquired whenver there is a enable_dma
-+ request and freed at each dma transfer completion. In a dynamic system
-+ usage a run time message "unable to find free lli.. rechecking..." can be
-+ observed, if such case you may increase the defined value for this macro,
-+ Assiging very large value eats free DMAble memory.
-+
-+==============================================================================
-+
-+
-diff -Nauprw linux-2.6.20/Documentation/arm/STM-Nomadik/faqs.txt ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/faqs.txt
---- linux-2.6.20/Documentation/arm/STM-Nomadik/faqs.txt 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/faqs.txt 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,53 @@
-+Filename: ./Documentation/arm/STM-Nomadik/faqs.txt
-+Author: Prafulla Wadaskar (prafulla.wadaskar@st.com)
-+Owner: STMicroelectronics
-+Purpose:
-+ This documents describes frequesnty occuring problems and
-+ their brief solutions while using Nomadik-BSP
-+=============================================================================
-+
-+This document is valid subject to assumption -
-+1. valid kernel source code with Nomadik support is available
-+
-+F.A.Qs
-+======
-+Q: I am not getting console on CLCD even though CLCD is enabled
-+A: check your command line arguments, there should not be any console related
-+ configuration, in this case by default console will be configured to CLCD.
-+ In this case system will seek console input from standard input device.
-+
-+Q: NFS boot is giving messages "server not responding" very frequently
-+A: This may be due to network congestion, try NFS boot using "tcp" option
-+ (Ex. root=/dev/nfs nfsroot=<server_ipadr>:<mount_point_path>,tcp
-+ ip=<host_ipadr>:<server_ipadr>:<gateway_ipard>:255.255.255.0:<hostname>::
-+ console=ttyAMA1 mem=64M init=linuxrc)
-+
-+Q. How to enable/Disable cursor on CLCD panel?
-+A. Create a dummy node "mknod /dev/dummy c 4 0 ".
-+ execute a command "echo -e "\033[?1c" > /dev/dummy" to disable the cursor
-+ and "echo -e "\033[?0c" > /dev/dummy" to enable the cursor
-+ You can also use the "setterm" program to control this and other aspects of
-+ the console. "setterm -cursor off > /dev/tty0" will do what you want.
-+ "man setterm" will give a vast list of stuff.
-+ There is more here:
-+ http://linux.bri.st.com/docs/manual/distribution/distribution_guide10.php
-+
-+Q. How to disable CLCD screen blanking
-+A. Create a dummy node "mknod /dev/dummy c 4 0 ".
-+ Execute a command "echo -e "\033[9;0]" > /dev/dummy", this will set
-+ screen blanking interval to 0 and will not blank the screen at all.
-+
-+Q. Generally when the kernel is up and running, CLCD is active but after some
-+ time screen gets blanked, How to unblank the already blanked CLCD screen ?
-+A. Create a dummy node "mknod /dev/dummy c 4 0 ".
-+ Execute a command "echo -e "\033[13]" > /dev/dummy", this will activate
-+ CLCD screen.
-+
-+Q. How to enable L2 Cache for Nomadik SOCs
-+A. Switch to kernel source path, execute "make menuconfig"
-+ Enable option "Enable L2 Cache controller" at location "x -> System Type"
-+ L2CC is not available on STn8810 SOC versions
-+
-+==============================================================================
-+
-+
-diff -Nauprw linux-2.6.20/Documentation/arm/STM-Nomadik/gpio_user_guide.txt ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/gpio_user_guide.txt
---- linux-2.6.20/Documentation/arm/STM-Nomadik/gpio_user_guide.txt 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/gpio_user_guide.txt 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,140 @@
-+Filename: ./Documentation/arm/STM-Nomadik/gpio_user_guide.txt
-+Author: Prafulla Wadaskar (prafulla.wadaskar@st.com)
-+Owner: STMicroelectronics
-+Purpose:
-+ This Users Guide explains GPIO implimentation and its usage
-+ from other drivers for Nomadik platforms
-+=============================================================================
-+
-+This document is valid subject to assumption -
-+1. valid kernel source code with Nomadik support is available
-+
-+GPIO Configuration:
-+===================
-+By default GPIO driver is configured to link staticlly with kernel becasue
-+it is tightly coupled with irq.c. GPIO is necessary for Nomadik architecture
-+
-+Brief Architecture:
-+GPIO dirver is registered as amba device and will be probed only if
-+matches peripharal ID, the SOC specific data and function iterface is provided
-+through platfrom_data pointer to allign driver code in sync with multiboard
-+strategy.
-+
-+GPIO driver mainly provides two kinds of functionality
-+1. GPIO Interrupt hanndling and control.
-+2. Exported GPIO APIs
-+ 2.1 Usage of GPIO pins/block for read write APIs
-+ 2.2 Configuration for Alternate functions APIs
-+
-+1. GPIO Interrupt hanndling and control:-
-+==============================================
-+VIC generates a common interrupt for all 32 pins in a block, there are such
-+three to four blocks in a SOC, Each GPIO interrupt can be considered as
-+standard IRQ and can be processed through generic system call (please refer
-+irq_usrguide.txt). Further GPIO interrupts are softdecoded hence canot be
-+programmed as priority interrupts individually,
-+
-+2. Exported GPIO APIs
-+=====================
-+All exported GPIOs are protected against call before initialization. This
-+means if the GPIO driver cannot be probled due to any reasons and you try to
-+use GPIO exported APIs, and error will be returned.
-+APIS nomadik_gpio_readpin and nomadik_gpio_readblock are not protected against
-+interrupt configuration becasue reading a GPIO does not harm its usage from
-+other context. Where as all other APIS are protected against interrupt
-+cnfiguration. This means if the interrupt is already requested on a GPIO pin
-+the same pin cannot be configured untill you free that interrupt.
-+
-+2.1 Usage of GPIO pins/block for read write APIs
-+================================================
-+ a) nomadik_gpio_setpinconfig:
-+ Individual pin can be configured for desired operation.
-+ for ex.
-+ mmc_pin.dev_name = "test";
-+ mmc_pin.mode = GPIO_MODE_SOFTWARE;
-+ mmc_pin.direction = GPIO_DIR_OUTPUT;
-+ mmc_pin.debounce = GPIO_DEBOUNCE_ENABLE;
-+ mmc_pin.debounce_time = GPIO_DEBOUNCE_TIME_60_MICROSEC;
-+ ret = nomadik_gpio_setpinconfig(GPIO_PIN_75, &mmc_pin);
-+
-+ The above code will configure GPIO_PIN_75 in GPIO mode used as output
-+ pin, enabled debouncing logic and set debounce time to 60 miroseconds.
-+ debounce logic will be enabled if supported by the SOC version.
-+ dev_name is a client device name to which the GPIO will be allocated.
-+
-+ b) nomadik_gpio_resetpinconfig:
-+ sets the particular pin to its reset state.
-+
-+ c) nomadik_gpio_writepin;
-+ write HIGN or LOW value on specified pin
-+
-+ d) nomadik_gpio_readpin;
-+ reads HIGN or LOW value from specified pin
-+
-+ e) nomadik_gpio_readblock;
-+ write multiple bits on specifed group of GPIOs
-+ ex.
-+ err = nomadik_gpio_writeblock(GPIO_BLOCK_32_BITS_64_TO_95,
-+ , 0x0000aa00, 0x0000fc00);
-+
-+ The above code writes HIGH on GPIO_PIN_74, LOW on GPIO_PIN_75,
-+ HIGH on GPIO_PIN_76, LOW on GPIO_PIN_77, and HIGN on GPIO_PIN_78
-+
-+ f) nomadik_gpio_writeblock;
-+ reads multiple bits on specifed group of GPIOs
-+
-+2.2 Configuration for Alternate functions APIs
-+================================================
-+ a) nomadik_gpio_altfuncenable:
-+ Sets the group of GPIOs dedicated for spefic alternate mode of
-+ operation.
-+
-+ for ex.
-+ retval = nomadik_gpio_altfuncenable(GPIO_ALT_I2C_0, "I2C_0");
-+
-+ The above code configures GPIOs 62 abd 63 (in case of stn8810) for
-+ altfun_A, the detailed information which pins to be configured in which
-+ mode for specified gpio_alt_function value(GPIO_ALT_I2C_0) is decided by
-+ the gpio_altfun_tbl[] declared in <SOC>_devices.c. It has table entries
-+ whcih controls altfun configuration.
-+
-+ for example entry in table
-+ {.altfun = GPIO_ALT_I2C_0,.start = 62,.end = 63,.cont = 0,.type =
-+ GPIO_ALTF_A,},
-+ states that- for gpio_alt_function value GPIO_ALT_I2C_0, from gpio pins 62
-+ to 63 needs to be configured for alternate function A. cont=0 specifies that
-+ there are no further pins to be configured for GPIO_ALT_I2C_0.
-+
-+ example for cont=1
-+ {.altfun = GPIO_ALT_MM_CARD,.start = 8,.end = 10,.cont = 1,.type =
-+ GPIO_ALTF_A,},
-+ {.altfun = GPIO_ALT_SD_CARD,.start = 82,.end = 87,.cont = 1,.type =
-+ GPIO_ALTF_A,},
-+ {.altfun = GPIO_ALT_MM_CARD,.start = 14,.end = 16,.cont = 0,.type =
-+ GPIO_ALTF_A,},
-+
-+ In the above example cont=1 in first and second declaration states that there
-+ are additional entries in sequence to configure pins (82 to 87) and (14 to 16)
-+ in altfun A mode for the same gpio_alt_function value GPIO_ALT_MM_CARD
-+
-+ b) nomadik_gpio_altfuncdisable:
-+ This API reconfigures the group of GPIOs dedicated for specific
-+ alternate mode of operation in to GPIO mode.
-+
-+Secured GPIO Access:
-+===================
-+To prevent GPIO resources getting used/altered by unauthorised way, a method
-+is provided to give secured control. When gpio is requested by setpinconfig,
-+you need to specify dev_name, GPIO driver records the information that the
-+particular pin is alloocated the client named "dev_name", while doing
-+resetpinconfig the same dev_id must be passed.
-+Simillarly the same should be followed while requesting enabling/disabling altfunction.
-+When the GPIO is requested for interrupt, the specified devname will be
-+configured as client name.
-+
-+/proc/gpio interface:
-+====================
-+/proc/gpio entry is created to show the information of allocated GPIO resources
-+
-+=======================================================================================
-+
-diff -Nauprw linux-2.6.20/Documentation/arm/STM-Nomadik/HOWTO-add_newboard.txt ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/HOWTO-add_newboard.txt
---- linux-2.6.20/Documentation/arm/STM-Nomadik/HOWTO-add_newboard.txt 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/HOWTO-add_newboard.txt 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,111 @@
-+Filename: ./Documentation/arm/STM-Nomadik/HOWTO-add_newboard.txt
-+Author: Prafulla Wadaskar (prafulla.wadaskar@st.com)
-+Owner: STMicroelectronics
-+Purpose:
-+ This HOWTO explains guidlines for addition of new Nomadik
-+ board support to the kernel source code
-+===============================================================================
-+
-+This document is valid subject to assumption -
-+1. valid kernel source code with Nomadik support is available
-+
-+Nomadik BSP kernel file naming conventions
-+============================================
-+It is strongly recommended to follow below filename conventions while adding
-+new board support for Nomadik
-+1. All the Nomadik architecture specific code must be in mach-nomadik and
-+ arch-nomadik folders in a kernel tree.
-+2. Generic and Nomadik specific device drives may be located into the respective
-+ folder in the kernel source tree (ex. nomadik keypad driver in
-+ drivers/input/keyboard/kpd-nomadik.c)
-+3. all Nomadik specific files in mach-nomadik and arch-nomadik folders should
-+ be named as <comp>.c/h
-+ (ex. gpio.h, msp.c)
-+4. all Nomadik platform specific files are named as <platform>_<purpose>.c/h
-+ (ex. ndk10_devices.c, ndk15_devices.h)
-+5. all Nomadik soc specific files are named as <soc>_<purpose>.c/h
-+ (ex. stn8810_devices.h, stn8815_devices.c)
-+
-+Important definations
-+==============================
-+1. target: It is a unique identity to describe supported board with a specific
-+ board version and specific SOC version.
-+ target is created by combination of board (i.e. platform) and
-+ Nomadik chip version (i.e. soc)
-+
-+2. platform: It is refered for board to be supported.
-+ One plaform may be supported by several targets
-+ One plaform may be supported by several socs
-+
-+3. soc: It is refered for the Nomadik chip version to be suported.
-+ same soc may be supported on several platforms
-+
-+Hence any Nomadik borad is identified as a "target" and supported by "soc"
-+ specific code and "platform" specific code well interfaced with generic
-+ code.
-+
-+Device driver Support for Nomadik:
-+====================================
-+1. All the drivers suported on a target can be either SOC or platform specific
-+2. A platform specific code for all supported driver will be refered from a
-+ single file <platform_name>_devices.c through device specific interface.
-+3. A Nomadik chip specific code for all supported driver will be refered from a
-+ single file <soc_name>_devices.c through device specific interface.
-+4. Each device specific header file <pltfomr_name>_devices.h and
-+ <soc_name>_devices.h must be maintained to share a common hardware
-+ parameters across the drivers. Those two files are included in
-+ asm/arch/hardware.h which is further refered through asm/hardware.h
-+ Hence any kernel code seeking for hardware specific information (like
-+ base address, irqnos) can be made available by just including
-+ <asm/hardware.h>
-+5. Each header file described here should have relevent declaration related to
-+ the scope of its usage. ex. <platform_name>_devices.h should only have
-+ platforms specific declration.
-+
-+Any Nomadik target can be supported by following set of files:-
-+ arch/arch/mach-nomadik/<soc_name>_devices.c
-+ inclue/asm-arm/arch-nomadik/<soc_name>_devices.h
-+ arch/arch/mach-nomadik/<platform_name>_devices.c
-+ inclue/asm-arm/arch-nomadik/<platform_name>_devices.h
-+
-+But Generally, New board support will be added for already suported SOCs
-+hence, to add support for any new Nomadik target only three files need to be
-+added, those are:-
-+ arch/arch/mach-nomadik/<target_name>_Kconfig
-+ arch/arch/mach-nomadik/<platform_name>_devices.c
-+ inclue/asm-arm/arch0-nomadik/<platform_name>_devices.h
-+
-+Steps to follow to add new target support for Nomadik
-+========================================================
-+1. Add ./arch/arm/mach-nomadik/<target_name>_Kconfig file for board
-+ configuration, <target_name> specified here will reflect as machine name.
-+
-+ During make config/menuconfig arch/arm/mach-nomadik/Kconfig will be
-+ checked, and if is not found, it will be created automatically using
-+ all <target_name>_Kconfig files and Kconfig_nomadik file.
-+ 1. <target_name>_Kconfig file contain board specific configuration
-+ 2. Kconfig_nomadik contains generic configuration for all nomadik
-+ platforms
-+ for details refer provided ndk10_cut_a1_Kconfig file
-+
-+2. Add ./arch/arm/mach-nomadik/<platform_name>_devices.c file
-+ This file contains all the platfrom specific functions and data
-+ structures used by rest of the code. Any driver suported for Nomadik
-+ platform must access all the paramters through this file
-+ (for ex. base addres, irq number and other plaform specific data
-+ structures and function)
-+ It is recommended to refer such file for already suported platform
-+
-+3. Add ./include/asm-arm/arch-nomadik/<platform_name>_devices.h file
-+ This file must contain all the declarations for this platform
-+ which may be refered by the other drivers and kernel code.
-+ Note that this file is refered by some assembly code hence the
-+ content of this files must be maintained simple, standard and
-+ generic.
-+ It is recommended to refer such file for already suported platform
-+
-+With the above addition/modification New target support will be available.
-+Select newly supported target in kernel configuration, build and execute
-+the code on new target
-+===============================================================================
-+
-diff -Nauprw linux-2.6.20/Documentation/arm/STM-Nomadik/HOWTO-nfsboot.txt ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/HOWTO-nfsboot.txt
---- linux-2.6.20/Documentation/arm/STM-Nomadik/HOWTO-nfsboot.txt 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/HOWTO-nfsboot.txt 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,106 @@
-+This HOWTO esplains mounting the root file system via NFS on Nomadik Platform (nfsroot)
-+
-+As you know, all of us spend lot of time in-
-+1. Unzip/mount initrd to put the modules/application under test
-+2. Copying modules/applications to initrd
-+3. Unmount/gzip operation with initrd
-+4. Then load huge initrd and kernel each time to target board
-+ for execution.
-+
-+So for each time even for a small change we need to repeat this process, and
-+downloading and system re-initialization eats lot of our development time.
-+Nfsroot is a good solution to overcome above issues.
-+
-+Root file system can be mounted via NFS (nfsroot) on host and can be accessed
-+from your target machin.
-+
-+Advantages of this method are:-
-+===============================
-+1. No need to download ramdiks time to time (saves lot of time)
-+2. Since file system is on NFS, runtime results/logs dooes not vanishes
-+ in case of nomadik-system crash
-+3. Since file system is on NFS, it is transperant to host and target
-+4. Making, updating, mounting, unmounting, zipping, unzipping activities
-+ associated with ramdisk can be totally avoided (saves lot of time)
-+5. Offers comfortable and fast development environment
-+
-+Host configuration to enable root NFS:-
-+========================================
-+1. Copy a "target" folder from toolchain at some fixed path on your Linux
-+ host
-+2. Switch to the dev folder of newly created target folder and create
-+ a node for console with command "mknod console c 5 1"
-+3. Then swtich to the target folder and create a symbolic link with
-+ command "ln -s /bin/busybox linuxrc
-+4. FTP and TFTP should be enabled on the host system. You can check the
-+ configuration by issuing the following command
-+
-+#> chkconfig --list | grep ftp
-+
-+Output should look like :-
-+vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
-+ gssftp: off
-+ tftp: on
-+
-+Note: Method of enabling FTP can be different for different versions of Linux.
-+
-+5. NFS should be enabled. Same can also be checked with the following
-+ command
-+
-+#> chkconfig --list | grep nfs
-+
-+Output should looklike
-+nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
-+
-+6. Also, check the entries of the /etc/xinetd.d/tftp file accordingly.
-+ In our case, it is :
-+
-+service tftp
-+{
-+ disable = no
-+ socket_type = dgram
-+ protocol = udp
-+ wait = yes
-+ user = root
-+ server = /usr/sbin/in.tftpd
-+ server_args = -T 100000000 -v -c -s
-+/local_no_backup
-+# server_args = -s /tftpboot
-+ per_source = 11
-+ cps = 100 2
-+ flags = IPv4
-+}
-+
-+7. Also make the entries in /etc/exports for the file systems that need
-+ to be shared. For options used, please refer the man pages of exports.
-+ In our case, it is :
-+
-+/rtrt *(rw,insecure,no_root_squash,async)
-+/local_no_backup/target *(rw,insecure,no_root_squash,async)
-+
-+How to enable NFS feature in your development?
-+===============================================
-+1. Of cource you need to work on ethernet based environment
-+2. Enable ethernet driver in your kernel image
-+3. Enable following settings in your kernel image to enable nfsroot
-+a. Networking options --->IP: kernel level autoconfiguration
-+b. Networking options --->IP: BOOTP support
-+c. File systems --->Network File Systems --->NFS file system support
-+d. File systems --->Network File Systems --->Provide NFSv3 client support
-+e. File systems --->Network File Systems --->Root file system on NFS
-+4. Then compile kernel image, prepare uimage and download into the target
-+5. Set the command line arguments as -
-+
-+ "set bootargs root=/dev/nfs nfsroot=<HOST_IP_ADDR>:/<PATH>/ramdisk
-+ip=<TARGET_IP_ADDR>:<HOST_IP_ADDR>:<GATWAY_IP_ADDR_FOR_TARGET>:255.255.255.0:nomadik:: console=ttyAMA1 mac=<MAC_ADDRESS> init=linuxrc"
-+
-+for example:-
-+"set bootargs root=/dev/nfs nfsroot=10.199.3.88:/local_no_backup/target
-+ip=10.199.32.165:10.199.3.88:10.199.32.254:255.255.255.0:NDK10_165::
-+mac=00:0D:88:45:5D:A5 console=ttyAMA1,115200n8 init=linuxrc"
-+
-+6. And then boot the kernel with command "bootm 0x100000"
-+ (initrd address not needed since NFS)
-+
-+Start enjoying the advantages of root NFS
-+
-diff -Nauprw linux-2.6.20/Documentation/arm/STM-Nomadik/irq_usrguide.txt ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/irq_usrguide.txt
---- linux-2.6.20/Documentation/arm/STM-Nomadik/irq_usrguide.txt 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/irq_usrguide.txt 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,171 @@
-+Filename: ./Documentation/arm/STM-Nomadik/irq_usrguide.txt
-+Author: Prafulla Wadaskar (prafulla.wadaskar@st.com)
-+Owner: STMicroelectronics
-+Created: 9th June 2007
-+
-+Purpose:
-+This Users Guide explains interrupts implimentation and its usage from other
-+client drivers for Nomadik platforms
-+
-+This document is valid subject to assumption -
-+1. valid kernel source code with Nomadik support is available
-+
-+Generic:
-+========
-+All the available interrupts can be used in through standard system calls
-+To use nomadik interrupts, include <linux/interrupt.h> ONLY in your code
-+Interrupt numbers generic to all Nomadik cuts are defined in irqs.h
-+Interrupt numbers specific to Nomadik cut is defined in <soc>_devices.h
-+(refer HOWTO-add_newboard.txt for more information)
-+
-+IRQ Description:
-+================
-+for stn8810 chip:
-+ IRQ0 to IRQ31 : IRQ lines provided by the VIC for different
-+ on-chip peripharals.
-+ IRQ32 to IRQ127 : IRQ lines for GPIO interrupts
-+
-+for stn8815 chip:
-+ IRQ0 to IRQ63 : IRQ lines provided by the VIC for different
-+ on-chip peripharals.
-+ IRQ64 to IRQ191 : IRQ lines for GPIO interrupts
-+
-+Specific:
-+========
-+1. Vectored Interrupt Controller (VIC) Interrupt Priority configuration:-
-+========================================================================
-+Generally whenever there is IRQ request to the VIC it will be processed
-+immediately, if two or more IRQs active at a time then first in a sequence
-+(i.e lower in number) will be processed first (this depends how you decode
-+irqnr in entry-macro.S).
-+
-+Vectored interrupt processing hardware on Nomadik SOC is used to detect,
-+process and service the interrupts in prioritized manner.
-+This provides faster interrupt processing for comples decision.
-+This adds more flexibility to the system and to the driver developers to
-+take complex decision making about which interrupt to be proceesed first
-+when more than one IRQ goes active at a time.
-+
-+also while processing priority interrupt all lower priority interrupts will
-+be disabled by hardware whereas all higher priority interrupts will be active.
-+This adds a benefit to use SA_IRQPRIORITY_x over SA_INTERRUPT becasue
-+SA_INTERRUPT disables all interrupt while processign it.
-+
-+Any 15 (maximum) IRQs lines of VIC can be programmed for priority,
-+GPIO_IRQs cannot be programmed for priority since the are softdecoded.
-+
-+How to program a interrupt for desired priority?
-+================================================
-+this can be done in two ways
-+a. using request_irq
-+ for ex.
-+ err = request_irq(IRQ_UART1, test_inthandle, SA_IRQPRIORITY_4,
-+ "test", test_data);
-+
-+ will request IRQ with interrupt priority level 4
-+
-+b) using set_irq_type
-+ This call can be used any time after requesting a interrupt to
-+ to enable/disable/change priority level for specific IRQ line
-+
-+ For ex.
-+ set_irq_type(IRQ_UART1, SA_IRQPRIORITY_10);
-+
-+ will enable priority level for pre-requested IRQ
-+ if IRQ was requested with different priority level earlier,
-+ this call will change it to specified level
-+
-+How to disable interrupt priority for a IRQ?
-+===========================================
-+a) using set_irq_type api
-+ This call can be used any time after requesting a interrupt to
-+ to enable/disable/change priority level for specific IRQ line
-+
-+ For ex.
-+ set_irq_type(IRQ_UART1, SA_IRQPRIORITY_DISABLE);
-+
-+ will disable priority level for pre-requested IRQ and will configure
-+ if as normal IRQ
-+
-+How to know which IRQs are programmed for priority?
-+===================================================
-+executing cat /proc/interrupts interface will display all interrupt information
-+if any IRQ is programmed with some priority then it will reflect as-
-+
-+# cat /proc/interrupts
-+ CPU0
-+ 4: 143193 Nomadik Timer Tick
-+ 10: 0 rtc
-+ 11: 0 ssp
-+ 13: 1 dma1
-+ 15: 0 dma0
-+ 17: 745 uart-pl011
-+ 20: 0 i2c0
-+ 21: 4 i2c1
-+ 22: 132 NMDK_MMC (data)
-+ 30: 0:PL07 msp1
-+ 31: 0 msp2
-+ 72: 122 nmdk-kp
-+ 77: 433 eth0
-+ 79: 5175 nmdk-tp
-+ 81: 32 mmc_detect
-+Err: 0
-+#
-+
-+Above message indicates that IRQ30 for msp1 is programmed as priority interrupt
-+with level 7.
-+
-+2. GPIO Interrupt hanndling and control:-
-+==============================================
-+GPIO Interrupt control is handled through standard system calls. The macros
-+(IRQNO_GPIO(x) and GPIO_PIN_FOR_IRQ(x)) are provided to find out interrupt
-+number associated with GPIO and vice-versa.
-+Following system calls are suported for GPIO interrupt control:-
-+a) request_irq/ free_irq:
-+ works in a standard way to request and free GPIO interrupt.
-+ When request_irq is invoked for GPIO, it first configures GPIO pin
-+ for input operation with debounce disable (if supported). Then it sets
-+ interrupt type for falling edge detection by default if not specified
-+ in interrupt_flags. You can set type of interrupt during request by
-+ passing required SA_TTRIGGER_ flags. GPIO interrupt type will be set
-+ during request_irq call if the requested interrupt is NOT shared.
-+
-+ for ex.
-+ err = request_irq(IRQNO_GPIO(x), test_inthandle, SA_TRIGGER_RISING,
-+ "test", test_data);
-+
-+ will request rising edge interrupt for GPIO x
-+
-+b) enable_irq/disable_irq:
-+ These are standard system calls can be used to enable or disable GPIO
-+ irqs whenever required.
-+
-+ for ex.
-+ enable_irq(IRQNO_GPIO(x));
-+
-+ will enable interrupt for GPIO x
-+
-+c) set_irq_type:
-+ By defult interrupt is requested as falling edge through request_irq call.
-+ If you want to use other type of interrupt detection, this call can be used.
-+ This call will be necessary to configure shared GPIO interrupt
-+
-+ For ex.
-+ set_irq_type(IRQNO_GPIO(x), SA_TRIGGER_LOW);
-+ sets irq type as low level detection
-+
-+ set_irq_type(IRQNO_GPIO(x), (SA_TRIGGER_RISING|SA_TRIGGER_FALLING);
-+ sets irq type for both edges detection
-+
-+ Please note that set_irq_type overwites previous irq_type, hence the GPIO
-+ interrupt behaviour depends upon where you call this API.
-+
-+ for ex. if you set_irq_type first and then requested interrupt, the
-+ request_irq will overwrite the previously set irq type and vice versa.
-+
-+d) enable_irq_wake/disable_irq_wake:
-+ the frame work is provided to handle these call for GPIO interrupt to
-+ enable/disable wakup event generation to the power management unit.
-+
-+===============================================================================
-+
-diff -Nauprw linux-2.6.20/Documentation/arm/STM-Nomadik/power_management.txt ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/power_management.txt
---- linux-2.6.20/Documentation/arm/STM-Nomadik/power_management.txt 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/Documentation/arm/STM-Nomadik/power_management.txt 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,122 @@
-+
-+ * 1 Nomadik Power Management Strategy
-+ * ==========================================
-+ * Power in nomadik can be saved by following features
-+ * 1. Enable idle tick suppression or dynamic tick
-+ * 2. Frequency scaling
-+ * 3. Voltage scaling
-+ * 4. Take system into soft sleep
-+ * 5. Take system into deep sleep
-+ * 6. Taking individual device (eg. CLCD) into suspend state
-+ *
-+ *
-+ * 1.1 How to Enable idle tick suppression or dynamic tick
-+ * =========================================================
-+ *
-+ * 1. Select CONFIG_NO_IDLE_HZ in kernel features in kernel configuration
-+ * 2. To enable dynamic tick
-+ * echo -n 1 > /sys/devices/system/timer/timer0/dyn_tick
-+ * 3. Dynamic tick can be disabled by
-+ * echo -n 0 > /sys/devices/system/timer/timer0/dyn_tick
-+ * 4. In idle thread, arm put itself in WFI, hence power is saved. By using
-+ * dynamic tick we can put ARM in WFI for longer duration
-+ *
-+ * 1.2 Scaling frequencies
-+ *====================================
-+ * 1. Select CONFIG_CPU_FREQ & CONFIG_CPU_FREQ_NOMADIK in kernel configuration
-+ * during compilation
-+ * 2. Check current frequency (In Khz) by
-+ * cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
-+ * 3. Change system freq by
-+ * echo -n <freq in khz > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
-+ * If entered freq is not supported in system then next higher valid
-+ * frequency is set
-+ * 4. For frequencies which require voltage change, new voltage will be
-+ * reflected. It can be checked by voltage sysfs file
-+ * 5. If mapping for frequency and voltage is changed then change is required
-+ * in arch/arm/mach-nomadik/power.c
-+ * 6. If different SDRAM parameters are to be changed then change is required
-+ * in arch/arm/mach-nomadik/power.c
-+ * 7. If frequencies are to be altered then change is required in arch/arm/mach-nomadik/power.c
-+ *
-+ *
-+ * 1.3 Scaling Voltage
-+ *====================================
-+ * 1. To enable voltage scaling either CONFIG_CPU_FREQ or CONFIG_PM_NOMADIK
-+ * must be selected in configuration
-+ * 2. Current voltage can be checked by
-+ * cat /sys/nomadik/current_voltage
-+ * VOLTAGE will be shown in milli volt
-+ * 3. To change in current voltage without changing frequency use
-+ * echo < voltage in milli volt > > current_voltage
-+ * However directly changing voltage without frequency is not recommended
-+ * but can be used for performance/testing purpose.
-+ * 4. If voltages are to be altered then change is required in arch/arm/mach-nomadik/power.c
-+ *
-+ *
-+ * 1.4 Taking system into soft sleep
-+ *====================================
-+ * 1. Select CONFIG_PM and CONFIG_NOMADIK_PM and CONFIG_NOMADIK_RTC
-+ * 2. Change required sleep type to softsleep by
-+ * echo -n softsleep > /sys/nomadik/sleep_type
-+ * 3. To take system into sleep use
-+ * echo -n mem > /sys/power/state
-+ * 4. Wakeup can be done by RTC or keypad/touch panel/MMC
-+ * 5. To specify rtc wakeup duration ( sleeping time )
-+ echo -n <sleep duration in seconds > >sleep_duration
-+ Default sleep duratioon is 15 seconds
-+ * 6. To take system directly into soft sleep without linux power management
-+ * framework use
-+ * echo 1 > /sys/nomadik/softsleep_enable
-+ * This is to be used when we are sure that no driver is active i.e.
-+ * driver need not be be suspended. This interface can save transition
-+ * time but is not recommended. It can be used for testing purpose.
-+ *
-+ *
-+ * 1.5 Taking system into deep sleep
-+ *====================================
-+ * 1. Select CONFIG_PM and CONFIG_NOMADIK_PM and CONFIG_NOMADIK_RTC
-+ * 2. Change required sleep type to deepsleep by
-+ * echo -n deepsleep > /sys/nomadik/sleep_type
-+ * 3. To take system into sleep use
-+ * echo -n mem > /sys/power/state
-+ * 4. Wakeup can be done by RTC or keypad/touch panel/MMC
-+ * 5. To specify rtc wakeup duration ( sleeping time )
-+ * echo -n <sleep duration in seconds > >sleep_duration
-+ * Default sleep duration is 15 seconds
-+ *
-+ * 1.6 Taking Individual device into suspend/resume state
-+ *=======================================================
-+ * 1. Individual device can be taken into suspended state by writing into sysfs
-+ * file. Similiarly device can be resumed back
-+ * 2. For example to take CLCD into suspend state use
-+ echo -n 2 > /sys/devices/mb:c0/power/state
-+ * 3. For example to take CLCD into resumed state use
-+ echo -n 0 > /sys/devices/mb:c0/power/state
-+ * 4. Similar things can be done for other devices. Few devices such as RTC,
-+ * GPIO should not be takne into suspend state by this interface.
-+ *
-+ *
-+ * 1.7 Enabling/Disabling Individual devices(Keypad, Touchpanel, MMC) as wakeup devices
-+ *===================================================================================
-+ * 1. To enable a device (for e.g. keypad ) to be able to wakeup system from sleep do
-+ * echo enabled > /sys/devices/platform/nmdk-kp.0/power/wakeup
-+ * 2. To enable a device (for e.g. keypad ) to be able to wakeup system from sleep do
-+ * echo disabled > /sys/devices/platform/nmdk-kp.0/power/wakeup
-+ * If a device's wakeup state is disabled, it cannot be used for waking the
-+ * system from sleep.
-+ * 3. Above steps are applicable for any device that can wakeup the system
-+ *
-+ *
-+ * 1.8 To add a device that can be used to wakeup
-+ *================================================
-+ * 1. To make a platform device to be able to wakeup a system, change is
-+ * required in board specific file like arch/arm/mach-nomadik/ndk15_devices.c
-+ * 2. To make a amba device to be able to wakeup a system, change is required
-+ * in platform specific file like arch/arm/mach-nomadik/stn8815_devices.c
-+ *
-+ *
-+ *
-+ */
-+
-+
-diff -Nauprw linux-2.6.20/Documentation/DocBook/kgdb.tmpl ../new/linux-2.6.20/Documentation/DocBook/kgdb.tmpl
---- linux-2.6.20/Documentation/DocBook/kgdb.tmpl 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/Documentation/DocBook/kgdb.tmpl 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,234 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
-+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
-+
-+<book id="kgdbInternals">
-+ <bookinfo>
-+ <title>KGDB Internals</title>
-+
-+ <authorgroup>
-+ <author>
-+ <firstname>Tom</firstname>
-+ <surname>Rini</surname>
-+ <affiliation>
-+ <address>
-+ <email>trini@kernel.crashing.org</email>
-+ </address>
-+ </affiliation>
-+ </author>
-+ </authorgroup>
-+
-+ <authorgroup>
-+ <author>
-+ <firstname>Amit S.</firstname>
-+ <surname>Kale</surname>
-+ <affiliation>
-+ <address>
-+ <email>amitkale@linsyssoft.com</email>
-+ </address>
-+ </affiliation>
-+ </author>
-+ </authorgroup>
-+
-+ <copyright>
-+ <year>2004-2005</year>
-+ <holder>MontaVista Software, Inc.</holder>
-+ </copyright>
-+ <copyright>
-+ <year>2004</year>
-+ <holder>Amit S. Kale</holder>
-+ </copyright>
-+
-+ <legalnotice>
-+ <para>
-+ This file is licensed under the terms of the GNU General Public License
-+ version 2. This program is licensed "as is" without any warranty of any
-+ kind, whether express or implied.
-+ </para>
-+
-+ </legalnotice>
-+ </bookinfo>
-+
-+<toc></toc>
-+ <chapter id="Introduction">
-+ <title>Introduction</title>
-+ <para>
-+ kgdb is a source level debugger for linux kernel. It is used along
-+ with gdb to debug a linux kernel. Kernel developers can debug a kernel
-+ similar to application programs with the use of kgdb. It makes it
-+ possible to place breakpoints in kernel code, step through the code
-+ and observe variables.
-+ </para>
-+ <para>
-+ Two machines are required for using kgdb. One of these machines is a
-+ development machine and the other is a test machine. The machines are
-+ typically connected through a serial line, a null-modem cable which
-+ connects their serial ports. It is also possible however, to use an
-+ ethernet connection between the machines. The kernel to be debugged
-+ runs on the test machine. gdb runs on the development machine. The
-+ serial line or ethernet connection is used by gdb to communicate to
-+ the kernel being debugged.
-+ </para>
-+ </chapter>
-+ <chapter id="CompilingAKernel">
-+ <title>Compiling a kernel</title>
-+ <para>
-+ To enable <symbol>CONFIG_KGDB</symbol>, look under the "Kernel debugging"
-+ and then select "KGDB: kernel debugging with remote gdb".
-+ </para>
-+ <para>
-+ The first choice for I/O is <symbol>CONFIG_KGDB_ONLY_MODULES</symbol>.
-+ This means that you will only be able to use KGDB after loading a
-+ kernel module that defines how you want to be able to talk with
-+ KGDB. There are two other choices (more on some architectures) that
-+ can be enabled as modules later, if not picked here.
-+ </para>
-+ <para>The first of these is <symbol>CONFIG_KGDB_8250_NOMODULE</symbol>.
-+ This has sub-options such as <symbol>CONFIG_KGDB_SIMPLE_SERIAL</symbol>
-+ which toggles choosing the serial port by ttyS number or by specifying
-+ a port and IRQ number.
-+ </para>
-+ <para>
-+ The second of these choices on most systems for I/O is
-+ <symbol>CONFIG_KGDBOE</symbol>. This requires that the machine to be
-+ debugged has an ethernet card which supports the netpoll API, such as
-+ the cards supported by <symbol>CONFIG_E100</symbol>. There are no
-+ sub-options for this, but a kernel command line option is required.
-+ </para>
-+ </chapter>
-+ <chapter id="BootingTheKernel">
-+ <title>Booting the kernel</title>
-+ <para>
-+ The Kernel command line option <constant>kgdbwait</constant> makes kgdb
-+ wait for gdb connection during booting of a kernel. If the
-+ <symbol>CONFIG_KGDB_8250</symbol> driver is used (or if applicable,
-+ another serial driver) this breakpoint will happen very early on, before
-+ console output. If you wish to change serial port information and you
-+ have enabled both <symbol>CONFIG_KGDB_8250</symbol> and
-+ <symbol>CONFIG_KGDB_SIMPLE_SERIAL</symbol> then you must pass the option
-+ <constant>kgdb8250=&lt;io or mmio&gt;,&lt;address&gt;,&lt;baud
-+ rate&gt;,&lt;irq&gt;</constant> before <constant>kgdbwait</constant>.
-+ The values <constant>io</constant> or <constant>mmio</constant> refer to
-+ if the address being passed next needs to be memory mapped
-+ (<constant>mmio</constant>) or not. The <constant>address</constant> must
-+ be passed in hex and is the hardware address and will be remapped if
-+ passed as <constant>mmio</constant>. The value
-+ <constant>baud rate</constant> and <constant>irq</constant> are base-10.
-+ The supported values for <constant>baud rate</constant> are
-+ <constant>9600</constant>, <constant>19200</constant>,
-+ <constant>38400</constant>, <constant>57600</constant>, and
-+ <constant>115200</constant>.
-+ </para>
-+ <para>
-+ To have KGDB stop the kernel and wait, with the compiled values for the
-+ serial driver, pass in: <constant>kgdbwait</constant>.
-+ </para>
-+ <para>
-+ To specify the values of the serial port at boot:
-+ <constant>kgdb8250=io,3f8,115200,3</constant>.
-+ On IA64 this could also be:
-+ <constant>kgdb8250=mmio,0xff5e0000,115200,74</constant>
-+ And to have KGDB also stop the kernel and wait for GDB to connect, pass in
-+ <constant>kgdbwait</constant> after this arguement.
-+ </para>
-+ <para>
-+ To configure the <symbol>CONFIG_KGDBOE</symbol> driver, pass in
-+ <constant>kgdboe=[src-port]@&lt;src-ip&gt;/[dev],[tgt-port]@&lt;tgt-ip&gt;/[tgt-macaddr]</constant>
-+ where:
-+ <itemizedlist>
-+ <listitem><para>src-port (optional): source for UDP packets (defaults to <constant>6443</constant>)</para></listitem>
-+ <listitem><para>src-ip: source IP to use (interface address)</para></listitem>
-+ <listitem><para>dev (optional): network interface (<constant>eth0</constant>)</para></listitem>
-+ <listitem><para>tgt-port (optional): port GDB will use (defaults to <constant>6442</constant>)</para></listitem>
-+ <listitem><para>tgt-ip: IP address GDB will be connecting from</para></listitem>
-+ <listitem><para>tgt-macaddr (optional): ethernet MAC address for logging agent (default is broadcast)</para></listitem>
-+ </itemizedlist>
-+ </para>
-+ <para>
-+ The <symbol>CONFIG_KGDBOE</symbol> driver can be reconfigured at run
-+ time, if <symbol>CONFIG_SYSFS</symbol> and
-+ <symbol>CONFIG_MODULES</symbol> by echo'ing a new config string to
-+ <constant>/sys/module/kgdboe/parameter/kgdboe</constant>. The
-+ driver can be unconfigured with the special string
-+ <constant>not_configured</constant>.
-+ </para>
-+ </chapter>
-+ <chapter id="ConnectingGDB">
-+ <title>Connecting gdb</title>
-+ <para>
-+ If you have used any of the methods to have KGDB stop and create
-+ an initial breakpoint described in the previous chapter, kgdb prints
-+ the message "Waiting for connection from remote gdb..." on the console
-+ and waits for connection from gdb. At this point you connect gdb to kgdb.
-+ </para>
-+ <para>
-+ Example (serial):
-+ </para>
-+ <programlisting>
-+ % gdb ./vmlinux
-+ (gdb) set remotebaud 115200
-+ (gdb) target remote /dev/ttyS0
-+ </programlisting>
-+ <para>
-+ Example (ethernet):
-+ </para>
-+ <programlisting>
-+ % gdb ./vmlinux
-+ (gdb) target remote udp:192.168.2.2:6443
-+ </programlisting>
-+ <para>
-+ Once connected, you can debug a kernel the way you would debug an
-+ application program.
-+ </para>
-+ </chapter>
-+ <chapter id="CommonBackEndReq">
-+ <title>The common backend (required)</title>
-+ <para>
-+ There are a few flags which must be set on every architecture in
-+ their &lt;asm/kgdb.h&gt; file. These are:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ NUMREGBYTES: The size in bytes of all of the registers, so
-+ that we can ensure they will all fit into a packet.
-+ </para>
-+ <para>
-+ BUFMAX: The size in bytes of the buffer GDB will read into.
-+ This must be larger than NUMREGBYTES.
-+ </para>
-+ <para>
-+ CACHE_FLUSH_IS_SAFE: Set to one if it always safe to call
-+ flush_cache_range or flush_icache_range. On some architectures,
-+ these functions may not be safe to call on SMP since we keep other
-+ CPUs in a holding pattern.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ <para>
-+ There are also the following functions for the common backend,
-+ found in kernel/kgdb.c that must be supplied by the
-+ architecture-specific backend. No weak version of these is provided.
-+ </para>
-+!Iinclude/linux/kgdb.h
-+ </chapter>
-+ <chapter id="CommonBackEndOpt">
-+ <title>The common backend (optional)</title>
-+ <para>
-+ These functions are part of the common backend, found in kernel/kgdb.c
-+ and are optionally implemented. Some functions (with _hw_ in the name)
-+ end up being required on arches which use hardware breakpoints.
-+ </para>
-+!Ikernel/kgdb.c
-+ </chapter>
-+ <chapter id="DriverSpecificFunctions">
-+ <title>Driver-Specific Functions</title>
-+ <para>
-+ Some of the I/O drivers have additional functions that can be
-+ called, that are specific to the driver. Calls from other places
-+ to these functions must be wrapped in #ifdefs for the driver in
-+ question.
-+ </para>
-+!Idrivers/serial/8250_kgdb.c
-+ </chapter>
-+</book>
-diff -Nauprw linux-2.6.20/Documentation/DocBook/Makefile ../new/linux-2.6.20/Documentation/DocBook/Makefile
---- linux-2.6.20/Documentation/DocBook/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/Documentation/DocBook/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -11,7 +11,8 @@ DOCBOOKS := wanbook.xml z8530book.xml mc
- procfs-guide.xml writing_usb_driver.xml \
- kernel-api.xml filesystems.xml lsm.xml usb.xml \
- gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
-- genericirq.xml
-+ genericirq.xml \
-+ kgdb.xml
+ void oprofile_arch_exit(void)
+ {
+--- linux-2.6.20.orig/drivers/Makefile
++++ linux-2.6.20/drivers/Makefile
+@@ -3,10 +3,11 @@
+ #
+ # 15 Sep 2000, Christoph Hellwig <hch@infradead.org>
+ # Rewritten to use lists instead of if-statements.
+ #
- ###
- # The build process is as follows (targets):
-diff -Nauprw linux-2.6.20/drivers/char/keyboard.c ../new/linux-2.6.20/drivers/char/keyboard.c
---- linux-2.6.20/drivers/char/keyboard.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/char/keyboard.c 2007-11-21 11:51:41.000000000 +0530
-@@ -1183,6 +1183,7 @@ static void kbd_keycode(unsigned int key
++obj-$(CONFIG_I2C) += i2c/
+ obj-$(CONFIG_PCI) += pci/
+ obj-$(CONFIG_PARISC) += parisc/
+ obj-$(CONFIG_RAPIDIO) += rapidio/
+ obj-y += video/
+ obj-$(CONFIG_ACPI) += acpi/
+@@ -55,11 +56,10 @@ obj-$(CONFIG_USB_GADGET) += usb/gadget/
+ obj-$(CONFIG_SERIO) += input/serio/
+ obj-$(CONFIG_GAMEPORT) += input/gameport/
+ obj-$(CONFIG_INPUT) += input/
+ obj-$(CONFIG_I2O) += message/
+ obj-$(CONFIG_RTC_LIB) += rtc/
+-obj-$(CONFIG_I2C) += i2c/
+ obj-$(CONFIG_W1) += w1/
+ obj-$(CONFIG_HWMON) += hwmon/
+ obj-$(CONFIG_PHONE) += telephony/
+ obj-$(CONFIG_MD) += md/
+ obj-$(CONFIG_BT) += bluetooth/
+--- linux-2.6.20.orig/drivers/char/keyboard.c
++++ linux-2.6.20/drivers/char/keyboard.c
+@@ -1181,10 +1181,11 @@ static void kbd_keycode(unsigned int key
+ }
+ if (sysrq_down && !down && keycode == sysrq_alt_use)
sysrq_down = 0;
if (sysrq_down && down && !rep) {
handle_sysrq(kbd_sysrq_xlate[keycode], tty);
@@ -27263,10 +28084,13 @@ diff -Nauprw linux-2.6.20/drivers/char/keyboard.c ../new/linux-2.6.20/drivers/ch
return;
}
#endif
-diff -Nauprw linux-2.6.20/drivers/cpufreq/Kconfig ../new/linux-2.6.20/drivers/cpufreq/Kconfig
---- linux-2.6.20/drivers/cpufreq/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/cpufreq/Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -140,4 +140,8 @@ config CPU_FREQ_GOV_CONSERVATIVE
+ #ifdef CONFIG_SPARC
+ if (keycode == KEY_A && sparc_l1_a_state) {
+--- linux-2.6.20.orig/drivers/cpufreq/Kconfig
++++ linux-2.6.20/drivers/cpufreq/Kconfig
+@@ -138,6 +138,10 @@ config CPU_FREQ_GOV_CONSERVATIVE
+
+ For details, take a look at linux/Documentation/cpu-freq.
If in doubt, say N.
@@ -27275,17 +28099,18 @@ diff -Nauprw linux-2.6.20/drivers/cpufreq/Kconfig ../new/linux-2.6.20/drivers/cp
+ depends on CPU_FREQ
+
endif # CPU_FREQ
-diff -Nauprw linux-2.6.20/drivers/hwmon/Kconfig ../new/linux-2.6.20/drivers/hwmon/Kconfig
---- linux-2.6.20/drivers/hwmon/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/hwmon/Kconfig 2008-09-16 23:41:15.000000000 +0530
-@@ -230,6 +230,19 @@ config SENSORS_IT87
+--- linux-2.6.20.orig/drivers/hwmon/Kconfig
++++ linux-2.6.20/drivers/hwmon/Kconfig
+@@ -228,10 +228,23 @@ config SENSORS_IT87
+ IT8716F and IT8718F sensor chips, and the SiS960 clone.
+
This driver can also be built as a module. If so, the module
will be called it87.
+config SENSORS_LIS3LV02DL
+ tristate "LIS3LV02DL MEMS three-axis accelerometer I2C driver"
+ depends on HWMON && I2C && EXPERIMENTAL
-+ default n
++ default n
+ help
+ This driver provides support for the ST microelectronics LIS3LV02DL
+ MEMS inertial sensor which provides a three-axis, I2C controlled
@@ -27298,12 +28123,27 @@ diff -Nauprw linux-2.6.20/drivers/hwmon/Kconfig ../new/linux-2.6.20/drivers/hwmo
config SENSORS_LM63
tristate "National Semiconductor LM63"
depends on HWMON && I2C
-diff -Nauprw linux-2.6.20/drivers/hwmon/lis3lv02dl.c ../new/linux-2.6.20/drivers/hwmon/lis3lv02dl.c
---- linux-2.6.20/drivers/hwmon/lis3lv02dl.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/hwmon/lis3lv02dl.c 2008-09-16 23:41:59.000000000 +0530
+ help
+ If you say yes here you get support for the National Semiconductor
+--- linux-2.6.20.orig/drivers/hwmon/Makefile
++++ linux-2.6.20/drivers/hwmon/Makefile
+@@ -28,10 +28,11 @@ obj-$(CONFIG_SENSORS_FSCPOS) += fscpos.o
+ obj-$(CONFIG_SENSORS_GL518SM) += gl518sm.o
+ obj-$(CONFIG_SENSORS_GL520SM) += gl520sm.o
+ obj-$(CONFIG_SENSORS_HDAPS) += hdaps.o
+ obj-$(CONFIG_SENSORS_IT87) += it87.o
+ obj-$(CONFIG_SENSORS_K8TEMP) += k8temp.o
++obj-$(CONFIG_SENSORS_LIS3LV02DL)+= lis3lv02dl.o
+ obj-$(CONFIG_SENSORS_LM63) += lm63.o
+ obj-$(CONFIG_SENSORS_LM70) += lm70.o
+ obj-$(CONFIG_SENSORS_LM75) += lm75.o
+ obj-$(CONFIG_SENSORS_LM77) += lm77.o
+ obj-$(CONFIG_SENSORS_LM78) += lm78.o
+--- /dev/null
++++ linux-2.6.20/drivers/hwmon/lis3lv02dl.c
@@ -0,0 +1,489 @@
+/*
-+ stmems.c
++ stmems.c
+
+ Copyright (c) 2008 Nicholas Angelo Crespi <roundtrip@gmail.com>
+
@@ -27344,9 +28184,9 @@ diff -Nauprw linux-2.6.20/drivers/hwmon/lis3lv02dl.c ../new/linux-2.6.20/drivers
+#include <linux/mutex.h>
+#include <asm/arch/i2c.h>
+
-+#define stmems_perror(format, arg...)
++#define stmems_perror(format, arg...)
+//printk( KERN_ERR "STMEMS: %s " format, __func__, ## arg)
-+#define stmems_pinfo(format, arg...)
++#define stmems_pinfo(format, arg...)
+//printk( KERN_INFO "STMEMS: %s " format, __func__, ## arg)
+
+/* Addresses to scan */
@@ -27481,7 +28321,7 @@ diff -Nauprw linux-2.6.20/drivers/hwmon/lis3lv02dl.c ../new/linux-2.6.20/drivers
+
+/* Write routines for divisor, BDU and fullscale */
+static ssize_t set_divisor(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
-+{
++{
+ struct i2c_client *client = to_i2c_client(dev);
+ struct stmems_data *data = i2c_get_clientdata(client);
+ u8 ctrl_reg;
@@ -27551,10 +28391,10 @@ diff -Nauprw linux-2.6.20/drivers/hwmon/lis3lv02dl.c ../new/linux-2.6.20/drivers
+static int stmems_attach_adapter(struct i2c_adapter *adapter)
+{
+ int err;
-+
++
+ stmems_pinfo("entered\n");
+ stmems_pinfo("adapter class: %d\n", adapter->class);
-+
++
+ if (!(adapter->class & I2C_CLASS_HWMON))
+ {
+ stmems_perror("adapter class is not HWMON skip\n");
@@ -27562,7 +28402,7 @@ diff -Nauprw linux-2.6.20/drivers/hwmon/lis3lv02dl.c ../new/linux-2.6.20/drivers
+ }
+
+ err = i2c_probe(adapter, &addr_data, stmems_detect);
-+
++
+ return err;
+}
+
@@ -27629,7 +28469,7 @@ diff -Nauprw linux-2.6.20/drivers/hwmon/lis3lv02dl.c ../new/linux-2.6.20/drivers
+ new_client->adapter = adapter;
+ new_client->driver = &stmems_driver;
+ new_client->flags = 0;
-+
++
+ /* Chip detection:
+ since the chip has a register that holds its hardware address,
+ we use that as an identification field. */
@@ -27648,7 +28488,7 @@ diff -Nauprw linux-2.6.20/drivers/hwmon/lis3lv02dl.c ../new/linux-2.6.20/drivers
+ err = i2c_attach_client(new_client);
+ if (err)
+ goto error;
-+
++
+ /* Initialize the chip */
+ stmems_init_sensor(new_client);
+
@@ -27689,7 +28529,7 @@ diff -Nauprw linux-2.6.20/drivers/hwmon/lis3lv02dl.c ../new/linux-2.6.20/drivers
+static void stmems_init_sensor(struct i2c_client *client){
+ u8 conf_reg;
+ /* CTRL_REG1: enable axis, turn down powerdown mode, freq divisor 512 */
-+
++
+ conf_reg = 0xC7;
+
+ stmems_pinfo("entered\n");
@@ -27732,16 +28572,16 @@ diff -Nauprw linux-2.6.20/drivers/hwmon/lis3lv02dl.c ../new/linux-2.6.20/drivers
+ mutex_unlock(&data->update_lock);
+
+ if (data)
-+ {
++ {
+ stmems_pinfo("acc_x: %d\n", data->acc_x);
+ stmems_pinfo("acc_y: %d\n", data->acc_y);
+ stmems_pinfo("acc_z: %d\n", data->acc_z);
+ }
-+
++
+ return data;
+}
+
-+/* All registers are byte-sized */
++/* All registers are byte-sized */
+static inline u8 stmems_read_value(struct i2c_client *client, u8 reg)
+{
+ u8 temp;
@@ -27750,7 +28590,7 @@ diff -Nauprw linux-2.6.20/drivers/hwmon/lis3lv02dl.c ../new/linux-2.6.20/drivers
+ temp = i2c_smbus_read_byte_data(client, reg);
+ //nomadik_i2c_read_register(I2C_MEMS_CLIENT,&temp,reg,1);
+ stmems_pinfo("read: 0x%02X, value: 0x%02X\n", reg, temp);
-+
++
+ return temp;
+}
+
@@ -27763,7 +28603,7 @@ diff -Nauprw linux-2.6.20/drivers/hwmon/lis3lv02dl.c ../new/linux-2.6.20/drivers
+}
+
+static int __init stmems_init(void)
-+{
++{
+ stmems_pinfo("entered\n");
+
+ return i2c_add_driver(&stmems_driver);
@@ -27791,20 +28631,101 @@ diff -Nauprw linux-2.6.20/drivers/hwmon/lis3lv02dl.c ../new/linux-2.6.20/drivers
+
+module_init(stmems_init);
+module_exit(stmems_exit);
-diff -Nauprw linux-2.6.20/drivers/hwmon/Makefile ../new/linux-2.6.20/drivers/hwmon/Makefile
---- linux-2.6.20/drivers/hwmon/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/hwmon/Makefile 2008-09-16 23:41:15.000000000 +0530
-@@ -30,6 +30,7 @@ obj-$(CONFIG_SENSORS_GL520SM) += gl520sm
- obj-$(CONFIG_SENSORS_HDAPS) += hdaps.o
- obj-$(CONFIG_SENSORS_IT87) += it87.o
- obj-$(CONFIG_SENSORS_K8TEMP) += k8temp.o
-+obj-$(CONFIG_SENSORS_LIS3LV02DL)+= lis3lv02dl.o
- obj-$(CONFIG_SENSORS_LM63) += lm63.o
- obj-$(CONFIG_SENSORS_LM70) += lm70.o
- obj-$(CONFIG_SENSORS_LM75) += lm75.o
-diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-nomadik.c ../new/linux-2.6.20/drivers/i2c/busses/i2c-nomadik.c
---- linux-2.6.20/drivers/i2c/busses/i2c-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/i2c/busses/i2c-nomadik.c 2008-10-20 13:37:45.000000000 +0530
+--- linux-2.6.20.orig/drivers/i2c/Kconfig
++++ linux-2.6.20/drivers/i2c/Kconfig
+@@ -32,10 +32,11 @@ config I2C_CHARDEV
+ contained in the file <file:Documentation/i2c/dev-interface>.
+
+ This support is also available as a module. If so, the module
+ will be called i2c-dev.
+
++
+ source drivers/i2c/algos/Kconfig
+ source drivers/i2c/busses/Kconfig
+ source drivers/i2c/chips/Kconfig
+
+ config I2C_DEBUG_CORE
+--- linux-2.6.20.orig/drivers/i2c/Makefile
++++ linux-2.6.20/drivers/i2c/Makefile
+@@ -1,11 +1,12 @@
+ #
+-# Makefile for the i2c core.
++# Makefile for the kernel i2c bus driver.
+ #
+
+ obj-$(CONFIG_I2C) += i2c-core.o
+ obj-$(CONFIG_I2C_CHARDEV) += i2c-dev.o
++
+ obj-y += busses/ chips/ algos/
+
+ ifeq ($(CONFIG_I2C_DEBUG_CORE),y)
+ EXTRA_CFLAGS += -DDEBUG
+ endif
+--- linux-2.6.20.orig/drivers/i2c/busses/Kconfig
++++ linux-2.6.20/drivers/i2c/busses/Kconfig
+@@ -15,10 +15,20 @@ config I2C_ALI1535
+ Power Management Unit (PMU).
+
+ This driver can also be built as a module. If so, the module
+ will be called i2c-ali1535.
+
++config I2C_NOMADIK
++ tristate "I2C nomadik support"
++ depends on I2C
++ help
++ If you say yes to this option, support will be included for the i2c
++ controller on STn8810 .
++ This driver can also be built as a module. If so, the module
++ will be called nmdkmod_i2c.
++
++
+ config I2C_ALI1563
+ tristate "ALI 1563"
+ depends on I2C && PCI && EXPERIMENTAL
+ help
+ If you say yes to this option, support will be included for the SMB
+--- linux-2.6.20.orig/drivers/i2c/busses/Makefile
++++ linux-2.6.20/drivers/i2c/busses/Makefile
+@@ -1,9 +1,26 @@
+ #
+ # Makefile for the i2c bus drivers.
+ #
+
++TARGET_NAME = $(shell echo $(CONFIG_NOMADIK_TARGET))
++SOC_NAME = $(shell echo $(CONFIG_NOMADIK_SOC))
++PLATFORM_NAME = $(shell echo $(CONFIG_NOMADIK_PLATFORM))
++
++ifeq ($(CONFIG_NOMADIK_NDK10),y)
++EXTRA_CFLAGS := -D__I2C_ENHANCED -D__RELEASE -D__NOMADIK_I2C -D__I2C_8810 -D__STN_8810
++endif
++
++ifeq ($(CONFIG_NOMADIK_NDK15),y)
++EXTRA_CFLAGS := -D__I2C_ENHANCED -D__RELEASE -D__NOMADIK_I2C -D__STN_8815=10
++endif
++
++ifeq ($(CONFIG_NOMADIK_NHK15),y)
++EXTRA_CFLAGS := -D__I2C_ENHANCED -D__RELEASE -D__NOMADIK_I2C -D__STN_8815=10
++endif
++
++obj-$(CONFIG_I2C_NOMADIK) += nmdkmod_i2c.o
+ obj-$(CONFIG_I2C_ALI1535) += i2c-ali1535.o
+ obj-$(CONFIG_I2C_ALI1563) += i2c-ali1563.o
+ obj-$(CONFIG_I2C_ALI15X3) += i2c-ali15x3.o
+ obj-$(CONFIG_I2C_AMD756) += i2c-amd756.o
+ obj-$(CONFIG_I2C_AMD756_S4882) += i2c-amd756-s4882.o
+@@ -48,5 +65,10 @@ obj-$(CONFIG_SCx200_ACB) += scx200_acb.o
+ obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o
+
+ ifeq ($(CONFIG_I2C_DEBUG_BUS),y)
+ EXTRA_CFLAGS += -DDEBUG
+ endif
++
++nmdkmod_i2c-objs := i2c-nomadik.o
++nmdkmod_i2c-objs += i2c-$(SOC_NAME).o
++
++
+--- /dev/null
++++ linux-2.6.20/drivers/i2c/busses/i2c-nomadik.c
@@ -0,0 +1,1250 @@
+
+/* drivers/i2c/busses/i2c-nomadik.c
@@ -29056,9 +29977,8 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-nomadik.c ../new/linux-2.6.20/d
+
+MODULE_DESCRIPTION("Nomadik IIC driver v" DRIVER_VERSION);
+MODULE_LICENSE("GPL");
-diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-nomadik.h ../new/linux-2.6.20/drivers/i2c/busses/i2c-nomadik.h
---- linux-2.6.20/drivers/i2c/busses/i2c-nomadik.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/i2c/busses/i2c-nomadik.h 2008-07-04 23:45:14.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/i2c/busses/i2c-nomadik.h
@@ -0,0 +1,93 @@
+/* drivers/i2c/busses/i2c-nomadik.h
+ *
@@ -29153,9 +30073,8 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-nomadik.h ../new/linux-2.6.20/d
+void stn_cut_mdelay(int dlytime);
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c ../new/linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c
---- linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c 2008-07-04 23:45:14.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c
@@ -0,0 +1,1723 @@
+
+/* drivers/i2c/busses/i2c-nmdk8810.c
@@ -29301,7 +30220,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c ../new/linux-2.6.20/d
+#define I2C_FM_SM_MASK 0x80
+
+/*#######################################################################
-+ Default I2C Register Values
++ Default I2C Register Values
+#########################################################################
+*/
+
@@ -29454,7 +30373,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c ../new/linux-2.6.20/d
+ I2C_SET_BIT(priv->regs + I2C_REG_OFFSET_CR, I2C_STOP);
+
+ dummy = I2C_READ_REG(priv->regs + I2C_REG_OFFSET_DR);
-+ dummy = dummy;
++ dummy = dummy;
+
+ if (I2C_TEST_BIT(priv->regs + I2C_REG_OFFSET_CR, I2C_PE)) {
+ I2C_CLR_BIT(priv->regs + I2C_REG_OFFSET_CR, I2C_PE);
@@ -29517,7 +30436,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c ../new/linux-2.6.20/d
+ dummy = I2C_READ_REG(priv->regs + I2C_REG_OFFSET_SR1);
+ dummy = I2C_READ_REG(priv->regs + I2C_REG_OFFSET_SR2);
+ dummy = I2C_READ_REG(priv->regs + I2C_REG_OFFSET_DR);
-+ dummy = dummy;
++ dummy = dummy;
+
+ I2C_SET_BIT(priv->regs + I2C_REG_OFFSET_CR, I2C_PE);
+ priv->config.enabled = NOMADIK_TRUE;
@@ -29815,7 +30734,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c ../new/linux-2.6.20/d
+ (priv->regs + I2C_REG_OFFSET_SR2, I2C_ENDAD, I2C_SHIFT_ENDAD,
+ I2C_ENDAD_COUNTER)) {
+ i2c_abort(priv);
-+ return -EIO;
++ return -EIO;
+ }
+
+ if (priv->config.index_format > I2C_NO_INDEX) {
@@ -29909,7 +30828,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c ../new/linux-2.6.20/d
+ i2c_abort(priv);
+ return -EIO;
+ }
-+ }
++ }
+ }
+ if ((I2C_READ == priv->config.operation)
+ && (priv->config.slave_address < 1024
@@ -29951,7 +30870,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c ../new/linux-2.6.20/d
+
+ switch (priv->config.index_transfer_mode) {
+ case I2C_TRANSFER_MODE_POLLING:
-+ /*
++ /*
+ Index Transfer
+ */
+ if (I2C_BUS_SLAVE_MODE == priv->config.bus_control_mode) {
@@ -30009,7 +30928,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c ../new/linux-2.6.20/d
+
+ switch (priv->config.index_transfer_mode) {
+ case I2C_TRANSFER_MODE_POLLING:
-+ /*
++ /*
+ Index Transfer
+ */
+ if (I2C_BUS_SLAVE_MODE == priv->config.bus_control_mode) {
@@ -30097,7 +31016,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c ../new/linux-2.6.20/d
+ priv->config.active_event.type = I2C_NO_EVENT;
+
+ dummy = readl(priv->regs + I2C_REG_OFFSET_CR);
-+ dummy = dummy;
++ dummy = dummy;
+
+ sr1 = readl(priv->regs + I2C_REG_OFFSET_SR1);
+ sr2 = readl(priv->regs + I2C_REG_OFFSET_SR2);
@@ -30236,7 +31155,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c ../new/linux-2.6.20/d
+
+ }
+ }
-+ }
++ }
+ else if (I2C_STATUS_MASTER_RECEIVER_MODE ==
+ priv->config.status) {
+ switch (priv->config.index_format) {
@@ -30353,7 +31272,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c ../new/linux-2.6.20/d
+ } /*End of Multi Operation */
+ } /*End Of switch */
+ } /*End Of Master Receiver */
-+
++
+ else if (I2C_STATUS_SLAVE_TRANSMITTER_MODE ==
+ priv->config.status) {
+ if (priv->config.count_data > 0) {
@@ -30880,9 +31799,8 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8810.c ../new/linux-2.6.20/d
+}
+
+
-diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c ../new/linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c
---- linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c 2008-07-04 23:45:16.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c
@@ -0,0 +1,1817 @@
+
+/* drivers/i2c/busses/i2c-nmdk8815.c
@@ -31134,7 +32052,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c ../new/linux-2.6.20/d
+#define I2C_INT_SHIFT_BERR 25
+
+/*#######################################################################
-+ Default I2C Register Values
++ Default I2C Register Values
+#########################################################################
+ */
+
@@ -31215,7 +32133,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c ../new/linux-2.6.20/d
+#define READ_FIELD(reg_name,mask,shift) ((reg_name & mask) >> shift )
+
+/*#######################################################################
-+ Defines used various operations
++ Defines used various operations
+#########################################################################
+*/
+#define I2C_ENDAD_COUNTER 50000
@@ -31524,7 +32442,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c ../new/linux-2.6.20/d
+ priv->config.transfer_data++;
+ priv->config.count_data--;
+ priv->config.active_event.type = I2C_DATA_RX_EVENT;
-+ }
++ }
+
+ loop_counter = 0;
+ if (loop_till_set
@@ -31556,7 +32474,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c ../new/linux-2.6.20/d
+ priv->config.transfer_data++;
+ priv->config.count_data--;
+ priv->config.active_event.type = I2C_DATA_RX_EVENT;
-+ }
++ }
+
+ loop_counter = 0;
+ if (loop_till_set
@@ -31585,7 +32503,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c ../new/linux-2.6.20/d
+ if (loop_till_clear((priv->regs + I2C_REG_OFFSET_RISR), I2C_INT_TXFF,
+ I2C_INT_SHIFT_TXFF, I2C_ENDAD_COUNTER)) {
+ i2c_abort(priv);
-+ return -EBUSY;
++ return -EBUSY;
+ }
+
+ switch (priv->config.index_format) {
@@ -31687,7 +32605,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c ../new/linux-2.6.20/d
+ int error_status = 0;
+
+ case I2C_TRANSFER_MODE_POLLING:
-+ /*
++ /*
+ Index Transfer
+ */
+ if (I2C_BUS_SLAVE_MODE == priv->config.bus_control_mode) {
@@ -31974,7 +32892,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c ../new/linux-2.6.20/d
+ switch (priv->config.index_transfer_mode) {
+ int error_status = 0;
+ case I2C_TRANSFER_MODE_POLLING:
-+ /*
++ /*
+ Index Transfer
+ */
+ if (I2C_BUS_SLAVE_MODE == priv->config.bus_control_mode) {
@@ -32683,7 +33601,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c ../new/linux-2.6.20/d
+
+ default:
+ break;
-+ }
++ }
+
+ priv->config.active_event.id = priv->id;
+ priv->config.active_event.transfer_data = priv->config.transfer_data;
@@ -32701,65 +33619,45 @@ diff -Nauprw linux-2.6.20/drivers/i2c/busses/i2c-stn8815.c ../new/linux-2.6.20/d
+}
+
+
-diff -Nauprw linux-2.6.20/drivers/i2c/busses/Kconfig ../new/linux-2.6.20/drivers/i2c/busses/Kconfig
---- linux-2.6.20/drivers/i2c/busses/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/i2c/busses/Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -17,6 +17,16 @@ config I2C_ALI1535
+--- linux-2.6.20.orig/drivers/i2c/chips/Kconfig
++++ linux-2.6.20/drivers/i2c/chips/Kconfig
+@@ -123,6 +123,15 @@ config SENSORS_MAX6875
+ sequencer/supervisor if found at a compatible address.
+
This driver can also be built as a module. If so, the module
- will be called i2c-ali1535.
+ will be called max6875.
-+config I2C_NOMADIK
-+ tristate "I2C nomadik support"
-+ depends on I2C
++config CPLD_I2C
++ tristate "NOMADIK NDK15 CPLD"
++ depends on I2C && NOMADIK_NDK15
++ default y
+ help
-+ If you say yes to this option, support will be included for the i2c
-+ controller on STn8810 .
-+ This driver can also be built as a module. If so, the module
-+ will be called nmdkmod_i2c.
-+
++ If you say yes here you get support for the cpld chip.
+
- config I2C_ALI1563
- tristate "ALI 1563"
- depends on I2C && PCI && EXPERIMENTAL
-diff -Nauprw linux-2.6.20/drivers/i2c/busses/Makefile ../new/linux-2.6.20/drivers/i2c/busses/Makefile
---- linux-2.6.20/drivers/i2c/busses/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/i2c/busses/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -2,6 +2,23 @@
- # Makefile for the i2c bus drivers.
- #
++ This driver can also be built as a module. If so, the module
++ will be called epio-nomadik.
+ endmenu
+--- linux-2.6.20.orig/drivers/i2c/chips/Makefile
++++ linux-2.6.20/drivers/i2c/chips/Makefile
+@@ -10,10 +10,16 @@ obj-$(CONFIG_SENSORS_M41T00) += m41t00.o
+ obj-$(CONFIG_SENSORS_PCA9539) += pca9539.o
+ obj-$(CONFIG_SENSORS_PCF8574) += pcf8574.o
+ obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
+ obj-$(CONFIG_ISP1301_OMAP) += isp1301_omap.o
+ obj-$(CONFIG_TPS65010) += tps65010.o
++obj-$(CONFIG_CPLD_I2C) += epio-nomadik.o
-+TARGET_NAME = $(shell echo $(CONFIG_NOMADIK_TARGET))
-+SOC_NAME = $(shell echo $(CONFIG_NOMADIK_SOC))
-+PLATFORM_NAME = $(shell echo $(CONFIG_NOMADIK_PLATFORM))
-+
-+ifeq ($(CONFIG_NOMADIK_NDK10),y)
-+EXTRA_CFLAGS := -D__I2C_ENHANCED -D__RELEASE -D__NOMADIK_I2C -D__I2C_8810 -D__STN_8810
-+endif
-+
-+ifeq ($(CONFIG_NOMADIK_NDK15),y)
-+EXTRA_CFLAGS := -D__I2C_ENHANCED -D__RELEASE -D__NOMADIK_I2C -D__STN_8815=10
-+endif
-+
-+ifeq ($(CONFIG_NOMADIK_NHK15),y)
-+EXTRA_CFLAGS := -D__I2C_ENHANCED -D__RELEASE -D__NOMADIK_I2C -D__STN_8815=10
-+endif
-+
-+obj-$(CONFIG_I2C_NOMADIK) += nmdkmod_i2c.o
- obj-$(CONFIG_I2C_ALI1535) += i2c-ali1535.o
- obj-$(CONFIG_I2C_ALI1563) += i2c-ali1563.o
- obj-$(CONFIG_I2C_ALI15X3) += i2c-ali15x3.o
-@@ -50,3 +67,8 @@ obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o
- ifeq ($(CONFIG_I2C_DEBUG_BUS),y)
+ ifeq ($(CONFIG_I2C_DEBUG_CHIP),y)
EXTRA_CFLAGS += -DDEBUG
endif
-+
-+nmdkmod_i2c-objs := i2c-nomadik.o
-+nmdkmod_i2c-objs += i2c-$(SOC_NAME).o
+
++ifdef EPIO_DEBUG
++EXTRA_CFLAGS += -DEPIO_DEBUG=$(EPIO_DEBUG)
++endif
+
+
-diff -Nauprw linux-2.6.20/drivers/i2c/chips/epio-nomadik.c ../new/linux-2.6.20/drivers/i2c/chips/epio-nomadik.c
---- linux-2.6.20/drivers/i2c/chips/epio-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/i2c/chips/epio-nomadik.c 2008-07-04 23:45:17.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/i2c/chips/epio-nomadik.c
@@ -0,0 +1,195 @@
+
+/*
@@ -32769,7 +33667,7 @@ diff -Nauprw linux-2.6.20/drivers/i2c/chips/epio-nomadik.c ../new/linux-2.6.20/d
+ *
+ * Nomadik EPIO driver.
+ *
-+ * This driver provides an API for device drivers to utilize the NOMADIK EPIO
++ * This driver provides an API for device drivers to utilize the NOMADIK EPIO
+ * EPIO is accesses theu i2c
+ *
+ * This program is free software; you can redistribute it and/or modify
@@ -32832,13 +33730,13 @@ diff -Nauprw linux-2.6.20/drivers/i2c/chips/epio-nomadik.c ../new/linux-2.6.20/d
+ * Two byte Access mode -
+ * By default Single byte i2c access mode is enabled
+ * . i.e. the CPLD read/write is performed using single i2c operation
-+ *
++ *
+ * You can enable Two bytes access mode for system debug purpose
+ * In this mode two i2c operations will be performed for each CPLD register
+ * read/write operation
+ *
+ * 2Byte Access mode can be enabled duirng make vmlinux by providing
-+ * additional command line parameter "EPIO_DEBUG=0x80000000"
++ * additional command line parameter "EPIO_DEBUG=0x80000000"
+ */
+
+#define EPIO_2BYTE_I2C_ACCESS (EPIO_DEBUG & 0x80000000UL) ? (1) :(0)
@@ -32956,71 +33854,11 @@ diff -Nauprw linux-2.6.20/drivers/i2c/chips/epio-nomadik.c ../new/linux-2.6.20/d
+MODULE_LICENSE("GPL v2");
+
+
-diff -Nauprw linux-2.6.20/drivers/i2c/chips/Kconfig ../new/linux-2.6.20/drivers/i2c/chips/Kconfig
---- linux-2.6.20/drivers/i2c/chips/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/i2c/chips/Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -125,4 +125,13 @@ config SENSORS_MAX6875
- This driver can also be built as a module. If so, the module
- will be called max6875.
-
-+config CPLD_I2C
-+ tristate "NOMADIK NDK15 CPLD"
-+ depends on I2C && NOMADIK_NDK15
-+ default y
-+ help
-+ If you say yes here you get support for the cpld chip.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called epio-nomadik.
- endmenu
-diff -Nauprw linux-2.6.20/drivers/i2c/chips/Makefile ../new/linux-2.6.20/drivers/i2c/chips/Makefile
---- linux-2.6.20/drivers/i2c/chips/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/i2c/chips/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -12,8 +12,14 @@ obj-$(CONFIG_SENSORS_PCF8574) += pcf8574
- obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
- obj-$(CONFIG_ISP1301_OMAP) += isp1301_omap.o
- obj-$(CONFIG_TPS65010) += tps65010.o
-+obj-$(CONFIG_CPLD_I2C) += epio-nomadik.o
-
- ifeq ($(CONFIG_I2C_DEBUG_CHIP),y)
- EXTRA_CFLAGS += -DDEBUG
- endif
-
-+ifdef EPIO_DEBUG
-+EXTRA_CFLAGS += -DEPIO_DEBUG=$(EPIO_DEBUG)
-+endif
-+
-+
-diff -Nauprw linux-2.6.20/drivers/i2c/Kconfig ../new/linux-2.6.20/drivers/i2c/Kconfig
---- linux-2.6.20/drivers/i2c/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/i2c/Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -34,6 +34,7 @@ config I2C_CHARDEV
- This support is also available as a module. If so, the module
- will be called i2c-dev.
-
-+
- source drivers/i2c/algos/Kconfig
- source drivers/i2c/busses/Kconfig
- source drivers/i2c/chips/Kconfig
-diff -Nauprw linux-2.6.20/drivers/i2c/Makefile ../new/linux-2.6.20/drivers/i2c/Makefile
---- linux-2.6.20/drivers/i2c/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/i2c/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -1,9 +1,10 @@
- #
--# Makefile for the i2c core.
-+# Makefile for the kernel i2c bus driver.
- #
-
- obj-$(CONFIG_I2C) += i2c-core.o
- obj-$(CONFIG_I2C_CHARDEV) += i2c-dev.o
-+
- obj-y += busses/ chips/ algos/
+--- linux-2.6.20.orig/drivers/input/input.c
++++ linux-2.6.20/drivers/input/input.c
+@@ -926,10 +926,23 @@ struct input_dev *input_allocate_device(
- ifeq ($(CONFIG_I2C_DEBUG_CORE),y)
-diff -Nauprw linux-2.6.20/drivers/input/input.c ../new/linux-2.6.20/drivers/input/input.c
---- linux-2.6.20/drivers/input/input.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/input/input.c 2007-11-21 11:51:41.000000000 +0530
-@@ -928,6 +928,19 @@ struct input_dev *input_allocate_device(
+ return dev;
}
EXPORT_SYMBOL(input_allocate_device);
@@ -33040,15 +33878,18 @@ diff -Nauprw linux-2.6.20/drivers/input/input.c ../new/linux-2.6.20/drivers/inpu
/**
* input_free_device - free memory occupied by input_dev structure
* @dev: input device to free
-diff -Nauprw linux-2.6.20/drivers/input/keyboard/Kconfig ../new/linux-2.6.20/drivers/input/keyboard/Kconfig
---- linux-2.6.20/drivers/input/keyboard/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/input/keyboard/Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -214,4 +214,17 @@ config KEYBOARD_AAED2000
+ *
+ * This function should only be used if input_register_device()
+--- linux-2.6.20.orig/drivers/input/keyboard/Kconfig
++++ linux-2.6.20/drivers/input/keyboard/Kconfig
+@@ -212,6 +212,19 @@ config KEYBOARD_AAED2000
+ development board.
+
To compile this driver as a module, choose M here: the
module will be called aaed2000_kbd.
+config KEYPAD_NOMADIK
-+ tristate "Nomadik keypad support"
++ tristate "Nomadik keypad support"
+ depends on ARCH_NOMADIK
+ default n
+ help
@@ -33061,9 +33902,35 @@ diff -Nauprw linux-2.6.20/drivers/input/keyboard/Kconfig ../new/linux-2.6.20/dri
+ module will be called nomadik_kpd.
+
endif
-diff -Nauprw linux-2.6.20/drivers/input/keyboard/kpd-nomadik.c ../new/linux-2.6.20/drivers/input/keyboard/kpd-nomadik.c
---- linux-2.6.20/drivers/input/keyboard/kpd-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/input/keyboard/kpd-nomadik.c 2008-07-04 23:45:18.000000000 +0530
+--- linux-2.6.20.orig/drivers/input/keyboard/Makefile
++++ linux-2.6.20/drivers/input/keyboard/Makefile
+@@ -2,10 +2,14 @@
+ # Makefile for the input core drivers.
+ #
+
+ # Each configuration option enables a list of files.
+
++ifdef KEYPAD_DEBUG
++CFLAGS += -DKEYPAD_DEBUG=$(KEYPAD_DEBUG)
++endif
++
+ obj-$(CONFIG_KEYBOARD_ATKBD) += atkbd.o
+ obj-$(CONFIG_KEYBOARD_SUNKBD) += sunkbd.o
+ obj-$(CONFIG_KEYBOARD_LKKBD) += lkkbd.o
+ obj-$(CONFIG_KEYBOARD_XTKBD) += xtkbd.o
+ obj-$(CONFIG_KEYBOARD_AMIGA) += amikbd.o
+@@ -16,6 +20,9 @@ obj-$(CONFIG_KEYBOARD_CORGI) += corgikb
+ obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkbd.o
+ obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o
+ obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o
+ obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o
+ obj-$(CONFIG_KEYBOARD_AAED2000) += aaed2000_kbd.o
++obj-$(CONFIG_KEYPAD_NOMADIK) += nmdkmod_kpd.o
++
++nmdkmod_kpd-objs := kpd-nomadik.o
+
+--- /dev/null
++++ linux-2.6.20/drivers/input/keyboard/kpd-nomadik.c
@@ -0,0 +1,359 @@
+/*
+ * linux/drivers/input/keyboard/kpd-nomadik.c
@@ -33115,7 +33982,7 @@ diff -Nauprw linux-2.6.20/drivers/input/keyboard/kpd-nomadik.c ../new/linux-2.6.
+irqreturn_t nomadik_kp_intrhandler(int irq, void *dev_id);
+static void nomadik_kp_wq_kscan(struct work_struct *work);
+
-+/*
++/*
+ * Module parameter defination to pass mode of operation
+ * 0 = to initialize driver in Interrupt mode (default mode)
+ * 1 = to Intialize driver in polling mode of operation
@@ -33220,7 +34087,7 @@ diff -Nauprw linux-2.6.20/drivers/input/keyboard/kpd-nomadik.c ../new/linux-2.6.
+{
+#if 0
+ struct keypad_t *kp = platform_get_drvdata(pdev);
-+ if ( kpmode )
++ if ( kpmode )
+ kp->board->irqen(kp);
+ if ( !device_may_wakeup(&pdev->dev) )
+ kp->board->irqdis(kp);
@@ -33232,7 +34099,7 @@ diff -Nauprw linux-2.6.20/drivers/input/keyboard/kpd-nomadik.c ../new/linux-2.6.
+{
+#if 0
+ struct keypad_t *kp = platform_get_drvdata(pdev);
-+ if ( kpmode )
++ if ( kpmode )
+ kp->board->irqdis(kp);
+ if ( !device_may_wakeup(&pdev->dev) )
+ kp->board->irqen(kp);
@@ -33338,7 +34205,7 @@ diff -Nauprw linux-2.6.20/drivers/input/keyboard/kpd-nomadik.c ../new/linux-2.6.
+ schedule_delayed_work(&kp->kscan_work, KEYPAD_SCAN_PERIOD);
+ nmdk_info("Keypad polling started");
+ }
-+
++
+
+#endif
+ nmdk_info("Module initialized Ver(%d.%d.%d)",
@@ -33347,7 +34214,7 @@ diff -Nauprw linux-2.6.20/drivers/input/keyboard/kpd-nomadik.c ../new/linux-2.6.
+
+ err_req_irq:
+ err_inp_reg:
-+#if !defined (CONFIG_NOMADIK_NHK15)
++#if !defined (CONFIG_NOMADIK_NHK15)
+ if (!kp->mode)
+ free_irq(kp->irq, kp);
+#endif
@@ -33424,39 +34291,18 @@ diff -Nauprw linux-2.6.20/drivers/input/keyboard/kpd-nomadik.c ../new/linux-2.6.
+MODULE_AUTHOR("Prafulla Wadaskar (prafulla.wadaskar@st.com)");
+MODULE_DESCRIPTION("Nomadik keyboard driver");
+MODULE_LICENSE("GPL v2");
-diff -Nauprw linux-2.6.20/drivers/input/keyboard/Makefile ../new/linux-2.6.20/drivers/input/keyboard/Makefile
---- linux-2.6.20/drivers/input/keyboard/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/input/keyboard/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -4,6 +4,10 @@
-
- # Each configuration option enables a list of files.
-
-+ifdef KEYPAD_DEBUG
-+CFLAGS += -DKEYPAD_DEBUG=$(KEYPAD_DEBUG)
-+endif
-+
- obj-$(CONFIG_KEYBOARD_ATKBD) += atkbd.o
- obj-$(CONFIG_KEYBOARD_SUNKBD) += sunkbd.o
- obj-$(CONFIG_KEYBOARD_LKKBD) += lkkbd.o
-@@ -18,4 +22,7 @@ obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o
- obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o
- obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o
- obj-$(CONFIG_KEYBOARD_AAED2000) += aaed2000_kbd.o
-+obj-$(CONFIG_KEYPAD_NOMADIK) += nmdkmod_kpd.o
-+
-+nmdkmod_kpd-objs := kpd-nomadik.o
+--- linux-2.6.20.orig/drivers/input/touchscreen/Kconfig
++++ linux-2.6.20/drivers/input/touchscreen/Kconfig
+@@ -157,6 +157,26 @@ config TOUCHSCREEN_UCB1400
+ modular) for this driver to work.
-diff -Nauprw linux-2.6.20/drivers/input/touchscreen/Kconfig ../new/linux-2.6.20/drivers/input/touchscreen/Kconfig
---- linux-2.6.20/drivers/input/touchscreen/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/input/touchscreen/Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -159,4 +159,24 @@ config TOUCHSCREEN_UCB1400
To compile this driver as a module, choose M here: the
module will be called ucb1400_ts.
+config TOUCHSCREEN_NOMADIK
+ tristate "ADS 7846 based touchscreens for... Nomadik-board"
+ depends on NOMADIK_SPI
-+ default m
++ default m
+ help
+ Say Y here if you have a touchscreen interface using the
+ ADS7846 controller for Nomadik platform.
@@ -33474,10 +34320,10 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/Kconfig ../new/linux-2.6.20/
+ TS2003 controller for Nomadik platform.
+
endif
-diff -Nauprw linux-2.6.20/drivers/input/touchscreen/Makefile ../new/linux-2.6.20/drivers/input/touchscreen/Makefile
---- linux-2.6.20/drivers/input/touchscreen/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/input/touchscreen/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -2,6 +2,10 @@
+--- linux-2.6.20.orig/drivers/input/touchscreen/Makefile
++++ linux-2.6.20/drivers/input/touchscreen/Makefile
+@@ -1,9 +1,13 @@
+ #
# Makefile for the mouse drivers.
#
@@ -33488,7 +34334,11 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/Makefile ../new/linux-2.6.20
# Each configuration option enables a list of files.
obj-$(CONFIG_TOUCHSCREEN_ADS7846) += ads7846.o
-@@ -16,3 +20,7 @@ obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += pe
+ obj-$(CONFIG_TOUCHSCREEN_BITSY) += h3600_ts_input.o
+ obj-$(CONFIG_TOUCHSCREEN_CORGI) += corgi_ts.o
+@@ -14,5 +18,9 @@ obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712
+ obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o
+ obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += penmount.o
obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o
obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o
obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o
@@ -33496,579 +34346,8 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/Makefile ../new/linux-2.6.20
+obj-$(CONFIG_TOUCHSCREEN_NOMADIK_TS2003) += touchp2003-nomadik.o
+
+nmdkmod_tp-objs := touchp-nomadik.o
-diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp2003-nomadik.c ../new/linux-2.6.20/drivers/input/touchscreen/touchp2003-nomadik.c
---- linux-2.6.20/drivers/input/touchscreen/touchp2003-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/input/touchscreen/touchp2003-nomadik.c 2008-07-04 23:45:18.000000000 +0530
-@@ -0,0 +1,566 @@
-+/*
-+ * linux/drivers/i2c/chips/tsc2003.c
-+ *
-+ * Copyright (C) 2005 Bill Gatliff <bgat at billgatliff.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Driver for TI's TSC2003 I2C Touch Screen Controller
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/i2c.h>
-+#include <linux/string.h>
-+#include <linux/bcd.h>
-+#include <linux/list.h>
-+#include <linux/device.h>
-+#include <linux/platform_device.h>
-+#include <linux/interrupt.h>
-+#include <linux/input.h>
-+#include <linux/delay.h>
-+#include <asm/arch/touchp2003.h>
-+#include <asm/arch/i2c.h>
-+
-+#define DEBUG_TS(x) printk x
-+
-+/*
-+ * Insmod parameters
-+ */
-+
-+#define DRIVER_NAME "tsc2003"
-+
-+enum tsc2003_pd {
-+ PD_POWERDOWN = 0, /* penirq */
-+ PD_IREFOFF_ADCON = 1, /* no penirq */
-+ PD_IREFON_ADCOFF = 2, /* penirq */
-+ PD_IREFON_ADCON = 3, /* no penirq */
-+ PD_PENIRQ_ARM = PD_IREFON_ADCOFF,
-+ PD_PENIRQ_DISARM = PD_IREFON_ADCON,
-+};
-+
-+enum tsc2003_m {
-+ M_12BIT = 0,
-+ M_8BIT = 1
-+};
-+
-+enum tsc2003_cmd {
-+ MEAS_TEMP0 = 0,
-+ MEAS_VBAT1 = 1,
-+ MEAS_IN1 = 2,
-+ MEAS_TEMP1 = 4,
-+ MEAS_VBAT2 = 5,
-+ MEAS_IN2 = 6,
-+ ACTIVATE_NX_DRIVERS = 8,
-+ ACTIVATE_NY_DRIVERS = 9,
-+ ACTIVATE_YNX_DRIVERS = 10,
-+ MEAS_XPOS = 12,
-+ MEAS_YPOS = 13,
-+ MEAS_Z1POS = 14,
-+ MEAS_Z2POS = 15
-+};
-+
-+#define TSC2003_CMD(cn,pdn,m) (((cn) << 4) | ((pdn) << 2) | ((m) << 1))
-+
-+#define ADC_MAX ((1 << 12) - 1)
-+
-+struct tsc2003_data {
-+ struct i2c_client client;
-+
-+ /*struct device_driver driver; FRED*/
-+ struct platform_driver driver;
-+ struct touchp_tsc2003_device * board;
-+
-+ struct input_dev idev;
-+ struct timer_list penirq_timer;
-+ struct semaphore sem;
-+ int is_opened;
-+ enum tsc2003_pd pd;
-+ enum tsc2003_m m;
-+ int penirq;
-+ struct work_struct workq;
-+ int vbat1;
-+ int vbat2;
-+ int temp0;
-+ int temp1;
-+ int in1;
-+ int in2;
-+};
-+
-+static void ReactivatePenIRQ (struct tsc2003_data *data);
-+static void tsc2003ts_task (void *v);
-+
-+static inline int tsc2003_command (struct tsc2003_data *data,
-+ enum tsc2003_cmd cmd,
-+ enum tsc2003_pd pd)
-+{
-+ char c;
-+ int ret;
-+ //down(&data->sem);
-+ c = TSC2003_CMD(cmd, pd, data->m);
-+ //ret = i2c_master_send(&data->client, &c, 1);
-+ ret = nomadik_i2c_write_register(I2C_TOUCH_CLIENT,&c,0,1);
-+
-+ //up(&data->sem);
-+ return ret;
-+}
-+
-+static int tsc2003_read (struct tsc2003_data *data,
-+ enum tsc2003_cmd cmd,
-+ enum tsc2003_pd pd,
-+ int *val)
-+{
-+ char c;
-+ char d_read[2];
-+ int ret;
-+
-+ c = TSC2003_CMD(cmd, pd, data->m);
-+ //ret = i2c_master_send(&data->client, &c, 1);
-+ ret = nomadik_i2c_write_register(I2C_TOUCH_CLIENT,&c,0,1);
-+ if (ret) goto err;
-+
-+ udelay(20);
-+ //ret = i2c_master_recv(&data->client, d, data->m == M_12BIT ? 2 : 1);
-+ ret = nomadik_i2c_read_register(I2C_TOUCH_CLIENT,d_read,0,data->m == M_12BIT ? 2 : 1);
-+ if (ret) goto err;
-+
-+ if (val)
-+ {
-+ *val = d_read[0];
-+ *val <<= 4;
-+ if (data->m == M_12BIT)
-+ *val += (d_read[1] >> 4);
-+ }
-+
-+#if defined(CONFIG_I2C_DEBUG_CHIP)
-+ printk(KERN_ERR "%s: val[%x] = %d\n",
-+ __FUNCTION__, cmd, (((int)d_read[0]) << 8) + d_read[1]);
-+#endif
-+
-+ return 0;
-+ err:
-+ if (!ret) ret = -ENODEV;
-+ return ret;
-+}
-+
-+static int send_command (struct tsc2003_data *data,
-+ unsigned char command_byte, unsigned short *val)
-+{
-+ char d_read[2];
-+ int ret;
-+
-+ ret = nomadik_i2c_write_register(I2C_TOUCH_CLIENT,&command_byte,0,1);
-+ if (ret) goto err;
-+
-+ udelay(20);
-+ ret = nomadik_i2c_read_register(I2C_TOUCH_CLIENT,d_read,0,data->m == M_12BIT ? 2 : 1);
-+ if (ret) goto err;
-+
-+ if (val)
-+ {
-+ *val = d_read[0];
-+ *val <<= 4;
-+ if (data->m == M_12BIT)
-+ *val += (d_read[1] >> 4);
-+ }
-+
-+ return 0;
-+ err:
-+ if (!ret) ret = -ENODEV;
-+ return ret;
-+}
-+
-+static inline int tsc2003_read_temp0 (struct tsc2003_data *d, enum
-+tsc2003_pd pd, int *t)
-+{
-+ return tsc2003_read(d, MEAS_TEMP0, pd, t);
-+}
-+
-+static inline int tsc2003_read_temp1 (struct tsc2003_data *d, enum
-+tsc2003_pd pd, int *t)
-+{
-+ return tsc2003_read(d, MEAS_TEMP1, pd, t);
-+}
-+
-+static inline int tsc2003_read_xpos (struct tsc2003_data *d, enum
-+tsc2003_pd pd, int *x)
-+{
-+ return tsc2003_read(d, MEAS_XPOS, pd, x);
-+}
-+
-+static inline int tsc2003_read_ypos (struct tsc2003_data *d, enum
-+tsc2003_pd pd, int *y)
-+{
-+ return tsc2003_read(d, MEAS_YPOS, pd, y);
-+}
-+
-+static inline int tsc2003_read_pressure (struct tsc2003_data *d, enum
-+tsc2003_pd pd, int *p)
-+{
-+ return tsc2003_read(d, MEAS_Z1POS, pd, p);
-+}
-+
-+static inline int tsc2003_read_in1 (struct tsc2003_data *d, enum
-+tsc2003_pd pd, int *t)
-+{
-+ return tsc2003_read(d, MEAS_IN1, pd, t);
-+}
-+
-+static inline int tsc2003_read_in2 (struct tsc2003_data *d, enum
-+tsc2003_pd pd, int *t)
-+{
-+ return tsc2003_read(d, MEAS_IN2, pd, t);
-+}
-+
-+static inline int tsc2003_read_vbat1 (struct tsc2003_data *d, enum
-+tsc2003_pd pd, int *t)
-+{
-+ return tsc2003_read(d, MEAS_VBAT1, pd, t);
-+}
-+
-+static inline int tsc2003_read_vbat2 (struct tsc2003_data *d, enum
-+tsc2003_pd pd, int *t)
-+{
-+ return tsc2003_read(d, MEAS_VBAT2, pd, t);
-+}
-+
-+static inline int tsc2003_powerdown (struct tsc2003_data *d)
-+{
-+ /* we don't have a distinct powerdown command,
-+ so do a benign read with the PD bits cleared */
-+ return tsc2003_read(d, MEAS_IN1, PD_POWERDOWN, 0);
-+}
-+
-+
-+#define PENUP_TIMEOUT 50 /* msec */
-+
-+/*static irqreturn_t tsc2003_penirq (int irq, void *v, struct pt_regs *regs)
-+{
-+ struct tsc2003_data *d = v;
-+ DEBUG_TS(("tsc2003_penirq\n"));
-+ complete(&d->penirq_completion);
-+ return IRQ_HANDLED;
-+}*/
-+
-+/* Fred : replaced by callback */
-+static void ts2003_callback (void * parameter)
-+{
-+ struct tsc2003_data *d = (struct tsc2003_data *)parameter;
-+ //DEBUG_TS(("ts2003_callback\n"));
-+
-+ tsc2003ts_task(d);
-+}
-+
-+static int tsc2003_remove(struct platform_device *pdev)
-+{
-+ struct tsc2003_data *data;
-+
-+ data = platform_get_drvdata(pdev);
-+ //input_free_device(&data->idev);
-+ input_unregister_device(&data->idev);
-+ kfree(data);
-+
-+ return 0;
-+}
-+
-+static inline void tsc2003_restart_pen_up_timer (struct tsc2003_data *d)
-+{
-+ mod_timer(&d->penirq_timer, jiffies + (PENUP_TIMEOUT * HZ) / 1000);
-+}
-+
-+
-+static void tsc2003_timer_callback (unsigned long v)
-+{
-+ struct tsc2003_data *d = (struct tsc2003_data *)v;
-+ schedule_work(&d->workq);
-+}
-+
-+static void tsc2003_timer_callback1(struct work_struct *work)
-+{
-+ /*struct tsc2003_data *d = (struct tsc2003_data *)v;*/
-+ struct tsc2003_data *d = container_of(work, struct tsc2003_data, workq);
-+ unsigned char pin_value ;
-+ unsigned int x, y, p;
-+
-+ struct task_struct *tsk = current;
-+ set_task_state(tsk, TASK_INTERRUPTIBLE);
-+
-+ d->board->pirq_read_val(&pin_value);
-+ if( pin_value == 1)
-+ {
-+ /* The pen is up */
-+ /*printk("pen is up....\n"); */
-+ input_report_abs(&d->idev, ABS_PRESSURE, 0);
-+ input_sync(&d->idev);
-+ /*schedule_timeout(HZ/20);*/
-+ return ;
-+ }
-+
-+ tsc2003_read_xpos(d, PD_PENIRQ_DISARM, &x);
-+ tsc2003_read_ypos(d, PD_PENIRQ_DISARM, &y);
-+ tsc2003_read_pressure(d, PD_PENIRQ_DISARM, &p);
-+ ReactivatePenIRQ(d);
-+
-+ input_report_abs(&d->idev, ABS_X, x);
-+ input_report_abs(&d->idev, ABS_Y, y);
-+ input_report_abs(&d->idev, ABS_PRESSURE, p);
-+ input_sync(&d->idev);
-+
-+ /*d->board->pirq_read_val(&pin_value); */
-+ if( pin_value == 0)
-+ {
-+ /* pen down event, (re)start the pen up timer */
-+ tsc2003_restart_pen_up_timer(d);
-+ }
-+#if 0
-+ else
-+ {
-+ /* The pen is up */
-+ /*printk("pen is up again ....\n");*/
-+ input_report_abs(&d->idev, ABS_PRESSURE, 0);
-+ input_sync(&d->idev);
-+ /*schedule_timeout(HZ/20); */
-+ }
-+#endif
-+ return;
-+}
-+
-+static void ReactivatePenIRQ (struct tsc2003_data *data)
-+{
-+ unsigned char command_byte;
-+ unsigned short dummy ;
-+
-+ /* Send I2C command to reactivate PENIRQn */
-+ /* C3=1, C2=1, C1=0, C0=0, PD1=0, PD2=0, M=0 */
-+ command_byte = 0xC0;
-+ send_command(data, command_byte, &dummy);
-+
-+ // acknowledge possible pending interrupt
-+ //data->board->pirq_ack();
-+}
-+
-+static void tsc2003ts_task (void *v)
-+{
-+ struct tsc2003_data *d = v;
-+ unsigned int x, y, p;
-+
-+ tsc2003_read_xpos(d, PD_PENIRQ_DISARM, &x);
-+ tsc2003_read_ypos(d, PD_PENIRQ_DISARM, &y);
-+ tsc2003_read_pressure(d, PD_PENIRQ_DISARM, &p);
-+ ReactivatePenIRQ(d);
-+
-+ input_report_abs(&d->idev, ABS_X, x);
-+ input_report_abs(&d->idev, ABS_Y, y);
-+ input_report_abs(&d->idev, ABS_PRESSURE, p);
-+ input_sync(&d->idev);
-+
-+ /* pen down event, (re)start the pen up timer */
-+ tsc2003_restart_pen_up_timer(d);
-+
-+ d->board->pirq_ack();
-+ d->board->pirq_en();
-+}
-+
-+static int tsc2003_idev_open (struct input_dev *i_dev)
-+{
-+ struct tsc2003_data *d = container_of(i_dev, struct tsc2003_data, idev);
-+ int ret = 0;
-+
-+ DEBUG_TS(("tsc2003_idev_open\n"));
-+ if (down_interruptible(&d->sem))
-+ return -EINTR;
-+
-+ if (d->is_opened)
-+ panic(DRIVER_NAME "tsd already running (!). abort.");
-+
-+ if (d->board->irq_init)
-+ {
-+ if (d->board->irq_init(ts2003_callback,(void*)d))
-+ {
-+ return -1;
-+ }
-+ d->board->pirq_en();
-+ }
-+ DEBUG_TS(("\tcallback setup\n"));
-+ d->penirq_timer.data = (unsigned long)d;
-+ d->penirq_timer.function = tsc2003_timer_callback;
-+
-+ d->is_opened = 1 ;
-+ up(&d->sem);
-+
-+ return 0;
-+}
-+
-+static void tsc2003_idev_close (struct input_dev *i_dev)
-+{
-+ struct tsc2003_data *d = container_of(i_dev, struct tsc2003_data, idev);
-+ DEBUG_TS(("tsc2003_idev_close\n"));
-+ down_interruptible(&d->sem);
-+
-+ d->is_opened = 0 ;
-+ //free_irq(d->penirq, d);
-+ if (d->board->irq_exit)
-+ {
-+ d->board->irq_exit();
-+ }
-+
-+ if (timer_pending(&d->penirq_timer))
-+ del_timer(&d->penirq_timer);
-+
-+ up(&d->sem);
-+ return;
-+}
-+
-+static int tsc2003_driver_register (struct tsc2003_data *data)
-+{
-+ int ret = 0;
-+ DEBUG_TS(("tsc2003_driver_register\n"));
-+
-+ init_MUTEX(&data->sem);
-+ init_timer(&data->penirq_timer);
-+ data->is_opened = 0 ;
-+ data->penirq_timer.data = (unsigned long)data;
-+ data->penirq_timer.function = tsc2003_timer_callback;
-+
-+INIT_WORK(&data->workq, tsc2003_timer_callback1);
-+
-+ //init_input_dev(&data->idev);
-+ init_ts_input_dev(&data->idev);
-+ data->idev.name = DRIVER_NAME;
-+ data->idev.evbit[0] = BIT(EV_ABS);
-+ data->idev.open = tsc2003_idev_open;
-+ data->idev.close = tsc2003_idev_close;
-+ data->idev.absbit[LONG(ABS_X)] = BIT(ABS_X);
-+ data->idev.absbit[LONG(ABS_Y)] = BIT(ABS_Y);
-+ data->idev.absbit[LONG(ABS_PRESSURE)] = BIT(ABS_PRESSURE);
-+
-+ input_set_abs_params(&data->idev, ABS_X, 0, ADC_MAX, 0, 0);
-+ input_set_abs_params(&data->idev, ABS_Y, 0, ADC_MAX, 0, 0);
-+
-+ ret = input_register_device(&data->idev);
-+
-+ return ret;
-+}
-+
-+
-+static int __init tsc2003_probe(struct platform_device *pdev)
-+{
-+ struct tsc2003_data *d;
-+ int err;
-+ struct touchp_tsc2003_device *touchp_board = pdev->dev.platform_data;
-+
-+ DEBUG_TS(("tsc2003_probe\n"));
-+
-+ d = kcalloc(1, sizeof(*d), GFP_KERNEL);
-+ if (!d)
-+ {
-+ err = -ENOMEM;
-+ goto err_kzalloc;
-+ }
-+
-+ DEBUG_TS(("\tdata allocated(%x)\n",(unsigned int)d));
-+ platform_set_drvdata(pdev, d);
-+ d = platform_get_drvdata(pdev);
-+
-+ if (!touchp_board) {
-+ printk("touchp platform data not defined");
-+ err = -1;
-+ goto err_board;
-+ }
-+ d->board = touchp_board;
-+
-+ DEBUG_TS(("Probing TSC2003\n"));
-+ err = tsc2003_powerdown(d);
-+ if (err >= 0)
-+ {
-+ DEBUG_TS(("\tpowerdown ok\n"));
-+ d->pd = PD_PENIRQ_DISARM;
-+ d->m = M_8BIT;
-+ err = tsc2003_driver_register(d);
-+ if (err) {
-+ goto err_init_tsc2003;
-+ }
-+ printk("\tTSC2003 Module initialized\n");
-+ return 0;
-+ }
-+
-+ err_init_tsc2003:
-+ err_board:
-+ kfree(d);
-+ err_kzalloc:
-+ return err;
-+}
-+
-+#ifdef CONFIG_PM
-+int nomadik_tsc2003_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+#if 0
-+ struct tsc2003_data *d = platform_get_drvdata(pdev);
-+
-+ if (d->board->pirq_en) {
-+ /*printk("touchscreen suspend: enabling interrupt...\n");*/
-+ d->board->pirq_en();
-+ }
-+
-+ if ( !device_may_wakeup(&pdev->dev) )
-+ if (d->board->pirq_dis) {
-+ /*printk("touchscreen suspend: disabling interrupt...\n");*/
-+ d->board->pirq_dis();
-+ }
-+#endif
-+ return 0;
-+}
-+
-+int nomadik_tsc2003_resume(struct platform_device *pdev)
-+{
-+#if 0
-+ struct tsc2003_data *d = platform_get_drvdata(pdev);
-+
-+ if (d->board->pirq_dis) {
-+ /*printk("touchscreen resume: disabling interrupt...\n");*/
-+ d->board->pirq_dis();
-+ }
-+
-+ if ( !device_may_wakeup(&pdev->dev) )
-+ if (d->board->pirq_en) {
-+ /*printk("touchscreen resume: enabling interrupt...\n");*/
-+ d->board->pirq_en();
-+ }
-+#endif
-+ return 0;
-+}
-+
-+#else
-+#define nomadik_tsc2003_suspend NULL
-+#define nomadik_tsc2003_resume NULL
-+#endif /* CONFIG_PM */
-+
-+static struct platform_driver tsc2003_driver = {
-+ .probe = tsc2003_probe,
-+ .remove = tsc2003_remove,
-+ .driver = {
-+ .name = "tsc2003",
-+ },
-+ .suspend = nomadik_tsc2003_suspend,
-+ .resume = nomadik_tsc2003_resume,
-+};
-+
-+static int __devinit tsc2003_init(void)
-+{
-+ return platform_driver_register(&tsc2003_driver);
-+}
-+
-+static void __exit tsc2003_exit(void)
-+{
-+ platform_driver_unregister(&tsc2003_driver);
-+}
-+
-+MODULE_AUTHOR("Bill Gatliff <bgat at billgatliff.com>");
-+MODULE_DESCRIPTION("TSC2003 Touch Screen Controller driver");
-+MODULE_LICENSE("GPL");
-+
-+module_init(tsc2003_init);
-+module_exit(tsc2003_exit);
-diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c
---- linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c 2008-07-04 23:45:19.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c
@@ -0,0 +1,755 @@
+/*
+ * drivers/misc/touchp-nomadik.c
@@ -34088,9 +34367,9 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+ * thread goes to sleep and the pen_down interrupt handler is enabled.
+ *
+ * In polling mode operation of this driver, driver never sleeps, whereas
-+ * it is rescheduled to poll periodically as per POLL_SAMPLES_PER_SECOND
++ * it is rescheduled to poll periodically as per POLL_SAMPLES_PER_SECOND
+ *
-+ * The driver is interfaced with Input Subsystem and passes the events for
++ * The driver is interfaced with Input Subsystem and passes the events for
+ * pen touch/untouch, presure, x and y co-rodinates
+ */
+
@@ -34164,7 +34443,7 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+static t_TP_VERSION nomadik_tp_version;
+/*struct nomadik_gpio_int_handle gpio_penirq_handle;*/
+
-+/**
++/**
+ * Module parameter defination to pass mode of operation
+ * 0 = to initialize driver in Interrupt mode (default mode)
+ * 1 = to Intialize driver in polling mode of operation
@@ -34174,7 +34453,7 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+MODULE_PARM_DESC(tpmode, "Touch panel Operating mode (INT/POLL)=(0/1)");
+
+/**
-+ * nomadik_tp_spi_cs_control - callback function for ssp
++ * nomadik_tp_spi_cs_control - callback function for ssp
+ * @comand: flag decides chip select/deselect operation
+ */
+void nomadik_tp_spi_cs_control(u32 command)
@@ -34281,7 +34560,7 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+/**
+ * int nomadik_tp_read_ssp - writes & reads tp adc data using SSP
+ * @p_adsContext: device structure
-+ *
++ *
+ * Returns 0 on sucess, negavive on failure
+ */
+static int nomadik_tp_read_ssp(struct t_adsContext *p_adsContext, int pensts)
@@ -34317,7 +34596,7 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+/**
+ * int nomadik_tp_ssp_close - closes SSP
+ * @p_adsContext: device structure
-+ *
++ *
+ * Returns 0 on sucess, negavive on failure
+ */
+static void nomadik_tp_ssp_close(struct t_adsContext *p_adsContext)
@@ -34333,7 +34612,7 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+/**
+ * void nomadik_tp_read_data - reads a set of coordinate data from the SSP
+ * @p_adsContext: device structur
-+ *
++ *
+ */
+static void nomadik_tp_read_data(struct t_adsContext *p_adsContext)
+{
@@ -34461,7 +34740,7 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+ struct task_struct *tsk = current;
+ DECLARE_WAITQUEUE(wait, tsk);
+// t_bool pen_down = TRUE;
-+
++
+ nmdk_dbg_ftrace();
+
+ daemonize("touchpanel");
@@ -34498,7 +34777,7 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+ /* Read the pen_down data first as it jitters after the other reads */
+ if (p_adsContext->board->pdown) {
+ if (!p_adsContext->board->pdown(p_adsContext)) {
-+ /* If pen down, sleep for one sample interval, then
++ /* If pen down, sleep for one sample interval, then
+ process touchscreen. */
+ nomadik_tp_read_data(p_adsContext);
+ if (!p_adsContext->board->pdown(p_adsContext)) {
@@ -34530,7 +34809,7 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+ nmdk_dbg2("%s(): scheduling next poll ",
+ __FUNCTION__);
+ schedule_timeout(HZ / p_adsContext->board->samples);
-+ } else
++ } else
+ if (p_adsContext->old_event.p == 1 && p_adsContext->new_event.p == 1) {
+ if (p_adsContext->debounce_flag == 0x01) {
+ p_adsContext->debounce_flag = 0x00;
@@ -34591,7 +34870,7 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+
+/**
+ * nomadik_tp_init - initializes the module
-+ *
++ *
+ * This function registers and initializes the module.
+ * RETURN: Zero or negative nmdk_error code
+ */
@@ -34752,7 +35031,7 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+ }
+ nomadik_tp_ssp_close(p_adsContext);
+ if (p_adsContext->board->gpio_exit) {
-+ if (p_adsContext->board->gpio_exit(p_adsContext)){
++ if (p_adsContext->board->gpio_exit(p_adsContext)){
+ status = 1;
+ nmdk_error("Gpio free for touchpanel failed..");
+ }
@@ -34771,11 +35050,11 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+int nomadik_tp_suspend(struct platform_device *pdev, pm_message_t state)
+{
+ struct t_adsContext *p_adsContext = platform_get_drvdata(pdev);
-+ if ( tpmode )
++ if ( tpmode )
+ if (p_adsContext->board->pirq_en)
+ p_adsContext->board->pirq_en(p_adsContext);
+ if ( !device_may_wakeup(&pdev->dev) )
-+ if (p_adsContext->board->pirq_dis)
++ if (p_adsContext->board->pirq_dis)
+ p_adsContext->board->pirq_dis(p_adsContext);
+ return 0;
+}
@@ -34783,8 +35062,8 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+int nomadik_tp_resume(struct platform_device *pdev)
+{
+ struct t_adsContext *p_adsContext = platform_get_drvdata(pdev);
-+ if ( tpmode )
-+ if (p_adsContext->board->pirq_dis)
++ if ( tpmode )
++ if (p_adsContext->board->pirq_dis)
+ p_adsContext->board->pirq_dis(p_adsContext);
+ if ( !device_may_wakeup(&pdev->dev) )
+ if (p_adsContext->board->pirq_en)
@@ -34825,29 +35104,580 @@ diff -Nauprw linux-2.6.20/drivers/input/touchscreen/touchp-nomadik.c ../new/linu
+ ("Prafulla Wadaskar <prafulla.wadaskar@st.com>, ST Microelectronics");
+MODULE_DESCRIPTION("Nomadik Touchpanel Driver");
+MODULE_LICENSE("GPL");
-diff -Nauprw linux-2.6.20/drivers/Makefile ../new/linux-2.6.20/drivers/Makefile
---- linux-2.6.20/drivers/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -5,6 +5,7 @@
- # Rewritten to use lists instead of if-statements.
- #
+--- /dev/null
++++ linux-2.6.20/drivers/input/touchscreen/touchp2003-nomadik.c
+@@ -0,0 +1,566 @@
++/*
++ * linux/drivers/i2c/chips/tsc2003.c
++ *
++ * Copyright (C) 2005 Bill Gatliff <bgat at billgatliff.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Driver for TI's TSC2003 I2C Touch Screen Controller
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/i2c.h>
++#include <linux/string.h>
++#include <linux/bcd.h>
++#include <linux/list.h>
++#include <linux/device.h>
++#include <linux/platform_device.h>
++#include <linux/interrupt.h>
++#include <linux/input.h>
++#include <linux/delay.h>
++#include <asm/arch/touchp2003.h>
++#include <asm/arch/i2c.h>
++
++#define DEBUG_TS(x) printk x
++
++/*
++ * Insmod parameters
++ */
++
++#define DRIVER_NAME "tsc2003"
++
++enum tsc2003_pd {
++ PD_POWERDOWN = 0, /* penirq */
++ PD_IREFOFF_ADCON = 1, /* no penirq */
++ PD_IREFON_ADCOFF = 2, /* penirq */
++ PD_IREFON_ADCON = 3, /* no penirq */
++ PD_PENIRQ_ARM = PD_IREFON_ADCOFF,
++ PD_PENIRQ_DISARM = PD_IREFON_ADCON,
++};
++
++enum tsc2003_m {
++ M_12BIT = 0,
++ M_8BIT = 1
++};
++
++enum tsc2003_cmd {
++ MEAS_TEMP0 = 0,
++ MEAS_VBAT1 = 1,
++ MEAS_IN1 = 2,
++ MEAS_TEMP1 = 4,
++ MEAS_VBAT2 = 5,
++ MEAS_IN2 = 6,
++ ACTIVATE_NX_DRIVERS = 8,
++ ACTIVATE_NY_DRIVERS = 9,
++ ACTIVATE_YNX_DRIVERS = 10,
++ MEAS_XPOS = 12,
++ MEAS_YPOS = 13,
++ MEAS_Z1POS = 14,
++ MEAS_Z2POS = 15
++};
++
++#define TSC2003_CMD(cn,pdn,m) (((cn) << 4) | ((pdn) << 2) | ((m) << 1))
++
++#define ADC_MAX ((1 << 12) - 1)
++
++struct tsc2003_data {
++ struct i2c_client client;
++
++ /*struct device_driver driver; FRED*/
++ struct platform_driver driver;
++ struct touchp_tsc2003_device * board;
++
++ struct input_dev idev;
++ struct timer_list penirq_timer;
++ struct semaphore sem;
++ int is_opened;
++ enum tsc2003_pd pd;
++ enum tsc2003_m m;
++ int penirq;
++ struct work_struct workq;
++ int vbat1;
++ int vbat2;
++ int temp0;
++ int temp1;
++ int in1;
++ int in2;
++};
++
++static void ReactivatePenIRQ (struct tsc2003_data *data);
++static void tsc2003ts_task (void *v);
++
++static inline int tsc2003_command (struct tsc2003_data *data,
++ enum tsc2003_cmd cmd,
++ enum tsc2003_pd pd)
++{
++ char c;
++ int ret;
++ //down(&data->sem);
++ c = TSC2003_CMD(cmd, pd, data->m);
++ //ret = i2c_master_send(&data->client, &c, 1);
++ ret = nomadik_i2c_write_register(I2C_TOUCH_CLIENT,&c,0,1);
++
++ //up(&data->sem);
++ return ret;
++}
++
++static int tsc2003_read (struct tsc2003_data *data,
++ enum tsc2003_cmd cmd,
++ enum tsc2003_pd pd,
++ int *val)
++{
++ char c;
++ char d_read[2];
++ int ret;
++
++ c = TSC2003_CMD(cmd, pd, data->m);
++ //ret = i2c_master_send(&data->client, &c, 1);
++ ret = nomadik_i2c_write_register(I2C_TOUCH_CLIENT,&c,0,1);
++ if (ret) goto err;
++
++ udelay(20);
++ //ret = i2c_master_recv(&data->client, d, data->m == M_12BIT ? 2 : 1);
++ ret = nomadik_i2c_read_register(I2C_TOUCH_CLIENT,d_read,0,data->m == M_12BIT ? 2 : 1);
++ if (ret) goto err;
++
++ if (val)
++ {
++ *val = d_read[0];
++ *val <<= 4;
++ if (data->m == M_12BIT)
++ *val += (d_read[1] >> 4);
++ }
++
++#if defined(CONFIG_I2C_DEBUG_CHIP)
++ printk(KERN_ERR "%s: val[%x] = %d\n",
++ __FUNCTION__, cmd, (((int)d_read[0]) << 8) + d_read[1]);
++#endif
++
++ return 0;
++ err:
++ if (!ret) ret = -ENODEV;
++ return ret;
++}
++
++static int send_command (struct tsc2003_data *data,
++ unsigned char command_byte, unsigned short *val)
++{
++ char d_read[2];
++ int ret;
++
++ ret = nomadik_i2c_write_register(I2C_TOUCH_CLIENT,&command_byte,0,1);
++ if (ret) goto err;
++
++ udelay(20);
++ ret = nomadik_i2c_read_register(I2C_TOUCH_CLIENT,d_read,0,data->m == M_12BIT ? 2 : 1);
++ if (ret) goto err;
++
++ if (val)
++ {
++ *val = d_read[0];
++ *val <<= 4;
++ if (data->m == M_12BIT)
++ *val += (d_read[1] >> 4);
++ }
++
++ return 0;
++ err:
++ if (!ret) ret = -ENODEV;
++ return ret;
++}
++
++static inline int tsc2003_read_temp0 (struct tsc2003_data *d, enum
++tsc2003_pd pd, int *t)
++{
++ return tsc2003_read(d, MEAS_TEMP0, pd, t);
++}
++
++static inline int tsc2003_read_temp1 (struct tsc2003_data *d, enum
++tsc2003_pd pd, int *t)
++{
++ return tsc2003_read(d, MEAS_TEMP1, pd, t);
++}
++
++static inline int tsc2003_read_xpos (struct tsc2003_data *d, enum
++tsc2003_pd pd, int *x)
++{
++ return tsc2003_read(d, MEAS_XPOS, pd, x);
++}
++
++static inline int tsc2003_read_ypos (struct tsc2003_data *d, enum
++tsc2003_pd pd, int *y)
++{
++ return tsc2003_read(d, MEAS_YPOS, pd, y);
++}
++
++static inline int tsc2003_read_pressure (struct tsc2003_data *d, enum
++tsc2003_pd pd, int *p)
++{
++ return tsc2003_read(d, MEAS_Z1POS, pd, p);
++}
++
++static inline int tsc2003_read_in1 (struct tsc2003_data *d, enum
++tsc2003_pd pd, int *t)
++{
++ return tsc2003_read(d, MEAS_IN1, pd, t);
++}
++
++static inline int tsc2003_read_in2 (struct tsc2003_data *d, enum
++tsc2003_pd pd, int *t)
++{
++ return tsc2003_read(d, MEAS_IN2, pd, t);
++}
++
++static inline int tsc2003_read_vbat1 (struct tsc2003_data *d, enum
++tsc2003_pd pd, int *t)
++{
++ return tsc2003_read(d, MEAS_VBAT1, pd, t);
++}
++
++static inline int tsc2003_read_vbat2 (struct tsc2003_data *d, enum
++tsc2003_pd pd, int *t)
++{
++ return tsc2003_read(d, MEAS_VBAT2, pd, t);
++}
++
++static inline int tsc2003_powerdown (struct tsc2003_data *d)
++{
++ /* we don't have a distinct powerdown command,
++ so do a benign read with the PD bits cleared */
++ return tsc2003_read(d, MEAS_IN1, PD_POWERDOWN, 0);
++}
++
++
++#define PENUP_TIMEOUT 50 /* msec */
++
++/*static irqreturn_t tsc2003_penirq (int irq, void *v, struct pt_regs *regs)
++{
++ struct tsc2003_data *d = v;
++ DEBUG_TS(("tsc2003_penirq\n"));
++ complete(&d->penirq_completion);
++ return IRQ_HANDLED;
++}*/
++
++/* Fred : replaced by callback */
++static void ts2003_callback (void * parameter)
++{
++ struct tsc2003_data *d = (struct tsc2003_data *)parameter;
++ //DEBUG_TS(("ts2003_callback\n"));
++
++ tsc2003ts_task(d);
++}
++
++static int tsc2003_remove(struct platform_device *pdev)
++{
++ struct tsc2003_data *data;
++
++ data = platform_get_drvdata(pdev);
++ //input_free_device(&data->idev);
++ input_unregister_device(&data->idev);
++ kfree(data);
++
++ return 0;
++}
++
++static inline void tsc2003_restart_pen_up_timer (struct tsc2003_data *d)
++{
++ mod_timer(&d->penirq_timer, jiffies + (PENUP_TIMEOUT * HZ) / 1000);
++}
++
++
++static void tsc2003_timer_callback (unsigned long v)
++{
++ struct tsc2003_data *d = (struct tsc2003_data *)v;
++ schedule_work(&d->workq);
++}
++
++static void tsc2003_timer_callback1(struct work_struct *work)
++{
++ /*struct tsc2003_data *d = (struct tsc2003_data *)v;*/
++ struct tsc2003_data *d = container_of(work, struct tsc2003_data, workq);
++ unsigned char pin_value ;
++ unsigned int x, y, p;
++
++ struct task_struct *tsk = current;
++ set_task_state(tsk, TASK_INTERRUPTIBLE);
++
++ d->board->pirq_read_val(&pin_value);
++ if( pin_value == 1)
++ {
++ /* The pen is up */
++ /*printk("pen is up....\n"); */
++ input_report_abs(&d->idev, ABS_PRESSURE, 0);
++ input_sync(&d->idev);
++ /*schedule_timeout(HZ/20);*/
++ return ;
++ }
++
++ tsc2003_read_xpos(d, PD_PENIRQ_DISARM, &x);
++ tsc2003_read_ypos(d, PD_PENIRQ_DISARM, &y);
++ tsc2003_read_pressure(d, PD_PENIRQ_DISARM, &p);
++ ReactivatePenIRQ(d);
++
++ input_report_abs(&d->idev, ABS_X, x);
++ input_report_abs(&d->idev, ABS_Y, y);
++ input_report_abs(&d->idev, ABS_PRESSURE, p);
++ input_sync(&d->idev);
++
++ /*d->board->pirq_read_val(&pin_value); */
++ if( pin_value == 0)
++ {
++ /* pen down event, (re)start the pen up timer */
++ tsc2003_restart_pen_up_timer(d);
++ }
++#if 0
++ else
++ {
++ /* The pen is up */
++ /*printk("pen is up again ....\n");*/
++ input_report_abs(&d->idev, ABS_PRESSURE, 0);
++ input_sync(&d->idev);
++ /*schedule_timeout(HZ/20); */
++ }
++#endif
++ return;
++}
++
++static void ReactivatePenIRQ (struct tsc2003_data *data)
++{
++ unsigned char command_byte;
++ unsigned short dummy ;
++
++ /* Send I2C command to reactivate PENIRQn */
++ /* C3=1, C2=1, C1=0, C0=0, PD1=0, PD2=0, M=0 */
++ command_byte = 0xC0;
++ send_command(data, command_byte, &dummy);
++
++ // acknowledge possible pending interrupt
++ //data->board->pirq_ack();
++}
++
++static void tsc2003ts_task (void *v)
++{
++ struct tsc2003_data *d = v;
++ unsigned int x, y, p;
++
++ tsc2003_read_xpos(d, PD_PENIRQ_DISARM, &x);
++ tsc2003_read_ypos(d, PD_PENIRQ_DISARM, &y);
++ tsc2003_read_pressure(d, PD_PENIRQ_DISARM, &p);
++ ReactivatePenIRQ(d);
++
++ input_report_abs(&d->idev, ABS_X, x);
++ input_report_abs(&d->idev, ABS_Y, y);
++ input_report_abs(&d->idev, ABS_PRESSURE, p);
++ input_sync(&d->idev);
++
++ /* pen down event, (re)start the pen up timer */
++ tsc2003_restart_pen_up_timer(d);
++
++ d->board->pirq_ack();
++ d->board->pirq_en();
++}
++
++static int tsc2003_idev_open (struct input_dev *i_dev)
++{
++ struct tsc2003_data *d = container_of(i_dev, struct tsc2003_data, idev);
++ int ret = 0;
++
++ DEBUG_TS(("tsc2003_idev_open\n"));
++ if (down_interruptible(&d->sem))
++ return -EINTR;
++
++ if (d->is_opened)
++ panic(DRIVER_NAME "tsd already running (!). abort.");
++
++ if (d->board->irq_init)
++ {
++ if (d->board->irq_init(ts2003_callback,(void*)d))
++ {
++ return -1;
++ }
++ d->board->pirq_en();
++ }
++ DEBUG_TS(("\tcallback setup\n"));
++ d->penirq_timer.data = (unsigned long)d;
++ d->penirq_timer.function = tsc2003_timer_callback;
++
++ d->is_opened = 1 ;
++ up(&d->sem);
++
++ return 0;
++}
++
++static void tsc2003_idev_close (struct input_dev *i_dev)
++{
++ struct tsc2003_data *d = container_of(i_dev, struct tsc2003_data, idev);
++ DEBUG_TS(("tsc2003_idev_close\n"));
++ down_interruptible(&d->sem);
++
++ d->is_opened = 0 ;
++ //free_irq(d->penirq, d);
++ if (d->board->irq_exit)
++ {
++ d->board->irq_exit();
++ }
++
++ if (timer_pending(&d->penirq_timer))
++ del_timer(&d->penirq_timer);
++
++ up(&d->sem);
++ return;
++}
++
++static int tsc2003_driver_register (struct tsc2003_data *data)
++{
++ int ret = 0;
++ DEBUG_TS(("tsc2003_driver_register\n"));
++
++ init_MUTEX(&data->sem);
++ init_timer(&data->penirq_timer);
++ data->is_opened = 0 ;
++ data->penirq_timer.data = (unsigned long)data;
++ data->penirq_timer.function = tsc2003_timer_callback;
++
++INIT_WORK(&data->workq, tsc2003_timer_callback1);
++
++ //init_input_dev(&data->idev);
++ init_ts_input_dev(&data->idev);
++ data->idev.name = DRIVER_NAME;
++ data->idev.evbit[0] = BIT(EV_ABS);
++ data->idev.open = tsc2003_idev_open;
++ data->idev.close = tsc2003_idev_close;
++ data->idev.absbit[LONG(ABS_X)] = BIT(ABS_X);
++ data->idev.absbit[LONG(ABS_Y)] = BIT(ABS_Y);
++ data->idev.absbit[LONG(ABS_PRESSURE)] = BIT(ABS_PRESSURE);
++
++ input_set_abs_params(&data->idev, ABS_X, 0, ADC_MAX, 0, 0);
++ input_set_abs_params(&data->idev, ABS_Y, 0, ADC_MAX, 0, 0);
++
++ ret = input_register_device(&data->idev);
++
++ return ret;
++}
++
++
++static int __init tsc2003_probe(struct platform_device *pdev)
++{
++ struct tsc2003_data *d;
++ int err;
++ struct touchp_tsc2003_device *touchp_board = pdev->dev.platform_data;
++
++ DEBUG_TS(("tsc2003_probe\n"));
++
++ d = kcalloc(1, sizeof(*d), GFP_KERNEL);
++ if (!d)
++ {
++ err = -ENOMEM;
++ goto err_kzalloc;
++ }
++
++ DEBUG_TS(("\tdata allocated(%x)\n",(unsigned int)d));
++ platform_set_drvdata(pdev, d);
++ d = platform_get_drvdata(pdev);
++
++ if (!touchp_board) {
++ printk("touchp platform data not defined");
++ err = -1;
++ goto err_board;
++ }
++ d->board = touchp_board;
++
++ DEBUG_TS(("Probing TSC2003\n"));
++ err = tsc2003_powerdown(d);
++ if (err >= 0)
++ {
++ DEBUG_TS(("\tpowerdown ok\n"));
++ d->pd = PD_PENIRQ_DISARM;
++ d->m = M_8BIT;
++ err = tsc2003_driver_register(d);
++ if (err) {
++ goto err_init_tsc2003;
++ }
++ printk("\tTSC2003 Module initialized\n");
++ return 0;
++ }
++
++ err_init_tsc2003:
++ err_board:
++ kfree(d);
++ err_kzalloc:
++ return err;
++}
++
++#ifdef CONFIG_PM
++int nomadik_tsc2003_suspend(struct platform_device *pdev, pm_message_t state)
++{
++#if 0
++ struct tsc2003_data *d = platform_get_drvdata(pdev);
++
++ if (d->board->pirq_en) {
++ /*printk("touchscreen suspend: enabling interrupt...\n");*/
++ d->board->pirq_en();
++ }
++
++ if ( !device_may_wakeup(&pdev->dev) )
++ if (d->board->pirq_dis) {
++ /*printk("touchscreen suspend: disabling interrupt...\n");*/
++ d->board->pirq_dis();
++ }
++#endif
++ return 0;
++}
++
++int nomadik_tsc2003_resume(struct platform_device *pdev)
++{
++#if 0
++ struct tsc2003_data *d = platform_get_drvdata(pdev);
++
++ if (d->board->pirq_dis) {
++ /*printk("touchscreen resume: disabling interrupt...\n");*/
++ d->board->pirq_dis();
++ }
++
++ if ( !device_may_wakeup(&pdev->dev) )
++ if (d->board->pirq_en) {
++ /*printk("touchscreen resume: enabling interrupt...\n");*/
++ d->board->pirq_en();
++ }
++#endif
++ return 0;
++}
++
++#else
++#define nomadik_tsc2003_suspend NULL
++#define nomadik_tsc2003_resume NULL
++#endif /* CONFIG_PM */
++
++static struct platform_driver tsc2003_driver = {
++ .probe = tsc2003_probe,
++ .remove = tsc2003_remove,
++ .driver = {
++ .name = "tsc2003",
++ },
++ .suspend = nomadik_tsc2003_suspend,
++ .resume = nomadik_tsc2003_resume,
++};
++
++static int __devinit tsc2003_init(void)
++{
++ return platform_driver_register(&tsc2003_driver);
++}
++
++static void __exit tsc2003_exit(void)
++{
++ platform_driver_unregister(&tsc2003_driver);
++}
++
++MODULE_AUTHOR("Bill Gatliff <bgat at billgatliff.com>");
++MODULE_DESCRIPTION("TSC2003 Touch Screen Controller driver");
++MODULE_LICENSE("GPL");
++
++module_init(tsc2003_init);
++module_exit(tsc2003_exit);
+--- linux-2.6.20.orig/drivers/media/Kconfig
++++ linux-2.6.20/drivers/media/Kconfig
+@@ -63,10 +63,12 @@ source "drivers/media/radio/Kconfig"
-+obj-$(CONFIG_I2C) += i2c/
- obj-$(CONFIG_PCI) += pci/
- obj-$(CONFIG_PARISC) += parisc/
- obj-$(CONFIG_RAPIDIO) += rapidio/
-@@ -57,7 +58,6 @@ obj-$(CONFIG_GAMEPORT) += input/gamepor
- obj-$(CONFIG_INPUT) += input/
- obj-$(CONFIG_I2O) += message/
- obj-$(CONFIG_RTC_LIB) += rtc/
--obj-$(CONFIG_I2C) += i2c/
- obj-$(CONFIG_W1) += w1/
- obj-$(CONFIG_HWMON) += hwmon/
- obj-$(CONFIG_PHONE) += telephony/
-diff -Nauprw linux-2.6.20/drivers/media/Kconfig ../new/linux-2.6.20/drivers/media/Kconfig
---- linux-2.6.20/drivers/media/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/Kconfig 2008-08-12 22:56:04.000000000 +0530
-@@ -65,6 +65,8 @@ source "drivers/media/dvb/Kconfig"
+ source "drivers/media/dvb/Kconfig"
source "drivers/media/common/Kconfig"
@@ -34856,10 +35686,13 @@ diff -Nauprw linux-2.6.20/drivers/media/Kconfig ../new/linux-2.6.20/drivers/medi
config VIDEO_TUNER
tristate
depends on I2C
-diff -Nauprw linux-2.6.20/drivers/media/Makefile ../new/linux-2.6.20/drivers/media/Makefile
---- linux-2.6.20/drivers/media/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/Makefile 2008-10-06 12:06:20.000000000 +0530
-@@ -6,3 +6,7 @@ obj-y := common/
+
+ config VIDEO_BUF
+--- linux-2.6.20.orig/drivers/media/Makefile
++++ linux-2.6.20/drivers/media/Makefile
+@@ -4,5 +4,9 @@
+
+ obj-y := common/
obj-$(CONFIG_VIDEO_DEV) += video/
obj-$(CONFIG_VIDEO_DEV) += radio/
obj-$(CONFIG_DVB) += dvb/
@@ -34867,9 +35700,45 @@ diff -Nauprw linux-2.6.20/drivers/media/Makefile ../new/linux-2.6.20/drivers/med
+obj-$(CONFIG_NOMADIK_SVA) += nomadik_mm/sva/
+obj-$(CONFIG_NOMADIK_SAA) += nomadik_mm/saa/
+obj-$(CONFIG_NOMADIK_OGL) += nomadik_mm/opengl/
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader.c 2008-07-17 16:43:06.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/Kconfig
+@@ -0,0 +1,23 @@
++#
++# Nomadik Multimedia Audio/Video device configuration
++#
++
++menu "NOMADIK Audio Video Graphic Drivers(SAA SVA and OPENGL) "
++
++config NOMADIK_SAA
++ tristate "Nomadik SAA Support"
++ depends on ARCH_NOMADIK && NOMADIK_MSP && I2C_NOMADIK
++ ---help---
++ Support for Nomadik SAA DSP
++
++config NOMADIK_SVA
++ tristate "Nomadik SVA Support"
++ depends on ARCH_NOMADIK && VIDEO_V4L2 && I2C_NOMADIK
++ ---help---
++ Support for Nomadik SVA DSP
++
++config NOMADIK_OGL
++ tristate "Nomadik OGL Support"
++ ---help---
++ Support for Nomadik OGL DSP
++endmenu
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/Makefile
+@@ -0,0 +1,8 @@
++#
++# Makefile for the kernel multimedia device drivers.
++#kefile for the kernel multimedia device drivers.
++#
++
++obj-$(CONFIG_NOMADIK_SAA) += saa/
++obj-$(CONFIG_NOMADIK_SVA) += sva/
++obj-$(CONFIG_NOMADIK_OGL) += opengl/
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader.c
@@ -0,0 +1,3632 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -38503,9 +39372,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader.c ../new/
+
+/* End of file - hloader.c */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader.h 2008-07-17 16:43:07.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader.h
@@ -0,0 +1,170 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -38677,9 +39545,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader.h ../new/
+
+/* End of file - hloader.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader_p.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader_p.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader_p.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader_p.h 2008-07-17 16:43:08.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader_p.h
@@ -0,0 +1,451 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -39132,9 +39999,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/hloader/hloader_p.h ../ne
+
+/* End of file - hloader_p.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/debug.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/include/debug.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/include/debug.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/include/debug.h 2008-07-17 16:43:02.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/include/debug.h
@@ -0,0 +1,316 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -39452,16 +40318,15 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/debug.h ../new/li
+/* End of file - debug.h */
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h 2008-07-17 16:43:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h
@@ -0,0 +1,290 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
+/* information, STMicroelectronics reserves the right to license this */
+/* software concurrently under separate license conditions. */
+/* */
-+/* This program is free software; you can redistribute it and/or modify it */
++/* 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. */
@@ -39484,7 +40349,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h ../new
+#include "platform_os.h"
+
+/*-----------------------------------------------------------------------------
-+ * Type definition
++ * Type definition
+ *---------------------------------------------------------------------------*/
+typedef unsigned char t_uint8;
+typedef signed char t_sint8;
@@ -39503,7 +40368,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h ../new
+
+typedef unsigned int t_bitfield;
+
-+#if !defined(FALSE) && !defined(TRUE)
++#if !defined(FALSE) && !defined(TRUE)
+typedef enum {FALSE, TRUE} t_bool;
+#else /* FALSE & TRUE already defined */
+typedef enum {BOOL_FALSE, BOOL_TRUE} t_bool;
@@ -39520,10 +40385,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h ../new
+
+/*
+ * Global frequency enumuration
-+ * Added to avoid frequency conversion function which is required to convert one HCL
++ * Added to avoid frequency conversion function which is required to convert one HCL
+ * frequency enumuration values to another HCL frequency enumuration values.
+ */
-+
++
+typedef enum {
+ HCL_FREQ_NOT_SUPPORTED=-1,
+ HCL_FREQ_8KHZ ,
@@ -39557,7 +40422,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h ../new
+ HCL_FREQ_22MHZ,
+ HCL_FREQ_24MHZ,
+ HCL_FREQ_48MHZ
-+} t_frequency;
++} t_frequency;
+
+
+
@@ -39582,7 +40447,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h ../new
+
+
+/*-----------------------------------------------------------------------------
-+ * Keyword definition
++ * Keyword definition
+ *---------------------------------------------------------------------------*/
+#define PUBLIC /* Extern by default */
+#define PRIVATE static
@@ -39634,42 +40499,42 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h ../new
+#define MASK_NULL8 0x00
+#define MASK_NULL16 0x0000
+#define MASK_NULL32 0x00000000
-+#define MASK_ALL8 0xFF
-+#define MASK_ALL16 0xFFFF
++#define MASK_ALL8 0xFF
++#define MASK_ALL16 0xFFFF
+#define MASK_ALL32 0xFFFFFFFF
+
+#define MASK_BIT0 (1UL<<0)
-+#define MASK_BIT1 (1UL<<1)
-+#define MASK_BIT2 (1UL<<2)
-+#define MASK_BIT3 (1UL<<3)
-+#define MASK_BIT4 (1UL<<4)
-+#define MASK_BIT5 (1UL<<5)
-+#define MASK_BIT6 (1UL<<6)
-+#define MASK_BIT7 (1UL<<7)
-+#define MASK_BIT8 (1UL<<8)
-+#define MASK_BIT9 (1UL<<9)
-+#define MASK_BIT10 (1UL<<10)
-+#define MASK_BIT11 (1UL<<11)
-+#define MASK_BIT12 (1UL<<12)
-+#define MASK_BIT13 (1UL<<13)
-+#define MASK_BIT14 (1UL<<14)
-+#define MASK_BIT15 (1UL<<15)
-+#define MASK_BIT16 (1UL<<16)
-+#define MASK_BIT17 (1UL<<17)
-+#define MASK_BIT18 (1UL<<18)
-+#define MASK_BIT19 (1UL<<19)
-+#define MASK_BIT20 (1UL<<20)
++#define MASK_BIT1 (1UL<<1)
++#define MASK_BIT2 (1UL<<2)
++#define MASK_BIT3 (1UL<<3)
++#define MASK_BIT4 (1UL<<4)
++#define MASK_BIT5 (1UL<<5)
++#define MASK_BIT6 (1UL<<6)
++#define MASK_BIT7 (1UL<<7)
++#define MASK_BIT8 (1UL<<8)
++#define MASK_BIT9 (1UL<<9)
++#define MASK_BIT10 (1UL<<10)
++#define MASK_BIT11 (1UL<<11)
++#define MASK_BIT12 (1UL<<12)
++#define MASK_BIT13 (1UL<<13)
++#define MASK_BIT14 (1UL<<14)
++#define MASK_BIT15 (1UL<<15)
++#define MASK_BIT16 (1UL<<16)
++#define MASK_BIT17 (1UL<<17)
++#define MASK_BIT18 (1UL<<18)
++#define MASK_BIT19 (1UL<<19)
++#define MASK_BIT20 (1UL<<20)
+#define MASK_BIT21 (1UL<<21)
-+#define MASK_BIT22 (1UL<<22)
-+#define MASK_BIT23 (1UL<<23)
-+#define MASK_BIT24 (1UL<<24)
-+#define MASK_BIT25 (1UL<<25)
-+#define MASK_BIT26 (1UL<<26)
-+#define MASK_BIT27 (1UL<<27)
-+#define MASK_BIT28 (1UL<<28)
-+#define MASK_BIT29 (1UL<<29)
++#define MASK_BIT22 (1UL<<22)
++#define MASK_BIT23 (1UL<<23)
++#define MASK_BIT24 (1UL<<24)
++#define MASK_BIT25 (1UL<<25)
++#define MASK_BIT26 (1UL<<26)
++#define MASK_BIT27 (1UL<<27)
++#define MASK_BIT28 (1UL<<28)
++#define MASK_BIT29 (1UL<<29)
+#define MASK_BIT30 (1UL<<30)
-+#define MASK_BIT31 (1UL<<31)
++#define MASK_BIT31 (1UL<<31)
+
+/*-----------------------------------------------------------------------------
+ * quartet shift definition
@@ -39704,7 +40569,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h ../new
+#define MASK_BYTE1 (MASK_BYTE << SHIFT_BYTE1)
+#define MASK_BYTE2 (MASK_BYTE << SHIFT_BYTE2)
+#define MASK_BYTE3 (MASK_BYTE << SHIFT_BYTE3)
-+
++
+/*-----------------------------------------------------------------------------
+ * Halfword shift definition
+ *---------------------------------------------------------------------------*/
@@ -39719,8 +40584,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h ../new
+ *---------------------------------------------------------------------------*/
+ #define ONE_KB (1024)
+ #define ONE_MB (ONE_KB * ONE_KB)
-+
-+
++
++
+/*-----------------------------------------------------------------------------
+ * Address translation macros declaration
+ *---------------------------------------------------------------------------*/
@@ -39746,16 +40611,15 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hcl_defs.h ../new
+
+/* End of file hcl_defs.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hloader.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hloader.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hloader.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hloader.h 2008-07-17 16:43:04.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hloader.h
@@ -0,0 +1,170 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
+/* information, STMicroelectronics reserves the right to license this */
+/* software concurrently under separate license conditions. */
+/* */
-+/* This program is free software; you can redistribute it and/or modify it */
++/* 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. */
@@ -39920,16 +40784,15 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/hloader.h ../new/
+
+/* End of file - hloader.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h 2008-07-17 16:43:04.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h
@@ -0,0 +1,1761 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
+/* information, STMicroelectronics reserves the right to license this */
+/* software concurrently under separate license conditions. */
+/* */
-+/* This program is free software; you can redistribute it and/or modify it */
++/* 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. */
@@ -40249,7 +41112,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h .
+
+
+/*--------------------------------------------------------------------------*/
-+#if defined(__STN_8800)
++#if defined(__STN_8800)
+
+/* SDRAM bank 0 */
+#define SDRAM_BANK_0_BASE_ADDR 0x00000000
@@ -40433,7 +41296,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h .
+#endif /* defined(__STN_8800) */
+
+/*--------------------------------------------------------------------------*/
-+#if defined(__STN_8810)
++#if defined(__STN_8810)
+
+/* SDRAM bank 0 */
+#define SDRAM_BANK_0_BASE_ADDR 0x00000000
@@ -40789,7 +41652,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h .
+#endif
+
+/* TSP configuration registers */
-+#define TSP_CFG_REG_BASE_ADDR 0xD2000000
++#define TSP_CFG_REG_BASE_ADDR 0xD2000000
+//#define TSP_CFG_REG_END_ADDR 0x101AFFFF
+
+/* LM1 Control registers */
@@ -40848,7 +41711,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h .
+//#define USB_REG_END_ADDR 0x1017FFFF
+
+/* Static Memory Controller configuration registers */
-+#define SMC_CTRL_REG_BASE_ADDR 0xE7100000
++#define SMC_CTRL_REG_BASE_ADDR 0xE7100000
+#define SMC_CTRL_REG_END_ADDR 0xE7FFFFFF
+
+/* (PC-Card)/NAND Flash Controller Bank 0 */
@@ -40959,7 +41822,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h .
+#define HSI_TX_REG_END_ADDR 0xD11FFFFF
+
+/* TSP configuration registers */
-+#define TSP_CFG_REG_BASE_ADDR 0xD2000000
++#define TSP_CFG_REG_BASE_ADDR 0xD2000000
+#define TSP_CFG_REG_END_ADDR 0xD2FFFFFF
+
+/* LM1 Control registers */
@@ -41017,7 +41880,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h .
+#define USB_REG_END_ADDR 0xE70FFFFF
+
+/* Static Memory Controller configuration registers */
-+#define SMC_CTRL_REG_BASE_ADDR 0xE7100000
++#define SMC_CTRL_REG_BASE_ADDR 0xE7100000
+#define SMC_CTRL_REG_END_ADDR 0xE7FFFFFF
+
+/* (PC-Card)/NAND Flash Controller Bank 0 */
@@ -41043,7 +41906,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h .
+#endif /* defined(__EMUL) */
+
+/*--------------------------------------------------------------------------*/
-+#if defined(__STN_8815)
++#if defined(__STN_8815)
+
+/* SDRAM bank 0 */
+#define SDRAM_BANK_0_BASE_ADDR 0x00000000
@@ -41327,7 +42190,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h .
+#endif /* defined(__STN_8815) */
+
+/*--------------------------------------------------------------------------*/
-+#if defined(__STN_8820)
++#if defined(__STN_8820)
+
+/* SDRAM bank 0 */
+#define SDRAM_BANK_0_BASE_ADDR 0x00000000
@@ -41685,16 +42548,15 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/mupoc_mapping.h .
+#endif /*__INC_MUPOC_MAPPING_H */
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/platform_os.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/include/platform_os.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/include/platform_os.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/include/platform_os.h 2008-07-17 16:43:05.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/include/platform_os.h
@@ -0,0 +1,72 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
+/* information, STMicroelectronics reserves the right to license this */
+/* software concurrently under separate license conditions. */
+/* */
-+/* This program is free software; you can redistribute it and/or modify it */
++/* 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. */
@@ -41761,9 +42623,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/platform_os.h ../
+typedef signed long long t_sint64;
+
+#endif /* __INC_PLATFORM_OS_H */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/sva.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/include/sva.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/include/sva.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/include/sva.h 2008-07-17 16:43:44.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/include/sva.h
@@ -0,0 +1,2148 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -43913,9 +44774,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/include/sva.h ../new/linu
+
+#endif /* __INC_SVA_H */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/audio_services.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/audio_services.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/audio_services.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/audio_services.c 2008-07-17 16:42:52.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/audio_services.c
@@ -0,0 +1,142 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -44059,9 +44919,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/audio_services.c ../n
+ if (vic_error != VIC_OK)
+ PRINT("FATAL: Unable to uninstall IRQ handler 1 (error %u)! ", vic_error);
+}
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/audio_services.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/audio_services.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/audio_services.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/audio_services.h 2008-07-17 16:42:53.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/audio_services.h
@@ -0,0 +1,39 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -44102,9 +44961,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/audio_services.h ../n
+
+#endif /* _SERVICES_AUDIO_H */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_api_params.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_api_params.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_api_params.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_api_params.h 2008-07-17 16:42:53.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_api_params.h
@@ -0,0 +1,1064 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -45170,9 +46028,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_api_params.h ../ne
+} t_saa_event_map;
+
+#endif // _ha_api_params_h_
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_codec_info.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_codec_info.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_codec_info.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_codec_info.h 2008-07-17 16:42:54.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_codec_info.h
@@ -0,0 +1,204 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -45378,9 +46235,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_codec_info.h ../ne
+} t_saa_codec_info;
+
+#endif // _ha_codec_info_h_
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_codec_params.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_codec_params.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_codec_params.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_codec_params.h 2008-07-17 16:42:54.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_codec_params.h
@@ -0,0 +1,686 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -46068,9 +46924,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_codec_params.h ../
+} t_saa_codec_params;
+
+#endif // _ha_codec_params_h_
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_effect_info.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_effect_info.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_effect_info.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_effect_info.h 2008-07-17 16:42:55.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_effect_info.h
@@ -0,0 +1,122 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -46194,9 +47049,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_effect_info.h ../n
+} t_saa_aep_component_info;
+
+#endif // _ha_effect_info_h_
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_effect_params.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_effect_params.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_effect_params.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_effect_params.h 2008-07-17 16:42:55.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_effect_params.h
@@ -0,0 +1,1342 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -47540,9 +48394,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_effect_params.h ..
+} t_saa_component_dynamic_params;
+
+#endif // _ha_effect_params_h_
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_hcl_fw_interface.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_hcl_fw_interface.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_hcl_fw_interface.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_hcl_fw_interface.h 2008-07-17 16:42:56.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_hcl_fw_interface.h
@@ -0,0 +1,163 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -47707,9 +48560,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/ha_hcl_fw_interface.h
+} t_ha_command_id;
+
+#endif /* _ha_hcl_fw_interface_h_ */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti.c 2008-07-17 16:42:57.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti.c
@@ -0,0 +1,271 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -47982,9 +48834,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti.c ../new/linux-2.
+}
+#endif
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti.h 2008-07-17 16:42:57.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti.h
@@ -0,0 +1,159 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -48145,9 +48996,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti.h ../new/linux-2.
+
+#endif // _HTI_H
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti_protocol.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti_protocol.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti_protocol.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti_protocol.h 2008-07-17 16:42:58.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti_protocol.h
@@ -0,0 +1,134 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -48283,570 +49133,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/hti_protocol.h ../new
+ #define HTI_PROTOCOL_STT
+
+#endif //_STT_PROTOCOL_H
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_base.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_base.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_base.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_base.c 2008-07-17 16:43:00.000000000 +0530
-@@ -0,0 +1,557 @@
-+/*---------------------------------------------------------------------------*/
-+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
-+/* information, STMicroelectronics reserves the right to license this */
-+/* software concurrently under separate license conditions. */
-+/* */
-+/* 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, see <http://www.gnu.org/licenses/>. */
-+/*---------------------------------------------------------------------------*/
-+
-+/*--------------------------------------------------------------------------*
-+ * Includes *
-+ *--------------------------------------------------------------------------*/
-+#include "saa_hwp.h"
-+#include "saap.h"
-+#include "hti.h"
-+#include "hti_protocol.h"
-+
-+
-+/*--------------------------------------------------------------------------*
-+ * Global variables *
-+ *--------------------------------------------------------------------------*/
-+t_saa_system saa_system;
-+t_bool saa_hcl_hti_trace = FALSE;
-+
-+
-+/*--------------------------------------------------------------------------*
-+ * Private data *
-+ *--------------------------------------------------------------------------*/
-+
-+/*--------------------------------------------------------------------------*
-+ * Public functions *
-+ *--------------------------------------------------------------------------*/
-+
-+/****************************************************************************/
-+/* NAME: SAA_InitSharedMailboxes */
-+/*--------------------------------------------------------------------------*/
-+/* DESCRIPTION: Set the address of the shared uplink & downlink mailboxes. */
-+/* Called once when the first interrupt is received. */
-+/* */
-+/* PARAMETERS: */
-+/* IN: - */
-+/* OUT: - */
-+/* RETURN: */
-+/* None */
-+/*--------------------------------------------------------------------------*/
-+/* REENTRANCY: NA */
-+/****************************************************************************/
-+PUBLIC void SAA_InitSharedMailboxes(void) {
-+
-+ volatile t_uint16* ptr;
-+ t_uint32 offset;
-+ t_uint32 host_address = (t_uint32)&saa_system.pSAA_HW->host_reg;
-+ t_uint32 ram_address = (t_uint32)saa_system.pSAA_HW->ram;
-+
-+ // build the uplink shared mailbox address
-+ ptr = (t_uint16*)(host_address + 2*HOST_HA_MBX_UP_ADD_1);
-+ offset = (t_uint32)(*ptr) & 0xFF;
-+ ptr = (t_uint16*)(host_address + 2*HOST_HA_MBX_UP_ADD_2);
-+ offset <<= 8;
-+ offset |= (t_uint32)(*ptr) & 0xFF;
-+ ptr = (t_uint16*)(host_address + 2*HOST_HA_MBX_UP_ADD_3);
-+ offset <<= 8;
-+ offset |= (t_uint32)(*ptr) & 0xFF;
-+ offset <<= 1;
-+ saa_system.mailbox_ul.pMsg = (t_saa_message*)(ram_address + offset);
-+
-+ // build the downlink shared mailbox address
-+ ptr = (t_uint16*)(host_address + 2*HOST_HA_MBX_DOWN_ADD_1);
-+ offset = (t_uint32)(*ptr) & 0xFF;
-+ ptr = (t_uint16*)(host_address + 2*HOST_HA_MBX_DOWN_ADD_2);
-+ offset <<= 8;
-+ offset |= (t_uint32)(*ptr) & 0xFF;
-+ ptr = (t_uint16*)(host_address + 2*HOST_HA_MBX_DOWN_ADD_3);
-+ offset <<= 8;
-+ offset |= (t_uint32)(*ptr) & 0xFF;
-+ offset <<= 1;
-+ saa_system.mailbox_dl.pMsg = (t_saa_message*)(ram_address + offset);
-+}
-+
-+/****************************************************************************/
-+/* NAME: SAA_SendCommand */
-+/*--------------------------------------------------------------------------*/
-+/* DESCRIPTION: Send a command to the SAA/MMDSP. */
-+/* */
-+/* PARAMETERS: */
-+/* IN: pCmd: pointer to the command description */
-+/* OUT: - */
-+/* RETURN: */
-+/* command number>0 if successful, 0 otherwise */
-+/*--------------------------------------------------------------------------*/
-+/* REENTRANCY: NA */
-+/****************************************************************************/
-+PUBLIC t_uint16 SAA_SendCommand(t_saa_cmd_desc* pCmd) {
-+
-+ t_saa_message new_message;
-+ #ifdef SAA_USE_DOUBLE_IT
-+ t_saa_message message;
-+ int nb_msg_sent = 0;
-+ #endif
-+ int i;
-+
-+ new_message.command_number = (t_uint16)(saa_system.command_number + 1);
-+ new_message.command_id = pCmd->command_id;
-+ new_message.server_id = pCmd->server_id;
-+
-+ for (i=0; i<SAA_MSG_NB_PARAM; i++) {
-+ new_message.params[i] = pCmd->params[i];
-+ }
-+
-+ if (++saa_system.command_number == 0xFFFF)
-+ saa_system.command_number = 0; // avoid 16-bit roll-over of next command number (answer/alert mismatch)
-+
-+ #ifndef SAA_USE_DOUBLE_IT
-+ if (SAA_PutMessage(&new_message))
-+ {
-+ // send the write finished interrupt to SAA/MMDSP
-+ saa_system.pSAA_HW->host_reg.cmd[1] ^= 1;
-+
-+ return new_message.command_number;
-+ }
-+ #else
-+ SAA_DisableIRQSrc(ESAA_SRC_IRQ_1);
-+ // check if ARM is waiting for a read finished interrupt
-+ if(saa_system.rf_it_received){
-+ // copy all messages from ARM downlink local FIFO to downlink shared mailbox
-+ while ((nb_msg_sent < SAA_MBX_DOWN_SIZE)&&(SAA_PopFromLocalFifoDL(&message))){
-+ (void)SAA_PutMessage(&message);
-+ nb_msg_sent ++;
-+ }
-+
-+ if (SAA_PutMessage(&new_message)){
-+ // a read finished interrupt will be received
-+ saa_system.rf_it_received = FALSE;
-+
-+ // send the write finished interrupt to SAA/MMDSP
-+ saa_system.pSAA_HW->host_reg.cmd[1] ^= 1;
-+ SAA_EnableIRQSrc(ESAA_SRC_IRQ_1);
-+ return new_message.command_number;
-+ }
-+
-+ if(nb_msg_sent != 0){
-+ // a read finished interrupt will be received
-+ saa_system.rf_it_received = FALSE;
-+
-+ // send the write finished interrupt to SAA/MMDSP
-+ saa_system.pSAA_HW->host_reg.cmd[1] ^= 1;
-+ }
-+ }
-+
-+ // write new message to ARM downlink local FIFO
-+ if (SAA_PushToLocalFifoDL(&new_message)){
-+ SAA_EnableIRQSrc(ESAA_SRC_IRQ_1);
-+ return new_message.command_number;
-+ }
-+ SAA_EnableIRQSrc(ESAA_SRC_IRQ_1);
-+ #endif
-+
-+ return 0;
-+}
-+
-+/****************************************************************************/
-+/* NAME: SAA_PutMessage */
-+/*--------------------------------------------------------------------------*/
-+/* DESCRIPTION: Put a message in the shared downlink mailbox. */
-+/* */
-+/* PARAMETERS: */
-+/* IN: pMsg: pointer to the message description */
-+/* OUT: - */
-+/* RETURN: */
-+/* TRUE if successful, FALSE otherwise */
-+/*--------------------------------------------------------------------------*/
-+/* REENTRANCY: NA */
-+/****************************************************************************/
-+PUBLIC t_bool SAA_PutMessage(t_saa_message* pMsg) {
-+
-+ t_saa_message* pNewMsg;
-+ int i;
-+ #ifndef SAA_USE_DOUBLE_IT
-+ volatile t_uint32 *host_address = (t_uint32 *)&saa_system.pSAA_HW->host_reg;
-+ #endif
-+
-+ if (saa_system.mailbox_dl.pMsg == NULL)
-+ return FALSE;
-+
-+ pNewMsg = saa_system.mailbox_dl.pMsg + saa_system.mailbox_dl.index;
-+
-+ if ((pNewMsg->semaphore & 0x00FF) == 0) {
-+ pNewMsg->command_number = pMsg->command_number;
-+ pNewMsg->command_id = pMsg->command_id;
-+ pNewMsg->server_id = pMsg->server_id;
-+
-+ for (i=0; i<SAA_MSG_NB_PARAM; i++) {
-+ pNewMsg->params[i] = pMsg->params[i];
-+ }
-+
-+ if (++saa_system.mailbox_dl.index == SAA_MBX_DOWN_SIZE)
-+ saa_system.mailbox_dl.index = 0;
-+
-+ #ifndef SAA_USE_DOUBLE_IT
-+ while (host_address[HOST_HA_CMD1_SEM] != 0) {}
-+ host_address[HOST_HA_CMD1_SEM] = 1;
-+ #endif
-+
-+ pNewMsg->semaphore |= 0x0001;
-+
-+ if (saa_hcl_hti_trace)
-+ SAA_HtiTraceMsg(ESAA_DOWN_MSG, pMsg);
-+
-+ return TRUE;
-+ }
-+
-+ return FALSE;
-+}
-+
-+/****************************************************************************/
-+/* NAME: SAA_GetMessage */
-+/*--------------------------------------------------------------------------*/
-+/* DESCRIPTION: Get a message from the shared uplink mailbox. */
-+/* */
-+/* PARAMETERS: */
-+/* IN: - */
-+/* OUT: pMsg: pointer to the message description */
-+/* RETURN: */
-+/* TRUE if successful, FALSE otherwise */
-+/*--------------------------------------------------------------------------*/
-+/* REENTRANCY: NA */
-+/****************************************************************************/
-+PUBLIC t_bool SAA_GetMessage(t_saa_message* pMsg) {
-+
-+ t_saa_message* pNextMsg;
-+ int i;
-+
-+ if (saa_system.mailbox_ul.pMsg == NULL)
-+ return FALSE;
-+
-+ pNextMsg = saa_system.mailbox_ul.pMsg + saa_system.mailbox_ul.index;
-+
-+ if ((pNextMsg->semaphore & 0x00FF) == 0)
-+ return FALSE;
-+
-+ if (++saa_system.mailbox_ul.index == SAA_MBX_UP_SIZE)
-+ saa_system.mailbox_ul.index = 0;
-+
-+ pMsg->command_number = pNextMsg->command_number;
-+ pMsg->command_id = pNextMsg->command_id;
-+ pMsg->semaphore = pNextMsg->semaphore;
-+ pMsg->server_id = pNextMsg->server_id;
-+
-+ for (i=0; i<SAA_MSG_NB_PARAM; i++) {
-+ pMsg->params[i] = pNextMsg->params[i];
-+ }
-+
-+ pNextMsg->semaphore &= 0xFF00;
-+
-+ return TRUE;
-+}
-+
-+/****************************************************************************/
-+/* NAME: SAA_PushToLocalFifoUL */
-+/*--------------------------------------------------------------------------*/
-+/* DESCRIPTION: Push a message to the ARM uplink local FIFO. */
-+/* */
-+/* PARAMETERS: */
-+/* IN: pMsg: pointer to the message description */
-+/* OUT: - */
-+/* RETURN: */
-+/* TRUE if successful, FALSE otherwise */
-+/*--------------------------------------------------------------------------*/
-+/* REENTRANCY: NA */
-+/****************************************************************************/
-+PUBLIC t_bool SAA_PushToLocalFifoUL(t_saa_message* pMsg) {
-+
-+ t_saa_fifo_ul* pFifoUL = &saa_system.fifo_ul;
-+
-+ // check if FIFO is not full
-+ if (pFifoUL->unread_msg_counter < SAA_FIFO_UL_SIZE) {
-+ pFifoUL->message[pFifoUL->wr_position] = *pMsg;
-+
-+ pFifoUL->unread_msg_counter++;
-+
-+ if (++pFifoUL->wr_position == SAA_FIFO_UL_SIZE)
-+ pFifoUL->wr_position = 0;
-+
-+ return TRUE;
-+ }
-+
-+ return FALSE;
-+}
-+
-+/****************************************************************************/
-+/* NAME: SAA_PopFromLocalFifoUL */
-+/*--------------------------------------------------------------------------*/
-+/* DESCRIPTION: Pop a message from the ARM uplink local FIFO. */
-+/* */
-+/* PARAMETERS: */
-+/* IN: - */
-+/* OUT: pMsg: pointer to the message description */
-+/* RETURN: */
-+/* TRUE if successful, FALSE otherwise */
-+/*--------------------------------------------------------------------------*/
-+/* REENTRANCY: NA */
-+/****************************************************************************/
-+PUBLIC t_bool SAA_PopFromLocalFifoUL(t_saa_message* pMsg) {
-+
-+ t_saa_fifo_ul* pFifoUL = &saa_system.fifo_ul;
-+
-+ // check if FIFO is not empty
-+ if (pFifoUL->unread_msg_counter) {
-+ *pMsg = pFifoUL->message[pFifoUL->rd_position];
-+
-+ pFifoUL->unread_msg_counter--;
-+
-+ if (++pFifoUL->rd_position == SAA_FIFO_UL_SIZE)
-+ pFifoUL->rd_position = 0;
-+
-+ if (saa_hcl_hti_trace)
-+ SAA_HtiTraceMsg(ESAA_UP_MSG, pMsg);
-+
-+ return TRUE;
-+ }
-+
-+ return FALSE;
-+}
-+
-+#ifdef SAA_USE_DOUBLE_IT
-+/****************************************************************************/
-+/* NAME: SAA_PushToLocalFifoDL */
-+/*--------------------------------------------------------------------------*/
-+/* DESCRIPTION: Push a message to the ARM local downlink FIFO. */
-+/* */
-+/* PARAMETERS: */
-+/* IN: pMsg: pointer to the message description */
-+/* OUT: - */
-+/* RETURN: */
-+/* TRUE if successful, FALSE otherwise */
-+/*--------------------------------------------------------------------------*/
-+/* REENTRANCY: NA */
-+/****************************************************************************/
-+PUBLIC t_bool SAA_PushToLocalFifoDL(t_saa_message* pMsg) {
-+
-+ t_saa_fifo_dl* pFifoDL = &saa_system.fifo_dl;
-+
-+ // check if FIFO is not full
-+ if (pFifoDL->unsent_msg_counter < SAA_FIFO_DL_SIZE) {
-+ pFifoDL->message[pFifoDL->wr_position] = *pMsg;
-+
-+ pFifoDL->unsent_msg_counter++;
-+
-+ if (++pFifoDL->wr_position == SAA_FIFO_DL_SIZE)
-+ pFifoDL->wr_position = 0;
-+
-+ return TRUE;
-+ }
-+
-+ return FALSE;
-+}
-+
-+/****************************************************************************/
-+/* NAME: SAA_PopFromLocalFifoDL */
-+/*--------------------------------------------------------------------------*/
-+/* DESCRIPTION: Pop a message from the ARM local downlink FIFO. */
-+/* */
-+/* PARAMETERS: */
-+/* IN: - */
-+/* OUT: pMsg: pointer to the message description */
-+/* RETURN: */
-+/* TRUE if successful, FALSE otherwise */
-+/*--------------------------------------------------------------------------*/
-+/* REENTRANCY: NA */
-+/****************************************************************************/
-+PUBLIC t_bool SAA_PopFromLocalFifoDL(t_saa_message* pMsg) {
-+
-+ t_saa_fifo_dl* pFifoDL = &saa_system.fifo_dl;
-+
-+ // check if FIFO is not empty
-+ if (pFifoDL->unsent_msg_counter) {
-+ *pMsg = pFifoDL->message[pFifoDL->rd_position];
-+
-+ pFifoDL->unsent_msg_counter--;
-+
-+ if (++pFifoDL->rd_position == SAA_FIFO_DL_SIZE)
-+ pFifoDL->rd_position = 0;
-+
-+ return TRUE;
-+ }
-+
-+ return FALSE;
-+}
-+#endif
-+
-+/****************************************************************************/
-+/* NAME: SAA_NewComponent */
-+/*--------------------------------------------------------------------------*/
-+/* DESCRIPTION: Find a new entry in the component table. */
-+/* */
-+/* PARAMETERS: */
-+/* IN: - */
-+/* OUT: - */
-+/* RETURN: */
-+/* pointer to new entry if successful, NULL otherwise */
-+/*--------------------------------------------------------------------------*/
-+/* REENTRANCY: NA */
-+/****************************************************************************/
-+PUBLIC t_saa_component_entry* SAA_NewComponent(void) {
-+
-+ t_saa_component_entry* pComponent = saa_system.component;
-+ int i;
-+
-+ for (i=0; i<SAA_NB_MAX_COMPONENT; i++, pComponent++)
-+ {
-+ if (pComponent->block_id == 0)
-+ return pComponent;
-+ }
-+
-+ return NULL;
-+}
-+
-+/****************************************************************************/
-+/* NAME: SAA_FindComponent */
-+/*--------------------------------------------------------------------------*/
-+/* DESCRIPTION: Find a given component. */
-+/* */
-+/* PARAMETERS: */
-+/* IN: block_id: identifier of the block */
-+/* component_id: identifier of the component */
-+/* OUT: - */
-+/* RETURN: */
-+/* pointer to entry if successful, NULL otherwise */
-+/*--------------------------------------------------------------------------*/
-+/* REENTRANCY: NA */
-+/****************************************************************************/
-+PUBLIC t_saa_component_entry* SAA_FindComponent(t_saa_block_id block_id, t_saa_component_id component_id) {
-+
-+ t_saa_component_entry* pComponent = saa_system.component;
-+ int i;
-+
-+ for (i=0; i<SAA_NB_MAX_COMPONENT; i++, pComponent++)
-+ {
-+ if (pComponent->block_id == block_id && pComponent->component_id == component_id)
-+ {
-+ return pComponent;
-+ }
-+ }
-+
-+ return NULL;
-+}
-+
-+/****************************************************************************/
-+/* NAME: SAA_FreeComponent */
-+/*--------------------------------------------------------------------------*/
-+/* DESCRIPTION: Free an existing component. */
-+/* */
-+/* PARAMETERS: */
-+/* IN: block_id: identifier of the block */
-+/* component_id: identifier of the component */
-+/* OUT: - */
-+/* RETURN: */
-+/* pointer to old entry if successful, NULL otherwise */
-+/*--------------------------------------------------------------------------*/
-+/* REENTRANCY: NA */
-+/****************************************************************************/
-+PUBLIC t_saa_component_entry* SAA_FreeComponent(t_saa_block_id block_id, t_saa_component_id component_id) {
-+
-+ t_saa_component_entry* pComponent = saa_system.component;
-+ int i;
-+
-+ for (i=0; i<SAA_NB_MAX_COMPONENT; i++, pComponent++)
-+ {
-+ if (pComponent->block_id == block_id && pComponent->component_id == component_id)
-+ {
-+ pComponent->block_id = 0;
-+ return pComponent;
-+ }
-+ }
-+
-+ return NULL;
-+}
-+
-+/****************************************************************************/
-+/* NAME: SAA_FreeAllComponents */
-+/*--------------------------------------------------------------------------*/
-+/* DESCRIPTION: Free all components of an existing block. */
-+/* */
-+/* PARAMETERS: */
-+/* IN: block_id: identifier of the block */
-+/* OUT: - */
-+/* RETURN: */
-+/* Number of components freed */
-+/*--------------------------------------------------------------------------*/
-+/* REENTRANCY: NA */
-+/****************************************************************************/
-+PUBLIC t_uint16 SAA_FreeAllComponents(t_saa_block_id block_id) {
-+
-+ t_saa_component_entry* pComponent = saa_system.component;
-+ t_uint16 nb_components = 0;
-+ int i;
-+
-+ for (i=0; i<SAA_NB_MAX_COMPONENT; i++, pComponent++)
-+ {
-+ if (pComponent->block_id == block_id)
-+ {
-+ pComponent->block_id = 0;
-+ nb_components++;
-+ }
-+ }
-+
-+ return nb_components;
-+}
-+
-+/****************************************************************************/
-+/* NAME: SAA_HtiTraceMsg */
-+/*--------------------------------------------------------------------------*/
-+/* DESCRIPTION: Sends a message to the HTI debug port. */
-+/* */
-+/* PARAMETERS: */
-+/* IN: msg_dir: direction of message (uplink/downlink) */
-+/* pMsg: pointer to the message to be sent */
-+/* OUT: - */
-+/* RETURN: void */
-+/*--------------------------------------------------------------------------*/
-+/* REENTRANCY: NA */
-+/****************************************************************************/
-+
-+
-+PUBLIC void SAA_HtiTraceMsg(t_saa_msg_dir msg_dir, t_saa_message* pMsg)
-+{
-+ t_uint16* pDynParams;
-+
-+ HTI_CMD_SAA_HCL(SAA_HCL_HTI_CHANNEL);
-+
-+ if ((pMsg->command_id==HA_CMD_CONFIG_COMPONENT) && (msg_dir==ESAA_DOWN_MSG)){
-+ HtiSend_8(SAA_HCL_HTI_CHANNEL, msg_dir + 0XF0); // specify not standart message
-+ HtiSendn_32(SAA_HCL_HTI_CHANNEL,(const HTI_U32 *)pMsg, 3); //semaphore command_number server_id command_id params[0] params[1]
-+ pDynParams = (t_uint16*)(((t_uint32)pMsg->params[3])<<16 | pMsg->params[2]); // param address
-+ HtiSend_16(SAA_HCL_HTI_CHANNEL, pMsg->params[4]); // nb param
-+ HtiSendn_16(SAA_HCL_HTI_CHANNEL, pDynParams, pMsg->params[4]);
-+ }
-+ else{
-+ HtiSend_8(SAA_HCL_HTI_CHANNEL, msg_dir);
-+ HtiSendn_32(SAA_HCL_HTI_CHANNEL, (const HTI_U32 *)pMsg, sizeof(t_saa_message)/ sizeof(int));
-+
-+ }
-+ HTI_CMD_END_OF_CHANNEL(SAA_HCL_HTI_CHANNEL);
-+
-+
-+}
-+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa.c 2008-07-17 16:42:58.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa.c
@@ -0,0 +1,2538 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -51386,9 +51674,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa.c ../new/linux-2.
+
+ return error;
+}
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa.h 2008-07-17 16:42:59.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa.h
@@ -0,0 +1,306 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -51696,9 +51983,568 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa.h ../new/linux-2.
+#endif // __cplusplus
+
+#endif // __INC_SAA_H
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_hwp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_hwp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_hwp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_hwp.h 2008-07-17 16:43:00.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_base.c
+@@ -0,0 +1,557 @@
++/*---------------------------------------------------------------------------*/
++/* © copyright STMicroelectronics, 2007. All rights reserved. For */
++/* information, STMicroelectronics reserves the right to license this */
++/* software concurrently under separate license conditions. */
++/* */
++/* 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, see <http://www.gnu.org/licenses/>. */
++/*---------------------------------------------------------------------------*/
++
++/*--------------------------------------------------------------------------*
++ * Includes *
++ *--------------------------------------------------------------------------*/
++#include "saa_hwp.h"
++#include "saap.h"
++#include "hti.h"
++#include "hti_protocol.h"
++
++
++/*--------------------------------------------------------------------------*
++ * Global variables *
++ *--------------------------------------------------------------------------*/
++t_saa_system saa_system;
++t_bool saa_hcl_hti_trace = FALSE;
++
++
++/*--------------------------------------------------------------------------*
++ * Private data *
++ *--------------------------------------------------------------------------*/
++
++/*--------------------------------------------------------------------------*
++ * Public functions *
++ *--------------------------------------------------------------------------*/
++
++/****************************************************************************/
++/* NAME: SAA_InitSharedMailboxes */
++/*--------------------------------------------------------------------------*/
++/* DESCRIPTION: Set the address of the shared uplink & downlink mailboxes. */
++/* Called once when the first interrupt is received. */
++/* */
++/* PARAMETERS: */
++/* IN: - */
++/* OUT: - */
++/* RETURN: */
++/* None */
++/*--------------------------------------------------------------------------*/
++/* REENTRANCY: NA */
++/****************************************************************************/
++PUBLIC void SAA_InitSharedMailboxes(void) {
++
++ volatile t_uint16* ptr;
++ t_uint32 offset;
++ t_uint32 host_address = (t_uint32)&saa_system.pSAA_HW->host_reg;
++ t_uint32 ram_address = (t_uint32)saa_system.pSAA_HW->ram;
++
++ // build the uplink shared mailbox address
++ ptr = (t_uint16*)(host_address + 2*HOST_HA_MBX_UP_ADD_1);
++ offset = (t_uint32)(*ptr) & 0xFF;
++ ptr = (t_uint16*)(host_address + 2*HOST_HA_MBX_UP_ADD_2);
++ offset <<= 8;
++ offset |= (t_uint32)(*ptr) & 0xFF;
++ ptr = (t_uint16*)(host_address + 2*HOST_HA_MBX_UP_ADD_3);
++ offset <<= 8;
++ offset |= (t_uint32)(*ptr) & 0xFF;
++ offset <<= 1;
++ saa_system.mailbox_ul.pMsg = (t_saa_message*)(ram_address + offset);
++
++ // build the downlink shared mailbox address
++ ptr = (t_uint16*)(host_address + 2*HOST_HA_MBX_DOWN_ADD_1);
++ offset = (t_uint32)(*ptr) & 0xFF;
++ ptr = (t_uint16*)(host_address + 2*HOST_HA_MBX_DOWN_ADD_2);
++ offset <<= 8;
++ offset |= (t_uint32)(*ptr) & 0xFF;
++ ptr = (t_uint16*)(host_address + 2*HOST_HA_MBX_DOWN_ADD_3);
++ offset <<= 8;
++ offset |= (t_uint32)(*ptr) & 0xFF;
++ offset <<= 1;
++ saa_system.mailbox_dl.pMsg = (t_saa_message*)(ram_address + offset);
++}
++
++/****************************************************************************/
++/* NAME: SAA_SendCommand */
++/*--------------------------------------------------------------------------*/
++/* DESCRIPTION: Send a command to the SAA/MMDSP. */
++/* */
++/* PARAMETERS: */
++/* IN: pCmd: pointer to the command description */
++/* OUT: - */
++/* RETURN: */
++/* command number>0 if successful, 0 otherwise */
++/*--------------------------------------------------------------------------*/
++/* REENTRANCY: NA */
++/****************************************************************************/
++PUBLIC t_uint16 SAA_SendCommand(t_saa_cmd_desc* pCmd) {
++
++ t_saa_message new_message;
++ #ifdef SAA_USE_DOUBLE_IT
++ t_saa_message message;
++ int nb_msg_sent = 0;
++ #endif
++ int i;
++
++ new_message.command_number = (t_uint16)(saa_system.command_number + 1);
++ new_message.command_id = pCmd->command_id;
++ new_message.server_id = pCmd->server_id;
++
++ for (i=0; i<SAA_MSG_NB_PARAM; i++) {
++ new_message.params[i] = pCmd->params[i];
++ }
++
++ if (++saa_system.command_number == 0xFFFF)
++ saa_system.command_number = 0; // avoid 16-bit roll-over of next command number (answer/alert mismatch)
++
++ #ifndef SAA_USE_DOUBLE_IT
++ if (SAA_PutMessage(&new_message))
++ {
++ // send the write finished interrupt to SAA/MMDSP
++ saa_system.pSAA_HW->host_reg.cmd[1] ^= 1;
++
++ return new_message.command_number;
++ }
++ #else
++ SAA_DisableIRQSrc(ESAA_SRC_IRQ_1);
++ // check if ARM is waiting for a read finished interrupt
++ if(saa_system.rf_it_received){
++ // copy all messages from ARM downlink local FIFO to downlink shared mailbox
++ while ((nb_msg_sent < SAA_MBX_DOWN_SIZE)&&(SAA_PopFromLocalFifoDL(&message))){
++ (void)SAA_PutMessage(&message);
++ nb_msg_sent ++;
++ }
++
++ if (SAA_PutMessage(&new_message)){
++ // a read finished interrupt will be received
++ saa_system.rf_it_received = FALSE;
++
++ // send the write finished interrupt to SAA/MMDSP
++ saa_system.pSAA_HW->host_reg.cmd[1] ^= 1;
++ SAA_EnableIRQSrc(ESAA_SRC_IRQ_1);
++ return new_message.command_number;
++ }
++
++ if(nb_msg_sent != 0){
++ // a read finished interrupt will be received
++ saa_system.rf_it_received = FALSE;
++
++ // send the write finished interrupt to SAA/MMDSP
++ saa_system.pSAA_HW->host_reg.cmd[1] ^= 1;
++ }
++ }
++
++ // write new message to ARM downlink local FIFO
++ if (SAA_PushToLocalFifoDL(&new_message)){
++ SAA_EnableIRQSrc(ESAA_SRC_IRQ_1);
++ return new_message.command_number;
++ }
++ SAA_EnableIRQSrc(ESAA_SRC_IRQ_1);
++ #endif
++
++ return 0;
++}
++
++/****************************************************************************/
++/* NAME: SAA_PutMessage */
++/*--------------------------------------------------------------------------*/
++/* DESCRIPTION: Put a message in the shared downlink mailbox. */
++/* */
++/* PARAMETERS: */
++/* IN: pMsg: pointer to the message description */
++/* OUT: - */
++/* RETURN: */
++/* TRUE if successful, FALSE otherwise */
++/*--------------------------------------------------------------------------*/
++/* REENTRANCY: NA */
++/****************************************************************************/
++PUBLIC t_bool SAA_PutMessage(t_saa_message* pMsg) {
++
++ t_saa_message* pNewMsg;
++ int i;
++ #ifndef SAA_USE_DOUBLE_IT
++ volatile t_uint32 *host_address = (t_uint32 *)&saa_system.pSAA_HW->host_reg;
++ #endif
++
++ if (saa_system.mailbox_dl.pMsg == NULL)
++ return FALSE;
++
++ pNewMsg = saa_system.mailbox_dl.pMsg + saa_system.mailbox_dl.index;
++
++ if ((pNewMsg->semaphore & 0x00FF) == 0) {
++ pNewMsg->command_number = pMsg->command_number;
++ pNewMsg->command_id = pMsg->command_id;
++ pNewMsg->server_id = pMsg->server_id;
++
++ for (i=0; i<SAA_MSG_NB_PARAM; i++) {
++ pNewMsg->params[i] = pMsg->params[i];
++ }
++
++ if (++saa_system.mailbox_dl.index == SAA_MBX_DOWN_SIZE)
++ saa_system.mailbox_dl.index = 0;
++
++ #ifndef SAA_USE_DOUBLE_IT
++ while (host_address[HOST_HA_CMD1_SEM] != 0) {}
++ host_address[HOST_HA_CMD1_SEM] = 1;
++ #endif
++
++ pNewMsg->semaphore |= 0x0001;
++
++ if (saa_hcl_hti_trace)
++ SAA_HtiTraceMsg(ESAA_DOWN_MSG, pMsg);
++
++ return TRUE;
++ }
++
++ return FALSE;
++}
++
++/****************************************************************************/
++/* NAME: SAA_GetMessage */
++/*--------------------------------------------------------------------------*/
++/* DESCRIPTION: Get a message from the shared uplink mailbox. */
++/* */
++/* PARAMETERS: */
++/* IN: - */
++/* OUT: pMsg: pointer to the message description */
++/* RETURN: */
++/* TRUE if successful, FALSE otherwise */
++/*--------------------------------------------------------------------------*/
++/* REENTRANCY: NA */
++/****************************************************************************/
++PUBLIC t_bool SAA_GetMessage(t_saa_message* pMsg) {
++
++ t_saa_message* pNextMsg;
++ int i;
++
++ if (saa_system.mailbox_ul.pMsg == NULL)
++ return FALSE;
++
++ pNextMsg = saa_system.mailbox_ul.pMsg + saa_system.mailbox_ul.index;
++
++ if ((pNextMsg->semaphore & 0x00FF) == 0)
++ return FALSE;
++
++ if (++saa_system.mailbox_ul.index == SAA_MBX_UP_SIZE)
++ saa_system.mailbox_ul.index = 0;
++
++ pMsg->command_number = pNextMsg->command_number;
++ pMsg->command_id = pNextMsg->command_id;
++ pMsg->semaphore = pNextMsg->semaphore;
++ pMsg->server_id = pNextMsg->server_id;
++
++ for (i=0; i<SAA_MSG_NB_PARAM; i++) {
++ pMsg->params[i] = pNextMsg->params[i];
++ }
++
++ pNextMsg->semaphore &= 0xFF00;
++
++ return TRUE;
++}
++
++/****************************************************************************/
++/* NAME: SAA_PushToLocalFifoUL */
++/*--------------------------------------------------------------------------*/
++/* DESCRIPTION: Push a message to the ARM uplink local FIFO. */
++/* */
++/* PARAMETERS: */
++/* IN: pMsg: pointer to the message description */
++/* OUT: - */
++/* RETURN: */
++/* TRUE if successful, FALSE otherwise */
++/*--------------------------------------------------------------------------*/
++/* REENTRANCY: NA */
++/****************************************************************************/
++PUBLIC t_bool SAA_PushToLocalFifoUL(t_saa_message* pMsg) {
++
++ t_saa_fifo_ul* pFifoUL = &saa_system.fifo_ul;
++
++ // check if FIFO is not full
++ if (pFifoUL->unread_msg_counter < SAA_FIFO_UL_SIZE) {
++ pFifoUL->message[pFifoUL->wr_position] = *pMsg;
++
++ pFifoUL->unread_msg_counter++;
++
++ if (++pFifoUL->wr_position == SAA_FIFO_UL_SIZE)
++ pFifoUL->wr_position = 0;
++
++ return TRUE;
++ }
++
++ return FALSE;
++}
++
++/****************************************************************************/
++/* NAME: SAA_PopFromLocalFifoUL */
++/*--------------------------------------------------------------------------*/
++/* DESCRIPTION: Pop a message from the ARM uplink local FIFO. */
++/* */
++/* PARAMETERS: */
++/* IN: - */
++/* OUT: pMsg: pointer to the message description */
++/* RETURN: */
++/* TRUE if successful, FALSE otherwise */
++/*--------------------------------------------------------------------------*/
++/* REENTRANCY: NA */
++/****************************************************************************/
++PUBLIC t_bool SAA_PopFromLocalFifoUL(t_saa_message* pMsg) {
++
++ t_saa_fifo_ul* pFifoUL = &saa_system.fifo_ul;
++
++ // check if FIFO is not empty
++ if (pFifoUL->unread_msg_counter) {
++ *pMsg = pFifoUL->message[pFifoUL->rd_position];
++
++ pFifoUL->unread_msg_counter--;
++
++ if (++pFifoUL->rd_position == SAA_FIFO_UL_SIZE)
++ pFifoUL->rd_position = 0;
++
++ if (saa_hcl_hti_trace)
++ SAA_HtiTraceMsg(ESAA_UP_MSG, pMsg);
++
++ return TRUE;
++ }
++
++ return FALSE;
++}
++
++#ifdef SAA_USE_DOUBLE_IT
++/****************************************************************************/
++/* NAME: SAA_PushToLocalFifoDL */
++/*--------------------------------------------------------------------------*/
++/* DESCRIPTION: Push a message to the ARM local downlink FIFO. */
++/* */
++/* PARAMETERS: */
++/* IN: pMsg: pointer to the message description */
++/* OUT: - */
++/* RETURN: */
++/* TRUE if successful, FALSE otherwise */
++/*--------------------------------------------------------------------------*/
++/* REENTRANCY: NA */
++/****************************************************************************/
++PUBLIC t_bool SAA_PushToLocalFifoDL(t_saa_message* pMsg) {
++
++ t_saa_fifo_dl* pFifoDL = &saa_system.fifo_dl;
++
++ // check if FIFO is not full
++ if (pFifoDL->unsent_msg_counter < SAA_FIFO_DL_SIZE) {
++ pFifoDL->message[pFifoDL->wr_position] = *pMsg;
++
++ pFifoDL->unsent_msg_counter++;
++
++ if (++pFifoDL->wr_position == SAA_FIFO_DL_SIZE)
++ pFifoDL->wr_position = 0;
++
++ return TRUE;
++ }
++
++ return FALSE;
++}
++
++/****************************************************************************/
++/* NAME: SAA_PopFromLocalFifoDL */
++/*--------------------------------------------------------------------------*/
++/* DESCRIPTION: Pop a message from the ARM local downlink FIFO. */
++/* */
++/* PARAMETERS: */
++/* IN: - */
++/* OUT: pMsg: pointer to the message description */
++/* RETURN: */
++/* TRUE if successful, FALSE otherwise */
++/*--------------------------------------------------------------------------*/
++/* REENTRANCY: NA */
++/****************************************************************************/
++PUBLIC t_bool SAA_PopFromLocalFifoDL(t_saa_message* pMsg) {
++
++ t_saa_fifo_dl* pFifoDL = &saa_system.fifo_dl;
++
++ // check if FIFO is not empty
++ if (pFifoDL->unsent_msg_counter) {
++ *pMsg = pFifoDL->message[pFifoDL->rd_position];
++
++ pFifoDL->unsent_msg_counter--;
++
++ if (++pFifoDL->rd_position == SAA_FIFO_DL_SIZE)
++ pFifoDL->rd_position = 0;
++
++ return TRUE;
++ }
++
++ return FALSE;
++}
++#endif
++
++/****************************************************************************/
++/* NAME: SAA_NewComponent */
++/*--------------------------------------------------------------------------*/
++/* DESCRIPTION: Find a new entry in the component table. */
++/* */
++/* PARAMETERS: */
++/* IN: - */
++/* OUT: - */
++/* RETURN: */
++/* pointer to new entry if successful, NULL otherwise */
++/*--------------------------------------------------------------------------*/
++/* REENTRANCY: NA */
++/****************************************************************************/
++PUBLIC t_saa_component_entry* SAA_NewComponent(void) {
++
++ t_saa_component_entry* pComponent = saa_system.component;
++ int i;
++
++ for (i=0; i<SAA_NB_MAX_COMPONENT; i++, pComponent++)
++ {
++ if (pComponent->block_id == 0)
++ return pComponent;
++ }
++
++ return NULL;
++}
++
++/****************************************************************************/
++/* NAME: SAA_FindComponent */
++/*--------------------------------------------------------------------------*/
++/* DESCRIPTION: Find a given component. */
++/* */
++/* PARAMETERS: */
++/* IN: block_id: identifier of the block */
++/* component_id: identifier of the component */
++/* OUT: - */
++/* RETURN: */
++/* pointer to entry if successful, NULL otherwise */
++/*--------------------------------------------------------------------------*/
++/* REENTRANCY: NA */
++/****************************************************************************/
++PUBLIC t_saa_component_entry* SAA_FindComponent(t_saa_block_id block_id, t_saa_component_id component_id) {
++
++ t_saa_component_entry* pComponent = saa_system.component;
++ int i;
++
++ for (i=0; i<SAA_NB_MAX_COMPONENT; i++, pComponent++)
++ {
++ if (pComponent->block_id == block_id && pComponent->component_id == component_id)
++ {
++ return pComponent;
++ }
++ }
++
++ return NULL;
++}
++
++/****************************************************************************/
++/* NAME: SAA_FreeComponent */
++/*--------------------------------------------------------------------------*/
++/* DESCRIPTION: Free an existing component. */
++/* */
++/* PARAMETERS: */
++/* IN: block_id: identifier of the block */
++/* component_id: identifier of the component */
++/* OUT: - */
++/* RETURN: */
++/* pointer to old entry if successful, NULL otherwise */
++/*--------------------------------------------------------------------------*/
++/* REENTRANCY: NA */
++/****************************************************************************/
++PUBLIC t_saa_component_entry* SAA_FreeComponent(t_saa_block_id block_id, t_saa_component_id component_id) {
++
++ t_saa_component_entry* pComponent = saa_system.component;
++ int i;
++
++ for (i=0; i<SAA_NB_MAX_COMPONENT; i++, pComponent++)
++ {
++ if (pComponent->block_id == block_id && pComponent->component_id == component_id)
++ {
++ pComponent->block_id = 0;
++ return pComponent;
++ }
++ }
++
++ return NULL;
++}
++
++/****************************************************************************/
++/* NAME: SAA_FreeAllComponents */
++/*--------------------------------------------------------------------------*/
++/* DESCRIPTION: Free all components of an existing block. */
++/* */
++/* PARAMETERS: */
++/* IN: block_id: identifier of the block */
++/* OUT: - */
++/* RETURN: */
++/* Number of components freed */
++/*--------------------------------------------------------------------------*/
++/* REENTRANCY: NA */
++/****************************************************************************/
++PUBLIC t_uint16 SAA_FreeAllComponents(t_saa_block_id block_id) {
++
++ t_saa_component_entry* pComponent = saa_system.component;
++ t_uint16 nb_components = 0;
++ int i;
++
++ for (i=0; i<SAA_NB_MAX_COMPONENT; i++, pComponent++)
++ {
++ if (pComponent->block_id == block_id)
++ {
++ pComponent->block_id = 0;
++ nb_components++;
++ }
++ }
++
++ return nb_components;
++}
++
++/****************************************************************************/
++/* NAME: SAA_HtiTraceMsg */
++/*--------------------------------------------------------------------------*/
++/* DESCRIPTION: Sends a message to the HTI debug port. */
++/* */
++/* PARAMETERS: */
++/* IN: msg_dir: direction of message (uplink/downlink) */
++/* pMsg: pointer to the message to be sent */
++/* OUT: - */
++/* RETURN: void */
++/*--------------------------------------------------------------------------*/
++/* REENTRANCY: NA */
++/****************************************************************************/
++
++
++PUBLIC void SAA_HtiTraceMsg(t_saa_msg_dir msg_dir, t_saa_message* pMsg)
++{
++ t_uint16* pDynParams;
++
++ HTI_CMD_SAA_HCL(SAA_HCL_HTI_CHANNEL);
++
++ if ((pMsg->command_id==HA_CMD_CONFIG_COMPONENT) && (msg_dir==ESAA_DOWN_MSG)){
++ HtiSend_8(SAA_HCL_HTI_CHANNEL, msg_dir + 0XF0); // specify not standart message
++ HtiSendn_32(SAA_HCL_HTI_CHANNEL,(const HTI_U32 *)pMsg, 3); //semaphore command_number server_id command_id params[0] params[1]
++ pDynParams = (t_uint16*)(((t_uint32)pMsg->params[3])<<16 | pMsg->params[2]); // param address
++ HtiSend_16(SAA_HCL_HTI_CHANNEL, pMsg->params[4]); // nb param
++ HtiSendn_16(SAA_HCL_HTI_CHANNEL, pDynParams, pMsg->params[4]);
++ }
++ else{
++ HtiSend_8(SAA_HCL_HTI_CHANNEL, msg_dir);
++ HtiSendn_32(SAA_HCL_HTI_CHANNEL, (const HTI_U32 *)pMsg, sizeof(t_saa_message)/ sizeof(int));
++
++ }
++ HTI_CMD_END_OF_CHANNEL(SAA_HCL_HTI_CHANNEL);
++
++
++}
++
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_hwp.h
@@ -0,0 +1,275 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -51975,9 +52821,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_hwp.h ../new/linu
+#endif // __cplusplus
+
+#endif // __INC_SAA_HWP_H
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_irq.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_irq.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_irq.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_irq.c 2008-07-17 16:43:01.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_irq.c
@@ -0,0 +1,432 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -52411,9 +53256,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saa_irq.c ../new/linu
+
+ return error;
+}
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saap.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saap.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saap.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saap.h 2008-07-17 16:43:02.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saap.h
@@ -0,0 +1,160 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -52575,9 +53419,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/saa/saap.h ../new/linux-2
+#endif // __cplusplus
+
+#endif // __INC_SAAP_H
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_capabilities.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_capabilities.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_capabilities.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_capabilities.c 2008-07-17 16:45:14.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_capabilities.c
@@ -0,0 +1,63 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -52642,9 +53485,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_capabiliti
+}
+
+// End of file - sva_capabilities.c
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_capabilities.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_capabilities.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_capabilities.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_capabilities.h 2008-07-17 16:45:14.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_capabilities.h
@@ -0,0 +1,46 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -52692,9 +53534,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_capabiliti
+
+#endif /* __INC_HV_CAPABILITIES_H */
+/* End of file - sva_capabilities.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_fifo.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_fifo.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_fifo.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_fifo.h 2008-07-17 16:45:15.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_fifo.h
@@ -0,0 +1,335 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -53031,9 +53872,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_fifo.h ../
+
+#endif /* __INC_SVA_FIFO_H */
+/* End of file - sva_fifo.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_hwp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_hwp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_hwp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_hwp.h 2008-07-17 16:45:16.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_hwp.h
@@ -0,0 +1,646 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -53681,9 +54521,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_hwp.h ../n
+#endif /* __INC_SVA_HWP_H */
+
+// End of file - sva_hwP.h
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_internalneeds.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_internalneeds.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_internalneeds.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_internalneeds.c 2008-07-17 16:45:16.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_internalneeds.c
@@ -0,0 +1,131 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -53816,9 +54655,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_internalne
+
+ return SVA_IN_OK;
+}
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_internalneeds.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_internalneeds.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_internalneeds.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_internalneeds.h 2008-07-17 16:45:17.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_internalneeds.h
@@ -0,0 +1,61 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -53881,201 +54719,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_internalne
+
+#endif /* __INC_SVA_IN_H */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/svap.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/svap.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/svap.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/svap.h 2008-07-17 16:45:19.000000000 +0530
-@@ -0,0 +1,188 @@
-+/*---------------------------------------------------------------------------*/
-+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
-+/* information, STMicroelectronics reserves the right to license this */
-+/* software concurrently under separate license conditions. */
-+/* */
-+/* 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, see <http://www.gnu.org/licenses/>. */
-+/*---------------------------------------------------------------------------*/
-+
-+#ifndef __INC_SVAP_H
-+#define __INC_SVAP_H
-+
-+#include "hcl_defs.h"
-+
-+/******************************************************************************/
-+/* Constants definitions */
-+/******************************************************************************/
-+/*
-+ * Define various conditonnal compilation flags in order to include or not any SW workarounds
-+ */
-+/*#define WORK_AROUND_AHB*/
-+
-+/*
-+ * Define the maximum number of error defined per module
-+ */
-+#define SVA_MODULE_ERROR_RANGE 0x20
-+
-+/*
-+ * Define an Id related to each module of the SVA HCL
-+ * The Id = 1 is reserved for SVA HCL itself
-+ */
-+typedef enum {
-+ SVA_EM_ID = 2, /* Events Mgt */
-+ SVA_MM_ID, /* Memory Mgt */
-+ SVA_BM_ID, /* Buffers Mgt */
-+ SVA_BLM_ID, /* Buffers ListMgt */
-+ SVA_TM_ID, /* Tasks Mgt */
-+ SVA_FM_ID, /* Firmware Mgt */
-+ SVA_TI_ID, /* Time Mgt */
-+ SVA_VP_ID, /* Video Pipeline */
-+ SVA_FF_ID, /* FIFO macros */
-+ SVA_IN_ID, /* Internal Needs Mgt */
-+ SVA_SV_ID, /* Common Service */
-+ SVA_DP_ID, /* Display Service */
-+ SVA_DC_ID, /* Decode Service */
-+ SVA_EC_ID, /* Encode Service */
-+ SVA_GB_ID, /* Grab Service */
-+ SVA_DC_ERC_ID, /* Decode Error Concealment */
-+ SVA_DC_MP4_ID, /* Decode MPEG4 Algo */
-+ SVA_DC_H263_ID, /* Decode H263 Algo */
-+ SVA_DC_H264_ID, /* Decode H263 Algo */
-+ SVA_EC_BRC_ID, /* Encode Bit Rate Control */
-+ SVA_EC_MP4_ID, /* Encode MPEG4 Algo */
-+ SVA_EC_H263_ID, /* Encode H263 Algo */
-+ SVA_EC_H264_ID, /* Encode H264 Algo */
-+ SVA_EC_STAB_ID, /* Encode Stabilization */
-+ SVA_SEC_JPEG_ID, /* Still Encode JPEG ALgo */
-+ SVA_SEC_ID, /* still Encode service */
-+ SVA_TV_ID /* TVO Service */
-+} sva_module_id;
-+
-+/* ************************** CONFIGURATION PART ************************** */
-+typedef struct {
-+ t_uint32 cfg_psa; /* Subtask parameter Start Address register */
-+ t_uint32 cfg_pea; /* Subtask parameter Stop Address register */
-+ t_uint32 cfg_ice; /* Idle Cycle Enable register */
-+ t_uint32 cfg_csc; /* CCP synchronization codes register */
-+ t_uint32 cfg_cgc; /* clock gating control register */
-+ t_uint32 cfg_irp_fw_addr; /* start address eWarp firmware */
-+ t_uint32 cfg_irp_fw_size; /* size in bytes of eWarp firmware */
-+ t_uint32 cfg_irp_rw; /* status of the current rw operation */
-+ t_uint32 cfg_irp_error; /* error code */
-+ t_uint32 cfg_irp_bs; /* start of circular buffer for rw packet */
-+ t_uint32 cfg_irp_be; /* end of circular buffer for rw packet */
-+ t_uint32 cfg_irp_ptr; /* ptr of circular buffer for rw packet */
-+ t_uint32 cfg_clk; /* Clock generation register */
-+ t_uint32 ckg_cken; /* added*/
-+ t_uint32 cfg_tim; /* Timer Initialization value register */
-+ t_uint32 cfg_iis; /* IRQ1 Interrupt Status register */
-+ t_uint32 cfg_isr; /* Global Interrupt status register */
-+ t_uint32 cfg_imr; /* Global Interrupt mask register */
-+// t_uint32 wasDeepSleepEntered;
-+ t_uint32 temp_idn_frv;
-+ t_sva_fw_id fwId;
-+ t_uint32 sva_context_magic_number;
-+} t_sva_config_regs_mapping1;
-+
-+#define SVA_CONTEXT_MAGIC_NUMBER 0x53415645UL
-+
-+#define SVA_EM_LAST_ERROR (-(SVA_EM_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EM_FIRST_INFO (+((SVA_DP_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_MM_LAST_ERROR (-(SVA_MM_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_MM_FIRST_INFO (+((SVA_MM_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_BM_LAST_ERROR (-(SVA_BM_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_BM_FIRST_INFO (+((SVA_BM_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_BLM_LAST_ERROR (-(SVA_BLM_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_BLM_FIRST_INFO (+((SVA_BLM_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_TM_LAST_ERROR (-(SVA_TM_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_TM_FIRST_INFO (+((SVA_TM_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_FM_LAST_ERROR (-(SVA_FM_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_FM_FIRST_INFO (+((SVA_FM_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_TI_LAST_ERROR (-(SVA_TI_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_TI_FIRST_INFO (+((SVA_TI_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_FF_LAST_ERROR (-(SVA_FF_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_FF_FIRST_INFO (+((SVA_FF_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_IN_LAST_ERROR (-(SVA_IN_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_IN_FIRST_INFO (+((SVA_IN_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_SV_LAST_ERROR (-(SVA_SV_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_SV_FIRST_INFO (+((SVA_SV_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_DP_LAST_ERROR (-(SVA_DP_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_DP_FIRST_INFO (+((SVA_DP_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_DC_LAST_ERROR (-(SVA_DC_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_DC_FIRST_INFO (+((SVA_DC_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_EC_LAST_ERROR (-(SVA_EC_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EC_FIRST_INFO (+((SVA_EC_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_GB_LAST_ERROR (-(SVA_GB_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_GB_FIRST_INFO (+((SVA_GB_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_DC_ERC_LAST_ERROR (-(SVA_DC_ERC_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_DC_ERC_FIRST_INFO (+((SVA_DC_ERC_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_DC_MP4_LAST_ERROR (-(SVA_DC_MP4_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_DC_MP4_FIRST_INFO (+((SVA_DC_MP4_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_DC_H263_LAST_ERROR (-(SVA_DC_H263_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_DC_H263_FIRST_INFO (+((SVA_DC_H263_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_DC_H264_LAST_ERROR (-(SVA_DC_H264_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_DC_H264_FIRST_INFO (+((SVA_DC_H264_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+
-+#define SVA_EC_BRC_LAST_ERROR (-(SVA_EC_BRC_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EC_BRC_FIRST_INFO (+((SVA_EC_BRC_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_EC_MP4_LAST_ERROR (-(SVA_EC_MP4_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EC_MP4_FIRST_INFO (+((SVA_EC_MP4_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_EC_H263_LAST_ERROR (-(SVA_EC_H263_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EC_H263_FIRST_INFO (+((SVA_EC_H263_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_EC_H264_LAST_ERROR (-(SVA_EC_H264_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EC_H264_FIRST_INFO (+((SVA_EC_H264_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_EC_STAB_LAST_ERROR (-(SVA_EC_STAB_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EC_STAB_FIRST_INFO (+((SVA_EC_STAB_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_SEC_JPEG_LAST_ERROR (-(SVA_SEC_JPEG_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_SEC_JPEG_FIRST_INFO (+((SVA_SEC_JPEG_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_SEC_LAST_ERROR (-(SVA_SEC_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_SEC_FIRST_INFO (+((SVA_SEC_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_TV_LAST_ERROR (-(SVA_TV_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_TV_FIRST_ERROR (+((SVA_TV_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+/******************************************************************************/
-+/* Types definitions */
-+/******************************************************************************/
-+
-+#ifdef __cplusplus
-+} /* allow C++ to use these headers */
-+#endif /* __cplusplus */
-+
-+#endif /* __INC_SVAP_H */
-+/* End of file - hvP.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_service.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_service.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_service.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_service.h 2008-07-17 16:45:17.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_service.h
@@ -0,0 +1,337 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -54414,9 +55059,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_service.h
+
+#endif /* __INC_SVA_SERVICE_H */
+/* End of file - SVA.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.c 2008-07-17 16:45:18.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.c
@@ -0,0 +1,486 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -54904,9 +55548,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.c
+
+
+/* End of sva_timemgt.c */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.h 2008-07-17 16:45:18.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.h
@@ -0,0 +1,80 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -54988,9 +55631,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgt.h
+
+#endif /* __INC_SVA_TI_H */
+/* End of file - sva_timemgt.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgtp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgtp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgtp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgtp.h 2008-07-17 16:45:19.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgtp.h
@@ -0,0 +1,49 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -55041,9 +55683,199 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/sva_timemgtp.h
+#endif /* __INC_SVA_TIP_H */
+/* End of file - sva_timemgt.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264.c 2008-08-12 22:56:10.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/common/svap.h
+@@ -0,0 +1,188 @@
++/*---------------------------------------------------------------------------*/
++/* © copyright STMicroelectronics, 2007. All rights reserved. For */
++/* information, STMicroelectronics reserves the right to license this */
++/* software concurrently under separate license conditions. */
++/* */
++/* 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, see <http://www.gnu.org/licenses/>. */
++/*---------------------------------------------------------------------------*/
++
++#ifndef __INC_SVAP_H
++#define __INC_SVAP_H
++
++#include "hcl_defs.h"
++
++/******************************************************************************/
++/* Constants definitions */
++/******************************************************************************/
++/*
++ * Define various conditonnal compilation flags in order to include or not any SW workarounds
++ */
++/*#define WORK_AROUND_AHB*/
++
++/*
++ * Define the maximum number of error defined per module
++ */
++#define SVA_MODULE_ERROR_RANGE 0x20
++
++/*
++ * Define an Id related to each module of the SVA HCL
++ * The Id = 1 is reserved for SVA HCL itself
++ */
++typedef enum {
++ SVA_EM_ID = 2, /* Events Mgt */
++ SVA_MM_ID, /* Memory Mgt */
++ SVA_BM_ID, /* Buffers Mgt */
++ SVA_BLM_ID, /* Buffers ListMgt */
++ SVA_TM_ID, /* Tasks Mgt */
++ SVA_FM_ID, /* Firmware Mgt */
++ SVA_TI_ID, /* Time Mgt */
++ SVA_VP_ID, /* Video Pipeline */
++ SVA_FF_ID, /* FIFO macros */
++ SVA_IN_ID, /* Internal Needs Mgt */
++ SVA_SV_ID, /* Common Service */
++ SVA_DP_ID, /* Display Service */
++ SVA_DC_ID, /* Decode Service */
++ SVA_EC_ID, /* Encode Service */
++ SVA_GB_ID, /* Grab Service */
++ SVA_DC_ERC_ID, /* Decode Error Concealment */
++ SVA_DC_MP4_ID, /* Decode MPEG4 Algo */
++ SVA_DC_H263_ID, /* Decode H263 Algo */
++ SVA_DC_H264_ID, /* Decode H263 Algo */
++ SVA_EC_BRC_ID, /* Encode Bit Rate Control */
++ SVA_EC_MP4_ID, /* Encode MPEG4 Algo */
++ SVA_EC_H263_ID, /* Encode H263 Algo */
++ SVA_EC_H264_ID, /* Encode H264 Algo */
++ SVA_EC_STAB_ID, /* Encode Stabilization */
++ SVA_SEC_JPEG_ID, /* Still Encode JPEG ALgo */
++ SVA_SEC_ID, /* still Encode service */
++ SVA_TV_ID /* TVO Service */
++} sva_module_id;
++
++/* ************************** CONFIGURATION PART ************************** */
++typedef struct {
++ t_uint32 cfg_psa; /* Subtask parameter Start Address register */
++ t_uint32 cfg_pea; /* Subtask parameter Stop Address register */
++ t_uint32 cfg_ice; /* Idle Cycle Enable register */
++ t_uint32 cfg_csc; /* CCP synchronization codes register */
++ t_uint32 cfg_cgc; /* clock gating control register */
++ t_uint32 cfg_irp_fw_addr; /* start address eWarp firmware */
++ t_uint32 cfg_irp_fw_size; /* size in bytes of eWarp firmware */
++ t_uint32 cfg_irp_rw; /* status of the current rw operation */
++ t_uint32 cfg_irp_error; /* error code */
++ t_uint32 cfg_irp_bs; /* start of circular buffer for rw packet */
++ t_uint32 cfg_irp_be; /* end of circular buffer for rw packet */
++ t_uint32 cfg_irp_ptr; /* ptr of circular buffer for rw packet */
++ t_uint32 cfg_clk; /* Clock generation register */
++ t_uint32 ckg_cken; /* added*/
++ t_uint32 cfg_tim; /* Timer Initialization value register */
++ t_uint32 cfg_iis; /* IRQ1 Interrupt Status register */
++ t_uint32 cfg_isr; /* Global Interrupt status register */
++ t_uint32 cfg_imr; /* Global Interrupt mask register */
++// t_uint32 wasDeepSleepEntered;
++ t_uint32 temp_idn_frv;
++ t_sva_fw_id fwId;
++ t_uint32 sva_context_magic_number;
++} t_sva_config_regs_mapping1;
++
++#define SVA_CONTEXT_MAGIC_NUMBER 0x53415645UL
++
++#define SVA_EM_LAST_ERROR (-(SVA_EM_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EM_FIRST_INFO (+((SVA_DP_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_MM_LAST_ERROR (-(SVA_MM_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_MM_FIRST_INFO (+((SVA_MM_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_BM_LAST_ERROR (-(SVA_BM_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_BM_FIRST_INFO (+((SVA_BM_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_BLM_LAST_ERROR (-(SVA_BLM_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_BLM_FIRST_INFO (+((SVA_BLM_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_TM_LAST_ERROR (-(SVA_TM_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_TM_FIRST_INFO (+((SVA_TM_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_FM_LAST_ERROR (-(SVA_FM_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_FM_FIRST_INFO (+((SVA_FM_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_TI_LAST_ERROR (-(SVA_TI_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_TI_FIRST_INFO (+((SVA_TI_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_FF_LAST_ERROR (-(SVA_FF_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_FF_FIRST_INFO (+((SVA_FF_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_IN_LAST_ERROR (-(SVA_IN_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_IN_FIRST_INFO (+((SVA_IN_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_SV_LAST_ERROR (-(SVA_SV_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_SV_FIRST_INFO (+((SVA_SV_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_DP_LAST_ERROR (-(SVA_DP_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_DP_FIRST_INFO (+((SVA_DP_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_DC_LAST_ERROR (-(SVA_DC_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_DC_FIRST_INFO (+((SVA_DC_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_EC_LAST_ERROR (-(SVA_EC_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EC_FIRST_INFO (+((SVA_EC_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_GB_LAST_ERROR (-(SVA_GB_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_GB_FIRST_INFO (+((SVA_GB_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_DC_ERC_LAST_ERROR (-(SVA_DC_ERC_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_DC_ERC_FIRST_INFO (+((SVA_DC_ERC_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_DC_MP4_LAST_ERROR (-(SVA_DC_MP4_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_DC_MP4_FIRST_INFO (+((SVA_DC_MP4_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_DC_H263_LAST_ERROR (-(SVA_DC_H263_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_DC_H263_FIRST_INFO (+((SVA_DC_H263_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_DC_H264_LAST_ERROR (-(SVA_DC_H264_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_DC_H264_FIRST_INFO (+((SVA_DC_H264_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++
++#define SVA_EC_BRC_LAST_ERROR (-(SVA_EC_BRC_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EC_BRC_FIRST_INFO (+((SVA_EC_BRC_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_EC_MP4_LAST_ERROR (-(SVA_EC_MP4_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EC_MP4_FIRST_INFO (+((SVA_EC_MP4_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_EC_H263_LAST_ERROR (-(SVA_EC_H263_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EC_H263_FIRST_INFO (+((SVA_EC_H263_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_EC_H264_LAST_ERROR (-(SVA_EC_H264_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EC_H264_FIRST_INFO (+((SVA_EC_H264_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_EC_STAB_LAST_ERROR (-(SVA_EC_STAB_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EC_STAB_FIRST_INFO (+((SVA_EC_STAB_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_SEC_JPEG_LAST_ERROR (-(SVA_SEC_JPEG_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_SEC_JPEG_FIRST_INFO (+((SVA_SEC_JPEG_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_SEC_LAST_ERROR (-(SVA_SEC_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_SEC_FIRST_INFO (+((SVA_SEC_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_TV_LAST_ERROR (-(SVA_TV_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_TV_FIRST_ERROR (+((SVA_TV_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++/******************************************************************************/
++/* Types definitions */
++/******************************************************************************/
++
++#ifdef __cplusplus
++} /* allow C++ to use these headers */
++#endif /* __cplusplus */
++
++#endif /* __INC_SVAP_H */
++/* End of file - hvP.h */
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264.c
@@ -0,0 +1,3030 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -58075,9 +58907,121 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h2
+}
+
+// End of file - sva_dc_h264.c
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpb.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpb.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpb.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpb.c 2008-08-12 22:56:11.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264.h
+@@ -0,0 +1,110 @@
++/*---------------------------------------------------------------------------*/
++/* © copyright STMicroelectronics, 2007. All rights reserved. For */
++/* information, STMicroelectronics reserves the right to license this */
++/* software concurrently under separate license conditions. */
++/* */
++/* 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, see <http://www.gnu.org/licenses/>. */
++/*---------------------------------------------------------------------------*/
++
++#ifndef __INC_SVA_DC_H264_H
++#define __INC_SVA_DC_H264_H
++
++#include "hcl_defs.h"
++#include "sva_service.h"
++#include "sva_dc_h264_dpb.h"
++#include "sva_dc_h264_slicemap.h"
++
++
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++#ifdef __DEBUG
++#define SVA_DC_H264_MAX_DBG_DEPTH 30
++#define SVA_DC_H264_MAX_DBG_SLICESPERFRAME 9
++#define SVA_DC_H264_MAX_DBG_EVENTS 12
++#endif
++
++/* macros */
++#define H264MIN(a,b) (((a)<(b))?a:b)
++#define H264MAX(a,b) (((a)>(b))?a:b)
++#define H264_MAX_UINT_16 65535
++#define H264_MAX_SINT_32 2147483647
++#define H264_MIN_SINT_32 -H264_MAX_SINT_32-1
++#define H264_MAX_UINT_32 4294967295
++
++/* extracted from each slice headers of the frame and required to program vdc_h264_slice */
++typedef t_sva_h264_dpb_params_slice t_sva_h264_params_slice;
++
++
++/* used as parameter for SetHeaderInfo */
++typedef struct
++{ /* from active PPS */
++ t_uint16 chromaQpIndex;
++ t_uint16 constrIntraPredFlag;
++ t_uint16 numRefIdxl0ActiveMinus1;
++}t_sva_h264_active_pps;
++
++
++/* extracted from active PPS and first slice Header, used to compute sliceMap */
++typedef t_sva_h264_slicemap t_sva_h264_slicemap_info;
++
++
++
++/* public fonctions */
++PUBLIC t_sva_error sva_DC_H264_Init( t_sva_service_instance_num , t_sva_codec_mode , t_sva_image_desc , const t_sva_dc_algo_configuration_params *);
++PUBLIC t_sva_error sva_DC_H264_GetMemoryNeeds( t_sva_service_instance_num , t_size *);
++PUBLIC t_sva_error sva_DC_H264_ProvideMemoryNeeds(t_sva_service_instance_num );
++PUBLIC t_sva_error sva_DC_H264_CreateAndConfigSubtasksList(t_sva_service_instance_num, t_sva_service_id);
++PUBLIC t_sva_error sva_DC_H264_Close(t_sva_service_instance_num );
++PUBLIC t_sva_error sva_DC_H264_InitHeaderInfos(t_sva_service_instance_num );
++PUBLIC t_sva_error sva_DC_H264_SetHeaderInfos(t_sva_service_instance_num , t_sva_service_id ,t_sva_buffer_id, t_uint32, t_uint32, const t_sva_header_infos *) ;
++PUBLIC t_sva_error sva_DC_H264_AssertEndOfBitstream(t_sva_service_instance_num , t_sva_service_id ) ;
++PUBLIC t_sva_error sva_DC_H264_Push(t_sva_service_instance_num , t_sva_buffer_type , t_sva_buffer_id ) ;
++PUBLIC t_sva_error sva_DC_H264_DispatchEOT(t_sva_service_instance_num ,t_sva_tm_subtask_id , t_sva_event_desc* ,t_sva_service_id ,t_uint32 , t_uint32 ,t_uint32 *,t_uint32 ,t_sva_buffer_list_id);
++PUBLIC t_sva_error sva_DC_H264_HandleFakeEvent( t_sva_tm_virtual_hw_event_id ,
++ t_sva_service_id ,
++ t_sva_tm_subtask_id ,
++ t_uint32 ,
++ t_uint32 ,
++ t_uint8 ,
++ t_uint32 *,
++ t_sva_event_desc *);
++PUBLIC t_sva_error sva_DC_H264_ResolveDependencies(t_sva_service_instance_num );
++PUBLIC t_bool sva_DC_H264_CheckInputDep(t_sva_service_instance_num);
++PUBLIC t_bool sva_DC_H264_CheckOutputDep(t_sva_service_instance_num);
++
++
++/* not usefull but needed to be existing */
++
++PUBLIC t_sva_error sva_DC_H264_FlushBitstreams(t_sva_service_instance_num);
++PUBLIC t_sva_error sva_DC_H264_GetLastErrorType (t_sva_service_instance_num, t_uint16 *);
++PUBLIC t_sva_error sva_DC_H264_FlushFifos(t_sva_service_instance_num);
++PUBLIC t_sva_error sva_DC_H264_DeleteFake(t_sva_service_instance_num);
++PUBLIC t_sva_error sva_DC_H264_SetOutputParams(t_sva_service_instance_num, const t_sva_dc_algo_params_out *);
++PUBLIC t_size sva_DC_H264_GetOutputParamsSize(t_sva_service_instance_num);
++PUBLIC t_sva_error sva_DC_H264_GetParamsBufferSize(t_sva_service_instance_num, t_sva_push_mode, t_sva_filter_mode, t_uint32, t_uint32, t_size *);
++PUBLIC t_sva_h264_dpb_error sva_DC_H264_DPB_InitInstance(t_sva_service_instance_num instanceNum);
++
++
++
++
++#ifdef __cplusplus
++} /* allow C++ to use these headers */
++#endif /* __cplusplus */
++
++
++
++#endif
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpb.c
@@ -0,0 +1,3101 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -61180,9 +62124,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h2
+ return SVA_DC_H264_DPB_OK;
+}
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpb.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpb.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpb.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpb.h 2008-08-12 22:56:12.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpb.h
@@ -0,0 +1,232 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -61416,9 +62359,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h2
+
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpbp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpbp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpbp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpbp.h 2008-07-17 16:45:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_dpbp.h
@@ -0,0 +1,98 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -61518,283 +62460,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h2
+
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264.h 2008-07-17 16:45:00.000000000 +0530
-@@ -0,0 +1,110 @@
-+/*---------------------------------------------------------------------------*/
-+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
-+/* information, STMicroelectronics reserves the right to license this */
-+/* software concurrently under separate license conditions. */
-+/* */
-+/* 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, see <http://www.gnu.org/licenses/>. */
-+/*---------------------------------------------------------------------------*/
-+
-+#ifndef __INC_SVA_DC_H264_H
-+#define __INC_SVA_DC_H264_H
-+
-+#include "hcl_defs.h"
-+#include "sva_service.h"
-+#include "sva_dc_h264_dpb.h"
-+#include "sva_dc_h264_slicemap.h"
-+
-+
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif /* __cplusplus */
-+
-+#ifdef __DEBUG
-+#define SVA_DC_H264_MAX_DBG_DEPTH 30
-+#define SVA_DC_H264_MAX_DBG_SLICESPERFRAME 9
-+#define SVA_DC_H264_MAX_DBG_EVENTS 12
-+#endif
-+
-+/* macros */
-+#define H264MIN(a,b) (((a)<(b))?a:b)
-+#define H264MAX(a,b) (((a)>(b))?a:b)
-+#define H264_MAX_UINT_16 65535
-+#define H264_MAX_SINT_32 2147483647
-+#define H264_MIN_SINT_32 -H264_MAX_SINT_32-1
-+#define H264_MAX_UINT_32 4294967295
-+
-+/* extracted from each slice headers of the frame and required to program vdc_h264_slice */
-+typedef t_sva_h264_dpb_params_slice t_sva_h264_params_slice;
-+
-+
-+/* used as parameter for SetHeaderInfo */
-+typedef struct
-+{ /* from active PPS */
-+ t_uint16 chromaQpIndex;
-+ t_uint16 constrIntraPredFlag;
-+ t_uint16 numRefIdxl0ActiveMinus1;
-+}t_sva_h264_active_pps;
-+
-+
-+/* extracted from active PPS and first slice Header, used to compute sliceMap */
-+typedef t_sva_h264_slicemap t_sva_h264_slicemap_info;
-+
-+
-+
-+/* public fonctions */
-+PUBLIC t_sva_error sva_DC_H264_Init( t_sva_service_instance_num , t_sva_codec_mode , t_sva_image_desc , const t_sva_dc_algo_configuration_params *);
-+PUBLIC t_sva_error sva_DC_H264_GetMemoryNeeds( t_sva_service_instance_num , t_size *);
-+PUBLIC t_sva_error sva_DC_H264_ProvideMemoryNeeds(t_sva_service_instance_num );
-+PUBLIC t_sva_error sva_DC_H264_CreateAndConfigSubtasksList(t_sva_service_instance_num, t_sva_service_id);
-+PUBLIC t_sva_error sva_DC_H264_Close(t_sva_service_instance_num );
-+PUBLIC t_sva_error sva_DC_H264_InitHeaderInfos(t_sva_service_instance_num );
-+PUBLIC t_sva_error sva_DC_H264_SetHeaderInfos(t_sva_service_instance_num , t_sva_service_id ,t_sva_buffer_id, t_uint32, t_uint32, const t_sva_header_infos *) ;
-+PUBLIC t_sva_error sva_DC_H264_AssertEndOfBitstream(t_sva_service_instance_num , t_sva_service_id ) ;
-+PUBLIC t_sva_error sva_DC_H264_Push(t_sva_service_instance_num , t_sva_buffer_type , t_sva_buffer_id ) ;
-+PUBLIC t_sva_error sva_DC_H264_DispatchEOT(t_sva_service_instance_num ,t_sva_tm_subtask_id , t_sva_event_desc* ,t_sva_service_id ,t_uint32 , t_uint32 ,t_uint32 *,t_uint32 ,t_sva_buffer_list_id);
-+PUBLIC t_sva_error sva_DC_H264_HandleFakeEvent( t_sva_tm_virtual_hw_event_id ,
-+ t_sva_service_id ,
-+ t_sva_tm_subtask_id ,
-+ t_uint32 ,
-+ t_uint32 ,
-+ t_uint8 ,
-+ t_uint32 *,
-+ t_sva_event_desc *);
-+PUBLIC t_sva_error sva_DC_H264_ResolveDependencies(t_sva_service_instance_num );
-+PUBLIC t_bool sva_DC_H264_CheckInputDep(t_sva_service_instance_num);
-+PUBLIC t_bool sva_DC_H264_CheckOutputDep(t_sva_service_instance_num);
-+
-+
-+/* not usefull but needed to be existing */
-+
-+PUBLIC t_sva_error sva_DC_H264_FlushBitstreams(t_sva_service_instance_num);
-+PUBLIC t_sva_error sva_DC_H264_GetLastErrorType (t_sva_service_instance_num, t_uint16 *);
-+PUBLIC t_sva_error sva_DC_H264_FlushFifos(t_sva_service_instance_num);
-+PUBLIC t_sva_error sva_DC_H264_DeleteFake(t_sva_service_instance_num);
-+PUBLIC t_sva_error sva_DC_H264_SetOutputParams(t_sva_service_instance_num, const t_sva_dc_algo_params_out *);
-+PUBLIC t_size sva_DC_H264_GetOutputParamsSize(t_sva_service_instance_num);
-+PUBLIC t_sva_error sva_DC_H264_GetParamsBufferSize(t_sva_service_instance_num, t_sva_push_mode, t_sva_filter_mode, t_uint32, t_uint32, t_size *);
-+PUBLIC t_sva_h264_dpb_error sva_DC_H264_DPB_InitInstance(t_sva_service_instance_num instanceNum);
-+
-+
-+
-+
-+#ifdef __cplusplus
-+} /* allow C++ to use these headers */
-+#endif /* __cplusplus */
-+
-+
-+
-+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264p.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264p.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264p.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264p.h 2008-07-17 16:45:04.000000000 +0530
-@@ -0,0 +1,156 @@
-+/*---------------------------------------------------------------------------*/
-+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
-+/* information, STMicroelectronics reserves the right to license this */
-+/* software concurrently under separate license conditions. */
-+/* */
-+/* 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, see <http://www.gnu.org/licenses/>. */
-+/*---------------------------------------------------------------------------*/
-+
-+#ifndef __INC_SVA_DC_H264_P_H
-+#define __INC_SVA_DC_H264_P_H
-+
-+#include "hcl_defs.h"
-+#include "sva_service.h"
-+#include "sva.h"
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif /* __cplusplus */
-+
-+
-+/* enum error : remains internal, used for debug */
-+typedef enum
-+{
-+ SVA_DC_H264_DPB_START_PICTURELOSS_NOT_SUPPORTED,
-+ SVA_DC_H264_DPB_START_MISSING_BUFFER_ERROR,
-+ SVA_DC_H264_DPB_START_ERROR,
-+ SVA_DC_H264_DPB_END_ERROR,
-+ SVA_DC_H264_DPB_PUSH_ERROR,
-+ SVA_DC_H264_PARAMIN_ERROR,
-+ SVA_DC_H264_LIST0_ERROR
-+}t_sva_dc_h264_error;
-+
-+
-+
-+typedef struct
-+{
-+ t_uint16 non_zero;
-+ t_uint16 BKType;
-+ t_sint16 mv[2];
-+}t_sva_h264_block4x4_info;
-+/* from t_block_info structure from ref code */
-+
-+typedef struct
-+{
-+ t_sint16 nslice; /* -1 not decoded */
-+ t_uint16 concealed;
-+ t_uint16 QP[2];
-+ t_uint16 reserved1;
-+ t_uint16 reserved2;
-+ t_uint16 reserved3;
-+ t_uint16 reserved4;
-+ t_sva_h264_block4x4_info block4x4Info[16];
-+} t_sva_h264_mblock_info;
-+
-+
-+/* from tps_h4d_param structure from ref code: */
-+typedef struct
-+{
-+ unsigned _0 : 2; unsigned A_l : 6;
-+ unsigned _1 : 2; unsigned B_l : 6;
-+ unsigned _2 : 2; unsigned A_c : 6;
-+ unsigned _3 : 2; unsigned B_c : 6;
-+
-+} t_sva_h264_ab_index;
-+
-+
-+
-+typedef struct
-+{
-+ unsigned _0 : 2; unsigned h0 : 3; unsigned v0 : 3;
-+ unsigned _1 : 2; unsigned h1 : 3; unsigned v1 : 3;
-+ unsigned _2 : 2; unsigned h2 : 3; unsigned v2 : 3;
-+ unsigned _3 : 2; unsigned h3 : 3; unsigned v3 : 3;
-+
-+} t_sva_h264_strength;
-+
-+
-+
-+typedef struct
-+{
-+ t_sva_h264_ab_index index[3];
-+ t_uint32 loc;
-+ t_sva_h264_strength bs[4];
-+
-+} t_sva_h264_h4d_param;
-+
-+
-+
-+
-+/* descriptor of internal variable*/
-+typedef struct{
-+ t_sva_codec_mode codecMode;
-+ t_uint16 picWidthInMbsMinus1;
-+ t_uint16 picHeightInMapUnitsMinus1;
-+ t_sva_video_decoder_algo_h264_configuration_params staticParams;
-+
-+ t_sva_dc_fifo_dep slicesDescBlockIdFifo; //BlockId Fifo
-+ t_sva_dc_fifo_dep sliceMapFifo; //Fifo of t_sva_h264_slicemap
-+
-+ /* vdc_internal_buf */
-+ t_size blockInfoSize;
-+ t_sva_block_id blockInfoId[SUBTASK_DEFAULT_NUMBER];
-+ t_system_address blockInfoAddr[SUBTASK_DEFAULT_NUMBER];
-+ t_sva_block_id blockSliceMapId[SUBTASK_DEFAULT_NUMBER];
-+ t_system_address blockSliceMapAddr[SUBTASK_DEFAULT_NUMBER];
-+ t_sva_block_id blockH4DId[SUBTASK_DEFAULT_NUMBER];
-+ t_system_address blockH4DAddr[SUBTASK_DEFAULT_NUMBER];
-+ /* vdc_frame_buf_out : addr_deblocking_param_buffer */
-+ t_sva_block_id blockDeblockId;
-+ t_system_address blockDeblockAddr;
-+
-+
-+ /* vdc_h264_slice */
-+ t_sva_block_id blockSlicesId[SUBTASK_DEFAULT_NUMBER];
-+ t_system_address blockSlicesAddr[SUBTASK_DEFAULT_NUMBER];
-+ t_uint32 currentNbSlices;
-+ t_sva_dc_h264_error h264Error;
-+
-+
-+ t_sva_h264_dpb_sps_utils spsForDpb;
-+ t_sva_h264_dpb_slice0_utils slice0ForDpb;
-+
-+
-+
-+#ifdef __DEBUG
-+ t_uint32 dbgSliceCounter;
-+ t_uint32 dbgSliceIndex;
-+ //t_sva_vdc_h264_slice slicesTrace[SVA_DC_H264_MAX_DBG_DEPTH][SVA_DC_H264_MAX_DBG_SLICESPERFRAME];
-+ t_uint32 dbgNbEvent;
-+ t_sva_event_desc eventTraces[SVA_DC_H264_MAX_DBG_DEPTH][SVA_DC_H264_MAX_DBG_EVENTS];
-+#endif
-+
-+ t_bool isToDo;
-+ t_sva_h264_slicemap_info sliceMap;
-+}t_sva_h264_desc;
-+
-+
-+
-+#ifdef __cplusplus
-+} /* allow C++ to use these headers */
-+#endif /* __cplusplus */
-+
-+
-+
-+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_slicemap.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_slicemap.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_slicemap.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_slicemap.c 2008-07-17 16:45:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_slicemap.c
@@ -0,0 +1,312 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -62108,9 +62775,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h2
+ p_mb_slice_map[i] = pSliceMapBuildInfo->sliceGroupId[i];
+
+}
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_slicemap.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_slicemap.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_slicemap.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_slicemap.h 2008-07-17 16:45:04.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264_slicemap.h
@@ -0,0 +1,53 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -62165,9 +62831,167 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h2
+#endif /* __cplusplus */
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2.c 2008-07-17 16:45:05.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/h264/sva_dc_h264p.h
+@@ -0,0 +1,156 @@
++/*---------------------------------------------------------------------------*/
++/* © copyright STMicroelectronics, 2007. All rights reserved. For */
++/* information, STMicroelectronics reserves the right to license this */
++/* software concurrently under separate license conditions. */
++/* */
++/* 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, see <http://www.gnu.org/licenses/>. */
++/*---------------------------------------------------------------------------*/
++
++#ifndef __INC_SVA_DC_H264_P_H
++#define __INC_SVA_DC_H264_P_H
++
++#include "hcl_defs.h"
++#include "sva_service.h"
++#include "sva.h"
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++
++/* enum error : remains internal, used for debug */
++typedef enum
++{
++ SVA_DC_H264_DPB_START_PICTURELOSS_NOT_SUPPORTED,
++ SVA_DC_H264_DPB_START_MISSING_BUFFER_ERROR,
++ SVA_DC_H264_DPB_START_ERROR,
++ SVA_DC_H264_DPB_END_ERROR,
++ SVA_DC_H264_DPB_PUSH_ERROR,
++ SVA_DC_H264_PARAMIN_ERROR,
++ SVA_DC_H264_LIST0_ERROR
++}t_sva_dc_h264_error;
++
++
++
++typedef struct
++{
++ t_uint16 non_zero;
++ t_uint16 BKType;
++ t_sint16 mv[2];
++}t_sva_h264_block4x4_info;
++/* from t_block_info structure from ref code */
++
++typedef struct
++{
++ t_sint16 nslice; /* -1 not decoded */
++ t_uint16 concealed;
++ t_uint16 QP[2];
++ t_uint16 reserved1;
++ t_uint16 reserved2;
++ t_uint16 reserved3;
++ t_uint16 reserved4;
++ t_sva_h264_block4x4_info block4x4Info[16];
++} t_sva_h264_mblock_info;
++
++
++/* from tps_h4d_param structure from ref code: */
++typedef struct
++{
++ unsigned _0 : 2; unsigned A_l : 6;
++ unsigned _1 : 2; unsigned B_l : 6;
++ unsigned _2 : 2; unsigned A_c : 6;
++ unsigned _3 : 2; unsigned B_c : 6;
++
++} t_sva_h264_ab_index;
++
++
++
++typedef struct
++{
++ unsigned _0 : 2; unsigned h0 : 3; unsigned v0 : 3;
++ unsigned _1 : 2; unsigned h1 : 3; unsigned v1 : 3;
++ unsigned _2 : 2; unsigned h2 : 3; unsigned v2 : 3;
++ unsigned _3 : 2; unsigned h3 : 3; unsigned v3 : 3;
++
++} t_sva_h264_strength;
++
++
++
++typedef struct
++{
++ t_sva_h264_ab_index index[3];
++ t_uint32 loc;
++ t_sva_h264_strength bs[4];
++
++} t_sva_h264_h4d_param;
++
++
++
++
++/* descriptor of internal variable*/
++typedef struct{
++ t_sva_codec_mode codecMode;
++ t_uint16 picWidthInMbsMinus1;
++ t_uint16 picHeightInMapUnitsMinus1;
++ t_sva_video_decoder_algo_h264_configuration_params staticParams;
++
++ t_sva_dc_fifo_dep slicesDescBlockIdFifo; //BlockId Fifo
++ t_sva_dc_fifo_dep sliceMapFifo; //Fifo of t_sva_h264_slicemap
++
++ /* vdc_internal_buf */
++ t_size blockInfoSize;
++ t_sva_block_id blockInfoId[SUBTASK_DEFAULT_NUMBER];
++ t_system_address blockInfoAddr[SUBTASK_DEFAULT_NUMBER];
++ t_sva_block_id blockSliceMapId[SUBTASK_DEFAULT_NUMBER];
++ t_system_address blockSliceMapAddr[SUBTASK_DEFAULT_NUMBER];
++ t_sva_block_id blockH4DId[SUBTASK_DEFAULT_NUMBER];
++ t_system_address blockH4DAddr[SUBTASK_DEFAULT_NUMBER];
++ /* vdc_frame_buf_out : addr_deblocking_param_buffer */
++ t_sva_block_id blockDeblockId;
++ t_system_address blockDeblockAddr;
++
++
++ /* vdc_h264_slice */
++ t_sva_block_id blockSlicesId[SUBTASK_DEFAULT_NUMBER];
++ t_system_address blockSlicesAddr[SUBTASK_DEFAULT_NUMBER];
++ t_uint32 currentNbSlices;
++ t_sva_dc_h264_error h264Error;
++
++
++ t_sva_h264_dpb_sps_utils spsForDpb;
++ t_sva_h264_dpb_slice0_utils slice0ForDpb;
++
++
++
++#ifdef __DEBUG
++ t_uint32 dbgSliceCounter;
++ t_uint32 dbgSliceIndex;
++ //t_sva_vdc_h264_slice slicesTrace[SVA_DC_H264_MAX_DBG_DEPTH][SVA_DC_H264_MAX_DBG_SLICESPERFRAME];
++ t_uint32 dbgNbEvent;
++ t_sva_event_desc eventTraces[SVA_DC_H264_MAX_DBG_DEPTH][SVA_DC_H264_MAX_DBG_EVENTS];
++#endif
++
++ t_bool isToDo;
++ t_sva_h264_slicemap_info sliceMap;
++}t_sva_h264_desc;
++
++
++
++#ifdef __cplusplus
++} /* allow C++ to use these headers */
++#endif /* __cplusplus */
++
++
++
++#endif
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2.c
@@ -0,0 +1,2126 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -64295,9 +65119,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_m
+}
+
+// End of file - sva_dc_Mpeg2.c
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2.h 2008-07-17 16:45:06.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2.h
@@ -0,0 +1,181 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -64480,9 +65303,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_m
+
+#endif /* __INC_sva_DC_Mpeg2_H */
+/* End of file - sva_dc_mpeg2.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2p.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2p.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2p.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2p.c 2008-07-17 16:45:07.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2p.c
@@ -0,0 +1,789 @@
+//*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -65273,9 +66095,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_m
+ return SVA_OK;
+}
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2p.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2p.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2p.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2p.h 2008-07-17 16:45:08.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_mpeg2p.h
@@ -0,0 +1,35 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -65312,9 +66133,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg2/sva_dc_m
+PUBLIC t_sva_error sva_DC_Mpeg2_GetStartCodeValue ( t_uint32 * );
+PUBLIC t_sva_error sva_DC_Mpeg2_SetupParamInOut(t_sva_service_instance_num,t_sva_tm_subtask_id);
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4.c 2008-11-24 14:06:25.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4.c
@@ -0,0 +1,2211 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -66180,7 +67000,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_m
+ }
+
+ SVA_FreeBuffer(mp4Desc[instanceNum].lastFwdRefImageBufferId);
-+
++
+ DELETE_FIFO(mp4Desc[instanceNum].fakeBitstreamFifo);
+
+ return SVA_OK;
@@ -67527,9 +68347,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_m
+}
+
+// End of file - sva_dc_mpeg4.c
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4.h 2008-07-17 16:45:09.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4.h
@@ -0,0 +1,170 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -67701,9 +68520,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_m
+
+#endif /* __INC_sva_DC_MP4_H */
+/* End of file - sva_dc_mpeg4.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4p.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4p.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4p.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4p.c 2008-07-17 16:45:10.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4p.c
@@ -0,0 +1,686 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -68391,9 +69209,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_m
+
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4p.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4p.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4p.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4p.h 2008-07-17 16:45:10.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_mpeg4p.h
@@ -0,0 +1,35 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -68430,9 +69247,30 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/mpeg4/sva_dc_m
+
+#endif
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_dc_algo.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_dc_algo.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_dc_algo.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_dc_algo.h 2008-07-17 16:44:55.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva.h
+@@ -0,0 +1,18 @@
++/*---------------------------------------------------------------------------*/
++/* © copyright STMicroelectronics, 2007. All rights reserved. For */
++/* information, STMicroelectronics reserves the right to license this */
++/* software concurrently under separate license conditions. */
++/* */
++/* 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, see <http://www.gnu.org/licenses/>. */
++/*---------------------------------------------------------------------------*/
+\ No newline at end of file
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_dc_algo.h
@@ -0,0 +1,135 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -68569,9 +69407,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_dc_algo.h
+
+#endif /* __INC_SVA_DC_ALGO_H */
+/* End of file - sva_dc_algo.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.c 2008-07-17 16:44:55.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.c
@@ -0,0 +1,2357 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -70930,9 +71767,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.c .
+
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.h 2008-07-17 16:44:56.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.h
@@ -0,0 +1,97 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -71031,9 +71867,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decode.h .
+
+#endif /* __INC_SVA_DECODE_H */
+/* End of file - sva_decode.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.c 2008-07-17 16:44:57.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.c
@@ -0,0 +1,655 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -71690,9 +72525,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.c
+ return SVA_DC_OK;
+
+}
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.h 2008-07-17 16:44:57.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.h
@@ -0,0 +1,364 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -72058,9 +72892,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodep.h
+
+#endif /* __INC_SVA_DECODEP_H */
+/* End of file - sva_decodeP.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodepp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodepp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodepp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodepp.h 2008-07-17 16:44:58.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodepp.h
@@ -0,0 +1,40 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -72102,32 +72935,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva_decodepp.h
+#endif /* __cplusplus */
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/sva.h 2008-07-17 16:44:54.000000000 +0530
-@@ -0,0 +1,18 @@
-+/*---------------------------------------------------------------------------*/
-+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
-+/* information, STMicroelectronics reserves the right to license this */
-+/* software concurrently under separate license conditions. */
-+/* */
-+/* 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, see <http://www.gnu.org/licenses/>. */
-+/*---------------------------------------------------------------------------*/
-\ No newline at end of file
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1.c 2008-07-17 16:45:11.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1.c
@@ -0,0 +1,2044 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -74173,9 +74982,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1
+}
+
+// End of file - sva_dc_vc1.c
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1.h 2008-07-17 16:45:12.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1.h
@@ -0,0 +1,194 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -74371,9 +75179,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1
+
+#endif /* __INC_sva_DC_VC1_H */
+/* End of file - sva_dc_mpeg4.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1p.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1p.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1p.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1p.c 2008-07-17 16:45:13.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1p.c
@@ -0,0 +1,714 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -75089,9 +75896,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1
+ return SVA_OK;
+}
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1p.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1p.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1p.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1p.h 2008-07-17 16:45:13.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1p.h
@@ -0,0 +1,37 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -75130,9 +75936,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/decode/vc1/sva_dc_vc1
+//PUBLIC t_sva_error sva_DC_VC1_SubTaskFieldsFullUpdate (t_sva_service_instance_num , t_sva_buffer_id *);
+//PUBLIC t_sva_error sva_DC_VC1_TryToInitBitstreamFields(t_uint8 ,t_sva_buffer_id *);
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_display.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_display.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_display.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_display.c 2008-07-17 16:44:51.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_display.c
@@ -0,0 +1,5661 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -80795,9 +81600,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_display.c
+ sva_MM_GetBlockSystemAddress(pDesc->tempBlockId, pAddr);
+
+}
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_display.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_display.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_display.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_display.h 2008-07-17 16:44:53.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_display.h
@@ -0,0 +1,99 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -80898,9 +81702,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_display.h
+#endif /* __cplusplus */
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_displayp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_displayp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_displayp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_displayp.h 2008-07-17 16:44:54.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_displayp.h
@@ -0,0 +1,424 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -81326,9 +82129,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/display/sva_displayp.
+
+#endif /* __INC_SVA_DISPLAYP_H */
+/* End of file - sva_displayp.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.c 2008-07-17 16:44:43.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.c
@@ -0,0 +1,3648 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -84978,9 +85780,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.c
+}
+
+ /* End of file - sva_brc.c */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.h 2008-07-17 16:44:44.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.h
@@ -0,0 +1,112 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -85094,9 +85895,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brc.h
+
+#endif /* __INC_SVA_BRC_H */
+/* End of file - sva_brc.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brcp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brcp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brcp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brcp.h 2008-07-17 16:44:45.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brcp.h
@@ -0,0 +1,262 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -85360,9 +86160,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/brc/sva_brcp.h
+
+#endif /* __INC_SVA_BRCP_H */
+/* End of file - sva_brcp.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264.c 2008-07-17 16:44:46.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264.c
@@ -0,0 +1,4739 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -90103,9 +90902,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h2
+
+/* End of file - sva_ec_h264.c */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264.h 2008-07-17 16:44:47.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264.h
@@ -0,0 +1,79 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -90186,9 +90984,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h2
+
+/* End of file - sva_ec_h264.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264p.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264p.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264p.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264p.h 2008-07-17 16:44:48.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h264p.h
@@ -0,0 +1,646 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -90836,9 +91633,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/h264/sva_ec_h2
+
+/* End of file - sva_ec_h264p.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4.c 2008-07-17 16:44:49.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4.c
@@ -0,0 +1,2556 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -93396,9 +94192,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_m
+
+/* End of file - sva_ec_mpeg4.c */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4.h 2008-07-17 16:44:50.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4.h
@@ -0,0 +1,69 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -93469,9 +94264,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_m
+
+#endif /* __INC_SVA_EC_MP4_H */
+/* End of file - sva_ec_mpeg4.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4p.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4p.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4p.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4p.h 2008-07-17 16:44:50.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_mpeg4p.h
@@ -0,0 +1,246 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -93719,9 +94513,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/mpeg4/sva_ec_m
+#endif /* __INC_SVA_EC_MP4P_H */
+/* End of file - sva_ec_mpeg4p.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_ec_algo.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_ec_algo.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_ec_algo.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_ec_algo.h 2008-07-17 16:44:39.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_ec_algo.h
@@ -0,0 +1,187 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -93910,9 +94703,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_ec_algo.h
+
+#endif /* __INC_SVA_EC_ALGO_H */
+/* End of file - sva_ec_algo.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.c 2008-07-17 16:44:40.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.c
@@ -0,0 +1,4594 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -98508,9 +99300,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.c .
+
+ return TRUE;
+}
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.h 2008-07-17 16:44:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.h
@@ -0,0 +1,90 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -98602,9 +99393,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encode.h .
+
+#endif /* __INC_SVA_ENCODE_H */
+/* End of file - sva_encode.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encodep.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encodep.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encodep.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encodep.h 2008-07-17 16:44:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encodep.h
@@ -0,0 +1,340 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -98946,9 +99736,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/encode/sva_encodep.h
+#endif /* __INC_SVA_ENCODEP_H */
+/* End of file - sva_encodep.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgt.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgt.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgt.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgt.c 2008-07-17 16:44:36.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgt.c
@@ -0,0 +1,896 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -99846,9 +100635,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva
+
+ return SVA_OK;
+}
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgt.h 2008-07-17 16:44:37.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgt.h
@@ -0,0 +1,97 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -99947,9 +100735,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva
+
+#endif /* __INC_SVA_EM_H */
+/* End of file - sva_eventmgt.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgtp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgtp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgtp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgtp.h 2008-07-17 16:44:38.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_eventmgtp.h
@@ -0,0 +1,84 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -100035,9 +100822,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva
+#endif /* __INC_SVA_EMP_H */
+/* End of file - sva_eventmgtp.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_irqmgt.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_irqmgt.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_irqmgt.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_irqmgt.c 2008-07-17 16:44:38.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_irqmgt.c
@@ -0,0 +1,225 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -100264,9 +101050,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva
+
+
+/* End of irqMgt.c */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_irqmgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_irqmgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_irqmgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_irqmgt.h 2008-07-17 16:44:39.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva_irqmgt.h
@@ -0,0 +1,42 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -100310,9 +101095,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/events_management/sva
+#endif /* __INC_SVA_IM_H */
+/* End of file - sva_irqmgt.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgt.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgt.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgt.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgt.c 2008-07-17 16:44:34.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgt.c
@@ -0,0 +1,1907 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -102221,9 +103005,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/s
+
+/* END of sva_fwmgt.c */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgt.h 2008-07-17 16:44:35.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgt.h
@@ -0,0 +1,180 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -102405,9 +103188,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/s
+
+#endif /* __INC_SVA_FM_H */
+/* End of file - sva_fwmgt.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgtp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgtp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgtp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgtp.h 2008-07-17 16:44:36.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/sva_fwmgtp.h
@@ -0,0 +1,304 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -102713,9 +103495,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/firmware_management/s
+
+#endif /* __INC_SVA_FM_P_H */
+/* End of file - sva_fwmgtp.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.c 2008-07-17 16:44:31.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.c
@@ -0,0 +1,3810 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -106527,9 +107308,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.c ../ne
+}
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.h 2008-07-17 16:44:33.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.h
@@ -0,0 +1,88 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -106619,9 +107399,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grab.h ../ne
+
+#endif /* __INC_SVA_GRAB_H */
+/* End of file - sva_grab.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grabp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grabp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grabp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grabp.h 2008-07-17 16:44:34.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grabp.h
@@ -0,0 +1,411 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -107034,9 +107813,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/grab/sva_grabp.h ../n
+
+#endif /* __INC_SVA_GRABP_H */
+/* End of file - sva_grabP.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_bufferlistmgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_bufferlistmgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_bufferlistmgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_bufferlistmgt.h 2008-07-17 16:44:18.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_bufferlistmgt.h
@@ -0,0 +1,87 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -107125,9 +107903,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_bufferlis
+#endif /* __INC_SVA_BUFFERLISTMGT_H */
+// End of file - sva_bufferlistmgt.h
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_buffermgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_buffermgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_buffermgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_buffermgt.h 2008-07-17 16:44:18.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_buffermgt.h
@@ -0,0 +1,111 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -107240,9 +108017,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_buffermgt
+
+#endif /* __INC_SVA_BM_H */
+/* End of file - sva_bufferMgt.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_capabilities.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_capabilities.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_capabilities.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_capabilities.h 2008-07-17 16:44:19.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_capabilities.h
@@ -0,0 +1,46 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -107290,9 +108066,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_capabilit
+
+#endif /* __INC_HV_CAPABILITIES_H */
+/* End of file - sva_capabilities.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_dc_mpeg2.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_dc_mpeg2.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_dc_mpeg2.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_dc_mpeg2.h 2008-07-17 16:44:19.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_dc_mpeg2.h
@@ -0,0 +1,181 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -107475,9 +108250,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_dc_mpeg2.
+
+#endif /* __INC_sva_DC_Mpeg2_H */
+/* End of file - sva_dc_mpeg2.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_decode.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_decode.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_decode.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_decode.h 2008-07-17 16:44:20.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_decode.h
@@ -0,0 +1,97 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -107576,9 +108350,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_decode.h
+
+#endif /* __INC_SVA_DECODE_H */
+/* End of file - sva_decode.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_display.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_display.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_display.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_display.h 2008-07-17 16:44:20.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_display.h
@@ -0,0 +1,99 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -107679,9 +108452,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_display.h
+#endif /* __cplusplus */
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_encode.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_encode.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_encode.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_encode.h 2008-07-17 16:44:20.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_encode.h
@@ -0,0 +1,90 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -107773,9 +108545,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_encode.h
+
+#endif /* __INC_SVA_ENCODE_H */
+/* End of file - sva_encode.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_eventmgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_eventmgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_eventmgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_eventmgt.h 2008-07-17 16:44:21.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_eventmgt.h
@@ -0,0 +1,97 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -107874,9 +108645,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_eventmgt.
+
+#endif /* __INC_SVA_EM_H */
+/* End of file - sva_eventmgt.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_fifo.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_fifo.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_fifo.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_fifo.h 2008-07-17 16:44:21.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_fifo.h
@@ -0,0 +1,335 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -108213,9 +108983,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_fifo.h ..
+
+#endif /* __INC_SVA_FIFO_H */
+/* End of file - sva_fifo.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_fwmgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_fwmgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_fwmgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_fwmgt.h 2008-07-17 16:44:22.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_fwmgt.h
@@ -0,0 +1,180 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -108397,9 +109166,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_fwmgt.h .
+
+#endif /* __INC_SVA_FM_H */
+/* End of file - sva_fwmgt.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_grab.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_grab.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_grab.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_grab.h 2008-07-17 16:44:22.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_grab.h
@@ -0,0 +1,89 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -108490,9 +109258,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_grab.h ..
+
+#endif /* __INC_SVA_GRAB_H */
+/* End of file - sva_grab.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_host_interface.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_host_interface.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_host_interface.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_host_interface.h 2008-07-17 16:44:23.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_host_interface.h
@@ -0,0 +1,290 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -108784,9 +109551,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_host_inte
+#endif /* _SVA_HOST_INTERFACE_H_ */
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_internalneeds.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_internalneeds.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_internalneeds.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_internalneeds.h 2008-07-17 16:44:23.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_internalneeds.h
@@ -0,0 +1,60 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -108848,9 +109614,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_internaln
+
+#endif /* __INC_SVA_IN_H */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_irqmgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_irqmgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_irqmgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_irqmgt.h 2008-07-17 16:44:24.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_irqmgt.h
@@ -0,0 +1,42 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -108894,9 +109659,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_irqmgt.h
+#endif /* __INC_SVA_IM_H */
+/* End of file - sva_irqmgt.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_memorymgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_memorymgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_memorymgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_memorymgt.h 2008-07-17 16:44:24.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_memorymgt.h
@@ -0,0 +1,163 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -109061,9 +109825,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_memorymgt
+
+#endif /* __INC_HV_MM_H */
+/* End of file - sva_memorymgt.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_openservice.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_openservice.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_openservice.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_openservice.h 2008-07-17 16:44:25.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_openservice.h
@@ -0,0 +1,62 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -109127,9 +109890,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_openservi
+} t_sva_open_service_methods;
+
+#endif /* __INC_OPENSERVICE_H */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_openservicemgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_openservicemgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_openservicemgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_openservicemgt.h 2008-07-17 16:44:25.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_openservicemgt.h
@@ -0,0 +1,71 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -109202,206 +109964,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_openservi
+
+#endif /* __INC_HV_FM_H */
+/* End of file - hv_fwMgt.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/svap.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/svap.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/svap.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/svap.h 2008-07-17 16:44:29.000000000 +0530
-@@ -0,0 +1,193 @@
-+/*---------------------------------------------------------------------------*/
-+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
-+/* information, STMicroelectronics reserves the right to license this */
-+/* software concurrently under separate license conditions. */
-+/* */
-+/* 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, see <http://www.gnu.org/licenses/>. */
-+/*---------------------------------------------------------------------------*/
-+
-+#ifndef __INC_SVAP_H
-+#define __INC_SVAP_H
-+
-+#include "hcl_defs.h"
-+
-+/******************************************************************************/
-+/* Constants definitions */
-+/******************************************************************************/
-+/*
-+ * Define various conditonnal compilation flags in order to include or not any SW workarounds
-+ */
-+/*#define WORK_AROUND_AHB*/
-+
-+/*
-+ * Define the maximum number of error defined per module
-+ */
-+#define SVA_MODULE_ERROR_RANGE 0x20
-+
-+/*
-+ * Define an Id related to each module of the SVA HCL
-+ * The Id = 1 is reserved for SVA HCL itself
-+ */
-+typedef enum {
-+ SVA_EM_ID = 2, /* Events Mgt */
-+ SVA_MM_ID, /* Memory Mgt */
-+ SVA_BM_ID, /* Buffers Mgt */
-+ SVA_BLM_ID, /* Buffers ListMgt */
-+ SVA_TM_ID, /* Tasks Mgt */
-+ SVA_FM_ID, /* Firmware Mgt */
-+ SVA_TI_ID, /* Time Mgt */
-+ SVA_VP_ID, /* Video Pipeline */
-+ SVA_FF_ID, /* FIFO macros */
-+ SVA_IN_ID, /* Internal Needs Mgt */
-+ SVA_SV_ID, /* Common Service */
-+ SVA_DP_ID, /* Display Service */
-+ SVA_DC_ID, /* Decode Service */
-+ SVA_EC_ID, /* Encode Service */
-+ SVA_GB_ID, /* Grab Service */
-+ SVA_DC_ERC_ID, /* Decode Error Concealment */
-+ SVA_DC_MP4_ID, /* Decode MPEG4 Algo */
-+ SVA_DC_H263_ID, /* Decode H263 Algo */
-+ SVA_DC_H264_ID, /* Decode H263 Algo */
-+ SVA_EC_BRC_ID, /* Encode Bit Rate Control */
-+ SVA_EC_MP4_ID, /* Encode MPEG4 Algo */
-+ SVA_EC_H263_ID, /* Encode H263 Algo */
-+ SVA_EC_H264_ID, /* Encode H264 Algo */
-+ SVA_EC_STAB_ID, /* Encode Stabilization */
-+ SVA_SEC_JPEG_ID, /* Still Encode JPEG ALgo */
-+ SVA_SEC_ID, /* still Encode service */
-+ SVA_TV_ID /* TVO Service */
-+} sva_module_id;
-+
-+/* ************************** CONFIGURATION PART ************************** */
-+
-+
-+//typedef t_uint32 t_sva_fw_id;
-+
-+
-+typedef struct {
-+ t_uint32 cfg_psa; /* Subtask parameter Start Address register */
-+ t_uint32 cfg_pea; /* Subtask parameter Stop Address register */
-+ t_uint32 cfg_ice; /* Idle Cycle Enable register */
-+ t_uint32 cfg_csc; /* CCP synchronization codes register */
-+ t_uint32 cfg_cgc; /* clock gating control register */
-+ t_uint32 cfg_irp_fw_addr; /* start address eWarp firmware */
-+ t_uint32 cfg_irp_fw_size; /* size in bytes of eWarp firmware */
-+ t_uint32 cfg_irp_rw; /* status of the current rw operation */
-+ t_uint32 cfg_irp_error; /* error code */
-+ t_uint32 cfg_irp_bs; /* start of circular buffer for rw packet */
-+ t_uint32 cfg_irp_be; /* end of circular buffer for rw packet */
-+ t_uint32 cfg_irp_ptr; /* ptr of circular buffer for rw packet */
-+ t_uint32 cfg_clk; /* Clock generation register */
-+ t_uint32 ckg_cken; /* added*/
-+ t_uint32 cfg_tim; /* Timer Initialization value register */
-+ t_uint32 cfg_iis; /* IRQ1 Interrupt Status register */
-+ t_uint32 cfg_isr; /* Global Interrupt status register */
-+ t_uint32 cfg_imr; /* Global Interrupt mask register */
-+// t_uint32 wasDeepSleepEntered;
-+ t_uint32 temp_idn_frv;
-+ t_uint32 fwId;
-+ t_uint32 sva_context_magic_number;
-+} t_sva_config_regs_mapping1;
-+
-+#define SVA_CONTEXT_MAGIC_NUMBER 0x53415645UL
-+
-+#define SVA_EM_LAST_ERROR (-(SVA_EM_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EM_FIRST_INFO (+((SVA_DP_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_MM_LAST_ERROR (-(SVA_MM_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_MM_FIRST_INFO (+((SVA_MM_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_BM_LAST_ERROR (-(SVA_BM_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_BM_FIRST_INFO (+((SVA_BM_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_BLM_LAST_ERROR (-(SVA_BLM_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_BLM_FIRST_INFO (+((SVA_BLM_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_TM_LAST_ERROR (-(SVA_TM_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_TM_FIRST_INFO (+((SVA_TM_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_FM_LAST_ERROR (-(SVA_FM_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_FM_FIRST_INFO (+((SVA_FM_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_TI_LAST_ERROR (-(SVA_TI_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_TI_FIRST_INFO (+((SVA_TI_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_FF_LAST_ERROR (-(SVA_FF_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_FF_FIRST_INFO (+((SVA_FF_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_IN_LAST_ERROR (-(SVA_IN_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_IN_FIRST_INFO (+((SVA_IN_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_SV_LAST_ERROR (-(SVA_SV_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_SV_FIRST_INFO (+((SVA_SV_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_DP_LAST_ERROR (-(SVA_DP_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_DP_FIRST_INFO (+((SVA_DP_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_DC_LAST_ERROR (-(SVA_DC_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_DC_FIRST_INFO (+((SVA_DC_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_EC_LAST_ERROR (-(SVA_EC_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EC_FIRST_INFO (+((SVA_EC_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_GB_LAST_ERROR (-(SVA_GB_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_GB_FIRST_INFO (+((SVA_GB_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_DC_ERC_LAST_ERROR (-(SVA_DC_ERC_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_DC_ERC_FIRST_INFO (+((SVA_DC_ERC_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_DC_MP4_LAST_ERROR (-(SVA_DC_MP4_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_DC_MP4_FIRST_INFO (+((SVA_DC_MP4_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_DC_H263_LAST_ERROR (-(SVA_DC_H263_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_DC_H263_FIRST_INFO (+((SVA_DC_H263_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_DC_H264_LAST_ERROR (-(SVA_DC_H264_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_DC_H264_FIRST_INFO (+((SVA_DC_H264_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+
-+#define SVA_EC_BRC_LAST_ERROR (-(SVA_EC_BRC_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EC_BRC_FIRST_INFO (+((SVA_EC_BRC_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_EC_MP4_LAST_ERROR (-(SVA_EC_MP4_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EC_MP4_FIRST_INFO (+((SVA_EC_MP4_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_EC_H263_LAST_ERROR (-(SVA_EC_H263_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EC_H263_FIRST_INFO (+((SVA_EC_H263_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_EC_H264_LAST_ERROR (-(SVA_EC_H264_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EC_H264_FIRST_INFO (+((SVA_EC_H264_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_EC_STAB_LAST_ERROR (-(SVA_EC_STAB_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_EC_STAB_FIRST_INFO (+((SVA_EC_STAB_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_SEC_JPEG_LAST_ERROR (-(SVA_SEC_JPEG_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_SEC_JPEG_FIRST_INFO (+((SVA_SEC_JPEG_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_SEC_LAST_ERROR (-(SVA_SEC_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_SEC_FIRST_INFO (+((SVA_SEC_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+#define SVA_TV_LAST_ERROR (-(SVA_TV_ID * SVA_MODULE_ERROR_RANGE))
-+#define SVA_TV_FIRST_ERROR (+((SVA_TV_ID - 1) * SVA_MODULE_ERROR_RANGE))
-+
-+/******************************************************************************/
-+/* Types definitions */
-+/******************************************************************************/
-+
-+#ifdef __cplusplus
-+} /* allow C++ to use these headers */
-+#endif /* __cplusplus */
-+
-+#endif /* __INC_SVAP_H */
-+/* End of file - hvP.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_service.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_service.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_service.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_service.h 2008-07-17 16:44:26.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_service.h
@@ -0,0 +1,337 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -109740,9 +110304,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_service.h
+
+#endif /* __INC_SVA_SERVICE_H */
+/* End of file - SVA.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_stab.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_stab.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_stab.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_stab.h 2008-07-17 16:44:26.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_stab.h
@@ -0,0 +1,89 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -109833,9 +110396,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_stab.h ..
+
+#endif /* __INC_SVA_STAB_H */
+/* End of file - sva_stab.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_still_decode.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_still_decode.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_still_decode.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_still_decode.h 2008-07-17 16:44:27.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_still_decode.h
@@ -0,0 +1,111 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -109948,9 +110510,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_still_dec
+
+#endif/* __INC_SVA_STILLDECODE_H */
+/* End of file - sva_still_decode.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_still_encode.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_still_encode.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_still_encode.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_still_encode.h 2008-07-17 16:44:27.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_still_encode.h
@@ -0,0 +1,96 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -110048,9 +110609,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_still_enc
+#endif /* __cplusplus */
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_taskmgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_taskmgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_taskmgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_taskmgt.h 2008-07-17 16:44:27.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_taskmgt.h
@@ -0,0 +1,403 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -110455,9 +111015,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_taskmgt.h
+#endif /* __INC_SVA_TASKMGT_H */
+/* End of file - sva_taskmgt.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_timemgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_timemgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_timemgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_timemgt.h 2008-07-17 16:44:28.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_timemgt.h
@@ -0,0 +1,80 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -110539,9 +111098,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_timemgt.h
+
+#endif /* __INC_SVA_TI_H */
+/* End of file - sva_timemgt.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_tvo.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_tvo.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_tvo.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_tvo.h 2008-07-17 16:44:28.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_tvo.h
@@ -0,0 +1,89 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -110632,9 +111190,204 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/sva_tvo.h ../
+
+#endif /* __INC_SVA_TVO_H */
+/* End of file - sva_tvo.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/t1xhv_host_interface.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/t1xhv_host_interface.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/t1xhv_host_interface.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/t1xhv_host_interface.h 2008-07-17 16:44:29.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/svap.h
+@@ -0,0 +1,193 @@
++/*---------------------------------------------------------------------------*/
++/* © copyright STMicroelectronics, 2007. All rights reserved. For */
++/* information, STMicroelectronics reserves the right to license this */
++/* software concurrently under separate license conditions. */
++/* */
++/* 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, see <http://www.gnu.org/licenses/>. */
++/*---------------------------------------------------------------------------*/
++
++#ifndef __INC_SVAP_H
++#define __INC_SVAP_H
++
++#include "hcl_defs.h"
++
++/******************************************************************************/
++/* Constants definitions */
++/******************************************************************************/
++/*
++ * Define various conditonnal compilation flags in order to include or not any SW workarounds
++ */
++/*#define WORK_AROUND_AHB*/
++
++/*
++ * Define the maximum number of error defined per module
++ */
++#define SVA_MODULE_ERROR_RANGE 0x20
++
++/*
++ * Define an Id related to each module of the SVA HCL
++ * The Id = 1 is reserved for SVA HCL itself
++ */
++typedef enum {
++ SVA_EM_ID = 2, /* Events Mgt */
++ SVA_MM_ID, /* Memory Mgt */
++ SVA_BM_ID, /* Buffers Mgt */
++ SVA_BLM_ID, /* Buffers ListMgt */
++ SVA_TM_ID, /* Tasks Mgt */
++ SVA_FM_ID, /* Firmware Mgt */
++ SVA_TI_ID, /* Time Mgt */
++ SVA_VP_ID, /* Video Pipeline */
++ SVA_FF_ID, /* FIFO macros */
++ SVA_IN_ID, /* Internal Needs Mgt */
++ SVA_SV_ID, /* Common Service */
++ SVA_DP_ID, /* Display Service */
++ SVA_DC_ID, /* Decode Service */
++ SVA_EC_ID, /* Encode Service */
++ SVA_GB_ID, /* Grab Service */
++ SVA_DC_ERC_ID, /* Decode Error Concealment */
++ SVA_DC_MP4_ID, /* Decode MPEG4 Algo */
++ SVA_DC_H263_ID, /* Decode H263 Algo */
++ SVA_DC_H264_ID, /* Decode H263 Algo */
++ SVA_EC_BRC_ID, /* Encode Bit Rate Control */
++ SVA_EC_MP4_ID, /* Encode MPEG4 Algo */
++ SVA_EC_H263_ID, /* Encode H263 Algo */
++ SVA_EC_H264_ID, /* Encode H264 Algo */
++ SVA_EC_STAB_ID, /* Encode Stabilization */
++ SVA_SEC_JPEG_ID, /* Still Encode JPEG ALgo */
++ SVA_SEC_ID, /* still Encode service */
++ SVA_TV_ID /* TVO Service */
++} sva_module_id;
++
++/* ************************** CONFIGURATION PART ************************** */
++
++
++//typedef t_uint32 t_sva_fw_id;
++
++
++typedef struct {
++ t_uint32 cfg_psa; /* Subtask parameter Start Address register */
++ t_uint32 cfg_pea; /* Subtask parameter Stop Address register */
++ t_uint32 cfg_ice; /* Idle Cycle Enable register */
++ t_uint32 cfg_csc; /* CCP synchronization codes register */
++ t_uint32 cfg_cgc; /* clock gating control register */
++ t_uint32 cfg_irp_fw_addr; /* start address eWarp firmware */
++ t_uint32 cfg_irp_fw_size; /* size in bytes of eWarp firmware */
++ t_uint32 cfg_irp_rw; /* status of the current rw operation */
++ t_uint32 cfg_irp_error; /* error code */
++ t_uint32 cfg_irp_bs; /* start of circular buffer for rw packet */
++ t_uint32 cfg_irp_be; /* end of circular buffer for rw packet */
++ t_uint32 cfg_irp_ptr; /* ptr of circular buffer for rw packet */
++ t_uint32 cfg_clk; /* Clock generation register */
++ t_uint32 ckg_cken; /* added*/
++ t_uint32 cfg_tim; /* Timer Initialization value register */
++ t_uint32 cfg_iis; /* IRQ1 Interrupt Status register */
++ t_uint32 cfg_isr; /* Global Interrupt status register */
++ t_uint32 cfg_imr; /* Global Interrupt mask register */
++// t_uint32 wasDeepSleepEntered;
++ t_uint32 temp_idn_frv;
++ t_uint32 fwId;
++ t_uint32 sva_context_magic_number;
++} t_sva_config_regs_mapping1;
++
++#define SVA_CONTEXT_MAGIC_NUMBER 0x53415645UL
++
++#define SVA_EM_LAST_ERROR (-(SVA_EM_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EM_FIRST_INFO (+((SVA_DP_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_MM_LAST_ERROR (-(SVA_MM_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_MM_FIRST_INFO (+((SVA_MM_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_BM_LAST_ERROR (-(SVA_BM_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_BM_FIRST_INFO (+((SVA_BM_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_BLM_LAST_ERROR (-(SVA_BLM_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_BLM_FIRST_INFO (+((SVA_BLM_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_TM_LAST_ERROR (-(SVA_TM_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_TM_FIRST_INFO (+((SVA_TM_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_FM_LAST_ERROR (-(SVA_FM_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_FM_FIRST_INFO (+((SVA_FM_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_TI_LAST_ERROR (-(SVA_TI_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_TI_FIRST_INFO (+((SVA_TI_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_FF_LAST_ERROR (-(SVA_FF_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_FF_FIRST_INFO (+((SVA_FF_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_IN_LAST_ERROR (-(SVA_IN_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_IN_FIRST_INFO (+((SVA_IN_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_SV_LAST_ERROR (-(SVA_SV_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_SV_FIRST_INFO (+((SVA_SV_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_DP_LAST_ERROR (-(SVA_DP_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_DP_FIRST_INFO (+((SVA_DP_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_DC_LAST_ERROR (-(SVA_DC_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_DC_FIRST_INFO (+((SVA_DC_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_EC_LAST_ERROR (-(SVA_EC_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EC_FIRST_INFO (+((SVA_EC_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_GB_LAST_ERROR (-(SVA_GB_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_GB_FIRST_INFO (+((SVA_GB_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_DC_ERC_LAST_ERROR (-(SVA_DC_ERC_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_DC_ERC_FIRST_INFO (+((SVA_DC_ERC_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_DC_MP4_LAST_ERROR (-(SVA_DC_MP4_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_DC_MP4_FIRST_INFO (+((SVA_DC_MP4_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_DC_H263_LAST_ERROR (-(SVA_DC_H263_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_DC_H263_FIRST_INFO (+((SVA_DC_H263_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_DC_H264_LAST_ERROR (-(SVA_DC_H264_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_DC_H264_FIRST_INFO (+((SVA_DC_H264_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++
++#define SVA_EC_BRC_LAST_ERROR (-(SVA_EC_BRC_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EC_BRC_FIRST_INFO (+((SVA_EC_BRC_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_EC_MP4_LAST_ERROR (-(SVA_EC_MP4_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EC_MP4_FIRST_INFO (+((SVA_EC_MP4_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_EC_H263_LAST_ERROR (-(SVA_EC_H263_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EC_H263_FIRST_INFO (+((SVA_EC_H263_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_EC_H264_LAST_ERROR (-(SVA_EC_H264_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EC_H264_FIRST_INFO (+((SVA_EC_H264_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_EC_STAB_LAST_ERROR (-(SVA_EC_STAB_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_EC_STAB_FIRST_INFO (+((SVA_EC_STAB_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_SEC_JPEG_LAST_ERROR (-(SVA_SEC_JPEG_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_SEC_JPEG_FIRST_INFO (+((SVA_SEC_JPEG_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_SEC_LAST_ERROR (-(SVA_SEC_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_SEC_FIRST_INFO (+((SVA_SEC_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++#define SVA_TV_LAST_ERROR (-(SVA_TV_ID * SVA_MODULE_ERROR_RANGE))
++#define SVA_TV_FIRST_ERROR (+((SVA_TV_ID - 1) * SVA_MODULE_ERROR_RANGE))
++
++/******************************************************************************/
++/* Types definitions */
++/******************************************************************************/
++
++#ifdef __cplusplus
++} /* allow C++ to use these headers */
++#endif /* __cplusplus */
++
++#endif /* __INC_SVAP_H */
++/* End of file - hvP.h */
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/t1xhv_host_interface.h
@@ -0,0 +1,1725 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -112361,9 +113114,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/t1xhv_host_in
+#endif /* _T1XHV_HOST_INTERFACE_H_ */
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/t1xhv_retarget.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/t1xhv_retarget.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/t1xhv_retarget.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/t1xhv_retarget.h 2008-07-17 16:44:31.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/t1xhv_retarget.h
@@ -0,0 +1,41 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -112406,9 +113158,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/include/t1xhv_retarge
+#endif /* _T1XSVA_RETARGET_H_ */
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgt.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgt.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgt.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgt.c 2008-07-17 16:44:12.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgt.c
@@ -0,0 +1,541 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -112951,9 +113702,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva
+
+
+// End of file - sva_bufferlistmgt.c
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgt.h 2008-07-17 16:44:13.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgt.h
@@ -0,0 +1,87 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -113042,9 +113792,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva
+#endif /* __INC_SVA_BUFFERLISTMGT_H */
+// End of file - sva_bufferlistmgt.h
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgtp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgtp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgtp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgtp.h 2008-07-17 16:44:13.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_bufferlistmgtp.h
@@ -0,0 +1,73 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -113119,9 +113868,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva
+
+#endif /* __INC_SVA_BLM_P_H */
+/* End of file - sva_bufferlistmgtp.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgt.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgt.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgt.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgt.c 2008-07-17 16:44:14.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgt.c
@@ -0,0 +1,1212 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -114335,9 +115083,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva
+} /* End of sva_BM_SetBuferLinkInformation() function. */
+
+/* End of file - sva_buffermgt.c */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgt.h 2008-07-17 16:44:15.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgt.h
@@ -0,0 +1,111 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -114450,9 +115197,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva
+
+#endif /* __INC_SVA_BM_H */
+/* End of file - sva_bufferMgt.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgtp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgtp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgtp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgtp.h 2008-07-17 16:44:15.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_buffermgtp.h
@@ -0,0 +1,83 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -114537,9 +115283,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva
+
+#endif /* __INC_SVA_BM_P_H */
+/* End of file - sva_buffermgtp.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgt.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgt.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgt.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgt.c 2008-07-17 16:44:16.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgt.c
@@ -0,0 +1,1578 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -116119,9 +116864,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva
+/* End of file: sva_memoryMgt.c */
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgt.h 2008-07-17 16:44:17.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgt.h
@@ -0,0 +1,163 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -116286,9 +117030,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva
+
+#endif /* __INC_HV_MM_H */
+/* End of file - sva_memorymgt.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgtp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgtp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgtp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgtp.h 2008-07-17 16:44:17.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva_memorymgtp.h
@@ -0,0 +1,105 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -116395,9 +117138,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/memory_management/sva
+
+#endif /* __INC_SVA_MM_P_H */
+/* End of file - sva_memorymgtp.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservice.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservice.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservice.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservice.h 2008-07-17 16:44:10.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservice.h
@@ -0,0 +1,62 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -116461,9 +117203,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_managemen
+} t_sva_open_service_methods;
+
+#endif /* __INC_OPENSERVICE_H */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgt.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgt.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgt.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgt.c 2008-07-17 16:44:10.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgt.c
@@ -0,0 +1,620 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -117085,9 +117826,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_managemen
+}
+
+// End of file - sva_openservicemgt.c
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgt.h 2008-07-17 16:44:11.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgt.h
@@ -0,0 +1,71 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -117160,9 +117900,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_managemen
+
+#endif /* __INC_HV_FM_H */
+/* End of file - hv_fwMgt.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgtp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgtp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgtp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgtp.h 2008-07-17 16:44:11.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_management/sva_openservicemgtp.h
@@ -0,0 +1,56 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -117220,9 +117959,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/openservice_managemen
+
+#endif /* __INC_SVA_ENCODEP_H */
+/* End of file - sva_encodep.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.c 2008-07-17 16:44:05.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.c
@@ -0,0 +1,2855 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -120079,9 +120817,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.c ../ne
+
+ return SVA_OK;
+}
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.h 2008-07-17 16:44:06.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.h
@@ -0,0 +1,89 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -120172,9 +120909,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stab.h ../ne
+
+#endif /* __INC_SVA_STAB_H */
+/* End of file - sva_stab.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stabp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stabp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stabp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stabp.h 2008-07-17 16:44:07.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stabp.h
@@ -0,0 +1,284 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -120460,9 +121196,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/stab/sva_stabp.h ../n
+
+#endif /* __INC_SVA_STABP_H */
+/* End of file - sva_stabp.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpeg.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpeg.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpeg.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpeg.c 2008-07-17 16:44:08.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpeg.c
@@ -0,0 +1,1047 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -121511,9 +122246,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva
+}
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpeg.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpeg.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpeg.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpeg.h 2008-07-17 16:44:08.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpeg.h
@@ -0,0 +1,70 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -121585,9 +122319,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva
+
+#endif /* __INC_SVA_SEC_JPEG_H */
+/* End of file - sva_sec_jpeg.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpegp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpegp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpegp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpegp.h 2008-07-17 16:44:09.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva_sdc_jpegp.h
@@ -0,0 +1,74 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -121663,9 +122396,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/jpeg/sva
+
+#endif /* __INC_SVA_SDC_JPEGP_H */
+/* End of file - sva_sdc_jpegp.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_sdc_algo.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_sdc_algo.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_sdc_algo.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_sdc_algo.h 2008-07-17 16:44:01.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_sdc_algo.h
@@ -0,0 +1,96 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -121763,9 +122495,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_sdc_
+
+#endif /* __INC_SVA_SEC_ALGO_H */
+/* End of file - sva_sec_algo.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decode.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decode.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decode.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decode.c 2008-07-17 16:44:02.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decode.c
@@ -0,0 +1,3174 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -124941,9 +125672,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_stil
+}
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decode.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decode.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decode.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decode.h 2008-07-17 16:44:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decode.h
@@ -0,0 +1,111 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -125056,9 +125786,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_stil
+
+#endif/* __INC_SVA_STILLDECODE_H */
+/* End of file - sva_still_decode.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decodep.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decodep.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decodep.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decodep.h 2008-07-17 16:44:04.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_still_decodep.h
@@ -0,0 +1,267 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -125327,9 +126056,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_decode/sva_stil
+
+#endif /* __INC_SVA_STILLDECODEP_H */
+/* End of file - sva_still_decodep.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpeg.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpeg.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpeg.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpeg.c 2008-07-17 16:43:59.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpeg.c
@@ -0,0 +1,682 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -126013,9 +126741,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva
+
+/* End of file - sva_sec_jpeg.c */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpeg.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpeg.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpeg.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpeg.h 2008-07-17 16:44:00.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpeg.h
@@ -0,0 +1,63 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -126080,9 +126807,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva
+
+#endif /* __INC_SVA_SEC_JPEG_H */
+/* End of file - sva_sec_jpeg.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpegp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpegp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpegp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpegp.h 2008-07-17 16:44:00.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva_sec_jpegp.h
@@ -0,0 +1,62 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -126146,9 +126872,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/jpeg/sva
+
+#endif /* __INC_SVA_SEC_JPEGP_H */
+/* End of file - sva_sec_jpegp.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_sec_algo.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_sec_algo.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_sec_algo.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_sec_algo.h 2008-07-17 16:43:56.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_sec_algo.h
@@ -0,0 +1,152 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -126302,9 +127027,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_sec_
+
+#endif /* __INC_SVA_SEC_ALGO_H */
+/* End of file - sva_sec_algo.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encode.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encode.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encode.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encode.c 2008-07-17 16:43:56.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encode.c
@@ -0,0 +1,3752 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -130058,9 +130782,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_stil
+ return SVA_SEC_OK;
+}
+*/
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encode.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encode.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encode.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encode.h 2008-07-17 16:43:58.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encode.h
@@ -0,0 +1,96 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -130158,9 +130881,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_stil
+#endif /* __cplusplus */
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encodep.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encodep.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encodep.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encodep.h 2008-07-17 16:43:58.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_still_encodep.h
@@ -0,0 +1,248 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -130410,9 +131132,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/still_encode/sva_stil
+
+#endif /* __INC_SVA_STILLENCODEP_H */
+/* End of file - sva_stillencodep.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/sva.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/sva.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/sva.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/sva.c 2008-07-17 16:43:46.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/sva.c
@@ -0,0 +1,1827 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -132241,9 +132962,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/sva.c ../new/linux-2.
+ return status;
+}
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/sva.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/sva.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/sva.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/sva.h 2008-07-17 16:43:47.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/sva.h
@@ -0,0 +1,2148 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -134393,9 +135113,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/sva.h ../new/linux-2.
+
+#endif /* __INC_SVA_H */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgt.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgt.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgt.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgt.c 2008-07-17 16:43:50.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgt.c
@@ -0,0 +1,1701 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -136098,9 +136817,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_
+
+
+// End of file - sva_hwtaskmgt.c
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgt.h 2008-07-17 16:43:51.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgt.h
@@ -0,0 +1,93 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -136195,9 +136913,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_
+
+#endif /* __INC_SVA_HW_TASKMGT_H */
+/* End of file - sva_hwtaskmgt.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgtp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgtp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgtp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgtp.h 2008-07-17 16:43:52.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_hwtaskmgtp.h
@@ -0,0 +1,134 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -136333,9 +137050,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_
+
+#endif /* __INC_SVA_HW_TASKMGTP_H */
+/* End of file - sva_hwtaskmgtp.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgt.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgt.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgt.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgt.c 2008-07-17 16:43:52.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgt.c
@@ -0,0 +1,3573 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -139910,9 +140626,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_
+
+// End of file - sva_taskmgt.c
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgt.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgt.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgt.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgt.h 2008-07-17 16:43:54.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgt.h
@@ -0,0 +1,403 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -140317,9 +141032,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_
+#endif /* __INC_SVA_TASKMGT_H */
+/* End of file - sva_taskmgt.h */
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgtp.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgtp.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgtp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgtp.h 2008-07-17 16:43:55.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskmgtp.h
@@ -0,0 +1,359 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -140680,9 +141394,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_
+
+#endif /* __INC_SVA_TASKMGTP_H */
+/* End of file - hv.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskschl.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskschl.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskschl.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskschl.c 2008-07-17 16:43:55.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_taskschl.c
@@ -0,0 +1,19 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -140703,9 +141416,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tasks_management/sva_
+/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
+/*---------------------------------------------------------------------------*/
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.c ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.c
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.c 2008-07-17 16:43:48.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.c
@@ -0,0 +1,2478 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -143185,9 +143897,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.c ../new/
+
+ return SVA_OK;
+}
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.h 2008-07-17 16:43:49.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.h
@@ -0,0 +1,89 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -143278,9 +143989,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvo.h ../new/
+
+#endif /* __INC_SVA_TVO_H */
+/* End of file - sva_tvo.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvop.h ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvop.h
---- linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvop.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvop.h 2008-07-17 16:43:50.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvop.h
@@ -0,0 +1,278 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -143560,48 +144270,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/hcl/sva/tvo/sva_tvop.h ../new
+
+#endif /* __INC_SVA_TVOP_H */
+/* End of file - sva_tvop.h */
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/Kconfig ../new/linux-2.6.20/drivers/media/nomadik_mm/Kconfig
---- linux-2.6.20/drivers/media/nomadik_mm/Kconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/Kconfig 2008-10-06 12:06:22.000000000 +0530
-@@ -0,0 +1,23 @@
-+#
-+# Nomadik Multimedia Audio/Video device configuration
-+#
-+
-+menu "NOMADIK Audio Video Graphic Drivers(SAA SVA and OPENGL) "
-+
-+config NOMADIK_SAA
-+ tristate "Nomadik SAA Support"
-+ depends on ARCH_NOMADIK && NOMADIK_MSP && I2C_NOMADIK
-+ ---help---
-+ Support for Nomadik SAA DSP
-+
-+config NOMADIK_SVA
-+ tristate "Nomadik SVA Support"
-+ depends on ARCH_NOMADIK && VIDEO_V4L2 && I2C_NOMADIK
-+ ---help---
-+ Support for Nomadik SVA DSP
-+
-+config NOMADIK_OGL
-+ tristate "Nomadik OGL Support"
-+ ---help---
-+ Support for Nomadik OGL DSP
-+endmenu
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/Makefile ../new/linux-2.6.20/drivers/media/nomadik_mm/Makefile
---- linux-2.6.20/drivers/media/nomadik_mm/Makefile 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/Makefile 2008-10-06 12:06:21.000000000 +0530
-@@ -0,0 +1,8 @@
-+#
-+# Makefile for the kernel multimedia device drivers.
-+#kefile for the kernel multimedia device drivers.
-+#
-+
-+obj-$(CONFIG_NOMADIK_SAA) += saa/
-+obj-$(CONFIG_NOMADIK_SVA) += sva/
-+obj-$(CONFIG_NOMADIK_OGL) += opengl/
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/opengl/Makefile ../new/linux-2.6.20/drivers/media/nomadik_mm/opengl/Makefile
---- linux-2.6.20/drivers/media/nomadik_mm/opengl/Makefile 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/opengl/Makefile 2008-10-07 12:20:08.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/opengl/Makefile
@@ -0,0 +1,18 @@
+KERNEL_PATH=./../../linux-2.6.20
+EXTRA_CFLAGS_NAME = $(shell echo $(CONFIG_NOMADIK_TARGET_EXTRA_CFLAGS))
@@ -143621,9 +144291,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/opengl/Makefile ../new/linux-
+
+clean :
+ $(MAKE) -C ../../linux-2.6.20 M=`pwd` clean; rm -f $(hloader_obj)
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl.c ../new/linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl.c
---- linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl.c 2008-11-24 14:06:32.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl.c
@@ -0,0 +1,565 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -144190,9 +144859,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl.c ../new/linux-2.6
+
+module_init(nomadik_ogles_init);
+module_exit(nomadik_ogles_exit);
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl.h ../new/linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl.h
---- linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl.h 2008-10-07 12:20:09.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl.h
@@ -0,0 +1,65 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -144259,9 +144927,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl.h ../new/linux-2.6
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Jayarami reddy <jayarami.reddy@stnwireless.com>");
+MODULE_DESCRIPTION(" This module is a OGLES module !!");
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl_ioctl.h ../new/linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl_ioctl.h
---- linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl_ioctl.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl_ioctl.h 2008-10-07 12:20:28.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl_ioctl.h
@@ -0,0 +1,56 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -144319,17 +144986,16 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/opengl/ogl_ioctl.h ../new/lin
+MODULE_DESCRIPTION(" This module is a OGLES module !!");
+
+#endif //OGL_IOCTL_H
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/Makefile ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/Makefile
---- linux-2.6.20/drivers/media/nomadik_mm/saa/Makefile 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/Makefile 2008-08-12 22:56:07.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/saa/Makefile
@@ -0,0 +1,20 @@
+#KERNEL_PATH := ../../../../../linux-2.6.20
+EXTRA_CFLAGS_NAME = $(shell echo $(CONFIG_NOMADIK_TARGET_EXTRA_CFLAGS))
+EXTRA_CFLAGS := $(EXTRA_CFLAGS_NAME) -D__arm -I$(src)/ -I$(src)/../hcl/include/ -I$(src)/../hcl/saa/ -I$(src)/../hcl/hloader/
+#
+#all:
-+# $(MAKE) -C $(KERNEL_PATH) M=`pwd`
-+#
++# $(MAKE) -C $(KERNEL_PATH) M=`pwd`
++#
+#
+obj-$(CONFIG_NOMADIK_SAA) += nmdkmod_SAA.o nmdkmod_fwload.o
+
@@ -144343,9 +145009,83 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/Makefile ../new/linux-2.6
+
+#clean :
+# $(MAKE) -C $(KERNEL_PATH) M=`pwd` clean; rm ../hcl/saa/*.o ../hcl/hloader/*.o
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.c ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.c
---- linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.c 2008-07-17 16:42:49.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/saa/README
+@@ -0,0 +1,72 @@
++SAA driver Build
++*************************************************************
++
++SAA driver is built only as the external module.
++
++Path is : /vobs/ATS_8815_LINUX/Baseline/linux-2.6.20/drivers/media/nomadik_mm/saa
++do make in this folder. it will generate the nmdkmod_SAA.ko, nmdkmod_fwload.ko
++
++SAA driver depends on DMA, SSP, AUDIOCODEC , FWLOAD(to load firmware file) driver.
++Audiocodec driver depends on MSP and I2C.
++These driver should be compiled with kernel either as module or static as the case may be.
++These driver should be present at run time before inserting SAA driver.
++
++Audiocodec file is added as the sepearte entity in the
++kernel. Path is : "/vobs/ATS_8815_LINUX/Baseline/linux-2.6.20/sound/"
++for nhk15 file is "nomadik_stw5095.c"
++
++This module will export the functionality of nomadik stw5095 audiocodec
++to be used by the other drivers in the kernel. Presently both SAA and ALSA
++driver will use this module. To enable this module through make menuconfig, choose
++
++Device Drivers
++ -----> Sound
++ ------> Nomadik stw5095 audioc codec generic module
++
++This will make the module : $TOPDIR/sound/nmdkmod_acodec.ko
++
++
++Firmware file
++**************************************************************
++
++The firmware file required for SAA driver can be found at the path :
++/vobs/ATS_8815_LINUX/Baseline/firmware/saa/saa.mmf ( for NHK15 )
++
++This file must be put in the ramdisk at the path specified in the fwload application "exe_fwload"
++ that is "/modules/" etc.
++
++How to load SAA Driver
++**************************************************************
++
++One can use the following commands to load SAA driver:
++
++1) mkdir -p /dev/misc
++2) mknod /dev/misc/hamaca c 10 230 ( this will create the device node - SAA )
++3) mknod /dev/misc/fw_load c 10 231 ( this will create the device node - FWLOAD )
++4) insmod /modules/nmdkmod_fwload.ko
++5) insmod /modules/nmdkmod_SAA.ko
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.c
@@ -0,0 +1,229 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -144490,7 +145230,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.c ../new/l
+ fw_desc->fw_ptr = vmalloc(size);
+ if(!fw_desc->fw_ptr) {
+ printk("Error in vmalloc\n");
-+ return 0; /*Zero bytes written*/
++ return 0; /*Zero bytes written*/
+ }
+ else
+ DBG(1, "Success: vmalloc\n");
@@ -144504,7 +145244,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.c ../new/l
+
+ up(&fw_desc->sem);
+ complete(&fw_desc->completion);
-+
++
+ return fw_desc->fw_size;
+}
+
@@ -144538,13 +145278,13 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.c ../new/l
+ retval = -EINVAL;
+ goto out;
+ }
-+
++
+ down(&fw_desc->sem);
+ firmware->data = fw_desc->fw_ptr;
+ firmware->size = fw_desc->fw_size;
+ up(&fw_desc->sem);
+ kobject_put(&(fwload_miscdev.this_device->kobj));
-+
++
+ return 0;
+out:
+ if (firmware) {
@@ -144576,9 +145316,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.c ../new/l
+
+module_init(nomadik_fwload_init);
+module_exit(nomadik_fwload_exit);
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.h ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.h
---- linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.h 2008-07-17 16:42:49.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.h
@@ -0,0 +1,47 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -144597,7 +145336,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.h ../new/l
+/*along with this program. If not, see <http://www.gnu.org/licenses/>. */
+/*--------------------------------------------------------------------------------------------------*/
+
-+#ifndef _NOMADIK_FWLOAD_H
++#ifndef _NOMADIK_FWLOAD_H
+#define _NOMADIK_FWLOAD_H
+
+/* Debugging stuff */
@@ -144615,10 +145354,10 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.h ../new/l
+#define DBG(n, args...) do { } while (0)
+#endif
+
-+struct fwload_descriptor
++struct fwload_descriptor
+{
+ struct semaphore sem;
-+ char *fw_ptr;
++ char *fw_ptr;
+ size_t fw_size;
+ struct completion completion;
+};
@@ -144627,9 +145366,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-fwload.h ../new/l
+int relfw_pointer(const struct firmware *fw_p);
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c
---- linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c 2008-11-24 14:06:25.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c
@@ -0,0 +1,4406 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -144718,7 +145456,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c ../new/linu
+#define SAA_HCL_UNLOCK(flags) spin_unlock_irqrestore(&saa_hcl_lock,flags)
+
+//warning removal
-+extern void l210_flush_range(unsigned long, unsigned long);
++extern void l210_flush_range(unsigned long, unsigned long);
+
+static t_uint32 saa_convert_dsptoarm_address(t_uint32 dsp_address)
+{
@@ -148354,8 +149092,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c ../new/linu
+ logical_addr = (t_uint32) saa_get_logical_address();
+ physical_addr = (t_uint32) saa_get_physical_address();
+#else
-+#ifndef NOMADIK_MM_STATIC_MEM
-+ /* allocate memory for Program + Data16 static & dynamic + Data24 static & dynamic*/
++#ifndef NOMADIK_MM_STATIC_MEM
++ /* allocate memory for Program + Data16 static & dynamic + Data24 static & dynamic*/
+ //printk("\nKernel Allocating Memory for Firmware");
+ logical_addr = (t_uint32) dma_alloc_coherent(NULL, FWM_SDRAM_ALLOCATED_SIZE ,
+ &physical_addr,GFP_KERNEL | GFP_DMA);
@@ -148894,14 +149632,14 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c ../new/linu
+
+#ifndef CONFIG_NOMADIK_SAA_INIT_MEM
+#ifndef NOMADIK_MM_STATIC_MEM
-+ //printk("\nFreeing FW Memory");
++ //printk("\nFreeing FW Memory");
+ if(dram_logical_addr)
+ dma_free_coherent(NULL,FWM_SDRAM_ALLOCATED_SIZE,(void*)dram_logical_addr,dram_physical_addr);
+#else
+ //printk("\n Unmappping FW Memory");
+ if(saa_desc->fw_logical_addr)
+ iounmap((void*)saa_desc->fw_logical_addr);
-+
++
+#endif
+#endif
+
@@ -149037,9 +149775,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c ../new/linu
+
+module_init(nomadik_saa_init);
+module_exit(nomadik_saa_exit);
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.h ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.h
---- linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.h 2008-10-06 12:06:21.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.h
@@ -0,0 +1,204 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -149245,85 +149982,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.h ../new/linu
+#endif /* _NOMADIK-SAA_H_*/
+
+/* End of file nomadik-saa.h*/
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/README ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/README
---- linux-2.6.20/drivers/media/nomadik_mm/saa/README 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/README 2008-07-17 16:43:15.000000000 +0530
-@@ -0,0 +1,72 @@
-+SAA driver Build
-+*************************************************************
-+
-+SAA driver is built only as the external module.
-+
-+Path is : /vobs/ATS_8815_LINUX/Baseline/linux-2.6.20/drivers/media/nomadik_mm/saa
-+do make in this folder. it will generate the nmdkmod_SAA.ko, nmdkmod_fwload.ko
-+
-+SAA driver depends on DMA, SSP, AUDIOCODEC , FWLOAD(to load firmware file) driver.
-+Audiocodec driver depends on MSP and I2C.
-+These driver should be compiled with kernel either as module or static as the case may be.
-+These driver should be present at run time before inserting SAA driver.
-+
-+Audiocodec file is added as the sepearte entity in the
-+kernel. Path is : "/vobs/ATS_8815_LINUX/Baseline/linux-2.6.20/sound/"
-+for nhk15 file is "nomadik_stw5095.c"
-+
-+This module will export the functionality of nomadik stw5095 audiocodec
-+to be used by the other drivers in the kernel. Presently both SAA and ALSA
-+driver will use this module. To enable this module through make menuconfig, choose
-+
-+Device Drivers
-+ -----> Sound
-+ ------> Nomadik stw5095 audioc codec generic module
-+
-+This will make the module : $TOPDIR/sound/nmdkmod_acodec.ko
-+
-+
-+Firmware file
-+**************************************************************
-+
-+The firmware file required for SAA driver can be found at the path :
-+/vobs/ATS_8815_LINUX/Baseline/firmware/saa/saa.mmf ( for NHK15 )
-+
-+This file must be put in the ramdisk at the path specified in the fwload application "exe_fwload"
-+ that is "/modules/" etc.
-+
-+How to load SAA Driver
-+**************************************************************
-+
-+One can use the following commands to load SAA driver:
-+
-+1) mkdir -p /dev/misc
-+2) mknod /dev/misc/hamaca c 10 230 ( this will create the device node - SAA )
-+3) mknod /dev/misc/fw_load c 10 231 ( this will create the device node - FWLOAD )
-+4) insmod /modules/nmdkmod_fwload.ko
-+5) insmod /modules/nmdkmod_SAA.ko
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h
---- linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h 2008-07-17 16:42:51.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h
@@ -0,0 +1,498 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -149380,9 +150040,9 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h ../new/linux-2
+*******************************************************************/
+
+typedef t_saa_block_id saa_block_id;
-+typedef t_saa_block_type saa_block_type;
++typedef t_saa_block_type saa_block_type;
+typedef t_saa_port_type saa_port_type;
-+typedef t_saa_port_data_type saa_port_data_type ;
++typedef t_saa_port_data_type saa_port_data_type ;
+typedef t_saa_endianess_type saa_endianess_type;
+typedef t_saa_sample_channel_nb saa_sample_channel_nb;
+typedef t_saa_sample_interleaving_type saa_sample_interleaving_type;
@@ -149431,7 +150091,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h ../new/linux-2
+ unsigned char mix_with_playback;
+ saa_codec_tone_wave waveShape;
+ unsigned long* reserved2;
-+
++
+} saa_codec_tonegenerator_struct;
+
+/* audiocodec frequnecy setting structure */
@@ -149477,7 +150137,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h ../new/linux-2
+ t_uint16 buffer_size;
+ t_uint32 buffer_address;
+ t_uint32 avzone_address;
-+ saa_dma_config dma_conf;
++ saa_dma_config dma_conf;
+} saa_dma_configuration_struct;
+
+typedef struct {
@@ -149540,7 +150200,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h ../new/linux-2
+ codec_msp_srg_clock_sel_type msp_clock_sel;
+ codec_msp_in_clock_freq_type msp_clock_freq;
+ saa_block_id block_id;
-+
++
+} saa_msp_connect_struct ;
+
+/* SSP hierarchy (master/slave) */
@@ -149688,7 +150348,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h ../new/linux-2
+ t_uint32 count;
+ t_uint32 address;
+ saa_sample_freq freq;
-+
++
+} saa_samplecount_struct ;
+
+/* Version strcut of saa and saa-hcl */
@@ -149765,7 +150425,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h ../new/linux-2
+/* SAA IOCTL */
+
+#define SAAIOCTL_SERVERBLOCKCREATE _IOWR('S', 1, saa_create_block_struct)
-+#define SAAIOCTL_SERVERBLOCKDELETE _IOR('S', 2, saa_block_id)
++#define SAAIOCTL_SERVERBLOCKDELETE _IOR('S', 2, saa_block_id)
+#define SAAIOCTL_SERVERPORTCREATE _IOWR('S', 3, saa_create_port_struct)
+#define SAAIOCTL_SERVERPORTDELETE _IOR('S', 4, saa_create_port_struct)
+#define SAAIOCTL_SERVERBLOCKFREEZE _IOR('S', 5, saa_block_id)
@@ -149780,7 +150440,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h ../new/linux-2
+#define SAAIOCTL_AEPINIT _IOR('S', 14, saa_aep_init)
+#define SAAIOCTL_AEPCOMPONENTCREATE _IOWR('S', 15, saa_AEP_Component_struct)
+#define SAAIOCTL_AEPCOMPONENTDELETE _IOR('S', 16, saa_AEP_Component_struct)
-+#define SAAIOCTL_AEPCOMPONENTCONNECT _IOR('S', 17, saa_AEP_Component_Connect_struct)
++#define SAAIOCTL_AEPCOMPONENTCONNECT _IOR('S', 17, saa_AEP_Component_Connect_struct)
+#define SAAIOCTL_AEPCOMPONENTDISCONNECT _IOR('S', 18, saa_AEP_Component_Connect_struct)
+#define SAAIOCTL_AEPCOMPONENTCONFIG _IOR('S', 19, saa_component_config)
+#define SAAIOCTL_SET_EOFSIZE _IOWR('S', 20, saa_set_eofsize)
@@ -149792,7 +150452,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h ../new/linux-2
+#define SAAIOCTL_TRANSFER_IO_BUFFER _IOR('S', 26, saa_xfer_iobuff_struct)
+#define SAAIOCTL_FLUSH_IO_BUFFER _IO('S', 27) /* not needed */
+#define SAAIOCTL_GET_TRANSFER_STATUS _IOWR('S', 28, saa_xfer_status_struct)
-+#define SAAIOCTL_UPDATE_NETWORK _IO('S', 29)
++#define SAAIOCTL_UPDATE_NETWORK _IO('S', 29)
+#define SAAIOCTL_START_NETWORK _IOR('S', 30, saa_flow_control_struct)
+#define SAAIOCTL_PAUSE_NETWORK _IOR('S', 31, saa_flow_control_struct)
+#define SAAIOCTL_UNPAUSE_NETWORK _IOR('S', 32, saa_flow_control_struct)
@@ -149823,17 +150483,16 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/saaioctl.h ../new/linux-2
+
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/Makefile ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/Makefile
---- linux-2.6.20/drivers/media/nomadik_mm/sva/Makefile 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/Makefile 2008-10-06 12:06:21.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/Makefile
@@ -0,0 +1,58 @@
+#KERNEL_PATH = /home/preetham/lastestlinux/linux-2.6.20
+#KERNEL_PATH:=../../../../../linux-2.6.20
+#NMDK_HCLDIR = /home/preetham/lastestlinux/linux-2.6.20/drivers/media/nomadik_mm/hcl
+#NMDK_HCLDIR:=../hcl
+OBJ_HCLDIR = ../hcl
-+#CC=arm-926ejs-linux-gnueabi-gcc
-+#LD=arm-926ejs-linux-gnueabi-ld
++#CC=arm-926ejs-linux-gnueabi-gcc
++#LD=arm-926ejs-linux-gnueabi-ld
+#AR=arm-926ejs-linux-gnueabi-ar
+ifeq ($(CONFIG_NOMADIK_NDK10),y)
+ifeq ($(CONFIG_NOMADIK_NDK10_CUTA),y)
@@ -149843,12 +150502,12 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/Makefile ../new/linux-2.6
+endif
+else
+ifeq ($(CONFIG_NOMADIK_NDK15_REV2_B_06),y)
-+HCL_CFLAGS := -D__arm -D__STN_8815=20 -D__RELEASE -D__CC_ARM
-+else
++HCL_CFLAGS := -D__arm -D__STN_8815=20 -D__RELEASE -D__CC_ARM
++else
+ifeq ($(CONFIG_NOMADIK_NHK15),y)
-+HCL_CFLAGS := -D__arm -D__STN_8815=20 -D__RELEASE -D__CC_ARM
++HCL_CFLAGS := -D__arm -D__STN_8815=20 -D__RELEASE -D__CC_ARM
+else
-+HCL_CFLAGS := -D__arm -D__STN_8815=10 -D__RELEASE -D__CC_ARM
++HCL_CFLAGS := -D__arm -D__STN_8815=10 -D__RELEASE -D__CC_ARM
+endif
+endif
+endif
@@ -149869,8 +150528,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/Makefile ../new/linux-2.6
+
+#cam_obj := nomadik_pepperpot.o
+
-+#obj-m = nmdkmod_pepperpot.o nmdkmod_SVA.o
-+obj-$(CONFIG_NOMADIK_SVA) += nmdkmod_SVA.o
++#obj-m = nmdkmod_pepperpot.o nmdkmod_SVA.o
++obj-$(CONFIG_NOMADIK_SVA) += nmdkmod_SVA.o
+
+#nmdkmod_pepperpot-objs := $(cam_obj)
+
@@ -149882,12 +150541,11 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/Makefile ../new/linux-2.6
+EXTRA_CFLAGS += $(COMMON_CFLAGS)
+#
+#clean:
-+# $(MAKE) -C $(KERNEL_PATH) M=`pwd` clean; rm -f $(hcl_obj)
++# $(MAKE) -C $(KERNEL_PATH) M=`pwd` clean; rm -f $(hcl_obj)
+#
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_camera.h ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_camera.h
---- linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_camera.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_camera.h 2008-07-17 16:43:36.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_camera.h
@@ -0,0 +1,206 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -150095,9 +150753,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_camera.h ../new/l
+
+
+#endif /*__CAMERA_H__*/
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_defs.h ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_defs.h
---- linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_defs.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_defs.h 2008-07-17 16:43:37.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_defs.h
@@ -0,0 +1,76 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -150175,9 +150832,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_defs.h ../new/lin
+
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_pepperpot.c ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_pepperpot.c
---- linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_pepperpot.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_pepperpot.c 2008-07-17 16:43:37.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_pepperpot.c
@@ -0,0 +1,1189 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -151368,9 +152024,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_pepperpot.c ../ne
+MODULE_AUTHOR ("Melwyn LOBO <melwyn.lobo@st.com>");
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_pepperpot.h ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_pepperpot.h
---- linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_pepperpot.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_pepperpot.h 2008-07-17 16:43:38.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_pepperpot.h
@@ -0,0 +1,153 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -151525,9 +152180,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_pepperpot.h ../ne
+ static int sva_set_pepperpot_whitebalancemode(__u8);
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.c ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.c
---- linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.c 2008-11-24 14:06:25.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.c
@@ -0,0 +1,4951 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -153488,14 +154142,14 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.c ../new/linu
+ ,qbuf->service_id, qbuf->buffer.buffer_id);
+ up(&open->open_lock);
+ return -EINVAL;
-+
++
+ }
+ shared_open->buffer_info[qbuf->buffer.buffer_id]->buffer.flags &= ~BUF_FLAG_DONE;
-+
++
+// printk("sq_buff %d cnt %d\n",qbuf->buffer.buffer_id, shared_open->buffer_info[qbuf->buffer.buffer_id]->buffer.count);
-+
++
+ if(shared_open->buffer_info[qbuf->buffer.buffer_id]->buffer.count == 0) {
-+
++
+ if(srv->type == SVA_VIDEO_ENCODER || srv->type == SVA_POSTPROCESSOR) {
+ shared_open->buffer_info[qbuf->buffer.buffer_id]->buffer.flags &= BUF_FLAG_QUEUED_RO;
+ } else {
@@ -153512,14 +154166,14 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.c ../new/linu
+ up(&open->open_lock);
+ return -EINVAL;
+ }
-+
++
+ }else{
+ dbgprintk(3,"shared queue_buffer fails for SERVICE %d, buffer %d already queued\n"
+ ,qbuf->service_id, qbuf->buffer.buffer_id);
+ up(&open->open_lock);
+ return -EINVAL;
+ }
-+
++
+ }
+ buf_info = shared_open->buffer_info[qbuf->buffer.buffer_id];
+ } else {
@@ -153527,7 +154181,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.c ../new/linu
+ buf_info = open->buffer_info[qbuf->buffer.buffer_id];
+
+// printk("q_buff %d cnt %d\n", qbuf->buffer.buffer_id, buf_info->buffer.count);
-+
++
+ if(!open->buffer_info[qbuf->buffer.buffer_id] ||
+ (open->buffer_info[qbuf->buffer.buffer_id]->buffer.flags & BUF_FLAG_QUEUED)
+ == BUF_FLAG_QUEUED) {
@@ -156480,9 +157134,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.c ../new/linu
+EXPORT_SYMBOL(camera_register_device);
+EXPORT_SYMBOL(camera_unregister_device);
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.h ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.h
---- linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.h 2008-07-17 16:43:40.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.h
@@ -0,0 +1,225 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -156569,7 +157222,7 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.h ../new/linu
+ __u16 sensor_aoi_x;
+ __u16 sensor_aoi_y;
+ __u16 prescale_factor;
-+
++
+};
+
+struct sva_videodecoder_info {
@@ -156709,9 +157362,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva.h ../new/linu
+#endif /* __SVA_SERVICE_INFO_H__ */
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_mpeg4.c ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_mpeg4.c
---- linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_mpeg4.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_mpeg4.c 2008-07-17 16:43:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_mpeg4.c
@@ -0,0 +1,432 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -157145,9 +157797,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_mpeg4.c ../ne
+ return 0;
+}
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_services.h ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_services.h
---- linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_services.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_services.h 2008-11-24 14:06:26.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_services.h
@@ -0,0 +1,3826 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -160975,9 +161626,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_services.h ..
+
+
+#endif /* __SVA_SERVICES_H__*/
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_utils.c ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_utils.c
---- linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_utils.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_utils.c 2008-07-17 16:43:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_utils.c
@@ -0,0 +1,964 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -161943,9 +162593,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_utils.c ../ne
+}
+
+
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_utils.h ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_utils.h
---- linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_utils.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_utils.h 2008-07-17 16:43:43.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_utils.h
@@ -0,0 +1,49 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -161996,9 +162645,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_utils.h ../ne
+extern int sva_q_last(struct sva_queue *q);
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c
---- linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c 2008-11-24 14:06:26.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c
@@ -0,0 +1,6984 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -168984,9 +169632,8 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.c ../new
+ kfree(irp_fw_ptr);
+ return 0;
+}
-diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.h ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.h
---- linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.h 2008-11-24 14:06:27.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.h
@@ -0,0 +1,589 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -169577,14 +170224,68 @@ diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/sva/nomadik_sva_vpip.h ../new
+t_sva_error irp_start_ewarp_hq(struct sva_service_open *srv_open);
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/video/hcl_defs.h ../new/linux-2.6.20/drivers/media/video/hcl_defs.h
---- linux-2.6.20/drivers/media/video/hcl_defs.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/video/hcl_defs.h 2007-11-21 11:51:42.000000000 +0530
+--- linux-2.6.20.orig/drivers/media/video/Kconfig
++++ linux-2.6.20/drivers/media/video/Kconfig
+@@ -761,6 +761,13 @@ source "drivers/media/video/zc0301/Kconf
+
+ source "drivers/media/video/pwc/Kconfig"
+
+ endmenu # V4L USB devices
+
++config VIDEO_NOMADIK
++ boolean "V4L2 compatiblity module for Nomadik SVA"
++ depends on VIDEO_DEV
++ ---help---
++ Say Y here to compile v4l2 compatiblity module over Nomadik
++ SVA driver.
++
+ endmenu
+--- linux-2.6.20.orig/drivers/media/video/Makefile
++++ linux-2.6.20/drivers/media/video/Makefile
+@@ -7,10 +7,12 @@ zr36067-objs := zoran_procfs.o zoran_dev
+ tuner-objs := tuner-core.o tuner-types.o tuner-simple.o \
+ mt20xx.o tda8290.o tea5767.o tda9887.o
+
+ msp3400-objs := msp3400-driver.o msp3400-kthreads.o
+
++nmdkmod_v4l2-objs:= v4l2-nomadik.o
++
+ obj-$(CONFIG_VIDEO_DEV) += videodev.o v4l2-common.o compat_ioctl32.o
+
+ ifeq ($(CONFIG_VIDEO_V4L1_COMPAT),y)
+ obj-$(CONFIG_VIDEO_DEV) += v4l1-compat.o
+ endif
+@@ -82,10 +84,14 @@ obj-$(CONFIG_VIDEO_TUNER) += tuner.o
+ obj-$(CONFIG_VIDEO_BUF) += video-buf.o
+ obj-$(CONFIG_VIDEO_BUF_DVB) += video-buf-dvb.o
+ obj-$(CONFIG_VIDEO_BTCX) += btcx-risc.o
+ obj-$(CONFIG_VIDEO_TVEEPROM) += tveeprom.o
+
++ifeq ($(CONFIG_VIDEO_NOMADIK),y)
++ obj-m := nmdkmod_v4l2.o
++endif
++
+ obj-$(CONFIG_VIDEO_M32R_AR_M64278) += arv.o
+
+ obj-$(CONFIG_VIDEO_CX25840) += cx25840/
+ obj-$(CONFIG_VIDEO_UPD64031A) += upd64031a.o
+ obj-$(CONFIG_VIDEO_UPD64083) += upd64083.o
+@@ -110,7 +116,7 @@ obj-$(CONFIG_USB_KONICAWC) += usbvi
+ obj-$(CONFIG_USB_VICAM) += usbvideo/
+ obj-$(CONFIG_USB_QUICKCAM_MESSENGER) += usbvideo/
+
+ obj-$(CONFIG_VIDEO_VIVI) += vivi.o
+
+-EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
++EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core -I$(TOPDIR)/../multimedia/sva -I$(TOPDIR)/../multimedia/hcl/include -I$(TOPDIR)/../multimedia/hcl/sva
+ extra-cflags-$(CONFIG_VIDEO_V4L1_COMPAT) += -DCONFIG_VIDEO_V4L1_COMPAT
+--- /dev/null
++++ linux-2.6.20/drivers/media/video/hcl_defs.h
@@ -0,0 +1,280 @@
+/******************************************************************************
-+ * C STMicroelectronics
-+ * Reproduction and Communication of this document is
-+ * strictly prohibited unless specifically autorized in
++ * C STMicroelectronics
++ * Reproduction and Communication of this document is
++ * strictly prohibited unless specifically autorized in
+ * writing by STMicroelectronics.
+ *-----------------------------------------------------------------------------
+ *
@@ -169600,7 +170301,7 @@ diff -Nauprw linux-2.6.20/drivers/media/video/hcl_defs.h ../new/linux-2.6.20/dri
+#include "platform_os.h"
+
+/*-----------------------------------------------------------------------------
-+ * Type definition
++ * Type definition
+ *---------------------------------------------------------------------------*/
+typedef unsigned char t_uint8;
+typedef signed char t_sint8;
@@ -169619,7 +170320,7 @@ diff -Nauprw linux-2.6.20/drivers/media/video/hcl_defs.h ../new/linux-2.6.20/dri
+
+typedef unsigned int t_bitfield;
+
-+#if !defined(FALSE) && !defined(TRUE)
++#if !defined(FALSE) && !defined(TRUE)
+typedef enum {FALSE, TRUE} t_bool;
+#else /* FALSE & TRUE already defined */
+typedef enum {BOOL_FALSE, BOOL_TRUE} t_bool;
@@ -169636,10 +170337,10 @@ diff -Nauprw linux-2.6.20/drivers/media/video/hcl_defs.h ../new/linux-2.6.20/dri
+
+/*
+ * Global frequency enumuration
-+ * Added to avoid frequency conversion function which is required to convert one HCL
++ * Added to avoid frequency conversion function which is required to convert one HCL
+ * frequency enumuration values to another HCL frequency enumuration values.
+ */
-+
++
+typedef enum {
+ HCL_FREQ_NOT_SUPPORTED=-1,
+ HCL_FREQ_8KHZ ,
@@ -169651,15 +170352,15 @@ diff -Nauprw linux-2.6.20/drivers/media/video/hcl_defs.h ../new/linux-2.6.20/dri
+ HCL_FREQ_24KHZ,
+ HCL_FREQ_32KHZ,
+ HCL_FREQ_44KHZ,
-+ HCL_FREQ_44_1KHZ,
++ HCL_FREQ_44_1KHZ,
+ HCL_FREQ_48KHZ,
+ HCL_FREQ_64KHZ,
+ HCL_FREQ_88KHZ,
+ HCL_FREQ_88_2KHZ,
+ HCL_FREQ_96KHZ,
+ HCL_FREQ_128KHZ,
-+ HCL_FREQ_176_4KHZ,
-+ HCL_FREQ_192KHZ,
++ HCL_FREQ_176_4KHZ,
++ HCL_FREQ_192KHZ,
+ HCL_FREQ_1MHZ,
+ HCL_FREQ_2MHZ,
+ HCL_FREQ_3MHZ,
@@ -169673,7 +170374,7 @@ diff -Nauprw linux-2.6.20/drivers/media/video/hcl_defs.h ../new/linux-2.6.20/dri
+ HCL_FREQ_22MHZ,
+ HCL_FREQ_24MHZ,
+ HCL_FREQ_48MHZ
-+} t_frequency;
++} t_frequency;
+
+
+
@@ -169698,7 +170399,7 @@ diff -Nauprw linux-2.6.20/drivers/media/video/hcl_defs.h ../new/linux-2.6.20/dri
+
+
+/*-----------------------------------------------------------------------------
-+ * Keyword definition
++ * Keyword definition
+ *---------------------------------------------------------------------------*/
+#define PUBLIC /* Extern by default */
+#define PRIVATE static
@@ -169750,42 +170451,42 @@ diff -Nauprw linux-2.6.20/drivers/media/video/hcl_defs.h ../new/linux-2.6.20/dri
+#define MASK_NULL8 0x00
+#define MASK_NULL16 0x0000
+#define MASK_NULL32 0x00000000
-+#define MASK_ALL8 0xFF
-+#define MASK_ALL16 0xFFFF
++#define MASK_ALL8 0xFF
++#define MASK_ALL16 0xFFFF
+#define MASK_ALL32 0xFFFFFFFF
+
+#define MASK_BIT0 (1UL<<0)
-+#define MASK_BIT1 (1UL<<1)
-+#define MASK_BIT2 (1UL<<2)
-+#define MASK_BIT3 (1UL<<3)
-+#define MASK_BIT4 (1UL<<4)
-+#define MASK_BIT5 (1UL<<5)
-+#define MASK_BIT6 (1UL<<6)
-+#define MASK_BIT7 (1UL<<7)
-+#define MASK_BIT8 (1UL<<8)
-+#define MASK_BIT9 (1UL<<9)
-+#define MASK_BIT10 (1UL<<10)
-+#define MASK_BIT11 (1UL<<11)
-+#define MASK_BIT12 (1UL<<12)
-+#define MASK_BIT13 (1UL<<13)
-+#define MASK_BIT14 (1UL<<14)
-+#define MASK_BIT15 (1UL<<15)
-+#define MASK_BIT16 (1UL<<16)
-+#define MASK_BIT17 (1UL<<17)
-+#define MASK_BIT18 (1UL<<18)
-+#define MASK_BIT19 (1UL<<19)
-+#define MASK_BIT20 (1UL<<20)
++#define MASK_BIT1 (1UL<<1)
++#define MASK_BIT2 (1UL<<2)
++#define MASK_BIT3 (1UL<<3)
++#define MASK_BIT4 (1UL<<4)
++#define MASK_BIT5 (1UL<<5)
++#define MASK_BIT6 (1UL<<6)
++#define MASK_BIT7 (1UL<<7)
++#define MASK_BIT8 (1UL<<8)
++#define MASK_BIT9 (1UL<<9)
++#define MASK_BIT10 (1UL<<10)
++#define MASK_BIT11 (1UL<<11)
++#define MASK_BIT12 (1UL<<12)
++#define MASK_BIT13 (1UL<<13)
++#define MASK_BIT14 (1UL<<14)
++#define MASK_BIT15 (1UL<<15)
++#define MASK_BIT16 (1UL<<16)
++#define MASK_BIT17 (1UL<<17)
++#define MASK_BIT18 (1UL<<18)
++#define MASK_BIT19 (1UL<<19)
++#define MASK_BIT20 (1UL<<20)
+#define MASK_BIT21 (1UL<<21)
-+#define MASK_BIT22 (1UL<<22)
-+#define MASK_BIT23 (1UL<<23)
-+#define MASK_BIT24 (1UL<<24)
-+#define MASK_BIT25 (1UL<<25)
-+#define MASK_BIT26 (1UL<<26)
-+#define MASK_BIT27 (1UL<<27)
-+#define MASK_BIT28 (1UL<<28)
-+#define MASK_BIT29 (1UL<<29)
++#define MASK_BIT22 (1UL<<22)
++#define MASK_BIT23 (1UL<<23)
++#define MASK_BIT24 (1UL<<24)
++#define MASK_BIT25 (1UL<<25)
++#define MASK_BIT26 (1UL<<26)
++#define MASK_BIT27 (1UL<<27)
++#define MASK_BIT28 (1UL<<28)
++#define MASK_BIT29 (1UL<<29)
+#define MASK_BIT30 (1UL<<30)
-+#define MASK_BIT31 (1UL<<31)
++#define MASK_BIT31 (1UL<<31)
+
+/*-----------------------------------------------------------------------------
+ * quartet shift definition
@@ -169820,7 +170521,7 @@ diff -Nauprw linux-2.6.20/drivers/media/video/hcl_defs.h ../new/linux-2.6.20/dri
+#define MASK_BYTE1 (MASK_BYTE << SHIFT_BYTE1)
+#define MASK_BYTE2 (MASK_BYTE << SHIFT_BYTE2)
+#define MASK_BYTE3 (MASK_BYTE << SHIFT_BYTE3)
-+
++
+/*-----------------------------------------------------------------------------
+ * Halfword shift definition
+ *---------------------------------------------------------------------------*/
@@ -169835,8 +170536,8 @@ diff -Nauprw linux-2.6.20/drivers/media/video/hcl_defs.h ../new/linux-2.6.20/dri
+ *---------------------------------------------------------------------------*/
+ #define ONE_KB (1024)
+ #define ONE_MB (ONE_KB * ONE_KB)
-+
-+
++
++
+/*-----------------------------------------------------------------------------
+ * Address translation macros declaration
+ *---------------------------------------------------------------------------*/
@@ -169861,54 +170562,8 @@ diff -Nauprw linux-2.6.20/drivers/media/video/hcl_defs.h ../new/linux-2.6.20/dri
+#endif /* _HCL_DEFS_H */
+
+/* End of file hcl_defs.h */
-diff -Nauprw linux-2.6.20/drivers/media/video/Kconfig ../new/linux-2.6.20/drivers/media/video/Kconfig
---- linux-2.6.20/drivers/media/video/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/video/Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -763,4 +763,11 @@ source "drivers/media/video/pwc/Kconfig"
-
- endmenu # V4L USB devices
-
-+config VIDEO_NOMADIK
-+ boolean "V4L2 compatiblity module for Nomadik SVA"
-+ depends on VIDEO_DEV
-+ ---help---
-+ Say Y here to compile v4l2 compatiblity module over Nomadik
-+ SVA driver.
-+
- endmenu
-diff -Nauprw linux-2.6.20/drivers/media/video/Makefile ../new/linux-2.6.20/drivers/media/video/Makefile
---- linux-2.6.20/drivers/media/video/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/video/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -9,6 +9,8 @@ tuner-objs := tuner-core.o tuner-types.o
-
- msp3400-objs := msp3400-driver.o msp3400-kthreads.o
-
-+nmdkmod_v4l2-objs:= v4l2-nomadik.o
-+
- obj-$(CONFIG_VIDEO_DEV) += videodev.o v4l2-common.o compat_ioctl32.o
-
- ifeq ($(CONFIG_VIDEO_V4L1_COMPAT),y)
-@@ -84,6 +86,10 @@ obj-$(CONFIG_VIDEO_BUF_DVB) += video-buf
- obj-$(CONFIG_VIDEO_BTCX) += btcx-risc.o
- obj-$(CONFIG_VIDEO_TVEEPROM) += tveeprom.o
-
-+ifeq ($(CONFIG_VIDEO_NOMADIK),y)
-+ obj-m := nmdkmod_v4l2.o
-+endif
-+
- obj-$(CONFIG_VIDEO_M32R_AR_M64278) += arv.o
-
- obj-$(CONFIG_VIDEO_CX25840) += cx25840/
-@@ -112,5 +118,5 @@ obj-$(CONFIG_USB_QUICKCAM_MESSENGER) +=
-
- obj-$(CONFIG_VIDEO_VIVI) += vivi.o
-
--EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
-+EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core -I$(TOPDIR)/../multimedia/sva -I$(TOPDIR)/../multimedia/hcl/include -I$(TOPDIR)/../multimedia/hcl/sva
- extra-cflags-$(CONFIG_VIDEO_V4L1_COMPAT) += -DCONFIG_VIDEO_V4L1_COMPAT
-diff -Nauprw linux-2.6.20/drivers/media/video/nomadik_camera.h ../new/linux-2.6.20/drivers/media/video/nomadik_camera.h
---- linux-2.6.20/drivers/media/video/nomadik_camera.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/video/nomadik_camera.h 2008-07-17 16:42:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/video/nomadik_camera.h
@@ -0,0 +1,206 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -170116,9 +170771,8 @@ diff -Nauprw linux-2.6.20/drivers/media/video/nomadik_camera.h ../new/linux-2.6.
+
+
+#endif /*__CAMERA_H__*/
-diff -Nauprw linux-2.6.20/drivers/media/video/nomadik_defs.h ../new/linux-2.6.20/drivers/media/video/nomadik_defs.h
---- linux-2.6.20/drivers/media/video/nomadik_defs.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/video/nomadik_defs.h 2008-07-17 16:42:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/video/nomadik_defs.h
@@ -0,0 +1,76 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -170196,9 +170850,8 @@ diff -Nauprw linux-2.6.20/drivers/media/video/nomadik_defs.h ../new/linux-2.6.20
+
+
+
-diff -Nauprw linux-2.6.20/drivers/media/video/nomadik_sva.h ../new/linux-2.6.20/drivers/media/video/nomadik_sva.h
---- linux-2.6.20/drivers/media/video/nomadik_sva.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/video/nomadik_sva.h 2008-07-17 16:42:43.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/video/nomadik_sva.h
@@ -0,0 +1,225 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -170285,7 +170938,7 @@ diff -Nauprw linux-2.6.20/drivers/media/video/nomadik_sva.h ../new/linux-2.6.20/
+ __u16 sensor_aoi_x;
+ __u16 sensor_aoi_y;
+ __u16 prescale_factor;
-+
++
+};
+
+struct sva_videodecoder_info {
@@ -170425,9 +171078,8 @@ diff -Nauprw linux-2.6.20/drivers/media/video/nomadik_sva.h ../new/linux-2.6.20/
+#endif /* __SVA_SERVICE_INFO_H__ */
+
+
-diff -Nauprw linux-2.6.20/drivers/media/video/nomadik_sva_services.h ../new/linux-2.6.20/drivers/media/video/nomadik_sva_services.h
---- linux-2.6.20/drivers/media/video/nomadik_sva_services.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/video/nomadik_sva_services.h 2008-11-24 14:06:24.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/video/nomadik_sva_services.h
@@ -0,0 +1,3832 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -174261,9 +174913,8 @@ diff -Nauprw linux-2.6.20/drivers/media/video/nomadik_sva_services.h ../new/linu
+
+
+#endif /* __SVA_SERVICES_H__*/
-diff -Nauprw linux-2.6.20/drivers/media/video/nomadik_sva_utils.h ../new/linux-2.6.20/drivers/media/video/nomadik_sva_utils.h
---- linux-2.6.20/drivers/media/video/nomadik_sva_utils.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/video/nomadik_sva_utils.h 2008-07-17 16:42:44.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/video/nomadik_sva_utils.h
@@ -0,0 +1,49 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -174314,9 +174965,8 @@ diff -Nauprw linux-2.6.20/drivers/media/video/nomadik_sva_utils.h ../new/linux-2
+extern int sva_q_last(struct sva_queue *q);
+
+#endif
-diff -Nauprw linux-2.6.20/drivers/media/video/platform_os.h ../new/linux-2.6.20/drivers/media/video/platform_os.h
---- linux-2.6.20/drivers/media/video/platform_os.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/video/platform_os.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/video/platform_os.h
@@ -0,0 +1,55 @@
+/* Dummy file used to define some conditionnal compilation flags */
+#ifndef __INC_PLATFORM_OS_H
@@ -174364,18 +175014,17 @@ diff -Nauprw linux-2.6.20/drivers/media/video/platform_os.h ../new/linux-2.6.20/
+
+/*
+ * Define extended ANSI C unsigned long long type
-+ * could be redefine for each OS
-+ * ie: for WINCE:
-+ * typedef unsigned __int64 t_uint64;
++ * could be redefine for each OS
++ * ie: for WINCE:
++ * typedef unsigned __int64 t_uint64;
+ * typedef __int64 t_sint64;
+ */
+typedef unsigned long long t_uint64;
+typedef signed long long t_sint64;
+
+#endif /* __INC_PLATFORM_OS_H */
-diff -Nauprw linux-2.6.20/drivers/media/video/sva.h ../new/linux-2.6.20/drivers/media/video/sva.h
---- linux-2.6.20/drivers/media/video/sva.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/video/sva.h 2008-07-17 16:42:44.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/video/sva.h
@@ -0,0 +1,2148 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -176525,9 +177174,8 @@ diff -Nauprw linux-2.6.20/drivers/media/video/sva.h ../new/linux-2.6.20/drivers/
+
+#endif /* __INC_SVA_H */
+
-diff -Nauprw linux-2.6.20/drivers/media/video/v4l2-nomadik.c ../new/linux-2.6.20/drivers/media/video/v4l2-nomadik.c
---- linux-2.6.20/drivers/media/video/v4l2-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/video/v4l2-nomadik.c 2008-11-24 14:06:24.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/video/v4l2-nomadik.c
@@ -0,0 +1,1590 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -178119,9 +178767,8 @@ diff -Nauprw linux-2.6.20/drivers/media/video/v4l2-nomadik.c ../new/linux-2.6.20
+MODULE_AUTHOR("Melwyn LOBO <melwyn.lobo@st.com>");
+
+
-diff -Nauprw linux-2.6.20/drivers/media/video/v4l2-nomadik.h ../new/linux-2.6.20/drivers/media/video/v4l2-nomadik.h
---- linux-2.6.20/drivers/media/video/v4l2-nomadik.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/media/video/v4l2-nomadik.h 2008-07-17 16:42:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/media/video/v4l2-nomadik.h
@@ -0,0 +1,70 @@
+/*---------------------------------------------------------------------------*/
+/* © copyright STMicroelectronics, 2007. All rights reserved. For */
@@ -178193,9 +178840,69 @@ diff -Nauprw linux-2.6.20/drivers/media/video/v4l2-nomadik.h ../new/linux-2.6.20
+int sva_service_update(struct sva_device_open *open, struct sva_update_service *update);
+
+
-diff -Nauprw linux-2.6.20/drivers/misc/batt-nomadik.c ../new/linux-2.6.20/drivers/misc/batt-nomadik.c
---- linux-2.6.20/drivers/misc/batt-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/misc/batt-nomadik.c 2008-10-20 13:38:12.000000000 +0530
+--- linux-2.6.20.orig/drivers/misc/Kconfig
++++ linux-2.6.20/drivers/misc/Kconfig
+@@ -1,11 +1,33 @@
+ #
+ # Misc strange devices
+ #
+
++# depends on ARCH_NOMADIK NOMADIK_SSP NOMADIK_GPIO
++
+ menu "Misc devices"
+
++
++config STMPE_NOMADIK
++ tristate "Port expander driver for Nomadik board"
++ depends on NOMADIK_NHK15
++ help
++ Say Y here if you have a port expander in your platform.
++
++config SIF_NOMADIK
++ tristate "Display protocol driver for nhk15"
++ depends on NOMADIK_NHK15
++ help
++ Say Y here if you want to change the gamma, brightness and contrast values
++ for the display
++
++config ETM_NOMADIK
++ tristate "ETM support nhk15"
++ depends on NOMADIK_NHK15
++ help
++ Say Y here if you want ETM support for debugging.
++
+ config IBM_ASM
+ tristate "Device driver for IBM RSA service processor"
+ depends on X86 && PCI && EXPERIMENTAL
+ ---help---
+ This option enables device driver support for in-band access to the
+@@ -86,6 +108,11 @@ config MSI_LAPTOP
+ More information about this driver is available at
+ <http://0pointer.de/lennart/tchibo.html>.
+
+ If you have an MSI S270 laptop, say Y or M here.
+
++config BATT_NOMADIK
++ tristate "Battery charger driver for Nomadik board"
++ depends on NOMADIK_NHK15
++ help
++ Say Y here if you have a port expander in your platform.
+ endmenu
+--- linux-2.6.20.orig/drivers/misc/Makefile
++++ linux-2.6.20/drivers/misc/Makefile
+@@ -8,5 +8,9 @@ obj-$(CONFIG_HDPU_FEATURES) += hdpuftrs/
+ obj-$(CONFIG_MSI_LAPTOP) += msi-laptop.o
+ obj-$(CONFIG_LKDTM) += lkdtm.o
+ obj-$(CONFIG_TIFM_CORE) += tifm_core.o
+ obj-$(CONFIG_TIFM_7XX1) += tifm_7xx1.o
+ obj-$(CONFIG_SGI_IOC4) += ioc4.o
++obj-$(CONFIG_STMPE_NOMADIK) += pexp-nomadik.o
++obj-$(CONFIG_SIF_NOMADIK) += sif-nomadik.o
++obj-$(CONFIG_ETM_NOMADIK) += etm-nomadik.o
++obj-$(CONFIG_BATT_NOMADIK) += batt-nomadik.o
+\ No newline at end of file
+--- /dev/null
++++ linux-2.6.20/drivers/misc/batt-nomadik.c
@@ -0,0 +1,1307 @@
+/*
+ * Overview:
@@ -179504,9 +180211,8 @@ diff -Nauprw linux-2.6.20/drivers/misc/batt-nomadik.c ../new/linux-2.6.20/driver
+module_init(nomadik_stcharg_init);
+module_exit(nomadik_stcharg_exit);
+
-diff -Nauprw linux-2.6.20/drivers/misc/etm-nomadik.c ../new/linux-2.6.20/drivers/misc/etm-nomadik.c
---- linux-2.6.20/drivers/misc/etm-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/misc/etm-nomadik.c 2008-11-19 16:47:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/misc/etm-nomadik.c
@@ -0,0 +1,207 @@
+/*
+ * Overview:
@@ -179715,65 +180421,8 @@ diff -Nauprw linux-2.6.20/drivers/misc/etm-nomadik.c ../new/linux-2.6.20/drivers
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("ST Microelectronics");
+MODULE_DESCRIPTION("ETM module for Nomadik (nhk15) Platform");
-diff -Nauprw linux-2.6.20/drivers/misc/Kconfig ../new/linux-2.6.20/drivers/misc/Kconfig
---- linux-2.6.20/drivers/misc/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/misc/Kconfig 2008-10-20 13:37:45.000000000 +0530
-@@ -2,8 +2,30 @@
- # Misc strange devices
- #
-
-+# depends on ARCH_NOMADIK NOMADIK_SSP NOMADIK_GPIO
-+
- menu "Misc devices"
-
-+
-+config STMPE_NOMADIK
-+ tristate "Port expander driver for Nomadik board"
-+ depends on NOMADIK_NHK15
-+ help
-+ Say Y here if you have a port expander in your platform.
-+
-+config SIF_NOMADIK
-+ tristate "Display protocol driver for nhk15"
-+ depends on NOMADIK_NHK15
-+ help
-+ Say Y here if you want to change the gamma, brightness and contrast values
-+ for the display
-+
-+config ETM_NOMADIK
-+ tristate "ETM support nhk15"
-+ depends on NOMADIK_NHK15
-+ help
-+ Say Y here if you want ETM support for debugging.
-+
- config IBM_ASM
- tristate "Device driver for IBM RSA service processor"
- depends on X86 && PCI && EXPERIMENTAL
-@@ -88,4 +110,9 @@ config MSI_LAPTOP
-
- If you have an MSI S270 laptop, say Y or M here.
-
-+config BATT_NOMADIK
-+ tristate "Battery charger driver for Nomadik board"
-+ depends on NOMADIK_NHK15
-+ help
-+ Say Y here if you have a port expander in your platform.
- endmenu
-diff -Nauprw linux-2.6.20/drivers/misc/Makefile ../new/linux-2.6.20/drivers/misc/Makefile
---- linux-2.6.20/drivers/misc/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/misc/Makefile 2008-10-20 13:37:45.000000000 +0530
-@@ -10,3 +10,7 @@ obj-$(CONFIG_LKDTM) += lkdtm.o
- obj-$(CONFIG_TIFM_CORE) += tifm_core.o
- obj-$(CONFIG_TIFM_7XX1) += tifm_7xx1.o
- obj-$(CONFIG_SGI_IOC4) += ioc4.o
-+obj-$(CONFIG_STMPE_NOMADIK) += pexp-nomadik.o
-+obj-$(CONFIG_SIF_NOMADIK) += sif-nomadik.o
-+obj-$(CONFIG_ETM_NOMADIK) += etm-nomadik.o
-+obj-$(CONFIG_BATT_NOMADIK) += batt-nomadik.o
-\ No newline at end of file
-diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/drivers/misc/pexp-nomadik.c
---- linux-2.6.20/drivers/misc/pexp-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/misc/pexp-nomadik.c 2008-09-17 13:23:32.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/misc/pexp-nomadik.c
@@ -0,0 +1,2847 @@
+/*
+ * Overview:
@@ -179818,7 +180467,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+#include <asm/arch/pexp.h>
+#include <asm/arch/i2c.h>
+
-+#define DEBUG 0
++#define DEBUG 0
+
+
+/*
@@ -179837,7 +180486,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ Internal defines
+*/
+
-+#define STMPE2401_WAIT_RESET_TIMEOUT 100
++#define STMPE2401_WAIT_RESET_TIMEOUT 100
+#define STMPE2401_I2C_TIMEOUT 1000
+
+/*STMP interrupt numbers*/
@@ -179852,18 +180501,18 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+#define RAMP_UP_SLOW 0x7F01
+#define RAMP_DN_SLOW 0x7F81
+#define RAMP_UP(step) step
-+#define RAMP_DN(step) (step | 0x0080)
++#define RAMP_DN(step) (step | 0x0080)
+#define BRANCH_TO(add) (add | 0xA000)
+#define GTS_ISTRUCTION 0x0000
+
+/*Register definition*/
+
+/*System registers Index*/
-+#define CHIP_ID_Index 0x80
-+#define VERSION_ID_Index 0x81
++#define CHIP_ID_Index 0x80
++#define VERSION_ID_Index 0x81
+#define SYSCON_Index 0x02
+
-+#define GPIO_OFFSET
++#define GPIO_OFFSET
+
+/*Interrupt registers Index*/
+#define ICR_Msb_Index 0x10 /*Interrupt Control register*/
@@ -179911,19 +180560,19 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+#define GPCR_Lsb_Index 0x88
+/*GPIO Set Pin Direction register*/
+#define GPDR_Msb_Index 0x89
-+#define GPDR_Csb_Index 0x8A
++#define GPDR_Csb_Index 0x8A
+#define GPDR_Lsb_Index 0x8B
+/*GPIO Edge Detect Status register*/
+#define GPEDR_Msb_Index 0x8C
-+#define GPEDR_Csb_Index 0x8D
++#define GPEDR_Csb_Index 0x8D
+#define GPEDR_Lsb_Index 0x8E
+/*GPIO Rising Edge register*/
+#define GPRER_Msb_Index 0x8F
-+#define GPRER_Csb_Index 0x90
++#define GPRER_Csb_Index 0x90
+#define GPRER_Lsb_Index 0x91
+/*GPIO Falling Edge register*/
+#define GPFER_Msb_Index 0x92
-+#define GPFER_Csb_Index 0x93
++#define GPFER_Csb_Index 0x93
+#define GPFER_Lsb_Index 0x94
+/*GPIO Pull Up register*/
+#define GPPUR_Msb_Index 0x95
@@ -179931,7 +180580,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+#define GPPUR_Lsb_Index 0x97
+/*GPIO Pull Down register*/
+#define GPPDR_Msb_Index 0x98
-+#define GPPDR_Csb_Index 0x99
++#define GPPDR_Csb_Index 0x99
+#define GPPDR_Lsb_Index 0x9A
+
+/*GPIO Alternate Function register*/
@@ -179983,8 +180632,8 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+static void nomadik_stmpe0_wq(void * data);
+static void nomadik_stmpe1_wq(void * data);
+
-+static DECLARE_WORK(work0,nomadik_stmpe0_wq);
-+static DECLARE_WORK(work1,nomadik_stmpe1_wq);
++static DECLARE_WORK(work0,nomadik_stmpe0_wq);
++static DECLARE_WORK(work1,nomadik_stmpe1_wq);
+
+/**
+ * int nomadik_stmpe_ioctl - provides a mechanism for passing control
@@ -180003,7 +180652,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ int err = 0;
+ int bklight = 0;
+ int __user *argp = (int __user *)arg;
-+
++
+ if (_IOC_DIR(cmd) & _IOC_READ)
+ err = !access_ok(VERIFY_WRITE, (void *)arg, _IOC_SIZE(cmd));
+ else if (_IOC_DIR(cmd) & _IOC_WRITE)
@@ -180012,7 +180661,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ return -EFAULT;
+
+ switch (cmd) {
-+
++
+ case STMPE_SET_BACKLIGHT:
+ copy_from_user(&bklight ,argp, sizeof(int));
+ if (bklight < 0 || bklight > 255 ) {
@@ -180034,7 +180683,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+/**
+ * nomadik_stmpe_open - open sys call for stmpe device
+ * @inode: pointer to the inode structure for the stmpe device
-+ * @filp: pointer to the file structure for the stmpe device
++ * @filp: pointer to the file structure for the stmpe device
+ *
+ * This function opens the stmpe device for file operations.
+ */
@@ -180045,7 +180694,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+
+/**
+ * nomadik_stmpe_release - close sys call for stmpe device
-+ * @inode: pointer to the inode structure for the stmpe device
++ * @inode: pointer to the inode structure for the stmpe device
+ * @filp: pointer to the file structure for the stmpe device
+ *
+ * This function is called when the stmpe device is closed.
@@ -180087,19 +180736,19 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ int ret;
+ t_STMPE2401_error retval = STMPE2401_OK;
+ t_STMPE2401_gpio_config PinConfigSTMPE;
-+ gpio_config PinConfig,rst_pin;
++ gpio_config PinConfig,rst_pin;
+ /*t_STMPE2401_key_config KeyConfig;*/
-+
++
+ if(!pdata->init) {
+ printk("STMPE ::: platform init() function is not present\n");
+ return -1;
-+ }
++ }
+ /*issue hard reset to the STMPE devices*/
+ rst_pin.mode = GPIO_MODE_SOFTWARE;
+ rst_pin.direction = GPIO_DIR_OUTPUT;
+ rst_pin.trig = GPIO_TRIG_DISABLE;
+ rst_pin.debounce = GPIO_DEBOUNCE_DISABLE;
-+ rst_pin.dev_name = "stmpe";
++ rst_pin.dev_name = "stmpe";
+
+ ret = nomadik_gpio_setpinconfig(GPIO_PIN_77, &rst_pin);
+ if (ret) {
@@ -180119,7 +180768,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ }
+ /*probe the STMPE device*/
+ retval = STMPE2401_Init(STMPE0); //, I2C0,0x86 );
-+ if(retval != STMPE2401_OK)
++ if(retval != STMPE2401_OK)
+ {
+ printk("STMPE2401: Error in initializing STMPE0 device\n");
+ return retval;
@@ -180128,13 +180777,13 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+
+ //retval = STMPE2401_Init(STMPE1, I2C0,0x88 );
+ retval = STMPE2401_Init(STMPE1); //, I2C0,0x88 );
-+ if(retval != STMPE2401_OK)
++ if(retval != STMPE2401_OK)
+ {
+ printk("STMPE2401: Error in initializing STMPE1 device\n");
+ return retval;
+ }else
+ printk("STMPE2401 Device %d Initialized\n",STMPE1);
-+
++
+ PinConfigSTMPE.Output_State = 0x000030; /*0x000020; 0000 0000 0000 0000 0010 0000 */
+ PinConfigSTMPE.Direction = 0x351F30; /*0011 0101 0001 1111 0011 0000*/
+ PinConfigSTMPE.EdgeDetect = 0;
@@ -180142,17 +180791,17 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ PinConfigSTMPE.FallingEdge = 0;
+ PinConfigSTMPE.PullUp = 0;
+ PinConfigSTMPE.PullDown = 0;
-+ PinConfigSTMPE.AltFunctionUpper = 0;
-+ PinConfigSTMPE.AltFunctionLower = 0;
-+
-+
++ PinConfigSTMPE.AltFunctionUpper = 0;
++ PinConfigSTMPE.AltFunctionLower = 0;
++
++
+ retval = STMPE2401_Gpio_Configuration( STMPE0, &PinConfigSTMPE);
-+ if(retval != STMPE2401_OK)
++ if(retval != STMPE2401_OK)
+ {
+ printk("STMPE2401[0]: Error in GPIO configuration\n");
+ return retval;
+ }
-+
++
+ PinConfigSTMPE.Output_State = 0x08050B; /*0x08040B;//0000 1000 0000 0100 0000 1011*/
+ PinConfigSTMPE.Direction = 0x18072F; /*0001 1000 0000 0111 0010 1111*/
+ PinConfigSTMPE.EdgeDetect = 0;
@@ -180162,40 +180811,40 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ PinConfigSTMPE.PullDown = 0;
+ PinConfigSTMPE.AltFunctionUpper = 0;
+ PinConfigSTMPE.AltFunctionLower = 0;
-+
++
+ retval = STMPE2401_Gpio_Configuration( STMPE1, &PinConfigSTMPE);
-+ if(retval != STMPE2401_OK)
++ if(retval != STMPE2401_OK)
+ {
+ printk("STMPE2401[1]: Error in GPIO configuration\n");
+ return retval;
+ }
-+
++
+ PinConfig.mode = GPIO_MODE_SOFTWARE;
+ PinConfig.direction = GPIO_DIR_INPUT;
+ PinConfig.trig = GPIO_TRIG_FALLING_EDGE;
+ PinConfig.debounce = GPIO_DEBOUNCE_UNCHANGED;
-+
++
+ /*init PWM*/
+ retval = STMPE2401_PwmInit(STMPE0, STMPE2401_PWM1);
-+ if(retval != STMPE2401_OK)
-+ {
++ if(retval != STMPE2401_OK)
++ {
+ printk("Error in Initializing PWM controller of STMPE%d device\n",STMPE0);
+ return retval;
+ }
+ /*Set the WVGA backlight to the maximum upon system boot*/
+ retval = STMPE2401_SetPwm(STMPE0, STMPE2401_PWM1, 255);
-+ if(retval != STMPE2401_OK)
++ if(retval != STMPE2401_OK)
+ {
+ printk("Error in Setting PWM controller of STMPE%d device\n",STMPE0);
+ return retval;
+ }
+ retval = STMPE2401_Interrupt_Init(STMPE0, STMP0_INTR, PinConfig);
-+ if(retval != STMPE2401_OK)
++ if(retval != STMPE2401_OK)
+ {
+ return retval;
+ }
+ retval = STMPE2401_Interrupt_Init(STMPE1, STMP1_INTR, PinConfig);
-+ if(retval != STMPE2401_OK)
++ if(retval != STMPE2401_OK)
+ {
+ return retval;
+ }
@@ -180206,7 +180855,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ Devices[STMPE0].Syscon = 0x0E;
+ } else
+ printk("Error in enabling STMPE0 device...\n");
-+
++
+ /*FIXME - This must happen earlier, but we need STMPE to
+ * to get initialized to do this
+ */
@@ -180214,20 +180863,20 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ printk("Platform Initialization of NHK15 failed\n");
+ return -EIO;
+ }
-+
-+ /*register the device as misc device*/
++
++ /*register the device as misc device*/
+ ret = misc_register(&stmpe_dev);
+ if (ret) {
+ printk("%s: could not register stmpe erro =%d", __FILE__,
+ ret);
+ return ret;
+ }
-+
-+ /*storing the reset configuration value for both
++
++ /*storing the reset configuration value for both
+ * STMP0 and STMP1 when the system enters into deepsleep*/
+ nomadik_gpio_slpmreg_config(GPIO_PIN_77);
+ nomadik_gpio_slpmreg_config(GPIO_PIN_79);
-+
++
+ return retval;
+}
+
@@ -180238,12 +180887,12 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+*i2cnum = index of Nomadik i2c controller
+*i2c_address = STMPE2401 i2c adress
+*/
-+t_STMPE2401_error STMPE2401_Init(uint8 stmpeId)
++t_STMPE2401_error STMPE2401_Init(uint8 stmpeId)
+{
+ t_STMPE2401_error retval = STMPE2401_OK;
+ t_STMPE2401_info tempInfo;
+ uint32 maxWait;
-+
++
+ if(stmpeId >= MAX_STMPE2401_DEVICE)
+ {
+ /*number of device exeded*/
@@ -180254,10 +180903,10 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ /*Set the device as initialized*/
+ DeviceInitializationCheck |= DEVICE_MASK[stmpeId];
+ }
-+
++
+ /*all function disabled*/
+ Devices[stmpeId].Syscon = 0;
-+
++
+ /*soft reset*/
+ retval = STMPE2401_WriteByte( stmpeId, SYSCON_Index, 0x80 );
+ if(retval != STMPE2401_OK)
@@ -180288,11 +180937,11 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+t_STMPE2401_error STMPE2401_Info(uint8 stmpeId, t_STMPE2401_info *info )
+{
+ t_STMPE2401_error retval = STMPE2401_OK;
-+
-+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, (uint8)NULL );
++
++ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, (uint8)NULL );
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
++ return retval;
+ }
+ retval = STMPE2401_Read( stmpeId,CHIP_ID_Index, &info->chip_ID, 1 );
+ if(retval == STMPE2401_OK)
@@ -180303,7 +180952,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+}
+
+/*
-+* This function configure the STMPE2401 gpio
++* This function configure the STMPE2401 gpio
+* Parameter
+* stmpeId = index of the device (0-3)
+* config = configuration structure
@@ -180315,62 +180964,62 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ uint32 tempLong;
+ uint32 nByte;
+ uint8 tempByte;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId,(uint8)NULL );
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
++ return retval;
+ }
+ Devices[stmpeId].Gpio = *config;
-+
++
+ /*fill the temp buffer in the same order of STMPE internal register
+ "GPSR_Msb_Index" is the first, "GPAFR_L_Lsb_Index" the last
+ */
-+
-+ /*Output_State
++
++ /*Output_State
+ based on <Output_State> and <Direction>
+ */
+ tempLong = config->Output_State;
+ /*tempLong &= Direction;*/ /*remove input pin [..TBD..]*/
+
+ /*I2C slave internal address*/
-+ tempBuffer[0] = GPSR_Msb_Index;
-+
++ tempBuffer[0] = GPSR_Msb_Index;
++
+ tempBuffer[1] = LONG_TO_MSB(tempLong);
+ tempBuffer[2] = LONG_TO_CSB(tempLong);
+ tempBuffer[3] = LONG_TO_LSB(tempLong);
-+
++
+ tempLong = ~config->Output_State;
-+
++
+ tempBuffer[4] = LONG_TO_MSB(tempLong);
+ tempBuffer[5] = LONG_TO_CSB(tempLong);
+ tempBuffer[6] = LONG_TO_LSB(tempLong);
-+
++
+ /*Direction configuration*/
+ tempBuffer[7] = LONG_TO_MSB(config->Direction);
+ tempBuffer[8] = LONG_TO_CSB(config->Direction);
+ tempBuffer[9] = LONG_TO_LSB(config->Direction);
-+
++
+ /*Edge Detect Status register*/
+ tempBuffer[10] = LONG_TO_MSB(config->EdgeDetect);
+ tempBuffer[11] = LONG_TO_CSB(config->EdgeDetect);
+ tempBuffer[12] = LONG_TO_LSB(config->EdgeDetect);
-+
++
+ /*Rising Edge register*/
+ tempBuffer[13] = LONG_TO_MSB(config->RisingEdge);
+ tempBuffer[14] = LONG_TO_CSB(config->RisingEdge);
+ tempBuffer[15] = LONG_TO_LSB(config->RisingEdge);
-+
++
+ /*Falling Edge register*/
+ tempBuffer[16] = LONG_TO_MSB(config->FallingEdge);
+ tempBuffer[17] = LONG_TO_CSB(config->FallingEdge);
+ tempBuffer[18] = LONG_TO_LSB(config->FallingEdge);
-+
++
+ /*Pull Up register*/
-+ tempBuffer[19] = LONG_TO_MSB(config->PullUp);
++ tempBuffer[19] = LONG_TO_MSB(config->PullUp);
+ tempBuffer[20] = LONG_TO_CSB(config->PullUp);
+ tempBuffer[21] = LONG_TO_LSB(config->PullUp);
-+
++
+ /*Pull Down register*/
+ tempBuffer[22] = LONG_TO_MSB(config->PullDown);
+ tempBuffer[23] = LONG_TO_CSB(config->PullDown);
@@ -180380,13 +181029,13 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ tempBuffer[25] = LONG_TO_MSB(config->AltFunctionUpper);
+ tempBuffer[26] = LONG_TO_CSB(config->AltFunctionUpper);
+ tempBuffer[27] = LONG_TO_LSB(config->AltFunctionUpper);
-+
++
+ tempBuffer[28] = LONG_TO_MSB(config->AltFunctionLower);
+ tempBuffer[29] = LONG_TO_CSB(config->AltFunctionLower);
+ tempBuffer[30] = LONG_TO_LSB(config->AltFunctionLower);
-+
++
+ nByte = 31;
-+/*
++/*
+ retval = STMPE2401_Write(stmpeId, tempBuffer, nByte );
+*/
+ for(tempByte=1; tempByte<31; tempByte++)
@@ -180401,7 +181050,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+}
+
+
-+/*
++/*
+*This function read STMPE2401 gpio configuration and save it on *config
+* Parameter
+* stmpeId = index of the device (0-3)
@@ -180410,11 +181059,11 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+t_STMPE2401_error STMPE2401_Get_Gpio_Configuration(uint8 stmpeId, t_STMPE2401_gpio_config* config)
+{
+ t_STMPE2401_error retval = STMPE2401_OK;
-+
-+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, (uint8)NULL );
++
++ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, (uint8)NULL );
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
++ return retval;
+ }
+ /*read back configuration - FIXME TODO - currently not used
+ memcpy(config, &Devices[stmpeId].Gpio, sizeof(t_STMPE2401_gpio_config));*/
@@ -180433,11 +181082,11 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+
+ t_STMPE2401_error retval = STMPE2401_OK;
+ uint8 offset, DataValue;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, PinIndex );
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
++ return retval;
+ }
+ /*register selection*/
+ if(Value == 0)
@@ -180455,10 +181104,10 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ else
+ {
+ /*invalid value*/
-+ retval = STMPE2401_BAD_PARAMETER;
-+ return retval;
++ retval = STMPE2401_BAD_PARAMETER;
++ return retval;
+ }
-+
++
+ if(PinIndex < 8)
+ {
+ /*XXX_Lsb_Index*/
@@ -180493,13 +181142,13 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ t_STMPE2401_error retval = STMPE2401_OK;
+ uint8 tempBuffer[3];
+ uint8 offset,mask;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, PinIndex );
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
++ return retval;
+ }
-+
++
+ if(PinIndex < 8)
+ {
+ offset = GPMR_Lsb_Index;
@@ -180515,13 +181164,13 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ offset = GPMR_Msb_Index;
+ mask = 1 << (PinIndex-16);
+ }
-+
++
+ retval = STMPE2401_Read(stmpeId, offset,tempBuffer, 1 );
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
++ return retval;
+ }
-+
++
+ if((tempBuffer[0] & mask) == 0)
+ {
+ *Value = 0;
@@ -180545,34 +181194,34 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+{
+ t_STMPE2401_error retval = STMPE2401_OK;
+ uint32 tempLong;
-+ uint8 offset, tempbyte;
-+
++ uint8 offset, tempbyte;
++
+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, PinIndex );
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
++ return retval;
+ }
-+
++
+ /*read STMPE2401 configuration*/
+ tempLong = Devices[stmpeId].Gpio.Direction;
+ offset = GPDR_Msb_Index;
-+
++
+ retval = STMPE2401_Bit_Calc( PinIndex, Value, &offset, &tempLong, &tempbyte);
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
-+ }
-+
++ return retval;
++ }
++
+ retval = STMPE2401_WriteByte( stmpeId, offset, tempbyte );
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
-+ }
-+
++ return retval;
++ }
++
+ /*save STMPE2401 configuration*/
+ Devices[stmpeId].Gpio.Direction = tempLong;
-+
-+ return retval;
++
++ return retval;
+}
+
+/*
@@ -180591,13 +181240,13 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ t_STMPE2401_error retval = STMPE2401_OK;
+ uint8 offset,tempbyte,tempValueFALL,tempValueRISE;
+ uint32 tempLong;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, PinIndex );
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
++ return retval;
+ }
-+
++
+ switch(OffRiseFall)
+ {
+ case STMPE2401_NO_EDGE:
@@ -180620,44 +181269,44 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ retval = STMPE2401_BAD_PARAMETER;
+ break;
+ }
-+
++
+ if(retval == STMPE2401_OK)
+ {
+ /*read STMPE2401 configuration*/
+ tempLong = Devices[stmpeId].Gpio.FallingEdge;
+ offset = GPFER_Msb_Index;
-+
++
+ retval = STMPE2401_Bit_Calc( PinIndex, tempValueFALL, &offset, &tempLong, &tempbyte);
+ if(retval == STMPE2401_OK)
+ {
+ retval = STMPE2401_WriteByte( stmpeId, offset, tempbyte );
-+ }
-+
++ }
++
+ if(retval == STMPE2401_OK)
+ {
+ /*save STMPE2401 configuration*/
-+ Devices[stmpeId].Gpio.FallingEdge = tempLong;
-+ }
++ Devices[stmpeId].Gpio.FallingEdge = tempLong;
++ }
+ }
+ if(retval == STMPE2401_OK)
-+ {
++ {
+ /*read STMPE2401 configuration*/
+ tempLong = Devices[stmpeId].Gpio.RisingEdge;
+ offset = GPRER_Msb_Index;
-+
++
+ retval = STMPE2401_Bit_Calc( PinIndex, tempValueRISE, &offset, &tempLong, &tempbyte);
+ if(retval == STMPE2401_OK)
+ {
+ retval = STMPE2401_WriteByte( stmpeId, offset, tempbyte );
-+ }
-+
++ }
++
+ if(retval == STMPE2401_OK)
+ {
-+ Devices[stmpeId].Gpio.RisingEdge = tempLong;
-+ }
++ Devices[stmpeId].Gpio.RisingEdge = tempLong;
++ }
+ }
-+
-+ return retval;
++
++ return retval;
+}
+
+/*
@@ -180673,23 +181322,23 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+{
+ t_STMPE2401_error retval = STMPE2401_OK;
+ uint8 tempBuffer[5];
-+
-+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, (uint8)NULL );
++
++ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, (uint8)NULL );
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
++ return retval;
+ }
-+
++
+ retval = STMPE2401_Read(stmpeId, GPEDR_Msb_Index,tempBuffer, 3 );
-+
++
+ *status = (uint32) 0;
+ *status = tempBuffer[0];
+ *status = *status << 8;
+ *status |= tempBuffer[1];
+ *status = *status << 8;
+ *status |= tempBuffer[2];
-+
-+ return retval;
++
++ return retval;
+}
+
+/* This function reset STMPE2401 gpio edge detection status bits
@@ -180703,19 +181352,19 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+{
+ t_STMPE2401_error retval = STMPE2401_OK;
+ uint8 tempBuffer[5];
-+
-+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, (uint8)NULL );
++
++ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, (uint8)NULL );
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
++ return retval;
+ }
+ tempBuffer[0] = GPEDR_Msb_Index;
+ tempBuffer[1] = (mask >> 16) & 0xFF;
+ tempBuffer[2] = (mask >> 8) & 0xFF;
-+ tempBuffer[3] = (mask ) & 0xFF;
-+
++ tempBuffer[3] = (mask ) & 0xFF;
++
+ retval = STMPE2401_Write( stmpeId, tempBuffer, 4 );
-+ return retval;
++ return retval;
+}
+
+/*
@@ -180724,7 +181373,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ Parameter
+ stmpeId = index of the device (0-3)
+ PinIndex = pin to be set (0-23)
-+ OffUpDown = STMPE2401_FLOATING
++ OffUpDown = STMPE2401_FLOATING
+ STMPE2401_PULL_UP
+ STMPE2401_PULL_DOWN
+*/
@@ -180733,13 +181382,13 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ t_STMPE2401_error retval = STMPE2401_OK;
+ uint8 offset,tempbyte,tempValueUP,tempValueDOWN;
+ uint32 tempLong;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, PinIndex );
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
++ return retval;
+ }
-+
++
+ switch(OffUpDown)
+ {
+ case STMPE2401_FLOATING:
@@ -180757,42 +181406,42 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ default :
+ retval = STMPE2401_BAD_PARAMETER;
+ break;
-+ }
-+
++ }
++
+ if(retval == STMPE2401_OK)
+ {
+ tempLong = Devices[stmpeId].Gpio.PullUp;
+ offset = GPPUR_Msb_Index;
-+
++
+ retval = STMPE2401_Bit_Calc( PinIndex, tempValueUP, &offset, &tempLong, &tempbyte);
+ if(retval == STMPE2401_OK)
+ {
+ retval = STMPE2401_WriteByte( stmpeId, offset, tempbyte );
-+ }
-+
++ }
++
+ if(retval == STMPE2401_OK)
+ {
-+ Devices[stmpeId].Gpio.PullUp = tempLong;
-+ }
++ Devices[stmpeId].Gpio.PullUp = tempLong;
++ }
+ }
+ if(retval == STMPE2401_OK)
-+ {
++ {
+ tempLong = Devices[stmpeId].Gpio.PullDown;
+ offset = GPPDR_Msb_Index;
-+
++
+ retval = STMPE2401_Bit_Calc( PinIndex, tempValueDOWN, &offset, &tempLong, &tempbyte);
+ if(retval == STMPE2401_OK)
+ {
+ retval = STMPE2401_WriteByte( stmpeId, offset, tempbyte );
-+ }
-+
++ }
++
+ if(retval == STMPE2401_OK)
+ {
-+ Devices[stmpeId].Gpio.PullDown = tempLong;
-+ }
++ Devices[stmpeId].Gpio.PullDown = tempLong;
++ }
+ }
-+
-+ return retval;
++
++ return retval;
+}
+
+/*
@@ -180801,7 +181450,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ Parameter
+ stmpeId = index of the device (0-3)
+ PinIndex = pin to be set (0-23)
-+ OffUpDown = STMPE2401_PRIMARY_FUNCTION
++ OffUpDown = STMPE2401_PRIMARY_FUNCTION
+ STMPE2401_ALT_FUNCTION_1
+ STMPE2401_ALT_FUNCTION_2
+ STMPE2401_ALT_FUNCTION_3
@@ -180811,11 +181460,11 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ t_STMPE2401_error retval = STMPE2401_OK;
+ uint8 offset,tempbyte,shift;
+ uint32 tempLong;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId, PinIndex );
+ if(retval != STMPE2401_OK)
+ {
-+ return retval;
++ return retval;
+ }
+ if(Function > STMPE2401_ALT_FUNCTION_3)
+ {
@@ -180834,17 +181483,17 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ offset = GPAFR_L_Lsb_Index;
+ tempLong = Devices[stmpeId].Gpio.AltFunctionLower;
+ }
-+
++
+ offset -= (PinIndex%12) / 4;
+ shift = (PinIndex%12) * 2;
-+
++
+ tempLong &=~ ((uint32)3 << shift);
+ tempLong |= ((uint32)Function << shift);
-+
++
+ tempbyte = tempLong >> (((PinIndex%12)/4) * 8);
-+
++
+ retval = STMPE2401_WriteByte( stmpeId, offset, tempbyte );
-+
++
+ if(retval == STMPE2401_OK)
+ {
+ if(PinIndex >= 12)
@@ -180860,7 +181509,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+}
+
+
-+/*
++/*
+ This function init selected pwm channel
+ MUST be called after GPIO initializzation.
+
@@ -180868,12 +181517,12 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ stmpeId = index of the device (0-3)
+ channels = bit mask, indicate channel to be initialized
+ use STMPE2401_PWM1, STMPE2401_PWM2 or STMPE2401_PWM3
-+
-+*/
++
++*/
+t_STMPE2401_error STMPE2401_PwmInit(uint8 stmpeId, uint8 channels)
+{
+ t_STMPE2401_error retval = STMPE2401_OK;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId,(uint8)NULL);
+ if(retval != STMPE2401_OK)
+ {
@@ -180888,7 +181537,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ {
+ if(retval == STMPE2401_OK)
+ {
-+ retval = STMPE2401_SetGpioDir( stmpeId, STMPE2401_PWM1_GPIO, STMPE2401_GPIO_OUT );
++ retval = STMPE2401_SetGpioDir( stmpeId, STMPE2401_PWM1_GPIO, STMPE2401_GPIO_OUT );
+ }
+ if(retval == STMPE2401_OK)
+ {
@@ -180910,7 +181559,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ {
+ if(retval == STMPE2401_OK)
+ {
-+ retval = STMPE2401_SetGpioDir( stmpeId, STMPE2401_PWM3_GPIO, STMPE2401_GPIO_OUT );
++ retval = STMPE2401_SetGpioDir( stmpeId, STMPE2401_PWM3_GPIO, STMPE2401_GPIO_OUT );
+ }
+ if(retval == STMPE2401_OK)
+ {
@@ -180937,8 +181586,8 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ Parameter
+ stmpeId = index of the device (0-3)
+ channel = accept STMPE2401_PWM1, STMPE2401_PWM2 or STMPE2401_PWM3
-+ Value = pwm value. Range 0-255.
-+ - 0 = 0V
++ Value = pwm value. Range 0-255.
++ - 0 = 0V
+ - 255 = 1,8V
+*/
+t_STMPE2401_error STMPE2401_SetPwm(uint8 stmpeId, uint8 channel, uint8 Value)
@@ -180948,30 +181597,30 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ uint8 tempAdd;
+ uint16 Istructions[15];
+ signed int sign = 0;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId,(uint8)NULL);
+ if(retval != STMPE2401_OK)
+ {
+ return retval;
+ }
-+
++
+ if((PwmInitializationCheck[stmpeId] & channel) == 0)
+ {
+ retval = STMPE2401_INITIALIZATION_ERROR;
+ return retval;
+ }
-+
-+ /*
++
++ /*
+ Istruction calculation.
+ example for set pwm at 100:
-+
++
+ adress opcode istruction
-+ --------------------------------
-+
++ --------------------------------
++
+ 0000 00FF SMAX ; set output to 0V
+ 0001 00E4 RAMP_DN 64 ; step, immediate action
+ _label:
-+ 0002 7F01 RAMP_UP_SLOW ;
++ 0002 7F01 RAMP_UP_SLOW ;
+ 0003 7F81 RAMP_DN_SLOW ;
+ 0004 a002 BRANCH _label ; infinite loop
+ */
@@ -181008,7 +181657,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ delta = Devices[stmpeId].Pwm.PwmValue - Value;
+ sign = -1;
+ }
-+
++
+ if(Devices[stmpeId].Pwm.PwmValue == 0)
+ {
+ Istructions[0] = SMAX_ISTRUCTION;
@@ -181039,14 +181688,14 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ }
+ /*insert a semi-flat ramp*/
+ tempAdd = len;
-+
++
+ if(sign == -1)
+ {
+ /*slow ramp down first, needed for direction inversion*/
+ Istructions[len] = RAMP_DN_SLOW;
-+ len++;
++ len++;
+ Istructions[len] = RAMP_UP_SLOW;
-+ len++;
++ len++;
+ }
+ else
+ {
@@ -181061,7 +181710,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ len++;
+ }
+ retval = STMPE2401_SetPwmIstructions( stmpeId, channel, Istructions, len);
-+
++
+ if(retval == STMPE2401_OK)
+ {
+ Devices[stmpeId].Pwm.PwmValue = Value;
@@ -181070,9 +181719,9 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ {
+ Devices[stmpeId].Pwm.PwmValue = 0;
+ }
-+
++
+ return retval;
-+}
++}
+
+/*
+ This function write end execute the pwm microcode passed by "*Istructions"
@@ -181082,34 +181731,34 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ channel = accept STMPE2401_PWM1, STMPE2401_PWM2 or STMPE2401_PWM3
+ Istructions = user microcode
+ len = code len
-+*/
++*/
+t_STMPE2401_error STMPE2401_SetPwmIstructions(uint8 stmpeId, uint8 channel, uint16 Istructions[],uint8 len)
+{
-+
++
+ t_STMPE2401_error retval = STMPE2401_OK;
+ uint8 tempbyte;
+ uint8 tempbuffer[130], bufferLen;
+ uint8 checkbuffer[130];
+ t_STMPE2401_info tempInfo;
+ uint8 i;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId,(uint8)NULL);
+ if(retval != STMPE2401_OK)
+ {
+ return retval;
+ }
-+
++
+ if((PwmInitializationCheck[stmpeId] & channel) == 0)
+ {
+ retval = STMPE2401_INITIALIZATION_ERROR;
+ return retval;
+ }
-+
++
+ if(len > 64)
+ {
+ /*max istruction allowed = 64*/
+ retval = STMPE2401_BAD_PARAMETER;
-+ return retval;
++ return retval;
+ }
+ switch(channel)
+ {
@@ -181128,25 +181777,25 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ break;
+ }
+ bufferLen = 1;
-+
++
+ /*disable pwm channel*/
+ tempbyte = Devices[stmpeId].Pwm.ControlRegister;
+ tempbyte &=~ channel;
+ retval = STMPE2401_WriteByte( stmpeId,PWMCS_Index, tempbyte );
+ if(retval != STMPE2401_OK)
-+ {
++ {
+ return retval;
+ }
+ /*dummy read*/
+ i = 0;
+ do
+ {
-+ retval = STMPE2401_Info( stmpeId, &tempInfo );
++ retval = STMPE2401_Info( stmpeId, &tempInfo );
+ i++;
+ if(i >= 10)
+ {
+ /*execute max 10 tries*/
-+ return retval;
++ return retval;
+ }
+ }
+ while(retval != STMPE2401_OK);
@@ -181160,19 +181809,19 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ }
+ retval = STMPE2401_Write( stmpeId, tempbuffer, bufferLen );
+ if(retval != STMPE2401_OK)
-+ {
++ {
+ return retval;
+ }
+ /*dummy read*/
+ i = 0;
+ do
+ {
-+ retval = STMPE2401_Info( stmpeId, &tempInfo );
++ retval = STMPE2401_Info( stmpeId, &tempInfo );
+ i++;
+ if(i >= 10)
+ {
+ /*execute max 10 tries*/
-+ return retval;
++ return retval;
+ }
+ }
+ while(retval != STMPE2401_OK);
@@ -181193,9 +181842,9 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ Devices[stmpeId].Pwm.ControlRegister = tempbyte;
+ retval = STMPE2401_WriteByte( stmpeId,PWMCS_Index, tempbyte );
+ if(retval != STMPE2401_OK)
-+ {
++ {
+ return retval;
-+ }
++ }
+ /*check if there is a invalid istruction*/
+ retval = STMPE2401_Read( stmpeId,PWMCS_Index,&tempbyte, 1 );
+ if(retval != STMPE2401_OK)
@@ -181217,12 +181866,12 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ schedule_work(&work0);
+ else if(stmp_intr == STMP1_INTR)
+ schedule_work(&work1);
-+ return IRQ_HANDLED;
++ return IRQ_HANDLED;
+}
+
+
+/*
-+ This function init interrupt system base configuration and reset device
++ This function init interrupt system base configuration and reset device
+ register to default.
+
+ Parameter
@@ -181233,19 +181882,19 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+t_STMPE2401_error STMPE2401_Interrupt_Init(uint8 stmpeId,gpio_pin NdkPin, gpio_config NdkPinConfig)
+{
+ t_STMPE2401_error retval = STMPE2401_OK;
-+ uint8 tempBuffer[20],i ;
-+ int err;
++ uint8 tempBuffer[20],i ;
++ int err;
+
+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId,(uint8)NULL);
-+
++
+ if(retval != STMPE2401_OK)
+ {
+ return retval;
+ }
+
+ /*reset to default value*/
-+ tempBuffer[0] = ICR_Lsb_Index;
-+
++ tempBuffer[0] = ICR_Lsb_Index;
++
+ /*ICR_Lsb_Index contents*/
+ switch(NdkPinConfig.trig)
+ {
@@ -181262,7 +181911,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ tempBuffer[1] = 0x02; /*edge (0x2) + falling (0x0)*/
+ break;
+ case GPIO_TRIG_BOTH_EDGES: /*Triggers an IT on a rising and a falling edge*/
-+ retval = STMPE2401_BAD_PARAMETER;/*not allowed*/
++ retval = STMPE2401_BAD_PARAMETER;/*not allowed*/
+ break;
+ case GPIO_TRIG_HIGH_LEVEL: /*Triggers an IT on a high level*/
+ tempBuffer[1] = 0x04; /*level (0x0) + high (0x4)*/
@@ -181272,57 +181921,57 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ break;
+ default :
+ break;
-+ }
-+
++ }
++
+ if(retval != STMPE2401_OK)
+ {
+ return retval;
+ }
+
+ /*saving configuration*/
-+ Devices[stmpeId].Interrupt.ControlReg = tempBuffer[1];
-+
++ Devices[stmpeId].Interrupt.ControlReg = tempBuffer[1];
++
+ /*all interrupt disabled exept gpio */
+ tempBuffer[2] = 0x01;
+ tempBuffer[3] = 0x00;
-+
++
+ /*saving configuration*/
+ /*gpio global interrupt source enabled by default,
+ gpio single source are disabled in "GpioMaskReg"
+ */
+
-+ Devices[stmpeId].Interrupt.EnableReg = 0x0100;
-+
++ Devices[stmpeId].Interrupt.EnableReg = 0x0100;
++
+ /*clear all interrupt flag*/
+ tempBuffer[4] = 0x01; /*ISR_Msb_Index*/
+ tempBuffer[5] = 0xFF; /*ISR_Lsb_Index*/
-+
++
+ /*all gpio interrupt disabled*/
+ tempBuffer[6] = 0x00; /*IEGPIOR_Msb_Index*/
+ tempBuffer[7] = 0x00; /*IEGPIOR_Csb_Index*/
+ tempBuffer[8] = 0x00; /*IEGPIOR_Lsb_Index*/
+ /*saving configuration*/
+ Devices[stmpeId].Interrupt.GpioMaskReg = 0;
-+
++
+ /*clear all gpio interrupt fl/seag*/
+ tempBuffer[9] = 0xFF; /*IEGPIOR_Msb_Index*/
+ tempBuffer[10] = 0xFF; /*IEGPIOR_Csb_Index*/
+ tempBuffer[11] = 0xFF; /*IEGPIOR_Lsb_Index*/
-+
++
+ retval = STMPE2401_Write( stmpeId,tempBuffer, 12 );
-+
++
+ for(i=0;i<MAX_STMPE2401_CALLBACK;i++)
+ {
+ Devices[stmpeId].Interrupt.Callback[i] = &EmptyCallback;
-+ Devices[stmpeId].Interrupt.CallbackParam[i] = NULL;
++ Devices[stmpeId].Interrupt.CallbackParam[i] = NULL;
+ }
-+
++
+ CallbackInstallationCheck[stmpeId] = 0; /*no callback installed*/
-+
++
+ /*saving configuration*/
+ Devices[stmpeId].Interrupt.NdkPin = NdkPin;
+ Devices[stmpeId].Interrupt.NdkPinConfig = NdkPinConfig;
-+
++
+ /*apply configuration*/
+ if(nomadik_gpio_setpinconfig(NdkPin,&NdkPinConfig) != GPIO_OK)
+ {
@@ -181334,13 +181983,13 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ err = request_irq(IRQNO_GPIO(NdkPin), stmp_intr_handler , SA_TRIGGER_FALLING, "stmpe0", NULL);
+ else
+ err = request_irq(IRQNO_GPIO(NdkPin), stmp_intr_handler , SA_TRIGGER_FALLING, "stmpe1", NULL);
-+
++
+ if(err) {
+ printk("unable to Request for the irq %d\n", NdkPin);
+ return err;
+ }
-+ /*Enable the global stmpe interrupt*/
-+ retval = STMPE2401_InterruptAbilitation(stmpeId, STMPE2401_ENABLE_INTERRUPT );
++ /*Enable the global stmpe interrupt*/
++ retval = STMPE2401_InterruptAbilitation(stmpeId, STMPE2401_ENABLE_INTERRUPT );
+ if(retval != STMPE2401_OK)
+ {
+ return retval;
@@ -181351,21 +182000,21 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ This function init Keypad functions
+ Parameter
+ stmpeId = index of the device (0-3)
-+ Settings = keypad settings, Settings.scan field can be ignored for this
++ Settings = keypad settings, Settings.scan field can be ignored for this
+ function, after initializzation is always STMPE2401_SCAN_OFF
-+*/
++*/
+t_STMPE2401_error STMPE2401_Keypad_init(uint8 stmpeId, t_STMPE2401_key_config Settings)
+{
+ t_STMPE2401_error retval = STMPE2401_OK;
+ uint8 tempBuffer[10];
+ uint8 i;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId,(uint8)NULL);
+ if(retval != STMPE2401_OK)
+ {
+ return retval;
+ }
-+
++
+ /*settings verification*/
+ if(Settings.columns > 0x00FF)
+ {
@@ -181385,15 +182034,15 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ {
+ retval = STMPE2401_BAD_PARAMETER;
+ }
-+
++
+ if(retval != STMPE2401_OK)
+ {
+ return retval;
+ }
-+
++
+ /*setting GPIO alternate function
+ columns 0-7 are connected to gpio 0-7*/
-+ for(i=0; i<8; i++ )
++ for(i=0; i<8; i++ )
+ {
+ if((Settings.columns & (1<<i)) != 0)
+ {
@@ -181407,17 +182056,17 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ if(retval != STMPE2401_OK)
+ {
+ return retval;
-+ }
++ }
+ /*enable pull-up and disable pull-down*/
+ retval = STMPE2401_SetGpioPull( stmpeId,i, STMPE2401_PULL_UP );
+ if(retval != STMPE2401_OK)
+ {
+ return retval;
-+ }
++ }
+ }
+ }
+ /*row 0-6 are connected to gpio 8-14*/
-+ for(i=0; i<=6; i++ )
++ for(i=0; i<=6; i++ )
+ {
+ if((Settings.rows & (1<<i)) != 0)
+ {
@@ -181437,11 +182086,11 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ if(retval != STMPE2401_OK)
+ {
+ return retval;
-+ }
++ }
+ }
-+ }
++ }
+ /*row 7-11 are connected to gpio 16-20*/
-+ for(i=7; i<=11; i++ )
++ for(i=7; i<=11; i++ )
+ {
+ if((Settings.rows & (1<<i)) != 0)
+ {
@@ -181461,9 +182110,9 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ if(retval != STMPE2401_OK)
+ {
+ return retval;
-+ }
++ }
+ }
-+ }
++ }
+ Settings.scan = STMPE2401_SCAN_OFF;
+ /*save settings*/
+ memcpy(&Devices[stmpeId].Key, &Settings, sizeof(t_STMPE2401_key_config));
@@ -181488,19 +182137,19 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ Parameter
+ stmpeId = index of the device (0-3)
+ status = STMPE2401_SCAN_ON or STMPE2401_SCAN_OFF
-+*/
++*/
+t_STMPE2401_error STMPE2401_Keypad_scan(uint8 stmpeId, uint8 status)
+{
+ t_STMPE2401_error retval = STMPE2401_OK;
+ uint8 tempByte;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check(stmpeId,(uint8)NULL);
+ if(retval != STMPE2401_OK)
+ {
+ return retval;
+ }
+ tempByte = (Devices[stmpeId].Key.debounce << 1);
-+
++
+ switch(status)
+ {
+ case STMPE2401_SCAN_ON:
@@ -181513,7 +182162,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ retval = STMPE2401_BAD_PARAMETER;
+ break;
+ }
-+
++
+ if(retval == STMPE2401_OK)
+ {
+ retval = STMPE2401_WriteByte(stmpeId,KPC_CTRL_Lsb_Index, tempByte );
@@ -181530,7 +182179,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ Parameter
+ stmpeId = index of the device (0-3)
+ keys = keys pressed
-+*/
++*/
+t_STMPE2401_error STMPE2401_Keypressed(uint8 stmpeId, t_STMPE2401_key_status *keys)
+{
+ t_STMPE2401_error retval = STMPE2401_OK;
@@ -181538,10 +182187,10 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+
+ keys->buttonPressed = 0;
+ keys->buttonReleased = 0;
-+
++
+ retval = STMPE2401_Read( stmpeId,KPC_DATA_BYTE0_Index,tempBuffer, 1 );
+ retval = STMPE2401_Read( stmpeId,KPC_DATA_BYTE1_Index,&tempBuffer[1], 1 );
-+
++
+ if((tempBuffer[0] & STMPE2401_MASK_NO_KEY) != STMPE2401_MASK_NO_KEY )
+ {
+ if((tempBuffer[0] & 0x80) == 0)
@@ -181552,7 +182201,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ else
+ {
+ keys->released[0] = tempBuffer[0] & 0x7F;
-+ keys->buttonReleased++;
++ keys->buttonReleased++;
+ }
+ }
+ if((tempBuffer[1] & STMPE2401_MASK_NO_KEY) != STMPE2401_MASK_NO_KEY )
@@ -181584,14 +182233,14 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ void *CallbackParam)
+{
+ t_STMPE2401_error retval = STMPE2401_OK;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check( stmpeId,(uint8)NULL);
+ if(HwSource >= MAX_STMPE2401_CALLBACK)
+ {
+ retval = STMPE2401_BAD_PARAMETER;
+ }
+ if(retval != STMPE2401_OK)
-+ {
++ {
+ return retval;
+ }
+ switch(HwSource)
@@ -181618,7 +182267,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ retval = STMPE2401_FEAT_NOT_SUPPORTED;
+ break;
+ default :
-+
++
+ break;
+ }
+ Devices[stmpeId].Interrupt.Callback[HwSource] = Callback;
@@ -181638,14 +182287,14 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+t_STMPE2401_error STMPE2401_Remove_Callback(uint8 stmpeId, uint8 HwSource)
+{
+ t_STMPE2401_error retval = STMPE2401_OK;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check( stmpeId,(uint8)NULL);
+ if(HwSource >= MAX_STMPE2401_CALLBACK)
+ {
+ retval = STMPE2401_BAD_PARAMETER;
+ }
+ if(retval != STMPE2401_OK)
-+ {
++ {
+ return retval;
+ }
+ /*check if interrupt is already active*/
@@ -181659,22 +182308,22 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ }
+ Devices[stmpeId].Interrupt.Callback[HwSource] = &EmptyCallback;
+ Devices[stmpeId].Interrupt.CallbackParam[HwSource] = NULL;
-+
++
+ /*Set the callback as installed*/
+ CallbackInstallationCheck[stmpeId] &=~ ((uint32)1 << HwSource);
-+
++
+ return retval;
+}
+
+/*
+ This function enable/disable a interrupt source
-+ In case of interrupt abilitation the interrupt callback MUST be installed
++ In case of interrupt abilitation the interrupt callback MUST be installed
+ first for safety pourpose.
+
+ Parameter
+ stmpeId = index of the device (0-3)
+ HwSource = interrupt source
-+ Abilitation = state to be set (STMPE2401_ENABLE_INTERRUPT or
++ Abilitation = state to be set (STMPE2401_ENABLE_INTERRUPT or
+ STMPE2401_DISABLE_INTERRUPT)
+*/
+t_STMPE2401_error STMPE2401_InterruptSourceAbilitation(uint8 stmpeId, uint8 HwSource, uint8 Abilitation )
@@ -181683,18 +182332,18 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ uint8 tempByte,offset;
+ uint16 mask=0,tempWord;
+ uint32 tempLong;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check( stmpeId,(uint8)NULL);
+ if(HwSource >= MAX_STMPE2401_CALLBACK)
+ {
+ retval = STMPE2401_BAD_PARAMETER;
+ }
-+
++
+ if(retval != STMPE2401_OK)
-+ {
++ {
+ return retval;
+ }
-+
++
+ switch(HwSource)
+ {
+ case STMPE2401_WAKEUP_IRQ:
@@ -181726,13 +182375,13 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ break;
+ }
+ if(retval != STMPE2401_OK)
-+ {
++ {
+ return retval;
+ }
-+
++
+ tempWord = Devices[stmpeId].Interrupt.EnableReg;
+ tempLong = Devices[stmpeId].Interrupt.GpioMaskReg;
-+
++
+ switch(Abilitation)
+ {
+ case STMPE2401_ENABLE_INTERRUPT:
@@ -181765,7 +182414,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ }
+ break;
+ case STMPE2401_DISABLE_INTERRUPT:
-+
++
+ if(HwSource <= STMPE2401_GPIO_IRQ(23))
+ {
+ tempLong &=~ ((uint32)1 << HwSource);
@@ -181780,9 +182429,9 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ break;
+ }
+ if(retval == STMPE2401_OK)
-+ {
++ {
+ if(HwSource <= STMPE2401_GPIO_IRQ(23))
-+ {
++ {
+ /*update only gpio mask register*/
+ tempByte = (tempLong >> ((HwSource / 8) * 8)) & 0xFF;
+ offset = IEGPIOR_Lsb_Index - (HwSource / 8);
@@ -181795,10 +182444,10 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ }
+ }
+ if(retval == STMPE2401_OK)
-+ {
++ {
+ Devices[stmpeId].Interrupt.EnableReg = tempWord;
+ Devices[stmpeId].Interrupt.GpioMaskReg = tempLong;
-+
++
+ if(Abilitation == STMPE2401_ENABLE_INTERRUPT)
+ {
+ InterruptActive[stmpeId] |= ((uint32)1 << HwSource);
@@ -181809,7 +182458,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ }
+ }
+ return retval;
-+
++
+}
+
+/* Modified version : enables/disables only global interrupt inside the STMPE2401*/
@@ -181820,7 +182469,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+
+ tempByte[0] = Devices[stmpeId].Interrupt.ControlReg >>8;
+ tempByte[1] = Devices[stmpeId].Interrupt.ControlReg & 0xFF;
-+
++
+ retval = STMPE2401_Gpio_Parameter_Check( stmpeId, (uint8)NULL);
+ if(retval == STMPE2401_OK )
+ {
@@ -181836,7 +182485,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ /*clear Global Interrupt Mask bit*/
+ tempByte[1] &=~ 0x01;
+ Devices[stmpeId].Interrupt.ControlReg &=~ 0x01;
-+ retval = STMPE2401_WriteByte( stmpeId,ICR_Lsb_Index, tempByte[1] );
++ retval = STMPE2401_WriteByte( stmpeId,ICR_Lsb_Index, tempByte[1] );
+ /*clear pending flags ??*/
+ break;
+ default :
@@ -181858,7 +182507,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ tempBuffer[1] = (uint8)(irqSource >> 8);
+ tempBuffer[2] = (uint8)(irqSource & 0xFF);
+ err = STMPE2401_Write( stmpeId,tempBuffer, 3 );
-+
++
+ /* if it's a GPIO interrupt then acknowledge the GPIO interrupt status as well*/
+ if(irqSource & 0x100)
+ {
@@ -181874,7 +182523,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ return err;
+}
+
-+/*IRQ function.
++/*IRQ function.
+*/
+static void nomadik_stmpe0_wq(void * data)
+{
@@ -181884,10 +182533,10 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ uint16 irqSource = 0, shift;
+ uint32 irqGpioSource = 0;
+ /*unsigned long flags; */
-+ uint8 stmpeId = STMPE0;
-+
++ uint8 stmpeId = STMPE0;
++
+ /*spin_lock_irqsave(&stmpe_list_lock, flags);*/
-+ /*check the interruption sources reading the "Interrupt status register"
++ /*check the interruption sources reading the "Interrupt status register"
+ and if needed "Interrupt status GPIO register"
+ */
+ err = STMPE2401_Read( stmpeId,ISR_Msb_Index, &tempBuffer[1], 2 );
@@ -181947,10 +182596,10 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ err = STMPE2401_Write( stmpeId, tempBuffer, 4 );
+ }
+ }
-+ }
++ }
+ }
+ if(err == STMPE2401_OK)
-+ {
++ {
+ while(irqSource != 0)
+ {
+ ISx = 8;
@@ -181973,7 +182622,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ }
+ /*clear gpio request bit*/
+ irqGpioSource &=~ ((uint32)1 << ISGx);
-+ vector = ISGx;
++ vector = ISGx;
+ if(irqGpioSource == 0)
+ {
+ /*no other gpio request, clear request bit*/
@@ -182008,7 +182657,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ {
+ err = STMPE2401_INTERNAL_ERROR;
+ }
-+
++
+ if(err == STMPE2401_OK)
+ {
+ /*Callback execution*/
@@ -182044,9 +182693,9 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ uint16 irqSource = 0, shift;
+ uint32 irqGpioSource = 0;
+ /*unsigned long flags; */
-+ uint8 stmpeId = STMPE1;
++ uint8 stmpeId = STMPE1;
+
-+ /*check the interruption sources reading the "Interrupt status register"
++ /*check the interruption sources reading the "Interrupt status register"
+ and if needed "Interrupt status GPIO register"
+ */
+ err = STMPE2401_Read( stmpeId,ISR_Msb_Index, &tempBuffer[1], 2 );
@@ -182056,7 +182705,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ irqSource = irqSource << 8;
+ irqSource |= tempBuffer[2];
+ irqSource &= 0x1FF; /*remove non ISx bits*/
-+
++
+ if(irqSource == 0)
+ {
+ /*error, no STMPE2401 irq request find !!!*/
@@ -182067,8 +182716,8 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ /*write back flags for interrupt request clearing*/
+ tempBuffer[0] = ISR_Msb_Index;
+ err = STMPE2401_Write( stmpeId,tempBuffer, 3 );
-+
-+
++
++
+ if(irqSource & 0x100)
+ {
+ /*irqGpioSource*/
@@ -182077,7 +182726,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ {
+ irqGpioSource = (tempBuffer[1] << 16) | (tempBuffer[2] << 8) | (tempBuffer[3]);
+ }
-+
++
+ if(irqGpioSource == 0)
+ {
+ /*error, no STMPE2401 gpio irq request find !!!*/
@@ -182111,10 +182760,10 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ }
+
+ }
-+ }
++ }
+ }
+ if(err == STMPE2401_OK)
-+ {
++ {
+ while(irqSource != 0)
+ {
+ ISx = 8;
@@ -182122,14 +182771,14 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ {
+ if((irqSource & shift) != 0)
+ {
-+
++
+ break;
+ }
+ ISx --;
+ }
+ if(ISx == 8)
+ {
-+
++
+ for(ISGx=0;ISGx<24;ISGx ++ )
+ {
+ if(irqGpioSource & ((uint32)1 << ISGx ))
@@ -182139,20 +182788,20 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ }
+ /*clear gpio request bit*/
+ irqGpioSource &=~ ((uint32)1 << ISGx);
-+ vector = ISGx;
-+
++ vector = ISGx;
++
+ if(irqGpioSource == 0)
+ {
+ /*no other gpio request, clear request bit*/
+ irqSource &=~ 0x100;
+ }
-+
++
+ }
+ else
+ {
+ /*clear request bit*/
+ irqSource &=~ shift;
-+
++
+ vector = ISx + STMPE2401_WAKEUP_IRQ;
+ if(vector >= STMPE2401_ROTATOR_IRQ)
+ {
@@ -182177,7 +182826,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ {
+ err = STMPE2401_INTERNAL_ERROR;
+ }
-+
++
+ if(err == STMPE2401_OK)
+ {
+ /*Callback execution*/
@@ -182211,7 +182860,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+
+ Parameter
+ stmpeId = index of the device (0-3)
-+ PinIndex = pin to be set (0-23)
++ PinIndex = pin to be set (0-23)
+ use NULL if don't care
+*/
+static t_STMPE2401_error STMPE2401_Gpio_Parameter_Check(uint8 stmpeId, uint8 PinIndex)
@@ -182229,7 +182878,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ if(PinIndex >= MAX_STMPE2401_GPIO)
+ {
+ /*number of pin exceeded*/
-+ return STMPE2401_BAD_PARAMETER;
++ return STMPE2401_BAD_PARAMETER;
+ }
+ return STMPE2401_OK;
+}
@@ -182238,20 +182887,20 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ This function execute common gpio bit calculation
+
+ Parameter
-+ PinIndex = pin to be set (0-23)
++ PinIndex = pin to be set (0-23)
+ PinValue = value to be set (0-1)
+ Offset = in - base register XXXX_Msb_Index
-+ out - correct register
++ out - correct register
+ RegValue = in - current register value
+ out - new value
+*/
+static t_STMPE2401_error STMPE2401_Bit_Calc( uint8 PinIndex, uint8 PinValue,uint8 *Register, uint32 *RegValue, uint8 *RegByte)
+{
+ uint8 mask;
-+
++
+ mask = 1 << (PinIndex % 8);
+ *RegByte = (*RegValue >> ((PinIndex / 8) * 8)) & 0xFF;
-+
++
+ if(PinValue == 0)
+ {
+ *RegByte &=~ mask;
@@ -182283,7 +182932,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+
+/*
+ This function write via I2C on the selected STMPE2401
-+ the first BYTE must be the internal register offset.
++ the first BYTE must be the internal register offset.
+
+ Parameter
+ stmpeId = index of the device (0-3)
@@ -182300,7 +182949,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ ret_val=nomadik_i2c_write_register(I2C_STMPE1_CLIENT,&buffer[1],buffer[0],nByte);
+ }
+
-+ if (ret_val) {
++ if (ret_val) {
+ printk("Error in writing value to STMPE register\n");
+ return ret_val;
+ }
@@ -182328,7 +182977,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+
+/*
+ This function read via I2C on the selected STMPE2401
-+ the first BYTE must be the internal register offset.
++ the first BYTE must be the internal register offset.
+
+ Parameter
+ stmpeId = index of the device (0-3)
@@ -182338,15 +182987,15 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+*/
+static t_STMPE2401_error STMPE2401_Read(uint8 stmpeId,uint8 offset,uint8 *buffer, uint8 nByte )
+{
-+ int ret_val = 0;
-+
++ int ret_val = 0;
++
+ if (stmpeId == STMPE0) {
+ ret_val=nomadik_i2c_read_register(I2C_STMPE0_CLIENT,(__u8 *)buffer,offset,nByte);
+ if (ret_val) return ret_val;
+ }else {
+ ret_val=nomadik_i2c_read_register(I2C_STMPE1_CLIENT,(__u8 *)buffer,offset,nByte);
+ if (ret_val) return ret_val;
-+ }
++ }
+ return STMPE2401_OK;
+}
+
@@ -182382,7 +183031,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+{
+ int i;
+ t_STMPE2401_error err = STMPE2401_OK;
-+
++
+ for(i=0; i<2; i++) {
+ /*syscontrol*/
+ STMPE2401_Read(i, SYSCON_Index, &syscont[i].syscon_data, 1);
@@ -182545,8 +183194,8 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ return err;
+}
+/*
-+ This function is used for disabled callback.
-+ Reduce the danger of execution of null poiter.
++ This function is used for disabled callback.
++ Reduce the danger of execution of null poiter.
+*/
+static void EmptyCallback(void *parameter)
+{
@@ -182572,7 +183221,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+ STMPE2401_SetGpioAltFunction(STMPE1,EGPIO_PIN_5,STMPE2401_PRIMARY_FUNCTION);
+ STMPE2401_SetGpioDir( STMPE1,EGPIO_PIN_5,STMPE2401_GPIO_OUT );
+ STMPE2401_SetGpioVal( STMPE1, EGPIO_PIN_5, 1);
-+
++
+ return 0;
+}
+#else
@@ -182608,7 +183257,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+EXPORT_SYMBOL(STMPE2401_ClearGpioEdgeStatus);
+EXPORT_SYMBOL(STMPE2401_SetGpioEdgeDetect);
+EXPORT_SYMBOL(STMPE2401_Install_Callback);
-+EXPORT_SYMBOL(STMPE2401_SetGpioDir);
++EXPORT_SYMBOL(STMPE2401_SetGpioDir);
+EXPORT_SYMBOL(STMPE2401_SetGpioAltFunction);
+EXPORT_SYMBOL(STMPE2401_InterruptSourceAbilitation);
+EXPORT_SYMBOL(STMPE2401_InterruptAbilitation);
@@ -182622,9 +183271,8 @@ diff -Nauprw linux-2.6.20/drivers/misc/pexp-nomadik.c ../new/linux-2.6.20/driver
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("ST Microelectronics");
+MODULE_DESCRIPTION("STMPE driver for Nomadik Platform");
-diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers/misc/sif-nomadik.c
---- linux-2.6.20/drivers/misc/sif-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/misc/sif-nomadik.c 2008-10-20 13:37:45.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/misc/sif-nomadik.c
@@ -0,0 +1,560 @@
+/*
+ * Overview:
@@ -182666,7 +183314,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+#include <asm/arch/debug.h>
+#include <asm/arch/gpio.h>
+
-+#define SIF_SDA GPIO_PIN_4
++#define SIF_SDA GPIO_PIN_4
+#define SIF_SCL GPIO_PIN_5
+#define SIF_SCEN GPIO_PIN_6
+
@@ -182745,9 +183393,9 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+#define SIF_GAMMA248 0x1E
+#define SIF_GAMMA256 0x1F
+
-+#define SIF_GAMMA_PVOLTAGE 0x20
++#define SIF_GAMMA_PVOLTAGE 0x20
+#define SIF_GAMMA_NVOLTAGE 0x21
-+#define SIF_DC_VCOM 0x22
++#define SIF_DC_VCOM 0x22
+
+
+/*file operation members*/
@@ -182823,7 +183471,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+ }
+ //GPIO_SetGpioPin(scl);
+ sif_wait150ns(); // hold time
-+
++
+ nomadik_gpio_writepin(SIF_SCL,0,"sif");
+ //GPIO_ClearGpioPin(scl);
+}
@@ -182836,7 +183484,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+ unsigned char bit=0;
+
+ *p_databyte = 0x0;
-+/*
++/*
+ gpio_config.dev_name = "sif";
+ gpio_config.mode = GPIO_MODE_SOFTWARE;
+ gpio_config.direction = GPIO_DIR_OUTPUT;
@@ -182847,7 +183495,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+ if (ret) {
+ printk("Error in setting GPIO_PIN_04");
+ }
-+*/
++*/
+ sif_wait150ns();
+ // start
+ //GPIO_ClearGpioPin(scen);
@@ -182864,7 +183512,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+ // Read bit
+ sif_write_databit(1);
+
-+
++
+ nomadik_gpio_resetpinconfig(SIF_SDA, "sif");
+
+ // turn-round cycle
@@ -182925,7 +183573,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+{
+ int ret;
+ gpio_config sif_pin;
-+
++
+ sif_pin.dev_name = "sif";
+ sif_pin.mode = GPIO_MODE_SOFTWARE;
+ sif_pin.direction = GPIO_DIR_OUTPUT;
@@ -182934,7 +183582,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+
+ sif_pin.trig = GPIO_TRIG_LEAVE_UNCHANGED;
+ sif_pin.debounce = GPIO_DEBOUNCE_UNCHANGED;
-+
++
+/* ret = nomadik_gpio_setpinconfig(SIF_SDA, &sif_pin);
+ if (ret) {
+ printk("7)Error in setting GPIO_PIN_04");
@@ -182971,7 +183619,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+
+ //udelay(100);
+ sif_wait150ns();
-+
++
+ ret = nomadik_gpio_writepin(SIF_SCEN,1,"sif");
+ if (ret) {
+ printk("8)Error in setting GPIO_PIN_06");
@@ -182988,7 +183636,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+ struct bright bright;
+ struct gamma gamma;
+
-+
++
+ if (_IOC_DIR(cmd) & _IOC_READ)
+ err = !access_ok(VERIFY_WRITE, (void *)arg, _IOC_SIZE(cmd));
+ else if (_IOC_DIR(cmd) & _IOC_WRITE)
@@ -182997,7 +183645,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+ return -EFAULT;
+
+ switch (cmd) {
-+
++
+ case SIF_READ_CHIP_ID_REV:
+ //copy_from_user(&bklight ,argp, sizeof(int));
+ //sif_read(SIF_CHIPID_VER,&byte_val);
@@ -183008,7 +183656,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+ int __user *argp = (struct contrast __user *)arg;
+ if (copy_from_user(&ctr ,argp, sizeof(struct contrast)))
+ return -EFAULT;
-+
++
+ printk("RGB contrast = %x %x %x\n",ctr.r,ctr.g, ctr.b);
+ sif_write(SIF_RGAIN_CONTRAST,ctr.r);
+ sif_write(SIF_GGAIN_CONTRAST,ctr.g);
@@ -183022,19 +183670,19 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+ return -EFAULT;
+
+ printk("RGB brightness = %x %x %x\n",bright.r,bright.g,bright.b);
-+ sif_write(SIF_OFFSET_RBRIGHTNESS,bright.r);
-+ sif_write(SIF_OFFSET_GBRIGHTNESS,bright.g);
-+ sif_write(SIF_OFFSET_BBRIGHTNESS,bright.b);
++ sif_write(SIF_OFFSET_RBRIGHTNESS,bright.r);
++ sif_write(SIF_OFFSET_GBRIGHTNESS,bright.g);
++ sif_write(SIF_OFFSET_BBRIGHTNESS,bright.b);
+ }
+ break;
+
+ case SIF_GAMMA_CORRECTION:
+ {
+ int __user *argp = (struct gamma __user *)arg;
-+
++
+ if (copy_from_user(&gamma ,argp, sizeof(struct gamma)))
+ return -EFAULT;
-+
++
+ printk("gamma values = %x %x %x %x %x %x %x %x %x %x %x %x\n",gamma.gamma0,gamma.gamma8,gamma.gamma16,gamma.gamma32,gamma.gamma64,gamma.gamma96,gamma.gamma128,gamma.gamma192,gamma.gamma224,gamma.gamma240,gamma.gamma248,gamma.gamma256);
+
+ sif_write(SIF_GAMMA0, gamma.gamma0);
@@ -183050,7 +183698,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+ sif_write(SIF_GAMMA248, gamma.gamma248);
+ sif_write(SIF_GAMMA256, gamma.gamma256);
+ }
-+ break;
++ break;
+ default:
+ return -EINVAL;
+ }
@@ -183059,7 +183707,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+/**
+ * nomadik_sif_open - open sys call for sif device
+ * @inode: pointer to the inode structure for the sif device
-+ * @filp: pointer to the file structure for the sif device
++ * @filp: pointer to the file structure for the sif device
+ *
+ * This function opens the sif device for file operations.
+ */
@@ -183070,7 +183718,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+
+/**
+ * nomadik_sif_release - close sys call for sif device
-+ * @inode: pointer to the inode structure for the sif device
++ * @inode: pointer to the inode structure for the sif device
+ * @filp: pointer to the file structure for the sif device
+ *
+ * This function is called when the sif device is closed.
@@ -183105,7 +183753,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+static int __init sif_nomadik_init(void)
+{
+ int ret=0;
-+ unsigned char byte_value;
++ unsigned char byte_value;
+
+ gpio_config sif_pin;
+ sif_pin.dev_name = "sif";
@@ -183113,7 +183761,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+ sif_pin.direction = GPIO_DIR_OUTPUT;
+ sif_pin.trig = GPIO_TRIG_LEAVE_UNCHANGED;
+ sif_pin.debounce = GPIO_DEBOUNCE_UNCHANGED;
-+
++
+ ret = nomadik_gpio_setpinconfig(SIF_SDA, &sif_pin);
+ if (ret) {
+ printk("9)Error in setting GPIO_PIN_04");
@@ -183133,7 +183781,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+ nomadik_gpio_writepin(SIF_SDA,0,"sif");
+ nomadik_gpio_writepin(SIF_SCL,0,"sif");
+ nomadik_gpio_writepin(SIF_SCEN,1,"sif");
-+
++
+
+ ret = misc_register(&sif_dev);
+ if (ret) {
@@ -183145,10 +183793,10 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+ sif_write(SIF_RGAIN_CONTRAST,24);
+ sif_write(SIF_GGAIN_CONTRAST,23);
+ sif_write(SIF_BGAIN_CONTRAST,23);
-+
-+ sif_write(SIF_OFFSET_RBRIGHTNESS,63);
-+ sif_write(SIF_OFFSET_GBRIGHTNESS,63);
-+ sif_write(SIF_OFFSET_BBRIGHTNESS,63);
++
++ sif_write(SIF_OFFSET_RBRIGHTNESS,63);
++ sif_write(SIF_OFFSET_GBRIGHTNESS,63);
++ sif_write(SIF_OFFSET_BBRIGHTNESS,63);
+
+ /*set the default gamma values */
+ sif_write(SIF_GAMMA0, 0); //gamma.gamma0);
@@ -183177,7 +183825,7 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+ nomadik_gpio_resetpinconfig(SIF_SDA, "sif");
+ nomadik_gpio_resetpinconfig(SIF_SCL, "sif");
+ nomadik_gpio_resetpinconfig(SIF_SCEN, "sif");
-+ misc_deregister(&sif_dev);
++ misc_deregister(&sif_dev);
+ return;
+}
+
@@ -183186,10 +183834,11 @@ diff -Nauprw linux-2.6.20/drivers/misc/sif-nomadik.c ../new/linux-2.6.20/drivers
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("ST Microelectronics");
+MODULE_DESCRIPTION("CLCD proptocol driver for Nomadik Platform");
-diff -Nauprw linux-2.6.20/drivers/mmc/Kconfig ../new/linux-2.6.20/drivers/mmc/Kconfig
---- linux-2.6.20/drivers/mmc/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mmc/Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -125,4 +125,31 @@ config MMC_TIFM_SD
+--- linux-2.6.20.orig/drivers/mmc/Kconfig
++++ linux-2.6.20/drivers/mmc/Kconfig
+@@ -123,6 +123,33 @@ config MMC_TIFM_SD
+ (TIFM_7XX1)'.
+
To compile this driver as a module, choose M here: the
module will be called tifm_sd.
@@ -183202,7 +183851,7 @@ diff -Nauprw linux-2.6.20/drivers/mmc/Kconfig ../new/linux-2.6.20/drivers/mmc/Kc
+ Depends on Nomadik DMA driver.
+
+ If unsure, say N.
-+ choice
++ choice
+ prompt "Driver mode"
+ depends on MMC_NOMADIK
+ default NOMADIK_MMC_DMA
@@ -183210,7 +183859,7 @@ diff -Nauprw linux-2.6.20/drivers/mmc/Kconfig ../new/linux-2.6.20/drivers/mmc/Kc
+ config NOMADIK_MMC_DMA
+ depends on MMC_NOMADIK
+ bool "DMA mode"
-+
++
+ config NOMADIK_MMC_POLL
+ depends on MMC_NOMADIK
+ bool "Polling mode"
@@ -183221,10 +183870,11 @@ diff -Nauprw linux-2.6.20/drivers/mmc/Kconfig ../new/linux-2.6.20/drivers/mmc/Kc
+ endchoice
+
endmenu
-diff -Nauprw linux-2.6.20/drivers/mmc/Makefile ../new/linux-2.6.20/drivers/mmc/Makefile
---- linux-2.6.20/drivers/mmc/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mmc/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -6,21 +6,22 @@
+--- linux-2.6.20.orig/drivers/mmc/Makefile
++++ linux-2.6.20/drivers/mmc/Makefile
+@@ -4,25 +4,26 @@
+
+ #
# Core
#
obj-$(CONFIG_MMC) += mmc_core.o
@@ -183251,9 +183901,10 @@ diff -Nauprw linux-2.6.20/drivers/mmc/Makefile ../new/linux-2.6.20/drivers/mmc/M
obj-$(CONFIG_MMC_OMAP) += omap.o
obj-$(CONFIG_MMC_AT91) += at91_mci.o
obj-$(CONFIG_MMC_TIFM_SD) += tifm_sd.o
-diff -Nauprw linux-2.6.20/drivers/mmc/mmc-nomadik.c ../new/linux-2.6.20/drivers/mmc/mmc-nomadik.c
---- linux-2.6.20/drivers/mmc/mmc-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mmc/mmc-nomadik.c 2007-11-21 11:51:42.000000000 +0530
+
+ mmc_core-y := mmc.o mmc_sysfs.o
+--- /dev/null
++++ linux-2.6.20/drivers/mmc/mmc-nomadik.c
@@ -0,0 +1,1435 @@
+/*
+ * linux/drivers/mmc/mmc-nomadik.c - ARM PrimeCell MMCI PL180 driver
@@ -184240,7 +184891,7 @@ diff -Nauprw linux-2.6.20/drivers/mmc/mmc-nomadik.c ../new/linux-2.6.20/drivers/
+ mmc = amba_get_drvdata(nomadik_mmc_dev);
+ host = mmc_priv(mmc);
+
-+//Adding This AK
++//Adding This AK
+#if 0
+ nomadik_gpio_readpin(GPIO_PIN_FOR_IRQ(dev->irq[1]), &status);
+ if (status)
@@ -184288,8 +184939,8 @@ diff -Nauprw linux-2.6.20/drivers/mmc/mmc-nomadik.c ../new/linux-2.6.20/drivers/
+
+
+
-+//--- Changes this Callback Function . AK
-+#if 1 //ak FOR TEST
++//--- Changes this Callback Function . AK
++#if 1 //ak FOR TEST
+static irqreturn_t nomadik_mmc_detect_int(int irq, void *dev_id)
+{
+ struct nomadik_mmci_host *host = (struct nomadik_mmci_host *)dev_id;
@@ -184307,11 +184958,11 @@ diff -Nauprw linux-2.6.20/drivers/mmc/mmc-nomadik.c ../new/linux-2.6.20/drivers/
+ int err;
+ unsigned char byte_value;
+ struct nomadik_mmci_host *host = (struct nomadik_mmci_host *)dev_id;
-+ int ret;
++ int ret;
+ /*
+ * Used to implement S/W debounce
+ */
-+ // --- Added Ak
++ // --- Added Ak
+ printk("\n Got the Card Dectect Interrupt\n") ;
+ err = STMPE2401_GetGpioVal(STMPE1,EGPIO_PIN_7,&byte_value);
+ if(err != STMPE2401_OK )
@@ -184445,7 +185096,7 @@ diff -Nauprw linux-2.6.20/drivers/mmc/mmc-nomadik.c ../new/linux-2.6.20/drivers/
+ /*
+ * Card detection interrupt request
+ */
-+// --- Addition Starts AK
++// --- Addition Starts AK
+ err = STMPE2401_SetGpioVal(STMPE1,EGPIO_PIN_2, 0);
+ if (err != STMPE2401_OK)
+ {
@@ -184463,7 +185114,7 @@ diff -Nauprw linux-2.6.20/drivers/mmc/mmc-nomadik.c ../new/linux-2.6.20/drivers/
+ }
+ //err = STMPE2401_Install_Callback(STMPE1,EGPIO_PIN_7,(void *)nomadik_mmc_detect_int,host);
+ err = STMPE2401_Install_Callback(STMPE1,EGPIO_PIN_7,(void *)nomadik_mmc_detect,host);
-+
++
+ if (err != STMPE2401_OK)
+ {
+ DEBUG(KERN_ALERT "Couldn't setup codec callback\n");
@@ -184481,7 +185132,7 @@ diff -Nauprw linux-2.6.20/drivers/mmc/mmc-nomadik.c ../new/linux-2.6.20/drivers/
+ DEBUG("Couldn't abilitate the codec source interrupt\n");
+ }
+ udelay(50);
-+#if 0 //Ak for test
++#if 0 //Ak for test
+ ret = request_irq(dev->irq[1], nomadik_mmc_detect_int,
+ (SA_TRIGGER_RISING | SA_TRIGGER_FALLING),
+ "mmc_detect", host);
@@ -184690,10 +185341,11 @@ diff -Nauprw linux-2.6.20/drivers/mmc/mmc-nomadik.c ../new/linux-2.6.20/drivers/
+MODULE_AUTHOR("Vaibhav Agarwal (vaibhav.agarwal@st.com)");
+MODULE_DESCRIPTION("ARM PrimeCell PL180 Multimedia Card Interface driver");
+MODULE_LICENSE("GPL");
-diff -Nauprw linux-2.6.20/drivers/mtd/maps/Kconfig ../new/linux-2.6.20/drivers/mtd/maps/Kconfig
---- linux-2.6.20/drivers/mtd/maps/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mtd/maps/Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -69,6 +69,13 @@ config MTD_PHYSMAP_OF
+--- linux-2.6.20.orig/drivers/mtd/maps/Kconfig
++++ linux-2.6.20/drivers/mtd/maps/Kconfig
+@@ -67,10 +67,17 @@ config MTD_PHYSMAP_OF
+ This provides a 'mapping' driver which allows the NOR Flash and
+ ROM driver code to communicate with chips which are mapped
physically into the CPU's memory. The mapping description here is
taken from OF device tree.
@@ -184707,10 +185359,13 @@ diff -Nauprw linux-2.6.20/drivers/mtd/maps/Kconfig ../new/linux-2.6.20/drivers/m
config MTD_SUN_UFLASH
tristate "Sun Microsystems userflash support"
depends on SPARC && MTD_CFI
-diff -Nauprw linux-2.6.20/drivers/mtd/maps/Makefile ../new/linux-2.6.20/drivers/mtd/maps/Makefile
---- linux-2.6.20/drivers/mtd/maps/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mtd/maps/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -7,7 +7,12 @@ ifeq ($(CONFIG_MTD_COMPLEX_MAPPINGS),y)
+ help
+ This provides a 'mapping' driver which supports the way in
+--- linux-2.6.20.orig/drivers/mtd/maps/Makefile
++++ linux-2.6.20/drivers/mtd/maps/Makefile
+@@ -5,11 +5,16 @@
+
+ ifeq ($(CONFIG_MTD_COMPLEX_MAPPINGS),y)
obj-$(CONFIG_MTD) += map_funcs.o
endif
@@ -184723,7 +185378,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/maps/Makefile ../new/linux-2.6.20/drivers/
obj-$(CONFIG_MTD_CDB89712) += cdb89712.o
obj-$(CONFIG_MTD_ARM_INTEGRATOR)+= integrator-flash.o
obj-$(CONFIG_MTD_BAST) += bast-flash.o
-@@ -25,7 +30,7 @@ obj-$(CONFIG_MTD_MAINSTONE) += mainstone
+ obj-$(CONFIG_MTD_CFI_FLAGADM) += cfi_flagadm.o
+ obj-$(CONFIG_MTD_DC21285) += dc21285.o
+@@ -23,19 +28,19 @@ obj-$(CONFIG_MTD_TSUNAMI) += tsunami_fla
+ obj-$(CONFIG_MTD_LUBBOCK) += lubbock-flash.o
+ obj-$(CONFIG_MTD_MAINSTONE) += mainstone-flash.o
obj-$(CONFIG_MTD_MBX860) += mbx860.o
obj-$(CONFIG_MTD_CEIVA) += ceiva.o
obj-$(CONFIG_MTD_OCTAGON) += octagon-5066.o
@@ -184732,7 +185391,7 @@ diff -Nauprw linux-2.6.20/drivers/mtd/maps/Makefile ../new/linux-2.6.20/drivers/
obj-$(CONFIG_MTD_PHYSMAP_OF) += physmap_of.o
obj-$(CONFIG_MTD_PNC2000) += pnc2000.o
obj-$(CONFIG_MTD_PCMCIA) += pcmciamtd.o
-@@ -33,7 +38,7 @@ obj-$(CONFIG_MTD_RPXLITE) += rpxlite.o
+ obj-$(CONFIG_MTD_RPXLITE) += rpxlite.o
obj-$(CONFIG_MTD_TQM8XXL) += tqm8xxl.o
obj-$(CONFIG_MTD_SA1100) += sa1100-flash.o
obj-$(CONFIG_MTD_IPAQ) += ipaq-flash.o
@@ -184741,15 +185400,18 @@ diff -Nauprw linux-2.6.20/drivers/mtd/maps/Makefile ../new/linux-2.6.20/drivers/
obj-$(CONFIG_MTD_SC520CDP) += sc520cdp.o
obj-$(CONFIG_MTD_NETSC520) += netsc520.o
obj-$(CONFIG_MTD_TS5500) += ts5500_flash.o
-@@ -72,3 +77,5 @@ obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o
+ obj-$(CONFIG_MTD_SUN_UFLASH) += sun_uflash.o
+ obj-$(CONFIG_MTD_VMAX) += vmax301.o
+@@ -70,5 +75,7 @@ obj-$(CONFIG_MTD_DMV182) += dmv182.o
+ obj-$(CONFIG_MTD_SHARP_SL) += sharpsl-flash.o
+ obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o
obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o
obj-$(CONFIG_MTD_MTX1) += mtx-1_flash.o
obj-$(CONFIG_MTD_TQM834x) += tqm834x.o
+
+
-diff -Nauprw linux-2.6.20/drivers/mtd/maps/norflash-nomadik.c ../new/linux-2.6.20/drivers/mtd/maps/norflash-nomadik.c
---- linux-2.6.20/drivers/mtd/maps/norflash-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mtd/maps/norflash-nomadik.c 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/mtd/maps/norflash-nomadik.c
@@ -0,0 +1,411 @@
+/*
+ * drivers/mtd/maps/norflash-nomadik.c
@@ -184760,14 +185422,14 @@ diff -Nauprw linux-2.6.20/drivers/mtd/maps/norflash-nomadik.c ../new/linux-2.6.2
+ *
+ * Based on ADI BRH map written by Deepak Saxena
+ * Based on iq80310 map written by Nicolas Pitre
-+ *
-+ * 02-05-2007: Sachin Verma (sachin.verma@st.com)
++ *
++ * 02-05-2007: Sachin Verma (sachin.verma@st.com)
+ * - Rewritten Driver to use standard kernel interfaces.
+ * - Added Power Management Routines for suspend()/resume()
-+ * - Removed static mtd_info structures, replacing them with platform data
++ * - Removed static mtd_info structures, replacing them with platform data
+ * - Removed Header File asm/arch/norflash-nomadik.h
-+ *
-+ *
++ *
++ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
@@ -185162,10 +185824,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/maps/norflash-nomadik.c ../new/linux-2.6.2
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("ST Microelectronics (prafulla.wadaskar@st.com)");
+MODULE_DESCRIPTION("MTD map driver for Nomadik Platform");
-diff -Nauprw linux-2.6.20/drivers/mtd/nand/Kconfig ../new/linux-2.6.20/drivers/mtd/nand/Kconfig
---- linux-2.6.20/drivers/mtd/nand/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mtd/nand/Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -13,6 +13,12 @@ config MTD_NAND
+--- linux-2.6.20.orig/drivers/mtd/nand/Kconfig
++++ linux-2.6.20/drivers/mtd/nand/Kconfig
+@@ -11,10 +11,16 @@ config MTD_NAND
+ help
+ This enables support for accessing all type of NAND flash
devices. For further information see
<http://www.linux-mtd.infradead.org/doc/nand.html>.
@@ -185178,10 +185841,13 @@ diff -Nauprw linux-2.6.20/drivers/mtd/nand/Kconfig ../new/linux-2.6.20/drivers/m
config MTD_NAND_VERIFY_WRITE
bool "Verify NAND page writes"
depends on MTD_NAND
-diff -Nauprw linux-2.6.20/drivers/mtd/nand/Makefile ../new/linux-2.6.20/drivers/mtd/nand/Makefile
---- linux-2.6.20/drivers/mtd/nand/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mtd/nand/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -24,6 +24,11 @@ obj-$(CONFIG_MTD_NAND_NANDSIM) += nands
+ help
+ This adds an extra check when data is written to the flash. The
+--- linux-2.6.20.orig/drivers/mtd/nand/Makefile
++++ linux-2.6.20/drivers/mtd/nand/Makefile
+@@ -22,8 +22,13 @@ obj-$(CONFIG_MTD_NAND_SHARPSL) += sharp
+ obj-$(CONFIG_MTD_NAND_TS7250) += ts7250.o
+ obj-$(CONFIG_MTD_NAND_NANDSIM) += nandsim.o
obj-$(CONFIG_MTD_NAND_CS553X) += cs553x_nand.o
obj-$(CONFIG_MTD_NAND_NDFC) += ndfc.o
obj-$(CONFIG_MTD_NAND_AT91) += at91_nand.o
@@ -185193,9 +185859,8 @@ diff -Nauprw linux-2.6.20/drivers/mtd/nand/Makefile ../new/linux-2.6.20/drivers/
nand-objs := nand_base.o nand_bbt.o
cafe_nand-objs := cafe.o cafe_ecc.o
-diff -Nauprw linux-2.6.20/drivers/mtd/nand/nandflash-nomadik.c ../new/linux-2.6.20/drivers/mtd/nand/nandflash-nomadik.c
---- linux-2.6.20/drivers/mtd/nand/nandflash-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mtd/nand/nandflash-nomadik.c 2008-07-04 23:45:21.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/mtd/nand/nandflash-nomadik.c
@@ -0,0 +1,296 @@
+/*
+ * drivers/mtd/nand/nandflash-nomadik.c
@@ -185367,8 +186032,8 @@ diff -Nauprw linux-2.6.20/drivers/mtd/nand/nandflash-nomadik.c ../new/linux-2.6.
+ data->chip.options |= NAND_OWN_BUFFERS;
+
+
-+ /*
-+ * Scan to find existance of the device
++ /*
++ * Scan to find existance of the device
+ */
+ if (nand_scan(&data->mtd, 1)) {
+ ret = -ENXIO;
@@ -185394,7 +186059,7 @@ diff -Nauprw linux-2.6.20/drivers/mtd/nand/nandflash-nomadik.c ../new/linux-2.6.
+}
+
+/**
-+ * nand_default_bbt - [NAND Interface] Select a default bad block table for the device
++ * nand_default_bbt - [NAND Interface] Select a default bad block table for the device
+ * @mtd: MTD device structure
+ *
+ * This function selects the default bad block table
@@ -185493,10 +186158,101 @@ diff -Nauprw linux-2.6.20/drivers/mtd/nand/nandflash-nomadik.c ../new/linux-2.6.
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("ST Microelectronics (sachin.verma@st.com)");
+MODULE_DESCRIPTION("NAND driver for Nomadik Platform");
-diff -Nauprw linux-2.6.20/drivers/mtd/onenand/generic.c ../new/linux-2.6.20/drivers/mtd/onenand/generic.c
---- linux-2.6.20/drivers/mtd/onenand/generic.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mtd/onenand/generic.c 2008-09-17 13:23:33.000000000 +0530
-@@ -19,6 +19,7 @@
+--- linux-2.6.20.orig/drivers/mtd/onenand/Kconfig
++++ linux-2.6.20/drivers/mtd/onenand/Kconfig
+@@ -1,39 +1,35 @@
+ #
+ # linux/drivers/mtd/onenand/Kconfig
+ #
+
+-menu "OneNAND Flash Device Drivers"
+- depends on MTD != n
+-
+-config MTD_ONENAND
++menuconfig MTD_ONENAND
+ tristate "OneNAND Device Support"
+ depends on MTD
+ help
+ This enables support for accessing all type of OneNAND flash
+ devices. For further information see
+- <http://www.samsung.com/Products/Semiconductor/Flash/OneNAND_TM/index.htm>.
++ <http://www.samsung.com/Products/Semiconductor/OneNAND/index.htm>
+
++if MTD_ONENAND
+ config MTD_ONENAND_VERIFY_WRITE
+ bool "Verify OneNAND page writes"
+- depends on MTD_ONENAND
+ help
+ This adds an extra check when data is written to the flash. The
+ OneNAND flash device internally checks only bits transitioning
+ from 1 to 0. There is a rare possibility that even though the
+ device thinks the write was successful, a bit could have been
+ flipped accidentally due to device wear or something else.
+
+ config MTD_ONENAND_GENERIC
+ tristate "OneNAND Flash device via platform device driver"
+- depends on MTD_ONENAND && ARM
++ depends on ARM
+ help
+ Support for OneNAND flash via platform device driver.
+
+ config MTD_ONENAND_OTP
+ bool "OneNAND OTP Support"
+- depends on MTD_ONENAND
+ help
+ One Block of the NAND Flash Array memory is reserved as
+ a One-Time Programmable Block memory area.
+ Also, 1st Block of NAND Flash Array can be used as OTP.
+
+@@ -41,6 +37,30 @@ config MTD_ONENAND_OTP
+ operations as any other NAND Flash Array memory block.
+ OTP block cannot be erased.
+
+ OTP block is fully-guaranteed to be a valid block.
+
+-endmenu
++config MTD_ONENAND_2X_PROGRAM
++ bool "OneNAND 2X program support"
++ help
++ The 2X Program is an extension of Program Operation.
++ Since the device is equipped with two DataRAMs, and two-plane NAND
++ Flash memory array, these two component enables simultaneous program
++ of 4KiB. Plane1 has only even blocks such as block0, block2, block4
++ while Plane2 has only odd blocks such as block1, block3, block5.
++ So MTD regards it as 4KiB page size and 256KiB block size
++
++ Now the following chips support it. (KFXXX16Q2M)
++ Demux: KFG2G16Q2M, KFH4G16Q2M, KFW8G16Q2M,
++ Mux: KFM2G16Q2M, KFN4G16Q2M,
++
++ And more recent chips
++
++config MTD_ONENAND_SIM
++ tristate "OneNAND simulator support"
++ depends on MTD_PARTITIONS
++ help
++ The simulator may simulate various OneNAND flash chips for the
++ OneNAND MTD layer.
++
++endif # MTD_ONENAND
++
+--- linux-2.6.20.orig/drivers/mtd/onenand/Makefile
++++ linux-2.6.20/drivers/mtd/onenand/Makefile
+@@ -6,6 +6,9 @@
+ obj-$(CONFIG_MTD_ONENAND) += onenand.o
+
+ # Board specific.
+ obj-$(CONFIG_MTD_ONENAND_GENERIC) += generic.o
+
++# Simulator
++obj-$(CONFIG_MTD_ONENAND_SIM) += onenand_sim.o
++
+ onenand-objs = onenand_base.o onenand_bbt.o
+--- linux-2.6.20.orig/drivers/mtd/onenand/generic.c
++++ linux-2.6.20/drivers/mtd/onenand/generic.c
+@@ -17,10 +17,11 @@
+ #include <linux/slab.h>
+ #include <linux/platform_device.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/onenand.h>
#include <linux/mtd/partitions.h>
@@ -185504,7 +186260,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/generic.c ../new/linux-2.6.20/driv
#include <asm/io.h>
#include <asm/mach/flash.h>
-@@ -36,20 +37,30 @@ struct onenand_info {
+
+ #define DRIVER_NAME "onenand"
+@@ -34,24 +35,34 @@ struct onenand_info {
+ struct mtd_info mtd;
+ struct mtd_partition *parts;
struct onenand_chip onenand;
};
@@ -185538,7 +186298,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/generic.c ../new/linux-2.6.20/driv
err = -EBUSY;
goto out_free_info;
}
-@@ -96,11 +107,12 @@ out_free_info:
+
+ info->onenand.base = ioremap(res->start, size);
+@@ -94,15 +105,16 @@ out_free_info:
+ kfree(info);
+
return err;
}
@@ -185552,7 +186316,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/generic.c ../new/linux-2.6.20/driv
unsigned long size = res->end - res->start + 1;
dev_set_drvdata(&pdev->dev, NULL);
-@@ -116,27 +128,57 @@ static int __devexit generic_onenand_rem
+
+ if (info) {
+@@ -114,31 +126,61 @@ static int __devexit generic_onenand_rem
+ onenand_release(&info->mtd);
+ release_mem_region(res->start, size);
iounmap(info->onenand.base);
kfree(info);
}
@@ -185589,7 +186357,7 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/generic.c ../new/linux-2.6.20/driv
+#define nomadik_onenand_resume NULL
+#endif
+
-+static struct platform_driver generic_onenand_driver = {
++static struct platform_driver generic_onenand_driver = {
.probe = generic_onenand_probe,
- .remove = __devexit_p(generic_onenand_remove),
+ .remove = generic_onenand_remove,
@@ -185616,93 +186384,13 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/generic.c ../new/linux-2.6.20/driv
}
module_init(generic_onenand_init);
-diff -Nauprw linux-2.6.20/drivers/mtd/onenand/Kconfig ../new/linux-2.6.20/drivers/mtd/onenand/Kconfig
---- linux-2.6.20/drivers/mtd/onenand/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mtd/onenand/Kconfig 2008-11-19 16:47:03.000000000 +0530
-@@ -2,20 +2,17 @@
- # linux/drivers/mtd/onenand/Kconfig
- #
-
--menu "OneNAND Flash Device Drivers"
-- depends on MTD != n
--
--config MTD_ONENAND
-+menuconfig MTD_ONENAND
- tristate "OneNAND Device Support"
- depends on MTD
- help
- This enables support for accessing all type of OneNAND flash
- devices. For further information see
-- <http://www.samsung.com/Products/Semiconductor/Flash/OneNAND_TM/index.htm>.
-+ <http://www.samsung.com/Products/Semiconductor/OneNAND/index.htm>
-
-+if MTD_ONENAND
- config MTD_ONENAND_VERIFY_WRITE
- bool "Verify OneNAND page writes"
-- depends on MTD_ONENAND
- help
- This adds an extra check when data is written to the flash. The
- OneNAND flash device internally checks only bits transitioning
-@@ -25,13 +22,12 @@ config MTD_ONENAND_VERIFY_WRITE
-
- config MTD_ONENAND_GENERIC
- tristate "OneNAND Flash device via platform device driver"
-- depends on MTD_ONENAND && ARM
-+ depends on ARM
- help
- Support for OneNAND flash via platform device driver.
-
- config MTD_ONENAND_OTP
- bool "OneNAND OTP Support"
-- depends on MTD_ONENAND
- help
- One Block of the NAND Flash Array memory is reserved as
- a One-Time Programmable Block memory area.
-@@ -43,4 +39,28 @@ config MTD_ONENAND_OTP
+ module_exit(generic_onenand_exit);
- OTP block is fully-guaranteed to be a valid block.
-
--endmenu
-+config MTD_ONENAND_2X_PROGRAM
-+ bool "OneNAND 2X program support"
-+ help
-+ The 2X Program is an extension of Program Operation.
-+ Since the device is equipped with two DataRAMs, and two-plane NAND
-+ Flash memory array, these two component enables simultaneous program
-+ of 4KiB. Plane1 has only even blocks such as block0, block2, block4
-+ while Plane2 has only odd blocks such as block1, block3, block5.
-+ So MTD regards it as 4KiB page size and 256KiB block size
-+
-+ Now the following chips support it. (KFXXX16Q2M)
-+ Demux: KFG2G16Q2M, KFH4G16Q2M, KFW8G16Q2M,
-+ Mux: KFM2G16Q2M, KFN4G16Q2M,
-+
-+ And more recent chips
-+
-+config MTD_ONENAND_SIM
-+ tristate "OneNAND simulator support"
-+ depends on MTD_PARTITIONS
-+ help
-+ The simulator may simulate various OneNAND flash chips for the
-+ OneNAND MTD layer.
-+
-+endif # MTD_ONENAND
-+
-diff -Nauprw linux-2.6.20/drivers/mtd/onenand/Makefile ../new/linux-2.6.20/drivers/mtd/onenand/Makefile
---- linux-2.6.20/drivers/mtd/onenand/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mtd/onenand/Makefile 2008-11-19 16:47:03.000000000 +0530
-@@ -8,4 +8,7 @@ obj-$(CONFIG_MTD_ONENAND) += onenand.o
- # Board specific.
- obj-$(CONFIG_MTD_ONENAND_GENERIC) += generic.o
-
-+# Simulator
-+obj-$(CONFIG_MTD_ONENAND_SIM) += onenand_sim.o
-+
- onenand-objs = onenand_base.o onenand_bbt.o
-diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20/drivers/mtd/onenand/onenand_base.c
---- linux-2.6.20/drivers/mtd/onenand/onenand_base.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mtd/onenand/onenand_base.c 2008-11-19 16:47:03.000000000 +0530
-@@ -33,8 +33,8 @@ static struct nand_ecclayout onenand_oob
+--- linux-2.6.20.orig/drivers/mtd/onenand/onenand_base.c
++++ linux-2.6.20/drivers/mtd/onenand/onenand_base.c
+@@ -31,12 +31,12 @@ static struct nand_ecclayout onenand_oob
+ 24, 25, 26, 27, 28,
+ 40, 41, 42, 43, 44,
56, 57, 58, 59, 60,
},
.oobfree = {
@@ -185713,7 +186401,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
};
-@@ -61,6 +61,17 @@ static const unsigned char ffchars[] = {
+ /**
+ * onenand_oob_32 - oob info for middle (1KB) page
+@@ -59,10 +59,21 @@ static const unsigned char ffchars[] = {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 48 */
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 64 */
};
@@ -185731,7 +186423,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
/**
* onenand_readw - [OneNAND Interface] Read OneNAND register
* @param addr address to read
-@@ -94,16 +105,9 @@ static void onenand_writew(unsigned shor
+ *
+ * Read OneNAND register
+@@ -92,20 +103,13 @@ static void onenand_writew(unsigned shor
+ *
+ * Setup Start Address 1 Register (F100h)
*/
static int onenand_block_address(struct onenand_chip *this, int block)
{
@@ -185749,7 +186445,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
return block;
}
-@@ -118,17 +122,11 @@ static int onenand_block_address(struct
+
+ /**
+@@ -116,21 +120,15 @@ static int onenand_block_address(struct
+ *
+ * Setup Start Address 2 Register (F101h) for DDP
*/
static int onenand_bufferram_address(struct onenand_chip *this, int block)
{
@@ -185759,17 +186459,21 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
-
if (block & this->density_mask)
- dbs = 1;
-+ return ONENAND_DDP_CHIP1;
-
+-
- return (dbs << ONENAND_DDP_SHIFT);
- }
--
++ return ONENAND_DDP_CHIP1;
+
- return 0;
+ return ONENAND_DDP_CHIP0;
}
/**
-@@ -214,6 +212,15 @@ static int onenand_command(struct mtd_in
+ * onenand_page_address - [DEFAULT] Get page address
+ * @param page the page address
+@@ -212,20 +210,33 @@ static int onenand_command(struct mtd_in
+ break;
+
default:
block = (int) (addr >> this->erase_shift);
page = (int) (addr >> this->page_shift);
@@ -185785,7 +186489,10 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
page &= this->page_mask;
break;
}
-@@ -224,6 +231,10 @@ static int onenand_command(struct mtd_in
+
+ /* NOTE: The setting order of the registers is very important! */
+ if (cmd == ONENAND_CMD_BUFFERRAM) {
+ /* Select DataRAM for DDP */
value = onenand_bufferram_address(this, block);
this->write_word(value, this->base + ONENAND_REG_START_ADDRESS2);
@@ -185796,7 +186503,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
/* Switch to the next data buffer */
ONENAND_SET_NEXT_BUFFERRAM(this);
-@@ -255,6 +266,8 @@ static int onenand_command(struct mtd_in
+ return 0;
+ }
+@@ -253,10 +264,12 @@ static int onenand_command(struct mtd_in
+ dataram = ONENAND_SET_NEXT_BUFFERRAM(this);
+ readcmd = 1;
break;
default:
@@ -185805,7 +186516,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
dataram = ONENAND_CURRENT_BUFFERRAM(this);
break;
}
-@@ -317,23 +330,28 @@ static int onenand_wait(struct mtd_info
+
+ /* Write 'FPA, FSA' of Flash */
+@@ -315,27 +328,32 @@ static int onenand_wait(struct mtd_info
+ interrupt = this->read_word(this->base + ONENAND_REG_INTERRUPT);
+
ctrl = this->read_word(this->base + ONENAND_REG_CTRL_STATUS);
if (ctrl & ONENAND_CTRL_ERROR) {
@@ -185840,7 +186555,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
return 0;
}
-@@ -347,7 +365,7 @@ static int onenand_wait(struct mtd_info
+
+ /*
+@@ -345,11 +363,11 @@ static int onenand_wait(struct mtd_info
+ *
+ * complete the work
*/
static irqreturn_t onenand_interrupt(int irq, void *data)
{
@@ -185849,7 +186568,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
/* To handle shared interrupt */
if (!this->complete.done)
-@@ -450,8 +468,9 @@ static inline int onenand_bufferram_offs
+ complete(&this->complete);
+
+@@ -448,12 +466,13 @@ static void onenand_setup_wait(struct mt
+ static inline int onenand_bufferram_offset(struct mtd_info *mtd, int area)
+ {
struct onenand_chip *this = mtd->priv;
if (ONENAND_CURRENT_BUFFERRAM(this)) {
@@ -185860,7 +186583,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
if (area == ONENAND_SPARERAM)
return mtd->oobsize;
}
-@@ -474,14 +493,12 @@ static int onenand_read_bufferram(struct
+
+ return 0;
+@@ -472,28 +491,24 @@ static inline int onenand_bufferram_offs
+ static int onenand_read_bufferram(struct mtd_info *mtd, int area,
+ unsigned char *buffer, int offset, size_t count)
{
struct onenand_chip *this = mtd->priv;
void __iomem *bufferram;
@@ -185876,7 +186603,7 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
/* Align with word(16-bit) size */
count--;
-@@ -489,9 +506,7 @@ static int onenand_read_bufferram(struct
+ /* Read word and save byte */
word = this->read_word(bufferram + offset + count);
buffer[count] = (word & 0xff);
}
@@ -185887,7 +186614,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
return 0;
}
-@@ -510,7 +525,7 @@ static int onenand_sync_read_bufferram(s
+ /**
+ * onenand_sync_read_bufferram - [OneNAND Interface] Read the bufferram area with Sync. Burst mode
+@@ -508,11 +523,11 @@ static int onenand_read_bufferram(struct
+ static int onenand_sync_read_bufferram(struct mtd_info *mtd, int area,
+ unsigned char *buffer, int offset, size_t count)
{
struct onenand_chip *this = mtd->priv;
void __iomem *bufferram;
@@ -185896,7 +186627,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
bufferram = this->base + area;
bufferram += onenand_bufferram_offset(mtd, area);
-@@ -528,8 +543,7 @@ static int onenand_sync_read_bufferram(s
+
+ this->mmcontrol(mtd, ONENAND_SYS_CFG1_SYNC_READ);
+@@ -526,12 +541,11 @@ static int onenand_sync_read_bufferram(s
+ /* Read word and save byte */
+ word = this->read_word(bufferram + offset + count);
buffer[count] = (word & 0xff);
}
@@ -185906,7 +186641,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
this->mmcontrol(mtd, 0);
return 0;
-@@ -550,6 +564,7 @@ static int onenand_write_bufferram(struc
+ }
+
+@@ -548,10 +562,11 @@ static int onenand_sync_read_bufferram(s
+ static int onenand_write_bufferram(struct mtd_info *mtd, int area,
+ const unsigned char *buffer, int offset, size_t count)
{
struct onenand_chip *this = mtd->priv;
void __iomem *bufferram;
@@ -185914,7 +186653,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
bufferram = this->base + area;
-@@ -571,12 +586,35 @@ static int onenand_write_bufferram(struc
+ bufferram += onenand_bufferram_offset(mtd, area);
+
+@@ -569,77 +584,134 @@ static int onenand_write_bufferram(struc
+ word = this->read_word(bufferram + byte_offset);
+ word = (word & ~0xff) | buffer[count];
this->write_word(word, bufferram + byte_offset);
}
@@ -185952,7 +186695,10 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
* onenand_check_bufferram - [GENERIC] Check BufferRAM information
* @param mtd MTD data structure
* @param addr address to check
-@@ -587,22 +625,35 @@ static int onenand_write_bufferram(struc
+ * @return 1 if there are valid data, otherwise 0
+ *
+ * Check bufferram if there is data we required
+ */
static int onenand_check_bufferram(struct mtd_info *mtd, loff_t addr)
{
struct onenand_chip *this = mtd->priv;
@@ -185999,7 +186745,10 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
/**
-@@ -613,31 +664,52 @@ static int onenand_check_bufferram(struc
+ * onenand_update_bufferram - [GENERIC] Update BufferRAM information
+ * @param mtd MTD data structure
+ * @param addr address to update
+ * @param valid valid flag
*
* Update BufferRAM information
*/
@@ -186068,7 +186817,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
/**
-@@ -694,38 +766,85 @@ static void onenand_release_device(struc
+ * onenand_get_device - [GENERIC] Get chip for selected access
+ * @param mtd MTD device structure
+@@ -692,167 +764,246 @@ static void onenand_release_device(struc
+ wake_up(&this->wq);
+ spin_unlock(&this->chip_lock);
}
/**
@@ -186171,7 +186924,7 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
stats = mtd->ecc_stats;
/* Read-while-load method */
-@@ -733,47 +852,64 @@ static int onenand_read(struct mtd_info
+
/* Do first load to bufferRAM */
if (read < len) {
if (!onenand_check_bufferram(mtd, from)) {
@@ -186220,11 +186973,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
+ if (oobbuf) {
+ thisooblen = oobsize - oobcolumn;
+ thisooblen = min_t(int, thisooblen, ooblen - oobread);
-+
++
+ if (ops->mode == MTD_OOB_AUTO){
+ onenand_transfer_auto_oob(mtd, oobbuf, oobcolumn, thisooblen);
+ }
-+ else{
++ else{
+ this->read_bufferram(mtd, ONENAND_SPARERAM, oobbuf, oobcolumn, thisooblen);
+ }
+ oobread += thisooblen;
@@ -186248,7 +187001,7 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
column = 0;
cond_resched();
/* Now wait for load */
-@@ -781,76 +917,91 @@ static int onenand_read(struct mtd_info
+ ret = this->wait(mtd, FL_READING);
onenand_update_bufferram(mtd, from, !ret);
}
@@ -186368,7 +187121,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
read += thislen;
-@@ -868,27 +1019,185 @@ int onenand_do_read_oob(struct mtd_info
+
+ if (read == len)
+@@ -866,184 +1017,417 @@ int onenand_do_read_oob(struct mtd_info
+ from += mtd->writesize;
+ column = 0;
}
}
@@ -186459,7 +187216,9 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
+ unsigned long timeout;
+ unsigned int interrupt;
+ unsigned int ctrl;
-+
+
+- return onenand_do_read_oob(mtd, from + ops->ooboffs, ops->ooblen,
+- &ops->oobretlen, ops->oobbuf);
+ /* The 20 msec is enough */
+ timeout = jiffies + msecs_to_jiffies(20);
+ while (time_before(jiffies, timeout)) {
@@ -186500,7 +187259,7 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
+ *
+ * OneNAND read out-of-band data from the spare area for bbt scan
+ */
-+int onenand_bbt_read_oob(struct mtd_info *mtd, loff_t from,
++int onenand_bbt_read_oob(struct mtd_info *mtd, loff_t from,
+ struct mtd_oob_ops *ops)
+{
+ struct onenand_chip *this = mtd->priv;
@@ -186545,9 +187304,7 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
+ break;
+
+ buf += thislen;
-
-- return onenand_do_read_oob(mtd, from + ops->ooboffs, ops->ooblen,
-- &ops->oobretlen, ops->oobbuf);
++
+ /* Read more? */
+ if (read < len) {
+ /* Update Page size */
@@ -186564,7 +187321,8 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
#ifdef CONFIG_MTD_ONENAND_VERIFY_WRITE
-@@ -897,14 +1206,11 @@ static int onenand_read_oob(struct mtd_i
+ /**
+ * onenand_verify_oob - [GENERIC] verify the oob contents after a write
* @param mtd MTD device structure
* @param buf the databuffer to verify
* @param to offset to read from
@@ -186581,7 +187339,8 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
int status, i;
this->command(mtd, ONENAND_CMD_READOOB, to, mtd->oobsize);
-@@ -913,33 +1219,37 @@ static int onenand_verify_oob(struct mtd
+ onenand_update_bufferram(mtd, to, 0);
+ status = this->wait(mtd, FL_READING);
if (status)
return status;
@@ -186632,7 +187391,7 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
ret = this->wait(mtd, FL_READING);
if (ret)
-@@ -947,101 +1257,175 @@ static int onenand_verify_page(struct mt
+ return ret;
onenand_update_bufferram(mtd, addr, 1);
@@ -186844,7 +187603,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
break;
}
-@@ -1058,118 +1442,191 @@ static int onenand_write(struct mtd_info
+ written += thislen;
+
+@@ -1056,122 +1440,195 @@ static int onenand_write(struct mtd_info
+ }
+
/* Deselect and wake up anyone waiting on the device */
onenand_release_device(mtd);
@@ -186990,7 +187753,8 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
+
+ return ret;
+}
-+
+
+- *retlen = written;
+/**
+ * onenand_write - [MTD Interface] write buffer to FLASH
+ * @param mtd MTD device structure
@@ -187012,11 +187776,10 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
+ };
+ int ret;
-- *retlen = written;
+ onenand_get_device(mtd, FL_WRITING);
+ ret = onenand_write_ops_nolock(mtd, to, &ops);
+ onenand_release_device(mtd);
-
++
+ *retlen = ops.retlen;
return ret;
}
@@ -187074,7 +187837,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
{
struct onenand_chip *this = mtd->priv;
struct bbm_info *bbm = this->bbm;
-@@ -1199,19 +1656,19 @@ static int onenand_erase(struct mtd_info
+
+ /* Return info from the table */
+@@ -1197,23 +1654,23 @@ static int onenand_erase(struct mtd_info
+
+ block_size = (1 << this->erase_shift);
/* Start address must align on block boundary */
if (unlikely(instr->addr & (block_size - 1))) {
@@ -187097,7 +187864,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
return -EINVAL;
}
-@@ -1230,7 +1687,7 @@ static int onenand_erase(struct mtd_info
+ instr->fail_addr = 0xffffffff;
+
+@@ -1228,22 +1685,24 @@ static int onenand_erase(struct mtd_info
+
+ while (len) {
cond_resched();
/* Check if we have a bad block, we do not erase bad blocks */
@@ -187106,7 +187877,7 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
printk (KERN_WARNING "onenand_erase: attempt to erase a bad block at addr 0x%08x\n", (unsigned int) addr);
instr->state = MTD_ERASE_FAILED;
goto erase_exit;
-@@ -1238,10 +1695,12 @@ static int onenand_erase(struct mtd_info
+ }
this->command(mtd, ONENAND_CMD_ERASE, addr, block_size);
@@ -187120,7 +187891,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
instr->state = MTD_ERASE_FAILED;
instr->fail_addr = addr;
goto erase_exit;
-@@ -1256,13 +1715,14 @@ static int onenand_erase(struct mtd_info
+ }
+
+@@ -1254,17 +1713,18 @@ static int onenand_erase(struct mtd_info
+ instr->state = MTD_ERASE_DONE;
+
erase_exit:
ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO;
@@ -187138,7 +187913,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
return ret;
}
-@@ -1292,11 +1752,16 @@ static void onenand_sync(struct mtd_info
+ /**
+ * onenand_sync - [MTD Interface] sync
+@@ -1290,15 +1750,20 @@ static void onenand_sync(struct mtd_info
+ *
+ * Check whether the block is bad
*/
static int onenand_block_isbad(struct mtd_info *mtd, loff_t ofs)
{
@@ -187156,7 +187935,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
/**
-@@ -1312,7 +1777,12 @@ static int onenand_default_block_markbad
+ * onenand_default_block_markbad - [DEFAULT] mark a block bad
+ * @param mtd MTD device structure
+@@ -1310,21 +1775,26 @@ static int onenand_block_isbad(struct mt
+ static int onenand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
+ {
struct onenand_chip *this = mtd->priv;
struct bbm_info *bbm = this->bbm;
u_char buf[2] = {0, 0};
@@ -187170,7 +187953,9 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
int block;
/* Get block number */
-@@ -1322,7 +1792,7 @@ static int onenand_default_block_markbad
+ block = ((int) ofs) >> bbm->bbt_erase_shift;
+ if (bbm->bbt)
+ bbm->bbt[block >> 2] |= 0x01 << ((block & 0x03) << 1);
/* We write two bytes, so we dont have to mess with 16 bit access */
ofs += mtd->oobsize + (bbm->badblockpos & ~0x01);
@@ -187179,7 +187964,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
/**
-@@ -1345,7 +1815,10 @@ static int onenand_block_markbad(struct
+ * onenand_block_markbad - [MTD Interface] Mark the block at the given offset as bad
+ * @param mtd MTD device structure
+@@ -1343,18 +1813,22 @@ static int onenand_block_markbad(struct
+ if (ret > 0)
+ return 0;
return ret;
}
@@ -187191,7 +187980,7 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
/**
-@@ -1353,6 +1826,7 @@ static int onenand_block_markbad(struct
+ * onenand_do_lock_cmd - [OneNAND Interface] Lock or unlock block(s)
* @param mtd MTD device structure
* @param ofs offset relative to mtd start
* @param len number of bytes to lock or unlock
@@ -187199,7 +187988,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
*
* Lock or unlock one or more blocks
*/
-@@ -1435,7 +1909,12 @@ static int onenand_do_lock_cmd(struct mt
+ static int onenand_do_lock_cmd(struct mtd_info *mtd, loff_t ofs, size_t len, int cmd)
+ {
+@@ -1433,11 +1907,16 @@ static int onenand_do_lock_cmd(struct mt
+ *
+ * Lock one or more blocks
*/
static int onenand_lock(struct mtd_info *mtd, loff_t ofs, size_t len)
{
@@ -187213,7 +188006,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
/**
-@@ -1448,7 +1927,12 @@ static int onenand_lock(struct mtd_info
+ * onenand_unlock - [MTD Interface] Unlock block(s)
+ * @param mtd MTD device structure
+@@ -1446,11 +1925,16 @@ static int onenand_lock(struct mtd_info
+ *
+ * Unlock one or more blocks
*/
static int onenand_unlock(struct mtd_info *mtd, loff_t ofs, size_t len)
{
@@ -187227,7 +188024,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
/**
-@@ -1491,6 +1975,8 @@ static int onenand_unlock_all(struct mtd
+ * onenand_check_lock_status - [OneNAND Interface] Check lock status
+ * @param this onenand chip data structure
+@@ -1489,10 +1973,12 @@ static void onenand_check_lock_status(st
+ static int onenand_unlock_all(struct mtd_info *mtd)
+ {
struct onenand_chip *this = mtd->priv;
if (this->options & ONENAND_HAS_UNLOCK_ALL) {
@@ -187236,7 +188037,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
/* Write unlock command */
this->command(mtd, ONENAND_CMD_UNLOCK_ALL, 0, 0);
-@@ -1503,15 +1989,12 @@ static int onenand_unlock_all(struct mtd
+ /* There's no return value */
+ this->wait(mtd, FL_LOCKING);
+@@ -1501,27 +1987,24 @@ static int onenand_unlock_all(struct mtd
+ while (this->read_word(this->base + ONENAND_REG_CTRL_STATUS)
+ & ONENAND_CTRL_ONGO)
continue;
/* Workaround for all block unlock in DDP */
@@ -187256,7 +188061,7 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
onenand_check_lock_status(this);
-@@ -1519,7 +2002,7 @@ static int onenand_unlock_all(struct mtd
+
return 0;
}
@@ -187265,7 +188070,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
return 0;
}
-@@ -1544,13 +2027,19 @@ static int do_otp_read(struct mtd_info *
+
+ #ifdef CONFIG_MTD_ONENAND_OTP
+@@ -1542,17 +2025,23 @@ typedef int (*otp_op_t)(struct mtd_info
+ */
+ static int do_otp_read(struct mtd_info *mtd, loff_t from, size_t len,
size_t *retlen, u_char *buf)
{
struct onenand_chip *this = mtd->priv;
@@ -187286,7 +188095,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
/* Exit OTP access mode */
this->command(mtd, ONENAND_CMD_RESET, 0, 0);
-@@ -1562,19 +2051,20 @@ static int do_otp_read(struct mtd_info *
+ this->wait(mtd, FL_RESETING);
+
+@@ -1560,23 +2049,24 @@ static int do_otp_read(struct mtd_info *
+ }
+
/**
* do_otp_write - [DEFAULT] Write OTP block area
* @param mtd MTD device structure
@@ -187309,7 +188122,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
/* Force buffer page aligned */
if (len < mtd->writesize) {
-@@ -1588,7 +2078,12 @@ static int do_otp_write(struct mtd_info
+ memcpy(this->page_buf, buf, len);
+ memset(this->page_buf + len, 0xff, mtd->writesize - len);
+@@ -1586,11 +2076,16 @@ static int do_otp_write(struct mtd_info
+
+ /* Enter OTP access mode */
this->command(mtd, ONENAND_CMD_OTP_ACCESS, 0, 0);
this->wait(mtd, FL_OTPING);
@@ -187323,7 +188140,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
/* Exit OTP access mode */
this->command(mtd, ONENAND_CMD_RESET, 0, 0);
-@@ -1611,13 +2106,21 @@ static int do_otp_lock(struct mtd_info *
+ this->wait(mtd, FL_RESETING);
+
+@@ -1609,17 +2104,25 @@ static int do_otp_write(struct mtd_info
+ */
+ static int do_otp_lock(struct mtd_info *mtd, loff_t from, size_t len,
size_t *retlen, u_char *buf)
{
struct onenand_chip *this = mtd->priv;
@@ -187346,7 +188167,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
/* Exit OTP access mode */
this->command(mtd, ONENAND_CMD_RESET, 0, 0);
-@@ -1664,13 +2167,16 @@ static int onenand_otp_walk(struct mtd_i
+ this->wait(mtd, FL_RESETING);
+
+@@ -1662,17 +2165,20 @@ static int onenand_otp_walk(struct mtd_i
+
+ /* Check User/Factory boundary */
if (((mtd->writesize * otp_pages) - (from + len)) < 0)
return 0;
@@ -187365,7 +188190,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
otpinfo = (struct otp_info *) buf;
otpinfo->start = from;
-@@ -1690,13 +2196,14 @@ static int onenand_otp_walk(struct mtd_i
+ otpinfo->length = mtd->writesize;
+ otpinfo->locked = 0;
+@@ -1688,17 +2194,18 @@ static int onenand_otp_walk(struct mtd_i
+
+ buf += size;
len -= size;
*retlen += size;
@@ -187383,7 +188212,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
/**
-@@ -1823,12 +2330,14 @@ static int onenand_lock_user_prot_reg(st
+ * onenand_get_fact_prot_info - [MTD Interface] Read factory OTP info
+ * @param mtd MTD device structure
+@@ -1821,61 +2328,79 @@ static int onenand_lock_user_prot_reg(st
+ return ret ? : retlen;
+ }
#endif /* CONFIG_MTD_ONENAND_OTP */
/**
@@ -187401,7 +188234,9 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
{
struct onenand_chip *this = mtd->priv;
unsigned int density, process;
-@@ -1838,31 +2347,47 @@ static void onenand_lock_scheme(struct m
+
+ /* Lock scheme depends on density and process */
+ density = this->device_id >> ONENAND_DEVICE_DENSITY_SHIFT;
process = this->version_id >> ONENAND_VERSION_PROCESS_SHIFT;
/* Lock scheme */
@@ -187461,7 +188296,10 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
vcc = device & ONENAND_DEVICE_VCC_MASK;
demuxed = device & ONENAND_DEVICE_IS_DEMUX;
ddp = device & ONENAND_DEVICE_IS_DDP;
-@@ -1873,7 +2398,7 @@ static void onenand_print_device_info(in
+ density = device >> ONENAND_DEVICE_DENSITY_SHIFT;
+ printk(KERN_INFO "%sOneNAND%s %dMB %sV 16-bit (0x%02x)\n",
+ demuxed ? "" : "Muxed ",
+ ddp ? "(DDP)" : "",
(16 << density),
vcc ? "2.65/3.3" : "1.8",
device);
@@ -187470,7 +188308,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
static const struct onenand_manufacturers onenand_manuf_ids[] = {
-@@ -1911,12 +2436,12 @@ static int onenand_check_maf(int manuf)
+ {ONENAND_MFR_SAMSUNG, "Samsung"},
+ };
+@@ -1909,16 +2434,16 @@ static int onenand_check_maf(int manuf)
+ /**
+ * onenand_probe - [OneNAND Interface] Probe the OneNAND device
* @param mtd MTD device structure
*
* OneNAND detection method:
@@ -187485,7 +188327,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
int density;
int syscfg;
-@@ -1948,6 +2473,7 @@ static int onenand_probe(struct mtd_info
+ /* Save system configuration 1 */
+ syscfg = this->read_word(this->base + ONENAND_REG_SYS_CFG1);
+@@ -1946,10 +2471,11 @@ static int onenand_probe(struct mtd_info
+
+ /* Read manufacturer and device IDs from Register */
maf_id = this->read_word(this->base + ONENAND_REG_MANUFACTURER_ID);
dev_id = this->read_word(this->base + ONENAND_REG_DEVICE_ID);
ver_id = this->read_word(this->base + ONENAND_REG_VERSION_ID);
@@ -187493,7 +188339,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
/* Check OneNAND device */
if (maf_id != bram_maf_id || dev_id != bram_dev_id)
-@@ -1961,26 +2487,41 @@ static int onenand_probe(struct mtd_info
+ return -ENXIO;
+
+@@ -1959,30 +2485,45 @@ static int onenand_probe(struct mtd_info
+ this->version_id = ver_id;
+
density = dev_id >> ONENAND_DEVICE_DENSITY_SHIFT;
this->chipsize = (16 << density) << 20;
/* Set density mask. it is used for DDP */
@@ -187540,7 +188390,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
return 0;
}
-@@ -2021,6 +2562,7 @@ static void onenand_resume(struct mtd_in
+
+ /**
+@@ -2019,10 +2560,11 @@ static void onenand_resume(struct mtd_in
+ * The flash ID is read and the mtd/chip structures are
+ * filled with the appropriate values.
*/
int onenand_scan(struct mtd_info *mtd, int maxchips)
{
@@ -187548,7 +188402,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
struct onenand_chip *this = mtd->priv;
if (!this->read_word)
-@@ -2044,7 +2586,9 @@ int onenand_scan(struct mtd_info *mtd, i
+ this->read_word = onenand_readw;
+ if (!this->write_word)
+@@ -2042,29 +2584,41 @@ int onenand_scan(struct mtd_info *mtd, i
+ this->block_markbad = onenand_default_block_markbad;
+ if (!this->scan_bbt)
this->scan_bbt = onenand_default_bbt;
if (onenand_probe(mtd))
@@ -187558,7 +188416,9 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
/* Set Sync. Burst Read after probing */
if (this->mmcontrol) {
-@@ -2054,15 +2598,25 @@ int onenand_scan(struct mtd_info *mtd, i
+ printk(KERN_INFO "OneNAND Sync. Burst Read support\n");
+ this->read_bufferram = onenand_sync_read_bufferram;
+ }
/* Allocate buffers, if necessary */
if (!this->page_buf) {
@@ -187587,7 +188447,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
this->state = FL_READY;
init_waitqueue_head(&this->wq);
-@@ -2092,12 +2646,23 @@ int onenand_scan(struct mtd_info *mtd, i
+ spin_lock_init(&this->chip_lock);
+
+@@ -2090,16 +2644,27 @@ int onenand_scan(struct mtd_info *mtd, i
+ this->ecclayout = &onenand_oob_32;
+ break;
}
this->subpagesize = mtd->writesize >> mtd->subpage_sft;
@@ -187612,7 +188476,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
mtd->erase = onenand_erase;
mtd->point = NULL;
mtd->unpoint = NULL;
-@@ -2144,11 +2709,16 @@ void onenand_release(struct mtd_info *mt
+ mtd->read = onenand_read;
+ mtd->write = onenand_write;
+@@ -2142,18 +2707,24 @@ void onenand_release(struct mtd_info *mt
+ #endif
+ /* Deregister the device */
del_mtd_device (mtd);
/* Free bad block table memory, if allocated */
@@ -187631,15 +188499,17 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_base.c ../new/linux-2.6.20
}
EXPORT_SYMBOL_GPL(onenand_scan);
-@@ -2157,3 +2727,4 @@ EXPORT_SYMBOL_GPL(onenand_release);
+ EXPORT_SYMBOL_GPL(onenand_release);
+
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Kyungmin Park <kyungmin.park@samsung.com>");
MODULE_DESCRIPTION("Generic OneNAND flash driver code");
+
-diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_bbt.c ../new/linux-2.6.20/drivers/mtd/onenand/onenand_bbt.c
---- linux-2.6.20/drivers/mtd/onenand/onenand_bbt.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mtd/onenand/onenand_bbt.c 2008-09-17 13:23:33.000000000 +0530
-@@ -10,6 +10,11 @@
+--- linux-2.6.20.orig/drivers/mtd/onenand/onenand_bbt.c
++++ linux-2.6.20/drivers/mtd/onenand/onenand_bbt.c
+@@ -8,19 +8,24 @@
+ *
+ * Derived from nand_bbt.c
*
* TODO:
* Split BBT core and chip specific BBT.
@@ -187651,7 +188521,7 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_bbt.c ../new/linux-2.6.20/
*/
#include <linux/slab.h>
-@@ -17,8 +22,8 @@
+ #include <linux/mtd/mtd.h>
#include <linux/mtd/onenand.h>
#include <linux/mtd/compatmac.h>
@@ -187662,7 +188532,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_bbt.c ../new/linux-2.6.20/
/**
* check_short_pattern - [GENERIC] check if a pattern is in the buffer
-@@ -65,10 +70,11 @@ static int create_bbt(struct mtd_info *m
+ * @param buf the buffer to search
+ * @param len the length of buffer to search
+@@ -63,14 +68,15 @@ static int create_bbt(struct mtd_info *m
+ struct bbm_info *bbm = this->bbm;
+ int i, j, numblocks, len, scanlen;
int startblock;
loff_t from;
size_t readlen, ooblen;
@@ -187675,7 +188549,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_bbt.c ../new/linux-2.6.20/
/* We need only read few bytes from the OOB area */
scanlen = ooblen = 0;
-@@ -82,22 +88,24 @@ static int create_bbt(struct mtd_info *m
+ readlen = bd->len;
+
+@@ -80,26 +86,28 @@ static int create_bbt(struct mtd_info *m
+ */
+ numblocks = mtd->size >> (bbm->bbt_erase_shift - 1);
startblock = 0;
from = 0;
@@ -187707,7 +188585,11 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_bbt.c ../new/linux-2.6.20/
bbm->bbt[i >> 3] |= 0x03 << (i & 0x6);
printk(KERN_WARNING "Bad eraseblock %d at 0x%08x\n",
i >> 1, (unsigned int) from);
-@@ -167,9 +175,8 @@ static int onenand_isbad_bbt(struct mtd_
+ mtd->ecc_stats.badblocks++;
+ break;
+@@ -165,13 +173,12 @@ static int onenand_isbad_bbt(struct mtd_
+ *
+ * The function checks, if a bad block table(s) is/are already
* available. If not it scans the device for manufacturer
* marked good / bad blocks and writes the bad block table(s) to
* the selected place.
@@ -187719,9 +188601,10 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_bbt.c ../new/linux-2.6.20/
*
*/
int onenand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd)
-diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_sim.c ../new/linux-2.6.20/drivers/mtd/onenand/onenand_sim.c
---- linux-2.6.20/drivers/mtd/onenand/onenand_sim.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/mtd/onenand/onenand_sim.c 2008-11-19 16:47:10.000000000 +0530
+ {
+ struct onenand_chip *this = mtd->priv;
+--- /dev/null
++++ linux-2.6.20/drivers/mtd/onenand/onenand_sim.c
@@ -0,0 +1,495 @@
+/*
+ * linux/drivers/mtd/onenand/onenand_sim.c
@@ -188218,9 +189101,21 @@ diff -Nauprw linux-2.6.20/drivers/mtd/onenand/onenand_sim.c ../new/linux-2.6.20/
+MODULE_AUTHOR("Kyungmin Park <kyungmin.park@samsung.com>");
+MODULE_DESCRIPTION("The OneNAND flash simulator");
+MODULE_LICENSE("GPL");
-diff -Nauprw linux-2.6.20/drivers/net/kgdboe.c ../new/linux-2.6.20/drivers/net/kgdboe.c
---- linux-2.6.20/drivers/net/kgdboe.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/net/kgdboe.c 2007-11-21 11:51:41.000000000 +0530
+--- linux-2.6.20.orig/drivers/net/Makefile
++++ linux-2.6.20/drivers/net/Makefile
+@@ -211,9 +211,10 @@ obj-$(CONFIG_HAMRADIO) += hamradio/
+ obj-$(CONFIG_IRDA) += irda/
+ obj-$(CONFIG_ETRAX_ETHERNET) += cris/
+ obj-$(CONFIG_ENP2611_MSF_NET) += ixp2000/
+
+ obj-$(CONFIG_NETCONSOLE) += netconsole.o
++obj-$(CONFIG_KGDBOE) += kgdboe.o
+
+ obj-$(CONFIG_FS_ENET) += fs_enet/
+
+ obj-$(CONFIG_NETXEN_NIC) += netxen/
+--- /dev/null
++++ linux-2.6.20/drivers/net/kgdboe.c
@@ -0,0 +1,294 @@
+/*
+ * drivers/net/kgdboe.c
@@ -188516,26 +189411,18 @@ diff -Nauprw linux-2.6.20/drivers/net/kgdboe.c ../new/linux-2.6.20/drivers/net/k
+module_param_call(kgdboe, param_set_kgdboe_var, param_get_string, &kps, 0644);
+MODULE_PARM_DESC(kgdboe, " kgdboe=[src-port]@[src-ip]/[dev],"
+ "[tgt-port]@<tgt-ip>/<tgt-macaddr>\n");
-diff -Nauprw linux-2.6.20/drivers/net/Makefile ../new/linux-2.6.20/drivers/net/Makefile
---- linux-2.6.20/drivers/net/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/net/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -213,6 +213,7 @@ obj-$(CONFIG_ETRAX_ETHERNET) += cris/
- obj-$(CONFIG_ENP2611_MSF_NET) += ixp2000/
-
- obj-$(CONFIG_NETCONSOLE) += netconsole.o
-+obj-$(CONFIG_KGDBOE) += kgdboe.o
-
- obj-$(CONFIG_FS_ENET) += fs_enet/
-
-diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/smc91x.c
---- linux-2.6.20/drivers/net/smc91x.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/net/smc91x.c 2007-11-21 11:51:41.000000000 +0530
-@@ -1,3 +1,4 @@
+--- linux-2.6.20.orig/drivers/net/smc91x.c
++++ linux-2.6.20/drivers/net/smc91x.c
+@@ -1,5 +1,6 @@
+
/*
* smc91x.c
* This is a driver for SMSC's 91C9x/91C1xx single-chip Ethernet devices.
-@@ -65,7 +66,6 @@ static const char version[] =
+ *
+ * Copyright (C) 1996 by Erik Stahlman
+@@ -63,11 +64,10 @@ static const char version[] =
+ /* Debugging level */
+ #ifndef SMC_DEBUG
#define SMC_DEBUG 0
#endif
@@ -188543,7 +189430,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
-@@ -90,6 +90,8 @@ static const char version[] =
+ #include <linux/sched.h>
+ #include <linux/slab.h>
+@@ -88,10 +88,12 @@ static const char version[] =
+
+ #include <asm/io.h>
#include "smc91x.h"
@@ -188552,7 +189443,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
#ifdef CONFIG_ISA
/*
* the LAN91C111 can be at any of the following port addresses. To change,
-@@ -268,7 +270,6 @@ static void PRINT_PKT(u_char *buf, int l
+ * for a slightly different card, you can add it to the array. Keep in
+ * mind that the array must end in zero.
+@@ -266,11 +268,10 @@ static void PRINT_PKT(u_char *buf, int l
+ }
+ #else
#define PRINT_PKT(x...) do { } while(0)
#endif
@@ -188560,7 +189455,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
/* this enables an interrupt in the interrupt mask register */
#define SMC_ENABLE_INT(x) do { \
unsigned char mask; \
-@@ -308,7 +309,6 @@ static void PRINT_PKT(u_char *buf, int l
+ spin_lock_irq(&lp->lock); \
+ mask = SMC_GET_INT_MASK(); \
+@@ -306,11 +307,10 @@ static void PRINT_PKT(u_char *buf, int l
+ cpu_relax(); \
+ } \
} \
} while (0)
@@ -188568,7 +189467,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
/*
* this does a soft reset on the device
*/
-@@ -494,8 +494,7 @@ static inline void smc_rcv(struct net_d
+ static void smc_reset(struct net_device *dev)
+ {
+@@ -492,12 +492,11 @@ static inline void smc_rcv(struct net_d
+
+ /* First two words are status and packet length */
SMC_GET_PKT_HDR(status, packet_len);
packet_len &= 0x07ff; /* mask off top bits */
DBG(2, "%s: RX PNR 0x%x STATUS 0x%04x LENGTH 0x%04x (%d)\n",
@@ -188578,7 +189481,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
back:
if (unlikely(packet_len < 6 || status & RS_ERRORS)) {
-@@ -835,7 +834,6 @@ static void smc_tx(struct net_device *de
+ if (status & RS_TOOLONG && packet_len <= (1514 + 4 + 6)) {
+ /* accept VLAN packets */
+@@ -833,11 +832,10 @@ static void smc_tx(struct net_device *de
+ SMC_SELECT_BANK(0);
+ SMC_SET_TCR(lp->tcr_cur_mode);
SMC_SELECT_BANK(2);
}
@@ -188586,7 +189493,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
/*---PHY CONTROL AND CONFIGURATION-----------------------------------------*/
static void smc_mii_out(struct net_device *dev, unsigned int val, int bits)
-@@ -927,7 +925,9 @@ static void smc_phy_write(struct net_dev
+ {
+ struct smc_local *lp = netdev_priv(dev);
+@@ -925,11 +923,13 @@ static void smc_phy_write(struct net_dev
+
+ /* Idle - 32 ones */
smc_mii_out(dev, 0xffffffff, 32);
/* Start code (01) + write (01) + phyaddr + phyreg + turnaround + phydata */
@@ -188597,7 +189508,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
/* Return to idle state */
SMC_SET_MII(SMC_GET_MII() & ~(MII_MCLK|MII_MDOE|MII_MDO));
-@@ -961,8 +961,7 @@ static void smc_phy_detect(struct net_de
+
+ DBG(3, "%s: phyaddr=0x%x, phyreg=0x%x, phydata=0x%x\n",
+@@ -959,12 +959,11 @@ static void smc_phy_detect(struct net_de
+
+ /* Read the PHY identifiers */
id1 = smc_phy_read(dev, phyaddr & 31, MII_PHYSID1);
id2 = smc_phy_read(dev, phyaddr & 31, MII_PHYSID2);
@@ -188607,7 +189522,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
/* Make sure it is a valid identifier */
if (id1 != 0x0000 && id1 != 0xffff && id1 != 0x8000 &&
-@@ -1184,7 +1183,9 @@ static void smc_phy_configure(struct wor
+ id2 != 0x0000 && id2 != 0xffff && id2 != 0x8000) {
+ /* Save the PHY's address */
+@@ -1182,11 +1181,13 @@ static void smc_phy_configure(struct wor
+ if (my_phy_caps & BMSR_10HALF)
+ my_ad_caps |= ADVERTISE_10HALF;
/* Disable capabilities not selected by our user */
if (lp->ctl_rspeed != 100)
@@ -188618,7 +189537,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
if (!lp->ctl_rfduplx)
my_ad_caps &= ~(ADVERTISE_100FULL|ADVERTISE_10FULL);
-@@ -1314,11 +1315,12 @@ static irqreturn_t smc_interrupt(int irq
+
+ /* Update our Auto-Neg Advertisement Register */
+@@ -1312,15 +1313,16 @@ static irqreturn_t smc_interrupt(int irq
+
+ do {
status = SMC_GET_INT();
DBG(2, "%s: INT 0x%02x MASK 0x%02x MEM 0x%04x FIFO 0x%04x\n",
@@ -188635,7 +189558,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
status &= mask;
if (!status)
-@@ -1354,10 +1356,18 @@ static irqreturn_t smc_interrupt(int irq
+ break;
+
+@@ -1352,14 +1354,22 @@ static irqreturn_t smc_interrupt(int irq
+ card_stats >>= 4;
+
/* multiple collisions */
lp->stats.collisions += card_stats & 0xF;
} else if (status & IM_RX_OVRN_INT) {
@@ -188658,7 +189585,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
SMC_ACK_INT(IM_RX_OVRN_INT);
lp->stats.rx_errors++;
lp->stats.rx_fifo_errors++;
-@@ -1500,7 +1510,8 @@ static void smc_set_multicast_list(struc
+ } else if (status & IM_EPH_INT) {
+ smc_eph_interrupt(dev);
+@@ -1498,11 +1508,12 @@ static void smc_set_multicast_list(struc
+ else if (dev->mc_count) {
+ int i;
struct dev_mc_list *cur_addr;
/* table for flipping the order of 3 bits */
@@ -188668,7 +189599,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
/* start with a table of all zeros: reject all */
memset(multicast_table, 0, sizeof(multicast_table));
-@@ -1553,14 +1564,12 @@ static void smc_set_multicast_list(struc
+
+ cur_addr = dev->mc_list;
+@@ -1551,18 +1562,16 @@ static void smc_set_multicast_list(struc
+ }
+ SMC_SELECT_BANK(2);
spin_unlock_irq(&lp->lock);
}
@@ -188684,7 +189619,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
{
struct smc_local *lp = netdev_priv(dev);
-@@ -1659,8 +1668,7 @@ smc_ethtool_getsettings(struct net_devic
+ DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
+
+@@ -1657,22 +1666,22 @@ smc_ethtool_getsettings(struct net_devic
+ spin_lock_irq(&lp->lock);
+ ret = mii_ethtool_gset(&lp->mii, cmd);
spin_unlock_irq(&lp->lock);
} else {
cmd->supported = SUPPORTED_10baseT_Half |
@@ -188694,7 +189633,9 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
if (lp->ctl_rspeed == 10)
cmd->speed = SPEED_10;
-@@ -1670,7 +1678,8 @@ smc_ethtool_getsettings(struct net_devic
+ else if (lp->ctl_rspeed == 100)
+ cmd->speed = SPEED_100;
+
cmd->autoneg = AUTONEG_DISABLE;
cmd->transceiver = XCVR_INTERNAL;
cmd->port = 0;
@@ -188704,7 +189645,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
ret = 0;
}
-@@ -1691,8 +1700,8 @@ smc_ethtool_setsettings(struct net_devic
+
+ return ret;
+@@ -1689,12 +1698,12 @@ smc_ethtool_setsettings(struct net_devic
+ ret = mii_ethtool_sset(&lp->mii, cmd);
+ spin_unlock_irq(&lp->lock);
} else {
if (cmd->autoneg != AUTONEG_DISABLE ||
cmd->speed != SPEED_10 ||
@@ -188715,7 +189660,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
return -EINVAL;
// lp->port = cmd->port;
-@@ -1712,7 +1721,8 @@ smc_ethtool_getdrvinfo(struct net_device
+ lp->ctl_rfduplx = cmd->duplex == DUPLEX_FULL;
+
+@@ -1710,11 +1719,12 @@ smc_ethtool_setsettings(struct net_devic
+ static void
+ smc_ethtool_getdrvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
{
strncpy(info->driver, CARDNAME, sizeof(info->driver));
strncpy(info->version, version, sizeof(info->version));
@@ -188725,7 +189674,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
}
static int smc_ethtool_nwayreset(struct net_device *dev)
-@@ -1839,7 +1849,7 @@ static int __init smc_findirq(void __iom
+ {
+ struct smc_local *lp = netdev_priv(dev);
+@@ -1837,11 +1847,11 @@ static int __init smc_findirq(void __iom
+ * o set up my private data
+ * o configure the dev structure with my subroutines
* o actually GRAB the irq.
* o GRAB the region
*/
@@ -188734,7 +189687,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
{
struct smc_local *lp = netdev_priv(dev);
static int version_printed = 0;
-@@ -1880,6 +1890,8 @@ static int __init smc_probe(struct net_d
+ int i, retval;
+ unsigned int val, revision_register;
+@@ -1878,10 +1888,12 @@ static int __init smc_probe(struct net_d
+ * time won't hurt. This time, I need to switch the bank
+ * register to bank 1, so I can access the base address
* register
*/
SMC_SELECT_BANK(1);
@@ -188743,7 +189700,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
val = SMC_GET_BASE();
val = ((val & 0x1F00) >> 3) << SMC_IO_SHIFT;
if (((unsigned int)ioaddr & (0x3e0 << SMC_IO_SHIFT)) != val) {
-@@ -1918,6 +1930,7 @@ static int __init smc_probe(struct net_d
+ printk("%s: IOADDR %p doesn't match configuration (%x).\n",
+ CARDNAME, ioaddr, val);
+@@ -1916,10 +1928,11 @@ static int __init smc_probe(struct net_d
+ lp->version = revision_register & 0xff;
+ spin_lock_init(&lp->lock);
/* Get the MAC address */
SMC_SELECT_BANK(1);
@@ -188751,7 +189712,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
SMC_GET_MAC_ADDR(dev->dev_addr);
/* now, reset the chip, and put it into a known state */
-@@ -2005,7 +2018,11 @@ static int __init smc_probe(struct net_d
+ smc_reset(dev);
+
+@@ -2003,11 +2016,15 @@ static int __init smc_probe(struct net_d
+ lp->ctl_rfduplx = 1;
+ lp->ctl_rspeed = 100;
}
/* Grab the IRQ */
@@ -188764,7 +189729,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
if (retval)
goto err_out;
-@@ -2045,7 +2062,8 @@ static int __init smc_probe(struct net_d
+ #ifdef SMC_USE_PXA_DMA
+ {
+@@ -2043,11 +2060,12 @@ static int __init smc_probe(struct net_d
+ }
+
if (lp->phy_type == 0) {
PRINTK("%s: No PHY found\n", dev->name);
} else if ((lp->phy_type & 0xfffffff0) == 0x0016f840) {
@@ -188774,7 +189743,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
} else if ((lp->phy_type & 0xfffffff0) == 0x02821c50) {
PRINTK("%s: PHY LAN83C180\n", dev->name);
}
-@@ -2066,7 +2084,8 @@ static int smc_enable_device(struct plat
+ }
+
+@@ -2064,11 +2082,12 @@ static int smc_enable_device(struct plat
+ unsigned long flags;
+ unsigned char ecor, ecsr;
void __iomem *addr;
struct resource * res;
@@ -188784,7 +189757,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
if (!res)
return 0;
-@@ -2122,7 +2141,8 @@ static int smc_enable_device(struct plat
+ /*
+ * Map the attribute space. This is overkill, but clean.
+@@ -2120,11 +2139,12 @@ static int smc_enable_device(struct plat
+ return 0;
+ }
static int smc_request_attrib(struct platform_device *pdev)
{
@@ -188794,7 +189771,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
if (!res)
return 0;
-@@ -2135,7 +2155,8 @@ static int smc_request_attrib(struct pla
+
+ if (!request_mem_region(res->start, ATTRIB_SIZE, CARDNAME))
+@@ -2133,11 +2153,12 @@ static int smc_request_attrib(struct pla
+ return 0;
+ }
static void smc_release_attrib(struct platform_device *pdev)
{
@@ -188804,7 +189785,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
if (res)
release_mem_region(res->start, ATTRIB_SIZE);
-@@ -2159,8 +2180,12 @@ static inline void smc_request_datacs(st
+ }
+
+@@ -2157,12 +2178,16 @@ static inline void smc_request_datacs(st
+
+ lp->datacs = ioremap(res->start, SMC_DATA_EXTENT);
}
}
@@ -188818,7 +189803,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
if (SMC_CAN_USE_DATACS) {
struct smc_local *lp = netdev_priv(ndev);
struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32");
-@@ -2201,7 +2226,6 @@ static int smc_drv_probe(struct platform
+
+ if (lp->datacs)
+@@ -2199,11 +2224,10 @@ static int smc_drv_probe(struct platform
+ if (!res) {
+ ret = -ENODEV;
goto out;
}
@@ -188826,7 +189815,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
if (!request_mem_region(res->start, SMC_IO_EXTENT, CARDNAME)) {
ret = -EBUSY;
goto out;
-@@ -2240,6 +2264,7 @@ static int smc_drv_probe(struct platform
+ }
+
+@@ -2238,10 +2262,11 @@ static int smc_drv_probe(struct platform
+ ret = -ENOMEM;
+ goto out_release_attrib;
}
platform_set_drvdata(pdev, ndev);
@@ -188834,7 +189827,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
ret = smc_probe(ndev, addr);
if (ret != 0)
goto out_iounmap;
-@@ -2278,7 +2303,6 @@ static int smc_drv_remove(struct platfor
+ #ifdef SMC_USE_PXA_DMA
+ else {
+@@ -2276,11 +2301,10 @@ static int smc_drv_remove(struct platfor
+ struct resource *res;
+
platform_set_drvdata(pdev, NULL);
unregister_netdev(ndev);
@@ -188842,7 +189839,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
free_irq(ndev->irq, ndev);
#ifdef SMC_USE_PXA_DMA
-@@ -2348,8 +2372,6 @@ static int __init smc_init(void)
+ if (ndev->dma != (unsigned char)-1)
+ pxa_free_dma(ndev->dma);
+@@ -2346,12 +2370,10 @@ static int __init smc_init(void)
+ {
+ #ifdef MODULE
#ifdef CONFIG_ISA
if (io == -1)
printk(KERN_WARNING
@@ -188851,10 +189852,13 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.c ../new/linux-2.6.20/drivers/net/s
#endif
#endif
-diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/smc91x.h
---- linux-2.6.20/drivers/net/smc91x.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/net/smc91x.h 2007-11-21 11:51:41.000000000 +0530
-@@ -34,7 +34,6 @@
+ return platform_driver_register(&smc_driver);
+ }
+--- linux-2.6.20.orig/drivers/net/smc91x.h
++++ linux-2.6.20/drivers/net/smc91x.h
+@@ -32,11 +32,10 @@
+ .
+ ---------------------------------------------------------------------------*/
#ifndef _SMC91X_H_
#define _SMC91X_H_
@@ -188862,7 +189866,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
/*
* Define your architecture specific bus configuration parameters here.
*/
-@@ -163,8 +162,7 @@
+
+ #if defined(CONFIG_ARCH_LUBBOCK)
+@@ -161,12 +160,11 @@
+ #define SMC_outl(v, a, r) writel(v, (a) + (r))
+ #define SMC_insl(a, r, p, l) readsl((a) + (r), p, l)
#define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l)
/* We actually can't write halfwords properly if not word aligned */
@@ -188872,7 +189880,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
{
if (reg & 2) {
unsigned int v = val << 16;
-@@ -199,6 +197,77 @@ SMC_outw(u16 val, void __iomem *ioaddr,
+ v |= readl(ioaddr + (reg & ~2)) & 0xffff;
+ writel(v, ioaddr + (reg & ~2));
+@@ -197,10 +195,81 @@ SMC_outw(u16 val, void __iomem *ioaddr,
+ || machine_is_omap_h3() \
+ || machine_is_omap_h4() \
|| (machine_is_omap_innovator() && !cpu_is_omap1510()) \
) ? IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING)
@@ -188950,7 +189962,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
#elif defined(CONFIG_SH_SH4202_MICRODEV)
-@@ -477,7 +546,6 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define SMC_CAN_USE_8BIT 0
+ #define SMC_CAN_USE_16BIT 1
+@@ -475,24 +544,25 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ {
+ DCSR(dma) = 0;
}
#endif /* SMC_USE_PXA_DMA */
@@ -188958,7 +189974,7 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
/*
* Everything a particular hardware setup needs should have been defined
* at this point. Add stubs for the undefined cases, mainly to avoid
-@@ -485,12 +553,14 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ * compilation warnings since they'll be optimized away, or to prevent buggy
* use of them.
*/
@@ -188973,7 +189989,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
#if !defined(SMC_insl) || !defined(SMC_outsl)
#define SMC_insl(a, r, p, l) BUG()
-@@ -522,14 +592,18 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define SMC_outsl(a, r, p, l) BUG()
+ #endif
+@@ -520,18 +590,22 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define SMC_insw(a, r, p, l) BUG()
+ #define SMC_outsw(a, r, p, l) BUG()
#endif
@@ -188992,7 +190012,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
#define SMC_insb(a, r, p, l) BUG()
#define SMC_outsb(a, r, p, l) BUG()
#endif
-@@ -569,7 +643,6 @@ smc_pxa_dma_irq(int dma, void *dummy)
+
+ #if !defined(SMC_insb) || !defined(SMC_outsb)
+@@ -567,11 +641,10 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ . xx = bank number
+ . yyyy yyyy = 0x33, for identification purposes.
*/
#define BANK_SELECT (14 << SMC_IO_SHIFT)
@@ -189000,7 +190024,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
// Transmit Control Register
/* BANK 0 */
#define TCR_REG SMC_REG(0x0000, 0)
-@@ -588,7 +661,6 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define TCR_ENABLE 0x0001 // When 1 we can transmit
+ #define TCR_LOOP 0x0002 // Controls output pin LBK
+@@ -586,11 +659,10 @@ smc_pxa_dma_irq(int dma, void *dummy)
+
+ #define TCR_CLEAR 0 /* do NOTHING */
/* the default settings for the TCR register : */
#define TCR_DEFAULT (TCR_ENABLE | TCR_PAD_EN)
@@ -189008,7 +190036,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
// EPH Status Register
/* BANK 0 */
#define EPH_STATUS_REG SMC_REG(0x0002, 0)
-@@ -607,7 +679,6 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define ES_TX_SUC 0x0001 // Last TX was successful
+ #define ES_SNGL_COL 0x0002 // Single collision detected for last tx
+@@ -605,11 +677,10 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define ES_EXC_DEF 0x0800 // Excessive Deferral
+ #define ES_CTR_ROL 0x1000 // Counter Roll Over indication
#define ES_LINK_OK 0x4000 // Driven by inverted value of nLNK pin
#define ES_TXUNRN 0x8000 // Tx Underrun
@@ -189016,7 +190048,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
// Receive Control Register
/* BANK 0 */
#define RCR_REG SMC_REG(0x0004, 0)
-@@ -624,17 +695,14 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define RCR_RX_ABORT 0x0001 // Set if a rx frame was aborted
+ #define RCR_PRMS 0x0002 // Enable promiscuous mode
+@@ -622,21 +693,18 @@ smc_pxa_dma_irq(int dma, void *dummy)
+
+ /* the normal settings for the RCR register : */
#define RCR_DEFAULT (RCR_STRIP_CRC | RCR_RXEN)
#define RCR_CLEAR 0x0 // set it to a base state
@@ -189034,7 +190070,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
// Receive/Phy Control Register
/* BANK 0 */
#define RPC_REG SMC_REG(0x000A, 0)
-@@ -661,14 +729,12 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define RPC_SPEED 0x2000 // When 1 PHY is in 100Mbps mode.
+ #define RPC_DPLX 0x1000 // When 1 PHY is in Full-Duplex Mode
+@@ -659,18 +727,16 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define RPC_LSB_DEFAULT RPC_LED_FD
+ #endif
#define RPC_DEFAULT (RPC_ANEG | (RPC_LSA_DEFAULT << RPC_LSXA_SHFT) | (RPC_LSB_DEFAULT << RPC_LSXB_SHFT) | RPC_SPEED | RPC_DPLX)
@@ -189049,7 +190089,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
// Configuration Reg
/* BANK 1 */
#define CONFIG_REG SMC_REG(0x0000, 1)
-@@ -680,24 +746,20 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define CONFIG_EXT_PHY 0x0200 // 1=external MII, 0=internal Phy
+ #define CONFIG_GPCNTRL 0x0400 // Inverse value drives pin nCNTRL
+@@ -678,28 +744,24 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define CONFIG_EPH_POWER_EN 0x8000 // When 0 EPH is placed into low power mode.
+
// Default is powered-up, Internal Phy, Wait States, and pin nCNTRL=low
#define CONFIG_DEFAULT (CONFIG_EPH_POWER_EN)
@@ -189074,7 +190118,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
// Control Register
/* BANK 1 */
#define CTL_REG SMC_REG(0x000C, 1)
-@@ -710,7 +772,6 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define CTL_RCV_BAD 0x4000 // When 1 bad CRC packets are received
+ #define CTL_AUTO_RELEASE 0x0800 // When 1 tx pages are released automatically
+@@ -708,11 +770,10 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define CTL_TE_ENABLE 0x0020 // When 1 enables Transmit Error interrupt
+ #define CTL_EEPROM_SELECT 0x0004 // Controls EEPROM reload & store
#define CTL_RELOAD 0x0002 // When set reads EEPROM into registers
#define CTL_STORE 0x0001 // When set stores registers into EEPROM
@@ -189082,7 +190130,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
// MMU Command Register
/* BANK 2 */
#define MMU_CMD_REG SMC_REG(0x0000, 2)
-@@ -724,18 +785,15 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define MC_BUSY 1 // When 1 the last release has not completed
+ #define MC_NOP (0<<5) // No Op
+@@ -722,22 +783,19 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define MC_RELEASE (4<<5) // Remove and release the current rx packet
+ #define MC_FREEPKT (5<<5) // Release packet in PNR register
#define MC_ENQUEUE (6<<5) // Enqueue the packet for transmit
#define MC_RSTTXFIFO (7<<5) // Reset the TX FIFOs
@@ -189101,7 +190153,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
// TX FIFO Ports Register
/* BANK 2 */
#define TXFIFO_REG SMC_REG(0x0004, 2)
-@@ -755,17 +813,14 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define TXFIFO_TEMPTY 0x80 // TX FIFO Empty
+
+@@ -753,21 +811,18 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define PTR_REG SMC_REG(0x0006, 2)
+ #define PTR_RCV 0x8000 // 1=Receive area, 0=Transmit area
#define PTR_AUTOINC 0x4000 // Auto increment the pointer on each access
#define PTR_READ 0x2000 // When 1 the operation is a read
@@ -189119,7 +190175,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
// Interrupt Mask Register
/* BANK 2 */
#define IM_REG SMC_REG(0x000D, 2)
-@@ -778,7 +833,6 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define IM_MDINT 0x80 // PHY MI Register 18 Interrupt
+ #define IM_ERCV_INT 0x40 // Early Receive Interrupt
+@@ -776,48 +831,42 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define IM_ALLOC_INT 0x08 // Set when allocation request is completed
+ #define IM_TX_EMPTY_INT 0x04 // Set if the TX FIFO goes empty
#define IM_TX_INT 0x02 // Transmit Interrupt
#define IM_RCV_INT 0x01 // Receive Interrupt
@@ -189127,7 +190187,7 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
// Multicast Table Registers
/* BANK 3 */
#define MCAST_REG1 SMC_REG(0x0000, 3)
-@@ -786,7 +840,6 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define MCAST_REG2 SMC_REG(0x0002, 3)
#define MCAST_REG3 SMC_REG(0x0004, 3)
#define MCAST_REG4 SMC_REG(0x0006, 3)
@@ -189135,7 +190195,9 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
// Management Interface Register (MII)
/* BANK 3 */
#define MII_REG SMC_REG(0x0008, 3)
-@@ -796,13 +849,11 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define MII_MSK_CRS100 0x4000 // Disables CRS100 detection during tx half dup
+ #define MII_MDOE 0x0008 // MII Output Enable
+ #define MII_MCLK 0x0004 // MII Clock, pin MDCLK
#define MII_MDI 0x0002 // MII Input, pin MDI
#define MII_MDO 0x0001 // MII Output, pin MDO
@@ -189149,7 +190211,7 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
// Early RCV Register
/* BANK 3 */
/* this is NOT on SMC9192 */
-@@ -810,12 +861,10 @@ smc_pxa_dma_irq(int dma, void *dummy)
+ #define ERCV_REG SMC_REG(0x000C, 3)
#define ERCV_RCV_DISCRD 0x0080 // When 1 discards a packet being received
#define ERCV_THRESHOLD 0x001F // ERCV Threshold Mask
@@ -189162,7 +190224,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
#define CHIP_9192 3
#define CHIP_9194 4
#define CHIP_9195 5
-@@ -834,8 +883,8 @@ static const char * chip_ids[ 16 ] = {
+ #define CHIP_9196 6
+ #define CHIP_91100 7
+@@ -832,12 +881,12 @@ static const char * chip_ids[ 16 ] = {
+ /* 6 */ "SMC91C96",
+ /* 7 */ "SMC91C100",
/* 8 */ "SMC91C100FD",
/* 9 */ "SMC91C11xFD",
NULL, NULL, NULL,
@@ -189173,7 +190239,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
/*
. Receive status bits
-@@ -849,7 +898,6 @@ static const char * chip_ids[ 16 ] = {
+ */
+ #define RS_ALGNERR 0x8000
+@@ -847,11 +896,10 @@ static const char * chip_ids[ 16 ] = {
+ #define RS_TOOLONG 0x0800
+ #define RS_TOOSHORT 0x0400
#define RS_MULTICAST 0x0001
#define RS_ERRORS (RS_ALGNERR | RS_BADCRC | RS_TOOLONG | RS_TOOSHORT)
@@ -189181,7 +190251,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
/*
* PHY IDs
* LAN83C183 == LAN91C111 Internal PHY
-@@ -879,7 +927,6 @@ static const char * chip_ids[ 16 ] = {
+ */
+ #define PHY_LAN83C183 0x0016f840
+@@ -877,11 +925,10 @@ static const char * chip_ids[ 16 ] = {
+ #define PHY_CFG1_RLVL0 0x0040 // 1=Rx Squelch level reduced by 4.5db
+ #define PHY_CFG1_TLVL_SHIFT 2 // Transmit Output Level Adjust
#define PHY_CFG1_TLVL_MASK 0x003C
#define PHY_CFG1_TRF_MASK 0x0003 // Transmitter Rise/Fall time
@@ -189189,7 +190263,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
// PHY Configuration Register 2
#define PHY_CFG2_REG 0x11
#define PHY_CFG2_APOLDIS 0x0020 // 1=Auto Polarity Correction disabled
-@@ -904,7 +951,6 @@ static const char * chip_ids[ 16 ] = {
+ #define PHY_CFG2_JABDIS 0x0010 // 1=Jabber disabled
+ #define PHY_CFG2_MREG 0x0008 // 1=Multiple register access (MII mgt)
+@@ -902,11 +949,10 @@ static const char * chip_ids[ 16 ] = {
+
+ // PHY Interrupt/Status Mask Register
#define PHY_MASK_REG 0x13 // Interrupt Mask
// Uses the same bit definitions as PHY_INT_REG
@@ -189197,7 +190275,11 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
/*
* SMC91C96 ethernet config and status registers.
* These are in the "attribute" space.
-@@ -922,7 +968,6 @@ static const char * chip_ids[ 16 ] = {
+ */
+ #define ECOR 0x8000
+@@ -920,11 +966,10 @@ static const char * chip_ids[ 16 ] = {
+ #define ECSR_PWRDWN 0x04
+ #define ECSR_INT 0x02
#define ATTRIB_SIZE ((64*1024) << SMC_IO_SHIFT)
@@ -189205,26 +190287,21 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
/*
* Macros to abstract register access according to the data bus
* capabilities. Please use those and not the in/out primitives.
-@@ -1089,7 +1134,13 @@ static const char * chip_ids[ 16 ] = {
+ * Note: the following macros do *not* select the bank -- this must
+ * be done separately as needed in the main code. The SMC_REG() macro
+@@ -1087,10 +1132,27 @@ static const char * chip_ids[ 16 ] = {
+ #define SMC_GET_TCR() SMC_inw(ioaddr, TCR_REG)
+
#define SMC_SET_TCR(x) SMC_outw(x, ioaddr, TCR_REG)
#ifndef SMC_GET_MAC_ADDR
+#ifdef CONFIG_ARCH_NOMADIK
- #define SMC_GET_MAC_ADDR(addr) \
++#define SMC_GET_MAC_ADDR(addr) \
+ if (new_mac_addr[0] == 0xFF) { \
+ printk("%s: Setting Random MAC addr\n", CARDNAME); \
+ random_ether_addr(new_mac_addr); \
+ } \
+ SMC_SET_MAC_ADDR(new_mac_addr); \
- do { \
- unsigned int __v; \
- __v = SMC_inw( ioaddr, ADDR0_REG ); \
-@@ -1099,6 +1150,18 @@ static const char * chip_ids[ 16 ] = {
- __v = SMC_inw( ioaddr, ADDR2_REG ); \
- addr[4] = __v; addr[5] = __v >> 8; \
- } while (0)
-+#else
-+#define SMC_GET_MAC_ADDR(addr) \
+ do { \
+ unsigned int __v; \
+ __v = SMC_inw( ioaddr, ADDR0_REG ); \
@@ -189234,14 +190311,29 @@ diff -Nauprw linux-2.6.20/drivers/net/smc91x.h ../new/linux-2.6.20/drivers/net/s
+ __v = SMC_inw( ioaddr, ADDR2_REG ); \
+ addr[4] = __v; addr[5] = __v >> 8; \
+ } while (0)
-+#endif
++#else
+ #define SMC_GET_MAC_ADDR(addr) \
+ do { \
+ unsigned int __v; \
+ __v = SMC_inw( ioaddr, ADDR0_REG ); \
+ addr[0] = __v; addr[1] = __v >> 8; \
+@@ -1098,10 +1160,11 @@ static const char * chip_ids[ 16 ] = {
+ addr[2] = __v; addr[3] = __v >> 8; \
+ __v = SMC_inw( ioaddr, ADDR2_REG ); \
+ addr[4] = __v; addr[5] = __v >> 8; \
+ } while (0)
#endif
++#endif
#define SMC_SET_MAC_ADDR(addr) \
-diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/drivers/serial/amba-pl011.c
---- linux-2.6.20/drivers/serial/amba-pl011.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/serial/amba-pl011.c 2007-11-21 11:51:41.000000000 +0530
-@@ -52,13 +52,32 @@
+ do { \
+ SMC_outw( addr[0]|(addr[1] << 8), ioaddr, ADDR0_REG ); \
+ SMC_outw( addr[2]|(addr[3] << 8), ioaddr, ADDR1_REG ); \
+--- linux-2.6.20.orig/drivers/serial/amba-pl011.c
++++ linux-2.6.20/drivers/serial/amba-pl011.c
+@@ -50,17 +50,36 @@
+ #include <linux/amba/serial.h>
+ #include <linux/clk.h>
#include <asm/io.h>
#include <asm/sizes.h>
@@ -189276,7 +190368,11 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
#define AMBA_ISR_PASS_LIMIT 256
#define UART_DR_ERROR (UART011_DR_OE|UART011_DR_BE|UART011_DR_PE|UART011_DR_FE)
-@@ -102,9 +121,16 @@ static void pl011_stop_rx(struct uart_po
+ #define UART_DUMMY_DR_RX (1 << 16)
+
+@@ -100,23 +119,31 @@ static void pl011_stop_rx(struct uart_po
+ }
+
static void pl011_enable_ms(struct uart_port *port)
{
struct uart_amba_port *uap = (struct uart_amba_port *)port;
@@ -189294,7 +190390,10 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
}
static void pl011_rx_chars(struct uart_amba_port *uap)
-@@ -115,6 +141,7 @@ static void pl011_rx_chars(struct uart_a
+ {
+ struct tty_struct *tty = uap->port.info->tty;
+ unsigned int status, ch, flag, max_count = 256;
+
status = readw(uap->port.membase + UART01x_FR);
while ((status & UART01x_FR_RXFE) == 0 && max_count--) {
ch = readw(uap->port.membase + UART01x_DR) | UART_DUMMY_DR_RX;
@@ -189302,7 +190401,11 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
flag = TTY_NORMAL;
uap->port.icount.rx++;
-@@ -174,7 +201,9 @@ static void pl011_tx_chars(struct uart_a
+ /*
+ * Note that the error handling code is
+@@ -172,11 +199,13 @@ static void pl011_tx_chars(struct uart_a
+ pl011_stop_tx(&uap->port);
+ return;
}
count = uap->port.fifosize >> 1;
@@ -189312,7 +190415,11 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
writew(xmit->buf[xmit->tail], uap->port.membase + UART01x_DR);
xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
uap->port.icount.tx++;
-@@ -318,6 +347,7 @@ static int pl011_startup(struct uart_por
+ if (uart_circ_empty(xmit))
+ break;
+@@ -316,10 +345,11 @@ static void pl011_break_ctl(struct uart_
+ static int pl011_startup(struct uart_port *port)
+ {
struct uart_amba_port *uap = (struct uart_amba_port *)port;
unsigned int cr;
int retval;
@@ -189320,7 +190427,11 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
/*
* Try to enable the clock producer.
-@@ -331,12 +361,19 @@ static int pl011_startup(struct uart_por
+ */
+ retval = clk_enable(uap->clk);
+@@ -329,36 +359,54 @@ static int pl011_startup(struct uart_por
+ uap->port.uartclk = clk_get_rate(uap->clk);
+
/*
* Allocate the IRQ
*/
@@ -189332,7 +190443,7 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
- writew(UART011_IFLS_RX4_8|UART011_IFLS_TX4_8,
- uap->port.membase + UART011_IFLS);
-+ /*
++ /*
+ *writew(UART011_IFLS_RX4_8|UART011_IFLS_TX4_8,
+ *uap->port.membase + UART011_IFLS);
+ */
@@ -189343,7 +190454,9 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
/*
* Provoke TX FIFO interrupt into asserting.
-@@ -346,7 +383,11 @@ static int pl011_startup(struct uart_por
+ */
+ cr = UART01x_CR_UARTEN | UART011_CR_TXE | UART011_CR_LBE;
+ writew(cr, uap->port.membase + UART011_CR);
writew(0, uap->port.membase + UART011_FBRD);
writew(1, uap->port.membase + UART011_IBRD);
writew(0, uap->port.membase + UART011_LCRH);
@@ -189356,7 +190469,9 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
while (readw(uap->port.membase + UART01x_FR) & UART01x_FR_BUSY)
barrier();
-@@ -356,7 +397,14 @@ static int pl011_startup(struct uart_por
+ cr = UART01x_CR_UARTEN | UART011_CR_RXE | UART011_CR_TXE;
+ writew(cr, uap->port.membase + UART011_CR);
+
/*
* initialise the old status of the modem signals
*/
@@ -189372,7 +190487,11 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
/*
* Finally, enable interrupts
-@@ -396,7 +444,8 @@ static void pl011_shutdown(struct uart_p
+ */
+ spin_lock_irq(&uap->port.lock);
+@@ -394,11 +442,12 @@ static void pl011_shutdown(struct uart_p
+ free_irq(uap->port.irq, uap);
+
/*
* disable the port
*/
@@ -189382,7 +190501,11 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
/*
* disable break condition and fifos
-@@ -658,6 +707,7 @@ static int __init pl011_console_setup(st
+ */
+ val = readw(uap->port.membase + UART011_LCRH);
+@@ -656,10 +705,11 @@ static int __init pl011_console_setup(st
+ /*
+ * Check whether an invalid uart number has been specified, and
* if so, search for the first available port that does have
* console support.
*/
@@ -189390,7 +190513,11 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
if (co->index >= UART_NR)
co->index = 0;
uap = amba_ports[co->index];
-@@ -700,6 +750,28 @@ static struct uart_driver amba_reg = {
+ if (!uap)
+ return -ENODEV;
+@@ -698,10 +748,32 @@ static struct uart_driver amba_reg = {
+ .minor = SERIAL_AMBA_MINOR,
+ .nr = UART_NR,
.cons = AMBA_CONSOLE,
};
@@ -189419,7 +190546,11 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
static int pl011_probe(struct amba_device *dev, void *id)
{
struct uart_amba_port *uap;
-@@ -739,9 +811,10 @@ static int pl011_probe(struct amba_devic
+ void __iomem *base;
+ int i, ret;
+@@ -737,13 +809,14 @@ static int pl011_probe(struct amba_devic
+ uap->port.dev = &dev->dev;
+ uap->port.mapbase = dev->res.start;
uap->port.membase = base;
uap->port.iotype = UPIO_MEM;
uap->port.irq = dev->irq[0];
@@ -189431,7 +190562,11 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
uap->port.line = i;
amba_ports[i] = uap;
-@@ -782,8 +855,8 @@ static int pl011_remove(struct amba_devi
+
+ amba_set_drvdata(dev, uap);
+@@ -780,12 +853,12 @@ static int pl011_remove(struct amba_devi
+ return 0;
+ }
static struct amba_id pl011_ids[] __initdata = {
{
@@ -189442,7 +190577,11 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
},
{ 0, 0 },
};
-@@ -795,6 +868,10 @@ static struct amba_driver pl011_driver =
+
+ static struct amba_driver pl011_driver = {
+@@ -793,10 +866,14 @@ static struct amba_driver pl011_driver =
+ .name = "uart-pl011",
+ },
.id_table = pl011_ids,
.probe = pl011_probe,
.remove = pl011_remove,
@@ -189453,10 +190592,13 @@ diff -Nauprw linux-2.6.20/drivers/serial/amba-pl011.c ../new/linux-2.6.20/driver
};
static int __init pl011_init(void)
-diff -Nauprw linux-2.6.20/drivers/spi/Kconfig ../new/linux-2.6.20/drivers/spi/Kconfig
---- linux-2.6.20/drivers/spi/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/spi/Kconfig 2007-11-21 11:51:41.000000000 +0530
-@@ -65,6 +65,14 @@ config SPI_BITBANG
+ {
+ int ret;
+--- linux-2.6.20.orig/drivers/spi/Kconfig
++++ linux-2.6.20/drivers/spi/Kconfig
+@@ -63,10 +63,18 @@ config SPI_BITBANG
+
+ This is library code, and is automatically selected by drivers that
need it. You only need to select this explicitly to support driver
modules that aren't part of this kernel tree.
@@ -189471,10 +190613,13 @@ diff -Nauprw linux-2.6.20/drivers/spi/Kconfig ../new/linux-2.6.20/drivers/spi/Kc
config SPI_BUTTERFLY
tristate "Parallel port adapter for AVR Butterfly (DEVELOPMENT)"
depends on SPI_MASTER && PARPORT && EXPERIMENTAL
-diff -Nauprw linux-2.6.20/drivers/spi/Makefile ../new/linux-2.6.20/drivers/spi/Makefile
---- linux-2.6.20/drivers/spi/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/spi/Makefile 2007-11-21 11:51:41.000000000 +0530
-@@ -12,6 +12,8 @@ obj-$(CONFIG_SPI_MASTER) += spi.o
+ select SPI_BITBANG
+ help
+--- linux-2.6.20.orig/drivers/spi/Makefile
++++ linux-2.6.20/drivers/spi/Makefile
+@@ -10,10 +10,12 @@ endif
+ # config declarations into driver model code
+ obj-$(CONFIG_SPI_MASTER) += spi.o
# SPI master controller drivers (bus)
obj-$(CONFIG_SPI_BITBANG) += spi_bitbang.o
@@ -189483,9 +190628,10 @@ diff -Nauprw linux-2.6.20/drivers/spi/Makefile ../new/linux-2.6.20/drivers/spi/M
obj-$(CONFIG_SPI_BUTTERFLY) += spi_butterfly.o
obj-$(CONFIG_SPI_PXA2XX) += pxa2xx_spi.o
obj-$(CONFIG_SPI_MPC83xx) += spi_mpc83xx.o
-diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/spi/spi-nomadik.c
---- linux-2.6.20/drivers/spi/spi-nomadik.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/spi/spi-nomadik.c 2008-07-04 23:45:22.000000000 +0530
+ obj-$(CONFIG_SPI_S3C24XX_GPIO) += spi_s3c24xx_gpio.o
+ obj-$(CONFIG_SPI_S3C24XX) += spi_s3c24xx.o
+--- /dev/null
++++ linux-2.6.20/drivers/spi/spi-nomadik.c
@@ -0,0 +1,1000 @@
+/*
+ * drivers/spi/spi-nomadik.c
@@ -189680,7 +190826,7 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+
+/**
+ * giveback - current spi_message is over, schedule next spi_message and call callback of this msg
-+ * @message: current SPI message
++ * @message: current SPI message
+ * @drv_data: spi driver private data structure
+ *
+ */
@@ -189698,11 +190844,11 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ drv_data->cur_msg = NULL;
+ drv_data->cur_transfer = NULL;
+ drv_data->cur_chip = NULL;
-+#ifdef SPI_WORKQUEUE
++#ifdef SPI_WORKQUEUE
+ queue_work(drv_data->workqueue, &drv_data->spi_work);
-+#endif
++#endif
+ spin_unlock_irqrestore(&drv_data->lock, flags);
-+
++
+ schedule_work(&drv_data->spi_work);
+
+ last_transfer = list_entry(msg->transfers.prev,
@@ -189720,9 +190866,9 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ * next_transfer - Move to the Next transfer in the current spi message
+ * @drv_data: spi driver private data structure
+ *
-+ * This function moves though the linked list of spi transfers in the
++ * This function moves though the linked list of spi transfers in the
+ * current spi message and returns with the state of current spi
-+ * message i.e whether its last transfer is done(DONE_STATE) or
++ * message i.e whether its last transfer is done(DONE_STATE) or
+ * Next transfer is ready(RUNNING_STATE)
+ */
+void *next_transfer(struct driver_data *drv_data)
@@ -189744,7 +190890,7 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ * ssp_null_writer - To Write Dummy Data in Data register
+ * @drv_data: spi driver private data structure
+ *
-+ * This function is set as a write function for transfer which have
++ * This function is set as a write function for transfer which have
+ * Tx transfer buffer as NULL. It simply writes '0' in the Data
+ * register
+ */
@@ -189779,7 +190925,7 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ * msp_null_writer - To Write Dummy Data in Data register
+ * @drv_data: spi driver private data structure
+ *
-+ * This function is set as a write function for transfer which have
++ * This function is set as a write function for transfer which have
+ * Tx transfer buffer as NULL. It simply writes '0' in the Data
+ * register
+ */
@@ -189830,7 +190976,7 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ struct spi_message *message = NULL;
+ struct spi_transfer *transfer = NULL;
+ struct spi_transfer *previous = NULL;
-+
++
+ nmdk_dbg_ftrace();
+
+ message = drv_data->cur_msg;
@@ -189997,7 +191143,7 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ drv_data->tx_end = drv_data->tx + drv_data->cur_transfer->len;
+ drv_data->rx = (void *)transfer->rx_buf;
+ drv_data->rx_end = drv_data->rx + drv_data->cur_transfer->len;
-+
++
+ if(drv_data->master->bus_num == SSP_CONTROLLER){
+ drv_data->write = drv_data->tx ? drv_data->cur_chip->write : ssp_null_writer;
+ drv_data->read = drv_data->rx ? drv_data->cur_chip->read : ssp_null_reader;
@@ -190015,9 +191161,9 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ drv_data->read(drv_data);
+ drv_data->write(drv_data);
+ }
-+
++
+ limit = loops_per_jiffy << 1;
-+
++
+ while ((drv_data->rx < drv_data->rx_end) && (limit--)){
+ drv_data->read(drv_data);
+ }
@@ -190027,7 +191173,7 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ if (drv_data->cur_transfer->cs_change)
+ drv_data->cur_chip->cs_control(SPI_CHIP_DESELECT);
+ drv_data->execute_cmd(drv_data, DISABLE_CONTROLLER);
-+
++
+ /* Move to next transfer */
+ message->state = next_transfer(drv_data);
+ }
@@ -190111,7 +191257,7 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ drv_data->workqueue = create_singlethread_workqueue(drv_data->master->cdev.dev->bus_id);
+ if (drv_data->workqueue == NULL)
+ return -EBUSY;
-+#endif
++#endif
+ return 0;
+}
+EXPORT_SYMBOL(init_queue);
@@ -190168,9 +191314,9 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ status = stop_queue(drv_data);
+ if (status != 0)
+ return status;
-+#ifdef SPI_WORKQUEUE
++#ifdef SPI_WORKQUEUE
+ destroy_workqueue(drv_data->workqueue);
-+#endif
++#endif
+ return 0;
+}
+EXPORT_SYMBOL(destroy_queue);
@@ -190180,7 +191326,7 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ * @spi: spi device which is requesting transfer
+ * @msg: spi message which is to handled is queued to driver queue
+ *
-+ * This function is registered to the SPI framework for this SPI master
++ * This function is registered to the SPI framework for this SPI master
+ * controller. It will queue the spi_message in the queue of driver if
+ * the queue is not stopped and return.
+ */
@@ -190191,7 +191337,7 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+
+#if (defined(CONFIG_NOMADIK_MSP) || defined(CONFIG_NOMADIK_MSP_MODULE))
+ struct spi_master *master;
-+ int status = 0;
++ int status = 0;
+#endif
+
+ nmdk_dbg_ftrace();
@@ -190220,7 +191366,7 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+#endif
+ spin_lock_irqsave(&drv_data->lock, flags);
+
-+
++
+ if (drv_data->run == QUEUE_STOPPED) {
+ spin_unlock_irqrestore(&drv_data->lock, flags);
+ return -ESHUTDOWN;
@@ -190228,16 +191374,16 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ if(drv_data->dma_ongoing){
+ struct chip_data *chip;
+ chip = spi_get_ctldata(spi);
-+ nmdk_dbg(":::: Current chip(%p), Chip Id Requesting New Xfer: %d\n", drv_data->cur_chip, chip->chip_id);
-+ nmdk_dbg(":::: Current chip Id (doing infinite DMA): %d -- Chip Id Requesting New Xfer: %d\n", drv_data->cur_chip->chip_id, chip->chip_id);
++ nmdk_dbg(":::: Current chip(%p), Chip Id Requesting New Xfer: %d\n", drv_data->cur_chip, chip->chip_id);
++ nmdk_dbg(":::: Current chip Id (doing infinite DMA): %d -- Chip Id Requesting New Xfer: %d\n", drv_data->cur_chip->chip_id, chip->chip_id);
+ if(drv_data->cur_chip->chip_id != chip->chip_id){
+ nmdk_dbg(":::: Chip_id are not same, Hence current DMA xfer not disabled \n");
+ }
-+ else{
++ else{
+ nmdk_dbg(":::: Chip_id are same. Disabling current infinite DMA xfer\n");
-+
++
+ drv_data->dma_ongoing = 0;
-+
++
+ if (drv_data->cur_chip->dma_info->tx_dmach != -1) {
+ free_dma(drv_data->cur_chip->dma_info->tx_dmach);
+ drv_data->cur_chip->dma_info->tx_dmach = -1;
@@ -190251,29 +191397,29 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ drv_data->cur_msg = NULL;
+ drv_data->cur_transfer = NULL;
+ drv_data->cur_chip = NULL;
-+#ifdef SPI_WORKQUEUE
++#ifdef SPI_WORKQUEUE
+ queue_work(drv_data->workqueue, &drv_data->spi_work);
-+#else
++#else
+ schedule_work(&drv_data->spi_work);
-+#endif
++#endif
+ }
+ spin_unlock_irqrestore(&drv_data->lock, flags);
+ return 0;
+ }
-+
++
+ nmdk_dbg(":::: Regular request (No infinite DMA ongoing)\n");
-+
++
+ msg->actual_length = 0;
+ msg->status = -EINPROGRESS;
+ msg->state = START_STATE;
+
+ list_add_tail(&msg->queue, &drv_data->queue);
+ if (drv_data->run == QUEUE_RUNNING && !drv_data->busy)
-+#ifdef SPI_WORKQUEUE
++#ifdef SPI_WORKQUEUE
+ queue_work(drv_data->workqueue, &drv_data->spi_work);
-+#else
++#else
+ schedule_work(&drv_data->spi_work);
-+#endif
++#endif
+
+ spin_unlock_irqrestore(&drv_data->lock, flags);
+ return 0;
@@ -190288,7 +191434,7 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ bool_t freq_found = FALSE;
+ uint32 max_tclk;
+ uint32 min_tclk;
-+
++
+ nmdk_dbg_ftrace();
+
+ max_tclk = (NMDK_SSP_CLOCK_FREQ / (MIN_CPSDVR * (1 + MIN_SCR))); /* cpsdvscr = 2 & scr 0 */
@@ -190353,11 +191499,11 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+
+ chip->dma_info->tx_dma_info.destdevtype = drv_data->master_info->dma_destdevtype;
+ chip->dma_info->tx_dma_info.config = 0;
-+
++
+ if (chip_info->dma_xfer_type == SPI_WITH_MEM) {
+ chip->dma_info->rx_dma_info.mode = FLOW_CNTRL_DMA(PERIPH_TO_MEM);
+ chip->dma_info->rx_dma_info.destdevtype = "mem";
-+
++
+ chip->dma_info->tx_dma_info.mode = FLOW_CNTRL_DMA(MEM_TO_PERIPH);
+ chip->dma_info->tx_dma_info.srcdevtype = "mem";
+ if (chip_info->dma_config) {
@@ -190384,11 +191530,11 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ chip->dma_info->tx_dma_info.mode |= chip_info->dma_config->rx_dma_mode & ~(FLOW_CNTRL_DEST_PERIPH(PERIPH_TO_PERIPH));
+ if (chip_info->dma_config->tx_client_dmadev_config) {
+ chip->dma_info->rx_dma_info.config |= DMA_DEVCONFIG_DEST(chip_info->dma_config->tx_client_dmadev_config->config);
-+ chip->dma_info->rx_dma_info.destdevtype = chip_info->dma_config->tx_client_dmadev_config->devtype;
++ chip->dma_info->rx_dma_info.destdevtype = chip_info->dma_config->tx_client_dmadev_config->devtype;
+ }
+ if (chip_info->dma_config->rx_client_dmadev_config) {
+ chip->dma_info->tx_dma_info.config |= DMA_DEVCONFIG_DEST(chip_info->dma_config->rx_client_dmadev_config->config);
-+ chip->dma_info->tx_dma_info.srcdevtype = chip_info->dma_config->rx_client_dmadev_config->devtype;
++ chip->dma_info->tx_dma_info.srcdevtype = chip_info->dma_config->rx_client_dmadev_config->devtype;
+ }
+ if (chip_info->dma_config->tx_master_dmadev_config) {
+ chip->dma_info->rx_dma_info.config |= DMA_DEVCONFIG_SRC(chip_info->dma_config->tx_master_dmadev_config->config);
@@ -190409,7 +191555,7 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+ * nomadik_spi_cleanup - cleanup function registered to SPI master framework
+ * @spi: spi device which is requesting cleanup
+ *
-+ * This function is registered to the SPI framework for this SPI master
++ * This function is registered to the SPI framework for this SPI master
+ * controller. It will free the runtime state of chip.
+ */
+void nomadik_spi_cleanup(const struct spi_device *spi)
@@ -190487,10 +191633,35 @@ diff -Nauprw linux-2.6.20/drivers/spi/spi-nomadik.c ../new/linux-2.6.20/drivers/
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Sachin Verma <sachin.verma@st.com> : Vaibhav Agarwal <vaibhav.agarwal@st.com");
+MODULE_DESCRIPTION("Nomadik SPI driver");
-diff -Nauprw linux-2.6.20/drivers/usb/gadget/file_storage.c ../new/linux-2.6.20/drivers/usb/gadget/file_storage.c
---- linux-2.6.20/drivers/usb/gadget/file_storage.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/gadget/file_storage.c 2008-08-08 19:15:19.000000000 +0530
-@@ -272,12 +272,11 @@ MODULE_DESCRIPTION(DRIVER_DESC);
+--- linux-2.6.20.orig/drivers/usb/Kconfig
++++ linux-2.6.20/drivers/usb/Kconfig
+@@ -131,7 +131,9 @@ source "drivers/usb/misc/Kconfig"
+
+ source "drivers/usb/atm/Kconfig"
+
+ source "drivers/usb/gadget/Kconfig"
+
++source "drivers/usb/nomadik/Kconfig"
++
+ endmenu
+
+--- linux-2.6.20.orig/drivers/usb/Makefile
++++ linux-2.6.20/drivers/usb/Makefile
+@@ -65,8 +65,9 @@ obj-$(CONFIG_USB_PHIDGETSERVO) += misc/
+ obj-$(CONFIG_USB_RIO500) += misc/
+ obj-$(CONFIG_USB_SISUSBVGA) += misc/
+ obj-$(CONFIG_USB_TEST) += misc/
+ obj-$(CONFIG_USB_TRANCEVIBRATOR)+= misc/
+ obj-$(CONFIG_USB_USS720) += misc/
++obj-y += nomadik/
+
+ obj-$(CONFIG_USB_ATM) += atm/
+ obj-$(CONFIG_USB_SPEEDTOUCH) += atm/
+--- linux-2.6.20.orig/drivers/usb/gadget/file_storage.c
++++ linux-2.6.20/drivers/usb/gadget/file_storage.c
+@@ -270,16 +270,15 @@ static const char shortname[] = DRIVER_N
+
+ MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_AUTHOR("Alan Stern");
MODULE_LICENSE("Dual BSD/GPL");
@@ -190508,16 +191679,24 @@ diff -Nauprw linux-2.6.20/drivers/usb/gadget/file_storage.c ../new/linux-2.6.20/
/*
-@@ -373,7 +372,7 @@ static struct {
+ * This driver assumes self-powered hardware and has no way for users to
+ * trigger remote wakeup. It uses autoconfiguration to select endpoints
+@@ -371,11 +370,11 @@ static struct {
+
+ } mod_data = { // Default values
.transport_parm = "BBB",
.protocol_parm = "SCSI",
.removable = 0,
- .can_stall = 1,
-+ .can_stall = 0, /* for nhk15 */
++ .can_stall = 0, /* for nhk15 */
.vendor = DRIVER_VENDOR_ID,
.product = DRIVER_PRODUCT_ID,
.release = 0xffff, // Use controller chip type
-@@ -3860,7 +3859,7 @@ static int __init fsg_bind(struct usb_ga
+ .buflen = 16384,
+ };
+@@ -3858,11 +3857,11 @@ static int __init fsg_bind(struct usb_ga
+
+ if ((rc = check_parameters(fsg)) != 0)
goto out;
if (mod_data.removable) { // Enable the store_xxx attributes
@@ -190526,31 +191705,289 @@ diff -Nauprw linux-2.6.20/drivers/usb/gadget/file_storage.c ../new/linux-2.6.20/
dev_attr_ro.store = store_ro;
dev_attr_file.store = store_file;
}
-diff -Nauprw linux-2.6.20/drivers/usb/Kconfig ../new/linux-2.6.20/drivers/usb/Kconfig
---- linux-2.6.20/drivers/usb/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/Kconfig 2008-07-04 23:45:22.000000000 +0530
-@@ -133,5 +133,7 @@ source "drivers/usb/atm/Kconfig"
- source "drivers/usb/gadget/Kconfig"
-
-+source "drivers/usb/nomadik/Kconfig"
+ /* Find out how many LUNs there should be */
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/Kconfig
+@@ -0,0 +1,176 @@
++#
++# INVENTRA USB Host Controller Drivers
++#
++# $Revision: 1.13 $
++#
++config USB_INVENTRA_HCD
++ depends on USB
++ tristate 'Inventra HCD Controller Support'
++ help
++ Say Y here if you have the Inventra USB board on your system.
+
- endmenu
-
-diff -Nauprw linux-2.6.20/drivers/usb/Makefile ../new/linux-2.6.20/drivers/usb/Makefile
---- linux-2.6.20/drivers/usb/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/Makefile 2008-07-04 23:45:23.000000000 +0530
-@@ -67,6 +67,7 @@ obj-$(CONFIG_USB_SISUSBVGA) += misc/
- obj-$(CONFIG_USB_TEST) += misc/
- obj-$(CONFIG_USB_TRANCEVIBRATOR)+= misc/
- obj-$(CONFIG_USB_USS720) += misc/
-+obj-y += nomadik/
-
- obj-$(CONFIG_USB_ATM) += atm/
- obj-$(CONFIG_USB_SPEEDTOUCH) += atm/
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/board.h ../new/linux-2.6.20/drivers/usb/nomadik/board.h
---- linux-2.6.20/drivers/usb/nomadik/board.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/board.h 2008-07-28 15:20:49.000000000 +0530
++ If you do not know what this is, please say N.
++
++ To compile this driver as a module, choose M here: the
++ module will be called musb-hcd (host controller) or
++ musb-gcd (gadget controller) or musb-icd (interface
++ controller when OTG is enabled).
++
++choice
++prompt "Controller Mode"
++depends on USB_INVENTRA_HCD
++default USB_INVENTRA_HCD_HOST
++
++config USB_INVENTRA_HCD_HOST
++ bool 'Host Mode'
++
++config USB_INVENTRA_HCD_GADGET_API
++ bool 'GADGET API'
++ help
++ Say Y here if you want support for GADGET API; the module will
++ be called musb-gcd.ko
++
++ You will need to select the Inventra Controller in the Gadget
++ subsection.
++
++ If you do not know what this is, please say N.
++
++config USB_INVENTRA_HCD_OTG
++ bool 'On The Go'
++ help
++ Say Y here if you want support for USB On The Go.
++
++ The module will be called musb-icd.ko
++
++ If you do not know what this is, please say N.
++
++#config USB_INVENTRA_HCD_GSTORAGE
++# bool 'Storage Demo'
++# help
++# Say Y here if you want the hcd driver compiled as
++# like a mass storage device.
++#
++# If you do not know what this is, please say N.
++
++config USB_INVENTRA_HCD_OTG_GSTORAGE
++ bool 'OTG Storage Demo'
++ help
++ Say Y here if you want the hcd driver compiled as
++ a mass storage device with OTG support.
++
++ If you do not know what this is, please say N.
++
++
++endchoice
++
++config USB_INVENTRA_STATIC_CONFIG
++ depends on USB_INVENTRA_HCD
++ bool 'Use static config (-DMUSB_STATIC_CONFIG)'
++ default true
++ help
++ Use the static configuration file. File must be called
++ hdrc_cnf.h and mut be generated from the board configuration
++ file. Please check directory install/configs for examples.
++
++ If usure please say please say N and make sure your controller
++ is using the standard configuration HB+8E(8K)+8DMA
++
++ NOTE: Make sure your board is using the corresponding core.
++
++config USB_INVENTRA_MUSB_EPFIFOCONFIG_FILE
++ depends on USB_INVENTRA_STATIC_CONFIG
++ string 'Endpoint FIFO configuration file (Advanced)'
++ default ''
++ help
++ Specify the file with the endpoint fifo configuration (Advanced). The
++ file shoud define an struct MUSB_EpFifoDescriptor array called
++ MUSB_aEpFifoDescriptors[MUSB_C_NUM_EPS] containig the end point FIFO
++ configuration specs. Check musbdefs.h for more informations;
++
++ struct MUSB_EpFifoDescriptor MUSB_aEpFifoDescriptors[MUSB_C_NUM_EPS]={
++
++ {}, /* EP0 use the default */
++ { MUSB_EPD_T_BULK, MUSB_EPD_D_TX, 512 },
++ { MUSB_EPD_T_BULK, MUSB_EPD_D_RX, 512 }
++
++ };
++
++ gives the endpoint 0 its default value, and defines ep1/ep2 as bulk tx/rx
++ 512 bytes in size each with double buffering disabled. The FIFO memory
++ allocated with this confoguration is 64+512+512=1088 bytes
++
++config USB_INVENTRA_DMA
++ depends on USB_INVENTRA_HCD
++ bool 'Use DMA when possible (-DMUSB_DMA)'
++ default true
++ help
++ Enable DMA transfers when DMA is possible
++
++config USB_INVENTRA_MUSB_HAS_AHB_ID
++ depends on USB_INVENTRA_HCD
++ bool 'Enable AHB_ID (-DMUSB_AHB_ID)'
++ default false
++ help
++ Disable auto core identification.
++
++ NOTE: Make sure your board is using the corresponding core.
++
++config USB_INVENTRA_MUSB_HDR_CCNF_FILE
++ depends on USB_INVENTRA_HCD
++ string 'Custom config file (Advanced)'
++ default ''
++ help
++ Specify a custom config file (Advanced)
++
++config USB_INVENTRA_MUSB_BOARD_FILE
++ depends on USB_INVENTRA_HCD
++ string 'Custom board file (Advanced)'
++ default ''
++ help
++ Specify a custom board file (Advanced)
++
++config USB_INVENTRA_TPL
++ depends on USB_INVENTRA_HCD_OTG
++ tristate ' Use TPL (-DMUSB_TPL)'
++ default false
++ help
++ Enable Target Peripheral List
++
++config USB_INVENTRA_PROC_TESTMUSB
++ depends on USB_INVENTRA_HCD && PROC_FS && ( USB_INVENTRA_HOSTMODE || USB_INVENTRA_OTG )
++ bool 'Enable /proc/testmusbhdrc*'
++ default false
++ help
++ Add /proc/testmusbhdrc<num> to control the
++
++ NOTE: this is different from supporting /proc filesystem;
++
++ If you do not know what this is, please say N.
++
++config USB_INVENTRA_HCD_CUSTOM_OPTIONS
++ depends on USB_INVENTRA_HCD
++ string 'Custom compile options (Advanced)'
++ default ''
++ help
++ Specify a custom compile options (Advanced)
++
++config USB_INVENTRA_HCD_POLLING
++ depends on USB_INVENTRA_HCD
++ bool 'Use polling driver (debug only)'
++ default false
++ help
++ Enable polling mode (events won't be triggered by IRQs); usefule
++ for debugging.
++
++ If you do not know what this is, please say N.
++
++config USB_INVENTRA_HCD_LOGGING
++ depends on USB_INVENTRA_HCD
++ int 'Logging Level (0 - none / 3 - annoying)'
++ default 0
++ help
++ Set the logging level. 0 disable the debugging altogether (no
++ code will be added to the)
++
++ If you do not know what this is, please say N.
++
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/Makefile
+@@ -0,0 +1,97 @@
++MUSB_VERSION=2.2.2
++HCD_TYPE=hcd
++
++
++obj-$(CONFIG_USB_INVENTRA_HCD) += musb-hcd.o
++
++
++
++ifeq ($(CONFIG_PROC_FS),y)
++ musb-$(HCD_TYPE)-objs += musb_procfs.o
++endif
++
++
++ifneq ($(CONFIG_USB_INVENTRA_MUSB_BOARD_FILE),"")
++ EXTRA_CFLAGS += -DMUSB_BOARD_FILE
++endif
++
++ifneq ($(CONFIG_USB_INVENTRA_MUSB_HDR_CCNF_FILE),"")
++EXTRA_CFLAGS += -DMUSB_HDR_CCNF_FILE
++endif
++
++ifeq ($(CONFIG_USB_INVENTRA_STATIC_CONFIG),y)
++ifneq ($(CONFIG_USB_INVENTRA_MUSB_EPFIFOCONFIG_FILE),"")
++EXTRA_CFLAGS += -DMUSB_EPFIFOCONFIG_FILE
++endif
++endif
++
++ifneq ($(CONFIG_USB_INVENTRA_HCD_CUSTOM_OPTIONS),"")
++EXTRA_CFLAGS += $(CONFIG_USB_INVENTRA_HCD_CUSTOM_OPTIONS)
++endif
++
++
++ EXTRA_CFLAGS += -DMUSB_C_DYNFIFO_DEF
++ EXTRA_CFLAGS += -DMUSB_EPDISCRIPTORS_FILE
++
++ifeq ($(CONFIG_USB_INVENTRA_MUSB_HAS_AHB_ID),y)
++ EXTRA_CFLAGS += -DMUSB_AHB_ID
++endif
++
++ifeq ($(CONFIG_USB_INVENTRA_DMA),y)
++ EXTRA_CFLAGS += -DMUSB_DMA
++ musb-$(HCD_TYPE)-objs += musbhsdma.o
++endif
++
++EXTRA_CFLAGS += -DMUSB_VERSION='"$(MUSB_VERSION)"' -DHCD_NAME=$(HCD_NAME)
++
++ifeq ($(CONFIG_USB_INVENTRA_STATIC_CONFIG),y)
++ EXTRA_CFLAGS += -DMUSB_STATIC_CONFIG
++endif
++
++ifeq ($(CONFIG_USB_INVENTRA_HCD_OTG),y)
++ GADGET_API=y
++ MUSB_HOSTMODE=y
++ EXTRA_CFLAGS += -DMUSB_OTG
++ musb-$(HCD_TYPE)-objs += otg.o
++endif
++
++ifeq ($(CONFIG_USB_INVENTRA_HCD_GADGET_API),y)
++ GADGET_API=y
++endif
++
++#ifneq ($(GADGET_API),)
++
++# GADGET_DIRS=y
++# EXTRA_CFLAGS += -DMUSB_GADGET
++# musb-$(HCD_TYPE)-objs += musb_gadgetcommon.o g_ep0.o musb_gadget.o
++#endif
++
++
++ifeq ($(CONFIG_USB_INVENTRA_HCD_HOST),y)
++ MUSB_HOSTMODE=y
++endif
++
++
++ifeq ($(MUSB_HOSTMODE),y)
++ EXTRA_CFLAGS += -DMUSB_HOST
++ musb-$(HCD_TYPE)-objs += musb_virthub.o musb_host.o musb-hcd.o musb_plat_uds.o musb_bus_direct.o musb_epfifocfg.o musb_ioctl.o nomadik_udc.o otg_pwm.o otg_func.o
++
++endif
++
++ifndef DEBUG
++ DEBUG=0
++endif
++
++MUSB_DEBUG=$(CONFIG_USB_INVENTRA_HCD_LOGGING)
++ifeq ("$(strip $(MUSB_DEBUG))","")
++ MUSB_DEBUG:=$(DEBUG)
++endif
++
++
++ifneq ($(MUSB_DEBUG),0)
++ EXTRA_CFLAGS += -g
++ musb-$(HCD_TYPE)-objs += musb_debug.o
++endif
++
++EXTRA_CFLAGS += -DMUSB_DEBUG=$(MUSB_DEBUG)
++
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/board.h
@@ -0,0 +1,58 @@
+/*
+ * linux/drivers/usb/nomadik/board.h
@@ -190569,7 +192006,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/board.h ../new/linux-2.6.20/driver
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
@@ -190578,11 +192015,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/board.h ../new/linux-2.6.20/driver
+ * $Revision: 1.6 $
+ *
+ * It is suggested to:
-+ * 1. Copy this file to one named after your target:
++ * 1. Copy this file to one named after your target:
+ * cp board.h board-mytarget.h
-+ * 2. Save this file for future reference:
++ * 2. Save this file for future reference:
+ * mv board.h board-example.h
-+ * 3. Link board.h to yours:
++ * 3. Link board.h to yours:
+ * ln -s board-mytarget.h board.h
+ * 4. Edit yours, providing, for each controller:
+ * - controller type (MUSB_CONTROLLER_HDRC or MUSB_CONTROLLER_MHDRC)
@@ -190610,9 +192047,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/board.h ../new/linux-2.6.20/driver
+};
+
+#endif /* multiple inclusion protection */
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/debug.h ../new/linux-2.6.20/drivers/usb/nomadik/debug.h
---- linux-2.6.20/drivers/usb/nomadik/debug.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/debug.h 2008-07-28 15:20:49.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/debug.h
@@ -0,0 +1,104 @@
+/*
+ * linux/drivers/usb/nomadik/debug.h
@@ -190631,9 +192067,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/debug.h ../new/linux-2.6.20/driver
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
-+
++
+#ifndef __MUSB_LINUX_DEBUG_H__
+#define __MUSB_LINUX_DEBUG_H__
+
@@ -190646,7 +192082,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/debug.h ../new/linux-2.6.20/driver
+#define MUSB_MONITOR_DATA
+
+#define yprintk(facility, format, args...) do { printk(facility "%s %d: " format , \
-+ __FUNCTION__, __LINE__ , ## args); } while (0)
++ __FUNCTION__, __LINE__ , ## args); } while (0)
+#define WARN(fmt, args...) yprintk(KERN_WARNING,fmt, ## args)
+#define INFO(fmt,args...) yprintk(KERN_INFO,fmt, ## args)
+#define ERR(fmt,args...) yprintk(KERN_INFO,fmt, ## args)
@@ -190655,30 +192091,30 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/debug.h ../new/linux-2.6.20/driver
+
+#define STATIC
+#define MGC_GetDebugLevel() (MGC_DebugLevel)
-+#define MGC_EnableDebug() do { MGC_DebugDisable=0; } while(0)
++#define MGC_EnableDebug() do { MGC_DebugDisable=0; } while(0)
+#define MGC_DisableDebug() do { MGC_DebugDisable=1; } while(0)
+
+#define _dbg_level(level) ( !MGC_DebugDisable && ((level>=-1 && MGC_GetDebugLevel()>=level) || MGC_GetDebugLevel()==level) )
+
+#define xprintk(level, facility, format, args...) do { if ( _dbg_level(level) ) { \
+ printk(facility "%s %d: " format , __FUNCTION__, __LINE__ , ## args); } } while (0)
-+
++
+#define PARANOID( x ) do {} while (0)
+#define DBG(level,fmt,args...) xprintk(level,KERN_INFO,fmt, ## args)
+#define DEBUG_CODE(level, code) do { if ( _dbg_level(level) ) { code } } while (0)
+#define TRACE(n) DEBUG_CODE(n, printk(KERN_INFO "%s:%s:%d: trace\n", \
+ __FILE__, __FUNCTION__, __LINE__); )
+
-+#define ASSERT_SPINLOCK_LOCKED(_x)
-+#define ASSERT_SPINLOCK_UNLOCKED(_x)
++#define ASSERT_SPINLOCK_LOCKED(_x)
++#define ASSERT_SPINLOCK_UNLOCKED(_x)
+/* #define ASSERT_SPINLOCK_LOCKED(_x) do { if (!spin_is_locked(_x)) \
-+ ERR("@pre clause failed, _x must be locked\n"); } while (0)
++ ERR("@pre clause failed, _x must be locked\n"); } while (0)
+#define ASSERT_SPINLOCK_UNLOCKED(_x) do { if (spin_is_locked(_x)) \
+ ERR("@pre clause failed, _x must be unlocked\n"); } while (0) */
+
+/* debug no defined */
+
-+#else
++#else
+
+#define STATIC static
+#define MGC_GetDebugLevel() 0
@@ -190690,8 +192126,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/debug.h ../new/linux-2.6.20/driver
+#define DEBUG_CODE(x, y) do {} while (0)
+#define TRACE(n) do {} while (0)
+
-+#define ASSERT_SPINLOCK_LOCKED(_x)
-+#define ASSERT_SPINLOCK_UNLOCKED(_x)
++#define ASSERT_SPINLOCK_LOCKED(_x)
++#define ASSERT_SPINLOCK_UNLOCKED(_x)
+
+#endif
+
@@ -190718,9 +192154,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/debug.h ../new/linux-2.6.20/driver
+#endif
+
+#endif // __MUSB_LINUX_DEBUG_H__
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/usb/nomadik/dma.h
---- linux-2.6.20/drivers/usb/nomadik/dma.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/dma.h 2008-07-28 15:20:50.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/dma.h
@@ -0,0 +1,308 @@
+/*
+ * linux/drivers/usb/nomadik/dma.h
@@ -190739,7 +192174,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __MUSB_DMA_H__
@@ -190748,7 +192183,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+/**
+ * Introduction.
+ * The purpose of the DMA Controller Abstraction (DCA) is to allow the ICD
-+ * to use any DMA controller,
++ * to use any DMA controller,
+ * since this is an option in the Inventra USB cores.
+ * The assumptions are:
+ * <ul>
@@ -190760,10 +192195,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+ * The responsibilities of an implementation include:
+ * <ul>
+ * <li>Allocating/releasing buffers for use with DMA
-+ * (this may be specific to a DMA controller, intervening busses,
++ * (this may be specific to a DMA controller, intervening busses,
+ * and a target's capabilities,
+ * so the ICD cannot make assumptions or provide services here)
-+ * <li>Handling the details of moving multiple USB packets
++ * <li>Handling the details of moving multiple USB packets
+ * in cooperation with the Inventra USB core.
+ * <li>Knowing the correlation between channels and the
+ * Inventra core's local endpoint resources and data direction,
@@ -190781,7 +192216,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+/**
+ * DMA channel status.
+ */
-+typedef enum
++typedef enum
+{
+ /** A channel's status is unknown */
+ MGC_DMA_STATUS_UNKNOWN,
@@ -190845,14 +192280,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+ * @return NULL on failure (no channel available)
+ */
+typedef MGC_DmaChannel* (*MGC_pfDmaAllocateChannel)(
-+ void* pPrivateData, uint8_t bLocalEnd,
++ void* pPrivateData, uint8_t bLocalEnd,
+ uint8_t bTransmit, uint8_t bProtocol, uint16_t wMaxPacketSize);
+
+/**
+ * Release a DMA channel.
+ * Release a previously-allocated DMA channel.
+ * The ICD guarantess to no longer reference this channel.
-+ * @param pChannel pointer to a channel obtained by
++ * @param pChannel pointer to a channel obtained by
+ * a successful call to pController->pfDmaAllocateChannel
+ */
+typedef void (*MGC_pfDmaReleaseChannel)(MGC_DmaChannel* pChannel);
@@ -190860,7 +192295,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+/**
+ * Allocate DMA buffer.
+ * Allocate a buffer suitable for DMA operations with the given channel.
-+ * @param pChannel pointer to a channel obtained by
++ * @param pChannel pointer to a channel obtained by
+ * a successful call to pController->pfDmaAllocateChannel
+ * @param dwLength length, in bytes, desired for the buffer
+ * @return a non-NULL pointer to a suitable region (in processor space)
@@ -190874,7 +192309,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+ * Release DMA buffer.
+ * Release a DMA buffer previously acquiring by a successful call
+ * to pController->pfDmaAllocateBuffer.
-+ * @param pChannel pointer to a channel obtained by
++ * @param pChannel pointer to a channel obtained by
+ * a successful call to pController->pfDmaAllocateChannel
+ * @param pBuffer the buffer pointer
+ * @return TRUE on success
@@ -190888,7 +192323,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+ * Program a DMA channel to move data at the core's request.
+ * The local core endpoint and direction should already be known,
+ * since they are specified in the pfDmaAllocateChannel call.
-+ * @param pChannel pointer to a channel obtained by
++ * @param pChannel pointer to a channel obtained by
+ * a successful call to pController->pfDmaAllocateChannel
+ * @param wPacketSize the packet size
+ * @param bMode TRUE if mode 1; FALSE if mode 0
@@ -190898,17 +192333,17 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+ * @return TRUE on success
+ * @return FALSE on error
+ */
-+typedef uint8_t (*MGC_pfDmaProgramChannel)(MGC_DmaChannel* pChannel,
++typedef uint8_t (*MGC_pfDmaProgramChannel)(MGC_DmaChannel* pChannel,
+ uint16_t wPacketSize, uint8_t bMode,
-+ const uint8_t* pBuffer,
++ const uint8_t* pBuffer,
+ uint32_t dwLength);
+
+/**
+ * Get DMA channel status.
+ * Get the current status of a DMA channel, if the hardware allows.
-+ * @param pChannel pointer to a channel obtained by
++ * @param pChannel pointer to a channel obtained by
+ * a successful call to pController->DmaAllocateChannel
-+ * @return current status
++ * @return current status
+ * (MGC_DMA_STATUS_UNKNOWN if hardware does not have readable status)
+ */
+typedef MGC_DmaChannelStatus (*MGC_pfDmaGetChannelStatus)(
@@ -190920,7 +192355,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+ * This is necessary because with the built-in DMA controller
+ * (and probably some other configurations),
+ * the DMA interrupt is shared with other core interrupts.
-+ * Therefore, this function should return quickly
++ * Therefore, this function should return quickly
+ * when there is no DMA interrupt.
+ * When there is a DMA interrupt, this function should
+ * perform any implementations-specific operations,
@@ -190938,7 +192373,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+ * MGC_DmaController.
+ * A DMA Controller.
+ * This is in a struct to allow the ICD to support
-+ * multiple cores of different types,
++ * multiple cores of different types,
+ * since each may use a different type of DMA controller.
+ * @field pPrivateData controller-private data;
+ * not to be interpreted by the ICD
@@ -190978,7 +192413,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+ * FALSE otherwise
+ */
+typedef uint8_t (*MGC_pfDmaChannelStatusChanged)(
-+ void* pPrivateData, uint8_t bLocalEnd,
++ void* pPrivateData, uint8_t bLocalEnd,
+ uint8_t bTransmit);
+
+/**
@@ -190992,7 +192427,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+ * It is assumed the DMA controller's registers' base address will be related
+ * to this in some way.
+ * @return non-NULL pointer on success
-+ * @return NULL on failure (out of memory or exhausted
++ * @return NULL on failure (out of memory or exhausted
+ * a fixed number of controllers)
+ */
+typedef MGC_DmaController* (*MGC_pfNewDmaController)(
@@ -191030,9 +192465,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/dma.h ../new/linux-2.6.20/drivers/
+} MGC_DmaControllerFactory;
+
+#endif /* multiple inclusion protection */
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/drivers/usb/nomadik/g_ep0.c
---- linux-2.6.20/drivers/usb/nomadik/g_ep0.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/g_ep0.c 2008-08-08 19:15:20.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/g_ep0.c
@@ -0,0 +1,858 @@
+/*
+ * linux/drivers/usb/nomadik/g_ep0.c
@@ -191051,7 +192485,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <linux/kernel.h>
@@ -191064,7 +192498,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+struct usb_tt {
+ struct usb_device *hub; /* upstream highspeed hub */
+ int multi; /* true means one TT per port */
-+};
++};
+#include "hcd.h"
+#endif
+
@@ -191079,10 +192513,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+/**
+ * Identifies a transmit request.
+ * @param pControlRequest the control request
-+ * @return true for USB_REQ_GET_CONFIGURATION, USB_REQ_GET_INTERFACE,
-+ * USB_REQ_GET_DESCRIPTOR, USB_REQ_GET_STATUS, USB_REQ_SYNC_FRAME
++ * @return true for USB_REQ_GET_CONFIGURATION, USB_REQ_GET_INTERFACE,
++ * USB_REQ_GET_DESCRIPTOR, USB_REQ_GET_STATUS, USB_REQ_SYNC_FRAME
+ */
-+uint8_t is_tx_request(const struct usb_ctrlrequest *pControlRequest)
++uint8_t is_tx_request(const struct usb_ctrlrequest *pControlRequest)
+{
+ return ( pControlRequest->bRequestType & USB_DIR_IN );
+}
@@ -191090,11 +192524,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+/**
+ * Identifies a zero data request.
+ * @param pControlRequest the control request
-+ * @return true for USB_REQ_SET_INTERFACE, USB_REQ_SET_CONFIGURATION,
++ * @return true for USB_REQ_SET_INTERFACE, USB_REQ_SET_CONFIGURATION,
+ * USB_REQ_SET_ADDRESS, USB_REQ_CLEAR_FEATURE, USB_REQ_SET_FEATURE
-+ *
-+ */
-+uint8_t is_zerodata_request(const struct usb_ctrlrequest *pControlRequest)
++ *
++ */
++uint8_t is_zerodata_request(const struct usb_ctrlrequest *pControlRequest)
+{
+ return ( 0==pControlRequest->wLength ) && !is_tx_request(pControlRequest);
+}
@@ -191102,9 +192536,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+/**
+ * Identifies a receive request.
+ * @param pControlRequest the control request
-+ * @return true for USB_REQ_SET_DESCRIPTOR
-+ */
-+uint8_t is_rx_request(const struct usb_ctrlrequest *pControlRequest)
++ * @return true for USB_REQ_SET_DESCRIPTOR
++ */
++uint8_t is_rx_request(const struct usb_ctrlrequest *pControlRequest)
+{
+ return pControlRequest->bRequest==USB_REQ_SET_DESCRIPTOR;
+}
@@ -191113,7 +192547,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+
+/**
+ * Forward a request to the driver.
-+ *
++ *
+ * FROM: usb_gadget.h
+ * Accordingly, the driver's setup() callback must always implement all
+ * get_descriptor requests, returning at least a device descriptor and
@@ -191128,29 +192562,29 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+ *
+ * @param pControlRequest the usb control request to forward to the driver
+ */
-+static int forward_to_driver(const struct usb_ctrlrequest *pControlRequest)
++static int forward_to_driver(const struct usb_ctrlrequest *pControlRequest)
+{
+ int handled=-EOPNOTSUPP;
+ MGC_LinuxCd* pThis=MGC_GetDriverByName(NULL);
-+
-+
-+ DBG(2, "<== pThis->pGadgetDriver=%p, pControlRequest=%p\n",
-+ pThis->pGadgetDriver, pControlRequest);
-+
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
-+ ASSERT_SPINLOCK_UNLOCKED(&MGC_aGadgetLocalEnd[0]);
-+#endif
-+
++
++
++ DBG(2, "<== pThis->pGadgetDriver=%p, pControlRequest=%p\n",
++ pThis->pGadgetDriver, pControlRequest);
++
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
++ ASSERT_SPINLOCK_UNLOCKED(&MGC_aGadgetLocalEnd[0]);
++#endif
++
+ if ( pThis->pGadgetDriver ){
-+ handled=pThis->pGadgetDriver->setup(pThis->pGadget,
-+ pControlRequest);
++ handled=pThis->pGadgetDriver->setup(pThis->pGadget,
++ pControlRequest);
+ }
+ else{
+ printk("Error case\n");
+ }
-+
-+ DBG(2, "==> handled=%d\n", handled);
++
++ DBG(2, "==> handled=%d\n", handled);
+ return handled;
+}
+
@@ -191161,11 +192595,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+ * @param pControlRequest the usb control request to service.
+ * @see is_rx_request
+ */
-+static int service_rx_request(struct usb_ctrlrequest *pControlRequest)
++static int service_rx_request(struct usb_ctrlrequest *pControlRequest)
+{
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
-+ ASSERT_SPINLOCK_UNLOCKED(&MGC_aGadgetLocalEnd[0]);
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
++ ASSERT_SPINLOCK_UNLOCKED(&MGC_aGadgetLocalEnd[0]);
+#endif
+ return forward_to_driver(pControlRequest);
+}
@@ -191175,39 +192609,39 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+ * @param pControlRequest the request to service
+ * @see is_tx_request
+ */
-+void service_tx_status_request(const struct usb_ctrlrequest *pControlRequest)
++void service_tx_status_request(const struct usb_ctrlrequest *pControlRequest)
+{
+ uint8_t handled=1;
+ uint8_t bResult[2], bEnd=0;
+ MGC_LinuxCd* pThis=MGC_GetDriverByName(NULL);
+ const uint8_t* pBase = (uint8_t*)pThis->pRegs;
+ const uint8_t bRecip=pControlRequest->bRequestType & USB_RECIP_MASK;
-+
++
+ /* ack the request */
+ DBG(3, "acking request %s\n", decode_csr0(MGC_M_CSR0_P_SVDRXPKTRDY) );
+ spin_lock(&pThis->Lock);
+ MGC_SelectEnd(pBase, 0);
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0, MGC_M_CSR0_P_SVDRXPKTRDY);
+ spin_unlock(&pThis->Lock);
-+
++
+ switch (bRecip) {
-+
-+ case USB_RECIP_DEVICE:
-+ DBG(3, "USB_RECIP_DEVICE()\n");
++
++ case USB_RECIP_DEVICE:
++ DBG(3, "USB_RECIP_DEVICE()\n");
+ bResult[0] = pThis->bIsSelfPowered ? 1 : 0;
+ bResult[0] |= 2;
-+ bResult[1] = 0;
++ bResult[1] = 0;
+ MGC_HdrcLoadFifo(pBase, 0, 2, (uint8_t*)&bResult);
+ break;
-+
-+ case USB_RECIP_ENDPOINT:
++
++ case USB_RECIP_ENDPOINT:
+ {
+ uint16_t wTest;
-+
++
+ DBG(3, "USB_RECIP_ENDPOINT()\n");
-+
++
+ bEnd = (uint8_t)pControlRequest->wIndex;
-+
++
+ spin_lock(&pThis->Lock);
+ MGC_SelectEnd(pBase, bEnd);
+ wTest = MGC_ReadCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd);
@@ -191216,123 +192650,123 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+ bResult[1] = 0;
+ MGC_HdrcLoadFifo(pBase, 0, 2, (uint8_t*)&bResult);
+ spin_unlock(&pThis->Lock);
-+ }
++ }
+ break;
-+
++
+ default:
+ handled=0;
+ break;
+ }
-+
-+ /* send it out! (this will trigger the ep0 completition IRQ)
++
++ /* send it out! (this will trigger the ep0 completition IRQ)
+ * serviced in interrupt_complete() */
+ if ( handled ) {
+ pThis->bEnd0Stage=MGC_END0_STAGE_STATUSOUT;
-+
++
+ spin_lock(&pThis->Lock);
+ MGC_SelectEnd(pBase, bEnd);
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
+ MGC_M_CSR0_TXPKTRDY | MGC_M_CSR0_P_DATAEND);
+ spin_unlock(&pThis->Lock);
+ }
+}
+
+/**
-+ * Service a transmit a request. End0 buffer contains the current
-+ * request (a standard control request). Assumes the fifo to be at least
-+ * bytes long. Requests handled here are: USB_REQ_GET_CONFIGURATION,
-+ * USB_REQ_GET_INTERFACE, USB_REQ_GET_DESCRIPTOR, USB_REQ_GET_STATUS,
++ * Service a transmit a request. End0 buffer contains the current
++ * request (a standard control request). Assumes the fifo to be at least
++ * bytes long. Requests handled here are: USB_REQ_GET_CONFIGURATION,
++ * USB_REQ_GET_INTERFACE, USB_REQ_GET_DESCRIPTOR, USB_REQ_GET_STATUS,
+ * USB_REQ_SYNC_FRAME.
+ *
+ * @param pControlRequest the request to service
-+ * @return 0 if the request was NOT HANDLED, < 0 when error (ENOSUPP not
-+ * supprorted), > 0 when the request is processed
++ * @return 0 if the request was NOT HANDLED, < 0 when error (ENOSUPP not
++ * supprorted), > 0 when the request is processed
+ * @see is_tx_request
+ */
-+static int service_tx_request(const struct usb_ctrlrequest *pControlRequest)
++static int service_tx_request(const struct usb_ctrlrequest *pControlRequest)
+{
+ int handled=0; /* not handled */
-+
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
-+ ASSERT_SPINLOCK_UNLOCKED(&MGC_aGadgetLocalEnd[0]);
++
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
++ ASSERT_SPINLOCK_UNLOCKED(&MGC_aGadgetLocalEnd[0]);
+#endif
-+
++
+ if ( USB_TYPE_STANDARD!=(pControlRequest->bRequestType&USB_TYPE_MASK )) {
+ return forward_to_driver(pControlRequest);
+ }
-+
++
+ switch (pControlRequest->bRequest) {
+ case USB_REQ_GET_CONFIGURATION:
+ DBG(3, "USB_REQ_GET_CONFIGURATION()\n");
+ break;
-+
++
+ case USB_REQ_GET_INTERFACE:
+ DBG(3, "USB_REQ_GET_INTERFACE()\n");
+ break;
-+
++
+ case USB_REQ_GET_DESCRIPTOR:
+ DBG(3, "USB_REQ_GET_DESCRIPTOR()\n");
+ break;
-+
++
+ case USB_REQ_GET_STATUS: {
+ DBG(3, "USB_REQ_GET_STATUS()\n");
+ service_tx_status_request(pControlRequest);
-+ }
++ }
+ break;
-+
++
+ /* case USB_REQ_SYNC_FRAME:
+ break; */
-+
-+ default:
++
++ default:
+ break;
+ }
-+
++
+ if ( !handled ) {
+ handled=forward_to_driver(pControlRequest);
+ }
-+
++
+ /* now tx! */
+ return handled;
+}
+
+/**
-+ * Service a zero data request.
++ * Service a zero data request.
+ * Called for USB_REQ_SET_INTERFACE, USB_REQ_SET_CONFIGURATION,
+ * USB_REQ_SET_ADDRESS, USB_REQ_CLEAR_FEATURE, USB_REQ_SET_FEATURE.
-+ *
++ *
+ * @param pThis the controller instance
+ * @param pControlRequest the control request to service.
+ * @warning USB_REQ_SET_ADDRESS should be executed QUICKLY
+ * @see is_zerodata_request
+ */
-+static int service_zero_data_request(MGC_LinuxCd* pThis,
-+ struct usb_ctrlrequest *pControlRequest)
++static int service_zero_data_request(MGC_LinuxCd* pThis,
++ struct usb_ctrlrequest *pControlRequest)
+{
+ int handled=1; /* handled, DO NOT not pass down */
+ const uint8_t* pBase = (uint8_t*)pThis->pRegs;
+ const uint8_t bRecip=pControlRequest->bRequestType & USB_RECIP_MASK;
-+
++
+ DBG(-1002, "<==\n");
-+
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
-+ ASSERT_SPINLOCK_UNLOCKED(&MGC_aGadgetLocalEnd[0]);
++
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
++ ASSERT_SPINLOCK_UNLOCKED(&MGC_aGadgetLocalEnd[0]);
+#endif
-+
++
+ /* non standard requests are piped to the gadget */
+ if ( USB_TYPE_STANDARD!=(pControlRequest->bRequestType&USB_TYPE_MASK )) {
+ return forward_to_driver(pControlRequest);
+ }
-+
-+ /* zero data phase */
++
++ /* zero data phase */
+ switch (pControlRequest->bRequest) {
-+
++
+ case USB_REQ_SET_INTERFACE:
+ DBG(3, "USB_REQ_SET_INTERFACE()\n");
+ handled=0; /* pass it to the gadget */
-+ break;
-+
++ break;
++
+ case USB_REQ_SET_CONFIGURATION:
+ /* remember state & handle on the end status stage interrupt */
+ DBG(3, "USB_REQ_SET_CONFIGURATION()\n");
@@ -191340,96 +192774,96 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+ ? MGC_STATE_CONFIGURED : MGC_STATE_ADDRESS;
+ handled=0; /* pass it to the gadget */
+ break;
-+
++
+ case USB_REQ_SET_ADDRESS:
+ /* remember state & handle on the end status stage interrupt */
+ DBG(3, "USB_REQ_SET_ADDRESS(0x%x)\n",(uint8_t)
+ (pControlRequest->wValue & 0x7f));
-+
++
+ pThis->bSetAddress = TRUE;
+ pThis->bAddress = (uint8_t)(pControlRequest->wValue & 0x7f);
+ pThis->bDeviceState = MGC_STATE_ADDRESS;
+ break;
-+
++
+ case USB_REQ_CLEAR_FEATURE:
+ DBG(3, "USB_REQ_CLEAR_FEATURE()\n");
-+
++
+ switch (bRecip) {
-+
++
+ case USB_RECIP_DEVICE:
+ DBG(3, "USB_RECIP_DEVICE()\n");
+ break;
-+
++
+ case USB_RECIP_INTERFACE:
+ DBG(3, "USB_RECIP_INTERFACE()\n");
+ break;
-+
++
+ case USB_RECIP_ENDPOINT: {
+ const uint8_t bEnd = (uint8_t)pControlRequest->wIndex & 0x7f ;
+ MGC_GadgetLocalEnd* pEnd=&MGC_aGadgetLocalEnd[ bEnd ];
-+
-+ DBG(-1, "CLEAR_FEATURE: USB_RECIP_ENDPOINT() %d\n", bEnd );
++
++ DBG(-1, "CLEAR_FEATURE: USB_RECIP_ENDPOINT() %d\n", bEnd );
+ MGC_GadgetSetHalt( &pEnd->end_point, 0);
+ /* select ep0 again */
-+ MGC_SelectEnd(pBase, 0);
-+ }
++ MGC_SelectEnd(pBase, 0);
++ }
+ break;
-+
++
+ default:
-+ break;
++ break;
+ }
+ break; /* END: CLEAR_FEATURE */
-+
++
+ case USB_REQ_SET_FEATURE:
+ DBG(3, "USB_REQ_SET_FEATURE()\n");
-+
++
+ switch (bRecip) {
-+
++
+ case USB_RECIP_DEVICE:
+ DBG(3, "USB_RECIP_DEVICE()\n");
-+
++
+ switch (pControlRequest->wValue) {
-+
++
+ case 1:
+ DBG(3, "REMOTE_WAKEUP()\n");
+ while (0) { } /* remote wakeup */
+ break;
-+
++
+ case 2:
+ if (pControlRequest->wIndex & 0xff) {
+ handled=-EINVAL;
+ } else {
+ uint16_t wTest;
-+
++
+ DBG(3, "ENTERING TESTMODE\n");
+ pThis->bTestMode = TRUE;
+ wTest = (uint8_t)pControlRequest->wIndex >> 8;
+ switch(wTest) {
-+
++
+ case 1:
+ DBG(3, "TEST_J\n");
+ /* TEST_J */
+ pThis->bTestModeValue = MGC_M_TEST_J;
+ break;
-+
++
+ case 2:
+ /* TEST_K */
+ DBG(3, "TEST_K\n");
+ pThis->bTestModeValue = MGC_M_TEST_K;
+ break;
-+
++
+ case 3:
+ /* TEST_SE0_NAK */
+ DBG(3, "TEST_SE0_NAK\n");
+ pThis->bTestModeValue = MGC_M_TEST_SE0_NAK;
+ break;
-+
++
+ case 4:
+ /* TEST_PACKET */
+ DBG(3, "TEST_PACKET\n");
+ pThis->bTestModeValue = MGC_M_TEST_PACKET;
+ break;
-+
++
+ default:
+ /* my gadget might know what to do with it */
+ break;
@@ -191438,55 +192872,55 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+ break;
+#ifdef MUSB_OTG
+ case 3:
-+ GADGET_SET_B_HNP_ENABLE(pThis->pGadget, 1);
-+ MGC_OtgMachineSetFeature(&(pThis->OtgMachine),
++ GADGET_SET_B_HNP_ENABLE(pThis->pGadget, 1);
++ MGC_OtgMachineSetFeature(&(pThis->OtgMachine),
+ pControlRequest->wValue);
+ break;
-+
++
+ case 4:
-+ GADGET_SET_A_HNP_SUPPORT(pThis->pGadget, 1);
-+ MGC_OtgMachineSetFeature(&(pThis->OtgMachine),
++ GADGET_SET_A_HNP_SUPPORT(pThis->pGadget, 1);
++ MGC_OtgMachineSetFeature(&(pThis->OtgMachine),
+ pControlRequest->wValue);
+ break;
-+
++
+ case 5:
+ GADGET_SET_A_ALT_HNP_SUPPORT(pThis->pGadget, 1);
-+ MGC_OtgMachineSetFeature(&(pThis->OtgMachine),
++ MGC_OtgMachineSetFeature(&(pThis->OtgMachine),
+ pControlRequest->wValue);
+ break;
+#endif
+ }
+ break;
-+
++
+ case USB_RECIP_INTERFACE:
+ DBG(3, "USB_RECIP_INTERFACE()\n");
+ break;
-+
++
+ case USB_RECIP_ENDPOINT: {
+ const uint8_t bEnd = (uint8_t)pControlRequest->wIndex & 0x7f ;
+ MGC_GadgetLocalEnd* pEnd=&MGC_aGadgetLocalEnd[ bEnd ];
-+
-+ DBG(3, "SET_FEATURE: USB_RECIP_ENDPOINT() %d\n", bEnd );
++
++ DBG(3, "SET_FEATURE: USB_RECIP_ENDPOINT() %d\n", bEnd );
+ MGC_GadgetSetHalt(&pEnd->end_point, 1);
-+
++
+ /* select ep0 again */
+ MGC_SelectEnd(pBase, 0);
-+ }
++ }
+ break;
-+
++
+ }
+ break; /* END: SET_FEATURE */
-+
++
+ default:
+ handled=0;
+ break;
+ }
-+
++
+ /* standard request not handed by this code go to the gadget */
+ if ( !handled ) {
+ handled=forward_to_driver(pControlRequest);
+ }
-+
++
+ DBG(-1002, "==>\n");
+ return handled;
+}
@@ -191498,98 +192932,98 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+ * IRQ on ep0 has occourred.
+ * @warning Executed @ interrupt time; complete CANNOT sleep.
+ */
-+void mgc_complete_ep0_request(void)
++void mgc_complete_ep0_request(void)
+{
+ struct usb_request *pRequest;
+ MGC_LinuxCd* pThis=MGC_GetDriverByName(NULL);
-+
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
-+ ASSERT_SPINLOCK_LOCKED(&MGC_aGadgetLocalEnd[0]);
++
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
++ ASSERT_SPINLOCK_LOCKED(&MGC_aGadgetLocalEnd[0]);
+#endif
-+
++
+ spin_lock( &MGC_aGadgetLocalEnd[0].Lock );
+ pRequest=MGC_CurrentRequest( &MGC_aGadgetLocalEnd[0] );
-+
++
+ DBG(3, "completing request pRequest=%p\n", pRequest);
-+
++
+ /* this is interrupt code, it cannot sleep! */
+ if ( pRequest ) {
-+ list_del( &pRequest->list );
-+ INIT_LIST_HEAD( &MGC_aGadgetLocalEnd[0].req_list );
-+
++ list_del( &pRequest->list );
++ INIT_LIST_HEAD( &MGC_aGadgetLocalEnd[0].req_list );
++
+ spin_unlock( &MGC_aGadgetLocalEnd[0].Lock );
-+ if ( pRequest->complete ) {
-+ pRequest->complete(&MGC_aGadgetLocalEnd[0].end_point,
++ if ( pRequest->complete ) {
++ pRequest->complete(&MGC_aGadgetLocalEnd[0].end_point,
+ pRequest);
+ }
+ } else {
+ spin_unlock( &MGC_aGadgetLocalEnd[0].Lock );
+ }
-+
++
+ pThis->bEnd0Stage = MGC_END0_STAGE_SETUP;
+}
+
+/**
-+ * handle the completition interrupt on endpoint 0.
++ * handle the completition interrupt on endpoint 0.
+ */
-+static void handle_ep0_completition_irq(void)
++static void handle_ep0_completition_irq(void)
+{
+ MGC_LinuxCd* pThis=MGC_GetDriverByName(NULL);
+ const uint8_t* pBase = (uint8_t*)pThis->pRegs;
-+
++
+ DBG(3, "<==\n");
-+ DBG(4, "post event interrupts ep0stage=%s\n",
++ DBG(4, "post event interrupts ep0stage=%s\n",
+ decode_ep0stage(pThis->bEnd0Stage));
-+
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
-+ ASSERT_SPINLOCK_UNLOCKED(&MGC_aGadgetLocalEnd[0]);
-+#endif
-+
-+ switch (pThis->bEnd0Stage) {
-+
++
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
++ ASSERT_SPINLOCK_UNLOCKED(&MGC_aGadgetLocalEnd[0]);
++#endif
++
++ switch (pThis->bEnd0Stage) {
++
+ /* end of sequence #2 (RX state) or #3 (no data) */
-+ case MGC_END0_STAGE_STATUSIN:
++ case MGC_END0_STAGE_STATUSIN:
+ DBG(-1001, "MGC_END0_STAGE_STATUSIN request\n");
-+
-+ /* update address (if needed) only @ the end of the
++
++ /* update address (if needed) only @ the end of the
+ * status phase per standard. The guide is WRONG!
+ */
-+ if(pThis->bSetAddress) {
++ if(pThis->bSetAddress) {
+ pThis->bSetAddress = FALSE;
-+ MGC_Write8(pBase, MGC_O_HDRC_FADDR, pThis->bAddress);
++ MGC_Write8(pBase, MGC_O_HDRC_FADDR, pThis->bAddress);
+#ifdef MUSB_MONITOR_DATA
+ MGC_EnableDebug();
-+#endif
++#endif
+ }
-+
++
+ /* enter test mode if needed */
+ if(pThis->bTestMode) {
+ DBG(-1001, "entering TESTMODE\n");
-+
++
+ if (MGC_M_TEST_PACKET == pThis->bTestModeValue) {
-+ MGC_HdrcLoadFifo(pBase, 0, sizeof(MGC_aTestPacket),
++ MGC_HdrcLoadFifo(pBase, 0, sizeof(MGC_aTestPacket),
+ MGC_aTestPacket);
+ }
-+
++
+ spin_lock(&pThis->Lock);
+ MGC_SelectEnd(pBase, 0); /* select ep0 */
-+ MGC_Write8(pBase, MGC_O_HDRC_TESTMODE,
++ MGC_Write8(pBase, MGC_O_HDRC_TESTMODE,
+ pThis->bTestModeValue);
+ spin_unlock(&pThis->Lock);
-+ }
-+
-+ DBG(-1001, "completing posted request (if any)\n");
++ }
++
++ DBG(-1001, "completing posted request (if any)\n");
+ mgc_complete_ep0_request();
+ break;
-+
++
+ /* sequence #1: write to host (TX state) */
+ case MGC_END0_STAGE_STATUSOUT:
-+ DBG(-1001, "completing posted request (if any)\n");
++ DBG(-1001, "completing posted request (if any)\n");
+ mgc_complete_ep0_request();
+ break;
-+
++
+ case MGC_END0_STAGE_TX:
+ DBG(-1001, "TX changeing ep status\n");
+ if ( MGC_CurrentRequest(&MGC_aGadgetLocalEnd[0])->status!=-EINPROGRESS ) {
@@ -191603,14 +193037,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+ pThis->bEnd0Stage=MGC_END0_STAGE_STATUSIN;
+ }
+ break;
-+
++
+ default: /* IT WAS STALLED */
-+ DBG(-1002, "recovering from stall? ep0stage=%s\n",
++ DBG(-1002, "recovering from stall? ep0stage=%s\n",
+ decode_ep0stage(pThis->bEnd0Stage));
-+ pThis->bEnd0Stage = MGC_END0_STAGE_SETUP;
++ pThis->bEnd0Stage = MGC_END0_STAGE_SETUP;
+ break;
+ }
-+
++
+ DBG(3, "==>\n");
+}
+
@@ -191619,42 +193053,42 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+
+/**
+ * Handle ep0 in receive state. Called to start a receie and on each interrupt
-+ * when receiving data on ep0.
++ * when receiving data on ep0.
+ */
+int ep0_rxstate(void) {
+ MGC_LinuxCd* pThis=MGC_GetDriverByName(NULL);
+ const uint8_t* pBase = (uint8_t*)pThis->pRegs;
+ MGC_GadgetLocalEnd* pEnd = &(MGC_aGadgetLocalEnd[0]);
+ struct usb_request *pRequest=MGC_CurrentRequest(pEnd);
-+
++
+ /* nothign for now */
+ DBG(-1002, "<==\n");
-+
++
+ if ( pRequest->actual==0 ) {
+ /* ack the request first */
+ DBG(4, "acking request %s\n", decode_csr0(MGC_M_CSR0_P_SVDRXPKTRDY) );
+ spin_lock(&pThis->Lock);
+ MGC_SelectEnd(pBase, 0);
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
+ MGC_M_CSR0_P_SVDRXPKTRDY);
+ spin_unlock(&pThis->Lock);
+ }
-+
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
-+ ASSERT_SPINLOCK_LOCKED(&pEnd->Lock);
++
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
++ ASSERT_SPINLOCK_LOCKED(&pEnd->Lock);
+#endif
-+
-+ DBG(-1002, "==>\n");
-+
++
++ DBG(-1002, "==>\n");
++
+ return 0;
+}
+
+/**
+ * Handle ep0 in transmit state. Called to start a receie and on each interrupt
-+ * when transmitting data on ep0.
++ * when transmitting data on ep0.
+ */
-+int ep0_txstate(void)
++int ep0_txstate(void)
+{
+ unsigned long flags;
+ MGC_LinuxCd* pThis=MGC_GetDriverByName(NULL);
@@ -191662,61 +193096,61 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+ MGC_GadgetLocalEnd* pEnd = &(MGC_aGadgetLocalEnd[0]);
+ struct usb_request *pRequest=MGC_CurrentRequest(pEnd);
+ uint16_t wCsrVal = MGC_M_CSR0_TXPKTRDY;
-+ uint8_t* pFifoSource;
-+ uint8_t wFifoCount;
-+
-+ DBG(-1002, "<==\n");
-+
++ uint8_t* pFifoSource;
++ uint8_t wFifoCount;
++
++ DBG(-1002, "<==\n");
++
+#ifdef MUSB_PARANOID
+ if ( !pThis || !pRequest ) {
-+ ERR("pThis=%p, pRequest=%p", pThis, pRequest);
++ ERR("pThis=%p, pRequest=%p", pThis, pRequest);
+ return -EINVAL;
+ }
+#endif
-+
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
-+ ASSERT_SPINLOCK_LOCKED(&pEnd->Lock);
++
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&pThis->Lock);
++ ASSERT_SPINLOCK_LOCKED(&pEnd->Lock);
+#endif
-+
++
+ spin_lock_irqsave(&pThis->Lock, flags);
+ MGC_SelectEnd(pBase, 0);
-+
++
+ if ( pRequest->actual==0 ) {
+ /* ack the request first */
+ DBG(4, "acking request %s\n", decode_csr0(MGC_M_CSR0_P_SVDRXPKTRDY) );
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
+ MGC_M_CSR0_P_SVDRXPKTRDY);
+ }
-+
-+ /* load the data */
++
++ /* load the data */
+ pFifoSource = (uint8_t*)pRequest->buf+pRequest->actual;
+ wFifoCount =min((int)MGC_END0_FIFOSIZE, (int)(pRequest->length-pRequest->actual));
+ MGC_HdrcLoadFifo(pBase, 0, wFifoCount, pFifoSource);
+ pRequest->actual+=wFifoCount; /* done */
-+
++
+ /* update the flags */
+ if ( wFifoCount < MUSB_MAX_END0_PACKET ) {
+ wCsrVal |= MGC_M_CSR0_P_DATAEND;
+ pRequest->status=0; /* done */
-+ }
-+
-+ /* send it out! (this will trigger the ep0 completition IRQ)
-+ * serviced in interrupt_complete()
++ }
++
++ /* send it out! (this will trigger the ep0 completition IRQ)
++ * serviced in interrupt_complete()
+ */
-+ DBG(4, "wrote wFifoCount=%d bytes, wCsrVal=%s\n", wFifoCount,
++ DBG(4, "wrote wFifoCount=%d bytes, wCsrVal=%s\n", wFifoCount,
+ decode_csr0(wCsrVal) );
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0, wCsrVal);
+ spin_unlock_irqrestore(&pThis->Lock, flags);
-+
-+ DBG(-1002, "==>\n");
++
++ DBG(-1002, "==>\n");
+ return 0;
+}
+
+/* ---------------------------------------------------------------------- */
+
+/**
-+ * Handle ep0 interrupt of a device, lock & release pThis. This is the main
++ * Handle ep0 interrupt of a device, lock & release pThis. This is the main
+ * entry point of the gadget Ep0 handling code.
+ * @param pThis the controller
+ */
@@ -191725,144 +193159,144 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+ uint16_t wCsrVal; /* */
+ uint16_t wCount; /* bytes available */
+ const uint8_t* pBase = (uint8_t*)pThis->pRegs;
-+
++
+ DBG(2, "<==\n");
-+
++
+ spin_lock(&pThis->Lock);
+ MGC_SelectEnd(pBase, 0); /* select ep0 */
+ wCsrVal = MGC_ReadCsr16(pBase, MGC_O_HDRC_CSR0, 0);
+ wCount = MGC_ReadCsr8(pBase, MGC_O_HDRC_COUNT0, 0);
-+
++
+ DEBUG_CODE(4, { uint8_t myaddr=MGC_Read8(pBase, MGC_O_HDRC_FADDR); \
+ uint8_t devctl = MGC_Read8(pBase, MGC_O_HDRC_DEVCTL); \
+ printk(KERN_INFO "%s: wCrsVal=0x%x, wCount=%d, myaddr=%0x, mode=%s, ep0stage=%s\n", \
+ __FUNCTION__, wCsrVal, wCount, myaddr, decode_devctl(devctl), \
+ decode_ep0stage(pThis->bEnd0Stage) ); } );
-+
++
+ /* I sent a stall.. need to acknowledge it now.. */
-+ if(wCsrVal & MGC_M_CSR0_P_SENTSTALL) {
++ if(wCsrVal & MGC_M_CSR0_P_SENTSTALL) {
+ DBG(-1002, "acking stall while in ep0stage=%s\n",
+ decode_ep0stage(pThis->bEnd0Stage));
-+
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
-+ wCsrVal & ~MGC_M_CSR0_P_SENTSTALL );
-+ pThis->bEnd0Stage=MGC_END0_STAGE_SETUP;
++
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
++ wCsrVal & ~MGC_M_CSR0_P_SENTSTALL );
++ pThis->bEnd0Stage=MGC_END0_STAGE_SETUP;
+ }
-+
++
+ /* setup ended prematurely, abort it */
-+ if (wCsrVal & MGC_M_CSR0_P_SETUPEND) {
++ if (wCsrVal & MGC_M_CSR0_P_SETUPEND) {
+ DBG(-1002, "acking setupend while in ep0stage=%s\n",
+ decode_ep0stage(pThis->bEnd0Stage));
-+
++
+ /* clearing it */
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
+ MGC_M_CSR0_P_SVDSETUPEND );
-+ pThis->bEnd0Stage=MGC_END0_STAGE_SETUP;
++ pThis->bEnd0Stage=MGC_END0_STAGE_SETUP;
+ }
-+
-+ spin_unlock(&pThis->Lock);
-+
++
++ spin_unlock(&pThis->Lock);
++
+ /* handle completition interrupt */
+ if ( !wCsrVal && !wCount ) {
+ handle_ep0_completition_irq();
+ return TRUE;
+ }
-+
++
+ switch( pThis->bEnd0Stage ) {
+ /* done transmitting */
+ case MGC_END0_STAGE_STATUSOUT:
+ case MGC_END0_STAGE_STATUSIN:
+ mgc_complete_ep0_request();
+ break;
-+ }
-+
-+ switch( pThis->bEnd0Stage ) {
-+ /* im alrewady writing to host, TX state,
-+ * sequence #1 initiated during the setup
++ }
++
++ switch( pThis->bEnd0Stage ) {
++ /* im alrewady writing to host, TX state,
++ * sequence #1 initiated during the setup
+ */
-+ case MGC_END0_STAGE_TX:
++ case MGC_END0_STAGE_TX:
+ if ( wCsrVal & MGC_M_CSR0_TXPKTRDY ) {
+ DBG(-1001, "MGC_END0_STAGE_TX\n");
+ ep0_txstate();
+ } break;
-+
-+ /* im alrewady receiving from host, RX state,
-+ * sequence #2 initiated during the setup
++
++ /* im alrewady receiving from host, RX state,
++ * sequence #2 initiated during the setup
+ */
-+ case MGC_END0_STAGE_RX:
++ case MGC_END0_STAGE_RX:
+ if ( wCsrVal & MGC_M_CSR0_RXPKTRDY ) {
+ DBG(-1001, "MGC_END0_STAGE_RX\n");
-+ ep0_rxstate();
++ ep0_rxstate();
+ }
+ break;
-+
++
+ /* received from host, RX State, header */
-+ case MGC_END0_STAGE_SETUP:
-+ if ( wCsrVal & MGC_M_CSR0_RXPKTRDY ) {
++ case MGC_END0_STAGE_SETUP:
++ if ( wCsrVal & MGC_M_CSR0_RXPKTRDY ) {
+ int count=0, handled=0;
-+
++
+ count=MGC_ReadUSBControlRequest(pThis, wCount);
-+ if ( count<0 ) {
++ if ( count<0 ) {
+ /* ack the request */
+ ERR("error reading the control request: this is bad (tm)\n");
+ } else if ( 0==count ) { /* I got the full packet, GREAT! */
+ struct usb_ctrlrequest *pControlRequest=(struct usb_ctrlrequest*)
+ pThis->pEnd0Buffer;
-+
-+ DBG(-1002, "%s\n", decode_request(pControlRequest));
-+
++
++ DBG(-1002, "%s\n", decode_request(pControlRequest));
++
+ /* sequence #3 */
+ if ( is_zerodata_request(pControlRequest) ) {
+ uint16_t wCsrVal= MGC_M_CSR0_P_SVDRXPKTRDY
+ | MGC_M_CSR0_P_DATAEND;
-+
++
+ pThis->bEnd0Stage = MGC_END0_STAGE_STATUSIN;
-+ handled=service_zero_data_request(pThis,
++ handled=service_zero_data_request(pThis,
+ pControlRequest);
-+ if ( handled<0 && handled!=-EOPNOTSUPP ) {
-+ wCsrVal |= MGC_M_CSR0_P_SENDSTALL;
++ if ( handled<0 && handled!=-EOPNOTSUPP ) {
++ wCsrVal |= MGC_M_CSR0_P_SENDSTALL;
+ }
-+
++
+ /* ack the request */
-+ DBG(3, "handled=%d, wCsrVal=%s, ep0stage=%s\n", handled,
-+ decode_csr0(wCsrVal),
++ DBG(3, "handled=%d, wCsrVal=%s, ep0stage=%s\n", handled,
++ decode_csr0(wCsrVal),
+ decode_ep0stage(pThis->bEnd0Stage) );
-+
++
+ spin_lock(&pThis->Lock);
+ MGC_SelectEnd(pBase, 0);
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0, wCsrVal);
-+ spin_unlock(&pThis->Lock);
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0, wCsrVal);
++ spin_unlock(&pThis->Lock);
+ } else {
+ /* sequence #1 */
+ if ( is_tx_request(pControlRequest) ) {
-+ /* write to host, a request is posted on ep0 */
++ /* write to host, a request is posted on ep0 */
+ pThis->bEnd0Stage=MGC_END0_STAGE_TX;
+ handled=service_tx_request(pControlRequest);
+ /* sequence #2, a request is posted on ep0 */
+ } else if ( is_rx_request(pControlRequest) ) {
-+ pThis->bEnd0Stage=MGC_END0_STAGE_RX;
++ pThis->bEnd0Stage=MGC_END0_STAGE_RX;
+ handled=service_rx_request(pControlRequest);
+ }
-+
++
+ if ( handled<0 ) {
-+ /* stall it!!! application stall */
++ /* stall it!!! application stall */
+ spin_lock(&pThis->Lock);
+ MGC_SelectEnd(pBase, 0);
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
+ MGC_M_CSR0_P_SVDRXPKTRDY | MGC_M_CSR0_P_SENDSTALL);
+ spin_unlock(&pThis->Lock);
-+ }
++ }
+ }
-+
-+ }
++
++ }
+ } else {
-+
++
+ }
+ break;
-+
-+
++
++
+ /* handle the application stall on Ep0 */
-+ default:
++ default:
+ {
+ uint16_t wCsrVal = MGC_M_CSR0_P_SENDSTALL;
+
@@ -191877,310 +193311,27 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/g_ep0.c ../new/linux-2.6.20/driver
+ break;
+
+ }
-+
-+ DBG(3, "Application stall from ep0stage=%s\n",
++
++ DBG(3, "Application stall from ep0stage=%s\n",
+ decode_ep0stage(pThis->bEnd0Stage));
+ spin_lock(&pThis->Lock);
+ MGC_SelectEnd(pBase, 0);
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0, wCsrVal);
-+ spin_unlock(&pThis->Lock);
-+
-+ pThis->bEnd0Stage = MGC_END0_STAGE_SETUP;
-+ }
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0, wCsrVal);
++ spin_unlock(&pThis->Lock);
++
++ pThis->bEnd0Stage = MGC_END0_STAGE_SETUP;
++ }
+ break;
-+ }
-+
++ }
++
+ return 1;
+}
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/Kconfig ../new/linux-2.6.20/drivers/usb/nomadik/Kconfig
---- linux-2.6.20/drivers/usb/nomadik/Kconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/Kconfig 2008-07-04 23:45:35.000000000 +0530
-@@ -0,0 +1,176 @@
-+#
-+# INVENTRA USB Host Controller Drivers
-+#
-+# $Revision: 1.13 $
-+#
-+config USB_INVENTRA_HCD
-+ depends on USB
-+ tristate 'Inventra HCD Controller Support'
-+ help
-+ Say Y here if you have the Inventra USB board on your system.
-+
-+ If you do not know what this is, please say N.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called musb-hcd (host controller) or
-+ musb-gcd (gadget controller) or musb-icd (interface
-+ controller when OTG is enabled).
-+
-+choice
-+prompt "Controller Mode"
-+depends on USB_INVENTRA_HCD
-+default USB_INVENTRA_HCD_HOST
-+
-+config USB_INVENTRA_HCD_HOST
-+ bool 'Host Mode'
-+
-+config USB_INVENTRA_HCD_GADGET_API
-+ bool 'GADGET API'
-+ help
-+ Say Y here if you want support for GADGET API; the module will
-+ be called musb-gcd.ko
-+
-+ You will need to select the Inventra Controller in the Gadget
-+ subsection.
-+
-+ If you do not know what this is, please say N.
-+
-+config USB_INVENTRA_HCD_OTG
-+ bool 'On The Go'
-+ help
-+ Say Y here if you want support for USB On The Go.
-+
-+ The module will be called musb-icd.ko
-+
-+ If you do not know what this is, please say N.
-+
-+#config USB_INVENTRA_HCD_GSTORAGE
-+# bool 'Storage Demo'
-+# help
-+# Say Y here if you want the hcd driver compiled as
-+# like a mass storage device.
-+#
-+# If you do not know what this is, please say N.
-+
-+config USB_INVENTRA_HCD_OTG_GSTORAGE
-+ bool 'OTG Storage Demo'
-+ help
-+ Say Y here if you want the hcd driver compiled as
-+ a mass storage device with OTG support.
-+
-+ If you do not know what this is, please say N.
-+
-+
-+endchoice
-+
-+config USB_INVENTRA_STATIC_CONFIG
-+ depends on USB_INVENTRA_HCD
-+ bool 'Use static config (-DMUSB_STATIC_CONFIG)'
-+ default true
-+ help
-+ Use the static configuration file. File must be called
-+ hdrc_cnf.h and mut be generated from the board configuration
-+ file. Please check directory install/configs for examples.
-+
-+ If usure please say please say N and make sure your controller
-+ is using the standard configuration HB+8E(8K)+8DMA
-+
-+ NOTE: Make sure your board is using the corresponding core.
-+
-+config USB_INVENTRA_MUSB_EPFIFOCONFIG_FILE
-+ depends on USB_INVENTRA_STATIC_CONFIG
-+ string 'Endpoint FIFO configuration file (Advanced)'
-+ default ''
-+ help
-+ Specify the file with the endpoint fifo configuration (Advanced). The
-+ file shoud define an struct MUSB_EpFifoDescriptor array called
-+ MUSB_aEpFifoDescriptors[MUSB_C_NUM_EPS] containig the end point FIFO
-+ configuration specs. Check musbdefs.h for more informations;
-+
-+ struct MUSB_EpFifoDescriptor MUSB_aEpFifoDescriptors[MUSB_C_NUM_EPS]={
-+
-+ {}, /* EP0 use the default */
-+ { MUSB_EPD_T_BULK, MUSB_EPD_D_TX, 512 },
-+ { MUSB_EPD_T_BULK, MUSB_EPD_D_RX, 512 }
-+
-+ };
-+
-+ gives the endpoint 0 its default value, and defines ep1/ep2 as bulk tx/rx
-+ 512 bytes in size each with double buffering disabled. The FIFO memory
-+ allocated with this confoguration is 64+512+512=1088 bytes
-+
-+config USB_INVENTRA_DMA
-+ depends on USB_INVENTRA_HCD
-+ bool 'Use DMA when possible (-DMUSB_DMA)'
-+ default true
-+ help
-+ Enable DMA transfers when DMA is possible
-+
-+config USB_INVENTRA_MUSB_HAS_AHB_ID
-+ depends on USB_INVENTRA_HCD
-+ bool 'Enable AHB_ID (-DMUSB_AHB_ID)'
-+ default false
-+ help
-+ Disable auto core identification.
-+
-+ NOTE: Make sure your board is using the corresponding core.
-+
-+config USB_INVENTRA_MUSB_HDR_CCNF_FILE
-+ depends on USB_INVENTRA_HCD
-+ string 'Custom config file (Advanced)'
-+ default ''
-+ help
-+ Specify a custom config file (Advanced)
-+
-+config USB_INVENTRA_MUSB_BOARD_FILE
-+ depends on USB_INVENTRA_HCD
-+ string 'Custom board file (Advanced)'
-+ default ''
-+ help
-+ Specify a custom board file (Advanced)
-+
-+config USB_INVENTRA_TPL
-+ depends on USB_INVENTRA_HCD_OTG
-+ tristate ' Use TPL (-DMUSB_TPL)'
-+ default false
-+ help
-+ Enable Target Peripheral List
-+
-+config USB_INVENTRA_PROC_TESTMUSB
-+ depends on USB_INVENTRA_HCD && PROC_FS && ( USB_INVENTRA_HOSTMODE || USB_INVENTRA_OTG )
-+ bool 'Enable /proc/testmusbhdrc*'
-+ default false
-+ help
-+ Add /proc/testmusbhdrc<num> to control the
-+
-+ NOTE: this is different from supporting /proc filesystem;
-+
-+ If you do not know what this is, please say N.
-+
-+config USB_INVENTRA_HCD_CUSTOM_OPTIONS
-+ depends on USB_INVENTRA_HCD
-+ string 'Custom compile options (Advanced)'
-+ default ''
-+ help
-+ Specify a custom compile options (Advanced)
-+
-+config USB_INVENTRA_HCD_POLLING
-+ depends on USB_INVENTRA_HCD
-+ bool 'Use polling driver (debug only)'
-+ default false
-+ help
-+ Enable polling mode (events won't be triggered by IRQs); usefule
-+ for debugging.
-+
-+ If you do not know what this is, please say N.
-+
-+config USB_INVENTRA_HCD_LOGGING
-+ depends on USB_INVENTRA_HCD
-+ int 'Logging Level (0 - none / 3 - annoying)'
-+ default 0
-+ help
-+ Set the logging level. 0 disable the debugging altogether (no
-+ code will be added to the)
-+
-+ If you do not know what this is, please say N.
-+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/logx ../new/linux-2.6.20/drivers/usb/nomadik/logx
---- linux-2.6.20/drivers/usb/nomadik/logx 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/logx 2008-07-04 23:45:36.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/logx
@@ -0,0 +1 @@
+make: *** No rule to make target `vmlinux'. Stop.
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/Makefile ../new/linux-2.6.20/drivers/usb/nomadik/Makefile
---- linux-2.6.20/drivers/usb/nomadik/Makefile 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/Makefile 2008-07-04 23:45:36.000000000 +0530
-@@ -0,0 +1,97 @@
-+MUSB_VERSION=2.2.2
-+HCD_TYPE=hcd
-+
-+
-+obj-$(CONFIG_USB_INVENTRA_HCD) += musb-hcd.o
-+
-+
-+
-+ifeq ($(CONFIG_PROC_FS),y)
-+ musb-$(HCD_TYPE)-objs += musb_procfs.o
-+endif
-+
-+
-+ifneq ($(CONFIG_USB_INVENTRA_MUSB_BOARD_FILE),"")
-+ EXTRA_CFLAGS += -DMUSB_BOARD_FILE
-+endif
-+
-+ifneq ($(CONFIG_USB_INVENTRA_MUSB_HDR_CCNF_FILE),"")
-+EXTRA_CFLAGS += -DMUSB_HDR_CCNF_FILE
-+endif
-+
-+ifeq ($(CONFIG_USB_INVENTRA_STATIC_CONFIG),y)
-+ifneq ($(CONFIG_USB_INVENTRA_MUSB_EPFIFOCONFIG_FILE),"")
-+EXTRA_CFLAGS += -DMUSB_EPFIFOCONFIG_FILE
-+endif
-+endif
-+
-+ifneq ($(CONFIG_USB_INVENTRA_HCD_CUSTOM_OPTIONS),"")
-+EXTRA_CFLAGS += $(CONFIG_USB_INVENTRA_HCD_CUSTOM_OPTIONS)
-+endif
-+
-+
-+ EXTRA_CFLAGS += -DMUSB_C_DYNFIFO_DEF
-+ EXTRA_CFLAGS += -DMUSB_EPDISCRIPTORS_FILE
-+
-+ifeq ($(CONFIG_USB_INVENTRA_MUSB_HAS_AHB_ID),y)
-+ EXTRA_CFLAGS += -DMUSB_AHB_ID
-+endif
-+
-+ifeq ($(CONFIG_USB_INVENTRA_DMA),y)
-+ EXTRA_CFLAGS += -DMUSB_DMA
-+ musb-$(HCD_TYPE)-objs += musbhsdma.o
-+endif
-+
-+EXTRA_CFLAGS += -DMUSB_VERSION='"$(MUSB_VERSION)"' -DHCD_NAME=$(HCD_NAME)
-+
-+ifeq ($(CONFIG_USB_INVENTRA_STATIC_CONFIG),y)
-+ EXTRA_CFLAGS += -DMUSB_STATIC_CONFIG
-+endif
-+
-+ifeq ($(CONFIG_USB_INVENTRA_HCD_OTG),y)
-+ GADGET_API=y
-+ MUSB_HOSTMODE=y
-+ EXTRA_CFLAGS += -DMUSB_OTG
-+ musb-$(HCD_TYPE)-objs += otg.o
-+endif
-+
-+ifeq ($(CONFIG_USB_INVENTRA_HCD_GADGET_API),y)
-+ GADGET_API=y
-+endif
-+
-+#ifneq ($(GADGET_API),)
-+
-+# GADGET_DIRS=y
-+# EXTRA_CFLAGS += -DMUSB_GADGET
-+# musb-$(HCD_TYPE)-objs += musb_gadgetcommon.o g_ep0.o musb_gadget.o
-+#endif
-+
-+
-+ifeq ($(CONFIG_USB_INVENTRA_HCD_HOST),y)
-+ MUSB_HOSTMODE=y
-+endif
-+
-+
-+ifeq ($(MUSB_HOSTMODE),y)
-+ EXTRA_CFLAGS += -DMUSB_HOST
-+ musb-$(HCD_TYPE)-objs += musb_virthub.o musb_host.o musb-hcd.o musb_plat_uds.o musb_bus_direct.o musb_epfifocfg.o musb_ioctl.o nomadik_udc.o otg_pwm.o otg_func.o
-+
-+endif
-+
-+ifndef DEBUG
-+ DEBUG=0
-+endif
-+
-+MUSB_DEBUG=$(CONFIG_USB_INVENTRA_HCD_LOGGING)
-+ifeq ("$(strip $(MUSB_DEBUG))","")
-+ MUSB_DEBUG:=$(DEBUG)
-+endif
-+
-+
-+ifneq ($(MUSB_DEBUG),0)
-+ EXTRA_CFLAGS += -g
-+ musb-$(HCD_TYPE)-objs += musb_debug.o
-+endif
-+
-+EXTRA_CFLAGS += -DMUSB_DEBUG=$(MUSB_DEBUG)
-+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_bus_direct.c ../new/linux-2.6.20/drivers/usb/nomadik/musb_bus_direct.c
---- linux-2.6.20/drivers/usb/nomadik/musb_bus_direct.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_bus_direct.c 2008-08-08 19:15:21.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_bus_direct.c
@@ -0,0 +1,371 @@
+/*
+ * linux/drivers/usb/nomadik/musb_bus_direct.c
@@ -192199,7 +193350,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_bus_direct.c ../new/linux-2.6
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
@@ -192372,7 +193523,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_bus_direct.c ../new/linux-2.6
+/**
+ * direct_register_driver - register a new driver
+ * @drv: the driver structure to register
-+ *
++ *
+ * Adds the driver structure to the list of registered drivers
+ * Returns the number of devices which were claimed by the driver
+ * during registration. The driver remains registered even if the
@@ -192382,7 +193533,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_bus_direct.c ../new/linux-2.6
+direct_register_driver(struct device_driver *drv, struct bus_type *btype)
+{
+ int count = 0;
-+
++
+ /* initialize common driver fields */
+ drv->bus = (btype)?btype:&direct_bus_type;
+ drv->kobj.ktype = &direct_driver_kobj_type;
@@ -192399,7 +193550,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_bus_direct.c ../new/linux-2.6
+/**
+ * unregister_driver - unregister a driver
+ * @drv: the driver structure to unregister
-+ *
++ *
+ * Deletes the driver structure from the list of registered drivers,
+ * gives it a chance to clean up by calling its remove() function for
+ * each device it was responsible for, and marks those devices as
@@ -192427,22 +193578,22 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_bus_direct.c ../new/linux-2.6
+ */
+int
+direct_bus_init(void) {
-+
++
+ int rc= -1;
+ char name[32];
+ void* pDevice = NULL;
-+
++
+#ifdef MUSB_USE_HCD_DRIVER
+ MGC_LinuxCd* pThis;
-+
++
+ /* already initialized */
-+ if ( MGC_nIndex ) {
++ if ( MGC_nIndex ) {
+ return 0;
-+ }
-+ snprintf(name, 32, "musbhdrc%d", MGC_nIndex++);
-+
-+ pDevice = &MGC_ControllerDevice;
-+ g_pDevice=pDevice;
++ }
++ snprintf(name, 32, "musbhdrc%d", MGC_nIndex++);
++
++ pDevice = &MGC_ControllerDevice;
++ g_pDevice=pDevice;
+ kobject_set_name(&((struct device*)pDevice)->kobj, "musbdev");
+
+ rc = kobject_register(&((struct device*)pDevice)->kobj);
@@ -192451,69 +193602,69 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_bus_direct.c ../new/linux-2.6
+ ERR("failed to register:%d\n", rc);
+ return rc;
+ }
-+
++
+ INIT_LIST_HEAD( (struct list_head*)&((struct device*)pDevice)->klist_children );
-+
++
+ ((struct device *)pDevice)->driver = &MGC_ControllerDriver;
-+
-+ sprintf (&((struct device *)pDevice)->bus_id[0], "usb%d", rc);
-+
-+ pThis = MGC_LinuxInitController(pDevice, MUSB_CONTROLLER_HDRC, INT_USBOTG,
++
++ sprintf (&((struct device *)pDevice)->bus_id[0], "usb%d", rc);
++
++ pThis = MGC_LinuxInitController(pDevice, MUSB_CONTROLLER_HDRC, INT_USBOTG,
+ ioremap(NOMADIK_USB_BASE, 0x100000), 0x00100000, name);
-+
++
+ if(pThis) {
+ DBG(3, "MGC_LinuxInitController success MGC_struct:0x%p \n", pThis);
+ rc = 0;
+ MGC_VirtualHubStart( &(pThis->RootHub) );
+ }
+ return(rc);
-+
++
+#else
-+ const int nCount = sizeof(MUSB_aLinuxController)
++ const int nCount = sizeof(MUSB_aLinuxController)
+ / sizeof(MUSB_LinuxController);
+ int nIndex;
-+
-+ INFO("Probing direct bus [direct=%d]\n", nCount);
-+
++
++ INFO("Probing direct bus [direct=%d]\n", nCount);
++
+ if ( !nCount ) {
+ return 0;
+ }
-+
++
+ KMALLOC(MGC_DriverInstances, nCount*sizeof(MGC_LinuxCd*), GFP_ATOMIC);
+ if ( !MGC_DriverInstances ) {
+ return -ENOMEM;
+ }
-+
++
+#ifdef MUSB_V26
-+ pDevice = &MGC_ControllerDevice;
++ pDevice = &MGC_ControllerDevice;
+ kobject_set_name(&((struct device*)pDevice)->kobj, "musbdev");
+ rc = kobject_register(&((struct device*)pDevice)->kobj);
+ if(rc < 0){
+ ERR("failed to register:%d\n", rc);
+ return rc;
+ }
-+
++
+ INIT_LIST_HEAD( &((struct device*)pDevice)->children );
-+
++
+ ((struct device *)pDevice)->driver = &MGC_ControllerDriver;
-+ sprintf (&((struct device *)pDevice)->bus_id[0], "usb%d", rc);
-+ bus_register( &direct_bus_type );
++ sprintf (&((struct device *)pDevice)->bus_id[0], "usb%d", rc);
++ bus_register( &direct_bus_type );
+ direct_register_driver(&MGC_ControllerDriver, NULL);
+#endif
-+
++
+ /* NON PCI machines */
+ for (nIndex = 0; !rc && nIndex < nCount; nIndex++) {
+ MUSB_LinuxController* pStaticController=&(MUSB_aLinuxController[nIndex]);
-+
++
+ snprintf(name, 32, "musbhdrc%d", MGC_nIndex++);
-+ MGC_DriverInstances[nIndex]=MGC_LinuxInitController(pDevice,
-+ pStaticController->wType, pStaticController->dwIrq,
-+ pStaticController->pBase,
++ MGC_DriverInstances[nIndex]=MGC_LinuxInitController(pDevice,
++ pStaticController->wType, pStaticController->dwIrq,
++ pStaticController->pBase,
+ (pStaticController->dwSize)? pStaticController->dwSize
+ : MUSB_DEFAULT_ADDRESS_SPACE_SIZE, name);
-+
++
+ if( MGC_DriverInstances[nIndex] ) {
-+#ifdef MUSB_VIRTHUB
++#ifdef MUSB_VIRTHUB
+ MGC_VirtualHubStart( &(MGC_DriverInstances[nIndex]->RootHub) );
+#endif
+ MGC_InstancesCount++;
@@ -192525,37 +193676,36 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_bus_direct.c ../new/linux-2.6
+ }
+ return MGC_InstancesCount;
+#endif
-+
++
+}
+
+/**
+ *
+ */
-+void direct_bus_shutdown(void)
++void direct_bus_shutdown(void)
+{
+#ifdef MUSB_USE_HCD_DRIVER
+ kobject_unregister(&((struct device*)g_pDevice)->kobj); /* shoudl check the hcd drivers */
-+
-+
++
++
+#else
+ int nIndex=0;
-+
++
+ /* free the instances */
+ for (nIndex = 0; nIndex < MGC_InstancesCount; nIndex++) {
+ MGC_LinuxCdFree( MGC_DriverInstances[nIndex] );
+ }
-+
++
+ KFREE(MGC_DriverInstances);
+#ifdef MUSB_V26
+ direct_unregister_driver(&MGC_ControllerDriver);
-+#endif
++#endif
+#endif
+
+}
+#endif
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_cross.h ../new/linux-2.6.20/drivers/usb/nomadik/musb_cross.h
---- linux-2.6.20/drivers/usb/nomadik/musb_cross.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_cross.h 2008-08-08 19:15:22.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_cross.h
@@ -0,0 +1,131 @@
+/*
+ * linux/drivers/usb/nomadik/musb_cross.h
@@ -192574,7 +193724,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_cross.h ../new/linux-2.6.20/d
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __MUSB_CROSS_H
@@ -192584,18 +193734,18 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_cross.h ../new/linux-2.6.20/d
+
+/****************************** KERNEL VERSION MACROS ************************/
+
-+#if ( LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) )
++#if ( LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) )
+#undef MUSB_V26
+
-+#ifndef MUSB_V24
++#ifndef MUSB_V24
+#define MUSB_V24
-+#endif
++#endif
+
+#endif
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
+#undef MUSB_V24
-+#ifndef MUSB_V26
++#ifndef MUSB_V26
+#define MUSB_V26
+#endif
+#endif
@@ -192641,7 +193791,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_cross.h ../new/linux-2.6.20/d
+#endif
+
+/* gstorage is liked to the driver: the init code lives there */
-+#ifdef MUSB_GSTORAGE
++#ifdef MUSB_GSTORAGE
+#define MUSB_SKIP_INIT
+#endif
+
@@ -192659,14 +193809,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_cross.h ../new/linux-2.6.20/d
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
+#define MUSB_HAS_OTG
+#define HAS_HNP_SUPPORT
-+#endif
++#endif
+
+/* -------------------------------- DMA ----------------------------- */
+
+#define DMA_ADDR_INVALID (~(dma_addr_t)0)
+
+/* MVL21 doesn't support DMA */
-+#if defined(MUSB_LINUX_MV21)
++#if defined(MUSB_LINUX_MV21)
+#ifdef MUSB_DMA
+#error "DMA Mode not supported in MontaVista 2.1"
+#endif
@@ -192678,7 +193828,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_cross.h ../new/linux-2.6.20/d
+#endif
+
+/* DMA not supported on versions >= 2.6.10 */
-+#elif ( LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13) )
++#elif ( LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13) )
+
+#ifdef MUSB_DMA
+#error "DMA Mode MIGHT not be supported in kernels > 2.6.10"
@@ -192688,9 +193838,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_cross.h ../new/linux-2.6.20/d
+
+/* -------------------------------- GADGETS ----------------------------- */
+#endif
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_debug.c ../new/linux-2.6.20/drivers/usb/nomadik/musb_debug.c
---- linux-2.6.20/drivers/usb/nomadik/musb_debug.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_debug.c 2008-07-28 15:20:53.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_debug.c
@@ -0,0 +1,190 @@
+/*
+ * linux/drivers/usb/nomadik/musb_debug.c
@@ -192709,9 +193858,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_debug.c ../new/linux-2.6.20/d
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
-+
++
+#include <linux/kernel.h>
+#include <linux/list.h>
+#include <linux/completion.h>
@@ -192731,18 +193880,18 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_debug.c ../new/linux-2.6.20/d
+int MGC_DebugLevel=MUSB_DEBUG;
+int MGC_DebugDisable=0;
+
-+/******************************************************************/
++/******************************************************************/
+
+/* Decode CSR0 value to a string. Not reentrant
+ */
+char *decode_csr0(uint16_t csr0) {
+ static char buf[64];
-+ sprintf(buf, "(%s%s%s%s)",
++ sprintf(buf, "(%s%s%s%s)",
+ csr0&MGC_M_CSR0_TXPKTRDY ? "[TXPKTRDY]":"",
+ csr0&MGC_M_CSR0_P_SVDRXPKTRDY ? "[SVDRXPKTRDY]":"",
+ csr0&MGC_M_CSR0_P_SENDSTALL ? "[stalled]":"",
-+ csr0&MGC_M_CSR0_P_DATAEND ? "[dataend]":"");
-+ return buf;
++ csr0&MGC_M_CSR0_P_DATAEND ? "[dataend]":"");
++ return buf;
+}
+
+/* Decode a value to binary.
@@ -192750,11 +193899,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_debug.c ../new/linux-2.6.20/d
+char *decode_bits(uint16_t value) {
+ int i=0;
+ static char buf[64];
-+
++
+ for (; i<16;i++) {
-+ buf[15-i]=(value&(1<<i))?'1':'0';
++ buf[15-i]=(value&(1<<i))?'1':'0';
+ }
-+
++
+ return buf;
+}
+
@@ -192762,13 +193911,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_debug.c ../new/linux-2.6.20/d
+ */
+char *decode_txcsr(uint16_t txcsr) {
+ static char buf[256];
-+ sprintf(buf, "%s (%s%s%s%s)",
++ sprintf(buf, "%s (%s%s%s%s)",
+ decode_bits(txcsr),
+ txcsr&MGC_M_TXCSR_TXPKTRDY ? "[TXPKTRDY]":"",
+ txcsr&MGC_M_TXCSR_AUTOSET ? "[MGC_M_TXCSR_AUTOSET]":"",
+ txcsr&MGC_M_TXCSR_DMAENAB ? "[MGC_M_TXCSR_DMAENAB]":"",
-+ txcsr&MGC_M_TXCSR_DMAMODE ? "[MGC_M_TXCSR_DMAMODE]":"");
-+ return buf;
++ txcsr&MGC_M_TXCSR_DMAMODE ? "[MGC_M_TXCSR_DMAMODE]":"");
++ return buf;
+}
+
+/*
@@ -192783,7 +193932,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_debug.c ../new/linux-2.6.20/d
+char *decode_ep0stage(uint8_t stage) {
+ static char buff[64];
+ uint8_t stallbit=stage&MGC_END0_STAGE_STALL_BIT;
-+
++
+ stage=stage&~stage&MGC_END0_STAGE_STALL_BIT;
+ sprintf(buff, "%s%s", (stallbit)? "stall-" : "",
+ (stage==MGC_END0_STAGE_SETUP)
@@ -192793,7 +193942,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_debug.c ../new/linux-2.6.20/d
+ (stage==MGC_END0_STAGE_RX)
+ ? "rx" :
+ (stage==MGC_END0_STAGE_STATUSIN)
-+ ? "statusin" :
++ ? "statusin" :
+ (stage==MGC_END0_STAGE_STATUSOUT)
+ ? "statusout" : "error");
+ return buff;
@@ -192808,9 +193957,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_debug.c ../new/linux-2.6.20/d
+
+ printk (LABEL "urb :%p\n", purb);
+ printk (LABEL "urb_list :%s\n", dump_node(&purb->urb_list));
-+#ifdef V24
++#ifdef V24
+ printk (LABEL "next :%p\n", purb->next);
-+#endif
++#endif
+ printk (LABEL "dev :%p\n", purb->dev);
+ printk (LABEL "pipe :%08X\n", purb->pipe);
+ printk (LABEL "status :%d\n", purb->status);
@@ -192830,12 +193979,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_debug.c ../new/linux-2.6.20/d
+/**
+ * Dump core registers whose reads are non-destructive.
+ * @param pThis
-+ * @param bEnd
++ * @param bEnd
+ */
+void MGC_HdrcDumpRegs(uint8_t* pBase, int multipoint, uint8_t bEnd)
+{
-+ MGC_SelectEnd(pBase, bEnd);
-+
++ MGC_SelectEnd(pBase, bEnd);
++
+ if(!bEnd) {
+ printk(KERN_INFO " 0: CSR0=%04x, Count0=%02x, Type0=%02x, NAKlimit0=%02x\n",
+ MGC_ReadCsr16(pBase, MGC_O_HDRC_CSR0, 0),
@@ -192856,7 +194005,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_debug.c ../new/linux-2.6.20/d
+ MGC_ReadCsr8(pBase, MGC_O_HDRC_TXINTERVAL, bEnd),
+ MGC_ReadCsr16(pBase, MGC_O_HDRC_RXCOUNT, bEnd));
+ }
-+
++
+ if( multipoint) {
+ printk(KERN_INFO " TxAddr=%02x, TxHubAddr=%02x, TxHubPort=%02x\n",
+ MGC_Read8(pBase, MGC_BUSCTL_OFFSET(bEnd, MGC_O_HDRC_TXFUNCADDR)),
@@ -192877,846 +194026,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_debug.c ../new/linux-2.6.20/d
+ */
+char *dump_node(struct list_head *node) {
+ static char buf[64];
-+ sprintf(buf, "[n=%p,p=%p]", node->next, node->prev);
++ sprintf(buf, "[n=%p,p=%p]", node->next, node->prev);
+ return buf;
+}
+
+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musbdefs.h ../new/linux-2.6.20/drivers/usb/nomadik/musbdefs.h
---- linux-2.6.20/drivers/usb/nomadik/musbdefs.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musbdefs.h 2008-08-08 19:15:30.000000000 +0530
-@@ -0,0 +1,828 @@
-+/*
-+ * linux/drivers/usb/nomadik/musbdefs.h
-+ *
-+ * Copyright 2007, STMicroelectronics
-+ *
-+ * 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 __MUSB_MUSBDEFS_H__
-+#define __MUSB_MUSBDEFS_H__
-+
-+#include <linux/slab.h>
-+#include <linux/list.h>
-+#include <linux/smp_lock.h>
-+#include <linux/errno.h>
-+
-+#ifdef MUSB_CONFIG_PROC_FS
-+#include <linux/fs.h>
-+#endif
-+
-+/* useful for compiling across linux version & debug definitions */
-+#include "musb_cross.h"
-+#include "debug.h"
-+
-+/* Board-specific definitions (hard-wired controller locations/IRQs) */
-+#include "plat_cnf.h"
-+#include "plat_arc.h"
-+#include "musbhdrc.h"
-+
-+/****************************** VERIFY THE DEFINES **************************
-+ * determine how to compile the driver; MUSB_GADGET->as gadget driver,
-+ * MUSB_HOST as host mode, MUSB_OTG -> otg mode (host and gadget)
-+ *
-+ * OTG => GADGET
-+ */
-+
-+#ifdef MUSB_GSTORAGE
-+
-+/* for now */
-+#ifndef MUSB_OTG
-+#define MUSB_OTG
-+#endif
-+
-+#endif
-+
-+#ifdef MUSB_OTG
-+#endif
-+#ifndef MUSB_HOST
-+#define MUSB_HOST
-+#endif
-+
-+#ifdef CONFIG_PROC_FS
-+#ifndef MUSB_CONFIG_PROC_FS
-+#define MUSB_CONFIG_PROC_FS
-+#endif
-+#endif
-+
-+#ifdef MUSB_PROC_TESTMUSB
-+
-+#ifndef CONFIG_PROC_FS
-+#error "TestMusb needs CONFIG_PROC_FS"
-+#endif
-+
-+#ifndef MUSB_HOST
-+#error "TestMusb needs HOST MODE"
-+#endif
-+
-+#endif
-+
-+#ifdef MUSB_HOST
-+#define MUSB_VIRTHUB
-+#endif
-+
-+/************************* DEFINES DEPENDENT INCLUDES ************************/
-+
-+/* virtual hub */
-+#include "musb_virthub.h"
-+
-+/****************************** USB CONSTANTS ********************************/
-+
-+#ifndef USB_DT_DEVICE_QUALIFIER
-+#define USB_DT_DEVICE_QUALIFIER 6
-+#endif
-+
-+#ifndef USB_DT_DEVICE_QUALIFIER_SIZE
-+#define USB_DT_DEVICE_QUALIFIER_SIZE 10
-+#endif
-+
-+#ifndef USB_DT_OTHER_SPEED
-+#define USB_DT_OTHER_SPEED 7
-+#endif
-+
-+#ifndef USB_MAXCHILDREN
-+#define USB_MAXCHILDREN (16)
-+#endif
-+
-+/****************************** DEBUG CONSTANTS ********************************/
-+
-+#define MGC_PAD_FRONT 0xa5deadfe
-+#define MGC_PAD_BACK 0xabadcafe
-+#define MGC_TEST_PACKET_SIZE 53
-+
-+/****************************** CONSTANTS ********************************/
-+
-+#if MUSB_DEBUG > 0
-+#define STATIC
-+#define MUSB_PARANOID
-+#else
-+#define STATIC static
-+#endif
-+
-+#ifndef TRUE
-+#define TRUE 1
-+#endif
-+#ifndef FALSE
-+#define FALSE 0
-+#endif
-+
-+#ifndef MUSB_C_NUM_EPS
-+#define MUSB_C_NUM_EPS ((uint8_t)16)
-+#endif
-+
-+#ifndef MUSB_MAX_END0_PACKET
-+#define MUSB_MAX_END0_PACKET ((uint16_t)MGC_END0_FIFOSIZE)
-+#endif
-+
-+#define MGC_END0_START 0x0
-+#define MGC_END0_OUT 0x2
-+#define MGC_END0_IN 0x4
-+#define MGC_END0_STATUS 0x8
-+
-+#define MGC_END0_STAGE_SETUP 0x0
-+#define MGC_END0_STAGE_TX 0x2
-+#define MGC_END0_STAGE_RX 0x4
-+#define MGC_END0_STAGE_STATUSIN 0x8
-+#define MGC_END0_STAGE_STATUSOUT 0xf
-+#define MGC_END0_STAGE_STALL_BIT 0x10
-+
-+/* obsolete */
-+#define MGC_END0_STAGE_DATAIN MGC_END0_STAGE_TX
-+#define MGC_END0_STAGE_DATAOUT MGC_END0_STAGE_RX
-+
-+/* EASY GUESS */
-+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0)
-+#define USB_ALLOC_DEV( _parent, _usb_bus, _port) usb_alloc_dev(_parent, _usb_bus, _port)
-+#else
-+/* 2.4, mvl21, bc5 */
-+#define USB_ALLOC_DEV( _parent, _usb_bus, _port) usb_alloc_dev(_parent, _usb_bus)
-+#endif
-+
-+
-+/* 2.4/2.6 compatibility */
-+#ifdef MUSB_V26
-+
-+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)
-+#define USB_HALT_ENDPOINT(_dev, _pipe_ep, _pipe_out) ((_dev)->bus->op->disable(_dev, _pipe_ep))
-+#define USB_RUN_ENDPOINT(_dev, _pipe_ep, _pipe_out) usb_endpoint_running(_dev, _pipe_ep, _pipe_out)
-+#define USB_ENDPOINT_HALTED(_dev, _pipe_ep, _pipe_out) ( 0 )
-+#else
-+#define USB_HALT_ENDPOINT(_dev, _pipe_ep, _pipe_out) usb_endpoint_halt(_dev, _pipe_ep, _pipe_out)
-+#define USB_RUN_ENDPOINT(_dev, _pipe_ep, _pipe_out) usb_endpoint_running(_dev, _pipe_ep, _pipe_out)
-+#define USB_ENDPOINT_HALTED(_dev, _pipe_ep, _pipe_out) usb_endpoint_halted(_dev, _pipe_ep, _pipe_out)
-+#endif
-+
-+/*#define COMPLETE_URB(_pUrb, _p) _pUrb->complete(_pUrb, _p)*/
-+#define COMPLETE_URB(_pUrb, _p) (_pUrb->complete=_p)
-+#define WAIT_MS(_ms) mdelay(_ms)
-+
-+#define USB_ISO_ASAP 0x0002
-+#define USB_ASYNC_UNLINK 0x0008
-+
-+#define USB_ST_NOERROR (0)
-+#define USB_ST_CRC (-EILSEQ)
-+#define USB_ST_BITSTUFF (-EPROTO)
-+#define USB_ST_NORESPONSE (-ETIMEDOUT) /* device not responding/handshaking */
-+#define USB_ST_DATAOVERRUN (-EOVERFLOW)
-+#define USB_ST_DATAUNDERRUN (-EREMOTEIO)
-+#define USB_ST_BUFFEROVERRUN (-ECOMM)
-+#define USB_ST_BUFFERUNDERRUN (-ENOSR)
-+#define USB_ST_INTERNALERROR (-EPROTO) /* unknown error */
-+#define USB_ST_SHORT_PACKET (-EREMOTEIO)
-+#define USB_ST_PARTIAL_ERROR (-EXDEV) /* ISO transfer only partially completed */
-+#define USB_ST_URB_KILLED (-ENOENT) /* URB canceled by user */
-+#define USB_ST_URB_PENDING (-EINPROGRESS)
-+#define USB_ST_REMOVED (-ENODEV) /* device not existing or removed */
-+#define USB_ST_TIMEOUT (-ETIMEDOUT) /* communication timed out, also in urb->status**/
-+#define USB_ST_NOTSUPPORTED (-ENOSYS)
-+#define USB_ST_BANDWIDTH_ERROR (-ENOSPC) /* too much bandwidth used */
-+#define USB_ST_URB_INVALID_ERROR (-EINVAL) /* invalid value/transfer type */
-+#define USB_ST_URB_REQUEST_ERROR (-ENXIO) /* invalid endpoint */
-+#define USB_ST_STALL (-EPIPE) /* pipe stalled, also in urb->status*/
-+
-+#define USB_ZERO_PACKET 0x0040 /* Finish bulk OUTs always with zero length packet */
-+
-+#endif
-+
-+#ifdef MUSB_V24
-+#define usb_disabled() 0
-+#define COMPLETE_URB(_pUrb, _p) _pUrb->complete(_pUrb)
-+#define WAIT_MS(_ms) wait_ms(_ms)
-+#define USB_HALT_ENDPOINT(_dev, _pipe_ep, _pipe_out) usb_endpoint_halt(_dev, _pipe_ep, _pipe_out)
-+#define USB_ENDPOINT_HALTED(_dev, _pipe_ep, _pipe_out) usb_endpoint_halted(_dev, _pipe_ep, _pipe_out)
-+
-+#ifdef MUSB_LINUX_MV21
-+#define usb_get_urb(_pUrb) _pUrb
-+#define usb_put_urb(_pUrb)
-+#undef MUSB_HAS_BUSNAME
-+#endif
-+
-+#endif
-+
-+typedef enum
-+{
-+ MGC_STATE_DEFAULT,
-+ MGC_STATE_ADDRESS,
-+ MGC_STATE_CONFIGURED
-+} MGC_DeviceState;
-+
-+/* failure codes */
-+#define MUSB_ERR_WAITING 1
-+#define MUSB_ERR_VBUS -1
-+#define MUSB_ERR_BABBLE -2
-+#define MUSB_ERR_CORRUPTED -3
-+#define MUSB_ERR_IRQ -4
-+#define MUSB_ERR_SHUTDOWN -5
-+#define MUSB_ERR_RESTART -6
-+
-+/****************************** FUNCTIONS ********************************/
-+
-+#define KMALLOC(a,b,c) { lock_kernel(); a=kmalloc(b,c); unlock_kernel(); }
-+#define KFREE(p) { lock_kernel(); kfree(p); unlock_kernel(); }
-+
-+/*************************** REGISTER ACCESS ********************************/
-+
-+/* indexed vs. flat register model */
-+#ifdef MUSB_FLAT_REG
-+#define MGC_SelectEnd(_pBase, _bEnd)
-+#define MGC_ReadCsr8(_pBase, _bOffset, _bEnd) \
-+ MGC_Read8(_pBase, MGC_END_OFFSET(_bEnd, _bOffset))
-+#define MGC_ReadCsr16(_pBase, _bOffset, _bEnd) \
-+ MGC_Read16(_pBase, MGC_END_OFFSET(_bEnd, _bOffset))
-+#define MGC_WriteCsr8(_pBase, _bOffset, _bEnd, _bData) \
-+ MGC_Write8(_pBase, MGC_END_OFFSET(_bEnd, _bOffset), _bData)
-+#define MGC_WriteCsr16(_pBase, _bOffset, _bEnd, _bData) \
-+ MGC_Write16(_pBase, MGC_END_OFFSET(_bEnd, _bOffset), _bData)
-+#else
-+#define MGC_SelectEnd(_pBase, _bEnd) \
-+ MGC_Write8(_pBase, MGC_O_HDRC_INDEX, _bEnd)
-+#define MGC_ReadCsr8(_pBase, _bOffset, _bEnd) \
-+ MGC_Read8(_pBase, (_bOffset + 0x10))
-+#define MGC_ReadCsr16(_pBase, _bOffset, _bEnd) \
-+ MGC_Read16(_pBase, (_bOffset + 0x10))
-+#define MGC_WriteCsr8(_pBase, _bOffset, _bEnd, _bData) \
-+ MGC_Write8(_pBase, (_bOffset + 0x10), _bData)
-+#define MGC_WriteCsr16(_pBase, _bOffset, _bEnd, _bData) \
-+ MGC_Write16(_pBase, (_bOffset + 0x10), _bData)
-+#endif
-+
-+
-+/************************** ULPI Registers ********************************/
-+
-+/* Added in HDRC 1.9(?) & MHDRC 1.4 */
-+/* ULPI pass-through */
-+#define MGC_O_HDRC_ULPI_VBUSCTL 0x70
-+#define MGC_O_HDRC_ULPI_REGDATA 0x74
-+#define MGC_O_HDRC_ULPI_REGADDR 0x75
-+#define MGC_O_HDRC_ULPI_REGCTL 0x76
-+
-+/* extended config & PHY control */
-+#define MGC_O_HDRC_ENDCOUNT 0x78
-+#define MGC_O_HDRC_DMARAMCFG 0x79
-+#define MGC_O_HDRC_PHYWAIT 0x7A
-+#define MGC_O_HDRC_PHYVPLEN 0x7B /* units of 546.1 us */
-+#define MGC_O_HDRC_HSEOF1 0x7C /* units of 133.3 ns */
-+#define MGC_O_HDRC_FSEOF1 0x7D /* units of 533.3 ns */
-+#define MGC_O_HDRC_LSEOF1 0x7E /* units of 1.067 us */
-+
-+/* Added in HDRC 1.9(?) & MHDRC 1.4 */
-+/* ULPI */
-+#define MGC_M_ULPI_VBUSCTL_USEEXTVBUSIND 0x02
-+#define MGC_M_ULPI_VBUSCTL_USEEXTVBUS 0x01
-+#define MGC_M_ULPI_REGCTL_INT_ENABLE 0x08
-+#define MGC_M_ULPI_REGCTL_READNOTWRITE 0x04
-+#define MGC_M_ULPI_REGCTL_COMPLETE 0x02
-+#define MGC_M_ULPI_REGCTL_REG 0x01
-+/* extended config & PHY control */
-+#define MGC_M_ENDCOUNT_TXENDS 0x0f
-+#define MGC_S_ENDCOUNT_TXENDS 0
-+#define MGC_M_ENDCOUNT_RXENDS 0xf0
-+#define MGC_S_ENDCOUNT_RXENDS 4
-+#define MGC_M_DMARAMCFG_RAMBITS 0x0f /* RAMBITS-1 */
-+#define MGC_S_DMARAMCFG_RAMBITS 0
-+#define MGC_M_DMARAMCFG_DMACHS 0xf0
-+#define MGC_S_DMARAMCFG_DMACHS 4
-+#define MGC_M_PHYWAIT_WAITID 0x0f /* units of 4.369 ms */
-+#define MGC_S_PHYWAIT_WAITID 0
-+#define MGC_M_PHYWAIT_WAITCON 0xf0 /* units of 533.3 ns */
-+#define MGC_S_PHYWAIT_WAITCON 4
-+
-+/****************************** FUNCTIONS ********************************/
-+
-+#define MUSB_HST_MODE(_pthis) { (_pthis)->bIsHost=TRUE; (_pthis)->bIsDevice=FALSE; \
-+ (_pthis)->bIsA=1; (_pthis)->bFailCode=0; }
-+#define MUSB_DEV_MODE(_pthis) { (_pthis)->bIsHost=FALSE; (_pthis)->bIsDevice=TRUE; \
-+ (_pthis)->bIsA=0; (_pthis)->bFailCode=0; }
-+#define MUSB_B_IDLE_MODE(_pthis) { (_pthis)->bIsHost=FALSE; (_pthis)->bIsDevice=FALSE; \
-+ (_pthis)->bIsA=0; (_pthis)->bFailCode=MUSB_ERR_WAITING; }
-+#define MUSB_A_IDLE_MODE(_pthis) { (_pthis)->bIsHost=FALSE; (_pthis)->bIsDevice=FALSE; \
-+ (_pthis)->bIsA=1; (_pthis)->bFailCode=MUSB_ERR_WAITING; }
-+#define MUSB_ERR_MODE(_pthis, _cause) { (_pthis)->bIsHost=FALSE; (_pthis)->bIsDevice=FALSE; \
-+ (_pthis)->bFailCode=_cause; }
-+
-+#define MUSB_IS_ERR(_x) ( (_x)->bFailCode<0 )
-+#define MUSB_IS_HST(_x) ( !MUSB_IS_ERR(_x) && (_x)->bIsHost && !(_x)->bIsDevice )
-+#define MUSB_IS_DEV(_x) ( !MUSB_IS_ERR(_x) && !(_x)->bIsHost && (_x)->bIsDevice )
-+#define MUSB_IS_B_IDLE(_x) ( !MUSB_IS_ERR(_x) && !(_x)->bIsHost && !(_x)->bIsDevice && !(_x)->bIsA )
-+#define MUSB_IS_A_IDLE(_x) ( !MUSB_IS_ERR(_x) && !(_x)->bIsHost && !(_x)->bIsDevice && (_x)->bIsA )
-+
-+#define MUSB_MODE(_x) ( MUSB_IS_HST(_x)?"HOST":( MUSB_IS_DEV(_x)?"FUNCTION":(MUSB_IS_B_IDLE(_x)?"B_IDLE":(MUSB_IS_A_IDLE(_x)?"A_IDLE":"ERROR"))) )
-+
-+#define HDRC_IS_HST(_x) ( MGC_Read8((_x)->pRegs, MGC_O_HDRC_DEVCTL)&MGC_M_DEVCTL_HM )
-+#define HDRC_IS_DEV(_x) ( !HDRC_IS_HST(_x) )
-+
-+
-+/******************************** DMA TYPES **********************************/
-+
-+#ifdef MUSB_DMA
-+#include "dma.h"
-+
-+#ifndef MGC_HSDMA_CHANNELS
-+#define MGC_HSDMA_CHANNELS 8
-+#endif
-+
-+#ifdef MUSB_HAS_DMA_URBS
-+#define WANTS_DMA(_pUrb) ((_pUrb)->transfer_dma && (_pUrb->flags & URB_NO_TRANSFER_DMA_MAP))
-+#define DMA_BUFFER(_pUrb) ((_pUrb)->transfer_dma)
-+#else
-+#define WANTS_DMA(_pUrb) (0)
-+#define DMA_BUFFER(pUrb) ((void*)0x000666)
-+#endif
-+
-+extern MGC_DmaControllerFactory MGC_HdrcDmaControllerFactory;
-+#endif
-+
-+
-+/************************** Ep Configuration ********************************/
-+
-+/** The End point descriptor */
-+struct MUSB_EpFifoDescriptor {
-+ uint8_t bType; /* 0 for autoconfig, CNTR, ISOC, BULK, INTR */
-+ uint8_t bDir; /* 0 for autoconfig, INOUT, IN, OUT */
-+ uint16_t wSize; /* 0 for autoconfig, or the size */
-+ uint8_t bDbe; /* Double buffering: 0 disabled, 1 enabled */
-+};
-+
-+#define MUSB_EPD_AUTOCONFIG 0
-+
-+#define MUSB_EPD_T_CNTRL 1
-+#define MUSB_EPD_T_ISOC 2
-+#define MUSB_EPD_T_BULK 3
-+#define MUSB_EPD_T_INTR 4
-+
-+#define MUSB_EPD_D_INOUT 0
-+#define MUSB_EPD_D_TX 1
-+#define MUSB_EPD_D_RX 2
-+
-+/******************************** TYPES *************************************/
-+
-+struct urb;
-+struct usb_device;
-+struct usb_gadget;
-+struct usb_hcd;
-+
-+/**
-+ * The device request.
-+ */
-+typedef struct __attribute__((packed)) {
-+ uint8_t bmRequestType;
-+ uint8_t bRequest;
-+ uint16_t wValue;
-+ uint16_t wIndex;
-+ uint16_t wLength;
-+} MUSB_DeviceRequest;
-+
-+/**
-+ * MGC_LinuxLocalEnd.
-+ * Local endpoint resource.
-+ * @field Lock spinlock
-+ * @field pUrb current URB
-+ * @field urb_list list
-+ * @field dwOffset current buffer offset
-+ * @field dwRequestSize how many bytes were last requested to move
-+ * @field wMaxPacketSizeTx local Tx FIFO size
-+ * @field wMaxPacketSizeRx local Rx FIFO size
-+ * @field wPacketSize programmed packet size
-+ * @field bIsSharedFifo TRUE if FIFO is shared between Tx and Rx
-+ * @field bAddress programmed bus address
-+ * @field bEnd programmed remote endpoint address
-+ * @field bTrafficType programmed traffic type
-+ * @field bIsClaimed TRUE if claimed
-+ * @field bIsTx TRUE if current direction is Tx
-+ * @field bIsReady TRUE if ready (available for new URB)
-+ */
-+typedef struct
-+{
-+#if MUSB_DEBUG > 0
-+ uint32_t dwPadFront;
-+#endif
-+ spinlock_t Lock;
-+ uint8_t bEnd; /* ep number */
-+
-+#ifdef MUSB_USE_HCD_DRIVER
-+ struct urb* pCurrentUrb;
-+#else
-+ struct list_head urb_list;
-+#endif
-+
-+ uint8_t bBusyCompleting; /* TRUE on Tx when the current urb is completing */
-+
-+ unsigned int dwOffset; /* offset int the current request */
-+ unsigned int dwRequestSize; /* request size */
-+ unsigned int dwIsoPacket;
-+ unsigned int dwWaitFrame;
-+ uint8_t bRetries;
-+
-+#ifdef MUSB_DMA
-+ MGC_DmaChannel* pDmaChannel;
-+#endif
-+
-+#ifdef MUSB_CONFIG_PROC_FS
-+ unsigned long dwTotalTxBytes;
-+ unsigned long dwTotalRxBytes;
-+ unsigned long dwTotalTxPackets;
-+ unsigned long dwTotalRxPackets;
-+ unsigned long dwErrorTxPackets;
-+ unsigned long dwErrorRxPackets;
-+ unsigned long dwMissedTxPackets;
-+ unsigned long dwMissedRxPackets;
-+#endif
-+
-+ uint16_t wMaxPacketSizeTx;
-+ uint16_t wMaxPacketSizeRx;
-+ uint16_t wPacketSize;
-+ uint8_t bDisableDma; /* not used now! */
-+ uint8_t bIsSharedFifo;
-+
-+ /* softstate, used from find_end() to determine a good match */
-+ uint8_t bRemoteAddress;
-+ uint8_t bRemoteEnd;
-+ uint8_t bTrafficType;
-+ uint8_t bIsClaimed; /* only for isoc and int traffic */
-+ uint8_t bIsTx;
-+ uint8_t bIsReady;
-+ uint8_t bStalled; /* the ep has been halted */
-+
-+#if MUSB_DEBUG > 0
-+ uint32_t dwPadBack;
-+#endif
-+} MGC_LinuxLocalEnd;
-+
-+/** A listener for disconnection */
-+typedef void (*MGC_pfDisconnectListener)(void*);
-+/** A handler for the default endpoint interrupt */
-+typedef void (*MGC_pfDefaultEndHandler)(void*);
-+
-+#ifdef MUSB_USE_HCD_DRIVER
-+typedef struct {
-+ spinlock_t urb_queue_lock;
-+ int urb_queue_count;
-+ int urb_exec_count;
-+ void *urb_queue_head;
-+ void *urb_queue_tail;
-+} mgc_hcd_urb_queue;
-+#endif
-+
-+/**
-+ * MGC_LinuxCd.
-+ * Driver instance data.
-+ * @field Lock spinlock
-+ * @field Timer interval timer for various things
-+ * @field pBus pointer to Linux USBD bus
-+ * @field RootHub virtual root hub
-+ * @field PortServices services provided to virtual root hub
-+ * @field pRootDevice root device pointer, to track connection speed
-+ * @field nIrq IRQ number (needed by free_irq)
-+ * @field bIsMultipoint TRUE if multi-point core
-+ * @field bIsHost TRUE if host
-+ * @field bIsDevice TRUE if peripheral
-+ * @field pRegs pointer to mapped registers
-+ */
-+typedef struct
-+{
-+#if MUSB_DEBUG > 0
-+ uint32_t dwPadFront;
-+#endif
-+ spinlock_t Lock;
-+ struct timer_list Timer;
-+ struct usb_bus *pBus;
-+ char aName[32];
-+ MGC_VirtualHub RootHub;
-+ MGC_PortServices PortServices;
-+ struct usb_device* pRootDevice;
-+
-+#ifdef MUSB_DMA
-+ MGC_DmaController* pDmaController;
-+#endif
-+
-+ int nIrq;
-+ int nIrqType;
-+
-+ int nBabbleCount;
-+ void* pRegs;
-+
-+ MGC_LinuxLocalEnd aLocalEnd[MUSB_C_NUM_EPS];
-+
-+#ifdef MUSB_USE_HCD_DRIVER
-+ mgc_hcd_urb_queue LocalQueue;
-+ wait_queue_head_t waitqh;
-+#endif
-+
-+ uint16_t wEndMask;
-+ uint8_t bEndCount;
-+ uint8_t bRootSpeed;
-+ uint8_t bIsMultipoint;
-+ uint8_t bIsHost;
-+ uint8_t bIsDevice;
-+ uint8_t bIsA;
-+ uint8_t bIgnoreDisconnect; /* during bus resets I got fake disconnects */
-+ uint8_t bVbusErrors; /* bus errors found */
-+
-+ int bFailCode; /* one of MUSB_ERR_* failure code */
-+
-+ uint8_t bBulkTxEnd;
-+ uint8_t bBulkRxEnd;
-+ uint8_t bBulkSplit;
-+ uint8_t bBulkCombine;
-+
-+ uint8_t bEnd0Stage; /* end0 stage while in host or device mode */
-+
-+#ifdef MUSB_GADGET
-+ uint8_t bDeviceState;
-+ uint8_t bIsSelfPowered;
-+ uint8_t bSetAddress;
-+ uint8_t bAddress;
-+ uint8_t bTestMode;
-+ uint8_t bTestModeValue;
-+
-+ struct usb_gadget* pGadget; /* the gadget */
-+ struct usb_gadget_driver* pGadgetDriver; /* it's driver */
-+
-+ /* Endpoint 0 buffer and its buffer code; can be customized for
-+ * devices that are not usign the default USB headers. Default
-+ * values are:
-+ *
-+ * . pfFillBuffer is MGC_HdrcReadUSBControlRequest()
-+ * . pEnd0Buffer is an instance of MGC_End0Buffer
-+ **/
-+ int (*pfReadHeader)(void*, uint16_t); /* NULL==MGC_HdrcReadUSBControlRequest*/
-+ void* pEnd0Buffer; /* this is the buffer, default implementation uses MGC_End0Buffer */
-+
-+ /* compatibility, need to be osoleted used from gstorage */
-+ uint16_t wEnd0Offset;
-+#endif
-+
-+#ifdef MUSB_OTG
-+ MGC_OtgMachine OtgMachine;
-+ MGC_OtgServices OtgServices;
-+ uint8_t bDelayPortPowerOff;
-+ uint8_t bOtgError;
-+#endif
-+
-+#if MUSB_DEBUG > 0
-+ uint32_t dwPadBack;
-+#endif
-+
-+#ifdef MUSB_CONFIG_PROC_FS
-+ struct proc_dir_entry* pProcEntry;
-+
-+ /* A couple of hooks to enable HSET */
-+ MGC_pfDisconnectListener pfDisconnectListener;
-+ void* pDisconnectListenerParam;
-+ MGC_pfDefaultEndHandler pfDefaultEndHandler;
-+ void* pDefaultEndHandlerParam;
-+#endif
-+
-+} MGC_LinuxCd;
-+
-+#ifdef MUSB_USE_HCD_DRIVER
-+void mgc_hcd_complete_urb(MGC_LinuxCd *pThis, struct urb* pUrb);
-+mgc_hcd_urb_queue * mgc_hcd_get_urb_queue(MGC_LinuxCd* pThis);
-+#endif
-+
-+
-+/***************************** Glue it together *****************************/
-+
-+
-+extern unsigned int MGC_nIndex;
-+
-+extern int MGC_DriverInit(void);
-+extern void MGC_DriverCleanup(void);
-+
-+extern void MGC_HdrcStart(MGC_LinuxCd* pThis);
-+extern void MGC_HdrcStop(MGC_LinuxCd* pThis);
-+extern void MGC_HdrcServiceUsb(MGC_LinuxCd* pThis, uint8_t reg);
-+extern void MGC_HdrcLoadFifo(const uint8_t* pBase, uint8_t bEnd,
-+ uint16_t wCount, const uint8_t* pSource);
-+extern void MGC_HdrcUnloadFifo(const uint8_t* pBase, uint8_t bEnd,
-+ uint16_t wCount, uint8_t* pDest);
-+
-+extern MGC_LinuxCd* MGC_LinuxInitController(void* pDevice, uint16_t wType,
-+ int nIrq, void* pRegs, u64 len, const char* pName);
-+extern void MGC_LinuxSetTimer(MGC_LinuxCd* pThis, void (*pfFunc)(unsigned long),
-+ unsigned long pParam, unsigned long millisecs);
-+
-+extern void MGC_LinuxCdFree(MGC_LinuxCd* pThis);
-+
-+extern struct urb* MGC_GetCurrentUrb(MGC_LinuxLocalEnd *pEnd);
-+
-+extern int queue_length(struct list_head *lh);
-+
-+/* Conditionally-compiled to update OTG state machine when necessary */
-+extern void MGC_OtgUpdate(MGC_LinuxCd* pThis, uint8_t bVbusError,
-+ uint8_t bConnect);
-+
-+extern void MGC_HdrcConfigureEps(MGC_LinuxCd* pThis);
-+extern MGC_LinuxCd *hcd_to_musbstruct(void *ptr);
-+extern struct usb_hcd* musbstruct_to_hcd(const MGC_LinuxCd *pThis);
-+
-+/*-------------------------- available buses ---------------------*/
-+
-+extern int direct_bus_init(void);
-+extern void direct_bus_shutdown(void);
-+
-+/*-------------------------- ProcFS definitions ---------------------*/
-+
-+struct MGC_TestProcData;
-+struct proc_dir_entry;
-+
-+#ifdef MUSB_CONFIG_PROC_FS
-+extern char* decode_hst_ep_protocol(MGC_LinuxCd* pThis, unsigned bEnd);
-+extern char* decode_dev_ep_protocol(MGC_LinuxCd* pThis, unsigned bEnd);
-+#endif
-+
-+#ifdef MUSB_CONFIG_PROC_FS
-+extern void MGC_HdrcSetDisconnectListener(MGC_LinuxCd* pCd,
-+ MGC_pfDisconnectListener pfListener, void* pParam);
-+extern void MGC_HdrcSetDefaultEndHandler(MGC_LinuxCd* pCd,
-+ MGC_pfDefaultEndHandler pfHandler, void* pParam);
-+extern struct proc_dir_entry* MGC_LinuxCreateProcFs(char *name,
-+ MGC_LinuxCd* data);
-+extern void MGC_LinuxDeleteProcFs(MGC_LinuxCd* data);
-+#else
-+#define PROC_FS_DISABLED(_x) { DBG(3, "#PROC_FS DISABLED"); _x }
-+
-+static inline void MGC_HdrcSetDisconnectListener(MGC_LinuxCd* pCd,
-+ MGC_pfDisconnectListener pfListener, void* pParam) PROC_FS_DISABLED(;)
-+static inline void MGC_HdrcSetDefaultEndHandler(MGC_LinuxCd* pCd,
-+ MGC_pfDefaultEndHandler pfHandler, void* pParam) PROC_FS_DISABLED(;)
-+static inline struct proc_dir_entry* MGC_LinuxCreateProcFs(char *name,
-+ MGC_LinuxCd* data) PROC_FS_DISABLED(;)
-+static inline void MGC_LinuxDeleteProcFs(MGC_LinuxCd* data)
-+ PROC_FS_DISABLED(;)
-+#endif
-+
-+/*-------------------------- TestProcFS definitions ---------------------*/
-+
-+#ifdef MUSB_PROC_TESTMUSB
-+extern struct proc_dir_entry* MGC_LinuxCreateTestProcFs(char *name, MGC_LinuxCd* data);
-+extern void MGC_LinuxDeleteTestProcFs(char *name, MGC_LinuxCd* data);
-+#endif
-+
-+/*------------------------------ IOCTLS/PROCFS -----------------------*/
-+
-+extern void MGC_Zap(MGC_LinuxCd* pThis); /* zap the driver */
-+extern void MGC_Session(MGC_LinuxCd* pThis); /* start a session */
-+extern void MGC_SetDebugLevel(int level); /* set the debug level */
-+extern int dump_header_stats(MGC_LinuxCd* pThis, char *buffer); /* compile options etc */
-+#ifdef MUSB_HOST
-+int dump_end_stats(MGC_LinuxCd* pThis, uint8_t bEnd, char* aBuffer);
-+#endif
-+
-+
-+
-+/*-------------------------- DEBUG Definitions ---------------------*/
-+
-+
-+#ifdef MUSB_PARANOID
-+#define MGC_HDRC_DUMPREGS(_t, _s) MGC_HdrcDumpRegs((_t)->pRegs, MUSB_IS_HST(_t) && _t->bIsMultipoint, _s)
-+#define MGC_ISCORRUPT(_x) mgc_is_corrupt((_x), __FUNCTION__,__LINE__)
-+
-+/**
-+ * Test whether the struct is corrupted.
-+ * @param pThis
-+ */
-+static inline uint8_t mgc_is_corrupt(MGC_LinuxCd* pThis, const char *function, int line) {
-+#ifdef MUSB_HOST
-+ uint8_t bEnd;
-+ MGC_LinuxLocalEnd* pEnd;
-+#endif
-+
-+ if(MGC_PAD_FRONT != pThis->dwPadFront) {
-+ printk(KERN_INFO"musb %s:%d: pThis front pad corrupted (%x)\n",
-+ function, line, pThis->dwPadFront);
-+ return TRUE;
-+ }
-+
-+ if(MGC_PAD_BACK != pThis->dwPadBack) {
-+ printk(KERN_INFO"musb %s:%d: pThis back pad corrupted (%x)\n",
-+ function, line, pThis->dwPadBack);
-+ return TRUE;
-+ }
-+
-+#ifdef MUSB_HOST
-+ for(bEnd = 0; bEnd < pThis->bEndCount; bEnd++) {
-+ pEnd = &(pThis->aLocalEnd[bEnd]);
-+
-+ if(MGC_PAD_FRONT != pEnd->dwPadFront) {
-+ printk(KERN_INFO"musb %s:%d: end %d front pad corrupted (%x)\n",
-+ function, line, bEnd, pEnd->dwPadFront);
-+ return TRUE;
-+ }
-+
-+ if(MGC_PAD_BACK != pEnd->dwPadBack) {
-+ printk(KERN_INFO"musb %s:%d: end %d back pad corrupted (%x)\n",
-+ function, line, bEnd, pEnd->dwPadBack);
-+ return TRUE;
-+ }
-+ }
-+#endif
-+
-+#ifdef MUSB_GADGET
-+ /* do something about it */
-+#endif
-+
-+ return FALSE;
-+}
-+
-+#else
-+#define MGG_IsCorrupt(_x) (_x)
-+#define MGC_HDRC_DUMPREGS(_t, _s)
-+#endif
-+
-+/* -------------------------- Host Definitions ------------------------ */
-+
-+#ifdef MUSB_HOST
-+extern void MGC_InitLocalEndPoints(MGC_LinuxCd* pThis);
-+#endif
-+
-+/* -------------------------- Gadget Definitions --------------------- */
-+
-+struct usb_ep;
-+
-+extern const uint8_t MGC_aTestPacket[MGC_TEST_PACKET_SIZE];
-+
-+#if defined(MUSB_GADGET) || defined(MUSB_V26)
-+void* MGC_AllocBufferMemory(MGC_LinuxCd* pThis, size_t bytes, int gfp_flags, dma_addr_t* dma);
-+void MGC_FreeBufferMemory(MGC_LinuxCd* pThis, size_t bytes, void *address, dma_addr_t dma);
-+#endif
-+
-+#ifdef MUSB_GADGET
-+extern void* MGC_MallocEp0Buffer(const MGC_LinuxCd* pThis);
-+#endif
-+
-+/* Gadget functions */
-+#ifdef MUSB_GADGET
-+struct usb_gadget;
-+
-+extern MGC_LinuxCd* MGC_GetDriverByName(const char *name);
-+extern int MGC_GadgetFindEnd(struct usb_ep* pGadgetEnd);
-+extern void mgc_init_gadget_endpoints(MGC_LinuxCd *pThis, struct usb_gadget *gadget);
-+extern void MGC_GadgetReset(MGC_LinuxCd* pThis);
-+extern void MGC_GadgetResume(MGC_LinuxCd* pThis);
-+extern void MGC_GadgetSuspend(MGC_LinuxCd* pThis);
-+extern void MGC_GadgetDisconnect(MGC_LinuxCd* pThis);
-+extern void MGC_HdrcServiceDeviceDefaultEnd(MGC_LinuxCd* pThis);
-+extern void MGC_HdrcServiceDeviceTxAvail(MGC_LinuxCd* pThis, uint8_t bEnd);
-+extern void MGC_HdrcServiceDeviceRxReady(MGC_LinuxCd* pThis, uint8_t bEnd);
-+
-+extern void dump_ep_status(MGC_LinuxCd* pThis);
-+extern void dump_ep_queue(int index, int verbose);
-+
-+/*
-+ * Gadget disabled
-+ */
-+#else
-+#define GADGET_DISABLED(_x) { DBG(0, "#GADGET DISABLED"); _x }
-+
-+static inline MGC_LinuxCd* MGC_GetDriverByName(const char *name)
-+ GADGET_DISABLED( return NULL; )
-+static inline int MGC_GadgetFindEnd(struct usb_ep* pGadgetEnd)
-+ GADGET_DISABLED( return -1; )
-+static inline void MGC_InitGadgetEndPoints(MGC_LinuxCd *pThis)
-+ GADGET_DISABLED(;)
-+static inline void MGC_GadgetReset(MGC_LinuxCd* pThis)
-+ GADGET_DISABLED(;)
-+static inline void MGC_GadgetResume(MGC_LinuxCd* pThis)
-+ GADGET_DISABLED(;)
-+static inline void MGC_GadgetSuspend(MGC_LinuxCd* pThis)
-+ GADGET_DISABLED(;)
-+static inline void MGC_GadgetDisconnect(MGC_LinuxCd* pThis)
-+ GADGET_DISABLED(;)
-+static inline void MGC_HdrcServiceDeviceDefaultEnd(MGC_LinuxCd* pThis)
-+ GADGET_DISABLED(;)
-+static inline void MGC_HdrcServiceDeviceTxAvail(MGC_LinuxCd* pThis, uint8_t bEnd)
-+ GADGET_DISABLED(;)
-+static inline void MGC_HdrcServiceDeviceRxReady(MGC_LinuxCd* pThis, uint8_t bEnd)
-+ GADGET_DISABLED(;)
-+
-+static inline void dump_ep_status(MGC_LinuxCd* pThis)
-+ GADGET_DISABLED(;)
-+static inline void dump_ep_queue(int index, int verbose)
-+ GADGET_DISABLED(;)
-+#endif
-+
-+
-+#endif /* multiple inclusion protection */
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epdescriptors.h ../new/linux-2.6.20/drivers/usb/nomadik/musb_epdescriptors.h
---- linux-2.6.20/drivers/usb/nomadik/musb_epdescriptors.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_epdescriptors.h 2008-09-17 13:23:33.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_epdescriptors.h
@@ -0,0 +1,48 @@
+/*
+ * linux/drivers/usb/nomadik/musb_epdescriptors.h
@@ -193735,7 +194051,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epdescriptors.h ../new/linux-
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+struct MUSB_EpFifoDescriptor MUSB_aEpFifoDescriptors[MUSB_C_NUM_EPS] = {
@@ -193746,12 +194062,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epdescriptors.h ../new/linux-
+{ MUSB_EPD_T_INTR, MUSB_EPD_D_RX, 512 }
+};
+
-+/**
++/**
+struct MGC_EpFifoDescriptor {
-+ uint8_t bType; 0 for autoconfig, CNTR, ISOC, BULK, INTR
-+ uint8_t bDir; 0 for autoconfig, INOUT, IN, OUT
++ uint8_t bType; 0 for autoconfig, CNTR, ISOC, BULK, INTR
++ uint8_t bDir; 0 for autoconfig, INOUT, IN, OUT
+ uint16_t wSize; 0 for autoconfig, or the size
-+ uint 8_t bDbe; double buffering 0 disabled, 1 enabled
++ uint 8_t bDbe; double buffering 0 disabled, 1 enabled
+};
+
+#define MUSB_EPD_AUTOCONFIG 0
@@ -193766,9 +194082,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epdescriptors.h ../new/linux-
+#define MUSB_EPD_D_RX 2
+*/
+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c
---- linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c 2008-07-28 15:20:55.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c
@@ -0,0 +1,429 @@
+/*
+ * linux/drivers/usb/nomadik/musb_epfifocfg.c
@@ -193787,7 +194102,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "musbdefs.h"
@@ -193799,10 +194114,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+
+#define DYN_FIFO_SIZE (1<<(MUSB_C_RAM_BITS+2))
+#define CONFIGURE_FIFO(_pThis, _pEnd, _Dsc, _wFifoOffset) \
-+ configure_fifo(_pThis, _pEnd, (_Dsc)->bDir, (_Dsc)->wSize, (_Dsc)->bDbe, _wFifoOffset)
-+
-+
-+/* force array based */
++ configure_fifo(_pThis, _pEnd, (_Dsc)->bDir, (_Dsc)->wSize, (_Dsc)->bDbe, _wFifoOffset)
++
++
++/* force array based */
+#ifdef MUSB_C_DYNFIFO_DEF
+
+#ifdef MUSB_EPDISCRIPTORS_FILE
@@ -193810,28 +194125,28 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ * configure the fifo and make sure the pThis endmask is updated.
+ *
+ * @param pThis
-+ * @param pEnd the end to configure
++ * @param pEnd the end to configure
+ * @param bDir the direction (in, out, inout)
-+ * @param wSize the fifo size, real fifo size
-+ * @param bDbe double buffering enabled?
-+ * @param wFifoOffset the current offset
++ * @param wSize the fifo size, real fifo size
++ * @param bDbe double buffering enabled?
++ * @param wFifoOffset the current offset
+ */
-+static uint16_t configure_fifo(MGC_LinuxCd* pThis, MGC_LinuxLocalEnd* pEnd,
-+ uint8_t bDir, uint16_t wSize, uint8_t bDbe, uint16_t wFifoOffset)
++static uint16_t configure_fifo(MGC_LinuxCd* pThis, MGC_LinuxLocalEnd* pEnd,
++ uint8_t bDir, uint16_t wSize, uint8_t bDbe, uint16_t wFifoOffset)
+{
+ uint16_t offset=wSize;
+ void* pBase = pThis->pRegs;
+ uint8_t szValue=wSize>>3;
+ uint16_t addValue=wFifoOffset>>3;
-+
++
+ /* when double buffering is enabled endpoint needs twice the size */
+ if (bDbe) {
+ szValue |= (1<<4);
+ offset*=2;
+ }
-+
++
+ /* configure the FIFO */
-+ MGC_SelectEnd(pBase, pEnd->bEnd);
++ MGC_SelectEnd(pBase, pEnd->bEnd);
+ switch ( bDir ) {
+ case MUSB_EPD_D_TX:
+ MGC_Write8(pBase, MGC_O_HDRC_TXFIFOSZ, 0x6);
@@ -193864,7 +194179,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ ERR("direction %d not supported\n", bDir);
+ offset=0;
+ break;
-+ }
++ }
+
+ /* make sure the endmask is right */
+ if ( offset ) {
@@ -193872,13 +194187,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ }
+
+ /* TODO: flush the FIFO after an ep size change */
-+
++
+
+ return offset;
+}
+
+/**
-+ * Configure the end points for DYNAMIC FIFO: array based End point
++ * Configure the end points for DYNAMIC FIFO: array based End point
+ * configuration.
+ * @param pThis the controller
+ */
@@ -193891,69 +194206,69 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ pThis->bEndCount=MUSB_C_NUM_EPS;
+
+#ifdef MUSB_PARANOID
-+ if ( MUSB_aEpFifoDescriptors[0].bType!=MUSB_EPD_T_CNTRL
-+ && MUSB_aEpFifoDescriptors[0].bType!=MUSB_EPD_AUTOCONFIG)
++ if ( MUSB_aEpFifoDescriptors[0].bType!=MUSB_EPD_T_CNTRL
++ && MUSB_aEpFifoDescriptors[0].bType!=MUSB_EPD_AUTOCONFIG)
+ {
-+ WARN("ep0 must be control with fixed size of %d\n",
++ WARN("ep0 must be control with fixed size of %d\n",
+ MGC_END0_FIFOSIZE);
+ }
+#endif
-+
++
+ /* entry 0 is ep0, the default control endpoint */
+ for (bEnd=0; bEnd<MUSB_C_NUM_EPS; bEnd++) {
-+ bSkip=0;
++ bSkip=0;
+ pEnd = &(pThis->aLocalEnd[bEnd]);
+ pEnd->bEnd=bEnd;
+ pEnd->bIsSharedFifo = FALSE;
+ pEnd->wMaxPacketSizeTx=pEnd->wMaxPacketSizeRx=0;
-+
-+ switch ( MUSB_aEpFifoDescriptors[bEnd].bType ) {
++
++ switch ( MUSB_aEpFifoDescriptors[bEnd].bType ) {
+ case MUSB_EPD_T_CNTRL:
+ if ( bEnd ) {
+ bSkip=1;
-+ WARN("Control ep when ep!=0 (ep%d); skipping\n", bEnd);
++ WARN("Control ep when ep!=0 (ep%d); skipping\n", bEnd);
+ }
+ break;
-+
++
+ case MUSB_EPD_T_ISOC: break;
-+
-+ case MUSB_EPD_T_BULK:
++
++ case MUSB_EPD_T_BULK:
+ switch ( MUSB_aEpFifoDescriptors[bEnd].bDir ) {
+ case MUSB_EPD_D_TX: pThis->bBulkTxEnd = bEnd; break;
+ case MUSB_EPD_D_RX: pThis->bBulkRxEnd = bEnd; break;
+ case MUSB_EPD_D_INOUT:
-+ WARN("INOUTBULK: sharing ep%d\n", bEnd);
++ WARN("INOUTBULK: sharing ep%d\n", bEnd);
+ break;
+ default:
+ bSkip=1;
-+ ERR("direction %d not supported for ep%d\n",
++ ERR("direction %d not supported for ep%d\n",
+ MUSB_aEpFifoDescriptors[bEnd].bDir, bEnd);
+ break;
-+ }
++ }
+ break;
-+
++
+ case MUSB_EPD_T_INTR: break;
+ case MUSB_EPD_AUTOCONFIG: break;
-+
++
+ default:
-+ bSkip=1;
-+ ERR("ep%d type %d not supported\n", bEnd,
++ bSkip=1;
++ ERR("ep%d type %d not supported\n", bEnd,
+ MUSB_aEpFifoDescriptors[bEnd].bType);
+ break;
-+ }
-+
++ }
++
+ if ( !MUSB_aEpFifoDescriptors[bEnd].wSize ) {
-+ continue; /* postpone to autoconfig */
++ continue; /* postpone to autoconfig */
+ }
+
+ if ( !bSkip ) {
-+ uint16_t offset=CONFIGURE_FIFO(pThis, &(pThis->aLocalEnd[bEnd]),
++ uint16_t offset=CONFIGURE_FIFO(pThis, &(pThis->aLocalEnd[bEnd]),
+ &MUSB_aEpFifoDescriptors[bEnd], wFifoOffset );
+ if ( offset ) {
+ wFifoOffset += offset;
+ }
+ }
-+
++
+ }
+
+#ifdef MUSB_PARANOID
@@ -193961,7 +194276,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ ERR("Allocated %d bytes, more than the allowed %d\n",
+ wFifoOffset, 64);
+ } else {
-+ INFO("Allocated %d bytes, out of %d\n", wFifoOffset,
++ INFO("Allocated %d bytes, out of %d\n", wFifoOffset,
+ 64);
+ }
+#endif
@@ -193983,7 +194298,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+
+ /* use the defined end points */
+ pThis->bEndCount=MUSB_C_NUM_EPS;
-+
++
+ /* Dynamic FIFO sizing: use pre-computed values for EP0 */
+ MGC_SelectEnd(pBase, 0);
+ MGC_Write8(pBase, MGC_O_HDRC_TXFIFOSZ, 3);
@@ -193991,7 +194306,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ MGC_Write16(pBase, MGC_O_HDRC_TXFIFOADD, 0);
+ MGC_Write16(pBase, MGC_O_HDRC_RXFIFOADD, 0);
+ pThis->wEndMask = 1;
-+
++
+#if MGC_DFIFO_ISO_TX >= 0
+ MGC_SelectEnd(pBase, bEnd);
+ pEnd = &(pThis->aLocalEnd[bEnd]);
@@ -194006,7 +194321,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ wFifoOffset += pEnd->wMaxPacketSizeTx;
+ pEnd->bIsSharedFifo = FALSE;
+ pThis->wEndMask |= (1 << bEnd);
-+ bEnd++;
++ bEnd++;
+#endif
+
+#if MGC_DFIFO_ISO_RX >= 0
@@ -194061,14 +194376,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ MGC_SelectEnd(pBase, bEnd);
+ pEnd = &(pThis->aLocalEnd[bEnd]);
+ pEnd->bEnd=bEnd;
-+
++
+ MGC_Write8(pBase, MGC_O_HDRC_TXFIFOSZ, MGC_DFIFO_ALL_VAL);
+ MGC_Write8(pBase, MGC_O_HDRC_RXFIFOSZ, MGC_DFIFO_ALL_VAL);
+ pEnd->wMaxPacketSizeTx = pEnd->wMaxPacketSizeRx = 1 << (MGC_DFIFO_ALL_VAL+3);
+ pEnd->bIsSharedFifo = TRUE;
+ MGC_Write16(pBase, MGC_O_HDRC_TXFIFOADD, wFifoOffset >> 3);
+ MGC_Write16(pBase, MGC_O_HDRC_RXFIFOADD, wFifoOffset >> 3);
-+
++
+ wFifoOffset += pEnd->wMaxPacketSizeRx;
+ pThis->wEndMask |= (1 << bEnd);
+ }
@@ -194082,7 +194397,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ wFifoOffset, 64);
+ }
+#endif
-+
++
+ DBG(2, "==>\n");
+}
+#endif
@@ -194116,7 +194431,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+
+ for(bEnd = 1; bEnd < MUSB_C_NUM_EPS; bEnd++) {
+ MGC_SelectEnd(pBase, bEnd);
-+ pEnd = &(pThis->aLocalEnd[bEnd]);
++ pEnd = &(pThis->aLocalEnd[bEnd]);
+ pEnd->bEnd=bEnd;
+
+ /* read from core */
@@ -194125,7 +194440,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ /* 0's returned when no more endpoints */
+ break;
+ }
-+
++
+ pEnd->wMaxPacketSizeTx = 1 << (reg & 0x0f);
+ /* shared TX/RX FIFO? */
+ if((reg & 0xf0) == 0xf0) {
@@ -194135,7 +194450,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ pEnd->wMaxPacketSizeRx = 1 << ((reg & 0xf0) >> 4);
+ pEnd->bIsSharedFifo = FALSE;
+ }
-+
++
+ /* track certain sizes to try to reserve a bulk resource */
+ if(pEnd->wMaxPacketSizeTx >= 2048) {
+ b2kTxEndCount++;
@@ -194144,7 +194459,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ w2kTxSize = pEnd->wMaxPacketSizeTx;
+ }
+ }
-+
++
+ if(pEnd->wMaxPacketSizeRx >= 2048) {
+ b2kRxEndCount++;
+ if(!b2kRxEnd || (pEnd->wMaxPacketSizeRx < w2kRxSize)) {
@@ -194152,7 +194467,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ w2kRxSize = pEnd->wMaxPacketSizeRx;
+ }
+ }
-+
++
+ if(pEnd->wMaxPacketSizeTx >= 1024) {
+ b1kTxEndCount++;
+ if(!b1kTxEnd || (pEnd->wMaxPacketSizeTx < w1kTxSize)) {
@@ -194160,19 +194475,19 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+ w1kTxSize = pEnd->wMaxPacketSizeTx;
+ }
+ }
-+
++
+ if(pEnd->wMaxPacketSizeRx >= 1024) {
+ b1kRxEndCount++;
+ if(!b1kRxEnd || (pEnd->wMaxPacketSizeRx < w1kTxSize)) {
+ b1kRxEnd = bEnd;
+ w1kRxSize = pEnd->wMaxPacketSizeRx;
+ }
-+ }
++ }
+
+ pThis->bEndCount++;
+ pThis->wEndMask |= (1 << bEnd);
+ } /* init queues etc. etc. etc. */
-+
++
+ /* if possible, reserve the smallest 2k-capable Tx end for bulk */
+ if(b2kTxEnd && (b2kTxEndCount > 1)) {
+ pThis->bBulkTxEnd = b2kTxEnd;
@@ -194199,9 +194514,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_epfifocfg.c ../new/linux-2.6.
+}
+#endif
+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/drivers/usb/nomadik/musb_hcd.c
---- linux-2.6.20/drivers/usb/nomadik/musb_hcd.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_hcd.c 2008-09-17 13:23:33.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_hcd.c
@@ -0,0 +1,869 @@
+/*
+ * linux/drivers/usb/nomadik/musb_hcd.c
@@ -194220,7 +194534,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <asm/arch/pexp.h>
@@ -194231,13 +194545,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+static int mgc_hcd_unlink_urb(struct usb_hcd *hcd, struct urb *pUrb);
+static int mgc_hcd_get_frame_number(struct usb_hcd *hcd);
+static irqreturn_t mgc_hcd_isr(struct usb_hcd *hcd);
-+static void mgc_hcd_disable_endpoint(struct usb_hcd *hcd,
++static void mgc_hcd_disable_endpoint(struct usb_hcd *hcd,
+ struct usb_host_endpoint *ep);
+static int mgc_hcd_find_end(MGC_LinuxCd* pThis, struct urb* pUrb);
+
-+static int mgc_root_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
++static int mgc_root_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
+ u16 wIndex, char *pData, u16 wLength);
-+static int mgc_root_hub_status(struct usb_hcd *hcd, char *pData);
++static int mgc_root_hub_status(struct usb_hcd *hcd, char *pData);
+int Urb_status=0;
+/* ------------------------------------------------------- */
+static int mgc_bus_resume(struct usb_hcd *phcd)
@@ -194252,7 +194566,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ MGC_Write16(pBase, MGC_O_HDRC_INTRRXE, 0xFFFE);
+ MGC_Write8(pBase, MGC_O_HDRC_INTRUSBE, 0xF7);
+ MGC_Write8(pBase, MGC_O_HDRC_INDEX ,0x00);
-+
++
+ /* Configure the endpoints*/
+ MGC_HdrcConfigureEps(pThis);
+ MGC_Write8(pThis->pRegs, MGC_O_HDRC_ULPI_VBUSCTL, 0x3);
@@ -194268,12 +194582,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ uint8_t topctrl;
+ MGC_LinuxCd* pThis=hcd_to_musbstruct(phcd);
+ char* pBase = (char*)pThis->pRegs;
-+
++
+ /* Delete Timer*/
+ del_timer(&notify_timer);
+ MUSB_A_IDLE_MODE(pThis);
-+
-+ /*
++
++ /*
+ * Device mode? disconnect the device and then
+ * proceed
+ */
@@ -194334,8 +194648,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ .description = MGC_HcdName,
+ .product_desc = "MUSB HCD",
+
-+ /* this will allocate a MGC_LinuxCd at the end of it */
-+ .hcd_priv_size = sizeof(MGC_LinuxCd),
++ /* this will allocate a MGC_LinuxCd at the end of it */
++ .hcd_priv_size = sizeof(MGC_LinuxCd),
+
+ /*
+ * generic hardware linkage
@@ -194373,7 +194687,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ */
+ .hub_status_data = mgc_root_hub_status,
+ .hub_control = mgc_root_hub_control,
-+
++
+ .bus_suspend = mgc_bus_suspend,
+ .bus_resume = mgc_bus_resume,
+#ifdef CONFIG_USB_SUSPEND
@@ -194400,9 +194714,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ struct urb* temp=pQueue->urb_queue_head;
+
+ if ( temp==pUrb ) {
-+ return pQueue->urb_queue_head; /* to make clear */
++ return pQueue->urb_queue_head; /* to make clear */
+ }
-+
++
+ while ( temp!=NULL && temp->hcpriv!=pUrb) {
+ temp=(struct urb*)temp->hcpriv;
+ }
@@ -194414,12 +194728,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ * push back an urb to the hcd queue.
+ * @param pThs the controller
+ * @param pUrb the urb push in queue
-+ * @return <0 if error, 0 when the queue is idle, >0 otherwise
-+ */
++ * @return <0 if error, 0 when the queue is idle, >0 otherwise
++ */
+inline static int mgc_hcd_urb_pushback(mgc_hcd_urb_queue *pQueue, struct urb* pUrb) {
+#ifdef MUSB_PARANOID
+ if (!pUrb) {
-+ ERR("*** cannot push NULL urb\n");
++ ERR("*** cannot push NULL urb\n");
+ return -ENODEV;
+ }
+#endif
@@ -194435,25 +194749,25 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+}
+
+/*
-+ * Queue at an urb to the hcd queue.
-+ * @return <0 if error, 0 when the queue is idle, >0 otherwise
-+ */
++ * Queue at an urb to the hcd queue.
++ * @return <0 if error, 0 when the queue is idle, >0 otherwise
++ */
+inline static int mgc_hcd_queue_urb(mgc_hcd_urb_queue *pQueue, struct urb* pUrb) {
+ int status=0;
+
+#ifdef MUSB_PARANOID
+ if (!pUrb) {
-+ ERR("*** cannot queue NULL urb\n");
++ ERR("*** cannot queue NULL urb\n");
+ return -ENODEV;
+ }
+#endif
-+
++
+ spin_lock(&pQueue->urb_queue_lock);
+ if ( !pQueue->urb_queue_head ) { /* idle */
+ pQueue->urb_queue_head=pUrb;
+ pQueue->urb_queue_tail=pUrb;
+ pQueue->urb_queue_count++;
-+ } else { /* queue */
++ } else { /* queue */
+ if ( pQueue->urb_queue_tail ) {
+ ((struct urb*)pQueue->urb_queue_tail)->hcpriv=pUrb;
+ pQueue->urb_queue_tail=pUrb;
@@ -194465,9 +194779,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+
+ status=-ENODEV;
+ }
-+ }
++ }
+ spin_unlock(&pQueue->urb_queue_lock);
-+
++
+ return status;
+}
+
@@ -194477,34 +194791,34 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ * @return next urb to be queued to hardware, NULL if idle
+ */
+inline static struct urb* mgc_hcd_urb_top(mgc_hcd_urb_queue *pQueue) {
-+ return pQueue->urb_queue_head;
++ return pQueue->urb_queue_head;
+}
+
+/*
-+ *
++ *
+ */
+inline static struct urb* mgc_hcd_urb_pop(mgc_hcd_urb_queue *pQueue) {
-+ struct urb* pUrb=pQueue->urb_queue_head;
++ struct urb* pUrb=pQueue->urb_queue_head;
+
+ if ( pUrb ) {
+ pQueue->urb_queue_count--;
+ pQueue->urb_queue_head=pUrb->hcpriv;
+ if ( !pQueue->urb_queue_head ) {
+ pQueue->urb_queue_tail=NULL;
-+ }
++ }
+ } else {
+ pQueue->urb_queue_count=0; /* paranoid */
+ pQueue->urb_queue_head=NULL;
-+ pQueue->urb_queue_tail=NULL;
++ pQueue->urb_queue_tail=NULL;
+ }
-+
++
+ return pUrb;
+}
+
+/* ------------------------------------------------------------------- */
+
+static void mgc_hcd_stop(struct usb_hcd *hcd)
-+{
++{
+ MGC_LinuxCd* pThis=hcd_to_musbstruct(hcd);
+
+#ifdef MUSB_PARANOID
@@ -194513,7 +194827,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ return;
+ }
+#endif
-+
++
+ mgc_hdrc_disable(pThis);
+}
+
@@ -194535,12 +194849,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ pThis->pBus = &hcd->self;
+ pThis->pBus->bus_name = pThis->aName;
+ pThis->pBus->hcpriv = (void *)hcd;
-+
++
+ rc=mgc_init_root_hub(pThis);
+ if ( rc==0 ) {
+ DBG(3, "New bus @%p\n", pThis->pBus);
+ } else {
-+ ERR("*** could not initialize the root hub\n");
++ ERR("*** could not initialize the root hub\n");
+ return -ENODEV; /* return if not success !! */
+ }
+
@@ -194564,19 +194878,19 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ */
+void mgc_hcd_flush(MGC_LinuxCd* pThis) {
+ struct urb* pUrb;
-+ mgc_hcd_urb_queue *pQueue=mgc_hcd_get_urb_queue(pThis);
-+
++ mgc_hcd_urb_queue *pQueue=mgc_hcd_get_urb_queue(pThis);
++
+ DBG(2, "<== flushing\n");
-+ spin_lock(&pQueue->urb_queue_lock);
++ spin_lock(&pQueue->urb_queue_lock);
+ do {
-+ pUrb=mgc_hcd_urb_pop(pQueue);
++ pUrb=mgc_hcd_urb_pop(pQueue);
+ if ( pUrb ) {
+ DBG(3, "flushed=%p\n", pUrb);
+ pUrb->status=-ENOENT;
+ usb_kill_urb(pUrb);
+ } else {
-+
-+ }
++
++ }
+ } while ( pUrb );
+ spin_unlock(&pQueue->urb_queue_lock);
+ DBG(2, "==>\n");
@@ -194588,25 +194902,25 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+void mgc_hcd_complete_urb(MGC_LinuxCd* pThis, struct urb *pUrb)
+{
+ mgc_hcd_get_urb_queue(pThis)->urb_exec_count--;
-+
-+ usb_hcd_giveback_urb(musbstruct_to_hcd(pThis), pUrb); /* this call complete */
++
++ usb_hcd_giveback_urb(musbstruct_to_hcd(pThis), pUrb); /* this call complete */
+
+ /*printk("Yes completed:%d\n",usb_pipeendpoint(pUrb->pipe));*/
+}
+
+/**
-+ * Schedule the urb to the hardware.
++ * Schedule the urb to the hardware.
+ * @param pThis the controller
+ */
+int mgc_hcd_schedule_urb(MGC_LinuxCd* pThis)
+{
+
-+
++
+ int rc=0, nEnd;
+ struct urb*pUrb;
+ MGC_LinuxLocalEnd *pEnd;
+ mgc_hcd_urb_queue *pQueue=mgc_hcd_get_urb_queue(pThis);
-+
++
+ do {
+
+ DBG(2, "<== pQueue->urb_queue_count=%d, pQueue->urb_exec_count=%d\n",
@@ -194615,41 +194929,41 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ if ( !MUSB_IS_HST(pThis) ) {
+ break; /* nothing to do */
+ }
-+
-+ spin_lock(&pQueue->urb_queue_lock);
-+ pUrb=mgc_hcd_urb_pop(pQueue);
++
++ spin_lock(&pQueue->urb_queue_lock);
++ pUrb=mgc_hcd_urb_pop(pQueue);
+ if ( !pUrb ) {
-+ DBG(3, "scheduler is idle\n");
++ DBG(3, "scheduler is idle\n");
+ spin_unlock(&pQueue->urb_queue_lock);
+ break;
+ }
-+
-+ DBG(3, "pUrb=%p, (proto=%s)\n", pUrb, decode_urb_protocol(pUrb));
++
++ DBG(3, "pUrb=%p, (proto=%s)\n", pUrb, decode_urb_protocol(pUrb));
+ nEnd=mgc_hcd_find_end(pThis, pUrb);
+ if ( nEnd<0 ) {
+ spin_unlock(&pQueue->urb_queue_lock);
-+ ERR("***> no resource for proto=%s, addr=%d, end=%d\n",
-+ decode_urb_protocol(pUrb), usb_pipedevice(pUrb->pipe),
++ ERR("***> no resource for proto=%s, addr=%d, end=%d\n",
++ decode_urb_protocol(pUrb), usb_pipedevice(pUrb->pipe),
+ usb_pipeendpoint(pUrb->pipe));
+ if ( !pQueue->urb_exec_count ) {
-+ /* push it back and give it another chance */
++ /* push it back and give it another chance */
+ mgc_hcd_urb_pushback(pQueue, pUrb);
-+ ERR("??? schedule of pUrb=%p to nEnd=%d FAILED rc=%d\n",
++ ERR("??? schedule of pUrb=%p to nEnd=%d FAILED rc=%d\n",
+ pUrb, nEnd, rc);
+ break;
+ } else {
+ /* the urb will never be scheduled, kill it and move to next */
+ usb_kill_urb(pUrb);
-+ ERR("** ABORTING pUrb=%p to nEnd=%d; this is BAD (TM)\n",
++ ERR("** ABORTING pUrb=%p to nEnd=%d; this is BAD (TM)\n",
+ pUrb, nEnd);
+ continue;
+ }
-+ }
-+
-+ pEnd=&pThis->aLocalEnd[nEnd];
++ }
++
++ pEnd=&pThis->aLocalEnd[nEnd];
+ if ( mgc_ep_is_idle(pEnd) ) {
-+ DBG(3, "(%d/%d) pUrb=%p, nEnd=%d, %s \n",
-+ pQueue->urb_queue_count, pQueue->urb_exec_count,
++ DBG(3, "(%d/%d) pUrb=%p, nEnd=%d, %s \n",
++ pQueue->urb_queue_count, pQueue->urb_exec_count,
+ pUrb, nEnd, mgc_ep_is_idle(pEnd)?"idle":"busy");
+ spin_unlock(&pQueue->urb_queue_lock);
+ rc=mgc_schedule_urb(pThis, pEnd, pUrb);
@@ -194657,29 +194971,29 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ if ( !pQueue->urb_exec_count ) {
+ /* the urb will never be scheduled, kill it */
+ usb_kill_urb(pUrb);
-+ ERR("** ABORTING pUrb=%p to nEnd=%d; this is BAD (TM)\n",
++ ERR("** ABORTING pUrb=%p to nEnd=%d; this is BAD (TM)\n",
+ pUrb, nEnd);
-+ } else {
-+ /* push it back and give it another chance */
++ } else {
++ /* push it back and give it another chance */
+ mgc_hcd_urb_pushback(pQueue, pUrb);
-+ ERR("??? schedule of pUrb=%p to nEnd=%d FAILED rc=%d\n",
-+ pUrb, nEnd, rc);
++ ERR("??? schedule of pUrb=%p to nEnd=%d FAILED rc=%d\n",
++ pUrb, nEnd, rc);
+ }
+ } else {
+ /* removed from the queue, scheduled to hardware */
+ pQueue->urb_exec_count++;
+ break;
-+ }
-+ } else { /* too fast ? */
++ }
++ } else { /* too fast ? */
+ mgc_hcd_urb_pushback(pQueue, pUrb);
+ spin_unlock(&pQueue->urb_queue_lock);
-+ DBG(3, "???> cannot schedule pUrb=%p to nEnd=%d yet (busy with pEnd->pCurrentUrb=%p)\n",
++ DBG(3, "???> cannot schedule pUrb=%p to nEnd=%d yet (busy with pEnd->pCurrentUrb=%p)\n",
+ pUrb, nEnd, MGC_GetCurrentUrb(pEnd));
+ break;
+ }
-+
++
+ } while ( 1 );
-+
++
+ DBG(2, "==> rc=%d\n", rc);
+ return rc;
+}
@@ -194687,12 +195001,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+/* ------------------------------------------------------------------ */
+
+/**
-+ * Find a local endpoint suitable for transmitting the given urb minimizing
-+ * the reconfigurations. The best localendpoint is selceted using the following
++ * Find a local endpoint suitable for transmitting the given urb minimizing
++ * the reconfigurations. The best localendpoint is selceted using the following
+ * criterion:
+ * - ep0 is used for control Urbs
+ * - for bulk Urbs only (when available) choose the Tx or Rx reserved end
-+ * - determine direction, size and traffic type
++ * - determine direction, size and traffic type
+ *
+ * @param pThis instance pointer
+ * @param pURB URB pointer
@@ -194707,12 +195021,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+/**
+ * Submit an urb to our HCD driver. The urb will be queued and (sooner or later)
+ * scheduled to the hardware driver. The Urb had been queued to the ep from the
-+ * kernel, DON'T modify with the urb_list otherwise BAD THINGS WILL
-+ * HAPPEN (TM).
++ * kernel, DON'T modify with the urb_list otherwise BAD THINGS WILL
++ * HAPPEN (TM).
+ * @param hcd the HCD driver
+ * @param pURB URB pointer
+ */
-+static int mgc_hcd_submit_urb(struct usb_hcd *hcd, struct usb_host_endpoint *ep,
++static int mgc_hcd_submit_urb(struct usb_hcd *hcd, struct usb_host_endpoint *ep,
+ struct urb *pUrb, MUSB_MEMFLAG_TYPE iMemFlags)
+{
+
@@ -194723,10 +195037,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ if(Urb_status==1)
+ {
+ pUrb->status=-ENODEV;
-+ rc=-ENODEV;
++ rc=-ENODEV;
+ return rc;
+ }
-+
++
+#ifdef MUSB_PARANOID
+ if ( !pThis ) {
+ ERR("***==> pThis is null\n");
@@ -194735,15 +195049,15 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+
+ if ( !pUrb ) {
+ ERR("***==> pUrb is NULL\n");
-+ return -ENODEV;
-+ }
++ return -ENODEV;
++ }
+
+ pUrb->hcpriv=NULL; /* paranoid!! */
+ pUrb->status=-EINPROGRESS; /* paranoid!! */
+#endif
+
-+ DBG(2, "<== submit pUrb=%p, pUrb->hcpriv=%p, (proto=%s), bRemoteAddress=%d, bRemoteEnd=%d\n",
-+ pUrb, pUrb->hcpriv, decode_urb_protocol(pUrb), usb_pipedevice(pUrb->pipe),
++ DBG(2, "<== submit pUrb=%p, pUrb->hcpriv=%p, (proto=%s), bRemoteAddress=%d, bRemoteEnd=%d\n",
++ pUrb, pUrb->hcpriv, decode_urb_protocol(pUrb), usb_pipedevice(pUrb->pipe),
+ usb_pipeendpoint(pUrb->pipe));
+
+ if ( pUrb->hcpriv ) {
@@ -194753,7 +195067,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+
+ {
+ mgc_hcd_urb_queue *pQueue=mgc_hcd_get_urb_queue(pThis);
-+ int count=mgc_hcd_queue_urb(pQueue, pUrb);
++ int count=mgc_hcd_queue_urb(pQueue, pUrb);
+ if ( count<0 ) {
+ rc=-ENODEV;
+ } else if ( count==0 ) {
@@ -194768,24 +195082,24 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+
+
+
-+ DBG(2, "==> rc=%d\n", rc);
++ DBG(2, "==> rc=%d\n", rc);
+ return rc;
+}
+
+/**
+ * unlink an urb, hcd version. First check if the urb was queued to the
-+ * hardware, if not search it in the hcd queue, if not... this is BAD
++ * hardware, if not search it in the hcd queue, if not... this is BAD
+ * (TM).
+ * @param hcd the HCD driver
+ * @param pURB URB pointer
+ */
+static int mgc_hcd_unlink_urb(struct usb_hcd *hcd, struct urb *pUrb)
-+{
++{
+ int rc=0;
+ MGC_LinuxLocalEnd* pEnd;
+ MGC_LinuxCd* pThis=hcd_to_musbstruct(hcd);
+ mgc_hcd_urb_queue *pQueue=mgc_hcd_get_urb_queue(pThis);
-+
++
+#ifdef MUSB_PARANOID
+ if ( !pThis ) {
+ ERR("pThis is null");
@@ -194793,8 +195107,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ }
+#endif
+
-+ DBG(-1, "<== Unlinking pUrb=%p (%s), pUrb->hcpriv=%p\n", pUrb,
-+ decode_urb_protocol(pUrb), pUrb->hcpriv);
++ DBG(-1, "<== Unlinking pUrb=%p (%s), pUrb->hcpriv=%p\n", pUrb,
++ decode_urb_protocol(pUrb), pUrb->hcpriv);
+ spin_lock(&pQueue->urb_queue_lock);
+ pEnd=mgc_ep_find_end(pThis, pUrb);
+ if ( pEnd ) { /* was submitted */
@@ -194804,20 +195118,20 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ struct urb* prev;
+ prev=mgc_hcd_urb_find_prev(pQueue, pUrb);
+ if ( prev==NULL ) { /* not mine! */
-+ ERR("*** cannot find pUrb=%p: is not mine! this is bad (tm)\n",
++ ERR("*** cannot find pUrb=%p: is not mine! this is bad (tm)\n",
+ pUrb);
+ } else if ( prev==pUrb ) { /* list head */
+ pQueue->urb_queue_head=prev->hcpriv;
+ if ( pQueue->urb_queue_tail==prev ) {
-+ pQueue->urb_queue_tail=prev->hcpriv;
++ pQueue->urb_queue_tail=prev->hcpriv;
+ }
+ } else {
+ prev->hcpriv=pUrb->hcpriv;
-+ }
-+ spin_unlock(&pQueue->urb_queue_lock);
++ }
++ spin_unlock(&pQueue->urb_queue_lock);
+ }
+
-+ DBG(2, "==> Unlinked urb=%p\n", pUrb);
++ DBG(2, "==> Unlinked urb=%p\n", pUrb);
+ return rc;
+}
+
@@ -194834,7 +195148,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ * Interrupt service routine, redirect it to the main routine/
+ * @param hcd the HCD driver
+ * @param r the pt registers
-+ * @return
++ * @return
+ */
+static irqreturn_t mgc_hcd_isr(struct usb_hcd *hcd)
+{
@@ -194845,26 +195159,26 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ * @param hcd the HCD driver
+ * @param ep the endpoint to disable
+ */
-+static void mgc_hcd_disable_endpoint(struct usb_hcd *hcd,
++static void mgc_hcd_disable_endpoint(struct usb_hcd *hcd,
+ struct usb_host_endpoint *ep)
+{
-+ DBG(-1, "hw sync with ep=%d (%s) list_empty(&ep->urb_list)=%d\n",
++ DBG(-1, "hw sync with ep=%d (%s) list_empty(&ep->urb_list)=%d\n",
+ 0x7f&ep->desc.bEndpointAddress, (ep->desc.bEndpointAddress==0) ? "in/out"
-+ : (ep->desc.bEndpointAddress>=0x80)?"in":"out",
++ : (ep->desc.bEndpointAddress>=0x80)?"in":"out",
+ list_empty(&ep->urb_list) );
-+
-+ DBG(2, "<== disable endpoint %d (%s)\n", 0x7f&ep->desc.bEndpointAddress,
++
++ DBG(2, "<== disable endpoint %d (%s)\n", 0x7f&ep->desc.bEndpointAddress,
+ (ep->desc.bEndpointAddress==0) ? "in/out"
-+ : (ep->desc.bEndpointAddress>=0x80)?"in":"out");
-+
-+ DBG(2, "==>disabled endpoint %d\n", 0x7f&ep->desc.bEndpointAddress);
++ : (ep->desc.bEndpointAddress>=0x80)?"in":"out");
++
++ DBG(2, "==>disabled endpoint %d\n", 0x7f&ep->desc.bEndpointAddress);
+}
+
+/* --------------------------------------------------------------- */
+/* Virtual hub */
+/* --------------------------------------------------------------- */
+
-+/**
++/**
+ * Report the virtual hub status.
+ *
+ * @param hcd the hcd
@@ -194876,18 +195190,18 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ MGC_VirtualHub* pHub = &(pThis->RootHub);
+ int len = 0;
+
-+ spin_lock(&pHub->Lock);
++ spin_lock(&pHub->Lock);
+ len = mgc_rh_port_status(pHub, pData);
-+ pHub->bIsChanged = FALSE;
-+ spin_unlock(&pHub->Lock);
-+ DBG(5, "len=%d, status=%02x\n", len, pData[0]);
++ pHub->bIsChanged = FALSE;
++ spin_unlock(&pHub->Lock);
++ DBG(5, "len=%d, status=%02x\n", len, pData[0]);
+ return len;
+}
+
+/** MGC_VirtualhubControl Instead of MGC_VirtualHubSubmitUrb
+ * @param hcd the HCD driver
+ */
-+static int mgc_root_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
++static int mgc_root_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
+ u16 wIndex, char *pData, u16 wLength)
+{
+ MGC_LinuxCd* pThis = hcd_to_musbstruct(hcd);
@@ -194896,12 +195210,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ uint16_t wSize = 0xffff;
+ int retval = 0;
+ int ports = (pHub->bPortCount + 1);
-+
-+ DBG("<==\n");
++
++ DBG("<==\n");
+ DBG("Setup_Data: bmReqtype-bmRequest=%04x | wValue=%x | wIndex=%x | wLength=%04x \n", \
-+ typeReq, wValue, wIndex, wLength);
++ typeReq, wValue, wIndex, wLength);
+ DBG("Setup_Data: wValue=%04x | wIndex=%04x | wLength=%04x | \n", \
-+ wValue, wIndex, wLength);
++ wValue, wIndex, wLength);
+
+ switch (typeReq) {
+ case ClearHubFeature:
@@ -194920,42 +195234,42 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ wIndex--;
+ switch (wValue) {
+ case USB_PORT_FEAT_ENABLE:
-+ DBG("enable port %d\n", bPort);
++ DBG("enable port %d\n", bPort);
+ pHub->pPortServices->pfSetPortEnable(
+ pHub->pPortServices->pPrivateData, bPort, FALSE);
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_C_ENABLE:
-+ DBG("ack enable port %d\n", bPort);
++ DBG("ack enable port %d\n", bPort);
+ pHub->aPortStatusChange[bPort].wChange &= ~USB_PORT_STAT_ENABLE;
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_SUSPEND:
-+ DBG("suspend port %d\n", bPort);
++ DBG("suspend port %d\n", bPort);
+ pHub->pPortServices->pfSetPortSuspend(
+ pHub->pPortServices->pPrivateData, bPort, FALSE);
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_C_SUSPEND:
-+ DBG("ack suspend port %d\n", bPort);
++ DBG("ack suspend port %d\n", bPort);
+ pHub->aPortStatusChange[bPort].wChange &= ~USB_PORT_STAT_SUSPEND;
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_POWER:
-+ DBG("feat feat power port %d\n", bPort);
++ DBG("feat feat power port %d\n", bPort);
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_C_CONNECTION:
-+ DBG("ack connection port %d\n", bPort);
++ DBG("ack connection port %d\n", bPort);
+ pHub->aPortStatusChange[bPort].wChange &= ~1;
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_C_OVER_CURRENT:
-+ DBG("ack over current port %d\n", bPort);
++ DBG("ack over current port %d\n", bPort);
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_C_RESET:
-+ DBG("ack reset port %d\n", bPort);
++ DBG("ack reset port %d\n", bPort);
+ pHub->aPortStatusChange[bPort].wChange &= ~USB_PORT_STAT_RESET;
+ wSize = 0;
+ break;
@@ -194985,8 +195299,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ /* hub status */
+ memset(pData, 0, 4);
+ wSize = 4;
-+ DBG("hub statusreport=%02x%02x%02x%02x\n",
-+ pData[0], pData[1], pData[2], pData[3]);
++ DBG("hub statusreport=%02x%02x%02x%02x\n",
++ pData[0], pData[1], pData[2], pData[3]);
+ break;
+ case GetPortStatus:
+ if (!wIndex || wIndex > ports)
@@ -194997,8 +195311,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ /* reset change (TODO: lock) */
+ pHub->aPortStatusChange[wIndex-1].wChange = 0;
+ wSize = 4;
-+ DBG("port status report=%02x%02x%02x%02x\n",
-+ pData[0], pData[1], pData[2], pData[3]);
++ DBG("port status report=%02x%02x%02x%02x\n",
++ pData[0], pData[1], pData[2], pData[3]);
+ break;
+
+ case SetHubFeature:
@@ -195015,7 +195329,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ goto error;
+ switch (wValue) {
+ case USB_PORT_FEAT_SUSPEND:
-+ DBG("suspend port %d\n", bPort);
++ DBG("suspend port %d\n", bPort);
+ pHub->pPortServices->pfSetPortSuspend(
+ pHub->pPortServices->pPrivateData, bPort, TRUE);
+ pHub->aPortStatusChange[bPort].wStatus |= USB_PORT_STAT_SUSPEND;
@@ -195023,8 +195337,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_POWER:
-+ DBG("power port %d\n", bPort);
-+
++ DBG("power port %d\n", bPort);
++
+ #if 1
+ {
+ int err;
@@ -195034,13 +195348,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ err = STMPE2401_SetGpioDir( STMPE1,EGPIO_PIN_0,STMPE2401_GPIO_OUT );
+ if (err != STMPE2401_OK)
+ DBG("Couldn't set STMPE EGPIO:%d in Output direction\n", EGPIO_PIN_0);
-+ err = STMPE2401_SetGpioVal( STMPE1, EGPIO_PIN_0, 0);
++ err = STMPE2401_SetGpioVal( STMPE1, EGPIO_PIN_0, 0);
+ if (err != STMPE2401_OK)
+ DBG("Couldn't set STMPE GPIO12\n");
+
+ }
+ #endif
-+ pHub->pPortServices->pfSetPortPower(pHub->pPortServices->pPrivateData,
++ pHub->pPortServices->pfSetPortPower(pHub->pPortServices->pPrivateData,
+ bPort,TRUE);
+ pHub->aPortStatusChange[bPort].wStatus |= USB_PORT_STAT_POWER;
+ wSize = 0;
@@ -195048,12 +195362,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ break;
+ case USB_PORT_FEAT_RESET:
+ DBG("USB_Class set feature USB_PORT_FEAT_RESET Port_no:%d \n",
-+ bPort);
++ bPort);
+ pHub->aPortStatusChange[bPort].wStatus |= USB_PORT_STAT_RESET;
+ pHub->aPortStatusChange[bPort].wStatus |= USB_PORT_STAT_ENABLE;
+ pHub->aPortStatusChange[bPort].wChange |= USB_PORT_STAT_RESET;
+ pHub->bIsChanged = TRUE;
-+
++
+ pHub->pPortServices->pfSetPortReset(
+ pHub->pPortServices->pPrivateData, bPort, TRUE);
+ wSize = 0;
@@ -195069,331 +195383,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_hcd.c ../new/linux-2.6.20/dri
+ retval = -EPIPE;
+ }
+
-+ DBG("==> retval=%d\n", retval);
++ DBG("==> retval=%d\n", retval);
+ return retval;
+}
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musbhdrc.h ../new/linux-2.6.20/drivers/usb/nomadik/musbhdrc.h
---- linux-2.6.20/drivers/usb/nomadik/musbhdrc.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musbhdrc.h 2008-08-08 19:15:31.000000000 +0530
-@@ -0,0 +1,315 @@
-+/*
-+ * linux/drivers/usb/nomadik/musbhdrc.h
-+ *
-+ * Copyright 2007, STMicroelectronics
-+ *
-+ * 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 __MUSB_HDRC_DEFS_H__
-+#define __MUSB_HDRC_DEFS_H__
-+
-+/*
-+ * HDRC-specific definitions
-+ * $Revision: 1.8 $
-+ */
-+
-+#define MGC_MAX_USB_ENDS 16
-+
-+#define MGC_END0_FIFOSIZE 64 /* this is non-configurable */
-+
-+/*
-+ * MUSBMHDRC Register map
-+ */
-+
-+/* Common USB registers */
-+
-+#define MGC_O_HDRC_FADDR 0x00 /* 8-bit */
-+#define MGC_O_HDRC_POWER 0x01 /* 8-bit */
-+
-+#define MGC_O_HDRC_INTRTX 0x02 /* 16-bit */
-+#define MGC_O_HDRC_INTRRX 0x04
-+#define MGC_O_HDRC_INTRTXE 0x06
-+#define MGC_O_HDRC_INTRRXE 0x08
-+#define MGC_O_HDRC_INTRUSB 0x0A /* 8 bit */
-+#define MGC_O_HDRC_INTRUSBE 0x0B /* 8 bit */
-+#define MGC_O_HDRC_FRAME 0x0C
-+#define MGC_O_HDRC_INDEX 0x0E /* 8 bit */
-+#define MGC_O_HDRC_TESTMODE 0x0F /* 8 bit */
-+
-+/* Get offset for a given FIFO */
-+#define MGC_FIFO_OFFSET(_bEnd) (0x20 + (_bEnd * 4))
-+
-+/* Additional Control Registers */
-+
-+#define MGC_O_HDRC_DEVCTL 0x60 /* 8 bit */
-+
-+/* These are actually indexed: */
-+#define MGC_O_HDRC_TXFIFOSZ 0x62 /* 8-bit (see masks) */
-+#define MGC_O_HDRC_RXFIFOSZ 0x63 /* 8-bit (see masks) */
-+#define MGC_O_HDRC_TXFIFOADD 0x64 /* 16-bit offset shifted right 3 */
-+#define MGC_O_HDRC_RXFIFOADD 0x66 /* 16-bit offset shifted right 3 */
-+
-+#define MGC_O_HDRC_TOPCONTROL 0x204 /* top control register 16-bit */
-+
-+/* offsets to registers in flat model */
-+#define MGC_O_HDRC_TXMAXP 0x00
-+#define MGC_O_HDRC_TXCSR 0x02
-+#define MGC_O_HDRC_CSR0 MGC_O_HDRC_TXCSR /* re-used for EP0 */
-+#define MGC_O_HDRC_RXMAXP 0x04
-+#define MGC_O_HDRC_RXCSR 0x06
-+#define MGC_O_HDRC_RXCOUNT 0x08
-+#define MGC_O_HDRC_COUNT0 MGC_O_HDRC_RXCOUNT /* re-used for EP0 */
-+#define MGC_O_HDRC_TXTYPE 0x0A
-+#define MGC_O_HDRC_TYPE0 MGC_O_HDRC_TXTYPE /* re-used for EP0 */
-+#define MGC_O_HDRC_TXINTERVAL 0x0B
-+#define MGC_O_HDRC_NAKLIMIT0 MGC_O_HDRC_TXINTERVAL /* re-used for EP0 */
-+#define MGC_O_HDRC_RXTYPE 0x0C
-+#define MGC_O_HDRC_RXINTERVAL 0x0D
-+#define MGC_O_HDRC_FIFOSIZE 0x0F
-+#define MGC_O_HDRC_CONFIGDATA MGC_O_HDRC_FIFOSIZE /* re-used for EP0 */
-+
-+#define MGC_END_OFFSET(_bEnd, _bOffset) (0x100 + (0x10*_bEnd) + _bOffset)
-+
-+/* "bus control" registers */
-+#define MGC_O_HDRC_TXFUNCADDR 0x00
-+#define MGC_O_HDRC_TXHUBADDR 0x02
-+#define MGC_O_HDRC_TXHUBPORT 0x03
-+
-+#define MGC_O_HDRC_RXFUNCADDR 0x04
-+#define MGC_O_HDRC_RXHUBADDR 0x06
-+#define MGC_O_HDRC_RXHUBPORT 0x07
-+
-+#define MGC_BUSCTL_OFFSET(_bEnd, _bOffset) (0x80 + (8*_bEnd) + _bOffset)
-+
-+/*
-+ * MUSBHDRC Register bit masks
-+ */
-+
-+/* POWER */
-+
-+#define MGC_M_POWER_ISOUPDATE 0x80
-+#define MGC_M_POWER_SOFTCONN 0x40
-+#define MGC_M_POWER_HSENAB 0x20
-+#define MGC_M_POWER_HSMODE 0x10
-+#define MGC_M_POWER_RESET 0x08
-+#define MGC_M_POWER_RESUME 0x04
-+#define MGC_M_POWER_SUSPENDM 0x02
-+#define MGC_M_POWER_ENSUSPEND 0x01
-+
-+/* INTRUSB */
-+#define MGC_M_INTR_SUSPEND 0x01
-+#define MGC_M_INTR_RESUME 0x02
-+#define MGC_M_INTR_RESET 0x04
-+#define MGC_M_INTR_BABBLE 0x04
-+#define MGC_M_INTR_SOF 0x08
-+#define MGC_M_INTR_CONNECT 0x10
-+#define MGC_M_INTR_DISCONNECT 0x20
-+#define MGC_M_INTR_SESSREQ 0x40
-+#define MGC_M_INTR_VBUSERROR 0x80 /* FOR SESSION END */
-+#define MGC_M_INTR_EP0 0x01 /* FOR EP0 INTERRUPT */
-+
-+/* DEVCTL */
-+#define MGC_M_DEVCTL_BDEVICE 0x80
-+#define MGC_M_DEVCTL_FSDEV 0x40
-+#define MGC_M_DEVCTL_LSDEV 0x20
-+#define MGC_M_DEVCTL_VBUS 0x18
-+#define MGC_S_DEVCTL_VBUS 3
-+#define MGC_M_DEVCTL_HM 0x04
-+#define MGC_M_DEVCTL_HR 0x02
-+#define MGC_M_DEVCTL_SESSION 0x01
-+
-+/* TESTMODE */
-+
-+#define MGC_M_TEST_FORCE_HOST 0x80
-+#define MGC_M_TEST_FIFO_ACCESS 0x40
-+#define MGC_M_TEST_FORCE_FS 0x20
-+#define MGC_M_TEST_FORCE_HS 0x10
-+#define MGC_M_TEST_PACKET 0x08
-+#define MGC_M_TEST_K 0x04
-+#define MGC_M_TEST_J 0x02
-+#define MGC_M_TEST_SE0_NAK 0x01
-+
-+/* allocate for double-packet buffering (effectively doubles assigned _SIZE) */
-+#define MGC_M_FIFOSZ_DPB 0x10
-+/* allocation size (8, 16, 32, ... 4096) */
-+#define MGC_M_FIFOSZ_SIZE 0x0f
-+
-+/* CSR0 */
-+#define MGC_M_CSR0_FLUSHFIFO 0x0100
-+#define MGC_M_CSR0_TXPKTRDY 0x0002
-+#define MGC_M_CSR0_RXPKTRDY 0x0001
-+
-+/* CSR0 in Peripheral mode */
-+#define MGC_M_CSR0_P_SVDSETUPEND 0x0080
-+#define MGC_M_CSR0_P_SVDRXPKTRDY 0x0040
-+#define MGC_M_CSR0_P_SENDSTALL 0x0020
-+#define MGC_M_CSR0_P_SETUPEND 0x0010
-+#define MGC_M_CSR0_P_DATAEND 0x0008
-+#define MGC_M_CSR0_P_SENTSTALL 0x0004
-+
-+/* CSR0 in Host mode */
-+#define MGC_M_CSR0_H_NO_PING 0x0800
-+#define MGC_M_CSR0_H_WR_DATATOGGLE 0x0400 /* set to allow setting: */
-+#define MGC_M_CSR0_H_DATATOGGLE 0x0200 /* data toggle control */
-+#define MGC_M_CSR0_H_NAKTIMEOUT 0x0080
-+#define MGC_M_CSR0_H_STATUSPKT 0x0040
-+#define MGC_M_CSR0_H_REQPKT 0x0020
-+#define MGC_M_CSR0_H_ERROR 0x0010
-+#define MGC_M_CSR0_H_SETUPPKT 0x0008
-+#define MGC_M_CSR0_H_RXSTALL 0x0004
-+
-+/* TxType/RxType */
-+#define MGC_M_TYPE_SPEED 0xc0
-+#define MGC_S_TYPE_SPEED 6
-+#define MGC_TYPE_SPEED_HIGH 1
-+#define MGC_TYPE_SPEED_FULL 2
-+#define MGC_TYPE_SPEED_LOW 3
-+#define MGC_M_TYPE_PROTO 0x30
-+#define MGC_S_TYPE_PROTO 4
-+#define MGC_M_TYPE_REMOTE_END 0xf
-+
-+/* CONFIGDATA */
-+
-+#define MGC_M_CONFIGDATA_MPRXE 0x80 /* auto bulk pkt combining */
-+#define MGC_M_CONFIGDATA_MPTXE 0x40 /* auto bulk pkt splitting */
-+#define MGC_M_CONFIGDATA_BIGENDIAN 0x20
-+#define MGC_M_CONFIGDATA_HBRXE 0x10 /* HB-ISO for RX */
-+#define MGC_M_CONFIGDATA_HBTXE 0x08 /* HB-ISO for TX */
-+#define MGC_M_CONFIGDATA_DYNFIFO 0x04 /* dynamic FIFO sizing */
-+#define MGC_M_CONFIGDATA_SOFTCONE 0x02 /* SoftConnect */
-+#define MGC_M_CONFIGDATA_UTMIDW 0x01 /* data width 0 => 8bits, 1 => 16bits */
-+
-+/* TXCSR in Peripheral and Host mode */
-+
-+#define MGC_M_TXCSR_AUTOSET 0x8000
-+#define MGC_M_TXCSR_ISO 0x4000
-+#define MGC_M_TXCSR_MODE 0x2000
-+#define MGC_M_TXCSR_DMAENAB 0x1000
-+#define MGC_M_TXCSR_FRCDATATOG 0x0800
-+#define MGC_M_TXCSR_DMAMODE 0x0400
-+#define MGC_M_TXCSR_CLRDATATOG 0x0040
-+#define MGC_M_TXCSR_FLUSHFIFO 0x0008
-+#define MGC_M_TXCSR_FIFONOTEMPTY 0x0002
-+#define MGC_M_TXCSR_TXPKTRDY 0x0001
-+
-+/* TXCSR in Peripheral mode */
-+
-+#define MGC_M_TXCSR_P_INCOMPTX 0x0080
-+#define MGC_M_TXCSR_P_SENTSTALL 0x0020
-+#define MGC_M_TXCSR_P_SENDSTALL 0x0010
-+#define MGC_M_TXCSR_P_UNDERRUN 0x0004
-+
-+/* TXCSR in Host mode */
-+
-+#define MGC_M_TXCSR_H_WR_DATATOGGLE 0x0200
-+#define MGC_M_TXCSR_H_DATATOGGLE 0x0100
-+#define MGC_M_TXCSR_H_NAKTIMEOUT 0x0080
-+#define MGC_M_TXCSR_H_RXSTALL 0x0020
-+#define MGC_M_TXCSR_H_ERROR 0x0004
-+
-+/* RXCSR in Peripheral and Host mode */
-+
-+#define MGC_M_RXCSR_AUTOCLEAR 0x8000
-+#define MGC_M_RXCSR_DMAENAB 0x2000
-+#define MGC_M_RXCSR_DISNYET 0x1000
-+#define MGC_M_RXCSR_DMAMODE 0x0800
-+#define MGC_M_RXCSR_INCOMPRX 0x0100
-+#define MGC_M_RXCSR_CLRDATATOG 0x0080
-+#define MGC_M_RXCSR_FLUSHFIFO 0x0010
-+#define MGC_M_RXCSR_DATAERROR 0x0008
-+#define MGC_M_RXCSR_FIFOFULL 0x0002
-+#define MGC_M_RXCSR_RXPKTRDY 0x0001
-+
-+/* RXCSR in Peripheral mode */
-+
-+#define MGC_M_RXCSR_P_ISO 0x4000
-+#define MGC_M_RXCSR_P_SENTSTALL 0x0040
-+#define MGC_M_RXCSR_P_SENDSTALL 0x0020
-+#define MGC_M_RXCSR_P_OVERRUN 0x0004
-+
-+/* RXCSR in Host mode */
-+
-+#define MGC_M_RXCSR_H_AUTOREQ 0x4000
-+#define MGC_M_RXCSR_H_WR_DATATOGGLE 0x0400
-+#define MGC_M_RXCSR_H_DATATOGGLE 0x0200
-+#define MGC_M_RXCSR_H_RXSTALL 0x0040
-+#define MGC_M_RXCSR_H_REQPKT 0x0020
-+#define MGC_M_RXCSR_H_ERROR 0x0004
-+
-+/* HUBADDR */
-+#define MGC_M_HUBADDR_MULTI_TT 0x80
-+
-+
-+/* TXCSR in Peripheral and Host mode */
-+
-+#define MGC_M_TXCSR2_AUTOSET 0x80
-+#define MGC_M_TXCSR2_ISO 0x40
-+#define MGC_M_TXCSR2_MODE 0x20
-+#define MGC_M_TXCSR2_DMAENAB 0x10
-+#define MGC_M_TXCSR2_FRCDATATOG 0x08
-+#define MGC_M_TXCSR2_DMAMODE 0x04
-+
-+#define MGC_M_TXCSR1_CLRDATATOG 0x40
-+#define MGC_M_TXCSR1_FLUSHFIFO 0x08
-+#define MGC_M_TXCSR1_FIFONOTEMPTY 0x02
-+#define MGC_M_TXCSR1_TXPKTRDY 0x01
-+
-+/* TXCSR in Peripheral mode */
-+
-+#define MGC_M_TXCSR1_P_INCOMPTX 0x80
-+#define MGC_M_TXCSR1_P_SENTSTALL 0x20
-+#define MGC_M_TXCSR1_P_SENDSTALL 0x10
-+#define MGC_M_TXCSR1_P_UNDERRUN 0x04
-+
-+/* TXCSR in Host mode */
-+
-+#define MGC_M_TXCSR1_H_NAKTIMEOUT 0x80
-+#define MGC_M_TXCSR1_H_RXSTALL 0x20
-+#define MGC_M_TXCSR1_H_ERROR 0x04
-+
-+/* RXCSR in Peripheral and Host mode */
-+
-+#define MGC_M_RXCSR2_AUTOCLEAR 0x80
-+#define MGC_M_RXCSR2_DMAENAB 0x20
-+#define MGC_M_RXCSR2_DISNYET 0x10
-+#define MGC_M_RXCSR2_DMAMODE 0x08
-+#define MGC_M_RXCSR2_INCOMPRX 0x01
-+
-+#define MGC_M_RXCSR1_CLRDATATOG 0x80
-+#define MGC_M_RXCSR1_FLUSHFIFO 0x10
-+#define MGC_M_RXCSR1_DATAERROR 0x08
-+#define MGC_M_RXCSR1_FIFOFULL 0x02
-+#define MGC_M_RXCSR1_RXPKTRDY 0x01
-+
-+/* RXCSR in Peripheral mode */
-+
-+#define MGC_M_RXCSR2_P_ISO 0x40
-+#define MGC_M_RXCSR1_P_SENTSTALL 0x40
-+#define MGC_M_RXCSR1_P_SENDSTALL 0x20
-+#define MGC_M_RXCSR1_P_OVERRUN 0x04
-+
-+/* RXCSR in Host mode */
-+
-+#define MGC_M_RXCSR2_H_AUTOREQ 0x40
-+#define MGC_M_RXCSR1_H_RXSTALL 0x40
-+#define MGC_M_RXCSR1_H_REQPKT 0x20
-+#define MGC_M_RXCSR1_H_ERROR 0x04
-+
-+/* Top control register */
-+#define MGC_M_TOPCTRL_MODE_ULPI 0x09
-+#define MGC_M_TOPCTRL_MODE_SRST 0x04
-+
-+#endif /* multiple inclusion protection */
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/drivers/usb/nomadik/musb_host.c
---- linux-2.6.20/drivers/usb/nomadik/musb_host.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_host.c 2008-08-08 19:15:25.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_host.c
@@ -0,0 +1,2791 @@
+/*
+ * linux/drivers/usb/nomadik/musb_host.c
@@ -195412,7 +195406,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <linux/module.h>
@@ -195428,7 +195422,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+#include <asm/uaccess.h>
+
+#ifdef CONFIG_USB_DEBUG
-+ #define DEBUG
++ #define DEBUG
+#else
+ #undef DEBUG
+#endif
@@ -195457,7 +195451,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+int *Urb_test;
+extern int Urb_status;
+/**************************************************************************
-+ *
++ *
+ **************************************************************************/
+
+#ifndef MGC_SLOW_DEVICE_KLUDGE_DELAY
@@ -195473,7 +195467,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+
+int mgc_slow_device_kludge_delay=MGC_SLOW_DEVICE_KLUDGE_DELAY;
+
-+#define MGC_SLOW_DEVICE_KLUDGE_DELAY_INCREASE { }
++#define MGC_SLOW_DEVICE_KLUDGE_DELAY_INCREASE { }
+#define MGC_SLOW_DEVICE_KLUDGE_DELAY_DECREASE { }
+#define MGC_SLOW_DEVICE_KLUDGE_DELAY_TOP { }
+
@@ -195489,14 +195483,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ */
+char* decode_hst_ep_protocol(MGC_LinuxCd* pThis, unsigned bEnd) {
+ char* pProto = "Err ";
-+
++
+ switch(pThis->aLocalEnd[bEnd].bTrafficType) {
+ case PIPE_ISOCHRONOUS: pProto = "Isoc"; break;
+ case PIPE_INTERRUPT: pProto = "Intr"; break;
+ case PIPE_CONTROL: pProto = "Ctrl"; break;
+ case PIPE_BULK: pProto = "Bulk"; break;
+ }
-+
++
+ return pProto;
+}
+#endif
@@ -195508,31 +195502,31 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ */
+char* decode_urb_protocol(struct urb* pUrb) {
+ static char buffer[8];
-+
++
+ if ( !pUrb ) {
+ strcpy(&buffer[0], "NULL");
+ return buffer;
+ }
-+
++
+ buffer[0]=usb_pipein(pUrb->pipe)?'I':'O';
+ if ( usb_pipeint(pUrb->pipe) ) {
+ strcpy(&buffer[1], " int");
+ } else if ( usb_pipeisoc(pUrb->pipe) ) {
-+ strcpy(&buffer[1], " isoc");
++ strcpy(&buffer[1], " isoc");
+ } else if ( usb_pipebulk(pUrb->pipe) ) {
-+ strcpy(&buffer[1], " bulk");
++ strcpy(&buffer[1], " bulk");
+ } else if ( usb_pipecontrol(pUrb->pipe) ) {
-+ strcpy(&buffer[0], " ctl");
++ strcpy(&buffer[0], " ctl");
+ }
-+
-+ return buffer;
++
++ return buffer;
+}
+
+/* Root speed need to be translated (addapted)
+ */
+static uint8_t MGC_TranslateVirtualHubSpeed(uint8_t source) {
+ uint8_t speed=2;
-+
++
+ switch ( source ) {
+ case 3: speed=0; break;
+ case 2: speed=1; break;
@@ -195550,11 +195544,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ MGC_LinuxCd* pThis = (MGC_LinuxCd*)param;
+ void* pBase = pThis->pRegs;
+ unsigned long flags;
-+
++
+ DBG(2, "<== Stopping root port reset...\n");
-+
-+ SPIN_LOCK_IRQSAVE(&pThis->Lock, flags);
-+ pThis->bIgnoreDisconnect = FALSE;
++
++ SPIN_LOCK_IRQSAVE(&pThis->Lock, flags);
++ pThis->bIgnoreDisconnect = FALSE;
+ power = MGC_Read8(pBase, MGC_O_HDRC_POWER);
+ MGC_Write8(pBase, MGC_O_HDRC_POWER, power & ~MGC_M_POWER_RESET);
+
@@ -195566,7 +195560,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ }
+
+#ifdef MUSB_VIRTHUB
-+ MGC_VirtualHubPortResetDone(&(pThis->RootHub), 0,
++ MGC_VirtualHubPortResetDone(&(pThis->RootHub), 0,
+ MGC_TranslateVirtualHubSpeed(pThis->bRootSpeed));
+#endif
+
@@ -195592,14 +195586,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+/* see virthub.h */
+void MGC_LinuxSetPortEnable(void* pPrivateData, uint8_t bPortIndex,
+ uint8_t bEnable)
-+{
++{
+ DBG(2, "<==\n");
+ if (bEnable) {
+ DBG(3, "Root port power enabled\n");
+ } else {
+ DBG(3, "Root port power disabled\n");
+ }
-+
++
+ DBG(2, "==>\n");
+}
+
@@ -195611,7 +195605,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ MGC_LinuxCd* pThis = (MGC_LinuxCd*)pPrivateData;
+ void* pBase = pThis->pRegs;
+
-+ DBG(2, "<==\n");
++ DBG(2, "<==\n");
+
+ power = MGC_Read8(pBase, MGC_O_HDRC_POWER);
+ if(bSuspend) {
@@ -195624,7 +195618,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ WAIT_MS(20);
+ MGC_Write8(pBase, MGC_O_HDRC_POWER, power);
+ }
-+
++
+ DBG(2, "==>\n");
+}
+
@@ -195635,7 +195629,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ uint8_t power;
+ MGC_LinuxCd* pThis = (MGC_LinuxCd*)pPrivateData;
+ void* pBase = pThis->pRegs;
-+
++
+ DBG(2, "<==\n");
+
+ power = MGC_Read8(pBase, MGC_O_HDRC_POWER) & 0xf0;
@@ -195652,31 +195646,31 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+}
+
+/**************************************************************************
-+ *
++ *
+ **************************************************************************/
+
+ /**
-+ * return the current urb for a given endpoint. Caller is responsible for
++ * return the current urb for a given endpoint. Caller is responsible for
+ * locking
+ * @param pEnd the end point (pEnd!=NULL)
+ * @return the urb or NULL when the end point is idle
+ */
-+struct urb* MGC_GetCurrentUrb(MGC_LinuxLocalEnd *pEnd) {
-+#ifdef MUSB_USE_HCD_DRIVER
++struct urb* MGC_GetCurrentUrb(MGC_LinuxLocalEnd *pEnd) {
++#ifdef MUSB_USE_HCD_DRIVER
+ return pEnd->pCurrentUrb;
+#else
+ DBG(8 ,"GetCurrentUrb urb_list_ptr:0x%p \n",&(pEnd->urb_list));
+ DBG(8 ,"GetCurrentUrb urb_list->next:0x%p \n",pEnd->urb_list.next);
-+ DBG(8 ,"GetCurrentUrb urb_list->prev:0x%p \n",pEnd->urb_list.prev);
-+ return list_empty(&(pEnd->urb_list)) ? NULL
++ DBG(8 ,"GetCurrentUrb urb_list->prev:0x%p \n",pEnd->urb_list.prev);
++ return list_empty(&(pEnd->urb_list)) ? NULL
+ : list_entry(pEnd->urb_list.next, struct urb, urb_list);
-+#endif
++#endif
+}
+
+/**
+ * Test whether a local endpoint is idle.
+ * @param pEnd the endpoint
-+ * @return !=0 when idle, 0 otherwise
++ * @return !=0 when idle, 0 otherwise
+ */
+int mgc_ep_is_idle(MGC_LinuxLocalEnd* pEnd)
+{
@@ -195684,7 +195678,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ return (pEnd->pCurrentUrb)==NULL;
+#else
+ return list_empty(&pEnd->urb_list);
-+#endif
++#endif
+}
+
+
@@ -195693,7 +195687,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ pEnd->pCurrentUrb=NULL;
+#else
+ INIT_LIST_HEAD(&(pEnd->urb_list));
-+#endif
++#endif
+}
+
+
@@ -195702,17 +195696,17 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ * @param pEnd the endpoint
+ * @param pUrb the urb to be removed
+ */
-+static int mgc_ep_dequeue_urb(MGC_LinuxLocalEnd* pEnd, struct urb *pUrb,MGC_LinuxCd* pThis)
++static int mgc_ep_dequeue_urb(MGC_LinuxLocalEnd* pEnd, struct urb *pUrb,MGC_LinuxCd* pThis)
+{
+ int rc=0;
+
+#ifdef MUSB_USE_HCD_DRIVER
+ if ( pEnd->pCurrentUrb==pUrb ) {
+ pUrb->hcpriv=NULL;
-+ pEnd->pCurrentUrb=NULL;
++ pEnd->pCurrentUrb=NULL;
+ } else {
+ rc=-EINVAL;
-+ ERR("*** Trying to dequeue pUrb=%p from ep%d while pEnd->pCurrentUrb=%p\n",
++ ERR("*** Trying to dequeue pUrb=%p from ep%d while pEnd->pCurrentUrb=%p\n",
+ pUrb, pEnd->bEnd, pEnd->pCurrentUrb);
+ }
+#else
@@ -195723,18 +195717,18 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ /* clear endpoint status (preserving the softstate for find_end() ) */
+ mgc_ep_linux_clear(pEnd,pThis);
+
-+ DBG(1, "==> dequeued pUrb=%p from pEnd->bEnd=%d rc=%d\n",
++ DBG(1, "==> dequeued pUrb=%p from pEnd->bEnd=%d rc=%d\n",
+ pUrb, pEnd->bEnd, rc);
+ return rc=0;
-+}
++}
+
+/**
+ * @return 0 success, != when the ep is busy with another request
+ */
-+static int mgc_ep_enqueue_urb(MGC_LinuxLocalEnd* pEnd, struct urb* pUrb)
++static int mgc_ep_enqueue_urb(MGC_LinuxLocalEnd* pEnd, struct urb* pUrb)
+{
+ int rc=0;
-+
++
+#ifdef MUSB_USE_HCD_DRIVER
+ if ( pEnd->pCurrentUrb ) {
+ ERR("*** urb=%p, ep=%d wile busy with urb=%p, this is BAD (tm)\n",
@@ -195752,27 +195746,27 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+
+/**
+ * find the end an urb is posted to
-+ * @param pUrb
++ * @param pUrb
+ * @return the pEnd or NULL when not found.
+ */
-+MGC_LinuxLocalEnd* mgc_ep_find_end(MGC_LinuxCd *pThis, struct urb *pUrb)
++MGC_LinuxLocalEnd* mgc_ep_find_end(MGC_LinuxCd *pThis, struct urb *pUrb)
+{
+ int bEnd=0;
-+
++
+ for (bEnd=0; bEnd<MUSB_C_NUM_EPS-1; bEnd++) {
+ if ( MGC_GetCurrentUrb(&pThis->aLocalEnd[bEnd])==pUrb ) {
+ return &pThis->aLocalEnd[bEnd];
+ }
+ }
-+
++
+ return NULL;
+}
+
+/**************************************************************************
-+ *
++ *
+ **************************************************************************/
+
-+void mgc_complete_urb(MGC_LinuxCd *pThis, struct urb *pUrb) {
++void mgc_complete_urb(MGC_LinuxCd *pThis, struct urb *pUrb) {
+ /* give it back */
+ usb_put_urb(pUrb);
+ if (pUrb->status) {
@@ -195784,8 +195778,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+#else
+ if ( pUrb->complete ) {
+ COMPLETE_URB(pUrb, NULL);
-+ }
-+#endif
++ }
++#endif
+
+ if (pUrb->status) {
+ DBG(1, "done completing pUrb=%p\n", pUrb);
@@ -195793,27 +195787,27 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+}
+
+/**
-+ * complete an urb. Since urb completion generally post new urbs via
++ * complete an urb. Since urb completion generally post new urbs via
+ * submit urn, this make sure the ep won't kickstart it during the
-+ * completion.
++ * completion.
+ *
+ * @param pEnd the end point urb is posted to
+ * @param pUrb the urb to complete !=NULL
+ * @return 0 success
+ */
-+static inline int mgc_linux_complete_urb(MGC_LinuxCd *pThis,
-+ MGC_LinuxLocalEnd* pEnd, struct urb *pUrb)
++static inline int mgc_linux_complete_urb(MGC_LinuxCd *pThis,
++ MGC_LinuxLocalEnd* pEnd, struct urb *pUrb)
+{
-+
++
+ int periodic=mgc_urb_is_periodic(pUrb);
+ int status=periodic; /* 0 needs start next */
+ int error=(pUrb->status==-ENOENT) || (pUrb->status==-ECONNRESET) ||
+ (pUrb->status==-ESHUTDOWN) || (pUrb->status==-ETIMEDOUT)
+ || (pUrb->status==-EBUSY);
-+
-+ DBG(2, "<== completing URB %p, on pEnd->bEnd=%d status=%d, proto=%s\n",
++
++ DBG(2, "<== completing URB %p, on pEnd->bEnd=%d status=%d, proto=%s\n",
+ pUrb, pEnd->bEnd, pUrb->status, decode_urb_protocol(pUrb));
-+
++
+ if ( error && periodic ) {
+ pEnd->bIsClaimed=FALSE;
+ }
@@ -195822,20 +195816,20 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ pEnd->bBusyCompleting=1;
+
+ mgc_complete_urb(pThis, pUrb);
-+
-+#ifdef MUSB_V24
++
++#ifdef MUSB_V24
+ /* Under 2.4 interrupt IN URBs must be re-submitted from the driver
+ * unless they are unlinked; 2.6 urbs do that from the completition
+ * routine. ENODEV means we raced disconnect() */
-+ if ( !error && periodic ) {
-+ DBG(1, "periodic pUrb=%p, proto=%s, (status=%d)\n", pUrb,
-+ decode_urb_protovol(pUrb), pUrb->status);
++ if ( !error && periodic ) {
++ DBG(1, "periodic pUrb=%p, proto=%s, (status=%d)\n", pUrb,
++ decode_urb_protovol(pUrb), pUrb->status);
+ status=mgc_schedule_urb(pThis, pEnd, pUrb);
+ if ( (status!= 0) && (status != -ENODEV) ) {
-+ DBG(3, "error resubmitting intr URB %p (status=%d)\n",
++ DBG(3, "error resubmitting intr URB %p (status=%d)\n",
+ pUrb, status);
+ }
-+
++
+ }
+#else
+ status=0; /* kickstart next */
@@ -195847,7 +195841,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ DBG(2, "==> status=%d, periodic=%d\n", status, periodic);
+ return status;
+}
-+
++
+/**
+ * Start transmit. Caller is responsible for locking the ep.
+ * On EP0 only PING is disabled.
@@ -195862,19 +195856,19 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+
+ DBG(2, "<== bEnd=%d ==>\n", bEnd);
+ /* NOTE: no locks here; caller should lock */
-+ MGC_SelectEnd(pBase, bEnd);
++ MGC_SelectEnd(pBase, bEnd);
+ if(bEnd) {
+ wCsr = MGC_ReadCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd);
+ wCsr |= MGC_M_TXCSR_TXPKTRDY;
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd, wCsr);
+ } else {
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
+ MGC_M_CSR0_H_NO_PING | MGC_M_CSR0_H_SETUPPKT | MGC_M_CSR0_TXPKTRDY);
-+ }
++ }
+}
+
+/**************************************************************************
-+ *
++ *
+ **************************************************************************/
+
+ /**
@@ -195882,7 +195876,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ */
+static inline uint8_t* get_urb_buffer(struct urb* pUrb) {
+ uint8_t *pBuffer=NULL;
-+
++
+#ifdef MUSB_PARANOID
+ if ( !pUrb ) {
+ return NULL;
@@ -195898,9 +195892,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+
+ return pBuffer;
+}
-+
-+/**
-+ * Xmit a packet. pEnd->dwOffset is updated as well
++
++/**
++ * Xmit a packet. pEnd->dwOffset is updated as well
+ * @param pThis
+ * @param bEnd the EP urb is queued to
+ */
@@ -195916,15 +195910,15 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ DBG(2, "<== bEnd=%d\n", bEnd);
+
+ /* abort the transfer */
-+ if ( !pBuffer ) {
++ if ( !pBuffer ) {
+ ERR("***> no buffer was given, BAD things are happening (TM)!\n");
-+ return TRUE;
++ return TRUE;
+ }
+
+ /* see if more transactions are needed */
+#ifdef MUSB_DMA
+ if(pEnd->pDmaChannel) {
-+ if (MGC_DMA_STATUS_FREE ==
++ if (MGC_DMA_STATUS_FREE ==
+ pThis->pDmaController->pfDmaGetChannelStatus(pEnd->pDmaChannel)
+ ) {
+ pEnd->dwOffset += pEnd->pDmaChannel->dwActualLength;
@@ -195944,14 +195938,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ pBuffer += pUrb->iso_frame_desc[pEnd->dwIsoPacket].offset;
+ wLength = pUrb->iso_frame_desc[pEnd->dwIsoPacket].length;
+ }
-+ } else {
++ } else {
+ pBuffer += pEnd->dwOffset;
-+ wLength = min((uint32_t)(pEnd->wPacketSize),
++ wLength = min((uint32_t)(pEnd->wPacketSize),
+ (uint32_t)(pUrb->transfer_buffer_length - pEnd->dwOffset));
+ if(pEnd->dwOffset >= pUrb->transfer_buffer_length) {
+ /* sent everything; see if we need to send a null */
+ if(!((pEnd->dwRequestSize == pEnd->wPacketSize) &&
-+ (pUrb->transfer_flags & USB_ZERO_PACKET)))
++ (pUrb->transfer_flags & USB_ZERO_PACKET)))
+ {
+ bDone = TRUE;
+ }
@@ -195973,8 +195967,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ DBG(2, "==> bDone=%d\n", bDone);
+ return bDone;
+}
-+
-+
++
++
+/**
+ * Receive a packet (or part of it).
+ * @requires pThis->Lock locked
@@ -195994,35 +195988,35 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ uint8_t* pBuffer=get_urb_buffer(pUrb);
+ int nPipe = pUrb ? pUrb->pipe : 0;
+
-+ DBG(2, "<== end %d RxCount=%04x\n", bEnd, wRxCount);
++ DBG(2, "<== end %d RxCount=%04x\n", bEnd, wRxCount);
+
+#ifdef MUSB_PARANOID
+ if ( !pUrb || ((pUrb->transfer_buffer_length - pEnd->dwOffset)<0) ) {
+ ERR("***> Rx error: pUrb=%p, pUrb->transfer_buffer_length=%d pEnd->dwOffset=%d\n", \
+ pUrb, pUrb->transfer_buffer_length, pEnd->dwOffset );
+ return TRUE;
-+ }
++ }
+#endif
+
+ DBG(3, "bEnd=%d, pUrb->transfer_flags=0x%x pUrb->transfer_buffer=%p\n", \
-+ bEnd, pUrb->transfer_flags, pUrb->transfer_buffer);
-+ DBG(3, "pUrb->transfer_buffer_length=%d, pEnd->dwOffset=%d, wRxCount=%d\n",
-+ pUrb->transfer_buffer_length, pEnd->dwOffset, wRxCount);
-+
-+ /* abort the transfer */
-+ if ( !pBuffer ) {
++ bEnd, pUrb->transfer_flags, pUrb->transfer_buffer);
++ DBG(3, "pUrb->transfer_buffer_length=%d, pEnd->dwOffset=%d, wRxCount=%d\n",
++ pUrb->transfer_buffer_length, pEnd->dwOffset, wRxCount);
++
++ /* abort the transfer */
++ if ( !pBuffer ) {
+ ERR("***> pBuffer=NULL, BAD things are happening (TM)!\n");
-+ return TRUE;
++ return TRUE;
+ }
+
+ /* unload FIFO */
+ if( usb_pipeisoc(nPipe) ) {
+ /* isoch case */
+ pBuffer += pUrb->iso_frame_desc[pEnd->dwIsoPacket].offset;
-+ wLength = min((unsigned int)wRxCount,
++ wLength = min((unsigned int)wRxCount,
+ pUrb->iso_frame_desc[pEnd->dwIsoPacket].length);
+ pUrb->actual_length += wLength;
-+
++
+ /* update actual & status */
+ pUrb->iso_frame_desc[pEnd->dwIsoPacket].actual_length = wLength;
+ if(bIsochError) {
@@ -196031,31 +196025,31 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ } else {
+ pUrb->iso_frame_desc[pEnd->dwIsoPacket].status = USB_ST_NOERROR;
+ }
-+
++
+ /* see if we are done */
+ bDone = (++pEnd->dwIsoPacket >= pUrb->number_of_packets);
+
+ DBG(3, "pEnd->dwIsoPacket=%d, pUrb->number_of_packets=%d, wLength=%d\n",
-+ pEnd->dwIsoPacket, pUrb->number_of_packets, wLength);
++ pEnd->dwIsoPacket, pUrb->number_of_packets, wLength);
+ DEBUG_CODE(3, if ( bDone ) { \
+ INFO("completing %d-packet isoch URB; len=%x, errors=%d\n", \
+ pUrb->number_of_packets, pUrb->actual_length, pUrb->error_count); \
+ } );
+ } else {
-+ DBG(3, "(bEnd=%d), wRxCount=%d, pUrb->transfer_buffer_length=%d, pEnd->dwOffset=%d, pEnd->wPacketSize=%d\n",
-+ bEnd, wRxCount, pUrb->transfer_buffer_length, pEnd->dwOffset, pEnd->wPacketSize);
++ DBG(3, "(bEnd=%d), wRxCount=%d, pUrb->transfer_buffer_length=%d, pEnd->dwOffset=%d, pEnd->wPacketSize=%d\n",
++ bEnd, wRxCount, pUrb->transfer_buffer_length, pEnd->dwOffset, pEnd->wPacketSize);
+
+ /* non-isoch */
+ pBuffer += pEnd->dwOffset;
-+ wLength = min((unsigned int)wRxCount,
++ wLength = min((unsigned int)wRxCount,
+ pUrb->transfer_buffer_length - pEnd->dwOffset);
+ pUrb->actual_length += wLength;
+ pEnd->dwOffset += wLength;
-+
++
+ /* see if we are done */
+ bDone = (pEnd->dwOffset >= pUrb->transfer_buffer_length)
+ || (wRxCount < pEnd->wPacketSize);
-+
++
+ DEBUG_CODE(3, if ( bDone ) { \
+ INFO("will complete URB; pUrb=%p (%s) len=%x, errors=%d\n", \
+ pUrb, decode_urb_protocol(pUrb), pUrb->actual_length, \
@@ -196066,12 +196060,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ if ( wLength ) {
+ MGC_HdrcUnloadFifo(pBase, bEnd, wLength, pBuffer);
+ }
-+
++
+#ifdef MUSB_CONFIG_PROC_FS
+ pEnd->dwTotalRxBytes += wLength;
+ pEnd->dwTotalRxPackets++;
+#endif
-+
++
+ if( wRxCount <= wLength ) { /* test for short packet */
+ wCsr = MGC_ReadCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd);
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd,
@@ -196080,13 +196074,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ if ( bEnd && bDone ) {
+ pUrb->status=0;
+ }
-+
-+ DBG(2, "==> bDone=%d\n", bDone);
-+ return bDone;
++
++ DBG(2, "==> bDone=%d\n", bDone);
++ return bDone;
+}
+
+/* *************************************************************************
-+ *
++ *
+ **************************************************************************/
+
+/**
@@ -196105,7 +196099,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ }
+ nWork >>= 1;
+ }
-+
++
+ return bResult;
+}
+
@@ -196121,7 +196115,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ return "int";
+ } else {
+ return "cntl";
-+ }
++ }
+}
+
+/** Calculate the interval (or NAK limit for bulk) for isoc and
@@ -196132,48 +196126,48 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+static uint8_t hdrc_interval(struct urb* pUrb) {
+ const unsigned int nPipe = pUrb->pipe;
+ uint8_t bInterval = (uint8_t)pUrb->interval;
-+
-+ if( usb_pipeint(nPipe) ) {
++
++ if( usb_pipeint(nPipe) ) {
+ /* correct interval for high-speed */
+ if((USB_SPEED_HIGH == ((uint8_t)pUrb->dev->speed)) && (pUrb->interval > 255)) {
+ bInterval = find_first1(pUrb->interval);
-+ }
++ }
+ } else {
+ /* normalize value */
+ if(pUrb->interval > 16) {
+ bInterval = find_first1(pUrb->interval);
+ }
-+
++
+ if(usb_pipeisoc(nPipe) && (bInterval < 1)) {
+ bInterval = 1;
+ }
+
+ if( usb_pipebulk(nPipe) && (bInterval < 2)) {
+ /* this is the NACK time */
-+ bInterval = 0;/*16;*/
++ bInterval = 0;/*16;*/
+ }
-+ }
-+
++ }
++
+ DBG(2, "pipe_type=%s bInterval=%d\n", pipe_type(nPipe), bInterval);
-+
++
+ return bInterval;
+}
-+
++
+/**
+ * @param pUrb
+ */
+static inline uint8_t hdrc_type(struct urb* pUrb) {
+ uint8_t bStdType = 0;
+ const unsigned int nPipe = pUrb->pipe;
-+
++
+ if(usb_pipeisoc(nPipe)) {
+ bStdType = 1;
+ } else if(usb_pipeint(nPipe)) {
+ bStdType = 3;
-+ } else if( usb_pipebulk(nPipe) ) {
++ } else if( usb_pipebulk(nPipe) ) {
+ bStdType = 2;
+ }
-+
++
+ return bStdType;
+}
+
@@ -196184,8 +196178,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ * @param bEnd
+ * @param bXmt
+ */
-+static void hdrc_set_address(MGC_LinuxCd* pThis, struct urb* pUrb, uint8_t bEnd,
-+ unsigned int bXmt)
++static void hdrc_set_address(MGC_LinuxCd* pThis, struct urb* pUrb, uint8_t bEnd,
++ unsigned int bXmt)
+{
+#ifdef MUSB_LINUX_MV21
+ struct usb_device* pParent;
@@ -196196,7 +196190,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+
+
+ /* NOTE: there is always a parent due to the virtual root hub */
-+ bHubAddr = (uint8_t)pUrb->dev->parent->devnum;
++ bHubAddr = (uint8_t)pUrb->dev->parent->devnum;
+ /* but not if parent is our virtual root hub */
+ if(bHubAddr == pThis->RootHub.bAddress) {
+ bHubAddr = 0;
@@ -196205,14 +196199,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+#ifdef MUSB_LINUX_MV21
+ /* parent hub address */
+ pParent = pUrb->dev->parent;
-+
++
+ /* this distribution doesn't support directly, so try to find ourselves */
-+ if((USB_SPEED_HIGH!=((uint8_t)pUrb->dev->speed)) &&
++ if((USB_SPEED_HIGH!=((uint8_t)pUrb->dev->speed)) &&
+ (pParent->devnum != pThis->RootHub.bAddress))
+ {
+ int nChild;
+ struct usb_device* pDevice;
-+
++
+ /* walk up to first high-speed hub and remember our subtree's child */
+ pDevice = pUrb->dev;
+ while(pParent && (USB_SPEED_HIGH != pParent->speed) &&
@@ -196221,7 +196215,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ pDevice = pParent;
+ pParent = pParent->parent;
+ }
-+
++
+ if(pParent && (pParent->devnum != pThis->RootHub.bAddress)) {
+ /* correlate to port and check for multi-TT */
+ for(nChild = 0; nChild < pParent->maxchild; nChild++) {
@@ -196242,29 +196236,29 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+#endif
+ }
+#endif
-+
++
+ if ( bIsMulti ) {
+ bHubAddr |=0x80;
+ }
-+
++
+ /* tx address */
-+ if(pThis->bIsMultipoint) {
++ if(pThis->bIsMultipoint) {
+ /* target addr & hub addr/port */
-+ MGC_Write8(pBase, MGC_BUSCTL_OFFSET(bEnd, MGC_O_HDRC_TXFUNCADDR),
++ MGC_Write8(pBase, MGC_BUSCTL_OFFSET(bEnd, MGC_O_HDRC_TXFUNCADDR),
+ bAddress);
-+ MGC_Write8(pBase, MGC_BUSCTL_OFFSET(bEnd, MGC_O_HDRC_TXHUBADDR),
++ MGC_Write8(pBase, MGC_BUSCTL_OFFSET(bEnd, MGC_O_HDRC_TXHUBADDR),
+ bHubAddr);
-+ MGC_Write8(pBase, MGC_BUSCTL_OFFSET(bEnd, MGC_O_HDRC_TXHUBPORT),
++ MGC_Write8(pBase, MGC_BUSCTL_OFFSET(bEnd, MGC_O_HDRC_TXHUBPORT),
+ bHubPort);
-+
-+ /* also, try Rx (this is a bug ion the core: I always need to to do
++
++ /* also, try Rx (this is a bug ion the core: I always need to to do
+ * both (at least for ep0), needs to be changed when the core is
+ * fixed */
-+ MGC_Write8(pBase, MGC_BUSCTL_OFFSET(bEnd, MGC_O_HDRC_RXFUNCADDR),
++ MGC_Write8(pBase, MGC_BUSCTL_OFFSET(bEnd, MGC_O_HDRC_RXFUNCADDR),
+ bAddress);
-+ MGC_Write8(pBase, MGC_BUSCTL_OFFSET(bEnd, MGC_O_HDRC_RXHUBADDR),
++ MGC_Write8(pBase, MGC_BUSCTL_OFFSET(bEnd, MGC_O_HDRC_RXHUBADDR),
+ bHubAddr);
-+ MGC_Write8(pBase, MGC_BUSCTL_OFFSET(bEnd, MGC_O_HDRC_RXHUBPORT),
++ MGC_Write8(pBase, MGC_BUSCTL_OFFSET(bEnd, MGC_O_HDRC_RXHUBPORT),
+ bHubPort);
+ } else {
+ /* non-multipoint core */
@@ -196275,7 +196269,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ }
+
+ DBG(2, "end %d, device %d, parent %d, port %d, multi-tt: %d, speed:%d\n", \
-+ bEnd, pUrb->dev->devnum, bHubAddr, bHubPort, bIsMulti, pUrb->dev->speed );
++ bEnd, pUrb->dev->devnum, bHubAddr, bHubPort, bIsMulti, pUrb->dev->speed );
+}
+
+/**
@@ -196284,16 +196278,16 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ * @param bEnd
+ * @param bXmt
+ */
-+static void hdrc_set_protocol(MGC_LinuxCd* pThis, struct urb* pUrb,
-+ uint8_t bEnd, unsigned int bXmt)
++static void hdrc_set_protocol(MGC_LinuxCd* pThis, struct urb* pUrb,
++ uint8_t bEnd, unsigned int bXmt)
+{
+ uint8_t reg;
+ uint8_t bStdType = hdrc_type(pUrb);
+ unsigned int nPipe = pUrb->pipe;
-+ uint8_t* pBase = (uint8_t*)pThis->pRegs;
-+
-+ reg = (bStdType << 4 ) |
-+ (((uint8_t)usb_pipeendpoint(nPipe)) & 0xf);
++ uint8_t* pBase = (uint8_t*)pThis->pRegs;
++
++ reg = (bStdType << 4 ) |
++ (((uint8_t)usb_pipeendpoint(nPipe)) & 0xf);
+ switch( ((uint8_t)pUrb->dev->speed) ) {
+ case USB_SPEED_LOW:
+ reg |= 0xc0;
@@ -196304,7 +196298,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ default:
+ reg |= 0x40;
+ }
-+
++
+ if ( bXmt ) {
+ if(bEnd) {
+ MGC_WriteCsr8(pBase, MGC_O_HDRC_TXTYPE, bEnd, reg);
@@ -196316,17 +196310,17 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ MGC_WriteCsr8(pBase, MGC_O_HDRC_RXTYPE, bEnd, reg);
+ } else if(pThis->bIsMultipoint) {
+ MGC_WriteCsr8(pBase, MGC_O_HDRC_TYPE0, 0, reg & 0xc0);
-+ }
-+ }
++ }
++ }
+}
+
-+static void mgc_hdrc_flush_fifo(MGC_LinuxCd* pThis, uint8_t bEnd, int rx)
++static void mgc_hdrc_flush_fifo(MGC_LinuxCd* pThis, uint8_t bEnd, int rx)
+{
+ if ( rx ) {
+ /* twice in case of double packet buffering */
-+ MGC_WriteCsr16((uint8_t*)pThis->pRegs, MGC_O_HDRC_RXCSR, bEnd,
++ MGC_WriteCsr16((uint8_t*)pThis->pRegs, MGC_O_HDRC_RXCSR, bEnd,
+ MGC_M_RXCSR_FLUSHFIFO | MGC_M_RXCSR_CLRDATATOG);
-+ MGC_WriteCsr16((uint8_t*)pThis->pRegs, MGC_O_HDRC_RXCSR, bEnd,
++ MGC_WriteCsr16((uint8_t*)pThis->pRegs, MGC_O_HDRC_RXCSR, bEnd,
+ MGC_M_RXCSR_FLUSHFIFO | MGC_M_RXCSR_CLRDATATOG);
+ }
+}
@@ -196340,11 +196334,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ /* if not ready, flush and restore data toggle */
+ if(!pEnd->bIsReady && pThis->bIsMultipoint) {
+ pEnd->bIsReady = TRUE;
-+
++
+ /* twice in case of double packet buffering */
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd,
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd,
+ MGC_M_TXCSR_FLUSHFIFO | MGC_M_TXCSR_CLRDATATOG);
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd,
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd,
+ MGC_M_TXCSR_FLUSHFIFO | MGC_M_TXCSR_CLRDATATOG);
+ }
+ } else {
@@ -196365,7 +196359,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ * @param pBuffer buffer pointer
+ * @param dwLength how many bytes to transmit or expect to receive
+ */
-+static void mgc_hdrc_program_end(MGC_LinuxCd* pThis, uint8_t bEnd,
++static void mgc_hdrc_program_end(MGC_LinuxCd* pThis, uint8_t bEnd,
+ struct urb* pUrb, unsigned int nOut, unsigned int bXmt,
+ uint8_t* pBuffer, uint32_t dwLength)
+{
@@ -196382,61 +196376,61 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+#ifdef MUSB_DMA
+ MGC_DmaChannel* pDmaChannel;
+ MGC_DmaController* pDmaController;
-+#endif
++#endif
+ unsigned long flags;
+
+ DBG(2, "<==(bEnd=%d, pUrb=%p) bRemoteAddress=%d\n", bEnd, pUrb, (uint8_t)usb_pipedevice(nPipe));
-+ DBG(3, "end %d, device %d, speed:%d\n", bEnd, pUrb->dev->devnum,
-+ pUrb->dev->speed );
++ DBG(3, "end %d, device %d, speed:%d\n", bEnd, pUrb->dev->devnum,
++ pUrb->dev->speed );
+
+ /* prepare endpoint registers according to flags */
+ SPIN_LOCK_IRQSAVE(&pThis->Lock, flags);
+ MGC_SelectEnd(pBase, bEnd);
-+
++
+ if ( bStdType==0 ) {
+ bXmt=TRUE;
-+ }
-+
++ }
++
+ hdrc_set_protocol(pThis, pUrb, bEnd, bXmt);
-+ hdrc_set_address(pThis, pUrb, bEnd, bXmt);
++ hdrc_set_address(pThis, pUrb, bEnd, bXmt);
+
+
+#ifdef MUSB_DMA
+ pDmaController = pThis->pDmaController;
+ pDmaChannel = pEnd->pDmaChannel;
-+
++
+ if( !WANTS_DMA(pUrb) && pDmaChannel) {
+ /* release previously-allocated channel */
+ pDmaController->pfDmaReleaseChannel(pDmaChannel);
+ pEnd->pDmaChannel = NULL;
+ } else if( WANTS_DMA(pUrb) ) {
-+
++
+ /* candidate for DMA */
+ if(pDmaController && !pDmaChannel) {
+ pDmaChannel = pEnd->pDmaChannel = pDmaController->pfDmaAllocateChannel(
-+ pDmaController->pPrivateData, bEnd, nOut ? TRUE : FALSE,
++ pDmaController->pPrivateData, bEnd, nOut ? TRUE : FALSE,
+ bStdType, wPacketSize);
-+
++
+ }
-+
++
+ if(pDmaChannel) {
+ pDmaChannel->dwActualLength = 0L;
+ pEnd->dwRequestSize = min(dwLength, pDmaChannel->dwMaxLength);
-+ bDmaOk = pDmaController->pfDmaProgramChannel(pDmaChannel,
-+ wPacketSize, pDmaChannel->bDesiredMode, DMA_BUFFER(pUrb),
++ bDmaOk = pDmaController->pfDmaProgramChannel(pDmaChannel,
++ wPacketSize, pDmaChannel->bDesiredMode, DMA_BUFFER(pUrb),
+ pEnd->dwRequestSize);
-+ if(!bDmaOk) {
++ if(!bDmaOk) {
+ pDmaController->pfDmaReleaseChannel(pDmaChannel);
+ pEnd->pDmaChannel = NULL;
+ }
+ }
+ }
+#endif
-+
++
+ if ( bXmt ) { /* transmit */
+ uint16_t wLoadCount=0;
-+ uint16_t wCsr= MGC_M_TXCSR_MODE;
-+
++ uint16_t wCsr= MGC_M_TXCSR_MODE;
++
+ if ( !bDmaOk ) {
+ if( bIsBulk && pThis->bBulkSplit ) {
+ wLoadCount = min((uint32_t)pEnd->wMaxPacketSizeTx, dwLength);
@@ -196444,14 +196438,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ wLoadCount = min((uint32_t)wPacketSize, dwLength);
+ }
+ }
-+
++
+ /* disable interrupt in case we flush */
-+ wIntrTxE = MGC_Read16(pBase, MGC_O_HDRC_INTRTXE);
++ wIntrTxE = MGC_Read16(pBase, MGC_O_HDRC_INTRTXE);
+ MGC_Write16(pBase, MGC_O_HDRC_INTRTXE, wIntrTxE & ~(1 << bEnd));
+
+ /* data toggle, make sure nothing is there! */
-+ mgc_hdrc_flush_end(pThis, bEnd);
-+
++ mgc_hdrc_flush_end(pThis, bEnd);
++
+ if( bEnd) {
+ wCsr |= MGC_M_TXCSR_H_WR_DATATOGGLE;
+ if(usb_gettoggle(pUrb->dev, pEnd->bEnd, 1)) {
@@ -196459,34 +196453,34 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ } else {
+ wCsr &= ~MGC_M_TXCSR_H_DATATOGGLE;
+ }
-+
++
+ /* protocol/endpoint/interval/NAKlimit */
+ if(bIsBulk && pThis->bBulkSplit) {
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXMAXP, bEnd,
-+ wPacketSize |
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXMAXP, bEnd,
++ wPacketSize |
+ ((pEnd->wMaxPacketSizeTx / wPacketSize) - 1) << 11);
+ } else {
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXMAXP, bEnd, wPacketSize);
+ }
+ MGC_WriteCsr8(pBase, MGC_O_HDRC_TXINTERVAL, bEnd, bInterval);
-+
++
+#ifdef MUSB_DMA
+ if (bDmaOk) {
-+ wCsr |= (MGC_M_TXCSR_AUTOSET | MGC_M_TXCSR_DMAENAB |
-+ (pDmaChannel->bDesiredMode ? MGC_M_TXCSR_DMAMODE : 0));
++ wCsr |= (MGC_M_TXCSR_AUTOSET | MGC_M_TXCSR_DMAENAB |
++ (pDmaChannel->bDesiredMode ? MGC_M_TXCSR_DMAMODE : 0));
+ }
+#endif
+
+ mgc_linux_packet_tx(pThis, bEnd);
-+ } else {
++ } else {
+ /* protocol/endpoint/interval/NAKlimit */
+ MGC_WriteCsr8(pBase, MGC_O_HDRC_NAKLIMIT0, 0, bInterval);
-+ if ( wLoadCount ) {
++ if ( wLoadCount ) {
+ pEnd->dwRequestSize = wLoadCount;
+ MGC_HdrcLoadFifo(pThis->pRegs, bEnd, wLoadCount, pBuffer);
+ }
-+ }
-+
++ }
++
+ /* re-enable interrupt and write CSR to transmit */
+ MGC_Write16(pBase, MGC_O_HDRC_INTRTXE, wIntrTxE);
+
@@ -196494,29 +196488,29 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd, wCsr);
+ }
+ } else { /* receive */
-+
++
+ /* if was programmed for Tx, be sure it is ready for re-use */
-+ uint16_t wCsr=MGC_ReadCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd);
++ uint16_t wCsr=MGC_ReadCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd);
+ if ( pEnd->bIsSharedFifo && wCsr & MGC_M_TXCSR_MODE) {
+ pEnd->bIsReady = FALSE;
-+
++
+ DBG(1, "reprogramming ep%d for rx\n", bEnd);
-+
++
+ if ( wCsr & MGC_M_TXCSR_FIFONOTEMPTY ) {
+ /* this shouldn't happen */
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd,
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd,
+ MGC_M_TXCSR_FRCDATATOG);
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd,
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd,
+ MGC_M_TXCSR_FRCDATATOG);
+
+ ERR("*** switching end %d to Rx but Tx FIFO not empty\n", bEnd);
-+ MGC_SLOW_DEVICE_KLUDGE_DELAY_TOP;
++ MGC_SLOW_DEVICE_KLUDGE_DELAY_TOP;
+ }
-+
++
+ /* clear mode (and everything else) to enable Rx */
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd, 0);
+ }
-+
++
+ /* grab Rx residual if any */
+ wCsr = MGC_ReadCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd);
+ if (wCsr & MGC_M_RXCSR_RXPKTRDY) {
@@ -196530,7 +196524,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+#if 0
+ /* doesn't work reliably */
+ if(bIsBulk && pThis->bBulkCombine) {
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXMAXP, bEnd, wPacketSize |
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXMAXP, bEnd, wPacketSize |
+ ((min(pEnd->wMaxPacketSizeRx, dwLength) / wPacketSize) - 1) << 11);
+ } else {
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXMAXP, bEnd, wPacketSize);
@@ -196543,27 +196537,27 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ /* first time or re-program and shared FIFO, flush & clear toggle */
+ if(!pEnd->bIsReady && pEnd->bIsSharedFifo) {
+ DBG(4, "shared fifo\n");
-+
++
+ /* twice in case of double packet buffering */
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd,
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd,
+ MGC_M_RXCSR_FLUSHFIFO | MGC_M_RXCSR_CLRDATATOG);
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd,
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd,
+ MGC_M_RXCSR_FLUSHFIFO | MGC_M_RXCSR_CLRDATATOG);
+ pEnd->bIsReady = TRUE;
+ }
-+
++
+ /* program data toggle if possibly switching use */
+ if(!pEnd->bIsReady && pThis->bIsMultipoint) {
+ DBG(4, "multipoint\n");
-+
++
+ wCsr = MGC_M_RXCSR_H_WR_DATATOGGLE;
+ if(usb_gettoggle(pUrb->dev, pEnd->bEnd, 0)) {
+ wCsr |= MGC_M_RXCSR_H_DATATOGGLE;
+ }
-+
++
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd, wCsr);
+ }
-+
++
+ /* kick things off */
+ if( bEnd && !bDone) {
+ wCsr = MGC_M_RXCSR_H_REQPKT;
@@ -196574,19 +196568,19 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ if(bDmaOk) {
+ wCsr &= ~MGC_M_RXCSR_H_REQPKT;
+ wCsr |= MGC_M_RXCSR_H_AUTOREQ;
-+ wCsr |= (MGC_M_RXCSR_AUTOCLEAR | MGC_M_RXCSR_DMAENAB |
-+ (pDmaChannel->bDesiredMode ? MGC_M_RXCSR_DMAMODE : 0));
++ wCsr |= (MGC_M_RXCSR_AUTOCLEAR | MGC_M_RXCSR_DMAENAB |
++ (pDmaChannel->bDesiredMode ? MGC_M_RXCSR_DMAMODE : 0));
+ }
+#endif
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd, wCsr);
+ }
+ }
+ SPIN_UNLOCK_IRQRESTORE(&pThis->Lock, flags);
-+ DBG(2, "==>\n");
++ DBG(2, "==>\n");
+}
+
+/* *************************************************************************
-+ *
++ *
+ **************************************************************************/
+
+static void mgc_ep_linux_clear(MGC_LinuxLocalEnd* pEnd,MGC_LinuxCd* pThis)
@@ -196605,7 +196599,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ SPIN_LOCK_IRQSAVE(&pThis->Lock, flags);
+
+ MGC_SelectEnd(pBase, pEnd->bEnd);
-+
++
+ if((pEnd->bRemoteEnd & 0x0F) == 0)
+ {
+ wVal |= MGC_M_CSR0_FLUSHFIFO;
@@ -196626,22 +196620,22 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ }
+ else
+ {
-+ wVal &= ~MGC_M_RXCSR_H_REQPKT;
++ wVal &= ~MGC_M_RXCSR_H_REQPKT;
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, pEnd->bEnd, wVal);
+ MGC_WriteCsr8(pBase, MGC_O_HDRC_RXINTERVAL, pEnd->bEnd, 0);
+ }
+ }
+
+ SPIN_UNLOCK_IRQRESTORE(&pThis->Lock, flags);
-+
-+#ifdef MUSB_USE_HCD_DRIVER
++
++#ifdef MUSB_USE_HCD_DRIVER
+ pEnd->pCurrentUrb=NULL;
+#endif
+}
+
+/**
-+ * Start the current URB on an endpoint; wants ep to be
-+ * locked and pThis to be locked as well; end must be claimed
++ * Start the current URB on an endpoint; wants ep to be
++ * locked and pThis to be locked as well; end must be claimed
+ * from the caller.
+ *
+ * @param pThis instance pointer
@@ -196655,23 +196649,23 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ uint32_t dwLength;
+ void* pBuffer;
+ uint8_t* pBase = (uint8_t*)pThis->pRegs;
-+ MGC_LinuxLocalEnd* pEnd = &(pThis->aLocalEnd[bEnd]);
++ MGC_LinuxLocalEnd* pEnd = &(pThis->aLocalEnd[bEnd]);
+ struct urb* pUrb = MGC_GetCurrentUrb(pEnd);
+ unsigned int nPipe, nOut, bXmt;
+ uint16_t wPacketSize;
+ uint8_t bRemoteAddress, bRemoteEnd;
-+
++
+ /* I should not have called!!! */
+ if ( !pUrb ) {
+ ERR("***> bEnd=%d is idle!\n", bEnd);
-+ return;
++ return;
+ }
-+
++
+ if ( pUrb->hcpriv ) {
-+ ERR("==> pUrb=%p, pUrb->hcpriv=%p, pEnd=%p, bEnd=%d (%s) was kickstarted already! this is not good (TM)\n",
++ ERR("==> pUrb=%p, pUrb->hcpriv=%p, pEnd=%p, bEnd=%d (%s) was kickstarted already! this is not good (TM)\n",
+ pUrb, pUrb->hcpriv, pEnd, bEnd, decode_urb_protocol(pUrb));
-+ }
-+
++ }
++
+ nPipe = pUrb->pipe;
+ nOut = usb_pipeout(nPipe);
+ bXmt = nOut ? TRUE : FALSE;
@@ -196679,8 +196673,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ bRemoteAddress = (uint8_t)usb_pipedevice(nPipe);
+ bRemoteEnd = (uint8_t)usb_pipeendpoint(nPipe);
+
-+ DBG(2, "<== pUrb=%p, bEnd=%d, wPacketSize=%d, bRemoteAddress=%d, bRemoteEnd=%d, nOut=%d\n",
-+ pUrb, bEnd, wPacketSize, bRemoteAddress, bRemoteEnd, nOut);
++ DBG(2, "<== pUrb=%p, bEnd=%d, wPacketSize=%d, bRemoteAddress=%d, bRemoteEnd=%d, nOut=%d\n",
++ pUrb, bEnd, wPacketSize, bRemoteAddress, bRemoteEnd, nOut);
+
+ /* if no root device, assume this must be it */
+ if(!pThis->pRootDevice) {
@@ -196701,10 +196695,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ /* indicate in progress */
+ pUrb->actual_length = 0;
+ pUrb->error_count = 0;
-+ pUrb->hcpriv = pEnd;
-+ /* remember software state - find_end() will use this - */
-+ pEnd->bRemoteAddress = bRemoteAddress;
-+ pEnd->bRemoteEnd = bRemoteEnd;
++ pUrb->hcpriv = pEnd;
++ /* remember software state - find_end() will use this - */
++ pEnd->bRemoteAddress = bRemoteAddress;
++ pEnd->bRemoteEnd = bRemoteEnd;
+ pEnd->bTrafficType = (uint8_t)usb_pipetype(nPipe);
+ pEnd->bIsTx=bXmt;
+
@@ -196715,14 +196709,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ pEnd->dwWaitFrame = 0;
+ pEnd->bRetries = 0;
+ pEnd->wPacketSize = wPacketSize;
-+
-+#ifdef MUSB_USE_HCD_DRIVER
++
++#ifdef MUSB_USE_HCD_DRIVER
+ pEnd->pCurrentUrb=pUrb;
+#endif
+
-+ /* pEnd->bIsClaimed=(usb_pipeisoc(nPipe) || usb_pipeint(nPipe)) ?TRUE:FALSE;
++ /* pEnd->bIsClaimed=(usb_pipeisoc(nPipe) || usb_pipeint(nPipe)) ?TRUE:FALSE;
+ * end must be claimed from my caller
-+ */
++ */
+ if( usb_pipecontrol(nPipe) ) {
+ /* control transfers always start with an OUT */
+ bXmt=TRUE;
@@ -196750,31 +196744,31 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+#endif
+
+ /* abort the transfer */
-+ if ( !pBuffer ) {
++ if ( !pBuffer ) {
+ ERR("Rx requested but no buffer was given, BAD things are happening (TM)! aborting\n");
-+ return;
++ return;
+ }
-+
++
+ DBG(3, "(%p): dir=%s, type=%d, wPacketSize=%d, bRemoteAddress=%d, bRemoteEnd=%d, pBuffer=%p\n", \
-+ pUrb, (nOut)?"out":"in", usb_pipetype(nPipe), wPacketSize, bRemoteAddress,
-+ bRemoteEnd, pBuffer);
-+
-+ /* Configure endpoint */
++ pUrb, (nOut)?"out":"in", usb_pipetype(nPipe), wPacketSize, bRemoteAddress,
++ bRemoteEnd, pBuffer);
++
++ /* Configure endpoint */
+ mgc_hdrc_program_end(pThis, bEnd, pUrb, nOut, bXmt, pBuffer, dwLength);
-+
++
+ /* if transmit, start it if it is time */
+ if ( !bXmt ) {
-+ DBG(2, "==>\n");
++ DBG(2, "==>\n");
+ return;
+ }
-+
++
+ /* determine if the time is right for a periodic transfer */
+ if( usb_pipeisoc(nPipe) || usb_pipeint(nPipe) ) {
-+ DBG(3, "check whether there's still time for periodic Tx\n");
++ DBG(3, "check whether there's still time for periodic Tx\n");
+ pEnd->dwIsoPacket = 0;
+ wFrame = MGC_Read16(pBase, MGC_O_HDRC_FRAME);
-+
-+ if((pUrb->transfer_flags & USB_ISO_ASAP) ||
++
++ if((pUrb->transfer_flags & USB_ISO_ASAP) ||
+ (wFrame >= pUrb->start_frame))
+ {
+ pEnd->dwWaitFrame = 0;
@@ -196800,20 +196794,20 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ * @param bEnd local endpoint
+ */
+static void mgc_linux_start_next_urb(MGC_LinuxCd* pThis, uint8_t bEnd)
-+{
++{
+#ifndef MUSB_USE_HCD_DRIVER
+ struct urb* pUrb;
+ MGC_LinuxLocalEnd* pEnd = &(pThis->aLocalEnd[bEnd]);
-+
-+ DBG(1, "<== bEnd=%d\n", bEnd);
++
++ DBG(1, "<== bEnd=%d\n", bEnd);
+ pUrb=MGC_GetCurrentUrb(pEnd);
+ if ( !pUrb ) {
-+ DBG(2, "==> bEnd=%d idle\n", bEnd);
-+ return;
++ DBG(2, "==> bEnd=%d idle\n", bEnd);
++ return;
+ }
-+
++
+ /* introduce a delay between urbs, to accomodate slow devices. The counter
-+ * is increased on every NAK/TIMEOUT and decreased on successful transfers
++ * is increased on every NAK/TIMEOUT and decreased on successful transfers
+ * (eps != 0 )
+ */
+ if ( mgc_slow_device_kludge_delay ) {
@@ -196821,27 +196815,27 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ mgc_slow_device_kludge_delay);
+ udelay( mgc_slow_device_kludge_delay*20 );
+ }
-+
++
+ /* check for linked URB and jump start the next one */
+ mgc_linux_kickstart_urb(pThis, bEnd);
+#else
-+ DBG(1, "<== bEnd=%d\n", bEnd);
-+ if ( MUSB_IS_HST(pThis) ) {
++ DBG(1, "<== bEnd=%d\n", bEnd);
++ if ( MUSB_IS_HST(pThis) ) {
+ mgc_hcd_schedule_urb(pThis);
+ }
+#endif
-+ DBG(1, "==>\n");
++ DBG(1, "==>\n");
+}
+
+/* *************************************************************************
-+ *
++ *
+ **************************************************************************/
+
+/**
-+ * Try to stop traffic on the given local endpoint. Don;t worry about the
-+ * urbs, they will be flushed from the system (later on).
++ * Try to stop traffic on the given local endpoint. Don;t worry about the
++ * urbs, they will be flushed from the system (later on).
+ *
-+ * @param pThis the controller
++ * @param pThis the controller
+ * @param bEnd the endpoint number.
+ */
+void MGC_HdrcStopEnd(MGC_LinuxCd* pThis, uint8_t bEnd)
@@ -196850,15 +196844,15 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ uint8_t* pBase = (uint8_t*)pThis->pRegs;
+ const uint8_t reg=(bEnd)?MGC_O_HDRC_RXCSR:MGC_O_HDRC_CSR0;
+
-+ DBG(2, "<== ep%d\n", bEnd);
++ DBG(2, "<== ep%d\n", bEnd);
+ wCsr = MGC_ReadCsr16(pBase, reg, bEnd);
+ wCsr &= (bEnd)?~MGC_M_RXCSR_H_REQPKT:~MGC_M_CSR0_H_REQPKT;
+ MGC_WriteCsr16(pBase, reg, bEnd, wCsr);
-+ DBG(2, "==>\n");
++ DBG(2, "==>\n");
+}
+
+/* *************************************************************************
-+ *
++ *
+ **************************************************************************/
+
+/**
@@ -196867,8 +196861,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ * @param wCount current byte count in FIFO
+ * @param pUrb URB pointer for EP0
+ * @return TRUE if more packets are required for this transaction
-+ */
-+static uint8_t mgc_hdrc_service_host_default(MGC_LinuxCd* pThis,
++ */
++static uint8_t mgc_hdrc_service_host_default(MGC_LinuxCd* pThis,
+ uint16_t wCount, struct urb* pUrb)
+{
+ uint8_t bMore = FALSE;
@@ -196878,17 +196872,17 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ MGC_LinuxLocalEnd* pEnd = &(pThis->aLocalEnd[0]);
+ MUSB_DeviceRequest* pRequest = (MUSB_DeviceRequest*)pUrb->setup_packet;
+
-+ DBG(2, "<== (wCount=%04x, pUrb=%lx, bStage=%02x)\n",
-+ wCount, (unsigned long)pUrb, pThis->bEnd0Stage);
++ DBG(2, "<== (wCount=%04x, pUrb=%lx, bStage=%02x)\n",
++ wCount, (unsigned long)pUrb, pThis->bEnd0Stage);
+
+ if(MGC_END0_IN == pThis->bEnd0Stage) {
+ /* we are receiving from peripheral */
+ pFifoDest = pUrb->transfer_buffer + pUrb->actual_length;
+ wFifoCount = min(wCount, ((uint16_t)(pUrb->transfer_buffer_length - pUrb->actual_length)));
+
-+ DBG(3, "Receiving %d bytes in &%p[%d] (pUrb->actual_length=%u)\n",
-+ wFifoCount, pUrb->transfer_buffer, (unsigned int)pUrb->actual_length,
-+ pUrb->actual_length );
++ DBG(3, "Receiving %d bytes in &%p[%d] (pUrb->actual_length=%u)\n",
++ wFifoCount, pUrb->transfer_buffer, (unsigned int)pUrb->actual_length,
++ pUrb->actual_length );
+
+ MGC_HdrcUnloadFifo(pBase, 0, wFifoCount, pFifoDest);
+
@@ -196905,15 +196899,15 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ }
+ } else {
+ /* we are sending to peripheral */
-+ if((MGC_END0_START == pThis->bEnd0Stage) &&
-+ (pRequest->bmRequestType & USB_DIR_IN))
++ if((MGC_END0_START == pThis->bEnd0Stage) &&
++ (pRequest->bmRequestType & USB_DIR_IN))
+ {
+ DBG(3, "just did setup, switching to IN\n");
-+
++
+ /* this means we just did setup; switch to IN */
+ pThis->bEnd0Stage = MGC_END0_IN;
+ bMore = TRUE;
-+
++
+#ifdef MUSB_CONFIG_PROC_FS
+ pEnd->dwTotalTxBytes += 8;
+ pEnd->dwTotalTxPackets++;
@@ -196921,9 +196915,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ } else if(pRequest->wLength && (MGC_END0_START == pThis->bEnd0Stage)) {
+ pThis->bEnd0Stage = MGC_END0_OUT;
+ pFifoDest = (uint8_t*)(pUrb->transfer_buffer + pUrb->actual_length);
-+ wFifoCount = min(pEnd->wPacketSize,
++ wFifoCount = min(pEnd->wPacketSize,
+ ((uint16_t)(pUrb->transfer_buffer_length - pUrb->actual_length)));
-+ DBG(3, "Sending %d bytes to %p\n", wFifoCount, pFifoDest);
++ DBG(3, "Sending %d bytes to %p\n", wFifoCount, pFifoDest);
+ MGC_HdrcLoadFifo(pBase, 0, wFifoCount, pFifoDest);
+
+#ifdef MUSB_CONFIG_PROC_FS
@@ -196942,7 +196936,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+}
+
+/* *************************************************************************
-+ * Default end (end 0)
++ * Default end (end 0)
+ **************************************************************************/
+
+/**
@@ -196965,25 +196959,25 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ DBG(2, "<==\n");
+
+ spin_lock(&pEnd->Lock);
-+ pUrb = MGC_GetCurrentUrb(pEnd);
++ pUrb = MGC_GetCurrentUrb(pEnd);
+
+ /* check URB */
+#ifdef MUSB_PARANOID
-+ if( pUrb && (pUrb->hcpriv!=pEnd)) {
-+ ERR("==> corrupt URB %p!!! from now on \"bad things will happen\"\n",
-+ pUrb);
++ if( pUrb && (pUrb->hcpriv!=pEnd)) {
++ ERR("==> corrupt URB %p!!! from now on \"bad things will happen\"\n",
++ pUrb);
+ spin_unlock(&pEnd->Lock);
+ return;
-+ }
++ }
+#endif
+
-+ SPIN_LOCK_IRQSAVE(&pThis->Lock, flags);
++ SPIN_LOCK_IRQSAVE(&pThis->Lock, flags);
+ MGC_SelectEnd(pBase, 0);
+ wCsrVal = MGC_ReadCsr16(pBase, MGC_O_HDRC_CSR0, 0);
+ wCount = MGC_ReadCsr8(pBase, MGC_O_HDRC_COUNT0, 0);
+ bVal = (uint8_t)wCsrVal;
+
-+ DBG(2, "<== CSR0=%04x, wCount=%04x\n", wCsrVal, wCount);
++ DBG(2, "<== CSR0=%04x, wCount=%04x\n", wCsrVal, wCount);
+
+ /* if we just did status stage, we are done */
+ if(MGC_END0_STATUS == pThis->bEnd0Stage) {
@@ -196994,20 +196988,20 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ if((MGC_END0_START == pThis->bEnd0Stage) && !wCount &&
+ (wCsrVal & MGC_M_CSR0_RXPKTRDY))
+ {
-+ DBG(2, "missed data\n");
++ DBG(2, "missed data\n");
+
+ /* just started and got Rx with no data, so probably missed data */
+ status = USB_ST_SHORT_PACKET;
+ bError = TRUE;
-+
++
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0, MGC_M_CSR0_FLUSHFIFO);
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0, MGC_M_CSR0_FLUSHFIFO);
+ }
-+
++
+ if(bVal & MGC_M_CSR0_H_RXSTALL) {
-+ DBG(2, "STALLING ENDPOINT 0\n");
++ DBG(2, "STALLING ENDPOINT 0\n");
+ status = USB_ST_STALL;
-+ bError = TRUE;
++ bError = TRUE;
+ } else if(bVal & MGC_M_CSR0_H_ERROR) {
+ DBG(3, "ep0 no response (error)\n");
+ DEBUG_CODE(3, MGC_HDRC_DUMPREGS(pThis, 0); );
@@ -197015,7 +197009,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ status = USB_ST_NORESPONSE;
+ bError = TRUE;
+ } else if(bVal & MGC_M_CSR0_H_NAKTIMEOUT) {
-+ DBG(2, "ep0 NAK timeout pEnd->bRetries=%d\n", pEnd->bRetries);
++ DBG(2, "ep0 NAK timeout pEnd->bRetries=%d\n", pEnd->bRetries);
+
+ if( ++pEnd->bRetries < MUSB_MAX_RETRIES) {
+ /* cover it up if retries not exhausted */
@@ -197030,8 +197024,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ }
+
+ if(USB_ST_NORESPONSE == status) {
-+ DBG(2, "ep0 aborting\n");
-+
++ DBG(2, "ep0 aborting\n");
++
+ /* use the proper sequence to abort the transfer */
+ if(bVal & MGC_M_CSR0_H_REQPKT) {
+ bVal &= ~MGC_M_CSR0_H_REQPKT;
@@ -197045,7 +197039,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ bVal &= ~MGC_M_CSR0_H_NAKTIMEOUT;
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0, bVal);
+ }
-+
++
+ MGC_WriteCsr8(pBase, MGC_O_HDRC_NAKLIMIT0, 0, 0);
+ }
+
@@ -197070,7 +197064,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ }
+
+ if(!pUrb) {
-+ /* stop endpoint since we have no place for its data, this
++ /* stop endpoint since we have no place for its data, this
+ * SHOULD NEVER HAPPEN! */
+ DBG(1, "no URB for end 0\n");
+
@@ -197081,28 +197075,28 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ /* start next URB that might be queued for it */
+ spin_unlock(&pEnd->Lock);
+ DBG(2, "==>\n");
-+ SPIN_UNLOCK_IRQRESTORE(&pThis->Lock, flags);
++ SPIN_UNLOCK_IRQRESTORE(&pThis->Lock, flags);
+ return;
+ }
-+
++
+ if(!bComplete && !bError) {
-+
++
+ /* call common logic and prepare response */
+ if( mgc_hdrc_service_host_default(pThis, wCount, pUrb) ) {
+ /* more packets required */
-+ bOutVal = (MGC_END0_IN == pThis->bEnd0Stage) ?
-+ MGC_M_CSR0_H_REQPKT : MGC_M_CSR0_TXPKTRDY;
-+ DBG(3, "Need more bytes bOutVal=%04x\n", bOutVal);
++ bOutVal = (MGC_END0_IN == pThis->bEnd0Stage) ?
++ MGC_M_CSR0_H_REQPKT : MGC_M_CSR0_TXPKTRDY;
++ DBG(3, "Need more bytes bOutVal=%04x\n", bOutVal);
+ } else {
+ /* data transfer complete; perform status phase */
-+ bOutVal = MGC_M_CSR0_H_STATUSPKT |
-+ (usb_pipeout(pUrb->pipe) ? MGC_M_CSR0_H_REQPKT :
++ bOutVal = MGC_M_CSR0_H_STATUSPKT |
++ (usb_pipeout(pUrb->pipe) ? MGC_M_CSR0_H_REQPKT :
+ MGC_M_CSR0_TXPKTRDY);
-+
++
+ /* flag status stage */
+ pThis->bEnd0Stage = MGC_END0_STATUS;
+ DBG(3, "Data transfer complete, status phase bOutVal=%04x\n", \
-+ bOutVal);
++ bOutVal);
+ }
+ }
+
@@ -197110,23 +197104,23 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ if(bOutVal) {
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0, bOutVal);
+ }
-+
++
+ /* call completion handler if done */
+ if(bComplete || bError) {
+ DBG(3, "completing cntrl URB %p, status=%d, len=%x\n", \
-+ pUrb, status, pUrb->actual_length);
-+
++ pUrb, status, pUrb->actual_length);
++
+ /* Hub Class not supported */
+ if((pUrb->dev == pThis->pRootDevice))
+ {
+ pRequest = (MUSB_DeviceRequest*)pUrb->setup_packet;
+
-+ if((USB_REQ_GET_DESCRIPTOR == pRequest->bRequest) &&
-+ (USB_DIR_IN == pRequest->bmRequestType) &&
++ if((USB_REQ_GET_DESCRIPTOR == pRequest->bRequest) &&
++ (USB_DIR_IN == pRequest->bmRequestType) &&
+ (USB_DT_DEVICE == pUrb->setup_packet[3]) &&
+ (pUrb->setup_packet[6] >= USB_DT_DEVICE_SIZE))
+ {
-+
++
+ header = (struct usb_descriptor_header*)pUrb->transfer_buffer;
+ if((header->bDescriptorType == USB_DT_DEVICE) &&
+ (*((char*)pUrb->transfer_buffer + 4) == USB_CLASS_HUB))
@@ -197139,10 +197133,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ }
+ if ( mgc_ep_dequeue_urb(pEnd, pUrb,pThis)==0 ) {
+ spin_unlock(&pEnd->Lock);
-+ pUrb->status = status;
++ pUrb->status = status;
+ if ( mgc_linux_complete_urb(pThis, pEnd, pUrb)==0 ) {
+ mgc_linux_start_next_urb(pThis, 0);
-+ }
++ }
+ } else {
+ ERR("*** pUrb=%p is not queued to bEnd=%d\n", pUrb,
+ pEnd->bEnd);
@@ -197156,7 +197150,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+}
+
+/**************************************************************************
-+ * EP1-n Tx and Rx data
++ * EP1-n Tx and Rx data
+ **************************************************************************/
+
+static void complete_ep_urb(MGC_LinuxCd* pThis, MGC_LinuxLocalEnd* pEnd,
@@ -197166,32 +197160,32 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ if (pUrb->status==USB_ST_STALL) {
+ toggle=0;
+ }
-+
++
+ /* save data toggle */
-+
++
+ usb_settoggle(pUrb->dev, pEnd->bEnd, (pEnd->bIsTx)?1:0, toggle);
+ /* we re-use bulk, so re-programming required */
-+ pEnd->bIsReady = FALSE;
++ pEnd->bIsReady = FALSE;
+
+ if (pUrb->status) {
+ DBG(1, "completing Tx URB=%p, status=%d, len=%x\n", \
-+ pUrb, pUrb->status, pUrb->actual_length);
-+ }
++ pUrb, pUrb->status, pUrb->actual_length);
++ }
+
+ if ( mgc_ep_dequeue_urb(pEnd, pUrb,pThis)==0 ) {
+ spin_unlock(&pEnd->Lock);
+ if ( mgc_linux_complete_urb(pThis, pEnd, pUrb)==0 ) {
+ mgc_linux_start_next_urb(pThis, pEnd->bEnd);
-+ }
++ }
+ } else {
+ ERR("*** pUrb=%p is not queued to bEnd=%d, this is BAD!\n", pUrb,
+ pEnd->bEnd);
+ }
+}
-+
++
+/**
+ * Service a Tx-Available interrupt for the given endpoint.
-+
++
+ * @param pThis instance pointer
+ * @param bEnd local endpoint
+ */
@@ -197203,7 +197197,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ uint16_t wTxCsrVal, wVal=0;
+ MGC_LinuxLocalEnd* pEnd = &(pThis->aLocalEnd[bEnd]);
+ uint8_t* pBase = (uint8_t*)pThis->pRegs;
-+ uint32_t dev_status = 0;
++ uint32_t dev_status = 0;
+
+ DBG(1, "<==\n");
+
@@ -197212,12 +197206,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ if ( !pUrb ) {
+ MGC_SLOW_DEVICE_KLUDGE_DELAY_DECREASE;
+ spin_unlock(&pEnd->Lock);
-+ DBG(2, "==> tx ep empty\n");
-+ return;
++ DBG(2, "==> tx ep empty\n");
++ return;
+ }
+
+ if ( !pUrb->hcpriv ) {
-+ DBG(2, "==> kickstarting it\n");
++ DBG(2, "==> kickstarting it\n");
+ mgc_linux_kickstart_urb(pThis, bEnd);
+ spin_unlock(&pEnd->Lock);
+ return;
@@ -197227,83 +197221,83 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ complete_ep_urb(pThis, pEnd, pUrb, 0);
+ return;
+ }
-+
++
+
+ SPIN_LOCK_IRQSAVE(&pThis->Lock, flags);
+ MGC_SelectEnd(pBase, bEnd);
+
+ wVal = wTxCsrVal = MGC_ReadCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd);
-+
++
+#if MUSB_DEBUG > 0
+ /* check URB */
+ if( pUrb && (pUrb->hcpriv != pEnd) ) {
+ ERR("==> end %d has corrupt URB %lx!\n", bEnd, (unsigned long)pUrb);
-+ spin_unlock(&pEnd->Lock);
-+ SPIN_UNLOCK_IRQRESTORE(&pThis->Lock, flags);
++ spin_unlock(&pEnd->Lock);
++ SPIN_UNLOCK_IRQRESTORE(&pThis->Lock, flags);
+ return;
+ }
+#endif
+
-+ DBG(3, "end %d wTxCsrVal=%04x\n", bEnd, wTxCsrVal);
-+
-+ do {
++ DBG(3, "end %d wTxCsrVal=%04x\n", bEnd, wTxCsrVal);
++
++ do {
+ uint32_t status = 0;
-+
++
+ /* check for errors */
+ if(wTxCsrVal & MGC_M_TXCSR_H_RXSTALL) {
+ pEnd->bStalled=TRUE;
-+ DBG(1, "TX end %d stall\n", bEnd);
-+ status = USB_ST_STALL;
++ DBG(1, "TX end %d stall\n", bEnd);
++ status = USB_ST_STALL;
+ MGC_SLOW_DEVICE_KLUDGE_DELAY_INCREASE;
+ } else if(wTxCsrVal & MGC_M_TXCSR_H_ERROR) {
-+ WARN("TX data error on ep=%d\n", bEnd);
++ WARN("TX data error on ep=%d\n", bEnd);
+ status = USB_ST_NORESPONSE;
+ dev_status = status;
+ /* do the proper sequence to abort the transfer */
+ wVal &= ~MGC_M_TXCSR_FIFONOTEMPTY;
+ wVal |= MGC_M_TXCSR_FLUSHFIFO;
-+
++
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd, wVal);
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd, wVal);
-+
++
+#ifdef MUSB_CONFIG_PROC_FS
+ pEnd->dwErrorTxPackets++;
+#endif
-+ }
++ }
+ else if( wTxCsrVal & MGC_M_TXCSR_H_NAKTIMEOUT ) {
+ /* cover it up if retries not exhausted */
-+ if( pUrb->status==-EINPROGRESS && ++pEnd->bRetries < MUSB_MAX_RETRIES )
-+ {
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
++ if( pUrb->status==-EINPROGRESS && ++pEnd->bRetries < MUSB_MAX_RETRIES )
++ {
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0,
+ MGC_M_TXCSR_TXPKTRDY);
-+
++
+ MGC_SLOW_DEVICE_KLUDGE_DELAY_INCREASE;
-+ DBG(2, "tx error on ep%d, mgc_slow_device_kludge_delay=%d\n",
++ DBG(2, "tx error on ep%d, mgc_slow_device_kludge_delay=%d\n",
+ bEnd, mgc_slow_device_kludge_delay);
+ spin_unlock(&pEnd->Lock);
-+ DBG(2, "==> cover tx error\n");
++ DBG(2, "==> cover tx error\n");
+ SPIN_UNLOCK_IRQRESTORE(&pThis->Lock, flags);
+ return;
+ }
-+
++
+ if ( pUrb->status==-EINPROGRESS ) {
+ status = -ECONNRESET;
+ }
+
-+ WARN("device not responding on ep=%d\n", bEnd);
++ WARN("device not responding on ep=%d\n", bEnd);
++
+
-+
+ /* do the proper sequence to abort the transfer */
+ wVal &= ~MGC_M_TXCSR_FIFONOTEMPTY;
+ wVal |= MGC_M_TXCSR_FLUSHFIFO;
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd, wVal);
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd, wVal);
+ MGC_WriteCsr8(pBase, MGC_O_HDRC_TXINTERVAL, bEnd, 0);
-+
++
+#ifdef MUSB_CONFIG_PROC_FS
+ pEnd->dwErrorTxPackets++;
-+#endif
-+ pEnd->bRetries=0;
++#endif
++ pEnd->bRetries=0;
+ } else if( wTxCsrVal & MGC_M_TXCSR_FIFONOTEMPTY ) {
+ /* whopps, dbould buffering better be enabled */
+#ifdef MUSB_PARANOID
@@ -197312,46 +197306,46 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ skip=TRUE;
+ break;
+ }
-+
-+ if ( status ) {
-+
++
++ if ( status ) {
++
+ pUrb->status=status; /* */
+
+ if ( USB_ST_STALL!=status ) {
-+ DBG(1, "Tx error on bEnd=%d, pUrb=%p, status=%d, proto=%s\n",
-+ bEnd, pUrb, status, decode_urb_protocol(pUrb));
++ DBG(1, "Tx error on bEnd=%d, pUrb=%p, status=%d, proto=%s\n",
++ bEnd, pUrb, status, decode_urb_protocol(pUrb));
+ DEBUG_CODE(3, MGC_HDRC_DUMPREGS(pThis, bEnd); );
+ }
-+
++
+ /* reset error bits */
+ wVal &= ~(MGC_M_TXCSR_H_ERROR | MGC_M_TXCSR_H_RXSTALL |
+ MGC_M_TXCSR_H_NAKTIMEOUT);
-+ wVal |= MGC_M_TXCSR_FRCDATATOG;
++ wVal |= MGC_M_TXCSR_FRCDATATOG;
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd, wVal);
+ }
-+
++
+ } while (0);
+
+
+ if ( !skip && pUrb->status==-EINPROGRESS ) {
+ mgc_linux_packet_tx(pThis, bEnd);
-+ }
++ }
+
+ /* complete the current request or start next tx transaction */
+ if ( pUrb->status!=-EINPROGRESS ) {
-+ int toggle=(pUrb->status==USB_ST_STALL)
++ int toggle=(pUrb->status==USB_ST_STALL)
+ ? 0
-+ : ((wVal & MGC_M_TXCSR_H_DATATOGGLE) ? 1 : 0);
-+ pUrb->actual_length = pEnd->dwOffset;
++ : ((wVal & MGC_M_TXCSR_H_DATATOGGLE) ? 1 : 0);
++ pUrb->actual_length = pEnd->dwOffset;
+ SPIN_UNLOCK_IRQRESTORE(&pThis->Lock, flags);
+ complete_ep_urb(pThis, pEnd, pUrb, toggle);
+ } else {
+ spin_unlock(&pEnd->Lock);
-+ if ( !skip ) {
++ if ( !skip ) {
+
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd,
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_TXCSR, bEnd,
+ MGC_M_TXCSR_TXPKTRDY);
-+ }
++ }
+ DBG(1, "==>\n");
+ SPIN_UNLOCK_IRQRESTORE(&pThis->Lock, flags);
+ }
@@ -197367,27 +197361,27 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+{
+ struct urb* pUrb;
+ unsigned long flags;
-+ uint16_t wRxCount, wRxCsrVal, wVal=0;
++ uint16_t wRxCount, wRxCsrVal, wVal=0;
+ uint8_t bIsochError = FALSE;
+ MGC_LinuxLocalEnd* pEnd = &(pThis->aLocalEnd[bEnd]);
+ uint8_t* pBase = (uint8_t*)pThis->pRegs;
+
-+ DBG(2, "<== end%d\n", bEnd);
-+ spin_lock(&pEnd->Lock);
++ DBG(2, "<== end%d\n", bEnd);
++ spin_lock(&pEnd->Lock);
+ DBG(3, "locked end%d, pUrb=%p\n", bEnd, MGC_GetCurrentUrb(pEnd));
-+
++
+ pUrb = MGC_GetCurrentUrb(pEnd);
+ if ( !pUrb ) {
+ /* THIS SHOULD NEVER HAPPEN */
+ /* stop endpoint since we have no place for its data */
+ MGC_SLOW_DEVICE_KLUDGE_DELAY_DECREASE;
-+ spin_unlock(&pEnd->Lock);
-+ DBG(1, "==> no RX URB on end %d!\n", bEnd);
-+ return;
++ spin_unlock(&pEnd->Lock);
++ DBG(1, "==> no RX URB on end %d!\n", bEnd);
++ return;
+ }
+
+ if ( !pUrb->hcpriv ) {
-+ DBG(1, "==> kickstarting it\n");
++ DBG(1, "==> kickstarting it\n");
+ mgc_linux_kickstart_urb(pThis, bEnd);
+ spin_unlock(&pEnd->Lock);
+ return;
@@ -197396,130 +197390,130 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+#ifdef MUSB_PARANOID
+ /* check URB */
+ if ( pUrb->hcpriv!=pEnd ) {
-+ ERR("==> pUrb=%p on bEnd=%d (hcpriv=%p) is corrupt!\n", pUrb, bEnd, pUrb->hcpriv);
++ ERR("==> pUrb=%p on bEnd=%d (hcpriv=%p) is corrupt!\n", pUrb, bEnd, pUrb->hcpriv);
+ /* about the urb? */
+ spin_unlock(&pEnd->Lock);
-+ return;
++ return;
+ }
+#endif
+
+ if ( !MUSB_IS_HST(pThis) ) {
+ complete_ep_urb(pThis, pEnd, pUrb, 0);
+ return;
-+ }
++ }
+
+ SPIN_LOCK_IRQSAVE(&pThis->Lock, flags);
+ MGC_SelectEnd(pBase, bEnd);
+ wVal = wRxCsrVal = MGC_ReadCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd);
+ wRxCount = MGC_ReadCsr16(pBase, MGC_O_HDRC_RXCOUNT, bEnd);
+
-+ DBG(3, "end %d wRxCsrVal=%04x, wRxCount=%d, pUrb->actual_length=%d\n", bEnd,
-+ wRxCsrVal, wRxCount, pUrb->actual_length);
++ DBG(3, "end %d wRxCsrVal=%04x, wRxCount=%d, pUrb->actual_length=%d\n", bEnd,
++ wRxCsrVal, wRxCount, pUrb->actual_length);
+
-+ do {
++ do {
+ uint32_t status = 0;
-+
++
+ /* check for errors, concurrent stall & unlink is not really
+ * handled yet! */
+ if ( wRxCsrVal & MGC_M_RXCSR_H_RXSTALL ) {
+ pEnd->bStalled=TRUE;
-+ DBG(1, "RX end %d STALL\n", bEnd);
++ DBG(1, "RX end %d STALL\n", bEnd);
+ status = USB_ST_STALL;
+ } else if(wRxCsrVal & MGC_M_RXCSR_H_ERROR) {
-+ DBG(1, "end %d Rx error\n", bEnd);
++ DBG(1, "end %d Rx error\n", bEnd);
+ DEBUG_CODE(1, MGC_HDRC_DUMPREGS(pThis, bEnd); );
-+ status=-ECONNRESET;
-+
++ status=-ECONNRESET;
++
+ /* do the proper sequence to abort the transfer */
+ wVal &= ~MGC_M_RXCSR_H_REQPKT;
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd, wVal);
+ MGC_WriteCsr8(pBase, MGC_O_HDRC_RXINTERVAL, bEnd, 0);
-+
++
+#ifdef MUSB_CONFIG_PROC_FS
+ pEnd->dwErrorRxPackets++;
+#endif
+ } else if(wRxCsrVal & MGC_M_RXCSR_DATAERROR) {
+
+ if (PIPE_BULK == pEnd->bTrafficType) {
-+ /* cover it up if retries not exhausted, slow devices might
-+ * not answer quickly enough: I was expecting a packet but the
++ /* cover it up if retries not exhausted, slow devices might
++ * not answer quickly enough: I was expecting a packet but the
+ * packet didn't come. The interrupt is generated after 3 failed
+ * attempts, it make MUSB_MAX_RETRIESx3 attempts total..
+ */
-+ if ( pUrb->status==-EINPROGRESS &&
-+ ++pEnd->bRetries < MUSB_MAX_RETRIES)
++ if ( pUrb->status==-EINPROGRESS &&
++ ++pEnd->bRetries < MUSB_MAX_RETRIES)
+ {
+ /* silently ignore it */
+ wRxCsrVal &= ~ MGC_M_RXCSR_DATAERROR;
+ wRxCsrVal &= ~MGC_M_RXCSR_RXPKTRDY;
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd,
+ wRxCsrVal | MGC_M_RXCSR_H_REQPKT);
-+
++
+ MGC_SLOW_DEVICE_KLUDGE_DELAY_INCREASE;
-+ DBG(1, "rx error on ep%d, mgc_slow_device_kludge_delay=%d\n",
++ DBG(1, "rx error on ep%d, mgc_slow_device_kludge_delay=%d\n",
+ bEnd, mgc_slow_device_kludge_delay);
+ spin_unlock(&pEnd->Lock);
-+ DBG(2, "==> cover rx error\n");
++ DBG(2, "==> cover rx error\n");
+ SPIN_UNLOCK_IRQRESTORE(&pThis->Lock, flags);
+ return;
-+ }
-+
++ }
++
+ if ( pUrb->status==-EINPROGRESS ) {
-+ DBG(-1, "urb=%p, protocol=%s timed out\n", pUrb,
++ DBG(-1, "urb=%p, protocol=%s timed out\n", pUrb,
+ decode_urb_protocol(pUrb));
+ status=-ECONNRESET;
+ }
-+
-+ wVal &= ~MGC_M_RXCSR_H_REQPKT;
++
++ wVal &= ~MGC_M_RXCSR_H_REQPKT;
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd, wVal);
-+ MGC_WriteCsr8(pBase, MGC_O_HDRC_RXINTERVAL, bEnd, 0);
++ MGC_WriteCsr8(pBase, MGC_O_HDRC_RXINTERVAL, bEnd, 0);
+ pEnd->bRetries=0;
-+
-+ /* do the proper sequence to abort the transfer;
++
++ /* do the proper sequence to abort the transfer;
+ * am I dealing with a slow device maybe? */
-+ DBG(3, "end=%d device not responding\n", bEnd);
-+
++ DBG(3, "end=%d device not responding\n", bEnd);
++
+ } else if(PIPE_ISOCHRONOUS == pEnd->bTrafficType) {
-+ DBG(3, "bEnd=%d Isochronous error\n", bEnd);
++ DBG(3, "bEnd=%d Isochronous error\n", bEnd);
+ bIsochError = TRUE;
+ }
-+
++
+#ifdef MUSB_CONFIG_PROC_FS
+ pEnd->dwErrorRxPackets++;
+#endif
+ }
-+
++
+ /* an error won't process the data */
+ if ( status ) {
-+ pUrb->status=status;
-+
++ pUrb->status=status;
++
+ /* data errors are signaled */
+ if ( USB_ST_STALL!=status ) {
-+ DBG(3, "end %d Rx error, status=%d\n", bEnd, status);
++ DBG(3, "end %d Rx error, status=%d\n", bEnd, status);
+ DEBUG_CODE(3, MGC_HDRC_DUMPREGS(pThis, bEnd); );
+ } else {
-+ mgc_hdrc_flush_fifo(pThis, bEnd, 1);
++ mgc_hdrc_flush_fifo(pThis, bEnd, 1);
+ }
-+
-+ DBG(3, "clearing all error bits, right away\n");
-+ wVal &= ~(MGC_M_RXCSR_H_ERROR | MGC_M_RXCSR_DATAERROR |
++
++ DBG(3, "clearing all error bits, right away\n");
++ wVal &= ~(MGC_M_RXCSR_H_ERROR | MGC_M_RXCSR_DATAERROR |
+ MGC_M_RXCSR_H_RXSTALL );
+ wVal &= ~MGC_M_RXCSR_RXPKTRDY;
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd, wVal);
-+ }
-+
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd, wVal);
++ }
++
+ } while (0);
-+
++
+ /* no errors, unload... */
+ if ( pUrb->status==-EINPROGRESS ) {
-+
++
+ /* be sure a packet is ready for unloading */
+ if( !wRxCsrVal & MGC_M_RXCSR_RXPKTRDY ) {
+ pUrb->status = USB_ST_INTERNALERROR;
+ /* do the proper sequence to abort the transfer */
+ wVal &= ~MGC_M_RXCSR_H_REQPKT;
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd, wVal);
-+ DBG(3, "Rx interrupt with no errors or packet!\n");
++ DBG(3, "Rx interrupt with no errors or packet!\n");
+ } else {
+ /* we are expecting traffic */
+#ifdef MUSB_DMA
@@ -197531,40 +197525,40 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ }
+ }
+#endif
-+ mgc_linux_packet_rx(pThis, bEnd, wRxCount, bIsochError);
++ mgc_linux_packet_rx(pThis, bEnd, wRxCount, bIsochError);
+ }
+ }
-+
-+ /* complete the current request or start next one clearing RxPktRdy
++
++ /* complete the current request or start next one clearing RxPktRdy
+ * and setting ReqPkt */
+ if ( pUrb->status!=-EINPROGRESS ) {
-+ int toggle=(pUrb->status==USB_ST_STALL)
++ int toggle=(pUrb->status==USB_ST_STALL)
+ ? 0
+ : ((wVal & MGC_M_RXCSR_H_DATATOGGLE) ? 1 : 0);
+ SPIN_UNLOCK_IRQRESTORE(&pThis->Lock, flags);
+ complete_ep_urb(pThis, pEnd, pUrb, toggle);
-+ DBG(2, "==>\n");
++ DBG(2, "==>\n");
+ } else {
+ spin_unlock(&pEnd->Lock);
+ wVal |= MGC_M_RXCSR_H_REQPKT;
+ wVal &= ~MGC_M_RXCSR_RXPKTRDY;
-+ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd, wVal);
-+ DBG(2, "==>\n");
++ MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd, wVal);
++ DBG(2, "==>\n");
+ SPIN_UNLOCK_IRQRESTORE(&pThis->Lock, flags);
-+ }
++ }
+}
+
+/* *************************************************************************
-+ *
++ *
+ **************************************************************************/
+
+/**
-+ * Find a local endpoint suitable for transmitting the given urb minimizing
-+ * the reconfigurations. The best localendpoint is selceted using the following
++ * Find a local endpoint suitable for transmitting the given urb minimizing
++ * the reconfigurations. The best localendpoint is selceted using the following
+ * criterion:
+ * - ep0 is used for control Urbs
+ * - for bulk Urbs only (when available) choose the Tx or Rx reserved end
-+ * - determine direction, size and traffic type
++ * - determine direction, size and traffic type
+ *
+ * @param pThis instance pointer
+ * @param pURB URB pointer
@@ -197584,7 +197578,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ uint8_t bRemoteEnd = usb_pipeendpoint(pUrb->pipe);
+ uint8_t bIsBulk = usb_pipebulk(pUrb->pipe);
+ uint8_t bRemoteAddress = (uint8_t)usb_pipedevice(pUrb->pipe);
-+
++
+ DBG(2, "<== pUrb=%p\n", pUrb);
+
+ /* control is always EP0, and can always be queued */
@@ -197594,47 +197588,47 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ }
+
+ /* use a reserved one for bulk if any */
-+ if (bIsBulk) {
-+ if (nOut && pThis->bBulkTxEnd) {
++ if (bIsBulk) {
++ if (nOut && pThis->bBulkTxEnd) {
+ DBG(3, "==> use the bulk tx end (%d)\n", pThis->bBulkTxEnd);
+ return pThis->bBulkTxEnd;
+ } else if(!nOut && pThis->bBulkRxEnd) {
+ DBG(3, "==> use the bulk rx end (%d)\n", pThis->bBulkRxEnd);
+ return pThis->bBulkRxEnd;
-+ }
++ }
+ }
+
+ /* scan, remembering exact match and best match */
+ for(nEnd = 1; nEnd < pThis->bEndCount; nEnd++) {
+ pEnd = &(pThis->aLocalEnd[nEnd]);
-+
++
+ /* consider only if direction is possible */
-+ bDirOk = (nOut && pEnd->wMaxPacketSizeTx) ||
++ bDirOk = (nOut && pEnd->wMaxPacketSizeTx) ||
+ (!nOut && pEnd->wMaxPacketSizeRx);
+ /* consider only if size is possible (in the given direction) */
+ bSizeOk = (nOut && (pEnd->wMaxPacketSizeTx >= wPacketSize)) ||
+ (!nOut && (pEnd->wMaxPacketSizeRx >= wPacketSize));
+ /* consider only traffic type */
+ bTrafficOk = (usb_pipetype(pUrb->pipe) == pEnd->bTrafficType);
-+
++
+ if (bDirOk && bSizeOk) {
+ /* convenient computations */
-+ dwDiff = nOut ? (pEnd->wMaxPacketSizeTx - wPacketSize) :
++ dwDiff = nOut ? (pEnd->wMaxPacketSizeTx - wPacketSize) :
+ (pEnd->wMaxPacketSizeRx - wPacketSize);
+ bExact = bTrafficOk && (pEnd->bRemoteEnd == bRemoteEnd) &&
+ (pEnd->bRemoteAddress == bRemoteAddress);
-+
++
+ /* bulk: best size match not claimed (we only claim periodic) */
+ if(bIsBulk && !pEnd->bIsClaimed && (wBestDiff > dwDiff)) {
+ wBestDiff = (uint16_t)dwDiff;
+ nBestEnd = nEnd;
-+
++
+ /* prefer end already in right direction (to avoid flush) */
+ if((wBestExactDiff > dwDiff) && (nOut == (int)pEnd->bIsTx)) {
+ wBestExactDiff = (uint16_t)dwDiff;
+ nBestExactEnd = nEnd;
+ }
-+
++
+ } else if(!bIsBulk && (nEnd != pThis->bBulkTxEnd) &&
+ (nEnd != pThis->bBulkRxEnd))
+ {
@@ -197648,7 +197642,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ }
+ }
+ }
-+
++
+ }
+
+ return (nBestExactEnd >= 0) ? nBestExactEnd : nBestEnd;
@@ -197666,10 +197660,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ if(bustime < 0) {
+ return bustime;
+ }
-+
-+ usb_claim_bandwidth(pUrb->dev, pUrb, bustime,
++
++ usb_claim_bandwidth(pUrb->dev, pUrb, bustime,
+ usb_pipeisoc(pipe) ? 1 : 0);
-+
++
+#ifdef MUSB_V24
+ /* propagate through linked URBs */
+ pNextUrb = pUrb->next;
@@ -197677,9 +197671,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ pNextUrb->bandwidth = bustime;
+ pNextUrb = pNextUrb->next;
+ }
-+#endif
++#endif
+ }
-+
++
+ return 0;
+}
+
@@ -197689,21 +197683,21 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ * @param pEnd the endpoint the urb shoudl be queued to
+ * @param pUrb the urb to queue
+ */
-+int mgc_schedule_urb(MGC_LinuxCd *pThis, MGC_LinuxLocalEnd* pEnd,
++int mgc_schedule_urb(MGC_LinuxCd *pThis, MGC_LinuxLocalEnd* pEnd,
+ struct urb* pUrb)
+{
+ DBG(2, "<== pUrb=%p ep=%d\n", pUrb, pEnd->bEnd);
+
-+ /* increment urb's reference count, we now control it. */
-+ pUrb = usb_get_urb(pUrb);
++ /* increment urb's reference count, we now control it. */
++ pUrb = usb_get_urb(pUrb);
+ pUrb->hcpriv = NULL; /* paranoid */
-+
++
+ /* async unlink?? */
+ if( pUrb->status!=-EINPROGRESS ) {
+
-+ mgc_linux_complete_urb(pThis, pEnd, pUrb);
-+ return 0;
-+ }
++ mgc_linux_complete_urb(pThis, pEnd, pUrb);
++ return 0;
++ }
+
+ DEBUG_CODE(3, if(pEnd->bEnd==0) { \
+ MUSB_DeviceRequest* pRequest = (MUSB_DeviceRequest*)pUrb->setup_packet;\
@@ -197712,48 +197706,48 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ le16_to_cpu(pRequest->wLength));\
+ } );
+
-+ {
++ {
+ const int bustime=mgc_check_bandwidth(pUrb);
+ if ( bustime<0 ) {
-+ ERR("==> not enough bustime for it\n");
++ ERR("==> not enough bustime for it\n");
+ return bustime;
+ }
-+ }
-+
-+ /* claim the urb for periodic transfers */
++ }
++
++ /* claim the urb for periodic transfers */
+ pEnd->bIsClaimed=mgc_urb_is_periodic(pUrb);
+ if ( pEnd->bIsClaimed ) {
-+ DBG(3, "end %d claimed for proto %s\n", pEnd->bEnd,
++ DBG(3, "end %d claimed for proto %s\n", pEnd->bEnd,
+ decode_urb_protocol(pUrb) );
+ }
+
+ { /* queue the urb and start it */
+ int idle=mgc_ep_is_idle(pEnd);
-+
++
+ if ( mgc_ep_enqueue_urb(pEnd, pUrb)!=0 ) {
-+ ERR("**>cannot queue pUrb=%p to pEnd=%p! this is bad (TM)\n", pUrb, pEnd);
++ ERR("**>cannot queue pUrb=%p to pEnd=%p! this is bad (TM)\n", pUrb, pEnd);
+ return -EBUSY;
+ }
+
-+ DBG(3, "queued URB %p (current %p) to end %d (bRemoteAddress=%d, bRemoteEnd=%d proto=%d) (idle=%d) pEnd->bBusyCompleting=%d\n",
-+ pUrb, MGC_GetCurrentUrb(pEnd), pEnd->bEnd, (uint8_t)usb_pipedevice(pUrb->pipe),
-+ (uint8_t)usb_pipeendpoint(pUrb->pipe), usb_pipetype(pUrb->pipe), idle, pEnd->bBusyCompleting);
++ DBG(3, "queued URB %p (current %p) to end %d (bRemoteAddress=%d, bRemoteEnd=%d proto=%d) (idle=%d) pEnd->bBusyCompleting=%d\n",
++ pUrb, MGC_GetCurrentUrb(pEnd), pEnd->bEnd, (uint8_t)usb_pipedevice(pUrb->pipe),
++ (uint8_t)usb_pipeendpoint(pUrb->pipe), usb_pipetype(pUrb->pipe), idle, pEnd->bBusyCompleting);
+
+ /* when using the HCD driver, idle BETTER be 1 :)) */
-+ if ( idle ) {
++ if ( idle ) {
+ mgc_linux_kickstart_urb(pThis, pEnd->bEnd);
+ }
+ }
-+
++
+#ifdef MUSB_PARANOID
+ DEBUG_CODE(5, dump_urb(pUrb); );
-+ if ( MGC_ISCORRUPT(pThis) ) {
++ if ( MGC_ISCORRUPT(pThis) ) {
+ ERR("stopping after submit\n");
-+ MGC_HdrcStop(pThis);
++ MGC_HdrcStop(pThis);
+ MUSB_ERR_MODE(pThis, MUSB_ERR_CORRUPTED);
+ DBG(2, "==> -ENOENT\n");
-+ return -ENODEV; /* like a disconect */
-+ }
++ return -ENODEV; /* like a disconect */
++ }
+#endif
+
+ DBG(2, "==>\n");
@@ -197770,35 +197764,35 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ * @param pUrb URB pointer (urb = USB request block data structure)
+ * @param iMemFlags memeory flags (see kernel docs)
+ * @return status code (0 succes)
-+ */
-+int mgc_submit_urb(MGC_LinuxCd* pThis, struct urb* pUrb,
++ */
++int mgc_submit_urb(MGC_LinuxCd* pThis, struct urb* pUrb,
+ MUSB_MEMFLAG_TYPE iMemFlags)
+{
+ int nEnd=0, rc;
-+
-+ DBG(2, "<== pUrb=%p, pUrb->hcpriv=%p proto=%s\n",
++
++ DBG(2, "<== pUrb=%p, pUrb->hcpriv=%p proto=%s\n",
+ pUrb, pUrb->hcpriv, decode_urb_protocol(pUrb));
+
+#ifdef MUSB_PARANOID
-+ if( MGC_ISCORRUPT(pThis) ) {
-+ ERR("==> pThis corrupted: stopping before submit\n");
-+ MGC_HdrcStop(pThis);
-+ MUSB_ERR_MODE(pThis, MUSB_ERR_CORRUPTED);
-+ return -ENOENT;
++ if( MGC_ISCORRUPT(pThis) ) {
++ ERR("==> pThis corrupted: stopping before submit\n");
++ MGC_HdrcStop(pThis);
++ MUSB_ERR_MODE(pThis, MUSB_ERR_CORRUPTED);
++ return -ENOENT;
+ }
+#endif
+
+#ifndef MUSB_USE_HCD_DRIVER
+ /* if it is a request to the virtual root hub, delegate */
+ /* if( usb_pipedevice(pipe) == pThis->RootHub.bAddress) */
-+
++
+ /* pUrb->dev->parent==null means that the device is the root hub,
+ this should be fine on every platform. */
+ if( !pUrb->dev->parent ) {
+/*
+ if(pThis->bDelayPortPowerOff)
+ {
-+ return -ENODEV;
++ return -ENODEV;
+ }
+*/
+ const int rc=MGC_VirtualHubSubmitUrb(&(pThis->RootHub), pUrb);
@@ -197818,56 +197812,56 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ pUrb->status = USB_ST_URB_REQUEST_ERROR;
+ ERR("==> no resource for proto=%d, addr=%d, end=%d\n", \
+ usb_pipetype(pipe), usb_pipedevice(pipe), \
-+ usb_pipeendpoint(pipe));
++ usb_pipeendpoint(pipe));
+ return USB_ST_URB_REQUEST_ERROR;
+ }
+#endif
-+
++
+ /* if no root device, assume this must be it */
+ if ( !pThis->pRootDevice ) {
+ pThis->pRootDevice = pUrb->dev;
+ }
+
-+ { /* queue */
++ { /* queue */
+ unsigned long flags=0;
+ MGC_LinuxLocalEnd *pEnd=&pThis->aLocalEnd[nEnd];
-+
++
+ if ( !pEnd->bBusyCompleting ) {
+ SPIN_LOCK_IRQSAVE(&pEnd->Lock, flags);
+ }
-+
++
+ pUrb->status=-EINPROGRESS;
+ rc=mgc_schedule_urb(pThis, pEnd, pUrb);
-+
++
+ if ( ! pEnd->bBusyCompleting ) {
+ SPIN_UNLOCK_IRQRESTORE(&pEnd->Lock, flags);
+ }
+ }
-+
++
+ return rc;
+}
+
+/**
+ * Generic v26 version (pre10).
+ */
-+static inline int
++static inline int
+ mgc_linux_submit_urb_common(struct urb* pUrb, MUSB_MEMFLAG_TYPE iMemFlags)
+{
+ MGC_LinuxCd* pThis;
-+
-+ DBG(2, "<== pUrb=%p, pUrb->hcpriv=%p proto=%s\n",
++
++ DBG(2, "<== pUrb=%p, pUrb->hcpriv=%p proto=%s\n",
+ pUrb, pUrb->hcpriv, decode_urb_protocol(pUrb));
+
+#ifdef MUSB_PARANOID
+ if (!pUrb || !pUrb->dev || !pUrb->dev->bus ) {
-+ DBG(2, "==> invalid URB");
++ DBG(2, "==> invalid URB");
+ return -EINVAL;
+ }
+#endif
+
-+ pThis = (MGC_LinuxCd*)pUrb->hcpriv;
++ pThis = (MGC_LinuxCd*)pUrb->hcpriv;
+ if ( !pThis ) {
-+ DBG(2, "==> invalid URB: pThis is null");
++ DBG(2, "==> invalid URB: pThis is null");
+ return -EINVAL;
+ }
+
@@ -197876,7 +197870,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+
+
+#ifdef MUSB_V26
-+int MGC_LinuxSubmitUrb26(struct urb *pUrb, MUSB_MEMFLAG_TYPE iMemFlags)
++int MGC_LinuxSubmitUrb26(struct urb *pUrb, MUSB_MEMFLAG_TYPE iMemFlags)
+{
+ return mgc_linux_submit_urb_common(pUrb, iMemFlags);
+}
@@ -197896,26 +197890,26 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ *
+ * @param pThis the controller
+ * @param pUrb the Urb to unlink
-+ * @return
++ * @return
+ */
-+int mgc_unlink_urb(MGC_LinuxCd* pThis, struct urb* pUrb)
++int mgc_unlink_urb(MGC_LinuxCd* pThis, struct urb* pUrb)
+{
+ unsigned long flags;
+ MGC_LinuxLocalEnd* pEnd;
+
+ DBG(-1, "<== pUrb=%p, pUrb->hcpriv=%p proto=%s \n", pUrb, pUrb->hcpriv,
+ decode_urb_protocol(pUrb));
-+
++
+#ifdef MUSB_PARANOID
+ if(MGC_ISCORRUPT(pThis)) {
+ ERR("pThis corrupted: stopping before unlink\n");
+ MGC_HdrcStop(pThis);
-+ MUSB_ERR_MODE(pThis, MUSB_ERR_CORRUPTED);
++ MUSB_ERR_MODE(pThis, MUSB_ERR_CORRUPTED);
+ DBG(2, "==>\n");
+ return -EINVAL;
+ }
+#endif
-+
++
+#ifndef MUSB_USE_HCD_DRIVER
+ /* if it is a request to the virtual root hub, delegate */
+ /* if (usb_pipedevice (pUrb->pipe) == pThis->RootHub.bAddress) */
@@ -197925,7 +197919,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ return rc;
+ }
+#endif
-+
++
+ /* which end was the urb queued? */
+ pEnd=(MGC_LinuxLocalEnd*)pUrb->hcpriv;
+ if ( pEnd )
@@ -197935,31 +197929,31 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ (pEnd > &(pThis->aLocalEnd[MUSB_C_NUM_EPS-1])))
+ {
+#ifdef MUSB_USE_HCD_DRIVER
-+ DBG(-1, "==> cannot unlink pUrb=%p, pEnd=%p is invalid\n", pUrb,
++ DBG(-1, "==> cannot unlink pUrb=%p, pEnd=%p is invalid\n", pUrb,
+ pEnd);
+ return -EINVAL;
+#endif
+ }
-+
++
+ if ( MUSB_IS_HST(pThis) && pUrb->transfer_flags & USB_ASYNC_UNLINK ) {
-+ DBG(-1, "Asyncronous unlink of pUrb=%p (pUrb->status=%d)\n",
++ DBG(-1, "Asyncronous unlink of pUrb=%p (pUrb->status=%d)\n",
+ pUrb, pUrb->status);
-+ } else {
-+ DBG(-1, "Syncronous unlink of pUrb=%p (pUrb->status=%d)\n", pUrb,
++ } else {
++ DBG(-1, "Syncronous unlink of pUrb=%p (pUrb->status=%d)\n", pUrb,
+ pUrb->status);
-+
-+ SPIN_LOCK_IRQSAVE(&pEnd->Lock, flags);
++
++ SPIN_LOCK_IRQSAVE(&pEnd->Lock, flags);
+ if ( mgc_ep_dequeue_urb(pEnd, pUrb,pThis)==0 ) {
-+ int status;
++ int status;
+
-+ SPIN_UNLOCK_IRQRESTORE(&pEnd->Lock, flags);
++ SPIN_UNLOCK_IRQRESTORE(&pEnd->Lock, flags);
+ status=mgc_linux_complete_urb(pThis, pEnd, pUrb);
+ if ( status==-EINVAL ) {
-+ ERR("*** cannot unlink pUrb=%p from bEnd=%d (current=%p)\n", pUrb,
++ ERR("*** cannot unlink pUrb=%p from bEnd=%d (current=%p)\n", pUrb,
+ pEnd->bEnd, MGC_GetCurrentUrb(pEnd));
-+ }
++ }
+ } else {
-+ SPIN_UNLOCK_IRQRESTORE(&pEnd->Lock, flags);
++ SPIN_UNLOCK_IRQRESTORE(&pEnd->Lock, flags);
+ ERR("*** pUrb=%p is not queued to bEnd=%d, this is BAD!\n", pUrb,
+ pEnd->bEnd);
+ }
@@ -197969,7 +197963,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ if(MGC_ISCORRUPT(pThis)) {
+ ERR("stopping after unlink\n");
+ MGC_HdrcStop(pThis);
-+ MUSB_ERR_MODE(pThis, MUSB_ERR_CORRUPTED);
++ MUSB_ERR_MODE(pThis, MUSB_ERR_CORRUPTED);
+ return -EINVAL;
+ }
+#endif
@@ -197985,12 +197979,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+static int mgc_linux_unlink_urb(struct urb* pUrb, int status)
+{
+ MGC_LinuxCd* pThis;
-+
++
+ DBG(2, "<== pUrb=%p\n", pUrb);
-+
++
+ /* sanity */
+ if (!pUrb || !pUrb->hcpriv) {
-+ DBG(2, "==> invalid urb%p, pUrb->hcpriv=%p\n", pUrb,
++ DBG(2, "==> invalid urb%p, pUrb->hcpriv=%p\n", pUrb,
+ (pUrb)?pUrb->hcpriv:NULL);
+ return -EINVAL;
+ }
@@ -198000,7 +197994,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ return -ENODEV;
+ }
+
-+ pThis = (MGC_LinuxCd*)pUrb->hcpriv;
++ pThis = (MGC_LinuxCd*)pUrb->hcpriv;
+ if(!pThis) {
+ ERR("==> pThis is null: stopping before unlink\n");
+ return -ENODEV;
@@ -198042,33 +198036,33 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ if ( !pThis ) {
+ ERR("Controller not initialized\n");
+ return;
-+ }
++ }
+
+ if ( !pThis->bEndCount ) {
+ WARN("pThis->bEndCount=%d might be wrong\n", pThis->bEndCount);
-+ }
++ }
+#endif
-+
++
+ for(bEnd = 0; bEnd < pThis->bEndCount; bEnd++) {
-+ pEnd = &(pThis->aLocalEnd[bEnd]);
++ pEnd = &(pThis->aLocalEnd[bEnd]);
+ pEnd->bEnd=bEnd;
-+
++
+#ifdef MUSB_PARANOID
+ if ( bEnd ) {
+ if ( spin_is_locked(&pEnd->Lock) ) {
+ WARN("End=%d is locked\n", bEnd);
+ }
-+
++
+ if ( !mgc_ep_is_idle( pEnd ) ){
+ WARN("pEnd=%d pEnd->urb_list=%p: not idle\n", pEnd->bEnd,
+ MGC_GetCurrentUrb(pEnd));
+ }
+ }
-+#endif
++#endif
+
+ mgc_ep_idle( pEnd );
-+ spin_lock_init( &pEnd->Lock );
-+
++ spin_lock_init( &pEnd->Lock );
++
+ /* restore the pads */
+#if MUSB_DEBUG > 0
+ pEnd->dwPadFront = MGC_PAD_FRONT;
@@ -198089,8 +198083,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ /* reset the softstate */
+ pThis->aLocalEnd[bEnd].bIsClaimed=FALSE;
+ pEnd->wPacketSize = 0;
-+ pEnd->bRemoteAddress = 0;
-+ pEnd->bRemoteEnd = 0;
++ pEnd->bRemoteAddress = 0;
++ pEnd->bRemoteEnd = 0;
+ pEnd->bTrafficType = 0;
+ pEnd->bIsTx=0;
+ }
@@ -198106,14 +198100,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ */
+int mgc_init_root_hub(MGC_LinuxCd *pThis) {
+ int rc=0;
-+
++
+ pThis->PortServices.pPrivateData = pThis;
+ pThis->PortServices.pfSetPortPower = MGC_LinuxSetPortPower;
+ pThis->PortServices.pfSetPortEnable = MGC_LinuxSetPortEnable;
+ pThis->PortServices.pfSetPortSuspend = MGC_LinuxSetPortSuspend;
-+ pThis->PortServices.pfSetPortReset = MGC_LinuxSetPortReset;
-+
-+ rc=MGC_VirtualHubInit(&(pThis->RootHub), pThis->pBus, 1,
++ pThis->PortServices.pfSetPortReset = MGC_LinuxSetPortReset;
++
++ rc=MGC_VirtualHubInit(&(pThis->RootHub), pThis->pBus, 1,
+ &(pThis->PortServices));
+
+ return rc;
@@ -198159,7 +198153,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ } else {
+ wReadCount = MGC_ReadCsr8(pBase, MGC_O_HDRC_COUNT0, 0);
+ }
-+
++
+ if(wReadCount != wCount) {
+ ERR("Error: loaded FIFO with %04x bytes, RxCount=%04x\n",
+ wCount, wReadCount);
@@ -198172,11 +198166,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+ } else {
+ MGC_WriteCsr16(pBase, MGC_O_HDRC_CSR0, 0, MGC_M_CSR0_P_SVDRXPKTRDY);
+ }
-+
++
+ MGC_Write16(pBase, MGC_O_HDRC_INTRTX, wReg);
+ for(wIndex = 0; wIndex < wReadCount; wIndex++) {
+ if(bDatum != aTest[wIndex]) {
-+ ERR("Error: FIFO Tx data=%02x, Rx data=%02x\n", bDatum,
++ ERR("Error: FIFO Tx data=%02x, Rx data=%02x\n", bDatum,
+ aTest[wIndex]);
+ bResult = FALSE;
+ }
@@ -198186,9 +198180,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.c ../new/linux-2.6.20/dr
+#endif
+#endif
+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.h ../new/linux-2.6.20/drivers/usb/nomadik/musb_host.h
---- linux-2.6.20/drivers/usb/nomadik/musb_host.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_host.h 2008-07-28 15:20:59.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_host.h
@@ -0,0 +1,101 @@
+/*
+ * linux/drivers/usb/nomadik/musb_host.h
@@ -198207,7 +198200,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.h ../new/linux-2.6.20/dr
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _MUSB_HOST_H
@@ -198225,7 +198218,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.h ../new/linux-2.6.20/dr
+MGC_LinuxLocalEnd* mgc_ep_find_end(MGC_LinuxCd *pThis, struct urb *pUrb);
+
+int mgc_linux_find_end(MGC_LinuxCd* pThis, struct urb* pUrb);
-+int mgc_schedule_urb(MGC_LinuxCd *pThis, MGC_LinuxLocalEnd* pEnd,
++int mgc_schedule_urb(MGC_LinuxCd *pThis, MGC_LinuxLocalEnd* pEnd,
+ struct urb* pUrb);
+
+static inline int mgc_urb_is_periodic(struct urb *pUrb) {
@@ -198235,7 +198228,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.h ../new/linux-2.6.20/dr
+extern char* decode_urb_protocol(struct urb* pUrb);
+
+
-+#ifdef MUSB_USE_HCD_DRIVER
++#ifdef MUSB_USE_HCD_DRIVER
+int mgc_hcd_schedule_urb(MGC_LinuxCd* pThis);
+#endif
+
@@ -198268,186 +198261,31 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_host.h ../new/linux-2.6.20/dr
+#endif
+
+inline void MGC_HdrcStartTx(MGC_LinuxCd* pThis, uint8_t bEnd) {
-+ DBG(3, "#HOST DISABLED\n");
++ DBG(3, "#HOST DISABLED\n");
+}
+
+inline void MGC_HdrcStopEnd(MGC_LinuxCd* pThis, uint8_t bEnd) {
-+ DBG(3, "#HOST DISABLED\n");
++ DBG(3, "#HOST DISABLED\n");
+}
+
-+inline void MGC_HdrcServiceRxReady(MGC_LinuxCd* pThis, uint8_t bEnd) {
++inline void MGC_HdrcServiceRxReady(MGC_LinuxCd* pThis, uint8_t bEnd) {
+ DBG(3, "#HOST DISABLED\n");
+}
+
+inline void MGC_HdrcServiceTxAvail(MGC_LinuxCd* pThis, uint8_t bEnd) {
-+ DBG(3, "#HOST DISABLED\n");
++ DBG(3, "#HOST DISABLED\n");
+}
+
+inline void MGC_HdrcServiceDefaultEnd(MGC_LinuxCd* pThis) {
-+ DBG(3, "#HOST DISABLED\n");
++ DBG(3, "#HOST DISABLED\n");
+}
+#endif
+
+
+#endif /* _MUSB_HOST_H */
+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musbhsfc.h ../new/linux-2.6.20/drivers/usb/nomadik/musbhsfc.h
---- linux-2.6.20/drivers/usb/nomadik/musbhsfc.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musbhsfc.h 2008-08-08 19:15:31.000000000 +0530
-@@ -0,0 +1,150 @@
-+/*
-+ * linux/drivers/usb/nomadik/musbhsfc.h
-+ *
-+ * Copyright 2007, STMicroelectronics
-+ *
-+ * 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 __MUSB_HSFC_DEFS_H__
-+#define __MUSB_HSFC_DEFS_H__
-+
-+#define MGC_MAX_USB_ENDS 16
-+
-+#define MGC_END0_FIFOSIZE 64 /* this is non-configurable */
-+
-+#define MGC_M_FIFO_EP0 0x20
-+
-+/*
-+ * MUSBHSFC Register map
-+ */
-+
-+/* Common USB registers */
-+
-+#define MGC_O_HSFC_FADDR 0x00 /* 8-bit */
-+#define MGC_O_HSFC_POWER 0x01 /* 8-bit */
-+
-+#define MGC_O_HSFC_INTRIN 0x02 /* 16-bit */
-+#define MGC_O_HSFC_INTROUT 0x04
-+#define MGC_O_HSFC_INTRINE 0x06
-+#define MGC_O_HSFC_INTROUTE 0x08
-+#define MGC_O_HSFC_INTRUSB 0x0A /* 8 bit */
-+#define MGC_O_HSFC_INTRUSBE 0x0B /* 8 bit */
-+#define MGC_O_HSFC_FRAME 0x0C
-+#define MGC_O_HSFC_INDEX 0x0E /* 8 bit */
-+#define MGC_O_HSFC_TESTMODE 0x0F /* 8 bit */
-+
-+/* These are actually indexed: */
-+#define MGC_O_HSFC_TXFIFOSZ 0x1a /* 8-bit (see masks) */
-+#define MGC_O_HSFC_RXFIFOSZ 0x1b /* 8-bit (see masks) */
-+#define MGC_O_HSFC_TXFIFOADD 0x1c /* 16-bit offset shifted right 3 */
-+#define MGC_O_HSFC_RXFIFOADD 0x1e /* 16-bit offset shifted right 3 */
-+
-+/* Endpoint registers */
-+#define MGC_O_HSFC_TXMAXP 0x00
-+#define MGC_O_HSFC_TXCSR 0x02
-+#define MGC_O_HSFC_CSR0 MGC_O_HSFC_TXCSR /* re-used for EP0 */
-+#define MGC_O_HSFC_RXMAXP 0x04
-+#define MGC_O_HSFC_RXCSR 0x06
-+#define MGC_O_HSFC_RXCOUNT 0x08
-+#define MGC_O_HSFC_COUNT0 MGC_O_HSFC_RXCOUNT /* re-used for EP0 */
-+
-+/*
-+ * MUSBHSFC Register bit masks
-+ */
-+
-+/* POWER */
-+
-+#define MGC_M_POWER_ISOUPDATE 0x80
-+#define MGC_M_POWER_SOFTCONN 0x40
-+#define MGC_M_POWER_HSENAB 0x20
-+#define MGC_M_POWER_HSMODE 0x10
-+#define MGC_M_POWER_RESET 0x08
-+#define MGC_M_POWER_RESUME 0x04
-+#define MGC_M_POWER_SUSPENDM 0x02
-+#define MGC_M_POWER_ENSUSPEND 0x01
-+
-+/* Interrupt register bit masks */
-+#define MGC_M_INTR_SUSPEND 0x01
-+#define MGC_M_INTR_RESUME 0x02
-+#define MGC_M_INTR_RESET 0x04
-+#define MGC_M_INTR_SOF 0x08
-+
-+/* TESTMODE */
-+
-+#define MGC_M_TEST_FORCEFS 0x20
-+#define MGC_M_TEST_FORCEHS 0x10
-+#define MGC_M_TEST_PACKET 0x08
-+#define MGC_M_TEST_K 0x04
-+#define MGC_M_TEST_J 0x02
-+#define MGC_M_TEST_SE0_NAK 0x01
-+
-+/* allocate for double-packet buffering (effectively doubles assigned _SIZE) */
-+#define MGC_M_FIFOSZ_DPB 0x10
-+/* allocation size (8, 16, 32, ... 4096) */
-+#define MGC_M_FIFOSZ_SIZE 0x0f
-+
-+/* CSR0 */
-+
-+#define MGC_M_CSR0_P_SVDSETUPEND 0x0080
-+#define MGC_M_CSR0_P_SVDRXPKTRDY 0x0040
-+#define MGC_M_CSR0_P_SENDSTALL 0x0020
-+#define MGC_M_CSR0_P_SETUPEND 0x0010
-+#define MGC_M_CSR0_P_DATAEND 0x0008
-+#define MGC_M_CSR0_P_SENTSTALL 0x0004
-+#define MGC_M_CSR0_TXPKTRDY 0x0002
-+#define MGC_M_CSR0_RXPKTRDY 0x0001
-+
-+/* TXCSR */
-+
-+#define MGC_M_TXCSR_AUTOSET 0x8000
-+#define MGC_M_TXCSR_ISO 0x4000
-+#define MGC_M_TXCSR_MODE 0x2000
-+#define MGC_M_TXCSR_DMAENAB 0x1000
-+#define MGC_M_TXCSR_FRCDATATOG 0x0800
-+#define MGC_M_TXCSR_P_INCOMPTX 0x0080
-+#define MGC_M_TXCSR_CLRDATATOG 0x0040
-+#define MGC_M_TXCSR_P_SENTSTALL 0x0020
-+#define MGC_M_TXCSR_P_SENDSTALL 0x0010
-+#define MGC_M_TXCSR_FLUSHFIFO 0x0008
-+#define MGC_M_TXCSR_P_UNDERRUN 0x0004
-+#define MGC_M_TXCSR_FIFONOTEMPTY 0x0002
-+#define MGC_M_TXCSR_TXPKTRDY 0x0001
-+
-+/* RXCSR */
-+
-+#define MGC_M_RXCSR_AUTOCLEAR 0x8000
-+#define MGC_M_RXCSR_P_ISO 0x4000
-+#define MGC_M_RXCSR_DMAENAB 0x2000
-+#define MGC_M_RXCSR_DISNYET 0x1000
-+#define MGC_M_RXCSR_DMAMODE 0x0800
-+#define MGC_M_RXCSR_INCOMPRX 0x0100
-+#define MGC_M_RXCSR_CLRDATATOG 0x0080
-+#define MGC_M_RXCSR_P_SENTSTALL 0x0040
-+#define MGC_M_RXCSR_P_SENDSTALL 0x0020
-+#define MGC_M_RXCSR_FLUSHFIFO 0x0010
-+#define MGC_M_RXCSR_DATAERR 0x0008
-+#define MGC_M_RXCSR_P_OVERRUN 0x0004
-+#define MGC_M_RXCSR_FIFOFULL 0x0002
-+#define MGC_M_RXCSR_RXPKTRDY 0x0001
-+
-+/*
-+ * register access macros
-+ */
-+
-+/* Get offset for a given FIFO */
-+#define MGC_FIFO_OFFSET(_bEnd) (MGC_M_FIFO_EP0 + (_bEnd * 4))
-+
-+#endif /* multiple inclusion protection */
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c ../new/linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c
---- linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c 2008-08-08 19:15:27.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c
@@ -0,0 +1,321 @@
+/*
+ * linux/drivers/usb/nomadik/musb_ioctl.c
@@ -198466,9 +198304,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c ../new/linux-2.6.20/d
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
-+
++
+#include <asm/uaccess.h>
+#include <linux/kernel.h>
+
@@ -198485,7 +198323,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c ../new/linux-2.6.20/d
+ * Zap the driver (warm start)
+ * @param pThis the controller
+ */
-+void MGC_Zap(MGC_LinuxCd* pThis) {
++void MGC_Zap(MGC_LinuxCd* pThis) {
+
+#ifdef MUSB_PARANOID
+ if ( !pThis ) {
@@ -198496,13 +198334,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c ../new/linux-2.6.20/d
+
+ MGC_HdrcStop(pThis);
+
-+#ifdef MUSB_VIRTHUB
++#ifdef MUSB_VIRTHUB
+ MGC_VirtualHubPortDisconnected(&(pThis->RootHub), 0);
+ pThis->pRootDevice = NULL;
+ mgc_hcd_flush(pThis);
+#endif
-+
-+ WARN("Controller Stopped\n");
++
++ WARN("Controller Stopped\n");
+
+
+#ifdef MUSB_HOST
@@ -198513,9 +198351,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c ../new/linux-2.6.20/d
+
+#endif
+
-+ WAIT_MS(1000);
++ WAIT_MS(1000);
+ MGC_HdrcStart( pThis );
-+ WARN("Controller Restarted\n");
++ WARN("Controller Restarted\n");
+}
+
+/**
@@ -198526,14 +198364,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c ../new/linux-2.6.20/d
+ */
+void MGC_Session(MGC_LinuxCd* pThis) {
+ uint8_t bReg, sesn=0;
-+
++
+#ifdef MUSB_PARANOID
+ if ( !pThis ) {
+ ERR("Controller not initialized\n");
+ return;
+ }
+#endif
-+
++
+ if ( MUSB_IS_ERR(pThis) ) {
+ WARN("Error mode, zap the driver first\n");
+ }
@@ -198544,7 +198382,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c ../new/linux-2.6.20/d
+ MUSB_MODE(pThis));
+ return;
+ }
-+
++
+
+ /* WHY!?!?! this looks like a race condition to me */
+ bReg = MGC_Read8(pThis->pRegs, MGC_O_HDRC_DEVCTL);
@@ -198559,8 +198397,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c ../new/linux-2.6.20/d
+void MGC_SetDebugLevel(int level) {
+#if MUSB_DEBUG > 0
+ MGC_DebugLevel=level;
-+ INFO("MGC_DebugLevel=%d\n", MGC_DebugLevel);
-+#endif
++ INFO("MGC_DebugLevel=%d\n", MGC_DebugLevel);
++#endif
+}
+
+/**
@@ -198575,30 +198413,30 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c ../new/linux-2.6.20/d
+}
+
+/** Dump the current status and compile options.
-+ * @param pThis the device driver instance
++ * @param pThis the device driver instance
+ * @param buffer where to dump the status; it must be big enough hold the
+ * result otherwise "BAD THINGS HAPPENS(TM)".
+ */
+int dump_header_stats(MGC_LinuxCd* pThis, char *buffer) {
+ int code, count=0;
+ const uint8_t* pBase=pThis->pRegs;
-+
++
+ *buffer=0;
+
-+ code=sprintf(&buffer[count],
-+ "Compile Options: [debug=%d][dma=%s][gadget=%s][otg=%s][eps=%d]\n",
-+#if MUSB_DEBUG>0
++ code=sprintf(&buffer[count],
++ "Compile Options: [debug=%d][dma=%s][gadget=%s][otg=%s][eps=%d]\n",
++#if MUSB_DEBUG>0
+ MGC_DebugLevel
+#else
+ -1
-+#endif
-+ ,
++#endif
++ ,
+#ifdef MUSB_DMA
+ "yes"
+#else
+ "no"
+#endif
-+ ,
++ ,
+#ifdef MUSB_GADGET
+ "yes"
+#else
@@ -198609,33 +198447,33 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c ../new/linux-2.6.20/d
+ "yes"
+#else
+ "no"
-+#endif
++#endif
+ ,pThis->bEndCount);
+ if ( code<0 ) {
+ ERR("A problem generating the report\n");
+ return count;
+ } else {
-+ count+=code;
++ count+=code;
+ }
+
-+ code=sprintf(&buffer[count],
++ code=sprintf(&buffer[count],
+ "Current Status: %sDRC, Mode=%s (%s=%d) (Power=%02x, DevCtl=%02x)\n",
+ ( pThis->bIsMultipoint ? "MH" : "H"),
-+ MUSB_MODE(pThis),
++ MUSB_MODE(pThis),
+#ifdef MUSB_GADGET
+ "address",
+ (MUSB_IS_DEV(pThis)?pThis->bAddress:0,
+#else
+ "delay",
+ mgc_slow_device_kludge_delay,
-+#endif
++#endif
+ MGC_Read8(pBase, MGC_O_HDRC_POWER),
+ MGC_Read8(pBase, MGC_O_HDRC_DEVCTL));
+ if ( code<0 ) {
+ ERR("A problem generating the report\n");
+ return count;
+ } else {
-+ count+=code;
++ count+=code;
+ }
+
+#ifdef MUSB_USE_HCD_DRIVER
@@ -198643,31 +198481,31 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c ../new/linux-2.6.20/d
+ int i=0;
+ mgc_hcd_urb_queue *pQueue=mgc_hcd_get_urb_queue(pThis);
+
-+ code=sprintf(&buffer[count],
++ code=sprintf(&buffer[count],
+ "HCD: urb_queue_count=%d urb_exec_count=%d\n",
+ pQueue->urb_queue_count, pQueue->urb_exec_count);
+ if ( code<0 ) {
+ ERR("A problem generating the report\n");
+ return count;
+ } else {
-+ count+=code;
++ count+=code;
+ }
-+
++
+ for (i=0; i<pThis->bEndCount; i++) {
+ if ( !mgc_ep_is_idle( &pThis->aLocalEnd[i] ) ) {
-+ code=sprintf(&buffer[count], "ep%d, current=%p\n",
++ code=sprintf(&buffer[count], "ep%d, current=%p\n",
+ i, MGC_GetCurrentUrb(&pThis->aLocalEnd[i]));
+ if ( code<0 ) {
+ ERR("A problem generating the report\n");
+ return count;
+ } else {
-+ count+=code;
++ count+=code;
+ }
+ }
+ }
+ }
+#endif
-+
++
+ return count;
+}
+
@@ -198675,21 +198513,21 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c ../new/linux-2.6.20/d
+/**
+ * decode (convert to a name) the protocol used on an endpoint.
+ * @param pThis the controller
-+ * @param bEnd the endpoint
++ * @param bEnd the endpoint
+ */
+static char* decode_protocol(MGC_LinuxCd* pThis, unsigned bEnd) {
+ char* pProto = "Err ";
-+
++
+ if ( MUSB_IS_DEV(pThis) ) {
-+#ifdef MUSB_GAGDET
++#ifdef MUSB_GAGDET
+ pProto=decode_dev_ep_protocol(pThis, bEnd);
-+#endif
++#endif
+ } else if ( MUSB_IS_HST(pThis) ) {
-+#ifdef MUSB_HOST
++#ifdef MUSB_HOST
+ pProto=decode_hst_ep_protocol(pThis, bEnd);
-+#endif
++#endif
+ }
-+
++
+ return pProto;
+}
+
@@ -198697,82 +198535,81 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.c ../new/linux-2.6.20/d
+
+/**
+ * Dump statistics for a local end (driver operaiting in host mode).
-+ * @param pThis the device driver instance
++ * @param pThis the device driver instance
+ * @param bEnd
+ * @param aBuffer the buffer to print the report to
+ */
+int dump_end_stats(MGC_LinuxCd* pThis, uint8_t bEnd, char* aBuffer) {
+ int code, count=0;
-+ MGC_LinuxLocalEnd* pEnd=&pThis->aLocalEnd[bEnd];
++ MGC_LinuxLocalEnd* pEnd=&pThis->aLocalEnd[bEnd];
+
-+ spin_lock(&pEnd->Lock);
++ spin_lock(&pEnd->Lock);
++
++ do {
+
-+ do {
-+
+ if ( mgc_ep_is_idle(pEnd) ) {
-+ code=snprintf(aBuffer, 256-count,
-+ "End-%01x: Idle (%s, proto=%s, pktsize=%04x, address=%02x, end=%02x\n",
-+ bEnd, ( pEnd->bIsTx ? "Tx" : "Rx" ), decode_protocol(pThis, bEnd),
++ code=snprintf(aBuffer, 256-count,
++ "End-%01x: Idle (%s, proto=%s, pktsize=%04x, address=%02x, end=%02x\n",
++ bEnd, ( pEnd->bIsTx ? "Tx" : "Rx" ), decode_protocol(pThis, bEnd),
+ pEnd->wPacketSize, pEnd->bRemoteAddress, pEnd->bRemoteEnd);
+ } else {
-+ code=snprintf(aBuffer, 256-count,
-+ "End-%01x: %s (urb=%p), %s, proto=%s, pkt size=%04x, address=%02x, end=%02x\n",
++ code=snprintf(aBuffer, 256-count,
++ "End-%01x: %s (urb=%p), %s, proto=%s, pkt size=%04x, address=%02x, end=%02x\n",
+ bEnd, "Busy", MGC_GetCurrentUrb(pEnd),
+ ( pEnd->bIsTx ? "Tx" : "Rx" ),
-+ decode_protocol(pThis, bEnd),
-+ pEnd->wPacketSize,
-+ pEnd->bRemoteAddress,
-+ pEnd->bRemoteEnd);
++ decode_protocol(pThis, bEnd),
++ pEnd->wPacketSize,
++ pEnd->bRemoteAddress,
++ pEnd->bRemoteEnd);
+ }
-+
++
+ if ( code<0 ) {
+ break;
+ } else {
-+ count+=code;
++ count+=code;
+ }
-+
-+ if ( MUSB_IS_HST(pThis) ) {
-+ code = snprintf(&aBuffer[count], 256-count,
++
++ if ( MUSB_IS_HST(pThis) ) {
++ code = snprintf(&aBuffer[count], 256-count,
+ " %10ld bytes Rx in %10ld pkts; %10ld errs, %10ld overruns\n",
-+ pEnd->dwTotalRxBytes,
++ pEnd->dwTotalRxBytes,
+ pEnd->dwTotalRxPackets,
-+ pEnd->dwErrorRxPackets,
++ pEnd->dwErrorRxPackets,
+ pEnd->dwMissedRxPackets);
+ if ( code<0 ) {
+ break;
+ } else {
-+ count+=code;
++ count+=code;
+ }
-+
++
+ code=snprintf(&aBuffer[count], 256-count,
+ " %10ld bytes Tx in %10ld pkts; %10ld errs, %10ld underruns\n",
-+ pEnd->dwTotalTxBytes,
++ pEnd->dwTotalTxBytes,
+ pEnd->dwTotalTxPackets,
-+ pEnd->dwErrorTxPackets,
++ pEnd->dwErrorTxPackets,
+ pEnd->dwMissedTxPackets);
+ if ( code<0 ) {
+ break;
+ } else {
-+ count+=code;
++ count+=code;
+ }
+ } else {
+ /* no stats for gadget, yet! */
+ }
+ } while(0);
+
-+ spin_unlock(&pEnd->Lock);
++ spin_unlock(&pEnd->Lock);
+ if ( code<0 ) {
+ ERR("An error generating the report");
+ return code;
+ }
-+
++
+ return count;
+}
+#endif
+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.h ../new/linux-2.6.20/drivers/usb/nomadik/musb_ioctl.h
---- linux-2.6.20/drivers/usb/nomadik/musb_ioctl.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_ioctl.h 2008-07-28 15:21:00.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_ioctl.h
@@ -0,0 +1,32 @@
+/*
+ * linux/drivers/usb/nomadik/musb_ioctl.h
@@ -198791,24 +198628,23 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_ioctl.h ../new/linux-2.6.20/d
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "musbdefs.h"
-+
++
+void MGC_Zap(MGC_LinuxCd* pThis);
+void MGC_Session(MGC_LinuxCd* pThis);
+void MGC_SetDebugLevel(int level);
+int MGC_SetDeviceDelay(int delay);
+int dump_header_stats(MGC_LinuxCd* pThis, char *buffer);
-+char*decode_protocol(MGC_LinuxCd* pThis, unsigned bEnd);
++char*decode_protocol(MGC_LinuxCd* pThis, unsigned bEnd);
+#ifdef MUSB_HOST
+int dump_end_stats(MGC_LinuxCd* pThis, uint8_t bEnd, char* aBuffer);
+#endif
+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c
---- linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c 2008-09-17 13:23:34.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c
@@ -0,0 +1,2306 @@
+/*
+ * linux/drivers/usb/nomadik/musb_plat_uds.c
@@ -198827,38 +198663,38 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*
+ * Introduction.
+ * The ICD works like the other Linux HCDs/Gadgets: it is threadless,
-+ * so it does everything either in response to an interrupt,
++ * so it does everything either in response to an interrupt,
+ * or during a call from an upper layer.
+ * It implements a virtual root hub, so as to make uniform use
+ * of the Linux hub driver.Linux
-+
-+ *
++
++ *
+ * The Linux (host-side) USB core has no concept of binding (the authors
+ * apparently missed the point of the pipe discussion in the USB spec).
+ * Instead, class drivers simply submit URBs, and an HCD may reject
+ * or defer them if sufficient resources are not available.
-+ * This means class drivers have no way to know if their requirements
++ * This means class drivers have no way to know if their requirements
+ * can possibly be fulfilled, and may be blocked indefinitely by others,
+ * without the end-user knowing why.
+ * Therefore, whether things will work depends on the order of URB submissions
+ * (which is dictated by the order of device insertion and/or driver loading
+ * and thread scheduling).
-+ *
-+ * The URB encodes pipe information in an integer,
++ *
++ * The URB encodes pipe information in an integer,
+ * requiring table searches (hurting performance).
-+ *
++ *
+ * For the HDRC, local endpoint 0 is the only choice for control traffic,
+ * so it is reprogrammed as needed, and locked during transfers.
-+ * Bulk transfers are queued to the available local endpoint with
++ * Bulk transfers are queued to the available local endpoint with
+ * the smallest possible FIFO in the given direction
+ * that will accomodate the transactions.
-+ *
++ *
+ * A typical response to the completion of a periodic URB is immediate
+ * submission of another one, so the HCD does not assume it can reprogram
+ * a local periodic-targetted endpoint for another purpose.
@@ -198868,37 +198704,37 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ * between their polling intervals, effectively interleaving traffic on them.
+ * Unfortunately, this assumes no device would ever NAK periodic tokens.
+ * This is because the core no notification to software when an attempted
-+ * periodic transaction is NAKed (its NAKlimit feature is only for
++ * periodic transaction is NAKed (its NAKlimit feature is only for
+ * control/bulk).
+ */
+
+/*
+ * Optional macros:
-+ *
++ *
+ * MUSB_FLAT_REG if defined, use the core's flag register model
-+ *
++ *
+ * MUSB_DEBUG 0 => absolutely no diagnostics
+ * 1 => minimal diagnostics (basic operational states)
+ * 2 => 1 + detailed debugging of interface with USB core
+ * 3 => 2 + internal debugging (e.g. every register write)
+ * 4 => 3 + shared-IRQ-related checking
-+ *
-+ * MUSB_DMA if defined, include DMA support.
++ *
++ * MUSB_DMA if defined, include DMA support.
+ * The DMA code to use is included below,
-+ * so may need to be edited if a non-Inventra DMA
++ * so may need to be edited if a non-Inventra DMA
+ * controller is used with the Inventra core.
+ *
+ * MUSB_AHB_ID if defined, the core's identity is read from offset 0x400
+ * to verify that the expected core is present
+ *
-+ * MUSB_CONFIG_PROC_FS enables statistics/state info in /proc/musbhdrc<n>
++ * MUSB_CONFIG_PROC_FS enables statistics/state info in /proc/musbhdrc<n>
+ * where 0 <= n < number of instances of driver
-+ *
++ *
+ *
+ * MUSB_HARD_IRQ try SA_INTERRUPT first when acquiring the irq (fallback to
+ * SA_SHIRQ when that fails.
+ *
-+ *
++ *
+ * Options taken from linux/config.h:
+ * CONFIG_PM enables power-management
+ */
@@ -198915,7 +198751,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+#include <asm/uaccess.h>
+
+#ifdef CONFIG_USB_DEBUG
-+#define DEBUG
++#define DEBUG
+#else
+#undef DEBUG
+#endif
@@ -198942,7 +198778,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+/* define this on command line */
+#ifndef MUSB_DEFAULT_IRQTYPE
-+#define MUSB_DEFAULT_IRQTYPE SA_SHIRQ
++#define MUSB_DEFAULT_IRQTYPE SA_SHIRQ
+#endif
+
+/****************************** CONSTANTS ********************************/
@@ -198954,8 +198790,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+#define MUSB_VERSION "x.x"
+#endif
+
-+#define DRIVER_INFO DRIVER_DESC "v" MUSB_VERSION
-+#define DRIVER_NAME "HCD_NAME"
++#define DRIVER_INFO DRIVER_DESC "v" MUSB_VERSION
++#define DRIVER_NAME "HCD_NAME"
+
+static const char longname[] = DRIVER_INFO;
+static const char shortname[] = DRIVER_NAME;
@@ -199073,7 +198909,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+/******************************* GLOBALS *********************************/
+
+
-+MGC_LinuxCd *hcd_to_musbstruct(void *ptr)
++MGC_LinuxCd *hcd_to_musbstruct(void *ptr)
+{
+#ifdef MUSB_USE_HCD_DRIVER
+ return (MGC_LinuxCd*)((struct usb_hcd *)ptr)->hcd_priv;
@@ -199082,7 +198918,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+#endif
+}
+
-+struct usb_hcd* musbstruct_to_hcd(const MGC_LinuxCd *pThis)
++struct usb_hcd* musbstruct_to_hcd(const MGC_LinuxCd *pThis)
+{
+#ifdef MUSB_USE_HCD_DRIVER
+ return container_of((void*)pThis, struct usb_hcd, hcd_priv);
@@ -199099,10 +198935,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+#ifndef MUSB_USE_HCD_DRIVER
+/**
-+ * Virtual hub functions: Linux USBD calls these
++ * Virtual hub functions: Linux USBD calls these
+ */
+#ifdef MUSB_VIRTHUB
-+static struct usb_operations MGC_LinuxOperations =
++static struct usb_operations MGC_LinuxOperations =
+{
+#ifndef MUSB_V26_POST10
+ .allocate = mgc_linux_alloc_device,
@@ -199111,7 +198947,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+ .get_frame_number = MGC_LinuxGetFrameNumber,
+
-+#ifdef MUSB_V24
++#ifdef MUSB_V24
+ .submit_urb = MGC_LinuxSubmitUrb24,
+#endif
+
@@ -199119,7 +198955,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ .submit_urb = MGC_LinuxSubmitUrb26,
+#endif
+
-+#ifdef MUSB_V24
++#ifdef MUSB_V24
+ .unlink_urb = MGC_LinuxUnlinkUrb24,
+#endif
+#ifdef MUSB_V26
@@ -199128,7 +198964,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+#ifdef MUSB_V26
+ .buffer_alloc = MGC_LinuxBufferAlloc,
-+ .buffer_free = MGC_LinuxBufferFree,
++ .buffer_free = MGC_LinuxBufferFree,
+ .disable = mgc_linux_disable,
+#endif
+
@@ -199182,38 +199018,38 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ arg=arg;
+
+ switch(cmd) {
-+
++
+ case OTG_DEEP_SLEEP:
-+ del_timer(&notify_timer);
++ del_timer(&notify_timer);
+ otg_deep_sleep();
+ break ;
-+
++
+ case OTG_WAKEUP:
+ otg_wakeup();
+ break ;
-+
++
+ case HOST_A_IDLE:
+ set_host_a_idle ();
+ break;
-+
++
+ case SRP_TEST:
+ srp_initiate();
+ break ;
-+
++
+ case HNP_TEST:
+ hnp_initiate();
+ break ;
-+
++
+ case PRINT_REG:
+ break;
-+
++
+ case OTG_SUSPEND:
+ break ;
-+
++
+ case OTG_RESUME:
+ break ;
+ }
-+
++
+ return 0;
+}
+
@@ -199249,18 +199085,18 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ * Timer completion callback to finish resume handling started in ISR
+ * @param pParam the driver instance
+ */
-+STATIC void MGC_HdrcDropResume(unsigned long pParam)
++STATIC void MGC_HdrcDropResume(unsigned long pParam)
+{
+ uint8_t power;
+ MGC_LinuxCd* pThis = (MGC_LinuxCd*)pParam;
+ void* pBase = pThis->pRegs;
-+
++
+ DBG(2, "<==\n");
-+
++
+ power = MGC_Read8(pBase, MGC_O_HDRC_POWER);
+ MGC_Write8(pBase, MGC_O_HDRC_POWER, power & ~MGC_M_POWER_RESUME);
-+
-+#ifdef MUSB_VIRTHUB
++
++#ifdef MUSB_VIRTHUB
+ MGC_VirtualHubPortResumed(&(pThis->RootHub), 0);
+#endif
+}
@@ -199287,7 +199123,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ * @param wCount how many bytes to load
+ * @param pSource data buffer
+ */
-+void MGC_HdrcLoadFifo(const uint8_t* pBase, uint8_t bEnd,
++void MGC_HdrcLoadFifo(const uint8_t* pBase, uint8_t bEnd,
+ uint16_t wCount, const uint8_t* pSource)
+{
+ uint16_t wIndex, wIndex32;
@@ -199295,19 +199131,19 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ uint8_t bFifoOffset = MGC_FIFO_OFFSET(bEnd);
+ DBG(2, "pBase=%p, bEnd=%d, wCount=0x%04x, pSrc=%p\n",
+ pBase, bEnd, wCount, pSource);
-+
++
+#ifdef MUSB_PARANOID
+ if ( IS_INVALID_ADDRESS(pSource) ) {
+ ERR("loading fifo from a null buffer; why did u do that????\n");
+ return;
+ }
+#endif
-+
++
+ /* doublewords when possible */
+ for(wIndex = wIndex32 = 0; wIndex32 < wCount32; wIndex32++, wIndex += 4) {
+ MGC_Write32(pBase, bFifoOffset, *((uint32_t*)&(pSource[wIndex])));
+ }
-+
++
+ for(; wIndex < wCount; wIndex++) {
+ MGC_Write8(pBase, bFifoOffset, pSource[wIndex]);
+ }
@@ -199321,28 +199157,28 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ * @param wCount how many bytes to unload
+ * @param pDest data buffer
+ */
-+void MGC_HdrcUnloadFifo(const uint8_t* pBase, uint8_t bEnd,
++void MGC_HdrcUnloadFifo(const uint8_t* pBase, uint8_t bEnd,
+ uint16_t wCount, uint8_t* pDest)
+{
+ uint16_t wIndex=0, wIndex32;
+ uint16_t wCount32 = wCount >> 2;
+ uint8_t bFifoOffset = MGC_FIFO_OFFSET(bEnd);
-+
++
+#ifdef MUSB_PARANOID
+ if ( IS_INVALID_ADDRESS(pDest) ) {
+ ERR("unloading fifo from a null buffer\n");
+ return;
+ }
+#endif
-+
++
+ DBG(2, "pBase=%p, bEnd=%d, wCount=0x%04x, pDest=%p\n", pBase, bEnd,
+ wCount, pDest);
-+
++
+ /* doublewords when possible */
+ for(wIndex = wIndex32 = 0; wIndex32 < wCount32; wIndex32++, wIndex += 4) {
+ *((uint32_t*)&(pDest[wIndex])) = MGC_Read32(pBase, bFifoOffset);
+ }
-+
++
+ while(wIndex < wCount) {
+ pDest[wIndex++]=MGC_Read8(pBase, bFifoOffset);
+ }
@@ -199358,23 +199194,23 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ * @param pThis the controller
+ * @param vberr !=0 if a VBUs error was discovered.
+ */
-+static void hdrc_stop_host(MGC_LinuxCd* pThis, int vberr)
++static void hdrc_stop_host(MGC_LinuxCd* pThis, int vberr)
+{
+ MGC_HdrcStop(pThis);
-+
-+#ifdef MUSB_VIRTHUB
++
++#ifdef MUSB_VIRTHUB
+ MGC_VirtualHubPortDisconnected(&(pThis->RootHub), 0);
+ pThis->pRootDevice = NULL;
+ mgc_hcd_flush(pThis);
+#endif
-+
++
+}
+
+/**
+ * Interrupt Service Routine to record USB "global" interrupts.
-+ * Since these do not happen often and signify things of
++ * Since these do not happen often and signify things of
+ * paramount importance, it seems OK to check them individually;
-+ * there is an ORDER to perform the tests check p35 of the MUSBHDRC
++ * there is an ORDER to perform the tests check p35 of the MUSBHDRC
+ * manual.
+ *
+ * @param pThis instance pointer
@@ -199392,21 +199228,21 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+#endif
+ uint8_t bResetBabble = FALSE;
+ uint8_t* pBase = (uint8_t*)pThis->pRegs;
-+
++
+ /* in host mode when a device resume me (from power save)
-+ * in device mode when the host resume me; it shold not change
++ * in device mode when the host resume me; it shold not change
+ * "identity".
+ */
+ if (bIntrUSB & MGC_M_INTR_RESUME) {
+ handled++;
+ DBG(2, "RESUME\n");
-+
++
+ if (devctl & MGC_M_DEVCTL_HM) {
+#ifdef MUSB_HOST
+ printk("Host Mode : resume\n");
+ power &= ~MGC_M_POWER_SUSPENDM;
+ MGC_Write8(pBase, MGC_O_HDRC_POWER, power | MGC_M_POWER_RESUME);
-+ MGC_LinuxSetTimer(pThis, MGC_HdrcDropResume,
++ MGC_LinuxSetTimer(pThis, MGC_HdrcDropResume,
+ (unsigned long)pThis, 40);
+#endif
+ }
@@ -199415,87 +199251,87 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ printk("Device Mode : resume\n");
+ }
+ }
-+
-+ /* p35 MUSBHDRC manual for the order of the tests */
++
++ /* p35 MUSBHDRC manual for the order of the tests */
+ if (bIntrUSB & MGC_M_INTR_SESSREQ) {
+ DBG(2, "SESSION_REQUEST\n");
-+
-+ /* NOTE i might get a sesison request WHILE switchign between B and A
-+ * device investigatge about that; check p35 of the manual
++
++ /* NOTE i might get a sesison request WHILE switchign between B and A
++ * device investigatge about that; check p35 of the manual
+ */
-+#ifdef MUSB_PARANOID
++#ifdef MUSB_PARANOID
+ if ( HDRC_IS_DEV(pThis) ) {
-+ ERR("Received a SESSION_REQUEST when connected to the B end; am I switching?!\n");
++ ERR("Received a SESSION_REQUEST when connected to the B end; am I switching?!\n");
+ }
+#endif
-+
++
+ /* time critical code (turn on VBUS); inherent race condition */
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, MGC_M_DEVCTL_SESSION);
+ pThis->bEnd0Stage = MGC_END0_START;
-+
++
+ handled++;
-+
++
+ }
-+
-+ /* VBUSError is bad, shutdown & go to error mode and ignore
-+ * the other interrups; p35 MUSBHDRC manual for the order
-+ of the tests */
++
++ /* VBUSError is bad, shutdown & go to error mode and ignore
++ * the other interrups; p35 MUSBHDRC manual for the order
++ of the tests */
+ if (bIntrUSB & MGC_M_INTR_VBUSERROR) {
+ handled++;
-+
-+#ifdef MUSB_PARANOID
++
++#ifdef MUSB_PARANOID
+ if ( !(devctl & MGC_M_DEVCTL_HM) ) {
+ ERR("Received a MGC_M_INTR_VBUSERROR when connected to the B end!\n");
-+ hdrc_stop_host(pThis, FALSE);
-+ return handled;
++ hdrc_stop_host(pThis, FALSE);
++ return handled;
+ }
+#endif
-+
++
+ DBG(2, "V_BUS ERROR??? this is bad (TM)\n");
+ if ( pThis->bVbusErrors++ > MUSB_MAX_VBUS_ERRORS ) {
+ printk("Vbus Error\n");
-+ hdrc_stop_host(pThis, TRUE);
++ hdrc_stop_host(pThis, TRUE);
+ MUSB_ERR_MODE(pThis, MUSB_ERR_VBUS);
+ }
+ }
-+
++
+ /* connect is valid only when in host mode; ignore it if in device mode;
-+ p35 MUSBHDRC manual for the order of the tests */
-+
-+
++ p35 MUSBHDRC manual for the order of the tests */
++
++
+ if(bIntrUSB & MGC_M_INTR_CONNECT) {
+ handled++;
+ Urb_status=0;
-+
++
+ if(host_a_idle==1){
+ host_a_idle=0;
+ }
+ DBG(2, "RECEIVED A CONNECT (goto host mode)\n");
+ printk("connect interrupt\n");
-+#ifdef MUSB_PARANOID
++#ifdef MUSB_PARANOID
+ if ( !(devctl & MGC_M_DEVCTL_HM) ) {
+ ERR("Received a CONNECT when connected to the B end!\n");
+ }
+#endif
+ MGC_Write16(pBase, MGC_O_HDRC_INTRTXE, pThis->wEndMask);
+ MGC_Write16(pBase, MGC_O_HDRC_INTRRXE, pThis->wEndMask & 0xfffe);
-+
++
+#ifdef MUSB_HOST
+ pThis->pRootDevice = NULL;
+ pThis->bEnd0Stage = MGC_END0_START;
-+
++
+ /* reset the addres... probably not needed*/
+ MGC_Write8(pThis->pRegs, MGC_O_HDRC_FADDR, 0);
+ /* flush endpoints when transitioning from Device Mode*/
+ if ( MUSB_IS_A_IDLE(pThis) ) {
+ uint8_t bEnd;
-+
++
+ for(bEnd = 0; bEnd < pThis->bEndCount; bEnd++) {
+ MGC_HdrcStopEnd(pThis, bEnd);
+ }
+ }
-+
-+
++
++
+ if(devctl & MGC_M_DEVCTL_LSDEV) {
+ bSpeed = 3;
+ bHubSpeed = 0;
@@ -199504,36 +199340,36 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ bSpeed = 2;
+ bHubSpeed = 1;
+ }
-+
++
+ pThis->bRootSpeed = bSpeed;
+ if(pThis->bIsMultipoint) {
+ /* set speed for EP0 */
+ MGC_SelectEnd(pBase, 0);
-+ MGC_WriteCsr8(pBase, MGC_O_HDRC_TYPE0, 0,
++ MGC_WriteCsr8(pBase, MGC_O_HDRC_TYPE0, 0,
+ (bSpeed << 6));
+ }
-+
++
+ MUSB_HST_MODE(pThis);
-+
++
+ /* indicate new connection to OTG machine */
-+ MGC_VirtualHubPortConnected(&(pThis->RootHub), 0,
++ MGC_VirtualHubPortConnected(&(pThis->RootHub), 0,
+ bHubSpeed);
-+#endif
++#endif
+ }
-+
++
+ /* saved one bit: bus reset and babble share the same bit;
+ * If I am host is a babble! i must be the only one allowed
-+ * to reset the bus; when in otg mode it means that I have
++ * to reset the bus; when in otg mode it means that I have
+ * to switch to device
+ */
+ if (bIntrUSB & MGC_M_INTR_RESET) {
-+
++
+#ifndef MUSB_OTG
-+
-+ /* This is added since, Mentor IP same bit is shared for RESET and BABBLE.
-+ * In host mode if this bit is set to indicate BABBLE, but when this bit
++
++ /* This is added since, Mentor IP same bit is shared for RESET and BABBLE.
++ * In host mode if this bit is set to indicate BABBLE, but when this bit
+ * get set the controller clears the session bit and the host mode bit in
-+ * device control register and driver reads it as RESET and tries to enter
++ * device control register and driver reads it as RESET and tries to enter
+ * in device mode. So if OTG is not set we will check the driver status and
+ * the appropriate action.
+ */
@@ -199549,23 +199385,23 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ if (bResetBabble) {
+ printk("Host Mode : reset\n");
+ hdrc_stop_host(pThis, FALSE);
-+ /* restart session after cooldown unless threshold reached */
++ /* restart session after cooldown unless threshold reached */
+ if( pThis->nBabbleCount++ < MUSB_MAX_BABBLE_COUNT) {
-+ MGC_LinuxSetTimer(pThis, MGC_HdrcRestart,
++ MGC_LinuxSetTimer(pThis, MGC_HdrcRestart,
+ (unsigned long)pThis, MUSB_RESTART_TIME);
+ }
+ } else {
-+
++
+ del_timer(&notify_timer);
-+ pThis->bEnd0Stage = MGC_END0_START;
++ pThis->bEnd0Stage = MGC_END0_START;
+ MUSB_DEV_MODE(pThis);
+ printk("Device Mode : reset\n");
-+
++
+ if(b_hnp_init == 1){
+ otg_disconnect(udc_address);
+ driver_change_mode_handler(2);
+ devctl = MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
-+
++
+ }
+
+ if(udcinitmonitorflag_isr==0){
@@ -199573,21 +199409,21 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ }
+ udcinitmonitorflag_init=1;
+ power = MGC_Read8(pBase, MGC_O_HDRC_POWER);
-+ musb_reset_isr();
-+ dev_safe_remove=1;
++ musb_reset_isr();
++ dev_safe_remove=1;
+ }
+ handled++;
+ }
-+
++
+ return handled;
+}
+
+
+/**
+ * Interrupt Service Routine to record USB "global" interrupts.
-+ * Since these do not happen often and signify things of
++ * Since these do not happen often and signify things of
+ * paramount importance, it seems OK to check them individually;
-+ * there is an ORDER to perform the tests check p35 of the MUSBHDRC
++ * there is an ORDER to perform the tests check p35 of the MUSBHDRC
+ * manual.
+ *
+ * @param pThis instance pointer
@@ -199611,10 +199447,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+ /* start any periodic Tx transfers waiting for current frame */
+ wFrame = MGC_Read16(pBase, MGC_O_HDRC_FRAME);
-+ for(bEnd = 1;
-+ (bEnd < pThis->bEndCount) && (pThis->wEndMask >= (1 << bEnd));
++ for(bEnd = 1;
++ (bEnd < pThis->bEndCount) && (pThis->wEndMask >= (1 << bEnd));
+ bEnd++)
-+ {
++ {
+ if(pThis->aLocalEnd[bEnd].dwWaitFrame &&
+ pThis->aLocalEnd[bEnd].dwWaitFrame >= wFrame)
+ {
@@ -199627,19 +199463,19 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ /* p35 MUSBHDRC manual for the order of the tests */
+ if((bIntrUSB & MGC_M_INTR_DISCONNECT) && !pThis->bIgnoreDisconnect) {
+ DBG(2, "DISCONNECT()\n");
-+
-+ mdelay(500);
++
++ mdelay(500);
+ handled++;
-+ /* need to check it against pThis, because the devctl is going
++ /* need to check it against pThis, because the devctl is going
+ * low as soon as the device gets disconnected */
+ if ( MUSB_IS_HST(pThis) ) {
+ printk("Host Disconnect\n");
+ DBG(3, "Disconnecting a port of VirtualHub\n");
-+
-+#ifdef MUSB_VIRTHUB
++
++#ifdef MUSB_VIRTHUB
+ MGC_VirtualHubPortDisconnected(&(pThis->RootHub), 0);
+ pThis->pRootDevice = NULL;
-+
++
+ Urb_status=1;
+ /* flush endpoints */
+ for(bEnd = 0; bEnd < pThis->bEndCount; bEnd++) {
@@ -199652,7 +199488,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ mod_timer(&notify_timer, jiffies + msecs_to_jiffies(1000));
+
+#endif
-+
++
+#ifdef MUSB_CONFIG_PROC_FS
+ if(pThis->pfDisconnectListener) {
+ pThis->pfDisconnectListener(pThis->pDisconnectListenerParam);
@@ -199667,40 +199503,40 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ }
+
+ else {
-+ printk("Device Disconnect\n");
++ printk("Device Disconnect\n");
+ udc_disconnect_isr();
+ MUSB_B_IDLE_MODE(pThis);
+ mod_timer(&notify_timer, jiffies + msecs_to_jiffies(1000));
+ }
+ }
+
-+ /* KLUDGE: race condition, doing this right away might prevent
-+ * the virtual hub/usbcore to process the last urbs. As a matter
++ /* KLUDGE: race condition, doing this right away might prevent
++ * the virtual hub/usbcore to process the last urbs. As a matter
+ * of facts this code should be called after the "disconnect" */
+ }
+
-+ /* I cannot get suspend while in host mode! go to error mode and ignore
++ /* I cannot get suspend while in host mode! go to error mode and ignore
+ * the other signals; need to be last (see manual p35)s */
-+ if (bIntrUSB & MGC_M_INTR_SUSPEND) {
++ if (bIntrUSB & MGC_M_INTR_SUSPEND) {
+ DBG(2, "RECEIVED SUSPEND\n");
+ if( b_hnp_suspend ==1)
+ {
+ uint8_t linestate;
+ MGC_HdrcReadUlpiReg(pThis, 0x15, &linestate);
+ b_hnp_suspend = 0;
-+ driver_change_mode_handler(1);
++ driver_change_mode_handler(1);
+ }
+ handled++;
-+
++
+ if(devctl & MGC_M_DEVCTL_HM) {
+ hdrc_stop_host(pThis, FALSE);
-+ }
++ }
+ if(dev_safe_remove==1)
+ {
+ udc_suspend();
+ printk("Device Removed Safely \n");
+ dev_safe_remove=0;
-+ state=MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
++ state=MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, state & ~MGC_M_DEVCTL_SESSION);
+ }
+ }
@@ -199719,7 +199555,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ uint8_t* pBase = (uint8_t*)pThis->pRegs;
+
+ DBG(2, "<==\n");
-+
++
+ /* init the local ends */
+#ifdef MUSB_CONFIG_PROC_FS
+ pThis->aLocalEnd[0].dwTotalRxBytes = 0;
@@ -199731,7 +199567,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+#endif
+
+ /* init counters and local data */
-+ for(bEnd=1; bEnd < pThis->bEndCount; bEnd++) {
++ for(bEnd=1; bEnd < pThis->bEndCount; bEnd++) {
+ spin_lock( &pThis->aLocalEnd[bEnd].Lock );
+#ifdef MUSB_CONFIG_PROC_FS
+ pThis->aLocalEnd[bEnd].dwTotalRxBytes = 0;
@@ -199743,9 +199579,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+#endif
+#ifndef MUSB_USE_HCD_DRIVER
+ INIT_LIST_HEAD( &(pThis->aLocalEnd[bEnd].urb_list) );
-+#endif
++#endif
+ pThis->aLocalEnd[bEnd].bIsClaimed=FALSE;
-+ spin_unlock( &pThis->aLocalEnd[bEnd].Lock );
++ spin_unlock( &pThis->aLocalEnd[bEnd].Lock );
+ }
+
+ /* reset the counters */
@@ -199764,7 +199600,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ MGC_Write8(pBase, MGC_O_HDRC_TESTMODE, 0);
+
+ /* enable high-speed/low-power and start session */
-+ MGC_Write8(pBase, MGC_O_HDRC_POWER,
++ MGC_Write8(pBase, MGC_O_HDRC_POWER,
+ MGC_M_POWER_SOFTCONN | MGC_M_POWER_HSENAB);
+
+
@@ -199773,7 +199609,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, MGC_M_DEVCTL_SESSION);
+#else
+ {
-+ uint8_t state=MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
++ uint8_t state=MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, state & ~MGC_M_DEVCTL_SESSION);
+ }
+#endif
@@ -199782,7 +199618,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+}
+
+/**
-+ * Disable the HDRC (disable & flush interrupts);
++ * Disable the HDRC (disable & flush interrupts);
+ * @param pThis the controller to disable
+ */
+STATIC void mgc_hdrc_disable(MGC_LinuxCd* pThis)
@@ -199791,7 +199627,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ uint8_t* pBase = (uint8_t*)pThis->pRegs;
+
+ DBG(2, "<==\n");
-+
++
+ /* disable interrupts */
+ MGC_Write8(pBase, MGC_O_HDRC_INTRUSBE, 0);
+ MGC_Write16(pBase, MGC_O_HDRC_INTRTXE, 0);
@@ -199817,13 +199653,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ DBG(2, "<==\n");
+
+ temp = MGC_Read8(pBase, MGC_O_HDRC_POWER);
-+ MGC_Write8(pBase, MGC_O_HDRC_POWER, temp | MGC_M_POWER_RESET);
++ MGC_Write8(pBase, MGC_O_HDRC_POWER, temp | MGC_M_POWER_RESET);
+ DBG(1, "%s power reg:0x%x \n", __FUNCTION__,MGC_Read8(pBase, MGC_O_HDRC_POWER));
+
+}
+
+/**
-+ * Enable the HDRC
++ * Enable the HDRC
+ * @param pThis the controller to disable
+ */
+void mgc_hdrc_enable(MGC_LinuxCd* pThis)
@@ -199836,7 +199672,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ MGC_Write16(pBase, MGC_O_HDRC_INTRTXE, pThis->wEndMask);
+ MGC_Write16(pBase, MGC_O_HDRC_INTRRXE, pThis->wEndMask & 0xfffe);
+ /* don't enable suspend mode! */
-+ MGC_Write8(pBase, MGC_O_HDRC_INTRUSBE, 0xf7);
++ MGC_Write8(pBase, MGC_O_HDRC_INTRUSBE, 0xf7);
+
+ DBG(1, "%s INTRUSBE reg:0x%x \n", __FUNCTION__,MGC_Read8(pBase, MGC_O_HDRC_INTRUSBE));
+ DBG(1, "%s INTRTXE reg:0x%x \n", __FUNCTION__,MGC_Read8(pBase, MGC_O_HDRC_INTRTXE));
@@ -199850,7 +199686,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, MGC_M_DEVCTL_SESSION);
+#else
+ {
-+ uint8_t state=MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
++ uint8_t state=MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, state & ~MGC_M_DEVCTL_SESSION);
+ }
+#endif
@@ -199866,15 +199702,15 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+ /* flush endpoints */
+#ifdef MUSB_VIRTHUB
-+ {
++ {
+ uint8_t bEnd;
-+
-+ mgc_hdrc_disable(pThis);
++
++ mgc_hdrc_disable(pThis);
+ for(bEnd = 0; bEnd < min(16, (int)pThis->bEndCount); bEnd++) {
+ MGC_HdrcStopEnd(pThis, bEnd);
+ }
+ }
-+#endif
++#endif
+}
+
+/* ------------------------------------------------------------------------ */
@@ -199886,7 +199722,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+{
+ uint8_t bVal;
+ uint8_t* pBase = pThis->pRegs;
-+
++
+ /* ensure not powered down */
+ if(MGC_Read8(pBase, MGC_O_HDRC_POWER) & MGC_M_POWER_ENSUSPEND) {
+ return FALSE;
@@ -199895,7 +199731,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ bVal = bExtSource ? MGC_M_ULPI_VBUSCTL_USEEXTVBUS : 0;
+ bVal |= bExtIndicator ? MGC_M_ULPI_VBUSCTL_USEEXTVBUSIND : 0;
+ MGC_Write8(pBase, MGC_O_HDRC_ULPI_VBUSCTL, bVal);
-+
++
+ return TRUE;
+}
+
@@ -199911,14 +199747,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+ /* polled */
+ MGC_Write8(pBase, MGC_O_HDRC_ULPI_REGADDR, bAddr);
-+ MGC_Write8(pBase, MGC_O_HDRC_ULPI_REGCTL,
++ MGC_Write8(pBase, MGC_O_HDRC_ULPI_REGCTL,
+ MGC_M_ULPI_REGCTL_READNOTWRITE | MGC_M_ULPI_REGCTL_REG);
-+
++
+
+ while(!(MGC_M_ULPI_REGCTL_COMPLETE & bCtl)) {
+ bCtl = MGC_Read8(pBase, MGC_O_HDRC_ULPI_REGCTL);
+ }
-+
++
+ *pbData = MGC_Read8(pBase, MGC_O_HDRC_ULPI_REGDATA);
+ MGC_Write8(pBase, MGC_O_HDRC_ULPI_REGCTL, 0);
+ return TRUE;
@@ -199991,12 +199827,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ if(reg & MGC_M_CONFIGDATA_SOFTCONE) {
+ strcat(aInfo, ", SoftConn");
+ }
-+
++
+ INFO("ConfigData=0x%02x (%s)\n", reg, aInfo);
+
+#ifdef MUSB_AHB_ID
+ dwData = MGC_Read32(pBase, 0x404);
-+ sprintf(aDate, "%04d-%02x-%02x", (dwData & 0xffff),
++ sprintf(aDate, "%04d-%02x-%02x", (dwData & 0xffff),
+ (dwData >> 16) & 0xff,
+ (dwData >> 24) & 0xff);
+ dwData = MGC_Read32(pBase, 0x408);
@@ -200011,12 +199847,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ pThis->bIsMultipoint=(MUSB_CONTROLLER_MHDRC == wType)
+ ? TRUE : FALSE;
+#endif
-+
++
+ /* log release info */
+ wRelease = MGC_Read16(pBase, 0x6c);
+ wRelMajor = (wRelease >> 10) & 0x1f;
+ wRelMinor = wRelease & 0x3ff;
-+ snprintf(aRevision, 32, "%d.%d%s", wRelMajor,
++ snprintf(aRevision, 32, "%d.%d%s", wRelMajor,
+ wRelMinor, (wRelease & 0x8000) ? "RC" : "");
+ INFO("%cDRC version %s %s\n", bType, aRevision, aDate);
+
@@ -200029,14 +199865,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ pThis->bBulkTxEnd = 0;
+ pThis->bBulkRxEnd = 0;
+ pThis->bEndCount = 1;
-+ pThis->wEndMask = 1;
++ pThis->wEndMask = 1;
+
+#ifdef MUSB_C_DYNFIFO_DEF
+ if(!(reg & MGC_M_CONFIGDATA_DYNFIFO)) {
+ ERR("Dynamic FIFOs not detected in hardware; please rebuild software\n");
+ return FALSE;
+ }
-+#else
++#else
+ if (reg & MGC_M_CONFIGDATA_DYNFIFO) {
+ ERR("Dynamic FIFOs detected in hardware; please rebuild\n");
+ return FALSE;
@@ -200066,9 +199902,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+**************************************************************************/
+
+#ifdef MUSB_V26
-+#define IS_TIMER_INITILIZED(_t) ((_t)->magic==TIMER_MAGIC)
++#define IS_TIMER_INITILIZED(_t) ((_t)->magic==TIMER_MAGIC)
+#else
-+#define IS_TIMER_INITILIZED(_t) (1)
++#define IS_TIMER_INITILIZED(_t) (1)
+#endif
+
+/**
@@ -200078,7 +199914,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ * @param pParam parameter for callback
+ * @param millisecs how many milliseconds to set
+ */
-+void MGC_LinuxSetTimer(MGC_LinuxCd* pThis, void (*pfFunc)(unsigned long),
++void MGC_LinuxSetTimer(MGC_LinuxCd* pThis, void (*pfFunc)(unsigned long),
+ unsigned long pParam, unsigned long millisecs)
+{
+ DBG(2, "<==\n");
@@ -200104,7 +199940,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ }
+#endif
+
-+ DBG(2, "<== allocating memory on bus (%s), %d, pDmaAddress=%p\n",
++ DBG(2, "<== allocating memory on bus (%s), %d, pDmaAddress=%p\n",
+ pBus->bus_name, pBus->busnum, pDmaAddress );
+ return MGC_AllocBufferMemory(pThis, nSize, iMemFlags, pDmaAddress);
+}
@@ -200127,7 +199963,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+#endif
+
+
-+#if defined(MUSB_V26) || defined(MUSB_GADGET)
++#if defined(MUSB_V26) || defined(MUSB_GADGET)
+/**
+ * Allocate memory for a buffer that might use DMA.
+ *
@@ -200138,34 +199974,34 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ */
+void* MGC_AllocBufferMemory(MGC_LinuxCd* pThis, size_t bytes, int gfp_flags, dma_addr_t* dma) {
+ void* addr = NULL;
-+
++
+ if ( dma ) {
+ *dma = DMA_ADDR_INVALID;
+ }
-+
++
+#if !defined(USE_KMALLOC) && !defined(MUSB_LINUX_MV21)
+ {
+ KMALLOC(addr, bytes, gfp_flags);
+ if ( addr && dma ) {
+ *dma = virt_to_phys(addr);
+ }
-+ DBG(2, "mallocd addr=%p, pDmaAddress=%p\n", addr, dma);
++ DBG(2, "mallocd addr=%p, pDmaAddress=%p\n", addr, dma);
+ }
+#else
-+ {
++ {
+ KMALLOC(addr, bytes, gfp_flags);
+ if ( addr && dma ) {
+ *dma = virt_to_phys(addr);
+ }
-+
-+ DBG(2, "mallocd addr=%p, pDmaAddress=%p\n", addr, dma);
++
++ DBG(2, "mallocd addr=%p, pDmaAddress=%p\n", addr, dma);
+ }
+#endif
+
+ if ( addr ) {
-+ memset(addr, 0, bytes);
++ memset(addr, 0, bytes);
+ }
-+
++
+ return addr;
+}
+
@@ -200200,10 +200036,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ */
+STATIC int mgc_linux_alloc_device(struct usb_device *pDevice)
+{
-+
++
+ DBG(2, "<==>\n");
+ return 0;
-+
++
+}
+
+/**
@@ -200230,7 +200066,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+/* ------------------------------------------------------------------------ */
+
+/**
-+ * Get the current frame number.
++ * Get the current frame number.
+ * @param struct usb_hcd pointer to usb_hcd structure
+ * @return frame number
+ */
@@ -200239,7 +200075,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ const int no=(int)MGC_Read16(pBase, MGC_O_HDRC_FRAME);
+
+ DBG(2, "<==> %d\n", no);
-+ return no;
++ return no;
+}
+
+/*
@@ -200265,11 +200101,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+#if MUSB_DEBUG > 0
+ uint16_t wIntrTxCheck, wIntrRxCheck;
+#endif
-+ const void* pBase = pThis->pRegs;
++ const void* pBase = pThis->pRegs;
+ uint8_t devctl = MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
-+
++
+ uint8_t power = MGC_Read8(pBase, MGC_O_HDRC_POWER);
-+
++
+ uint8_t bIntrUsbValue=MGC_Read8(pBase, MGC_O_HDRC_INTRUSB);
+ uint16_t wIntrTxValue=MGC_Read16(pBase, MGC_O_HDRC_INTRTX);
+ uint16_t wIntrRxValue=MGC_Read16(pBase, MGC_O_HDRC_INTRRX);
@@ -200282,23 +200118,23 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ if (!nSource) {
+ RETURN_IRQ_NONE;
+ }
-+
-+ DBG(2, "<== [%ld]: IRQ RECEIVED [devmode=%s, hwmode=%s] IntrUSB=%02x, IntrUSBE=%02x, IntrTx=%04x, IntrRx=%04x\n",
++
++ DBG(2, "<== [%ld]: IRQ RECEIVED [devmode=%s, hwmode=%s] IntrUSB=%02x, IntrUSBE=%02x, IntrTx=%04x, IntrRx=%04x\n",
+ jiffies, MUSB_MODE(pThis), (devctl & MGC_M_DEVCTL_HM)?"host":"function",
-+ bIntrUsbValue, MGC_Read8(pBase, MGC_O_HDRC_INTRUSBE),
++ bIntrUsbValue, MGC_Read8(pBase, MGC_O_HDRC_INTRUSBE),
+ wIntrTxValue, wIntrRxValue);
+
-+
++
+ /* Recent IPs return the right values (not the masked one) */
+ bIntrUsbValue &= MGC_Read8(pBase, MGC_O_HDRC_INTRUSBE);
+
-+
++
+ /* corruption check */
+#ifdef MUSB_PARANOID
+ if ( MGC_ISCORRUPT(pThis) ) {
+ INFO("stopping before ISR, the controller structure is corrupted\n");
+ MGC_HdrcStop(pThis);
-+ MUSB_ERR_MODE(pThis, MUSB_ERR_CORRUPTED);
++ MUSB_ERR_MODE(pThis, MUSB_ERR_CORRUPTED);
+
+ RETURN_IRQ_HANDLED;
+ }
@@ -200307,7 +200143,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+#ifdef MUSB_DMA
+ /* ### DMA intr handler added */
+ if ( pThis->pDmaController->pfDmaControllerIsr(pThis->pDmaController->pPrivateData) ) {
-+ DBG(1, "%s: ******** DMA interrupt *************\n",__FUNCTION__);
++ DBG(1, "%s: ******** DMA interrupt *************\n",__FUNCTION__);
+ nSource |= 1;
+ }
+#endif
@@ -200319,20 +200155,20 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ * etc. processed in two phase */
+ if ( bIntrUsbValue ) {
+ DBG(3, "** IRQ [mode=%s] nSource=%d | DEVCTL :0x%x | IntrUsb:0x%x \n", \
-+ MUSB_MODE(pThis), nSource, MGC_Read8(pBase, MGC_O_HDRC_DEVCTL), bIntrUsbValue);
++ MUSB_MODE(pThis), nSource, MGC_Read8(pBase, MGC_O_HDRC_DEVCTL), bIntrUsbValue);
+ mgc_hdrc_service_usb_stage0(pThis, bIntrUsbValue, devctl, power);
+ }
+
+#ifdef MUSB_PARANOID
+ if ( wIntrTxValue || wIntrRxValue ) { /* got data! */
-+ if ( ((devctl & MGC_M_DEVCTL_HM) && (!MUSB_IS_HST(pThis)))
++ if ( ((devctl & MGC_M_DEVCTL_HM) && (!MUSB_IS_HST(pThis)))
+ || (!(devctl & MGC_M_DEVCTL_HM) && (!MUSB_IS_DEV(pThis))) )
+ {
-+ if ( bIntrUsbValue ) {
++ if ( bIntrUsbValue ) {
+ mgc_hdrc_service_usb_stage1(pThis, bIntrUsbValue, devctl, power);
+ } else {
-+ WARN("early interrupt while in hm=%d: otg machine hasn't done yet\n",
-+ devctl & MGC_M_DEVCTL_HM);
++ WARN("early interrupt while in hm=%d: otg machine hasn't done yet\n",
++ devctl & MGC_M_DEVCTL_HM);
+ }
+
+ RETURN_IRQ_HANDLED;
@@ -200341,7 +200177,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+#endif
+
+ /* ignore requests when in error */
-+ if( MUSB_IS_ERR(pThis) ) {
++ if( MUSB_IS_ERR(pThis) ) {
+ if ( bIntrUsbValue) {
+ mgc_hdrc_service_usb_stage1(pThis, bIntrUsbValue, devctl, power);
+ } else {
@@ -200349,14 +200185,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ mgc_hdrc_disable(pThis);
+ }
+
-+ RETURN_IRQ_HANDLED;
-+ }
++ RETURN_IRQ_HANDLED;
++ }
+
-+ /* handle tx/rx on endpoints; each bit of wIntrTxValue is an endpoint,
-+ * endpoint 0 first (p35 of the manual) bc is "SPECIAL" treatment;
-+ * WARNING: when operating as device you might start receving traffic
-+ * to ep0 before anything else happens so be ready for it */
-+ do {
++ /* handle tx/rx on endpoints; each bit of wIntrTxValue is an endpoint,
++ * endpoint 0 first (p35 of the manual) bc is "SPECIAL" treatment;
++ * WARNING: when operating as device you might start receving traffic
++ * to ep0 before anything else happens so be ready for it */
++ do {
+ uint8_t bShift=0;
+ uint32_t reg=wIntrTxValue;
+
@@ -200370,16 +200206,16 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ MGC_HdrcServiceDefaultEnd(pThis);
+ } else {
+ udc_ep0_irq();
-+ }
++ }
+ }
-+
++
+#ifdef MUSB_PARANOID
+ if( MGC_ISCORRUPT(pThis) ) {
+ INFO("after servicing Ep0 interrupt\n");
+ break;
+ }
+#endif
-+
++
+ /* TX on endpoints 1-15 */
+ bShift = 1;
+ reg >>= 1;
@@ -200394,7 +200230,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ reg >>= 1;
+ bShift++;
+ }
-+
++
+ DEBUG_CODE(10, wIntrTxCheck = MGC_Read16(pBase, MGC_O_HDRC_INTRTX); \
+ if(wIntrTxCheck && (wIntrTxCheck == wIntrTxValue)) { \
+ ERR("Unhandled TX interrupt, wIntrTx=%04x wIntrTxCheck=%04x; DRC stopped\n",\
@@ -200408,14 +200244,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ MGC_VirtualHubPortDisconnected(&(pThis->RootHub), 0); \
+ pThis->pRootDevice = NULL; \
+ } );
-+
++
+#ifdef MUSB_PARANOID
+ if( MGC_ISCORRUPT(pThis) ) {
+ INFO("after servicing Tx interrupt\n");
+ break;
+ }
+#endif
-+
++
+ /* RX on endpoints 1-15 */
+ reg = wIntrRxValue;
+ bShift = 1;
@@ -200428,11 +200264,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ udc_ep_rx_irq(bShift) ;
+ }
+ }
-+
++
+ reg >>= 1;
+ bShift++;
+ }
-+
++
+ DEBUG_CODE(10, wIntrRxCheck = MGC_Read16(pBase, MGC_O_HDRC_INTRRX); \
+ if(wIntrRxCheck && (wIntrRxCheck == wIntrRxValue)) { \
+ DBG(1, "Unhandled RX interrupt, IntrRx=%04x; IntrRxCheck=%04x DRC stopped\n", \
@@ -200446,13 +200282,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ MGC_VirtualHubPortDisconnected(&(pThis->RootHub), 0); \
+ pThis->pRootDevice = NULL; \
+ });
-+
++
+ /* Global interrups are used to signal connect/disconnect/vbuserr
+ * etc. processed in two phase */
+ if (bIntrUsbValue) {
+ mgc_hdrc_service_usb_stage1(pThis, bIntrUsbValue, devctl, power);
+ }
-+
++
+#ifdef MUSB_PARANOID
+ if( MGC_ISCORRUPT(pThis) ) {
+ INFO("stopping after servicing Rx interrupt\n");
@@ -200467,17 +200303,17 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ }
+#endif
+
-+ DBG(2, "==> IRQ HANDLED [devmode=%s]\n", MUSB_MODE(pThis));
++ DBG(2, "==> IRQ HANDLED [devmode=%s]\n", MUSB_MODE(pThis));
+ RETURN_IRQ_HANDLED;
+}
+
+
-+/**
++/**
+ * Interrupt service routine.
-+ * @param irq interrupt line associated with the controller
++ * @param irq interrupt line associated with the controller
+ * @param hci data structure for the host controller
-+ * @param r holds the snapshot of the processor's context before
-+ * the processor entered interrupt code. (not used here)
++ * @param r holds the snapshot of the processor's context before
++ * the processor entered interrupt code. (not used here)
+ */
+#ifndef MUSB_USE_HCD_DRIVER
+irqreturn_t MGC_LinuxIsr(int irq, void *__hci, struct pt_regs *r)
@@ -200490,11 +200326,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+/*****************************************************/
+
-+void goto_host_mode(MGC_LinuxCd* pThis) {
++void goto_host_mode(MGC_LinuxCd* pThis) {
+ /* TODO: graceful Gadget shutdown */
+ MUSB_HST_MODE(pThis);
+#ifdef MUSB_USE_HCD_DRIVER
-+
++
+#else
+
+#endif
@@ -200502,16 +200338,16 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+void goto_device_mode(MGC_LinuxCd* pThis) {
+ /* TODO: graceful host shutdown */
-+ MUSB_DEV_MODE(pThis);
++ MUSB_DEV_MODE(pThis);
+}
+
+
+/* --------------------------------------------------------------------------
+ * Init function
-+ *
++ *
+ */
+
-+#ifndef MUSB_USE_HCD_DRIVER
++#ifndef MUSB_USE_HCD_DRIVER
+/** attach to the IRQ and update the controller structure.
+ * @param nIrq the Irq number
+ * @param pThis the controller
@@ -200521,27 +200357,27 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ int rc=-ENODEV;
+
+ pThis->nIrq = nIrq;
-+ /* the hcd driver will take care of that */
++ /* the hcd driver will take care of that */
+ do {
+
+#ifdef MUSB_HARD_IRQ
-+ if ( 0==request_irq(nIrq, MGC_LinuxIsr, SA_INTERRUPT,
-+ pThis->aName, pThis))
++ if ( 0==request_irq(nIrq, MGC_LinuxIsr, SA_INTERRUPT,
++ pThis->aName, pThis))
+ {
+ rc=0;
+ pThis->nIrqType=SA_INTERRUPT;
+ break;
+ }
+#endif
-+ if ( 0==request_irq(nIrq, MGC_LinuxIsr, SA_SHIRQ,
-+ pThis->aName, pThis))
++ if ( 0==request_irq(nIrq, MGC_LinuxIsr, SA_SHIRQ,
++ pThis->aName, pThis))
+ {
+ rc=0;
+ pThis->nIrqType=SA_SHIRQ;
+ break;
+ }
+ } while (0);
-+
++
+ return rc;
+}
+
@@ -200552,14 +200388,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+static void mgc_free_irq(MGC_LinuxCd* pThis) {
+ free_irq(pThis->nIrq, pThis);
+}
-+#endif
++#endif
+
+#ifdef MUSB_VIRTHUB
+#ifndef MUSB_USE_HCD_DRIVER
-+static int mgc_init_bus(MGC_LinuxCd *pThis, void* pDevice)
++static int mgc_init_bus(MGC_LinuxCd *pThis, void* pDevice)
+{
+ int rc=0;
-+
++
+ /* allocate and register bus */
+ pThis->pBus=usb_alloc_bus( &MGC_LinuxOperations );
+ if (!pThis->pBus ) {
@@ -200574,21 +200410,21 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ pThis->pBus->bus_name = pThis->aName;
+#endif
+
-+ /* when using the HCD driver (USE_HCD_DRIVER)
-+ pThis->pBus->hcpriv points to the hcd driver
++ /* when using the HCD driver (USE_HCD_DRIVER)
++ pThis->pBus->hcpriv points to the hcd driver
+ */
-+ pThis->pBus->hcpriv = (void *)pThis;
++ pThis->pBus->hcpriv = (void *)pThis;
++
++ usb_register_bus(pThis->pBus);
++ INFO("Registered new bus @%p\n", pThis->pBus);
+
-+ usb_register_bus(pThis->pBus);
-+ INFO("Registered new bus @%p\n", pThis->pBus);
-+
+ rc=mgc_init_root_hub(pThis);
+ if ( rc!=0 ) {
+ usb_deregister_bus(pThis->pBus);
-+ } else {
++ } else {
+ pThis->pBus->root_hub = pThis->RootHub.pDevice;
+ }
-+
++
+ return rc;
+}
+
@@ -200612,7 +200448,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+/* --------------------------------------------------------------------------
+ * HOST DMA related code
-+ *
++ *
+ */
+
+#ifdef MUSB_DMA
@@ -200642,7 +200478,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ MGC_HdrcServiceDefaultEnd(pThis);
+ } else {
+ MGC_HdrcServiceDeviceDefaultEnd(pThis);
-+ }
++ }
+ } else {
+ /* endpoints 1..15 */
+ if(bTransmit) {
@@ -200653,14 +200489,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ }
+ } else {
+ /* receive */
-+ if(devctl & MGC_M_DEVCTL_HM) {
++ if(devctl & MGC_M_DEVCTL_HM) {
+ MGC_HdrcServiceRxReady(pThis, bLocalEnd);
+ } else {
+ MGC_HdrcServiceDeviceRxReady(pThis, bLocalEnd);
+ }
+ }
+ }
-+
++
+ /* trick: if end's URB changed; previous one completed;
+ * probably not needed now... */
+ return (pUrb == MGC_GetCurrentUrb(pEnd)) ? FALSE : TRUE;
@@ -200676,35 +200512,35 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+/**
+ * Perform generic per-controller initialization.
+ *
-+ * @param pDevice
++ * @param pDevice
+ * @param nIrq IRQ (interpretation is system-dependent)
-+ * @param pRegs pointer to controller registers,
++ * @param pRegs pointer to controller registers,
+ * assumed already mapped into kernel space
+ * @param pName name for bus
+ */
+
-+MGC_LinuxCd* MGC_LinuxInitController(void* pDevice, uint16_t wType,
++MGC_LinuxCd* MGC_LinuxInitController(void* pDevice, uint16_t wType,
+ int nIrq, void* pRegs, u64 len, const char* pName)
+{
+ uint8_t bEnd;
-+ MGC_LinuxCd* pThis;
-+#ifdef MUSB_USE_HCD_DRIVER
++ MGC_LinuxCd* pThis;
++#ifdef MUSB_USE_HCD_DRIVER
+ struct usb_hcd *hcd = NULL;
+#endif
+ MGC_LinuxLocalEnd* pEnd;
+ uint16_t temp;
-+ DBG(2, "<==\n");
++ DBG(2, "<==\n");
+
+ /* allocate */
+ INFO("MUSB Driver [Base Address(PA)=0x%p] [IRQ = %d] [pDevice=%p]\n",
+ pRegs , nIrq, pDevice);
+
-+#ifdef MUSB_USE_HCD_DRIVER
++#ifdef MUSB_USE_HCD_DRIVER
+ ///////////////////////////////////////////////////////////////////////////////
-+ /* allocate */
++ /* allocate */
+
+
-+ hcd = usb_create_hcd(&musb_ahb_hc_driver, (struct device*)pDevice,
++ hcd = usb_create_hcd(&musb_ahb_hc_driver, (struct device*)pDevice,
+ ((struct device*)pDevice)->bus_id);
+ hcd1=hcd;
+ if ( !hcd ) {
@@ -200713,15 +200549,15 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+ hcd->rsrc_len = len;
+ /* register Base address (VA)*/
-+ hcd->regs = pRegs;
++ hcd->regs = pRegs;
+ ///////////////////////////////////////////////////////////////////////////////
+
+ pThis=hcd_to_musbstruct(hcd);
+ udc_address=pThis;
+ spin_lock_init(&pThis->LocalQueue.urb_queue_lock);
-+ init_waitqueue_head(&pThis->waitqh);
-+#else
-+ KMALLOC(pThis, sizeof(MGC_LinuxCd), GFP_ATOMIC);
++ init_waitqueue_head(&pThis->waitqh);
++#else
++ KMALLOC(pThis, sizeof(MGC_LinuxCd), GFP_ATOMIC);
+ if(!pThis) {
+ ERR("kmalloc driver instance data failed\n");
+ return NULL;
@@ -200732,10 +200568,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+
+ pThis->pRegs = pRegs;
-+
++
+ strcpy(pThis->aName, pName);
+ spin_lock_init(&pThis->Lock);
-+
++
+#if MUSB_DEBUG > 0
+ pThis->dwPadFront = MGC_PAD_FRONT;
+ pThis->dwPadBack = MGC_PAD_BACK;
@@ -200757,7 +200593,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ /* be sure interrupts are disabled before connecting ISR */
+ mgc_hdrc_disable(pThis);
+
-+ // Reset the device, otherwise the controller
++ // Reset the device, otherwise the controller
+ // can be in unknown state.
+ temp = MGC_Read16(pThis->pRegs, MGC_O_HDRC_TOPCONTROL);
+
@@ -200765,18 +200601,18 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+ /* discover configuration */
+ if ( !MGC_HdrcInit(wType, pThis) ) {
-+#ifdef MUSB_USE_HCD_DRIVER
-+ /* free memory ? */
++#ifdef MUSB_USE_HCD_DRIVER
++ /* free memory ? */
+#else
-+ /* free memory ? */
++ /* free memory ? */
+#endif
-+ return NULL;
++ return NULL;
+ }
+ /*for nhk15 this a must for powering up the STULPI
-+ */
++ */
+ /*power up the STULPI tranceiver*/
-+ MGC_Write8(pThis->pRegs, MGC_O_HDRC_ULPI_VBUSCTL, 0x3);
-+
++ MGC_Write8(pThis->pRegs, MGC_O_HDRC_ULPI_VBUSCTL, 0x3);
++
+ /* print config */
+ for(bEnd = 0; bEnd < pThis->bEndCount; bEnd++) {
+ pEnd = &(pThis->aLocalEnd[bEnd]);
@@ -200788,7 +200624,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ INFO("End %02d: not configured\n", bEnd);
+ }
+ }
-+
++
+ /* procfs and testing interface */
+ MGC_LinuxCreateProcFs(pThis->aName, pThis);
+
@@ -200796,8 +200632,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ MGC_LinuxCreateTestProcFs(pThis->aName, pThis);
+#endif
+
-+ MUSB_B_IDLE_MODE(pThis);
-+ DBG(1, "MUSB_B_IDLE mode \n");
++ MUSB_B_IDLE_MODE(pThis);
++ DBG(1, "MUSB_B_IDLE mode \n");
+ temp = MGC_Read8(pThis->pRegs, MGC_O_HDRC_DEVCTL );
+
+ /* connect ISR */
@@ -200834,9 +200670,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ mgc_free_irq(pThis);
+ return NULL;
+ }
-+
++
++#endif
+#endif
-+#endif
+udcinitmonitorflag_isr=1;
+init_timer(&notify_timer);
+notify_timer.expires = jiffies + msecs_to_jiffies(1000);
@@ -200844,7 +200680,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+notify_timer.data = (unsigned long)pThis;
+add_timer(&notify_timer);
+
-+ return pThis;
++ return pThis;
+}
+
+static void funct_host_notify_timer(unsigned long uContext)
@@ -200853,7 +200689,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ uint8_t* pBase = (uint8_t*)pThis->pRegs;
+ uint8_t devctl = 0;
+ uint8_t power = 0;
-+
++
+ if(MUSB_IS_B_IDLE(pThis)) {
+ MGC_HdrcReadUlpiReg(pThis, 0x13, &temp);
+ if (!(temp & 0x10))
@@ -200880,7 +200716,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ devctl=MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, 1);
+ }
-+ else
++ else
+ {
+ MUSB_B_IDLE_MODE(pThis);
+ devctl=MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
@@ -200894,7 +200730,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ del_timer(&notify_timer);
+ }
+ else if (MUSB_IS_HST(pThis)) {
-+
++
+ del_timer(&notify_timer);
+ }
+}
@@ -200908,21 +200744,21 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+void otg_disconnect(MGC_LinuxCd* pThis)
+{
+ uint8_t bEnd, devctl = 0;
-+
++
+ devctl &= ~MGC_M_DEVCTL_SESSION;
-+
++
+ MGC_VirtualHubPortDisconnected(&(pThis->RootHub), 0);
-+
++
+ /* flush endpoints */
+ for(bEnd = 0; bEnd < pThis->bEndCount; bEnd++) {
+ MGC_HdrcStopEnd(pThis, bEnd);
+ }
-+
++
+ mgc_hcd_flush(pThis);
+
+ pThis->pRootDevice = NULL;
+
-+ MGC_Write8(pThis->pRegs, MGC_O_HDRC_DEVCTL, devctl);
++ MGC_Write8(pThis->pRegs, MGC_O_HDRC_DEVCTL, devctl);
+}
+
+/* A couple of hooks to enable HSET */
@@ -200960,10 +200796,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+void MGC_LinuxCdFree(MGC_LinuxCd* pThis)
+{
+ DBG(2, "<==\n");
-+
++
+ MGC_HdrcStop(pThis);
+ MUSB_ERR_MODE(pThis, MUSB_ERR_SHUTDOWN);
-+
++
+#ifdef MUSB_CONFIG_PROC_FS
+ MGC_LinuxDeleteProcFs(pThis);
+#endif
@@ -200983,20 +200819,20 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+ MGC_VirtualHubStop(&pThis->RootHub);
+ MGC_VirtualHubDestroy(&pThis->RootHub);
-+
++
+#ifndef MUSB_USE_HCD_DRIVER
+ if (pThis->pBus->root_hub) {
+ usb_disconnect(&(pThis->pBus->root_hub));
+ }
-+
++
+ WAIT_MS(1);
-+
++
+ if(pThis->nIrq) {
+ mgc_free_irq(pThis);
+ }
+
+ mgc_free_bus(pThis->pBus);
-+ KFREE(pThis);
++ KFREE(pThis);
+#endif
+
+ DBG(2, "==>\n");
@@ -201007,30 +200843,30 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+/**
+ * Initialize the driver.
+ */
-+int MGC_DriverInit(void)
++int MGC_DriverInit(void)
+{
+ int rc=-ENODEV;
-+ int result;
++ int result;
+ DBG(2, "<==\n");
-+
++
+ nomadik_gpio_altfuncenable(GPIO_ALT_USB_OTG,"OTG");
-+
++
+ /* the driver was already initialized, no need to repeat this */
-+ if ( MGC_nIndex ) {
-+ DBG(2, "==>\n");
++ if ( MGC_nIndex ) {
++ DBG(2, "==>\n");
+ return 0;
+ }
-+
++
+ if ( !usb_disabled() ) {
+ do {
-+
++
+ int direct_bus=-ENODEV;
-+
++
+ direct_bus=direct_bus_init();
+
+ if ( direct_bus<0 ) {
+
-+ ERR("Error initializing controller on the direct bus\n");
++ ERR("Error initializing controller on the direct bus\n");
+ rc=-ENODEV; break;
+ }
+
@@ -201038,9 +200874,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+ } while (0);
+ } else {
-+ DBG(2, "USB Disabled , exiting\n");
++ DBG(2, "USB Disabled , exiting\n");
+ }
-+
++
+ result = register_chrdev (MAJOR_NUMBER_OTG, "st-otg", &otg_fops);
+
+ if (result <0){
@@ -201048,8 +200884,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ printk (KERN_WARNING "host can't get major %d\n", MAJOR_NUMBER_OTG);
+ return result;
+ }
-+
-+ DBG(2, "==> rc=%d\n", rc);
++
++ DBG(2, "==> rc=%d\n", rc);
+ return rc;
+}
+
@@ -201058,18 +200894,18 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+/**
+ * release everything...
+ */
-+void MGC_DriverCleanup(void)
-+{
-+ int chr = 0;
++void MGC_DriverCleanup(void)
++{
++ int chr = 0;
+
+ DBG(2, "<==\n");
+
+ if ( MGC_nIndex ) {
-+
++
+ chr = unregister_chrdev (MAJOR_NUMBER_OTG, "st-otg");
+ if (chr < 0)
+ printk (KERN_INFO"OTG Device cannot unregister %d %d\n", MAJOR_NUMBER_OTG, chr);
-+
++
+ usb_remove_hcd(hcd1);
+ direct_bus_shutdown();
+ free_irq(udc_address->nIrq,udc_address);
@@ -201078,11 +200914,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ iounmap(udc_address->pRegs);
+ del_timer(&notify_timer);
+ usb_put_hcd(hcd1);
-+
++
+ }
-+
++
+ MGC_nIndex=0;
-+ DBG(2, "==>\n");
++ DBG(2, "==>\n");
+}
+EXPORT_SYMBOL(MGC_DriverCleanup);
+
@@ -201090,7 +200926,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+
+/* gstorage is liked to the driver: the init code lives there */
+/* When compiled in the kernel, the init function is needed only when gadget
-+ * gadget API is not compiled (usb_register_driver takes care of the init
++ * gadget API is not compiled (usb_register_driver takes care of the init
+ * using MGC_DriverInit & MGC_DriverCleanup)
+ */
+#ifndef MUSB_SKIP_INIT
@@ -201098,7 +200934,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+/**
+ * Required initialization for any module.
+ */
-+int __init MGC_ModuleInit (void)
++int __init MGC_ModuleInit (void)
+{
+ return MGC_DriverInit();
+}
@@ -201108,7 +200944,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+ */
+void __exit MGC_ModuleCleanup (void)
+{
-+
++
+ MGC_DriverCleanup();
+}
+
@@ -201116,9 +200952,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_plat_uds.c ../new/linux-2.6.2
+module_exit(MGC_ModuleCleanup);
+#endif
+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/drivers/usb/nomadik/musb_procfs.c
---- linux-2.6.20/drivers/usb/nomadik/musb_procfs.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_procfs.c 2008-08-08 19:15:29.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_procfs.c
@@ -0,0 +1,413 @@
+/*
+ * linux/drivers/usb/nomadik/musb_procfs.c
@@ -201137,7 +200972,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <asm/uaccess.h>
@@ -201154,28 +200989,28 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+#if MUSB_DEBUG > 0
+static int atoi(char* buffer, int base, int len) {
+ int result=0, digit=0;
-+
-+ while ( len-->0 && (*buffer) ) {
++
++ while ( len-->0 && (*buffer) ) {
+ digit=((*buffer>='0') && (*buffer<='9'))
+ ? *buffer-'0'
+ : ((*buffer>='a') && (*buffer<='f'))
+ ? *buffer-'a'
+ : -1;
-+
-+ if ( digit<0 ) {
++
++ if ( digit<0 ) {
+ break;
+ }
-+
-+ buffer++;
++
++ buffer++;
+ result=result*base+digit;
+ }
-+
++
+ return result;
+}
+
+static int atoi_from_user(const char* buffer, int count) {
+ char digits[8];
-+ int len=min(count, 8);
++ int len=min(count, 8);
+ copy_from_user(&digits, buffer, len);
+ return atoi(digits, 10, len);
+}
@@ -201183,8 +201018,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+
+static const char* decode_address(int index) {
+ static const char* COMMON_REGISTER_MAP[] = {
-+ "FAddr", "Power", "IntrTx", "IntrRx",
-+ "IntrTxE", "IntrRxE", "IntrUSB", "IntrUSBE",
++ "FAddr", "Power", "IntrTx", "IntrRx",
++ "IntrTxE", "IntrRxE", "IntrUSB", "IntrUSBE",
+ "Frame", "Index","TestMode" };
+ return (index<11) ? COMMON_REGISTER_MAP[index]:NULL;
+}
@@ -201214,11 +201049,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+ unsigned long count, void *data)
+{
+ char cmd;
-+ uint8_t bReg;
++ uint8_t bReg;
+ uint8_t* pBase=((MGC_LinuxCd*)data)->pRegs;
-+
++
+ /* MOD_INC_USE_COUNT; */
-+
++
+ if(copy_from_user(&cmd, buffer, 1) == 0){
+ switch(cmd) {
+ case 'C':
@@ -201227,28 +201062,28 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+ MGC_Write8(pBase, MGC_O_HDRC_POWER, bReg);
+ }
+ break;
-+
++
+ case 'c':
+ if ( pBase ) {
+ bReg = MGC_Read8(pBase, MGC_O_HDRC_POWER) & ~MGC_M_POWER_SOFTCONN;
+ MGC_Write8(pBase, MGC_O_HDRC_POWER, bReg);
+ }
+ break;
-+
++
+ case 'I':
+ if ( pBase ) {
+ bReg = MGC_Read8(pBase, MGC_O_HDRC_POWER) | MGC_M_POWER_HSENAB;
+ MGC_Write8(pBase, MGC_O_HDRC_POWER, bReg);
+ }
+ break;
-+
++
+ case 'i':
+ if ( pBase ) {
+ bReg = MGC_Read8(pBase, MGC_O_HDRC_POWER) & ~MGC_M_POWER_HSENAB;
+ MGC_Write8(pBase, MGC_O_HDRC_POWER, bReg);
+ }
+ break;
-+
++
+ case 'R':
+ if ( pBase ) {
+ bReg = MGC_Read8(pBase, MGC_O_HDRC_POWER);
@@ -201257,24 +201092,24 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+ MGC_Write8(pBase, MGC_O_HDRC_POWER, bReg);
+ WARN("Power Resumed\n");
+ } break;
-+
++
+ case 'S':
+ MGC_Session((MGC_LinuxCd*)data);
+ break;
-+
-+
++
++
+ case 's':
+ bReg = MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
+ bReg &= ~MGC_M_DEVCTL_SESSION;
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, bReg);
+ break;
-+
++
+ case 'F':
+ bReg = MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
+ bReg |= MGC_M_DEVCTL_SESSION;
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, bReg);
+ break;
-+
++
+ case 'H':
+ if ( pBase ) {
+ bReg = MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
@@ -201282,7 +201117,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, bReg);
+ }
+ break;
-+
++
+ case 'h':
+ if ( pBase ) {
+ bReg = MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
@@ -201290,108 +201125,108 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, bReg);
+ }
+ break;
-+
++
+ /* Xap the controller */
+ case 'Z':
+ MGC_Zap((MGC_LinuxCd*)data);
+ break;
-+
-+#if (MUSB_DEBUG>0)
++
++#if (MUSB_DEBUG>0)
+ /* read & write registers */
+ case 'r':
+ case 'w': {
+ uint8_t index=0;
+ uint32_t value=0;
-+ char command[64];
-+
++ char command[64];
++
+ memset(command, 0, sizeof(command));
+ copy_from_user(command, buffer, min(count, (unsigned long)63));
-+
-+ /* detrermine the index,
++
++ /* detrermine the index,
+ * only the adrress now */
+ index=atoi(&command[2], 16, count-2);
+ if ( index>0 && pBase ) {
+ const char *address=decode_address(index);
-+
++
+ if ( buffer[0]=='r' ) {
+ value=(command[1]=='8')
+ ? MGC_Read8(pBase, index)
+ : (command[1]=='f')
+ ? MGC_Read16(pBase, index)
-+ : 0;
++ : 0;
+ } else {
+ /* not write, not yet... */
+ index=-1;
+ }
-+
++
+ if ( address ) {
-+ INFO("%s=0x%x\n", address, value);
++ INFO("%s=0x%x\n", address, value);
+ } else {
-+ INFO("0x%x=0x%x\n", index, value);
++ INFO("0x%x=0x%x\n", index, value);
+ }
-+ }
++ }
+ } break;
-+
++
+ /* set/read debug level */
-+ case 'D': {
++ case 'D': {
+ if ( count>1 ) {
-+ int level=0;
-+ level=atoi_from_user(&buffer[1], count-1);
++ int level=0;
++ level=atoi_from_user(&buffer[1], count-1);
+ MGC_SetDebugLevel(level);
+ } else {
-+ INFO("MGC_DebugLevel=%d\n", MGC_DebugLevel);
++ INFO("MGC_DebugLevel=%d\n", MGC_DebugLevel);
+ /* & dump the status to syslog */
-+ }
++ }
+ } break;
-+
++
+ /* display queue status */
+ case 'Q': {
+ int index=-1;
+ char endb[256];
+ MGC_LinuxCd* pThis=(MGC_LinuxCd*)data;
-+
++
+ if (count>2) {
+ index=atoi_from_user(&buffer[1], count-1);
+ }
-+
++
+ if ( dump_header_stats(pThis, endb)>0 ) {
+ printk(KERN_INFO"%s", endb);
+ }
-+
++
+#ifdef MUSB_HOST
+ if( MUSB_IS_HST(pThis) ) {
+ if ( index<0 ) {
+ uint8_t bEnd;
-+
++
+ /* generate the report for the end points */
+ for (bEnd = 0; bEnd < pThis->bEndCount; bEnd++) {
+ if ( dump_end_stats(pThis, bEnd, endb)>0 ) {
+ printk(KERN_INFO"%s", endb);
+ }
+ }
-+
++
+ } else {
+ if ( dump_end_stats(pThis, index, endb)>0 ) {
+ printk(KERN_INFO"%s", endb);
+ }
-+ }
++ }
+ }
-+#endif
-+
-+
++#endif
++
++
+ } break;
-+
++
+ case 'd': {
+ if ( count>1 ) {
+ int delay=atoi_from_user(&buffer[1], count-1);
+ MGC_SetDeviceDelay(delay);
+ }
-+ INFO("mgc_slow_device_kludge_delay=%d\n",
-+ MGC_SetDeviceDelay(-1));
++ INFO("mgc_slow_device_kludge_delay=%d\n",
++ MGC_SetDeviceDelay(-1));
+ } break;
-+
-+ /* flush */
-+ case '?':
++
++ /* flush */
++ case '?':
+ INFO("?: you are seeing it\n");
+ INFO("C/c: soft connect enable/disable\n");
+ INFO("I/i: hispeed enable/disable\n");
@@ -201403,16 +201238,16 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+ INFO("D: set/read dbug level\n");
+ INFO("Q: show queue status\n");
+ break;
-+#endif
-+
++#endif
++
+ default:
+ ERR("Command %c not implemented\n", cmd);
+ break;
+ }
+ }
-+
++
+ return count;
-+}
++}
+
+
+/**
@@ -201424,12 +201259,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+ * @param
+ * @param
+ */
-+static int MGC_ProcRead(char *page, char **start,
-+ off_t off, int count, int *eof, void *data)
++static int MGC_ProcRead(char *page, char **start,
++ off_t off, int count, int *eof, void *data)
+{
+ off_t len=0;
+ char *buffer;
-+ int rc=0, code=0;
++ int rc=0, code=0;
+ unsigned long flags;
+ MGC_LinuxCd* pThis=(MGC_LinuxCd*)data;
+
@@ -201440,22 +201275,22 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+ ERR("Out of memory\n");
+ return -1;
+ }
-+
++
+ /* generate the report for the end points */
+ code=dump_header_stats(pThis, buffer);
+ if ( code>0 ) {
+ len+=code;
+ }
-+
-+#ifdef MUSB_HOST
++
++#ifdef MUSB_HOST
+ if( MUSB_IS_HST(pThis) ) {
-+
++
+ uint8_t bEnd;
+
+ for(bEnd = 0; bEnd < pThis->bEndCount; bEnd++) {
+ code=dump_end_stats(pThis, bEnd, &buffer[len]);
+ if ( code>0 ) {
-+ len+=code;
++ len+=code;
+ }
+ }
+ }
@@ -201464,37 +201299,37 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+ if ( off<len ) {
+ int i=0, togo=len-off;
+ char *s=&buffer[off],*d=page;
-+
++
+ if ( togo>count ) {
+ togo=count;
+ }
-+
++
+ while ( i++<togo ) {
+ *d++=*s++;
+ }
-+
-+ rc=togo;
++
++ rc=togo;
+ } else {
+ *buffer=0;
-+ *eof=1;
++ *eof=1;
+ }
+
+ kfree(buffer);
+ spin_unlock_irqrestore(&pThis->Lock, flags);
+ return rc;
-+}
++}
+
+
+/**
+ * TODO: 2.4 and 2.6 create the pseudo-device in 2 different points
+ * @param data the controller instance
+ */
-+void MGC_LinuxDeleteProcFs(MGC_LinuxCd* data) {
++void MGC_LinuxDeleteProcFs(MGC_LinuxCd* data) {
+ remove_proc_entry(data->pProcEntry->name, NULL);
+}
+
+/**
-+ * TODO: 2.4 and 2.6 create the pseudo-device in 2 different points
++ * TODO: 2.4 and 2.6 create the pseudo-device in 2 different points
+ * @param data the controller instance
+ */
+void MGC_LinuxRemoveProcFs(MGC_LinuxCd* data) {
@@ -201511,7 +201346,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+ name=data->aName;
+ }
+
-+ data->pProcEntry=create_proc_entry(name,
++ data->pProcEntry=create_proc_entry(name,
+ S_IFREG | S_IRUGO | S_IWUSR, NULL);
+ if( data->pProcEntry )
+ {
@@ -201519,7 +201354,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+#ifdef MUSB_V26
+ data->pProcEntry->owner=THIS_MODULE;
+#endif
-+
++
+ data->pProcEntry->read_proc = MGC_ProcRead;
+ data->pProcEntry->write_proc = MGC_ProcWrite;
+
@@ -201527,15 +201362,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_procfs.c ../new/linux-2.6.20/
+
+ dbg("Registered /proc/%s\n", name);
+ } else {
-+ dbg ("Cannot create a valid proc file entry");
++ dbg ("Cannot create a valid proc file entry");
+ }
+
-+ return data->pProcEntry;
++ return data->pProcEntry;
+}
+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20/drivers/usb/nomadik/musb_virthub.c
---- linux-2.6.20/drivers/usb/nomadik/musb_virthub.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_virthub.c 2008-07-28 15:21:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_virthub.c
@@ -0,0 +1,840 @@
+/*
+ * linux/drivers/usb/nomadik/musb_virthub.c
@@ -201554,7 +201388,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
@@ -201582,7 +201416,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+
+/******************************* FORWARDS ********************************/
+
-+static void MGC_VirtualHubActivateTimer(MGC_VirtualHub* pHub,
++static void MGC_VirtualHubActivateTimer(MGC_VirtualHub* pHub,
+ void (*pfExpired)(unsigned long), unsigned long timeout);
+static void MGC_VirtualHubCompleteIrq(MGC_VirtualHub* pHub, struct urb* pUrb);
+static void MGC_VirtualHubTimerExpired(unsigned long ptr);
@@ -201628,7 +201462,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+};
+
+/** Configuration descriptor */
-+static uint8_t MGC_VirtualHubConfigDesc[] =
++static uint8_t MGC_VirtualHubConfigDesc[] =
+{
+ USB_DT_CONFIG_SIZE,
+ USB_DT_CONFIG,
@@ -201638,7 +201472,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ 0x00, /* iConfiguration */
+ 0xE0, /* bmAttributes (self-powered, remote wake) */
+ 0x00, /* MaxPower */
-+
++
+ /* interface */
+ USB_DT_INTERFACE_SIZE,
+ USB_DT_INTERFACE,
@@ -201649,7 +201483,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ 0x00, /* bInterfaceSubClass */
+ 0x00, /* bInterfaceProtocol */
+ 0x00, /* iInterface */
-+
++
+ /* endpoint */
+ USB_DT_ENDPOINT_SIZE,
+ USB_DT_ENDPOINT,
@@ -201660,7 +201494,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+};
+
+/** other-speed Configuration descriptor */
-+static uint8_t MGC_VirtualHubOtherConfigDesc[] =
++static uint8_t MGC_VirtualHubOtherConfigDesc[] =
+{
+ USB_DT_CONFIG_SIZE,
+ USB_DT_OTHER_SPEED,
@@ -201670,7 +201504,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ 0x00, /* iConfiguration */
+ 0xE0, /* bmAttributes (self-powered, remote wake) */
+ 0x00, /* MaxPower */
-+
++
+ /* interface */
+ USB_DT_INTERFACE_SIZE,
+ USB_DT_INTERFACE,
@@ -201681,7 +201515,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ 0x00, /* bInterfaceSubClass */
+ 0x00, /* bInterfaceProtocol */
+ 0x00, /* iInterface */
-+
++
+ /* endpoint */
+ USB_DT_ENDPOINT_SIZE,
+ USB_DT_ENDPOINT,
@@ -201694,15 +201528,15 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+/****************************** FUNCTIONS ********************************/
+
+/**
-+ * Generic timer activation helper. Requires the hub structure to
++ * Generic timer activation helper. Requires the hub structure to
+ * be locked.
-+ *
++ *
+ * @param pHub pointer to hub struct
+ * @param pfExpired callback function
+ * @param timeout millisecs
+ * @requires spin_lock(pHub->Lock)
+ */
-+static void MGC_VirtualHubActivateTimer(MGC_VirtualHub* pHub,
++static void MGC_VirtualHubActivateTimer(MGC_VirtualHub* pHub,
+ void (*pfExpired)(unsigned long), unsigned long timeout)
+{
+ DBG(2, "<== pHub=%p, pHub->pUrb=%p\n", pHub, pHub->pUrb);
@@ -201719,25 +201553,25 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ * storage for all of them.
+ * @param pHub the hub
+ * @param pData the data buffer status shoudl be written to
-+ * @return
++ * @return
+ */
+int mgc_rh_port_status(MGC_VirtualHub* pHub, uint8_t* pData) {
+ int nPort, length=1;
+ uint8_t bData=0, bBit=1;
-+
++
+ /* count 1..N to accomodate hub status bit */
+ for(nPort = 1; nPort <= pHub->bPortCount + 1; nPort++) {
+ if(pHub->aPortStatusChange[nPort-1].wChange & 1) {
+ bData |= 1 << bBit;
+ }
-+
++
+ if(++bBit > 7) {
+ *pData++ = bData;
+ bData = bBit = 0;
+ length++;
+ }
+ }
-+
++
+ if(bBit) {
+ *pData++ = bData;
+ }
@@ -201767,15 +201601,15 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+{
+ struct urb* pUrb;
+ MGC_VirtualHub* pHub = (MGC_VirtualHub*)ptr;
-+
-+ DBG(2, "<== pHub=%p, pHub->pUrb=%p, pUrb->hcpriv=%p\n", pHub,
++
++ DBG(2, "<== pHub=%p, pHub->pUrb=%p, pUrb->hcpriv=%p\n", pHub,
+ pHub->pUrb, (pHub->pUrb)?((struct urb*)pHub->pUrb)->hcpriv:NULL);
-+
++
+ spin_lock(&pHub->Lock);
-+ pUrb=pHub->pUrb;
++ pUrb=pHub->pUrb;
+ if(pUrb && (pUrb->hcpriv == pHub)) {
+ uint8_t bPort;
-+
++
+ for(bPort = 0; bPort < pHub->bPortCount; bPort++) {
+ if ( pHub->aPortStatusChange[bPort].wChange ) {
+ pUrb->status=0;
@@ -201786,17 +201620,17 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+
+ /* re-activate timer only when the urb is still mine; pUrb->hcpriv is
+ * set to NULL on port disconnect */
-+ MGC_VirtualHubActivateTimer(pHub, MGC_VirtualHubTimerExpired,
++ MGC_VirtualHubActivateTimer(pHub, MGC_VirtualHubTimerExpired,
+ pHub->wInterval);
+ } else {
-+ DBG(3, "pUrb=%p, for me =%d\n", pUrb, (pUrb)?((pUrb->hcpriv)?1:0):-1 );
++ DBG(3, "pUrb=%p, for me =%d\n", pUrb, (pUrb)?((pUrb->hcpriv)?1:0):-1 );
+ }
+ spin_unlock(&pHub->Lock);
+}
+
+/**
+ * Initialize the virtual hub.
-+ * @param pHub
++ * @param pHub
+ * @param pBus
+ * @param bPortCount
+ * @param pPortServices
@@ -201806,28 +201640,28 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ uint8_t bPortCount, MGC_PortServices* pPortServices)
+{
+ uint8_t bPort;
-+
++
+ if(bPortCount > MGC_VIRTUALHUB_MAX_PORTS) {
-+ ERR("Cannot allocate a %d-port device (too many ports)", bPortCount);
++ ERR("Cannot allocate a %d-port device (too many ports)", bPortCount);
+ return -EINVAL;
+ }
+
-+#if defined(MUSB_REGISTER_ROOT_HUB) || !defined(MUSB_USE_HCD_DRIVER)
++#if defined(MUSB_REGISTER_ROOT_HUB) || !defined(MUSB_USE_HCD_DRIVER)
+ /* allocate device, the hcd driver allocate */
+ pHub->pDevice=USB_ALLOC_DEV(NULL, pBus, 0);
+ if(!pHub->pDevice) {
-+ ERR("Cannot allocate a %d-port device", bPortCount);
++ ERR("Cannot allocate a %d-port device", bPortCount);
+ return -ENODEV;
+ }
-+
++
+ pHub->pDevice->speed=USB_SPEED_HIGH;
+#endif
+
+ DBG(3, "New device (%d-port virtual hub) @%#lx allocated\n", \
-+ bPortCount, (unsigned long)pHub->pDevice);
++ bPortCount, (unsigned long)pHub->pDevice);
+
+ pHub->pBus = pBus;
-+
++
+ spin_lock_init(&pHub->Lock);
+ pHub->pUrb = NULL;
+ pHub->pPortServices = pPortServices;
@@ -201844,7 +201678,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ usb_connect(pHub->pDevice);
+#endif
+
-+ return 0; /* OK */
++ return 0; /* OK */
+}
+
+/**
@@ -201853,7 +201687,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ */
+void MGC_VirtualHubDestroy(MGC_VirtualHub* pHub)
+{
-+#ifdef MUSB_USE_HCD_DRIVER
++#ifdef MUSB_USE_HCD_DRIVER
+ ERR("** you shoudl not call %s when using the HCD driver\n", __FUNCTION__);
+#endif
+}
@@ -201864,44 +201698,44 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ */
+void MGC_VirtualHubStart(MGC_VirtualHub* pHub)
+{
-+ DBG(2, "<== announcing pHub=%p to usbcore\n", pHub);
-+ pHub->bAddress=1;
-+
++ DBG(2, "<== announcing pHub=%p to usbcore\n", pHub);
++ pHub->bAddress=1;
++
+#ifdef MUSB_REGISTER_ROOT_HUB
+#ifndef MUSB_USE_HCD_DRIVER
+ if ( USB_NEW_DEVICE(pHub) ) {
+ ERR("usb_new_device failed\n");
+ }
-+#endif
++#endif
+#endif
+
+ DBG(2, "==>\n");
+}
+
+/**
-+ * Stop a virtual hub.
++ * Stop a virtual hub.
+ * @param pHub the vhub to stop
+ */
+void MGC_VirtualHubStop(MGC_VirtualHub* pHub)
+{
-+#ifndef MUSB_USE_HCD_DRIVER
++#ifndef MUSB_USE_HCD_DRIVER
+ /* stop interrupt timer */
+ del_timer_sync(&pHub->Timer);
+#endif
+}
+
+/** Submit an URB to the virtual hub.
-+ * bRequest:
-+ * 00
-+ * 01
-+ * 03
++ * bRequest:
++ * 00
++ * 01
++ * 03
+ *
+ * bmRequestType:
+ * 0x23
+ * 0xa3
+ *
-+ * @param pHub the hub urb should be submitted to
-+ * @param pUrb the urb to submit
++ * @param pHub the hub urb should be submitted to
++ * @param pUrb the urb to submit
+ */
+int MGC_VirtualHubSubmitUrb(MGC_VirtualHub* pHub, struct urb* pUrb)
+{
@@ -201918,20 +201752,20 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ unsigned int pipe = pUrb->pipe;
+
+ DBG(-1, "<== pUrb=%p\n", pUrb);
-+
-+#ifdef MUSB_USE_HCD_DRIVER
++
++#ifdef MUSB_USE_HCD_DRIVER
+ ERR("** you shoudl not call %s when using the HCD driver\n", __FUNCTION__);
+#endif
-+
++
+ spin_lock(&pHub->Lock);
+ usb_get_urb(pUrb);
-+
++
+ pUrb->hcpriv = pHub;
+ pUrb->status = -EINPROGRESS;
-+
++
+ if ( usb_pipeint(pipe) ) {
+ DBG(-1, "pUrb=%p is periodic status/change event\n", pUrb );
-+
++
+ /* this is the one for periodic status/change events */
+ pHub->pUrb = pUrb;
+ pHub->wInterval = (pUrb->interval < 16) ? (1 << (pUrb->interval - 1)) :
@@ -201948,14 +201782,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ wIndex = le16_to_cpu(pRequest->wIndex);
+ wLength = le16_to_cpu(pRequest->wLength);
+
-+ DBG(3, "pRequest->bRequest=%02x, pRequest->bmRequestType=%02x, wLength=%04x\n",
-+ pRequest->bRequest, pRequest->bmRequestType, wLength);
++ DBG(3, "pRequest->bRequest=%02x, pRequest->bmRequestType=%02x, wLength=%04x\n",
++ pRequest->bRequest, pRequest->bmRequestType, wLength);
+
+ switch (pRequest->bRequest) {
-+ case USB_REQ_GET_STATUS:
++ case USB_REQ_GET_STATUS:
+ DBG(3, "GET_STATUS(), bType=%02x, bRecip=%02x, wIndex=%04x\n", \
-+ bReqType, bRecip, wIndex);
-+
++ bReqType, bRecip, wIndex);
++
+ if(USB_TYPE_STANDARD == bReqType) {
+ /* self-powered */
+ pData[0] = (USB_RECIP_DEVICE == bRecip) ? 1 : 0;
@@ -201967,7 +201801,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ memcpy(pData, &(pHub->aPortStatusChange[wIndex-1].wStatus), 2);
+ memcpy(&(pData[2]), &(pHub->aPortStatusChange[wIndex-1].wChange),
+ 2);
-+
++
+ /* reset change (TODO: lock) */
+ pHub->aPortStatusChange[wIndex-1].wChange = 0;
+ wSize = 4;
@@ -201976,25 +201810,25 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ memset(pData, 0, 4);
+ wSize = 4;
+ }
-+
++
+ DBG(2, "status report=%02x%02x%02x%02x\n", \
-+ pData[0], pData[1], pData[2], pData[3]);
++ pData[0], pData[1], pData[2], pData[3]);
+ }
+ break;
-+
++
+ case USB_REQ_CLEAR_FEATURE:
+ bPort = (uint8_t)(wIndex & 0xff) - 1;
-+ DBG(3, "CLR_FEAT bReqType=0x%x, wValue=0x%x, wIndex=0x%x\n",
-+ bReqType, wValue, (wIndex & 0xff) );
++ DBG(3, "CLR_FEAT bReqType=0x%x, wValue=0x%x, wIndex=0x%x\n",
++ bReqType, wValue, (wIndex & 0xff) );
+ if((USB_TYPE_STANDARD == bReqType) && (USB_RECIP_ENDPOINT == bRecip))
+ {
+ wSize = 0;
-+ DBG(3, "END POINT FEATURE!\n");
++ DBG(3, "END POINT FEATURE!\n");
+ } else if(USB_TYPE_CLASS == bReqType) {
-+
++
+ if(USB_RECIP_OTHER == bRecip)
+ {
-+ bPort = (uint8_t)(wIndex & 0xff) - 1;
++ bPort = (uint8_t)(wIndex & 0xff) - 1;
+ DBG(3, "CLEAR_PORT_FEATURE(%d), port %d\n", \
+ wValue, bPort);
+ switch(wValue) {
@@ -202005,129 +201839,129 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ case USB_PORT_FEAT_HIGHSPEED:
+ case USB_PORT_FEAT_TEST:
+ case USB_PORT_FEAT_INDICATOR:
-+ DBG(3, "feat 0x%02x, wIndex=%d\n", wValue, bPort);
++ DBG(3, "feat 0x%02x, wIndex=%d\n", wValue, bPort);
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_ENABLE:
-+ DBG(4, "enable port %d\n", bPort);
++ DBG(4, "enable port %d\n", bPort);
+ pHub->pPortServices->pfSetPortEnable(
+ pHub->pPortServices->pPrivateData, bPort, FALSE);
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_SUSPEND:
-+ DBG(3, "suspend port %d\n", bPort);
++ DBG(3, "suspend port %d\n", bPort);
+ pHub->pPortServices->pfSetPortSuspend(
+ pHub->pPortServices->pPrivateData, bPort, FALSE);
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_RESET:
-+ DBG(4, "reset port %d\n", bPort);
++ DBG(4, "reset port %d\n", bPort);
+ pHub->pPortServices->pfSetPortReset(
+ pHub->pPortServices->pPrivateData, bPort, FALSE);
+ wSize = 0;
+ break;
-+
++
+ /* acknowledge changes: */
+ case USB_PORT_FEAT_C_CONNECTION:
-+ DBG(3, "ack connection port %d\n", bPort);
++ DBG(3, "ack connection port %d\n", bPort);
+ pHub->aPortStatusChange[bPort].wChange &= ~1;
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_C_ENABLE:
-+ DBG(3, "ack enable port %d\n", bPort);
++ DBG(3, "ack enable port %d\n", bPort);
+ pHub->aPortStatusChange[bPort].wChange &= ~USB_PORT_STAT_ENABLE;
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_C_SUSPEND:
-+ DBG(3, "ack suspend port %d\n", bPort);
-+
++ DBG(3, "ack suspend port %d\n", bPort);
++
+ pHub->aPortStatusChange[bPort].wChange &= ~USB_PORT_STAT_SUSPEND;
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_C_RESET:
-+ DBG(3, "ack reset port %d\n", bPort);
++ DBG(3, "ack reset port %d\n", bPort);
+ pHub->aPortStatusChange[bPort].wChange &= ~USB_PORT_STAT_RESET;
+ wSize = 0;
+ break;
+ case USB_PORT_FEAT_C_OVER_CURRENT:
-+ DBG(3, "ack over current port %d\n", bPort);
++ DBG(3, "ack over current port %d\n", bPort);
+ wSize = 0;
+ break;
-+
++
+ default:
-+ INFO("clear feature 0x%02x on port=%d unknown\n", wValue, bPort);
-+ break;
++ INFO("clear feature 0x%02x on port=%d unknown\n", wValue, bPort);
++ break;
+ }
+ } else {
-+ DBG(3, "clear wValue=%d on port=%d\n", wValue, bPort);
++ DBG(3, "clear wValue=%d on port=%d\n", wValue, bPort);
+ switch(wValue) {
+ case C_HUB_LOCAL_POWER:
+ case C_HUB_OVER_CURRENT:
+ wSize = 0;
+ break;
+ }
-+ }
++ }
+ pHub->bIsChanged = TRUE;
+ }
+ break;
-+
++
+ case USB_REQ_SET_FEATURE:
+ if((USB_TYPE_CLASS == bReqType) && (USB_RECIP_OTHER == bRecip))
+ {
-+ bPort = (uint8_t)(wIndex & 0xff) - 1;
-+ DBG(3, "SET_PORT_FEATURE(0x%02x), port %d\n", wValue, bPort);
++ bPort = (uint8_t)(wIndex & 0xff) - 1;
++ DBG(3, "SET_PORT_FEATURE(0x%02x), port %d\n", wValue, bPort);
+ switch(wValue) {
+ case USB_PORT_FEAT_SUSPEND:
-+ DBG(3, "suspend port %d\n", bPort);
++ DBG(3, "suspend port %d\n", bPort);
+ pHub->pPortServices->pfSetPortSuspend(
+ pHub->pPortServices->pPrivateData, bPort, TRUE);
+ pHub->aPortStatusChange[bPort].wStatus |= USB_PORT_STAT_SUSPEND;
+ pHub->bIsChanged = TRUE;
+ wSize = 0;
+ break;
-+
++
+ case USB_PORT_FEAT_RESET:
-+ DBG(3, "reset port %d\n", bPort);
++ DBG(3, "reset port %d\n", bPort);
+ pHub->aPortStatusChange[bPort].wStatus |= USB_PORT_STAT_RESET;
+ pHub->aPortStatusChange[bPort].wStatus |= USB_PORT_STAT_ENABLE;
+ pHub->aPortStatusChange[bPort].wChange |= USB_PORT_STAT_RESET;
+ pHub->bIsChanged = TRUE;
-+ pHub->pPortServices->pfSetPortReset(pHub->pPortServices->pPrivateData,
++ pHub->pPortServices->pfSetPortReset(pHub->pPortServices->pPrivateData,
+ bPort, TRUE);
+ wSize = 0;
+ break;
-+
++
+ case USB_PORT_FEAT_POWER:
-+ DBG(3, "power port %d\n", bPort);
-+ pHub->pPortServices->pfSetPortPower(pHub->pPortServices->pPrivateData,
++ DBG(3, "power port %d\n", bPort);
++ pHub->pPortServices->pfSetPortPower(pHub->pPortServices->pPrivateData,
+ bPort, TRUE);
+ pHub->aPortStatusChange[bPort].wStatus |= USB_PORT_STAT_POWER;
+ wSize = 0;
+ break;
-+
++
+ case USB_PORT_FEAT_ENABLE:
-+ DBG(3, "enable port %d\n", bPort);
-+ pHub->pPortServices->pfSetPortEnable(pHub->pPortServices->pPrivateData,
++ DBG(3, "enable port %d\n", bPort);
++ pHub->pPortServices->pfSetPortEnable(pHub->pPortServices->pPrivateData,
+ bPort, TRUE);
+ pHub->aPortStatusChange[bPort].wStatus |= USB_PORT_STAT_ENABLE;
+ wSize = 0;
+ break;
+ }
+ } else {
-+ DBG(3, "SET_FEATURE(%04x), but feature unknown\n", wValue);
++ DBG(3, "SET_FEATURE(%04x), but feature unknown\n", wValue);
+ }
+ break;
-+
++
+ case USB_REQ_SET_ADDRESS:
+ pHub->bAddress = (wValue & 0x7f);
-+ DBG(3, "SET_ADDRESS(%x) \n", pHub->bAddress);
++ DBG(3, "SET_ADDRESS(%x) \n", pHub->bAddress);
+ wSize = 0;
+ break;
-+
++
+ case USB_REQ_GET_DESCRIPTOR:
+ if(USB_TYPE_CLASS == bReqType) {
+ DBG(3, "GET_CLASS_DESCRIPTOR()\n");
-+
++
+ pData[0] = 9;
+ pData[1] = 0x29;
+ pData[2] = pHub->bPortCount;
@@ -202144,8 +201978,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ pData[8] = 0xff;
+ wSize = pData[0];
+ } else {
-+ bType = (uint8_t)(wValue >> 8);
-+ DBG(3, "GET_DESCRIPTOR(%d)\n", bType);
++ bType = (uint8_t)(wValue >> 8);
++ DBG(3, "GET_DESCRIPTOR(%d)\n", bType);
+ switch(bType) {
+ case USB_DT_DEVICE: /* 1 */
+ wSize = min(wLength, (uint16_t)MGC_aVirtualHubDeviceDesc[0]);
@@ -202166,40 +202000,40 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ }
+ }
+ break;
-+
++
+ case USB_REQ_GET_CONFIGURATION:
+ DBG(3, "GET_CONFIG() => 1\n");
+ pData[0] = 1;
+ wSize = 1;
+ break;
-+
++
+ case USB_REQ_SET_CONFIGURATION:
+ DBG(3, "SET_CONFIG(%04x)\n", wValue);
+ wSize = 0;
+ break;
-+
++
+ } /* END: switch on request type */
+
+ if(0xffff == wSize) {
+ pUrb->status = USB_ST_STALL;
+ } else {
+ pUrb->actual_length = wSize;
-+ pUrb->status = 0;
++ pUrb->status = 0;
+ }
-+
-+ spin_unlock(&pHub->Lock);
++
++ spin_unlock(&pHub->Lock);
+ if (pUrb->complete) {
+ DBG(3, "completing URB status=%d\n", pUrb->status );
+ COMPLETE_URB(pUrb, NULL);
-+ pUrb->hcpriv = NULL;
++ pUrb->hcpriv = NULL;
+ usb_put_urb(pUrb);
+ DBG(4, "URB completed\n");
+ }
+
+ DBG(2, "==> pUrb->status=%d %s, length=%d, completed=%s\n", pUrb->status, \
-+ (pUrb->status)?"(STALL)":"", pUrb->actual_length,
++ (pUrb->status)?"(STALL)":"", pUrb->actual_length,
+ (pUrb->complete)?"yes":"no");
-+
++
+ return 0;
+}
+
@@ -202213,15 +202047,15 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+int MGC_VirtualHubUnlinkUrb(MGC_VirtualHub* pHub, struct urb* pUrb)
+{
+ DBG(2, "<== pUrb=%p\n", pUrb);
-+
-+#ifdef MUSB_USE_HCD_DRIVER
++
++#ifdef MUSB_USE_HCD_DRIVER
+ ERR("** you shoudl not call %s when using the HCD driver\n", __FUNCTION__);
+#endif
+
+ spin_lock(&pHub->Lock);
+ if(pUrb && (pHub->pUrb == pUrb) && (pUrb->hcpriv == pHub)) {
+ pHub->bIsChanged = FALSE;
-+
++
+ if (pUrb->transfer_flags & USB_ASYNC_UNLINK) {
+ pUrb->status = -ECONNRESET;
+ if (pUrb->complete) {
@@ -202234,9 +202068,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ pUrb->hcpriv = NULL;
+ pHub->pUrb = NULL;
+ }
-+
-+ spin_unlock(&pHub->Lock);
-+ usb_put_urb(pUrb);
++
++ spin_unlock(&pHub->Lock);
++ usb_put_urb(pUrb);
+
+ DBG(2, "==>\n");
+ return 0;
@@ -202247,13 +202081,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ * assumes bPortIndex < MGC_VIRTUALHUB_MAX_PORTS
+ * AND pHub->Lock to be... locked :)
+ */
-+STATIC void MGC_SetVirtualHubPortSpeed(MGC_VirtualHub* pHub,
++STATIC void MGC_SetVirtualHubPortSpeed(MGC_VirtualHub* pHub,
+ uint8_t bPortIndex, uint8_t bSpeed
+) {
+ uint16_t wSpeedMask = 0;
+
-+ DBG(2, "<== bPortIndex=%d, bSpeed=%d\n", bPortIndex, bSpeed);
-+
++ DBG(2, "<== bPortIndex=%d, bSpeed=%d\n", bPortIndex, bSpeed);
++
+ switch(bSpeed) {
+ case 0:
+ wSpeedMask = USB_PORT_STAT_LOW_SPEED;
@@ -202263,7 +202097,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ break;
+ }
+
-+ pHub->aPortStatusChange[bPortIndex].wStatus &=
++ pHub->aPortStatusChange[bPortIndex].wStatus &=
+ ~(USB_PORT_STAT_LOW_SPEED | USB_PORT_STAT_HIGH_SPEED);
+ pHub->aPortStatusChange[bPortIndex].wStatus |= 1 | wSpeedMask;
+ pHub->bIsChanged = TRUE;
@@ -202276,20 +202110,20 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ * @param bPortIndex 0-based index of port
+ * @see #MGC_VirtualHubInit
+ */
-+void MGC_VirtualHubPortResetDone(MGC_VirtualHub* pHub, uint8_t bPortIndex,
++void MGC_VirtualHubPortResetDone(MGC_VirtualHub* pHub, uint8_t bPortIndex,
+ uint8_t bHubSpeed)
-+{
++{
+ DBG(2, "<==port %d reset complete\n", bPortIndex);
-+
++
+ if(bPortIndex < MGC_VIRTUALHUB_MAX_PORTS) {
+ MGC_SetVirtualHubPortSpeed(pHub, bPortIndex, bHubSpeed);
-+
++
+ pHub->aPortStatusChange[bPortIndex].wStatus &= ~USB_PORT_STAT_RESET;
+ pHub->aPortStatusChange[bPortIndex].wStatus |= USB_PORT_STAT_ENABLE;
+ pHub->aPortStatusChange[bPortIndex].wChange = USB_PORT_STAT_RESET |
+ USB_PORT_STAT_ENABLE;
+ pHub->bIsChanged = TRUE;
-+ }
++ }
+ DBG(2, "==>\n");
+}
+
@@ -202303,24 +202137,24 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+void MGC_VirtualHubPortConnected(MGC_VirtualHub* pHub, uint8_t bPortIndex,
+ uint8_t bSpeed)
+{
-+ DBG(2, "<== port %d connected, core reports speed=%d\n", bPortIndex, bSpeed);
-+ if (bPortIndex < MGC_VIRTUALHUB_MAX_PORTS) {
++ DBG(2, "<== port %d connected, core reports speed=%d\n", bPortIndex, bSpeed);
++ if (bPortIndex < MGC_VIRTUALHUB_MAX_PORTS) {
+ struct urb* pUrb=pHub->pUrb;
-+
++
+ MGC_SetVirtualHubPortSpeed(pHub, bPortIndex, bSpeed);
+ pHub->aPortStatusChange[bPortIndex].wChange |= 1;
-+
++
+ /* shorter time... it want it NOW! */
+ DBG(2, "<== pHub=%p, pHub->pUrb=%p, pHub->pUrb->hcpriv=%p\n", pHub,
-+ pUrb, (pUrb)?pUrb->hcpriv:NULL);
++ pUrb, (pUrb)?pUrb->hcpriv:NULL);
+ if ( pUrb && ( (!pUrb->hcpriv) || (pUrb->hcpriv== pHub))) {
-+ pUrb->hcpriv=pHub;
++ pUrb->hcpriv=pHub;
+ MGC_VirtualHubActivateTimer(pHub, MGC_VirtualHubTimerExpired, 1);
+ }
+ }
+ DBG(2, "==>\n");
+}
-+
++
+/**
+ * A device has effectively been disconnected from a virtual hub port
+ * @param pHub pointer to hub initialized by successful MGC_VirtualHubInit
@@ -202332,21 +202166,21 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ struct urb* pUrb;
+
+ DBG(-1, "<== Port %d disconnected\n", bPortIndex);
-+
++
+ if(bPortIndex >= MGC_VIRTUALHUB_MAX_PORTS) {
+ DBG(-1, "==>");
+ return;
+ }
-+
-+#ifndef MUSB_USE_HCD_DRIVER
++
++#ifndef MUSB_USE_HCD_DRIVER
+ del_timer_sync(&pHub->Timer);
+#endif
+
-+ pUrb= pHub->pUrb;
++ pUrb= pHub->pUrb;
+ pHub->aPortStatusChange[bPortIndex].wStatus &= ~1;
+ pHub->aPortStatusChange[bPortIndex].wChange |= 1;
+ pHub->bIsChanged = TRUE;
-+
++
+ if (pUrb && (pUrb->hcpriv == pHub)) {
+ pUrb->status=0;
+ MGC_VirtualHubCompleteIrq(pHub, pUrb);
@@ -202354,7 +202188,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+
+ DBG(-1, "==>\n");
+}
-+
++
+/**
+ * A device has effectively resumed a virtual hub port
+ * @param pHub pointer to hub initialized by successful MGC_VirtualHubInit
@@ -202363,8 +202197,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+ */
+void MGC_VirtualHubPortResumed(MGC_VirtualHub* pHub, uint8_t bPortIndex)
+{
-+ DBG(2, "<== Resume port %d\n", bPortIndex);
-+#ifdef MUSB_USE_HCD_DRIVER
++ DBG(2, "<== Resume port %d\n", bPortIndex);
++#ifdef MUSB_USE_HCD_DRIVER
+ ERR("** you shoudl not call %s when using the HCD driver\n", __FUNCTION__);
+#endif
+
@@ -202374,12 +202208,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.c ../new/linux-2.6.20
+
+ pHub->aPortStatusChange[bPortIndex].wStatus &= ~USB_PORT_STAT_SUSPEND;
+ pHub->aPortStatusChange[bPortIndex].wChange |= USB_PORT_STAT_SUSPEND;
-+ pHub->bIsChanged = TRUE;
++ pHub->bIsChanged = TRUE;
+ DBG(2, "==>\n");
+}
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.h ../new/linux-2.6.20/drivers/usb/nomadik/musb_virthub.h
---- linux-2.6.20/drivers/usb/nomadik/musb_virthub.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/musb_virthub.h 2008-07-28 15:21:05.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musb_virthub.h
@@ -0,0 +1,240 @@
+/*
+ * linux/drivers/usb/nomadik/musb_virthub.h
@@ -202398,7 +202231,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.h ../new/linux-2.6.20
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __MUSB_LINUX_VIRTUALHUB_H__
@@ -202478,7 +202311,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.h ../new/linux-2.6.20
+ */
+typedef void (*MGC_pfSetPortReset)(void* pPrivateData, uint8_t bPortIndex,
+ uint8_t bReset);
-+
++
+/**
+ * MGC_PortServices.
+ * Services provided to a virtual by a USB port controller.
@@ -202538,7 +202371,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.h ../new/linux-2.6.20
+ uint16_t wInterval;
+ uint8_t bIsChanged;
+ uint8_t bAddress;
-+
++
+} MGC_VirtualHub;
+
+/******************************** Protos **********************************/
@@ -202555,64 +202388,64 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.h ../new/linux-2.6.20
+void MGC_LinuxSetPortReset(void* pPrivateData, uint8_t bPortIndex,
+ uint8_t bReset);
+
-+extern int MGC_VirtualHubInit(MGC_VirtualHub* pHub, struct usb_bus* pBus,
++extern int MGC_VirtualHubInit(MGC_VirtualHub* pHub, struct usb_bus* pBus,
+ uint8_t bPortCount, MGC_PortServices* pPortServices);
+extern void MGC_VirtualHubDestroy(MGC_VirtualHub* pHub);
+extern void MGC_VirtualHubStart(MGC_VirtualHub* pHub);
+extern void MGC_VirtualHubStop(MGC_VirtualHub* pHub);
+extern int MGC_VirtualHubSubmitUrb(MGC_VirtualHub* pHub, struct urb* pUrb);
+extern int MGC_VirtualHubUnlinkUrb(MGC_VirtualHub* pHub, struct urb* pUrb);
-+extern void MGC_VirtualHubPortResetDone(MGC_VirtualHub* pHub,
++extern void MGC_VirtualHubPortResetDone(MGC_VirtualHub* pHub,
+ uint8_t bPortIndex, uint8_t bHubSpeed);
-+extern void MGC_VirtualHubPortConnected(MGC_VirtualHub* pHub,
++extern void MGC_VirtualHubPortConnected(MGC_VirtualHub* pHub,
+ uint8_t bPortIndex, uint8_t bSpeed);
-+extern void MGC_VirtualHubPortResumed(MGC_VirtualHub* pHub,
++extern void MGC_VirtualHubPortResumed(MGC_VirtualHub* pHub,
+ uint8_t bPortIndex);
-+extern void MGC_VirtualHubPortDisconnected(MGC_VirtualHub* pHub,
++extern void MGC_VirtualHubPortDisconnected(MGC_VirtualHub* pHub,
+ uint8_t bPortIndex);
+
+#else /* #ifdef MUSB_VIRTHUB */
+
-+static int uint8_t MGC_VirtualHubInit(MGC_VirtualHub* pHub,
-+ struct usb_bus* pBus, uint8_t bPortCount,
-+ MGC_PortServices* pPortServices)
-+{
++static int uint8_t MGC_VirtualHubInit(MGC_VirtualHub* pHub,
++ struct usb_bus* pBus, uint8_t bPortCount,
++ MGC_PortServices* pPortServices)
++{
+ DBG(-1, "this should not be called");
+ return -ENODEV;
+};
-+static inline void MGC_VirtualHubDestroy(MGC_VirtualHub* pHub) {
++static inline void MGC_VirtualHubDestroy(MGC_VirtualHub* pHub) {
+ DBG(-1, "this should not be called");
+};
-+static inline void MGC_VirtualHubStart(MGC_VirtualHub* pHub) {
++static inline void MGC_VirtualHubStart(MGC_VirtualHub* pHub) {
+ DBG(-1, "this should not be called");
+};
-+static inline void MGC_VirtualHubStop(MGC_VirtualHub* pHub) {
++static inline void MGC_VirtualHubStop(MGC_VirtualHub* pHub) {
+ DBG(-1, "this should not be called");
+};
-+static inline int MGC_VirtualHubSubmitUrb(MGC_VirtualHub* pHub, struct urb* pUrb) {
++static inline int MGC_VirtualHubSubmitUrb(MGC_VirtualHub* pHub, struct urb* pUrb) {
+ DBG(-1, "this should not be called");
+ return -ENODEV;
+};
+
-+static inline int MGC_VirtualHubUnlinkUrb(MGC_VirtualHub* pHub, struct urb* pUrb) {
++static inline int MGC_VirtualHubUnlinkUrb(MGC_VirtualHub* pHub, struct urb* pUrb) {
+ DBG(-1, "this should not be called");
+ return -ENODEV;
+};
+
-+static inline void MGC_VirtualHubPortResetDone(MGC_VirtualHub* pHub,
-+ uint8_t bPortIndex, uint8_t bHubSpeed) {
++static inline void MGC_VirtualHubPortResetDone(MGC_VirtualHub* pHub,
++ uint8_t bPortIndex, uint8_t bHubSpeed) {
+ DBG(-1, "this should not be called");
+};
-+static inline void MGC_VirtualHubPortConnected(MGC_VirtualHub* pHub,
-+ uint8_t bPortIndex, uint8_t bSpeed) {
++static inline void MGC_VirtualHubPortConnected(MGC_VirtualHub* pHub,
++ uint8_t bPortIndex, uint8_t bSpeed) {
+ DBG(-1, "this should not be called");
+};
-+static inline void MGC_VirtualHubPortResumed(MGC_VirtualHub* pHub,
-+ uint8_t bPortIndex) {
++static inline void MGC_VirtualHubPortResumed(MGC_VirtualHub* pHub,
++ uint8_t bPortIndex) {
+ DBG(-1, "this should not be called");
+};
-+static inline void MGC_VirtualHubPortDisconnected(MGC_VirtualHub* pHub,
-+uint8_t bPortIndex) {
++static inline void MGC_VirtualHubPortDisconnected(MGC_VirtualHub* pHub,
++uint8_t bPortIndex) {
+ DBG(-1, "this should not be called");
+};
+
@@ -202621,9 +202454,1310 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/musb_virthub.h ../new/linux-2.6.20
+
+#endif /* multiple inclusion protection */
+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c
---- linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c 2008-09-17 13:23:34.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musbdefs.h
+@@ -0,0 +1,828 @@
++/*
++ * linux/drivers/usb/nomadik/musbdefs.h
++ *
++ * Copyright 2007, STMicroelectronics
++ *
++ * 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 __MUSB_MUSBDEFS_H__
++#define __MUSB_MUSBDEFS_H__
++
++#include <linux/slab.h>
++#include <linux/list.h>
++#include <linux/smp_lock.h>
++#include <linux/errno.h>
++
++#ifdef MUSB_CONFIG_PROC_FS
++#include <linux/fs.h>
++#endif
++
++/* useful for compiling across linux version & debug definitions */
++#include "musb_cross.h"
++#include "debug.h"
++
++/* Board-specific definitions (hard-wired controller locations/IRQs) */
++#include "plat_cnf.h"
++#include "plat_arc.h"
++#include "musbhdrc.h"
++
++/****************************** VERIFY THE DEFINES **************************
++ * determine how to compile the driver; MUSB_GADGET->as gadget driver,
++ * MUSB_HOST as host mode, MUSB_OTG -> otg mode (host and gadget)
++ *
++ * OTG => GADGET
++ */
++
++#ifdef MUSB_GSTORAGE
++
++/* for now */
++#ifndef MUSB_OTG
++#define MUSB_OTG
++#endif
++
++#endif
++
++#ifdef MUSB_OTG
++#endif
++#ifndef MUSB_HOST
++#define MUSB_HOST
++#endif
++
++#ifdef CONFIG_PROC_FS
++#ifndef MUSB_CONFIG_PROC_FS
++#define MUSB_CONFIG_PROC_FS
++#endif
++#endif
++
++#ifdef MUSB_PROC_TESTMUSB
++
++#ifndef CONFIG_PROC_FS
++#error "TestMusb needs CONFIG_PROC_FS"
++#endif
++
++#ifndef MUSB_HOST
++#error "TestMusb needs HOST MODE"
++#endif
++
++#endif
++
++#ifdef MUSB_HOST
++#define MUSB_VIRTHUB
++#endif
++
++/************************* DEFINES DEPENDENT INCLUDES ************************/
++
++/* virtual hub */
++#include "musb_virthub.h"
++
++/****************************** USB CONSTANTS ********************************/
++
++#ifndef USB_DT_DEVICE_QUALIFIER
++#define USB_DT_DEVICE_QUALIFIER 6
++#endif
++
++#ifndef USB_DT_DEVICE_QUALIFIER_SIZE
++#define USB_DT_DEVICE_QUALIFIER_SIZE 10
++#endif
++
++#ifndef USB_DT_OTHER_SPEED
++#define USB_DT_OTHER_SPEED 7
++#endif
++
++#ifndef USB_MAXCHILDREN
++#define USB_MAXCHILDREN (16)
++#endif
++
++/****************************** DEBUG CONSTANTS ********************************/
++
++#define MGC_PAD_FRONT 0xa5deadfe
++#define MGC_PAD_BACK 0xabadcafe
++#define MGC_TEST_PACKET_SIZE 53
++
++/****************************** CONSTANTS ********************************/
++
++#if MUSB_DEBUG > 0
++#define STATIC
++#define MUSB_PARANOID
++#else
++#define STATIC static
++#endif
++
++#ifndef TRUE
++#define TRUE 1
++#endif
++#ifndef FALSE
++#define FALSE 0
++#endif
++
++#ifndef MUSB_C_NUM_EPS
++#define MUSB_C_NUM_EPS ((uint8_t)16)
++#endif
++
++#ifndef MUSB_MAX_END0_PACKET
++#define MUSB_MAX_END0_PACKET ((uint16_t)MGC_END0_FIFOSIZE)
++#endif
++
++#define MGC_END0_START 0x0
++#define MGC_END0_OUT 0x2
++#define MGC_END0_IN 0x4
++#define MGC_END0_STATUS 0x8
++
++#define MGC_END0_STAGE_SETUP 0x0
++#define MGC_END0_STAGE_TX 0x2
++#define MGC_END0_STAGE_RX 0x4
++#define MGC_END0_STAGE_STATUSIN 0x8
++#define MGC_END0_STAGE_STATUSOUT 0xf
++#define MGC_END0_STAGE_STALL_BIT 0x10
++
++/* obsolete */
++#define MGC_END0_STAGE_DATAIN MGC_END0_STAGE_TX
++#define MGC_END0_STAGE_DATAOUT MGC_END0_STAGE_RX
++
++/* EASY GUESS */
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0)
++#define USB_ALLOC_DEV( _parent, _usb_bus, _port) usb_alloc_dev(_parent, _usb_bus, _port)
++#else
++/* 2.4, mvl21, bc5 */
++#define USB_ALLOC_DEV( _parent, _usb_bus, _port) usb_alloc_dev(_parent, _usb_bus)
++#endif
++
++
++/* 2.4/2.6 compatibility */
++#ifdef MUSB_V26
++
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)
++#define USB_HALT_ENDPOINT(_dev, _pipe_ep, _pipe_out) ((_dev)->bus->op->disable(_dev, _pipe_ep))
++#define USB_RUN_ENDPOINT(_dev, _pipe_ep, _pipe_out) usb_endpoint_running(_dev, _pipe_ep, _pipe_out)
++#define USB_ENDPOINT_HALTED(_dev, _pipe_ep, _pipe_out) ( 0 )
++#else
++#define USB_HALT_ENDPOINT(_dev, _pipe_ep, _pipe_out) usb_endpoint_halt(_dev, _pipe_ep, _pipe_out)
++#define USB_RUN_ENDPOINT(_dev, _pipe_ep, _pipe_out) usb_endpoint_running(_dev, _pipe_ep, _pipe_out)
++#define USB_ENDPOINT_HALTED(_dev, _pipe_ep, _pipe_out) usb_endpoint_halted(_dev, _pipe_ep, _pipe_out)
++#endif
++
++/*#define COMPLETE_URB(_pUrb, _p) _pUrb->complete(_pUrb, _p)*/
++#define COMPLETE_URB(_pUrb, _p) (_pUrb->complete=_p)
++#define WAIT_MS(_ms) mdelay(_ms)
++
++#define USB_ISO_ASAP 0x0002
++#define USB_ASYNC_UNLINK 0x0008
++
++#define USB_ST_NOERROR (0)
++#define USB_ST_CRC (-EILSEQ)
++#define USB_ST_BITSTUFF (-EPROTO)
++#define USB_ST_NORESPONSE (-ETIMEDOUT) /* device not responding/handshaking */
++#define USB_ST_DATAOVERRUN (-EOVERFLOW)
++#define USB_ST_DATAUNDERRUN (-EREMOTEIO)
++#define USB_ST_BUFFEROVERRUN (-ECOMM)
++#define USB_ST_BUFFERUNDERRUN (-ENOSR)
++#define USB_ST_INTERNALERROR (-EPROTO) /* unknown error */
++#define USB_ST_SHORT_PACKET (-EREMOTEIO)
++#define USB_ST_PARTIAL_ERROR (-EXDEV) /* ISO transfer only partially completed */
++#define USB_ST_URB_KILLED (-ENOENT) /* URB canceled by user */
++#define USB_ST_URB_PENDING (-EINPROGRESS)
++#define USB_ST_REMOVED (-ENODEV) /* device not existing or removed */
++#define USB_ST_TIMEOUT (-ETIMEDOUT) /* communication timed out, also in urb->status**/
++#define USB_ST_NOTSUPPORTED (-ENOSYS)
++#define USB_ST_BANDWIDTH_ERROR (-ENOSPC) /* too much bandwidth used */
++#define USB_ST_URB_INVALID_ERROR (-EINVAL) /* invalid value/transfer type */
++#define USB_ST_URB_REQUEST_ERROR (-ENXIO) /* invalid endpoint */
++#define USB_ST_STALL (-EPIPE) /* pipe stalled, also in urb->status*/
++
++#define USB_ZERO_PACKET 0x0040 /* Finish bulk OUTs always with zero length packet */
++
++#endif
++
++#ifdef MUSB_V24
++#define usb_disabled() 0
++#define COMPLETE_URB(_pUrb, _p) _pUrb->complete(_pUrb)
++#define WAIT_MS(_ms) wait_ms(_ms)
++#define USB_HALT_ENDPOINT(_dev, _pipe_ep, _pipe_out) usb_endpoint_halt(_dev, _pipe_ep, _pipe_out)
++#define USB_ENDPOINT_HALTED(_dev, _pipe_ep, _pipe_out) usb_endpoint_halted(_dev, _pipe_ep, _pipe_out)
++
++#ifdef MUSB_LINUX_MV21
++#define usb_get_urb(_pUrb) _pUrb
++#define usb_put_urb(_pUrb)
++#undef MUSB_HAS_BUSNAME
++#endif
++
++#endif
++
++typedef enum
++{
++ MGC_STATE_DEFAULT,
++ MGC_STATE_ADDRESS,
++ MGC_STATE_CONFIGURED
++} MGC_DeviceState;
++
++/* failure codes */
++#define MUSB_ERR_WAITING 1
++#define MUSB_ERR_VBUS -1
++#define MUSB_ERR_BABBLE -2
++#define MUSB_ERR_CORRUPTED -3
++#define MUSB_ERR_IRQ -4
++#define MUSB_ERR_SHUTDOWN -5
++#define MUSB_ERR_RESTART -6
++
++/****************************** FUNCTIONS ********************************/
++
++#define KMALLOC(a,b,c) { lock_kernel(); a=kmalloc(b,c); unlock_kernel(); }
++#define KFREE(p) { lock_kernel(); kfree(p); unlock_kernel(); }
++
++/*************************** REGISTER ACCESS ********************************/
++
++/* indexed vs. flat register model */
++#ifdef MUSB_FLAT_REG
++#define MGC_SelectEnd(_pBase, _bEnd)
++#define MGC_ReadCsr8(_pBase, _bOffset, _bEnd) \
++ MGC_Read8(_pBase, MGC_END_OFFSET(_bEnd, _bOffset))
++#define MGC_ReadCsr16(_pBase, _bOffset, _bEnd) \
++ MGC_Read16(_pBase, MGC_END_OFFSET(_bEnd, _bOffset))
++#define MGC_WriteCsr8(_pBase, _bOffset, _bEnd, _bData) \
++ MGC_Write8(_pBase, MGC_END_OFFSET(_bEnd, _bOffset), _bData)
++#define MGC_WriteCsr16(_pBase, _bOffset, _bEnd, _bData) \
++ MGC_Write16(_pBase, MGC_END_OFFSET(_bEnd, _bOffset), _bData)
++#else
++#define MGC_SelectEnd(_pBase, _bEnd) \
++ MGC_Write8(_pBase, MGC_O_HDRC_INDEX, _bEnd)
++#define MGC_ReadCsr8(_pBase, _bOffset, _bEnd) \
++ MGC_Read8(_pBase, (_bOffset + 0x10))
++#define MGC_ReadCsr16(_pBase, _bOffset, _bEnd) \
++ MGC_Read16(_pBase, (_bOffset + 0x10))
++#define MGC_WriteCsr8(_pBase, _bOffset, _bEnd, _bData) \
++ MGC_Write8(_pBase, (_bOffset + 0x10), _bData)
++#define MGC_WriteCsr16(_pBase, _bOffset, _bEnd, _bData) \
++ MGC_Write16(_pBase, (_bOffset + 0x10), _bData)
++#endif
++
++
++/************************** ULPI Registers ********************************/
++
++/* Added in HDRC 1.9(?) & MHDRC 1.4 */
++/* ULPI pass-through */
++#define MGC_O_HDRC_ULPI_VBUSCTL 0x70
++#define MGC_O_HDRC_ULPI_REGDATA 0x74
++#define MGC_O_HDRC_ULPI_REGADDR 0x75
++#define MGC_O_HDRC_ULPI_REGCTL 0x76
++
++/* extended config & PHY control */
++#define MGC_O_HDRC_ENDCOUNT 0x78
++#define MGC_O_HDRC_DMARAMCFG 0x79
++#define MGC_O_HDRC_PHYWAIT 0x7A
++#define MGC_O_HDRC_PHYVPLEN 0x7B /* units of 546.1 us */
++#define MGC_O_HDRC_HSEOF1 0x7C /* units of 133.3 ns */
++#define MGC_O_HDRC_FSEOF1 0x7D /* units of 533.3 ns */
++#define MGC_O_HDRC_LSEOF1 0x7E /* units of 1.067 us */
++
++/* Added in HDRC 1.9(?) & MHDRC 1.4 */
++/* ULPI */
++#define MGC_M_ULPI_VBUSCTL_USEEXTVBUSIND 0x02
++#define MGC_M_ULPI_VBUSCTL_USEEXTVBUS 0x01
++#define MGC_M_ULPI_REGCTL_INT_ENABLE 0x08
++#define MGC_M_ULPI_REGCTL_READNOTWRITE 0x04
++#define MGC_M_ULPI_REGCTL_COMPLETE 0x02
++#define MGC_M_ULPI_REGCTL_REG 0x01
++/* extended config & PHY control */
++#define MGC_M_ENDCOUNT_TXENDS 0x0f
++#define MGC_S_ENDCOUNT_TXENDS 0
++#define MGC_M_ENDCOUNT_RXENDS 0xf0
++#define MGC_S_ENDCOUNT_RXENDS 4
++#define MGC_M_DMARAMCFG_RAMBITS 0x0f /* RAMBITS-1 */
++#define MGC_S_DMARAMCFG_RAMBITS 0
++#define MGC_M_DMARAMCFG_DMACHS 0xf0
++#define MGC_S_DMARAMCFG_DMACHS 4
++#define MGC_M_PHYWAIT_WAITID 0x0f /* units of 4.369 ms */
++#define MGC_S_PHYWAIT_WAITID 0
++#define MGC_M_PHYWAIT_WAITCON 0xf0 /* units of 533.3 ns */
++#define MGC_S_PHYWAIT_WAITCON 4
++
++/****************************** FUNCTIONS ********************************/
++
++#define MUSB_HST_MODE(_pthis) { (_pthis)->bIsHost=TRUE; (_pthis)->bIsDevice=FALSE; \
++ (_pthis)->bIsA=1; (_pthis)->bFailCode=0; }
++#define MUSB_DEV_MODE(_pthis) { (_pthis)->bIsHost=FALSE; (_pthis)->bIsDevice=TRUE; \
++ (_pthis)->bIsA=0; (_pthis)->bFailCode=0; }
++#define MUSB_B_IDLE_MODE(_pthis) { (_pthis)->bIsHost=FALSE; (_pthis)->bIsDevice=FALSE; \
++ (_pthis)->bIsA=0; (_pthis)->bFailCode=MUSB_ERR_WAITING; }
++#define MUSB_A_IDLE_MODE(_pthis) { (_pthis)->bIsHost=FALSE; (_pthis)->bIsDevice=FALSE; \
++ (_pthis)->bIsA=1; (_pthis)->bFailCode=MUSB_ERR_WAITING; }
++#define MUSB_ERR_MODE(_pthis, _cause) { (_pthis)->bIsHost=FALSE; (_pthis)->bIsDevice=FALSE; \
++ (_pthis)->bFailCode=_cause; }
++
++#define MUSB_IS_ERR(_x) ( (_x)->bFailCode<0 )
++#define MUSB_IS_HST(_x) ( !MUSB_IS_ERR(_x) && (_x)->bIsHost && !(_x)->bIsDevice )
++#define MUSB_IS_DEV(_x) ( !MUSB_IS_ERR(_x) && !(_x)->bIsHost && (_x)->bIsDevice )
++#define MUSB_IS_B_IDLE(_x) ( !MUSB_IS_ERR(_x) && !(_x)->bIsHost && !(_x)->bIsDevice && !(_x)->bIsA )
++#define MUSB_IS_A_IDLE(_x) ( !MUSB_IS_ERR(_x) && !(_x)->bIsHost && !(_x)->bIsDevice && (_x)->bIsA )
++
++#define MUSB_MODE(_x) ( MUSB_IS_HST(_x)?"HOST":( MUSB_IS_DEV(_x)?"FUNCTION":(MUSB_IS_B_IDLE(_x)?"B_IDLE":(MUSB_IS_A_IDLE(_x)?"A_IDLE":"ERROR"))) )
++
++#define HDRC_IS_HST(_x) ( MGC_Read8((_x)->pRegs, MGC_O_HDRC_DEVCTL)&MGC_M_DEVCTL_HM )
++#define HDRC_IS_DEV(_x) ( !HDRC_IS_HST(_x) )
++
++
++/******************************** DMA TYPES **********************************/
++
++#ifdef MUSB_DMA
++#include "dma.h"
++
++#ifndef MGC_HSDMA_CHANNELS
++#define MGC_HSDMA_CHANNELS 8
++#endif
++
++#ifdef MUSB_HAS_DMA_URBS
++#define WANTS_DMA(_pUrb) ((_pUrb)->transfer_dma && (_pUrb->flags & URB_NO_TRANSFER_DMA_MAP))
++#define DMA_BUFFER(_pUrb) ((_pUrb)->transfer_dma)
++#else
++#define WANTS_DMA(_pUrb) (0)
++#define DMA_BUFFER(pUrb) ((void*)0x000666)
++#endif
++
++extern MGC_DmaControllerFactory MGC_HdrcDmaControllerFactory;
++#endif
++
++
++/************************** Ep Configuration ********************************/
++
++/** The End point descriptor */
++struct MUSB_EpFifoDescriptor {
++ uint8_t bType; /* 0 for autoconfig, CNTR, ISOC, BULK, INTR */
++ uint8_t bDir; /* 0 for autoconfig, INOUT, IN, OUT */
++ uint16_t wSize; /* 0 for autoconfig, or the size */
++ uint8_t bDbe; /* Double buffering: 0 disabled, 1 enabled */
++};
++
++#define MUSB_EPD_AUTOCONFIG 0
++
++#define MUSB_EPD_T_CNTRL 1
++#define MUSB_EPD_T_ISOC 2
++#define MUSB_EPD_T_BULK 3
++#define MUSB_EPD_T_INTR 4
++
++#define MUSB_EPD_D_INOUT 0
++#define MUSB_EPD_D_TX 1
++#define MUSB_EPD_D_RX 2
++
++/******************************** TYPES *************************************/
++
++struct urb;
++struct usb_device;
++struct usb_gadget;
++struct usb_hcd;
++
++/**
++ * The device request.
++ */
++typedef struct __attribute__((packed)) {
++ uint8_t bmRequestType;
++ uint8_t bRequest;
++ uint16_t wValue;
++ uint16_t wIndex;
++ uint16_t wLength;
++} MUSB_DeviceRequest;
++
++/**
++ * MGC_LinuxLocalEnd.
++ * Local endpoint resource.
++ * @field Lock spinlock
++ * @field pUrb current URB
++ * @field urb_list list
++ * @field dwOffset current buffer offset
++ * @field dwRequestSize how many bytes were last requested to move
++ * @field wMaxPacketSizeTx local Tx FIFO size
++ * @field wMaxPacketSizeRx local Rx FIFO size
++ * @field wPacketSize programmed packet size
++ * @field bIsSharedFifo TRUE if FIFO is shared between Tx and Rx
++ * @field bAddress programmed bus address
++ * @field bEnd programmed remote endpoint address
++ * @field bTrafficType programmed traffic type
++ * @field bIsClaimed TRUE if claimed
++ * @field bIsTx TRUE if current direction is Tx
++ * @field bIsReady TRUE if ready (available for new URB)
++ */
++typedef struct
++{
++#if MUSB_DEBUG > 0
++ uint32_t dwPadFront;
++#endif
++ spinlock_t Lock;
++ uint8_t bEnd; /* ep number */
++
++#ifdef MUSB_USE_HCD_DRIVER
++ struct urb* pCurrentUrb;
++#else
++ struct list_head urb_list;
++#endif
++
++ uint8_t bBusyCompleting; /* TRUE on Tx when the current urb is completing */
++
++ unsigned int dwOffset; /* offset int the current request */
++ unsigned int dwRequestSize; /* request size */
++ unsigned int dwIsoPacket;
++ unsigned int dwWaitFrame;
++ uint8_t bRetries;
++
++#ifdef MUSB_DMA
++ MGC_DmaChannel* pDmaChannel;
++#endif
++
++#ifdef MUSB_CONFIG_PROC_FS
++ unsigned long dwTotalTxBytes;
++ unsigned long dwTotalRxBytes;
++ unsigned long dwTotalTxPackets;
++ unsigned long dwTotalRxPackets;
++ unsigned long dwErrorTxPackets;
++ unsigned long dwErrorRxPackets;
++ unsigned long dwMissedTxPackets;
++ unsigned long dwMissedRxPackets;
++#endif
++
++ uint16_t wMaxPacketSizeTx;
++ uint16_t wMaxPacketSizeRx;
++ uint16_t wPacketSize;
++ uint8_t bDisableDma; /* not used now! */
++ uint8_t bIsSharedFifo;
++
++ /* softstate, used from find_end() to determine a good match */
++ uint8_t bRemoteAddress;
++ uint8_t bRemoteEnd;
++ uint8_t bTrafficType;
++ uint8_t bIsClaimed; /* only for isoc and int traffic */
++ uint8_t bIsTx;
++ uint8_t bIsReady;
++ uint8_t bStalled; /* the ep has been halted */
++
++#if MUSB_DEBUG > 0
++ uint32_t dwPadBack;
++#endif
++} MGC_LinuxLocalEnd;
++
++/** A listener for disconnection */
++typedef void (*MGC_pfDisconnectListener)(void*);
++/** A handler for the default endpoint interrupt */
++typedef void (*MGC_pfDefaultEndHandler)(void*);
++
++#ifdef MUSB_USE_HCD_DRIVER
++typedef struct {
++ spinlock_t urb_queue_lock;
++ int urb_queue_count;
++ int urb_exec_count;
++ void *urb_queue_head;
++ void *urb_queue_tail;
++} mgc_hcd_urb_queue;
++#endif
++
++/**
++ * MGC_LinuxCd.
++ * Driver instance data.
++ * @field Lock spinlock
++ * @field Timer interval timer for various things
++ * @field pBus pointer to Linux USBD bus
++ * @field RootHub virtual root hub
++ * @field PortServices services provided to virtual root hub
++ * @field pRootDevice root device pointer, to track connection speed
++ * @field nIrq IRQ number (needed by free_irq)
++ * @field bIsMultipoint TRUE if multi-point core
++ * @field bIsHost TRUE if host
++ * @field bIsDevice TRUE if peripheral
++ * @field pRegs pointer to mapped registers
++ */
++typedef struct
++{
++#if MUSB_DEBUG > 0
++ uint32_t dwPadFront;
++#endif
++ spinlock_t Lock;
++ struct timer_list Timer;
++ struct usb_bus *pBus;
++ char aName[32];
++ MGC_VirtualHub RootHub;
++ MGC_PortServices PortServices;
++ struct usb_device* pRootDevice;
++
++#ifdef MUSB_DMA
++ MGC_DmaController* pDmaController;
++#endif
++
++ int nIrq;
++ int nIrqType;
++
++ int nBabbleCount;
++ void* pRegs;
++
++ MGC_LinuxLocalEnd aLocalEnd[MUSB_C_NUM_EPS];
++
++#ifdef MUSB_USE_HCD_DRIVER
++ mgc_hcd_urb_queue LocalQueue;
++ wait_queue_head_t waitqh;
++#endif
++
++ uint16_t wEndMask;
++ uint8_t bEndCount;
++ uint8_t bRootSpeed;
++ uint8_t bIsMultipoint;
++ uint8_t bIsHost;
++ uint8_t bIsDevice;
++ uint8_t bIsA;
++ uint8_t bIgnoreDisconnect; /* during bus resets I got fake disconnects */
++ uint8_t bVbusErrors; /* bus errors found */
++
++ int bFailCode; /* one of MUSB_ERR_* failure code */
++
++ uint8_t bBulkTxEnd;
++ uint8_t bBulkRxEnd;
++ uint8_t bBulkSplit;
++ uint8_t bBulkCombine;
++
++ uint8_t bEnd0Stage; /* end0 stage while in host or device mode */
++
++#ifdef MUSB_GADGET
++ uint8_t bDeviceState;
++ uint8_t bIsSelfPowered;
++ uint8_t bSetAddress;
++ uint8_t bAddress;
++ uint8_t bTestMode;
++ uint8_t bTestModeValue;
++
++ struct usb_gadget* pGadget; /* the gadget */
++ struct usb_gadget_driver* pGadgetDriver; /* it's driver */
++
++ /* Endpoint 0 buffer and its buffer code; can be customized for
++ * devices that are not usign the default USB headers. Default
++ * values are:
++ *
++ * . pfFillBuffer is MGC_HdrcReadUSBControlRequest()
++ * . pEnd0Buffer is an instance of MGC_End0Buffer
++ **/
++ int (*pfReadHeader)(void*, uint16_t); /* NULL==MGC_HdrcReadUSBControlRequest*/
++ void* pEnd0Buffer; /* this is the buffer, default implementation uses MGC_End0Buffer */
++
++ /* compatibility, need to be osoleted used from gstorage */
++ uint16_t wEnd0Offset;
++#endif
++
++#ifdef MUSB_OTG
++ MGC_OtgMachine OtgMachine;
++ MGC_OtgServices OtgServices;
++ uint8_t bDelayPortPowerOff;
++ uint8_t bOtgError;
++#endif
++
++#if MUSB_DEBUG > 0
++ uint32_t dwPadBack;
++#endif
++
++#ifdef MUSB_CONFIG_PROC_FS
++ struct proc_dir_entry* pProcEntry;
++
++ /* A couple of hooks to enable HSET */
++ MGC_pfDisconnectListener pfDisconnectListener;
++ void* pDisconnectListenerParam;
++ MGC_pfDefaultEndHandler pfDefaultEndHandler;
++ void* pDefaultEndHandlerParam;
++#endif
++
++} MGC_LinuxCd;
++
++#ifdef MUSB_USE_HCD_DRIVER
++void mgc_hcd_complete_urb(MGC_LinuxCd *pThis, struct urb* pUrb);
++mgc_hcd_urb_queue * mgc_hcd_get_urb_queue(MGC_LinuxCd* pThis);
++#endif
++
++
++/***************************** Glue it together *****************************/
++
++
++extern unsigned int MGC_nIndex;
++
++extern int MGC_DriverInit(void);
++extern void MGC_DriverCleanup(void);
++
++extern void MGC_HdrcStart(MGC_LinuxCd* pThis);
++extern void MGC_HdrcStop(MGC_LinuxCd* pThis);
++extern void MGC_HdrcServiceUsb(MGC_LinuxCd* pThis, uint8_t reg);
++extern void MGC_HdrcLoadFifo(const uint8_t* pBase, uint8_t bEnd,
++ uint16_t wCount, const uint8_t* pSource);
++extern void MGC_HdrcUnloadFifo(const uint8_t* pBase, uint8_t bEnd,
++ uint16_t wCount, uint8_t* pDest);
++
++extern MGC_LinuxCd* MGC_LinuxInitController(void* pDevice, uint16_t wType,
++ int nIrq, void* pRegs, u64 len, const char* pName);
++extern void MGC_LinuxSetTimer(MGC_LinuxCd* pThis, void (*pfFunc)(unsigned long),
++ unsigned long pParam, unsigned long millisecs);
++
++extern void MGC_LinuxCdFree(MGC_LinuxCd* pThis);
++
++extern struct urb* MGC_GetCurrentUrb(MGC_LinuxLocalEnd *pEnd);
++
++extern int queue_length(struct list_head *lh);
++
++/* Conditionally-compiled to update OTG state machine when necessary */
++extern void MGC_OtgUpdate(MGC_LinuxCd* pThis, uint8_t bVbusError,
++ uint8_t bConnect);
++
++extern void MGC_HdrcConfigureEps(MGC_LinuxCd* pThis);
++extern MGC_LinuxCd *hcd_to_musbstruct(void *ptr);
++extern struct usb_hcd* musbstruct_to_hcd(const MGC_LinuxCd *pThis);
++
++/*-------------------------- available buses ---------------------*/
++
++extern int direct_bus_init(void);
++extern void direct_bus_shutdown(void);
++
++/*-------------------------- ProcFS definitions ---------------------*/
++
++struct MGC_TestProcData;
++struct proc_dir_entry;
++
++#ifdef MUSB_CONFIG_PROC_FS
++extern char* decode_hst_ep_protocol(MGC_LinuxCd* pThis, unsigned bEnd);
++extern char* decode_dev_ep_protocol(MGC_LinuxCd* pThis, unsigned bEnd);
++#endif
++
++#ifdef MUSB_CONFIG_PROC_FS
++extern void MGC_HdrcSetDisconnectListener(MGC_LinuxCd* pCd,
++ MGC_pfDisconnectListener pfListener, void* pParam);
++extern void MGC_HdrcSetDefaultEndHandler(MGC_LinuxCd* pCd,
++ MGC_pfDefaultEndHandler pfHandler, void* pParam);
++extern struct proc_dir_entry* MGC_LinuxCreateProcFs(char *name,
++ MGC_LinuxCd* data);
++extern void MGC_LinuxDeleteProcFs(MGC_LinuxCd* data);
++#else
++#define PROC_FS_DISABLED(_x) { DBG(3, "#PROC_FS DISABLED"); _x }
++
++static inline void MGC_HdrcSetDisconnectListener(MGC_LinuxCd* pCd,
++ MGC_pfDisconnectListener pfListener, void* pParam) PROC_FS_DISABLED(;)
++static inline void MGC_HdrcSetDefaultEndHandler(MGC_LinuxCd* pCd,
++ MGC_pfDefaultEndHandler pfHandler, void* pParam) PROC_FS_DISABLED(;)
++static inline struct proc_dir_entry* MGC_LinuxCreateProcFs(char *name,
++ MGC_LinuxCd* data) PROC_FS_DISABLED(;)
++static inline void MGC_LinuxDeleteProcFs(MGC_LinuxCd* data)
++ PROC_FS_DISABLED(;)
++#endif
++
++/*-------------------------- TestProcFS definitions ---------------------*/
++
++#ifdef MUSB_PROC_TESTMUSB
++extern struct proc_dir_entry* MGC_LinuxCreateTestProcFs(char *name, MGC_LinuxCd* data);
++extern void MGC_LinuxDeleteTestProcFs(char *name, MGC_LinuxCd* data);
++#endif
++
++/*------------------------------ IOCTLS/PROCFS -----------------------*/
++
++extern void MGC_Zap(MGC_LinuxCd* pThis); /* zap the driver */
++extern void MGC_Session(MGC_LinuxCd* pThis); /* start a session */
++extern void MGC_SetDebugLevel(int level); /* set the debug level */
++extern int dump_header_stats(MGC_LinuxCd* pThis, char *buffer); /* compile options etc */
++#ifdef MUSB_HOST
++int dump_end_stats(MGC_LinuxCd* pThis, uint8_t bEnd, char* aBuffer);
++#endif
++
++
++
++/*-------------------------- DEBUG Definitions ---------------------*/
++
++
++#ifdef MUSB_PARANOID
++#define MGC_HDRC_DUMPREGS(_t, _s) MGC_HdrcDumpRegs((_t)->pRegs, MUSB_IS_HST(_t) && _t->bIsMultipoint, _s)
++#define MGC_ISCORRUPT(_x) mgc_is_corrupt((_x), __FUNCTION__,__LINE__)
++
++/**
++ * Test whether the struct is corrupted.
++ * @param pThis
++ */
++static inline uint8_t mgc_is_corrupt(MGC_LinuxCd* pThis, const char *function, int line) {
++#ifdef MUSB_HOST
++ uint8_t bEnd;
++ MGC_LinuxLocalEnd* pEnd;
++#endif
++
++ if(MGC_PAD_FRONT != pThis->dwPadFront) {
++ printk(KERN_INFO"musb %s:%d: pThis front pad corrupted (%x)\n",
++ function, line, pThis->dwPadFront);
++ return TRUE;
++ }
++
++ if(MGC_PAD_BACK != pThis->dwPadBack) {
++ printk(KERN_INFO"musb %s:%d: pThis back pad corrupted (%x)\n",
++ function, line, pThis->dwPadBack);
++ return TRUE;
++ }
++
++#ifdef MUSB_HOST
++ for(bEnd = 0; bEnd < pThis->bEndCount; bEnd++) {
++ pEnd = &(pThis->aLocalEnd[bEnd]);
++
++ if(MGC_PAD_FRONT != pEnd->dwPadFront) {
++ printk(KERN_INFO"musb %s:%d: end %d front pad corrupted (%x)\n",
++ function, line, bEnd, pEnd->dwPadFront);
++ return TRUE;
++ }
++
++ if(MGC_PAD_BACK != pEnd->dwPadBack) {
++ printk(KERN_INFO"musb %s:%d: end %d back pad corrupted (%x)\n",
++ function, line, bEnd, pEnd->dwPadBack);
++ return TRUE;
++ }
++ }
++#endif
++
++#ifdef MUSB_GADGET
++ /* do something about it */
++#endif
++
++ return FALSE;
++}
++
++#else
++#define MGG_IsCorrupt(_x) (_x)
++#define MGC_HDRC_DUMPREGS(_t, _s)
++#endif
++
++/* -------------------------- Host Definitions ------------------------ */
++
++#ifdef MUSB_HOST
++extern void MGC_InitLocalEndPoints(MGC_LinuxCd* pThis);
++#endif
++
++/* -------------------------- Gadget Definitions --------------------- */
++
++struct usb_ep;
++
++extern const uint8_t MGC_aTestPacket[MGC_TEST_PACKET_SIZE];
++
++#if defined(MUSB_GADGET) || defined(MUSB_V26)
++void* MGC_AllocBufferMemory(MGC_LinuxCd* pThis, size_t bytes, int gfp_flags, dma_addr_t* dma);
++void MGC_FreeBufferMemory(MGC_LinuxCd* pThis, size_t bytes, void *address, dma_addr_t dma);
++#endif
++
++#ifdef MUSB_GADGET
++extern void* MGC_MallocEp0Buffer(const MGC_LinuxCd* pThis);
++#endif
++
++/* Gadget functions */
++#ifdef MUSB_GADGET
++struct usb_gadget;
++
++extern MGC_LinuxCd* MGC_GetDriverByName(const char *name);
++extern int MGC_GadgetFindEnd(struct usb_ep* pGadgetEnd);
++extern void mgc_init_gadget_endpoints(MGC_LinuxCd *pThis, struct usb_gadget *gadget);
++extern void MGC_GadgetReset(MGC_LinuxCd* pThis);
++extern void MGC_GadgetResume(MGC_LinuxCd* pThis);
++extern void MGC_GadgetSuspend(MGC_LinuxCd* pThis);
++extern void MGC_GadgetDisconnect(MGC_LinuxCd* pThis);
++extern void MGC_HdrcServiceDeviceDefaultEnd(MGC_LinuxCd* pThis);
++extern void MGC_HdrcServiceDeviceTxAvail(MGC_LinuxCd* pThis, uint8_t bEnd);
++extern void MGC_HdrcServiceDeviceRxReady(MGC_LinuxCd* pThis, uint8_t bEnd);
++
++extern void dump_ep_status(MGC_LinuxCd* pThis);
++extern void dump_ep_queue(int index, int verbose);
++
++/*
++ * Gadget disabled
++ */
++#else
++#define GADGET_DISABLED(_x) { DBG(0, "#GADGET DISABLED"); _x }
++
++static inline MGC_LinuxCd* MGC_GetDriverByName(const char *name)
++ GADGET_DISABLED( return NULL; )
++static inline int MGC_GadgetFindEnd(struct usb_ep* pGadgetEnd)
++ GADGET_DISABLED( return -1; )
++static inline void MGC_InitGadgetEndPoints(MGC_LinuxCd *pThis)
++ GADGET_DISABLED(;)
++static inline void MGC_GadgetReset(MGC_LinuxCd* pThis)
++ GADGET_DISABLED(;)
++static inline void MGC_GadgetResume(MGC_LinuxCd* pThis)
++ GADGET_DISABLED(;)
++static inline void MGC_GadgetSuspend(MGC_LinuxCd* pThis)
++ GADGET_DISABLED(;)
++static inline void MGC_GadgetDisconnect(MGC_LinuxCd* pThis)
++ GADGET_DISABLED(;)
++static inline void MGC_HdrcServiceDeviceDefaultEnd(MGC_LinuxCd* pThis)
++ GADGET_DISABLED(;)
++static inline void MGC_HdrcServiceDeviceTxAvail(MGC_LinuxCd* pThis, uint8_t bEnd)
++ GADGET_DISABLED(;)
++static inline void MGC_HdrcServiceDeviceRxReady(MGC_LinuxCd* pThis, uint8_t bEnd)
++ GADGET_DISABLED(;)
++
++static inline void dump_ep_status(MGC_LinuxCd* pThis)
++ GADGET_DISABLED(;)
++static inline void dump_ep_queue(int index, int verbose)
++ GADGET_DISABLED(;)
++#endif
++
++
++#endif /* multiple inclusion protection */
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musbhdrc.h
+@@ -0,0 +1,315 @@
++/*
++ * linux/drivers/usb/nomadik/musbhdrc.h
++ *
++ * Copyright 2007, STMicroelectronics
++ *
++ * 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 __MUSB_HDRC_DEFS_H__
++#define __MUSB_HDRC_DEFS_H__
++
++/*
++ * HDRC-specific definitions
++ * $Revision: 1.8 $
++ */
++
++#define MGC_MAX_USB_ENDS 16
++
++#define MGC_END0_FIFOSIZE 64 /* this is non-configurable */
++
++/*
++ * MUSBMHDRC Register map
++ */
++
++/* Common USB registers */
++
++#define MGC_O_HDRC_FADDR 0x00 /* 8-bit */
++#define MGC_O_HDRC_POWER 0x01 /* 8-bit */
++
++#define MGC_O_HDRC_INTRTX 0x02 /* 16-bit */
++#define MGC_O_HDRC_INTRRX 0x04
++#define MGC_O_HDRC_INTRTXE 0x06
++#define MGC_O_HDRC_INTRRXE 0x08
++#define MGC_O_HDRC_INTRUSB 0x0A /* 8 bit */
++#define MGC_O_HDRC_INTRUSBE 0x0B /* 8 bit */
++#define MGC_O_HDRC_FRAME 0x0C
++#define MGC_O_HDRC_INDEX 0x0E /* 8 bit */
++#define MGC_O_HDRC_TESTMODE 0x0F /* 8 bit */
++
++/* Get offset for a given FIFO */
++#define MGC_FIFO_OFFSET(_bEnd) (0x20 + (_bEnd * 4))
++
++/* Additional Control Registers */
++
++#define MGC_O_HDRC_DEVCTL 0x60 /* 8 bit */
++
++/* These are actually indexed: */
++#define MGC_O_HDRC_TXFIFOSZ 0x62 /* 8-bit (see masks) */
++#define MGC_O_HDRC_RXFIFOSZ 0x63 /* 8-bit (see masks) */
++#define MGC_O_HDRC_TXFIFOADD 0x64 /* 16-bit offset shifted right 3 */
++#define MGC_O_HDRC_RXFIFOADD 0x66 /* 16-bit offset shifted right 3 */
++
++#define MGC_O_HDRC_TOPCONTROL 0x204 /* top control register 16-bit */
++
++/* offsets to registers in flat model */
++#define MGC_O_HDRC_TXMAXP 0x00
++#define MGC_O_HDRC_TXCSR 0x02
++#define MGC_O_HDRC_CSR0 MGC_O_HDRC_TXCSR /* re-used for EP0 */
++#define MGC_O_HDRC_RXMAXP 0x04
++#define MGC_O_HDRC_RXCSR 0x06
++#define MGC_O_HDRC_RXCOUNT 0x08
++#define MGC_O_HDRC_COUNT0 MGC_O_HDRC_RXCOUNT /* re-used for EP0 */
++#define MGC_O_HDRC_TXTYPE 0x0A
++#define MGC_O_HDRC_TYPE0 MGC_O_HDRC_TXTYPE /* re-used for EP0 */
++#define MGC_O_HDRC_TXINTERVAL 0x0B
++#define MGC_O_HDRC_NAKLIMIT0 MGC_O_HDRC_TXINTERVAL /* re-used for EP0 */
++#define MGC_O_HDRC_RXTYPE 0x0C
++#define MGC_O_HDRC_RXINTERVAL 0x0D
++#define MGC_O_HDRC_FIFOSIZE 0x0F
++#define MGC_O_HDRC_CONFIGDATA MGC_O_HDRC_FIFOSIZE /* re-used for EP0 */
++
++#define MGC_END_OFFSET(_bEnd, _bOffset) (0x100 + (0x10*_bEnd) + _bOffset)
++
++/* "bus control" registers */
++#define MGC_O_HDRC_TXFUNCADDR 0x00
++#define MGC_O_HDRC_TXHUBADDR 0x02
++#define MGC_O_HDRC_TXHUBPORT 0x03
++
++#define MGC_O_HDRC_RXFUNCADDR 0x04
++#define MGC_O_HDRC_RXHUBADDR 0x06
++#define MGC_O_HDRC_RXHUBPORT 0x07
++
++#define MGC_BUSCTL_OFFSET(_bEnd, _bOffset) (0x80 + (8*_bEnd) + _bOffset)
++
++/*
++ * MUSBHDRC Register bit masks
++ */
++
++/* POWER */
++
++#define MGC_M_POWER_ISOUPDATE 0x80
++#define MGC_M_POWER_SOFTCONN 0x40
++#define MGC_M_POWER_HSENAB 0x20
++#define MGC_M_POWER_HSMODE 0x10
++#define MGC_M_POWER_RESET 0x08
++#define MGC_M_POWER_RESUME 0x04
++#define MGC_M_POWER_SUSPENDM 0x02
++#define MGC_M_POWER_ENSUSPEND 0x01
++
++/* INTRUSB */
++#define MGC_M_INTR_SUSPEND 0x01
++#define MGC_M_INTR_RESUME 0x02
++#define MGC_M_INTR_RESET 0x04
++#define MGC_M_INTR_BABBLE 0x04
++#define MGC_M_INTR_SOF 0x08
++#define MGC_M_INTR_CONNECT 0x10
++#define MGC_M_INTR_DISCONNECT 0x20
++#define MGC_M_INTR_SESSREQ 0x40
++#define MGC_M_INTR_VBUSERROR 0x80 /* FOR SESSION END */
++#define MGC_M_INTR_EP0 0x01 /* FOR EP0 INTERRUPT */
++
++/* DEVCTL */
++#define MGC_M_DEVCTL_BDEVICE 0x80
++#define MGC_M_DEVCTL_FSDEV 0x40
++#define MGC_M_DEVCTL_LSDEV 0x20
++#define MGC_M_DEVCTL_VBUS 0x18
++#define MGC_S_DEVCTL_VBUS 3
++#define MGC_M_DEVCTL_HM 0x04
++#define MGC_M_DEVCTL_HR 0x02
++#define MGC_M_DEVCTL_SESSION 0x01
++
++/* TESTMODE */
++
++#define MGC_M_TEST_FORCE_HOST 0x80
++#define MGC_M_TEST_FIFO_ACCESS 0x40
++#define MGC_M_TEST_FORCE_FS 0x20
++#define MGC_M_TEST_FORCE_HS 0x10
++#define MGC_M_TEST_PACKET 0x08
++#define MGC_M_TEST_K 0x04
++#define MGC_M_TEST_J 0x02
++#define MGC_M_TEST_SE0_NAK 0x01
++
++/* allocate for double-packet buffering (effectively doubles assigned _SIZE) */
++#define MGC_M_FIFOSZ_DPB 0x10
++/* allocation size (8, 16, 32, ... 4096) */
++#define MGC_M_FIFOSZ_SIZE 0x0f
++
++/* CSR0 */
++#define MGC_M_CSR0_FLUSHFIFO 0x0100
++#define MGC_M_CSR0_TXPKTRDY 0x0002
++#define MGC_M_CSR0_RXPKTRDY 0x0001
++
++/* CSR0 in Peripheral mode */
++#define MGC_M_CSR0_P_SVDSETUPEND 0x0080
++#define MGC_M_CSR0_P_SVDRXPKTRDY 0x0040
++#define MGC_M_CSR0_P_SENDSTALL 0x0020
++#define MGC_M_CSR0_P_SETUPEND 0x0010
++#define MGC_M_CSR0_P_DATAEND 0x0008
++#define MGC_M_CSR0_P_SENTSTALL 0x0004
++
++/* CSR0 in Host mode */
++#define MGC_M_CSR0_H_NO_PING 0x0800
++#define MGC_M_CSR0_H_WR_DATATOGGLE 0x0400 /* set to allow setting: */
++#define MGC_M_CSR0_H_DATATOGGLE 0x0200 /* data toggle control */
++#define MGC_M_CSR0_H_NAKTIMEOUT 0x0080
++#define MGC_M_CSR0_H_STATUSPKT 0x0040
++#define MGC_M_CSR0_H_REQPKT 0x0020
++#define MGC_M_CSR0_H_ERROR 0x0010
++#define MGC_M_CSR0_H_SETUPPKT 0x0008
++#define MGC_M_CSR0_H_RXSTALL 0x0004
++
++/* TxType/RxType */
++#define MGC_M_TYPE_SPEED 0xc0
++#define MGC_S_TYPE_SPEED 6
++#define MGC_TYPE_SPEED_HIGH 1
++#define MGC_TYPE_SPEED_FULL 2
++#define MGC_TYPE_SPEED_LOW 3
++#define MGC_M_TYPE_PROTO 0x30
++#define MGC_S_TYPE_PROTO 4
++#define MGC_M_TYPE_REMOTE_END 0xf
++
++/* CONFIGDATA */
++
++#define MGC_M_CONFIGDATA_MPRXE 0x80 /* auto bulk pkt combining */
++#define MGC_M_CONFIGDATA_MPTXE 0x40 /* auto bulk pkt splitting */
++#define MGC_M_CONFIGDATA_BIGENDIAN 0x20
++#define MGC_M_CONFIGDATA_HBRXE 0x10 /* HB-ISO for RX */
++#define MGC_M_CONFIGDATA_HBTXE 0x08 /* HB-ISO for TX */
++#define MGC_M_CONFIGDATA_DYNFIFO 0x04 /* dynamic FIFO sizing */
++#define MGC_M_CONFIGDATA_SOFTCONE 0x02 /* SoftConnect */
++#define MGC_M_CONFIGDATA_UTMIDW 0x01 /* data width 0 => 8bits, 1 => 16bits */
++
++/* TXCSR in Peripheral and Host mode */
++
++#define MGC_M_TXCSR_AUTOSET 0x8000
++#define MGC_M_TXCSR_ISO 0x4000
++#define MGC_M_TXCSR_MODE 0x2000
++#define MGC_M_TXCSR_DMAENAB 0x1000
++#define MGC_M_TXCSR_FRCDATATOG 0x0800
++#define MGC_M_TXCSR_DMAMODE 0x0400
++#define MGC_M_TXCSR_CLRDATATOG 0x0040
++#define MGC_M_TXCSR_FLUSHFIFO 0x0008
++#define MGC_M_TXCSR_FIFONOTEMPTY 0x0002
++#define MGC_M_TXCSR_TXPKTRDY 0x0001
++
++/* TXCSR in Peripheral mode */
++
++#define MGC_M_TXCSR_P_INCOMPTX 0x0080
++#define MGC_M_TXCSR_P_SENTSTALL 0x0020
++#define MGC_M_TXCSR_P_SENDSTALL 0x0010
++#define MGC_M_TXCSR_P_UNDERRUN 0x0004
++
++/* TXCSR in Host mode */
++
++#define MGC_M_TXCSR_H_WR_DATATOGGLE 0x0200
++#define MGC_M_TXCSR_H_DATATOGGLE 0x0100
++#define MGC_M_TXCSR_H_NAKTIMEOUT 0x0080
++#define MGC_M_TXCSR_H_RXSTALL 0x0020
++#define MGC_M_TXCSR_H_ERROR 0x0004
++
++/* RXCSR in Peripheral and Host mode */
++
++#define MGC_M_RXCSR_AUTOCLEAR 0x8000
++#define MGC_M_RXCSR_DMAENAB 0x2000
++#define MGC_M_RXCSR_DISNYET 0x1000
++#define MGC_M_RXCSR_DMAMODE 0x0800
++#define MGC_M_RXCSR_INCOMPRX 0x0100
++#define MGC_M_RXCSR_CLRDATATOG 0x0080
++#define MGC_M_RXCSR_FLUSHFIFO 0x0010
++#define MGC_M_RXCSR_DATAERROR 0x0008
++#define MGC_M_RXCSR_FIFOFULL 0x0002
++#define MGC_M_RXCSR_RXPKTRDY 0x0001
++
++/* RXCSR in Peripheral mode */
++
++#define MGC_M_RXCSR_P_ISO 0x4000
++#define MGC_M_RXCSR_P_SENTSTALL 0x0040
++#define MGC_M_RXCSR_P_SENDSTALL 0x0020
++#define MGC_M_RXCSR_P_OVERRUN 0x0004
++
++/* RXCSR in Host mode */
++
++#define MGC_M_RXCSR_H_AUTOREQ 0x4000
++#define MGC_M_RXCSR_H_WR_DATATOGGLE 0x0400
++#define MGC_M_RXCSR_H_DATATOGGLE 0x0200
++#define MGC_M_RXCSR_H_RXSTALL 0x0040
++#define MGC_M_RXCSR_H_REQPKT 0x0020
++#define MGC_M_RXCSR_H_ERROR 0x0004
++
++/* HUBADDR */
++#define MGC_M_HUBADDR_MULTI_TT 0x80
++
++
++/* TXCSR in Peripheral and Host mode */
++
++#define MGC_M_TXCSR2_AUTOSET 0x80
++#define MGC_M_TXCSR2_ISO 0x40
++#define MGC_M_TXCSR2_MODE 0x20
++#define MGC_M_TXCSR2_DMAENAB 0x10
++#define MGC_M_TXCSR2_FRCDATATOG 0x08
++#define MGC_M_TXCSR2_DMAMODE 0x04
++
++#define MGC_M_TXCSR1_CLRDATATOG 0x40
++#define MGC_M_TXCSR1_FLUSHFIFO 0x08
++#define MGC_M_TXCSR1_FIFONOTEMPTY 0x02
++#define MGC_M_TXCSR1_TXPKTRDY 0x01
++
++/* TXCSR in Peripheral mode */
++
++#define MGC_M_TXCSR1_P_INCOMPTX 0x80
++#define MGC_M_TXCSR1_P_SENTSTALL 0x20
++#define MGC_M_TXCSR1_P_SENDSTALL 0x10
++#define MGC_M_TXCSR1_P_UNDERRUN 0x04
++
++/* TXCSR in Host mode */
++
++#define MGC_M_TXCSR1_H_NAKTIMEOUT 0x80
++#define MGC_M_TXCSR1_H_RXSTALL 0x20
++#define MGC_M_TXCSR1_H_ERROR 0x04
++
++/* RXCSR in Peripheral and Host mode */
++
++#define MGC_M_RXCSR2_AUTOCLEAR 0x80
++#define MGC_M_RXCSR2_DMAENAB 0x20
++#define MGC_M_RXCSR2_DISNYET 0x10
++#define MGC_M_RXCSR2_DMAMODE 0x08
++#define MGC_M_RXCSR2_INCOMPRX 0x01
++
++#define MGC_M_RXCSR1_CLRDATATOG 0x80
++#define MGC_M_RXCSR1_FLUSHFIFO 0x10
++#define MGC_M_RXCSR1_DATAERROR 0x08
++#define MGC_M_RXCSR1_FIFOFULL 0x02
++#define MGC_M_RXCSR1_RXPKTRDY 0x01
++
++/* RXCSR in Peripheral mode */
++
++#define MGC_M_RXCSR2_P_ISO 0x40
++#define MGC_M_RXCSR1_P_SENTSTALL 0x40
++#define MGC_M_RXCSR1_P_SENDSTALL 0x20
++#define MGC_M_RXCSR1_P_OVERRUN 0x04
++
++/* RXCSR in Host mode */
++
++#define MGC_M_RXCSR2_H_AUTOREQ 0x40
++#define MGC_M_RXCSR1_H_RXSTALL 0x40
++#define MGC_M_RXCSR1_H_REQPKT 0x20
++#define MGC_M_RXCSR1_H_ERROR 0x04
++
++/* Top control register */
++#define MGC_M_TOPCTRL_MODE_ULPI 0x09
++#define MGC_M_TOPCTRL_MODE_SRST 0x04
++
++#endif /* multiple inclusion protection */
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/musbhsfc.h
+@@ -0,0 +1,150 @@
++/*
++ * linux/drivers/usb/nomadik/musbhsfc.h
++ *
++ * Copyright 2007, STMicroelectronics
++ *
++ * 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 __MUSB_HSFC_DEFS_H__
++#define __MUSB_HSFC_DEFS_H__
++
++#define MGC_MAX_USB_ENDS 16
++
++#define MGC_END0_FIFOSIZE 64 /* this is non-configurable */
++
++#define MGC_M_FIFO_EP0 0x20
++
++/*
++ * MUSBHSFC Register map
++ */
++
++/* Common USB registers */
++
++#define MGC_O_HSFC_FADDR 0x00 /* 8-bit */
++#define MGC_O_HSFC_POWER 0x01 /* 8-bit */
++
++#define MGC_O_HSFC_INTRIN 0x02 /* 16-bit */
++#define MGC_O_HSFC_INTROUT 0x04
++#define MGC_O_HSFC_INTRINE 0x06
++#define MGC_O_HSFC_INTROUTE 0x08
++#define MGC_O_HSFC_INTRUSB 0x0A /* 8 bit */
++#define MGC_O_HSFC_INTRUSBE 0x0B /* 8 bit */
++#define MGC_O_HSFC_FRAME 0x0C
++#define MGC_O_HSFC_INDEX 0x0E /* 8 bit */
++#define MGC_O_HSFC_TESTMODE 0x0F /* 8 bit */
++
++/* These are actually indexed: */
++#define MGC_O_HSFC_TXFIFOSZ 0x1a /* 8-bit (see masks) */
++#define MGC_O_HSFC_RXFIFOSZ 0x1b /* 8-bit (see masks) */
++#define MGC_O_HSFC_TXFIFOADD 0x1c /* 16-bit offset shifted right 3 */
++#define MGC_O_HSFC_RXFIFOADD 0x1e /* 16-bit offset shifted right 3 */
++
++/* Endpoint registers */
++#define MGC_O_HSFC_TXMAXP 0x00
++#define MGC_O_HSFC_TXCSR 0x02
++#define MGC_O_HSFC_CSR0 MGC_O_HSFC_TXCSR /* re-used for EP0 */
++#define MGC_O_HSFC_RXMAXP 0x04
++#define MGC_O_HSFC_RXCSR 0x06
++#define MGC_O_HSFC_RXCOUNT 0x08
++#define MGC_O_HSFC_COUNT0 MGC_O_HSFC_RXCOUNT /* re-used for EP0 */
++
++/*
++ * MUSBHSFC Register bit masks
++ */
++
++/* POWER */
++
++#define MGC_M_POWER_ISOUPDATE 0x80
++#define MGC_M_POWER_SOFTCONN 0x40
++#define MGC_M_POWER_HSENAB 0x20
++#define MGC_M_POWER_HSMODE 0x10
++#define MGC_M_POWER_RESET 0x08
++#define MGC_M_POWER_RESUME 0x04
++#define MGC_M_POWER_SUSPENDM 0x02
++#define MGC_M_POWER_ENSUSPEND 0x01
++
++/* Interrupt register bit masks */
++#define MGC_M_INTR_SUSPEND 0x01
++#define MGC_M_INTR_RESUME 0x02
++#define MGC_M_INTR_RESET 0x04
++#define MGC_M_INTR_SOF 0x08
++
++/* TESTMODE */
++
++#define MGC_M_TEST_FORCEFS 0x20
++#define MGC_M_TEST_FORCEHS 0x10
++#define MGC_M_TEST_PACKET 0x08
++#define MGC_M_TEST_K 0x04
++#define MGC_M_TEST_J 0x02
++#define MGC_M_TEST_SE0_NAK 0x01
++
++/* allocate for double-packet buffering (effectively doubles assigned _SIZE) */
++#define MGC_M_FIFOSZ_DPB 0x10
++/* allocation size (8, 16, 32, ... 4096) */
++#define MGC_M_FIFOSZ_SIZE 0x0f
++
++/* CSR0 */
++
++#define MGC_M_CSR0_P_SVDSETUPEND 0x0080
++#define MGC_M_CSR0_P_SVDRXPKTRDY 0x0040
++#define MGC_M_CSR0_P_SENDSTALL 0x0020
++#define MGC_M_CSR0_P_SETUPEND 0x0010
++#define MGC_M_CSR0_P_DATAEND 0x0008
++#define MGC_M_CSR0_P_SENTSTALL 0x0004
++#define MGC_M_CSR0_TXPKTRDY 0x0002
++#define MGC_M_CSR0_RXPKTRDY 0x0001
++
++/* TXCSR */
++
++#define MGC_M_TXCSR_AUTOSET 0x8000
++#define MGC_M_TXCSR_ISO 0x4000
++#define MGC_M_TXCSR_MODE 0x2000
++#define MGC_M_TXCSR_DMAENAB 0x1000
++#define MGC_M_TXCSR_FRCDATATOG 0x0800
++#define MGC_M_TXCSR_P_INCOMPTX 0x0080
++#define MGC_M_TXCSR_CLRDATATOG 0x0040
++#define MGC_M_TXCSR_P_SENTSTALL 0x0020
++#define MGC_M_TXCSR_P_SENDSTALL 0x0010
++#define MGC_M_TXCSR_FLUSHFIFO 0x0008
++#define MGC_M_TXCSR_P_UNDERRUN 0x0004
++#define MGC_M_TXCSR_FIFONOTEMPTY 0x0002
++#define MGC_M_TXCSR_TXPKTRDY 0x0001
++
++/* RXCSR */
++
++#define MGC_M_RXCSR_AUTOCLEAR 0x8000
++#define MGC_M_RXCSR_P_ISO 0x4000
++#define MGC_M_RXCSR_DMAENAB 0x2000
++#define MGC_M_RXCSR_DISNYET 0x1000
++#define MGC_M_RXCSR_DMAMODE 0x0800
++#define MGC_M_RXCSR_INCOMPRX 0x0100
++#define MGC_M_RXCSR_CLRDATATOG 0x0080
++#define MGC_M_RXCSR_P_SENTSTALL 0x0040
++#define MGC_M_RXCSR_P_SENDSTALL 0x0020
++#define MGC_M_RXCSR_FLUSHFIFO 0x0010
++#define MGC_M_RXCSR_DATAERR 0x0008
++#define MGC_M_RXCSR_P_OVERRUN 0x0004
++#define MGC_M_RXCSR_FIFOFULL 0x0002
++#define MGC_M_RXCSR_RXPKTRDY 0x0001
++
++/*
++ * register access macros
++ */
++
++/* Get offset for a given FIFO */
++#define MGC_FIFO_OFFSET(_bEnd) (MGC_M_FIFO_EP0 + (_bEnd * 4))
++
++#endif /* multiple inclusion protection */
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c
@@ -0,0 +1,2845 @@
+/*
+ * linux/drivers/usb/gadget/nomadik_udc.c
@@ -202642,7 +203776,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
@@ -202683,8 +203817,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+
+
+/*
-+ * This driver handles the USB Device Controller (UDC) in Nomadik
-+ * series processors.
++ * This driver handles the USB Device Controller (UDC) in Nomadik
++ * series processors.
+ * There are fifteen endpoints, in addition to ep0.
+ *
+ * Such controller drivers work with a gadget driver. The gadget driver
@@ -202692,7 +203826,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ * by the host to interact with this device, and allocates endpoints to
+ * the different protocol interfaces. The controller driver virtualizes
+ * usb hardware so that the gadget drivers will be more portable.
-+ *
++ *
+ * This UDC hardware wants to implement a bit too much USB protocol, so
+ * it constrains the sorts of USB configuration change events that work.
+ */
@@ -202706,8 +203840,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ */
+int udc_complete_request(struct usb_request *req_ptr, int status)
+{
-+ DBG(4, "<==\n");
-+ req_ptr->status=status;
++ DBG(4, "<==\n");
++ req_ptr->status=status;
+ return complete_request(req_ptr);
+}
+
@@ -202735,10 +203869,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+int udc_gadget_wakeup(struct usb_gadget *gadget)
+{
+ uint8_t power;
-+
++
+ u8 *base_addr = ( u8 *)udc_base_addr;
+ DBG(4, "<==\n" );
-+
++
+ power = MUSB_READ8(base_addr, MUSB_O_HDRC_POWER);
+ power |= MUSB_M_POWER_RESUME;
+ MUSB_WRITE8(base_addr, MUSB_O_HDRC_POWER, power);
@@ -202746,7 +203880,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+}
+
+/**
-+ * Current Frame number will be returned
++ * Current Frame number will be returned
+ * @param gadget the gadget
+ * @return Frame Number
+ */
@@ -202761,7 +203895,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ * @param power state
+ * @return Frame Number
+ */
-+int udc_gadget_setselfpowered(struct usb_gadget *gadget,
++int udc_gadget_setselfpowered(struct usb_gadget *gadget,
+ int is_selfpowered)
+{
+ DBG(4, "<==\n" );
@@ -202774,34 +203908,34 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+/**
+ * Complete an usb request.
+ * @param req_ptr the request to complete.
-+ * @return the request status
++ * @return the request status
+ */
+int complete_request(struct usb_request *req_ptr)
+{
+ uint8_t bEnd;
-+
++
+ bEnd=((struct nomadik_req *)req_ptr)->end_number;
-+
++
+ if ( req_ptr->complete ) {
+ req_ptr->complete(&dev_context->end[bEnd].ep,req_ptr);
+ }
-+
++
+ DBG(3, "==> completed on bEnd=%d\n", bEnd);
+ return req_ptr->status;
-+}
++}
+
+void done(struct nomadik_ep *ep, struct nomadik_req *req, int status)
+{
+ unsigned stopped = ep->stopped;
-+
++
+ list_del_init(&req->req.list);
-+
++
+ if (req->req.status == -EINPROGRESS)
+ req->req.status = status;
+ else
+ status = req->req.status;
-+
-+
++
++
+ if (use_dma && ep->has_dma)
+ {
+ if (req->mapped)
@@ -202823,12 +203957,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ : DMA_FROM_DEVICE);
+ }
+ }
-+
++
+#ifndef USB_TRACE
+ /*if (status && status != -ESHUTDOWN)*/
+#endif
-+
-+
++
++
+ /* don't modify queue heads during completion callback */
+ ep->stopped = 1;
+ spin_unlock(&ep->udc->lock);
@@ -202848,15 +203982,15 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ struct nomadik_req *req;
+ struct usb_request* req1;
+ ep->stopped = 1;
-+
++
+ req1 = udc_current_request(ep);
-+
++
+ if (use_dma && ep->dma_channel){
+ dma_channel_release(ep);
+ }
-+
++
+ use_ep(ep);
-+
++
+ while (!list_empty(&ep->req_list))
+ {
+ req = (struct nomadik_req*)list_entry(ep->req_list.next, struct usb_request, list);
@@ -202868,7 +204002,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+{
+ u16 num = EP_NUMBER(ep);
+ u8 *base_addr = ( u8 *)udc_base_addr;
-+
++
+ MUSB_SELECTEND(base_addr, num);
+}
+
@@ -202883,9 +204017,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ u8 *base_addr = (u8 *)udc_base_addr;
+ uint16_t intr_txe = 0;
+ uint16_t intr_rxe = 0;
-+
++
+ maxp = le16_to_cpu (desc->wMaxPacketSize);
-+
++
+#ifdef USE_ISO
+ if ((desc->bmAttributes == USB_ENDPOINT_XFER_ISOC
+ && desc->bInterval != 1)) {
@@ -202900,7 +204034,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ return -EDOM;
+ }
+#endif
-+
++
+ /* xfer types must match, except that interrupt ~= bulk */
+ if (ep->bmAttributes != desc->bmAttributes
+ && ep->bmAttributes != USB_ENDPOINT_XFER_BULK
@@ -202908,29 +204042,29 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ ERR( "%s, %s type mismatch\n", __FUNCTION__, _ep->name);
+ return -EINVAL;
+ }
-+
++
+ udc = ep->udc;
+ if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
+ ERR( "%s, bogus device state\n", __FUNCTION__);
+ return -ESHUTDOWN;
+ }
-+
-+
++
++
+ ep->desc = desc;
+ ep->maxpacket = ep->ep.maxpacket = maxp;
+ ep->binactive = MUSB_GADGET_EP_ACTIVE;
+ ep->stopped=0;
-+
++
+ if (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC)
+ list_add(&ep->iso, &udc->iso);
-+
++
+ spin_lock_irqsave(&udc->lock, flags);
+ use_ep(ep);
+ if ( desc->bEndpointAddress & USB_ENDPOINT_DIR_MASK ) {
+ intr_txe = MUSB_READ16(base_addr, MUSB_O_HDRC_INTRTXE);
+ intr_txe |= (1 <<bEnd);
+ MUSB_WRITE16(base_addr, MUSB_O_HDRC_INTRTXE, intr_txe);
-+
++
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_TXMAXP, bEnd, desc->wMaxPacketSize);
+ } else {
+ intr_rxe = MUSB_READ16(base_addr, MUSB_O_HDRC_INTRRXE);
@@ -202938,13 +204072,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ MUSB_WRITE16(base_addr, MUSB_O_HDRC_INTRRXE, intr_rxe);
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_RXMAXP, bEnd, desc->wMaxPacketSize);
+ }
-+
++
+ /* ep size might have been changed, flush the FIFOs */
+ spin_lock_irqsave(&(dev_context->lock), flags);
+ intr_txe = MUSB_READ16(base_addr, MUSB_O_HDRC_INTRTXE);
+ MUSB_WRITE16(base_addr, MUSB_O_HDRC_INTRTXE, intr_txe & ~(1 << bEnd));
-+
-+
++
++
+ if(bEnd)
+ {
+ uint16_t csr = MUSB_READCSR16(base_addr, MUSB_O_HDRC_TXCSR, (uint8_t)bEnd);
@@ -202961,18 +204095,18 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ csr |= MUSB_M_RXCSR_FLUSHFIFO;
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_RXCSR, (uint8_t)bEnd, csr);
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_RXCSR, (uint8_t)bEnd, csr);
-+
++
+ }
+ else {
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0, MUSB_M_CSR0_FLUSHFIFO);
+ }
-+
++
+ /* re-enable interrupt */
+ MUSB_WRITE16(base_addr, MUSB_O_HDRC_INTRTXE, intr_txe);
+ spin_unlock_irqrestore(&(dev_context->lock), flags);
-+
++
+ if(bEnd){
-+
++
+ if ( ep->is_tx ){
+ /* clear_bulk_in_halt */
+ uint16_t csr= MUSB_READCSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd);
@@ -202981,7 +204115,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ /* reset tx data toggle */
+ csr =MUSB_READCSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd);
+ csr |=MUSB_M_TXCSR_CLRDATATOG;
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd, csr);
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd, csr);
+ }
+ else{
+ /* clear_bulk_out_halt */
@@ -203000,7 +204134,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ csr &= ~MUSB_M_CSR0_P_SENDSTALL;
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0,0, csr);
+ }
-+
++
+ spin_unlock_irqrestore(&udc->lock, flags);
+ DBG(3,"%s enabled\n", _ep->name);
+ return 0;
@@ -203013,36 +204147,36 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ u8 *base_addr = ( u8 *)udc_base_addr;
+ const struct usb_endpoint_descriptor *desc = (const struct usb_endpoint_descriptor *)ep->desc;
+ uint8_t bEnd = EP_NUMBER(ep);
-+
++
+ if (!ep || !ep->desc) {
+ DBG(3, "%s, %s not enabled\n", __FUNCTION__,
+ ep ? ep->ep.name : NULL);
+ return -EINVAL;
+ }
-+
-+
++
++
+ spin_lock_irqsave(&ep->udc->lock, flags);
-+
++
+ if ( desc->bEndpointAddress & USB_ENDPOINT_DIR_MASK ) {
+ uint16_t intr_txe = MUSB_READ16(base_addr, MUSB_O_HDRC_INTRTXE);
+ intr_txe&= ~(1 <<bEnd);
-+ MUSB_WRITE16(base_addr, MUSB_O_HDRC_INTRTXE, intr_txe);
++ MUSB_WRITE16(base_addr, MUSB_O_HDRC_INTRTXE, intr_txe);
+ } else {
+ uint16_t intr_rxe = MUSB_READ16(base_addr, MUSB_O_HDRC_INTRRXE);
+ intr_rxe&=~(1 <<bEnd);
+ MUSB_WRITE16(base_addr, MUSB_O_HDRC_INTRRXE, intr_rxe);
+ }
-+
++
+ spin_unlock_irqrestore(&ep->udc->lock, flags);
+ ep->desc = NULL;
+ nuke (ep, -ESHUTDOWN);
+ ep->ep.maxpacket = ep->maxpacket;
+ ep->binactive = MUSB_GADGET_EP_DISABLED;
-+
++
+ if (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC)
+ list_del_init(&ep->iso);
-+
-+
++
++
+ DBG(4,"%s disabled\n", _ep->name);
+ return 0;
+}
@@ -203053,8 +204187,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+nomadik_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
+{
+ struct nomadik_req *req;
-+
-+
++
++
+ req = (struct nomadik_req *)kzalloc(sizeof *req, gfp_flags);
+ DBG(4, "==> allocated request at %p for ep %d\n", req, \
+ EP_NUMBER(ep));
@@ -203062,7 +204196,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ req->req.dma = DMA_ADDR_INVALID;
+ INIT_LIST_HEAD(&req->req.list);
+ req->end_number = EP_NUMBER(ep);
-+
++
+ }
+ return &req->req;
+}
@@ -203071,7 +204205,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+nomadik_free_request(struct usb_ep *ep, struct usb_request *_req)
+{
+ struct nomadik_req *req = container_of(_req, struct nomadik_req, req);
-+
++
+ if (_req)
+ kfree (req);
+}
@@ -203088,7 +204222,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+{
+ void *retval;
+ struct nomadik_ep *ep;
-+
++
+ ep = container_of(_ep, struct nomadik_ep, ep);
+ if (use_dma && ep->has_dma) {
+ static int warned;
@@ -203101,7 +204235,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ return dma_alloc_coherent(ep->udc->gadget.dev.parent,
+ bytes, dma, gfp_flags);
+ }
-+
++
+ retval = kmalloc(bytes, gfp_flags);
+ if (retval)
+ *dma = virt_to_phys(retval);
@@ -203116,7 +204250,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ )
+{
+ struct nomadik_ep *ep;
-+
++
+ ep = container_of(_ep, struct nomadik_ep, ep);
+ if (use_dma && _ep && ep->has_dma)
+ dma_free_coherent(ep->udc->gadget.dev.parent, bytes, buf, dma);
@@ -203129,38 +204263,38 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+/*-------------------------------------------------------------------------*/
+
+int queue_length(struct list_head *lh) {
-+ int count=0;
++ int count=0;
+ struct list_head *p=lh;
-+
++
+ while ( p && (p->next!=lh) ) {
+ count++;
+ p=p->next;
+ }
-+
++
+ return count;
+}
+
+
+
+
-+char* dump_usb_request(struct usb_request *req) {
++char* dump_usb_request(struct usb_request *req) {
+ static char buff[256];
+ if ( req ) {
+ sprintf(buff, "req=%p, req->request.length=0x%0x, req->request.zero=0x%x, "
-+ "req->request.actual=0x%x, req->request.status=%d",
++ "req->request.actual=0x%x, req->request.status=%d",
+ req, req->length, req->zero, req->actual, req->status );
+ } else {
-+ sprintf(buff, "null request");
++ sprintf(buff, "null request");
+ }
-+
++
+ return buff;
+}
+
+/**
+ * Set clear the halt bit of an endpoint. A halted enpoint won't tx/rx any
-+ * data but will queue requests.
++ * data but will queue requests.
+ * @param ep the endpoint
-+ * @param value != 0 => halt, 0 == active
++ * @param value != 0 => halt, 0 == active
+ */
+int nomadik_ep_set_halt(struct usb_ep *_ep, int value)
+{
@@ -203170,9 +204304,9 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ const uint8_t bEnd=EP_NUMBER(ep);
+ u8 *base_addr = ( u8 *)udc_base_addr;
+ struct nomadik_req *req_ptr;
-+
++
+ DBG(4, "<== end=%d, value=%d\n", bEnd, value);
-+
++
+ spin_lock_irqsave(&dev_context->lock, flags);
+ MUSB_SELECTEND(base_addr, bEnd );
+ if ( 0==bEnd )
@@ -203186,45 +204320,45 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ {
+ csr &= ~MUSB_M_CSR0_P_SENDSTALL;
+ }
-+
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0, csr);
++
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0, csr);
+ spin_unlock_irqrestore(&dev_context->lock, flags );
+ return 0;
+ }
-+
++
+ /* prevent further request to be executed, this will prevent next
-+ * request to be scheduled oin the completiotion of the current
++ * request to be scheduled oin the completiotion of the current
+ * one
-+ */
++ */
+ ep->binactive=(value)
-+ ? MUSB_GADGET_EP_HALTED
++ ? MUSB_GADGET_EP_HALTED
+ : MUSB_GADGET_EP_ACTIVE;
-+
++
+ if ( value )
+ DBG(4, "<== end halted=%d\n", bEnd);
+ else
+ DBG(4, "<== end activated=%d,d\n", bEnd);
-+
-+ /* cannot abort the current request if the FIFO is full */
-+ req_ptr=(struct nomadik_req*)udc_current_request(ep);
++
++ /* cannot abort the current request if the FIFO is full */
++ req_ptr=(struct nomadik_req*)udc_current_request(ep);
+ if ( value && ep->is_tx )
-+ {
++ {
+ csr = MUSB_READCSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd);
+ if ( csr & MUSB_M_TXCSR_FIFONOTEMPTY ) {
-+ spin_unlock_irqrestore(&dev_context->lock, flags);
-+ return -EAGAIN;
++ spin_unlock_irqrestore(&dev_context->lock, flags);
++ return -EAGAIN;
+ }
-+
++
+ }
+ /* set/clear the stall bit */
+ if ( ep->is_tx )
-+ {
++ {
+ if ( value )
+ {
+ csr = MUSB_READCSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd);
+ csr |= MUSB_M_TXCSR_P_SENDSTALL;
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd, csr)
-+ }
++ }
+ else
+ {
+ csr= MUSB_READCSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd);
@@ -203235,16 +204369,16 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ csr |=MUSB_M_TXCSR_CLRDATATOG;
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd, csr);
+ }
-+
++
+ }
-+ else
++ else
+ {
+ if( value )
+ {
+ csr = MUSB_READCSR16(base_addr, MUSB_O_HDRC_RXCSR, bEnd);
+ csr |= MUSB_M_RXCSR_P_SENDSTALL;
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_RXCSR, bEnd, csr);
-+
++
+ }
+ else
+ {
@@ -203256,20 +204390,20 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ csr |=MUSB_M_RXCSR_CLRDATATOG;
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_RXCSR, bEnd, csr);
+ }
-+
++
+ }
-+
++
+ spin_unlock_irqrestore(&dev_context->lock, flags);
-+
-+ /* the ep has been re-activated, re-start the request if one
++
++ /* the ep has been re-activated, re-start the request if one
+ * is pending*/
+ if ( !value && req_ptr )
+ {
+ DBG(3, "restarting the request\n");
-+ udc_restart_request(dev_context, (struct usb_request*)req_ptr);
++ udc_restart_request(dev_context, (struct usb_request*)req_ptr);
+ }
-+
-+ DBG(4, "==>\n" );
++
++ DBG(4, "==>\n" );
+ return 0;
+}
+
@@ -203291,14 +204425,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ ERR("Error in allocating private /*struct*/ure dev_context\n");
+ return -ENOMEM;
+ }
-+
++
+ dev_context->end0_buffer_ptr = kzalloc(sizeof(struct t_udc_end0_buffer), GFP_KERNEL);
+ if ( !dev_context->end0_buffer_ptr ){
+ kfree(dev_context);
+ ERR("Error in allocating end0 buffer\n");
+ return -ENOMEM;
+ }
-+
++
+ spin_lock_init(&dev_context->lock);
+ return 0;
+}
@@ -203317,12 +204451,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ u16 epn_rxtx = 0;
+ u8 ep_index = dev_context->end_count;
+ u8 *base_addr = (u8 *)udc_base_addr;
-+
++
+ dev_context->end_count++;
+ dev_context->end_mask |= 1 << ep_index;
+ ep = &dev_context->end[ep_index];
+ MUSB_SELECTEND(base_addr, ep_index);
-+
++
+ /* chip setup ... bit values are same for IN, OUT */
+ switch (maxp) {
+ case 8: epn_rxtx = 0 ; break;
@@ -203338,16 +204472,16 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ DBG(3, "dbe enabled for %d\n",ep_index);
+ epn_rxtx |= 0x10;
+ }
-+
++
+#if 0
+ init_timer(&ep->timer);
+ ep->timer.function = pio_out_timer;
+ ep->timer.data = (unsigned long) ep;
+#endif
-+
++
+ DBG(3, "%s addr %02x rxtx %04x maxp %d%s buf %d\n",
+ name, dir, epn_rxtx, maxp, dbuf ? "x2" : "", buf);
-+
++
+ if ( ep_index) {
+ if (dir & USB_DIR_IN)
+ {
@@ -203362,13 +204496,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ ep->is_tx = 0;
+ }
+ }
-+
++
+ /* next endpoint's buffer starts after this one's */
+ buf += maxp;
+ if (dbuf)
+ buf += maxp;
+ BUG_ON(buf > 2048);
-+
++
+ /* set up driver data structures */
+ BUG_ON(strlen(name) >= sizeof ep->name);
+ strlcpy(ep->name, name, sizeof ep->name);
@@ -203377,56 +204511,56 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ ep->end_number = ep_index;
+ ep->bmAttributes = type;
+ ep->double_buf = dbuf;
-+ ep->udc = dev_context;
++ ep->udc = dev_context;
+ ep->has_dma = 0;
-+
++
+ ep->ep.name = ep->name;
+ ep->ep.ops = &nomadik_ep_ops;
+ ep->ep.maxpacket = ep->maxpacket = maxp;
+ list_add_tail (&ep->ep.ep_list, &dev_context->gadget.ep_list);
+ ep->binactive = MUSB_GADGET_EP_DISABLED;
-+
++
+ return buf;
+}
+
+void nomadik_udc_release(struct device *dev)
+{
-+ complete(dev_context->done);
++ complete(dev_context->done);
+ kfree (dev_context);
+ dev_context = NULL;
+}
+
+
-+int __init udc_setup(void)
++int __init udc_setup(void)
+{
-+ unsigned buf;
-+
++ unsigned buf;
++
+ spin_lock_init( &udc_scheduler_queue.lock );
+ INIT_LIST_HEAD( &udc_scheduler_queue.req_list );
-+
++
+ INIT_LIST_HEAD(&dev_context->iso);
-+
++
+ dev_context->gadget.ops = &nomadik_gadget_ops;
+ dev_context->gadget.ep0 = &dev_context->end[0].ep;
+ INIT_LIST_HEAD(&dev_context->gadget.ep_list);
+ dev_context->gadget.speed = USB_SPEED_UNKNOWN;
+ dev_context->gadget.name = driver_name;
-+
++
+ device_initialize(&dev_context->gadget.dev);
+ strcpy (dev_context->gadget.dev.bus_id, "gadget");
+ dev_context->gadget.dev.release = nomadik_udc_release;
+ dev_context->gadget.dev.parent = NULL;
-+
++
+ dev_context->end_count = 0;
+ dev_context->end_mask = 0;
-+ /*
-+ ep0 is special; put it right after the SETUP buffer
++ /*
++ ep0 is special; put it right after the SETUP buffer
+ */
+ buf = nomadik_ep_setup("ep0",0, USB_ENDPOINT_XFER_CONTROL,
+ 0 /* after SETUP */, 64 /* maxpacket */, 0);
+ list_del_init(&dev_context->end[0].ep.ep_list);
-+
-+
++
++
+#define NOMADIK_BULK_EP(name,dir) \
+ buf = nomadik_ep_setup(name "-bulk", dir, \
+ USB_ENDPOINT_XFER_BULK, buf,512, 0);
@@ -203436,7 +204570,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+#define NOMADIK_ISO_EP(name,dir, maxp) \
+ buf = nomadik_ep_setup(name "-iso", dir, \
+ USB_ENDPOINT_XFER_ISOC, buf, maxp, 0);
-+
++
+ switch (fifo_mode) {
+ case 0:
+ NOMADIK_BULK_EP("ep1in", USB_DIR_IN );
@@ -203447,43 +204581,43 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ NOMADIK_BULK_EP("ep1in", USB_DIR_IN );
+ NOMADIK_BULK_EP("ep2out", USB_DIR_OUT );
+ NOMADIK_INT_EP("ep9in", USB_DIR_IN , 16);
-+
++
+ NOMADIK_BULK_EP("ep3in", USB_DIR_IN );
+ NOMADIK_BULK_EP("ep4out", USB_DIR_OUT );
+ NOMADIK_INT_EP("ep10in", USB_DIR_IN , 16);
-+
++
+ NOMADIK_BULK_EP("ep5in", USB_DIR_IN );
+ NOMADIK_BULK_EP("ep5out", USB_DIR_OUT );
+ NOMADIK_INT_EP("ep11in", USB_DIR_IN , 16);
-+
++
+ NOMADIK_BULK_EP("ep6in", USB_DIR_IN );
+ NOMADIK_BULK_EP("ep6out", USB_DIR_OUT );
+ NOMADIK_INT_EP("ep12in", USB_DIR_IN , 16);
-+
++
+ NOMADIK_BULK_EP("ep7in", USB_DIR_IN );
+ NOMADIK_BULK_EP("ep7out", USB_DIR_OUT );
+ NOMADIK_INT_EP("ep13in", USB_DIR_IN , 16);
+ NOMADIK_INT_EP("ep13out", USB_DIR_OUT , 16);
-+
++
+ NOMADIK_BULK_EP("ep8in", USB_DIR_IN );
+ NOMADIK_BULK_EP("ep8out", USB_DIR_OUT );
+ NOMADIK_INT_EP("ep14in", USB_DIR_IN , 16);
+ NOMADIK_INT_EP("ep14out", USB_DIR_OUT , 16);
-+
++
+ NOMADIK_BULK_EP("ep15in", USB_DIR_IN );
+ NOMADIK_BULK_EP("ep15out", USB_DIR_OUT );
-+
++
+ break;
-+
++
+#ifdef USE_ISO
-+ case 2: /* mixed iso/bulk */
++ case 2: /* mixed iso/bulk */
+ NOMADIK_ISO_EP("ep1in", USB_DIR_IN , 256);
+ NOMADIK_ISO_EP("ep2out", USB_DIR_OUT , 256);
+ NOMADIK_ISO_EP("ep3in", USB_DIR_IN , 128);
+ NOMADIK_ISO_EP("ep4out", USB_DIR_OUT , 128);
-+
++
+ NOMADIK_INT_EP("ep5in", USB_DIR_IN , 16);
-+
++
+ NOMADIK_BULK_EP("ep6in", USB_DIR_IN );
+ NOMADIK_BULK_EP("ep7out", USB_DIR_OUT );
+ NOMADIK_INT_EP("ep8in", USB_DIR_IN , 16);
@@ -203492,19 +204626,19 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ NOMADIK_BULK_EP("ep1in", USB_DIR_IN );
+ NOMADIK_BULK_EP("ep2out", USB_DIR_OUT );
+ NOMADIK_INT_EP("ep3in", USB_DIR_IN , 16);
-+
++
+ NOMADIK_BULK_EP("ep4in", USB_DIR_IN );
+ NOMADIK_BULK_EP("ep5out", USB_DIR_OUT );
+ NOMADIK_INT_EP("ep6in", USB_DIR_IN , 16);
-+
++
+ NOMADIK_ISO_EP("ep7in", USB_DIR_IN , 256);
+ NOMADIK_ISO_EP("ep8out", USB_DIR_OUT , 256);
+ NOMADIK_INT_EP("ep9in", USB_DIR_IN , 16);
+ break;
+#endif
-+
++
+ /* add more modes as needed */
-+
++
+ default:
+ ERR("unsupported fifo_mode #%d\n", fifo_mode);
+ return -ENODEV;
@@ -203516,25 +204650,25 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+{
+ u8 *base_addr = ( u8 *)udc_base_addr;
+ DBG(4,"\n");
-+
++
+ MUSB_WRITE8(base_addr, MUSB_O_HDRC_INTRUSBE, 0x0);
+ MUSB_WRITE16(base_addr, MUSB_O_HDRC_INTRTXE, 0x0);
+ MUSB_WRITE16(base_addr, MUSB_O_HDRC_INTRRXE, 0x0);
+}
+
+
-+void udc_reset()
++void udc_reset()
+{
+ volatile u8 *base_addr = ( u8 *)udc_base_addr;
+ uint8_t power;
+ uint16_t top;
-+
-+
++
++
+ MUSB_WRITE16(base_addr, MUSB_O_HDRC_TOPCONTROL, MUSB_MODE_ULPI);
+ top = MUSB_READ16(base_addr, MUSB_O_HDRC_TOPCONTROL);
-+
++
+ MUSB_WRITE16(base_addr, MUSB_O_HDRC_TOPCONTROL,( top | MUSB_MODE_SRST));
-+
++
+ power = MUSB_READ8(base_addr, MUSB_O_HDRC_POWER);
+ /* Enabling high speed */
+ power = power |(MUSB_M_POWER_HSENAB);
@@ -203547,8 +204681,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+/**
+ * Identifies a transmit request.
+ * @param control_request_ptr the control request
-+ * @return true for USB_REQ_GET_CONFIGURATION, USB_REQ_GET_INTERFACE,
-+ * USB_REQ_GET_DESCRIPTOR, USB_REQ_GET_STATUS, USB_REQ_SYNC_FRAME
++ * @return true for USB_REQ_GET_CONFIGURATION, USB_REQ_GET_INTERFACE,
++ * USB_REQ_GET_DESCRIPTOR, USB_REQ_GET_STATUS, USB_REQ_SYNC_FRAME
+ */
+uint8_t is_tx_request(const struct usb_ctrlrequest *control_request_ptr) {
+ return ( control_request_ptr->bRequestType & USB_DIR_IN );
@@ -203557,10 +204691,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+/**
+ * Identifies a zero data request.
+ * @param control_request_ptr the control request
-+ * @return true for USB_REQ_SET_INTERFACE, USB_REQ_SET_CONFIGURATION,
++ * @return true for USB_REQ_SET_INTERFACE, USB_REQ_SET_CONFIGURATION,
+ * USB_REQ_SET_ADDRESS, USB_REQ_CLEAR_FEATURE, USB_REQ_SET_FEATURE
-+ *
-+ */
++ *
++ */
+uint8_t is_zerodata_request(const struct usb_ctrlrequest *control_request_ptr) {
+ return ( 0==control_request_ptr->wLength ) && !is_tx_request(control_request_ptr);
+}
@@ -203568,8 +204702,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+/**
+ * Identifies a receive request.
+ * @param control_request_ptr the control request
-+ * @return true for USB_REQ_SET_DESCRIPTOR
-+ */
++ * @return true for USB_REQ_SET_DESCRIPTOR
++ */
+uint8_t is_rx_request(const struct usb_ctrlrequest *control_request_ptr) {
+ return control_request_ptr->bRequest==USB_REQ_SET_DESCRIPTOR;
+}
@@ -203582,7 +204716,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ * @param wcount how many bytes to load
+ * @param pSource data buffer
+ */
-+void udc_load_fifo(const uint8_t* base_ptr, uint8_t bEnd,
++void udc_load_fifo(const uint8_t* base_ptr, uint8_t bEnd,
+ uint16_t wcount, const uint8_t* pSource)
+{
+ uint16_t windex, windex32;
@@ -203590,7 +204724,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ uint8_t fifo_offset = MUSB_FIFO_OFFSET(bEnd);
+ DBG(3, "base_ptr=%p, bEnd=%d, wcount=0x%04x, pSrc=%p\n",
+ base_ptr, bEnd, wcount, pSource);
-+
++
+#ifdef MUSB_PARANOID
+ if ( IS_INVALID_ADDRESS(pSource) )
+ {
@@ -203598,18 +204732,18 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ return;
+ }
+#endif
-+
-+
-+ for(windex =0, windex32 = 0; windex32 < wcount32; windex32++, windex += 4)
++
++
++ for(windex =0, windex32 = 0; windex32 < wcount32; windex32++, windex += 4)
+ {
+ MUSB_WRITE32(base_ptr, fifo_offset, *((uint32_t*)&(pSource[windex])));
+ }
-+
-+ for(; windex < wcount; windex++)
++
++ for(; windex < wcount; windex++)
+ {
+ MUSB_WRITE8(base_ptr, fifo_offset, pSource[windex]);
+ }
-+
++
+}
+
+/**
@@ -203620,29 +204754,29 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ * @param wcount how many bytes to unload
+ * @param dest_ptr data buffer
+ */
-+void udc_unload_fifo(const uint8_t* base_ptr, uint8_t bEnd,
++void udc_unload_fifo(const uint8_t* base_ptr, uint8_t bEnd,
+ uint16_t wcount, uint8_t* dest_ptr)
+{
+ uint16_t windex=0;
+ uint16_t windex32=0;
+ uint16_t wcount32 = wcount >> 2;
+ uint8_t fifo_offset = MUSB_FIFO_OFFSET(bEnd);
-+
-+
++
++
+#ifdef MUSB_PARANOID
+ if ( IS_INVALID_ADDRESS(dest_ptr) ) {
+ ERR("unloading fifo from a null buffer\n");
+ return;
+ }
+#endif
-+
++
+ DBG(3, "base_ptr=%p, bEnd=%d, wcount=0x%04x, dest_ptr=%p\n", base_ptr, bEnd,
+ wcount, dest_ptr);
-+
++
+ for(windex = 0, windex32 = 0; windex32 < wcount32; windex32++, windex += 4) {
+ *((uint32_t*)&(dest_ptr[windex])) = MUSB_READ32(base_ptr, fifo_offset);
+ }
-+
++
+ while(windex < wcount) {
+ dest_ptr[windex++]=MUSB_READ8(base_ptr, fifo_offset);
+ }
@@ -203653,7 +204787,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+
+/**
+ * Forward a request to the driver.
-+ *
++ *
+ * FROM: usb_gadget.h
+ * Accordingly, the driver's setup() callback must always implement all
+ * get_descriptor requests, returning at least a device descriptor and
@@ -203668,28 +204802,28 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ *
+ * @param control_request_ptr the usb control request to forward to the driver
+ */
-+int forward_to_driver(const struct usb_ctrlrequest *control_request_ptr)
++int forward_to_driver(const struct usb_ctrlrequest *control_request_ptr)
+{
+ int handled=-EOPNOTSUPP;
-+ DBG(3, "<== dev_context->driver=%p, control_request_ptr=%p\n",
-+ dev_context->driver, control_request_ptr);
-+
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->end[0]);
-+#endif
-+
++ DBG(3, "<== dev_context->driver=%p, control_request_ptr=%p\n",
++ dev_context->driver, control_request_ptr);
++
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->end[0]);
++#endif
++
+ if ( dev_context->driver ){
+ DBG(1, "calling mrt_setup\n");
-+ handled=dev_context->driver->setup(&dev_context->gadget,
-+ control_request_ptr);
++ handled=dev_context->driver->setup(&dev_context->gadget,
++ control_request_ptr);
+ }
+ else
+ {
+ ERR("Error case\n");
+ }
-+
-+ DBG(4, "==> handled=%d\n", handled);
++
++ DBG(4, "==> handled=%d\n", handled);
+ return handled;
+}
+
@@ -203700,11 +204834,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ * @param control_request_ptr the usb control request to service.
+ * @see is_rx_request
+ */
-+int service_rx_request(struct usb_ctrlrequest *control_request_ptr)
++int service_rx_request(struct usb_ctrlrequest *control_request_ptr)
+{
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->end[0]);
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->end[0]);
+#endif
+ return forward_to_driver(control_request_ptr);
+}
@@ -203719,38 +204853,38 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ uint8_t bResult[2], bEnd=0;
+ uint16_t csrval;
+ const uint8_t* base_addr = (uint8_t*)udc_base_addr;
-+ const uint8_t bRecip=control_request_ptr->bRequestType
++ const uint8_t bRecip=control_request_ptr->bRequestType
+ & USB_RECIP_MASK;
-+
++
+ /* ack the request */
+ DBG(3, "acking request %s\n", decode_csr0(MUSB_M_CSR0_P_SVDRXPKTRDY) );
+ spin_lock(&dev_context->lock);
+ MUSB_SELECTEND(base_addr, 0);
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
+ MUSB_M_CSR0_P_SVDRXPKTRDY);
+ spin_unlock(&dev_context->lock);
-+
-+ switch(bRecip) {
-+ case USB_RECIP_DEVICE:
-+ DBG(1, "USB_RECIP_DEVICE()\n");
++
++ switch(bRecip) {
++ case USB_RECIP_DEVICE:
++ DBG(1, "USB_RECIP_DEVICE()\n");
+ bResult[0] = dev_context->is_selfpowered ? 1 : 0;
+ bResult[0] |= 2;
-+ bResult[1] = 0;
++ bResult[1] = 0;
+ udc_load_fifo(base_addr, 0, 2, (uint8_t*)&bResult);
+ csrval = MUSB_M_CSR0_TXPKTRDY | MUSB_M_CSR0_P_DATAEND;
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0, csrval);
+ break;
-+
++
+ case USB_RECIP_ENDPOINT:
+ {
+ uint16_t wTest;
-+
++
+ DBG(1, "USB_RECIP_ENDPOINT()\n");
+ bEnd = (uint8_t)control_request_ptr->wIndex;
+ spin_lock(&dev_context->lock);
+ MUSB_SELECTEND(base_addr, bEnd);
+ /* in EP */
-+ if(bEnd & 0x80)
++ if(bEnd & 0x80)
+ {
+ wTest = MUSB_READCSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd);
+ bResult[0] = (wTest & MUSB_M_TXCSR_P_SENDSTALL) ? 1 : 0;
@@ -203760,7 +204894,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ wTest = MUSB_READCSR16(base_addr, MUSB_O_HDRC_RXCSR, bEnd);
+ bResult[0] = (wTest & MUSB_M_RXCSR_P_SENDSTALL) ? 1 : 0;
+ }
-+
++
+ MUSB_SELECTEND(base_addr, 0);
+ bResult[1] = 0;
+ udc_load_fifo(base_addr, 0, 2, (uint8_t*)&bResult);
@@ -203768,46 +204902,46 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0, csrval);
+ spin_unlock(&dev_context->lock);
+ } break;
-+
++
+ default:
+ handled=0;
+ break;
+ }
-+
-+ /* send it out! (this will trigger the ep0 completition IRQ)
-+ * serviced in interrupt_complete()
++
++ /* send it out! (this will trigger the ep0 completition IRQ)
++ * serviced in interrupt_complete()
+ */
+ if ( handled ) {
+ dev_context->end0_stage=MUSB_END0_STAGE_STATUSOUT;
-+
++
+ spin_lock(&dev_context->lock);
+ MUSB_SELECTEND(base_addr, bEnd);
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
+ MUSB_M_CSR0_TXPKTRDY | MUSB_M_CSR0_P_DATAEND);
+ spin_unlock(&dev_context->lock);
+ }
+}
+
+/**
-+ * Service a transmit a request. End0 buffer contains the current
-+ * request (a standard control request). Assumes the fifo to be at least
-+ * bytes long. Requests handled here are: USB_REQ_GET_CONFIGURATION,
-+ * USB_REQ_GET_INTERFACE, USB_REQ_GET_DESCRIPTOR, USB_REQ_GET_STATUS,
++ * Service a transmit a request. End0 buffer contains the current
++ * request (a standard control request). Assumes the fifo to be at least
++ * bytes long. Requests handled here are: USB_REQ_GET_CONFIGURATION,
++ * USB_REQ_GET_INTERFACE, USB_REQ_GET_DESCRIPTOR, USB_REQ_GET_STATUS,
+ * USB_REQ_SYNC_FRAME.
+ *
+ * @param control_request_ptr the request to service
-+ * @return 0 if the request was NOT HANDLED, < 0 when error (ENOSUPP not
-+ * supprorted), > 0 when the request is processed
++ * @return 0 if the request was NOT HANDLED, < 0 when error (ENOSUPP not
++ * supprorted), > 0 when the request is processed
+ * @see is_tx_request
+ */
-+int service_tx_request(const struct usb_ctrlrequest *control_request_ptr)
++int service_tx_request(const struct usb_ctrlrequest *control_request_ptr)
+{
+ int handled=0; /* not handled */
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->end[0]);
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->end[0]);
+#endif
-+
++
+ if ( USB_TYPE_STANDARD!=(control_request_ptr->bRequestType&USB_TYPE_MASK )) {
+ return forward_to_driver(control_request_ptr);
+ }
@@ -203815,95 +204949,95 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ case USB_REQ_GET_CONFIGURATION:
+ DBG(1, "USB_REQ_GET_CONFIGURATION()\n");
+ break;
-+
++
+ case USB_REQ_GET_INTERFACE:
+ DBG(1, "USB_REQ_GET_INTERFACE()\n");
+ break;
-+
++
+ case USB_REQ_GET_DESCRIPTOR:
+ DBG(1, "USB_REQ_GET_DESCRIPTOR()\n");
+ break;
-+
++
+ case USB_REQ_GET_STATUS: {
+ DBG(1, "USB_REQ_GET_STATUS()\n");
+ service_tx_status_request(control_request_ptr);
+ handled = 1;
+ } break;
-+
++
+/* case USB_REQ_SYNC_FRAME:
+ break; */
-+
-+ default:
++
++ default:
+ break;
+ }
-+
++
+ if ( !handled ) {
+ handled=forward_to_driver(control_request_ptr);
+ }
-+
++
+ /* now tx! */
+ return handled;
+}
+
+/**
-+ * Service a zero data request.
++ * Service a zero data request.
+ * Called for USB_REQ_SET_INTERFACE, USB_REQ_SET_CONFIGURATION,
+ * USB_REQ_SET_ADDRESS, USB_REQ_CLEAR_FEATURE, USB_REQ_SET_FEATURE.
-+ *
++ *
+ * @param dev_context the controller instance
+ * @param control_request_ptr the control request to service.
+ * @warning USB_REQ_SET_ADDRESS should be executed QUICKLY
+ * @see is_zerodata_request
+ */
-+int service_zero_data_request(struct nomadik_udc* dev_context,
-+ struct usb_ctrlrequest *control_request_ptr)
++int service_zero_data_request(struct nomadik_udc* dev_context,
++ struct usb_ctrlrequest *control_request_ptr)
+{
-+
++
+ int handled=1; /* handled, DO NOT not pass down */
+ const uint8_t* base_addr = (uint8_t*)udc_base_addr;
-+ const uint8_t bRecip=control_request_ptr->bRequestType
++ const uint8_t bRecip=control_request_ptr->bRequestType
+ & USB_RECIP_MASK;
-+
++
+ DBG(4, "<==\n");
-+
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->end[0]);
++
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->end[0]);
+#endif
-+
++
+ /* non standard requests are piped to the gadget */
+ if ( USB_TYPE_STANDARD!=(control_request_ptr->bRequestType&USB_TYPE_MASK )) {
+ return forward_to_driver(control_request_ptr);
+ }
-+
-+ /* zero data phase */
++
++ /* zero data phase */
+ switch (control_request_ptr->bRequest) {
-+
++
+ case USB_REQ_SET_INTERFACE:
+ DBG(1, "USB_REQ_SET_INTERFACE()\n");
+ handled=0; /* pass it to the gadget */
-+ break;
-+
++ break;
++
+ case USB_REQ_SET_CONFIGURATION:
-+
++
+ /* remember state & handle on the end status stage interrupt */
+ DBG(1, "USB_REQ_SET_CONFIGURATION()\n");
+ dev_context->set_config_flag = 1;
+ handled=0; /* pass it to the gadget */
+ break;
-+
++
+ case USB_REQ_SET_ADDRESS:
+ /* remember state & handle on the end status stage interrupt */
+ DBG(1, "USB_REQ_SET_ADDRESS(0x%x)\n",(uint8_t)
+ (control_request_ptr->wValue & 0x7f));
-+
++
+ dev_context->set_address_flag = 1;
+ dev_context->address = (uint8_t)(control_request_ptr->wValue & 0x7f);
+ break;
-+
++
+ case USB_REQ_CLEAR_FEATURE:
+ DBG(1, "USB_REQ_CLEAR_FEATURE()\n");
-+
++
+ switch(bRecip) {
+ case USB_RECIP_DEVICE:
+ DBG(3, "USB_RECIP_DEVICE()\n");
@@ -203915,19 +205049,19 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ {
+ const uint8_t bEnd = (uint8_t)control_request_ptr->wIndex & 0x7f ;
+ struct nomadik_ep* end_ptr=&dev_context->end[ bEnd ];
-+
-+ DBG(-1, "CLEAR_FEATURE: USB_RECIP_ENDPOINT() %d\n", bEnd );
++
++ DBG(-1, "CLEAR_FEATURE: USB_RECIP_ENDPOINT() %d\n", bEnd );
+ nomadik_ep_set_halt( &end_ptr->ep, 0);
+ /* select ep0 again */
-+ MUSB_SELECTEND(base_addr, 0);
++ MUSB_SELECTEND(base_addr, 0);
+ } break;
+ default:
-+ break;
++ break;
+ }
+ break; /* END: CLEAR_FEATURE */
-+
++
+ case USB_REQ_SET_FEATURE:
-+ DBG(3, "USB_REQ_SET_FEATURE()\n");
++ DBG(3, "USB_REQ_SET_FEATURE()\n");
+ switch(bRecip) {
+ case USB_RECIP_DEVICE:
+ DBG(3, "USB_RECIP_DEVICE()\n");
@@ -203941,7 +205075,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ handled=-EINVAL;
+ } else {
+ uint16_t wTest;
-+
++
+ DBG(3, "ENTERING TESTMODE\n");
+ dev_context->test_mode_flag = 1;
+ wTest = (uint8_t)control_request_ptr->wIndex >> 8;
@@ -203980,39 +205114,39 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ break;
+ case 5:
+ break;
-+
++
+ }
+ break;
-+
++
+ case USB_RECIP_INTERFACE:
+ DBG(3, "USB_RECIP_INTERFACE()\n");
+ break;
-+
++
+ case USB_RECIP_ENDPOINT:
+ {
+ const uint8_t bEnd = (uint8_t)control_request_ptr->wIndex & 0x7f ;
+ struct nomadik_ep* end_ptr=&dev_context->end[ bEnd ];
-+
-+ DBG(3, "SET_FEATURE: USB_RECIP_ENDPOINT() %d\n", bEnd );
++
++ DBG(3, "SET_FEATURE: USB_RECIP_ENDPOINT() %d\n", bEnd );
+ nomadik_ep_set_halt(&end_ptr->ep, 1);
-+
++
+ /* select ep0 again */
+ MUSB_SELECTEND(base_addr, 0);
+ } break;
-+
++
+ }
+ break; /* END: SET_FEATURE */
-+
++
+ default:
+ handled=0;
+ break;
+ }
-+
++
+ /* standard request not handed by this code go to the gadget */
+ if ( !handled ) {
+ handled=forward_to_driver(control_request_ptr);
+ }
-+
++
+ DBG(4, "==>\n");
+ return handled;
+}
@@ -204024,85 +205158,85 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ * IRQ on ep0 has occourred.
+ * @warning Executed @ interrupt time; complete CANNOT sleep.
+ */
-+void mgc_complete_ep0_request(void)
++void mgc_complete_ep0_request(void)
+{
+ struct usb_request *reqptr;
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
-+ ASSERT_SPINLOCK_LOCKED(&dev_context->end[0]);
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
++ ASSERT_SPINLOCK_LOCKED(&dev_context->end[0]);
+#endif
-+
++
+ spin_lock( &dev_context->end[0].lock );
+ reqptr=udc_current_request( &dev_context->end[0] );
-+
++
+ /* this is interrupt code, it cannot sleep! */
+ if ( reqptr ) {
-+ list_del( &reqptr->list );
-+ INIT_LIST_HEAD( &dev_context->end[0].req_list );
-+
++ list_del( &reqptr->list );
++ INIT_LIST_HEAD( &dev_context->end[0].req_list );
++
+ spin_unlock( &dev_context->end[0].lock );
+ if ( reqptr->complete ) {
-+ reqptr->complete(&dev_context->end[0].ep,
++ reqptr->complete(&dev_context->end[0].ep,
+ reqptr);
+ }
+ } else {
+ spin_unlock( &dev_context->end[0].lock );
+ }
-+
++
+ dev_context->end0_stage = MUSB_END0_STAGE_SETUP;
+}
+
+/**
-+ * handle the completition interrupt on endpoint 0.
++ * handle the completition interrupt on endpoint 0.
+ */
-+void handle_ep0_completition_irq(void)
++void handle_ep0_completition_irq(void)
+{
+ const uint8_t* base_addr = (uint8_t*)udc_base_addr;
+ struct nomadik_ep* end_ptr = &(dev_context->end[0]);
+ struct usb_request *reqptr=udc_current_request(end_ptr);
-+
++
+ DBG(3, "<==\n");
-+ DBG(4, "post event interrupts ep0stage=%s\n",
++ DBG(4, "post event interrupts ep0stage=%s\n",
+ decode_ep0stage(dev_context->end0_stage));
-+ switch (dev_context->end0_stage) {
-+
++ switch (dev_context->end0_stage) {
++
+ /* end of sequence #2 (RX state) or #3 (no data) */
-+ case MUSB_END0_STAGE_STATUSIN:
++ case MUSB_END0_STAGE_STATUSIN:
+ DBG(3, "MUSB_END0_STAGE_STATUSIN request\n");
-+
-+ /* update address (if needed) only @ the end of the
++
++ /* update address (if needed) only @ the end of the
+ * status phase per standard. The guide is WRONG!
+ */
-+ if(dev_context->set_address_flag) {
++ if(dev_context->set_address_flag) {
+ dev_context->set_address_flag = 0;
-+ MUSB_WRITE8(base_addr, MUSB_O_HDRC_FADDR, dev_context->address);
++ MUSB_WRITE8(base_addr, MUSB_O_HDRC_FADDR, dev_context->address);
+ }
-+
++
+ /* enter test mode if needed */
+ if(dev_context->test_mode_flag) {
+ DBG(3, "entering TESTMODE\n");
+ if (MUSB_M_TEST_PACKET == dev_context->test_mode_value) {
-+ udc_load_fifo(base_addr, 0, sizeof(musb_test_pkt),
++ udc_load_fifo(base_addr, 0, sizeof(musb_test_pkt),
+ musb_test_pkt);
+ }
-+
++
+ spin_lock(&dev_context->lock);
+ MUSB_SELECTEND(base_addr, 0); /* select ep0 */
-+ MUSB_WRITE8(base_addr, MUSB_O_HDRC_TESTMODE,
++ MUSB_WRITE8(base_addr, MUSB_O_HDRC_TESTMODE,
+ dev_context->test_mode_value);
+ spin_unlock(&dev_context->lock);
-+ }
-+
++ }
++
+ DBG(2, "completing posted request (if any)\n");
+ mgc_complete_ep0_request();
+ break;
-+
++
+ /* sequence #1: write to host (TX state) */
+ case MUSB_END0_STAGE_STATUSOUT:
-+ DBG(2, "completing posted request (if any)\n");
++ DBG(2, "completing posted request (if any)\n");
+ mgc_complete_ep0_request();
+ break;
-+
++
+ case MUSB_END0_STAGE_TX:
+ DBG(2, "TX changeing ep status\n");
+ if(reqptr->actual < reqptr->length)
@@ -204119,14 +205253,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ dev_context->end0_stage=MUSB_END0_STAGE_STATUSIN;
+ }
+ break;
-+
++
+ default: /* IT WAS STALLED */
-+ DBG(2, "recovering from stall? ep0stage=%s\n",
++ DBG(2, "recovering from stall? ep0stage=%s\n",
+ decode_ep0stage(dev_context->end0_stage));
-+ dev_context->end0_stage = MUSB_END0_STAGE_SETUP;
++ dev_context->end0_stage = MUSB_END0_STAGE_SETUP;
+ break;
+ }
-+
++
+ DBG(4, "==>\n");
+}
+
@@ -204135,39 +205269,39 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+
+/**
+ * Handle ep0 in receive state. Called to start a receie and on each interrupt
-+ * when receiving data on ep0.
++ * when receiving data on ep0.
+ */
+int ep0_rxstate(void) {
+ const uint8_t* base_addr = (uint8_t*)udc_base_addr;
+ struct nomadik_ep* end_ptr = &(dev_context->end[0]);
+ struct usb_request *reqptr=udc_current_request(end_ptr);
-+
++
+ /* nothign for now */
+ DBG(4, "<==\n");
-+
++
+ if ( reqptr->actual==0 ) {
+ /* ack the request first */
+ DBG(4, "acking request %s\n", decode_csr0(MUSB_M_CSR0_P_SVDRXPKTRDY) );
+ spin_lock(&dev_context->lock);
+ MUSB_SELECTEND(base_addr, 0);
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
+ MUSB_M_CSR0_P_SVDRXPKTRDY);
+ spin_unlock(&dev_context->lock);
+ }
-+
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
-+ ASSERT_SPINLOCK_LOCKED(&end_ptr->lock);
++
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
++ ASSERT_SPINLOCK_LOCKED(&end_ptr->lock);
+#endif
-+
-+ DBG(4, "==>\n");
-+
++
++ DBG(4, "==>\n");
++
+ return 0;
+}
+
+/**
+ * Handle ep0 in transmit state. Called to start a receie and on each interrupt
-+ * when transmitting data on ep0.
++ * when transmitting data on ep0.
+ */
+int ep0_txstate(void) {
+ unsigned long flags;
@@ -204175,150 +205309,150 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ struct nomadik_ep* end_ptr = &(dev_context->end[0]);
+ struct usb_request *reqptr=udc_current_request(end_ptr);
+ uint16_t csrval = MUSB_M_CSR0_TXPKTRDY;
-+ uint8_t* fifo_source;
-+ uint8_t fifo_count;
-+
-+ DBG(4, "<==\n");
-+
++ uint8_t* fifo_source;
++ uint8_t fifo_count;
++
++ DBG(4, "<==\n");
++
+#ifdef MUSB_PARANOID
+ if ( !dev_context || !reqptr ) {
-+ ERR("dev_context=%p, reqptr=%p", dev_context, reqptr);
++ ERR("dev_context=%p, reqptr=%p", dev_context, reqptr);
+ return -EINVAL;
+ }
+#endif
-+
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
-+ ASSERT_SPINLOCK_LOCKED(&end_ptr->lock);
++
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
++ ASSERT_SPINLOCK_LOCKED(&end_ptr->lock);
+#endif
-+
++
+ spin_lock_irqsave(&dev_context->lock, flags);
+ MUSB_SELECTEND(base_addr, 0);
-+
++
+ if ( reqptr->actual==0 ) {
+ /* ack the request first */
+ DBG(4, "acking request %s\n", decode_csr0(MUSB_M_CSR0_P_SVDRXPKTRDY) );
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
+ MUSB_M_CSR0_P_SVDRXPKTRDY);
+ }
-+
-+ /* load the data */
++
++ /* load the data */
+ fifo_source = (uint8_t*)reqptr->buf+reqptr->actual;
+ fifo_count =min((int)MUSB_END0_FIFOSIZE, (int)(reqptr->length-reqptr->actual));
+ udc_load_fifo(base_addr, 0, fifo_count, fifo_source);
+ reqptr->actual+=fifo_count; /* done */
-+
++
+ /* update the flags */
+ if ( fifo_count < MUSB_MAX_END0_PACKET ) {
+ csrval |= MUSB_M_CSR0_P_DATAEND;
+ reqptr->status=0; /* done */
-+ }
-+
-+ /* send it out! (this will trigger the ep0 completition IRQ)
++ }
++
++ /* send it out! (this will trigger the ep0 completition IRQ)
+ * serviced in interrupt_complete() */
-+ DBG(4, "wrote fifo_count=%d bytes, csrval=%s\n", fifo_count,
++ DBG(4, "wrote fifo_count=%d bytes, csrval=%s\n", fifo_count,
+ decode_csr0(csrval) );
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0, csrval);
+ spin_unlock_irqrestore(&dev_context->lock, flags);
-+
-+ DBG(4, "==>\n");
++
++ DBG(4, "==>\n");
+ return 0;
+}
+
+/**
-+ * Read a FULL header packet from the hardware. The buffer starts with
++ * Read a FULL header packet from the hardware. The buffer starts with
+ * struct usb_ctrlrequest (fields are converted to device specific
+ * byte order).
+ *
+ * @param wcount>0
-+ * @return 0 when the packet is complete, a negative number when an error
++ * @return 0 when the packet is complete, a negative number when an error
+ * occurred, a positive number when still there are bytes to read.
+ */
+int udc_read_control_request(struct nomadik_udc* dev_context, uint16_t wcount) {
+ const uint8_t* base_ptr = ( u8 *)udc_base_addr;
+ struct t_udc_end0_buffer* end0_buffer_ptr=(struct t_udc_end0_buffer*)dev_context->end0_buffer_ptr;
+ struct usb_ctrlrequest* control_req_ptr=(struct usb_ctrlrequest*)end0_buffer_ptr;
-+
++
+ DBG(3, "<==\n");
-+ DBG(4,"wcount=%u, end0_buffer_ptr->count=%u\n", wcount,
++ DBG(4,"wcount=%u, end0_buffer_ptr->count=%u\n", wcount,
+ end0_buffer_ptr->count);
-+
++
+ /* what did u call me for?? */
+ if (!wcount) {
+ return -EINVAL;
+ }
-+
++
+ /* buffer overrun, it should never happen */
+ if ( wcount>(MUSB_MAX_END0_PACKET-sizeof(struct usb_ctrlrequest)) ) {
-+ ERR("buffer overrun! wcount=%d\n", wcount );
-+ return -EINVAL;
-+ }
-+
++ ERR("buffer overrun! wcount=%d\n", wcount );
++ return -EINVAL;
++ }
++
+ /* need to have at least enough bytes for the control request
-+ * comment this out to enable fifo size < 8 bytes
++ * comment this out to enable fifo size < 8 bytes
+ */
+ if ( wcount<sizeof(struct usb_ctrlrequest) ) {
+ ERR("wcount=%d<sizeof(struct usb_ctrlrequest)=%d\n",
-+ wcount, (int)sizeof(struct usb_ctrlrequest));
-+ return -EINVAL;
++ wcount, (int)sizeof(struct usb_ctrlrequest));
++ return -EINVAL;
+ }
-+
-+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
++
++#ifdef MUSB_PARANOID
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
+#endif
-+
++
+ spin_lock(&dev_context->lock);
+ MUSB_SELECTEND(base_ptr, 0); /* select ep0 */
-+
++
+ /* count=0 means that I'm reading the USB standard header:
-+ * that's the first thing I need to read from the FIFO (8 bytes).
++ * that's the first thing I need to read from the FIFO (8 bytes).
+ */
+ if ( 0==end0_buffer_ptr->count ) {
+ DBG(4, "reading header\n" );
-+ udc_unload_fifo(base_ptr, 0, sizeof(struct usb_ctrlrequest),
++ udc_unload_fifo(base_ptr, 0, sizeof(struct usb_ctrlrequest),
+ (uint8_t*)control_req_ptr);
+ wcount-=sizeof(struct usb_ctrlrequest);
+ DBG(6, "header read\n");
-+
-+ /* data from the USB bus must be converted from LSB to
-+ * host-specific byte ordering; the control request header
-+ * tell me the payload length etc.
++
++ /* data from the USB bus must be converted from LSB to
++ * host-specific byte ordering; the control request header
++ * tell me the payload length etc.
+ */
+ le16_to_cpus( control_req_ptr->wLength );
+ le16_to_cpus( control_req_ptr->wIndex );
+ le16_to_cpus( control_req_ptr->wValue );
-+
-+ DBG(4, "bRequest=%02x, kind=%s, wValue=%04x, wIndex=%04x, wLength=%04x\n",
-+ control_req_ptr->bRequest, decode_request(control_req_ptr),
-+ control_req_ptr->wValue, control_req_ptr->wIndex,
++
++ DBG(4, "bRequest=%02x, kind=%s, wValue=%04x, wIndex=%04x, wLength=%04x\n",
++ control_req_ptr->bRequest, decode_request(control_req_ptr),
++ control_req_ptr->wValue, control_req_ptr->wIndex,
+ control_req_ptr->wLength);
-+
-+ if( control_req_ptr->bRequestType & USB_DIR_IN ) {
++
++ if( control_req_ptr->bRequestType & USB_DIR_IN ) {
+ /* write to host: up to wLength bytes */
+ end0_buffer_ptr->count=0;
+ dev_context->end0_stage = MUSB_END0_STAGE_TX;
-+ } else if( control_req_ptr->bRequestType & USB_DIR_OUT ) {
++ } else if( control_req_ptr->bRequestType & USB_DIR_OUT ) {
+ /* out to function: wLength to go for the payload */
+ end0_buffer_ptr->count=control_req_ptr->wLength;
+ dev_context->end0_stage = MUSB_END0_STAGE_RX;
-+ }
++ }
+ }
-+
-+ if ( wcount>0 ) {
++
++ if ( wcount>0 ) {
+ /* now Im reading the rest of it, this will never be executed I guess */
+ uint16_t offset=sizeof(struct usb_ctrlrequest)+ /* read past the header */
-+ (control_req_ptr->wLength)-(end0_buffer_ptr->count);
++ (control_req_ptr->wLength)-(end0_buffer_ptr->count);
+ udc_unload_fifo(base_ptr, 0, wcount, &end0_buffer_ptr->data[offset]);
+ end0_buffer_ptr->count-=wcount;
+ }
-+
-+ DBG(5, "end0_buffer_ptr->count=%d, ep0stage=%s, %s\n",
-+ end0_buffer_ptr->count, decode_ep0stage(dev_context->end0_stage),
-+ (end0_buffer_ptr->count)?"still to go":"header completed");
++
++ DBG(5, "end0_buffer_ptr->count=%d, ep0stage=%s, %s\n",
++ end0_buffer_ptr->count, decode_ep0stage(dev_context->end0_stage),
++ (end0_buffer_ptr->count)?"still to go":"header completed");
+ DBG(3, "==>\n");
-+
++
+ spin_unlock(&dev_context->lock);
-+
++
+ /* 0 header completed, <0 error, >0 bytes to go*/
+ return (end0_buffer_ptr->count);
+}
@@ -204326,13 +205460,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+/* ---------------------------------------------------------------------- */
+
+/**
-+ * Handle ep0 interrupt of a device, lock & release dev_context. This is the main
++ * Handle ep0 interrupt of a device, lock & release dev_context. This is the main
+ * entry point of the gadget Ep0 handling code.
+ * @param dev_context the controller
+ */
+uint8_t udc_ep0_irq(void)
+{
-+
++
+ uint16_t csrval; /* */
+ uint16_t wcount; /* bytes available */
+ const uint8_t* base_addr = (uint8_t*)udc_base_addr;
@@ -204341,24 +205475,24 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ MUSB_SELECTEND(base_addr, 0); /* select ep0 */
+ csrval = MUSB_READCSR16(base_addr, MUSB_O_HDRC_CSR0, 0);
+ wcount = MUSB_READCSR8(base_addr, MUSB_O_HDRC_COUNT0, 0);
-+
++
+ /* I sent a stall.. need to acknowledge it now.. */
-+ if(csrval & MUSB_M_CSR0_P_SENTSTALL) {
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
-+ csrval & ~MUSB_M_CSR0_P_SENTSTALL );
-+ dev_context->end0_stage=MUSB_END0_STAGE_SETUP;
++ if(csrval & MUSB_M_CSR0_P_SENTSTALL) {
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
++ csrval & ~MUSB_M_CSR0_P_SENTSTALL );
++ dev_context->end0_stage=MUSB_END0_STAGE_SETUP;
+ }
-+
++
+ /* setup ended prematurely, abort it */
-+ if (csrval & MUSB_M_CSR0_P_SETUPEND) {
++ if (csrval & MUSB_M_CSR0_P_SETUPEND) {
+ /* clearing it */
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
+ MUSB_M_CSR0_P_SVDSETUPEND );
-+ dev_context->end0_stage=MUSB_END0_STAGE_SETUP;
++ dev_context->end0_stage=MUSB_END0_STAGE_SETUP;
+ }
-+
-+ spin_unlock(&dev_context->lock);
-+
++
++ spin_unlock(&dev_context->lock);
++
+ /* handle completition interrupt */
+ if ( !csrval && !wcount ) {
+ handle_ep0_completition_irq();
@@ -204371,65 +205505,65 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ if(!dev_context->set_config_flag)
+ mgc_complete_ep0_request();
+ break;
-+ }
-+ switch( dev_context->end0_stage ) {
-+ /* im alrewady writing to host, TX state,
++ }
++ switch( dev_context->end0_stage ) {
++ /* im alrewady writing to host, TX state,
+ sequence #1 initiated during the setup */
+ case MUSB_END0_STAGE_TX:
+ if ( csrval & MUSB_M_CSR0_TXPKTRDY ) {
+ ep0_txstate();
+ } break;
-+
-+ /* im alrewady receiving from host, RX state,
++
++ /* im alrewady receiving from host, RX state,
+ sequence #2 initiated during the setup */
-+ case MUSB_END0_STAGE_RX:
++ case MUSB_END0_STAGE_RX:
+ if ( csrval & MUSB_M_CSR0_RXPKTRDY ) {
-+ ep0_rxstate();
++ ep0_rxstate();
+ }
+ break;
-+
++
+ /* received from host, RX State, header */
-+ case MUSB_END0_STAGE_SETUP:
-+ if ( csrval & MUSB_M_CSR0_RXPKTRDY ) {
++ case MUSB_END0_STAGE_SETUP:
++ if ( csrval & MUSB_M_CSR0_RXPKTRDY ) {
+ int count=0, handled=0;
-+
++
+ count=udc_read_control_request(dev_context, wcount);
-+ if ( count<0 ) {
++ if ( count<0 ) {
+ /* ack the request */
+ ERR("error reading the control request: this is bad (tm)\n");
+ } else if ( 0==count ) { /* I got the full packet, GREAT! */
+ struct usb_ctrlrequest *control_request_ptr=(struct usb_ctrlrequest*)
+ dev_context->end0_buffer_ptr;
-+
++
+ /* sequence #3 */
+ if ( is_zerodata_request(control_request_ptr) ) {
+ uint16_t csrval= MUSB_M_CSR0_P_SVDRXPKTRDY
+ | MUSB_M_CSR0_P_DATAEND;
-+
-+ handled=service_zero_data_request(dev_context,
++
++ handled=service_zero_data_request(dev_context,
+ control_request_ptr);
-+ if ( handled<0 && handled!=-EOPNOTSUPP ) {
-+ csrval |= MUSB_M_CSR0_P_SENDSTALL;
++ if ( handled<0 && handled!=-EOPNOTSUPP ) {
++ csrval |= MUSB_M_CSR0_P_SENDSTALL;
+ }
-+
++
+ dev_context->end0_stage = MUSB_END0_STAGE_STATUSIN;
-+
++
+ /* ack the request */
-+ DBG(3, "handled=%d, csrval=%s, ep0stage=%s\n", handled,
-+ decode_csr0(csrval),
++ DBG(3, "handled=%d, csrval=%s, ep0stage=%s\n", handled,
++ decode_csr0(csrval),
+ decode_ep0stage(dev_context->end0_stage) );
-+
++
+ if(!dev_context->set_config_flag)
+ {
+ spin_lock(&dev_context->lock);
+ MUSB_SELECTEND(base_addr, 0);
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0, csrval);
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0, csrval);
+ spin_unlock(&dev_context->lock);
+ }
+ } else {
+ /* sequence #1 */
+ if ( is_tx_request(control_request_ptr) ) {
-+ /* write to host, a request is posted on ep0 */
++ /* write to host, a request is posted on ep0 */
+ dev_context->end0_stage=MUSB_END0_STAGE_TX;
+ handled=service_tx_request(control_request_ptr);
+ /* sequence #2, a request is posted on ep0 */
@@ -204437,27 +205571,27 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ dev_context->end0_stage=MUSB_END0_STAGE_RX;
+ handled=service_rx_request(control_request_ptr);
+ }
-+
++
+ if ( handled<0 ) {
+ /* stall it!!! application stall */
+ spin_lock(&dev_context->lock);
+ MUSB_SELECTEND(base_addr, 0);
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0,
+ MUSB_M_CSR0_P_SVDRXPKTRDY | MUSB_M_CSR0_P_SENDSTALL);
+ spin_unlock(&dev_context->lock);
-+ }
++ }
+ }
-+
-+ }
++
++ }
+ } else {
-+
++
+ }
+ break;
-+
-+
++
++
+ /* handle the application stall on Ep0 */
-+ default:
-+ {
++ default:
++ {
+ uint16_t csrval = MUSB_M_CSR0_P_SENDSTALL;
+ switch ( dev_context->end0_stage & ~MUSB_END0_STAGE_STALL_BIT ) {
+ case MUSB_END0_STAGE_TX:
@@ -204467,19 +205601,19 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ csrval|=MUSB_M_CSR0_RXPKTRDY;
+ break;
+ }
-+
-+ DBG(3, "Application stall from ep0stage=%s\n",
++
++ DBG(3, "Application stall from ep0stage=%s\n",
+ decode_ep0stage(dev_context->end0_stage));
+ spin_lock(&dev_context->lock);
+ MUSB_SELECTEND(base_addr, 0);
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0, csrval);
-+ spin_unlock(&dev_context->lock);
-+
-+ dev_context->end0_stage = MUSB_END0_STAGE_SETUP;
-+ }
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0, csrval);
++ spin_unlock(&dev_context->lock);
++
++ dev_context->end0_stage = MUSB_END0_STAGE_SETUP;
++ }
+ break;
-+ }
-+
++ }
++
+ return 1;
+}
+
@@ -204495,15 +205629,15 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+inline int get_ep_packet_size(struct nomadik_udc* dev_context, uint8_t bEnd)
+{
+ int size=dev_context->end[bEnd].maxpacket;
-+
++
+ if ( (USB_ENDPOINT_XFER_BULK == dev_context->end[bEnd].bmAttributes)
-+ && dev_context->bulk_split)
++ && dev_context->bulk_split)
+ {
+ size=dev_context->end[bEnd].maxpacket;
-+ }
-+
-+ return size;
-+}
++ }
++
++ return size;
++}
+
+
+inline struct usb_request* udc_current_request( struct nomadik_ep * end_ptr) {
@@ -204514,33 +205648,33 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+/**
+ * Queue requests to endpoints for execution.
+ * @param ep the endpoint the request shall be queued to
-+ * @param req_ptr the request
++ * @param req_ptr the request
+ * @param gfp_flags memory flags
+ */
+int nomadik_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
+ gfp_t gfp_flags)
+{
+ unsigned long lockflags;
-+
++
+ struct nomadik_ep *ep = container_of(_ep, struct nomadik_ep, ep);
+ struct nomadik_req *req_ptr = container_of(_req, struct nomadik_req, req);
+ const uint8_t* base_addr = (uint8_t*)udc_base_addr;
+ const uint8_t bEnd=EP_NUMBER(ep);
+ int is_iso = 0;
-+
++
+ /* catch various bogus parameters */
+ if (!req_ptr || !req_ptr->req.complete || !req_ptr->req.buf
+ /*|| !list_empty(&req_ptr->completion_list)*/) {
+ ERR("%s, bad params\n", __FUNCTION__);
+ return -EINVAL;
+ }
-+
++
+ if (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
+ if (req_ptr->req.length > ep->ep.maxpacket)
+ return -EMSGSIZE;
+ is_iso = 1;
+ }
-+
++
+ /* this isn't bogus, but NOMADIK DMA isn't the only hardware to
+ * have a hard time with partial packet reads... reject it.
+ */
@@ -204552,10 +205686,10 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ ERR("%s, no partial packet OUT reads\n", __FUNCTION__);
+ return -EMSGSIZE;
+ }
-+
++
+ if (!dev_context->driver || dev_context->gadget.speed == USB_SPEED_UNKNOWN)
+ return -ESHUTDOWN;
-+
++
+ if (use_dma && ep->has_dma) {
+ if (req_ptr->req.dma == DMA_ADDR_INVALID) {
+ req_ptr->req.dma = dma_map_single(
@@ -204576,44 +205710,44 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ req_ptr->mapped = 0;
+ }
+ }
-+
++
+ DBG(2,"%s queue req %p, len %d buf %p\n",
+ ep->ep.name, _req, _req->length, _req->buf);
-+
-+
-+
++
++
++
+ /* request is mine now... */
-+ req_ptr->req.actual=0;
-+ req_ptr->req.status=-EINPROGRESS;
-+ req_ptr->end_number=bEnd;
++ req_ptr->req.actual=0;
++ req_ptr->req.status=-EINPROGRESS;
++ req_ptr->end_number=bEnd;
+ req_ptr->is_tx=ep->is_tx;
-+
++
+ /* for now... */
+ INIT_LIST_HEAD( &req_ptr->req.list );
-+
++
+ /* lock the endpoint */
+ EP_SPIN_LOCK_IRQSAVE(ep, lockflags);
-+
++
+ /* add req_ptr to the list */
+ list_add_tail( &(req_ptr->req.list), &(ep->req_list) );
+ /* it this is not the head of the queue, done... */
+ if ( req_ptr!=(struct nomadik_req*)udc_current_request(ep) ) {
-+ EP_SPIN_UNLOCK_IRQRESTORE( ep,lockflags );
++ EP_SPIN_UNLOCK_IRQRESTORE( ep,lockflags );
+ return 0;
+ }
-+
++
+#ifdef MUSB_PARANOID
+ if ( bEnd==ReqEnd ) {
+ ReqCount++;
+ }
-+
++
+ if ( ReqCount>=ReqCap ) {
+ WARN("ReqCount=%d on ep%d\n", ReqCount, bEnd);
-+ EP_SPIN_UNLOCK_IRQRESTORE( ep,lockflags );
++ EP_SPIN_UNLOCK_IRQRESTORE( ep,lockflags );
+ return 0;
+ }
+#endif
-+
++
+ /* start the request otherwise; the EP MUST BE UNLOCKED */
+ if ( bEnd==0 ) {
+ if(dev_context->set_config_flag)
@@ -204623,46 +205757,46 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ spin_lock(&dev_context->lock);
+ MUSB_SELECTEND(base_addr, 0);
+ csrval= MUSB_M_CSR0_P_SVDRXPKTRDY | MUSB_M_CSR0_P_DATAEND;
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0, csrval);
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0, csrval);
+ spin_unlock(&dev_context->lock);
+ }
-+
-+ EP_SPIN_UNLOCK_IRQRESTORE( ep,lockflags );
-+
-+
++
++ EP_SPIN_UNLOCK_IRQRESTORE( ep,lockflags );
++
++
+ switch ( dev_context->end0_stage )
-+ {
-+ case MUSB_END0_STAGE_TX:
-+
++ {
++ case MUSB_END0_STAGE_TX:
++
+ ep0_txstate(); /* sequence #1, TX State */
+ break;
-+
-+
++
++
+ case MUSB_END0_STAGE_RX:
-+
-+ ep0_rxstate(); /* sequence #2, RX State */
++
++ ep0_rxstate(); /* sequence #2, RX State */
+ break;
-+
++
+ /* certain gadged may keep ep0 busy; g_file_storage
+ does it after a set_config command.*/
+ default: {
-+
-+ mdelay(5);
-+
++
++ mdelay(5);
++
+ req_ptr->req.status=(req_ptr->req.actual==req_ptr->req.length)
+ ? 0 : -EINVAL;
+ mgc_complete_ep0_request();
-+ }
++ }
+ break;
-+
++
+ }
-+
++
+ } else
+ {
+ udc_restart_request(dev_context, (struct usb_request *)req_ptr);
+ EP_SPIN_UNLOCK_IRQRESTORE( ep,lockflags );
+ }
-+
++
+ DBG(4, "==>\n");
+ return 0;
+}
@@ -204677,55 +205811,55 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ DBG(3, "<== restarting (%s) request req_ptr=%p on ep=%d\n",
+ ((struct nomadik_req*)req_ptr)->is_tx ? "tx" : "rx",
+ req_ptr, ((struct nomadik_req*)req_ptr)->end_number);
-+
++
+#ifdef MUSB_PARANOID
+ if ( !req_ptr ) {
+ ERR("null req_ptr\n");
-+ return;
++ return;
+ }
+#endif
-+
++
+ if( ((struct nomadik_req*)req_ptr)->is_tx ) {
-+ txstate(dev_context, (struct nomadik_req*)req_ptr);
++ txstate(dev_context, (struct nomadik_req*)req_ptr);
+ } else {
-+ rxstate(dev_context, (struct nomadik_req*)req_ptr);
-+ }
++ rxstate(dev_context, (struct nomadik_req*)req_ptr);
++ }
+}
+
+/**
+ * Dequeue a request
+ * @param ep the endpoint
+ * @param req_ptr the request to dequeue
-+ * @return 0 if success, or negative when error
++ * @return 0 if success, or negative when error
+ */
+int nomadik_ep_dequeue(struct usb_ep *ep, struct usb_request *req_ptr)
+{
+ struct nomadik_ep * end_ptr =( struct nomadik_ep *)ep;
-+
++
+ DBG(4, "<==\n" );
+ DBG(3, "dequeuing from nEnd=0x%x, end_ptr=%p, req_ptr=%p\n", \
-+ EP_NUMBER(end_ptr), end_ptr, req_ptr);
-+
-+
++ EP_NUMBER(end_ptr), end_ptr, req_ptr);
++
++
+ /* flush the request returning -EINVAL; syncronnous */
+ EP_SPIN_LOCK( end_ptr );
+ req_ptr->status=-EINVAL;
+ if ( req_ptr->complete ) {
+ list_del( &req_ptr->list );
+ EP_SPIN_UNLOCK( end_ptr );
-+ req_ptr->complete((struct usb_ep *)end_ptr, req_ptr);
++ req_ptr->complete((struct usb_ep *)end_ptr, req_ptr);
+ } else {
-+ EP_SPIN_UNLOCK( end_ptr );
++ EP_SPIN_UNLOCK( end_ptr );
+ }
-+
++
+ return 0;
+}
+
+
+
+/**
-+ * An endpoint is transmitting data. This can be called either from
-+ * the IRQ routine or from GadgetQueue to kickstart a request on an
++ * An endpoint is transmitting data. This can be called either from
++ * the IRQ routine or from GadgetQueue to kickstart a request on an
+ * endpoint.
+ *
+ * @warning ep locked & IRQ disabled
@@ -204738,86 +205872,86 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ struct nomadik_ep* end_ptr;
+ struct usb_request *reqptr;
+ uint16_t fifo_count = 0, csrval;
-+ const uint8_t* base_addr = (uint8_t*)udc_base_addr;
-+
++ const uint8_t* base_addr = (uint8_t*)udc_base_addr;
++
+ DBG(4, "<==\n");
-+
-+#ifdef MUSB_PARANOID
++
++#ifdef MUSB_PARANOID
+ if ( !req ) {
+ ERR("cannot call txstate without request\n");
+ return;
+ }
+#endif
-+
++
+ bEnd=req->end_number;
+ reqptr=&req->req;
+ end_ptr=&(dev_context->end[req->end_number]);
-+
-+ fifo_count = min(get_ep_packet_size(dev_context, bEnd),
++
++ fifo_count = min(get_ep_packet_size(dev_context, bEnd),
+ (int)(reqptr->length-reqptr->actual));
+ /* read TXCSR before */
-+ MUSB_SELECTEND(base_addr, bEnd);
++ MUSB_SELECTEND(base_addr, bEnd);
+ csrval=MUSB_READCSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd);
-+
++
+ if (USB_ENDPOINT_XFER_ISOC == end_ptr->bmAttributes) {
+ csrval |= MUSB_M_TXCSR_ISO;
+ }
-+
-+#ifdef MUSB_PARANOID
++
++#ifdef MUSB_PARANOID
+ if ( reqptr->length-reqptr->actual<0 ) {
+ ERR("NEGATIVE FIFOCOUNT! reqptr->actual=%d, fifo_count=%d, reqptr->length=%d\n", \
+ reqptr->actual, fifo_count, reqptr->length);
+ fifo_count=0;
+ }
-+
++
+ if ( reqptr->actual+fifo_count>reqptr->length ) {
+ ERR("trying to write PAST length! reqptr->actual=%d, fifo_count=%d, reqptr->length=%d\n", \
+ reqptr->actual, fifo_count, reqptr->length);
+ fifo_count=reqptr->length-reqptr->actual;
+ }
+#endif
-+
++
+ DBG(3, "bEnd=0x%x, end_ptr->maxpacket=0x%x, fifo_count=%d, %s\n", \
+ bEnd, end_ptr->maxpacket, fifo_count, dump_usb_request(reqptr) );
-+
-+
++
++
+ /* stalled?? */
-+ if ( csrval & MUSB_M_TXCSR_P_SENDSTALL ) {
++ if ( csrval & MUSB_M_TXCSR_P_SENDSTALL ) {
+ DBG(2, "completing stalled request reqptr=%p\n", reqptr);
+ list_del( &reqptr->list );
-+ udc_complete_request(reqptr, 0);
++ udc_complete_request(reqptr, 0);
+ return;
+ }
-+
-+
-+#ifdef MUSB_NO_ZEROPACKET_KLUDGE
++
++
++#ifdef MUSB_NO_ZEROPACKET_KLUDGE
+ if ( !fifo_count ) {
-+ DBG(2, "==> Skipping zero packet\n");
++ DBG(2, "==> Skipping zero packet\n");
+ }
+#endif
-+
-+ udc_load_fifo(base_addr, bEnd, fifo_count,
-+ (uint8_t*)(reqptr->buf+reqptr->actual));
++
++ udc_load_fifo(base_addr, bEnd, fifo_count,
++ (uint8_t*)(reqptr->buf+reqptr->actual));
+ reqptr->actual+=fifo_count;
-+
-+
-+
++
++
++
+ csrval = MUSB_M_TXCSR_MODE | MUSB_M_TXCSR_TXPKTRDY; /* add my stuff */
-+
-+
++
++
+ /* now write out the thing */
-+ DBG(3, "xmit a packet reqptr->length=%d, reqptr->actual=%d, \n",
++ DBG(3, "xmit a packet reqptr->length=%d, reqptr->actual=%d, \n",
+ reqptr->length, reqptr->actual);
-+
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd, csrval);
-+
++
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd, csrval);
++
+ DBG(4, "==>\n");
+}
+
+/**
+ * Data ready for a request; called from IRQ; no need to disable the
+ * IRQS bc they are already disabled. The end point CANNOT be locked
-+ * when entering this routine because it would deadlock. By design,
++ * when entering this routine because it would deadlock. By design,
+ * this is called only after txstate has been called.
+ *
+ * @param dev_context
@@ -204829,32 +205963,32 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ struct usb_request *reqptr;
+ uint8_t* base_addr = (uint8_t*)udc_base_addr;
+ struct nomadik_ep* end_ptr = &(dev_context->end[bEnd]);
-+
++
+ DBG(4, "<== bEnd=%d\n", bEnd );
-+
-+ do {
-+ spin_lock_irqsave(&dev_context->lock, flags);
++
++ do {
++ spin_lock_irqsave(&dev_context->lock, flags);
+ MUSB_SELECTEND(base_addr, bEnd);
+ csrval = MUSB_READCSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd);
+ DBG(1, "udc_ep_tx_irq bEnd = %d txcsr = 0x%x\n",bEnd,csrval);
-+
++
+ if (csrval & MUSB_M_TXCSR_P_SENTSTALL) {
+ csrval &= ~MUSB_M_TXCSR_P_SENTSTALL;
-+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd, csrval);
-+
-+ DBG(2, "request was stalled, completing it\n");
++ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd, csrval);
++
++ DBG(2, "request was stalled, completing it\n");
+ reqptr=udc_current_request(end_ptr);
+ if ( reqptr ) {
+ list_del( &reqptr->list );
-+ spin_unlock_irqrestore(&dev_context->lock, flags);
-+ udc_complete_request(reqptr, -EOPNOTSUPP); /* complete */
++ spin_unlock_irqrestore(&dev_context->lock, flags);
++ udc_complete_request(reqptr, -EOPNOTSUPP); /* complete */
+ } else {
+ WARN("Acking sent stall, but no request!\n");
-+ }
-+
++ }
++
+ break;
+ }
-+
++
+ if(csrval & MUSB_M_TXCSR_P_UNDERRUN) {
+#ifdef NMDK_CONFIG_PROC_FS
+ dev_context->end[bEnd].dwMissedTxPackets++;
@@ -204862,64 +205996,64 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ csrval &= ~MUSB_M_TXCSR_P_UNDERRUN;
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd, csrval);
+ DBG(2, "underrun on ep%d\n", bEnd);
-+ }
-+
-+ reqptr=udc_current_request(end_ptr);
-+ if ( reqptr ) {
-+
-+ /* the zero flag request the transmission of a zero data pkt
++ }
++
++ reqptr=udc_current_request(end_ptr);
++ if ( reqptr ) {
++
++ /* the zero flag request the transmission of a zero data pkt
+ * (when required). The zero flag is reset to zero,
+ * after the zero packet has been submitted. */
+ if ( reqptr->actual==reqptr->length ) {
-+
++
+ if ( reqptr->zero &&
-+ ( reqptr->length && (reqptr->length%get_ep_packet_size(dev_context, bEnd))==0 )
++ ( reqptr->length && (reqptr->length%get_ep_packet_size(dev_context, bEnd))==0 )
+ && !(csrval & MUSB_M_TXCSR_P_SENTSTALL)
-+ ) {
-+ const uint16_t csrval=MUSB_M_TXCSR_MODE
++ ) {
++ const uint16_t csrval=MUSB_M_TXCSR_MODE
+ | MUSB_M_TXCSR_TXPKTRDY;
-+
++
+ reqptr->zero=0;
-+
++
+ DBG(3, "sending zero pkt\n");
-+
-+ MUSB_SELECTEND(base_addr, bEnd);
++
++ MUSB_SELECTEND(base_addr, bEnd);
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_TXCSR, bEnd, csrval);
-+ spin_unlock_irqrestore(&dev_context->lock, flags);
++ spin_unlock_irqrestore(&dev_context->lock, flags);
+ break;
-+ }
-+
-+ list_del( &reqptr->list );
++ }
++
++ list_del( &reqptr->list );
+ udc_complete_request(reqptr, 0); /* async complete */
-+
++
+ /* kickstart next request if available */
-+ reqptr=(end_ptr->binactive) ? NULL
-+ : udc_current_request(end_ptr);
++ reqptr=(end_ptr->binactive) ? NULL
++ : udc_current_request(end_ptr);
+ if ( !reqptr ) {
-+ DBG(3, "bEnd=0x%x idle now\n", bEnd);
-+ DBG( 2, "bEnd=0x%x idle now\n", bEnd);
++ DBG(3, "bEnd=0x%x idle now\n", bEnd);
++ DBG( 2, "bEnd=0x%x idle now\n", bEnd);
+ break;
-+ }
++ }
+ }
-+
++
+ /* txstate unlock the ep before writing */
+ txstate(dev_context, (struct nomadik_req*)reqptr);
+ }
-+
++
+ } while (0);
-+
-+ spin_unlock_irqrestore(&dev_context->lock, flags);
++
++ spin_unlock_irqrestore(&dev_context->lock, flags);
+ DBG(2, "==>\n" );
+}
+
+/* ------------------------------------------------------------ */
+
+/**
-+ * Receving on an endpoint. Called from the IRQ routine and when
++ * Receving on an endpoint. Called from the IRQ routine and when
+ * starting receving.
+ * @warning ep locked & IRQ disabled
+ * @param dev_context the controller
-+ * @param req the request
++ * @param req the request
+ * @see udc_ep_rx_irq
+ */
+void rxstate(struct nomadik_udc* dev_context, struct nomadik_req* req)
@@ -204930,48 +206064,48 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ const uint8_t* base_addr = (uint8_t*)udc_base_addr;
+ struct nomadik_ep* end_ptr = &(dev_context->end[bEnd]);
+ uint16_t fifo_count = 0, wcount=end_ptr->maxpacket;
-+
-+
++
++
+ MUSB_SELECTEND(base_addr, bEnd);
+ csrval = MUSB_READCSR16(base_addr, MUSB_O_HDRC_RXCSR, bEnd);
+ if ( csrval& MUSB_M_RXCSR_RXPKTRDY ) {
-+
++
+ /* this also handle residual (if any) */
-+ wcount = MUSB_READCSR16(base_addr, MUSB_O_HDRC_RXCOUNT, bEnd);
-+ if ( reqptr->actual < reqptr->length ) {
-+
-+ fifo_count = (uint16_t)min((int)wcount,
++ wcount = MUSB_READCSR16(base_addr, MUSB_O_HDRC_RXCOUNT, bEnd);
++ if ( reqptr->actual < reqptr->length ) {
++
++ fifo_count = (uint16_t)min((int)wcount,
+ (int)(reqptr->length - reqptr->actual));
-+ udc_unload_fifo(base_addr, bEnd, fifo_count,
++ udc_unload_fifo(base_addr, bEnd, fifo_count,
+ (uint8_t*)(reqptr->buf + reqptr->actual));
+ reqptr->actual += fifo_count;
-+
++
+ DBG(3, "fifo_count=%d, bEnd=0x%x, end_ptr->maxpacket=0x%x, wcount=0x%x, %s\n",\
+ fifo_count, bEnd, end_ptr->maxpacket, wcount, dump_usb_request(reqptr));
-+
++
+ /* ack the read! */
+ csrval &= ~MUSB_M_RXCSR_RXPKTRDY;
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_RXCSR, bEnd, csrval);
-+ }
++ }
+ }
-+
++
+ /* reach the end or short packet detected */
-+ if ( reqptr->actual==reqptr->length || wcount<end_ptr->maxpacket ) {
++ if ( reqptr->actual==reqptr->length || wcount<end_ptr->maxpacket ) {
+ reqptr->status=0;
-+
-+ DBG(3, "completing reqptr=%p on bEnd=0x%x\n", reqptr, bEnd);
++
++ DBG(3, "completing reqptr=%p on bEnd=0x%x\n", reqptr, bEnd);
+ list_del( &reqptr->list );
-+ DBG(3, "queuing completion\n");
++ DBG(3, "queuing completion\n");
+ udc_complete_request(reqptr, reqptr->status); /* async complete */
+ }
-+
++
+ DBG(2, "==>");
+}
+
+/**
+ * Data ready for a request; called from IRQ
+ * @param dev_context the controller
-+ * @param req the request
++ * @param req the request
+ */
+void udc_ep_rx_irq(uint8_t bEnd)
+{
@@ -204980,13 +206114,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ struct usb_request* reqptr=NULL;
+ uint8_t* base_addr = (uint8_t*)udc_base_addr;
+ struct nomadik_ep* end_ptr = &(dev_context->end[bEnd]);
-+
++
+ DBG(1, "<==\n" );
-+
++
+ /* executed from interrupt no need to disable them */
-+ spin_lock_irqsave(&dev_context->lock, flags);
++ spin_lock_irqsave(&dev_context->lock, flags);
+ MUSB_SELECTEND(base_addr, bEnd);
-+ csrval = MUSB_READCSR16(base_addr, MUSB_O_HDRC_RXCSR, bEnd);
++ csrval = MUSB_READCSR16(base_addr, MUSB_O_HDRC_RXCSR, bEnd);
+ if(csrval & MUSB_M_RXCSR_P_SENTSTALL) {
+ csrval &= ~MUSB_M_RXCSR_P_SENTSTALL;
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_RXCSR, bEnd, csrval);
@@ -204994,7 +206128,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ spin_unlock_irqrestore(&dev_context->lock, flags);
+ return;
+ }
-+
++
+ if(csrval & MUSB_M_RXCSR_P_OVERRUN) {
+#ifdef NMDK_CONFIG_PROC_FS
+ dev_context->end[bEnd].dwMissedRxPackets++;
@@ -205003,23 +206137,23 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_RXCSR, bEnd, csrval);
+ DBG(2, "Received overrun on ep%d\n", bEnd);
+ }
-+
++
+#ifdef NMDK_CONFIG_PROC_FS
+ if(csrval & MUSB_M_RXCSR_INCOMPRX) {
+ dev_context->end[bEnd].dwErrorRxPackets++;
+ }
+#endif
-+
++
+ /* analyze request if the ep is not inactive */
-+ reqptr=(end_ptr->binactive) ? NULL : udc_current_request(end_ptr);
++ reqptr=(end_ptr->binactive) ? NULL : udc_current_request(end_ptr);
+ if ( reqptr ) {
-+ DBG( 1, "Going into rxstate\n");
++ DBG( 1, "Going into rxstate\n");
+ rxstate(dev_context, (struct nomadik_req*)reqptr);
-+ } else {
-+ DBG(3, "Rx: bytes waiting on ep=0x%x\n", bEnd);
-+ DBG(1, "Rx: bytes waiting on ep=0x%x\n", bEnd);
-+ }
-+
++ } else {
++ DBG(3, "Rx: bytes waiting on ep=0x%x\n", bEnd);
++ DBG(1, "Rx: bytes waiting on ep=0x%x\n", bEnd);
++ }
++
+ spin_unlock_irqrestore(&dev_context->lock, flags);
+ DBG(4, "==>\n" );
+}
@@ -205028,7 +206162,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+*
+*/
+
-+/**
++/**
+ * @pre dev_context!=NULL
+ */
+void udc_resume(void) {
@@ -205048,45 +206182,45 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ }
+}
+
-+/**
++/**
+ * @pre dev_context!=NULL
+ */
+void udc_disconnect_isr(void) {
-+ DBG(4, "<==\n" );
++ DBG(4, "<==\n" );
+ if( dev_context->driver && dev_context->driver->disconnect) {
+ dev_context->driver->disconnect(& dev_context->gadget );
+ }
-+ DBG(4, "==>\n" );
-+
++ DBG(4, "==>\n" );
++
+}
+
+/**
+ *
+ * @pre dev_context!=NULL
+ */
-+void musb_reset_isr(void)
++void musb_reset_isr(void)
+{
+ const uint8_t* base_addr = (uint8_t*)udc_base_addr;
+ uint8_t devctl = MUSB_READ8(base_addr, MUSB_O_HDRC_DEVCTL);
+ DBG(4, "<==\n");
-+
-+ DBG(3, "<== mode=%s, addr=%x\n", (devctl&MUSB_M_DEVCTL_HM)?"host":"function",
++
++ DBG(3, "<== mode=%s, addr=%x\n", (devctl&MUSB_M_DEVCTL_HM)?"host":"function",
+ MUSB_READ8(base_addr, MUSB_O_HDRC_FADDR));
-+
++
+ /* HR does NOT clear itself */
+ if(devctl & MUSB_M_DEVCTL_HR) {
-+
++
+ MUSB_WRITE8(base_addr, MUSB_O_HDRC_DEVCTL, MUSB_M_DEVCTL_SESSION);
+ }
-+
++
+ /* unconfigured */
+ dev_context->address=0;
+ dev_context->end0_stage=MUSB_END0_STAGE_SETUP;
+ if ( dev_context->driver ) {
-+
++
+ uint8_t bEnd;
-+
-+ uint8_t power = MUSB_READ8(base_addr, MUSB_O_HDRC_POWER);
++
++ uint8_t power = MUSB_READ8(base_addr, MUSB_O_HDRC_POWER);
+ dev_context->gadget.speed = (power & MUSB_M_POWER_HSMODE)? USB_SPEED_HIGH : USB_SPEED_FULL;
+ /* disable the endpoints */
+ for(bEnd = 1; bEnd < dev_context->end_count; bEnd++)
@@ -205094,7 +206228,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ nomadik_ep_disable(&dev_context->end[bEnd].ep);
+ }
+ (dev_context->end[0]).binactive = MUSB_GADGET_EP_ACTIVE;
-+
++
+ }
+ DBG(4, "==>\n");
+}
@@ -205115,35 +206249,35 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ unsigned long flags;
+ uint8_t* base_addr = (u8 *)udc_base_addr;
+ int nEnd = EP_NUMBER(ep);
-+
++
+ DBG(4, "<==\n" );
-+
++
+#ifdef MUSB_PARANOID
+ if (!dev_context) {
+ ERR("Gadget not initialized, dev_context=NULL\n");
+ return;
+ }
-+
++
+ if ( nEnd<0 ) {
+ ERR("invalid endpoint ep=%p\n", ep);
+ return;
+ }
-+
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
++
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
+#endif
-+
++
+ spin_lock_irqsave(&(dev_context->lock), flags);
+ MUSB_SELECTEND(base_addr, (uint8_t)nEnd);
-+
++
+ /* disable interrupts */
+ intr_txe = MUSB_READ16(base_addr, MUSB_O_HDRC_INTRTXE);
+ MUSB_WRITE16(base_addr, MUSB_O_HDRC_INTRTXE, intr_txe & ~(1 << nEnd));
-+
++
+ if(nEnd) {
+ csr = MUSB_READCSR16(base_addr, MUSB_O_HDRC_TXCSR, (uint8_t)nEnd);
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_TXCSR, (uint8_t)nEnd, csr);
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_TXCSR, (uint8_t)nEnd, csr);
-+
++
+ csr = MUSB_READCSR16(base_addr, MUSB_O_HDRC_RXCSR, (uint8_t)nEnd);
+ csr |= MUSB_M_RXCSR_FLUSHFIFO;
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_RXCSR, (uint8_t)nEnd, csr);
@@ -205151,11 +206285,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ } else {
+ MUSB_WRITECSR16(base_addr, MUSB_O_HDRC_CSR0, 0, MUSB_M_CSR0_FLUSHFIFO);
+ }
-+
++
+ /* re-enable interrupt */
+ MUSB_WRITE16(base_addr, MUSB_O_HDRC_INTRTXE, intr_txe);
+ spin_unlock_irqrestore(&(dev_context->lock), flags);
-+
++
+ DBG(4, "==>\n" );
+}
+
@@ -205171,25 +206305,25 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ int result = 0;
+ uint8_t* base_addr= (u8 *)udc_base_addr;
+ int bEnd = EP_NUMBER(ep);
-+
++
+ DBG(4, "<==\n" );
-+
++
+#ifdef MUSB_PARANOID
-+ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
-+
++ ASSERT_SPINLOCK_UNLOCKED(&dev_context->lock);
++
+ if( MUSB_GadgetFindEnd(ep)<0 ) {
+ ERR("invalid endpoint ep=%p\n", ep);
+ return -EINVAL;
+ }
+#endif
-+
++
+ spin_lock_irqsave(&(dev_context->lock), flags);
-+ MUSB_SELECTEND(base_addr, bEnd);
-+ result = MUSB_READCSR16(base_addr,
-+ (bEnd)? MUSB_O_HDRC_RXCOUNT:MUSB_O_HDRC_COUNT0,
++ MUSB_SELECTEND(base_addr, bEnd);
++ result = MUSB_READCSR16(base_addr,
++ (bEnd)? MUSB_O_HDRC_RXCOUNT:MUSB_O_HDRC_COUNT0,
+ bEnd);
+ spin_unlock_irqrestore(&(dev_context->lock), flags);
-+
++
+ DBG(4, "==> %d\n", result);
+ return result;
+}
@@ -205208,11 +206342,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+decode_request(struct usb_ctrlrequest *req)
+{
+ static char buf [8];
-+
++
+ sprintf(buf, "%s%s",( USB_TYPE_STANDARD==(req->bRequestType&USB_TYPE_MASK )?"S":"N" ),
-+ is_tx_request(req) ? "TX"
-+ : is_rx_request(req) ? "RX"
-+ : is_zerodata_request(req) ? "Z"
++ is_tx_request(req) ? "TX"
++ : is_rx_request(req) ? "RX"
++ : is_zerodata_request(req) ? "Z"
+ : "-" );
+ return buf;
+}
@@ -205221,12 +206355,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ */
+static char *decode_csr0(uint16_t csr0) {
+ static char buf[64];
-+ sprintf(buf, "(%s%s%s%s)",
++ sprintf(buf, "(%s%s%s%s)",
+ csr0&MUSB_M_CSR0_TXPKTRDY ? "[TXPKTRDY]":"",
+ csr0&MUSB_M_CSR0_P_SVDRXPKTRDY ? "[SVDRXPKTRDY]":"",
+ csr0&MUSB_M_CSR0_P_SENDSTALL ? "[stalled]":"",
-+ csr0&MUSB_M_CSR0_P_DATAEND ? "[dataend]":"");
-+ return buf;
++ csr0&MUSB_M_CSR0_P_DATAEND ? "[dataend]":"");
++ return buf;
+}
+
+/* Decode a value to binary.
@@ -205234,11 +206368,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+static char *decode_bits(uint16_t value) {
+ int i=0;
+ static char buf[64];
-+
++
+ for (; i<16;i++) {
-+ buf[15-i]=(value&(1<<i))?'1':'0';
++ buf[15-i]=(value&(1<<i))?'1':'0';
+ }
-+
++
+ return buf;
+}
+
@@ -205246,13 +206380,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ */
+static char *decode_txcsr(uint16_t txcsr) {
+ static char buf[256];
-+ sprintf(buf, "%s (%s%s%s%s)",
++ sprintf(buf, "%s (%s%s%s%s)",
+ decode_bits(txcsr),
+ txcsr&MUSB_M_TXCSR_TXPKTRDY ? "[TXPKTRDY]":"",
+ txcsr&MUSB_M_TXCSR_AUTOSET ? "[MUSB_M_TXCSR_AUTOSET]":"",
+ txcsr&MUSB_M_TXCSR_DMAENAB ? "[MUSB_M_TXCSR_DMAENAB]":"",
-+ txcsr&MUSB_M_TXCSR_DMAMODE ? "[MUSB_M_TXCSR_DMAMODE]":"");
-+ return buf;
++ txcsr&MUSB_M_TXCSR_DMAMODE ? "[MUSB_M_TXCSR_DMAMODE]":"");
++ return buf;
+}
+
+/*
@@ -205267,7 +206401,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+static char *decode_ep0stage(uint8_t stage) {
+ static char buff[64];
+ uint8_t stallbit=stage&MUSB_END0_STAGE_STALL_BIT;
-+
++
+ stage=stage&~stage&MUSB_END0_STAGE_STALL_BIT;
+ sprintf(buff, "%s%s", (stallbit)? "stall-" : "",
+ (stage==MUSB_END0_STAGE_SETUP)
@@ -205277,7 +206411,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ (stage==MUSB_END0_STAGE_RX)
+ ? "rx" :
+ (stage==MUSB_END0_STAGE_STATUSIN)
-+ ? "statusin" :
++ ? "statusin" :
+ (stage==MUSB_END0_STAGE_STATUSOUT)
+ ? "statusout" : "error");
+ return buff;
@@ -205295,14 +206429,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ * Dump core registers whose reads are non-destructive.
+ * @param base_addr
+ * @param multipoint
-+ * @param bEnd
++ * @param bEnd
+ */
+void udc_dump_regs(uint8_t* base_addr, int multipoint, uint8_t bEnd)
+{
-+
-+
-+ MUSB_SELECTEND(base_addr, bEnd);
-+
++
++
++ MUSB_SELECTEND(base_addr, bEnd);
++
+ if(!bEnd) {
+ printk(KERN_INFO " 0: CSR0=%04x, Count0=%02x, Type0=%02x, NAKlimit0=%02x\n",
+ MUSB_READCSR16(base_addr, MUSB_O_HDRC_CSR0, 0),
@@ -205323,7 +206457,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ MUSB_READCSR8(base_addr, MUSB_O_HDRC_TXINTERVAL, bEnd),
+ MUSB_READCSR16(base_addr, MUSB_O_HDRC_RXCOUNT, bEnd));
+ }
-+
++
+ if( multipoint) {
+ printk(KERN_INFO " TxAddr=%02x, TxHubAddr=%02x, TxHubPort=%02x\n",
+ MUSB_READ8(base_addr, MUSB_BUSCTL_OFFSET(bEnd, MUSB_O_HDRC_TXFUNCADDR)),
@@ -205340,21 +206474,21 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+
+
+/**
-+ * Enable the Controller
++ * Enable the Controller
+ */
+void musb_enable(void)
+{
+ uint8_t* udc_base = (uint8_t*)udc_base_addr;
-+
++
+ DBG(4, "<==\n");
-+
++
+ /* Set INT enable registers, enable interrupts */
+ MUSB_WRITE16(udc_base, MUSB_O_HDRC_INTRTXE, dev_context->end_mask);
+ MUSB_WRITE16(udc_base, MUSB_O_HDRC_INTRRXE, dev_context->end_mask & 0xfffe);
+ /* don't enable suspend mode! */
-+ MUSB_WRITE8(udc_base, MUSB_O_HDRC_INTRUSBE, 0xf7);
-+
-+
++ MUSB_WRITE8(udc_base, MUSB_O_HDRC_INTRUSBE, 0xf7);
++
++
+ DBG(3, "%s INTRUSBE reg:0x%x \n", __FUNCTION__,MUSB_READ8(udc_base, MUSB_O_HDRC_INTRUSBE));
+ DBG(3, "%s INTRTXE reg:0x%x \n", __FUNCTION__,MUSB_READ8(udc_base, MUSB_O_HDRC_INTRTXE));
+ DBG(3, "%s INTRRXE reg:0x%x \n", __FUNCTION__,MUSB_READ8(udc_base, MUSB_O_HDRC_INTRRXE));
@@ -205363,32 +206497,32 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+
+
+/**
-+ * Register the gadget driver. Used by the gadget when
++ * Register the gadget driver. Used by the gadget when
+ * registering themselves with the controller.
+ *
+ *
+ * @param driver the gadget driver
-+ * @return <0 if error, 0 if everything is fine
-+ */
++ * @return <0 if error, 0 if everything is fine
++ */
+int usb_gadget_register_driver(struct usb_gadget_driver *driver)
+{
+ int retval;
-+
++
+ DBG(4, "<==\n");
-+
-+
++
++
+ dev_context->driver=driver;
-+
++
+ do {
+ struct usb_gadget *gadget = &dev_context->gadget;
+ u8 *base_addr = ( u8 *)udc_base_addr;
-+
++
+ uint8_t power = MUSB_READ8(base_addr, MUSB_O_HDRC_POWER);
-+
++
+ gadget->name = driver->function;
+ driver->driver.bus=0;
+ gadget->dev.driver=&driver->driver;
-+
++
+ retval = device_add(&gadget->dev);
+ if(retval)
+ {
@@ -205396,12 +206530,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ driver->driver.name, retval);
+ return retval;
+ }
-+
++
+ gadget->speed = (power & MUSB_M_POWER_HSMODE) ? USB_SPEED_HIGH : USB_SPEED_FULL;
+ gadget->is_dualspeed=1;
-+
++
+ retval=driver->bind( gadget );
-+
++
+ DBG(2, "bind complete with retval = %d\n",retval);
+ if (retval) {
+ ERR("bind to driver %s failed --> %d\n",
@@ -205411,16 +206545,16 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ dev_context->driver = NULL;
+ return(retval);
+ }
-+
++
+ DBG(2, "bind complete 2\n");
-+
-+ musb_enable();
++
++ musb_enable();
+ } while (0);
+ return 0;
+}
+
+/**
-+ * Unregister the gadget driver. Used by the gadget when
++ * Unregister the gadget driver. Used by the gadget when
+ * unregistering themselves from the controller.
+ *
+ * @param driver the gadget driver to unregister
@@ -205428,22 +206562,22 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
+{
+ DBG(4, "<==\n" );
-+
-+
-+ INFO("unregistering gadget %s\n", driver->function);
-+
++
++
++ INFO("unregistering gadget %s\n", driver->function);
++
+ /* shall I flush/abort the pending requests?? */
+ if ( dev_context->driver ) {
-+ struct usb_gadget *gadget=&dev_context->gadget;
-+ driver->unbind( gadget );
-+
++ struct usb_gadget *gadget=&dev_context->gadget;
++ driver->unbind( gadget );
++
+ gadget->dev.driver = NULL;
+ dev_context->driver = NULL;
+ device_del(&gadget->dev);
-+
++
+ DBG(4, "unregister driver\n" );
+ }
-+
++
+ return 0;
+}
+
@@ -205462,7 +206596,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+ DECLARE_COMPLETION(done);
+ if (!dev_context)
+ return -ENODEV;
-+
++
+ dev_context->done = &done;
+ nomadik_release_udc();
+ return 0;
@@ -205470,9 +206604,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.c ../new/linux-2.6.20/
+
+EXPORT_SYMBOL(usb_gadget_register_driver);
+EXPORT_SYMBOL(usb_gadget_unregister_driver);
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h
---- linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h 2008-09-17 13:23:34.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h
@@ -0,0 +1,663 @@
+/*
+ * linux/drivers/usb/nomadik/nomadik_udc.h
@@ -205491,7 +206624,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define DMA_ADDR_INVALID (~(dma_addr_t)0)
@@ -205522,7 +206655,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/
+
+
+/*
-+ * MUSBMHDRC Register map
++ * MUSBMHDRC Register map
+ */
+
+/* Common USB registers */
@@ -205532,11 +206665,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/
+
+#define MUSB_O_HDRC_INTRTX 0x02 /* 16-bit */
+#define MUSB_O_HDRC_INTRRX 0x04
-+#define MUSB_O_HDRC_INTRTXE 0x06
-+#define MUSB_O_HDRC_INTRRXE 0x08
++#define MUSB_O_HDRC_INTRTXE 0x06
++#define MUSB_O_HDRC_INTRRXE 0x08
+#define MUSB_O_HDRC_INTRUSB 0x0A /* 8 bit */
+#define MUSB_O_HDRC_INTRUSBE 0x0B /* 8 bit */
-+#define MUSB_O_HDRC_FRAME 0x0C
++#define MUSB_O_HDRC_FRAME 0x0C
+#define MUSB_O_HDRC_INDEX 0x0E /* 8 bit */
+#define MUSB_O_HDRC_TESTMODE 0x0F /* 8 bit */
+
@@ -205591,7 +206724,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/
+
+/* POWER */
+
-+#define MUSB_M_POWER_ISOUPDATE 0x80
++#define MUSB_M_POWER_ISOUPDATE 0x80
+#define MUSB_M_POWER_SOFTCONN 0x40
+#define MUSB_M_POWER_HSENAB 0x20
+#define MUSB_M_POWER_HSMODE 0x10
@@ -205605,7 +206738,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/
+#define MUSB_M_INTR_RESUME 0x02
+#define MUSB_M_INTR_RESET 0x04
+#define MUSB_M_INTR_BABBLE 0x04
-+#define MUSB_M_INTR_SOF 0x08
++#define MUSB_M_INTR_SOF 0x08
+#define MUSB_M_INTR_CONNECT 0x10
+#define MUSB_M_INTR_DISCONNECT 0x20
+#define MUSB_M_INTR_SESSREQ 0x40
@@ -205613,7 +206746,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/
+#define MUSB_M_INTR_EP0 0x01 /* FOR EP0 INTERRUPT */
+
+/* DEVCTL */
-+#define MUSB_M_DEVCTL_BDEVICE 0x80
++#define MUSB_M_DEVCTL_BDEVICE 0x80
+#define MUSB_M_DEVCTL_FSDEV 0x40
+#define MUSB_M_DEVCTL_LSDEV 0x20
+#define MUSB_M_DEVCTL_VBUS 0x18
@@ -205828,7 +206961,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/
+ u8 ackwait;
+ u8 dma_channel;
+ u8 is_tx;
-+ u8 end_number;
++ u8 end_number;
+ u16 dma_counter;
+ int lch;
+ struct nomadik_udc *udc;
@@ -205842,7 +206975,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/
+ u8 end_number;
+ unsigned dma_bytes;
+ unsigned mapped:1;
-+};
++};
+
+struct nomadik_udc{
+ spinlock_t lock;
@@ -205906,14 +207039,14 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/
+ DBG(4, "WRITE8(%p, %x, %02x)\n", base_ptr, offset, data); \
+ wmb(); \
+ *(volatile uint8_t*)((unsigned long)base_ptr + offset) = data; \
-+ }
++ }
+
+#undef MUSB_WRITE16
+#define MUSB_WRITE16(base_ptr, offset, data) { \
+ DBG(4, "WRITE16(%p, %x, %04x)\n", base_ptr, offset, data); \
+ wmb(); \
+ *(volatile uint16_t*)((unsigned long)base_ptr + offset) = data; \
-+ }
++ }
+
+
+#undef MUSB_WRITE32
@@ -205921,7 +207054,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/
+ DBG(4, "WRITE32(%p, %x, %08x)\n", base_ptr, offset, data); \
+ wmb(); \
+ *(volatile uint32_t*)((unsigned long)base_ptr + offset) = data; \
-+ }
++ }
+
+#define MUSB_SELECTEND(base_ptr, end) \
+ MUSB_WRITE8(base_ptr, MUSB_O_HDRC_INDEX, end)
@@ -205963,7 +207096,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/
+#define EP_SPIN_LOCK(_ep) spin_lock( &(( struct nomadik_ep *)(_ep))->lock )
+#define EP_SPIN_UNLOCK(_ep) spin_unlock( &(( struct nomadik_ep *)(_ep))->lock )
+
-+#define EP_SPIN_LOCK_IRQSAVE(_ep, _flags) spin_lock_irqsave(&(( struct nomadik_ep *)(_ep))->lock, _flags )
++#define EP_SPIN_LOCK_IRQSAVE(_ep, _flags) spin_lock_irqsave(&(( struct nomadik_ep *)(_ep))->lock, _flags )
+#define EP_SPIN_UNLOCK_IRQRESTORE(_ep, _flags) spin_unlock_irqrestore( &(( struct nomadik_ep *)(_ep))->lock, _flags)
+
+#ifdef USE_DMA
@@ -206064,13 +207197,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/
+void service_tx_status_request(const struct usb_ctrlrequest *control_request_ptr);
+int service_zero_data_request(struct nomadik_udc* dev_context, struct usb_ctrlrequest *control_request_ptr);
+
-+/*
++/*
+ * Gadget FIFO Operations
+ */
+int nomadik_ep_fifo_status(struct usb_ep *ep);
+void nomadik_ep_fifo_flush(struct usb_ep *ep);
+void udc_unload_fifo(const uint8_t* base_ptr, uint8_t bEnd, uint16_t wcount, uint8_t* dest_ptr);
-+void udc_load_fifo(const uint8_t* base_ptr, uint8_t bEnd, uint16_t wcount, const uint8_t* pSource);
++void udc_load_fifo(const uint8_t* base_ptr, uint8_t bEnd, uint16_t wcount, const uint8_t* pSource);
+
+/*
+ * Gadget Queue Operations
@@ -206134,12 +207267,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/nomadik_udc.h ../new/linux-2.6.20/
+
+static struct {
+ spinlock_t lock;
-+ struct list_head req_list;
++ struct list_head req_list;
+} udc_scheduler_queue;
+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/otg_func.c ../new/linux-2.6.20/drivers/usb/nomadik/otg_func.c
---- linux-2.6.20/drivers/usb/nomadik/otg_func.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/otg_func.c 2008-09-17 13:23:34.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/otg_func.c
@@ -0,0 +1,196 @@
+/*
+ * linux/drivers/usb/nomadik/otg_func.c
@@ -206158,11 +207290,11 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/otg_func.c ../new/linux-2.6.20/dri
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/**************************************************
-+ OTG - HNP and SRP
++ OTG - HNP and SRP
+**************************************************/
+
+#include <linux/delay.h>
@@ -206186,7 +207318,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/otg_func.c ../new/linux-2.6.20/dri
+extern uint8_t b_hnp_suspend;
+extern uint8_t b_hnp_init;
+extern void otg_disconnect(MGC_LinuxCd *pThis);
-+extern void udc_disconnect_isr(void);
++extern void udc_disconnect_isr(void);
+extern void del_timer_func(void);
+uint8_t htd;
+uint8_t host_a_idle=0;
@@ -206214,7 +207346,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/otg_func.c ../new/linux-2.6.20/dri
+
+void srp_initiate(void)
+{
-+ uint8_t* pBase = (uint8_t*)udc_address->pRegs;
++ uint8_t* pBase = (uint8_t*)udc_address->pRegs;
+ uint8_t devctl=MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, (devctl|1));
+
@@ -206229,13 +207361,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/otg_func.c ../new/linux-2.6.20/dri
+ int temp = 0;
+
+ b_hnp_init=1;
-+
++
+ if(result<0)
+ {
+ printk("hnp feature failed \n");
+ return ;
+ }
-+
++
+ temp = MGC_Read8(pBase, MGC_O_HDRC_POWER);
+ MGC_Write8(pBase, MGC_O_HDRC_POWER, temp | MGC_M_POWER_ENSUSPEND);
+
@@ -206249,7 +207381,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/otg_func.c ../new/linux-2.6.20/dri
+ devctl = MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
+ devctl = MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
+
-+ printk("devtcl after suspend %x\n",devctl);
++ printk("devtcl after suspend %x\n",devctl);
+ printk(" hnp_initiate \n ");
+
+}
@@ -206258,18 +207390,18 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/otg_func.c ../new/linux-2.6.20/dri
+void driver_change_mode_handler(uint8_t role)
+{
+ uint8_t* pBase = (uint8_t*)udc_address->pRegs;
-+ uint8_t linestate = 0;
++ uint8_t linestate = 0;
+ uint8_t devctl = MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
+ uint8_t power = 0;
+
+ /*1=Device to Host), 2= Host to Device */
+ if ( role == 1){
+ printk ("Device to Host \n");
-+
++
+ MGC_HdrcReadUlpiReg(udc_address, 0x15, &linestate);
+ printk("line state %x\n",linestate);
+ printk("timer deleted \n");
-+
++
+ del_timer_func();
+ devctl = MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
+
@@ -206282,29 +207414,29 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/otg_func.c ../new/linux-2.6.20/dri
+ mgc_hdrc_enable(udc_address);
+
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, devctl | 0x01);
-+ devctl = MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
++ devctl = MGC_Read8(pBase, MGC_O_HDRC_DEVCTL);
+ printk("devtcl setting host request and session %x\n",devctl);
+
-+
++
+ MGC_HdrcReadUlpiReg(udc_address, 0x15, &linestate);
+ printk("line state end %x\n",linestate);
-+ role=0;
++ role=0;
+ }
-+ /* Host to Device */
++ /* Host to Device */
+ else
-+ {
++ {
+ uint8_t power;
+ printk ("Host to Device\n");
-+
++
+ MGC_HdrcReadUlpiReg(udc_address, 0x13, &htd);
+ printk("temp in host to device%x \n",htd);
-+
++
+ del_timer_func();
+ MGC_Write8(pBase, MGC_O_HDRC_DEVCTL, devctl & ~MGC_M_DEVCTL_HR);
+ power=MGC_Read8(pBase, MGC_O_HDRC_POWER);
+ MGC_Write8(pBase, MGC_O_HDRC_POWER,power | MGC_M_POWER_SOFTCONN );
+ del_timer_func();
-+
++
+ MGC_HdrcReadUlpiReg(udc_address, 0x13, &htd);
+ printk("temp in host to device end%x \n",htd);
+
@@ -206337,9 +207469,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/otg_func.c ../new/linux-2.6.20/dri
+
+
+
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/otg_pwm.c ../new/linux-2.6.20/drivers/usb/nomadik/otg_pwm.c
---- linux-2.6.20/drivers/usb/nomadik/otg_pwm.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/otg_pwm.c 2008-08-08 19:15:35.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/otg_pwm.c
@@ -0,0 +1,46 @@
+/*
+ * linux/drivers/usb/nomadik/otg_pwm.c
@@ -206358,7 +207489,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/otg_pwm.c ../new/linux-2.6.20/driv
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/***********************************
@@ -206382,14 +207513,13 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/otg_pwm.c ../new/linux-2.6.20/driv
+{
+ DBG(2, "<==\n");
+ printk(" otg_wakeup invoked \n");
-+
++
+ nomadik_gpio_altfuncenable(GPIO_ALT_USB_OTG,"OTG");
+
+ direct_bus_init();
+}
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/plat_arc.h ../new/linux-2.6.20/drivers/usb/nomadik/plat_arc.h
---- linux-2.6.20/drivers/usb/nomadik/plat_arc.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/plat_arc.h 2008-07-28 15:21:12.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/plat_arc.h
@@ -0,0 +1,92 @@
+/*
+ * linux/drivers/usb/nomadik/plat_arc.h
@@ -206408,7 +207538,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/plat_arc.h ../new/linux-2.6.20/dri
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __MUSB_LINUX_PLATFORM_ARCH_H__
@@ -206483,9 +207613,8 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/plat_arc.h ../new/linux-2.6.20/dri
+}
+
+#endif /* multiple inclusion protection */
-diff -Nauprw linux-2.6.20/drivers/usb/nomadik/plat_cnf.h ../new/linux-2.6.20/drivers/usb/nomadik/plat_cnf.h
---- linux-2.6.20/drivers/usb/nomadik/plat_cnf.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/usb/nomadik/plat_cnf.h 2008-08-08 19:15:36.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/usb/nomadik/plat_cnf.h
@@ -0,0 +1,208 @@
+/*
+ * usb/nomadik/plat_cnf.h
@@ -206504,22 +207633,22 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/plat_cnf.h ../new/linux-2.6.20/dri
+ *
+ * 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
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __MUSB_LINUX_CONFIG_H__
+#define __MUSB_LINUX_CONFIG_H__
+
+/* MUSB_AHB_ID is now passed as argument */
-+
++
+#ifdef MUSB_STATIC_CONFIG
+
+/*
-+ * Get core configuration from a header converted (by cfg_conv)
++ * Get core configuration from a header converted (by cfg_conv)
+ * from the Verilog config file generated by the core config utility
+ */
+/** Core configuration */
-+#ifdef MUSB_HDR_CCNF_FILE
++#ifdef MUSB_HDR_CCNF_FILE
+#include CONFIG_USB_INVENTRA_MUSB_HDR_CCNF_FILE
+#else
+
@@ -206527,12 +207656,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/plat_cnf.h ../new/linux-2.6.20/dri
+#define MUSB_C_NUM_EPS 16
+#endif
+
-+/*
++/*
+ * Handle dynamic FIFO sizing in a way that doesn't create more code
+ * (but could make your brain hurt)
+ */
+#ifdef MUSB_C_DYNFIFO_DEF
-+#define MGC_DFIFO_TOTAL (1 << (MUSB_C_RAM_BITS + 2))
++#define MGC_DFIFO_TOTAL (1 << (MUSB_C_RAM_BITS + 2))
+
+/* values for the SZ field */
+#define MGC_BLK_SZ 6 /* 512 bytes */
@@ -206551,7 +207680,7 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/plat_cnf.h ../new/linux-2.6.20/dri
+#define MGC_ISO_RX_SZ 7 /* 1024 bytes for normal-bandwidth */
+#endif
+
-+/*
++/*
+ * Define desires by subtracting all, so impossible ones become negatives
+ */
+#if MUSB_C_NUM_EPS > 2
@@ -206563,12 +207692,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/plat_cnf.h ../new/linux-2.6.20/dri
+/* no good; try with a single-buffered bulk */
+#undef MGC_BLK_DB
+#define MGC_BLK_DB 0
-+#undef MGC_DFIFO_ISO_TX
++#undef MGC_DFIFO_ISO_TX
+#define MGC_DFIFO_ISO_TX (MGC_DFIFO_TOTAL - (1 << (MGC_ISO_TX_SZ+4)) - (1 << (MGC_BLK_SZ+3+MGC_BLK_DB)) - (1 << (MGC_CTL_SZ+3)) - ((MUSB_C_NUM_EPS - 3) * (1 << (MGC_ALL_SZ+3))))
+#endif
+#if MGC_DFIFO_ISO_TX < 0
+/* still no good; try single-buffered isoch Tx */
-+#undef MGC_DFIFO_ISO_TX
++#undef MGC_DFIFO_ISO_TX
+#undef MGC_ISO_TX_DB
+#define MGC_ISO_TX_DB 0
+#define MGC_DFIFO_ISO_TX (MGC_DFIFO_TOTAL - (1 << (MGC_ISO_TX_SZ+3)) - (1 << (MGC_BLK_SZ+3+MGC_BLK_DB)) - (1 << (MGC_CTL_SZ+3)) - ((MUSB_C_NUM_EPS - 3) * (1 << (MGC_ALL_SZ+3))))
@@ -206583,12 +207712,12 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/plat_cnf.h ../new/linux-2.6.20/dri
+/* no good; try with a single-buffered bulk */
+#undef MGC_BLK_DB
+#define MGC_BLK_DB 0
-+#undef MGC_DFIFO_ISO_RX
++#undef MGC_DFIFO_ISO_RX
+#define MGC_DFIFO_ISO_RX (MGC_DFIFO_TOTAL - MGC_DFIFO_ISO_TX_SIZE - (1 << (MGC_ISO_RX_SZ+4)) - (1 << (MGC_BLK_SZ+3+MGC_BLK_DB)) - (1 << (MGC_CTL_SZ+3)) - ((MUSB_C_NUM_EPS - 3) * (1 << (MGC_ALL_SZ+3))))
+#endif
+#if MGC_DFIFO_ISO_RX < 0
+/* still no good; try single-buffered isoch Rx */
-+#undef MGC_DFIFO_ISO_RX
++#undef MGC_DFIFO_ISO_RX
+#undef MGC_ISO_RX_DB
+#define MGC_ISO_RX_DB 0
+#define MGC_DFIFO_ISO_RX (MGC_DFIFO_TOTAL - MGC_DFIFO_ISO_TX_SIZE - (1 << (MGC_ISO_RX_SZ+3)) - (1 << (MGC_BLK_SZ+3+MGC_BLK_DB)) - (1 << (MGC_CTL_SZ+3)) - ((MUSB_C_NUM_EPS - 3) * (1 << (MGC_ALL_SZ+3))))
@@ -206695,10 +207824,25 @@ diff -Nauprw linux-2.6.20/drivers/usb/nomadik/plat_cnf.h ../new/linux-2.6.20/dri
+extern MUSB_LinuxController MUSB_aLinuxController[];
+
+#endif /* multiple inclusion protection */
-diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/video/amba-clcd.c
---- linux-2.6.20/drivers/video/amba-clcd.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/amba-clcd.c 2008-11-19 16:47:04.000000000 +0530
-@@ -9,6 +9,10 @@
+--- linux-2.6.20.orig/drivers/video/Makefile
++++ linux-2.6.20/drivers/video/Makefile
+@@ -28,10 +28,11 @@ obj-$(CONFIG_FB_CLPS711X) += clp
+ obj-$(CONFIG_FB_CYBER) += cyberfb.o
+ obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o
+ obj-$(CONFIG_FB_PM2) += pm2fb.o
+ obj-$(CONFIG_FB_PM3) += pm3fb.o
+
++obj-$(CONFIG_FB_NOMADIK_ACCLN) += nomadik/
+ obj-$(CONFIG_FB_MATROX) += matrox/
+ obj-$(CONFIG_FB_RIVA) += riva/ vgastate.o
+ obj-$(CONFIG_FB_NVIDIA) += nvidia/
+ obj-$(CONFIG_FB_ATY) += aty/ macmodes.o
+ obj-$(CONFIG_FB_ATY128) += aty/ macmodes.o
+--- linux-2.6.20.orig/drivers/video/amba-clcd.c
++++ linux-2.6.20/drivers/video/amba-clcd.c
+@@ -7,10 +7,14 @@
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file COPYING in the main directory of this archive
* for more details.
*
* ARM PrimeCell PL110 Color LCD Controller
@@ -206709,7 +207853,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
*/
#include <linux/module.h>
#include <linux/kernel.h>
-@@ -24,18 +28,28 @@
+ #include <linux/errno.h>
+ #include <linux/string.h>
+@@ -22,22 +26,32 @@
+ #include <linux/ioport.h>
+ #include <linux/list.h>
#include <linux/amba/bus.h>
#include <linux/amba/clcd.h>
#include <linux/clk.h>
@@ -206744,7 +207892,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
static inline void clcdfb_sleep(unsigned int ms)
{
if (in_atomic()) {
-@@ -117,6 +131,7 @@ clcdfb_set_bitfields(struct clcd_fb *fb,
+ mdelay(ms);
+ } else {
+@@ -115,10 +129,11 @@ clcdfb_set_bitfields(struct clcd_fb *fb,
+ {
+ int ret = 0;
memset(&var->transp, 0, sizeof(var->transp));
@@ -206752,7 +207904,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
var->red.msb_right = 0;
var->green.msb_right = 0;
var->blue.msb_right = 0;
-@@ -140,9 +155,12 @@ clcdfb_set_bitfields(struct clcd_fb *fb,
+
+ switch (var->bits_per_pixel) {
+@@ -138,13 +153,16 @@ clcdfb_set_bitfields(struct clcd_fb *fb,
+ var->blue.length = 5;
+ /*
* Green length can be 5 or 6 depending whether
* we're operating in RGB555 or RGB565 mode.
*/
@@ -206767,7 +207923,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
case 32:
if (fb->panel->cntl & CNTL_LCDTFT) {
var->red.length = 8;
-@@ -161,14 +179,23 @@ clcdfb_set_bitfields(struct clcd_fb *fb,
+ var->green.length = 8;
+ var->blue.length = 8;
+@@ -159,18 +177,27 @@ clcdfb_set_bitfields(struct clcd_fb *fb,
+ * >= 16bpp displays have separate colour component bitfields
+ * encoded in the pixel data. Calculate their position from
* the bitfield length defined above.
*/
if (ret == 0 && var->bits_per_pixel >= 16) {
@@ -206792,7 +207952,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
}
}
-@@ -207,6 +234,7 @@ static int clcdfb_set_par(struct fb_info
+ return ret;
+ }
+@@ -205,10 +232,11 @@ static int clcdfb_set_par(struct fb_info
+ if (fb->fb.var.bits_per_pixel <= 8)
+ fb->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR;
else
fb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
@@ -206800,7 +207964,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
fb->board->decode(fb, &regs);
clcdfb_disable(fb);
-@@ -244,10 +272,6 @@ static inline u32 convert_bitfield(int v
+
+ writel(regs.tim0, fb->regs + CLCD_TIM0);
+@@ -242,14 +270,10 @@ static inline u32 convert_bitfield(int v
+ unsigned int mask = (1 << bf->length) - 1;
+
return (val >> (16 - bf->length) & mask) << bf->offset;
}
@@ -206811,7 +207979,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
static int
clcdfb_setcolreg(unsigned int regno, unsigned int red, unsigned int green,
unsigned int blue, unsigned int transp, struct fb_info *info)
-@@ -263,11 +287,19 @@ clcdfb_setcolreg(unsigned int regno, uns
+ {
+ struct clcd_fb *fb = to_clcd(info);
+@@ -261,15 +285,23 @@ clcdfb_setcolreg(unsigned int regno, uns
+ convert_bitfield(red, &fb->fb.var.red);
+
if (fb->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR && regno < 256) {
int hw_reg = CLCD_PALETTE + ((regno * 2) & ~3);
u32 val, mask, newval;
@@ -206833,7 +208005,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
/*
* 3.2.11: if we're configured for big endian
* byte order, the palette entries are swapped.
-@@ -282,14 +314,24 @@ clcdfb_setcolreg(unsigned int regno, uns
+ */
+ if (fb->clcd_cntl & CNTL_BEBO)
+@@ -280,27 +312,38 @@ clcdfb_setcolreg(unsigned int regno, uns
+ mask = 0x0000ffff;
+ } else {
mask = 0xffff0000;
}
@@ -206859,7 +208035,8 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
* Blank the screen if blank_mode != 0, else unblank. If blank == NULL
* then the caller blanks by setting the CLUT (Color Look Up Table) to all
* black. Return 0 if blanking succeeded, != 0 if un-/blanking failed due
-@@ -298,7 +340,8 @@ clcdfb_setcolreg(unsigned int regno, uns
+ * to e.g. a video mode which doesn't support it. Implements VESA suspend
+ * and powerdown modes on hardware that supports disabling hsync/vsync:
* blank_mode == 2: suspend vsync
* blank_mode == 3: suspend hsync
* blank_mode == 4: powerdown
@@ -206869,7 +208046,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
static int clcdfb_blank(int blank_mode, struct fb_info *info)
{
struct clcd_fb *fb = to_clcd(info);
-@@ -311,8 +354,7 @@ static int clcdfb_blank(int blank_mode,
+
+ if (blank_mode != 0) {
+@@ -309,12 +352,11 @@ static int clcdfb_blank(int blank_mode,
+ clcdfb_enable(fb, fb->clcd_cntl);
+ }
return 0;
}
@@ -206879,7 +208060,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
{
struct clcd_fb *fb = to_clcd(info);
unsigned long len, off = vma->vm_pgoff << PAGE_SHIFT;
-@@ -363,7 +405,7 @@ static int clcdfb_register(struct clcd_f
+ int ret = -EINVAL;
+
+@@ -361,11 +403,11 @@ static int clcdfb_register(struct clcd_f
+
+ fb->fb.fbops = &clcdfb_ops;
fb->fb.flags = FBINFO_FLAG_DEFAULT;
fb->fb.pseudo_palette = fb->cmap;
@@ -206888,7 +208073,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
fb->fb.fix.type = FB_TYPE_PACKED_PIXELS;
fb->fb.fix.type_aux = 0;
fb->fb.fix.xpanstep = 0;
-@@ -432,6 +474,26 @@ static int clcdfb_register(struct clcd_f
+ fb->fb.fix.ypanstep = 0;
+ fb->fb.fix.ywrapstep = 0;
+@@ -430,10 +472,30 @@ static int clcdfb_register(struct clcd_f
+ clk_put(fb->clk);
+ out:
return ret;
}
@@ -206915,7 +208104,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
static int clcdfb_probe(struct amba_device *dev, void *id)
{
struct clcd_board *board = dev->dev.platform_data;
-@@ -449,7 +511,8 @@ static int clcdfb_probe(struct amba_devi
+ struct clcd_fb *fb;
+ int ret;
+@@ -447,11 +509,12 @@ static int clcdfb_probe(struct amba_devi
+ goto out;
+ }
fb = kmalloc(sizeof(struct clcd_fb), GFP_KERNEL);
if (!fb) {
@@ -206925,7 +208118,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
ret = -ENOMEM;
goto free_region;
}
-@@ -481,6 +544,7 @@ static int clcdfb_remove(struct amba_dev
+ memset(fb, 0, sizeof(struct clcd_fb));
+
+@@ -479,10 +542,11 @@ static int clcdfb_probe(struct amba_devi
+
+ static int clcdfb_remove(struct amba_device *dev)
{
struct clcd_fb *fb = amba_get_drvdata(dev);
@@ -206933,7 +208130,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
amba_set_drvdata(dev, NULL);
clcdfb_disable(fb);
-@@ -499,8 +563,8 @@ static int clcdfb_remove(struct amba_dev
+ unregister_framebuffer(&fb->fb);
+ iounmap(fb->regs);
+@@ -497,12 +561,12 @@ static int clcdfb_remove(struct amba_dev
+ return 0;
+ }
static struct amba_id clcdfb_id_table[] = {
{
@@ -206944,7 +208145,11 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
},
{ 0, 0 },
};
-@@ -512,6 +576,11 @@ static struct amba_driver clcd_driver =
+
+ static struct amba_driver clcd_driver = {
+@@ -510,10 +574,15 @@ static struct amba_driver clcd_driver =
+ .name = "clcd-pl11x",
+ },
.probe = clcdfb_probe,
.remove = clcdfb_remove,
.id_table = clcdfb_id_table,
@@ -206956,10 +208161,13 @@ diff -Nauprw linux-2.6.20/drivers/video/amba-clcd.c ../new/linux-2.6.20/drivers/
};
static int __init amba_clcdfb_init(void)
-diff -Nauprw linux-2.6.20/drivers/video/fbmem.c ../new/linux-2.6.20/drivers/video/fbmem.c
---- linux-2.6.20/drivers/video/fbmem.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/fbmem.c 2007-11-21 11:51:41.000000000 +0530
-@@ -234,7 +234,6 @@ static void fb_set_logo_directpalette(st
+ {
+ if (fb_get_options("ambafb", NULL))
+--- linux-2.6.20.orig/drivers/video/fbmem.c
++++ linux-2.6.20/drivers/video/fbmem.c
+@@ -232,11 +232,10 @@ static void fb_set_logo_directpalette(st
+ const struct linux_logo *logo,
+ u32 *palette)
{
int redshift, greenshift, blueshift;
int i;
@@ -206967,20 +208175,28 @@ diff -Nauprw linux-2.6.20/drivers/video/fbmem.c ../new/linux-2.6.20/drivers/vide
redshift = info->var.red.offset;
greenshift = info->var.green.offset;
blueshift = info->var.blue.offset;
-diff -Nauprw linux-2.6.20/drivers/video/Makefile ../new/linux-2.6.20/drivers/video/Makefile
---- linux-2.6.20/drivers/video/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/Makefile 2007-11-21 11:51:42.000000000 +0530
-@@ -30,6 +30,7 @@ obj-$(CONFIG_FB_CYBER2000) += cyb
- obj-$(CONFIG_FB_PM2) += pm2fb.o
- obj-$(CONFIG_FB_PM3) += pm3fb.o
-+obj-$(CONFIG_FB_NOMADIK_ACCLN) += nomadik/
- obj-$(CONFIG_FB_MATROX) += matrox/
- obj-$(CONFIG_FB_RIVA) += riva/ vgastate.o
- obj-$(CONFIG_FB_NVIDIA) += nvidia/
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/debug.h ../new/linux-2.6.20/drivers/video/nomadik/hcl/debug.h
---- linux-2.6.20/drivers/video/nomadik/hcl/debug.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/hcl/debug.h 2007-11-21 11:51:42.000000000 +0530
+ for (i = 32; i < logo->clutsize; i++)
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/Makefile
+@@ -0,0 +1,15 @@
++#
++# Makefile for the Nomadik framebuffer driver
++#
++ifdef CONFIG_FB_NOMADIK_ACCLN
++CFLAGS += -D__STN_8815 -D__RELEASE
++
++obj-$(CONFIG_FB_NOMADIK_ACCLN) += nomadikfb.o
++#obj-m += nomadikfb.ko
++
++endif
++
++nomadikfb-y := sga_main.o sga_ioctlfns.o hcl/sga.o hcl/sga_irq.o
++
++
++nomadikfb-objs := $(nomadikfb-y)
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/hcl/debug.h
@@ -0,0 +1,313 @@
+/******************************************************************************
+ * Copyright 2007, STMicroelectronics
@@ -207029,10 +208245,10 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/debug.h ../new/linux-2.6.20/
+#define DBG_HCL_MAJOR_ID 2
+#define DBG_HCL_MINOR_ID 0
+
-+
++
+/* Store a submitter ID, unique for each HCL. */
+
-+typedef enum
++typedef enum
+{
+ UNKNOWN_HCL_DBG_ID,
+ APPLI_DBG_ID,
@@ -207075,7 +208291,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/debug.h ../new/linux-2.6.20/
+ HASH_HCL_DBG_ID,
+ RNG_HCL_DBG_ID,
+ MSHC_HCL_DBG_ID,
-+ SKE_HCL_DBG_ID,
++ SKE_HCL_DBG_ID,
+ SGA_HCL_DBG_ID,
+ CRYP_HCL_DBG_ID,
+ HPI_HCL_DBG_ID
@@ -207089,7 +208305,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/debug.h ../new/linux-2.6.20/
+#define DEBUG_LEVEL4 DBGL_HCL_DEV
+
+
-+typedef enum
++typedef enum
+{
+ DBGL_OFF = 0,
+ DBGL_PUBLIC_FUNC_IN = MASK_BIT0,
@@ -207126,13 +208342,13 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/debug.h ../new/linux-2.6.20/
+} t_dbg_level;
+
+
-+
-+#ifdef __DEBUG
-+
++
++#ifdef __DEBUG
++
+/*--------------------------------------------------------------------------*
+ * Macro *
+ *--------------------------------------------------------------------------*/
-+
++
+/* Begin of Private definitions */
+
+/*
@@ -207167,22 +208383,22 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/debug.h ../new/linux-2.6.20/
+#define DBGEXIT1(cr,ch,p1) \
+ ((DBGL_PUBLIC_FUNC_OUT & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "Exiting",(unsigned long)(p1), 0, 0, 0, 0, 0,cr): \
-+ (0)
-+
++ (0)
++
+#define DBGEXIT2(cr,ch,p1,p2) \
+ ((DBGL_PUBLIC_FUNC_OUT & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "Exiting",(unsigned long)(p1), (unsigned long)(p2), 0, 0, 0, 0,cr): \
-+ (0)
-+
++ (0)
++
+#define DBGEXIT3(cr,ch,p1,p2,p3) \
+ ((DBGL_PUBLIC_FUNC_OUT & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "Exiting",(unsigned long)(p1), (unsigned long)(p2), (unsigned long)(p3), 0, 0, 0,cr): \
+ (0)
-+
++
+#define DBGEXIT4(cr,ch,p1,p2,p3,p4) \
+ ((DBGL_PUBLIC_FUNC_OUT & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "Exiting",(unsigned long)(p1), (unsigned long)(p2), (unsigned long)(p3), (unsigned long)(p4), 0, 0,cr): \
-+ (0)
++ (0)
+
+
+#define DBGEXIT5(cr,ch,p1,p2,p3,p4,p5) \
@@ -207193,35 +208409,35 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/debug.h ../new/linux-2.6.20/
+#define DBGEXIT6(cr,ch,p1,p2,p3,p4,p5,p6) \
+ ((DBGL_PUBLIC_FUNC_OUT & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "Exiting",(unsigned long)(p1), (unsigned long)(p2), (unsigned long)(p3), (unsigned long)(p4), (unsigned long)(p5), (unsigned long)(p6),cr): \
-+ (0)
-+
++ (0)
++
+/* Enter macro's */
+
+#define DBGENTER0() \
+ ((DBGL_PUBLIC_FUNC_IN & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, 0, "Entering Function",0, 0, 0, 0, 0, 0, 0): \
-+ (0)
++ (0)
+
+#define DBGENTER1(ch,p1) \
+ ((DBGL_PUBLIC_FUNC_IN & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "Entering Function",(unsigned long)(p1), 0, 0, 0, 0, 0,0): \
+ (0)
-+
++
+#define DBGENTER2(ch,p1,p2) \
+ ((DBGL_PUBLIC_FUNC_IN & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "Entering Function",(unsigned long)(p1), (unsigned long)(p2), 0, 0, 0, 0, 0): \
+ (0)
-+
++
+#define DBGENTER3(ch,p1,p2,p3) \
+ ((DBGL_PUBLIC_FUNC_IN & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "Entering Function",(unsigned long)(p1), (unsigned long)(p2), (unsigned long)(p3), 0, 0, 0, 0): \
+ (0)
-+
++
+#define DBGENTER4(ch,p1,p2,p3,p4) \
+ ((DBGL_PUBLIC_FUNC_IN & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "Entering Function",(unsigned long)(p1), (unsigned long)(p2), (unsigned long)(p3), (unsigned long)(p4), 0, 0, 0):\
-+ (0)
-+
++ (0)
++
+#define DBGENTER5(ch,p1,p2,p3,p4,p5) \
+ ((DBGL_PUBLIC_FUNC_IN & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "Entering Function",(unsigned long)(p1), (unsigned long)(p2), (unsigned long)(p3), (unsigned long)(p4), (unsigned long)(p5), 0, 0):\
@@ -207230,7 +208446,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/debug.h ../new/linux-2.6.20/
+#define DBGENTER6(ch,p1,p2,p3,p4,p5,p6) \
+ ((DBGL_PUBLIC_FUNC_IN & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "Entering Function",(unsigned long)(p1), (unsigned long)(p2), (unsigned long)(p3), (unsigned long)(p4), (unsigned long)(p5), (unsigned long)(p6), 0):\
-+ (0)
++ (0)
+
+
+#define DBGEXIT DBGEXIT0
@@ -207240,44 +208456,44 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/debug.h ../new/linux-2.6.20/
+ ((dbg_level & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "",0, 0, 0, 0, 0, 0, 0): \
+ (0)
-+
++
+#define DBGPRINTHEX(dbg_level,ch, uint32) \
+ ((dbg_level & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "",(unsigned long)uint32, 0, 0, 0, 0, 0, 0): \
-+ (0)
++ (0)
+
+#define DBGPRINTDEC(dbg_level,ch, uint32) \
+ ((dbg_level & MY_DEBUG_LEVEL_VAR_NAME) != DBGL_OFF)? \
+ logMsg(MY_DEBUG_ID, DBGFUNCNAME, ch, "",(unsigned long)uint32, 0, 0, 0, 0, 0, 0): \
-+ (0)
++ (0)
+
+#endif /* __DEBUG */
+
+#ifdef __RELEASE
+
-+#define DBGEXIT(cr)
-+#define DBGEXIT0(cr)
-+#define DBGEXIT1(cr,ch,p1)
-+#define DBGEXIT2(cr,ch,p1,p2)
-+#define DBGEXIT3(cr,ch,p1,p2,p3)
-+#define DBGEXIT4(cr,ch,p1,p2,p3,p4)
-+#define DBGEXIT5(cr,ch,p1,p2,p3,p4,p5)
-+#define DBGEXIT6(cr,ch,p1,p2,p3,p4,p5,p6)
++#define DBGEXIT(cr)
++#define DBGEXIT0(cr)
++#define DBGEXIT1(cr,ch,p1)
++#define DBGEXIT2(cr,ch,p1,p2)
++#define DBGEXIT3(cr,ch,p1,p2,p3)
++#define DBGEXIT4(cr,ch,p1,p2,p3,p4)
++#define DBGEXIT5(cr,ch,p1,p2,p3,p4,p5)
++#define DBGEXIT6(cr,ch,p1,p2,p3,p4,p5,p6)
+
-+#define DBGENTER()
++#define DBGENTER()
+#define DBGENTER0()
-+#define DBGENTER1(ch,p1)
-+#define DBGENTER2(ch,p1,p2)
-+#define DBGENTER3(ch,p1,p2,p3)
-+#define DBGENTER4(ch,p1,p2,p3,p4)
-+#define DBGENTER5(ch,p1,p2,p3,p4,p5)
-+#define DBGENTER6(ch,p1,p2,p3,p4,p5,p6)
++#define DBGENTER1(ch,p1)
++#define DBGENTER2(ch,p1,p2)
++#define DBGENTER3(ch,p1,p2,p3)
++#define DBGENTER4(ch,p1,p2,p3,p4)
++#define DBGENTER5(ch,p1,p2,p3,p4,p5)
++#define DBGENTER6(ch,p1,p2,p3,p4,p5,p6)
+
+
+
-+#define DBGPRINT(dbg_level,dbg_string)
-+#define DBGPRINTHEX(dbg_level,dbg_string,uint32)
-+#define DBGPRINTDEC(dbg_level,dbg_string,uint32)
++#define DBGPRINT(dbg_level,dbg_string)
++#define DBGPRINTHEX(dbg_level,dbg_string,uint32)
++#define DBGPRINTDEC(dbg_level,dbg_string,uint32)
+
+#endif /* __RELEASE */
+
@@ -207295,9 +208511,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/debug.h ../new/linux-2.6.20/
+/* End of file - debug.h */
+
+
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h ../new/linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h
---- linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h
@@ -0,0 +1,286 @@
+/******************************************************************************
+ * Copyright 2007, STMicroelectronics
@@ -207317,14 +208532,14 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h ../new/linux-2.6.
+ * Description : Basic definitions
+ *
+ *****************************************************************************/
-+
++
+#ifndef _HCL_DEFS_H
+#define _HCL_DEFS_H
+
+#include "platform_os.h"
+
+/*-----------------------------------------------------------------------------
-+ * Type definition
++ * Type definition
+ *---------------------------------------------------------------------------*/
+typedef unsigned char t_uint8;
+typedef signed char t_sint8;
@@ -207343,7 +208558,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h ../new/linux-2.6.
+
+typedef unsigned int t_bitfield;
+
-+#if !defined(FALSE) && !defined(TRUE)
++#if !defined(FALSE) && !defined(TRUE)
+typedef enum {FALSE, TRUE} t_bool;
+#else /* FALSE & TRUE already defined */
+typedef enum {BOOL_FALSE, BOOL_TRUE} t_bool;
@@ -207360,10 +208575,10 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h ../new/linux-2.6.
+
+/*
+ * Global frequency enumuration
-+ * Added to avoid frequency conversion function which is required to convert one HCL
++ * Added to avoid frequency conversion function which is required to convert one HCL
+ * frequency enumuration values to another HCL frequency enumuration values.
+ */
-+
++
+typedef enum {
+ HCL_FREQ_NOT_SUPPORTED=-1,
+ HCL_FREQ_8KHZ ,
@@ -207398,7 +208613,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h ../new/linux-2.6.
+ HCL_FREQ_22MHZ,
+ HCL_FREQ_24MHZ,
+ HCL_FREQ_48MHZ
-+} t_frequency;
++} t_frequency;
+
+
+
@@ -207423,7 +208638,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h ../new/linux-2.6.
+
+
+/*-----------------------------------------------------------------------------
-+ * Keyword definition
++ * Keyword definition
+ *---------------------------------------------------------------------------*/
+#define PUBLIC /* Extern by default */
+#define PRIVATE static
@@ -207474,42 +208689,42 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h ../new/linux-2.6.
+#define MASK_NULL8 0x00
+#define MASK_NULL16 0x0000
+#define MASK_NULL32 0x00000000
-+#define MASK_ALL8 0xFF
-+#define MASK_ALL16 0xFFFF
++#define MASK_ALL8 0xFF
++#define MASK_ALL16 0xFFFF
+#define MASK_ALL32 0xFFFFFFFF
+
+#define MASK_BIT0 (1UL<<0)
-+#define MASK_BIT1 (1UL<<1)
-+#define MASK_BIT2 (1UL<<2)
-+#define MASK_BIT3 (1UL<<3)
-+#define MASK_BIT4 (1UL<<4)
-+#define MASK_BIT5 (1UL<<5)
-+#define MASK_BIT6 (1UL<<6)
-+#define MASK_BIT7 (1UL<<7)
-+#define MASK_BIT8 (1UL<<8)
-+#define MASK_BIT9 (1UL<<9)
-+#define MASK_BIT10 (1UL<<10)
-+#define MASK_BIT11 (1UL<<11)
-+#define MASK_BIT12 (1UL<<12)
-+#define MASK_BIT13 (1UL<<13)
-+#define MASK_BIT14 (1UL<<14)
-+#define MASK_BIT15 (1UL<<15)
-+#define MASK_BIT16 (1UL<<16)
-+#define MASK_BIT17 (1UL<<17)
-+#define MASK_BIT18 (1UL<<18)
-+#define MASK_BIT19 (1UL<<19)
-+#define MASK_BIT20 (1UL<<20)
++#define MASK_BIT1 (1UL<<1)
++#define MASK_BIT2 (1UL<<2)
++#define MASK_BIT3 (1UL<<3)
++#define MASK_BIT4 (1UL<<4)
++#define MASK_BIT5 (1UL<<5)
++#define MASK_BIT6 (1UL<<6)
++#define MASK_BIT7 (1UL<<7)
++#define MASK_BIT8 (1UL<<8)
++#define MASK_BIT9 (1UL<<9)
++#define MASK_BIT10 (1UL<<10)
++#define MASK_BIT11 (1UL<<11)
++#define MASK_BIT12 (1UL<<12)
++#define MASK_BIT13 (1UL<<13)
++#define MASK_BIT14 (1UL<<14)
++#define MASK_BIT15 (1UL<<15)
++#define MASK_BIT16 (1UL<<16)
++#define MASK_BIT17 (1UL<<17)
++#define MASK_BIT18 (1UL<<18)
++#define MASK_BIT19 (1UL<<19)
++#define MASK_BIT20 (1UL<<20)
+#define MASK_BIT21 (1UL<<21)
-+#define MASK_BIT22 (1UL<<22)
-+#define MASK_BIT23 (1UL<<23)
-+#define MASK_BIT24 (1UL<<24)
-+#define MASK_BIT25 (1UL<<25)
-+#define MASK_BIT26 (1UL<<26)
-+#define MASK_BIT27 (1UL<<27)
-+#define MASK_BIT28 (1UL<<28)
-+#define MASK_BIT29 (1UL<<29)
++#define MASK_BIT22 (1UL<<22)
++#define MASK_BIT23 (1UL<<23)
++#define MASK_BIT24 (1UL<<24)
++#define MASK_BIT25 (1UL<<25)
++#define MASK_BIT26 (1UL<<26)
++#define MASK_BIT27 (1UL<<27)
++#define MASK_BIT28 (1UL<<28)
++#define MASK_BIT29 (1UL<<29)
+#define MASK_BIT30 (1UL<<30)
-+#define MASK_BIT31 (1UL<<31)
++#define MASK_BIT31 (1UL<<31)
+
+/*-----------------------------------------------------------------------------
+ * quartet shift definition
@@ -207544,7 +208759,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h ../new/linux-2.6.
+#define MASK_BYTE1 (MASK_BYTE << SHIFT_BYTE1)
+#define MASK_BYTE2 (MASK_BYTE << SHIFT_BYTE2)
+#define MASK_BYTE3 (MASK_BYTE << SHIFT_BYTE3)
-+
++
+/*-----------------------------------------------------------------------------
+ * Halfword shift definition
+ *---------------------------------------------------------------------------*/
@@ -207559,8 +208774,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h ../new/linux-2.6.
+ *---------------------------------------------------------------------------*/
+ #define ONE_KB (1024)
+ #define ONE_MB (ONE_KB * ONE_KB)
-+
-+
++
++
+/*-----------------------------------------------------------------------------
+ * Address translation macros declaration
+ *---------------------------------------------------------------------------*/
@@ -207585,9 +208800,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/hcl_defs.h ../new/linux-2.6.
+#endif /* _HCL_DEFS_H */
+
+/* End of file hcl_defs.h */
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/platform_os.h ../new/linux-2.6.20/drivers/video/nomadik/hcl/platform_os.h
---- linux-2.6.20/drivers/video/nomadik/hcl/platform_os.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/hcl/platform_os.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/hcl/platform_os.h
@@ -0,0 +1,79 @@
+/******************************************************************************
+ * Copyright 2007, STMicroelectronics
@@ -207668,9 +208882,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/platform_os.h ../new/linux-2
+typedef signed long long t_sint64;
+
+#endif /* __INC_PLATFORM_OS_H */
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga.c ../new/linux-2.6.20/drivers/video/nomadik/hcl/sga.c
---- linux-2.6.20/drivers/video/nomadik/hcl/sga.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/hcl/sga.c 2008-10-06 12:06:22.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/hcl/sga.c
@@ -0,0 +1,3161 @@
+/******************************************************************************
+ * Copyright 2007, STMicroelectronics
@@ -210833,9 +212046,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga.c ../new/linux-2.6.20/dr
+ DBGEXIT0(SGA_OK);
+ return(SGA_OK);
+}
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga.h ../new/linux-2.6.20/drivers/video/nomadik/hcl/sga.h
---- linux-2.6.20/drivers/video/nomadik/hcl/sga.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/hcl/sga.h 2008-10-06 12:06:22.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/hcl/sga.h
@@ -0,0 +1,937 @@
+/******************************************************************************
+ * Copyright 2007, STMicroelectronics
@@ -210852,7 +212064,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga.h ../new/linux-2.6.20/dr
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
-+ * Description : Public Header file of Smart Graphic Accelarator (SGA) module
++ * Description : Public Header file of Smart Graphic Accelarator (SGA) module
+ *
+ *****************************************************************************/
+#ifndef _SGA_H_
@@ -211774,9 +212986,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga.h ../new/linux-2.6.20/dr
+} /* allow C++ to use these headers */
+#endif /* __cplusplus */
+#endif /* _SGA_H_ */
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.c ../new/linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.c
---- linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.c 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.c
@@ -0,0 +1,206 @@
+/******************************************************************************
+ * Copyright 2007, STMicroelectronics
@@ -211793,7 +213004,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.c ../new/linux-2.6.2
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
-+ * Description : This module provides interrupt routines for the
++ * Description : This module provides interrupt routines for the
+ * NOMADIK SGA Controller
+ *****************************************************************************/
+/*--------------------------------------------------------------------------*
@@ -211818,17 +213029,17 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.c ../new/linux-2.6.2
+PRIVATE t_sga_registers *gp_sga_registers;
+
+/****************************************************************************
-+* NAME: SGA_SetBaseAddress()
++* NAME: SGA_SetBaseAddress()
+*---------------------------------------------------------------------------*
-+* DESCRIPTION : This routine initializes SGA HCL.
-+* PARAMETERS :
-+* IN : t_logical_address base_address
++* DESCRIPTION : This routine initializes SGA HCL.
++* PARAMETERS :
++* IN : t_logical_address base_address
+* INOUT : None
+* OUT : None
-+* RETURN VALUE : none
++* RETURN VALUE : none
+* TYPE : Public
+*---------------------------------------------------------------------------
-+* REENTRANCY: NA
++* REENTRANCY: NA
+*****************************************************************************/
+PUBLIC void SGA_SetBaseAddress(t_logical_address base_address)
+{
@@ -211840,7 +213051,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.c ../new/linux-2.6.2
+* NAME: SGA_EnableIRQSrc()
+*---------------------------------------------------------------------------
+* DESCRIPTION :This routine allows to enable a specific interrupt
-+* PARAMETERS :
++* PARAMETERS :
+* IN : t_sga_int_to_core core define the processor to route this
+* interrupt
+* irq_src: ORed value of interrupt sources to be enabled.
@@ -211850,7 +213061,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.c ../new/linux-2.6.2
+* RETURN VALUE : none
+* TYPE : Public
+*--------------------------------------------------------------------------
-+*REENTRANCY: NA
++*REENTRANCY: NA
+*****************************************************************************/
+PUBLIC void SGA_EnableIRQSrc(IN t_sga_int_to_core core, IN t_sga_irq_src irq_src)
+{
@@ -211870,7 +213081,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.c ../new/linux-2.6.2
+* NAME: SGA_DisableIRQSrc()
+*---------------------------------------------------------------------------
+* DESCRIPTION :This routine allows to disable a specific interrupt
-+* PARAMETERS :
++* PARAMETERS :
+* IN :t_sga_int_to_core core define the processor to route this
+* interrupt
+* irq_src: ORed value of interrupt sources to be disabled.
@@ -211880,7 +213091,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.c ../new/linux-2.6.2
+* RETURN VALUE : none
+* TYPE : Public
+*--------------------------------------------------------------------------
-+*REENTRANCY: NA
++*REENTRANCY: NA
+*****************************************************************************/
+PUBLIC void SGA_DisableIRQSrc(IN t_sga_int_to_core core, IN t_sga_irq_src irq_src)
+{
@@ -211984,9 +213195,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.c ../new/linux-2.6.2
+ }
+ }
+}
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.h ../new/linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.h
---- linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.h
@@ -0,0 +1,99 @@
+/******************************************************************************
+ * Copyright 2007, STMicroelectronics
@@ -212003,7 +213213,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.h ../new/linux-2.6.2
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
-+ * Description : Public Header file of Smart Graphics Accelerator
++ * Description : Public Header file of Smart Graphics Accelerator
+ * module containing interrupts APIs
+ *****************************************************************************/
+
@@ -212056,9 +213266,9 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.h ../new/linux-2.6.2
+#define SGA_IRQ_SRC_INT_21 0x8000000
+#define SGA_IRQ_SRC_INT_22 0x10000000
+#define SGA_IRQ_SRC_INT_23 0x20000000
-+#define SGA_IRQ_SRC_INT_24 0x40000000
++#define SGA_IRQ_SRC_INT_24 0x40000000
+#define SGA_IRQ_SRC_INT_25 0x80000000
-+#define SGA_IRQ_SRC_ALL 0xFFFFFFFF
++#define SGA_IRQ_SRC_ALL 0xFFFFFFFF
+
+
+typedef enum
@@ -212087,9 +213297,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irq.h ../new/linux-2.6.2
+#endif /* __cplusplus */
+
+#endif /* _SGA_IRQ_H_ */
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h ../new/linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h
---- linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h
@@ -0,0 +1,239 @@
+/******************************************************************************
+ * Copyright 2007, STMicroelectronics
@@ -212106,7 +213315,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h ../new/linux-2.6.
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
-+ * Description : Private Header file of SGA Controller module
++ * Description : Private Header file of SGA Controller module
+ *
+ *****************************************************************************/
+
@@ -212137,8 +213346,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h ../new/linux-2.6.
+
+#define SGA_WRITE_FIELD(reg_name,mask,shift,value) \
+ (reg_name = ((reg_name & ~mask) | (value << shift)))
-+
-+
++
++
+#define SGA_READ_FIELD(reg_name,mask,shift) ((reg_name & mask) >> shift )
+
+
@@ -212146,7 +213355,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h ../new/linux-2.6.
+/*-----------------------------------------------------------------------------
+ SGA Registers Description
+-----------------------------------------------------------------------------*/
-+typedef volatile struct
++typedef volatile struct
+{
+ t_uint32 sga_instr; /* Manual instruction input register 0x0 */
+ t_uint32 sga_gcr; /* Global configuration register 0x04 */
@@ -212177,11 +213386,11 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h ../new/linux-2.6.
+ t_uint32 sga_periphid0; /* Pheripheral Identification 0 0x7E0 */
+ t_uint32 sga_periphid1; /* Pheripheral Identification 1 0x7E4 */
+ t_uint32 sga_periphid2; /* Pheripheral Identification 2 0x7E8 */
-+ t_uint32 sga_periphid3; /* Pheripheral Identification 3 0x7EC */
++ t_uint32 sga_periphid3; /* Pheripheral Identification 3 0x7EC */
+ t_uint32 sga_pcellid0; /* Pcell identification 0 0x7F0 */
+ t_uint32 sga_pcellid1; /* Pcell identification 1 0x7F4 */
+ t_uint32 sga_pcellid2; /* Pcell identification 2 0x7F8 */
-+ t_uint32 sga_pcellid3; /* Pcell identification 3 0x7Fc */
++ t_uint32 sga_pcellid3; /* Pcell identification 3 0x7Fc */
+}t_sga_registers;
+
+
@@ -212189,12 +213398,12 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h ../new/linux-2.6.
+ SGA Global Configuration register fields description
+-----------------------------------------------------------------------------*/
+ /*Shift values for Golbal configuration register */
-+#define SGA_GCR_INTCMOD_SHIFT 0 /*Interrupt clear mode select bit */
++#define SGA_GCR_INTCMOD_SHIFT 0 /*Interrupt clear mode select bit */
+#define SGA_GCR_FCLKGEN_SHIFT 1 /*FCLK clock gating enable bit */
+#define SGA_GCR_HCLKGEN_SHIFT 2 /*Hclk Clock gating enable bit */
+#define SGA_GCR_INTCMOD1_SHIFT 3 /*Interrupt clear mode select */
+ /*Mask values for Golbal configuration register */
-+#define SGA_GCR_INTCMOD_MASK MASK_BIT0 /*Interrupt clear mode select bit */
++#define SGA_GCR_INTCMOD_MASK MASK_BIT0 /*Interrupt clear mode select bit */
+#define SGA_GCR_FCLKGEN_MASK MASK_BIT1 /*FCLK clock gating enable bit */
+#define SGA_GCR_HCLKGEN_MASK MASK_BIT2 /*Hclk Clock gating enable bit */
+#define SGA_GCR_INTCMOD1_MASK MASK_BIT3 /*Interrupt clear mode select */
@@ -212253,14 +213462,14 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h ../new/linux-2.6.
+ /*Shift values for Controller status register */
+
+
-+
++
+/*-----------------------------------------------------------------------------
+ SGA Controller Debug register fields description
+-----------------------------------------------------------------------------*/
+ /*Shift values for Controller Debug register */
-+#define SGA_DEBUG_TPIPE_SHIFT 0 /*Total Pipe Empty bit */
++#define SGA_DEBUG_TPIPE_SHIFT 0 /*Total Pipe Empty bit */
+#define SGA_DEBUG_SPIPE_SHIFT 1 /*Source Pipe Empty bit */
-+#define SGA_DEBUG_AHBME_SHIFT 2 /*AHB Master empty bit */
++#define SGA_DEBUG_AHBME_SHIFT 2 /*AHB Master empty bit */
+#define SGA_DEBUG_DDMAFSME_SHIFT 3 /*Destination DMAFSM flows empty bit*/
+#define SGA_DEBUG_SDMAFSME_SHIFT 4 /*Source DMAFSM flows empty bit */
+#define SGA_DEBUG_CACBNK2_SHIFT 5 /*Cache Bank 0 empty bit */
@@ -212272,8 +213481,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h ../new/linux-2.6.
+#define SGA_DEBUG_PIXOP_SHIFT 11 /*Pixel Operator empty bit */
+#define SGA_DEBUG_SFIFOWRE_SHIFT 12 /*Source FIFO write empty bit*/
+#define SGA_DEBUG_COLCONV_SHIFT 13 /*Colour conversion empty bit*/
-+#define SGA_DEBUG_PIXBIL_SHIFT 14 /*Pixel Bilinear Operator Empty bit */
-+#define SGA_DEBUG_TRSOP_SHIFT 15 /*Transparency operator empty bit*/
++#define SGA_DEBUG_PIXBIL_SHIFT 14 /*Pixel Bilinear Operator Empty bit */
++#define SGA_DEBUG_TRSOP_SHIFT 15 /*Transparency operator empty bit*/
+#define SGA_DEBUG_PIXSER_SHIFT 16 /*Pixel Serialiser Operator Empty bit */
+#define SGA_DEBUG_DEPATEX_SHIFT 17 /*Depacker Texture Empty bit */
+#define SGA_DEBUG_CACHEPE_SHIFT 18 /*Cache Texture empty flow bit */
@@ -212292,9 +213501,9 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h ../new/linux-2.6.
+#define SGA_DEBUG_TRIOPE_SHIFT 31 /*Traingle Operator empty bit */
+
+ /*Mask values for Controller Debug register */
-+#define SGA_DEBUG_TPIPE_MASK MASK_BIT0 /*Total Pipe Empty bit */
++#define SGA_DEBUG_TPIPE_MASK MASK_BIT0 /*Total Pipe Empty bit */
+#define SGA_DEBUG_SPIPE_MASK MASK_BIT1 /*Source Pipe Empty bit */
-+#define SGA_DEBUG_AHBME_MASK MASK_BIT2 /*AHB Master empty bit */
++#define SGA_DEBUG_AHBME_MASK MASK_BIT2 /*AHB Master empty bit */
+#define SGA_DEBUG_DDMAFSME_MASK MASK_BIT3 /*Destination DMAFSM flows empty bit*/
+#define SGA_DEBUG_SDMAFSME_MASK MASK_BIT4 /*Source DMAFSM flows empty bit */
+#define SGA_DEBUG_CACBNK2_MASK MASK_BIT5 /*Cache Bank 0 empty bit */
@@ -212306,8 +213515,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h ../new/linux-2.6.
+#define SGA_DEBUG_PIXOP_MASK MASK_BIT11 /*Pixel Operator empty bit */
+#define SGA_DEBUG_SFIFOWRE_MASK MASK_BIT12 /*Source FIFO write empty bit*/
+#define SGA_DEBUG_COLCONV_MASK MASK_BIT13 /*Colour conversion empty bit*/
-+#define SGA_DEBUG_PIXBIL_MASK MASK_BIT14 /*Pixel Bilinear Operator Empty bit */
-+#define SGA_DEBUG_TRSOP_MASK MASK_BIT15 /*Transparency operator empty bit*/
++#define SGA_DEBUG_PIXBIL_MASK MASK_BIT14 /*Pixel Bilinear Operator Empty bit */
++#define SGA_DEBUG_TRSOP_MASK MASK_BIT15 /*Transparency operator empty bit*/
+#define SGA_DEBUG_PIXSER_MASK MASK_BIT16 /*Pixel Serialiser Operator Empty bit */
+#define SGA_DEBUG_DEPATEX_MASK MASK_BIT17 /*Depacker Texture Empty bit */
+#define SGA_DEBUG_CACHEPE_MASK MASK_BIT18 /*Cache Texture empty flow bit */
@@ -212330,9 +213539,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_irqp.h ../new/linux-2.6.
+
+/* End of file sga_irqp.h */
+
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_p.h ../new/linux-2.6.20/drivers/video/nomadik/hcl/sga_p.h
---- linux-2.6.20/drivers/video/nomadik/hcl/sga_p.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/hcl/sga_p.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/hcl/sga_p.h
@@ -0,0 +1,175 @@
+/******************************************************************************
+ * Copyright 2007, STMicroelectronics
@@ -212349,7 +213557,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_p.h ../new/linux-2.6.20/
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
-+ * Description : Private Header file of Smart Graphics Accelerator
++ * Description : Private Header file of Smart Graphics Accelerator
+ * module containing interrupts APIs
+ *****************************************************************************/
+#ifndef _SGA_P_H_
@@ -212388,7 +213596,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_p.h ../new/linux-2.6.20/
+#define SET_INSTR_TEST_REG 0x88000000
+#define CLR_INSTR_TEST_REG 0x89000000
+#define TST_INSTR_TEST_REG 0x8A000000
-+#define WAIT_INSTR_TEST_REG 0x8B000000
++#define WAIT_INSTR_TEST_REG 0x8B000000
+
+#define IN0_BASE_ADD_MSB 0xA0000000
+#define IN0_BASE_ADD 0xA1000000
@@ -212509,28 +213717,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/hcl/sga_p.h ../new/linux-2.6.20/
+#endif /* __cplusplus */
+#endif /* _SGA_H_ */
+
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/Makefile ../new/linux-2.6.20/drivers/video/nomadik/Makefile
---- linux-2.6.20/drivers/video/nomadik/Makefile 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/Makefile 2007-11-21 11:51:42.000000000 +0530
-@@ -0,0 +1,15 @@
-+#
-+# Makefile for the Nomadik framebuffer driver
-+#
-+ifdef CONFIG_FB_NOMADIK_ACCLN
-+CFLAGS += -D__STN_8815 -D__RELEASE
-+
-+obj-$(CONFIG_FB_NOMADIK_ACCLN) += nomadikfb.o
-+#obj-m += nomadikfb.ko
-+
-+endif
-+
-+nomadikfb-y := sga_main.o sga_ioctlfns.o hcl/sga.o hcl/sga_irq.o
-+
-+
-+nomadikfb-objs := $(nomadikfb-y)
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_defs.h ../new/linux-2.6.20/drivers/video/nomadik/sga_defs.h
---- linux-2.6.20/drivers/video/nomadik/sga_defs.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/sga_defs.h 2008-10-06 12:06:23.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/sga_defs.h
@@ -0,0 +1,87 @@
+/*******************************************************************************
+** Copyright 2007, STMicroelectronics
@@ -212567,13 +213755,13 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_defs.h ../new/linux-2.6.20/d
+#define SGA_DRV_VERSION "rel_1_5"
+
+//-----------------------------------------------------------------------------
-+// Set the BLOCKING_TASKRUN_IOCTL define below if the ioctl should sleep until
++// Set the BLOCKING_TASKRUN_IOCTL define below if the ioctl should sleep until
+// the task is complete. If the start batch ioctl should return even if
+// the task is not completed, then BLOCKING_TASKRUN_IOCTL should be undefined.
+#define BLOCKING_TASKRUN_IOCTL
+
+//-----------------------------------------------------------------------------
-+// Set the ENABLE_SGA_INTERRUPTS define below if SGA interrupts are to be
++// Set the ENABLE_SGA_INTERRUPTS define below if SGA interrupts are to be
+// enabled in the driver. If only status of raw interrupts is to be checked
+// from the library (user level polling), this should remain undefined.
+//#define ENABLE_SGA_INTERRUPTS
@@ -212619,9 +213807,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_defs.h ../new/linux-2.6.20/d
+/******************************************************************************/
+
+#endif /* _SGA_DEFS_H */
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_err.h ../new/linux-2.6.20/drivers/video/nomadik/sga_err.h
---- linux-2.6.20/drivers/video/nomadik/sga_err.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/sga_err.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/sga_err.h
@@ -0,0 +1,45 @@
+/*******************************************************************************
+** Copyright 2007, STMicroelectronics
@@ -212668,9 +213855,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_err.h ../new/linux-2.6.20/dr
+}t_sgadrv_err;
+
+#endif /* _SGA_ERR_H */
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_interface.h ../new/linux-2.6.20/drivers/video/nomadik/sga_interface.h
---- linux-2.6.20/drivers/video/nomadik/sga_interface.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/sga_interface.h 2008-10-06 12:06:23.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/sga_interface.h
@@ -0,0 +1,119 @@
+/******************************************************************************
+ * Copyright 2007, STMicroelectronics
@@ -212791,9 +213977,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_interface.h ../new/linux-2.6
+
+#endif // __SGA_IOCTL_HEADER_SGA__
+
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_ioctlfns.c ../new/linux-2.6.20/drivers/video/nomadik/sga_ioctlfns.c
---- linux-2.6.20/drivers/video/nomadik/sga_ioctlfns.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/sga_ioctlfns.c 2008-11-24 14:06:27.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/sga_ioctlfns.c
@@ -0,0 +1,473 @@
+/******************************************************************************
+ * Copyright 2007, STMicroelectronics
@@ -213268,9 +214453,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_ioctlfns.c ../new/linux-2.6.
+}
+
+// end of sga_ioctlfns.c
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_ioctlfns.h ../new/linux-2.6.20/drivers/video/nomadik/sga_ioctlfns.h
---- linux-2.6.20/drivers/video/nomadik/sga_ioctlfns.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/sga_ioctlfns.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/sga_ioctlfns.h
@@ -0,0 +1,50 @@
+/******************************************************************************
+ * Copyright 2007, STMicroelectronics
@@ -213292,7 +214476,7 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_ioctlfns.h ../new/linux-2.6.
+ * File : sga_ioctlfns.h
+ * Description : This file contains the ioctl function declarations that are
+ * used by the applications. The definition of all the functions
-+ * is present in sga_ioctlfns.c. It also contains the internal
++ * is present in sga_ioctlfns.c. It also contains the internal
+ * data structures to the driver.
+ * Author : Anand Bodas
+ * Dept. : ST/HPC
@@ -213322,9 +214506,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_ioctlfns.h ../new/linux-2.6.
+
+#endif
+
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_main.c ../new/linux-2.6.20/drivers/video/nomadik/sga_main.c
---- linux-2.6.20/drivers/video/nomadik/sga_main.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/sga_main.c 2008-11-24 14:06:27.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/sga_main.c
@@ -0,0 +1,651 @@
+/******************************************************************************
+ * Copyright 2007, STMicroelectronics
@@ -213977,9 +215160,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_main.c ../new/linux-2.6.20/d
+module_init(SGA_init_module);
+module_exit(SGA_cleanup_module);
+
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_main.h ../new/linux-2.6.20/drivers/video/nomadik/sga_main.h
---- linux-2.6.20/drivers/video/nomadik/sga_main.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/sga_main.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/sga_main.h
@@ -0,0 +1,123 @@
+/*******************************************************************************
+** Copyright 2007, STMicroelectronics
@@ -214104,9 +215286,8 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_main.h ../new/linux-2.6.20/d
+
+
+#endif /* _SGA_API_H */
-diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_typs.h ../new/linux-2.6.20/drivers/video/nomadik/sga_typs.h
---- linux-2.6.20/drivers/video/nomadik/sga_typs.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/drivers/video/nomadik/sga_typs.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/drivers/video/nomadik/sga_typs.h
@@ -0,0 +1,37 @@
+/*******************************************************************************
+** Copyright 2007, STMicroelectronics
@@ -214145,10 +215326,11 @@ diff -Nauprw linux-2.6.20/drivers/video/nomadik/sga_typs.h ../new/linux-2.6.20/d
+typedef long INT4;
+
+#endif /* _SGA_TYPS_H */
-diff -Nauprw linux-2.6.20/fs/Kconfig ../new/linux-2.6.20/fs/Kconfig
---- linux-2.6.20/fs/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/fs/Kconfig 2008-09-17 13:23:34.000000000 +0530
-@@ -1196,6 +1196,10 @@ config EFS_FS
+--- linux-2.6.20.orig/fs/Kconfig
++++ linux-2.6.20/fs/Kconfig
+@@ -1194,10 +1194,14 @@ config EFS_FS
+ about EFS see its home page at <http://aeschi.ch.eu.org/efs/>.
+
To compile the EFS file system support as a module, choose M here: the
module will be called efs.
@@ -214159,20 +215341,24 @@ diff -Nauprw linux-2.6.20/fs/Kconfig ../new/linux-2.6.20/fs/Kconfig
config JFFS_FS
tristate "Journalling Flash File System (JFFS) support"
depends on MTD && BLOCK && BROKEN
-diff -Nauprw linux-2.6.20/fs/Makefile ../new/linux-2.6.20/fs/Makefile
---- linux-2.6.20/fs/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/fs/Makefile 2008-09-17 13:23:34.000000000 +0530
-@@ -115,3 +115,6 @@ obj-$(CONFIG_HPPFS) += hppfs/
+ help
+ JFFS is the Journalling Flash File System developed by Axis
+--- linux-2.6.20.orig/fs/Makefile
++++ linux-2.6.20/fs/Makefile
+@@ -113,5 +113,8 @@ obj-$(CONFIG_BEFS_FS) += befs/
+ obj-$(CONFIG_HOSTFS) += hostfs/
+ obj-$(CONFIG_HPPFS) += hppfs/
obj-$(CONFIG_DEBUG_FS) += debugfs/
obj-$(CONFIG_OCFS2_FS) += ocfs2/
obj-$(CONFIG_GFS2_FS) += gfs2/
+
+# Patched by YAFFS
+obj-$(CONFIG_YAFFS_FS) += yaffs2/
-diff -Nauprw linux-2.6.20/fs/proc/proc_misc.c ../new/linux-2.6.20/fs/proc/proc_misc.c
---- linux-2.6.20/fs/proc/proc_misc.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/fs/proc/proc_misc.c 2008-07-04 23:45:24.000000000 +0530
-@@ -65,6 +65,7 @@
+--- linux-2.6.20.orig/fs/proc/proc_misc.c
++++ linux-2.6.20/fs/proc/proc_misc.c
+@@ -63,10 +63,11 @@
+ * wrappers, but this needs further analysis wrt potential overflows.
+ */
extern int get_hardware_list(char *);
extern int get_stram_list(char *);
extern int get_filesystem_list(char *);
@@ -214180,7 +215366,11 @@ diff -Nauprw linux-2.6.20/fs/proc/proc_misc.c ../new/linux-2.6.20/fs/proc/proc_m
extern int get_exec_domain_list(char *);
extern int get_dma_list(char *);
extern int get_locks_status (char *, char **, off_t, int);
-@@ -612,6 +613,29 @@ static int filesystems_read_proc(char *p
+
+ static int proc_calc_metrics(char *page, char **start, off_t off,
+@@ -610,10 +611,33 @@ static int filesystems_read_proc(char *p
+ {
+ int len = get_filesystem_list(page);
return proc_calc_metrics(page, start, off, count, eof, len);
}
@@ -214196,7 +215386,7 @@ diff -Nauprw linux-2.6.20/fs/proc/proc_misc.c ../new/linux-2.6.20/fs/proc/proc_m
+static int busfreq_read_proc(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+{
-+ int len = nomadik_busfreq_get(page);
++ int len = nomadik_busfreq_get(page);
+ return proc_calc_metrics(page, start, off, count, eof, len);
+}
+
@@ -214210,7 +215400,11 @@ diff -Nauprw linux-2.6.20/fs/proc/proc_misc.c ../new/linux-2.6.20/fs/proc/proc_m
static int cmdline_read_proc(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
-@@ -687,11 +711,19 @@ void __init proc_misc_init(void)
+ int len;
+
+@@ -685,15 +709,23 @@ void __init proc_misc_init(void)
+ {"hardware", hardware_read_proc},
+ #endif
#ifdef CONFIG_STRAM_PROC
{"stram", stram_read_proc},
#endif
@@ -214221,11 +215415,11 @@ diff -Nauprw linux-2.6.20/fs/proc/proc_misc.c ../new/linux-2.6.20/fs/proc/proc_m
- {NULL,}
+ {
+ "filesystems", filesystems_read_proc},
-+#ifdef CONFIG_GPIO_PROC
++#ifdef CONFIG_GPIO_PROC
+ {
+ "gpio", gpio_read_proc},
-+#endif
-+ {"busfreq" , busfreq_read_proc},
++#endif
++ {"busfreq" , busfreq_read_proc},
+ {
+ "dma", dma_read_proc}, {
+ "cmdline", cmdline_read_proc}, {
@@ -214235,9 +215429,182 @@ diff -Nauprw linux-2.6.20/fs/proc/proc_misc.c ../new/linux-2.6.20/fs/proc/proc_m
};
for (p = simple_ones; p->name; p++)
create_proc_read_entry(p->name, 0, NULL, p->read_proc, NULL);
-diff -Nauprw linux-2.6.20/fs/yaffs2/devextras.h ../new/linux-2.6.20/fs/yaffs2/devextras.h
---- linux-2.6.20/fs/yaffs2/devextras.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/devextras.h 2008-09-12 12:54:02.000000000 +0530
+
+ proc_symlink("mounts", NULL, "self/mounts");
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/Kconfig
+@@ -0,0 +1,156 @@
++#
++# YAFFS file system configurations
++#
++
++config YAFFS_FS
++ tristate "YAFFS2 file system support"
++ default n
++ depends on MTD
++ select YAFFS_YAFFS1
++ select YAFFS_YAFFS2
++ help
++ YAFFS2, or Yet Another Flash Filing System, is a filing system
++ optimised for NAND Flash chips.
++
++ To compile the YAFFS2 file system support as a module, choose M
++ here: the module will be called yaffs2.
++
++ If unsure, say N.
++
++ Further information on YAFFS2 is available at
++ <http://www.aleph1.co.uk/yaffs/>.
++
++config YAFFS_YAFFS1
++ bool "512 byte / page devices"
++ depends on YAFFS_FS
++ default y
++ help
++ Enable YAFFS1 support -- yaffs for 512 byte / page devices
++
++ Not needed for 2K-page devices.
++
++ If unsure, say Y.
++
++config YAFFS_9BYTE_TAGS
++ bool "Use older-style on-NAND data format with pageStatus byte"
++ depends on YAFFS_YAFFS1
++ default n
++ help
++
++ Older-style on-NAND data format has a "pageStatus" byte to record
++ chunk/page state. This byte is zero when the page is discarded.
++ Choose this option if you have existing on-NAND data using this
++ format that you need to continue to support. New data written
++ also uses the older-style format. Note: Use of this option
++ generally requires that MTD's oob layout be adjusted to use the
++ older-style format. See notes on tags formats and MTD versions
++ in yaffs_mtdif1.c.
++
++ If unsure, say N.
++
++config YAFFS_DOES_ECC
++ bool "Lets Yaffs do its own ECC"
++ depends on YAFFS_FS && YAFFS_YAFFS1 && !YAFFS_9BYTE_TAGS
++ default n
++ help
++ This enables Yaffs to use its own ECC functions instead of using
++ the ones from the generic MTD-NAND driver.
++
++ If unsure, say N.
++
++config YAFFS_ECC_WRONG_ORDER
++ bool "Use the same ecc byte order as Steven Hill's nand_ecc.c"
++ depends on YAFFS_FS && YAFFS_DOES_ECC && !YAFFS_9BYTE_TAGS
++ default n
++ help
++ This makes yaffs_ecc.c use the same ecc byte order as Steven
++ Hill's nand_ecc.c. If not set, then you get the same ecc byte
++ order as SmartMedia.
++
++ If unsure, say N.
++
++config YAFFS_YAFFS2
++ bool "2048 byte (or larger) / page devices"
++ depends on YAFFS_FS
++ default y
++ help
++ Enable YAFFS2 support -- yaffs for >= 2K bytes per page devices
++
++ If unsure, say Y.
++
++config YAFFS_AUTO_YAFFS2
++ bool "Autoselect yaffs2 format"
++ depends on YAFFS_YAFFS2
++ default y
++ help
++ Without this, you need to explicitely use yaffs2 as the file
++ system type. With this, you can say "yaffs" and yaffs or yaffs2
++ will be used depending on the device page size (yaffs on
++ 512-byte page devices, yaffs2 on 2K page devices).
++
++ If unsure, say Y.
++
++config YAFFS_DISABLE_LAZY_LOAD
++ bool "Disable lazy loading"
++ depends on YAFFS_YAFFS2
++ default n
++ help
++ "Lazy loading" defers loading file details until they are
++ required. This saves mount time, but makes the first look-up
++ a bit longer.
++
++ Lazy loading will only happen if enabled by this option being 'n'
++ and if the appropriate tags are available, else yaffs2 will
++ automatically fall back to immediate loading and do the right
++ thing.
++
++ Lazy laoding will be required by checkpointing.
++
++ Setting this to 'y' will disable lazy loading.
++
++ If unsure, say N.
++
++
++config YAFFS_DISABLE_WIDE_TNODES
++ bool "Turn off wide tnodes"
++ depends on YAFFS_FS
++ default n
++ help
++ Wide tnodes are only used for NAND arrays >=32MB for 512-byte
++ page devices and >=128MB for 2k page devices. They use slightly
++ more RAM but are faster since they eliminate chunk group
++ searching.
++
++ Setting this to 'y' will force tnode width to 16 bits and save
++ memory but make large arrays slower.
++
++ If unsure, say N.
++
++config YAFFS_ALWAYS_CHECK_CHUNK_ERASED
++ bool "Force chunk erase check"
++ depends on YAFFS_FS
++ default n
++ help
++ Normally YAFFS only checks chunks before writing until an erased
++ chunk is found. This helps to detect any partially written
++ chunks that might have happened due to power loss.
++
++ Enabling this forces on the test that chunks are erased in flash
++ before writing to them. This takes more time but is potentially
++ a bit more secure.
++
++ Suggest setting Y during development and ironing out driver
++ issues etc. Suggest setting to N if you want faster writing.
++
++ If unsure, say Y.
++
++config YAFFS_SHORT_NAMES_IN_RAM
++ bool "Cache short names in RAM"
++ depends on YAFFS_FS
++ default y
++ help
++ If this config is set, then short names are stored with the
++ yaffs_Object. This costs an extra 16 bytes of RAM per object,
++ but makes look-ups faster.
++
++ If unsure, say Y.
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/Makefile
+@@ -0,0 +1,10 @@
++#
++# Makefile for the linux YAFFS filesystem routines.
++#
++
++obj-$(CONFIG_YAFFS_FS) += yaffs.o
++
++yaffs-y := yaffs_ecc.o yaffs_fs.o yaffs_guts.o yaffs_checkptrw.o
++yaffs-y += yaffs_packedtags1.o yaffs_packedtags2.o yaffs_nand.o yaffs_qsort.o
++yaffs-y += yaffs_tagscompat.o yaffs_tagsvalidity.o
++yaffs-y += yaffs_mtdif.o yaffs_mtdif1.o yaffs_mtdif2.o
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/devextras.h
@@ -0,0 +1,264 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
@@ -214503,183 +215870,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/devextras.h ../new/linux-2.6.20/fs/yaffs2/de
+#endif
+
+#endif
-diff -Nauprw linux-2.6.20/fs/yaffs2/Kconfig ../new/linux-2.6.20/fs/yaffs2/Kconfig
---- linux-2.6.20/fs/yaffs2/Kconfig 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/Kconfig 2008-09-12 12:54:02.000000000 +0530
-@@ -0,0 +1,156 @@
-+#
-+# YAFFS file system configurations
-+#
-+
-+config YAFFS_FS
-+ tristate "YAFFS2 file system support"
-+ default n
-+ depends on MTD
-+ select YAFFS_YAFFS1
-+ select YAFFS_YAFFS2
-+ help
-+ YAFFS2, or Yet Another Flash Filing System, is a filing system
-+ optimised for NAND Flash chips.
-+
-+ To compile the YAFFS2 file system support as a module, choose M
-+ here: the module will be called yaffs2.
-+
-+ If unsure, say N.
-+
-+ Further information on YAFFS2 is available at
-+ <http://www.aleph1.co.uk/yaffs/>.
-+
-+config YAFFS_YAFFS1
-+ bool "512 byte / page devices"
-+ depends on YAFFS_FS
-+ default y
-+ help
-+ Enable YAFFS1 support -- yaffs for 512 byte / page devices
-+
-+ Not needed for 2K-page devices.
-+
-+ If unsure, say Y.
-+
-+config YAFFS_9BYTE_TAGS
-+ bool "Use older-style on-NAND data format with pageStatus byte"
-+ depends on YAFFS_YAFFS1
-+ default n
-+ help
-+
-+ Older-style on-NAND data format has a "pageStatus" byte to record
-+ chunk/page state. This byte is zero when the page is discarded.
-+ Choose this option if you have existing on-NAND data using this
-+ format that you need to continue to support. New data written
-+ also uses the older-style format. Note: Use of this option
-+ generally requires that MTD's oob layout be adjusted to use the
-+ older-style format. See notes on tags formats and MTD versions
-+ in yaffs_mtdif1.c.
-+
-+ If unsure, say N.
-+
-+config YAFFS_DOES_ECC
-+ bool "Lets Yaffs do its own ECC"
-+ depends on YAFFS_FS && YAFFS_YAFFS1 && !YAFFS_9BYTE_TAGS
-+ default n
-+ help
-+ This enables Yaffs to use its own ECC functions instead of using
-+ the ones from the generic MTD-NAND driver.
-+
-+ If unsure, say N.
-+
-+config YAFFS_ECC_WRONG_ORDER
-+ bool "Use the same ecc byte order as Steven Hill's nand_ecc.c"
-+ depends on YAFFS_FS && YAFFS_DOES_ECC && !YAFFS_9BYTE_TAGS
-+ default n
-+ help
-+ This makes yaffs_ecc.c use the same ecc byte order as Steven
-+ Hill's nand_ecc.c. If not set, then you get the same ecc byte
-+ order as SmartMedia.
-+
-+ If unsure, say N.
-+
-+config YAFFS_YAFFS2
-+ bool "2048 byte (or larger) / page devices"
-+ depends on YAFFS_FS
-+ default y
-+ help
-+ Enable YAFFS2 support -- yaffs for >= 2K bytes per page devices
-+
-+ If unsure, say Y.
-+
-+config YAFFS_AUTO_YAFFS2
-+ bool "Autoselect yaffs2 format"
-+ depends on YAFFS_YAFFS2
-+ default y
-+ help
-+ Without this, you need to explicitely use yaffs2 as the file
-+ system type. With this, you can say "yaffs" and yaffs or yaffs2
-+ will be used depending on the device page size (yaffs on
-+ 512-byte page devices, yaffs2 on 2K page devices).
-+
-+ If unsure, say Y.
-+
-+config YAFFS_DISABLE_LAZY_LOAD
-+ bool "Disable lazy loading"
-+ depends on YAFFS_YAFFS2
-+ default n
-+ help
-+ "Lazy loading" defers loading file details until they are
-+ required. This saves mount time, but makes the first look-up
-+ a bit longer.
-+
-+ Lazy loading will only happen if enabled by this option being 'n'
-+ and if the appropriate tags are available, else yaffs2 will
-+ automatically fall back to immediate loading and do the right
-+ thing.
-+
-+ Lazy laoding will be required by checkpointing.
-+
-+ Setting this to 'y' will disable lazy loading.
-+
-+ If unsure, say N.
-+
-+
-+config YAFFS_DISABLE_WIDE_TNODES
-+ bool "Turn off wide tnodes"
-+ depends on YAFFS_FS
-+ default n
-+ help
-+ Wide tnodes are only used for NAND arrays >=32MB for 512-byte
-+ page devices and >=128MB for 2k page devices. They use slightly
-+ more RAM but are faster since they eliminate chunk group
-+ searching.
-+
-+ Setting this to 'y' will force tnode width to 16 bits and save
-+ memory but make large arrays slower.
-+
-+ If unsure, say N.
-+
-+config YAFFS_ALWAYS_CHECK_CHUNK_ERASED
-+ bool "Force chunk erase check"
-+ depends on YAFFS_FS
-+ default n
-+ help
-+ Normally YAFFS only checks chunks before writing until an erased
-+ chunk is found. This helps to detect any partially written
-+ chunks that might have happened due to power loss.
-+
-+ Enabling this forces on the test that chunks are erased in flash
-+ before writing to them. This takes more time but is potentially
-+ a bit more secure.
-+
-+ Suggest setting Y during development and ironing out driver
-+ issues etc. Suggest setting to N if you want faster writing.
-+
-+ If unsure, say Y.
-+
-+config YAFFS_SHORT_NAMES_IN_RAM
-+ bool "Cache short names in RAM"
-+ depends on YAFFS_FS
-+ default y
-+ help
-+ If this config is set, then short names are stored with the
-+ yaffs_Object. This costs an extra 16 bytes of RAM per object,
-+ but makes look-ups faster.
-+
-+ If unsure, say Y.
-diff -Nauprw linux-2.6.20/fs/yaffs2/Makefile ../new/linux-2.6.20/fs/yaffs2/Makefile
---- linux-2.6.20/fs/yaffs2/Makefile 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/Makefile 2008-09-12 12:54:02.000000000 +0530
-@@ -0,0 +1,10 @@
-+#
-+# Makefile for the linux YAFFS filesystem routines.
-+#
-+
-+obj-$(CONFIG_YAFFS_FS) += yaffs.o
-+
-+yaffs-y := yaffs_ecc.o yaffs_fs.o yaffs_guts.o yaffs_checkptrw.o
-+yaffs-y += yaffs_packedtags1.o yaffs_packedtags2.o yaffs_nand.o yaffs_qsort.o
-+yaffs-y += yaffs_tagscompat.o yaffs_tagsvalidity.o
-+yaffs-y += yaffs_mtdif.o yaffs_mtdif1.o yaffs_mtdif2.o
-diff -Nauprw linux-2.6.20/fs/yaffs2/moduleconfig.h ../new/linux-2.6.20/fs/yaffs2/moduleconfig.h
---- linux-2.6.20/fs/yaffs2/moduleconfig.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/moduleconfig.h 2008-09-12 12:54:02.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/moduleconfig.h
@@ -0,0 +1,65 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
@@ -214746,9 +215938,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/moduleconfig.h ../new/linux-2.6.20/fs/yaffs2
+#endif /* YAFFS_OUT_OF_TREE */
+
+#endif /* __YAFFS_CONFIG_H__ */
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_checkptrw.c ../new/linux-2.6.20/fs/yaffs2/yaffs_checkptrw.c
---- linux-2.6.20/fs/yaffs2/yaffs_checkptrw.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_checkptrw.c 2008-09-12 12:54:02.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_checkptrw.c
@@ -0,0 +1,404 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
@@ -215154,9 +216345,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_checkptrw.c ../new/linux-2.6.20/fs/yaf
+
+
+
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_checkptrw.h ../new/linux-2.6.20/fs/yaffs2/yaffs_checkptrw.h
---- linux-2.6.20/fs/yaffs2/yaffs_checkptrw.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_checkptrw.h 2008-09-12 12:54:02.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_checkptrw.h
@@ -0,0 +1,35 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
@@ -215193,9 +216383,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_checkptrw.h ../new/linux-2.6.20/fs/yaf
+
+#endif
+
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_ecc.c ../new/linux-2.6.20/fs/yaffs2/yaffs_ecc.c
---- linux-2.6.20/fs/yaffs2/yaffs_ecc.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_ecc.c 2008-09-12 12:54:02.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_ecc.c
@@ -0,0 +1,331 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
@@ -215528,9 +216717,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_ecc.c ../new/linux-2.6.20/fs/yaffs2/ya
+
+}
+
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_ecc.h ../new/linux-2.6.20/fs/yaffs2/yaffs_ecc.h
---- linux-2.6.20/fs/yaffs2/yaffs_ecc.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_ecc.h 2008-09-12 12:54:02.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_ecc.h
@@ -0,0 +1,44 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
@@ -215576,9 +216764,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_ecc.h ../new/linux-2.6.20/fs/yaffs2/ya
+ yaffs_ECCOther * read_ecc,
+ const yaffs_ECCOther * test_ecc);
+#endif
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_fs.c ../new/linux-2.6.20/fs/yaffs2/yaffs_fs.c
---- linux-2.6.20/fs/yaffs2/yaffs_fs.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_fs.c 2008-09-12 12:54:02.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_fs.c
@@ -0,0 +1,2297 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
@@ -217877,9 +219064,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_fs.c ../new/linux-2.6.20/fs/yaffs2/yaf
+MODULE_DESCRIPTION("YAFFS2 - a NAND specific flash file system");
+MODULE_AUTHOR("Charles Manning, Aleph One Ltd., 2002-2006");
+MODULE_LICENSE("GPL");
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_guts.c ../new/linux-2.6.20/fs/yaffs2/yaffs_guts.c
---- linux-2.6.20/fs/yaffs2/yaffs_guts.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_guts.c 2008-09-12 12:54:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_guts.c
@@ -0,0 +1,7532 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
@@ -225413,9 +226599,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_guts.c ../new/linux-2.6.20/fs/yaffs2/y
+
+ return YAFFS_OK;
+}
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_guts.h ../new/linux-2.6.20/fs/yaffs2/yaffs_guts.h
---- linux-2.6.20/fs/yaffs2/yaffs_guts.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_guts.h 2008-09-12 12:54:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_guts.h
@@ -0,0 +1,904 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
@@ -226321,10 +227506,253 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_guts.h ../new/linux-2.6.20/fs/yaffs2/y
+void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi);
+
+#endif
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffsinterface.h ../new/linux-2.6.20/fs/yaffs2/yaffsinterface.h
---- linux-2.6.20/fs/yaffs2/yaffsinterface.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffsinterface.h 2008-09-12 12:54:05.000000000 +0530
-@@ -0,0 +1,21 @@
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_mtdif.c
+@@ -0,0 +1,241 @@
++/*
++ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
++ *
++ * Copyright (C) 2002-2007 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++const char *yaffs_mtdif_c_version =
++ "$Id: yaffs_mtdif.c,v 1.21 2007/12/13 15:35:18 wookey Exp $";
++
++#include "yportenv.h"
++
++
++#include "yaffs_mtdif.h"
++
++#include "linux/mtd/mtd.h"
++#include "linux/types.h"
++#include "linux/time.h"
++#include "linux/mtd/nand.h"
++
++#if (MTD_VERSION_CODE < MTD_VERSION(2,6,18))
++static struct nand_oobinfo yaffs_oobinfo = {
++ .useecc = 1,
++ .eccbytes = 6,
++ .eccpos = {8, 9, 10, 13, 14, 15}
++};
++
++static struct nand_oobinfo yaffs_noeccinfo = {
++ .useecc = 0,
++};
++#endif
++
++#if (MTD_VERSION_CODE > MTD_VERSION(2,6,17))
++static inline void translate_spare2oob(const yaffs_Spare *spare, __u8 *oob)
++{
++ oob[0] = spare->tagByte0;
++ oob[1] = spare->tagByte1;
++ oob[2] = spare->tagByte2;
++ oob[3] = spare->tagByte3;
++ oob[4] = spare->tagByte4;
++ oob[5] = spare->tagByte5 & 0x3f;
++ oob[5] |= spare->blockStatus == 'Y' ? 0: 0x80;
++ oob[5] |= spare->pageStatus == 0 ? 0: 0x40;
++ oob[6] = spare->tagByte6;
++ oob[7] = spare->tagByte7;
++}
++
++static inline void translate_oob2spare(yaffs_Spare *spare, __u8 *oob)
++{
++ struct yaffs_NANDSpare *nspare = (struct yaffs_NANDSpare *)spare;
++ spare->tagByte0 = oob[0];
++ spare->tagByte1 = oob[1];
++ spare->tagByte2 = oob[2];
++ spare->tagByte3 = oob[3];
++ spare->tagByte4 = oob[4];
++ spare->tagByte5 = oob[5] == 0xff ? 0xff : oob[5] & 0x3f;
++ spare->blockStatus = oob[5] & 0x80 ? 0xff : 'Y';
++ spare->pageStatus = oob[5] & 0x40 ? 0xff : 0;
++ spare->ecc1[0] = spare->ecc1[1] = spare->ecc1[2] = 0xff;
++ spare->tagByte6 = oob[6];
++ spare->tagByte7 = oob[7];
++ spare->ecc2[0] = spare->ecc2[1] = spare->ecc2[2] = 0xff;
++
++ nspare->eccres1 = nspare->eccres2 = 0; /* FIXME */
++}
++#endif
++
++int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
++ const __u8 * data, const yaffs_Spare * spare)
++{
++ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
++#if (MTD_VERSION_CODE > MTD_VERSION(2,6,17))
++ struct mtd_oob_ops ops;
++#endif
++ size_t dummy;
++ int retval = 0;
++
++ loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
++#if (MTD_VERSION_CODE > MTD_VERSION(2,6,17))
++ __u8 spareAsBytes[8]; /* OOB */
++
++ if (data && !spare)
++ retval = mtd->write(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data);
++ else if (spare) {
++ if (dev->useNANDECC) {
++ translate_spare2oob(spare, spareAsBytes);
++ ops.mode = MTD_OOB_AUTO;
++ ops.ooblen = 8; /* temp hack */
++ } else {
++ ops.mode = MTD_OOB_RAW;
++ ops.ooblen = YAFFS_BYTES_PER_SPARE;
++ }
++ ops.len = data ? dev->nDataBytesPerChunk : ops.ooblen;
++ ops.datbuf = (u8 *)data;
++ ops.ooboffs = 0;
++ ops.oobbuf = spareAsBytes;
++ retval = mtd->write_oob(mtd, addr, &ops);
++ }
++#else
++ __u8 *spareAsBytes = (__u8 *) spare;
++
++ if (data && spare) {
++ if (dev->useNANDECC)
++ retval =
++ mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data, spareAsBytes,
++ &yaffs_oobinfo);
++ else
++ retval =
++ mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data, spareAsBytes,
++ &yaffs_noeccinfo);
++ } else {
++ if (data)
++ retval =
++ mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy,
++ data);
++ if (spare)
++ retval =
++ mtd->write_oob(mtd, addr, YAFFS_BYTES_PER_SPARE,
++ &dummy, spareAsBytes);
++ }
++#endif
++
++ if (retval == 0)
++ return YAFFS_OK;
++ else
++ return YAFFS_FAIL;
++}
++
++int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
++ yaffs_Spare * spare)
++{
++ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
++#if (MTD_VERSION_CODE > MTD_VERSION(2,6,17))
++ struct mtd_oob_ops ops;
++#endif
++ size_t dummy;
++ int retval = 0;
++
++ loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
++#if (MTD_VERSION_CODE > MTD_VERSION(2,6,17))
++ __u8 spareAsBytes[8]; /* OOB */
++
++ if (data && !spare)
++ retval = mtd->read(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data);
++ else if (spare) {
++ if (dev->useNANDECC) {
++ ops.mode = MTD_OOB_AUTO;
++ ops.ooblen = 8; /* temp hack */
++ } else {
++ ops.mode = MTD_OOB_RAW;
++ ops.ooblen = YAFFS_BYTES_PER_SPARE;
++ }
++ ops.len = data ? dev->nDataBytesPerChunk : ops.ooblen;
++ ops.datbuf = data;
++ ops.ooboffs = 0;
++ ops.oobbuf = spareAsBytes;
++ retval = mtd->read_oob(mtd, addr, &ops);
++ if (dev->useNANDECC)
++ translate_oob2spare(spare, spareAsBytes);
++ }
++#else
++ __u8 *spareAsBytes = (__u8 *) spare;
++
++ if (data && spare) {
++ if (dev->useNANDECC) {
++ /* Careful, this call adds 2 ints */
++ /* to the end of the spare data. Calling function */
++ /* should allocate enough memory for spare, */
++ /* i.e. [YAFFS_BYTES_PER_SPARE+2*sizeof(int)]. */
++ retval =
++ mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data, spareAsBytes,
++ &yaffs_oobinfo);
++ } else {
++ retval =
++ mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data, spareAsBytes,
++ &yaffs_noeccinfo);
++ }
++ } else {
++ if (data)
++ retval =
++ mtd->read(mtd, addr, dev->nDataBytesPerChunk, &dummy,
++ data);
++ if (spare)
++ retval =
++ mtd->read_oob(mtd, addr, YAFFS_BYTES_PER_SPARE,
++ &dummy, spareAsBytes);
++ }
++#endif
++
++ if (retval == 0)
++ return YAFFS_OK;
++ else
++ return YAFFS_FAIL;
++}
++
++int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber)
++{
++ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
++ __u32 addr =
++ ((loff_t) blockNumber) * dev->nDataBytesPerChunk
++ * dev->nChunksPerBlock;
++ struct erase_info ei;
++ int retval = 0;
++
++ ei.mtd = mtd;
++ ei.addr = addr;
++ ei.len = dev->nDataBytesPerChunk * dev->nChunksPerBlock;
++ ei.time = 1000;
++ ei.retries = 2;
++ ei.callback = NULL;
++ ei.priv = (u_long) dev;
++
++ /* Todo finish off the ei if required */
++
++ sema_init(&dev->sem, 0);
++
++ retval = mtd->erase(mtd, &ei);
++
++ if (retval == 0)
++ return YAFFS_OK;
++ else
++ return YAFFS_FAIL;
++}
++
++int nandmtd_InitialiseNAND(yaffs_Device * dev)
++{
++ return YAFFS_OK;
++}
++
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_mtdif.h
+@@ -0,0 +1,27 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
+ *
@@ -226340,15 +227768,20 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffsinterface.h ../new/linux-2.6.20/fs/yaff
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ */
+
-+#ifndef __YAFFSINTERFACE_H__
-+#define __YAFFSINTERFACE_H__
++#ifndef __YAFFS_MTDIF_H__
++#define __YAFFS_MTDIF_H__
+
-+int yaffs_Initialise(unsigned nBlocks);
++#include "yaffs_guts.h"
+
++int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
++ const __u8 * data, const yaffs_Spare * spare);
++int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
++ yaffs_Spare * spare);
++int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber);
++int nandmtd_InitialiseNAND(yaffs_Device * dev);
+#endif
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_mtdif1.c ../new/linux-2.6.20/fs/yaffs2/yaffs_mtdif1.c
---- linux-2.6.20/fs/yaffs2/yaffs_mtdif1.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_mtdif1.c 2008-09-12 12:54:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_mtdif1.c
@@ -0,0 +1,369 @@
+/*
+ * YAFFS: Yet another FFS. A NAND-flash specific file system.
@@ -226719,9 +228152,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_mtdif1.c ../new/linux-2.6.20/fs/yaffs2
+}
+
+#endif /*MTD_VERSION*/
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_mtdif1.h ../new/linux-2.6.20/fs/yaffs2/yaffs_mtdif1.h
---- linux-2.6.20/fs/yaffs2/yaffs_mtdif1.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_mtdif1.h 2008-09-12 12:54:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_mtdif1.h
@@ -0,0 +1,28 @@
+/*
+ * YAFFS: Yet another Flash File System. A NAND-flash specific file system.
@@ -226751,9 +228183,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_mtdif1.h ../new/linux-2.6.20/fs/yaffs2
+ yaffs_BlockState * state, int *sequenceNumber);
+
+#endif
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_mtdif2.c ../new/linux-2.6.20/fs/yaffs2/yaffs_mtdif2.c
---- linux-2.6.20/fs/yaffs2/yaffs_mtdif2.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_mtdif2.c 2008-09-12 12:54:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_mtdif2.c
@@ -0,0 +1,232 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
@@ -226987,9 +228418,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_mtdif2.c ../new/linux-2.6.20/fs/yaffs2
+ return YAFFS_FAIL;
+}
+
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_mtdif2.h ../new/linux-2.6.20/fs/yaffs2/yaffs_mtdif2.h
---- linux-2.6.20/fs/yaffs2/yaffs_mtdif2.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_mtdif2.h 2008-09-12 12:54:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_mtdif2.h
@@ -0,0 +1,29 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
@@ -227020,285 +228450,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_mtdif2.h ../new/linux-2.6.20/fs/yaffs2
+ yaffs_BlockState * state, int *sequenceNumber);
+
+#endif
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_mtdif.c ../new/linux-2.6.20/fs/yaffs2/yaffs_mtdif.c
---- linux-2.6.20/fs/yaffs2/yaffs_mtdif.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_mtdif.c 2008-09-12 12:54:03.000000000 +0530
-@@ -0,0 +1,241 @@
-+/*
-+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
-+ *
-+ * Copyright (C) 2002-2007 Aleph One Ltd.
-+ * for Toby Churchill Ltd and Brightstar Engineering
-+ *
-+ * Created by Charles Manning <charles@aleph1.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+const char *yaffs_mtdif_c_version =
-+ "$Id: yaffs_mtdif.c,v 1.21 2007/12/13 15:35:18 wookey Exp $";
-+
-+#include "yportenv.h"
-+
-+
-+#include "yaffs_mtdif.h"
-+
-+#include "linux/mtd/mtd.h"
-+#include "linux/types.h"
-+#include "linux/time.h"
-+#include "linux/mtd/nand.h"
-+
-+#if (MTD_VERSION_CODE < MTD_VERSION(2,6,18))
-+static struct nand_oobinfo yaffs_oobinfo = {
-+ .useecc = 1,
-+ .eccbytes = 6,
-+ .eccpos = {8, 9, 10, 13, 14, 15}
-+};
-+
-+static struct nand_oobinfo yaffs_noeccinfo = {
-+ .useecc = 0,
-+};
-+#endif
-+
-+#if (MTD_VERSION_CODE > MTD_VERSION(2,6,17))
-+static inline void translate_spare2oob(const yaffs_Spare *spare, __u8 *oob)
-+{
-+ oob[0] = spare->tagByte0;
-+ oob[1] = spare->tagByte1;
-+ oob[2] = spare->tagByte2;
-+ oob[3] = spare->tagByte3;
-+ oob[4] = spare->tagByte4;
-+ oob[5] = spare->tagByte5 & 0x3f;
-+ oob[5] |= spare->blockStatus == 'Y' ? 0: 0x80;
-+ oob[5] |= spare->pageStatus == 0 ? 0: 0x40;
-+ oob[6] = spare->tagByte6;
-+ oob[7] = spare->tagByte7;
-+}
-+
-+static inline void translate_oob2spare(yaffs_Spare *spare, __u8 *oob)
-+{
-+ struct yaffs_NANDSpare *nspare = (struct yaffs_NANDSpare *)spare;
-+ spare->tagByte0 = oob[0];
-+ spare->tagByte1 = oob[1];
-+ spare->tagByte2 = oob[2];
-+ spare->tagByte3 = oob[3];
-+ spare->tagByte4 = oob[4];
-+ spare->tagByte5 = oob[5] == 0xff ? 0xff : oob[5] & 0x3f;
-+ spare->blockStatus = oob[5] & 0x80 ? 0xff : 'Y';
-+ spare->pageStatus = oob[5] & 0x40 ? 0xff : 0;
-+ spare->ecc1[0] = spare->ecc1[1] = spare->ecc1[2] = 0xff;
-+ spare->tagByte6 = oob[6];
-+ spare->tagByte7 = oob[7];
-+ spare->ecc2[0] = spare->ecc2[1] = spare->ecc2[2] = 0xff;
-+
-+ nspare->eccres1 = nspare->eccres2 = 0; /* FIXME */
-+}
-+#endif
-+
-+int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
-+ const __u8 * data, const yaffs_Spare * spare)
-+{
-+ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-+#if (MTD_VERSION_CODE > MTD_VERSION(2,6,17))
-+ struct mtd_oob_ops ops;
-+#endif
-+ size_t dummy;
-+ int retval = 0;
-+
-+ loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-+#if (MTD_VERSION_CODE > MTD_VERSION(2,6,17))
-+ __u8 spareAsBytes[8]; /* OOB */
-+
-+ if (data && !spare)
-+ retval = mtd->write(mtd, addr, dev->nDataBytesPerChunk,
-+ &dummy, data);
-+ else if (spare) {
-+ if (dev->useNANDECC) {
-+ translate_spare2oob(spare, spareAsBytes);
-+ ops.mode = MTD_OOB_AUTO;
-+ ops.ooblen = 8; /* temp hack */
-+ } else {
-+ ops.mode = MTD_OOB_RAW;
-+ ops.ooblen = YAFFS_BYTES_PER_SPARE;
-+ }
-+ ops.len = data ? dev->nDataBytesPerChunk : ops.ooblen;
-+ ops.datbuf = (u8 *)data;
-+ ops.ooboffs = 0;
-+ ops.oobbuf = spareAsBytes;
-+ retval = mtd->write_oob(mtd, addr, &ops);
-+ }
-+#else
-+ __u8 *spareAsBytes = (__u8 *) spare;
-+
-+ if (data && spare) {
-+ if (dev->useNANDECC)
-+ retval =
-+ mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
-+ &dummy, data, spareAsBytes,
-+ &yaffs_oobinfo);
-+ else
-+ retval =
-+ mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
-+ &dummy, data, spareAsBytes,
-+ &yaffs_noeccinfo);
-+ } else {
-+ if (data)
-+ retval =
-+ mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy,
-+ data);
-+ if (spare)
-+ retval =
-+ mtd->write_oob(mtd, addr, YAFFS_BYTES_PER_SPARE,
-+ &dummy, spareAsBytes);
-+ }
-+#endif
-+
-+ if (retval == 0)
-+ return YAFFS_OK;
-+ else
-+ return YAFFS_FAIL;
-+}
-+
-+int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
-+ yaffs_Spare * spare)
-+{
-+ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-+#if (MTD_VERSION_CODE > MTD_VERSION(2,6,17))
-+ struct mtd_oob_ops ops;
-+#endif
-+ size_t dummy;
-+ int retval = 0;
-+
-+ loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-+#if (MTD_VERSION_CODE > MTD_VERSION(2,6,17))
-+ __u8 spareAsBytes[8]; /* OOB */
-+
-+ if (data && !spare)
-+ retval = mtd->read(mtd, addr, dev->nDataBytesPerChunk,
-+ &dummy, data);
-+ else if (spare) {
-+ if (dev->useNANDECC) {
-+ ops.mode = MTD_OOB_AUTO;
-+ ops.ooblen = 8; /* temp hack */
-+ } else {
-+ ops.mode = MTD_OOB_RAW;
-+ ops.ooblen = YAFFS_BYTES_PER_SPARE;
-+ }
-+ ops.len = data ? dev->nDataBytesPerChunk : ops.ooblen;
-+ ops.datbuf = data;
-+ ops.ooboffs = 0;
-+ ops.oobbuf = spareAsBytes;
-+ retval = mtd->read_oob(mtd, addr, &ops);
-+ if (dev->useNANDECC)
-+ translate_oob2spare(spare, spareAsBytes);
-+ }
-+#else
-+ __u8 *spareAsBytes = (__u8 *) spare;
-+
-+ if (data && spare) {
-+ if (dev->useNANDECC) {
-+ /* Careful, this call adds 2 ints */
-+ /* to the end of the spare data. Calling function */
-+ /* should allocate enough memory for spare, */
-+ /* i.e. [YAFFS_BYTES_PER_SPARE+2*sizeof(int)]. */
-+ retval =
-+ mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
-+ &dummy, data, spareAsBytes,
-+ &yaffs_oobinfo);
-+ } else {
-+ retval =
-+ mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
-+ &dummy, data, spareAsBytes,
-+ &yaffs_noeccinfo);
-+ }
-+ } else {
-+ if (data)
-+ retval =
-+ mtd->read(mtd, addr, dev->nDataBytesPerChunk, &dummy,
-+ data);
-+ if (spare)
-+ retval =
-+ mtd->read_oob(mtd, addr, YAFFS_BYTES_PER_SPARE,
-+ &dummy, spareAsBytes);
-+ }
-+#endif
-+
-+ if (retval == 0)
-+ return YAFFS_OK;
-+ else
-+ return YAFFS_FAIL;
-+}
-+
-+int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber)
-+{
-+ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-+ __u32 addr =
-+ ((loff_t) blockNumber) * dev->nDataBytesPerChunk
-+ * dev->nChunksPerBlock;
-+ struct erase_info ei;
-+ int retval = 0;
-+
-+ ei.mtd = mtd;
-+ ei.addr = addr;
-+ ei.len = dev->nDataBytesPerChunk * dev->nChunksPerBlock;
-+ ei.time = 1000;
-+ ei.retries = 2;
-+ ei.callback = NULL;
-+ ei.priv = (u_long) dev;
-+
-+ /* Todo finish off the ei if required */
-+
-+ sema_init(&dev->sem, 0);
-+
-+ retval = mtd->erase(mtd, &ei);
-+
-+ if (retval == 0)
-+ return YAFFS_OK;
-+ else
-+ return YAFFS_FAIL;
-+}
-+
-+int nandmtd_InitialiseNAND(yaffs_Device * dev)
-+{
-+ return YAFFS_OK;
-+}
-+
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_mtdif.h ../new/linux-2.6.20/fs/yaffs2/yaffs_mtdif.h
---- linux-2.6.20/fs/yaffs2/yaffs_mtdif.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_mtdif.h 2008-09-12 12:54:03.000000000 +0530
-@@ -0,0 +1,27 @@
-+/*
-+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
-+ *
-+ * Copyright (C) 2002-2007 Aleph One Ltd.
-+ * for Toby Churchill Ltd and Brightstar Engineering
-+ *
-+ * Created by Charles Manning <charles@aleph1.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 2.1 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
-+ */
-+
-+#ifndef __YAFFS_MTDIF_H__
-+#define __YAFFS_MTDIF_H__
-+
-+#include "yaffs_guts.h"
-+
-+int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
-+ const __u8 * data, const yaffs_Spare * spare);
-+int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
-+ yaffs_Spare * spare);
-+int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber);
-+int nandmtd_InitialiseNAND(yaffs_Device * dev);
-+#endif
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_nand.c ../new/linux-2.6.20/fs/yaffs2/yaffs_nand.c
---- linux-2.6.20/fs/yaffs2/yaffs_nand.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_nand.c 2008-09-12 12:54:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_nand.c
@@ -0,0 +1,134 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
@@ -227434,52 +228587,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_nand.c ../new/linux-2.6.20/fs/yaffs2/y
+
+
+
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_nandemul2k.h ../new/linux-2.6.20/fs/yaffs2/yaffs_nandemul2k.h
---- linux-2.6.20/fs/yaffs2/yaffs_nandemul2k.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_nandemul2k.h 2008-09-12 12:54:04.000000000 +0530
-@@ -0,0 +1,39 @@
-+/*
-+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
-+ *
-+ * Copyright (C) 2002-2007 Aleph One Ltd.
-+ * for Toby Churchill Ltd and Brightstar Engineering
-+ *
-+ * Created by Charles Manning <charles@aleph1.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 2.1 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
-+ */
-+
-+/* Interface to emulated NAND functions (2k page size) */
-+
-+#ifndef __YAFFS_NANDEMUL2K_H__
-+#define __YAFFS_NANDEMUL2K_H__
-+
-+#include "yaffs_guts.h"
-+
-+int nandemul2k_WriteChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
-+ int chunkInNAND, const __u8 * data,
-+ yaffs_ExtendedTags * tags);
-+int nandemul2k_ReadChunkWithTagsFromNAND(struct yaffs_DeviceStruct *dev,
-+ int chunkInNAND, __u8 * data,
-+ yaffs_ExtendedTags * tags);
-+int nandemul2k_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
-+int nandemul2k_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
-+ yaffs_BlockState * state, int *sequenceNumber);
-+int nandemul2k_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
-+ int blockInNAND);
-+int nandemul2k_InitialiseNAND(struct yaffs_DeviceStruct *dev);
-+int nandemul2k_GetBytesPerChunk(void);
-+int nandemul2k_GetChunksPerBlock(void);
-+int nandemul2k_GetNumberOfBlocks(void);
-+
-+#endif
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_nand.h ../new/linux-2.6.20/fs/yaffs2/yaffs_nand.h
---- linux-2.6.20/fs/yaffs2/yaffs_nand.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_nand.h 2008-09-12 12:54:03.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_nand.h
@@ -0,0 +1,44 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
@@ -227525,9 +228634,50 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_nand.h ../new/linux-2.6.20/fs/yaffs2/y
+
+#endif
+
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_packedtags1.c ../new/linux-2.6.20/fs/yaffs2/yaffs_packedtags1.c
---- linux-2.6.20/fs/yaffs2/yaffs_packedtags1.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_packedtags1.c 2008-09-12 12:54:04.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_nandemul2k.h
+@@ -0,0 +1,39 @@
++/*
++ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
++ *
++ * Copyright (C) 2002-2007 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 2.1 as
++ * published by the Free Software Foundation.
++ *
++ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
++ */
++
++/* Interface to emulated NAND functions (2k page size) */
++
++#ifndef __YAFFS_NANDEMUL2K_H__
++#define __YAFFS_NANDEMUL2K_H__
++
++#include "yaffs_guts.h"
++
++int nandemul2k_WriteChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
++ int chunkInNAND, const __u8 * data,
++ yaffs_ExtendedTags * tags);
++int nandemul2k_ReadChunkWithTagsFromNAND(struct yaffs_DeviceStruct *dev,
++ int chunkInNAND, __u8 * data,
++ yaffs_ExtendedTags * tags);
++int nandemul2k_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
++int nandemul2k_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
++ yaffs_BlockState * state, int *sequenceNumber);
++int nandemul2k_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
++ int blockInNAND);
++int nandemul2k_InitialiseNAND(struct yaffs_DeviceStruct *dev);
++int nandemul2k_GetBytesPerChunk(void);
++int nandemul2k_GetChunksPerBlock(void);
++int nandemul2k_GetNumberOfBlocks(void);
++
++#endif
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_packedtags1.c
@@ -0,0 +1,52 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
@@ -227581,9 +228731,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_packedtags1.c ../new/linux-2.6.20/fs/y
+
+ }
+}
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_packedtags1.h ../new/linux-2.6.20/fs/yaffs2/yaffs_packedtags1.h
---- linux-2.6.20/fs/yaffs2/yaffs_packedtags1.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_packedtags1.h 2008-09-12 12:54:04.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_packedtags1.h
@@ -0,0 +1,37 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
@@ -227622,9 +228771,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_packedtags1.h ../new/linux-2.6.20/fs/y
+void yaffs_PackTags1(yaffs_PackedTags1 * pt, const yaffs_ExtendedTags * t);
+void yaffs_UnpackTags1(yaffs_ExtendedTags * t, const yaffs_PackedTags1 * pt);
+#endif
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_packedtags2.c ../new/linux-2.6.20/fs/yaffs2/yaffs_packedtags2.c
---- linux-2.6.20/fs/yaffs2/yaffs_packedtags2.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_packedtags2.c 2008-09-12 12:54:04.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_packedtags2.c
@@ -0,0 +1,182 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
@@ -227808,9 +228956,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_packedtags2.c ../new/linux-2.6.20/fs/y
+ yaffs_DumpTags2(t);
+
+}
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_packedtags2.h ../new/linux-2.6.20/fs/yaffs2/yaffs_packedtags2.h
---- linux-2.6.20/fs/yaffs2/yaffs_packedtags2.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_packedtags2.h 2008-09-12 12:54:04.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_packedtags2.h
@@ -0,0 +1,38 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
@@ -227850,9 +228997,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_packedtags2.h ../new/linux-2.6.20/fs/y
+void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t);
+void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt);
+#endif
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_qsort.c ../new/linux-2.6.20/fs/yaffs2/yaffs_qsort.c
---- linux-2.6.20/fs/yaffs2/yaffs_qsort.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_qsort.c 2008-09-12 12:54:04.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_qsort.c
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 1992, 1993
@@ -228014,9 +229160,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_qsort.c ../new/linux-2.6.20/fs/yaffs2/
+ }
+/* yaffs_qsort(pn - r, r / es, es, cmp);*/
+}
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_qsort.h ../new/linux-2.6.20/fs/yaffs2/yaffs_qsort.h
---- linux-2.6.20/fs/yaffs2/yaffs_qsort.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_qsort.h 2008-09-12 12:54:04.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_qsort.h
@@ -0,0 +1,23 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
@@ -228041,9 +229186,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_qsort.h ../new/linux-2.6.20/fs/yaffs2/
+ int (*cmp)(const void *, const void *));
+
+#endif
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_tagscompat.c ../new/linux-2.6.20/fs/yaffs2/yaffs_tagscompat.c
---- linux-2.6.20/fs/yaffs2/yaffs_tagscompat.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_tagscompat.c 2008-09-12 12:54:04.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_tagscompat.c
@@ -0,0 +1,530 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
@@ -228575,9 +229719,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_tagscompat.c ../new/linux-2.6.20/fs/ya
+
+ return YAFFS_OK;
+}
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_tagscompat.h ../new/linux-2.6.20/fs/yaffs2/yaffs_tagscompat.h
---- linux-2.6.20/fs/yaffs2/yaffs_tagscompat.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_tagscompat.h 2008-09-12 12:54:04.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_tagscompat.h
@@ -0,0 +1,40 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
@@ -228619,9 +229762,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_tagscompat.h ../new/linux-2.6.20/fs/ya
+int yaffs_CountBits(__u8 byte);
+
+#endif
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_tagsvalidity.c ../new/linux-2.6.20/fs/yaffs2/yaffs_tagsvalidity.c
---- linux-2.6.20/fs/yaffs2/yaffs_tagsvalidity.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_tagsvalidity.c 2008-09-12 12:54:04.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_tagsvalidity.c
@@ -0,0 +1,28 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
@@ -228651,9 +229793,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_tagsvalidity.c ../new/linux-2.6.20/fs/
+ tags->validMarker1 == 0x55555555);
+
+}
-diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_tagsvalidity.h ../new/linux-2.6.20/fs/yaffs2/yaffs_tagsvalidity.h
---- linux-2.6.20/fs/yaffs2/yaffs_tagsvalidity.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yaffs_tagsvalidity.h 2008-09-12 12:54:05.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffs_tagsvalidity.h
@@ -0,0 +1,24 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
@@ -228679,9 +229820,32 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yaffs_tagsvalidity.h ../new/linux-2.6.20/fs/
+void yaffs_InitialiseTags(yaffs_ExtendedTags * tags);
+int yaffs_ValidateTags(yaffs_ExtendedTags * tags);
+#endif
-diff -Nauprw linux-2.6.20/fs/yaffs2/yportenv.h ../new/linux-2.6.20/fs/yaffs2/yportenv.h
---- linux-2.6.20/fs/yaffs2/yportenv.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/fs/yaffs2/yportenv.h 2008-09-12 12:54:05.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yaffsinterface.h
+@@ -0,0 +1,21 @@
++/*
++ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
++ *
++ * Copyright (C) 2002-2007 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 2.1 as
++ * published by the Free Software Foundation.
++ *
++ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
++ */
++
++#ifndef __YAFFSINTERFACE_H__
++#define __YAFFSINTERFACE_H__
++
++int yaffs_Initialise(unsigned nBlocks);
++
++#endif
+--- /dev/null
++++ linux-2.6.20/fs/yaffs2/yportenv.h
@@ -0,0 +1,200 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
@@ -228883,60 +230047,8 @@ diff -Nauprw linux-2.6.20/fs/yaffs2/yportenv.h ../new/linux-2.6.20/fs/yaffs2/ypo
+#endif
+
+#endif
-diff -Nauprw linux-2.6.20/.gitignore ../new/linux-2.6.20/.gitignore
---- linux-2.6.20/.gitignore 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/.gitignore 1970-01-01 05:30:00.000000000 +0530
-@@ -1,47 +0,0 @@
--#
--# NOTE! Don't add files that are generated in specific
--# subdirectories here. Add them in the ".gitignore" file
--# in that subdirectory instead.
--#
--# Normal rules
--#
--.*
--*.o
--*.a
--*.s
--*.ko
--*.so
--*.mod.c
--*.i
--*.lst
--*.symtypes
--
--#
--# Top-level generic files
--#
--tags
--TAGS
--vmlinux*
--System.map
--Module.symvers
--
--#
--# Generated include files
--#
--include/asm
--include/asm-*/asm-offsets.h
--include/config
--include/linux/autoconf.h
--include/linux/compile.h
--include/linux/version.h
--include/linux/utsrelease.h
--
--# stgit generated dirs
--patches-*
--
--# quilt's files
--patches
--series
--
--# cscope files
--cscope.*
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/audiocodec.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/audiocodec.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/audiocodec.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/audiocodec.h 2008-11-24 14:06:27.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/audiocodec.h
@@ -0,0 +1,444 @@
+/* include/asm-arm/arch-nomadik/audiocodec.h
+ *
@@ -229382,9 +230494,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/audiocodec.h ../new/linux
+#endif /* _AUDIOCODEC_H_ */
+
+/* End of file audiocodec.h*/
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/bits.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/bits.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/bits.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/bits.h 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/bits.h
@@ -0,0 +1,61 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -229447,9 +230558,49 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/bits.h ../new/linux-2.6.2
+#endif
+
+/* END */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/debug.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/debug.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/debug.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/debug.h 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/debug-macro.S
+@@ -0,0 +1,38 @@
++/* linux/include/asm-arm/arch-integrator/debug-macro.S
++ *
++ * Debugging macro include header
++ *
++ * Copyright (C) 1994-1999 Russell King
++ * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++*/
++
++#include <linux/amba/serial.h>
++
++ .macro addruart,rx
++ mrc p15, 0, \rx, c1, c0
++ tst \rx, #1 @ MMU enabled?
++ moveq \rx, #0xA0000000 @ physical base address
++ movne \rx, #0xf0000000 @ virtual base
++ addne \rx, \rx, #0xA0000000 >> 4
++ .endm
++
++ .macro senduart,rd,rx
++ strb \rd, [\rx, #UART01x_DR]
++ .endm
++
++ .macro waituart,rd,rx
++1001: ldr \rd, [\rx, #0x18] @ UARTFLG
++ tst \rd, #1 << 5 @ UARTFLGUTXFF - 1 when full
++ bne 1001b
++ .endm
++
++ .macro busyuart,rd,rx
++1001: ldr \rd, [\rx, #0x18] @ UARTFLG
++ tst \rd, #1 << 3 @ UARTFLGUBUSY - 1 when busy
++ bne 1001b
++ .endm
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/debug.h
@@ -0,0 +1,148 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/debug-nomadik.h
@@ -229463,9 +230614,9 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/debug.h ../new/linux-2.6.
+ * Description: Nomadik debug message strategy include file
+ *
+ * Reference: Documentation/arm/STM-Nomadik/debug_strategy.txt
-+ *
++ *
+ * Author : ST Microelectronics
-+ *
++ *
+ * ---------------------------------------------------------------------
+ */
+
@@ -229599,51 +230750,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/debug.h ../new/linux-2.6.
+#endif /* __INC_DBG_H */
+
+/* End of file - debug.h */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/debug-macro.S ../new/linux-2.6.20/include/asm-arm/arch-nomadik/debug-macro.S
---- linux-2.6.20/include/asm-arm/arch-nomadik/debug-macro.S 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/debug-macro.S 2007-11-21 11:51:41.000000000 +0530
-@@ -0,0 +1,38 @@
-+/* linux/include/asm-arm/arch-integrator/debug-macro.S
-+ *
-+ * Debugging macro include header
-+ *
-+ * Copyright (C) 1994-1999 Russell King
-+ * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+*/
-+
-+#include <linux/amba/serial.h>
-+
-+ .macro addruart,rx
-+ mrc p15, 0, \rx, c1, c0
-+ tst \rx, #1 @ MMU enabled?
-+ moveq \rx, #0xA0000000 @ physical base address
-+ movne \rx, #0xf0000000 @ virtual base
-+ addne \rx, \rx, #0xA0000000 >> 4
-+ .endm
-+
-+ .macro senduart,rd,rx
-+ strb \rd, [\rx, #UART01x_DR]
-+ .endm
-+
-+ .macro waituart,rd,rx
-+1001: ldr \rd, [\rx, #0x18] @ UARTFLG
-+ tst \rd, #1 << 5 @ UARTFLGUTXFF - 1 when full
-+ bne 1001b
-+ .endm
-+
-+ .macro busyuart,rd,rx
-+1001: ldr \rd, [\rx, #0x18] @ UARTFLG
-+ tst \rd, #1 << 3 @ UARTFLGUBUSY - 1 when busy
-+ bne 1001b
-+ .endm
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/defs.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/defs.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/defs.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/defs.h 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/defs.h
@@ -0,0 +1,245 @@
+/*
+ * include/asm/arch/defs.h
@@ -229660,7 +230768,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/defs.h ../new/linux-2.6.2
+
+#ifndef __ASSEMBLY__
+/*
-+ * Type definition
++ * Type definition
+ */
+#ifndef BITS64 /*to remove conflict with arch/arm/nwfpe/ARM-gcc.h*/
+typedef unsigned char uint8;
@@ -229687,7 +230795,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/defs.h ../new/linux-2.6.2
+
+/*
+ * Global frequency enumuration
-+ * Added to avoid frequency conversion function which is required to convert one HCL
++ * Added to avoid frequency conversion function which is required to convert one HCL
+ * frequency enumuration values to another HCL frequency enumuration values.
+ */
+
@@ -229743,7 +230851,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/defs.h ../new/linux-2.6.2
+} version_t;
+
+/*
-+ * Keyword definition
++ * Keyword definition
+ */
+#ifndef NULL
+#define NULL (0)
@@ -229890,9 +230998,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/defs.h ../new/linux-2.6.2
+#endif
+#endif /*__ASSEMBLY__*/
+#endif
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/dma.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/dma.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/dma.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/dma.h 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/dma.h
@@ -0,0 +1,362 @@
+/* include/asm-arm/arch-nomadik/dma.h
+ *
@@ -229919,7 +231026,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/dma.h ../new/linux-2.6.20
+
+#include <asm/arch/defs.h>
+
-+#define MAX_DMA_CHANNELS 32
++#define MAX_DMA_CHANNELS 32
+/* MAX_DMA_CHANNELS can be increased upto 127 if system needs more channels */
+#define MAX_DMA_LLIS (MAX_DMA_CHANNELS*4096)
+/*
@@ -229956,7 +231063,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/dma.h ../new/linux-2.6.20
+ */
+struct dmach_lli {
+ union {
-+ struct dmach_lli * p_lli_qh;
++ struct dmach_lli * p_lli_qh;
+ dma_addr_t sadr;
+ } mem1;
+ union {
@@ -230015,7 +231122,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/dma.h ../new/linux-2.6.20
+};
+
+/**
-+ * data structure for default dma peripharal setup
++ * data structure for default dma peripharal setup
+ */
+struct dmadev_description {
+ char * id;
@@ -230024,7 +231131,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/dma.h ../new/linux-2.6.20
+};
+
+/**
-+ * data structure for chip specific interface
++ * data structure for chip specific interface
+ */
+struct dma_soc_data {
+ struct dma_struct *dma_chan;
@@ -230035,7 +231142,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/dma.h ../new/linux-2.6.20
+};
+
+/**
-+ * Figurative constants and enums used ...............
++ * Figurative constants and enums used ...............
+ */
+#define NMDK_DMACH_ENABLE 1UL
+#define NMDK_DMACH_HALT 1UL<<18
@@ -230143,7 +231250,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/dma.h ../new/linux-2.6.20
+/* ............ Client Driver Interface ...................*/
+
+/**
-+ * data structure for client driver interface
++ * data structure for client driver interface
+ */
+struct nmdk_dma_info {
+ u32 mode; /* operation mode (xfer type/flow cntrl etc)*/
@@ -230185,7 +231292,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/dma.h ../new/linux-2.6.20
+#define DMA_QUEUE_ENABLED 0x040 /*To enable queueing for a channel*/
+#define DMA_QUEUE_DISABLED 0x000 /*To disable queueing for a channel*/
+
-+#define DMA_EXCH_PRIORITY_UNDEFINED 0x0000
++#define DMA_EXCH_PRIORITY_UNDEFINED 0x0000
+#define DMA_EXCH_PRIORITY_LOW 0x0100
+#define DMA_EXCH_PRIORITY_NORMAL 0x0200
+#define DMA_EXCH_PRIORITY_HIGH 0x0400
@@ -230256,9 +231363,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/dma.h ../new/linux-2.6.20
+#endif /* __INC_DMA_H */
+/* End of file - dma.h */
+
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/entry-macro.S ../new/linux-2.6.20/include/asm-arm/arch-nomadik/entry-macro.S
---- linux-2.6.20/include/asm-arm/arch-nomadik/entry-macro.S 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/entry-macro.S 2008-07-04 23:45:25.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/entry-macro.S
@@ -0,0 +1,210 @@
+/*
+ * include/asm-arm/arch-integrator/entry-macro.S
@@ -230350,7 +231456,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/entry-macro.S ../new/linu
+ str \tmp, [\base, #0x7bc] @ clean data in n way*/
+1004:
+ ldr \base, =NOMADIK_L2CC_BASE
-+ ldr \tmp, [\base, #0x7bc]
++ ldr \tmp, [\base, #0x7bc]
+ ldr \base, =0
+ cmp \tmp, \base
+ bne 1004b @ loop for completion
@@ -230365,7 +231471,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/entry-macro.S ../new/linu
+ str \tmp, [\base, #0x7fc] @ clean and invalidate data in n way*/
+1005:
+ ldr \base, =NOMADIK_L2CC_BASE
-+ ldr \tmp, [\base, #0x7fc]
++ ldr \tmp, [\base, #0x7fc]
+ ldr \base, =0
+ cmp \tmp, \base
+ bne 1005b @ loop for completion
@@ -230380,7 +231486,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/entry-macro.S ../new/linu
+ str \tmp, [\base, #0x77c] @ invalidate data in n way*/
+1006:
+ ldr \base, =NOMADIK_L2CC_BASE
-+ ldr \tmp, [\base, #0x77c]
++ ldr \tmp, [\base, #0x77c]
+ ldr \base, =0
+ cmp \tmp, \base
+ bne 1006b @ loop for completion
@@ -230413,7 +231519,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/entry-macro.S ../new/linu
+ str \tmp, [\base, #0x7fc] @ clean and invalidate data in n way*/
+2005:
+ ldr \base, =IO_ADDRESS(NOMADIK_L2CC_BASE)
-+ ldr \tmp, [\base, #0x7fc]
++ ldr \tmp, [\base, #0x7fc]
+ ldr \base, =0
+ cmp \tmp, \base
+ bne 2005b @ loop for completion
@@ -230464,15 +231570,14 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/entry-macro.S ../new/linu
+ str \tmp, [\base, #0x77c] @ invalidate data in n way*/
+1006:
+ ldr \base, =NOMADIK_L2CC_BASE
-+ ldr \tmp, [\base, #0x77c]
++ ldr \tmp, [\base, #0x77c]
+ ldr \base, =0
+ cmp \tmp, \base
+ bne 1006b @ loop for completion
+#endif
+ .endm
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/epio.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/epio.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/epio.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/epio.h 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/epio.h
@@ -0,0 +1,24 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/epio-nomadik.h
@@ -230498,9 +231603,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/epio.h ../new/linux-2.6.2
+#include <asm/arch/board/epio.h>
+
+#endif /*__ASM_ARM_ARCH_EPIO_H */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/fsmc.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/fsmc.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/fsmc.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/fsmc.h 2008-09-17 13:23:35.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/fsmc.h
@@ -0,0 +1,203 @@
+/* include/asm-arm/arch-nomadik/fsmc.h
+ *
@@ -230705,9 +231809,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/fsmc.h ../new/linux-2.6.2
+ fsmc_sram_nor_ctrl * p_bank_ctrl);
+
+#endif
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/gpio.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/gpio.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/gpio.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/gpio.h 2008-09-17 13:23:35.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/gpio.h
@@ -0,0 +1,529 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/gpio.h
@@ -230860,7 +231963,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/gpio.h ../new/linux-2.6.2
+} gpio_device_id;
+
+/*
-+ * Pin description To be used in SOFTWARE mode: refers to a pin.
++ * Pin description To be used in SOFTWARE mode: refers to a pin.
+ */
+typedef enum {
+ GPIO_PIN_0,
@@ -231044,11 +232147,11 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/gpio.h ../new/linux-2.6.2
+ GPIO_ALT_CCP1,
+#ifdef CONFIG_NOMADIK_NHK15
+ GPIO_ALT_ETHERNET,
-+ GPIO_ALT_ETM,
++ GPIO_ALT_ETM,
+#endif
+#ifdef CONFIG_MTD_ONENAND
+ GPIO_ALT_ONENAND,
-+#endif
++#endif
+ GPIO_ALT_FUNMAX /* Add new alt func before this */
+} gpio_alt_function;
+
@@ -231153,7 +232256,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/gpio.h ../new/linux-2.6.2
+/* GPIO behaviour in sleep mode */
+typedef enum {
+ GPIO_SLEEP_MODE_LEAVE_UNCHANGED, /* Parameter will be ignored by the function. */
-+ GPIO_SLEEP_MODE_INPUT_DEFAULTVOLT, /* GPIO is an input with pull up/down enabled
++ GPIO_SLEEP_MODE_INPUT_DEFAULTVOLT, /* GPIO is an input with pull up/down enabled
+ when in sleep mode. */
+ GPIO_SLEEP_MODE_CONTROLLED_BY_GPIO /* GPIO pin is controlled by GPIO IP. So mode,
+ direction and data values for GPIO pin in
@@ -231229,7 +232332,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/gpio.h ../new/linux-2.6.2
+};
+
+/**
-+ * providing this flag during request_irq tells gpio driver that the requested
++ * providing this flag during request_irq tells gpio driver that the requested
+ * interrupt handler to be executed in tasklet's context.
+ */
+#define SA_GPIOINTR_IN_TASKLET SA_ONSTACK
@@ -231238,9 +232341,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/gpio.h ../new/linux-2.6.2
+#define GPIOINTR_TASKLET_ENABLED 0x10000000
+
+#endif /* __INC_GPIO_H */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/hardware.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/hardware.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/hardware.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/hardware.h 2008-09-17 13:23:35.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/hardware.h
@@ -0,0 +1,107 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/hardware.h
@@ -231275,8 +232377,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/hardware.h ../new/linux-2
+#define IO_SIZE 0x1FF00000 /* VA Size for IO */
+#define IO_START 0x10100000 /* PA of IO */
+
-+/*
-+ * macro to get at IO space when running virtually
++/*
++ * macro to get at IO space when running virtually
+ */
+#define IO_ADDRESS(x) ((x) | IO_BASE)
+
@@ -231336,7 +232438,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/hardware.h ../new/linux-2
+#define SSP_PER_MASK 0x0fffffff
+
+/*
-+ * platform specific other constants
++ * platform specific other constants
+ */
+#define UART_CONTROL_MASK_RTSFLOW 0x04000
+#define UART_CONTROL_MASK_CTSFLOW 0x08000
@@ -231349,9 +232451,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/hardware.h ../new/linux-2
+#define NOMADIK_MTU1_VA (IO_ADDRESS(NOMADIK_MTU1_BASE))
+
+#endif /* __ASM_ARCH_HARDWARE_H */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/i2c.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/i2c.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/i2c.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/i2c.h 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/i2c.h
@@ -0,0 +1,419 @@
+/* include/asm-arm/arch-nomadik/i2c.h
+ *
@@ -231496,9 +232597,9 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/i2c.h ../new/linux-2.6.20
+typedef enum {
+ I2C_NO_INDEX, /* Current transfer is non-indexed */
+ I2C_BYTE_INDEX, /* Current transfer uses 8-bit index */
-+ I2C_HALF_WORD_LITTLE_ENDIAN, /* Current transfer uses 16-bit index
++ I2C_HALF_WORD_LITTLE_ENDIAN, /* Current transfer uses 16-bit index
+ in little endian mode */
-+ I2C_HALF_WORD_BIG_ENDIAN /* Current transfer uses 16-bit index
++ I2C_HALF_WORD_BIG_ENDIAN /* Current transfer uses 16-bit index
+ in big endian mode */
+} i2c_index_format_t;
+
@@ -231772,9 +232873,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/i2c.h ../new/linux-2.6.20
+ __u8 * data, int index, int count);
+
+#endif
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/io.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/io.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/io.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/io.h 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/io.h
@@ -0,0 +1,37 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/io.h
@@ -231813,9 +232913,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/io.h ../new/linux-2.6.20/
+#define __mem_isa(a) ((a) + PCI_MEMORY_VADDR)
+
+#endif
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/irqs.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/irqs.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/irqs.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/irqs.h 2007-11-21 11:51:41.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/irqs.h
@@ -0,0 +1,137 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/irqs.h
@@ -231854,13 +232953,13 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/irqs.h ../new/linux-2.6.2
+ * followed by irq requested with SA_IRQPRIORITY_0 to SA_IRQPRIORITY_15.
+ * Standard IRQs requested without priority flag have the lowest priority.
+ *
-+ * When any interrupt is being serviced, and if higher priority interrupt
++ * When any interrupt is being serviced, and if higher priority interrupt
+ * occures it will be serviced first.
+ *
+ * interrupt priority can also be enabled, disabled or changed at any moment of
-+ * time for a valid pre-requested interrupt by using API "set_irq_type"
++ * time for a valid pre-requested interrupt by using API "set_irq_type"
+ */
-+#define SA_NMDK_PRIORITYIRQ (SA_TRIGGER_LOW | SA_TRIGGER_HIGH)
++#define SA_NMDK_PRIORITYIRQ (SA_TRIGGER_LOW | SA_TRIGGER_HIGH)
+#define SA_IRQPRIORITY_1 (0x00100000 | SA_NMDK_PRIORITYIRQ)
+#define SA_IRQPRIORITY_2 (0x00200000 | SA_NMDK_PRIORITYIRQ)
+#define SA_IRQPRIORITY_3 (0x00300000 | SA_NMDK_PRIORITYIRQ)
@@ -231878,11 +232977,11 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/irqs.h ../new/linux-2.6.2
+#define SA_IRQPRIORITY_15 (0x00f00000 | SA_NMDK_PRIORITYIRQ)
+#define SA_IRQPRIORITY_MASK (0x00f00000 | SA_NMDK_PRIORITYIRQ)
+
-+#define VIC_PRIORITY_LOGIC_ENABLED
++#define VIC_PRIORITY_LOGIC_ENABLED
+#define VIC_VECTORED_IRQ_NUM 16 /*maximum available verctored irqs*/
+#define IRQ_PIC_START 0 /*used by entry_macro.S*/
+
-+/*
++/*
+ * Interrupt numbers generic for all Nomadik Chip cuts
+ */
+#define IRQ_WATCHDOG 0
@@ -231936,7 +233035,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/irqs.h ../new/linux-2.6.2
+/*
+ * Below values need to be checked
+ */
-+#define MAXFIQNUM 31
++#define MAXFIQNUM 31
+#define MAXSWINUM 31
+
+#define MAX_CHIP_IRQ ( MAXIRQNUM + 1 )
@@ -231949,14 +233048,13 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/irqs.h ../new/linux-2.6.2
+/* Macros to get irqno for GPIO pin and vice-versa*/
+#define IRQNO_GPIO(x) ( MAX_CHIP_IRQ + x )
+#define GPIO_PIN_FOR_IRQ(x) ( x - MAX_CHIP_IRQ)
-+#define IRQNO_FOR_DMACH(x) ( MAX_GPIO_IRQ + x )
++#define IRQNO_FOR_DMACH(x) ( MAX_GPIO_IRQ + x )
+#define DMACH_FOR_IRQNO(x) ( x - MAX_GPIO_IRQ)
+
+#endif /*ASM_ARCH_IRQS_H*/
+
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/kpd.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/kpd.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/kpd.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/kpd.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/kpd.h
@@ -0,0 +1,56 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/kpd.h
@@ -232014,9 +233112,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/kpd.h ../new/linux-2.6.20
+};
+
+#endif /*__ASM_ARM_ARCH_KPD_NOMADIK_H*/
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/memory.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/memory.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/memory.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/memory.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/memory.h
@@ -0,0 +1,41 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/memory.h
@@ -232059,9 +233156,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/memory.h ../new/linux-2.6
+#define CONSISTENT_DMA_SIZE SZ_32M
+
+#endif
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/mmc.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/mmc.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/mmc.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/mmc.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/mmc.h
@@ -0,0 +1,234 @@
+/*
+ * linux/drivers/mmc/nomadik_mmc.h - ARM PrimeCell MMCI PL180 driver
@@ -232297,335 +233393,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/mmc.h ../new/linux-2.6.20
+};
+
+
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/msp.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/msp.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/msp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/msp.h 2008-11-19 16:47:04.000000000 +0530
-@@ -0,0 +1,322 @@
-+/*Copyright 2006, STMicroelectronics
-+ *
-+ *
-+ * 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 NOMADIC_MSP_HEADER
-+#define NOMADIC_MSP_HEADER
-+
-+/* Generic config struct. Use the actual values defined below for global
-+ * control register
-+ */
-+
-+struct msp_generic_config {
-+ unsigned int input_clock_freq;
-+ unsigned int rx_clock_sel;
-+ unsigned int tx_clock_sel;
-+ unsigned int srg_clock_sel;
-+ unsigned int rx_endianess;
-+ unsigned int tx_endianess;
-+ unsigned int rx_frame_sync_pol;
-+ unsigned int tx_frame_sync_pol;
-+ unsigned int rx_frame_sync_sel;
-+ unsigned int tx_frame_sync_sel;
-+ unsigned int rx_unexpect_frame_sync;
-+ unsigned int tx_unexpect_frame_sync;
-+ unsigned int rx_fifo_config;
-+ unsigned int tx_fifo_config;
-+ unsigned int spi_clk_mode;
-+ unsigned int spi_burst_mode;
-+};
-+typedef enum {
-+ MSP_REQUEST_NOT_APPLICABLE = -9,
-+ MSP_BAD_PERIHERAL_ID = -8,
-+ MSP_TRANSMISSION_ON_GOING = -7,
-+ MSP_TRANSMIT_FIFO_TIMEOUT = -6,
-+ MSP_FEATURE_NOT_SUPPORTED = -5,
-+ MSP_NON_AUTHORIZED_MODE = -4,
-+ MSP_NO_ACTIVE_IT_ERROR = -3,
-+ MSP_NOT_CONFIGURED = -2,
-+ MSP_PARAMETER_ERROR = -1,
-+ MSP_OK = 0,
-+ MSP_INTERNAL_EVENT = 1,
-+ MSP_REMAINING_PENDING_EVENTS = 2,
-+ MSP_REMAINING_FILTER_PENDING_EVENTS = 3,
-+ MSP_NO_MORE_PENDING_EVENT = 4,
-+ MSP_NO_MORE_FILTER_PENDING_EVENT = 5,
-+ MSP_NO_PENDING_EVENT_ERROR = 7
-+} t_msp_error;
-+
-+/*** Protocols ***/
-+enum {
-+ MSP_I2S_PROTOCOL,
-+ MSP_PCM_PROTOCOL,
-+ MSP_PCM_COMPAND_PROTOCOL,
-+ MSP_AC97_PROTOCOL,
-+ MSP_MASTER_SPI_PROTOCOL,
-+ MSP_SLAVE_SPI_PROTOCOL,
-+ MSP_INVALID_PROTOCOL
-+};
-+
-+/*** Sample Frequencies ***/
-+/* These are no longer required, frequencies in Hz can be used directly */
-+enum {
-+ MSP_SAMPLE_FREQ_NOT_SUPPORTED = -1,
-+ MSP_SAMPLE_FREQ_8KHZ = 8000,
-+ MSP_SAMPLE_FREQ_12KHZ = 12000,
-+ MSP_SAMPLE_FREQ_16KHZ = 16000,
-+ MSP_SAMPLE_FREQ_24KHZ = 24000,
-+ MSP_SAMPLE_FREQ_32KHZ = 32000,
-+ MSP_SAMPLE_FREQ_44KHZ = 44000,
-+ MSP_SAMPLE_FREQ_48KHZ = 48000,
-+ MSP_SAMPLE_FREQ_64KHZ = 64000,
-+ MSP_SAMPLE_FREQ_88KHZ = 88000,
-+ MSP_SAMPLE_FREQ_96KHZ = 96000,
-+ MSP_SAMPLE_FREQ_22KHZ = 22000,
-+ MSP_SAMPLE_FREQ_11KHZ = 11000
-+};
-+
-+/*** Input Frequencies ***/
-+/* These are no longer required, frequencies in Hz can be used directly */
-+typedef enum {
-+
-+ MSP_INPUT_FREQ_1MHZ = 1000,
-+ MSP_INPUT_FREQ_2MHZ = 2000,
-+ MSP_INPUT_FREQ_3MHZ = 3000,
-+ MSP_INPUT_FREQ_4MHZ = 4000,
-+ MSP_INPUT_FREQ_5MHZ = 5000,
-+ MSP_INPUT_FREQ_6MHZ = 6000,
-+ MSP_INPUT_FREQ_8MHZ = 8000,
-+ MSP_INPUT_FREQ_11MHZ = 11000,
-+ MSP_INPUT_FREQ_12MHZ = 12000,
-+ MSP_INPUT_FREQ_16MHZ = 16000,
-+ MSP_INPUT_FREQ_22MHZ = 22000,
-+ MSP_INPUT_FREQ_24MHZ = 24000,
-+ MSP_INPUT_FREQ_48MHZ = 48000
-+
-+} t_msp_in_clock_freq;
-+
-+#define MSP_INPUT_FREQ_APB 48000000
-+
-+/*** Stereo mode. Used for APB data accesses as 16 bits accesses (mono),
-+ * 32 bits accesses (stereo).
-+ ***/
-+enum
-+{
-+ MSP_MONO,
-+ MSP_STEREO
-+};
-+
-+/* Direction (Transmit/Receive mode) */
-+enum {
-+ MSP_TRANSMIT_MODE,
-+ MSP_RECEIVE_MODE,
-+ MSP_BOTH_T_R_MODE
-+};
-+
-+/* Dma mode should be used for large transfers,
-+ * polling mode should be used for transfers of a few bytes
-+ */
-+enum {
-+ MSP_DMA_MODE,
-+ MSP_POLLING_MODE,
-+ MSP_INTERRUPT_MODE
-+};
-+
-+/* User client for the MSP */
-+typedef enum {
-+ MSP_NO_USER = 0,
-+ MSP_USER_SPI,
-+ MSP_USER_ALSA,
-+ MSP_USER_SAA,
-+}t_msp_user;
-+
-+/*Flag structure for MSPx*/
-+typedef struct {
-+ struct semaphore lock;
-+ t_msp_user user;
-+}msp_flag ;
-+
-+
-+/* Transmit and receive configuration register */
-+#define MSP_BIG_ENDIAN 0x00000000
-+#define MSP_LITTLE_ENDIAN 0x00001000
-+#define MSP_UNEXPECTED_FS_ABORT 0x00000000
-+#define MSP_UNEXPECTED_FS_IGNORE 0x00008000
-+#define MSP_NON_MODE_BIT_MASK 0x00009000
-+
-+/* Global configuration register
-+--------------------------------*/
-+#define RX_ENABLE 0x00000001
-+#define RX_FIFO_ENABLE 0x00000002
-+#define RX_SYNC_SRG 0x00000010
-+#define RX_CLK_POL_RISING 0x00000020
-+#define RX_CLK_SEL_SRG 0x00000040
-+#define TX_ENABLE 0x00000100
-+#define TX_FIFO_ENABLE 0x00000200
-+#define TX_SYNC_SRG_PROG 0x00001800
-+#define TX_CLK_POL_RISING 0x00002000
-+#define TX_CLK_SEL_SRG 0x00004000
-+#define TX_EXTRA_DELAY_ENABLE 0x00008000
-+#define SRG_ENABLE 0x00010000
-+#define FRAME_GEN_ENABLE 0x00100000
-+#define SRG_CLK_SEL_APB 0x00000000
-+#define RX_FIFO_SYNC_HI 0x00000000
-+#define TX_FIFO_SYNC_HI 0x00000000
-+#define SPI_CLK_MODE_NORMAL 0x00000000
-+
-+/* SPI Clock Modes enumertion
-+ * SPI clock modes of MSP provides compatibility with
-+ * the SPI protocol.MSP supports 2 SPI transfer formats.
-+ * MSP_ZERO_DELAY_SPI_MODE:MSP transmits data over Tx/Rx
-+ * Lines immediately after MSPTCK/MSPRCK rising/falling edge.
-+ * MSP_HALF_CYCLE_DELY_SPI_MODE:MSP transmits data one-half cycle
-+ * ahead of the rising/falling edge of the MSPTCK
-+ */
-+enum {
-+ MSP_NON_SPI_PROTOCOL = 0,
-+ MSP_ZERO_DELAY_SPI_MODE = 2,
-+ MSP_HALF_CYCLE_DELY_SPI_MODE = 3
-+};
-+
-+#define MSP_FRAME_SIZE_AUTO -1
-+
-+enum msp_data_size{
-+ MSP_DATA_SIZE_DEFAULT = -1,
-+ MSP_DATA_SIZE_8BIT,
-+ MSP_DATA_SIZE_10BIT,
-+ MSP_DATA_SIZE_12BIT,
-+ MSP_DATA_SIZE_14BIT,
-+ MSP_DATA_SIZE_16BIT,
-+ MSP_DATA_SIZE_20BIT,
-+ MSP_DATA_SIZE_24BIT,
-+ MSP_DATA_SIZE_32BIT,
-+};
-+
-+#define MSP_I2S_SIMPLE_CONFIG { \
-+ MSP_INPUT_FREQ_APB, \
-+ RX_CLK_SEL_SRG, \
-+ TX_CLK_SEL_SRG, \
-+ SRG_CLK_SEL_APB, \
-+ MSP_BIG_ENDIAN, \
-+ MSP_BIG_ENDIAN, \
-+ RX_FIFO_SYNC_LOW, \
-+ TX_FIFO_SYNC_LOW, \
-+ RX_SYNC_SRG, \
-+ TX_SYNC_SRG_PROG, \
-+ MSP_UNEXPECTED_FS_IGNORE, \
-+ MSP_UNEXPECTED_FS_IGNORE, \
-+ RX_FIFO_ENABLE, \
-+ TX_FIFO_ENABLE, \
-+ SPI_CLK_MODE_NORMAL, \
-+ SPI_BURST_MODE_DISABLE \
-+}
-+
-+#define MSP_PCM_SIMPLE_CONFIG { \
-+ MSP_INPUT_FREQ_APB, \
-+ RX_CLK_SEL_SRG, \
-+ TX_CLK_SEL_SRG, \
-+ SRG_CLK_SEL_APB, \
-+ MSP_BIG_ENDIAN, \
-+ MSP_BIG_ENDIAN, \
-+ RX_FIFO_SYNC_HI, \
-+ TX_FIFO_SYNC_HI, \
-+ RX_SYNC_SRG, \
-+ TX_SYNC_SRG_AUTO, \
-+ MSP_UNEXPECTED_FS_IGNORE, \
-+ MSP_UNEXPECTED_FS_IGNORE, \
-+ RX_FIFO_ENABLE, \
-+ TX_FIFO_ENABLE, \
-+ SPI_CLK_MODE_NORMAL, \
-+ SPI_BURST_MODE_DISABLE \
-+}
-+
-+#define MSP_MASTER_SPI_SIMPLE_CONFIG { \
-+ MSP_INPUT_FREQ_APB, \
-+ RX_CLK_SEL_SRG, \
-+ TX_CLK_SEL_SRG, \
-+ SRG_CLK_SEL_APB, \
-+ MSP_BIG_ENDIAN, \
-+ MSP_BIG_ENDIAN, \
-+ RX_FIFO_SYNC_LOW, \
-+ TX_FIFO_SYNC_LOW, \
-+ RX_SYNC_SRG, \
-+ TX_SYNC_SRG_AUTO, \
-+ MSP_UNEXPECTED_FS_IGNORE, \
-+ MSP_UNEXPECTED_FS_IGNORE, \
-+ RX_FIFO_ENABLE, \
-+ TX_FIFO_ENABLE, \
-+ SPI_CLK_MODE_ZERO_DLY, \
-+ SPI_BURST_MODE_DISABLE \
-+}
-+
-+#define MSP_SLAVE_SPI_SIMPLE_CONFIG { \
-+ MSP_INPUT_FREQ_APB, \
-+ RX_CLK_SEL_EXT, \
-+ TX_CLK_SEL_EXT, \
-+ SRG_CLK_SEL_APB, \
-+ MSP_BIG_ENDIAN, \
-+ MSP_BIG_ENDIAN, \
-+ RX_FIFO_SYNC_LOW, \
-+ TX_FIFO_SYNC_LOW, \
-+ RX_SYNC_EXT, \
-+ TX_SYNC_EXT, \
-+ MSP_UNEXPECTED_FS_IGNORE, \
-+ MSP_UNEXPECTED_FS_IGNORE, \
-+ RX_FIFO_ENABLE, \
-+ TX_FIFO_ENABLE, \
-+ SPI_CLK_MODE_ZERO_DLY, \
-+ SPI_BURST_MODE_DISABLE \
-+}
-+
-+#ifdef __KERNEL__
-+/* exported functions */
-+#include<linux/types.h>
-+int nomadik_msp_configure(int msp, struct msp_generic_config *config, t_msp_user user);
-+int nomadik_msp_send_data(int msp, void *data, size_t bytes);
-+int nomadik_msp_receive_data(int msp, void *data, size_t bytes);
-+int nomadik_msp_transceive_data(int msp, void *txdata, size_t txbytes,
-+ void *rxdata, size_t rxbytes);
-+int nomadik_msp_enable(int msp, int direction, int work_mode,
-+ int protocol, int frame_freq, int frame_size,
-+ enum msp_data_size data_size, t_msp_user user);
-+int nomadik_msp_disable(int msp, int direction, t_msp_user user);
-+void nomadik_msp_flush_input(int msp);
-+#endif
-+
-+/***************************************************************************************
-+ *
-+ * User space interface starts here. This is intended for testing only.
-+ *
-+ ***************************************************************************************/
-+struct msp_user_enable {
-+ int direction;
-+ int work_mode;
-+ int protocol;
-+ int frame_freq;
-+ int frame_size;
-+ enum msp_data_size data_size;
-+};
-+
-+#include <linux/ioctl.h>
-+
-+#define MSP_IOC_MAGIC 'M'
-+#define MSP_CONFIGURE _IOW(MSP_IOC_MAGIC, 0, struct msp_generic_config)
-+#define MSP_ENABLE _IOW(MSP_IOC_MAGIC, 1, struct msp_user_enable)
-+#define MSP_DISABLE _IOW(MSP_IOC_MAGIC, 2, int)
-+
-+#endif
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/msp-spi.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/msp-spi.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/msp-spi.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/msp-spi.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/msp-spi.h
@@ -0,0 +1,343 @@
+/*
+ * arch/arm/mach-nomadik/msp-spi.h
@@ -232921,7 +233690,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/msp-spi.h ../new/linux-2.
+
+
+/*#######################################################################
-+ MSP Interrupt related Macros
++ MSP Interrupt related Macros
+#########################################################################
+ */
+#define DISABLE_ALL_MSP_INTERRUPTS 0x0
@@ -232929,7 +233698,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/msp-spi.h ../new/linux-2.
+#define CLEAR_ALL_MSP_INTERRUPTS 0xEE
+
+/*#######################################################################
-+ Default MSP Register Values
++ Default MSP Register Values
+#########################################################################
+ */
+
@@ -232970,9 +233739,333 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/msp-spi.h ../new/linux-2.
+ )
+
+#endif
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/mtu.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/mtu.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/mtu.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/mtu.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/msp.h
+@@ -0,0 +1,322 @@
++/*Copyright 2006, STMicroelectronics
++ *
++ *
++ * 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 NOMADIC_MSP_HEADER
++#define NOMADIC_MSP_HEADER
++
++/* Generic config struct. Use the actual values defined below for global
++ * control register
++ */
++
++struct msp_generic_config {
++ unsigned int input_clock_freq;
++ unsigned int rx_clock_sel;
++ unsigned int tx_clock_sel;
++ unsigned int srg_clock_sel;
++ unsigned int rx_endianess;
++ unsigned int tx_endianess;
++ unsigned int rx_frame_sync_pol;
++ unsigned int tx_frame_sync_pol;
++ unsigned int rx_frame_sync_sel;
++ unsigned int tx_frame_sync_sel;
++ unsigned int rx_unexpect_frame_sync;
++ unsigned int tx_unexpect_frame_sync;
++ unsigned int rx_fifo_config;
++ unsigned int tx_fifo_config;
++ unsigned int spi_clk_mode;
++ unsigned int spi_burst_mode;
++};
++typedef enum {
++ MSP_REQUEST_NOT_APPLICABLE = -9,
++ MSP_BAD_PERIHERAL_ID = -8,
++ MSP_TRANSMISSION_ON_GOING = -7,
++ MSP_TRANSMIT_FIFO_TIMEOUT = -6,
++ MSP_FEATURE_NOT_SUPPORTED = -5,
++ MSP_NON_AUTHORIZED_MODE = -4,
++ MSP_NO_ACTIVE_IT_ERROR = -3,
++ MSP_NOT_CONFIGURED = -2,
++ MSP_PARAMETER_ERROR = -1,
++ MSP_OK = 0,
++ MSP_INTERNAL_EVENT = 1,
++ MSP_REMAINING_PENDING_EVENTS = 2,
++ MSP_REMAINING_FILTER_PENDING_EVENTS = 3,
++ MSP_NO_MORE_PENDING_EVENT = 4,
++ MSP_NO_MORE_FILTER_PENDING_EVENT = 5,
++ MSP_NO_PENDING_EVENT_ERROR = 7
++} t_msp_error;
++
++/*** Protocols ***/
++enum {
++ MSP_I2S_PROTOCOL,
++ MSP_PCM_PROTOCOL,
++ MSP_PCM_COMPAND_PROTOCOL,
++ MSP_AC97_PROTOCOL,
++ MSP_MASTER_SPI_PROTOCOL,
++ MSP_SLAVE_SPI_PROTOCOL,
++ MSP_INVALID_PROTOCOL
++};
++
++/*** Sample Frequencies ***/
++/* These are no longer required, frequencies in Hz can be used directly */
++enum {
++ MSP_SAMPLE_FREQ_NOT_SUPPORTED = -1,
++ MSP_SAMPLE_FREQ_8KHZ = 8000,
++ MSP_SAMPLE_FREQ_12KHZ = 12000,
++ MSP_SAMPLE_FREQ_16KHZ = 16000,
++ MSP_SAMPLE_FREQ_24KHZ = 24000,
++ MSP_SAMPLE_FREQ_32KHZ = 32000,
++ MSP_SAMPLE_FREQ_44KHZ = 44000,
++ MSP_SAMPLE_FREQ_48KHZ = 48000,
++ MSP_SAMPLE_FREQ_64KHZ = 64000,
++ MSP_SAMPLE_FREQ_88KHZ = 88000,
++ MSP_SAMPLE_FREQ_96KHZ = 96000,
++ MSP_SAMPLE_FREQ_22KHZ = 22000,
++ MSP_SAMPLE_FREQ_11KHZ = 11000
++};
++
++/*** Input Frequencies ***/
++/* These are no longer required, frequencies in Hz can be used directly */
++typedef enum {
++
++ MSP_INPUT_FREQ_1MHZ = 1000,
++ MSP_INPUT_FREQ_2MHZ = 2000,
++ MSP_INPUT_FREQ_3MHZ = 3000,
++ MSP_INPUT_FREQ_4MHZ = 4000,
++ MSP_INPUT_FREQ_5MHZ = 5000,
++ MSP_INPUT_FREQ_6MHZ = 6000,
++ MSP_INPUT_FREQ_8MHZ = 8000,
++ MSP_INPUT_FREQ_11MHZ = 11000,
++ MSP_INPUT_FREQ_12MHZ = 12000,
++ MSP_INPUT_FREQ_16MHZ = 16000,
++ MSP_INPUT_FREQ_22MHZ = 22000,
++ MSP_INPUT_FREQ_24MHZ = 24000,
++ MSP_INPUT_FREQ_48MHZ = 48000
++
++} t_msp_in_clock_freq;
++
++#define MSP_INPUT_FREQ_APB 48000000
++
++/*** Stereo mode. Used for APB data accesses as 16 bits accesses (mono),
++ * 32 bits accesses (stereo).
++ ***/
++enum
++{
++ MSP_MONO,
++ MSP_STEREO
++};
++
++/* Direction (Transmit/Receive mode) */
++enum {
++ MSP_TRANSMIT_MODE,
++ MSP_RECEIVE_MODE,
++ MSP_BOTH_T_R_MODE
++};
++
++/* Dma mode should be used for large transfers,
++ * polling mode should be used for transfers of a few bytes
++ */
++enum {
++ MSP_DMA_MODE,
++ MSP_POLLING_MODE,
++ MSP_INTERRUPT_MODE
++};
++
++/* User client for the MSP */
++typedef enum {
++ MSP_NO_USER = 0,
++ MSP_USER_SPI,
++ MSP_USER_ALSA,
++ MSP_USER_SAA,
++}t_msp_user;
++
++/*Flag structure for MSPx*/
++typedef struct {
++ struct semaphore lock;
++ t_msp_user user;
++}msp_flag ;
++
++
++/* Transmit and receive configuration register */
++#define MSP_BIG_ENDIAN 0x00000000
++#define MSP_LITTLE_ENDIAN 0x00001000
++#define MSP_UNEXPECTED_FS_ABORT 0x00000000
++#define MSP_UNEXPECTED_FS_IGNORE 0x00008000
++#define MSP_NON_MODE_BIT_MASK 0x00009000
++
++/* Global configuration register
++--------------------------------*/
++#define RX_ENABLE 0x00000001
++#define RX_FIFO_ENABLE 0x00000002
++#define RX_SYNC_SRG 0x00000010
++#define RX_CLK_POL_RISING 0x00000020
++#define RX_CLK_SEL_SRG 0x00000040
++#define TX_ENABLE 0x00000100
++#define TX_FIFO_ENABLE 0x00000200
++#define TX_SYNC_SRG_PROG 0x00001800
++#define TX_CLK_POL_RISING 0x00002000
++#define TX_CLK_SEL_SRG 0x00004000
++#define TX_EXTRA_DELAY_ENABLE 0x00008000
++#define SRG_ENABLE 0x00010000
++#define FRAME_GEN_ENABLE 0x00100000
++#define SRG_CLK_SEL_APB 0x00000000
++#define RX_FIFO_SYNC_HI 0x00000000
++#define TX_FIFO_SYNC_HI 0x00000000
++#define SPI_CLK_MODE_NORMAL 0x00000000
++
++/* SPI Clock Modes enumertion
++ * SPI clock modes of MSP provides compatibility with
++ * the SPI protocol.MSP supports 2 SPI transfer formats.
++ * MSP_ZERO_DELAY_SPI_MODE:MSP transmits data over Tx/Rx
++ * Lines immediately after MSPTCK/MSPRCK rising/falling edge.
++ * MSP_HALF_CYCLE_DELY_SPI_MODE:MSP transmits data one-half cycle
++ * ahead of the rising/falling edge of the MSPTCK
++ */
++enum {
++ MSP_NON_SPI_PROTOCOL = 0,
++ MSP_ZERO_DELAY_SPI_MODE = 2,
++ MSP_HALF_CYCLE_DELY_SPI_MODE = 3
++};
++
++#define MSP_FRAME_SIZE_AUTO -1
++
++enum msp_data_size{
++ MSP_DATA_SIZE_DEFAULT = -1,
++ MSP_DATA_SIZE_8BIT,
++ MSP_DATA_SIZE_10BIT,
++ MSP_DATA_SIZE_12BIT,
++ MSP_DATA_SIZE_14BIT,
++ MSP_DATA_SIZE_16BIT,
++ MSP_DATA_SIZE_20BIT,
++ MSP_DATA_SIZE_24BIT,
++ MSP_DATA_SIZE_32BIT,
++};
++
++#define MSP_I2S_SIMPLE_CONFIG { \
++ MSP_INPUT_FREQ_APB, \
++ RX_CLK_SEL_SRG, \
++ TX_CLK_SEL_SRG, \
++ SRG_CLK_SEL_APB, \
++ MSP_BIG_ENDIAN, \
++ MSP_BIG_ENDIAN, \
++ RX_FIFO_SYNC_LOW, \
++ TX_FIFO_SYNC_LOW, \
++ RX_SYNC_SRG, \
++ TX_SYNC_SRG_PROG, \
++ MSP_UNEXPECTED_FS_IGNORE, \
++ MSP_UNEXPECTED_FS_IGNORE, \
++ RX_FIFO_ENABLE, \
++ TX_FIFO_ENABLE, \
++ SPI_CLK_MODE_NORMAL, \
++ SPI_BURST_MODE_DISABLE \
++}
++
++#define MSP_PCM_SIMPLE_CONFIG { \
++ MSP_INPUT_FREQ_APB, \
++ RX_CLK_SEL_SRG, \
++ TX_CLK_SEL_SRG, \
++ SRG_CLK_SEL_APB, \
++ MSP_BIG_ENDIAN, \
++ MSP_BIG_ENDIAN, \
++ RX_FIFO_SYNC_HI, \
++ TX_FIFO_SYNC_HI, \
++ RX_SYNC_SRG, \
++ TX_SYNC_SRG_AUTO, \
++ MSP_UNEXPECTED_FS_IGNORE, \
++ MSP_UNEXPECTED_FS_IGNORE, \
++ RX_FIFO_ENABLE, \
++ TX_FIFO_ENABLE, \
++ SPI_CLK_MODE_NORMAL, \
++ SPI_BURST_MODE_DISABLE \
++}
++
++#define MSP_MASTER_SPI_SIMPLE_CONFIG { \
++ MSP_INPUT_FREQ_APB, \
++ RX_CLK_SEL_SRG, \
++ TX_CLK_SEL_SRG, \
++ SRG_CLK_SEL_APB, \
++ MSP_BIG_ENDIAN, \
++ MSP_BIG_ENDIAN, \
++ RX_FIFO_SYNC_LOW, \
++ TX_FIFO_SYNC_LOW, \
++ RX_SYNC_SRG, \
++ TX_SYNC_SRG_AUTO, \
++ MSP_UNEXPECTED_FS_IGNORE, \
++ MSP_UNEXPECTED_FS_IGNORE, \
++ RX_FIFO_ENABLE, \
++ TX_FIFO_ENABLE, \
++ SPI_CLK_MODE_ZERO_DLY, \
++ SPI_BURST_MODE_DISABLE \
++}
++
++#define MSP_SLAVE_SPI_SIMPLE_CONFIG { \
++ MSP_INPUT_FREQ_APB, \
++ RX_CLK_SEL_EXT, \
++ TX_CLK_SEL_EXT, \
++ SRG_CLK_SEL_APB, \
++ MSP_BIG_ENDIAN, \
++ MSP_BIG_ENDIAN, \
++ RX_FIFO_SYNC_LOW, \
++ TX_FIFO_SYNC_LOW, \
++ RX_SYNC_EXT, \
++ TX_SYNC_EXT, \
++ MSP_UNEXPECTED_FS_IGNORE, \
++ MSP_UNEXPECTED_FS_IGNORE, \
++ RX_FIFO_ENABLE, \
++ TX_FIFO_ENABLE, \
++ SPI_CLK_MODE_ZERO_DLY, \
++ SPI_BURST_MODE_DISABLE \
++}
++
++#ifdef __KERNEL__
++/* exported functions */
++#include<linux/types.h>
++int nomadik_msp_configure(int msp, struct msp_generic_config *config, t_msp_user user);
++int nomadik_msp_send_data(int msp, void *data, size_t bytes);
++int nomadik_msp_receive_data(int msp, void *data, size_t bytes);
++int nomadik_msp_transceive_data(int msp, void *txdata, size_t txbytes,
++ void *rxdata, size_t rxbytes);
++int nomadik_msp_enable(int msp, int direction, int work_mode,
++ int protocol, int frame_freq, int frame_size,
++ enum msp_data_size data_size, t_msp_user user);
++int nomadik_msp_disable(int msp, int direction, t_msp_user user);
++void nomadik_msp_flush_input(int msp);
++#endif
++
++/***************************************************************************************
++ *
++ * User space interface starts here. This is intended for testing only.
++ *
++ ***************************************************************************************/
++struct msp_user_enable {
++ int direction;
++ int work_mode;
++ int protocol;
++ int frame_freq;
++ int frame_size;
++ enum msp_data_size data_size;
++};
++
++#include <linux/ioctl.h>
++
++#define MSP_IOC_MAGIC 'M'
++#define MSP_CONFIGURE _IOW(MSP_IOC_MAGIC, 0, struct msp_generic_config)
++#define MSP_ENABLE _IOW(MSP_IOC_MAGIC, 1, struct msp_user_enable)
++#define MSP_DISABLE _IOW(MSP_IOC_MAGIC, 2, int)
++
++#endif
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/mtu.h
@@ -0,0 +1,90 @@
+ /* Header file for Multiple Timer Units.
+ * mtu.h : Defines for registering & using MTU timers */
@@ -233064,9 +234157,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/mtu.h ../new/linux-2.6.20
+
+inline unsigned long mtu_intr_reg_readl(unsigned int timer,
+ unsigned long ctrl_register);
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/nandflash.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/nandflash.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/nandflash.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/nandflash.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/nandflash.h
@@ -0,0 +1,42 @@
+#ifndef NMDK_NMDK_NAND_H
+#define NMDK_NMDK_NAND_H
@@ -233110,9 +234202,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/nandflash.h ../new/linux-
+#define DEFAULT_PATT0_VALUE 0x00100A00
+
+#endif /* NMDK_NAND_H */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/ndk10_devices.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/ndk10_devices.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/ndk10_devices.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/ndk10_devices.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/ndk10_devices.h
@@ -0,0 +1,160 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/ndk10_devices.h
@@ -233274,183 +234365,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/ndk10_devices.h ../new/li
+
+#endif /*__ASSEMBLY__*/
+#endif /*__ASM_ARM_ARCH_NDK15_DEVICES_H*/
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/ndk15c02_devices.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/ndk15c02_devices.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/ndk15c02_devices.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/ndk15c02_devices.h 2008-07-04 23:45:26.000000000 +0530
-@@ -0,0 +1,169 @@
-+/*
-+ * linux/include/asm-arm/arch-nomadik/ndk15c02_devices.h
-+ *
-+ * Copyright (C) STMicroelectronics
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+#ifndef __ASM_ARM_ARCH_NDK15C02_DEVICES_H
-+#define __ASM_ARM_ARCH_NDK15C02_DEVICES_H
-+#ifndef __ASSEMBLY__
-+
-+#include <asm/types.h>
-+
-+/*
-+ * Macros board specific
-+ */
-+#define BOARD_IO_DESC /*nothing to define */
-+
-+/* Ethernet related board specific declaration*************************/
-+#define NOMADIK_ETH0_BASE 0x33000000 /* ETH0 Base */
-+#define SMC91111_IRQ GPIO_PIN_106
-+
-+/* MMC related board specific declaration*************************/
-+#define MMCDETECT_IRQ GPIO_PIN_119
-+#define val_volt 7 /*Value to be written at Touareg register */
-+
-+/* Touchpanel related declaration************************************/
-+#define TOUCHP_IRQ GPIO_PIN_104 /* PENIRQNO: through CPLD_IT */
-+/*#define TOUCHP_CS0 NOT_KNOWN * Chip select pin0 */
-+/*#define TOUCHP_CS1 NOT_KNOWN * Chip select pin1 */
-+#define X_DELTA_MAX 2* 10 /*Max ADC read error limit for Sub- */
-+#define Y_DELTA_MAX 2 *16 /*sequent redings */
-+#define MAX_12BIT ((1<<12)-1)
-+#define X_CORR(x, y) (x)
-+#define Y_CORR(x, y) (MAX_12BIT - y)
-+
-+/* Keypad related declaration************************************/
-+#define KEYPAD_IRQ GPIO_PIN_113
-+#define MAX_KPROW 8
-+#define MAX_KPCOL 8
-+
-+/* I2c related board specific declaration************************/
-+#define I2C_CLIENT_BUSID13 0
-+#define I2C_TOUAREG_ADAPTER 1
-+#define I2C_TOUREG_CLIENT_BUSID 0
-+#define I2C_CPLD_CLIENT_BUSID 0
-+/* Addresses for clients on this board*/
-+#define I2C_ADDR_MB 0x50 /* Motherboard*/
-+#define I2C_ADDR_UI_DB 0x51 /* UI Daughterboard*/
-+#define I2C_ADDR_IO_DB1 0x52 /* I/O Expansion daughter board 1*/
-+#define I2C_ADDR_IO_DB2 0x53 /* I/O Expansion daughter board 2*/
-+#define I2C_ADDR_CIF_CAM 0x54 /* CCIR-656 ST CIF Camera (Matisse)*/
-+#define I2C_ADDR_PP_CAM (0x08>>1) /* pepperpot camera */
-+#define I2C_ADDR_MEM_EXP 0x55 /* CCIR-656 ST CIF Camera (Matisse)*/
-+#define I2C_ADDR_AC 0x1A /* Audio codec STw5095*/
-+#define I2C_ADDR_FM_TUNER 0x62 /* FM Tuner (TDA 7701-Brite)*/
-+#define I2C_ADDR_GAS_GAUGE 0x22 /* Gas Gauge (PB700)*/
-+#define I2C_ADDR_CAM_MOD 0x45 /* LITEA Camera Module ?*/
-+#define I2C0_LP_OWNADDR 0x50
-+#define I2C1_LP_OWNADDR 0x60
-+#define I2C_ADDR_TOUAREG 0x2D
-+#define I2C_ADDR_CPLD 0x1C /* actual 0x38 and 0x39, considered only 7 msbs */
-+#define I2C_ADDR_DENC 0x20
-+
-+/* MSP related board specific declaration************************/
-+#define MSP_DATA_DELAY MSP_DELAY_0
-+#define MSP_TX_CLOCK_EDGE MSP_FALLING_EDGE
-+#define MSP_RX_CLOCK_EDGE MSP_FALLING_EDGE
-+
-+/*NORflash related board specific declaration*******************/
-+#define NMDK_FLASH_BASE 0x30000000
-+#define NMDK_FLASH_WINDOW_SIZE 32 * 1024 * 1024
-+#define NMDK_FLASH_BUSWIDTH 2
-+
-+#define GET_BANK_WIDTH(val,phys) \
-+ switch (phys) { \
-+ case NMDK_FLASH_BASE: \
-+ val = NMDK_FLASH_BUSWIDTH;\
-+ break;\
-+ default:\
-+ break;\
-+ }
-+
-+/*NANDflash related board specific declaration*******************/
-+#define BOARD_SET_NAND_DATA \
-+ nand_oob->eccbytes = 12; \
-+ nand_oob->eccpos[0] = 2; \
-+ nand_oob->eccpos[1] = 3; \
-+ nand_oob->eccpos[2] = 4; \
-+ nand_oob->eccpos[3] = 18; \
-+ nand_oob->eccpos[4] = 19; \
-+ nand_oob->eccpos[5] = 20; \
-+ nand_oob->eccpos[6] = 34; \
-+ nand_oob->eccpos[7] = 35; \
-+ nand_oob->eccpos[8] = 36; \
-+ nand_oob->eccpos[9] = 50; \
-+ nand_oob->eccpos[10] = 51; \
-+ nand_oob->eccpos[11] = 52; \
-+ this->badblockpos = 5;
-+
-+#define BOARD_SET_NAND_BADBLOCK \
-+ this->eccsteps = 4; \
-+ this->badblockpos = 5;
-+
-+/*SVA related board specific declaration*******************/
-+#define SVA_HCL_INIT_MEM_SIZE SZ_4M
-+
-+/* CPLD/EPIO related declaration************************************/
-+/* the below defination is w.r.to CPLD version 3.0.1.2 */
-+#define NOMADIK_CPLD_BASE 0x36000000 /* CPLD base */
-+
-+#define COB15_ID 0x00 /* offsets for cpld board registers */
-+#define COB15_CTRL 0x02
-+#define KEYPAD_DATA 0x04
-+#define MSP_CONF 0x06
-+#define UART_CONF 0x08
-+#define SSP_CONF 0x0A
-+#define AUX_GPO1 0x20
-+#define AUX_GPO2 0x22
-+
-+extern u16 nomadik_epio_read_i2c(int reg);
-+extern int nomadik_epio_write_i2c(u16 data, int reg);
-+#define nomadik_epio_read_cob_id() nomadik_epio_read_i2c(COB15_ID)
-+#define nomadik_epio_read_cob_ctl() nomadik_epio_read_i2c(COB15_CTRL)
-+#define nomadik_epio_read_keypad() nomadik_epio_read_i2c(KEYPAD_DATA)
-+#define nomadik_epio_read_msp_conf() nomadik_epio_read_i2c(MSP_CONF)
-+#define nomadik_epio_read_uart_conf() nomadik_epio_read_i2c(UART_CONF)
-+#define nomadik_epio_read_ssp_conf() nomadik_epio_read_i2c(SSP_CONF)
-+#define nomadik_epio_read_aux_gpo1() nomadik_epio_read_i2c(AUX_GPO1)
-+#define nomadik_epio_read_aux_gpo2() nomadik_epio_read_i2c(AUX_GPO2)
-+#define nomadik_epio_write_cob_ctl(x) nomadik_epio_write_i2c((uint16)x,COB15_CTRL)
-+#define nomadik_epio_write_keypad(x) nomadik_epio_write_i2c((uint16)x,KEYPAD_DATA)
-+#define nomadik_epio_write_msp_conf(x) nomadik_epio_write_i2c((uint16)x,MSP_CONF)
-+#define nomadik_epio_write_uart_conf(x) nomadik_epio_write_i2c((uint16)x,UART_CONF)
-+#define nomadik_epio_write_ssp_conf(x) nomadik_epio_write_i2c((uint16)x,SSP_CONF)
-+#define nomadik_epio_write_aux_gpo1(x) nomadik_epio_write_i2c((uint16)x,AUX_GPO1)
-+#define nomadik_epio_write_aux_gpo2(x) nomadik_epio_write_i2c((uint16)x,AUX_GPO2)
-+
-+/*CPLD Version abstraction constants */
-+#define COB_REV_BITS 0x7000 /*numeric field */
-+#define COB_REV_BITS_POS 12 /*need to roate this much times */
-+#define COB_REV_SUBBITS 0x0000 /*decimal field */
-+#define COB_REV_SUBBITS_POS 0 /*need to roate this much times */
-+#define CPLD_REV_BITS 0x0FF0 /*numeric field */
-+#define CPLD_REV_BITS_POS 4 /*need to roate this much times */
-+#define CPLD_REV_SUBBITS 0x000F /*decimal field */
-+
-+/* Bits defination for NDK15_CTRL (COB_CTRL) register */
-+#define CPLD_GPIO34 0x0200 /*(1)CPLD sent CC_PWRDETECTn */
-+#define BT_WAKEUP_GPO1 0x0100 /*(1)from AUX_GPO1 CPLD register, bit (0)*/
-+#define DEEPSLEEP_CLK_GPIO106 0x00c0 /*(00)from Nomadik GPIO106 */
-+#define DEEPSLEEP_CLK_GPIO49 0x0040 /*(01)from Nomadik GPIO49 */
-+#define DEEPSLEEP_CLK_GPO1 0x00c0 /*(11)from AUX_GPO1 CPLD register, bit (14)*/
-+#define GPIO106_LAN_IT 0x0030 /*(00) fron ethernet controller*/
-+#define GPIO106_PWRDET 0x0010 /*(01) fron CC_PWRDETECTn(Charge controller)*/
-+#define GPIO106_PM_ITWK 0x0020 /*(10) fron PM_IT_WKUP(Touareg USB insertion)*/
-+#define GPIO106_DIS 0x0030 /*(11) High Z*/
-+#define HPI_GPIO_DIS 0x000c /*(11) selection for HPI_GPIO disabled*/
-+#define BIOS_TCHSCR 0x0002
-+#define USER_LED0 0x0001 /*(1)user led0 on */
-+
-+/* Bits defination for UART_CONF register */
-+#define DBG_UART4W 0x0200 /*(1) select 4 number of wires on the UART interface*/
-+#define DBG_UART0 0x0400 /*(1X00) Enable the UART0 link for the debug RS232 connector */
-+#define DBG_UART1 0x0480 /*(1X01) Enable the UART1 link for the debug RS232 connector */
-+#define DBG_UART2 0x0580 /*(1X11) Enable the UART2 link for the debug RS232 connector */
-+#define MD_UART0 0x0040 /*(1X00) Enable the UART0 link for peripheral in expansion connector (Modem
-\ No newline at end of file
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/ndk15_devices.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/ndk15_devices.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/ndk15_devices.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/ndk15_devices.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/ndk15_devices.h
@@ -0,0 +1,248 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/ndk15_devices.h
@@ -233700,9 +234616,181 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/ndk15_devices.h ../new/li
+
+#endif /*__ASSEMBLY__*/
+#endif /*__ASM_ARM_ARCH_NDK15_DEVICES_H*/
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/nhk15_devices.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/nhk15_devices.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/nhk15_devices.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/nhk15_devices.h 2008-11-24 14:06:28.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/ndk15c02_devices.h
+@@ -0,0 +1,169 @@
++/*
++ * linux/include/asm-arm/arch-nomadik/ndk15c02_devices.h
++ *
++ * Copyright (C) STMicroelectronics
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_ARM_ARCH_NDK15C02_DEVICES_H
++#define __ASM_ARM_ARCH_NDK15C02_DEVICES_H
++#ifndef __ASSEMBLY__
++
++#include <asm/types.h>
++
++/*
++ * Macros board specific
++ */
++#define BOARD_IO_DESC /*nothing to define */
++
++/* Ethernet related board specific declaration*************************/
++#define NOMADIK_ETH0_BASE 0x33000000 /* ETH0 Base */
++#define SMC91111_IRQ GPIO_PIN_106
++
++/* MMC related board specific declaration*************************/
++#define MMCDETECT_IRQ GPIO_PIN_119
++#define val_volt 7 /*Value to be written at Touareg register */
++
++/* Touchpanel related declaration************************************/
++#define TOUCHP_IRQ GPIO_PIN_104 /* PENIRQNO: through CPLD_IT */
++/*#define TOUCHP_CS0 NOT_KNOWN * Chip select pin0 */
++/*#define TOUCHP_CS1 NOT_KNOWN * Chip select pin1 */
++#define X_DELTA_MAX 2* 10 /*Max ADC read error limit for Sub- */
++#define Y_DELTA_MAX 2 *16 /*sequent redings */
++#define MAX_12BIT ((1<<12)-1)
++#define X_CORR(x, y) (x)
++#define Y_CORR(x, y) (MAX_12BIT - y)
++
++/* Keypad related declaration************************************/
++#define KEYPAD_IRQ GPIO_PIN_113
++#define MAX_KPROW 8
++#define MAX_KPCOL 8
++
++/* I2c related board specific declaration************************/
++#define I2C_CLIENT_BUSID13 0
++#define I2C_TOUAREG_ADAPTER 1
++#define I2C_TOUREG_CLIENT_BUSID 0
++#define I2C_CPLD_CLIENT_BUSID 0
++/* Addresses for clients on this board*/
++#define I2C_ADDR_MB 0x50 /* Motherboard*/
++#define I2C_ADDR_UI_DB 0x51 /* UI Daughterboard*/
++#define I2C_ADDR_IO_DB1 0x52 /* I/O Expansion daughter board 1*/
++#define I2C_ADDR_IO_DB2 0x53 /* I/O Expansion daughter board 2*/
++#define I2C_ADDR_CIF_CAM 0x54 /* CCIR-656 ST CIF Camera (Matisse)*/
++#define I2C_ADDR_PP_CAM (0x08>>1) /* pepperpot camera */
++#define I2C_ADDR_MEM_EXP 0x55 /* CCIR-656 ST CIF Camera (Matisse)*/
++#define I2C_ADDR_AC 0x1A /* Audio codec STw5095*/
++#define I2C_ADDR_FM_TUNER 0x62 /* FM Tuner (TDA 7701-Brite)*/
++#define I2C_ADDR_GAS_GAUGE 0x22 /* Gas Gauge (PB700)*/
++#define I2C_ADDR_CAM_MOD 0x45 /* LITEA Camera Module ?*/
++#define I2C0_LP_OWNADDR 0x50
++#define I2C1_LP_OWNADDR 0x60
++#define I2C_ADDR_TOUAREG 0x2D
++#define I2C_ADDR_CPLD 0x1C /* actual 0x38 and 0x39, considered only 7 msbs */
++#define I2C_ADDR_DENC 0x20
++
++/* MSP related board specific declaration************************/
++#define MSP_DATA_DELAY MSP_DELAY_0
++#define MSP_TX_CLOCK_EDGE MSP_FALLING_EDGE
++#define MSP_RX_CLOCK_EDGE MSP_FALLING_EDGE
++
++/*NORflash related board specific declaration*******************/
++#define NMDK_FLASH_BASE 0x30000000
++#define NMDK_FLASH_WINDOW_SIZE 32 * 1024 * 1024
++#define NMDK_FLASH_BUSWIDTH 2
++
++#define GET_BANK_WIDTH(val,phys) \
++ switch (phys) { \
++ case NMDK_FLASH_BASE: \
++ val = NMDK_FLASH_BUSWIDTH;\
++ break;\
++ default:\
++ break;\
++ }
++
++/*NANDflash related board specific declaration*******************/
++#define BOARD_SET_NAND_DATA \
++ nand_oob->eccbytes = 12; \
++ nand_oob->eccpos[0] = 2; \
++ nand_oob->eccpos[1] = 3; \
++ nand_oob->eccpos[2] = 4; \
++ nand_oob->eccpos[3] = 18; \
++ nand_oob->eccpos[4] = 19; \
++ nand_oob->eccpos[5] = 20; \
++ nand_oob->eccpos[6] = 34; \
++ nand_oob->eccpos[7] = 35; \
++ nand_oob->eccpos[8] = 36; \
++ nand_oob->eccpos[9] = 50; \
++ nand_oob->eccpos[10] = 51; \
++ nand_oob->eccpos[11] = 52; \
++ this->badblockpos = 5;
++
++#define BOARD_SET_NAND_BADBLOCK \
++ this->eccsteps = 4; \
++ this->badblockpos = 5;
++
++/*SVA related board specific declaration*******************/
++#define SVA_HCL_INIT_MEM_SIZE SZ_4M
++
++/* CPLD/EPIO related declaration************************************/
++/* the below defination is w.r.to CPLD version 3.0.1.2 */
++#define NOMADIK_CPLD_BASE 0x36000000 /* CPLD base */
++
++#define COB15_ID 0x00 /* offsets for cpld board registers */
++#define COB15_CTRL 0x02
++#define KEYPAD_DATA 0x04
++#define MSP_CONF 0x06
++#define UART_CONF 0x08
++#define SSP_CONF 0x0A
++#define AUX_GPO1 0x20
++#define AUX_GPO2 0x22
++
++extern u16 nomadik_epio_read_i2c(int reg);
++extern int nomadik_epio_write_i2c(u16 data, int reg);
++#define nomadik_epio_read_cob_id() nomadik_epio_read_i2c(COB15_ID)
++#define nomadik_epio_read_cob_ctl() nomadik_epio_read_i2c(COB15_CTRL)
++#define nomadik_epio_read_keypad() nomadik_epio_read_i2c(KEYPAD_DATA)
++#define nomadik_epio_read_msp_conf() nomadik_epio_read_i2c(MSP_CONF)
++#define nomadik_epio_read_uart_conf() nomadik_epio_read_i2c(UART_CONF)
++#define nomadik_epio_read_ssp_conf() nomadik_epio_read_i2c(SSP_CONF)
++#define nomadik_epio_read_aux_gpo1() nomadik_epio_read_i2c(AUX_GPO1)
++#define nomadik_epio_read_aux_gpo2() nomadik_epio_read_i2c(AUX_GPO2)
++#define nomadik_epio_write_cob_ctl(x) nomadik_epio_write_i2c((uint16)x,COB15_CTRL)
++#define nomadik_epio_write_keypad(x) nomadik_epio_write_i2c((uint16)x,KEYPAD_DATA)
++#define nomadik_epio_write_msp_conf(x) nomadik_epio_write_i2c((uint16)x,MSP_CONF)
++#define nomadik_epio_write_uart_conf(x) nomadik_epio_write_i2c((uint16)x,UART_CONF)
++#define nomadik_epio_write_ssp_conf(x) nomadik_epio_write_i2c((uint16)x,SSP_CONF)
++#define nomadik_epio_write_aux_gpo1(x) nomadik_epio_write_i2c((uint16)x,AUX_GPO1)
++#define nomadik_epio_write_aux_gpo2(x) nomadik_epio_write_i2c((uint16)x,AUX_GPO2)
++
++/*CPLD Version abstraction constants */
++#define COB_REV_BITS 0x7000 /*numeric field */
++#define COB_REV_BITS_POS 12 /*need to roate this much times */
++#define COB_REV_SUBBITS 0x0000 /*decimal field */
++#define COB_REV_SUBBITS_POS 0 /*need to roate this much times */
++#define CPLD_REV_BITS 0x0FF0 /*numeric field */
++#define CPLD_REV_BITS_POS 4 /*need to roate this much times */
++#define CPLD_REV_SUBBITS 0x000F /*decimal field */
++
++/* Bits defination for NDK15_CTRL (COB_CTRL) register */
++#define CPLD_GPIO34 0x0200 /*(1)CPLD sent CC_PWRDETECTn */
++#define BT_WAKEUP_GPO1 0x0100 /*(1)from AUX_GPO1 CPLD register, bit (0)*/
++#define DEEPSLEEP_CLK_GPIO106 0x00c0 /*(00)from Nomadik GPIO106 */
++#define DEEPSLEEP_CLK_GPIO49 0x0040 /*(01)from Nomadik GPIO49 */
++#define DEEPSLEEP_CLK_GPO1 0x00c0 /*(11)from AUX_GPO1 CPLD register, bit (14)*/
++#define GPIO106_LAN_IT 0x0030 /*(00) fron ethernet controller*/
++#define GPIO106_PWRDET 0x0010 /*(01) fron CC_PWRDETECTn(Charge controller)*/
++#define GPIO106_PM_ITWK 0x0020 /*(10) fron PM_IT_WKUP(Touareg USB insertion)*/
++#define GPIO106_DIS 0x0030 /*(11) High Z*/
++#define HPI_GPIO_DIS 0x000c /*(11) selection for HPI_GPIO disabled*/
++#define BIOS_TCHSCR 0x0002
++#define USER_LED0 0x0001 /*(1)user led0 on */
++
++/* Bits defination for UART_CONF register */
++#define DBG_UART4W 0x0200 /*(1) select 4 number of wires on the UART interface*/
++#define DBG_UART0 0x0400 /*(1X00) Enable the UART0 link for the debug RS232 connector */
++#define DBG_UART1 0x0480 /*(1X01) Enable the UART1 link for the debug RS232 connector */
++#define DBG_UART2 0x0580 /*(1X11) Enable the UART2 link for the debug RS232 connector */
++#define MD_UART0 0x0040 /*(1X00) Enable the UART0 link for peripheral in expansion connector (Modem
+\ No newline at end of file
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/nhk15_devices.h
@@ -0,0 +1,131 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/nhk15_devices.h
@@ -233835,9 +234923,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/nhk15_devices.h ../new/li
+
+#endif /*__ASSEMBLY__*/
+#endif /*__ASM_ARM_ARCH_NHK15_DEVICES_H*/
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/param.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/param.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/param.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/param.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/param.h
@@ -0,0 +1,19 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/param.h
@@ -233858,9 +234945,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/param.h ../new/linux-2.6.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/pexp.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/pexp.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/pexp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/pexp.h 2008-07-04 23:45:27.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/pexp.h
@@ -0,0 +1,355 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/pexp.h
@@ -233921,10 +235007,10 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/pexp.h ../new/linux-2.6.2
+#define STMPE2401_WAKEUP_IRQ 24 /*ISR bit 0*/
+#define STMPE2401_KEYPAD_IRQ 25 /*ISR bit 1*/
+#define STMPE2401_KEYPAD_OVERFLOW_IRQ 26 /*ISR bit 2,lowest priority*/
-+#define STMPE2401_ROTATOR_IRQ 27 /*NOT_SUPPORTED in this version*/
-+#define STMPE2401_ROTATOR_OVERFLOW_IRQ 28 /*NOT_SUPPORTED in this version*/
-+#define STMPE2401_PWM0_IRQ 29 /*NOT_SUPPORTED in this version*/
-+#define STMPE2401_PWM1_IRQ 30 /*NOT_SUPPORTED in this version*/
++#define STMPE2401_ROTATOR_IRQ 27 /*NOT_SUPPORTED in this version*/
++#define STMPE2401_ROTATOR_OVERFLOW_IRQ 28 /*NOT_SUPPORTED in this version*/
++#define STMPE2401_PWM0_IRQ 29 /*NOT_SUPPORTED in this version*/
++#define STMPE2401_PWM1_IRQ 30 /*NOT_SUPPORTED in this version*/
+#define STMPE2401_PWM2_IRQ 31 /*NOT_SUPPORTED in this version*/
+
+#define STMPE2401_ENABLE_INTERRUPT 1
@@ -234003,11 +235089,11 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/pexp.h ../new/linux-2.6.2
+/*interrupt settings*/
+typedef struct
+{
-+ gpio_pin NdkPin;
-+ gpio_config NdkPinConfig;
++ gpio_pin NdkPin;
++ gpio_config NdkPinConfig;
+
+ void (*Callback[MAX_STMPE2401_CALLBACK])(void *parameter);
-+ void *CallbackParam[MAX_STMPE2401_CALLBACK];
++ void *CallbackParam[MAX_STMPE2401_CALLBACK];
+
+ unsigned short ControlReg;
+ unsigned short EnableReg;
@@ -234181,7 +235267,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/pexp.h ../new/linux-2.6.2
+} t_STMPE2401_error;
+
+/*Device initialization functions*/
-+PUBLIC t_STMPE2401_error STMPE2401_Init(unsigned char stmpeId);
++PUBLIC t_STMPE2401_error STMPE2401_Init(unsigned char stmpeId);
+/*Device info*/
+PUBLIC t_STMPE2401_error STMPE2401_Info(unsigned char stmpeId, t_STMPE2401_info *info );
+
@@ -234217,9 +235303,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/pexp.h ../new/linux-2.6.2
+
+#endif
+
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/power.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/power.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/power.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/power.h 2008-07-28 15:20:47.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/power.h
@@ -0,0 +1,180 @@
+
+/* include/asm-arm/arch-nomadik/power.h
@@ -234262,7 +235347,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/power.h ../new/linux-2.6.
+#include <asm/mach/time.h>
+#include <asm/arch/debug.h>
+
-+/*
++/*
+ * Undefine/UnComment NMDK_RTT_WAKEUP if wakeup from RTC
+ * Undefine/UnComment NMDK_RTC_WAKEUP if wakeup from RTT
+ * wakeup from that device
@@ -234393,7 +235478,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/power.h ../new/linux-2.6.
+
+#endif
+
-+#ifdef CONFIG_NOMADIK_PM
++#ifdef CONFIG_NOMADIK_PM
+extern int nomadik_clock_enable(u32 );
+extern int nomadik_clock_disable(u32 );
+#else
@@ -234401,9 +235486,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/power.h ../new/linux-2.6.
+#define nomadik_clock_disable(u32) do{}while(0)
+#endif
+#endif
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/smp.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/smp.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/smp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/smp.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/smp.h
@@ -0,0 +1,19 @@
+#ifndef ASMARM_ARCH_SMP_H
+#define ASMARM_ARCH_SMP_H
@@ -234424,9 +235508,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/smp.h ../new/linux-2.6.20
+extern void secondary_scan_irqs(void);
+
+#endif
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/spi.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/spi.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/spi.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/spi.h 2008-07-28 15:20:48.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/spi.h
@@ -0,0 +1,521 @@
+/*
+ * include/asm-arm/arch-nomadik/spi.h
@@ -234502,7 +235585,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/spi.h ../new/linux-2.6.20
+typedef struct {
+ t_msp_clk_src clk_src;
+ uint16 sckdiv; /* value from 0 to 1023 */
-+ bool_t sckpol; /*Used only when MSPSCK clocks the sample rate generator (SCKSEL = 1Xb):
++ bool_t sckpol; /*Used only when MSPSCK clocks the sample rate generator (SCKSEL = 1Xb):
+ 0b: The rising edge of MSPSCK clocks the sample rate generator
+ 1b: The falling edge of MSPSCK clocks the sample rate generator */
+} t_msp_clock_params;
@@ -234526,7 +235609,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/spi.h ../new/linux-2.6.20
+/***************************************************************************/
+
+/**
-+ * whether SSP is in loopback mode or not
++ * whether SSP is in loopback mode or not
+ */
+typedef enum {
+ LOOPBACK_DISABLED,
@@ -234607,7 +235690,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/spi.h ../new/linux-2.6.20
+} t_ssp_rx_level_trig;
+
+/**
-+ * Transmit FIFO watermark level which triggers (IT Interrupt fires
++ * Transmit FIFO watermark level which triggers (IT Interrupt fires
+ * when _N_ or more empty locations in TX FIFO)
+ */
+typedef enum {
@@ -234770,7 +235853,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/spi.h ../new/linux-2.6.20
+ * @hierarchy: sets whether interface is master or slave
+ * @slave_tx_disable: SSPTXD is disconnected (in slave mode only)
+ * @clk_freq: Tune freq parameters of SSP(when in master mode)
-+ * @endian_rx: Endianess of Data in Rx FIFO
++ * @endian_rx: Endianess of Data in Rx FIFO
+ * @endian_tx: Endianess of Data in Tx FIFO
+ * @data_size: Width of data element(4 to 32 bits)
+ * @com_mode: communication mode: polling, Interrupt or DMA
@@ -234780,7 +235863,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/spi.h ../new/linux-2.6.20
+ * @clk_pol: Motorola SPI interface Clock polarity
+ * @ctrl_len: Microwire interface: Control length
+ * @wait_state: Microwire interface: Wait state
-+ * @duplex: Microwire interface: Full/Half duplex
++ * @duplex: Microwire interface: Full/Half duplex
+ * @freq: Freq of operation(will be used if clk_freq is not given)
+ * @cs_control: function pointer to board-specific function to assert/deassert I/O port to control HW generation of devices chip-select.
+ * @dma_xfer_type: Type of DMA xfer (Mem-to-periph or Periph-to-Periph)
@@ -234858,7 +235941,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/spi.h ../new/linux-2.6.20
+ RESTORE_STATE ,
+ LOAD_DEFAULT_CONFIG ,
+ CLEAR_ALL_INTERRUPT,
-+} cntlr_commands;
++} cntlr_commands;
+
+/***************************************************************************/
+#define SPI_REG_WRITE_BITS(reg,val,mask,sb) ((reg) = (((reg) & ~(mask)) | (((val)<<(sb)) & (mask))))
@@ -234913,7 +235996,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/spi.h ../new/linux-2.6.20
+ * @cs_control: chip select callback provided by chip
+ * @xfer_type: polling/interrupt/dma
+ *
-+ * Runtime state of the SPI controller, maintained per chip,
++ * Runtime state of the SPI controller, maintained per chip,
+ * This would be set according to the current message that would be served
+ */
+struct chip_data {
@@ -234922,7 +236005,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/spi.h ../new/linux-2.6.20
+ struct msp_regs mspr;
+ } regs;
+ u32 chip_id;
-+ u8 n_bytes;
++ u8 n_bytes;
+ u8 enable_dma;
+ struct spi_dma_info * dma_info;
+ void (*write) (struct driver_data * drv_data);
@@ -234949,9 +236032,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/spi.h ../new/linux-2.6.20
+extern irqreturn_t spi_dma_callback_handler(int irq, void *param);
+extern void nomadik_spi_tasklet(unsigned long param);
+#endif /* _SPI_NMDK_H */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/ssp-spi.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/ssp-spi.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/ssp-spi.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/ssp-spi.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/ssp-spi.h
@@ -0,0 +1,280 @@
+/*
+ * arch/arm/mach-nomadik/ssp-spi.h
@@ -235071,7 +236153,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/ssp-spi.h ../new/linux-2.
+#define SSP_CPSR_MASK_CPSDVSR ((uint32)(0xFFUL << 0)) /*(0xFF << 0)*/
+
+/*#######################################################################
-+ SSP Interrupt Mask Set/Clear Register - ssp_imsc
++ SSP Interrupt Mask Set/Clear Register - ssp_imsc
+#########################################################################
+*/
+#define SSP_IMSC_MASK_RORIM ((uint32)(0x1UL << 0)) /* Receive Overrun Interrupt mask */
@@ -235189,7 +236271,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/ssp-spi.h ../new/linux-2.
+#define NMDK_SSP_CLOCK_FREQ 48000000
+
+/*#######################################################################
-+ SSP Interrupt related Macros
++ SSP Interrupt related Macros
+#########################################################################
+ */
+#define DEFAULT_SSP_REG_IMSC 0x0UL
@@ -235199,7 +236281,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/ssp-spi.h ../new/linux-2.
+#define CLEAR_ALL_SSP_INTERRUPTS 0x3
+
+/*#######################################################################
-+ Default SSP Register Values
++ Default SSP Register Values
+#########################################################################
+ */
+#define DEFAULT_SSP_REG_CR0 ( \
@@ -235233,9 +236315,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/ssp-spi.h ../new/linux-2.
+ GEN_MASK_BITS(SSP_DMA_DISABLED, SSP_DMACR_MASK_TXDMAE, 1) \
+ )
+#endif
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stn8810_devices.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/stn8810_devices.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/stn8810_devices.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/stn8810_devices.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/stn8810_devices.h
@@ -0,0 +1,120 @@
+/*
+ * include/asm-arm/arch-nomadik/stn8810_devices.h
@@ -235260,7 +236341,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stn8810_devices.h ../new/
+#define NOMADIK_TDES_BASE 0x10180000 /* TDES Processor */
+#define NOMADIK_USB_BASE 0x10300000 /* USB-OTG conf reg base */
+
-+/*
++/*
+ * Chip specific Interrupt numbers
+ */
+#define IRQ_MSP1 30
@@ -235332,11 +236413,11 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stn8810_devices.h ../new/
+#define FWM_ESRAM_BANK3_BASE (FWM_ESRAM_BANK2_BASE + FWM_ESRAM_BANK_SIZE)
+
+/*
-+ * Macros
++ * Macros
+ */
+#define SOC_IO_DESC /*nothing to define */
+
-+/*
++/*
+ Backup RAM size not mentioned for this soc chip (TBC!!)
+ */
+
@@ -235357,9 +236438,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stn8810_devices.h ../new/
+#define FIRDA_RX_REG_OFFSET (0x20)
+
+#endif /* __stn8810_devices_h */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stn8815_devices.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/stn8815_devices.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/stn8815_devices.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/stn8815_devices.h 2008-07-04 23:45:28.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/stn8815_devices.h
@@ -0,0 +1,165 @@
+/*
+ * include/asm-arm/arch-nomadik/stn8815_devices.h
@@ -235384,12 +236464,12 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stn8815_devices.h ../new/
+#define NOMADIK_USB_BASE 0x10170000 /* USB-OTG conf reg base */
+#define NOMADIK_CRYP_BASE 0x10180000 /* Cryptographic processor
+ configuration/data registers */
-+#define NOMADIK_MSHC_BASE 0x101F5000 /* Memory Stick(Pro) Host
++#define NOMADIK_MSHC_BASE 0x101F5000 /* Memory Stick(Pro) Host
+ Controller Registers */
+
-+#define NOMADIK_L2CC_BASE 0x10210000 /* L2 Cache controller */
++#define NOMADIK_L2CC_BASE 0x10210000 /* L2 Cache controller */
+
-+/*
++/*
+ * Chip specific Interrupt numbers
+ */
+#define IRQ_MSP1 62
@@ -235491,14 +236571,14 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stn8815_devices.h ../new/
+
+
+/*
-+ * Macros
++ * Macros
+ */
+#define SOC_IO_DESC \
+ {IO_ADDRESS(NOMADIK_GPIO3_BASE), __phys_to_pfn(NOMADIK_GPIO3_BASE),\
+ SZ_4K, MT_DEVICE},
+
-+/*
-+ Backup RAM size
++/*
++ Backup RAM size
+ */
+#define BACKUP_RAM_SIZE (1024)
+/*
@@ -235526,13 +236606,12 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stn8815_devices.h ../new/
+
+
+#endif /* __stn8815_devices_h */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stw5094ap.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/stw5094ap.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/stw5094ap.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/stw5094ap.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/stw5094ap.h
@@ -0,0 +1,176 @@
+/* include/asm-arm/arch-nomadik/stw5094ap.h
+ *
-+ * Header file for audiocodec STW5094 specific data structures, enums
++ * Header file for audiocodec STW5094 specific data structures, enums
+ * and private & public functions.
+ *
+ * Copyright (C) 2006 STMicroelectronics Pvt. Ltd.
@@ -235706,13 +236785,12 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stw5094ap.h ../new/linux-
+#define MASTERCLK_MCLK 0x10 /* The Master Clock Input for Tone and FM mode only is MCLK */
+
+#endif /* _STW5094AP_H_ */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stw5095.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/stw5095.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/stw5095.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/stw5095.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/stw5095.h
@@ -0,0 +1,1387 @@
+/* include/asm-arm/arch-nomadik/nomadik_stw5095.h
+ *
-+ * Header file for audiocodec STW5095 specific data structures, enums
++ * Header file for audiocodec STW5095 specific data structures, enums
+ * and private & public functions.
+ *
+ * Copyright (C) 2006 STMicroelectronics Pvt. Ltd.
@@ -235738,12 +236816,12 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stw5095.h ../new/linux-2.
+#define _NOMADIK_ACODEC_STW5095_H_
+
+/*---------------------------------------------------------------------
-+ * Includes
++ * Includes
+ *--------------------------------------------------------------------*/
+#include <asm/types.h>
+
+/*---------------------------------------------------------------------
-+ * Define
++ * Define
+ *--------------------------------------------------------------------*/
+
+typedef enum {
@@ -235915,9 +236993,9 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stw5095.h ../new/linux-2.
+t_codec_error CODEC_I2CWrite(__u16 add_of_codec_on_i2c, __u8 location,
+ __u8 * p_data, __u32 count);
+
-+/*---------------------------------------------------------------------------------------------
++/*---------------------------------------------------------------------------------------------
+* Private Header file for AUDIOCODEC stw5095
-+*---------------------------------------------------------------------------------------------
++*---------------------------------------------------------------------------------------------
+*/
+
+#define CODEC_MASK_ONE_BIT 0x1UL
@@ -237097,9 +238175,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/stw5095.h ../new/linux-2.
+} t_codec_system_context;
+
+#endif /* _NOMADIK_ACODEC_STW5095_H_ */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/sva.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/sva.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/sva.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/sva.h 2008-07-17 16:42:46.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/sva.h
@@ -0,0 +1,43 @@
+/*--------------------------------------------------------------------------------------------------*/
+/*© copyright STMicroelectronics, 2007. */
@@ -237144,9 +238221,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/sva.h ../new/linux-2.6.20
+};
+
+
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/system.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/system.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/system.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/system.h 2008-07-04 23:45:29.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/system.h
@@ -0,0 +1,62 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/system.h
@@ -237202,17 +238278,16 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/system.h ../new/linux-2.6
+
+ src_rstsr = psrc_cr + 6;
+
-+ /*
-+ * Writing anything in Reset status register will do the soft reset
++ /*
++ * Writing anything in Reset status register will do the soft reset
+ */
+
+ *(src_rstsr) = 1;
+}
+
+#endif
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/timex.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/timex.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/timex.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/timex.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/timex.h
@@ -0,0 +1,71 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/timex.h
@@ -237285,55 +238360,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/timex.h ../new/linux-2.6.
+}
+mtu_struct_t;
+#endif
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/touchp2003.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/touchp2003.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/touchp2003.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/touchp2003.h 2007-11-21 11:51:42.000000000 +0530
-@@ -0,0 +1,42 @@
-+/*
-+ * linux/include/asm-arm/arch-nomadik/touchp2003.h
-+ *
-+ * Copyright (C) STMicroelectronics
-+ *
-+ * 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
-+ */
-+
-+/******************************************************************************
-+ * C STMicroelectronics
-+ *-----------------------------------------------------------------------------
-+ *
-+ * Purpose : Basic definitions for Nomadik Touchpanel Driver
-+ *
-+ *****************************************************************************/
-+
-+#ifndef _TOUCHP_NOMADIK_TSC2003_H
-+#define _TOUCHP_NOMADIK_TSC2003_H
-+
-+
-+struct touchp_tsc2003_device{
-+ int (*irq_init)(void (*callback)(void* parameter), void * p);
-+ int (*irq_exit)(void);
-+ int (*pirq_en) (void);
-+ int (*pirq_dis)(void);
-+ int (*pirq_ack)(void);
-+ int (*pirq_read_val)(unsigned char * value);
-+};
-+
-+#endif /* _NOMADIK_TP_h */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/touchp.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/touchp.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/touchp.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/touchp.h 2008-07-04 23:45:30.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/touchp.h
@@ -0,0 +1,145 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/touchp.h
@@ -237480,9 +238508,53 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/touchp.h ../new/linux-2.6
+extern void nomadik_tp_spi_cs_enable(void);
+
+#endif /* _NOMADIK_TP_h */
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/udc.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/udc.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/udc.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/udc.h 2008-07-04 23:45:53.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/touchp2003.h
+@@ -0,0 +1,42 @@
++/*
++ * linux/include/asm-arm/arch-nomadik/touchp2003.h
++ *
++ * Copyright (C) STMicroelectronics
++ *
++ * 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
++ */
++
++/******************************************************************************
++ * C STMicroelectronics
++ *-----------------------------------------------------------------------------
++ *
++ * Purpose : Basic definitions for Nomadik Touchpanel Driver
++ *
++ *****************************************************************************/
++
++#ifndef _TOUCHP_NOMADIK_TSC2003_H
++#define _TOUCHP_NOMADIK_TSC2003_H
++
++
++struct touchp_tsc2003_device{
++ int (*irq_init)(void (*callback)(void* parameter), void * p);
++ int (*irq_exit)(void);
++ int (*pirq_en) (void);
++ int (*pirq_dis)(void);
++ int (*pirq_ack)(void);
++ int (*pirq_read_val)(unsigned char * value);
++};
++
++#endif /* _NOMADIK_TP_h */
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/udc.h
@@ -0,0 +1,490 @@
+//#define DEBUG_LEVEL 1
+#undef DEBUG_LEVEL
@@ -237493,13 +238565,13 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/udc.h ../new/linux-2.6.20
+ printk(KERN_ERR "%s:%s: " format "\n" , __FILE__, __FUNCTION__ , ## arg); \
+ }while(0)
+#else
-+ #define DBG(level, format, arg...) do { } while(0)
++ #define DBG(level, format, arg...) do { } while(0)
+#endif
+
+
+#define ERR(format, arg...) \
+printk(KERN_ERR "%s:%s: " format "\n" , __FILE__, __FUNCTION__ , ## arg)
-+
++
+#define WARN(format, arg...) \
+ printk(KERN_WARNING "%s:%s: " format "\n" , __FILE__, __FUNCTION__ , ## arg)
+
@@ -237534,7 +238606,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/udc.h ../new/linux-2.6.20
+
+
+/*
-+ * MUSBMHDRC Register map
++ * MUSBMHDRC Register map
+ */
+
+/* Common USB registers */
@@ -237544,11 +238616,11 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/udc.h ../new/linux-2.6.20
+
+#define MUSB_O_HDRC_INTRTX 0x02 /* 16-bit */
+#define MUSB_O_HDRC_INTRRX 0x04
-+#define MUSB_O_HDRC_INTRTXE 0x06
-+#define MUSB_O_HDRC_INTRRXE 0x08
++#define MUSB_O_HDRC_INTRTXE 0x06
++#define MUSB_O_HDRC_INTRRXE 0x08
+#define MUSB_O_HDRC_INTRUSB 0x0A /* 8 bit */
+#define MUSB_O_HDRC_INTRUSBE 0x0B /* 8 bit */
-+#define MUSB_O_HDRC_FRAME 0x0C
++#define MUSB_O_HDRC_FRAME 0x0C
+#define MUSB_O_HDRC_INDEX 0x0E /* 8 bit */
+#define MUSB_O_HDRC_TESTMODE 0x0F /* 8 bit */
+
@@ -237603,7 +238675,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/udc.h ../new/linux-2.6.20
+
+/* POWER */
+
-+#define MUSB_M_POWER_ISOUPDATE 0x80
++#define MUSB_M_POWER_ISOUPDATE 0x80
+#define MUSB_M_POWER_SOFTCONN 0x40
+#define MUSB_M_POWER_HSENAB 0x20
+#define MUSB_M_POWER_HSMODE 0x10
@@ -237617,7 +238689,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/udc.h ../new/linux-2.6.20
+#define MUSB_M_INTR_RESUME 0x02
+#define MUSB_M_INTR_RESET 0x04
+#define MUSB_M_INTR_BABBLE 0x04
-+#define MUSB_M_INTR_SOF 0x08
++#define MUSB_M_INTR_SOF 0x08
+#define MUSB_M_INTR_CONNECT 0x10
+#define MUSB_M_INTR_DISCONNECT 0x20
+#define MUSB_M_INTR_SESSREQ 0x40
@@ -237625,7 +238697,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/udc.h ../new/linux-2.6.20
+#define MUSB_M_INTR_EP0 0x01 /* FOR EP0 INTERRUPT */
+
+/* DEVCTL */
-+#define MUSB_M_DEVCTL_BDEVICE 0x80
++#define MUSB_M_DEVCTL_BDEVICE 0x80
+#define MUSB_M_DEVCTL_FSDEV 0x40
+#define MUSB_M_DEVCTL_LSDEV 0x20
+#define MUSB_M_DEVCTL_VBUS 0x18
@@ -237840,7 +238912,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/udc.h ../new/linux-2.6.20
+ u8 ackwait;
+ u8 dma_channel;
+ u8 is_tx;
-+ u8 end_number;
++ u8 end_number;
+ u16 dma_counter;
+ int lch;
+ struct nomadik_udc *udc;
@@ -237854,7 +238926,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/udc.h ../new/linux-2.6.20
+ u8 end_number;
+ unsigned dma_bytes;
+ unsigned mapped:1;
-+};
++};
+
+
+#if 0
@@ -237941,14 +239013,14 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/udc.h ../new/linux-2.6.20
+ DBG(4, "WRITE8(%p, %x, %02x)\n", base_ptr, offset, data); \
+ wmb(); \
+ *(volatile uint8_t*)((unsigned long)base_ptr + offset) = data; \
-+ }
++ }
+
+#undef MUSB_WRITE16
+#define MUSB_WRITE16(base_ptr, offset, data) { \
+ DBG(4, "WRITE16(%p, %x, %04x)\n", base_ptr, offset, data); \
+ wmb(); \
+ *(volatile uint16_t*)((unsigned long)base_ptr + offset) = data; \
-+ }
++ }
+
+
+#undef MUSB_WRITE32
@@ -237956,7 +239028,7 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/udc.h ../new/linux-2.6.20
+ DBG(4, "WRITE32(%p, %x, %08x)\n", base_ptr, offset, data); \
+ wmb(); \
+ *(volatile uint32_t*)((unsigned long)base_ptr + offset) = data; \
-+ }
++ }
+
+#define MUSB_SELECTEND(base_ptr, end) \
+ MUSB_WRITE8(base_ptr, MUSB_O_HDRC_INDEX, end)
@@ -237974,9 +239046,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/udc.h ../new/linux-2.6.20
+ MUSB_WRITE16(base_ptr, (offset + 0x10), data)
+
+
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/uncompress.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/uncompress.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/uncompress.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/uncompress.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/uncompress.h
@@ -0,0 +1,71 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/uncompress.h
@@ -238049,9 +239120,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/uncompress.h ../new/linux
+ * nothing to do
+ */
+#define arch_decomp_wdog()
-diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/vmalloc.h ../new/linux-2.6.20/include/asm-arm/arch-nomadik/vmalloc.h
---- linux-2.6.20/include/asm-arm/arch-nomadik/vmalloc.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/arch-nomadik/vmalloc.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/arch-nomadik/vmalloc.h
@@ -0,0 +1,32 @@
+/*
+ * linux/include/asm-arm/arch-nomadik/vmalloc.h
@@ -238085,9 +239155,8 @@ diff -Nauprw linux-2.6.20/include/asm-arm/arch-nomadik/vmalloc.h ../new/linux-2.
+#define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
+#define VMALLOC_VMADDR(x) ((unsigned long)(x))
+#define VMALLOC_END (PAGE_OFFSET + 0x10000000)
-diff -Nauprw linux-2.6.20/include/asm-arm/kgdb.h ../new/linux-2.6.20/include/asm-arm/kgdb.h
---- linux-2.6.20/include/asm-arm/kgdb.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/kgdb.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/include/asm-arm/kgdb.h
@@ -0,0 +1,91 @@
+/*
+ * include/asm-arm/kgdb.h
@@ -238180,10 +239249,11 @@ diff -Nauprw linux-2.6.20/include/asm-arm/kgdb.h ../new/linux-2.6.20/include/asm
+#define CFI_END_FRAME(func) __CFI_END_FRAME(_PC,_SP,func)
+
+#endif /* __ASM_KGDB_H__ */
-diff -Nauprw linux-2.6.20/include/asm-arm/system.h ../new/linux-2.6.20/include/asm-arm/system.h
---- linux-2.6.20/include/asm-arm/system.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-arm/system.h 2007-11-21 11:51:42.000000000 +0530
-@@ -345,6 +345,47 @@ static inline unsigned long __xchg(unsig
+--- linux-2.6.20.orig/include/asm-arm/system.h
++++ linux-2.6.20/include/asm-arm/system.h
+@@ -343,10 +343,51 @@ static inline unsigned long __xchg(unsig
+ }
+
extern void disable_hlt(void);
extern void enable_hlt(void);
@@ -238231,9 +239301,10 @@ diff -Nauprw linux-2.6.20/include/asm-arm/system.h ../new/linux-2.6.20/include/a
#endif /* __ASSEMBLY__ */
#define arch_align_stack(x) (x)
-diff -Nauprw linux-2.6.20/include/asm-generic/kgdb.h ../new/linux-2.6.20/include/asm-generic/kgdb.h
---- linux-2.6.20/include/asm-generic/kgdb.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/asm-generic/kgdb.h 2007-11-21 11:51:42.000000000 +0530
+
+ #endif /* __KERNEL__ */
+--- /dev/null
++++ linux-2.6.20/include/asm-generic/kgdb.h
@@ -0,0 +1,34 @@
+/*
+ * include/asm-generic/kgdb.h
@@ -238269,10 +239340,11 @@ diff -Nauprw linux-2.6.20/include/asm-generic/kgdb.h ../new/linux-2.6.20/include
+#endif /* CONFIG_KGDB */
+#endif /* __ASSEMBLY__ */
+#endif /* __ASM_GENERIC_KGDB_H__ */
-diff -Nauprw linux-2.6.20/include/linux/amba/clcd.h ../new/linux-2.6.20/include/linux/amba/clcd.h
---- linux-2.6.20/include/linux/amba/clcd.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/amba/clcd.h 2007-11-21 11:51:42.000000000 +0530
-@@ -53,7 +53,12 @@
+--- linux-2.6.20.orig/include/linux/amba/clcd.h
++++ linux-2.6.20/include/linux/amba/clcd.h
+@@ -51,11 +51,16 @@
+ #define CNTL_LCDBPP1 (0 << 1)
+ #define CNTL_LCDBPP2 (1 << 1)
#define CNTL_LCDBPP4 (2 << 1)
#define CNTL_LCDBPP8 (3 << 1)
#define CNTL_LCDBPP16 (4 << 1)
@@ -238285,7 +239357,11 @@ diff -Nauprw linux-2.6.20/include/linux/amba/clcd.h ../new/linux-2.6.20/include/
#define CNTL_LCDBPP24 (5 << 1)
#define CNTL_LCDBW (1 << 4)
#define CNTL_LCDTFT (1 << 5)
-@@ -66,6 +71,13 @@
+ #define CNTL_LCDMONO8 (1 << 6)
+ #define CNTL_LCDDUAL (1 << 7)
+@@ -64,10 +69,17 @@
+ #define CNTL_BEPO (1 << 10)
+ #define CNTL_LCDPWR (1 << 11)
#define CNTL_LCDVCOMP(x) ((x) << 12)
#define CNTL_LDMAFIFOTIME (1 << 15)
#define CNTL_WATERMARK (1 << 16)
@@ -238299,7 +239375,11 @@ diff -Nauprw linux-2.6.20/include/linux/amba/clcd.h ../new/linux-2.6.20/include/
struct clcd_panel {
struct fb_videomode mode;
-@@ -218,8 +230,20 @@ static inline void clcdfb_decode(struct
+ signed short width; /* width in mm */
+ signed short height; /* height in mm */
+@@ -216,12 +228,24 @@ static inline void clcdfb_decode(struct
+ if ((fb->dev->periphid & 0x000fffff) == 0x00041110)
+ val |= CNTL_LCDBPP16;
else if (fb->fb.var.green.length == 5)
val |= CNTL_LCDBPP16;
else
@@ -238311,18 +239391,322 @@ diff -Nauprw linux-2.6.20/include/linux/amba/clcd.h ../new/linux-2.6.20/include/
+#else
val |= CNTL_LCDBPP16_565;
+#endif
-+ break;
+ break;
+#ifdef CONFIG_ARCH_NOMADIK
+ case 24:
+ val |= CNTL_LCDBPP24PACKED;
- break;
++ break;
+#endif
case 32:
val |= CNTL_LCDBPP24;
break;
-diff -Nauprw linux-2.6.20/include/linux/dwarf2.h ../new/linux-2.6.20/include/linux/dwarf2.h
---- linux-2.6.20/include/linux/dwarf2.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/dwarf2.h 2007-11-21 11:51:42.000000000 +0530
+ }
+
+--- /dev/null
++++ linux-2.6.20/include/linux/dwarf2-lang.h
+@@ -0,0 +1,300 @@
++#ifndef DWARF2_LANG
++#define DWARF2_LANG
++
++/*
++ * 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, or (at your option) any later
++ * version.
++ */
++/*
++ * This file defines macros that allow generation of DWARF debug records
++ * for asm files. This file is platform independent. Register numbers
++ * (which are about the only thing that is platform dependent) are to be
++ * supplied by a platform defined file.
++ */
++/*
++ * We need this to work for both asm and C. In asm we are using the
++ * old comment trick to concatenate while C uses the new ANSI thing.
++ * Here we have concat macro... The multi level thing is to allow and
++ * macros used in the names to be resolved prior to the cat (at which
++ * time they are no longer the same string).
++ */
++#define CAT3(a,b,c) _CAT3(a,b,c)
++#define _CAT3(a,b,c) __CAT3(a,b,c)
++#ifndef __STDC__
++#define __CAT3(a,b,c) a/**/b/**/c
++#else
++#define __CAT3(a,b,c) a##b##c
++#endif
++#ifdef __ASSEMBLY__
++#define IFC(a)
++#define IFN_C(a) a
++#define NL ;
++#define QUOTE_THIS(a) a
++#define DWARF_preamble .section .debug_frame,"",%progbits;
++#else
++#define IFC(a) a
++#define IFN_C(a)
++#define NL \n\t
++#define QUOTE_THIS(a) _QUOTE_THIS(a)
++#define _QUOTE_THIS(a) #a
++/* Don't let CPP see the " and , \042=" \054=, */
++#define DWARF_preamble .section .debug_frame \054\042\042\054%progbits
++#endif
++
++#ifdef CONFIG_64BIT
++#define DATA_ALIGN_FACTOR 8
++#define ADDR_LOC .quad
++#else
++#define DATA_ALIGN_FACTOR 4
++#define ADDR_LOC .long
++#endif
++
++#include <linux/dwarf2-defs.h>
++/*
++ * This macro starts a debug frame section. The debug_frame describes
++ * where to find the registers that the enclosing function saved on
++ * entry.
++ *
++ * ORD is use by the label generator and should be the same as what is
++ * passed to CFI_postamble.
++ *
++ * pc, pc register gdb ordinal.
++ *
++ * code_align this is the factor used to define locations or regions
++ * where the given definitions apply. If you use labels to define these
++ * this should be 1.
++ *
++ * data_align this is the factor used to define register offsets. If
++ * you use struct offset, this should be the size of the register in
++ * bytes or the negative of that. This is how it is used: you will
++ * define a register as the reference register, say the stack pointer,
++ * then you will say where a register is located relative to this
++ * reference registers value, say 40 for register 3 (the gdb register
++ * number). The <40> will be multiplied by <data_align> to define the
++ * byte offset of the given register (3, in this example). So if your
++ * <40> is the byte offset and the reference register points at the
++ * begining, you would want 1 for the data_offset. If <40> was the 40th
++ * 4-byte element in that structure you would want 4. And if your
++ * reference register points at the end of the structure you would want
++ * a negative data_align value(and you would have to do other math as
++ * well).
++ */
++
++#define CFI_preamble(ORD, pc, code_align, data_align) \
++ DWARF_preamble NL \
++ .align DATA_ALIGN_FACTOR NL \
++ .globl CAT3(frame,_,ORD) NL \
++CAT3(frame,_,ORD): NL \
++ .long 7f-6f NL \
++6: \
++ .long DW_CIE_ID NL \
++ .byte DW_CIE_VERSION NL \
++ .byte 0 NL \
++ .uleb128 code_align NL \
++ .sleb128 data_align NL \
++ .byte pc NL
++
++/*
++ * After the above macro and prior to the CFI_postamble, you need to
++ * define the initial state. This starts with defining the reference
++ * register and, usually the pc. Here are some helper macros:
++ */
++
++#define CFA_define_reference(reg, offset) \
++ .byte DW_CFA_def_cfa NL \
++ .uleb128 reg NL \
++ .uleb128 (offset) NL
++
++#define CFA_define_offset(reg, offset) \
++ .byte (DW_CFA_offset + reg) NL \
++ .uleb128 (offset) NL
++
++#define CFA_restore(reg) \
++ .byte (DW_CFA_restore + reg) NL
++
++#define CFI_postamble() \
++ .align DATA_ALIGN_FACTOR NL \
++7: NL \
++.previous NL
++
++/*
++ * So now your code pushs stuff on the stack, you need a new location
++ * and the rules for what to do. This starts a running description of
++ * the call frame. You need to describe what changes with respect to
++ * the call registers as the location of the pc moves through the code.
++ * The following builds an FDE (fram descriptor entry?). Like the
++ * above, it has a preamble and a postamble. It also is tied to the CFI
++ * above.
++ * The preamble macro is tied to the CFI thru the first parameter. The
++ * second is the code start address and then the code end address+1.
++ */
++#define FDE_preamble(ORD, initial_address, end_address) \
++ DWARF_preamble NL \
++ .align DATA_ALIGN_FACTOR NL \
++ .long 9f-8f NL \
++8: \
++ .long CAT3(frame,_,ORD) NL \
++ ADDR_LOC initial_address NL \
++ ADDR_LOC (end_address - initial_address) NL
++
++#define FDE_postamble() \
++ .align DATA_ALIGN_FACTOR NL \
++9: NL \
++.previous NL
++
++/*
++ * That done, you can now add registers, subtract registers, move the
++ * reference and even change the reference. You can also define a new
++ * area of code the info applies to. For discontinuous bits you should
++ * start a new FDE. You may have as many as you like.
++ */
++
++/*
++ * To advance the stack address by <bytes> (0x3f max)
++ */
++
++#define CFA_advance_loc(bytes) \
++ .byte DW_CFA_advance_loc+bytes NL
++
++/*
++ * This one is good for 0xff or 255
++ */
++#define CFA_advance_loc1(bytes) \
++ .byte DW_CFA_advance_loc1 NL \
++ .byte bytes NL
++
++#define CFA_undefine_reg(reg) \
++ .byte DW_CFA_undefined NL \
++ .uleb128 reg NL
++/*
++ * With the above you can define all the register locations. But
++ * suppose the reference register moves... Takes the new offset NOT an
++ * increment. This is how esp is tracked if it is not saved.
++ */
++
++#define CFA_define_cfa_offset(offset) \
++ .byte DW_CFA_def_cfa_offset NL \
++ .uleb128 (offset) NL
++/*
++ * Or suppose you want to use a different reference register...
++ */
++#define CFA_define_cfa_register(reg) \
++ .byte DW_CFA_def_cfa_register NL \
++ .uleb128 reg NL
++
++/*
++ * If you want to mess with the stack pointer, here is the expression.
++ * The stack starts empty.
++ */
++#define CFA_def_cfa_expression \
++ .byte DW_CFA_def_cfa_expression NL \
++ .uleb128 20f-10f NL \
++10: NL
++/*
++ * This expression is to be used for other regs. The stack starts with the
++ * stack address.
++ */
++
++#define CFA_expression(reg) \
++ .byte DW_CFA_expression NL \
++ .uleb128 reg NL \
++ .uleb128 20f-10f NL \
++10: NL
++/*
++ * Here we do the expression stuff. You should code the above followed
++ * by expression OPs followed by CFA_expression_end.
++ */
++
++
++#define CFA_expression_end \
++20: NL
++
++#define CFA_exp_OP_const4s(a) \
++ .byte DW_OP_const4s NL \
++ .long a NL
++
++#define CFA_exp_OP_swap .byte DW_OP_swap NL
++#define CFA_exp_OP_dup .byte DW_OP_dup NL
++#define CFA_exp_OP_drop .byte DW_OP_drop NL
++/*
++ * All these work on the top two elements on the stack, replacing them
++ * with the result. Top comes first where it matters. True is 1, false 0.
++ */
++#define CFA_exp_OP_deref .byte DW_OP_deref NL
++#define CFA_exp_OP_and .byte DW_OP_and NL
++#define CFA_exp_OP_div .byte DW_OP_div NL
++#define CFA_exp_OP_minus .byte DW_OP_minus NL
++#define CFA_exp_OP_mod .byte DW_OP_mod NL
++#define CFA_exp_OP_neg .byte DW_OP_neg NL
++#define CFA_exp_OP_plus .byte DW_OP_plus NL
++#define CFA_exp_OP_not .byte DW_OP_not NL
++#define CFA_exp_OP_or .byte DW_OP_or NL
++#define CFA_exp_OP_xor .byte DW_OP_xor NL
++#define CFA_exp_OP_le .byte DW_OP_le NL
++#define CFA_exp_OP_ge .byte DW_OP_ge NL
++#define CFA_exp_OP_eq .byte DW_OP_eq NL
++#define CFA_exp_OP_lt .byte DW_OP_lt NL
++#define CFA_exp_OP_gt .byte DW_OP_gt NL
++#define CFA_exp_OP_ne .byte DW_OP_ne NL
++/*
++ * These take a parameter as noted
++ */
++/*
++ * Unconditional skip to loc. loc is a label (loc:)
++ */
++#define CFA_exp_OP_skip(loc) \
++ .byte DW_OP_skip NL \
++ .hword loc-.-2 NL
++/*
++ * Conditional skip to loc (TOS != 0, TOS--) (loc is a label)
++ */
++#define CFA_exp_OP_bra(loc) \
++ .byte DW_OP_bra NL \
++ .hword loc-.-2 NL
++
++/*
++ * TOS += no (an unsigned number)
++ */
++#define CFA_exp_OP_plus_uconst(no) \
++ .byte DW_OP_plus_uconst NL \
++ .uleb128 no NL
++
++/*
++ * ++TOS = no (a unsigned number)
++ */
++#define CFA_exp_OP_constu(no) \
++ .byte DW_OP_constu NL \
++ .uleb128 no NL
++/*
++ * ++TOS = no (a signed number)
++ */
++#define CFA_exp_OP_consts(no) \
++ .byte DW_OP_consts NL \
++ .sleb128 no NL
++/*
++ * ++TOS = no (an unsigned byte)
++ */
++#define CFA_exp_OP_const1u(no) \
++ .byte DW_OP_const1u NL \
++ .byte no NL
++
++
++/*
++ * ++TOS = no (a address)
++ */
++#define CFA_exp_OP_addr(no) \
++ .byte DW_OP_addr NL \
++ .long no NL
++
++/*
++ * Push current frames value for "reg" + offset
++ * We take advantage of the opcode assignments to make this a litteral reg
++ * rather than use the DW_OP_bregx opcode.
++ */
++
++#define CFA_exp_OP_breg(reg,offset) \
++ .byte DW_OP_breg0+reg NL \
++ .sleb128 offset NL
++#endif
+--- /dev/null
++++ linux-2.6.20/include/linux/dwarf2.h
@@ -0,0 +1,775 @@
+/* Declarations and definitions of codes relating to the DWARF2 symbolic
+ debugging information format.
@@ -239099,314 +240483,11 @@ diff -Nauprw linux-2.6.20/include/linux/dwarf2.h ../new/linux-2.6.20/include/lin
+#define DW_EH_PE_indirect 0x80
+
+#endif /* _ELF_DWARF2_H */
-diff -Nauprw linux-2.6.20/include/linux/dwarf2-lang.h ../new/linux-2.6.20/include/linux/dwarf2-lang.h
---- linux-2.6.20/include/linux/dwarf2-lang.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/dwarf2-lang.h 2007-11-21 11:51:42.000000000 +0530
-@@ -0,0 +1,300 @@
-+#ifndef DWARF2_LANG
-+#define DWARF2_LANG
-+
-+/*
-+ * 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, or (at your option) any later
-+ * version.
-+ */
-+/*
-+ * This file defines macros that allow generation of DWARF debug records
-+ * for asm files. This file is platform independent. Register numbers
-+ * (which are about the only thing that is platform dependent) are to be
-+ * supplied by a platform defined file.
-+ */
-+/*
-+ * We need this to work for both asm and C. In asm we are using the
-+ * old comment trick to concatenate while C uses the new ANSI thing.
-+ * Here we have concat macro... The multi level thing is to allow and
-+ * macros used in the names to be resolved prior to the cat (at which
-+ * time they are no longer the same string).
-+ */
-+#define CAT3(a,b,c) _CAT3(a,b,c)
-+#define _CAT3(a,b,c) __CAT3(a,b,c)
-+#ifndef __STDC__
-+#define __CAT3(a,b,c) a/**/b/**/c
-+#else
-+#define __CAT3(a,b,c) a##b##c
-+#endif
-+#ifdef __ASSEMBLY__
-+#define IFC(a)
-+#define IFN_C(a) a
-+#define NL ;
-+#define QUOTE_THIS(a) a
-+#define DWARF_preamble .section .debug_frame,"",%progbits;
-+#else
-+#define IFC(a) a
-+#define IFN_C(a)
-+#define NL \n\t
-+#define QUOTE_THIS(a) _QUOTE_THIS(a)
-+#define _QUOTE_THIS(a) #a
-+/* Don't let CPP see the " and , \042=" \054=, */
-+#define DWARF_preamble .section .debug_frame \054\042\042\054%progbits
-+#endif
-+
-+#ifdef CONFIG_64BIT
-+#define DATA_ALIGN_FACTOR 8
-+#define ADDR_LOC .quad
-+#else
-+#define DATA_ALIGN_FACTOR 4
-+#define ADDR_LOC .long
-+#endif
-+
-+#include <linux/dwarf2-defs.h>
-+/*
-+ * This macro starts a debug frame section. The debug_frame describes
-+ * where to find the registers that the enclosing function saved on
-+ * entry.
-+ *
-+ * ORD is use by the label generator and should be the same as what is
-+ * passed to CFI_postamble.
-+ *
-+ * pc, pc register gdb ordinal.
-+ *
-+ * code_align this is the factor used to define locations or regions
-+ * where the given definitions apply. If you use labels to define these
-+ * this should be 1.
-+ *
-+ * data_align this is the factor used to define register offsets. If
-+ * you use struct offset, this should be the size of the register in
-+ * bytes or the negative of that. This is how it is used: you will
-+ * define a register as the reference register, say the stack pointer,
-+ * then you will say where a register is located relative to this
-+ * reference registers value, say 40 for register 3 (the gdb register
-+ * number). The <40> will be multiplied by <data_align> to define the
-+ * byte offset of the given register (3, in this example). So if your
-+ * <40> is the byte offset and the reference register points at the
-+ * begining, you would want 1 for the data_offset. If <40> was the 40th
-+ * 4-byte element in that structure you would want 4. And if your
-+ * reference register points at the end of the structure you would want
-+ * a negative data_align value(and you would have to do other math as
-+ * well).
-+ */
-+
-+#define CFI_preamble(ORD, pc, code_align, data_align) \
-+ DWARF_preamble NL \
-+ .align DATA_ALIGN_FACTOR NL \
-+ .globl CAT3(frame,_,ORD) NL \
-+CAT3(frame,_,ORD): NL \
-+ .long 7f-6f NL \
-+6: \
-+ .long DW_CIE_ID NL \
-+ .byte DW_CIE_VERSION NL \
-+ .byte 0 NL \
-+ .uleb128 code_align NL \
-+ .sleb128 data_align NL \
-+ .byte pc NL
-+
-+/*
-+ * After the above macro and prior to the CFI_postamble, you need to
-+ * define the initial state. This starts with defining the reference
-+ * register and, usually the pc. Here are some helper macros:
-+ */
-+
-+#define CFA_define_reference(reg, offset) \
-+ .byte DW_CFA_def_cfa NL \
-+ .uleb128 reg NL \
-+ .uleb128 (offset) NL
-+
-+#define CFA_define_offset(reg, offset) \
-+ .byte (DW_CFA_offset + reg) NL \
-+ .uleb128 (offset) NL
-+
-+#define CFA_restore(reg) \
-+ .byte (DW_CFA_restore + reg) NL
-+
-+#define CFI_postamble() \
-+ .align DATA_ALIGN_FACTOR NL \
-+7: NL \
-+.previous NL
-+
-+/*
-+ * So now your code pushs stuff on the stack, you need a new location
-+ * and the rules for what to do. This starts a running description of
-+ * the call frame. You need to describe what changes with respect to
-+ * the call registers as the location of the pc moves through the code.
-+ * The following builds an FDE (fram descriptor entry?). Like the
-+ * above, it has a preamble and a postamble. It also is tied to the CFI
-+ * above.
-+ * The preamble macro is tied to the CFI thru the first parameter. The
-+ * second is the code start address and then the code end address+1.
-+ */
-+#define FDE_preamble(ORD, initial_address, end_address) \
-+ DWARF_preamble NL \
-+ .align DATA_ALIGN_FACTOR NL \
-+ .long 9f-8f NL \
-+8: \
-+ .long CAT3(frame,_,ORD) NL \
-+ ADDR_LOC initial_address NL \
-+ ADDR_LOC (end_address - initial_address) NL
-+
-+#define FDE_postamble() \
-+ .align DATA_ALIGN_FACTOR NL \
-+9: NL \
-+.previous NL
-+
-+/*
-+ * That done, you can now add registers, subtract registers, move the
-+ * reference and even change the reference. You can also define a new
-+ * area of code the info applies to. For discontinuous bits you should
-+ * start a new FDE. You may have as many as you like.
-+ */
-+
-+/*
-+ * To advance the stack address by <bytes> (0x3f max)
-+ */
-+
-+#define CFA_advance_loc(bytes) \
-+ .byte DW_CFA_advance_loc+bytes NL
-+
-+/*
-+ * This one is good for 0xff or 255
-+ */
-+#define CFA_advance_loc1(bytes) \
-+ .byte DW_CFA_advance_loc1 NL \
-+ .byte bytes NL
-+
-+#define CFA_undefine_reg(reg) \
-+ .byte DW_CFA_undefined NL \
-+ .uleb128 reg NL
-+/*
-+ * With the above you can define all the register locations. But
-+ * suppose the reference register moves... Takes the new offset NOT an
-+ * increment. This is how esp is tracked if it is not saved.
-+ */
-+
-+#define CFA_define_cfa_offset(offset) \
-+ .byte DW_CFA_def_cfa_offset NL \
-+ .uleb128 (offset) NL
-+/*
-+ * Or suppose you want to use a different reference register...
-+ */
-+#define CFA_define_cfa_register(reg) \
-+ .byte DW_CFA_def_cfa_register NL \
-+ .uleb128 reg NL
-+
-+/*
-+ * If you want to mess with the stack pointer, here is the expression.
-+ * The stack starts empty.
-+ */
-+#define CFA_def_cfa_expression \
-+ .byte DW_CFA_def_cfa_expression NL \
-+ .uleb128 20f-10f NL \
-+10: NL
-+/*
-+ * This expression is to be used for other regs. The stack starts with the
-+ * stack address.
-+ */
-+
-+#define CFA_expression(reg) \
-+ .byte DW_CFA_expression NL \
-+ .uleb128 reg NL \
-+ .uleb128 20f-10f NL \
-+10: NL
-+/*
-+ * Here we do the expression stuff. You should code the above followed
-+ * by expression OPs followed by CFA_expression_end.
-+ */
-+
-+
-+#define CFA_expression_end \
-+20: NL
-+
-+#define CFA_exp_OP_const4s(a) \
-+ .byte DW_OP_const4s NL \
-+ .long a NL
-+
-+#define CFA_exp_OP_swap .byte DW_OP_swap NL
-+#define CFA_exp_OP_dup .byte DW_OP_dup NL
-+#define CFA_exp_OP_drop .byte DW_OP_drop NL
-+/*
-+ * All these work on the top two elements on the stack, replacing them
-+ * with the result. Top comes first where it matters. True is 1, false 0.
-+ */
-+#define CFA_exp_OP_deref .byte DW_OP_deref NL
-+#define CFA_exp_OP_and .byte DW_OP_and NL
-+#define CFA_exp_OP_div .byte DW_OP_div NL
-+#define CFA_exp_OP_minus .byte DW_OP_minus NL
-+#define CFA_exp_OP_mod .byte DW_OP_mod NL
-+#define CFA_exp_OP_neg .byte DW_OP_neg NL
-+#define CFA_exp_OP_plus .byte DW_OP_plus NL
-+#define CFA_exp_OP_not .byte DW_OP_not NL
-+#define CFA_exp_OP_or .byte DW_OP_or NL
-+#define CFA_exp_OP_xor .byte DW_OP_xor NL
-+#define CFA_exp_OP_le .byte DW_OP_le NL
-+#define CFA_exp_OP_ge .byte DW_OP_ge NL
-+#define CFA_exp_OP_eq .byte DW_OP_eq NL
-+#define CFA_exp_OP_lt .byte DW_OP_lt NL
-+#define CFA_exp_OP_gt .byte DW_OP_gt NL
-+#define CFA_exp_OP_ne .byte DW_OP_ne NL
-+/*
-+ * These take a parameter as noted
-+ */
-+/*
-+ * Unconditional skip to loc. loc is a label (loc:)
-+ */
-+#define CFA_exp_OP_skip(loc) \
-+ .byte DW_OP_skip NL \
-+ .hword loc-.-2 NL
-+/*
-+ * Conditional skip to loc (TOS != 0, TOS--) (loc is a label)
-+ */
-+#define CFA_exp_OP_bra(loc) \
-+ .byte DW_OP_bra NL \
-+ .hword loc-.-2 NL
-+
-+/*
-+ * TOS += no (an unsigned number)
-+ */
-+#define CFA_exp_OP_plus_uconst(no) \
-+ .byte DW_OP_plus_uconst NL \
-+ .uleb128 no NL
-+
-+/*
-+ * ++TOS = no (a unsigned number)
-+ */
-+#define CFA_exp_OP_constu(no) \
-+ .byte DW_OP_constu NL \
-+ .uleb128 no NL
-+/*
-+ * ++TOS = no (a signed number)
-+ */
-+#define CFA_exp_OP_consts(no) \
-+ .byte DW_OP_consts NL \
-+ .sleb128 no NL
-+/*
-+ * ++TOS = no (an unsigned byte)
-+ */
-+#define CFA_exp_OP_const1u(no) \
-+ .byte DW_OP_const1u NL \
-+ .byte no NL
-+
-+
-+/*
-+ * ++TOS = no (a address)
-+ */
-+#define CFA_exp_OP_addr(no) \
-+ .byte DW_OP_addr NL \
-+ .long no NL
-+
-+/*
-+ * Push current frames value for "reg" + offset
-+ * We take advantage of the opcode assignments to make this a litteral reg
-+ * rather than use the DW_OP_bregx opcode.
-+ */
-+
-+#define CFA_exp_OP_breg(reg,offset) \
-+ .byte DW_OP_breg0+reg NL \
-+ .sleb128 offset NL
-+#endif
-diff -Nauprw linux-2.6.20/include/linux/i2c.h ../new/linux-2.6.20/include/linux/i2c.h
---- linux-2.6.20/include/linux/i2c.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/i2c.h 2007-11-21 11:51:42.000000000 +0530
-@@ -146,6 +146,9 @@ struct i2c_driver {
+--- linux-2.6.20.orig/include/linux/i2c.h
++++ linux-2.6.20/include/linux/i2c.h
+@@ -144,10 +144,13 @@ struct i2c_driver {
+ * function is mainly used for lookup & other admin. functions.
+ */
struct i2c_client {
unsigned int flags; /* div., see below */
unsigned short addr; /* chip address - NOTE: 7bit */
@@ -239416,7 +240497,11 @@ diff -Nauprw linux-2.6.20/include/linux/i2c.h ../new/linux-2.6.20/include/linux/
/* addresses are stored in the */
/* _LOWER_ 7 bits */
struct i2c_adapter *adapter; /* the adapter we sit on */
-@@ -214,8 +217,18 @@ struct i2c_adapter {
+ struct i2c_driver *driver; /* and our access routines */
+ int usage_count; /* How many accesses currently */
+@@ -212,12 +215,22 @@ struct i2c_adapter {
+ void *algo_data;
+
/* --- administration stuff. */
int (*client_register)(struct i2c_client *);
int (*client_unregister)(struct i2c_client *);
@@ -239429,15 +240514,16 @@ diff -Nauprw linux-2.6.20/include/linux/i2c.h ../new/linux-2.6.20/include/linux/
+ /* data fields that are valid for all devices */
/* data fields that are valid for all devices */
-+ struct semaphore lock;
-+
++ struct semaphore lock;
++
+ /******ADDED IN consistency with previous i2c subsystem*********/
u8 level; /* nesting level for lockdep */
struct mutex bus_lock;
struct mutex clist_lock;
-diff -Nauprw linux-2.6.20/include/linux/kgdb.h ../new/linux-2.6.20/include/linux/kgdb.h
---- linux-2.6.20/include/linux/kgdb.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/kgdb.h 2007-11-21 11:51:42.000000000 +0530
+
+ int timeout;
+--- /dev/null
++++ linux-2.6.20/include/linux/kgdb.h
@@ -0,0 +1,271 @@
+/*
+ * include/linux/kgdb.h
@@ -239710,10 +240796,11 @@ diff -Nauprw linux-2.6.20/include/linux/kgdb.h ../new/linux-2.6.20/include/linux
+#endif /* CONFIG_KGDB */
+#endif /* _KGDB_H_ */
+#endif /* __KERNEL__ */
-diff -Nauprw linux-2.6.20/include/linux/miscdevice.h ../new/linux-2.6.20/include/linux/miscdevice.h
---- linux-2.6.20/include/linux/miscdevice.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/miscdevice.h 2007-11-21 11:51:42.000000000 +0530
-@@ -12,6 +12,7 @@
+--- linux-2.6.20.orig/include/linux/miscdevice.h
++++ linux-2.6.20/include/linux/miscdevice.h
+@@ -10,10 +10,11 @@
+ #define ATARIMOUSE_MINOR 5
+ #define SUN_MOUSE_MINOR 6
#define APOLLO_MOUSE_MINOR 7
#define PC110PAD_MINOR 9
/*#define ADB_MOUSE_MINOR 10 FIXME OBSOLETE */
@@ -239721,20 +240808,27 @@ diff -Nauprw linux-2.6.20/include/linux/miscdevice.h ../new/linux-2.6.20/include
#define WATCHDOG_MINOR 130 /* Watchdog timer */
#define TEMP_MINOR 131 /* Temperature Sensor */
#define RTC_MINOR 135
-diff -Nauprw linux-2.6.20/include/linux/module.h ../new/linux-2.6.20/include/linux/module.h
---- linux-2.6.20/include/linux/module.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/module.h 2008-10-20 13:37:45.000000000 +0530
-@@ -34,6 +34,9 @@ struct kernel_symbol
+ #define EFI_RTC_MINOR 136 /* EFI Time services */
+ #define SUN_OPENPROM_MINOR 139
+--- linux-2.6.20.orig/include/linux/module.h
++++ linux-2.6.20/include/linux/module.h
+@@ -32,10 +32,13 @@
+
+ struct kernel_symbol
{
unsigned long value;
const char *name;
-+#ifdef CONFIG_LKM_HASH
++#ifdef CONFIG_LKM_HASH
+ unsigned long hash_value;
-+#endif
++#endif
};
struct modversion_info
-@@ -186,6 +189,13 @@ void *__symbol_get_gpl(const char *symbo
+ {
+ unsigned long crc;
+@@ -184,21 +187,28 @@ void *__symbol_get_gpl(const char *symbo
+ = (unsigned long) &__crc_##sym;
+ #else
#define __CRC_SYMBOL(sym, sec)
#endif
@@ -239748,7 +240842,10 @@ diff -Nauprw linux-2.6.20/include/linux/module.h ../new/linux-2.6.20/include/lin
/* For every exported symbol, place a struct in the __ksymtab section */
#define __EXPORT_SYMBOL(sym, sec) \
extern typeof(sym) sym; \
-@@ -196,7 +206,7 @@ void *__symbol_get_gpl(const char *symbo
+ __CRC_SYMBOL(sym, sec) \
+ static const char __kstrtab_##sym[] \
+ __attribute__((section("__ksymtab_strings"))) \
+ = MODULE_SYMBOL_PREFIX #sym; \
static const struct kernel_symbol __ksymtab_##sym \
__attribute_used__ \
__attribute__((section("__ksymtab" sec), unused)) \
@@ -239757,7 +240854,11 @@ diff -Nauprw linux-2.6.20/include/linux/module.h ../new/linux-2.6.20/include/lin
#define EXPORT_SYMBOL(sym) \
__EXPORT_SYMBOL(sym, "")
-@@ -228,8 +238,17 @@ enum module_state
+
+ #define EXPORT_SYMBOL_GPL(sym) \
+@@ -226,12 +236,21 @@ struct module_ref
+ enum module_state
+ {
MODULE_STATE_LIVE,
MODULE_STATE_COMING,
MODULE_STATE_GOING,
@@ -239775,7 +240876,11 @@ diff -Nauprw linux-2.6.20/include/linux/module.h ../new/linux-2.6.20/include/lin
/* Similar stuff for section attributes. */
struct module_sect_attr
{
-@@ -257,6 +276,13 @@ struct module
+ struct module_attribute mattr;
+ char *name;
+@@ -255,10 +274,17 @@ struct module
+ struct list_head list;
+
/* Unique handle for this module */
char name[MODULE_NAME_LEN];
@@ -239789,10 +240894,13 @@ diff -Nauprw linux-2.6.20/include/linux/module.h ../new/linux-2.6.20/include/lin
/* Sysfs stuff. */
struct module_kobject mkobj;
struct module_param_attrs *param_attrs;
-diff -Nauprw linux-2.6.20/include/linux/mtd/bbm.h ../new/linux-2.6.20/include/linux/mtd/bbm.h
---- linux-2.6.20/include/linux/mtd/bbm.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/mtd/bbm.h 2008-09-17 13:23:35.000000000 +0530
-@@ -10,6 +10,10 @@
+ struct module_attribute *modinfo_attrs;
+ const char *version;
+--- linux-2.6.20.orig/include/linux/mtd/bbm.h
++++ linux-2.6.20/include/linux/mtd/bbm.h
+@@ -8,10 +8,14 @@
+ * Kyungmin Park <kyungmin.park@samsung.com>
+ *
* Copyright (c) 2000-2005
* Thomas Gleixner <tglx@linuxtronix.de>
*
@@ -239803,7 +240911,11 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/bbm.h ../new/linux-2.6.20/include/li
*/
#ifndef __LINUX_MTD_BBM_H
#define __LINUX_MTD_BBM_H
-@@ -92,6 +96,13 @@ struct nand_bbt_descr {
+
+ /* The maximum number of NAND chips in an array */
+@@ -90,10 +94,17 @@ struct nand_bbt_descr {
+ /*
+ * Constants for oob configuration
*/
#define ONENAND_BADBLOCK_POS 0
@@ -239817,10 +240929,13 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/bbm.h ../new/linux-2.6.20/include/li
/**
* struct bbm_info - [GENERIC] Bad Block Table data structure
* @bbt_erase_shift: [INTERN] number of address bits in a bbt entry
-diff -Nauprw linux-2.6.20/include/linux/mtd/mtd.h ../new/linux-2.6.20/include/linux/mtd/mtd.h
---- linux-2.6.20/include/linux/mtd/mtd.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/mtd/mtd.h 2008-11-19 16:47:04.000000000 +0530
-@@ -119,6 +119,7 @@ struct mtd_info {
+ * @badblockpos: [INTERN] position of the bad block marker in the oob area
+ * @options: options for this descriptor
+--- linux-2.6.20.orig/include/linux/mtd/mtd.h
++++ linux-2.6.20/include/linux/mtd/mtd.h
+@@ -117,10 +117,11 @@ struct mtd_info {
+ u_int32_t writesize;
+
u_int32_t oobsize; // Amount of OOB data per block (e.g. 16)
u_int32_t ecctype;
u_int32_t eccsize;
@@ -239828,10 +240943,13 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/mtd.h ../new/linux-2.6.20/include/li
/*
* Reuse some of the above unused fields in the case of NOR flash
-diff -Nauprw linux-2.6.20/include/linux/mtd/nand.h ../new/linux-2.6.20/include/linux/mtd/nand.h
---- linux-2.6.20/include/linux/mtd/nand.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/mtd/nand.h 2007-11-21 11:51:42.000000000 +0530
-@@ -546,54 +546,12 @@ extern int nand_do_read(struct mtd_info
+ * with configurable programming regions to avoid modifying the
+ * user visible structure layout/size. Only valid when the
+--- linux-2.6.20.orig/include/linux/mtd/nand.h
++++ linux-2.6.20/include/linux/mtd/nand.h
+@@ -544,56 +544,14 @@ extern int nand_do_read(struct mtd_info
+ size_t * retlen, uint8_t * buf);
+
/*
* Constants for oob configuration
*/
@@ -239891,10 +241009,11 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/nand.h ../new/linux-2.6.20/include/l
+#endif
#endif /* __LINUX_MTD_NAND_H */
-diff -Nauprw linux-2.6.20/include/linux/mtd/onenand.h ../new/linux-2.6.20/include/linux/mtd/onenand.h
---- linux-2.6.20/include/linux/mtd/onenand.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/mtd/onenand.h 2008-09-17 13:23:35.000000000 +0530
-@@ -42,14 +42,10 @@ typedef enum {
+--- linux-2.6.20.orig/include/linux/mtd/onenand.h
++++ linux-2.6.20/include/linux/mtd/onenand.h
+@@ -40,18 +40,14 @@ typedef enum {
+ FL_PM_SUSPENDED,
+ } onenand_state_t;
/**
* struct onenand_bufferram - OneNAND BufferRAM Data
@@ -239911,7 +241030,11 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/onenand.h ../new/linux-2.6.20/includ
};
/**
-@@ -63,8 +59,8 @@ struct onenand_bufferram {
+ * struct onenand_chip - OneNAND Private Flash Chip Data
+ * @base: [BOARDSPECIFIC] address to access OneNAND
+@@ -61,12 +57,12 @@ struct onenand_bufferram {
+ * @verstion_id: [INTERN] version ID
+ * @options: [BOARDSPECIFIC] various chip options. They can
* partly be set to inform onenand_scan about
* @erase_shift: [INTERN] number of address bits in a block
* @page_shift: [INTERN] number of address bits in a page
@@ -239921,7 +241044,11 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/onenand.h ../new/linux-2.6.20/includ
* @bufferram_index: [INTERN] BufferRAM index
* @bufferram: [INTERN] BufferRAM info
* @readw: [REPLACEABLE] hardware specific function for read short
-@@ -87,7 +83,8 @@ struct onenand_bufferram {
+ * @writew: [REPLACEABLE] hardware specific function for write short
+ * @command: [REPLACEABLE] hardware specific function for writing
+@@ -85,11 +81,12 @@ struct onenand_bufferram {
+ * @chip_lock: [INTERN] spinlock used to protect access to this
+ * structure and the chip
* @wq: [INTERN] wait queue to sleep on if a OneNAND
* operation is in progress
* @state: [INTERN] the current state of the OneNAND device
@@ -239931,7 +241058,11 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/onenand.h ../new/linux-2.6.20/includ
* @subpagesize: [INTERN] holds the subpagesize
* @ecclayout: [REPLACEABLE] the default ecc placement scheme
* @bbm: [REPLACEABLE] pointer to Bad Block Management
-@@ -103,8 +100,8 @@ struct onenand_chip {
+ * @priv: [OPTIONAL] pointer to private chip date
+ */
+@@ -101,12 +98,12 @@ struct onenand_chip {
+ unsigned int density_mask;
+ unsigned int options;
unsigned int erase_shift;
unsigned int page_shift;
@@ -239941,7 +241072,11 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/onenand.h ../new/linux-2.6.20/includ
unsigned int bufferram_index;
struct onenand_bufferram bufferram[MAX_BUFFERRAM];
-@@ -128,6 +125,7 @@ struct onenand_chip {
+
+ int (*command)(struct mtd_info *mtd, int cmd, loff_t address, size_t len);
+@@ -126,10 +123,11 @@ struct onenand_chip {
+
+ spinlock_t chip_lock;
wait_queue_head_t wq;
onenand_state_t state;
unsigned char *page_buf;
@@ -239949,7 +241084,11 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/onenand.h ../new/linux-2.6.20/includ
int subpagesize;
struct nand_ecclayout *ecclayout;
-@@ -144,12 +142,24 @@ struct onenand_chip {
+
+ void *bbm;
+@@ -142,25 +140,39 @@ struct onenand_chip {
+ */
+ #define ONENAND_CURRENT_BUFFERRAM(this) (this->bufferram_index)
#define ONENAND_NEXT_BUFFERRAM(this) (this->bufferram_index ^ 1)
#define ONENAND_SET_NEXT_BUFFERRAM(this) (this->bufferram_index ^= 1)
#define ONENAND_SET_PREV_BUFFERRAM(this) (this->bufferram_index ^= 1)
@@ -239974,7 +241113,8 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/onenand.h ../new/linux-2.6.20/includ
/* Check byte access in OneNAND */
#define ONENAND_CHECK_BYTE_ACCESS(addr) (addr & 0x1)
-@@ -158,7 +168,9 @@ struct onenand_chip {
+ /*
+ * Options bits
*/
#define ONENAND_HAS_CONT_LOCK (0x0001)
#define ONENAND_HAS_UNLOCK_ALL (0x0002)
@@ -239984,15 +241124,20 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/onenand.h ../new/linux-2.6.20/includ
/*
* OneNAND Flash Manufacturer ID Codes
-@@ -176,3 +188,4 @@ struct onenand_manufacturers {
+ */
+ #define ONENAND_MFR_SAMSUNG 0xec
+@@ -174,5 +186,6 @@ struct onenand_manufacturers {
+ int id;
+ char *name;
};
#endif /* __LINUX_MTD_ONENAND_H */
+
-diff -Nauprw linux-2.6.20/include/linux/mtd/onenand_regs.h ../new/linux-2.6.20/include/linux/mtd/onenand_regs.h
---- linux-2.6.20/include/linux/mtd/onenand_regs.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/mtd/onenand_regs.h 2008-09-17 13:23:35.000000000 +0530
-@@ -73,6 +73,8 @@
+--- linux-2.6.20.orig/include/linux/mtd/onenand_regs.h
++++ linux-2.6.20/include/linux/mtd/onenand_regs.h
+@@ -71,20 +71,24 @@
+ #define ONENAND_DEVICE_IS_DEMUX (1 << 2)
+ #define ONENAND_DEVICE_VCC_MASK (0x3)
#define ONENAND_DEVICE_DENSITY_512Mb (0x002)
#define ONENAND_DEVICE_DENSITY_1Gb (0x003)
@@ -240001,7 +241146,7 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/onenand_regs.h ../new/linux-2.6.20/i
/*
* Version ID Register F002h (R)
-@@ -80,9 +82,11 @@
+ */
#define ONENAND_VERSION_PROCESS_SHIFT (8)
/*
@@ -240014,7 +241159,11 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/onenand_regs.h ../new/linux-2.6.20/i
/*
* Start Address 8 F107h (R/W)
-@@ -108,6 +112,8 @@
+ */
+ #define ONENAND_FPA_MASK (0x3f)
+@@ -106,10 +110,12 @@
+ */
+ #define ONENAND_CMD_READ (0x00)
#define ONENAND_CMD_READOOB (0x13)
#define ONENAND_CMD_PROG (0x80)
#define ONENAND_CMD_PROGOOB (0x1A)
@@ -240023,10 +241172,13 @@ diff -Nauprw linux-2.6.20/include/linux/mtd/onenand_regs.h ../new/linux-2.6.20/i
#define ONENAND_CMD_UNLOCK (0x23)
#define ONENAND_CMD_LOCK (0x2A)
#define ONENAND_CMD_LOCK_TIGHT (0x2C)
-diff -Nauprw linux-2.6.20/include/linux/netpoll.h ../new/linux-2.6.20/include/linux/netpoll.h
---- linux-2.6.20/include/linux/netpoll.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/netpoll.h 2007-11-21 11:51:42.000000000 +0530
-@@ -16,7 +16,7 @@ struct netpoll {
+ #define ONENAND_CMD_UNLOCK_ALL (0x27)
+ #define ONENAND_CMD_ERASE (0x94)
+--- linux-2.6.20.orig/include/linux/netpoll.h
++++ linux-2.6.20/include/linux/netpoll.h
+@@ -14,11 +14,11 @@
+
+ struct netpoll {
struct net_device *dev;
char dev_name[IFNAMSIZ];
const char *name;
@@ -240035,25 +241187,29 @@ diff -Nauprw linux-2.6.20/include/linux/netpoll.h ../new/linux-2.6.20/include/li
u32 local_ip, remote_ip;
u16 local_port, remote_port;
-diff -Nauprw linux-2.6.20/include/linux/usb.h ../new/linux-2.6.20/include/linux/usb.h
---- linux-2.6.20/include/linux/usb.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/usb.h 2008-07-04 23:45:30.000000000 +0530
-@@ -287,7 +287,9 @@ struct usb_bus {
+ u8 local_mac[ETH_ALEN], remote_mac[ETH_ALEN];
+ };
+--- linux-2.6.20.orig/include/linux/usb.h
++++ linux-2.6.20/include/linux/usb.h
+@@ -285,11 +285,13 @@ struct usb_bus {
+ * round-robin allocation */
+
struct usb_devmap devmap; /* device address allocation map */
struct usb_device *root_hub; /* Root hub */
struct list_head bus_list; /* list of busses */
-
-+#if defined (CONFIG_NOMADIK_NHK15)
-+ void *hcpriv; /* Host Controller private data - FIXME hack !!*/
-+#endif
++#if defined (CONFIG_NOMADIK_NHK15)
++ void *hcpriv; /* Host Controller private data - FIXME hack !!*/
++#endif
int bandwidth_allocated; /* on this bus: how much of the time
* reserved for periodic (intr/iso)
* requests is used, on average?
-diff -Nauprw linux-2.6.20/include/linux/v4l2-nomadikdefs.h ../new/linux-2.6.20/include/linux/v4l2-nomadikdefs.h
---- linux-2.6.20/include/linux/v4l2-nomadikdefs.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/v4l2-nomadikdefs.h 2008-11-24 14:06:28.000000000 +0530
+ * Units: microseconds/frame.
+ * Limits: Full/low speed reserve 90%,
+--- /dev/null
++++ linux-2.6.20/include/linux/v4l2-nomadikdefs.h
@@ -0,0 +1,12 @@
-+/* ST Microelectronic Proprietary
++/* ST Microelectronic Proprietary
+ File: v4l2-nomadikdefs.h
+ Contains custom V4L2 definition
+*/
@@ -240065,10 +241221,11 @@ diff -Nauprw linux-2.6.20/include/linux/v4l2-nomadikdefs.h ../new/linux-2.6.20/i
+#define V4L2_CID_CROP (V4L2_CID_PRIVATE_BASE+0)
+#define V4L2_CID_RESIZE (V4L2_CID_PRIVATE_BASE+1)
+
-diff -Nauprw linux-2.6.20/include/linux/videodev2.h ../new/linux-2.6.20/include/linux/videodev2.h
---- linux-2.6.20/include/linux/videodev2.h 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/include/linux/videodev2.h 2008-11-24 14:06:28.000000000 +0530
-@@ -1340,6 +1340,17 @@ struct v4l2_streamparm
+--- linux-2.6.20.orig/include/linux/videodev2.h
++++ linux-2.6.20/include/linux/videodev2.h
+@@ -1338,10 +1338,21 @@ struct v4l2_streamparm
+ #if 1
+ #define VIDIOC_ENUM_FRAMESIZES _IOWR ('V', 74, struct v4l2_frmsizeenum)
#define VIDIOC_ENUM_FRAMEINTERVALS _IOWR ('V', 75, struct v4l2_frmivalenum)
#endif
@@ -240086,10 +241243,13 @@ diff -Nauprw linux-2.6.20/include/linux/videodev2.h ../new/linux-2.6.20/include/
#ifdef __OLD_VIDIOC_
/* for compatibility, will go away some day */
#define VIDIOC_OVERLAY_OLD _IOWR ('V', 14, int)
-diff -Nauprw linux-2.6.20/init/Kconfig ../new/linux-2.6.20/init/Kconfig
---- linux-2.6.20/init/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/init/Kconfig 2008-10-20 13:37:46.000000000 +0530
-@@ -561,6 +561,21 @@ config KMOD
+ #define VIDIOC_S_PARM_OLD _IOW ('V', 22, struct v4l2_streamparm)
+ #define VIDIOC_S_CTRL_OLD _IOW ('V', 28, struct v4l2_control)
+--- linux-2.6.20.orig/init/Kconfig
++++ linux-2.6.20/init/Kconfig
+@@ -559,10 +559,25 @@ config KMOD
+ here, some parts of the kernel will be able to load modules
+ automatically: when a part of the kernel needs a module, it
runs modprobe with the appropriate arguments, thereby
loading the module if it is available. If unsure, say Y.
@@ -240111,9 +241271,24 @@ diff -Nauprw linux-2.6.20/init/Kconfig ../new/linux-2.6.20/init/Kconfig
config STOP_MACHINE
bool
default y
-diff -Nauprw linux-2.6.20/kernel/kgdb.c ../new/linux-2.6.20/kernel/kgdb.c
---- linux-2.6.20/kernel/kgdb.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/kernel/kgdb.c 2008-10-20 13:37:46.000000000 +0530
+ depends on (SMP && MODULE_UNLOAD) || HOTPLUG_CPU
+ help
+--- linux-2.6.20.orig/kernel/Makefile
++++ linux-2.6.20/kernel/Makefile
+@@ -39,10 +39,11 @@ obj-$(CONFIG_CPUSETS) += cpuset.o
+ obj-$(CONFIG_IKCONFIG) += configs.o
+ obj-$(CONFIG_STOP_MACHINE) += stop_machine.o
+ obj-$(CONFIG_AUDIT) += audit.o auditfilter.o
+ obj-$(CONFIG_AUDITSYSCALL) += auditsc.o
+ obj-$(CONFIG_KPROBES) += kprobes.o
++obj-$(CONFIG_KGDB) += kgdb.o
+ obj-$(CONFIG_SYSFS) += ksysfs.o
+ obj-$(CONFIG_DETECT_SOFTLOCKUP) += softlockup.o
+ obj-$(CONFIG_GENERIC_HARDIRQS) += irq/
+ obj-$(CONFIG_SECCOMP) += seccomp.o
+ obj-$(CONFIG_RCU_TORTURE_TEST) += rcutorture.o
+--- /dev/null
++++ linux-2.6.20/kernel/kgdb.c
@@ -0,0 +1,1963 @@
+/*
+ * kernel/kgdb.c
@@ -240929,19 +242104,19 @@ diff -Nauprw linux-2.6.20/kernel/kgdb.c ../new/linux-2.6.20/kernel/kgdb.c
+ int error = 0;
+ unsigned long addr;
+ for (i = 0; i < MAX_BREAKPOINTS; i++) {
-+ if (kgdb_break[i].state != bp_set)
++ if (kgdb_break[i].state != bp_set)
+ continue;
+ addr = kgdb_break[i].bpt_addr;
-+ if ((error = kgdb_arch_set_breakpoint(addr,
++ if ((error = kgdb_arch_set_breakpoint(addr,
+ kgdb_break[i].saved_instr)))
+ return error;
+
+ if (CACHE_FLUSH_IS_SAFE) {
+ if (current->mm && addr < TASK_SIZE)
-+ flush_cache_range(current->mm->mmap_cache,
++ flush_cache_range(current->mm->mmap_cache,
+ addr, addr + BREAK_INSTR_SIZE);
+ else
-+ flush_icache_range(addr, addr +
++ flush_icache_range(addr, addr +
+ BREAK_INSTR_SIZE);
+ }
+
@@ -240962,7 +242137,7 @@ diff -Nauprw linux-2.6.20/kernel/kgdb.c ../new/linux-2.6.20/kernel/kgdb.c
+ return -EEXIST;
+ }
+ for (i = 0; i < MAX_BREAKPOINTS; i++) {
-+ if (kgdb_break[i].state == bp_removed &&
++ if (kgdb_break[i].state == bp_removed &&
+ kgdb_break[i].bpt_addr == addr) {
+ breakno = i;
+ break;
@@ -240994,9 +242169,9 @@ diff -Nauprw linux-2.6.20/kernel/kgdb.c ../new/linux-2.6.20/kernel/kgdb.c
+ unsigned long addr;
+ for (i = 0; i < MAX_BREAKPOINTS; i++) {
+ if (kgdb_break[i].state != bp_active)
-+ continue;
++ continue;
+ addr = kgdb_break[i].bpt_addr;
-+ if ((error = kgdb_arch_remove_breakpoint(addr,
++ if ((error = kgdb_arch_remove_breakpoint(addr,
+ kgdb_break[i].saved_instr)))
+ return error;
+
@@ -241046,10 +242221,10 @@ diff -Nauprw linux-2.6.20/kernel/kgdb.c ../new/linux-2.6.20/kernel/kgdb.c
+
+ /* Clear memory breakpoints. */
+ for (i = 0; i < MAX_BREAKPOINTS; i++) {
-+ if (kgdb_break[i].state != bp_set)
++ if (kgdb_break[i].state != bp_set)
+ continue;
+ addr = kgdb_break[i].bpt_addr;
-+ if ((error = kgdb_arch_remove_breakpoint(addr,
++ if ((error = kgdb_arch_remove_breakpoint(addr,
+ kgdb_break[i].saved_instr)))
+ return error;
+ kgdb_break[i].state = bp_removed;
@@ -241177,7 +242352,7 @@ diff -Nauprw linux-2.6.20/kernel/kgdb.c ../new/linux-2.6.20/kernel/kgdb.c
+ }
+
+ atomic_set(&kgdb_sync_softlockup[smp_processor_id()], 1);
-+
++
+ /*
+ * Don't enter if we have hit a removed breakpoint.
+ */
@@ -241394,7 +242569,7 @@ diff -Nauprw linux-2.6.20/kernel/kgdb.c ../new/linux-2.6.20/kernel/kgdb.c
+ put_packet(remcom_out_buffer);
+ emergency_sync();
+ /* Execution should not return from
-+ * machine_restart()
++ * machine_restart()
+ */
+ machine_restart(NULL);
+ kgdb_connected = 0;
@@ -241735,7 +242910,7 @@ diff -Nauprw linux-2.6.20/kernel/kgdb.c ../new/linux-2.6.20/kernel/kgdb.c
+
+ /* We can't do much if this fails */
+ register_module_notifier(&kgdb_module_load_nb);
-+
++
+ kgdb_initialized = 1;
+}
+
@@ -241951,7 +243126,7 @@ diff -Nauprw linux-2.6.20/kernel/kgdb.c ../new/linux-2.6.20/kernel/kgdb.c
+
+ /* Registering to reboot notifier list*/
+ register_reboot_notifier(&kgdb_reboot_notifier);
-+
++
+ /* Now do any late init of the I/O. */
+ if (kgdb_io_ops.late_init)
+ kgdb_io_ops.late_init();
@@ -242021,7 +243196,7 @@ diff -Nauprw linux-2.6.20/kernel/kgdb.c ../new/linux-2.6.20/kernel/kgdb.c
+static int kgdb_notify_reboot(struct notifier_block *this,
+ unsigned long code, void *x)
+{
-+
++
+ unsigned long flags;
+
+ /* If we're debugging, or KGDB has not connected, don't try
@@ -242034,8 +243209,8 @@ diff -Nauprw linux-2.6.20/kernel/kgdb.c ../new/linux-2.6.20/kernel/kgdb.c
+ local_irq_restore(flags);
+ }
+ return NOTIFY_DONE;
-+}
-+
++}
++
+#ifdef CONFIG_KGDB_CONSOLE
+void kgdb_console_write(struct console *co, const char *s, unsigned count)
+{
@@ -242078,21 +243253,11 @@ diff -Nauprw linux-2.6.20/kernel/kgdb.c ../new/linux-2.6.20/kernel/kgdb.c
+}
+
+early_param("kgdbwait", opt_kgdb_enter);
-diff -Nauprw linux-2.6.20/kernel/Makefile ../new/linux-2.6.20/kernel/Makefile
---- linux-2.6.20/kernel/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/kernel/Makefile 2007-11-21 11:51:42.000000000 +0530
-@@ -41,6 +41,7 @@ obj-$(CONFIG_STOP_MACHINE) += stop_machi
- obj-$(CONFIG_AUDIT) += audit.o auditfilter.o
- obj-$(CONFIG_AUDITSYSCALL) += auditsc.o
- obj-$(CONFIG_KPROBES) += kprobes.o
-+obj-$(CONFIG_KGDB) += kgdb.o
- obj-$(CONFIG_SYSFS) += ksysfs.o
- obj-$(CONFIG_DETECT_SOFTLOCKUP) += softlockup.o
- obj-$(CONFIG_GENERIC_HARDIRQS) += irq/
-diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
---- linux-2.6.20/kernel/module.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/kernel/module.c 2008-10-20 13:37:46.000000000 +0530
-@@ -55,6 +55,27 @@
+--- linux-2.6.20.orig/kernel/module.c
++++ linux-2.6.20/kernel/module.c
+@@ -53,19 +53,41 @@
+
+ #ifndef ARCH_SHF_SMALL
#define ARCH_SHF_SMALL 0
#endif
@@ -242120,7 +243285,9 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
/* If this is set, the section belongs in the init part of the module */
#define INIT_OFFSET_MASK (1UL << (BITS_PER_LONG-1))
-@@ -64,6 +85,7 @@ static DEFINE_SPINLOCK(modlist_lock);
+ /* Protects module list */
+ static DEFINE_SPINLOCK(modlist_lock);
+
/* List of modules, protected by module_mutex AND modlist_lock */
static DEFINE_MUTEX(module_mutex);
static LIST_HEAD(modules);
@@ -242128,7 +243295,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
static BLOCKING_NOTIFIER_HEAD(module_notify_list);
-@@ -145,7 +167,58 @@ extern const unsigned long __start___kcr
+ int register_module_notifier(struct notifier_block * nb)
+ {
+@@ -143,11 +165,62 @@ extern const unsigned long __start___kcr
+ #define symversion(base, idx) NULL
+ #else
#define symversion(base, idx) ((base != NULL) ? ((base) + (idx)) : NULL)
#endif
@@ -242160,10 +243331,10 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
+ const struct kernel_symbol *start,
+ const struct kernel_symbol *stop)
+{
-+ const struct kernel_symbol *ks = start;
-+
++ const struct kernel_symbol *ks = start;
++
+ for (; ks < stop; ks++) {
-+
++
+ /* If hash values don't match, we are sure symbols are different,
+ otherwise we need to explicitely do string comparison.
+ */
@@ -242188,7 +243359,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
static const struct kernel_symbol *lookup_symbol(const char *name,
const struct kernel_symbol *start,
const struct kernel_symbol *stop)
-@@ -157,6 +230,9 @@ static const struct kernel_symbol *looku
+ {
+ const struct kernel_symbol *ks = start;
+@@ -155,10 +228,13 @@ static const struct kernel_symbol *looku
+ if (strcmp(ks->name, name) == 0)
+ return ks;
return NULL;
}
@@ -242198,7 +243373,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
static void printk_unused_warning(const char *name)
{
printk(KERN_WARNING "Symbol %s is marked as UNUSED, "
-@@ -169,7 +245,7 @@ static void printk_unused_warning(const
+ "however this module is using it.\n", name);
+ printk(KERN_WARNING "This symbol will go away in the future.\n");
+@@ -167,35 +243,35 @@ static void printk_unused_warning(const
+ "mailinglist together with submitting your code for "
+ "inclusion.\n");
}
/* Find a symbol, return value, crc and module which owns it */
@@ -242207,7 +243386,9 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
struct module **owner,
const unsigned long **crc,
int gplok)
-@@ -179,13 +255,13 @@ static unsigned long __find_symbol(const
+ {
+ struct module *mod;
+ const struct kernel_symbol *ks;
/* Core kernel first. */
*owner = NULL;
@@ -242223,7 +243404,7 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
__stop___ksymtab_gpl);
if (ks) {
*crc = symversion(__start___kcrctab_gpl,
-@@ -193,7 +269,7 @@ static unsigned long __find_symbol(const
+ (ks - __start___ksymtab_gpl));
return ks->value;
}
}
@@ -242232,7 +243413,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
__stop___ksymtab_gpl_future);
if (ks) {
if (!gplok) {
-@@ -210,7 +286,7 @@ static unsigned long __find_symbol(const
+ printk(KERN_WARNING "Symbol %s is being used "
+ "by a non-GPL module, which will not "
+@@ -208,21 +284,21 @@ static unsigned long __find_symbol(const
+ *crc = symversion(__start___kcrctab_gpl_future,
+ (ks - __start___ksymtab_gpl_future));
return ks->value;
}
@@ -242241,7 +243426,9 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
__stop___ksymtab_unused);
if (ks) {
printk_unused_warning(name);
-@@ -220,7 +296,7 @@ static unsigned long __find_symbol(const
+ *crc = symversion(__start___kcrctab_unused,
+ (ks - __start___ksymtab_unused));
+ return ks->value;
}
if (gplok)
@@ -242250,7 +243437,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
__stop___ksymtab_unused_gpl);
if (ks) {
printk_unused_warning(name);
-@@ -232,14 +308,14 @@ static unsigned long __find_symbol(const
+ *crc = symversion(__start___kcrctab_unused_gpl,
+ (ks - __start___ksymtab_unused_gpl));
+@@ -230,43 +306,43 @@ static unsigned long __find_symbol(const
+ }
+
/* Now try modules. */
list_for_each_entry(mod, &modules, list) {
*owner = mod;
@@ -242267,7 +243458,7 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
mod->gpl_syms + mod->num_gpl_syms);
if (ks) {
*crc = symversion(mod->gpl_crcs,
-@@ -247,7 +323,7 @@ static unsigned long __find_symbol(const
+ (ks - mod->gpl_syms));
return ks->value;
}
}
@@ -242276,7 +243467,7 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
if (ks) {
printk_unused_warning(name);
*crc = symversion(mod->unused_crcs, (ks - mod->unused_syms));
-@@ -255,7 +331,7 @@ static unsigned long __find_symbol(const
+ return ks->value;
}
if (gplok) {
@@ -242285,7 +243476,8 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
mod->unused_gpl_syms + mod->num_unused_gpl_syms);
if (ks) {
printk_unused_warning(name);
-@@ -264,7 +340,7 @@ static unsigned long __find_symbol(const
+ *crc = symversion(mod->unused_gpl_crcs,
+ (ks - mod->unused_gpl_syms));
return ks->value;
}
}
@@ -242294,7 +243486,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
(mod->gpl_future_syms +
mod->num_gpl_future_syms));
if (ks) {
-@@ -706,6 +782,12 @@ sys_delete_module(const char __user *nam
+ if (!gplok) {
+ printk(KERN_WARNING "Symbol %s is being used "
+@@ -704,10 +780,16 @@ sys_delete_module(const char __user *nam
+ /* Stop the machine so refcounts can't move and disable module. */
+ ret = try_stop_module(mod, flags, &forced);
if (ret != 0)
goto out;
@@ -242307,7 +243503,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
/* Never wait if forced. */
if (!forced && module_refcount(mod) != 0)
wait_for_zero_refcount(mod);
-@@ -718,6 +800,11 @@ sys_delete_module(const char __user *nam
+
+ /* Final destruction now noone is using it. */
+@@ -716,10 +798,15 @@ sys_delete_module(const char __user *nam
+ mod->exit();
+ mutex_lock(&module_mutex);
}
free_module(mod);
@@ -242319,7 +243519,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
out:
mutex_unlock(&module_mutex);
return ret;
-@@ -758,7 +845,7 @@ void __symbol_put(const char *symbol)
+ }
+
+@@ -756,11 +843,11 @@ void __symbol_put(const char *symbol)
+ struct module *owner;
+ unsigned long flags;
const unsigned long *crc;
spin_lock_irqsave(&modlist_lock, flags);
@@ -242328,7 +243532,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
BUG();
module_put(owner);
spin_unlock_irqrestore(&modlist_lock, flags);
-@@ -839,6 +926,9 @@ static ssize_t show_initstate(struct mod
+ }
+ EXPORT_SYMBOL(__symbol_put);
+@@ -837,10 +924,13 @@ static ssize_t show_initstate(struct mod
+ state = "coming";
+ break;
case MODULE_STATE_GOING:
state = "going";
break;
@@ -242338,7 +243546,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
}
return sprintf(buffer, "%s\n", state);
}
-@@ -905,7 +995,7 @@ static inline int check_modstruct_versio
+
+ static struct module_attribute initstate = {
+@@ -903,11 +993,11 @@ static inline int check_modstruct_versio
+ struct module *mod)
+ {
const unsigned long *crc;
struct module *owner;
@@ -242347,7 +243559,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
BUG();
return check_version(sechdrs, versindex, "struct_module", mod,
crc);
-@@ -946,13 +1036,14 @@ static inline int same_magic(const char
+ }
+
+@@ -944,17 +1034,18 @@ static inline int same_magic(const char
+ /* Resolve a symbol for this module. I.e. if we find one, record usage.
+ Must be holding module_mutex. */
static unsigned long resolve_symbol(Elf_Shdr *sechdrs,
unsigned int versindex,
const char *name,
@@ -242363,7 +243579,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
!(mod->taints & TAINT_PROPRIETARY_MODULE));
if (ret) {
/* use_module can fail due to OOM, or module unloading */
-@@ -1192,6 +1283,11 @@ static void free_module(struct module *m
+ if (!check_version(sechdrs, versindex, name, mod, crc) ||
+ !use_module(mod, owner))
+@@ -1190,10 +1281,15 @@ static void free_module(struct module *m
+ unwind_remove_table(mod->unwind_info, 0);
+
/* Arch-specific cleanup. */
module_arch_cleanup(mod);
@@ -242375,7 +243595,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
/* Module unload stuff */
module_unload_free(mod);
-@@ -1215,7 +1311,7 @@ void *__symbol_get(const char *symbol)
+ /* This may be NULL, but that's OK */
+ module_free(mod, mod->module_init);
+@@ -1213,11 +1309,11 @@ void *__symbol_get(const char *symbol)
+ struct module *owner;
+ unsigned long value, flags;
const unsigned long *crc;
spin_lock_irqsave(&modlist_lock, flags);
@@ -242384,7 +243608,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
if (value && !strong_try_module_get(owner))
value = 0;
spin_unlock_irqrestore(&modlist_lock, flags);
-@@ -1236,14 +1332,14 @@ static int verify_export_symbols(struct
+
+ return (void *)value;
+@@ -1234,18 +1330,18 @@ static int verify_export_symbols(struct
+ unsigned long i, ret = 0;
+ struct module *owner;
const unsigned long *crc;
for (i = 0; i < mod->num_syms; i++)
@@ -242401,7 +243629,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
name = mod->gpl_syms[i].name;
ret = -ENOEXEC;
goto dup;
-@@ -1260,6 +1356,7 @@ dup:
+ }
+
+@@ -1258,20 +1354,29 @@ dup:
+ }
+
/* Change all symbols so that sh_value encodes the pointer directly. */
static int simplify_symbols(Elf_Shdr *sechdrs,
unsigned int symindex,
@@ -242409,7 +243641,10 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
const char *strtab,
unsigned int versindex,
unsigned int pcpuindex,
-@@ -1270,6 +1367,14 @@ static int simplify_symbols(Elf_Shdr *se
+ struct module *mod)
+ {
+ Elf_Sym *sym = (void *)sechdrs[symindex].sh_addr;
+ unsigned long secbase;
unsigned int i, n = sechdrs[symindex].sh_size / sizeof(Elf_Sym);
int ret = 0;
@@ -242419,12 +243654,16 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
+ unsigned int u = 0;
+#else
+#define HASH_VALUE
-+#endif
-+
++#endif
++
for (i = 1; i < n; i++) {
switch (sym[i].st_shndx) {
case SHN_COMMON:
-@@ -1290,7 +1395,7 @@ static int simplify_symbols(Elf_Shdr *se
+ /* We compiled with -fno-common. These are not
+ supposed to happen. */
+@@ -1288,11 +1393,11 @@ static int simplify_symbols(Elf_Shdr *se
+ break;
+
case SHN_UNDEF:
sym[i].st_value
= resolve_symbol(sechdrs, versindex,
@@ -242433,7 +243672,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
/* Ok if resolved. */
if (sym[i].st_value != 0)
-@@ -1451,13 +1556,39 @@ static void setup_modinfo(struct module
+ break;
+ /* Ok if weak. */
+@@ -1449,17 +1554,43 @@ static void setup_modinfo(struct module
+ infoindex,
+ attr->attr.name));
}
}
@@ -242466,7 +243709,7 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
{
- if (!mod && lookup_symbol(name, __start___ksymtab, __stop___ksymtab))
+ HASH_VALUE_DEF(name);
-+
++
+ if (!mod && lookup_symbol(name, HASH_VALUE_ARG __start___ksymtab, __stop___ksymtab))
return 1;
else
@@ -242475,17 +243718,25 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
return 1;
else
return 0;
-@@ -1543,6 +1674,9 @@ static struct module *load_module(void _
+ }
+
+@@ -1541,10 +1672,13 @@ static struct module *load_module(void _
+ Elf_Shdr *sechdrs;
+ char *secstrings, *args, *modmagic, *strtab = NULL;
unsigned int i;
unsigned int symindex = 0;
unsigned int strindex = 0;
+#ifdef CONFIG_LKM_HASH
+ unsigned int symhashindex = 0;
-+#endif
++#endif
unsigned int setupindex;
unsigned int exindex;
unsigned int exportindex;
-@@ -1565,6 +1699,9 @@ static struct module *load_module(void _
+ unsigned int modindex;
+ unsigned int obsparmindex;
+@@ -1563,10 +1697,13 @@ static struct module *load_module(void _
+ unsigned int unusedgplcrcindex;
+ struct module *mod;
long err = 0;
void *percpu = NULL, *ptr = NULL; /* Stops spurious gcc warning */
struct exception_table_entry *extable;
@@ -242495,7 +243746,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
mm_segment_t old_fs;
DEBUGP("load_module: umod=%p, len=%lu, uargs=%p\n",
-@@ -1637,6 +1774,17 @@ static struct module *load_module(void _
+ umod, len, uargs);
+ if (len < sizeof(*hdr))
+@@ -1635,10 +1772,21 @@ static struct module *load_module(void _
+ mod->name);
+ err = -ENOEXEC;
goto free_hdr;
}
@@ -242507,13 +243762,17 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
+ err = -ENOEXEC;
+ goto free_hdr;
+ }
-+#endif
-+
++#endif
++
+
/* Optional sections */
exportindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab");
gplindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl");
-@@ -1780,11 +1928,17 @@ static struct module *load_module(void _
+ gplfutureindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl_future");
+ unusedindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_unused");
+@@ -1778,15 +1926,21 @@ static struct module *load_module(void _
+
+ /* Set up MODINFO_ATTR fields */
setup_modinfo(mod, sechdrs, infoindex);
/* Fix up syms, so that st_value is a pointer to location. */
@@ -242527,13 +243786,17 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
goto cleanup;
-
+#ifdef LKM_LOAD_BENCH
-+ do_gettimeofday(&end);
++ do_gettimeofday(&end);
+ print_elapsed(mod->name, &start, &end);
+#endif
/* Set up EXPORTed & EXPORT_GPLed symbols (section 0 is 0 length) */
mod->num_syms = sechdrs[exportindex].sh_size / sizeof(*mod->syms);
mod->syms = (void *)sechdrs[exportindex].sh_addr;
-@@ -1862,6 +2016,12 @@ static struct module *load_module(void _
+ if (crcindex)
+ mod->crcs = (void *)sechdrs[crcindex].sh_addr;
+@@ -1860,10 +2014,16 @@ static struct module *load_module(void _
+ percpu_modcopy(mod->percpu, (void *)sechdrs[pcpuindex].sh_addr,
+ sechdrs[pcpuindex].sh_size);
add_kallsyms(mod, sechdrs, symindex, strindex, secstrings);
@@ -242546,7 +243809,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
err = module_finalize(hdr, sechdrs, mod);
if (err < 0)
goto cleanup;
-@@ -1922,6 +2082,11 @@ static struct module *load_module(void _
+
+ /* flush the icache in correct context */
+@@ -1920,10 +2080,15 @@ static struct module *load_module(void _
+ return mod;
+
arch_cleanup:
module_arch_cleanup(mod);
cleanup:
@@ -242558,7 +243825,11 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
module_unload_free(mod);
module_free(mod, mod->module_init);
free_core:
-@@ -1993,6 +2158,11 @@ sys_init_module(void __user *umod,
+ module_free(mod, mod->module_core);
+ free_percpu:
+@@ -1991,10 +2156,15 @@ sys_init_module(void __user *umod,
+ ret = mod->init();
+ if (ret < 0) {
/* Init routine failed: abort. Try to protect us from
buggy refcounters. */
mod->state = MODULE_STATE_GOING;
@@ -242570,10 +243841,13 @@ diff -Nauprw linux-2.6.20/kernel/module.c ../new/linux-2.6.20/kernel/module.c
synchronize_sched();
if (mod->unsafe)
printk(KERN_ERR "%s: module is now stuck!\n",
-diff -Nauprw linux-2.6.20/kernel/pid.c ../new/linux-2.6.20/kernel/pid.c
---- linux-2.6.20/kernel/pid.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/kernel/pid.c 2007-11-21 11:51:42.000000000 +0530
-@@ -383,8 +383,13 @@ void free_pid_ns(struct kref *kref)
+ mod->name);
+ else {
+--- linux-2.6.20.orig/kernel/pid.c
++++ linux-2.6.20/kernel/pid.c
+@@ -381,12 +381,17 @@ void free_pid_ns(struct kref *kref)
+ }
+
/*
* The pid hash table is scaled according to the amount of memory in the
* machine. From a minimum of 16 slots up to 4096 slots at one gigabyte or
@@ -242588,7 +243862,11 @@ diff -Nauprw linux-2.6.20/kernel/pid.c ../new/linux-2.6.20/kernel/pid.c
void __init pidhash_init(void)
{
int i, pidhash_size;
-@@ -403,6 +408,10 @@ void __init pidhash_init(void)
+ unsigned long megabytes = nr_kernel_pages >> (20 - PAGE_SHIFT);
+
+@@ -401,10 +406,14 @@ void __init pidhash_init(void)
+ pid_hash = alloc_bootmem(pidhash_size * sizeof(*(pid_hash)));
+ if (!pid_hash)
panic("Could not alloc pidhash!\n");
for (i = 0; i < pidhash_size; i++)
INIT_HLIST_HEAD(&pid_hash[i]);
@@ -242599,10 +243877,13 @@ diff -Nauprw linux-2.6.20/kernel/pid.c ../new/linux-2.6.20/kernel/pid.c
}
void __init pidmap_init(void)
-diff -Nauprw linux-2.6.20/kernel/power/main.c ../new/linux-2.6.20/kernel/power/main.c
---- linux-2.6.20/kernel/power/main.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/kernel/power/main.c 2007-11-21 11:51:42.000000000 +0530
-@@ -87,7 +87,7 @@ static int suspend_prepare(suspend_state
+ {
+ init_pid_ns.pidmap[0].page = kzalloc(PAGE_SIZE, GFP_KERNEL);
+--- linux-2.6.20.orig/kernel/power/main.c
++++ linux-2.6.20/kernel/power/main.c
+@@ -85,11 +85,11 @@ static int suspend_prepare(suspend_state
+ if (pm_ops->prepare) {
+ if ((error = pm_ops->prepare(state)))
goto Thaw;
}
@@ -242611,10 +243892,13 @@ diff -Nauprw linux-2.6.20/kernel/power/main.c ../new/linux-2.6.20/kernel/power/m
if ((error = device_suspend(PMSG_SUSPEND))) {
printk(KERN_ERR "Some devices failed to suspend\n");
goto Finish;
-diff -Nauprw linux-2.6.20/kernel/sched.c ../new/linux-2.6.20/kernel/sched.c
---- linux-2.6.20/kernel/sched.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/kernel/sched.c 2007-11-21 11:51:42.000000000 +0530
-@@ -52,6 +52,7 @@
+ }
+ return 0;
+--- linux-2.6.20.orig/kernel/sched.c
++++ linux-2.6.20/kernel/sched.c
+@@ -50,10 +50,11 @@
+ #include <linux/syscalls.h>
+ #include <linux/times.h>
#include <linux/tsacct_kern.h>
#include <linux/kprobes.h>
#include <linux/delayacct.h>
@@ -242622,7 +243906,11 @@ diff -Nauprw linux-2.6.20/kernel/sched.c ../new/linux-2.6.20/kernel/sched.c
#include <asm/tlb.h>
#include <asm/unistd.h>
-@@ -6962,6 +6963,11 @@ void __might_sleep(char *file, int line)
+
+ /*
+@@ -6964,10 +6965,15 @@ void __init sched_init(void)
+ void __might_sleep(char *file, int line)
+ {
#ifdef in_atomic
static unsigned long prev_jiffy; /* ratelimiting */
@@ -242634,10 +243922,13 @@ diff -Nauprw linux-2.6.20/kernel/sched.c ../new/linux-2.6.20/kernel/sched.c
if ((in_atomic() || irqs_disabled()) &&
system_state == SYSTEM_RUNNING && !oops_in_progress) {
if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy)
-diff -Nauprw linux-2.6.20/kernel/softlockup.c ../new/linux-2.6.20/kernel/softlockup.c
---- linux-2.6.20/kernel/softlockup.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/kernel/softlockup.c 2007-11-21 11:51:42.000000000 +0530
-@@ -13,6 +13,7 @@
+ return;
+ prev_jiffy = jiffies;
+--- linux-2.6.20.orig/kernel/softlockup.c
++++ linux-2.6.20/kernel/softlockup.c
+@@ -11,10 +11,11 @@
+ #include <linux/init.h>
+ #include <linux/delay.h>
#include <linux/kthread.h>
#include <linux/notifier.h>
#include <linux/module.h>
@@ -242645,7 +243936,11 @@ diff -Nauprw linux-2.6.20/kernel/softlockup.c ../new/linux-2.6.20/kernel/softloc
static DEFINE_SPINLOCK(print_lock);
-@@ -37,6 +38,9 @@ static struct notifier_block panic_block
+ static DEFINE_PER_CPU(unsigned long, touch_timestamp);
+ static DEFINE_PER_CPU(unsigned long, print_timestamp);
+@@ -35,10 +36,13 @@ static struct notifier_block panic_block
+ };
+
void touch_softlockup_watchdog(void)
{
__raw_get_cpu_var(touch_timestamp) = jiffies;
@@ -242655,10 +243950,13 @@ diff -Nauprw linux-2.6.20/kernel/softlockup.c ../new/linux-2.6.20/kernel/softloc
}
EXPORT_SYMBOL(touch_softlockup_watchdog);
-diff -Nauprw linux-2.6.20/kernel/timer.c ../new/linux-2.6.20/kernel/timer.c
---- linux-2.6.20/kernel/timer.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/kernel/timer.c 2008-10-20 13:37:46.000000000 +0530
-@@ -33,6 +33,7 @@
+ /*
+ * This callback runs from the timer interrupt, and checks
+--- linux-2.6.20.orig/kernel/timer.c
++++ linux-2.6.20/kernel/timer.c
+@@ -31,10 +31,11 @@
+ #include <linux/time.h>
+ #include <linux/jiffies.h>
#include <linux/posix-timers.h>
#include <linux/cpu.h>
#include <linux/syscalls.h>
@@ -242666,7 +243964,11 @@ diff -Nauprw linux-2.6.20/kernel/timer.c ../new/linux-2.6.20/kernel/timer.c
#include <linux/delay.h>
#include <asm/uaccess.h>
-@@ -1207,8 +1208,15 @@ static inline void update_times(unsigned
+ #include <asm/unistd.h>
+ #include <asm/div64.h>
+@@ -1205,12 +1206,19 @@ static inline void update_times(unsigned
+ * jiffies is defined in the linker script...
+ */
void do_timer(unsigned long ticks)
{
@@ -242682,10 +243984,13 @@ diff -Nauprw linux-2.6.20/kernel/timer.c ../new/linux-2.6.20/kernel/timer.c
}
#ifdef __ARCH_WANT_SYS_ALARM
-diff -Nauprw linux-2.6.20/lib/Kconfig.debug ../new/linux-2.6.20/lib/Kconfig.debug
---- linux-2.6.20/lib/Kconfig.debug 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/lib/Kconfig.debug 2007-11-21 11:51:42.000000000 +0530
-@@ -429,3 +429,82 @@ config FAULT_INJECTION_DEBUG_FS
+
+ /*
+--- linux-2.6.20.orig/lib/Kconfig.debug
++++ linux-2.6.20/lib/Kconfig.debug
+@@ -427,5 +427,84 @@ config FAIL_MAKE_REQUEST
+ config FAULT_INJECTION_DEBUG_FS
+ bool "Debugfs entries for fault-injection capabilities"
depends on FAULT_INJECTION && SYSFS && DEBUG_FS
help
Enable configuration of fault-injection capabilities via debugfs.
@@ -242768,583 +244073,11 @@ diff -Nauprw linux-2.6.20/lib/Kconfig.debug ../new/linux-2.6.20/lib/Kconfig.debu
+ to use NETCONSOLE in conjunction with KGDB_ETH instead of
+ KGDB_CONSOLE.
+
-diff -Nauprw linux-2.6.20/MAINTAINERS ../new/linux-2.6.20/MAINTAINERS
---- linux-2.6.20/MAINTAINERS 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/MAINTAINERS 2007-11-21 11:51:42.000000000 +0530
-@@ -1941,6 +1941,15 @@ L: linux-kernel@vger.kernel.org
- L: fastboot@osdl.org
- S: Maintained
-
-+KGDB
-+P: Tom Rini
-+P: Amit S. Kale
-+M: trini@kernel.crashing.org
-+M: amitkale@linsyssoft.com
-+W: http://sourceforge.net/projects/kgdb
-+L: kgdb-bugreport@lists.sourceforge.net
-+S: Maintained
-+
- KPROBES
- P: Prasanna S Panchamukhi
- M: prasanna@in.ibm.com
-diff -Nauprw linux-2.6.20/Makefile ../new/linux-2.6.20/Makefile
---- linux-2.6.20/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/Makefile 2008-10-20 13:37:44.000000000 +0530
-@@ -12,7 +12,7 @@ NAME = Homicidal Dwarf Hamster
-
- # Do not:
- # o use make's built-in rules and variables
--# (this increases performance and avoid hard-to-debug behavour);
-+# (this increases performance and avoids hard-to-debug behaviour);
- # o print "Entering directory ...";
- MAKEFLAGS += -rR --no-print-directory
-
-@@ -321,7 +321,7 @@ KERNELRELEASE = $(shell cat include/conf
- KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
-
- export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
--export ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC
-+export ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CFLAGS CROSS_COMPILE AS LD CC
- export CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE
- export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
-
-@@ -497,7 +497,7 @@ CFLAGS += -fomit-frame-pointer
- endif
-
- ifdef CONFIG_DEBUG_INFO
--CFLAGS += -g
-+CFLAGS += -gdwarf-2
- endif
-
- # Force gcc to behave correct even for buggy distributions
-@@ -530,7 +530,6 @@ export INSTALL_PATH ?= /boot
- # relocations required by build roots. This is not defined in the
- # makefile but the argument can be passed to make if needed.
- #
--
- MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
- export MODLIB
-
-@@ -576,7 +575,7 @@ libs-y := $(libs-y1) $(libs-y2)
- # ---------------------------------------------------------------------------
- # vmlinux is built from the objects selected by $(vmlinux-init) and
- # $(vmlinux-main). Most are built-in.o files from top-level directories
--# in the kernel tree, others are specified in arch/$(ARCH)Makefile.
-+# in the kernel tree, others are specified in arch/$(ARCH)/Makefile.
- # Ordering when linking is important, and $(vmlinux-init) must be first.
- #
- # vmlinux
-@@ -734,6 +733,7 @@ debug_kallsyms: .tmp_map$(last_kallsyms)
-
- endif # ifdef CONFIG_KALLSYMS
-
-+include $(srctree)/scripts/ksymhash/Makefile
- # vmlinux image - including updated kernel symbols
- vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
- ifdef CONFIG_HEADERS_CHECK
-@@ -742,6 +742,7 @@ endif
- $(call if_changed_rule,vmlinux__)
- $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $@
- $(Q)rm -f .old_version
-+ $(rule_ksymhash)
-
- # The actual objects are generated when descending,
- # make sure no implicit rule kicks in
-@@ -1482,7 +1483,12 @@ clean := -f $(if $(KBUILD_SRC),$(srctree
- endif # skip-makefile
-
- PHONY += FORCE
--FORCE:
-+include/linux/dwarf2-defs.h: $(srctree)/include/linux/dwarf2.h $(srctree)/scripts/dwarfh.awk
-+ mkdir -p include/linux/
-+ awk -f $(srctree)/scripts/dwarfh.awk $(srctree)/include/linux/dwarf2.h > include/linux/dwarf2-defs.h
-+
-+FORCE: include/linux/dwarf2-defs.h
-+
-
- # Cancel implicit rules on top Makefile, `-rR' will apply to sub-makes.
- Makefile: ;
-diff -Nauprw linux-2.6.20/net/core/fib_rules.c ../new/linux-2.6.20/net/core/fib_rules.c
---- linux-2.6.20/net/core/fib_rules.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/net/core/fib_rules.c 2008-08-27 04:39:17.000000000 +0530
-@@ -1,473 +0,0 @@
--/*
-- * net/core/fib_rules.c Generic Routing Rules
-- *
-- * 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, version 2.
-- *
-- * Authors: Thomas Graf <tgraf@suug.ch>
-- */
--
--#include <linux/types.h>
--#include <linux/kernel.h>
--#include <linux/list.h>
--#include <net/fib_rules.h>
--
--static LIST_HEAD(rules_ops);
--static DEFINE_SPINLOCK(rules_mod_lock);
--
--static void notify_rule_change(int event, struct fib_rule *rule,
-- struct fib_rules_ops *ops, struct nlmsghdr *nlh,
-- u32 pid);
--
--static struct fib_rules_ops *lookup_rules_ops(int family)
--{
-- struct fib_rules_ops *ops;
--
-- rcu_read_lock();
-- list_for_each_entry_rcu(ops, &rules_ops, list) {
-- if (ops->family == family) {
-- if (!try_module_get(ops->owner))
-- ops = NULL;
-- rcu_read_unlock();
-- return ops;
-- }
-- }
-- rcu_read_unlock();
--
-- return NULL;
--}
--
--static void rules_ops_put(struct fib_rules_ops *ops)
--{
-- if (ops)
-- module_put(ops->owner);
--}
--
--int fib_rules_register(struct fib_rules_ops *ops)
--{
-- int err = -EEXIST;
-- struct fib_rules_ops *o;
--
-- if (ops->rule_size < sizeof(struct fib_rule))
-- return -EINVAL;
--
-- if (ops->match == NULL || ops->configure == NULL ||
-- ops->compare == NULL || ops->fill == NULL ||
-- ops->action == NULL)
-- return -EINVAL;
--
-- spin_lock(&rules_mod_lock);
-- list_for_each_entry(o, &rules_ops, list)
-- if (ops->family == o->family)
-- goto errout;
--
-- list_add_tail_rcu(&ops->list, &rules_ops);
-- err = 0;
--errout:
-- spin_unlock(&rules_mod_lock);
--
-- return err;
--}
--
--EXPORT_SYMBOL_GPL(fib_rules_register);
--
--static void cleanup_ops(struct fib_rules_ops *ops)
--{
-- struct fib_rule *rule, *tmp;
--
-- list_for_each_entry_safe(rule, tmp, ops->rules_list, list) {
-- list_del_rcu(&rule->list);
-- fib_rule_put(rule);
-- }
--}
--
--int fib_rules_unregister(struct fib_rules_ops *ops)
--{
-- int err = 0;
-- struct fib_rules_ops *o;
--
-- spin_lock(&rules_mod_lock);
-- list_for_each_entry(o, &rules_ops, list) {
-- if (o == ops) {
-- list_del_rcu(&o->list);
-- cleanup_ops(ops);
-- goto out;
-- }
-- }
--
-- err = -ENOENT;
--out:
-- spin_unlock(&rules_mod_lock);
--
-- synchronize_rcu();
--
-- return err;
--}
--
--EXPORT_SYMBOL_GPL(fib_rules_unregister);
--
--static int fib_rule_match(struct fib_rule *rule, struct fib_rules_ops *ops,
-- struct flowi *fl, int flags)
--{
-- int ret = 0;
--
-- if (rule->ifindex && (rule->ifindex != fl->iif))
-- goto out;
--
-- if ((rule->mark ^ fl->mark) & rule->mark_mask)
-- goto out;
--
-- ret = ops->match(rule, fl, flags);
--out:
-- return (rule->flags & FIB_RULE_INVERT) ? !ret : ret;
--}
--
--int fib_rules_lookup(struct fib_rules_ops *ops, struct flowi *fl,
-- int flags, struct fib_lookup_arg *arg)
--{
-- struct fib_rule *rule;
-- int err;
--
-- rcu_read_lock();
--
-- list_for_each_entry_rcu(rule, ops->rules_list, list) {
-- if (!fib_rule_match(rule, ops, fl, flags))
-- continue;
--
-- err = ops->action(rule, fl, flags, arg);
-- if (err != -EAGAIN) {
-- fib_rule_get(rule);
-- arg->rule = rule;
-- goto out;
-- }
-- }
--
-- err = -ENETUNREACH;
--out:
-- rcu_read_unlock();
--
-- return err;
--}
--
--EXPORT_SYMBOL_GPL(fib_rules_lookup);
--
--int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
--{
-- struct fib_rule_hdr *frh = nlmsg_data(nlh);
-- struct fib_rules_ops *ops = NULL;
-- struct fib_rule *rule, *r, *last = NULL;
-- struct nlattr *tb[FRA_MAX+1];
-- int err = -EINVAL;
--
-- if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*frh)))
-- goto errout;
--
-- ops = lookup_rules_ops(frh->family);
-- if (ops == NULL) {
-- err = EAFNOSUPPORT;
-- goto errout;
-- }
--
-- err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy);
-- if (err < 0)
-- goto errout;
--
-- rule = kzalloc(ops->rule_size, GFP_KERNEL);
-- if (rule == NULL) {
-- err = -ENOMEM;
-- goto errout;
-- }
--
-- if (tb[FRA_PRIORITY])
-- rule->pref = nla_get_u32(tb[FRA_PRIORITY]);
--
-- if (tb[FRA_IFNAME]) {
-- struct net_device *dev;
--
-- rule->ifindex = -1;
-- nla_strlcpy(rule->ifname, tb[FRA_IFNAME], IFNAMSIZ);
-- dev = __dev_get_by_name(rule->ifname);
-- if (dev)
-- rule->ifindex = dev->ifindex;
-- }
--
-- if (tb[FRA_FWMARK]) {
-- rule->mark = nla_get_u32(tb[FRA_FWMARK]);
-- if (rule->mark)
-- /* compatibility: if the mark value is non-zero all bits
-- * are compared unless a mask is explicitly specified.
-- */
-- rule->mark_mask = 0xFFFFFFFF;
-- }
--
-- if (tb[FRA_FWMASK])
-- rule->mark_mask = nla_get_u32(tb[FRA_FWMASK]);
--
-- rule->action = frh->action;
-- rule->flags = frh->flags;
-- rule->table = frh_get_table(frh, tb);
--
-- if (!rule->pref && ops->default_pref)
-- rule->pref = ops->default_pref();
--
-- err = ops->configure(rule, skb, nlh, frh, tb);
-- if (err < 0)
-- goto errout_free;
--
-- list_for_each_entry(r, ops->rules_list, list) {
-- if (r->pref > rule->pref)
-- break;
-- last = r;
-- }
--
-- fib_rule_get(rule);
--
-- if (last)
-- list_add_rcu(&rule->list, &last->list);
-- else
-- list_add_rcu(&rule->list, ops->rules_list);
--
-- notify_rule_change(RTM_NEWRULE, rule, ops, nlh, NETLINK_CB(skb).pid);
-- rules_ops_put(ops);
-- return 0;
--
--errout_free:
-- kfree(rule);
--errout:
-- rules_ops_put(ops);
-- return err;
--}
--
--int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
--{
-- struct fib_rule_hdr *frh = nlmsg_data(nlh);
-- struct fib_rules_ops *ops = NULL;
-- struct fib_rule *rule;
-- struct nlattr *tb[FRA_MAX+1];
-- int err = -EINVAL;
--
-- if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*frh)))
-- goto errout;
--
-- ops = lookup_rules_ops(frh->family);
-- if (ops == NULL) {
-- err = EAFNOSUPPORT;
-- goto errout;
-- }
--
-- err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy);
-- if (err < 0)
-- goto errout;
--
-- list_for_each_entry(rule, ops->rules_list, list) {
-- if (frh->action && (frh->action != rule->action))
-- continue;
--
-- if (frh->table && (frh_get_table(frh, tb) != rule->table))
-- continue;
--
-- if (tb[FRA_PRIORITY] &&
-- (rule->pref != nla_get_u32(tb[FRA_PRIORITY])))
-- continue;
--
-- if (tb[FRA_IFNAME] &&
-- nla_strcmp(tb[FRA_IFNAME], rule->ifname))
-- continue;
--
-- if (tb[FRA_FWMARK] &&
-- (rule->mark != nla_get_u32(tb[FRA_FWMARK])))
-- continue;
--
-- if (tb[FRA_FWMASK] &&
-- (rule->mark_mask != nla_get_u32(tb[FRA_FWMASK])))
-- continue;
--
-- if (!ops->compare(rule, frh, tb))
-- continue;
--
-- if (rule->flags & FIB_RULE_PERMANENT) {
-- err = -EPERM;
-- goto errout;
-- }
--
-- list_del_rcu(&rule->list);
-- synchronize_rcu();
-- notify_rule_change(RTM_DELRULE, rule, ops, nlh,
-- NETLINK_CB(skb).pid);
-- fib_rule_put(rule);
-- rules_ops_put(ops);
-- return 0;
-- }
--
-- err = -ENOENT;
--errout:
-- rules_ops_put(ops);
-- return err;
--}
--
--static inline size_t fib_rule_nlmsg_size(struct fib_rules_ops *ops,
-- struct fib_rule *rule)
--{
-- size_t payload = NLMSG_ALIGN(sizeof(struct fib_rule_hdr))
-- + nla_total_size(IFNAMSIZ) /* FRA_IFNAME */
-- + nla_total_size(4) /* FRA_PRIORITY */
-- + nla_total_size(4) /* FRA_TABLE */
-- + nla_total_size(4) /* FRA_FWMARK */
-- + nla_total_size(4); /* FRA_FWMASK */
--
-- if (ops->nlmsg_payload)
-- payload += ops->nlmsg_payload(rule);
--
-- return payload;
--}
--
--static int fib_nl_fill_rule(struct sk_buff *skb, struct fib_rule *rule,
-- u32 pid, u32 seq, int type, int flags,
-- struct fib_rules_ops *ops)
--{
-- struct nlmsghdr *nlh;
-- struct fib_rule_hdr *frh;
--
-- nlh = nlmsg_put(skb, pid, seq, type, sizeof(*frh), flags);
-- if (nlh == NULL)
-- return -1;
--
-- frh = nlmsg_data(nlh);
-- frh->table = rule->table;
-- NLA_PUT_U32(skb, FRA_TABLE, rule->table);
-- frh->res1 = 0;
-- frh->res2 = 0;
-- frh->action = rule->action;
-- frh->flags = rule->flags;
--
-- if (rule->ifname[0])
-- NLA_PUT_STRING(skb, FRA_IFNAME, rule->ifname);
--
-- if (rule->pref)
-- NLA_PUT_U32(skb, FRA_PRIORITY, rule->pref);
--
-- if (rule->mark)
-- NLA_PUT_U32(skb, FRA_FWMARK, rule->mark);
--
-- if (rule->mark_mask || rule->mark)
-- NLA_PUT_U32(skb, FRA_FWMASK, rule->mark_mask);
--
-- if (ops->fill(rule, skb, nlh, frh) < 0)
-- goto nla_put_failure;
--
-- return nlmsg_end(skb, nlh);
--
--nla_put_failure:
-- return nlmsg_cancel(skb, nlh);
--}
--
--int fib_rules_dump(struct sk_buff *skb, struct netlink_callback *cb, int family)
--{
-- int idx = 0;
-- struct fib_rule *rule;
-- struct fib_rules_ops *ops;
--
-- ops = lookup_rules_ops(family);
-- if (ops == NULL)
-- return -EAFNOSUPPORT;
--
-- rcu_read_lock();
-- list_for_each_entry(rule, ops->rules_list, list) {
-- if (idx < cb->args[0])
-- goto skip;
--
-- if (fib_nl_fill_rule(skb, rule, NETLINK_CB(cb->skb).pid,
-- cb->nlh->nlmsg_seq, RTM_NEWRULE,
-- NLM_F_MULTI, ops) < 0)
-- break;
--skip:
-- idx++;
-- }
-- rcu_read_unlock();
-- cb->args[0] = idx;
-- rules_ops_put(ops);
--
-- return skb->len;
--}
--
--EXPORT_SYMBOL_GPL(fib_rules_dump);
--
--static void notify_rule_change(int event, struct fib_rule *rule,
-- struct fib_rules_ops *ops, struct nlmsghdr *nlh,
-- u32 pid)
--{
-- struct sk_buff *skb;
-- int err = -ENOBUFS;
--
-- skb = nlmsg_new(fib_rule_nlmsg_size(ops, rule), GFP_KERNEL);
-- if (skb == NULL)
-- goto errout;
--
-- err = fib_nl_fill_rule(skb, rule, pid, nlh->nlmsg_seq, event, 0, ops);
-- /* failure implies BUG in fib_rule_nlmsg_size() */
-- BUG_ON(err < 0);
--
-- err = rtnl_notify(skb, pid, ops->nlgroup, nlh, GFP_KERNEL);
--errout:
-- if (err < 0)
-- rtnl_set_sk_err(ops->nlgroup, err);
--}
--
--static void attach_rules(struct list_head *rules, struct net_device *dev)
--{
-- struct fib_rule *rule;
--
-- list_for_each_entry(rule, rules, list) {
-- if (rule->ifindex == -1 &&
-- strcmp(dev->name, rule->ifname) == 0)
-- rule->ifindex = dev->ifindex;
-- }
--}
--
--static void detach_rules(struct list_head *rules, struct net_device *dev)
--{
-- struct fib_rule *rule;
--
-- list_for_each_entry(rule, rules, list)
-- if (rule->ifindex == dev->ifindex)
-- rule->ifindex = -1;
--}
--
--
--static int fib_rules_event(struct notifier_block *this, unsigned long event,
-- void *ptr)
--{
-- struct net_device *dev = ptr;
-- struct fib_rules_ops *ops;
--
-- ASSERT_RTNL();
-- rcu_read_lock();
--
-- switch (event) {
-- case NETDEV_REGISTER:
-- list_for_each_entry(ops, &rules_ops, list)
-- attach_rules(ops->rules_list, dev);
-- break;
--
-- case NETDEV_UNREGISTER:
-- list_for_each_entry(ops, &rules_ops, list)
-- detach_rules(ops->rules_list, dev);
-- break;
-- }
--
-- rcu_read_unlock();
--
-- return NOTIFY_DONE;
--}
--
--static struct notifier_block fib_rules_notifier = {
-- .notifier_call = fib_rules_event,
--};
--
--static int __init fib_rules_init(void)
--{
-- return register_netdevice_notifier(&fib_rules_notifier);
--}
--
--subsys_initcall(fib_rules_init);
-diff -Nauprw linux-2.6.20/net/core/netpoll.c ../new/linux-2.6.20/net/core/netpoll.c
---- linux-2.6.20/net/core/netpoll.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/net/core/netpoll.c 2007-11-21 11:51:42.000000000 +0530
-@@ -491,7 +491,10 @@ int __netpoll_rx(struct sk_buff *skb)
+--- linux-2.6.20.orig/net/core/netpoll.c
++++ linux-2.6.20/net/core/netpoll.c
+@@ -496,11 +496,14 @@ int __netpoll_rx(struct sk_buff *skb)
+ if (np->local_port && np->local_port != ntohs(uh->dest))
+ goto out;
np->rx_hook(np, ntohs(uh->source),
(char *)(uh+1),
@@ -243356,10 +244089,13 @@ diff -Nauprw linux-2.6.20/net/core/netpoll.c ../new/linux-2.6.20/net/core/netpol
kfree_skb(skb);
return 1;
-diff -Nauprw linux-2.6.20/net/sunrpc/xprtsock.c ../new/linux-2.6.20/net/sunrpc/xprtsock.c
---- linux-2.6.20/net/sunrpc/xprtsock.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/net/sunrpc/xprtsock.c 2007-11-21 11:51:42.000000000 +0530
-@@ -1612,8 +1612,9 @@ struct rpc_xprt *xs_setup_tcp(struct soc
+
+ out:
+--- linux-2.6.20.orig/net/sunrpc/xprtsock.c
++++ linux-2.6.20/net/sunrpc/xprtsock.c
+@@ -1610,12 +1610,13 @@ struct rpc_xprt *xs_setup_tcp(struct soc
+
+ xprt->ops = &xs_tcp_ops;
if (to)
xprt->timeout = *to;
@@ -243371,9 +244107,40 @@ diff -Nauprw linux-2.6.20/net/sunrpc/xprtsock.c ../new/linux-2.6.20/net/sunrpc/x
xs_format_peer_addresses(xprt);
dprintk("RPC: set up transport to address %s\n",
-diff -Nauprw linux-2.6.20/scripts/dwarfh.awk ../new/linux-2.6.20/scripts/dwarfh.awk
---- linux-2.6.20/scripts/dwarfh.awk 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/scripts/dwarfh.awk 2007-11-21 11:51:42.000000000 +0530
+ xprt->address_strings[RPC_DISPLAY_ALL]);
+
+--- linux-2.6.20.orig/scripts/Makefile
++++ linux-2.6.20/scripts/Makefile
+@@ -18,8 +18,9 @@ always := $(hostprogs-y) $(hostprogs-m)
+ # The following hostprogs-y programs are only build on demand
+ hostprogs-y += unifdef
+
+ subdir-$(CONFIG_MODVERSIONS) += genksyms
+ subdir-y += mod
++subdir-$(CONFIG_LKM_HASH) += ksymhash
+
+ # Let clean descend into subdirs
+ subdir- += basic kconfig package
+--- linux-2.6.20.orig/scripts/Makefile.modpost
++++ linux-2.6.20/scripts/Makefile.modpost
+@@ -97,13 +97,15 @@ targets += $(modules:.ko=.mod.o)
+
+ # Step 6), final link of the modules
+ quiet_cmd_ld_ko_o = LD [M] $@
+ cmd_ld_ko_o = $(LD) $(LDFLAGS) $(LDFLAGS_MODULE) -o $@ \
+ $(filter-out FORCE,$^)
++include $(srctree)/scripts/ksymhash/Makefile
+
+ $(modules): %.ko :%.o %.mod.o FORCE
+ $(call if_changed,ld_ko_o)
++ $(rule_ksymhash)
+
+ targets += $(modules)
+
+
+ # Add FORCE to the prequisites of a target to force it to be always rebuilt.
+--- /dev/null
++++ linux-2.6.20/scripts/dwarfh.awk
@@ -0,0 +1,19 @@
+BEGIN {
+ print "#ifndef _ELF_DWARF_H"
@@ -243394,10 +244161,11 @@ diff -Nauprw linux-2.6.20/scripts/dwarfh.awk ../new/linux-2.6.20/scripts/dwarfh.
+END {
+ print "#endif"
+}
-diff -Nauprw linux-2.6.20/scripts/kconfig/Makefile ../new/linux-2.6.20/scripts/kconfig/Makefile
---- linux-2.6.20/scripts/kconfig/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/scripts/kconfig/Makefile 2007-11-21 11:51:42.000000000 +0530
-@@ -4,22 +4,30 @@
+--- linux-2.6.20.orig/scripts/kconfig/Makefile
++++ linux-2.6.20/scripts/kconfig/Makefile
+@@ -2,26 +2,34 @@
+ # Kernel configuration targets
+ # These targets are used from top-level makefile
PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config
@@ -243434,7 +244202,11 @@ diff -Nauprw linux-2.6.20/scripts/kconfig/Makefile ../new/linux-2.6.20/scripts/k
$< -s arch/$(ARCH)/Kconfig
update-po-config: $(obj)/kxgettext
-@@ -43,19 +51,19 @@ update-po-config: $(obj)/kxgettext
+ xgettext --default-domain=linux \
+ --add-comments --keyword=_ --keyword=N_ \
+@@ -41,31 +49,31 @@ update-po-config: $(obj)/kxgettext
+ $(Q)rm -f arch/um/Kconfig_arch
+ $(Q)rm -f scripts/kconfig/linux_*.pot scripts/kconfig/config.pot
PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig
@@ -243455,11 +244227,11 @@ diff -Nauprw linux-2.6.20/scripts/kconfig/Makefile ../new/linux-2.6.20/scripts/k
$< -m arch/$(ARCH)/Kconfig
-defconfig: $(obj)/conf
-+defconfig: $(obj)/conf machconfig
++defconfig: $(obj)/conf machconfig
ifeq ($(KBUILD_DEFCONFIG),)
$< -d arch/$(ARCH)/Kconfig
else
-@@ -63,7 +71,7 @@ else
+ @echo *** Default configuration is based on '$(KBUILD_DEFCONFIG)'
$(Q)$< -D arch/$(ARCH)/configs/$(KBUILD_DEFCONFIG) arch/$(ARCH)/Kconfig
endif
@@ -243468,9 +244240,48 @@ diff -Nauprw linux-2.6.20/scripts/kconfig/Makefile ../new/linux-2.6.20/scripts/k
$(Q)$< -D arch/$(ARCH)/configs/$@ arch/$(ARCH)/Kconfig
# Help text used by make help
-diff -Nauprw linux-2.6.20/scripts/ksymhash/elflib.c ../new/linux-2.6.20/scripts/ksymhash/elflib.c
---- linux-2.6.20/scripts/ksymhash/elflib.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/scripts/ksymhash/elflib.c 2008-10-20 13:38:35.000000000 +0530
+ help:
+ @echo ' config - Update current config utilising a line-oriented program'
+--- /dev/null
++++ linux-2.6.20/scripts/ksymhash/Makefile
+@@ -0,0 +1,35 @@
++# Shared between Makefile and Makefile.modpost
++
++hostprogs-y += ksymhash mk_elfconfig
++always := $(hostprogs-y) empty.o
++
++ksymhash-objs := ksymhash.o elflib.o
++
++# dependencies on generated files need to be listed explicitly
++
++$(obj)/ksymhash.o : $(obj)/elflib.o
++$(obj)/elflib.o : $(obj)/elfconfig.h
++
++quiet_cmd_elfconfig = MKELF $@
++ cmd_elfconfig = $(obj)/mk_elfconfig $(ARCH) < $< > $@
++
++$(obj)/elfconfig.h: $(obj)/empty.o $(obj)/mk_elfconfig FORCE
++ $(call if_changed,elfconfig)
++
++targets += elfconfig.h
++
++# Post-process vmlinux image to populate ksymtabs with GNU hash values
++
++quiet_cmd_ksymhash = SYMHASH
++ cmd_ksymhash = scripts/ksymhash/ksymhash
++
++ifdef CONFIG_LKM_HASH
++define rule_ksymhash
++ $(Q)$(if $($(quiet)cmd_ksymhash), \
++ echo ' $($(quiet)cmd_ksymhash) $@' &&) \
++ $(cmd_ksymhash) $@
++endef
++else
++define rule_ksymhash
++endef
++endif
+--- /dev/null
++++ linux-2.6.20/scripts/ksymhash/elflib.c
@@ -0,0 +1,164 @@
+#include "elflib.h"
+
@@ -243514,7 +244325,7 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/elflib.c ../new/linux-2.6.20/scripts/
+static inline void set_ksymtable(struct elf_info *info, enum ksymtab_type type, \
+ Elf_Ehdr *hdr, Elf_Shdr *sechdrs, unsigned int secidx, \
+ const char *secname) {
-+
++
+ info->ksym_tables[type].start = (struct kernel_symbol *) ((void *) hdr + sechdrs[secidx].sh_offset);
+ info->ksym_tables[type].stop = (struct kernel_symbol *) ((void *) hdr + sechdrs[secidx].sh_offset + sechdrs[secidx].sh_size);
+ info->ksym_tables[type].name = strdup(secname);
@@ -243547,8 +244358,8 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/elflib.c ../new/linux-2.6.20/scripts/
+ /* Not an ELF file - silently ignore it */
+ return 0;
+ }
-+
-+ /* Check if it is the vmlinux or lkm */
++
++ /* Check if it is the vmlinux or lkm */
+ if((lkm_suffix = strstr(filename,".ko")) && (strlen(lkm_suffix) == 3))
+ /* Likely this is a lkm */
+ info->is_lkm = 1;
@@ -243556,7 +244367,7 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/elflib.c ../new/linux-2.6.20/scripts/
+ info->is_lkm = 0;
+ /* Don't care */
+ info->base_addr = 0;
-+ }
++ }
+
+ /* Fix endianness in ELF header */
+ hdr->e_shoff = TO_NATIVE(hdr->e_shoff);
@@ -243588,10 +244399,10 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/elflib.c ../new/linux-2.6.20/scripts/
+ return 0;
+ }
+ secname = secstrings + sechdrs[i].sh_name;
-+
++
+ if (strcmp(secname, ".text") == 0)
+ info->base_addr = sechdrs[i].sh_addr - sechdrs[i].sh_offset;
-+
++
+ if (strcmp(secname, "__ksymtab") == 0)
+ set_ksymtable(info, KSYMTAB, hdr, sechdrs, i, secname);
+ else if (strcmp(secname, "__ksymtab_unused") == 0)
@@ -243636,9 +244447,8 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/elflib.c ../new/linux-2.6.20/scripts/
+}
+
+
-diff -Nauprw linux-2.6.20/scripts/ksymhash/elflib.h ../new/linux-2.6.20/scripts/ksymhash/elflib.h
---- linux-2.6.20/scripts/ksymhash/elflib.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/scripts/ksymhash/elflib.h 2008-10-20 13:38:35.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/scripts/ksymhash/elflib.h
@@ -0,0 +1,142 @@
+#include <sys/stat.h>
+#include <elf.h>
@@ -243728,7 +244538,7 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/elflib.h ../new/linux-2.6.20/scripts/
+ __ksymtab_gpl_future
+ and
+ __ksymtab_strings
-+*/
++*/
+
+enum ksymtab_type {
+ KSYMTAB = 0,
@@ -243756,7 +244566,7 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/elflib.h ../new/linux-2.6.20/scripts/
+ unsigned long size;
+ Elf_Ehdr *hdr;
+ Elf_Shdr *sechdrs;
-+
++
+ unsigned char is_lkm;
+ unsigned long base_addr;
+ unsigned int unresolved;
@@ -243764,12 +244574,12 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/elflib.h ../new/linux-2.6.20/scripts/
+ Elf_Sym *start;
+ Elf_Sym *stop;
+ } symtab;
-+
++
+ struct {
+ ksym_hash_t *start;
+ ksym_hash_t *stop;
+ } symtab_hash;
-+
++
+ struct kernel_symtab ksym_tables[KSYMTAB_ALL];
+ const char *strtab;
+ const char *kstrings;
@@ -243782,23 +244592,21 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/elflib.h ../new/linux-2.6.20/scripts/
+void parse_elf_finish(struct elf_info *info);
+
+
-diff -Nauprw linux-2.6.20/scripts/ksymhash/empty.c ../new/linux-2.6.20/scripts/ksymhash/empty.c
---- linux-2.6.20/scripts/ksymhash/empty.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/scripts/ksymhash/empty.c 2008-10-20 13:38:35.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/scripts/ksymhash/empty.c
@@ -0,0 +1 @@
+/* empty file to figure out endianness / word size */
-diff -Nauprw linux-2.6.20/scripts/ksymhash/ksymhash.c ../new/linux-2.6.20/scripts/ksymhash/ksymhash.c
---- linux-2.6.20/scripts/ksymhash/ksymhash.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/scripts/ksymhash/ksymhash.c 2008-10-20 13:38:35.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/scripts/ksymhash/ksymhash.c
@@ -0,0 +1,126 @@
+/*
+ * Copyright STMicroelectronics Ltd (2008)
-+ *
++ *
+ * Author: Carmelo Amoroso <carmelo.amoroso@st.com>
+ *
+ *
+ */
-+
++
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
@@ -243816,10 +244624,10 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/ksymhash.c ../new/linux-2.6.20/script
+#else
+#define debug(__msg...) /* nothing */
+/*#define dump_ksym(__ksym, __kstr) nothing */
-+#endif
++#endif
+
+#define dump_undef(__undef, __hash) debug("\tUnresolved: %s\thash = 0x%lx\n", __undef, __hash)
-+#define dump_ksym(__ksym, __kstr) debug("\tExported: %s\thash = 0x%x\n", __kstr, __ksym->hash_value)
++#define dump_ksym(__ksym, __kstr) debug("\tExported: %s\thash = 0x%x\n", __kstr, __ksym->hash_value)
+
+static ksym_hash_t gnu_hash (const unsigned char *name) {
+ ksym_hash_t h = 5381;
@@ -243834,7 +244642,7 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/ksymhash.c ../new/linux-2.6.20/script
+
+ struct kernel_symbol * sym;
+ long s_offset;
-+
++
+ if(elf->is_lkm) {
+ /*
+ * ksym->name is an offset with respect to the start of the
@@ -243842,13 +244650,13 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/ksymhash.c ../new/linux-2.6.20/script
+ */
+ s_offset = (long) elf->kstrings;
+ } else {
-+ /*
++ /*
+ * In this case, ksym->name is the absolute value of the string into
+ * the __ksymtab_strings
+ */
+ s_offset = (long)elf->hdr - (long)elf->base_addr;
-+ }
-+
++ }
++
+ for(sym = elf->ksym_tables[tp].start; sym < elf->ksym_tables[tp].stop; sym++) {
+ sym->hash_value = gnu_hash(GET_KSTRING(sym, s_offset));
+ dump_ksym(sym, GET_KSTRING(sym, s_offset));
@@ -243860,7 +244668,7 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/ksymhash.c ../new/linux-2.6.20/script
+ Elf_Sym *sym;
+ unsigned int undef = 0;
+ ksym_hash_t* hash_values = elf->symtab_hash.start;
-+
++
+ if(elf->is_lkm) {
+ for(sym = elf->symtab.start; sym < elf->symtab.stop; sym++) {
+ if(sym->st_shndx == SHN_UNDEF) {
@@ -243877,88 +244685,48 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/ksymhash.c ../new/linux-2.6.20/script
+ */
+ hash_values++;
+ undef++;
-+ }
-+ }
++ }
++ }
+ }
+ }
+ elf->unresolved = undef;
-+}
++}
+
+
+int main(int argc, char **argv) {
+
+ enum ksymtab_type k;
+ struct elf_info info = { };
-+
++
+ if (!parse_elf(&info, argv[1])) {
+ exit(1);
-+ }
-+
++ }
++
+ /* Skip __ksymtab_strings and __ksymtab.hash*/
+ debug("--------------------------------------------------------------------------------\n");
+ for(k=KSYMTAB; k < KSYMTAB_ALL; k++) {
+
+ if(info.ksym_tables[k].name) {
-+
-+ /* Compute hash value for exported symbols */
++
++ /* Compute hash value for exported symbols */
+ compute_exported_hash(&info, k);
-+
-+ debug("ktable: %s [exported: %u]\n",
-+ info.ksym_tables[k].name, info.ksym_tables[k].entries);
++
++ debug("ktable: %s [exported: %u]\n",
++ info.ksym_tables[k].name, info.ksym_tables[k].entries);
+ }
-+ }
++ }
+ debug("--------------------------------------------------------------------------------\n");
+
+ compute_unresolved_hash(&info);
+ debug("Module: %s [unresolved: %u]\n", argv[1], info.unresolved);
+ debug("--------------------------------------------------------------------------------\n");
-+
++
+
+ parse_elf_finish(&info);
+ return 0;
+}
-diff -Nauprw linux-2.6.20/scripts/ksymhash/Makefile ../new/linux-2.6.20/scripts/ksymhash/Makefile
---- linux-2.6.20/scripts/ksymhash/Makefile 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/scripts/ksymhash/Makefile 2008-10-20 13:38:35.000000000 +0530
-@@ -0,0 +1,35 @@
-+# Shared between Makefile and Makefile.modpost
-+
-+hostprogs-y += ksymhash mk_elfconfig
-+always := $(hostprogs-y) empty.o
-+
-+ksymhash-objs := ksymhash.o elflib.o
-+
-+# dependencies on generated files need to be listed explicitly
-+
-+$(obj)/ksymhash.o : $(obj)/elflib.o
-+$(obj)/elflib.o : $(obj)/elfconfig.h
-+
-+quiet_cmd_elfconfig = MKELF $@
-+ cmd_elfconfig = $(obj)/mk_elfconfig $(ARCH) < $< > $@
-+
-+$(obj)/elfconfig.h: $(obj)/empty.o $(obj)/mk_elfconfig FORCE
-+ $(call if_changed,elfconfig)
-+
-+targets += elfconfig.h
-+
-+# Post-process vmlinux image to populate ksymtabs with GNU hash values
-+
-+quiet_cmd_ksymhash = SYMHASH
-+ cmd_ksymhash = scripts/ksymhash/ksymhash
-+
-+ifdef CONFIG_LKM_HASH
-+define rule_ksymhash
-+ $(Q)$(if $($(quiet)cmd_ksymhash), \
-+ echo ' $($(quiet)cmd_ksymhash) $@' &&) \
-+ $(cmd_ksymhash) $@
-+endef
-+else
-+define rule_ksymhash
-+endef
-+endif
-diff -Nauprw linux-2.6.20/scripts/ksymhash/mk_elfconfig.c ../new/linux-2.6.20/scripts/ksymhash/mk_elfconfig.c
---- linux-2.6.20/scripts/ksymhash/mk_elfconfig.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/scripts/ksymhash/mk_elfconfig.c 2008-10-20 13:38:35.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/scripts/ksymhash/mk_elfconfig.c
@@ -0,0 +1,66 @@
+#include <stdio.h>
+#include <stdlib.h>
@@ -244026,36 +244794,11 @@ diff -Nauprw linux-2.6.20/scripts/ksymhash/mk_elfconfig.c ../new/linux-2.6.20/sc
+ return 0;
+}
+
-diff -Nauprw linux-2.6.20/scripts/Makefile ../new/linux-2.6.20/scripts/Makefile
---- linux-2.6.20/scripts/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/scripts/Makefile 2008-10-20 13:37:46.000000000 +0530
-@@ -20,6 +20,7 @@ hostprogs-y += unifdef
-
- subdir-$(CONFIG_MODVERSIONS) += genksyms
- subdir-y += mod
-+subdir-$(CONFIG_LKM_HASH) += ksymhash
-
- # Let clean descend into subdirs
- subdir- += basic kconfig package
-diff -Nauprw linux-2.6.20/scripts/Makefile.modpost ../new/linux-2.6.20/scripts/Makefile.modpost
---- linux-2.6.20/scripts/Makefile.modpost 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/scripts/Makefile.modpost 2008-10-20 13:37:46.000000000 +0530
-@@ -99,9 +99,11 @@ targets += $(modules:.ko=.mod.o)
- quiet_cmd_ld_ko_o = LD [M] $@
- cmd_ld_ko_o = $(LD) $(LDFLAGS) $(LDFLAGS_MODULE) -o $@ \
- $(filter-out FORCE,$^)
-+include $(srctree)/scripts/ksymhash/Makefile
-
- $(modules): %.ko :%.o %.mod.o FORCE
- $(call if_changed,ld_ko_o)
-+ $(rule_ksymhash)
-
- targets += $(modules)
-
-diff -Nauprw linux-2.6.20/scripts/mod/modpost.c ../new/linux-2.6.20/scripts/mod/modpost.c
---- linux-2.6.20/scripts/mod/modpost.c 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/scripts/mod/modpost.c 2008-10-20 13:37:47.000000000 +0530
-@@ -1311,6 +1311,28 @@ static void add_srcversion(struct buffer
+--- linux-2.6.20.orig/scripts/mod/modpost.c
++++ linux-2.6.20/scripts/mod/modpost.c
+@@ -1309,10 +1309,32 @@ static void add_srcversion(struct buffer
+ buf_printf(b, "MODULE_INFO(srcversion, \"%s\");\n",
+ mod->srcversion);
}
}
@@ -244074,7 +244817,7 @@ diff -Nauprw linux-2.6.20/scripts/mod/modpost.c ../new/linux-2.6.20/scripts/mod/
+ for (s = mod->unres; s; s = s->next) {
+ /* Fill with zero, the order of unresolved symbol is not yet correct
+ This will create a placeholder for the hash values
-+ */
++ */
+ buf_printf(b, "\t%#8lx,\n", 0L);
+ }
+ buf_printf(b, "};\n");
@@ -244084,7 +244827,11 @@ diff -Nauprw linux-2.6.20/scripts/mod/modpost.c ../new/linux-2.6.20/scripts/mod/
static void write_if_changed(struct buffer *b, const char *fname)
{
char *tmp;
-@@ -1502,6 +1524,7 @@ int main(int argc, char **argv)
+ FILE *file;
+ struct stat st;
+@@ -1500,10 +1522,11 @@ int main(int argc, char **argv)
+ add_header(&buf, mod);
+ err |= add_versions(&buf, mod);
add_depends(&buf, mod, modules);
add_moddevtable(&buf, mod);
add_srcversion(&buf, mod);
@@ -244092,10 +244839,100 @@ diff -Nauprw linux-2.6.20/scripts/mod/modpost.c ../new/linux-2.6.20/scripts/mod/
sprintf(fname, "%s.mod.c", mod->name);
write_if_changed(&buf, fname);
-diff -Nauprw linux-2.6.20/sound/arm/Kconfig ../new/linux-2.6.20/sound/arm/Kconfig
---- linux-2.6.20/sound/arm/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/sound/arm/Kconfig 2007-11-21 11:51:42.000000000 +0530
-@@ -3,6 +3,17 @@
+ }
+
+--- linux-2.6.20.orig/sound/Kconfig
++++ linux-2.6.20/sound/Kconfig
+@@ -1,10 +1,44 @@
+ # sound/Config.in
+ #
+
+ menu "Sound"
+
++# added for nomadik audio codec device
++
++config NOMADIK_ACODEC
++ tristate "Nomadik audio codec generic module (used both by SAA and ALSA)"
++ depends on ARCH_NOMADIK && NOMADIK_MSP && I2C_NOMADIK
++ help
++ Say Y here if you have a nomadik based device
++ and want to use its audio codec chip.
++
++ To compile this driver as a module, choose M here: the module
++ will be called nmdkmod_acodec.
++
++choice
++ prompt "audio codec type"
++ depends on NOMADIK_ACODEC
++ default NOMADIK_STW5095
++
++config NOMADIK_STW5094
++ bool "Nomadik stw5094 audio codec"
++
++config NOMADIK_STW5095
++ bool "Nomadik stw5095 audio codec"
++
++endchoice
++
++#configure audio codec to provide msp clock and frame sync
++config DA_MASTER
++ bool "Set stw5095 clock as bit clock"
++ depends on NOMADIK_STW5095
++# default y
++ help
++ Say Y here if you wish to use the stw5095's audio clock as
++ the bit clock instead of the less accurate msp clock.
++
+ config SOUND
+ tristate "Sound card support"
+ help
+ If you have a sound card in your computer, i.e. if it can say more
+ than an occasional beep, say Y. Be sure to have all the information
+@@ -34,10 +68,12 @@ config SOUND
+
+ source "sound/oss/dmasound/Kconfig"
+
+ if !M68K
+
++
++
+ menu "Advanced Linux Sound Architecture"
+ depends on SOUND!=n
+
+ config SND
+ tristate "Advanced Linux Sound Architecture"
+--- linux-2.6.20.orig/sound/Makefile
++++ linux-2.6.20/sound/Makefile
+@@ -1,8 +1,9 @@
+ # Makefile for the Linux sound card driver
+ #
+
++obj-$(CONFIG_NOMADIK_ACODEC) += nmdkmod_acodec.o
+ obj-$(CONFIG_SOUND) += soundcore.o
+ obj-$(CONFIG_SOUND_PRIME) += sound_firmware.o
+ obj-$(CONFIG_SOUND_PRIME) += oss/
+ obj-$(CONFIG_DMASOUND) += oss/
+ obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ synth/ usb/ sparc/ parisc/ pcmcia/ mips/
+@@ -13,6 +14,14 @@ obj-$(CONFIG_AC97_BUS) += ac97_bus.o
+
+ ifeq ($(CONFIG_SND),y)
+ obj-y += last.o
+ endif
+
++ifeq ($(CONFIG_NOMADIK_STW5094),y)
++nmdkmod_acodec-objs := nomadik_stw5094.o
++endif
++
++ifeq ($(CONFIG_NOMADIK_STW5095),y)
++nmdkmod_acodec-objs := nomadik_stw5095.o
++endif
++
+ soundcore-objs := sound_core.o
+--- linux-2.6.20.orig/sound/arm/Kconfig
++++ linux-2.6.20/sound/arm/Kconfig
+@@ -1,10 +1,21 @@
+ # ALSA ARM drivers
+
menu "ALSA ARM devices"
depends on SND!=n && ARM
@@ -244113,19 +244950,21 @@ diff -Nauprw linux-2.6.20/sound/arm/Kconfig ../new/linux-2.6.20/sound/arm/Kconfi
config SND_SA11XX_UDA1341
tristate "SA11xx UDA1341TS driver (iPaq H3600)"
depends on ARCH_SA1100 && SND && L3
-diff -Nauprw linux-2.6.20/sound/arm/Makefile ../new/linux-2.6.20/sound/arm/Makefile
---- linux-2.6.20/sound/arm/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/sound/arm/Makefile 2007-11-21 11:51:42.000000000 +0530
-@@ -13,3 +13,6 @@ snd-pxa2xx-pcm-objs := pxa2xx-pcm.o
+ select SND_PCM
+ help
+--- linux-2.6.20.orig/sound/arm/Makefile
++++ linux-2.6.20/sound/arm/Makefile
+@@ -11,5 +11,8 @@ snd-aaci-objs := aaci.o devdma.o
+ obj-$(CONFIG_SND_PXA2XX_PCM) += snd-pxa2xx-pcm.o
+ snd-pxa2xx-pcm-objs := pxa2xx-pcm.o
obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
snd-pxa2xx-ac97-objs := pxa2xx-ac97.o
+
+obj-$(CONFIG_SND_NOMADIK_ALSA) += nmdkmod_alsa.o
+nmdkmod_alsa-objs := nomadik_alsa.o devdma.o
-diff -Nauprw linux-2.6.20/sound/arm/nomadik_alsa.c ../new/linux-2.6.20/sound/arm/nomadik_alsa.c
---- linux-2.6.20/sound/arm/nomadik_alsa.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/sound/arm/nomadik_alsa.c 2008-11-24 14:06:29.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/sound/arm/nomadik_alsa.c
@@ -0,0 +1,1038 @@
+/* sound/arm/nomadik_alsa.c
+ *
@@ -245165,15 +246004,14 @@ diff -Nauprw linux-2.6.20/sound/arm/nomadik_alsa.c ../new/linux-2.6.20/sound/arm
+MODULE_AUTHOR("David Siorpaes, Emanele Placidi, Abhijit Singh");
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("Nomadik ALSA driver");
-diff -Nauprw linux-2.6.20/sound/arm/nomadik_alsa.h ../new/linux-2.6.20/sound/arm/nomadik_alsa.h
---- linux-2.6.20/sound/arm/nomadik_alsa.h 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/sound/arm/nomadik_alsa.h 2007-11-21 11:51:42.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/sound/arm/nomadik_alsa.h
@@ -0,0 +1,83 @@
-+/* sound/arm/nomadik_alsa.c
-+ *
++/* sound/arm/nomadik_alsa.c
++ *
+ * Header file for nomadik alsa driver
+ * Author: David Siorpaes, Emanele Placidi, Abhijit Singh
-+ *
++ *
+ * 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
@@ -245252,91 +246090,13 @@ diff -Nauprw linux-2.6.20/sound/arm/nomadik_alsa.h ../new/linux-2.6.20/sound/arm
+
+
+#endif
-diff -Nauprw linux-2.6.20/sound/Kconfig ../new/linux-2.6.20/sound/Kconfig
---- linux-2.6.20/sound/Kconfig 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/sound/Kconfig 2008-11-19 16:47:04.000000000 +0530
-@@ -3,6 +3,40 @@
-
- menu "Sound"
-
-+# added for nomadik audio codec device
-+
-+config NOMADIK_ACODEC
-+ tristate "Nomadik audio codec generic module (used both by SAA and ALSA)"
-+ depends on ARCH_NOMADIK && NOMADIK_MSP && I2C_NOMADIK
-+ help
-+ Say Y here if you have a nomadik based device
-+ and want to use its audio codec chip.
-+
-+ To compile this driver as a module, choose M here: the module
-+ will be called nmdkmod_acodec.
-+
-+choice
-+ prompt "audio codec type"
-+ depends on NOMADIK_ACODEC
-+ default NOMADIK_STW5095
-+
-+config NOMADIK_STW5094
-+ bool "Nomadik stw5094 audio codec"
-+
-+config NOMADIK_STW5095
-+ bool "Nomadik stw5095 audio codec"
-+
-+endchoice
-+
-+#configure audio codec to provide msp clock and frame sync
-+config DA_MASTER
-+ bool "Set stw5095 clock as bit clock"
-+ depends on NOMADIK_STW5095
-+# default y
-+ help
-+ Say Y here if you wish to use the stw5095's audio clock as
-+ the bit clock instead of the less accurate msp clock.
-+
- config SOUND
- tristate "Sound card support"
- help
-@@ -36,6 +70,8 @@ source "sound/oss/dmasound/Kconfig"
-
- if !M68K
-
-+
-+
- menu "Advanced Linux Sound Architecture"
- depends on SOUND!=n
-
-diff -Nauprw linux-2.6.20/sound/Makefile ../new/linux-2.6.20/sound/Makefile
---- linux-2.6.20/sound/Makefile 2007-02-05 00:14:54.000000000 +0530
-+++ ../new/linux-2.6.20/sound/Makefile 2007-11-21 11:51:42.000000000 +0530
-@@ -1,6 +1,7 @@
- # Makefile for the Linux sound card driver
- #
-
-+obj-$(CONFIG_NOMADIK_ACODEC) += nmdkmod_acodec.o
- obj-$(CONFIG_SOUND) += soundcore.o
- obj-$(CONFIG_SOUND_PRIME) += sound_firmware.o
- obj-$(CONFIG_SOUND_PRIME) += oss/
-@@ -15,4 +16,12 @@ ifeq ($(CONFIG_SND),y)
- obj-y += last.o
- endif
-
-+ifeq ($(CONFIG_NOMADIK_STW5094),y)
-+nmdkmod_acodec-objs := nomadik_stw5094.o
-+endif
-+
-+ifeq ($(CONFIG_NOMADIK_STW5095),y)
-+nmdkmod_acodec-objs := nomadik_stw5095.o
-+endif
-+
- soundcore-objs := sound_core.o
-diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/nomadik_stw5094.c
---- linux-2.6.20/sound/nomadik_stw5094.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/sound/nomadik_stw5094.c 2008-07-04 23:45:32.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/sound/nomadik_stw5094.c
@@ -0,0 +1,2280 @@
-+/* sound/nomadik_stw5094.c
-+ *
++/* sound/nomadik_stw5094.c
++ *
+ * Contains STW5094 AudioCodec implementation
-+ *
++ *
+ * 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
@@ -245354,7 +246114,7 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+ */
+
+/*-----------------------------------------------------------------------------
-+ * Common Includes
++ * Common Includes
+ *---------------------------------------------------------------------------*/
+
+#include <linux/module.h>
@@ -245399,7 +246159,7 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+#define TRACE_EXIT(devname) DEBUG(4, "%s: <- " __FUNCTION__ "()\n", devname);
+
+/*----------------------------------------------------------------------------
-+ * global declarations
++ * global declarations
+ *---------------------------------------------------------------------------*/
+
+codec_configuration *nomadik_acodec_conf, *nomadik_acodec_defaultconf;
@@ -245412,7 +246172,7 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+
+/**
+ * nomadik_acodec_set_user
-+ *
++ *
+ * Set the current user for acodec.
+ */
+
@@ -245433,7 +246193,7 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+
+/**
+ * nomadik_acodec_unset_user
-+ *
++ *
+ * Unset the current user for acodec.
+ */
+
@@ -245446,22 +246206,22 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+ ("ERROR : Trying to free audiocodec already in use by other user %d\n", g_cur_user);
+ return CODEC_ERROR;
+ }
-+ else
++ else
+ g_cur_user = NO_USER;
+
+ return (codec_error);
+}
+
+/**
-+ * nomadik_acodec_init
-+ *
++ * nomadik_acodec_init
++ *
+ * This is the init function for STW5094 audiocodec driver. */
+
+static int __init nomadik_acodec_init(void)
+{
+ int error;
+ /* default configuration for audiocodec
-+ -no argument in required in nomadik_acodec_init
++ -no argument in required in nomadik_acodec_init
+ */
+ DEBUG(1, " Entering nomadik_acodec_init\n");
+
@@ -245529,8 +246289,8 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+
+/**
+ * nomadik_acodec_deinit
-+ *
-+ * exit function for STW5094 audiocodec driver.
++ *
++ * exit function for STW5094 audiocodec driver.
+ */
+static void __exit nomadik_acodec_deinit(void)
+{
@@ -245561,16 +246321,16 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+* nomadik_acodec_enable_audio_mode
-+*
-+* @direction - direction of data flow (from/to) audiocode
-+* @input_frequency - record direction
-+* @output_frequency - playback direction
-+* @mspClockSel - clock for MSP
++* nomadik_acodec_enable_audio_mode
++*
++* @direction - direction of data flow (from/to) audiocode
++* @input_frequency - record direction
++* @output_frequency - playback direction
++* @mspClockSel - clock for MSP
+* @mspInClockFreq - input clock for MSP
-+*
-+* It configures the audiocodec in audio mode. In this case,the I2S
-+* protocol is used for data exchanges.
++*
++* It configures the audiocodec in audio mode. In this case,the I2S
++* protocol is used for data exchanges.
+*/
+
+t_codec_error nomadik_acodec_enable_audio_mode(t_codec_direction direction,
@@ -245794,16 +246554,16 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+* nomadik_acodec_enable_voice_mode
-+*
-+* @direction - direction of data flow (from/to) audiocode
-+* @input_frequency - record direction
-+* @output_frequency - playback direction
-+* @mspClockSel - clock for MSP
++* nomadik_acodec_enable_voice_mode
++*
++* @direction - direction of data flow (from/to) audiocode
++* @input_frequency - record direction
++* @output_frequency - playback direction
++* @mspClockSel - clock for MSP
+* @mspInClockFreq - input clock for MSP
-+*
-+* It configures the audiocodec in audio mode. In this case,the PCM
-+* protocol is used for data exchanges.
++*
++* It configures the audiocodec in audio mode. In this case,the PCM
++* protocol is used for data exchanges.
+*/
+t_codec_error nomadik_acodec_enable_voice_mode(t_codec_direction direction,
+ t_codec_sample_frequency
@@ -245880,7 +246640,7 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+
+ }
+
-+ /* Configure the audio codec for voice mode
++ /* Configure the audio codec for voice mode
+ set the OCK clock frequency first */
+ error_status = set_ock_frequency(freq);
+ if (CODEC_NOT_SUPPORTED == error_status) {
@@ -246030,16 +246790,16 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_enable_tonegeneratormode
-+ * @tone_gain - gain in db for tone generated
-+ * @mix_with_record - mixing of tone with recording
-+ * @mix_with_playback - mixing of tone with playback
-+ * @waveShape - wave shape sin/square
-+ * @reserved2 - reserved for future use
++ * nomadik_acodec_enable_tonegeneratormode
++ * @tone_gain - gain in db for tone generated
++ * @mix_with_record - mixing of tone with recording
++ * @mix_with_playback - mixing of tone with playback
++ * @waveShape - wave shape sin/square
++ * @reserved2 - reserved for future use
+ *
-+ * It configures the audiocodec in tone mode. if mix with
-+ * or record is TRUE then enable internal tone generator else
-+ * set tone only mode nad disable audio or voice mode.
++ * It configures the audiocodec in tone mode. if mix with
++ * or record is TRUE then enable internal tone generator else
++ * set tone only mode nad disable audio or voice mode.
+ */
+
+t_codec_error nomadik_acodec_enable_tonegeneratormode(int tone_gain,
@@ -246160,9 +246920,9 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_disable_tonegeneratormode
++ * nomadik_acodec_disable_tonegeneratormode
+ *
-+ * It disables the tonegeneration mode.
++ * It disables the tonegeneration mode.
+ */
+t_codec_error nomadik_acodec_disable_tonegeneratormode(t_acodec_user user)
+{
@@ -246207,10 +246967,10 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_play_singletone
-+ * @tone_frequency: single frequency to generate tone
-+ *
-+ * It starts the single frequency tone generation
++ * nomadik_acodec_play_singletone
++ * @tone_frequency: single frequency to generate tone
++ *
++ * It starts the single frequency tone generation
+ */
+t_codec_error nomadik_acodec_play_singletone(int toneFrequency, t_acodec_user user)
+{
@@ -246251,11 +247011,11 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+* nomadik_acodec_play_dualtone
-+* @freqF1 - frequency f1 to generate tone
-+* @ferqF2 - frequemcy f2 to generate tone
++* nomadik_acodec_play_dualtone
++* @freqF1 - frequency f1 to generate tone
++* @ferqF2 - frequemcy f2 to generate tone
+*
-+* It starts the DTMF tone generation
++* It starts the DTMF tone generation
+*/
+t_codec_error nomadik_acodec_play_dualtone(int freqF1, int freqF2, t_acodec_user user)
+{
@@ -246307,8 +247067,8 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+* nomadik_acodec_stop_tone - stops the DTMF or single tone generatio
-+*/
++* nomadik_acodec_stop_tone - stops the DTMF or single tone generatio
++*/
+t_codec_error nomadik_acodec_stop_tone(t_acodec_user user)
+{
+ t_codec_error error_status = CODEC_OK;
@@ -246337,11 +247097,11 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+* nomadik_acodec_set_volume - configures the volume level for both speakers
-+* @in_left_volume - volume for left channel of mic
-+* @in_right_volume - volume for right channel of mic
-+* @out_left_volume - volume for left speaker
-+* @out_right_volume - volume for right speaker
++* nomadik_acodec_set_volume - configures the volume level for both speakers
++* @in_left_volume - volume for left channel of mic
++* @in_right_volume - volume for right channel of mic
++* @out_left_volume - volume for left speaker
++* @out_right_volume - volume for right speaker
+*/
+t_codec_error nomadik_acodec_set_volume(int input_vol_left,
+ int input_vol_right,
@@ -246411,7 +247171,7 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+ }
+
+ /* dont change the mic selected. just change the volume clear
-+ * the lower 5 bits and set the volume as lsb 0 to 44.5db
++ * the lower 5 bits and set the volume as lsb 0 to 44.5db
+ */
+ data &= 0xE0;
+ if (ZERO == (data & 0xC0)) {
@@ -246527,11 +247287,11 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+* nomadik_acodec_powerdown
-+* @flag - level of power down, 0 means complete power down
++* nomadik_acodec_powerdown
++* @flag - level of power down, 0 means complete power down
+*
+* It sets the codec in power down mode. complete functionality
-+* will be achieved in power management
++* will be achieved in power management
+*/
+t_codec_error nomadik_acodec_powerdown(__u8 flag)
+{
@@ -246566,11 +247326,11 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+* nomadik_acodec_powerup
++* nomadik_acodec_powerup
+*
-+* It sets the codec in power up mode. rest is left for power
-+* management.
-+*/
++* It sets the codec in power up mode. rest is left for power
++* management.
++*/
+t_codec_error nomadik_acodec_powerup(void)
+{
+ t_codec_error error_status;
@@ -246599,14 +247359,14 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+* nomadik_acodec_enable_bypassmode
-+* @analog_frequency
-+* @fm_gain - outside gain in the received audio signals
-+* @mix_with_playback - true if user wants to mix tone with audio played back
-+* @reserved1 - reserved for future use
-+* @reserved2 - reserved for future use
++* nomadik_acodec_enable_bypassmode
++* @analog_frequency
++* @fm_gain - outside gain in the received audio signals
++* @mix_with_playback - true if user wants to mix tone with audio played back
++* @reserved1 - reserved for future use
++* @reserved2 - reserved for future use
+*
-+* Enables the bypass mode (Analog IN is routed to analog out.
++* Enables the bypass mode (Analog IN is routed to analog out.
+*/
+t_codec_error nomadik_acodec_enable_bypassmode(t_codec_sample_frequency analog_frequency, __u8 fm_gain, boolean mix_with_playback,
+ u_long * reserved1,
@@ -246648,7 +247408,7 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+ if (error_status < 0) {
+ DEBUG(1, " error in set i2s power off\n");
+ }
-+ } else { /* dont set audio or voice mode , use existing mode and set CR20 to sum
++ } else { /* dont set audio or voice mode , use existing mode and set CR20 to sum
+ the fm signals with the output comming from audio or voice */
+ error_status = nomadik_acodec_powerup();
+ if (error_status < 0) {
@@ -246686,10 +247446,10 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_set_samplesize
++ * nomadik_acodec_set_samplesize
+ * @codec_size: sample size in bits
+ *
-+ * This routine sets the sample size in bits.
++ * This routine sets the sample size in bits.
+ */
+t_codec_error nomadik_acodec_set_samplesize(codec_input_bit_length codec_size, t_acodec_user user)
+{
@@ -246727,11 +247487,11 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_set_no_of_channels
++ * nomadik_acodec_set_no_of_channels
+ * @channels: mono or stereo
-+ *
++ *
+ * This routine checks then sets the no of channels configured together
-+ * with mode.
++ * with mode.
+ */
+t_codec_error nomadik_acodec_set_no_of_channels(t_codec_channel channels, t_acodec_user user)
+{
@@ -246762,10 +247522,10 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_set_compand
++ * nomadik_acodec_set_compand
+ * @compand_mode: Linear, A-law or Mu-Law
+ *
-+ * This routine sets the Companded mode for audiocodec
++ * This routine sets the Companded mode for audiocodec
+ */
+t_codec_error nomadik_acodec_set_compand(codec_compand_mode compand_mode, t_acodec_user user)
+{
@@ -246824,9 +247584,9 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_enable_datapath_errcb
++ * nomadik_acodec_enable_datapath_errcb
+ *
-+ * This routine is not implemented yet
++ * This routine is not implemented yet
+ */
+t_codec_error nomadik_acodec_enable_datapath_errcb(codec_callback *
+ call_back_fn, u_long * data, t_acodec_user user)
@@ -246835,10 +247595,10 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_set_dataformat
++ * nomadik_acodec_set_dataformat
+ * @codec_dfmt: data format bit mask.
-+ *
-+ * This routine sets the dtmf format.
++ *
++ * This routine sets the dtmf format.
+ */
+t_codec_error nomadik_acodec_set_dataformat(codec_dfmt * codec_dfmt, t_acodec_user user)
+{
@@ -246864,10 +247624,10 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_get_dataformat
++ * nomadik_acodec_get_dataformat
+ * @codec_dfmt: data format bit mask.
-+ *
-+ * This routine gets the dtmf format as ser earlier .
++ *
++ * This routine gets the dtmf format as ser earlier .
+ */
+t_codec_error nomadik_acodec_get_dataformat(codec_dfmt * codec_dfmt, t_acodec_user user)
+{
@@ -246892,13 +247652,13 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_enable_sidetone
++ * nomadik_acodec_enable_sidetone
+ * @gain - sidetone gain in db
+ * @reserved1 - reserved for future use only.
+ * @reserved2 - reserved for future use only.
+ *
+ * This routine enables the side tone to be mixed with record
-+ * It is mot implemented yet.
++ * It is mot implemented yet.
+ */
+t_codec_error nomadik_acodec_enable_sidetone(int gain, u_long * reserved1,
+ u_long * reserved2, t_acodec_user user)
@@ -246948,7 +247708,7 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_disable_sidetone - diables the side tone
++ * nomadik_acodec_disable_sidetone - diables the side tone
+ */
+t_codec_error nomadik_acodec_disable_sidetone(t_acodec_user user)
+{
@@ -246979,11 +247739,11 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_select_input
++ * nomadik_acodec_select_input
+ * @input_device: MIC or linein.
+ *
-+ * This routine selects the input device mic or linein.
-+ */
++ * This routine selects the input device mic or linein.
++ */
+t_codec_error nomadik_acodec_select_input(t_codec_input_select input_device, t_acodec_user user)
+{
+
@@ -247030,10 +247790,10 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_select_output
++ * nomadik_acodec_select_output
+ * @output_device: output device HP/LSP
+ *
-+ * This routine selects the output device Headphone or loud speaker
++ * This routine selects the output device Headphone or loud speaker
+ */
+t_codec_error nomadik_acodec_select_output(t_codec_output_select output_device, t_acodec_user user)
+{
@@ -247081,10 +247841,10 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_get_minvolume
++ * nomadik_acodec_get_minvolume
+ * @input_min_vol - minimum volume supported by acodec for recording
+ * @output_min_vol - minimum volume supported by acodec for playback
-+ *
++ *
+ * This routine returns the minimum volume possible for audiocodec */
+t_codec_error nomadik_acodec_get_minvolume(__u8 * input_min_vol,
+ __u8 * output_min_vol)
@@ -247103,11 +247863,11 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_get_maxvolume
++ * nomadik_acodec_get_maxvolume
+ * @input_max_vol - maximum volume supported by acodec for recording
+ * @output_max_vol - maximum volume supported by acodec for playback
+ *
-+ * This routine returns the maximum volume possible for audiocodec
++ * This routine returns the maximum volume possible for audiocodec
+ */
+t_codec_error nomadik_acodec_get_maxvolume(__u8 * input_max_vol,
+ __u8 * output_max_vol)
@@ -247127,12 +247887,12 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/*
-+ * nomadik_acodec_set_frequency
++ * nomadik_acodec_set_frequency
+ * @direction - in/out direction form audiocodec
+ * @record_sample_frequency - record frequency
+ * @play_sample_frequency: playback frequency
-+ *
-+ * This routine sets the freuency for audio codec and MSP
++ *
++ * This routine sets the freuency for audio codec and MSP
+ */
+t_codec_error nomadik_acodec_set_frequency(t_codec_direction direction,
+ t_codec_sample_frequency
@@ -247239,9 +247999,9 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_get_currentsettings
-+ *
-+ * This routine returns the codec_configuration structure
++ * nomadik_acodec_get_currentsettings
++ *
++ * This routine returns the codec_configuration structure
+ */
+t_codec_error nomadik_acodec_get_currentsettings(codec_configuration *
+ codec_conf, t_acodec_user user)
@@ -247268,9 +248028,9 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/**
-+ * nomadik_acodec_set_currentsettings
-+ *
-+ * This routine sets the codec_configuration structure
++ * nomadik_acodec_set_currentsettings
++ *
++ * This routine sets the codec_configuration structure
+ */
+t_codec_error nomadik_acodec_set_currentsettings(codec_configuration *
+ codec_conf, t_acodec_user user)
@@ -247293,7 +248053,7 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+}
+
+/*******************************************************************************
-+ * private functions
++ * private functions
+ ******************************************************************************/
+
+/* Calculate F1 or F2 from frequency given for DTMF tone generation */
@@ -247426,9 +248186,9 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+ return vol;
+}
+
-+ /* This routine calculates the OCK clock frequency depending on
-+ sample frequency given by user.
-+ */
++ /* This routine calculates the OCK clock frequency depending on
++ sample frequency given by user.
++ */
+t_codec_error set_ock_frequency(t_codec_sample_frequency frequency)
+{
+
@@ -247550,7 +248310,7 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+
+/**
+ * nomadik_acodec_reset
-+ *
++ *
+ * Reset the global variables and clear audiocodec settings to default.
+ */
+t_codec_error reset_nomadik_acodec(void)
@@ -247613,9 +248373,8 @@ diff -Nauprw linux-2.6.20/sound/nomadik_stw5094.c ../new/linux-2.6.20/sound/noma
+EXPORT_SYMBOL(nomadik_acodec_disable_tonegeneratormode);
+EXPORT_SYMBOL(nomadik_acodec_get_currentsettings);
+EXPORT_SYMBOL(nomadik_acodec_set_currentsettings);
-diff -Nauprw linux-2.6.20/sound/nomadik_stw5095.c ../new/linux-2.6.20/sound/nomadik_stw5095.c
---- linux-2.6.20/sound/nomadik_stw5095.c 1970-01-01 05:30:00.000000000 +0530
-+++ ../new/linux-2.6.20/sound/nomadik_stw5095.c 2008-11-24 14:06:29.000000000 +0530
+--- /dev/null
++++ linux-2.6.20/sound/nomadik_stw5095.c
@@ -0,0 +1,3529 @@
+/* sound/nomadik_stw5095.c
+ *
diff --git a/recipes/linux/linux-2.6.20/nhk15/patch_audiocodec_glitch.patch b/recipes/linux/linux-2.6.20/nhk15/patch_audiocodec_glitch.patch
index 45b3a325f6..8c1d3bbd47 100644
--- a/recipes/linux/linux-2.6.20/nhk15/patch_audiocodec_glitch.patch
+++ b/recipes/linux/linux-2.6.20/nhk15/patch_audiocodec_glitch.patch
@@ -1,6 +1,12 @@
---- linux-2.6.20/sound/nomadik_stw5095.c 2008-12-02 19:24:57.059205000 +0530
-+++ ../new/linux-2.6.20/sound/nomadik_stw5095.c 2008-12-04 10:41:34.474339000 +0530
-@@ -2577,13 +2577,65 @@ t_codec_error nomadik_acodec_powerup(voi
+---
+ sound/nomadik_stw5095.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 53 insertions(+), 1 deletion(-)
+
+--- linux-2.6.20.orig/sound/nomadik_stw5095.c
++++ linux-2.6.20/sound/nomadik_stw5095.c
+@@ -2575,17 +2575,69 @@ t_codec_error nomadik_acodec_powerdown(_
+
+ t_codec_error nomadik_acodec_powerup(void)
{
t_codec_error error_status = CODEC_OK;
@@ -16,7 +22,7 @@
+ error_status = codec_stw5095_update_cr0();
+ if (CODEC_OK != error_status)
+ return (error_status);
-+
++
+ //CR2 conf
+ codec_stw5095_i2cwrite(CODEC_STW5095_CR2, 0x0);
+ //CR19 conf
@@ -34,7 +40,7 @@
+ //CR0 conf
g_codec_system_context.codec_configuration.cr0_powerup =
CODEC_STW5095_CR0_POWERUP_ON;
-+
++
error_status = codec_stw5095_update_cr0();
+ if (CODEC_OK != error_status)
+ return (error_status);
@@ -67,3 +73,5 @@
return (error_status);
}
+ /**
+ * nomadik_acodec_enable_bypassmode
diff --git a/recipes/linux/linux-2.6.20/nhk15/patch_classdamp_pm_v_audio_codec_patch.patch b/recipes/linux/linux-2.6.20/nhk15/patch_classdamp_pm_v_audio_codec_patch.patch
index c6d4b89318..b48134cde1 100644
--- a/recipes/linux/linux-2.6.20/nhk15/patch_classdamp_pm_v_audio_codec_patch.patch
+++ b/recipes/linux/linux-2.6.20/nhk15/patch_classdamp_pm_v_audio_codec_patch.patch
@@ -1,6 +1,12 @@
---- linux-2.6.20/sound/nomadik_stw5095.c 2008-11-26 18:36:04.000000000 +0530
-+++ ../new/linux-2.6.20/sound/nomadik_stw5095.c 2008-12-02 19:24:57.059205000 +0530
-@@ -1993,6 +1993,16 @@ t_codec_error nomadik_acodec_enable_audi
+---
+ sound/nomadik_stw5095.c | 42 +++++++++++++++++++++++++++++++-----------
+ 1 file changed, 31 insertions(+), 11 deletions(-)
+
+--- linux-2.6.20.orig/sound/nomadik_stw5095.c
++++ linux-2.6.20/sound/nomadik_stw5095.c
+@@ -1991,10 +1991,20 @@ t_codec_error nomadik_acodec_enable_audi
+ return CODEC_ERROR;
+ }
break;
case 0:
@@ -17,7 +23,11 @@
codec_error = nomadik_acodec_select_output(CODEC_DEST_LOUDSPEAKER,user);
if (CODEC_OK != codec_error) {
printk("AUDIOCODEC: ERROR: select output failed\n");
-@@ -2222,6 +2232,16 @@ t_codec_error nomadik_acodec_enable_voic
+ return CODEC_ERROR;
+ }
+@@ -2220,10 +2230,20 @@ t_codec_error nomadik_acodec_enable_voic
+ return CODEC_ERROR;
+ }
break;
case 0:
@@ -34,7 +44,11 @@
codec_error = nomadik_acodec_select_output(CODEC_DEST_LOUDSPEAKER,user);
if (CODEC_OK != codec_error) {
printk("AUDIOCODEC: ERROR: select output failed\n");
-@@ -2525,11 +2545,22 @@ t_codec_error nomadik_acodec_set_volume(
+ return CODEC_ERROR;
+ }
+@@ -2523,15 +2543,26 @@ t_codec_error nomadik_acodec_set_volume(
+ * will be achieved in power management
+ */
t_codec_error nomadik_acodec_powerdown(__u8 flag)
{
@@ -57,7 +71,11 @@
DEBUG(1, "leaving nomadik_acodec_powerdown() \n");
return (error_status);
-@@ -3345,17 +3376,6 @@ static void codec_callback1(void *user)
+ }
+
+@@ -3343,21 +3374,10 @@ static void codec_callback1(void *user)
+ }
+ /*initialize the 5095 codec's amplifier */
void codec_hd_amp_init(t_acodec_user user)
{
int err = 0;
@@ -75,3 +93,5 @@
/**/
err = STMPE2401_SetGpioAltFunction(STMPE0,EGPIO_PIN_7,STMPE2401_PRIMARY_FUNCTION);
if (err != STMPE2401_OK)
+ printk("Couldn't set STMPE0 %d as primary function\n",EGPIO_PIN_7);
+
diff --git a/recipes/linux/linux-2.6.24/hipox/defconfig b/recipes/linux/linux-2.6.24/hipox/defconfig
index 9e53ff867d..09a53878bb 100644
--- a/recipes/linux/linux-2.6.24/hipox/defconfig
+++ b/recipes/linux/linux-2.6.24/hipox/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.24.7
-# Thu Feb 4 08:14:16 2010
+# Fri Mar 19 15:45:44 2010
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -1047,7 +1047,7 @@ CONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_CP2101 is not set
# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
+CONFIG_USB_SERIAL_FTDI_SIO=m
# CONFIG_USB_SERIAL_FUNSOFT is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_IPAQ is not set
diff --git a/recipes/linux/linux-2.6.24/hipox/hipox.patch b/recipes/linux/linux-2.6.24/hipox/hipox.patch
index cd944e797a..c99ef516b4 100644
--- a/recipes/linux/linux-2.6.24/hipox/hipox.patch
+++ b/recipes/linux/linux-2.6.24/hipox/hipox.patch
@@ -32006,10 +32006,10 @@ diff -Nurd linux-2.6.24.4/drivers/ata/ox800sata.c linux-2.6.24/drivers/ata/ox800
+EXPORT_SYMBOL( hipoxsata_RAID_faults );
+EXPORT_SYMBOL( hipoxsata_get_port_no );
+EXPORT_SYMBOL( hipoxsata_LBA_schemes_compatible );
-diff -Nurd linux-2.6.24.4/drivers/ata/ox810sata.c linux-2.6.24/drivers/ata/ox810sata.c
---- linux-2.6.24.4/drivers/ata/ox810sata.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.24/drivers/ata/ox810sata.c 2010-01-14 14:01:15.000000000 +0100
-@@ -0,0 +1,2423 @@
+diff -Nurd linux-2.6.24/drivers/ata/ox810sata.c linux-2.6.24-oxe810/drivers/ata/ox810sata.c
+--- linux-2.6.24/drivers/ata/ox810sata.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.24-oxe810/drivers/ata/ox810sata.c 2008-06-11 17:50:32.000000000 +0200
+@@ -0,0 +1,2441 @@
+/**************************************************************************
+ *
+ * Copyright (c) 2007 Oxford Semiconductor Ltd.
@@ -32447,12 +32447,30 @@ diff -Nurd linux-2.6.24.4/drivers/ata/ox810sata.c linux-2.6.24/drivers/ata/ox810
+{
+ struct ata_host *host_set = dev_get_drvdata( &(pdev->dev) );
+ struct ata_port *ap;
-+ unsigned int i;
++ unsigned int i,j;
+
++ /* tfm: detach host driver */
++ ata_host_detach(host_set);
++
+ for (i = 0; i < host_set->n_ports; i++)
+ {
++ struct ata_port *p=NULL;
+ ap = host_set->ports[i];
+ scsi_remove_host( ap->scsi_host );
++
++ /* tfm: NULL the static local handle just to be sure. */
++ for (j=0; j<2; j++) {
++ if (ox810sata_driver.ap[j] == ap) {
++ p = ap;
++ break;
++ }
++ }
++ if (p) {
++ printk(KERN_DEBUG "tfm host at %p: NULLing ap pointer #%d @%p\n", host_set, j, ap);
++ ox810sata_driver.ap[j] = NULL;
++ } else {
++ printk(KERN_ERR "tfm host at %p: orphan ap pointer %p\n", host_set, ap);
++ }
+ }
+
+ /** @TODO etc. */
diff --git a/recipes/linux/linux-2.6.24/ts72xx/ep93xx-i2c-bus.diff b/recipes/linux/linux-2.6.24/ts72xx/ep93xx-i2c-bus.diff
index d3c66940de..c68647ff37 100644
--- a/recipes/linux/linux-2.6.24/ts72xx/ep93xx-i2c-bus.diff
+++ b/recipes/linux/linux-2.6.24/ts72xx/ep93xx-i2c-bus.diff
@@ -3,13 +3,13 @@ I2C bus driver using ep93xx GPIOs.
Signed-off-by: Lennert Buytenhek <buytenh@wantstofly.org>
-Index: linux-2.6.22/drivers/i2c/busses/Kconfig
+Index: linux-2.6.24/drivers/i2c/busses/Kconfig
===================================================================
---- linux-2.6.22.orig/drivers/i2c/busses/Kconfig 2007-08-30 00:42:45.000000000 +0200
-+++ linux-2.6.22/drivers/i2c/busses/Kconfig 2007-08-30 00:42:52.000000000 +0200
-@@ -635,4 +635,16 @@
- This driver can also be built as a module. If so, the module
- will be called i2c-pnx.
+--- linux-2.6.24.orig/drivers/i2c/busses/Kconfig 2010-02-07 14:53:59.000000000 +0100
++++ linux-2.6.24/drivers/i2c/busses/Kconfig 2010-02-07 14:54:23.000000000 +0100
+@@ -675,4 +675,16 @@
+ This driver can also be built as module. If so, the module
+ will be called i2c-pmcmsp.
+config I2C_EP93XX
+ tristate "Cirrus Logic EP93XX GPIO-based I2C interface"
@@ -24,11 +24,11 @@ Index: linux-2.6.22/drivers/i2c/busses/Kconfig
+
+
endmenu
-Index: linux-2.6.22/drivers/i2c/busses/Makefile
+Index: linux-2.6.24/drivers/i2c/busses/Makefile
===================================================================
---- linux-2.6.22.orig/drivers/i2c/busses/Makefile 2007-08-30 00:42:45.000000000 +0200
-+++ linux-2.6.22/drivers/i2c/busses/Makefile 2007-08-30 00:42:52.000000000 +0200
-@@ -52,6 +52,7 @@
+--- linux-2.6.24.orig/drivers/i2c/busses/Makefile 2010-02-07 14:53:59.000000000 +0100
++++ linux-2.6.24/drivers/i2c/busses/Makefile 2010-02-07 14:54:23.000000000 +0100
+@@ -53,6 +53,7 @@
obj-$(CONFIG_I2C_VOODOO3) += i2c-voodoo3.o
obj-$(CONFIG_SCx200_ACB) += scx200_acb.o
obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o
@@ -36,10 +36,10 @@ Index: linux-2.6.22/drivers/i2c/busses/Makefile
ifeq ($(CONFIG_I2C_DEBUG_BUS),y)
EXTRA_CFLAGS += -DDEBUG
-Index: linux-2.6.22/drivers/i2c/busses/i2c-ep93xx.c
+Index: linux-2.6.24/drivers/i2c/busses/i2c-ep93xx.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/i2c/busses/i2c-ep93xx.c 2007-08-30 00:42:52.000000000 +0200
++++ linux-2.6.24/drivers/i2c/busses/i2c-ep93xx.c 2010-02-07 14:54:23.000000000 +0100
@@ -0,0 +1,159 @@
+/*
+ * EP93XX I2C bus driver.
@@ -200,10 +200,10 @@ Index: linux-2.6.22/drivers/i2c/busses/i2c-ep93xx.c
+MODULE_AUTHOR("Lennert Buytenhek <buytenh@wantstofly.org>");
+MODULE_DESCRIPTION("GPIO-based I2C adapter for EP93XX systems");
+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/include/asm-arm/arch-ep93xx/platform.h
+Index: linux-2.6.24/include/asm-arm/arch-ep93xx/platform.h
===================================================================
---- linux-2.6.22.orig/include/asm-arm/arch-ep93xx/platform.h 2007-08-30 00:42:45.000000000 +0200
-+++ linux-2.6.22/include/asm-arm/arch-ep93xx/platform.h 2007-08-30 00:42:52.000000000 +0200
+--- linux-2.6.24.orig/include/asm-arm/arch-ep93xx/platform.h 2010-02-07 14:53:59.000000000 +0100
++++ linux-2.6.24/include/asm-arm/arch-ep93xx/platform.h 2010-02-07 14:54:23.000000000 +0100
@@ -16,5 +16,13 @@
unsigned char phy_id;
};
diff --git a/recipes/linux/linux-2.6.24/ts72xx/ep93xx-maverick-uniqid.patch b/recipes/linux/linux-2.6.24/ts72xx/ep93xx-maverick-uniqid.patch
index fb6c8cfe18..857a0194cf 100644
--- a/recipes/linux/linux-2.6.24/ts72xx/ep93xx-maverick-uniqid.patch
+++ b/recipes/linux/linux-2.6.24/ts72xx/ep93xx-maverick-uniqid.patch
@@ -3,11 +3,11 @@ Adds support for SoC's unique ID (Maverick Key) in /proc/cpuinfo
Signed-off-by: Petr Stetiar <ynezz@true.cz>
-Index: linux-2.6.22/arch/arm/kernel/setup.c
+Index: linux-2.6.24/arch/arm/kernel/setup.c
===================================================================
---- linux-2.6.22.orig/arch/arm/kernel/setup.c 2007-09-02 23:08:51.000000000 +0200
-+++ linux-2.6.22/arch/arm/kernel/setup.c 2007-09-02 23:10:24.000000000 +0200
-@@ -959,8 +959,15 @@
+--- linux-2.6.24.orig/arch/arm/kernel/setup.c 2010-02-07 14:53:58.000000000 +0100
++++ linux-2.6.24/arch/arm/kernel/setup.c 2010-02-07 14:54:35.000000000 +0100
+@@ -1007,8 +1007,15 @@
seq_printf(m, "Hardware\t: %s\n", machine_name);
seq_printf(m, "Revision\t: %04x\n", system_rev);
@@ -23,10 +23,10 @@ Index: linux-2.6.22/arch/arm/kernel/setup.c
return 0;
}
-Index: linux-2.6.22/include/asm-arm/arch-ep93xx/ep93xx-regs.h
+Index: linux-2.6.24/include/asm-arm/arch-ep93xx/ep93xx-regs.h
===================================================================
---- linux-2.6.22.orig/include/asm-arm/arch-ep93xx/ep93xx-regs.h 2007-09-02 23:06:45.000000000 +0200
-+++ linux-2.6.22/include/asm-arm/arch-ep93xx/ep93xx-regs.h 2007-09-02 23:08:34.000000000 +0200
+--- linux-2.6.24.orig/include/asm-arm/arch-ep93xx/ep93xx-regs.h 2010-02-07 14:54:29.000000000 +0100
++++ linux-2.6.24/include/asm-arm/arch-ep93xx/ep93xx-regs.h 2010-02-07 14:54:35.000000000 +0100
@@ -70,6 +70,8 @@
#define EP93XX_I2S_BASE (EP93XX_APB_VIRT_BASE + 0x00020000)
diff --git a/recipes/linux/linux-2.6.24/ts72xx/ts72xx-machine-id-fix.patch b/recipes/linux/linux-2.6.24/ts72xx/ts72xx-machine-id-fix.patch
index 64c38398db..0b01e9c3a1 100644
--- a/recipes/linux/linux-2.6.24/ts72xx/ts72xx-machine-id-fix.patch
+++ b/recipes/linux/linux-2.6.24/ts72xx/ts72xx-machine-id-fix.patch
@@ -3,11 +3,11 @@ Fix wrong machine ID passed from RedBoot
Signed-off-by: Petr Stetiar <ynezz@true.cz>
-Index: linux-2.6.22/arch/arm/kernel/head.S
+Index: linux-2.6.24/arch/arm/kernel/head.S
===================================================================
---- linux-2.6.22.orig/arch/arm/kernel/head.S 2007-08-30 00:42:45.000000000 +0200
-+++ linux-2.6.22/arch/arm/kernel/head.S 2007-08-30 00:43:13.000000000 +0200
-@@ -82,6 +82,7 @@
+--- linux-2.6.24.orig/arch/arm/kernel/head.S 2010-02-07 14:53:58.000000000 +0100
++++ linux-2.6.24/arch/arm/kernel/head.S 2010-02-07 14:54:39.000000000 +0100
+@@ -86,6 +86,7 @@
bl __lookup_processor_type @ r5=procinfo r9=cpuid
movs r10, r5 @ invalid processor (r5=0)?
beq __error_p @ yes, error 'p'
diff --git a/recipes/linux/linux-2.6.24/ts72xx/ts72xx-rs485.patch b/recipes/linux/linux-2.6.24/ts72xx/ts72xx-rs485.patch
index 17ee397f45..dbc0ede258 100644
--- a/recipes/linux/linux-2.6.24/ts72xx/ts72xx-rs485.patch
+++ b/recipes/linux/linux-2.6.24/ts72xx/ts72xx-rs485.patch
@@ -2,19 +2,19 @@ RS485 auto mode support ported from 2.4 (diff against 2.6.19-rc6-git10)
Signed-off-by: Petr Stetiar <ynezz@true.cz>
-diff --git a/drivers/serial/amba-pl010.c b/drivers/serial/amba-pl010.c
-index 4213fab..5b3c5ff 100644
---- a/drivers/serial/amba-pl010.c
-+++ b/drivers/serial/amba-pl010.c
-@@ -50,6 +50,7 @@
- #include <linux/amba/serial.h>
+Index: linux-2.6.24/drivers/serial/amba-pl010.c
+===================================================================
+--- linux-2.6.24.orig/drivers/serial/amba-pl010.c 2008-01-24 23:58:37.000000000 +0100
++++ linux-2.6.24/drivers/serial/amba-pl010.c 2010-02-07 18:17:40.000000000 +0100
+@@ -51,6 +51,7 @@
+ #include <linux/clk.h>
#include <asm/io.h>
+#include <asm/hardware.h>
#define UART_NR 8
-@@ -65,6 +66,11 @@
+@@ -66,6 +67,16 @@
#define UART_DUMMY_RSR_RX 256
#define UART_PORT_SIZE 64
@@ -23,10 +23,15 @@ index 4213fab..5b3c5ff 100644
+static void __iomem *ts_rs485_control_register;
+#endif
+
++#ifdef CONFIG_MACH_TS72XX
++static void __iomem *ts_rs485_data9_register;
++static void __iomem *ts_rs485_control_register;
++#endif
++
/*
* We wrap our port structure around the generic uart_port.
*/
-@@ -487,6 +493,107 @@ static int pl010_verify_port(struct uart
+@@ -521,6 +532,107 @@
return ret;
}
@@ -134,7 +139,7 @@ index 4213fab..5b3c5ff 100644
static struct uart_ops amba_pl010_pops = {
.tx_empty = pl010_tx_empty,
.set_mctrl = pl010_set_mctrl,
-@@ -504,6 +611,7 @@ static struct uart_ops amba_pl010_pops =
+@@ -538,6 +650,7 @@
.request_port = pl010_request_port,
.config_port = pl010_config_port,
.verify_port = pl010_verify_port,
@@ -142,7 +147,7 @@ index 4213fab..5b3c5ff 100644
};
static struct uart_amba_port *amba_ports[UART_NR];
-@@ -746,6 +854,15 @@ static int __init pl010_init(void)
+@@ -796,6 +909,15 @@
ret = uart_register_driver(&amba_reg);
if (ret == 0) {
ret = amba_driver_register(&pl010_driver);
@@ -158,7 +163,7 @@ index 4213fab..5b3c5ff 100644
if (ret)
uart_unregister_driver(&amba_reg);
}
-@@ -756,6 +873,10 @@ static void __exit pl010_exit(void)
+@@ -806,6 +928,10 @@
{
amba_driver_unregister(&pl010_driver);
uart_unregister_driver(&amba_reg);
@@ -169,13 +174,13 @@ index 4213fab..5b3c5ff 100644
}
module_init(pl010_init);
-diff --git a/include/asm-arm/arch-ep93xx/ts72xx.h b/include/asm-arm/arch-ep93xx/ts72xx.h
-index a94f63f..4c9396b 100644
---- a/include/asm-arm/arch-ep93xx/ts72xx.h
-+++ b/include/asm-arm/arch-ep93xx/ts72xx.h
-@@ -68,6 +68,16 @@
- #define TS72XX_RTC_DATA_PHYS_BASE 0x11700000
- #define TS72XX_RTC_DATA_SIZE 0x00001000
+Index: linux-2.6.24/include/asm-arm/arch-ep93xx/ts72xx.h
+===================================================================
+--- linux-2.6.24.orig/include/asm-arm/arch-ep93xx/ts72xx.h 2010-02-07 18:03:02.000000000 +0100
++++ linux-2.6.24/include/asm-arm/arch-ep93xx/ts72xx.h 2010-02-07 18:03:02.000000000 +0100
+@@ -59,6 +59,16 @@
+ #define TS72XX_NAND_BUSY_VIRT_BASE 0xfebfa000
+ #define TS72XX_NAND_BUSY_SIZE 0x00001000
+#define TS72XX_RS485_CONTROL_PHYS_BASE 0x22C00000
+#define TS72XX_RS485_DATA9_PHYS_BASE 0x23000000
@@ -188,211 +193,9 @@ index a94f63f..4c9396b 100644
+#define TS72XX_RS485_MODE_57600_HD 0x06
+#define TS72XX_RS485_MODE_115200_HD 0x07
- #ifndef __ASSEMBLY__
- #include <asm/io.h>
-@@ -87,6 +100,12 @@ static inline int board_is_ts7260(void)
- return __raw_readb(TS72XX_MODEL_VIRT_BASE) == TS72XX_MODEL_TS7260;
- }
-
-+static inline int is_rs485_installed(void)
-+{
-+ return !!(__raw_readb(TS72XX_OPTIONS_VIRT_BASE) &
-+ TS72XX_OPTIONS_COM2_RS485);
-+}
-+
- static inline int is_max197_installed(void)
- {
- return !!(__raw_readb(TS72XX_OPTIONS_VIRT_BASE) &
-diff --git a/include/asm-arm/ioctls.h b/include/asm-arm/ioctls.h
-index bb9a7aa..4d7dad1 100644
---- a/include/asm-arm/ioctls.h
-+++ b/include/asm-arm/ioctls.h
-@@ -66,6 +66,9 @@
- #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
- #define FIOQSIZE 0x545E
-
-+#define TIOC_SBCC485 0x545F /* TS72xx RTS/485 mode clear */
-+#define TIOC_SBCS485 0x5460 /* TS72xx RTS/485 mode set */
-+
- /* Used for packet mode */
- #define TIOCPKT_DATA 0
- #define TIOCPKT_FLUSHREAD 1
-RS485 auto mode support ported from 2.4 (diff against 2.6.19-rc6-git10)
-
-Signed-off-by: Petr Stetiar <ynezz@true.cz>
-
-diff --git a/drivers/serial/amba-pl010.c b/drivers/serial/amba-pl010.c
-index 4213fab..5b3c5ff 100644
---- a/drivers/serial/amba-pl010.c
-+++ b/drivers/serial/amba-pl010.c
-@@ -50,6 +50,7 @@
- #include <linux/amba/serial.h>
-
- #include <asm/io.h>
-+#include <asm/hardware.h>
-
- #define UART_NR 8
-
-@@ -65,6 +66,11 @@
- #define UART_DUMMY_RSR_RX 256
- #define UART_PORT_SIZE 64
-
-+#ifdef CONFIG_MACH_TS72XX
-+static void __iomem *ts_rs485_data9_register;
-+static void __iomem *ts_rs485_control_register;
-+#endif
-+
- /*
- * We wrap our port structure around the generic uart_port.
- */
-@@ -487,6 +493,107 @@ static int pl010_verify_port(struct uart
- return ret;
- }
-
-+#ifdef CONFIG_MACH_TS72XX
-+static int ts72xx_rs485_init(void)
-+{
-+ ts_rs485_data9_register = ioremap(TS72XX_RS485_DATA9_PHYS_BASE, 4096);
-+ if (ts_rs485_data9_register == NULL) {
-+ return -1;
-+ }
-+
-+ ts_rs485_control_register = ioremap(TS72XX_RS485_CONTROL_PHYS_BASE, 4096);
-+ if (ts_rs485_control_register == NULL) {
-+ iounmap(ts_rs485_data9_register);
-+ return -1;
-+ }
-+
-+ return 0;
-+}
-+
-+static int ts72xx_auto485(struct uart_port *port, unsigned int cmd, unsigned long *arg)
-+{
-+ int baud, cflag, mode;
-+ int datalength;
-+
-+ mode = (int)*arg;
-+ if (!is_rs485_installed()) {
-+ printk("amba-pl010.c: this board does not support RS485 auto mode\n");
-+ return -EINVAL;
-+ }
-+
-+ if (port->line != 1) {
-+ printk("amba-pl010.c: auto RS485 mode is only supported on second port (/dev/ttyAM1)\n");
-+ return -EINVAL;
-+ }
-+
-+ datalength = 8;
-+ cflag = port->info->tty->termios->c_cflag ;
-+ if (cflag & PARENB)
-+ datalength++;
-+
-+ if (cflag & CSTOPB)
-+ datalength++;
-+
-+ baud = tty_get_baud_rate(port->info->tty);
-+
-+ switch (cmd) {
-+ case TIOC_SBCC485:
-+ if ((mode & TS72XX_RS485_AUTO485FD) || (mode & TS72XX_RS485_AUTO485HD)) {
-+ printk("amba-pl010.c: unsetting auto RS485 mode\n");
-+ __raw_writew(TS72XX_RS485_MODE_RS232, ts_rs485_control_register);
-+ __raw_writew(TS72XX_RS485_MODE_RS232, ts_rs485_data9_register);
-+ }
-+ break;
-+ case TIOC_SBCS485:
-+ if (mode & TS72XX_RS485_AUTO485FD) {
-+ printk ("amba-pl010.c: setting FULL duplex auto RS485 mode\n");
-+ __raw_writew(TS72XX_RS485_MODE_FD, ts_rs485_control_register);
-+ if (datalength > 8)
-+ __raw_writew(TS72XX_RS485_MODE_FD, ts_rs485_data9_register);
-+ } else if (mode & TS72XX_RS485_AUTO485HD) {
-+ printk("amba-pl010.c: setting HALF DUPLEX auto RS485 mode\n");
-+ switch (baud) {
-+ case 9600:
-+ __raw_writew(TS72XX_RS485_MODE_9600_HD, ts_rs485_control_register);
-+ break;
-+ case 19200:
-+ __raw_writew(TS72XX_RS485_MODE_19200_HD, ts_rs485_control_register);
-+ break;
-+ case 57600:
-+ __raw_writew(TS72XX_RS485_MODE_57600_HD, ts_rs485_control_register);
-+ break;
-+ case 115200:
-+ __raw_writew(TS72XX_RS485_MODE_115200_HD, ts_rs485_control_register);
-+ break;
-+ default:
-+ printk("amba-pl010.c: %d baud rate is not supported for auto RS485 mode\n", baud);
-+ return -1;
-+ }
-+ if (datalength > 8)
-+ __raw_writew(TS72XX_RS485_MODE_FD, ts_rs485_data9_register);
-+ }
-+ break;
-+ }
-+
-+ return 0;
-+}
-+#endif
-+
-+int pl010_ioctl(struct uart_port *port, unsigned int cmd, unsigned long arg)
-+{
-+#ifdef CONFIG_MACH_TS72XX
-+ switch (cmd) {
-+ case TIOC_SBCC485:
-+ case TIOC_SBCS485:
-+ return ts72xx_auto485(port, cmd, (unsigned long *)arg);
-+ break;
-+ default:
-+ return -ENOIOCTLCMD;
-+ }
-+#endif
-+ return -ENOIOCTLCMD;
-+}
-+
- static struct uart_ops amba_pl010_pops = {
- .tx_empty = pl010_tx_empty,
- .set_mctrl = pl010_set_mctrl,
-@@ -504,6 +611,7 @@ static struct uart_ops amba_pl010_pops =
- .request_port = pl010_request_port,
- .config_port = pl010_config_port,
- .verify_port = pl010_verify_port,
-+ .ioctl = pl010_ioctl,
- };
-
- static struct uart_amba_port *amba_ports[UART_NR];
-@@ -746,6 +854,15 @@ static int __init pl010_init(void)
- ret = uart_register_driver(&amba_reg);
- if (ret == 0) {
- ret = amba_driver_register(&pl010_driver);
-+#ifdef CONFIG_MACH_TS72XX
-+ if (!ret && is_rs485_installed()) {
-+ ret = ts72xx_rs485_init();
-+ if (ret)
-+ printk("amba-pl010.c: ts72xx_rs485_init() failed\n");
-+ else
-+ printk("amba-pl010.c: auto RS485 mode initialized\n");
-+ }
-+#endif
- if (ret)
- uart_unregister_driver(&amba_reg);
- }
-@@ -756,6 +873,10 @@ static void __exit pl010_exit(void)
- {
- amba_driver_unregister(&pl010_driver);
- uart_unregister_driver(&amba_reg);
-+#ifdef CONFIG_MACH_TS72XX
-+ iounmap(ts_rs485_data9_register);
-+ iounmap(ts_rs485_control_register);
-+#endif
- }
-
- module_init(pl010_init);
-diff --git a/include/asm-arm/arch-ep93xx/ts72xx.h b/include/asm-arm/arch-ep93xx/ts72xx.h
-index a94f63f..4c9396b 100644
---- a/include/asm-arm/arch-ep93xx/ts72xx.h
-+++ b/include/asm-arm/arch-ep93xx/ts72xx.h
-@@ -68,6 +68,16 @@
+ #define TS72XX_RTC_INDEX_VIRT_BASE 0xfebf9000
+ #define TS72XX_RTC_INDEX_PHYS_BASE 0x10800000
+@@ -68,6 +78,16 @@
#define TS72XX_RTC_DATA_PHYS_BASE 0x11700000
#define TS72XX_RTC_DATA_SIZE 0x00001000
@@ -407,9 +210,9 @@ index a94f63f..4c9396b 100644
+#define TS72XX_RS485_MODE_57600_HD 0x06
+#define TS72XX_RS485_MODE_115200_HD 0x07
- #ifndef __ASSEMBLY__
- #include <asm/io.h>
-@@ -87,6 +100,12 @@ static inline int board_is_ts7260(void)
+ #define TS72XX_WATCHDOG_CONTROL_PHYS_BASE 0x23800000
+ #define TS72XX_WATCHDOG_FEED_PHYS_BASE 0x23c00000
+@@ -90,6 +110,12 @@
return __raw_readb(TS72XX_MODEL_VIRT_BASE) == TS72XX_MODEL_TS7260;
}
@@ -422,17 +225,20 @@ index a94f63f..4c9396b 100644
static inline int is_max197_installed(void)
{
return !!(__raw_readb(TS72XX_OPTIONS_VIRT_BASE) &
-diff --git a/include/asm-arm/ioctls.h b/include/asm-arm/ioctls.h
-index bb9a7aa..4d7dad1 100644
---- a/include/asm-arm/ioctls.h
-+++ b/include/asm-arm/ioctls.h
-@@ -66,6 +66,9 @@
+Index: linux-2.6.24/include/asm-arm/ioctls.h
+===================================================================
+--- linux-2.6.24.orig/include/asm-arm/ioctls.h 2008-01-24 23:58:37.000000000 +0100
++++ linux-2.6.24/include/asm-arm/ioctls.h 2010-02-07 18:03:02.000000000 +0100
+@@ -70,6 +70,12 @@
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
#define FIOQSIZE 0x545E
+#define TIOC_SBCC485 0x545F /* TS72xx RTS/485 mode clear */
+#define TIOC_SBCS485 0x5460 /* TS72xx RTS/485 mode set */
+
++#define TIOC_SBCC485 0x545F /* TS72xx RTS/485 mode clear */
++#define TIOC_SBCS485 0x5460 /* TS72xx RTS/485 mode set */
++
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0001-TS72xx-update-memory-map-comments.patch b/recipes/linux/linux-2.6.27/ts72xx/0001-TS72xx-update-memory-map-comments.patch
new file mode 100644
index 0000000000..3eab1ca0d7
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0001-TS72xx-update-memory-map-comments.patch
@@ -0,0 +1,45 @@
+From dd631acb622a6c7c6355945c446bd07085ade99f Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 14:02:33 +0100
+Subject: [PATCH] TS72xx update memory map comments
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/include/mach/ts72xx.h | 13 ++++++++++++-
+ 1 files changed, 12 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx.h b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+index 30b318a..99c4e48 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ts72xx.h
++++ b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+@@ -8,12 +8,23 @@
+ * virt phys size
+ * febff000 22000000 4K model number register
+ * febfe000 22400000 4K options register
+- * febfd000 22800000 4K options register #2
++ * febfd000 22800000 4K options register #2 (JP6 and TS-9420 flags)
+ * febfc000 [67]0000000 4K NAND data register
+ * febfb000 [67]0400000 4K NAND control register
+ * febfa000 [67]0800000 4K NAND busy register
+ * febf9000 10800000 4K TS-5620 RTC index register
+ * febf8000 11700000 4K TS-5620 RTC data register
++ * febf7000 23800000 4K CPLD watchdog (control register)
++ * febf6000 23c00000 4K CPLD watchdog (feed register)
++ * febf5000 23400000 4K PLD version (3 bits)
++ * febf4000 22c00000 4K RS-485 control register
++ * febf3000 23000000 4K RS-485 mode register
++ * febf2000 10800000 4K jumpers/max197 busy bit/COM1 dcd register (8-bit, read only)
++ * febf1000 10f00000 4K max197 sample/control register (16-bit read/8-bit write)
++ * febf0000 11e00000 4K PC/104 8-bit I/O
++ * febef000 21e00000 4K PC/104 16-bit I/O
++ * fea00000 11a00000 1MB PC/104 8-bit memory
++ * fe900000 21a00000 1MB PC/104 16-bit memory
+ */
+
+ #define TS72XX_MODEL_PHYS_BASE 0x22000000
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0002-GPIO-fix.patch b/recipes/linux/linux-2.6.27/ts72xx/0002-GPIO-fix.patch
new file mode 100644
index 0000000000..006321efd5
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0002-GPIO-fix.patch
@@ -0,0 +1,47 @@
+From 9c7b38ef5e6843521c71eadefdba8cfa0aa607b4 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 00:41:38 +0100
+Subject: [PATCH] GPIO fix
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/core.c | 2 +-
+ arch/arm/mach-ep93xx/gpio.c | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
+index f99f436..d6967de 100644
+--- a/arch/arm/mach-ep93xx/core.c
++++ b/arch/arm/mach-ep93xx/core.c
+@@ -157,7 +157,7 @@ static unsigned char gpio_int_type2[3];
+ static const u8 int_type1_register_offset[3] = { 0x90, 0xac, 0x4c };
+ static const u8 int_type2_register_offset[3] = { 0x94, 0xb0, 0x50 };
+ static const u8 eoi_register_offset[3] = { 0x98, 0xb4, 0x54 };
+-static const u8 int_en_register_offset[3] = { 0x9c, 0xb8, 0x5c };
++static const u8 int_en_register_offset[3] = { 0x9c, 0xb8, 0x58 };
+
+ void ep93xx_gpio_update_int_params(unsigned port)
+ {
+diff --git a/arch/arm/mach-ep93xx/gpio.c b/arch/arm/mach-ep93xx/gpio.c
+index 0f3fb87..468d523 100644
+--- a/arch/arm/mach-ep93xx/gpio.c
++++ b/arch/arm/mach-ep93xx/gpio.c
+@@ -141,10 +141,10 @@ static void ep93xx_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
+ static struct ep93xx_gpio_chip ep93xx_gpio_banks[] = {
+ EP93XX_GPIO_BANK("A", 0x00, 0x10, 0),
+ EP93XX_GPIO_BANK("B", 0x04, 0x14, 8),
+- EP93XX_GPIO_BANK("C", 0x30, 0x34, 40),
++ EP93XX_GPIO_BANK("C", 0x08, 0x18, 40),
+ EP93XX_GPIO_BANK("D", 0x0c, 0x1c, 24),
+ EP93XX_GPIO_BANK("E", 0x20, 0x24, 32),
+- EP93XX_GPIO_BANK("F", 0x08, 0x18, 16),
++ EP93XX_GPIO_BANK("F", 0x30, 0x34, 16),
+ EP93XX_GPIO_BANK("G", 0x38, 0x3c, 48),
+ EP93XX_GPIO_BANK("H", 0x40, 0x44, 56),
+ };
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0003-Debounce-IRQ.patch b/recipes/linux/linux-2.6.27/ts72xx/0003-Debounce-IRQ.patch
new file mode 100644
index 0000000000..21410ab7f0
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0003-Debounce-IRQ.patch
@@ -0,0 +1,97 @@
+From 51bba77f0953f87a88a8fce9fb8827bdba57a2c5 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 00:42:43 +0100
+Subject: [PATCH] Debounce IRQ
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/core.c | 18 ++++++++++++++++++
+ arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h | 3 +++
+ arch/arm/mach-ep93xx/include/mach/gpio.h | 2 ++
+ 3 files changed, 23 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
+index d6967de..1928c93 100644
+--- a/arch/arm/mach-ep93xx/core.c
++++ b/arch/arm/mach-ep93xx/core.c
+@@ -152,12 +152,14 @@ static unsigned char gpio_int_unmasked[3];
+ static unsigned char gpio_int_enabled[3];
+ static unsigned char gpio_int_type1[3];
+ static unsigned char gpio_int_type2[3];
++static unsigned char gpio_int_debouce[3];
+
+ /* Port ordering is: A B F */
+ static const u8 int_type1_register_offset[3] = { 0x90, 0xac, 0x4c };
+ static const u8 int_type2_register_offset[3] = { 0x94, 0xb0, 0x50 };
+ static const u8 eoi_register_offset[3] = { 0x98, 0xb4, 0x54 };
+ static const u8 int_en_register_offset[3] = { 0x9c, 0xb8, 0x58 };
++static const u8 int_debounce_register_offset[3] = { 0xa8, 0xc4, 0x64 };
+
+ void ep93xx_gpio_update_int_params(unsigned port)
+ {
+@@ -180,6 +182,22 @@ void ep93xx_gpio_int_mask(unsigned line)
+ gpio_int_unmasked[line >> 3] &= ~(1 << (line & 7));
+ }
+
++void ep93xx_gpio_int_debounce(unsigned int irq, int enable)
++{
++ int line = irq_to_gpio(irq);
++ int port = line >> 3;
++ int port_mask = 1 << (line & 7);
++
++ if (enable)
++ gpio_int_debouce[port] |= port_mask;
++ else
++ gpio_int_debouce[port] &= ~port_mask;
++
++ __raw_writeb(gpio_int_debouce[port],
++ EP93XX_GPIO_REG(int_debounce_register_offset[port]));
++}
++EXPORT_SYMBOL(ep93xx_gpio_int_debounce);
++
+ /*************************************************************************
+ * EP93xx IRQ handling
+ *************************************************************************/
+diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+index 9f4458c..5582138 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
++++ b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+@@ -78,16 +78,19 @@
+ #define EP93XX_GPIO_F_INT_ACK EP93XX_GPIO_REG(0x54)
+ #define EP93XX_GPIO_F_INT_ENABLE EP93XX_GPIO_REG(0x58)
+ #define EP93XX_GPIO_F_INT_STATUS EP93XX_GPIO_REG(0x5c)
++#define EP93XX_GPIO_F_INT_DEBOUNCE EP93XX_GPIO_REG(0x64)
+ #define EP93XX_GPIO_A_INT_TYPE1 EP93XX_GPIO_REG(0x90)
+ #define EP93XX_GPIO_A_INT_TYPE2 EP93XX_GPIO_REG(0x94)
+ #define EP93XX_GPIO_A_INT_ACK EP93XX_GPIO_REG(0x98)
+ #define EP93XX_GPIO_A_INT_ENABLE EP93XX_GPIO_REG(0x9c)
+ #define EP93XX_GPIO_A_INT_STATUS EP93XX_GPIO_REG(0xa0)
++#define EP93XX_GPIO_A_INT_DEBOUNCE EP93XX_GPIO_REG(0xa8)
+ #define EP93XX_GPIO_B_INT_TYPE1 EP93XX_GPIO_REG(0xac)
+ #define EP93XX_GPIO_B_INT_TYPE2 EP93XX_GPIO_REG(0xb0)
+ #define EP93XX_GPIO_B_INT_ACK EP93XX_GPIO_REG(0xb4)
+ #define EP93XX_GPIO_B_INT_ENABLE EP93XX_GPIO_REG(0xb8)
+ #define EP93XX_GPIO_B_INT_STATUS EP93XX_GPIO_REG(0xbc)
++#define EP93XX_GPIO_B_INT_DEBOUNCE EP93XX_GPIO_REG(0xc4)
+
+ #define EP93XX_AAC_BASE (EP93XX_APB_VIRT_BASE + 0x00080000)
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/gpio.h b/arch/arm/mach-ep93xx/include/mach/gpio.h
+index f702041..0a1498a 100644
+--- a/arch/arm/mach-ep93xx/include/mach/gpio.h
++++ b/arch/arm/mach-ep93xx/include/mach/gpio.h
+@@ -99,6 +99,8 @@
+ /* maximum value for irq capable line identifiers */
+ #define EP93XX_GPIO_LINE_MAX_IRQ EP93XX_GPIO_LINE_F(7)
+
++extern void ep93xx_gpio_int_debounce(unsigned int irq, int enable);
++
+ /* new generic GPIO API - see Documentation/gpio.txt */
+
+ #include <asm-generic/gpio.h>
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0004-OHCI-fix.patch b/recipes/linux/linux-2.6.27/ts72xx/0004-OHCI-fix.patch
new file mode 100644
index 0000000000..1482e2dddf
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0004-OHCI-fix.patch
@@ -0,0 +1,39 @@
+From 06e0fdf41288a6d54b821671593195ea27deba8b Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 00:54:35 +0100
+Subject: [PATCH] OHCI fix
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/core.c | 5 +++--
+ 1 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
+index 1928c93..24b24c7 100644
+--- a/arch/arm/mach-ep93xx/core.c
++++ b/arch/arm/mach-ep93xx/core.c
+@@ -32,6 +32,7 @@
+ #include <linux/termios.h>
+ #include <linux/amba/bus.h>
+ #include <linux/amba/serial.h>
++#include <linux/dma-mapping.h>
+
+ #include <asm/types.h>
+ #include <asm/setup.h>
+@@ -472,8 +473,8 @@ static struct platform_device ep93xx_ohci_device = {
+ .name = "ep93xx-ohci",
+ .id = -1,
+ .dev = {
+- .dma_mask = (void *)0xffffffff,
+- .coherent_dma_mask = 0xffffffff,
++ .dma_mask = &ep93xx_ohci_device.dev.coherent_dma_mask,
++ .coherent_dma_mask = DMA_BIT_MASK(32),
+ },
+ .num_resources = ARRAY_SIZE(ep93xx_ohci_resources),
+ .resource = ep93xx_ohci_resources,
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0005-Fix-wrong-machine-ID-passed-from-RedBoot.patch b/recipes/linux/linux-2.6.27/ts72xx/0005-Fix-wrong-machine-ID-passed-from-RedBoot.patch
new file mode 100644
index 0000000000..e17f945ef6
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0005-Fix-wrong-machine-ID-passed-from-RedBoot.patch
@@ -0,0 +1,28 @@
+From 22ce7d90cb3c58be44ebb0fcb3f1f5ca8af83d59 Mon Sep 17 00:00:00 2001
+From: =?utf-8?q?Petr=20=C5=A0tetiar?= <ynezz@true.cz>
+Date: Sat, 3 Jan 2009 21:33:53 +0100
+Subject: [PATCH] Fix wrong machine ID passed from RedBoot
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/kernel/head.S | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
+index bff4c6e..bda4eb4 100644
+--- a/arch/arm/kernel/head.S
++++ b/arch/arm/kernel/head.S
+@@ -83,6 +83,7 @@ ENTRY(stext)
+ bl __lookup_processor_type @ r5=procinfo r9=cpuid
+ movs r10, r5 @ invalid processor (r5=0)?
+ beq __error_p @ yes, error 'p'
++ ldr r1, =0x000002a1 @ mach-type = TS-7250
+ bl __lookup_machine_type @ r5=machinfo
+ movs r8, r5 @ invalid machine (r5=0)?
+ beq __error_a @ yes, error 'a'
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0006-Force-the-nF-bit-on.patch b/recipes/linux/linux-2.6.27/ts72xx/0006-Force-the-nF-bit-on.patch
new file mode 100644
index 0000000000..db96acc060
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0006-Force-the-nF-bit-on.patch
@@ -0,0 +1,33 @@
+From 9852d9654b25b396cf5f31de376a2c211805db8b Mon Sep 17 00:00:00 2001
+From: =?utf-8?q?Petr=20=C5=A0tetiar?= <ynezz@true.cz>
+Date: Sat, 3 Jan 2009 21:35:03 +0100
+Subject: [PATCH] Force the nF bit on
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Usually this is set by the bootrom. If it is not set, then the CPU core will
+run from HCLK instead of FCLK, and performance will suffer. If you see
+BogoMIPS of about 1/4 of your CPU clock, try turning this on; your performance
+should double.
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mm/proc-arm920.S | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S
+index 28cdb06..12f59db 100644
+--- a/arch/arm/mm/proc-arm920.S
++++ b/arch/arm/mm/proc-arm920.S
+@@ -395,6 +395,7 @@ __arm920_setup:
+ mrc p15, 0, r0, c1, c0 @ get control register v4
+ bic r0, r0, r5
+ orr r0, r0, r6
++ orr r0, r0, #0x40000000
+ mov pc, lr
+ .size __arm920_setup, . - __arm920_setup
+
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0007-Use-CPLD-watchdog-to-reset.patch b/recipes/linux/linux-2.6.27/ts72xx/0007-Use-CPLD-watchdog-to-reset.patch
new file mode 100644
index 0000000000..c2fbd5c407
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0007-Use-CPLD-watchdog-to-reset.patch
@@ -0,0 +1,54 @@
+From fca24d7cd93b7282d139cb91c0f4d62b1a95a985 Mon Sep 17 00:00:00 2001
+From: =?utf-8?q?Petr=20=C5=A0tetiar?= <ynezz@true.cz>
+Date: Sat, 3 Jan 2009 21:36:36 +0100
+Subject: [PATCH] Use CPLD watchdog to reset
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Use CPLD watchdog to reset the machine instead of buggy ep93xx one, which
+sometimes get stuck...
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/include/mach/system.h | 17 ++++++++++++-----
+ 1 files changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/system.h b/arch/arm/mach-ep93xx/include/mach/system.h
+index 67789d0..5d85094 100644
+--- a/arch/arm/mach-ep93xx/include/mach/system.h
++++ b/arch/arm/mach-ep93xx/include/mach/system.h
+@@ -3,6 +3,7 @@
+ */
+
+ #include <mach/hardware.h>
++#include <asm/mach-types.h>
+
+ static inline void arch_idle(void)
+ {
+@@ -15,11 +16,17 @@ static inline void arch_reset(char mode)
+
+ local_irq_disable();
+
+- devicecfg = __raw_readl(EP93XX_SYSCON_DEVICE_CONFIG);
+- __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
+- __raw_writel(devicecfg | 0x80000000, EP93XX_SYSCON_DEVICE_CONFIG);
+- __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
+- __raw_writel(devicecfg & ~0x80000000, EP93XX_SYSCON_DEVICE_CONFIG);
++ if (machine_is_ts72xx()) {
++ __raw_writeb(0x5, TS72XX_WATCHDOG_FEED_PHYS_BASE);
++ __raw_writeb(0x1, TS72XX_WATCHDOG_CONTROL_PHYS_BASE);
++ } else {
++ devicecfg = __raw_readl(EP93XX_SYSCON_DEVICE_CONFIG);
++ __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
++ __raw_writel(devicecfg | 0x80000000, EP93XX_SYSCON_DEVICE_CONFIG);
++ __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
++ __raw_writel(devicecfg & ~0x80000000, EP93XX_SYSCON_DEVICE_CONFIG);
++ }
++
+
+ while (1)
+ ;
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0008-Fix-UART-clocks.patch b/recipes/linux/linux-2.6.27/ts72xx/0008-Fix-UART-clocks.patch
new file mode 100644
index 0000000000..43848478f8
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0008-Fix-UART-clocks.patch
@@ -0,0 +1,99 @@
+From 1a86fa006baad26dcb70645e9d2a965f956a7189 Mon Sep 17 00:00:00 2001
+From: Lennert Buytenhek <buytenh@wantstofly.org>
+Date: Sat, 3 Jan 2009 21:51:11 +0100
+Subject: [PATCH] Fix UART clocks
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Hackishly enable all UART clocks before uncompressing the kernel,
+so that using ttyAM1 or ttyAM2 as console can work. Force UARTBAUD
+on before uncompressing.
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/include/mach/uncompress.h | 65 ++++++++++++++++++++++++
+ 1 files changed, 65 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/uncompress.h b/arch/arm/mach-ep93xx/include/mach/uncompress.h
+index 1fd2f17..ecdfd64 100644
+--- a/arch/arm/mach-ep93xx/include/mach/uncompress.h
++++ b/arch/arm/mach-ep93xx/include/mach/uncompress.h
+@@ -77,9 +77,74 @@ static void ethernet_reset(void)
+ }
+
+
++/*
++ * We don't have clock management for the UARTs (amba-pl010)
++ * yet, so hackily enable all UART clocks here for now.
++ */
++#define PHYS_SYSCON_DEVICE_CONFIG 0x80930080
++#define PHYS_SYSCON_SWLOCK 0x809300c0
++
++static void enable_all_uart_clocks(void)
++{
++ unsigned int v;
++
++ v = __raw_readl(PHYS_SYSCON_DEVICE_CONFIG);
++ __raw_writel(0xaa, PHYS_SYSCON_SWLOCK);
++ __raw_writel(v | 0x01140000, PHYS_SYSCON_DEVICE_CONFIG);
++}
++
++
++/*
++ * Some bootloaders don't turn on the UARTBAUD bit, which means that
++ * the UARTs will be running off a divided 7.3728 MHz clock instead of
++ * the 14.7456 MHz peripheral clock when linux boots.
++ *
++ * We detect that condition here and fix it by turning on UARTBAUD, and
++ * then reprogramming the divisors on all enabled UARTs to twice what
++ * they were before we turned UARTBAUD on, to preserve the programmed
++ * baud rate.
++ */
++#define PHYS_SYSCON_CLOCK_CONTROL 0x80930004
++#define SYSCON_CLOCK_UARTBAUD 0x20000000
++#define PHYS_UART1_BASE 0x808c0000
++#define PHYS_UART2_BASE 0x808d0000
++#define PHYS_UART3_BASE 0x808e0000
++
++static void uart_divisor_times_two(unsigned int base)
++{
++ u16 divisor;
++
++ divisor = __raw_readb(base + 0x0c) << 8;
++ divisor |= __raw_readb(base + 0x10);
++ if (divisor) {
++ divisor = (2 * (divisor + 1)) - 1;
++ __raw_writeb(divisor >> 8, base + 0x0c);
++ __raw_writeb(divisor & 0xff, base + 0x10);
++ __raw_writeb(__raw_readb(base + 0x08), base + 0x08);
++ }
++}
++
++static void fix_uart_base(void)
++{
++ unsigned int v;
++
++ v = __raw_readl(PHYS_SYSCON_CLOCK_CONTROL);
++ if ((v & SYSCON_CLOCK_UARTBAUD) == 0) {
++ v |= SYSCON_CLOCK_UARTBAUD;
++ __raw_writel(v, PHYS_SYSCON_CLOCK_CONTROL);
++
++ uart_divisor_times_two(PHYS_UART1_BASE);
++ uart_divisor_times_two(PHYS_UART2_BASE);
++ uart_divisor_times_two(PHYS_UART3_BASE);
++ }
++}
++
++
+ static void arch_decomp_setup(void)
+ {
+ ethernet_reset();
++ enable_all_uart_clocks();
++ fix_uart_base();
+ }
+
+ #define arch_decomp_wdog()
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0009-CPU-info-and-board-revision.patch b/recipes/linux/linux-2.6.27/ts72xx/0009-CPU-info-and-board-revision.patch
new file mode 100644
index 0000000000..5dd360a796
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0009-CPU-info-and-board-revision.patch
@@ -0,0 +1,64 @@
+From 3f48e4dc8affb4ddfe7b1ca8f209003cfb8ac314 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sat, 3 Jan 2009 22:19:21 +0100
+Subject: [PATCH] CPU info and board revision
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Adds support for SoC's unique ID (Maverick Key) in /proc/cpuinfo and
+information about board revision.
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/kernel/setup.c | 9 +++++++++
+ arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h | 3 +++
+ 2 files changed, 12 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
+index 2ca7038..891fcf3 100644
+--- a/arch/arm/kernel/setup.c
++++ b/arch/arm/kernel/setup.c
+@@ -994,9 +994,18 @@ static int c_show(struct seq_file *m, void *v)
+ seq_puts(m, "\n");
+
+ seq_printf(m, "Hardware\t: %s\n", machine_name);
++
++#if defined(CONFIG_ARCH_EP93XX)
++#include <mach/ep93xx-regs.h>
++ seq_printf(m, "Revision\t: %04x\n",
++ *((unsigned int *)EP93XX_SYSCON_CHIPID) >> 28);
++ seq_printf(m, "Serial\t\t: %016x\n",
++ *((unsigned int *)EP93XX_SECURITY_UNIQID));
++#else
+ seq_printf(m, "Revision\t: %04x\n", system_rev);
+ seq_printf(m, "Serial\t\t: %08x%08x\n",
+ system_serial_high, system_serial_low);
++#endif
+
+ return 0;
+ }
+diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+index 5582138..e26b41b 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
++++ b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+@@ -70,6 +70,8 @@
+ #define EP93XX_I2S_BASE (EP93XX_APB_VIRT_BASE + 0x00020000)
+
+ #define EP93XX_SECURITY_BASE (EP93XX_APB_VIRT_BASE + 0x00030000)
++#define EP93XX_SECURITY_REG(x) (EP93XX_SECURITY_BASE + (x))
++#define EP93XX_SECURITY_UNIQID EP93XX_SECURITY_REG(0x2440)
+
+ #define EP93XX_GPIO_BASE (EP93XX_APB_VIRT_BASE + 0x00040000)
+ #define EP93XX_GPIO_REG(x) (EP93XX_GPIO_BASE + (x))
+@@ -129,6 +131,7 @@
+ #define EP93XX_SYSCON_DEVICE_CONFIG EP93XX_SYSCON_REG(0x80)
+ #define EP93XX_SYSCON_DEVICE_CONFIG_CRUNCH_ENABLE 0x00800000
+ #define EP93XX_SYSCON_SWLOCK EP93XX_SYSCON_REG(0xc0)
++#define EP93XX_SYSCON_CHIPID EP93XX_SYSCON_REG(0x94)
+
+ #define EP93XX_WATCHDOG_BASE (EP93XX_APB_VIRT_BASE + 0x00140000)
+
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0010-GPIO-leds.patch b/recipes/linux/linux-2.6.27/ts72xx/0010-GPIO-leds.patch
new file mode 100644
index 0000000000..74c4490666
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0010-GPIO-leds.patch
@@ -0,0 +1,72 @@
+From 11158bb59b2d848f1827d4ed59d4ca20d1f91d11 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 00:58:03 +0100
+Subject: [PATCH] GPIO leds
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/core.c | 31 +++++++++++++++++++++++++++++++
+ 1 files changed, 31 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
+index 24b24c7..88afbe6 100644
+--- a/arch/arm/mach-ep93xx/core.c
++++ b/arch/arm/mach-ep93xx/core.c
+@@ -33,6 +33,7 @@
+ #include <linux/amba/bus.h>
+ #include <linux/amba/serial.h>
+ #include <linux/dma-mapping.h>
++#include <linux/leds.h>
+
+ #include <asm/types.h>
+ #include <asm/setup.h>
+@@ -480,6 +481,35 @@ static struct platform_device ep93xx_ohci_device = {
+ .resource = ep93xx_ohci_resources,
+ };
+
++
++static const struct gpio_led ep93xx_led_pins[] = {
++ {
++ .name = "green",
++ .gpio = EP93XX_GPIO_LINE_GRLED,
++ .active_low = 0,
++ .default_trigger = "heartbeat",
++ },
++ {
++ .name = "red",
++ .gpio = EP93XX_GPIO_LINE_RDLED,
++ .active_low = 0,
++ }
++};
++
++static const struct gpio_led_platform_data ep93xx_led_data = {
++ .num_leds = ARRAY_SIZE(ep93xx_led_pins),
++ .leds = (void *)ep93xx_led_pins,
++};
++
++static struct platform_device ep93xx_gpio_leds = {
++ .name = "leds-gpio",
++ .id = -1,
++ .dev = {
++ .platform_data = (void *)&ep93xx_led_data,
++ }
++};
++
++
+ extern void ep93xx_gpio_init(void);
+
+ void __init ep93xx_init_devices(void)
+@@ -500,6 +530,7 @@ void __init ep93xx_init_devices(void)
+ amba_device_register(&uart2_device, &iomem_resource);
+ amba_device_register(&uart3_device, &iomem_resource);
+
++ platform_device_register(&ep93xx_gpio_leds);
+ platform_device_register(&ep93xx_rtc_device);
+ platform_device_register(&ep93xx_ohci_device);
+ }
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0011-EP93xx-Ethernet-support.patch b/recipes/linux/linux-2.6.27/ts72xx/0011-EP93xx-Ethernet-support.patch
new file mode 100644
index 0000000000..dc520def5c
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0011-EP93xx-Ethernet-support.patch
@@ -0,0 +1,548 @@
+From d4b6abf167207531bad915bf8931b0757d8bc01e Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 01:03:58 +0100
+Subject: [PATCH] EP93xx Ethernet support
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/net/arm/Kconfig | 1 +
+ drivers/net/arm/ep93xx_eth.c | 354 +++++++++++++++++++++++++++++++++---------
+ 2 files changed, 282 insertions(+), 73 deletions(-)
+
+diff --git a/drivers/net/arm/Kconfig b/drivers/net/arm/Kconfig
+index 8eda6ee..84e6068 100644
+--- a/drivers/net/arm/Kconfig
++++ b/drivers/net/arm/Kconfig
+@@ -44,6 +44,7 @@ config EP93XX_ETH
+ tristate "EP93xx Ethernet support"
+ depends on ARM && ARCH_EP93XX
+ select MII
++ select PHYLIB
+ help
+ This is a driver for the ethernet hardware included in EP93xx CPUs.
+ Say Y if you are building a kernel for EP93xx based devices.
+diff --git a/drivers/net/arm/ep93xx_eth.c b/drivers/net/arm/ep93xx_eth.c
+index 1267444..c3f011f 100644
+--- a/drivers/net/arm/ep93xx_eth.c
++++ b/drivers/net/arm/ep93xx_eth.c
+@@ -2,6 +2,7 @@
+ * EP93xx ethernet network device driver
+ * Copyright (C) 2006 Lennert Buytenhek <buytenh@wantstofly.org>
+ * Dedicated to Marija Kulikova.
++ * Copyright (C) 2007 Herbert Valerio Riedel <hvr@gnu.org>
+ *
+ * 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
+@@ -14,6 +15,7 @@
+ #include <linux/kernel.h>
+ #include <linux/netdevice.h>
+ #include <linux/mii.h>
++#include <linux/phy.h>
+ #include <linux/etherdevice.h>
+ #include <linux/ethtool.h>
+ #include <linux/init.h>
+@@ -37,6 +39,8 @@
+ #define REG_RXCTL_DEFAULT 0x00073800
+ #define REG_TXCTL 0x0004
+ #define REG_TXCTL_ENABLE 0x00000001
++#define REG_TESTCTL 0x0008
++#define REG_TESTCTL_MFDX 0x00000040
+ #define REG_MIICMD 0x0010
+ #define REG_MIICMD_READ 0x00008000
+ #define REG_MIICMD_WRITE 0x00004000
+@@ -45,6 +49,9 @@
+ #define REG_MIISTS_BUSY 0x00000001
+ #define REG_SELFCTL 0x0020
+ #define REG_SELFCTL_RESET 0x00000001
++#define REG_SELFCTL_MDCDIV_MSK 0x00007e00
++#define REG_SELFCTL_MDCDIV_OFS 9
++#define REG_SELFCTL_PSPRS 0x00000100
+ #define REG_INTEN 0x0024
+ #define REG_INTEN_TX 0x00000008
+ #define REG_INTEN_RX 0x00000007
+@@ -174,8 +181,14 @@ struct ep93xx_priv
+
+ struct net_device_stats stats;
+
+- struct mii_if_info mii;
+ u8 mdc_divisor;
++ int phy_supports_mfps:1;
++
++ struct mii_bus mii_bus;
++ struct phy_device *phy_dev;
++ int speed;
++ int duplex;
++ int link;
+ };
+
+ #define rdb(ep, off) __raw_readb((ep)->base_addr + (off))
+@@ -185,8 +198,6 @@ struct ep93xx_priv
+ #define wrw(ep, off, val) __raw_writew((val), (ep)->base_addr + (off))
+ #define wrl(ep, off, val) __raw_writel((val), (ep)->base_addr + (off))
+
+-static int ep93xx_mdio_read(struct net_device *dev, int phy_id, int reg);
+-
+ static struct net_device_stats *ep93xx_get_stats(struct net_device *dev)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+@@ -524,6 +535,22 @@ err:
+ return 1;
+ }
+
++static int ep93xx_mdio_reset(struct mii_bus *bus)
++{
++ struct ep93xx_priv *ep = bus->priv;
++
++ u32 selfctl = rdl(ep, REG_SELFCTL);
++
++ selfctl &= ~(REG_SELFCTL_MDCDIV_MSK | REG_SELFCTL_PSPRS);
++
++ selfctl |= (ep->mdc_divisor - 1) << REG_SELFCTL_MDCDIV_OFS;
++ selfctl |= REG_SELFCTL_PSPRS;
++
++ wrl(ep, REG_SELFCTL, selfctl);
++
++ return 0;
++}
++
+ static int ep93xx_start_hw(struct net_device *dev)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+@@ -542,11 +569,8 @@ static int ep93xx_start_hw(struct net_device *dev)
+ return 1;
+ }
+
+- wrl(ep, REG_SELFCTL, ((ep->mdc_divisor - 1) << 9));
+-
+- /* Does the PHY support preamble suppress? */
+- if ((ep93xx_mdio_read(dev, ep->mii.phy_id, MII_BMSR) & 0x0040) != 0)
+- wrl(ep, REG_SELFCTL, ((ep->mdc_divisor - 1) << 9) | (1 << 8));
++ /* The reset cleared REG_SELFCTL, so set the MDC divisor again */
++ ep93xx_mdio_reset(&ep->mii_bus);
+
+ /* Receive descriptor ring. */
+ addr = ep->descs_dma_addr + offsetof(struct ep93xx_descs, rdesc);
+@@ -631,12 +655,11 @@ static int ep93xx_open(struct net_device *dev)
+ return -ENOMEM;
+
+ if (is_zero_ether_addr(dev->dev_addr)) {
++ DECLARE_MAC_BUF(mac_buf);
++
+ random_ether_addr(dev->dev_addr);
+- printk(KERN_INFO "%s: generated random MAC address "
+- "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x.\n", dev->name,
+- dev->dev_addr[0], dev->dev_addr[1],
+- dev->dev_addr[2], dev->dev_addr[3],
+- dev->dev_addr[4], dev->dev_addr[5]);
++ dev_info(&dev->dev, "generated random MAC address %s\n",
++ print_mac(mac_buf, dev->dev_addr));
+ }
+
+ napi_enable(&ep->napi);
+@@ -664,6 +687,8 @@ static int ep93xx_open(struct net_device *dev)
+
+ wrl(ep, REG_GIINTMSK, REG_GIINTMSK_ENABLE);
+
++ phy_start(ep->phy_dev);
++
+ netif_start_queue(dev);
+
+ return 0;
+@@ -676,6 +701,9 @@ static int ep93xx_close(struct net_device *dev)
+ napi_disable(&ep->napi);
+ netif_stop_queue(dev);
+
++ if (ep->phy_dev)
++ phy_stop(ep->phy_dev);
++
+ wrl(ep, REG_GIINTMSK, 0);
+ free_irq(ep->irq, dev);
+ ep93xx_stop_hw(dev);
+@@ -687,51 +715,83 @@ static int ep93xx_close(struct net_device *dev)
+ static int ep93xx_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+- struct mii_ioctl_data *data = if_mii(ifr);
+
+- return generic_mii_ioctl(&ep->mii, data, cmd, NULL);
++ return phy_mii_ioctl(ep->phy_dev, if_mii(ifr), cmd);
+ }
+
+-static int ep93xx_mdio_read(struct net_device *dev, int phy_id, int reg)
++/* common MII transactions should take < 100 iterations */
++#define EP93XX_PHY_TIMEOUT 2000
++
++static int ep93xx_mdio_wait(struct mii_bus *bus)
+ {
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- int data;
+- int i;
++ struct ep93xx_priv *ep = bus->priv;
++ unsigned int timeout = EP93XX_PHY_TIMEOUT;
+
+- wrl(ep, REG_MIICMD, REG_MIICMD_READ | (phy_id << 5) | reg);
++ while ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY)
++ && timeout--)
++ cpu_relax();
+
+- for (i = 0; i < 10; i++) {
+- if ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY) == 0)
+- break;
+- msleep(1);
++ if (timeout <= 0) {
++ dev_err(bus->dev, "MII operation timed out\n");
++ return -ETIMEDOUT;
+ }
+
+- if (i == 10) {
+- printk(KERN_INFO DRV_MODULE_NAME ": mdio read timed out\n");
+- data = 0xffff;
+- } else {
+- data = rdl(ep, REG_MIIDATA);
+- }
++ return 0;
++}
++
++static int ep93xx_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
++{
++ struct ep93xx_priv *ep = bus->priv;
++ u32 selfctl;
++ u32 data;
++
++ if (ep93xx_mdio_wait(bus) < 0)
++ return -ETIMEDOUT;
+
+- return data;
++ selfctl = rdl(ep, REG_SELFCTL);
++
++ if (ep->phy_supports_mfps)
++ wrl(ep, REG_SELFCTL, selfctl | REG_SELFCTL_PSPRS);
++ else
++ wrl(ep, REG_SELFCTL, selfctl & ~REG_SELFCTL_PSPRS);
++
++ wrl(ep, REG_MIICMD, REG_MIICMD_READ | (mii_id << 5) | regnum);
++
++ if (ep93xx_mdio_wait(bus) < 0)
++ return -ETIMEDOUT;
++
++ data = rdl(ep, REG_MIIDATA);
++
++ wrl(ep, REG_SELFCTL, selfctl);
++
++ return data;
+ }
+
+-static void ep93xx_mdio_write(struct net_device *dev, int phy_id, int reg, int data)
++static int ep93xx_mdio_write(struct mii_bus *bus, int mii_id, int regnum,
++ u16 value)
+ {
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- int i;
++ struct ep93xx_priv *ep = bus->priv;
++ u32 selfctl;
+
+- wrl(ep, REG_MIIDATA, data);
+- wrl(ep, REG_MIICMD, REG_MIICMD_WRITE | (phy_id << 5) | reg);
++ if (ep93xx_mdio_wait(bus) < 0)
++ return -ETIMEDOUT;
+
+- for (i = 0; i < 10; i++) {
+- if ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY) == 0)
+- break;
+- msleep(1);
+- }
++ selfctl = rdl(ep, REG_SELFCTL);
+
+- if (i == 10)
+- printk(KERN_INFO DRV_MODULE_NAME ": mdio write timed out\n");
++ if (ep->phy_supports_mfps)
++ wrl(ep, REG_SELFCTL, selfctl | REG_SELFCTL_PSPRS);
++ else
++ wrl(ep, REG_SELFCTL, selfctl & ~REG_SELFCTL_PSPRS);
++
++ wrl(ep, REG_MIIDATA, value);
++ wrl(ep, REG_MIICMD, REG_MIICMD_WRITE | (mii_id << 5) | regnum);
++
++ if (ep93xx_mdio_wait(bus) < 0)
++ return -ETIMEDOUT;
++
++ wrl(ep, REG_SELFCTL, selfctl);
++
++ return 0;
+ }
+
+ static void ep93xx_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
+@@ -743,33 +803,31 @@ static void ep93xx_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *i
+ static int ep93xx_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_ethtool_gset(&ep->mii, cmd);
++ struct phy_device *phydev = ep->phy_dev;
++
++ if (!phydev)
++ return -ENODEV;
++
++ return phy_ethtool_gset(phydev, cmd);
+ }
+
+ static int ep93xx_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_ethtool_sset(&ep->mii, cmd);
+-}
++ struct phy_device *phydev = ep->phy_dev;
+
+-static int ep93xx_nway_reset(struct net_device *dev)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_nway_restart(&ep->mii);
+-}
++ if (!phydev)
++ return -ENODEV;
+
+-static u32 ep93xx_get_link(struct net_device *dev)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_link_ok(&ep->mii);
++ return phy_ethtool_sset(phydev, cmd);
+ }
+
++
+ static struct ethtool_ops ep93xx_ethtool_ops = {
+ .get_drvinfo = ep93xx_get_drvinfo,
+ .get_settings = ep93xx_get_settings,
+ .set_settings = ep93xx_set_settings,
+- .nway_reset = ep93xx_nway_reset,
+- .get_link = ep93xx_get_link,
++ .get_link = ethtool_op_get_link,
+ };
+
+ struct net_device *ep93xx_dev_alloc(struct ep93xx_eth_data *data)
+@@ -824,12 +882,122 @@ static int ep93xx_eth_remove(struct platform_device *pdev)
+ return 0;
+ }
+
++static void ep93xx_adjust_link(struct net_device *dev)
++{
++ struct ep93xx_priv *ep = netdev_priv(dev);
++ struct phy_device *phydev = ep->phy_dev;
++
++ int status_change = 0;
++
++ if (phydev->link) {
++ if ((ep->speed != phydev->speed) ||
++ (ep->duplex != phydev->duplex)) {
++ /* speed and/or duplex state changed */
++ u32 testctl = rdl(ep, REG_TESTCTL);
++
++ if (DUPLEX_FULL == phydev->duplex)
++ testctl |= REG_TESTCTL_MFDX;
++ else
++ testctl &= ~(REG_TESTCTL_MFDX);
++
++ wrl(ep, REG_TESTCTL, testctl);
++
++ ep->speed = phydev->speed;
++ ep->duplex = phydev->duplex;
++ status_change = 1;
++ }
++ }
++
++ /* test for online/offline link transition */
++ if (phydev->link != ep->link) {
++ if (phydev->link) /* link went online */
++ netif_tx_schedule_all(dev);
++ else { /* link went offline */
++ ep->speed = 0;
++ ep->duplex = -1;
++ }
++ ep->link = phydev->link;
++
++ status_change = 1;
++ }
++
++ if (status_change)
++ phy_print_status(phydev);
++}
++
++static int ep93xx_mii_probe(struct net_device *dev, int phy_addr)
++{
++ struct ep93xx_priv *ep = netdev_priv(dev);
++ struct phy_device *phydev = NULL;
++ int val;
++
++ if (phy_addr >= 0 && phy_addr < PHY_MAX_ADDR)
++ phydev = ep->mii_bus.phy_map[phy_addr];
++
++ if (!phydev) {
++ dev_info(&dev->dev,
++ "PHY not found at specified address,"
++ " trying autodetection\n");
++
++ /* find the first phy */
++ for (phy_addr = 0; phy_addr < PHY_MAX_ADDR; phy_addr++) {
++ if (ep->mii_bus.phy_map[phy_addr]) {
++ phydev = ep->mii_bus.phy_map[phy_addr];
++ break;
++ }
++ }
++ }
++
++ if (!phydev) {
++ dev_err(&dev->dev, "no PHY found\n");
++ return -ENODEV;
++ }
++
++ phydev = phy_connect(dev, phydev->dev.bus_id,
++ ep93xx_adjust_link, 0, PHY_INTERFACE_MODE_MII);
++
++ if (IS_ERR(phydev)) {
++ dev_err(&dev->dev, "Could not attach to PHY\n");
++ return PTR_ERR(phydev);
++ }
++
++ ep->phy_supports_mfps = 0;
++
++ val = phy_read(phydev, MII_BMSR);
++ if (val < 0) {
++ dev_err(&phydev->dev, "failed to read MII register\n");
++ return val;
++ }
++
++ if (val & 0x0040) {
++ dev_info(&phydev->dev,
++ "PHY supports MII frame preamble suppression\n");
++ ep->phy_supports_mfps = 1;
++ }
++
++ phydev->supported &= PHY_BASIC_FEATURES;
++
++ phydev->advertising = phydev->supported;
++
++ ep->link = 0;
++ ep->speed = 0;
++ ep->duplex = -1;
++ ep->phy_dev = phydev;
++
++ dev_info(&dev->dev, "attached PHY driver [%s] "
++ "(mii_bus:phy_addr=%s, irq=%d)\n",
++ phydev->drv->name, phydev->dev.bus_id, phydev->irq);
++
++ return 0;
++}
++
+ static int ep93xx_eth_probe(struct platform_device *pdev)
+ {
+ struct ep93xx_eth_data *data;
+ struct net_device *dev;
+ struct ep93xx_priv *ep;
+- int err;
++ DECLARE_MAC_BUF(mac_buf);
++ int err, i;
+
+ if (pdev == NULL)
+ return -ENODEV;
+@@ -852,7 +1020,7 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
+ if (ep->res == NULL) {
+ dev_err(&pdev->dev, "Could not reserve memory region\n");
+ err = -ENOMEM;
+- goto err_out;
++ goto err_out_request_mem_region;
+ }
+
+ ep->base_addr = ioremap(pdev->resource[0].start,
+@@ -860,34 +1028,74 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
+ if (ep->base_addr == NULL) {
+ dev_err(&pdev->dev, "Failed to ioremap ethernet registers\n");
+ err = -EIO;
+- goto err_out;
++ goto err_out_ioremap;
+ }
+ ep->irq = pdev->resource[1].start;
+
+- ep->mii.phy_id = data->phy_id;
+- ep->mii.phy_id_mask = 0x1f;
+- ep->mii.reg_num_mask = 0x1f;
+- ep->mii.dev = dev;
+- ep->mii.mdio_read = ep93xx_mdio_read;
+- ep->mii.mdio_write = ep93xx_mdio_write;
++ /* mdio/mii bus */
++ ep->mii_bus.name = "ep93xx_mii_bus";
++ snprintf(ep->mii_bus.id, MII_BUS_ID_SIZE, "0");
++
++ ep->mii_bus.read = ep93xx_mdio_read;
++ ep->mii_bus.write = ep93xx_mdio_write;
++ ep->mii_bus.reset = ep93xx_mdio_reset;
++
++ ep->mii_bus.phy_mask = 0;
++
++ ep->mii_bus.priv = ep;
++ ep->mii_bus.dev = &dev->dev;
++
++ ep->mii_bus.irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
++ if (NULL == ep->mii_bus.irq) {
++ dev_err(&pdev->dev, "Could not allocate memory\n");
++ err = -ENOMEM;
++ goto err_out_mii_bus_irq_kmalloc;
++ }
++
++ for (i = 0; i < PHY_MAX_ADDR; i++)
++ ep->mii_bus.irq[i] = PHY_POLL;
++
+ ep->mdc_divisor = 40; /* Max HCLK 100 MHz, min MDIO clk 2.5 MHz. */
++ ep->phy_supports_mfps = 0; /* probe without preamble suppression */
+
+ err = register_netdev(dev);
+ if (err) {
+ dev_err(&pdev->dev, "Failed to register netdev\n");
+- goto err_out;
++ goto err_out_register_netdev;
+ }
+
+- printk(KERN_INFO "%s: ep93xx on-chip ethernet, IRQ %d, "
+- "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x.\n", dev->name,
+- ep->irq, data->dev_addr[0], data->dev_addr[1],
+- data->dev_addr[2], data->dev_addr[3],
+- data->dev_addr[4], data->dev_addr[5]);
++ err = mdiobus_register(&ep->mii_bus);
++ if (err) {
++ dev_err(&dev->dev, "Could not register MII bus\n");
++ goto err_out_mdiobus_register;
++ }
++
++ err = ep93xx_mii_probe(dev, data->phy_id);
++ if (err) {
++ dev_err(&dev->dev, "failed to probe MII bus\n");
++ goto err_out_mii_probe;
++ }
++
++ dev_info(&dev->dev, "ep93xx on-chip ethernet, IRQ %d, %s\n",
++ ep->irq, print_mac(mac_buf, dev->dev_addr));
+
+ return 0;
+
++err_out_mii_probe:
++ mdiobus_unregister(&ep->mii_bus);
++err_out_mdiobus_register:
++ unregister_netdev(dev);
++err_out_register_netdev:
++ kfree(ep->mii_bus.irq);
++err_out_mii_bus_irq_kmalloc:
++ iounmap(ep->base_addr);
++err_out_ioremap:
++ release_resource(ep->res);
++ kfree(ep->res);
++err_out_request_mem_region:
++ free_netdev(dev);
+ err_out:
+- ep93xx_eth_remove(pdev);
++
+ return err;
+ }
+
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0012-TS72xx-watchdog.patch b/recipes/linux/linux-2.6.27/ts72xx/0012-TS72xx-watchdog.patch
new file mode 100644
index 0000000000..66822033b3
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0012-TS72xx-watchdog.patch
@@ -0,0 +1,451 @@
+From 0e804ab442879a1d9c70695e5a5c0ffc87cbca8b Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 01:15:14 +0100
+Subject: [PATCH] TS72xx watchdog
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/include/mach/ts72xx.h | 7 +
+ arch/arm/mach-ep93xx/ts72xx.c | 21 ++
+ drivers/watchdog/Kconfig | 12 +
+ drivers/watchdog/Makefile | 1 +
+ drivers/watchdog/ts72xx_wdt.c | 332 ++++++++++++++++++++++++++++
+ 5 files changed, 373 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/watchdog/ts72xx_wdt.c
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx.h b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+index 99c4e48..bb67506 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ts72xx.h
++++ b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+@@ -79,6 +79,13 @@
+ #define TS72XX_RTC_DATA_PHYS_BASE 0x11700000
+ #define TS72XX_RTC_DATA_SIZE 0x00001000
+
++#define TS72XX_WATCHDOG_CONTROL_VIRT_BASE 0xfebf7000
++#define TS72XX_WATCHDOG_CONTROL_PHYS_BASE 0x23800000
++#define TS72XX_WATCHDOG_CONTROL_SIZE 0x00001000
++
++#define TS72XX_WATCHDOG_FEED_VIRT_BASE 0xfebf6000
++#define TS72XX_WATCHDOG_FEED_PHYS_BASE 0x23c00000
++#define TS72XX_WATCHDOG_FEED_SIZE 0x00001000
+
+ #ifndef __ASSEMBLY__
+ #include <asm/io.h>
+diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
+index c3cbff1..1e933bc 100644
+--- a/arch/arm/mach-ep93xx/ts72xx.c
++++ b/arch/arm/mach-ep93xx/ts72xx.c
+@@ -183,6 +183,26 @@ static struct platform_device ts72xx_eth_device = {
+ .resource = ts72xx_eth_resource,
+ };
+
++static struct resource ts72xx_watchdog_resources[] = {
++ [0] = {
++ .start = TS72XX_WATCHDOG_CONTROL_PHYS_BASE,
++ .end = TS72XX_WATCHDOG_CONTROL_PHYS_BASE + 0x0fff,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = TS72XX_WATCHDOG_FEED_PHYS_BASE,
++ .end = TS72XX_WATCHDOG_FEED_PHYS_BASE + 0x0fff,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++static struct platform_device ts72xx_watchdog_device = {
++ .name = "ts72xx-wdt",
++ .id = -1,
++ .num_resources = ARRAY_SIZE(ts72xx_watchdog_resources),
++ .resource = ts72xx_watchdog_resources,
++};
++
+ static void __init ts72xx_init_machine(void)
+ {
+ ep93xx_init_devices();
+@@ -193,6 +213,7 @@ static void __init ts72xx_init_machine(void)
+ memcpy(ts72xx_eth_data.dev_addr,
+ (void *)(EP93XX_ETHERNET_BASE + 0x50), 6);
+ platform_device_register(&ts72xx_eth_device);
++ platform_device_register(&ts72xx_watchdog_device);
+ }
+
+ MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC")
+diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
+index c510367..fac3093 100644
+--- a/drivers/watchdog/Kconfig
++++ b/drivers/watchdog/Kconfig
+@@ -217,6 +217,18 @@ config DAVINCI_WATCHDOG
+ NOTE: once enabled, this timer cannot be disabled.
+ Say N if you are unsure.
+
++config TS72XX_WATCHDOG
++ tristate "TS-72xx Watchdog"
++ depends on WATCHDOG && ARCH_EP93XX && MACH_TS72XX
++ help
++ Say Y here if to include support for the CPLD watchdog
++ included on Technologic Systems SBC.
++
++ NOTE: timeout value is given in milliseconds, not in seconds.
++
++ To compile this driver as a module, choose M here: the
++ module will be called ts72xx_wdt.
++
+ # ARM26 Architecture
+
+ # AVR32 Architecture
+diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
+index e0ef123..890024b 100644
+--- a/drivers/watchdog/Makefile
++++ b/drivers/watchdog/Makefile
+@@ -39,6 +39,7 @@ obj-$(CONFIG_EP93XX_WATCHDOG) += ep93xx_wdt.o
+ obj-$(CONFIG_PNX4008_WATCHDOG) += pnx4008_wdt.o
+ obj-$(CONFIG_IOP_WATCHDOG) += iop_wdt.o
+ obj-$(CONFIG_DAVINCI_WATCHDOG) += davinci_wdt.o
++obj-$(CONFIG_TS72XX_WATCHDOG) += ts72xx_wdt.o
+
+ # ARM26 Architecture
+
+diff --git a/drivers/watchdog/ts72xx_wdt.c b/drivers/watchdog/ts72xx_wdt.c
+new file mode 100644
+index 0000000..7cbac78
+--- /dev/null
++++ b/drivers/watchdog/ts72xx_wdt.c
+@@ -0,0 +1,332 @@
++/*
++ * TS-72xx Watchdog Driver for Technologic Systems boards.
++ *
++ * Based on ep93xx_wdt.c by Lehtiniemi <rayl@mail.com> &
++ * Alessandro Zummo <a.zummo@towertech.it>
++ * and ib700wdt.c by Charles Howes <chowes@vsol.net>
++ * and mpc83xx_wdt.c by Dave Updegraff <dave@cray.org> &
++ * Kumar Gala <galak@kernel.crashing.org>
++ *
++ * (c) Copyright 2006 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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 driver only deals with native timeout provided by CPLD :
++ * 1/4s, 1/2s, 1s, 2s, 4s and 8s. No external timer is used.
++ * Notice that we must ping before modifying the control register.
++ */
++
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/fs.h>
++#include <linux/miscdevice.h>
++#include <linux/platform_device.h>
++#include <linux/init.h>
++#include <linux/watchdog.h>
++#include <asm/io.h>
++#include <asm/uaccess.h>
++#include <asm/system.h>
++#include <asm/mach-types.h>
++
++#define WATCHDOG_VERSION "0.2"
++#define PFX "ts72xx_wdt: "
++
++#define WATCHDOG_TIMEOUT 8000 /* 8 seconds */
++#define WDT_IN_USE 0
++#define WDT_OK_TO_CLOSE 1
++
++static unsigned long ts72xx_wdt_status;
++static unsigned char ts72xx_wdt_cpld_value = 0x7;
++static int nowayout = WATCHDOG_NOWAYOUT;
++static int timeout = WATCHDOG_TIMEOUT;
++
++static int ts72xx_wdt_times[12] = {
++ 6000, 3000, 1500, 750, 275, 0,
++ 8000, 4000, 2000, 1000, 500, 250
++};
++
++static void __iomem *control_register;
++static void __iomem *feed_register;
++
++
++/*
++ * Kernel methods.
++ */
++
++static inline void ts72xx_wdt_ping(void)
++{
++ __raw_writew(0x05, feed_register);
++}
++
++static inline void ts72xx_wdt_enable(void)
++{
++ __raw_writew(0x05, feed_register);
++ __raw_writew(ts72xx_wdt_cpld_value, control_register);
++}
++
++static inline void ts72xx_wdt_disable(void)
++{
++ __raw_writew(0x05, feed_register);
++ __raw_writew(0, control_register);
++}
++
++static inline void ts72xx_parse_timeout(int value)
++{
++ unsigned char cpld_value = 0x7;
++ int i;
++
++ if ((value > 8000) || (value < 250)) {
++ timeout = WATCHDOG_TIMEOUT;
++ printk(KERN_INFO PFX "Timeout value out of range, set to %d\n", timeout);
++ } else {
++ for (i = 0; i < 6; i++) {
++ if (value >= ts72xx_wdt_times[i]) {
++ timeout = ts72xx_wdt_times[i+6];
++
++ if (value != timeout)
++ printk(KERN_INFO PFX "Timeout value rounded to %d\n", timeout);
++
++ if (i >= 3) /* cpld_value can't be 4 */
++ i++;
++
++ cpld_value = 7 - i;
++ break;
++ }
++ }
++ }
++
++ ts72xx_wdt_cpld_value = cpld_value;
++}
++
++static ssize_t ts72xx_wdt_write(struct file *file, const char __user *buf,
++ size_t count, loff_t *ppos)
++{
++ /* Can't seek (pwrite) on this device */
++ if (*ppos != file->f_pos)
++ return -ESPIPE;
++
++ if (count) {
++ if (!nowayout) {
++ size_t i;
++
++ clear_bit(WDT_OK_TO_CLOSE, &ts72xx_wdt_status);
++
++ for (i = 0; i != count; i++) {
++ char c;
++
++ if (get_user(c, buf + i))
++ return -EFAULT;
++
++ if (c == 'V')
++ set_bit(WDT_OK_TO_CLOSE, &ts72xx_wdt_status);
++ else
++ clear_bit(WDT_OK_TO_CLOSE, &ts72xx_wdt_status);
++ }
++ }
++ ts72xx_wdt_ping();
++ }
++
++ return count;
++}
++
++static int ts72xx_wdt_ioctl(struct inode *inode, struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ int new_margin;
++ int ret = -ENOIOCTLCMD;
++
++ static struct watchdog_info ident = {
++ .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
++ .firmware_version = 1,
++ .identity = "TS-72xx Watchdog",
++ };
++
++ switch (cmd) {
++ case WDIOC_GETSUPPORT:
++ ret = copy_to_user((struct watchdog_info __user *)arg, &ident,
++ sizeof(ident)) ? -EFAULT : 0;
++ break;
++
++ case WDIOC_GETSTATUS:
++ case WDIOC_GETBOOTSTATUS:
++ ret = put_user(0, (int __user *)arg);
++ break;
++
++ case WDIOC_KEEPALIVE:
++ ts72xx_wdt_ping();
++ ret = 0;
++ break;
++
++ case WDIOC_SETTIMEOUT:
++ if (get_user(new_margin, (int __user *)arg))
++ return -EFAULT;
++
++ ts72xx_parse_timeout(new_margin);
++ ts72xx_wdt_enable();
++ /* Fall */
++
++ case WDIOC_GETTIMEOUT:
++ ret = put_user(timeout, (int __user *)arg);
++ break;
++ }
++
++ return ret;
++}
++
++static int ts72xx_wdt_open(struct inode *inode, struct file *file)
++{
++ if (test_and_set_bit(WDT_IN_USE, &ts72xx_wdt_status))
++ return -EBUSY;
++
++ if (nowayout) {
++ __module_get(THIS_MODULE);
++ }
++
++ ts72xx_wdt_enable();
++ ts72xx_wdt_ping();
++
++ return nonseekable_open(inode, file);
++}
++
++static int ts72xx_wdt_close(struct inode *inode, struct file *file)
++{
++ if (test_bit(WDT_OK_TO_CLOSE, &ts72xx_wdt_status))
++ ts72xx_wdt_disable();
++ else
++ printk(KERN_CRIT PFX "Device file closed unexpectedly. "
++ "Will not stop the WDT!\n");
++
++ clear_bit(WDT_IN_USE, &ts72xx_wdt_status);
++
++ return 0;
++}
++
++/*
++ * Kernel Interfaces
++ */
++
++static struct file_operations ts72xx_wdt_fops = {
++ .owner = THIS_MODULE,
++ .llseek = no_llseek,
++ .write = ts72xx_wdt_write,
++ .ioctl = ts72xx_wdt_ioctl,
++ .open = ts72xx_wdt_open,
++ .release = ts72xx_wdt_close,
++};
++
++static struct miscdevice ts72xx_wdt_miscdev = {
++ .minor = WATCHDOG_MINOR,
++ .name = "watchdog",
++ .fops = &ts72xx_wdt_fops,
++};
++
++static void ts72xx_wdt_shutdown(struct platform_device *dev)
++{
++ ts72xx_wdt_disable();
++}
++
++static int __devinit ts72xx_wdt_probe(struct platform_device *dev)
++{
++ struct resource *r;
++ int ret;
++
++ if (!machine_is_ts72xx())
++ return -ENODEV;
++
++ r = platform_get_resource(dev, IORESOURCE_MEM, 0);
++
++ if (!r) {
++ ret = -ENODEV;
++ goto err_out;
++ }
++
++ control_register = ioremap(r->start, r->end - r->start + 1);
++
++ if (control_register == NULL) {
++ ret = -ENOMEM;
++ goto err_out;
++ }
++
++ r = platform_get_resource(dev, IORESOURCE_MEM, 1);
++
++ if (!r) {
++ ret = -ENODEV;
++ goto err_unmap1;
++ }
++
++ feed_register = ioremap(r->start, r->end - r->start + 1);
++
++ if (feed_register == NULL) {
++ ret = -ENOMEM;
++ goto err_unmap1;
++ }
++
++ ret = misc_register(&ts72xx_wdt_miscdev);
++ if (ret) {
++ printk(KERN_ERR PFX "cannot register miscdev on minor=%d "
++ "(err=%d)\n", WATCHDOG_MINOR, ret);
++ goto err_unmap2;
++ }
++
++ printk(KERN_INFO PFX "TS-72xx watchdog driver, v%s\n", WATCHDOG_VERSION);
++ ts72xx_parse_timeout(timeout);
++
++ return 0;
++
++err_unmap2:
++ iounmap(feed_register);
++err_unmap1:
++ iounmap(control_register);
++err_out:
++ return ret;
++}
++
++static int __devexit ts72xx_wdt_remove(struct platform_device *dev)
++{
++ misc_deregister(&ts72xx_wdt_miscdev);
++ iounmap(feed_register);
++ iounmap(control_register);
++
++ return 0;
++}
++
++static struct platform_driver ts72xx_wdt_driver = {
++ .probe = ts72xx_wdt_probe,
++ .remove = __devexit_p(ts72xx_wdt_remove),
++ .shutdown = ts72xx_wdt_shutdown,
++ .driver = {
++ .owner = THIS_MODULE,
++ .name = "ts72xx-wdt",
++ },
++};
++
++static int __init ts72xx_wdt_init(void)
++{
++ return platform_driver_register(&ts72xx_wdt_driver);
++}
++
++static void __exit ts72xx_wdt_exit(void)
++{
++ platform_driver_unregister(&ts72xx_wdt_driver);
++}
++
++module_init(ts72xx_wdt_init);
++module_exit(ts72xx_wdt_exit);
++
++#ifdef CONFIG_WATCHDOG_NOWAYOUT
++module_param(nowayout, int, 0);
++MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CONFIG_WATCHDOG_NOWAYOUT)");
++#endif
++
++module_param(timeout, int, 0);
++MODULE_PARM_DESC(timeout,"Watchdog timeout in milliseconds (250..8000, default=" __MODULE_STRING(WATCHDOG_TIMEOUT) ")");
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TS-72xx watchdog driver");
++MODULE_LICENSE("GPL");
++MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0013-TS7200-NOR-physmap-fix.patch b/recipes/linux/linux-2.6.27/ts72xx/0013-TS7200-NOR-physmap-fix.patch
new file mode 100644
index 0000000000..57ae1669be
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0013-TS7200-NOR-physmap-fix.patch
@@ -0,0 +1,58 @@
+From bd9ea2dfdce02b9c941073bf5d51d5f18a28d101 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 01:21:24 +0100
+Subject: [PATCH] TS7200 NOR physmap fix
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/ts72xx.c | 10 ++++++++--
+ 1 files changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
+index 1e933bc..a9d3939 100644
+--- a/arch/arm/mach-ep93xx/ts72xx.c
++++ b/arch/arm/mach-ep93xx/ts72xx.c
+@@ -111,13 +111,14 @@ static void __init ts72xx_map_io(void)
+ }
+ }
+
++#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
+ static struct physmap_flash_data ts72xx_flash_data = {
+- .width = 1,
++ .width = 2,
+ };
+
+ static struct resource ts72xx_flash_resource = {
+ .start = TS72XX_NOR_PHYS_BASE,
+- .end = TS72XX_NOR_PHYS_BASE + 0x00ffffff,
++ .end = TS72XX_NOR_PHYS_BASE + SZ_16M - 1, /* SZ_8M for 8mb flash */
+ .flags = IORESOURCE_MEM,
+ };
+
+@@ -130,6 +131,7 @@ static struct platform_device ts72xx_flash = {
+ .num_resources = 1,
+ .resource = &ts72xx_flash_resource,
+ };
++#endif
+
+ static unsigned char ts72xx_rtc_readbyte(unsigned long addr)
+ {
+@@ -206,8 +208,12 @@ static struct platform_device ts72xx_watchdog_device = {
+ static void __init ts72xx_init_machine(void)
+ {
+ ep93xx_init_devices();
++
++ #if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
+ if (board_is_ts7200())
+ platform_device_register(&ts72xx_flash);
++ #endif
++
+ platform_device_register(&ts72xx_rtc_device);
+
+ memcpy(ts72xx_eth_data.dev_addr,
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0014-TS-7200-8MB-NOR-flash.patch b/recipes/linux/linux-2.6.27/ts72xx/0014-TS-7200-8MB-NOR-flash.patch
new file mode 100644
index 0000000000..95795b4bb3
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0014-TS-7200-8MB-NOR-flash.patch
@@ -0,0 +1,163 @@
+From ba4ba164344096ae7bea45891e99f3630ec6879a Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 01:23:06 +0100
+Subject: [PATCH] TS-7200 8MB NOR flash
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/mtd/maps/Kconfig | 8 +++
+ drivers/mtd/maps/Makefile | 2 +
+ drivers/mtd/maps/ts7200_flash.c | 109 +++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 119 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/mtd/maps/ts7200_flash.c
+
+diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
+index df8e00b..818f53b 100644
+--- a/drivers/mtd/maps/Kconfig
++++ b/drivers/mtd/maps/Kconfig
+@@ -481,6 +481,14 @@ config MTD_OMAP_NOR
+ These boards include the Innovator, H2, H3, OSK, Perseus2, and
+ more. If you have such a board, say 'Y'.
+
++config MTD_TS7200_NOR
++ tristate "Technologic Systems TS-7200 flash 8Mb"
++ depends on MTD_CFI && ARCH_EP93XX
++ help
++ This provides a driver for the on-board flash of the Technologic
++ System's TS-7200 board. The 8MB flash is splitted into 3 partitions
++ which are accessed as separate MTD devices.
++
+ # This needs CFI or JEDEC, depending on the cards found.
+ config MTD_PCI
+ tristate "PCI MTD driver"
+diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile
+index 6cda6df..8fe5e72 100644
+--- a/drivers/mtd/maps/Makefile
++++ b/drivers/mtd/maps/Makefile
+@@ -65,3 +65,5 @@ obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o
+ obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o
+ obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_vr_nor.o
+ obj-$(CONFIG_MTD_BFIN_ASYNC) += bfin-async-flash.o
++obj-$(CONFIG_MTD_TS7200_NOR) += ts7200_flash.o
++
+diff --git a/drivers/mtd/maps/ts7200_flash.c b/drivers/mtd/maps/ts7200_flash.c
+new file mode 100644
+index 0000000..9113abd
+--- /dev/null
++++ b/drivers/mtd/maps/ts7200_flash.c
+@@ -0,0 +1,109 @@
++/*
++ * ts7200_flash.c - mapping for TS-7200 SBCs (8mb NOR flash)
++ * No platform_device resource is used here. All is hardcoded.
++ *
++ * (c) Copyright 2006 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on ts5500_flash.c by Sean Young <sean@mess.org>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <asm/io.h>
++#include <asm/sizes.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/map.h>
++#include <linux/mtd/partitions.h>
++
++#define STRINGIFY(x) #x
++#define TOSTRING(x) STRINGIFY(x)
++
++#define WINDOW_ADDR 0x60000000
++#define WINDOW_SIZE SZ_8M
++#define WINDOW_READABLE_SIZE (WINDOW_SIZE/SZ_1M)
++
++
++static struct mtd_info *mymtd;
++
++static struct map_info ts7200nor_map = {
++ .name = "Full TS-7200 NOR flash",
++ .size = WINDOW_SIZE,
++ .bankwidth = 2,
++ .phys = WINDOW_ADDR,
++};
++
++/*
++ * MTD partitioning stuff
++ */
++#ifdef CONFIG_MTD_PARTITIONS
++static struct mtd_partition static_partitions[] =
++{
++ {
++ .name = "TS-BOOTROM",
++ .offset = 0,
++ .size = 0x20000,
++ .mask_flags = MTD_WRITEABLE, /* force read-only */
++ },
++ {
++ .name = "RootFS",
++ .offset = 0x20000,
++ .size = 0x600000,
++ },
++ {
++ .name = "Redboot",
++ .offset = 0x620000,
++ .size = MTDPART_SIZ_FULL, /* up to the end */
++ },
++};
++#endif
++
++int __init init_ts7200nor(void)
++{
++ printk(KERN_NOTICE "TS-7200 flash mapping: %dmo at 0x%x\n", WINDOW_READABLE_SIZE, WINDOW_ADDR);
++
++ ts7200nor_map.virt = ioremap(WINDOW_ADDR, WINDOW_SIZE);
++ if (!ts7200nor_map.virt) {
++ printk("ts7200_flash: failed to ioremap\n");
++ return -EIO;
++ }
++
++ simple_map_init(&ts7200nor_map);
++ mymtd = do_map_probe("cfi_probe", &ts7200nor_map);
++ if (mymtd) {
++ mymtd->owner = THIS_MODULE;
++ add_mtd_device(mymtd);
++#ifdef CONFIG_MTD_PARTITIONS
++ return add_mtd_partitions(mymtd, static_partitions, ARRAY_SIZE(static_partitions));
++#else
++ return 0;
++#endif
++ }
++
++ iounmap((void *)ts7200nor_map.virt);
++ return -ENXIO;
++}
++
++static void __exit cleanup_ts7200nor(void)
++{
++ if (mymtd) {
++ del_mtd_device(mymtd);
++ map_destroy(mymtd);
++ }
++ if (ts7200nor_map.virt) {
++ iounmap((void *)ts7200nor_map.virt);
++ ts7200nor_map.virt = 0;
++ }
++}
++
++module_init(init_ts7200nor);
++module_exit(cleanup_ts7200nor);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("MTD map driver for TS-7200 board (" TOSTRING(WINDOW_READABLE_SIZE) "MB flash version)");
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0015-TS-72xx-MAX197-support.patch b/recipes/linux/linux-2.6.27/ts72xx/0015-TS-72xx-MAX197-support.patch
new file mode 100644
index 0000000000..0469920a59
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0015-TS-72xx-MAX197-support.patch
@@ -0,0 +1,365 @@
+From 7220a7235e7b6722fb7dc6e8f599a20bac224760 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 01:32:39 +0100
+Subject: [PATCH] TS-72xx MAX197 support
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/include/mach/ts72xx.h | 8 +
+ arch/arm/mach-ep93xx/ts72xx.c | 27 ++++
+ drivers/misc/Kconfig | 21 +++
+ drivers/misc/Makefile | 1 +
+ drivers/misc/ts72xx_max197.c | 235 ++++++++++++++++++++++++++++
+ 5 files changed, 292 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/misc/ts72xx_max197.c
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx.h b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+index bb67506..28372df 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ts72xx.h
++++ b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+@@ -87,6 +87,14 @@
+ #define TS72XX_WATCHDOG_FEED_PHYS_BASE 0x23c00000
+ #define TS72XX_WATCHDOG_FEED_SIZE 0x00001000
+
++#define TS72XX_JUMPERS_MAX197_VIRT_BASE 0xfebf2000
++#define TS72XX_JUMPERS_MAX197_PHYS_BASE 0x10800000
++#define TS72XX_JUMPERS_MAX197_SIZE 0x00001000
++
++#define TS72XX_MAX197_SAMPLE_VIRT_BASE 0xfebf1000
++#define TS72XX_MAX197_SAMPLE_PHYS_BASE 0x10f00000
++#define TS72XX_MAX197_SAMPLE_SIZE 0x00001000
++
+ #ifndef __ASSEMBLY__
+ #include <asm/io.h>
+
+diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
+index a9d3939..ea3deeb 100644
+--- a/arch/arm/mach-ep93xx/ts72xx.c
++++ b/arch/arm/mach-ep93xx/ts72xx.c
+@@ -205,6 +205,29 @@ static struct platform_device ts72xx_watchdog_device = {
+ .resource = ts72xx_watchdog_resources,
+ };
+
++static struct resource ts72xx_max197_resources[] = {
++ [0] = { /* sample/control register */
++ .start = TS72XX_MAX197_SAMPLE_PHYS_BASE,
++ .end = TS72XX_MAX197_SAMPLE_PHYS_BASE + TS72XX_MAX197_SAMPLE_SIZE - 1,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = { /* busy bit */
++ .start = TS72XX_JUMPERS_MAX197_PHYS_BASE,
++ .end = TS72XX_JUMPERS_MAX197_PHYS_BASE + TS72XX_JUMPERS_MAX197_SIZE - 1,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++static struct platform_device ts72xx_max197_device = {
++ .name = "ts72xx-max197",
++ .id = -1,
++ .dev = {
++ .platform_data = NULL,
++ },
++ .num_resources = ARRAY_SIZE(ts72xx_max197_resources),
++ .resource = ts72xx_max197_resources,
++};
++
+ static void __init ts72xx_init_machine(void)
+ {
+ ep93xx_init_devices();
+@@ -220,6 +243,10 @@ static void __init ts72xx_init_machine(void)
+ (void *)(EP93XX_ETHERNET_BASE + 0x50), 6);
+ platform_device_register(&ts72xx_eth_device);
+ platform_device_register(&ts72xx_watchdog_device);
++
++ if (is_max197_installed()) {
++ platform_device_register(&ts72xx_max197_device);
++ }
+ }
+
+ MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC")
+diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
+index a726f3b..4c696c6 100644
+--- a/drivers/misc/Kconfig
++++ b/drivers/misc/Kconfig
+@@ -475,4 +475,25 @@ config SGI_GRU_DEBUG
+ This option enables addition debugging code for the SGI GRU driver. If
+ you are unsure, say N.
+
++config TS72XX_MAX197
++ tristate "TS-72xx MAX197 support"
++ depends on ARCH_EP93XX && MACH_TS72XX && SYSFS
++ help
++ Say Y here if to include support for the MAX197 A/D converter
++ optionally included on Technologic Systems SBCs.
++ Default acquisition range is [0..5V].
++
++ To compile this driver as a module, choose M here: the
++ module will be called ts72xx_max197.
++
++if TS72XX_MAX197
++
++config TS72XX_MAX197_AVERAGE
++ bool "Average measurement"
++ help
++ Say Y here to enable making average measurement. Default is 1.
++ See /sys/module/ts72xx_max197/parameters/average file.
++
++endif # TS72XX_MAX197
++
+ endif # MISC_DEVICES
+diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
+index c6c13f6..d97326f 100644
+--- a/drivers/misc/Makefile
++++ b/drivers/misc/Makefile
+@@ -30,3 +30,4 @@ obj-$(CONFIG_KGDB_TESTS) += kgdbts.o
+ obj-$(CONFIG_SGI_XP) += sgi-xp/
+ obj-$(CONFIG_SGI_GRU) += sgi-gru/
+ obj-$(CONFIG_HP_ILO) += hpilo.o
++obj-$(CONFIG_TS72XX_MAX197) += ts72xx_max197.o
+diff --git a/drivers/misc/ts72xx_max197.c b/drivers/misc/ts72xx_max197.c
+new file mode 100644
+index 0000000..f989de6
+--- /dev/null
++++ b/drivers/misc/ts72xx_max197.c
+@@ -0,0 +1,235 @@
++/*
++ * TS-72XX max197 driver for Technologic Systems boards.
++ *
++ * Voltage conversion is taken from adc_logger from Jim Jackson.
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <asm/io.h>
++
++#define DRV_VERSION "0.2"
++#define PFX "ts72xx_max197: "
++
++#define MAX197_RANGE_5_5 1 // [- 5V + 5V]
++#define MAX197_RANGE_10_10 3 // [-10V +10V]
++#define MAX197_RANGE_0_5 0 // [ 0V + 5V]
++#define MAX197_RANGE_0_10 2 // [ 0V +10V]
++
++#define MAX197_RESET_CHANNEL_CONF(x) (~(3 << (2*(x))))
++#define MAX197_SET_CHANNEL_CONF(x, range) ((range) << (2*(x)))
++#define MAX197_GET_CHANNEL_CONF(x, conf) (((conf) >> (2*(x))) & 3)
++
++struct max197_config
++{
++ void __iomem *control_and_data_register;
++ void __iomem *busy_bit_register;
++ unsigned int channels; // two bits per channels
++};
++
++static struct max197_config conf;
++#ifdef CONFIG_TS72XX_MAX197_AVERAGE
++static ushort average = 1;
++#endif
++
++static ssize_t max197_acquire(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ int range, n;
++ signed short val;
++#ifdef CONFIG_TS72XX_MAX197_AVERAGE
++ int i, total;
++#endif
++
++ n = attr->attr.name[2] - 0x31;
++ range = MAX197_GET_CHANNEL_CONF(n, conf.channels);
++
++#ifdef CONFIG_TS72XX_MAX197_AVERAGE
++ val = 0; total = 0;
++ for (i = 0; i < average; i++) {
++#endif
++
++ __raw_writeb(((range << 3) | n | 0x40) & 0xFF,
++ conf.control_and_data_register);
++ while (__raw_readb(conf.busy_bit_register) & 0x80);
++ val = __raw_readw(conf.control_and_data_register);
++
++ //printk(PFX "%hd/%hd: 0x%04X\n", i+1, average, val);
++
++#ifdef CONFIG_TS72XX_MAX197_AVERAGE
++ total += val;
++ }
++ total /= average;
++ val = (signed short)total;
++#endif
++
++ /* We want three digit precision */
++ switch (range) {
++ case MAX197_RANGE_0_5:
++ val = ((val * 50000/4096)+5)/10;
++ break;
++ case MAX197_RANGE_5_5:
++ case MAX197_RANGE_0_10:
++ val = ((val * 100000/4096)+5)/10;
++ break;
++ case MAX197_RANGE_10_10:
++ val = ((val * 200000/4096)+5)/10;
++ break;
++ }
++
++ return sprintf(buf, "%d.%03d\n", val/1000, abs(val%1000));
++}
++
++static ssize_t max197_configure(struct device *dev,
++ struct device_attribute *attr, const char *buf, size_t len)
++{
++ int n = attr->attr.name[2] - 0x31;
++
++ long val = simple_strtol(buf, NULL, 10);
++ switch (val) {
++ case 10:
++ conf.channels &= MAX197_RESET_CHANNEL_CONF(n);
++ conf.channels |= MAX197_SET_CHANNEL_CONF(n, MAX197_RANGE_0_10);
++ break;
++ case 5:
++ conf.channels &= MAX197_RESET_CHANNEL_CONF(n);
++ conf.channels |= MAX197_SET_CHANNEL_CONF(n, MAX197_RANGE_0_5);
++ break;
++ case -10:
++ conf.channels &= MAX197_RESET_CHANNEL_CONF(n);
++ conf.channels |= MAX197_SET_CHANNEL_CONF(n, MAX197_RANGE_10_10);
++ break;
++ case -5:
++ conf.channels &= MAX197_RESET_CHANNEL_CONF(n);
++ conf.channels |= MAX197_SET_CHANNEL_CONF(n, MAX197_RANGE_5_5);
++ break;
++
++ default:
++ return -EINVAL;
++ }
++
++ return len;
++}
++
++static DEVICE_ATTR(ch1, S_IWUSR | S_IRUGO, max197_acquire, max197_configure);
++static DEVICE_ATTR(ch2, S_IWUSR | S_IRUGO, max197_acquire, max197_configure);
++static DEVICE_ATTR(ch3, S_IWUSR | S_IRUGO, max197_acquire, max197_configure);
++static DEVICE_ATTR(ch4, S_IWUSR | S_IRUGO, max197_acquire, max197_configure);
++static DEVICE_ATTR(ch5, S_IWUSR | S_IRUGO, max197_acquire, max197_configure);
++static DEVICE_ATTR(ch6, S_IWUSR | S_IRUGO, max197_acquire, max197_configure);
++static DEVICE_ATTR(ch7, S_IWUSR | S_IRUGO, max197_acquire, max197_configure);
++static DEVICE_ATTR(ch8, S_IWUSR | S_IRUGO, max197_acquire, max197_configure);
++
++static struct attribute *max197_attributes[] = {
++ &dev_attr_ch1.attr,
++ &dev_attr_ch2.attr,
++ &dev_attr_ch3.attr,
++ &dev_attr_ch4.attr,
++ &dev_attr_ch5.attr,
++ &dev_attr_ch6.attr,
++ &dev_attr_ch7.attr,
++ &dev_attr_ch8.attr,
++ NULL
++};
++
++static struct attribute_group max197_group = {
++ .attrs = max197_attributes,
++ //.name = "channels",
++};
++
++static __devinit int ts72xx_max197_probe(struct platform_device *pdev)
++{
++ int err = 0;
++ struct resource *r_data, *r_busy;
++
++ r_data = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ r_busy = platform_get_resource(pdev, IORESOURCE_MEM, 1);
++
++ if (!r_data || !r_busy) {
++ dev_err(&pdev->dev, "missing resource(s)\n");
++ return -EINVAL;
++ }
++
++ conf.control_and_data_register = ioremap(r_data->start, r_data->end - r_data->start + 1);
++ if (!conf.control_and_data_register) {
++ err = -ENODEV;
++ goto exit;
++ }
++
++ conf.busy_bit_register = ioremap(r_busy->start, r_busy->end - r_busy->start + 1);
++ if (!conf.busy_bit_register) {
++ err = -ENODEV;
++ goto exit_unmap1;
++ }
++
++ conf.channels =
++ MAX197_SET_CHANNEL_CONF(0, MAX197_RANGE_0_5) |
++ MAX197_SET_CHANNEL_CONF(1, MAX197_RANGE_0_5) |
++ MAX197_SET_CHANNEL_CONF(2, MAX197_RANGE_0_5) |
++ MAX197_SET_CHANNEL_CONF(3, MAX197_RANGE_0_5) |
++ MAX197_SET_CHANNEL_CONF(4, MAX197_RANGE_0_5) |
++ MAX197_SET_CHANNEL_CONF(5, MAX197_RANGE_0_5) |
++ MAX197_SET_CHANNEL_CONF(6, MAX197_RANGE_0_5) |
++ MAX197_SET_CHANNEL_CONF(7, MAX197_RANGE_0_5);
++
++ /* Register sysfs hooks */
++ if ((err = sysfs_create_group(&pdev->dev.kobj, &max197_group)))
++ goto exit_unmap2;
++
++ printk(PFX "TS-72xx max197 driver, v%s\n", DRV_VERSION);
++ return 0;
++
++exit_unmap2:
++ iounmap(conf.busy_bit_register);
++exit_unmap1:
++ iounmap(conf.control_and_data_register);
++exit:
++ return err;
++}
++
++static int __devexit ts72xx_max197_remove(struct platform_device *pdev)
++{
++ sysfs_remove_group(&pdev->dev.kobj, &max197_group);
++ iounmap(conf.busy_bit_register);
++ iounmap(conf.control_and_data_register);
++ return 0;
++}
++
++static struct platform_driver ts72xx_max197_platform_driver = {
++ .probe = ts72xx_max197_probe,
++ .remove = __devexit_p(ts72xx_max197_remove),
++ .driver = {
++ .name = "ts72xx-max197",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init ts72xx_max197_init(void)
++{
++ return platform_driver_register(&ts72xx_max197_platform_driver);
++}
++
++static void __exit ts72xx_max197_exit(void)
++{
++ platform_driver_unregister(&ts72xx_max197_platform_driver);
++}
++
++#ifdef CONFIG_TS72XX_MAX197_AVERAGE
++module_param(average, ushort, S_IWUSR | S_IRUGO);
++MODULE_PARM_DESC(average, "Allow average measurement (default=1)");
++#endif
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TS-72xx max197 driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
++
++module_init(ts72xx_max197_init);
++module_exit(ts72xx_max197_exit);
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0016-RS485-common-bits.patch b/recipes/linux/linux-2.6.27/ts72xx/0016-RS485-common-bits.patch
new file mode 100644
index 0000000000..1cc0892a52
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0016-RS485-common-bits.patch
@@ -0,0 +1,46 @@
+From 6a097aa79ca6bd502cf84394912f5ca0ddaeda15 Mon Sep 17 00:00:00 2001
+From: =?utf-8?q?Petr=20=C5=A0tetiar?= <ynezz@true.cz>
+Date: Sun, 4 Jan 2009 15:48:54 +0100
+Subject: [PATCH] RS485 common bits
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/include/mach/ts72xx.h | 14 ++++++++++++++
+ 1 files changed, 14 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx.h b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+index 28372df..cf9544c 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ts72xx.h
++++ b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+@@ -95,6 +95,14 @@
+ #define TS72XX_MAX197_SAMPLE_PHYS_BASE 0x10f00000
+ #define TS72XX_MAX197_SAMPLE_SIZE 0x00001000
+
++#define TS72XX_RS485_CONTROL_VIRT_BASE 0xfebf4000
++#define TS72XX_RS485_CONTROL_PHYS_BASE 0x22c00000
++#define TS72XX_RS485_CONTROL_SIZE 0x00001000
++
++#define TS72XX_RS485_MODE_VIRT_BASE 0xfebf3000
++#define TS72XX_RS485_MODE_PHYS_BASE 0x23000000
++#define TS72XX_RS485_MODE_SIZE 0x00001000
++
+ #ifndef __ASSEMBLY__
+ #include <asm/io.h>
+
+@@ -124,4 +132,10 @@ static inline int is_ts9420_installed(void)
+ return !!(__raw_readb(TS72XX_OPTIONS2_VIRT_BASE) &
+ TS72XX_OPTIONS2_TS9420);
+ }
++
++static inline int is_rs485_installed(void)
++{
++ return !!(__raw_readb(TS72XX_OPTIONS_VIRT_BASE) &
++ TS72XX_OPTIONS_COM2_RS485);
++}
+ #endif
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0017-TS-72xx-SBC-proc-info.patch b/recipes/linux/linux-2.6.27/ts72xx/0017-TS-72xx-SBC-proc-info.patch
new file mode 100644
index 0000000000..28326ba5c8
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0017-TS-72xx-SBC-proc-info.patch
@@ -0,0 +1,249 @@
+From f64468d71fee788dde67d80ad2cb0d7bf9d514bc Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 15:50:45 +0100
+Subject: [PATCH] TS-72xx SBC proc info
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Technologic Systems TS-72XX sbc /proc/driver/sbcinfo entry.
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/Kconfig | 7 ++
+ arch/arm/mach-ep93xx/Makefile | 1 +
+ arch/arm/mach-ep93xx/include/mach/ts72xx.h | 14 +++
+ arch/arm/mach-ep93xx/ts72xx.c | 5 +
+ arch/arm/mach-ep93xx/ts72xx_sbcinfo.c | 147 ++++++++++++++++++++++++++++
+ 5 files changed, 174 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/ts72xx_sbcinfo.c
+
+diff --git a/arch/arm/mach-ep93xx/Kconfig b/arch/arm/mach-ep93xx/Kconfig
+index ea8549b..3d3ec7e 100644
+--- a/arch/arm/mach-ep93xx/Kconfig
++++ b/arch/arm/mach-ep93xx/Kconfig
+@@ -88,6 +88,13 @@ config MACH_TS72XX
+ Say 'Y' here if you want your kernel to support the
+ Technologic Systems TS-72xx board.
+
++config MACH_TS72XX_SBCINFO
++ tristate "Add procfs /proc/driver/sbcinfo"
++ depends on MACH_TS72XX
++ help
++ Say 'Y' to add a procfs entry containing some information
++ related to Technologic Systems TS-72xx SBC.
++
+ endmenu
+
+ endif
+diff --git a/arch/arm/mach-ep93xx/Makefile b/arch/arm/mach-ep93xx/Makefile
+index c1252ca..bbf8f9a 100644
+--- a/arch/arm/mach-ep93xx/Makefile
++++ b/arch/arm/mach-ep93xx/Makefile
+@@ -16,3 +16,4 @@ obj-$(CONFIG_MACH_EDB9315A) += edb9315a.o
+ obj-$(CONFIG_MACH_GESBC9312) += gesbc9312.o
+ obj-$(CONFIG_MACH_MICRO9) += micro9.o
+ obj-$(CONFIG_MACH_TS72XX) += ts72xx.o
++obj-$(CONFIG_MACH_TS72XX_SBCINFO) += ts72xx_sbcinfo.o
+diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx.h b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+index cf9544c..601d0a3 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ts72xx.h
++++ b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+@@ -103,6 +103,10 @@
+ #define TS72XX_RS485_MODE_PHYS_BASE 0x23000000
+ #define TS72XX_RS485_MODE_SIZE 0x00001000
+
++#define TS72XX_PLD_VERSION_VIRT_BASE 0xfebf5000
++#define TS72XX_PLD_VERSION_PHYS_BASE 0x23400000
++#define TS72XX_PLD_VERSION_SIZE 0x00001000
++
+ #ifndef __ASSEMBLY__
+ #include <asm/io.h>
+
+@@ -138,4 +142,14 @@ static inline int is_rs485_installed(void)
+ return !!(__raw_readb(TS72XX_OPTIONS_VIRT_BASE) &
+ TS72XX_OPTIONS_COM2_RS485);
+ }
++
++static inline int get_ts72xx_pld_version(void)
++{
++ return (__raw_readb(TS72XX_PLD_VERSION_VIRT_BASE) & 0x7);
++}
++
++static inline int is_jp6_set(void)
++{
++ return (__raw_readb(TS72XX_OPTIONS2_VIRT_BASE) & 0x1);
++}
+ #endif
+diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
+index ea3deeb..9835b05 100644
+--- a/arch/arm/mach-ep93xx/ts72xx.c
++++ b/arch/arm/mach-ep93xx/ts72xx.c
+@@ -31,6 +31,11 @@ static struct map_desc ts72xx_io_desc[] __initdata = {
+ .pfn = __phys_to_pfn(TS72XX_MODEL_PHYS_BASE),
+ .length = TS72XX_MODEL_SIZE,
+ .type = MT_DEVICE,
++ }, {
++ .virtual = TS72XX_PLD_VERSION_VIRT_BASE,
++ .pfn = __phys_to_pfn(TS72XX_PLD_VERSION_PHYS_BASE),
++ .length = TS72XX_PLD_VERSION_SIZE,
++ .type = MT_DEVICE,
+ }, {
+ .virtual = TS72XX_OPTIONS_VIRT_BASE,
+ .pfn = __phys_to_pfn(TS72XX_OPTIONS_PHYS_BASE),
+diff --git a/arch/arm/mach-ep93xx/ts72xx_sbcinfo.c b/arch/arm/mach-ep93xx/ts72xx_sbcinfo.c
+new file mode 100644
+index 0000000..7fe4e77
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/ts72xx_sbcinfo.c
+@@ -0,0 +1,147 @@
++/*
++ * Technologic Systems TS-72XX sbc /proc/driver/sbcinfo entry.
++ *
++ * Original idea by Liberty Young (Technologic Systems).
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/proc_fs.h>
++#include <mach/ts72xx.h>
++
++
++struct infos {
++ int model, pld;
++ int option_ad;
++ int option_rs485;
++ unsigned char jumpers[6]; // 0=off,1=on,2=error
++};
++
++static void get_sbcinfo(struct infos *data)
++{
++ void __iomem *p;
++
++ /* Board model */
++ switch (__raw_readb(TS72XX_MODEL_VIRT_BASE)) {
++ case TS72XX_MODEL_TS7200:
++ data->model = 7200;
++ break;
++ case TS72XX_MODEL_TS7250:
++ data->model = 7250;
++ break;
++ case TS72XX_MODEL_TS7260:
++ data->model = 7260;
++ break;
++ default:
++ data->model = 0;
++ }
++
++ data->pld = get_ts72xx_pld_version();
++
++ /* A/D converter (8 x 12-bit channels) */
++ if ((data->model == 7200) || (data->model = 7250)) {
++ data->option_ad = is_max197_installed();
++ } else {
++ data->option_ad = 0;
++ }
++
++ /* COM2 RS-485 */
++ if (is_rs485_installed()) {
++ data->option_rs485 = 1;
++ } else {
++ data->option_rs485 = 0;
++ }
++
++ /* jumpers */
++ p = ioremap(TS72XX_JUMPERS_MAX197_PHYS_BASE, TS72XX_JUMPERS_MAX197_SIZE);
++ if (p) {
++ unsigned char c = __raw_readb(p);
++
++ data->jumpers[0] = 2; // JP1 (bootstrap)
++ data->jumpers[1] = !!(c & 0x01); // JP2 (enable serial console)
++ data->jumpers[2] = !!(c & 0x02); // JP3 (flash write enable)
++ data->jumpers[3] = !(c & 0x08); // JP4 (console on COM2)
++ data->jumpers[4] = !(c & 0x10); // JP5 (test)
++ data->jumpers[5] = !!(is_jp6_set()); // JP6 (user jumper)
++
++ iounmap(p);
++ } else {
++ data->jumpers[0] = data->jumpers[1] = data->jumpers[2] = 2;
++ data->jumpers[3] = data->jumpers[4] = data->jumpers[5] = 2;
++ }
++
++}
++
++
++static int ts72xx_sbcinfo_read_proc(char *buffer, char **start, off_t offset,
++ int count, int *eof, void *data)
++{
++ int len, size = count;
++ char *p = buffer;
++ struct infos nfo;
++ const char jpc[3] = { 'n', 'y', '?' };
++
++ get_sbcinfo(&nfo);
++ len = scnprintf(p, size,
++ "Model : TS-%d (PLD rev %c)\n"
++ "Option max197 A/D : %s\n"
++ "Option RS-485 : %s\n"
++ "Jumpers : JP2=%c JP3=%c JP4=%c JP5=%c JP6=%c\n",
++ nfo.model, nfo.pld + 0x40,
++ (nfo.option_ad ? "yes" : "no"),
++ (nfo.option_rs485 ? "yes" : "no"),
++ jpc[nfo.jumpers[1]], jpc[nfo.jumpers[2]], jpc[nfo.jumpers[3]], jpc[nfo.jumpers[4]],
++ jpc[nfo.jumpers[5]]);
++
++ if (len <= offset + count)
++ *eof = 1;
++
++ *start = buffer + offset;
++ len -= offset;
++
++ if (len > count)
++ len = count;
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++
++
++static int __init ts72xx_sbcinfo_init(void)
++{
++ struct proc_dir_entry *entry;
++ int ret = 0;
++
++ entry = create_proc_read_entry("driver/sbcinfo", 0,
++ NULL, ts72xx_sbcinfo_read_proc, NULL);
++
++ if (!entry) {
++ printk(KERN_ERR "sbcinfo: can't create /proc/driver/sbcinfo\n");
++ ret = -ENOMEM;
++ }
++
++ return ret;
++}
++
++static void __exit ts72xx_sbcinfo_exit(void)
++{
++ remove_proc_entry("driver/sbcinfo", NULL);
++ return;
++}
++
++module_init(ts72xx_sbcinfo_init);
++module_exit(ts72xx_sbcinfo_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("Show information of Technologic Systems TS-72XX sbc");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("1.0");
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0018-EP93xx-GPIO-I2C.patch b/recipes/linux/linux-2.6.27/ts72xx/0018-EP93xx-GPIO-I2C.patch
new file mode 100644
index 0000000000..96bc2f4c00
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0018-EP93xx-GPIO-I2C.patch
@@ -0,0 +1,71 @@
+From c74060501ec81a28f288a6d82ecf532320dae361 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 01:41:44 +0100
+Subject: [PATCH] EP93xx GPIO I2C
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/core.c | 30 ++++++++++++++++++++++++++++++
+ 1 files changed, 30 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
+index 88afbe6..f689531 100644
+--- a/arch/arm/mach-ep93xx/core.c
++++ b/arch/arm/mach-ep93xx/core.c
+@@ -34,6 +34,8 @@
+ #include <linux/amba/serial.h>
+ #include <linux/dma-mapping.h>
+ #include <linux/leds.h>
++#include <linux/i2c.h>
++#include <linux/i2c-gpio.h>
+
+ #include <asm/types.h>
+ #include <asm/setup.h>
+@@ -509,6 +511,30 @@ static struct platform_device ep93xx_gpio_leds = {
+ }
+ };
+
++#ifdef CONFIG_MACH_TS72XX
++static struct i2c_gpio_platform_data ep93xx_i2c_data = {
++ .sda_pin = EP93XX_GPIO_LINE_EGPIO14, // DIO_6 (TS72XX DIO 2x8 header)
++ .sda_is_open_drain = 0,
++ .scl_pin = EP93XX_GPIO_LINE_EGPIO15, // DIO_7 (TS72XX DIO 2x8 header)
++ .scl_is_open_drain = 0,
++ .udelay = 2,
++};
++#else
++static struct i2c_gpio_platform_data ep93xx_i2c_data = {
++ .sda_pin = EP93XX_GPIO_LINE_EEDAT,
++ .sda_is_open_drain = 0,
++ .scl_pin = EP93XX_GPIO_LINE_EECLK,
++ .scl_is_open_drain = 0,
++ .udelay = 2,
++};
++#endif
++
++static struct platform_device ep93xx_i2c_device = {
++ .name = "i2c-gpio",
++ .id = 0,
++ .dev.platform_data = &ep93xx_i2c_data,
++};
++
+
+ extern void ep93xx_gpio_init(void);
+
+@@ -530,6 +556,10 @@ void __init ep93xx_init_devices(void)
+ amba_device_register(&uart2_device, &iomem_resource);
+ amba_device_register(&uart3_device, &iomem_resource);
+
++ /* We have no specific I2C slave devices to register,
++ so we do not have to call i2c_register_board_info. */
++ platform_device_register(&ep93xx_i2c_device);
++
+ platform_device_register(&ep93xx_gpio_leds);
+ platform_device_register(&ep93xx_rtc_device);
+ platform_device_register(&ep93xx_ohci_device);
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0019-EP93xx-SPI-driver.patch b/recipes/linux/linux-2.6.27/ts72xx/0019-EP93xx-SPI-driver.patch
new file mode 100644
index 0000000000..185fa71be8
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0019-EP93xx-SPI-driver.patch
@@ -0,0 +1,989 @@
+From 007d9f94b01c399553cff4143ae3d696b8189b57 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 01:51:24 +0100
+Subject: [PATCH] EP93xx SPI driver
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/clock.c | 6 +-
+ arch/arm/mach-ep93xx/core.c | 29 ++
+ arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h | 1 +
+ arch/arm/mach-ep93xx/include/mach/spi.h | 18 +
+ arch/arm/mach-ep93xx/ts72xx.c | 37 ++-
+ drivers/spi/Kconfig | 13 +
+ drivers/spi/Makefile | 2 +
+ drivers/spi/spi_ep93xx.c | 496 +++++++++++++++++++++++
+ drivers/spi/spi_ep93xx.h | 61 +++
+ drivers/spi/tmp124.c | 158 +++++++
+ 10 files changed, 819 insertions(+), 2 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/include/mach/spi.h
+ create mode 100644 drivers/spi/spi_ep93xx.c
+ create mode 100644 drivers/spi/spi_ep93xx.h
+ create mode 100644 drivers/spi/tmp124.c
+
+diff --git a/arch/arm/mach-ep93xx/clock.c b/arch/arm/mach-ep93xx/clock.c
+index 6062e47..2b47048 100644
+--- a/arch/arm/mach-ep93xx/clock.c
++++ b/arch/arm/mach-ep93xx/clock.c
+@@ -51,7 +51,10 @@ static struct clk clk_usb_host = {
+ .enable_reg = EP93XX_SYSCON_CLOCK_CONTROL,
+ .enable_mask = EP93XX_SYSCON_CLOCK_USH_EN,
+ };
+-
++static struct clk clk_ssp = {
++ .name = "sspclk",
++ .rate = 7400000,
++};
+
+ static struct clk *clocks[] = {
+ &clk_uart,
+@@ -61,6 +64,7 @@ static struct clk *clocks[] = {
+ &clk_p,
+ &clk_pll2,
+ &clk_usb_host,
++ &clk_ssp,
+ };
+
+ struct clk *clk_get(struct device *dev, const char *id)
+diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
+index f689531..00c2316 100644
+--- a/arch/arm/mach-ep93xx/core.c
++++ b/arch/arm/mach-ep93xx/core.c
+@@ -41,6 +41,7 @@
+ #include <asm/setup.h>
+ #include <asm/memory.h>
+ #include <mach/hardware.h>
++#include <mach/spi.h>
+ #include <asm/irq.h>
+ #include <asm/system.h>
+ #include <asm/tlbflush.h>
+@@ -484,6 +485,33 @@ static struct platform_device ep93xx_ohci_device = {
+ };
+
+
++static struct resource ep93xx_ssp_resources[] = {
++ {
++ .start = EP93XX_SPI_BASE, // virtual addresses
++ .end = EP93XX_SPI_BASE + 0x14,
++ .flags = IORESOURCE_MEM,
++ }, {
++ .start = IRQ_EP93XX_SSP, // overrun in receive fifo
++ .end = IRQ_EP93XX_SSP,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++static struct ep93xx_spi_data ep93xx_ssp_data = {
++ .chip_select_num = 4,
++};
++
++static struct platform_device ep93xx_ssp_device = {
++ .name = "ep93xx-spi",
++ .id = 1,
++ .resource = ep93xx_ssp_resources,
++ .num_resources = ARRAY_SIZE(ep93xx_ssp_resources),
++ .dev = {
++ .platform_data = &ep93xx_ssp_data,
++ }
++};
++
++
+ static const struct gpio_led ep93xx_led_pins[] = {
+ {
+ .name = "green",
+@@ -563,4 +591,5 @@ void __init ep93xx_init_devices(void)
+ platform_device_register(&ep93xx_gpio_leds);
+ platform_device_register(&ep93xx_rtc_device);
+ platform_device_register(&ep93xx_ohci_device);
++ platform_device_register(&ep93xx_ssp_device);
+ }
+diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+index e26b41b..be0b9d4 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
++++ b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+@@ -97,6 +97,7 @@
+ #define EP93XX_AAC_BASE (EP93XX_APB_VIRT_BASE + 0x00080000)
+
+ #define EP93XX_SPI_BASE (EP93XX_APB_VIRT_BASE + 0x000a0000)
++#define EP93XX_SPI_PHYS_BASE (EP93XX_APB_PHYS_BASE + 0x000a0000)
+
+ #define EP93XX_IRDA_BASE (EP93XX_APB_VIRT_BASE + 0x000b0000)
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/spi.h b/arch/arm/mach-ep93xx/include/mach/spi.h
+new file mode 100644
+index 0000000..0e07fc9
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/include/mach/spi.h
+@@ -0,0 +1,18 @@
++/*
++ * arch/arm/mach-ep93xx/include/mach/spi.h
++ */
++
++struct ep93xx_spi_data {
++ u16 chip_select_num;
++};
++
++
++/* spi_board_info.controller_data for SPI slave devices */
++struct ep93xx_spi_chip {
++ void (*cs_control)(u32 command);
++};
++
++/* Chip-select state */
++#define SPI_CS_ASSERT 0x1
++#define SPI_CS_DEASSERT 0x2
++#define SPI_CS_INIT 0x4
+diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
+index 9835b05..2141e73 100644
+--- a/arch/arm/mach-ep93xx/ts72xx.c
++++ b/arch/arm/mach-ep93xx/ts72xx.c
+@@ -19,8 +19,11 @@
+ #include <linux/mtd/physmap.h>
+ #include <linux/platform_device.h>
+ #include <linux/m48t86.h>
++#include <linux/spi/spi.h>
+ #include <asm/io.h>
+ #include <mach/hardware.h>
++#include <mach/spi.h>
++#include <mach/gpio.h>
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+ #include <asm/mach/map.h>
+@@ -233,6 +236,34 @@ static struct platform_device ts72xx_max197_device = {
+ .resource = ts72xx_max197_resources,
+ };
+
++#if defined(CONFIG_SPI_MASTER)
++void tmp124_spi_cs(u32 command) // FGPIO[2]
++{
++ if (command & SPI_CS_ASSERT) {
++ gpio_set_value(EP93XX_GPIO_LINE_MCCD2, 0);
++ } else if (command & SPI_CS_DEASSERT) {
++ gpio_set_value(EP93XX_GPIO_LINE_MCCD2, 1);
++ } else if (command & SPI_CS_INIT) {
++ gpio_direction_output(EP93XX_GPIO_LINE_MCCD2, 1);
++ }
++}
++
++static struct ep93xx_spi_chip tmp124_hw = {
++ .cs_control = tmp124_spi_cs,
++};
++
++static struct spi_board_info ts72xx_spi_bus[] __initdata = {
++ {
++ /* TMP124 */
++ .modalias = "tmp124",
++ .controller_data = &tmp124_hw,
++ .bus_num = 1,
++ .chip_select = 0,
++ .max_speed_hz = 2 * 1000 * 1000,
++ }
++};
++#endif
++
+ static void __init ts72xx_init_machine(void)
+ {
+ ep93xx_init_devices();
+@@ -251,7 +282,11 @@ static void __init ts72xx_init_machine(void)
+
+ if (is_max197_installed()) {
+ platform_device_register(&ts72xx_max197_device);
+- }
++ }
++
++ #if defined(CONFIG_SPI_MASTER)
++ spi_register_board_info(ts72xx_spi_bus, ARRAY_SIZE(ts72xx_spi_bus));
++ #endif
+ }
+
+ MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC")
+diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
+index b9d0efb..51b55b5 100644
+--- a/drivers/spi/Kconfig
++++ b/drivers/spi/Kconfig
+@@ -204,6 +204,12 @@ config SPI_XILINX
+ See the "OPB Serial Peripheral Interface (SPI) (v1.00e)"
+ Product Specification document (DS464) for hardware details.
+
++config SPI_EP93XX
++ tristate "EP93XX SPI controller"
++ depends on SPI_MASTER
++ help
++ Simple SPI driver for EP93xx.
++
+ #
+ # Add new SPI master controllers in alphabetical order above this line
+ #
+@@ -243,6 +249,13 @@ config SPI_TLE62X0
+ sysfs interface, with each line presented as a kind of GPIO
+ exposing both switch control and diagnostic feedback.
+
++config SPI_TMP124
++ tristate "Texas Instruments TMP1224, TMP124"
++ depends on SPI_MASTER && SYSFS
++ help
++ SPI driver for TMP12X temperature sensor chips.
++ This provides a sysfs entry for temperature reading (2°C accurate).
++
+ #
+ # Add new SPI protocol masters in alphabetical order above this line
+ #
+diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
+index ccf18de..1effdf3 100644
+--- a/drivers/spi/Makefile
++++ b/drivers/spi/Makefile
+@@ -28,6 +28,7 @@ obj-$(CONFIG_SPI_S3C24XX_GPIO) += spi_s3c24xx_gpio.o
+ obj-$(CONFIG_SPI_S3C24XX) += spi_s3c24xx.o
+ obj-$(CONFIG_SPI_TXX9) += spi_txx9.o
+ obj-$(CONFIG_SPI_XILINX) += xilinx_spi.o
++obj-$(CONFIG_SPI_EP93XX) += spi_ep93xx.o
+ obj-$(CONFIG_SPI_SH_SCI) += spi_sh_sci.o
+ # ... add above this line ...
+
+@@ -35,6 +36,7 @@ obj-$(CONFIG_SPI_SH_SCI) += spi_sh_sci.o
+ obj-$(CONFIG_SPI_AT25) += at25.o
+ obj-$(CONFIG_SPI_SPIDEV) += spidev.o
+ obj-$(CONFIG_SPI_TLE62X0) += tle62x0.o
++obj-$(CONFIG_SPI_TMP124) += tmp124.o
+ # ... add above this line ...
+
+ # SPI slave controller drivers (upstream link)
+diff --git a/drivers/spi/spi_ep93xx.c b/drivers/spi/spi_ep93xx.c
+new file mode 100644
+index 0000000..0f51b00
+--- /dev/null
++++ b/drivers/spi/spi_ep93xx.c
+@@ -0,0 +1,496 @@
++/*
++ * EP93xx SPI driver
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on pxa2xx_spi.c by Stephen Street / StreetFire Sound Labs
++ *
++ * 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.
++ *
++ * Notes:
++ * - Uses SSP IP of processor
++ * - Restricted to SPI master mode
++ * - No DMA transfer
++ * - No power management support
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/device.h>
++#include <linux/interrupt.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <linux/spi/spi.h>
++#include <linux/clk.h>
++#include <asm/irq.h>
++#include <mach/hardware.h>
++#include <mach/spi.h>
++
++#include <linux/sched.h>
++#include <linux/spinlock.h>
++#include <linux/workqueue.h>
++
++#include "spi_ep93xx.h"
++
++
++struct ep93xx_spi {
++ struct spi_master *master; /* SPI framework hookup */
++ void __iomem *ioaddr; /* Virtual base address to SSP registers */
++ u32 freq_max;
++ u32 freq_min;
++ struct clk *clk;
++
++ struct workqueue_struct *workqueue;
++ struct work_struct work;
++ spinlock_t lock;
++ struct list_head queue;
++
++ struct ep93xx_spi_chip *cs_chip; /* Chip Select function */
++};
++
++static inline u16 read_reg(void *base, off_t offset)
++{
++ return __raw_readw(base + offset);
++}
++
++static inline void write_reg(u16 v, void *base, off_t offset)
++{
++ __raw_writew(v, base + offset);
++}
++
++/*
++ * compute SCR and CPSDVR bits to setup spi clock based on main input clock rate
++ * that was specified in platform data structure
++ * according to datasheet:
++ * tempclk = sspclk / cpsdvr
++ * spiclk = tempclk / (scr + 1)
++ * SCR valid range is 0..255
++ * CPSDVR valid range is 2..254
++ */
++static int spi_speed_set(struct ep93xx_spi *drv_data, unsigned speed_hz)
++{
++ unsigned long mainclk_hz = clk_get_rate(drv_data->clk);
++ u32 cpsdvr, scr;
++ u16 ssp_cr0;
++
++ for (cpsdvr = 2; cpsdvr <= 254; cpsdvr+=2) {
++ scr = DIV_ROUND_UP(mainclk_hz / speed_hz, cpsdvr);
++ /* now we have SCR+1 in scr, so count with that */
++ if (scr == 0) { /* speed_hz too big */
++ return -EINVAL;
++ }
++ if (scr <= (255 + 1))
++ break; /* we have valid scr and cpsdvr */
++ }
++ if (cpsdvr > 254) {
++ /* speed_hz is too small, set to minimum speed */
++ scr = cpsdvr + 1;
++ cpsdvr--;
++ }
++ scr--;
++ write_reg(cpsdvr, drv_data->ioaddr, SSPCPSR);
++ ssp_cr0 = read_reg(drv_data->ioaddr, SSPCR0);
++ ssp_cr0 &= ~(SSP_CONTROL_SCR(0xff));
++ write_reg((ssp_cr0 | SSP_CONTROL_SCR(scr)), drv_data->ioaddr, SSPCR0);
++
++ return 0;
++}
++
++static irqreturn_t ssp_int(int irq, void *dev_id)
++{
++ struct ep93xx_spi *drv_data = dev_id;
++ write_reg(SSP_SSPIxx_RORIS, drv_data->ioaddr, SSPIxR); /* clear it */
++
++ printk(KERN_WARNING "SSP overrun\n");
++ return IRQ_HANDLED;
++}
++
++static int transfer_one_work(struct ep93xx_spi *drv_data, struct spi_message *msg)
++{
++ struct spi_device *spi = msg->spi;
++ struct spi_transfer *xfer;
++ int i;
++ u8 *p;
++
++ drv_data->cs_chip->cs_control(SPI_CS_ASSERT);
++
++ list_for_each_entry(xfer, &msg->transfers, transfer_list) {
++ if (!(xfer->tx_buf || xfer->rx_buf)) {
++ dev_dbg(&spi->dev, "missing rx or tx buf\n");
++ drv_data->cs_chip->cs_control(SPI_CS_DEASSERT);
++ return -EINVAL;
++ }
++
++ if (xfer->bits_per_word) {
++ u16 v = read_reg(drv_data->ioaddr, SSPCR0);
++ v = v & SSP_CONTROL_DSS_MASK;
++ v = v | ((xfer->bits_per_word - 1) & SSP_CONTROL_DSS_MASK);
++ write_reg(v, drv_data->ioaddr, SSPCR0);
++ }
++
++ if (xfer->speed_hz) {
++ if (spi_speed_set(drv_data,xfer->speed_hz) != 0){
++ dev_err(&spi->dev, "xfer speed hz invalid\n");
++ return -EINVAL;
++ }
++ }
++
++ if (xfer->tx_buf) {
++ p = (u8 *)xfer->tx_buf;
++
++ if ((spi->bits_per_word == 16 && xfer->bits_per_word == 0) ||
++ (xfer->bits_per_word == 16)) {
++ for (i = 0; i < xfer->len; i+=2)
++ write_reg((p[i] << 8) + p[i+1], drv_data->ioaddr, SSPDR);
++ } else {
++ for (i = 0; i < xfer->len; i++)
++ write_reg(p[i], drv_data->ioaddr, SSPDR);
++ }
++ }
++
++ if (xfer->rx_buf) {
++ u16 v;
++ p = xfer->rx_buf;
++
++ if ((spi->bits_per_word == 16 && xfer->bits_per_word == 0) ||
++ (xfer->bits_per_word == 16)) {
++ for (i = 0; i < xfer->len; i+=2) {
++ v = read_reg(drv_data->ioaddr, SSPDR);
++ p[i] = v >> 8;
++ p[i+1] = v & 0xFF;
++ }
++ } else {
++ for (i = 0; i < xfer->len; i++)
++ p[i] = read_reg(drv_data->ioaddr, SSPDR);
++ }
++ }
++
++ /* restore device bits_per_word */
++ if (xfer->bits_per_word) {
++ u16 v = read_reg(drv_data->ioaddr, SSPCR0);
++ v = v & SSP_CONTROL_DSS_MASK;
++ v |= spi->bits_per_word - 1;
++ write_reg(v, drv_data->ioaddr, SSPCR0);
++ }
++
++ /* restore device speed_hz */
++ if (xfer->speed_hz) {
++ if (spi_speed_set(drv_data,spi->max_speed_hz) != 0)
++ return -EINVAL;
++ }
++
++ dev_dbg(&spi->dev, "transfer: len=%u, tx_buf=%p, rx_buf=%p\n", xfer->len, xfer->tx_buf, xfer->rx_buf);
++ }
++
++ if (xfer->delay_usecs)
++ udelay(xfer->delay_usecs);
++ drv_data->cs_chip->cs_control(SPI_CS_DEASSERT);
++
++ msg->actual_length = 0;
++ msg->status = 0;
++
++ if (msg->complete)
++ msg->complete(msg->context);
++
++ return 0;
++}
++
++
++static void ssp_work(struct work_struct *work)
++{
++ struct ep93xx_spi *drv_data = container_of(work, struct ep93xx_spi, work);
++ unsigned long flags;
++
++ spin_lock_irqsave(&drv_data->lock, flags);
++ while (!list_empty(&drv_data->queue)) {
++ struct spi_message *m;
++
++ m = container_of(drv_data->queue.next, struct spi_message, queue);
++ list_del_init(&m->queue);
++ spin_unlock_irqrestore(&drv_data->lock, flags);
++
++ transfer_one_work(drv_data, m);
++
++ spin_lock_irqsave(&drv_data->lock, flags);
++ }
++ spin_unlock_irqrestore(&drv_data->lock, flags);
++}
++
++
++static int ssp_transfer(struct spi_device *spi, struct spi_message *m)
++{
++ struct spi_master *master = spi->master;
++ struct ep93xx_spi *drv_data = spi_master_get_devdata(master);
++ struct spi_transfer *t;
++ unsigned long flags;
++
++ m->actual_length = 0;
++
++ /* check each transfer's parameters */
++ list_for_each_entry (t, &m->transfers, transfer_list) {
++ u32 speed_hz = t->speed_hz ? t->speed_hz : spi->max_speed_hz;
++ u8 bits_per_word = t->bits_per_word ? t->bits_per_word : spi->bits_per_word;
++
++ if (!t->tx_buf && !t->rx_buf && t->len)
++ return -EINVAL;
++ if (bits_per_word < 4 || bits_per_word > 16)
++ return -EINVAL;
++ /*if (t->len & ((bits_per_word >> 3) - 1))
++ return -EINVAL;*/
++ if (speed_hz < drv_data->freq_min || speed_hz > drv_data->freq_max)
++ return -EINVAL;
++ }
++
++ spin_lock_irqsave(&drv_data->lock, flags);
++ list_add_tail(&m->queue, &drv_data->queue);
++ queue_work(drv_data->workqueue, &drv_data->work);
++ spin_unlock_irqrestore(&drv_data->lock, flags);
++
++ return 0;
++
++}
++
++/* the spi->mode bits understood by this driver: */
++#define MODEBITS (SPI_CPOL | SPI_CPHA)
++
++static int ssp_setup(struct spi_device *spi)
++{
++ struct ep93xx_spi *drv_data = spi_master_get_devdata(spi->master);
++ struct ep93xx_spi_chip *chip_info;
++ u16 v;
++
++ /* Get controller data */
++ chip_info = spi->controller_data;
++ if (!chip_info) {
++ dev_err(&spi->dev, "setup: controller data required\n");
++ return -EINVAL;
++ }
++ drv_data->cs_chip = chip_info;
++ drv_data->cs_chip->cs_control(SPI_CS_INIT);
++
++ if (!spi->bits_per_word) {
++ spi->bits_per_word = 8;
++ }
++
++ if (spi->bits_per_word < 4 || spi->bits_per_word > 16) {
++ dev_dbg(&spi->dev, "setup: unsupported %d bit words\n",
++ spi->bits_per_word);
++ return -EINVAL;
++ }
++
++ if (spi->chip_select > spi->master->num_chipselect) {
++ dev_dbg(&spi->dev, "setup: invalid chipselect %u (%u defined)\n",
++ spi->chip_select, spi->master->num_chipselect);
++ return -EINVAL;
++ }
++
++ if (spi->mode & ~MODEBITS) {
++ dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
++ spi->mode & ~MODEBITS);
++ return -EINVAL;
++ }
++
++ v = read_reg(drv_data->ioaddr, SSPCR0);
++
++ if (spi->mode & SPI_CPOL)
++ v |= SSP_CONTROL_SPO;
++ else
++ v &= ~SSP_CONTROL_SPO;
++
++ if (spi->mode & SPI_CPHA)
++ v |= SSP_CONTROL_SPH;
++ else
++ v &= ~SSP_CONTROL_SPH;
++
++ v = v & SSP_CONTROL_DSS_MASK;
++ v |= spi->bits_per_word - 1;
++
++ write_reg(v, drv_data->ioaddr, SSPCR0);
++
++ if(!spi->max_speed_hz){
++ spi->max_speed_hz = drv_data->freq_min;
++ }else if(spi->max_speed_hz > drv_data->freq_max ||
++ spi->max_speed_hz < drv_data->freq_min){
++ return -EINVAL;
++ }
++
++ if (spi_speed_set(drv_data,spi->max_speed_hz) != 0){
++ dev_dbg(&spi->dev, "setup: unsupported speed %u\n", spi->max_speed_hz);
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++
++static void ssp_cleanup(struct spi_device *spi)
++{
++ struct ep93xx_spi *drv_data = spi_master_get_devdata(spi->master);
++ drv_data->cs_chip = NULL;
++}
++
++
++static int __init spi_ep93xx_probe(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct spi_master *master;
++ struct ep93xx_spi_data *spi_data = pdev->dev.platform_data;
++ struct ep93xx_spi *drv_data = 0;
++ struct resource *memory_resource;
++ int irq, status = 0, min_div = 2, max_div = 254*(255+1);
++
++
++ /* Check I2SonSSP bit (ssp pins and i2s pins are multiplexed) */
++ if (readl(EP93XX_SYSCON_DEVICE_CONFIG) & 0x80)
++ return -ENODEV;
++
++ /* Allocate master with space for drv_data */
++ master = spi_alloc_master(dev, sizeof(struct ep93xx_spi));
++ if (!master) {
++ dev_err(&pdev->dev, "can not alloc spi_master\n");
++ return -ENOMEM;
++ }
++
++ /* Setup register addresses */
++ memory_resource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!memory_resource) {
++ dev_err(&pdev->dev, "memory resources not defined\n");
++ status = -ENODEV;
++ goto out_error_master_alloc;
++ }
++
++ drv_data = spi_master_get_devdata(master);
++ drv_data->master = master;
++ drv_data->ioaddr = (unsigned long *)memory_resource->start;
++ drv_data->clk = clk_get(&pdev->dev, "sspclk");
++ drv_data->freq_max = clk_get_rate(drv_data->clk) / min_div;
++ drv_data->freq_min = clk_get_rate(drv_data->clk) / max_div + 1;
++
++ INIT_WORK(&drv_data->work, ssp_work);
++ spin_lock_init(&drv_data->lock);
++ INIT_LIST_HEAD(&drv_data->queue);
++
++ drv_data->workqueue = create_singlethread_workqueue(master->dev.parent->bus_id);
++ if (!drv_data->workqueue){
++ status = -EBUSY;
++ goto out_error_master_alloc;
++ }
++
++ master->bus_num = pdev->id;
++ master->num_chipselect = spi_data->chip_select_num;
++ master->cleanup = ssp_cleanup;
++ master->setup = ssp_setup;
++ master->transfer = ssp_transfer;
++
++ /* Attach to IRQ */
++ irq = platform_get_irq(pdev, 0);
++ if (irq < 0) {
++ dev_err(&pdev->dev, "irq resource not defined\n");
++ status = -ENODEV;
++ goto out_error_master_alloc;
++ }
++
++ status = request_irq(irq, ssp_int, 0, dev->bus_id, drv_data);
++ if (status < 0) {
++ dev_err(&pdev->dev, "can not get IRQ\n");
++ goto out_error_master_alloc;
++ }
++
++ /* Load default SSP configuration */
++ write_reg(SSP_CONTROL_SSE, drv_data->ioaddr, SSPCR1);
++ write_reg(SPI_DEFAULT0, drv_data->ioaddr, SSPCR0);
++ write_reg(SPI_DEFAULT_DIVISOR, drv_data->ioaddr, SSPCPSR);
++ write_reg(0x00, drv_data->ioaddr, SSPCR1);
++
++ /* Register with the SPI framework */
++ platform_set_drvdata(pdev, drv_data);
++ status = spi_register_master(master);
++ if (status != 0) {
++ dev_err(&pdev->dev, "problem registering spi master\n");
++ goto out_error_irq_alloc;
++ }
++
++ write_reg(SPI_DEFAULT1, drv_data->ioaddr, SSPCR1);
++ return status;
++
++out_error_irq_alloc:
++ free_irq(irq, drv_data);
++
++out_error_master_alloc:
++ spi_master_put(master);
++ return status;
++}
++
++static int spi_ep93xx_remove(struct platform_device *pdev)
++{
++ struct ep93xx_spi *drv_data = platform_get_drvdata(pdev);
++ int irq;
++
++ if (!drv_data)
++ return 0;
++
++ /* Disable SSP (clear SSE bit) */
++ write_reg(0x00, drv_data->ioaddr, SSPCR1);
++
++ /* Release IRQ */
++ irq = platform_get_irq(pdev, 0);
++
++ if (irq >= 0)
++ free_irq(irq, drv_data);
++
++ /* Disconnect from the SPI framework */
++ spi_unregister_master(drv_data->master);
++
++ /* Remove the workqueue */
++ destroy_workqueue(drv_data->workqueue);
++
++ /* Prevent double remove */
++ platform_set_drvdata(pdev, NULL);
++
++ spi_master_put(drv_data->master);
++
++ return 0;
++}
++
++static void spi_ep93xx_shutdown(struct platform_device *pdev)
++{
++ int status = 0;
++
++ if ((status = spi_ep93xx_remove(pdev)) != 0)
++ dev_err(&pdev->dev, "shutdown failed with %d\n", status);
++}
++
++static struct platform_driver ep93xx_spi_platform_driver = {
++ .driver = {
++ .name = "ep93xx-spi",
++ .bus = &platform_bus_type,
++ .owner = THIS_MODULE,
++ },
++ .remove = __exit_p(spi_ep93xx_remove),
++ .shutdown = spi_ep93xx_shutdown,
++};
++
++static int __init spi_ep93xx_init(void)
++{
++ return platform_driver_probe(&ep93xx_spi_platform_driver, spi_ep93xx_probe);
++}
++
++static void __exit spi_ep93xx_exit(void)
++{
++ platform_driver_unregister(&ep93xx_spi_platform_driver);
++}
++
++module_init(spi_ep93xx_init);
++module_exit(spi_ep93xx_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("EP93xx SPI Controller Driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.21");
+diff --git a/drivers/spi/spi_ep93xx.h b/drivers/spi/spi_ep93xx.h
+new file mode 100644
+index 0000000..6fad735
+--- /dev/null
++++ b/drivers/spi/spi_ep93xx.h
+@@ -0,0 +1,61 @@
++/*
++ * EP93xx SPI (simple) include
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on pxa2xx_spi.c by Stephen Street / StreetFire Sound Labs
++ *
++ * 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.
++ *
++ */
++
++/* SSP Registers */
++#define SSPCR0 0x00 /* Control register 0 */
++#define SSPCR1 0x04 /* Control register 1 */
++#define SSPDR 0x08 /* Receice FIFO data register (16-bit read) */
++ /* Transmit FIFO data register (16-bit write) */
++#define SSPSR 0x0C /* Status register */
++#define SSPCPSR 0x10 /* Clock prescale register (from 2 to 254, even number) */
++#define SSPIxR 0x14 /* Interrupt identification register (read) */
++ /* Interrupt clear register (write) */
++
++/* SSP control registers bit fields & masks */
++#define SSP_CONTROL_SCR(x) (((x) & 0xFF) << 8) /* Serial clock rate = SCLKOUT / CPSDVR / (1+SCR) */
++#define SSP_CONTROL_SPH (1 << 7) /* SCLKOUT phase (for SPI only) */
++#define SSP_CONTROL_SPO (1 << 6) /* SCLKOUT polarity (for SPI only) */
++#define SSP_CONTROL_FRF(x) (((x) & 3) << 4) /* Frame format (0=SPI) */
++#define SSP_CONTROL_DSS_4BIT_DATA 3
++#define SSP_CONTROL_DSS_8BIT_DATA 7
++#define SSP_CONTROL_DSS_15BIT_DATA 14
++#define SSP_CONTROL_DSS_16BIT_DATA 15
++#define SSP_CONTROL_DSS_MASK 0xF
++#define SSP_CONTROL_MS (1 << 5) /* 0=master, 1=slave (can be modified when SSE=0) */
++#define SSP_CONTROL_SSE (1 << 4) /* SSP operation enable (=1), disable (=0) */
++#define SSP_CONTROL_LBM (1 << 3) /* Loop back mode */
++#define SSP_CONTROL_RORIE (1 << 2) /* Interrupt enable : overrun condition */
++#define SSP_CONTROL_TIE (1 << 1) /* Interrupt enable : transmit fifo */
++#define SSP_CONTROL_RIE (1 << 0) /* Interrupt enable : receive fifo */
++
++/* SSP status register (read only) */
++#define SSP_STATUS_BUSY (1 << 4) /* Busy flag (0: SSP is idle) */
++#define SSP_STATUS_RFF (1 << 3) /* Receive fifo full ? (1=full) */
++#define SSP_STATUS_RNE (1 << 2) /* Receive fifo not empty ? (0=empty) */
++#define SSP_STATUS_TNF (1 << 1) /* Transmit fifo not full ? (0=full) */
++#define SSP_STATUS_TFE (1 << 0) /* Transmit fifo empty ? (1=empty) */
++
++/* SSP SSPIIR/SSPICR register (write 1 to clear interrupt) */
++#define SSP_SSPIxx_RORIS (1 << 2) /* Receive fifo overrun interrupt status */
++#define SSP_SSPIxx_TIS (1 << 1) /* Transmit fifo service request interrupt status */
++#define SSP_SSPIxx_RIS (1 << 0) /* Receive fifo service request interrupt status */
++
++/* Default configuration values */
++#define SPI_DEFAULT0 (SSP_CONTROL_DSS_16BIT_DATA | SSP_CONTROL_FRF(0) | SSP_CONTROL_SCR(0))
++#define SPI_DEFAULT1 (SSP_CONTROL_SSE | SSP_CONTROL_RORIE)
++#define SPI_DEFAULT_DIVISOR 254
+diff --git a/drivers/spi/tmp124.c b/drivers/spi/tmp124.c
+new file mode 100644
+index 0000000..7f7deaf
+--- /dev/null
++++ b/drivers/spi/tmp124.c
+@@ -0,0 +1,158 @@
++/*
++ * TMP124 SPI protocol driver
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on tle62x0.c by Ben Dooks, <ben@simtec.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.
++ *
++ * Note: The chip uses a '3-wire SPI' (miso and mosi are the same pin).
++ */
++
++#include <linux/device.h>
++#include <linux/kernel.h>
++#include <linux/spi/spi.h>
++
++struct tmp124_state {
++ struct spi_device *bus;
++ u8 tx_buff[2];
++ u8 rx_buff[2];
++};
++
++
++static inline int tmp124_write_then_read(struct tmp124_state *st)
++{
++ struct spi_message msg;
++ struct spi_transfer xfer[2] = {
++ {
++ .tx_buf = st->tx_buff,
++ .rx_buf = NULL,
++ .len = 2,
++ .delay_usecs = 1000,
++ }, {
++ .tx_buf = NULL,
++ .rx_buf = st->rx_buff,
++ .len = 2,
++ }
++ };
++
++ spi_message_init(&msg);
++ spi_message_add_tail(&xfer[0], &msg);
++ spi_message_add_tail(&xfer[1], &msg);
++
++ return spi_sync(st->bus, &msg);
++}
++
++
++static ssize_t tmp124_temperature_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct tmp124_state *st = dev_get_drvdata(dev);
++ int ret;
++
++ st->tx_buff[0] = 0x80;
++ st->tx_buff[1] = 0x00;
++
++ ret = tmp124_write_then_read(st);
++ if (ret < 0) {
++ dev_err(&st->bus->dev, "tmp124_write_then_read\n");
++ ret = 0;
++ } else {
++ signed short v = (st->rx_buff[0] << 8) + st->rx_buff[1];
++ signed long val;
++
++ val = v >> 3;
++
++ /* 2 digit precision (0.0625*100) */
++ val = (val * 50) / 8;
++ ret = snprintf(buf, PAGE_SIZE, "%ld.%02d\n", val/100, abs(val%100));
++ }
++ return ret;
++}
++
++
++static DEVICE_ATTR(temperature, S_IRUGO, tmp124_temperature_show, NULL);
++
++
++static int __devinit tmp124_probe(struct spi_device *spi)
++{
++ struct tmp124_state *st;
++ int ret;
++
++ st = kzalloc(sizeof(struct tmp124_state), GFP_KERNEL);
++ if (st == NULL) {
++ dev_err(&spi->dev, "no memory for device state\n");
++ return -ENOMEM;
++ }
++
++ /* required config */
++ spi->bits_per_word = 16;
++
++ st->bus = spi;
++
++ ret = spi_setup(spi);
++ if (ret) {
++ dev_err(&spi->dev, "setup device\n");
++ goto err;
++ }
++
++ ret = device_create_file(&spi->dev, &dev_attr_temperature);
++ if (ret) {
++ dev_err(&spi->dev, "cannot create temperature attribute\n");
++ goto err;
++ }
++
++ spi_set_drvdata(spi, st);
++ return 0;
++
++err:
++ kfree(st);
++ return ret;
++}
++
++
++static int __devexit tmp124_remove(struct spi_device *spi)
++{
++ struct tmp124_state *st = spi_get_drvdata(spi);
++
++ device_remove_file(&spi->dev, &dev_attr_temperature);
++ kfree(st);
++
++ return 0;
++}
++
++
++static struct spi_driver tmp124_driver = {
++ .driver = {
++ .name = "tmp124",
++ .owner = THIS_MODULE,
++ },
++ .probe = tmp124_probe,
++ .remove = __devexit_p(tmp124_remove),
++};
++
++static __init int tmp124_init(void)
++{
++ return spi_register_driver(&tmp124_driver);
++}
++
++static __exit void tmp124_exit(void)
++{
++ spi_unregister_driver(&tmp124_driver);
++}
++
++module_init(tmp124_init);
++module_exit(tmp124_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TMP124 SPI Protocol Driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.1");
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0020-TS-72XX-LCD-console-driver.patch b/recipes/linux/linux-2.6.27/ts72xx/0020-TS-72XX-LCD-console-driver.patch
new file mode 100644
index 0000000000..88105b9bf5
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0020-TS-72XX-LCD-console-driver.patch
@@ -0,0 +1,509 @@
+From 21b42402132b32de5ba249a8ae5024228be1b7f0 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 13:01:07 +0100
+Subject: [PATCH] TS-72XX LCD console driver
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h | 4 +
+ drivers/video/console/Kconfig | 21 ++
+ drivers/video/console/Makefile | 2 +
+ drivers/video/console/ts72xx_con.c | 423 +++++++++++++++++++++++
+ 4 files changed, 450 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/video/console/ts72xx_con.c
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+index be0b9d4..c0a8a95 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
++++ b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+@@ -94,6 +94,10 @@
+ #define EP93XX_GPIO_B_INT_STATUS EP93XX_GPIO_REG(0xbc)
+ #define EP93XX_GPIO_B_INT_DEBOUNCE EP93XX_GPIO_REG(0xc4)
+
++#define EP93XX_GPIO_A_DATA EP93XX_GPIO_REG(0x00)
++#define EP93XX_GPIO_A_DIRECTION EP93XX_GPIO_REG(0x10)
++#define EP93XX_GPIO_B_DATA EP93XX_GPIO_REG(0x04)
++
+ #define EP93XX_AAC_BASE (EP93XX_APB_VIRT_BASE + 0x00080000)
+
+ #define EP93XX_SPI_BASE (EP93XX_APB_VIRT_BASE + 0x000a0000)
+diff --git a/drivers/video/console/Kconfig b/drivers/video/console/Kconfig
+index 06f87b0..66cc833 100644
+--- a/drivers/video/console/Kconfig
++++ b/drivers/video/console/Kconfig
+@@ -111,6 +111,27 @@ config DUMMY_CONSOLE_ROWS
+ The default value is 64, which should fit a 1280x1024 monitor.
+ Select 25 if you use a 640x480 resolution by default.
+
++config TS72XX_CONSOLE
++ tristate "TS-72xx text LCD console"
++ depends on ARCH_EP93XX && MACH_TS72XX
++ help
++ Say Y to build a console driver for TS-72xx LCD (2x7) header.
++ LCD display must be compatible with HD44780 controller.
++
++config TS72XX_CONSOLE_COLUMNS
++ int "Initial number of console screen columns"
++ depends on TS72XX_CONSOLE
++ default "20"
++ help
++ Dependant to your text LCD, 16 or 20 are legacy values.
++
++config TS72XX_CONSOLE_ROWS
++ int "Initial number of console screen rows"
++ depends on TS72XX_CONSOLE
++ default "4"
++ help
++ Dependant to your text LCD, 2 or 4 are legacy values.
++
+ config FRAMEBUFFER_CONSOLE
+ tristate "Framebuffer Console support"
+ depends on FB
+diff --git a/drivers/video/console/Makefile b/drivers/video/console/Makefile
+index ac46cc3..4244b5e 100644
+--- a/drivers/video/console/Makefile
++++ b/drivers/video/console/Makefile
+@@ -26,6 +26,8 @@ obj-$(CONFIG_PROM_CONSOLE) += promcon.o promcon_tbl.o
+ obj-$(CONFIG_STI_CONSOLE) += sticon.o sticore.o font.o
+ obj-$(CONFIG_VGA_CONSOLE) += vgacon.o
+ obj-$(CONFIG_MDA_CONSOLE) += mdacon.o
++obj-$(CONFIG_TS72XX_CONSOLE) += ts72xx_con.o
++
+ obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += fbcon.o bitblit.o font.o softcursor.o
+ ifeq ($(CONFIG_FB_TILEBLITTING),y)
+ obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += tileblit.o
+diff --git a/drivers/video/console/ts72xx_con.c b/drivers/video/console/ts72xx_con.c
+new file mode 100644
+index 0000000..726085f
+--- /dev/null
++++ b/drivers/video/console/ts72xx_con.c
+@@ -0,0 +1,423 @@
++/*
++ * TS-72XX lcd console driver for Technologic Systems boards.
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on linux/drivers/video/console/dummycon.c
++ * Thanks to Jim Jackson (lcdd-0.2beta)
++ *
++ * 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.
++ *
++ * Note: Port H (LCD_EN, LCD_RS, LCD_WR) uses the new generic GPIO API.
++ * Port A is used manually used. To fix in future.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/console.h>
++#include <linux/vt_kern.h>
++#include <mach/hardware.h>
++#include <mach/gpio.h>
++
++#define DRV_VERSION "0.2"
++#define PFX "ts72xx_con: "
++
++#define LCD_COLUMNS CONFIG_TS72XX_CONSOLE_COLUMNS
++#define LCD_ROWS CONFIG_TS72XX_CONSOLE_ROWS
++
++/* HD44780 instruction set */
++#define CMD_CLEAR (0x01)
++#define CMD_CURSOR_HOME (0x02)
++#define CMD_ENTRY_MODE(cursor_dir, display_shift) (0x04|(2*cursor_dir)|display_shift)
++#define CMD_DISPLAY_ONOFF(dis_on, cur_on, cur_blink_on) (0x08|(4*dis_on)|(2*cur_on)|cur_blink_on)
++#define CMD_FUNCTION_SET(intf_8bit, n, f) (0x20|(16*intf_8bit)|(8*n)|(4*f))
++#define CMD_DDRAM_ADDR(a) (0x80|(a))
++
++/* Port H, bit 3:5 */
++#define LCD_EN EP93XX_GPIO_LINE_H(3)
++#define LCD_RS EP93XX_GPIO_LINE_H(4)
++#define LCD_WR EP93XX_GPIO_LINE_H(5)
++
++/* Timings */
++#define SETUP_TIME 15
++#define ENABLE_TIME 36
++#define HOLD_TIME 22
++
++#define hd44780_delay(x) asm volatile ( \
++ "1:\n"\
++ "subs %1, %1, #1;\n"\
++ "bne 1b;\n"\
++ : "=r" ((x)) : "r" ((x)) \
++);
++
++
++/* Prototypes */
++static void hd44780_wait(void);
++static void hd44780_send_data(unsigned char data);
++static void hd44780_send_command(unsigned char command);
++static void hd44780_init(void);
++static int hd44780_gotoxy(int x, int y);
++
++
++/* HD44780 controller */
++
++static void hd44780_wait(void)
++{
++ int i;
++ unsigned char c;
++
++ __raw_writeb(0x00, EP93XX_GPIO_A_DIRECTION); // bus input
++ gpio_set_value(LCD_RS, 0); // low for control registers
++ gpio_set_value(LCD_WR, 1); // read command
++
++ do {
++ i = SETUP_TIME;
++ hd44780_delay(i);
++
++ gpio_set_value(LCD_EN, 1);
++
++ i = ENABLE_TIME;
++ hd44780_delay(i);
++
++ c = __raw_readb(EP93XX_GPIO_A_DATA);
++ gpio_set_value(LCD_EN, 0);
++ } while (c & 0x80); // busy flag
++
++ i = HOLD_TIME;
++ hd44780_delay(i);
++}
++
++
++static void hd44780_send_data(unsigned char data)
++{
++ int i;
++
++ __raw_writeb(0xFF, EP93XX_GPIO_A_DIRECTION); // bus output
++ gpio_set_value(LCD_RS, 1); // high for data
++ gpio_set_value(LCD_WR, 0); // write data
++
++ i = SETUP_TIME;
++ hd44780_delay(i);
++
++ __raw_writeb(data, EP93XX_GPIO_A_DATA);
++ gpio_set_value(LCD_EN, 1);
++
++ i = ENABLE_TIME;
++ hd44780_delay(i);
++
++ gpio_set_value(LCD_EN, 0);
++
++ i = HOLD_TIME;
++ hd44780_delay(i);
++}
++
++
++static void hd44780_send_command(unsigned char command)
++{
++ int i;
++
++ __raw_writeb(0xFF, EP93XX_GPIO_A_DIRECTION); // bus output
++ gpio_set_value(LCD_RS, 0); // low for control registers
++ gpio_set_value(LCD_WR, 0); // write command
++
++ i = SETUP_TIME;
++ hd44780_delay(i);
++
++ __raw_writeb(command, EP93XX_GPIO_A_DATA);
++ gpio_set_value(LCD_EN, 1);
++
++ i = ENABLE_TIME;
++ hd44780_delay(i);
++
++ gpio_set_value(LCD_EN, 0);
++
++ i = HOLD_TIME;
++ hd44780_delay(i);
++}
++
++
++static void hd44780_init(void)
++{
++ int i;
++
++ gpio_direction_output(LCD_EN, 0);
++ gpio_direction_output(LCD_RS, 0);
++ gpio_direction_output(LCD_WR, 0);
++
++ /* Port A (8 bits) is data bus */
++ __raw_writeb(0x00, EP93XX_GPIO_A_DATA);
++ __raw_writeb(0x00, EP93XX_GPIO_A_DIRECTION);
++
++ /* 8-bit mode, double line, 5x7 dot character format */
++ hd44780_send_command(CMD_FUNCTION_SET(1,1,1));
++ i = 5000;
++ hd44780_delay(i);
++
++ /* Display on and blink cursor on */
++ hd44780_send_command(CMD_DISPLAY_ONOFF(1,1,1));
++ hd44780_wait();
++
++ /* Cursor in increment position and shift is invisible */
++ hd44780_send_command(CMD_ENTRY_MODE(0,0));
++ hd44780_wait();
++
++ /* Clean display and return cursor to home position */
++ hd44780_send_command(CMD_CLEAR);
++ hd44780_wait();
++}
++
++
++static int hd44780_gotoxy(int x, int y)
++{
++ const unsigned char lines[4] = { 0x00, 0x40, 0x14, 0x54 };
++
++ if ((x == 0) && (y == 0)) {
++ hd44780_send_command(CMD_CURSOR_HOME);
++ hd44780_wait();
++ } else if (y < 4) {
++ hd44780_send_command(CMD_DDRAM_ADDR(lines[y]+x));
++ hd44780_wait();
++ }
++
++ return 0;
++}
++
++
++/* Console operation functions */
++
++static const char *lcdcon_startup(void)
++{
++ return "ts72xx lcd console";
++}
++
++
++static void lcdcon_init(struct vc_data *vc, int init)
++{
++ hd44780_init();
++
++ vc->vc_can_do_color = 0;
++ vc->vc_video_erase_char = 0x20;
++
++ if (init) {
++ vc->vc_cols = LCD_COLUMNS;
++ vc->vc_rows = LCD_ROWS;
++ } else
++ vc_resize(vc, LCD_COLUMNS, LCD_ROWS);
++
++}
++
++
++static void lcdcon_deinit(struct vc_data *vc)
++{
++}
++
++
++static void lcdcon_clear(struct vc_data *vc, int sy, int sx,
++ int height, int width)
++{
++ int i, j;
++
++ if (!height || !width)
++ return;
++
++ for (i = 0; i < height; i++) {
++ hd44780_gotoxy(sx, sy + i);
++ for (j = 0; j < width; j++) {
++ hd44780_send_data((unsigned char)vc->vc_video_erase_char);
++ hd44780_wait();
++ }
++ }
++
++}
++
++
++static int lcdcon_blank(struct vc_data *vc, int blank, int mode_switch)
++{
++ unsigned char c;
++
++ if (blank == 0) {
++ c = CMD_DISPLAY_ONOFF(1,1,1); /* Display on */
++ } else {
++ c = CMD_DISPLAY_ONOFF(0,1,1); /* Display off */
++ }
++
++ hd44780_send_command(c);
++ hd44780_wait();
++
++ return 1;
++}
++
++
++static int lcdcon_set_palette(struct vc_data *vc, unsigned char *table)
++{
++ return -EINVAL;
++}
++
++
++static void lcdcon_putc(struct vc_data *vc, int c, int y, int x)
++{
++ if (vc->vc_mode != KD_TEXT)
++ return;
++
++ hd44780_gotoxy(x, y);
++ hd44780_send_data((unsigned char)c);
++ hd44780_wait();
++}
++
++
++static void lcdcon_putcs(struct vc_data *vc, const unsigned short *s,
++ int count, int y, int x)
++{
++ if (vc->vc_mode != KD_TEXT)
++ return;
++
++ hd44780_gotoxy(x, y);
++ while (count--) {
++ hd44780_send_data((unsigned char)(*s));
++ hd44780_wait();
++ s++;
++ }
++
++}
++
++
++static void lcdcon_cursor(struct vc_data *vc, int mode)
++{
++ hd44780_gotoxy(vc->vc_x, vc->vc_y);
++
++ switch (mode) {
++ case CM_ERASE:
++ hd44780_send_command(CMD_DISPLAY_ONOFF(1,0,0)); // Cursor off
++ hd44780_wait();
++ break;
++
++ case CM_DRAW:
++ hd44780_send_command(CMD_DISPLAY_ONOFF(1,1,1)); // Cursor on, Blinking on
++ hd44780_wait();
++ break;
++
++ case CM_MOVE:
++ printk("lcdcon_cursor CM_MOVE not implemented\n");
++ break;
++ }
++
++}
++
++
++static int lcdcon_scroll(struct vc_data *vc, int t, int b, int dir, int count)
++{
++ int i;
++
++ if (!count)
++ return 0;
++
++ /* Special case */
++ //if (t || b != vc->vc_rows)
++ // scroll area
++
++ switch (dir) {
++ case SM_UP:
++ if (count > vc->vc_rows)
++ count = vc->vc_rows;
++
++ for (i = 0; i < (vc->vc_rows - count); i++) {
++ lcdcon_putcs(vc, vc->vc_screenbuf + (vc->vc_y - i)*vc->vc_cols,
++ vc->vc_cols, vc->vc_y - i -1, 0);
++ }
++
++ /* Clear last line */
++ hd44780_gotoxy(0, vc->vc_y);
++ for (i = 0; i < vc->vc_cols; i++) {
++ hd44780_send_data((unsigned char)vc->vc_video_erase_char);
++ hd44780_wait();
++ }
++ break;
++
++ case SM_DOWN:
++ printk("lcdcon_scroll DOWN (t=%d b=%d count=%d) not implemtented\n", t,b,count);
++ break;
++ }
++
++ return 0;
++}
++
++
++static void lcdcon_bmove(struct vc_data *vc, int sy, int sx,
++ int dy, int dx, int height, int width)
++{
++ int i, j;
++
++ if (!height || !width)
++ return;
++
++ for (i = 0; i < height; i++) {
++ hd44780_gotoxy(dx, dy + i);
++ for (j = 0; j < width; j++) {
++ hd44780_send_data((unsigned char)(*(vc->vc_screenbuf +
++ (sy+i)*vc->vc_cols + (sx+j) )));
++ hd44780_wait();
++ }
++ }
++}
++
++
++static int lcdcon_dummy(void)
++{
++ return 0;
++}
++
++#define DUMMY (void *)lcdcon_dummy
++
++
++/* Main structure */
++const struct consw ts72xx_lcd_con = {
++ .owner = THIS_MODULE,
++ .con_startup = lcdcon_startup,
++ .con_init = lcdcon_init,
++ .con_deinit = lcdcon_deinit,
++ .con_clear = lcdcon_clear,
++ .con_putc = lcdcon_putc,
++ .con_putcs = lcdcon_putcs,
++ .con_cursor = lcdcon_cursor,
++ .con_scroll = lcdcon_scroll,
++ .con_bmove = lcdcon_bmove,
++ .con_switch = DUMMY,
++ .con_blank = lcdcon_blank,
++
++ /* We cannot change color, fonts on character LCD */
++ .con_font_set = DUMMY,
++ .con_font_get = DUMMY,
++ .con_font_default = DUMMY,
++ .con_font_copy = DUMMY,
++ .con_set_palette = lcdcon_set_palette,
++
++ //.con_scrolldelta = lcdcon_scrolldelta,
++ //.con_set_origin = DUMMY,
++ //.con_save_screen = lcdcon_save_screen,
++ //.con_build_attr = lcdcon_build_attr,
++ //.con_invert_region = lcdcon_invert_region,
++ //.con_screen_pos = lcdcon_screen_pos,
++ //.con_getxy = lcdcon_getxy,
++};
++
++/* Module functions */
++
++static int __init ts72xx_lcd_init(void)
++{
++ return take_over_console(&ts72xx_lcd_con, 0, MAX_NR_CONSOLES-1, 1);
++}
++
++static void __exit ts72xx_lcd_exit(void)
++{
++ unregister_con_driver(&ts72xx_lcd_con);
++}
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TS-72xx lcd console driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
++
++module_init(ts72xx_lcd_init);
++module_exit(ts72xx_lcd_exit);
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0021-EP93xx-GPIO-matrix-keypad.patch b/recipes/linux/linux-2.6.27/ts72xx/0021-EP93xx-GPIO-matrix-keypad.patch
new file mode 100644
index 0000000000..b025b11782
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0021-EP93xx-GPIO-matrix-keypad.patch
@@ -0,0 +1,564 @@
+From e732ad0ba1fc82bfa922fe661f1aac4681e77cb6 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 13:04:56 +0100
+Subject: [PATCH] EP93xx GPIO matrix keypad
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/include/mach/ep93xx-keypad.h | 30 +++
+ drivers/input/keyboard/Kconfig | 43 +++
+ drivers/input/keyboard/Makefile | 4 +
+ drivers/input/keyboard/ep93xx-keypad.c | 291 +++++++++++++++++++++
+ drivers/input/keyboard/ts72xx_dio_3x4.c | 65 +++++
+ drivers/input/keyboard/ts72xx_dio_4x4.c | 65 +++++
+ 6 files changed, 498 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/include/mach/ep93xx-keypad.h
+ create mode 100644 drivers/input/keyboard/ep93xx-keypad.c
+ create mode 100644 drivers/input/keyboard/ts72xx_dio_3x4.c
+ create mode 100644 drivers/input/keyboard/ts72xx_dio_4x4.c
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx-keypad.h b/arch/arm/mach-ep93xx/include/mach/ep93xx-keypad.h
+new file mode 100644
+index 0000000..e39743a
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/include/mach/ep93xx-keypad.h
+@@ -0,0 +1,30 @@
++/*
++ * EP93xx "GPIO Port X" input keypad driver
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on OMAP Keypad Driver (omap-keypad.c)
++ *
++ * 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.
++ */
++
++#ifndef EP93XX_KEYPAD_H
++#define EP93XX_KEYPAD_H
++
++#define EP93XX_PORTX_MAXROW 4
++#define EP93XX_PORTX_MAXCOL 4
++
++/* Example: Port X bit 0..7 = C0,..Cx,R0..Ry
++ * Cols are outputs
++ * Rows are inputs
++ */
++struct ep93xx_gpio_portx_keypad_platform_data {
++ int nr_rows, nr_cols;
++ int keycodes[EP93XX_PORTX_MAXROW][EP93XX_PORTX_MAXCOL]; /* Left to right, from top to bottom */
++ int gpio_rows[EP93XX_PORTX_MAXROW]; /* R0, R1, .., R_{MAXROW-1} */
++ int gpio_cols[EP93XX_PORTX_MAXCOL]; /* C0, C1, .., C_{MAXCOL-1} */
++};
++
++#endif /* EP93XX_KEYPAD_H */
+diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
+index efd70a9..68df990 100644
+--- a/drivers/input/keyboard/Kconfig
++++ b/drivers/input/keyboard/Kconfig
+@@ -323,4 +323,47 @@ config KEYBOARD_SH_KEYSC
+
+ To compile this driver as a module, choose M here: the
+ module will be called sh_keysc.
++
++config KEYBOARD_EP93XX
++ tristate "EP93xx GPIO matrix keypad support"
++ depends on ARCH_EP93XX
++ help
++ This driver implements supports for a matrix keypad connected
++ to GPIO port B. Maximum of 4 rows and 4 cols are supported
++ (using up to 4 interrupts).
++ This is implemented as a platform driver.
++
++ To compile this driver as a module, choose M here: the
++ module will be called ep93xx-keypad.
++
++if KEYBOARD_EP93XX
++
++choice
++ prompt "Keypad type"
++ default TS72XX_DIO_4X4_KEYPAD
++
++config TS72XX_DIO_3X4_KEYPAD
++ tristate "TS-72xx 3x4 matrix keypad"
++ depends on MACH_TS72XX
++ help
++ This a 12 keys (4 rows, 3 cols using DIO_0-6) keypad with the following layout:
++ 1 2 3
++ 4 5 6
++ 7 8 9
++ * 0 #
++
++config TS72XX_DIO_4X4_KEYPAD
++ tristate "TS-72xx 4x4 matrix keypad"
++ depends on MACH_TS72XX
++ help
++ This a 16 keys (4 rows, 4 cols using DIO_0-7) keypad with the following layout:
++ 7 8 9 F
++ 4 5 6 E
++ 1 2 3 D
++ A 0 B C
++
++endchoice
++
++endif # KEYBOARD_EP93XX
++
+ endif
+diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile
+index 0edc8f2..550adc7 100644
+--- a/drivers/input/keyboard/Makefile
++++ b/drivers/input/keyboard/Makefile
+@@ -27,3 +27,7 @@ obj-$(CONFIG_KEYBOARD_HP7XX) += jornada720_kbd.o
+ obj-$(CONFIG_KEYBOARD_MAPLE) += maple_keyb.o
+ obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o
+ obj-$(CONFIG_KEYBOARD_SH_KEYSC) += sh_keysc.o
++obj-$(CONFIG_KEYBOARD_EP93XX) += ep93xx-keypad.o
++
++obj-$(CONFIG_TS72XX_DIO_3X4_KEYPAD) += ts72xx_dio_3x4.o
++obj-$(CONFIG_TS72XX_DIO_4X4_KEYPAD) += ts72xx_dio_4x4.o
+diff --git a/drivers/input/keyboard/ep93xx-keypad.c b/drivers/input/keyboard/ep93xx-keypad.c
+new file mode 100644
+index 0000000..7259f38
+--- /dev/null
++++ b/drivers/input/keyboard/ep93xx-keypad.c
+@@ -0,0 +1,291 @@
++/*
++ * EP93xx "GPIO Port B" input keypad driver
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on OMAP Keypad Driver (omap-keypad.c)
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/delay.h>
++#include <linux/input.h>
++#include <linux/platform_device.h>
++#include <linux/irq.h>
++#include <mach/hardware.h>
++#include <mach/gpio.h>
++
++#include <mach/ep93xx-keypad.h>
++
++#define DRV_NAME_PREFIX "ep93xx_keypad: "
++#define DRV_VERSION "2.0"
++
++/* We choose port B */
++#define EP93XX_GPIO_X_DATA EP93XX_GPIO_B_DATA
++#define EP93XX_GPIO_LINE_X EP93XX_GPIO_LINE_B
++
++struct ep93xx_gpio_portx_keypad {
++ u8 rows;
++ u8 cols;
++ int irqs[EP93XX_PORTX_MAXROW];
++ u8 mask_input;
++ u8 mask_output;
++ u8 row_trigger, col_trigger;
++ u8 mask_input_trigger;
++ struct timer_list timer;
++ struct input_dev *input;
++ struct ep93xx_gpio_portx_keypad_platform_data *rsc;
++};
++
++static void ep93xx_gpio_portx_tasklet(unsigned long);
++static void ep93xx_gpio_portx_timer(unsigned long);
++
++DECLARE_TASKLET_DISABLED(kp_tasklet, ep93xx_gpio_portx_tasklet, 0);
++
++
++static void ep93xx_gpio_portx_timer(unsigned long data)
++{
++ struct ep93xx_gpio_portx_keypad *ctx = (struct ep93xx_gpio_portx_keypad *)data;
++ int i;
++
++ for (i = 0; i < ctx->rows; i++)
++ enable_irq(ctx->irqs[i]);
++}
++
++
++static void ep93xx_gpio_portx_tasklet(unsigned long data)
++{
++ struct ep93xx_gpio_portx_keypad *ctx = (struct ep93xx_gpio_portx_keypad *)data;
++ int i, j;
++ u8 save;
++
++ /* Save data register */
++ save = __raw_readb(EP93XX_GPIO_X_DATA);
++
++ /* Make sure row is still 0 */
++ if (!(save & ctx->mask_input_trigger)) {
++
++ for (i = 0; i < ctx->cols; i++) {
++ for (j = 0; j < ctx->cols; j++) {
++ if (i == j)
++ gpio_set_value(EP93XX_GPIO_LINE_X(ctx->rsc->gpio_cols[j]), 1); //high
++ else
++ gpio_set_value(EP93XX_GPIO_LINE_X(ctx->rsc->gpio_cols[j]), 0); //low
++ }
++
++ if (__raw_readb(EP93XX_GPIO_X_DATA) & ctx->mask_input_trigger) {
++ ctx->col_trigger = i;
++ //printk("=>key col=%d, row=%d |%x\n", i, ctx->row_trigger, ctx->rsc->keycodes[ctx->row_trigger][i]);
++ input_report_key(ctx->input, ctx->rsc->keycodes[ctx->row_trigger][ctx->col_trigger], 1);
++ input_sync(ctx->input);
++ }
++ }
++
++ } else { // key released
++ input_report_key(ctx->input, ctx->rsc->keycodes[ctx->row_trigger][ctx->col_trigger], 0);
++ input_sync(ctx->input);
++ }
++
++ /* Restore all outputs to 0 */
++ __raw_writeb(save, EP93XX_GPIO_X_DATA);
++
++ /* Wait a little before enabling IRQ again */
++ mod_timer(&ctx->timer, jiffies + HZ/10);
++}
++
++
++/* Interrupt handler */
++static irqreturn_t ep93xx_gpio_portx_key_int(int irq, void *dev_id)
++{
++ struct ep93xx_gpio_portx_keypad *ctx = dev_id;
++ int i;
++
++ for (i = 0; i < ctx->rows; i++)
++ disable_irq(ctx->irqs[i]);
++
++ ctx->mask_input_trigger = 0;
++ for (i = 0; i < ctx->rows; i++) {
++ if (gpio_to_irq(EP93XX_GPIO_LINE_X(ctx->rsc->gpio_rows[i])) == irq) {
++ ctx->row_trigger = i;
++ ctx->mask_input_trigger = (1 << ctx->rsc->gpio_rows[i]);
++ break;
++ }
++ }
++
++ // deferred-execution method
++ tasklet_schedule(&kp_tasklet);
++
++ return IRQ_HANDLED;
++}
++
++
++static int __devinit ep93xx_keypad_probe(struct platform_device *pdev)
++{
++ struct ep93xx_gpio_portx_keypad *ctx;
++ struct input_dev *input_dev;
++ int i, j, ret, irq_idx;
++ struct ep93xx_gpio_portx_keypad_platform_data *pdata = pdev->dev.platform_data;
++
++ const char *irq_names[EP93XX_PORTX_MAXROW] = {
++ "kp-row0", "kp-row1", "kp-row2", "kp-row3" };
++
++ if (pdata == NULL) {
++ return -EINVAL;
++ }
++
++ if (!pdata->nr_rows || !pdata->nr_cols ||
++ (pdata->nr_rows > EP93XX_PORTX_MAXROW) ||
++ (pdata->nr_cols > EP93XX_PORTX_MAXCOL)) {
++ printk(KERN_ERR DRV_NAME_PREFIX "No rows, cols from pdata\n");
++ return -EINVAL;
++ }
++
++ ctx = kzalloc(sizeof(struct ep93xx_gpio_portx_keypad), GFP_KERNEL);
++ if (!ctx) {
++ return -ENOMEM;
++ }
++
++ input_dev = input_allocate_device();
++ if (!input_dev) {
++ kfree(ctx);
++ return -ENOMEM;
++ }
++
++ platform_set_drvdata(pdev, ctx);
++
++ ctx->input = input_dev;
++ ctx->rsc = pdata;
++ ctx->rows = pdata->nr_rows;
++ ctx->cols = pdata->nr_cols;
++
++ input_dev->evbit[0] = BIT(EV_KEY); // | BIT(EV_REP);
++
++ for (i = 0; i < pdata->nr_rows; i++) {
++ for (j = 0; j < pdata->nr_cols; j++) {
++ int code = pdata->keycodes[i][j];
++ if (code > 0)
++ set_bit(code, input_dev->keybit);
++ }
++ }
++ __clear_bit(KEY_RESERVED, input_dev->keybit);
++
++ input_dev->name = "GPIO keypad";
++ input_dev->phys = "ep93xx-keypad/input0";
++ input_dev->dev.parent = &pdev->dev;
++
++ input_dev->id.bustype = BUS_HOST;
++ input_dev->id.vendor = 0x0001;
++ input_dev->id.product = 0x0001;
++ input_dev->id.version = 0x0100;
++
++ ret = input_register_device(ctx->input);
++ if (ret < 0) {
++ printk(KERN_ERR DRV_NAME_PREFIX "Unable to register input device\n");
++ goto err1;
++ }
++
++ ctx->mask_output = 0;
++ for (i = 0; i < pdata->nr_cols; i++) {
++ ctx->mask_output |= (1 << pdata->gpio_cols[i]);
++ gpio_direction_output(EP93XX_GPIO_LINE_X(pdata->gpio_cols[i]), 0); // low
++ }
++
++ ctx->mask_input = 0;
++ for (i = 0; i < pdata->nr_rows; i++) {
++ ctx->mask_input |= (1 << pdata->gpio_rows[i]);
++ gpio_direction_input(EP93XX_GPIO_LINE_X(pdata->gpio_rows[i]));
++ }
++
++ for (i = 0; i < pdata->nr_rows; i++) {
++ ctx->irqs[i] = gpio_to_irq(EP93XX_GPIO_LINE_X(pdata->gpio_rows[i]));
++ set_irq_type(ctx->irqs[i], IRQ_TYPE_EDGE_FALLING);
++ ep93xx_gpio_int_debounce(ctx->irqs[i], 1); // TODO: create IRQ_TYPE_DEBOUNCE
++
++ ret = request_irq(ctx->irqs[i], ep93xx_gpio_portx_key_int, 0, irq_names[i], ctx);
++ if (ret < 0) {
++ irq_idx = i;
++ printk(KERN_ERR DRV_NAME_PREFIX "request_irq (%d)\n", ctx->irqs[i]);
++ goto err2;
++ }
++ }
++
++ tasklet_enable(&kp_tasklet);
++ kp_tasklet.data = (unsigned long)ctx;
++
++ setup_timer(&ctx->timer, ep93xx_gpio_portx_timer, (unsigned long)ctx);
++
++ return 0;
++
++err2:
++ for (i = 0; i <= irq_idx; i++)
++ free_irq(ctx->irqs[i], ctx);
++ input_unregister_device(input_dev);
++ input_dev = NULL;
++err1:
++ kfree(ctx);
++ input_free_device(input_dev);
++
++ return -EINVAL;
++}
++
++
++static int __devexit ep93xx_keypad_remove(struct platform_device *pdev)
++{
++ struct ep93xx_gpio_portx_keypad *ctx = platform_get_drvdata(pdev);
++ int i;
++
++ for (i = 0; i < ctx->rows; i++) {
++ disable_irq(ctx->irqs[i]);
++ free_irq(ctx->irqs[i], ctx);
++ }
++
++ del_timer_sync(&ctx->timer);
++
++ tasklet_disable(&kp_tasklet);
++ tasklet_kill(&kp_tasklet);
++
++ input_unregister_device(ctx->input);
++ kfree(ctx);
++
++ return 0;
++}
++
++
++#define ep93xx_keypad_suspend NULL
++#define ep93xx_keypad_resume NULL
++
++static struct platform_driver ep93xx_keypad_driver = {
++ .driver = {
++ .name = "ep93xx-gpio-keypad",
++ .owner = THIS_MODULE,
++ },
++ .probe = ep93xx_keypad_probe,
++ .remove = __devexit_p(ep93xx_keypad_remove),
++ .suspend = ep93xx_keypad_suspend,
++ .resume = ep93xx_keypad_resume,
++};
++
++static int __init ep93xx_keypad_init(void)
++{
++ printk(KERN_INFO DRV_NAME_PREFIX "platform driver v" DRV_VERSION "\n");
++ return platform_driver_register(&ep93xx_keypad_driver);
++}
++
++static void __exit ep93xx_keypad_exit(void)
++{
++ platform_driver_unregister(&ep93xx_keypad_driver);
++}
++
++module_init(ep93xx_keypad_init);
++module_exit(ep93xx_keypad_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("EP93xx GPIO port B keypad driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
+diff --git a/drivers/input/keyboard/ts72xx_dio_3x4.c b/drivers/input/keyboard/ts72xx_dio_3x4.c
+new file mode 100644
+index 0000000..8a2e9ee
+--- /dev/null
++++ b/drivers/input/keyboard/ts72xx_dio_3x4.c
+@@ -0,0 +1,65 @@
++/*
++ * TS-72xx keypad device driver for DIO1 header (DIO_0 thru DIO_7 are using port B)
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/input.h>
++
++#include <mach/ep93xx-keypad.h>
++
++/* Port B = XX R0 R1 R2 R3 C0 C1 C2
++ * (i.e. col2 is bit 0, row0 is bit 6, ...)
++ */
++static struct ep93xx_gpio_portx_keypad_platform_data kp_portb_3x4 = {
++ .nr_rows = 4,
++ .nr_cols = 3,
++ { { KEY_1, KEY_2, KEY_3 },
++ { KEY_4, KEY_5, KEY_6 },
++ { KEY_7, KEY_8, KEY_9 },
++ { KEY_KPASTERISK, KEY_0, KEY_ENTER }
++ },
++ .gpio_rows = { 6, 5, 4, 3 },
++ .gpio_cols = { 2, 1, 0 },
++};
++
++
++static void ts72xx_dio_release(struct device *dev)
++{
++ // nothing to do (no kfree) because we have static struct
++}
++
++static struct platform_device kp_portb_3x4_device = {
++ .name = "ep93xx-gpio-keypad",
++ .id = -1, // one instance only
++ .dev = {
++ .platform_data = &kp_portb_3x4,
++ .release = ts72xx_dio_release,
++ },
++};
++
++static int __init ts72xx_dio_init(void)
++{
++ return platform_device_register(&kp_portb_3x4_device);
++}
++
++static void __exit ts72xx_dio_exit(void)
++{
++ platform_device_unregister(&kp_portb_3x4_device);
++}
++
++module_init(ts72xx_dio_init);
++module_exit(ts72xx_dio_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("Platform device 3x4 keypad");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/input/keyboard/ts72xx_dio_4x4.c b/drivers/input/keyboard/ts72xx_dio_4x4.c
+new file mode 100644
+index 0000000..c536003
+--- /dev/null
++++ b/drivers/input/keyboard/ts72xx_dio_4x4.c
+@@ -0,0 +1,65 @@
++/*
++ * TS-72xx keypad device driver for DIO1 header (DIO_0 thru DIO_7 are using port B)
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/input.h>
++
++#include <mach/ep93xx-keypad.h>
++
++/* Port B = C0 R3 C1 R2 C2 C3 R1 R0
++ * (i.e. row0 is bit 0, row1 is bit 1, ...)
++ */
++static struct ep93xx_gpio_portx_keypad_platform_data kp_portb_4x4 = {
++ .nr_rows = 4,
++ .nr_cols = 4,
++ { { KEY_7, KEY_8, KEY_9, KEY_F },
++ { KEY_4, KEY_5, KEY_6, KEY_E },
++ { KEY_1, KEY_2, KEY_3, KEY_D },
++ { KEY_A, KEY_0, KEY_B, KEY_C }
++ },
++ .gpio_rows = { 0, 1, 4, 6 },
++ .gpio_cols = { 7, 5, 3, 2 },
++};
++
++
++static void ts72xx_dio_release(struct device *dev)
++{
++ // nothing to do (no kfree) because we have static struct
++}
++
++static struct platform_device kp_portb_4x4_device = {
++ .name = "ep93xx-gpio-keypad",
++ .id = -1, // one instance only
++ .dev = {
++ .platform_data = &kp_portb_4x4,
++ .release = ts72xx_dio_release,
++ },
++};
++
++static int __init ts72xx_dio_init(void)
++{
++ return platform_device_register(&kp_portb_4x4_device);
++}
++
++static void __exit ts72xx_dio_exit(void)
++{
++ platform_device_unregister(&kp_portb_4x4_device);
++}
++
++module_init(ts72xx_dio_init);
++module_exit(ts72xx_dio_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("Platform device 4x4 keypad");
++MODULE_LICENSE("GPL");
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0022-TS-72xx-RS485-auto-mode-support.patch b/recipes/linux/linux-2.6.27/ts72xx/0022-TS-72xx-RS485-auto-mode-support.patch
new file mode 100644
index 0000000000..988a20f0de
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0022-TS-72xx-RS485-auto-mode-support.patch
@@ -0,0 +1,218 @@
+From 41163459c76f0540aee9d60e13059ba31f684e15 Mon Sep 17 00:00:00 2001
+From: =?utf-8?q?Petr=20=C5=A0tetiar?= <ynezz@true.cz>
+Date: Sun, 4 Jan 2009 16:07:51 +0100
+Subject: [PATCH] TS-72xx RS485 auto mode support
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/include/asm/ioctls.h | 3 +
+ arch/arm/mach-ep93xx/include/mach/ts72xx.h | 8 ++
+ drivers/serial/amba-pl010.c | 121 ++++++++++++++++++++++++++++
+ 3 files changed, 132 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/include/asm/ioctls.h b/arch/arm/include/asm/ioctls.h
+index a91d8a1..a4b60ae 100644
+--- a/arch/arm/include/asm/ioctls.h
++++ b/arch/arm/include/asm/ioctls.h
+@@ -70,6 +70,9 @@
+ #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
+ #define FIOQSIZE 0x545E
+
++#define TIOC_SBCC485 0x545F /* TS72xx RTS/485 mode clear */
++#define TIOC_SBCS485 0x5460 /* TS72xx RTS/485 mode set */
++
+ /* Used for packet mode */
+ #define TIOCPKT_DATA 0
+ #define TIOCPKT_FLUSHREAD 1
+diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx.h b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+index 601d0a3..1262e2b 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ts72xx.h
++++ b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+@@ -70,6 +70,14 @@
+ #define TS72XX_NAND_BUSY_VIRT_BASE 0xfebfa000
+ #define TS72XX_NAND_BUSY_SIZE 0x00001000
+
++#define TS72XX_RS485_AUTO485FD 1
++#define TS72XX_RS485_AUTO485HD 2
++#define TS72XX_RS485_MODE_RS232 0x00
++#define TS72XX_RS485_MODE_FD 0x01
++#define TS72XX_RS485_MODE_9600_HD 0x04
++#define TS72XX_RS485_MODE_19200_HD 0x05
++#define TS72XX_RS485_MODE_57600_HD 0x06
++#define TS72XX_RS485_MODE_115200_HD 0x07
+
+ #define TS72XX_RTC_INDEX_VIRT_BASE 0xfebf9000
+ #define TS72XX_RTC_INDEX_PHYS_BASE 0x10800000
+diff --git a/drivers/serial/amba-pl010.c b/drivers/serial/amba-pl010.c
+index 90b56c2..d609666 100644
+--- a/drivers/serial/amba-pl010.c
++++ b/drivers/serial/amba-pl010.c
+@@ -49,6 +49,7 @@
+ #include <linux/clk.h>
+
+ #include <asm/io.h>
++#include <mach/ts72xx.h>
+
+ #define UART_NR 8
+
+@@ -64,6 +65,11 @@
+ #define UART_DUMMY_RSR_RX 256
+ #define UART_PORT_SIZE 64
+
++#ifdef CONFIG_MACH_TS72XX
++static void __iomem *ts_rs485_data9_register;
++static void __iomem *ts_rs485_control_register;
++#endif
++
+ /*
+ * We wrap our port structure around the generic uart_port.
+ */
+@@ -519,6 +525,107 @@ static int pl010_verify_port(struct uart_port *port, struct serial_struct *ser)
+ return ret;
+ }
+
++#ifdef CONFIG_MACH_TS72XX
++static int ts72xx_rs485_init(void)
++{
++ ts_rs485_data9_register = ioremap(TS72XX_RS485_MODE_PHYS_BASE, 4096);
++ if (ts_rs485_data9_register == NULL) {
++ return -1;
++ }
++
++ ts_rs485_control_register = ioremap(TS72XX_RS485_CONTROL_PHYS_BASE, 4096);
++ if (ts_rs485_control_register == NULL) {
++ iounmap(ts_rs485_data9_register);
++ return -1;
++ }
++
++ return 0;
++}
++
++static int ts72xx_auto485(struct uart_port *port, unsigned int cmd, unsigned long *arg)
++{
++ int baud, cflag, mode;
++ int datalength;
++
++ mode = (int)*arg;
++ if (!is_rs485_installed()) {
++ printk("amba-pl010.c: this board does not support RS485 auto mode\n");
++ return -EINVAL;
++ }
++
++ if (port->line != 1) {
++ printk("amba-pl010.c: auto RS485 mode is only supported on second port (/dev/ttyAM1)\n");
++ return -EINVAL;
++ }
++
++ datalength = 8;
++ cflag = port->info->port.tty->termios->c_cflag ;
++ if (cflag & PARENB)
++ datalength++;
++
++ if (cflag & CSTOPB)
++ datalength++;
++
++ baud = tty_get_baud_rate(port->info->port.tty);
++
++ switch (cmd) {
++ case TIOC_SBCC485:
++ if ((mode & TS72XX_RS485_AUTO485FD) || (mode & TS72XX_RS485_AUTO485HD)) {
++ printk("amba-pl010.c: unsetting auto RS485 mode\n");
++ __raw_writew(TS72XX_RS485_MODE_RS232, ts_rs485_control_register);
++ __raw_writew(TS72XX_RS485_MODE_RS232, ts_rs485_data9_register);
++ }
++ break;
++ case TIOC_SBCS485:
++ if (mode & TS72XX_RS485_AUTO485FD) {
++ printk ("amba-pl010.c: setting FULL duplex auto RS485 mode\n");
++ __raw_writew(TS72XX_RS485_MODE_FD, ts_rs485_control_register);
++ if (datalength > 8)
++ __raw_writew(TS72XX_RS485_MODE_FD, ts_rs485_data9_register);
++ } else if (mode & TS72XX_RS485_AUTO485HD) {
++ printk("amba-pl010.c: setting HALF DUPLEX auto RS485 mode\n");
++ switch (baud) {
++ case 9600:
++ __raw_writew(TS72XX_RS485_MODE_9600_HD, ts_rs485_control_register);
++ break;
++ case 19200:
++ __raw_writew(TS72XX_RS485_MODE_19200_HD, ts_rs485_control_register);
++ break;
++ case 57600:
++ __raw_writew(TS72XX_RS485_MODE_57600_HD, ts_rs485_control_register);
++ break;
++ case 115200:
++ __raw_writew(TS72XX_RS485_MODE_115200_HD, ts_rs485_control_register);
++ break;
++ default:
++ printk("amba-pl010.c: %d baud rate is not supported for auto RS485 mode\n", baud);
++ return -1;
++ }
++ if (datalength > 8)
++ __raw_writew(TS72XX_RS485_MODE_FD, ts_rs485_data9_register);
++ }
++ break;
++ }
++
++ return 0;
++}
++#endif
++
++int pl010_ioctl(struct uart_port *port, unsigned int cmd, unsigned long arg)
++{
++#ifdef CONFIG_MACH_TS72XX
++ switch (cmd) {
++ case TIOC_SBCC485:
++ case TIOC_SBCS485:
++ return ts72xx_auto485(port, cmd, (unsigned long *)arg);
++ break;
++ default:
++ return -ENOIOCTLCMD;
++ }
++#endif
++ return -ENOIOCTLCMD;
++}
++
+ static struct uart_ops amba_pl010_pops = {
+ .tx_empty = pl010_tx_empty,
+ .set_mctrl = pl010_set_mctrl,
+@@ -536,6 +643,7 @@ static struct uart_ops amba_pl010_pops = {
+ .request_port = pl010_request_port,
+ .config_port = pl010_config_port,
+ .verify_port = pl010_verify_port,
++ .ioctl = pl010_ioctl,
+ };
+
+ static struct uart_amba_port *amba_ports[UART_NR];
+@@ -794,6 +902,15 @@ static int __init pl010_init(void)
+ ret = uart_register_driver(&amba_reg);
+ if (ret == 0) {
+ ret = amba_driver_register(&pl010_driver);
++#ifdef CONFIG_MACH_TS72XX
++ if (!ret && is_rs485_installed()) {
++ ret = ts72xx_rs485_init();
++ if (ret)
++ printk("amba-pl010.c: ts72xx_rs485_init() failed\n");
++ else
++ printk("amba-pl010.c: auto RS485 mode initialized\n");
++ }
++#endif
+ if (ret)
+ uart_unregister_driver(&amba_reg);
+ }
+@@ -804,6 +921,10 @@ static void __exit pl010_exit(void)
+ {
+ amba_driver_unregister(&pl010_driver);
+ uart_unregister_driver(&amba_reg);
++#ifdef CONFIG_MACH_TS72XX
++ iounmap(ts_rs485_data9_register);
++ iounmap(ts_rs485_control_register);
++#endif
+ }
+
+ module_init(pl010_init);
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0023-Clean-and-invalidate-D-cache-entry.patch b/recipes/linux/linux-2.6.27/ts72xx/0023-Clean-and-invalidate-D-cache-entry.patch
new file mode 100644
index 0000000000..09ea797d66
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0023-Clean-and-invalidate-D-cache-entry.patch
@@ -0,0 +1,29 @@
+From b19911010ed38171f71a321428fafc9e02e9edc4 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 14:06:17 +0100
+Subject: [PATCH] Clean and invalidate D cache entry
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mm/proc-arm920.S | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S
+index 12f59db..e0041c9 100644
+--- a/arch/arm/mm/proc-arm920.S
++++ b/arch/arm/mm/proc-arm920.S
+@@ -198,7 +198,7 @@ ENTRY(arm920_coherent_kern_range)
+ */
+ ENTRY(arm920_coherent_user_range)
+ bic r0, r0, #CACHE_DLINESIZE - 1
+-1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry
++1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
+ mcr p15, 0, r0, c7, c5, 1 @ invalidate I entry
+ add r0, r0, #CACHE_DLINESIZE
+ cmp r0, r1
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0024-PC-104-I-O-and-memory-mappings.patch b/recipes/linux/linux-2.6.27/ts72xx/0024-PC-104-I-O-and-memory-mappings.patch
new file mode 100644
index 0000000000..3e8377738c
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0024-PC-104-I-O-and-memory-mappings.patch
@@ -0,0 +1,40 @@
+From ac8f2f5aab52ae0c38e8069de939763ea204776b Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 14:17:15 +0100
+Subject: [PATCH] PC/104 I/O and memory mappings
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/include/mach/ts72xx.h | 13 +++++++++++++
+ 1 files changed, 13 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx.h b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+index 1262e2b..1a21a86 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ts72xx.h
++++ b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+@@ -51,6 +51,19 @@
+ #define TS72XX_OPTIONS2_TS9420 0x04
+ #define TS72XX_OPTIONS2_TS9420_BOOT 0x02
+
++#define TS72XX_PC104_8BIT_IO_VIRT_BASE 0xfebf0000
++#define TS72XX_PC104_8BIT_IO_PHYS_BASE 0x11e00000
++#define TS72XX_PC104_8BIT_IO_SIZE 0x00001000
++#define TS72XX_PC104_8BIT_MEM_VIRT_BASE 0xfea00000
++#define TS72XX_PC104_8BIT_MEM_PHYS_BASE 0x11a00000
++#define TS72XX_PC104_8BIT_MEM_SIZE 0x00100000
++
++#define TS72XX_PC104_16BIT_IO_VIRT_BASE 0xfebef000
++#define TS72XX_PC104_16BIT_IO_PHYS_BASE 0x21e00000
++#define TS72XX_PC104_16BIT_IO_SIZE 0x00001000
++#define TS72XX_PC104_16BIT_MEM_VIRT_BASE 0xfe900000
++#define TS72XX_PC104_16BIT_MEM_PHYS_BASE 0x21a00000
++#define TS72XX_PC104_16BIT_MEM_SIZE 0x00100000
+
+ #define TS72XX_NOR_PHYS_BASE 0x60000000
+ #define TS72XX_NOR2_PHYS_BASE 0x62000000
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0025-EP93xx-discontigmem.patch b/recipes/linux/linux-2.6.27/ts72xx/0025-EP93xx-discontigmem.patch
new file mode 100644
index 0000000000..583574f2d0
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0025-EP93xx-discontigmem.patch
@@ -0,0 +1,481 @@
+From 87a1d8dda4dc8fe5ba67c8534ad6d7db7dbd8835 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 14:22:55 +0100
+Subject: [PATCH] EP93xx discontigmem
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/Kconfig | 2 +
+ arch/arm/include/asm/memory.h | 3 +-
+ arch/arm/mach-ep93xx/include/mach/memory.h | 220 +++++++++++++++++++++++++++-
+ arch/arm/mm/discontig.c | 100 +++++++++++++-
+ arch/arm/mm/init.c | 32 ++--
+ 5 files changed, 334 insertions(+), 23 deletions(-)
+
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index 70dba16..d196fe8 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -267,6 +267,7 @@ config ARCH_EP93XX
+ bool "EP93xx-based"
+ select ARM_AMBA
+ select ARM_VIC
++ select ARCH_DISCONTIGMEM_ENABLE
+ select GENERIC_GPIO
+ select HAVE_CLK
+ select ARCH_REQUIRE_GPIOLIB
+@@ -832,6 +833,7 @@ config ARCH_SELECT_MEMORY_MODEL
+
+ config NODES_SHIFT
+ int
++ default "5" if ARCH_EP93XX
+ default "4" if ARCH_LH7A40X
+ default "2"
+ depends on NEED_MULTIPLE_NODES
+diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h
+index bf7c737..acf566c 100644
+--- a/arch/arm/include/asm/memory.h
++++ b/arch/arm/include/asm/memory.h
+@@ -273,7 +273,8 @@ static inline __deprecated void *bus_to_virt(unsigned long x)
+ * Given a kaddr, ADDR_TO_MAPBASE finds the owning node of the memory
+ * and returns the mem_map of that node.
+ */
+-#define ADDR_TO_MAPBASE(kaddr) NODE_MEM_MAP(KVADDR_TO_NID(kaddr))
++// Crude hack: see arch/arm/mach-ep93xx/include/mach/memory.h
++//#define ADDR_TO_MAPBASE(kaddr) NODE_MEM_MAP(KVADDR_TO_NID(kaddr))
+
+ /*
+ * Given a page frame number, find the owning node of the memory
+diff --git a/arch/arm/mach-ep93xx/include/mach/memory.h b/arch/arm/mach-ep93xx/include/mach/memory.h
+index f1b6335..b202d93 100644
+--- a/arch/arm/mach-ep93xx/include/mach/memory.h
++++ b/arch/arm/mach-ep93xx/include/mach/memory.h
+@@ -1,14 +1,224 @@
+ /*
+- * arch/arm/mach-ep93xx/include/mach/memory.h
++ * arch/arm/mach-ep93xx/include/mach/memory.h
++ *
++ * ******************************************************
++ * * CONFUSED? Read Documentation/IO-mapping.txt *
++ * ******************************************************
++ *
++ *
++ * Copyright (C) 1999 ARM Limited
++ * Copyright (C) 2002-2003 Cirrus Logic Corp.
++ *
++ * 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 __ASM_ARCH_MEMORY_H
+ #define __ASM_ARCH_MEMORY_H
+
+-#define PHYS_OFFSET UL(0x00000000)
++/*
++ * For EP93xx, SDRAM can be discontiguous, in a set number of blocks
++ * of equal size and (usually) equal spacing. The 9301 spacing isn't equal.
++ *
++ * SDRAM_START is the physical address of the start of SDRAM.
++ * SDRAM_NUMBER_OF_BLOCKS = # of blocks of SDRAM.
++ * Each block is of size SDRAM_BLOCK_SIZE and starts at a boundary
++ * of SDRAM_BLOCK_START_BOUNDARY.
++ *
++ * So memory blocks are at:
++ * SDRAM_START
++ * SDRAM_START + SDRAM_BLOCK_START_BOUNDARY
++ * SDRAM_START + (SDRAM_BLOCK_START_BOUNDARY * 2)
++ * SDRAM_START + (SDRAM_BLOCK_START_BOUNDARY * 3)
++ * so on
++ */
++
++#ifndef CONFIG_DISCONTIGMEM
++
++/*
++ * Single 32Meg block of physical memory physically located at 0 .
++ */
++#define SDRAM_START 0x00000000
++#define SDRAM_NUMBER_OF_BLOCKS 1
++#define SDRAM_BLOCK_SIZE 0x02000000
++#define SDRAM_BLOCK_START_BOUNDARY 0x00000000
++
++#else /* CONFIG_DISCONTIGMEM */
++
++#ifdef CONFIG_ARCH_EP9301
++
++/*
++ * The 9301 memory map doesn't have regular gaps because two
++ * address pins aren't connected - see asm-arm/mach-ep93xx/arch.c to
++ * see how it is.
++ */
++#define SDRAM_START 0x00000000
++#define SDRAM_NUMBER_OF_BLOCKS 4
++#define SDRAM_BLOCK_SIZE 0x00800000
++#define SDRAM_BLOCK_START_BOUNDARY 0x01000000
++
++#else /* CONFIG_ARCH_EP9312 or CONFIG_ARCH_EP9315 */
++
++/*
++ * 2 32Meg blocks that are located physically at 0 and 64Meg.
++ */
++#define SDRAM_START 0x00000000
++#define SDRAM_NUMBER_OF_BLOCKS 2
++#define SDRAM_BLOCK_SIZE 0x02000000
++#define SDRAM_BLOCK_START_BOUNDARY 0x04000000
++
++#endif
++
++/*
++ * Here we are assuming EP93xx is configured to have two 32MB SDRAM
++ * areas with 32MB of empty space between them. So use 24 for the node
++ * max shift to get 64MB node sizes.
++ */
++#define NODE_MAX_MEM_SHIFT 26
++#define NODE_MAX_MEM_SIZE (1<<NODE_MAX_MEM_SHIFT)
++
++#endif /* CONFIG_DISCONTIGMEM */
++
++
++/*
++ * MEM_SIZE and PHYS_OFFSET are used to set size of SDRAM for
++ * initial page table in arch/arm/kernel/setup.c
++ * For ep93xx, PHYS_OFFSET is set to be SDRAM_START.
++ */
++#define MEM_SIZE (SDRAM_BLOCK_SIZE)
++
++/*
++ * Task size: 2GB (from 0 to base of IO in virtual space)
++ */
++#define TASK_SIZE UL(0x80000000)
++/* HASH define TASK_SIZE_26 (0x04000000UL) */
++
++/*
++ * This decides where the kernel will search for a free chunk of vm
++ * space during mmap's.
++ */
++#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
++
++/*
++ * Page offset: 3GB (start of kernel memory in virtual space)
++ * Phys offset: 0 (start of kernel memory in physical space)
++ */
++#define PAGE_OFFSET UL(0xC0000000)
++#define PHYS_OFFSET (SDRAM_START)
++
++#ifndef __ASSEMBLY__
++/*
++ * Given a page frame number, convert it to a node id.
++ */
++static inline unsigned long PFN_TO_NID(unsigned long pfn) {
++ unsigned long block = (pfn >> 12);
++
++ switch(block) {
++ case 0x0:
++ return 0;
++ case 0x1:
++ return 1;
++ case 0x2:
++ return 2;
++ case 0x3:
++ return 3;
++ case 0x4:
++ return 4;
++ case 0x5:
++ return 5;
++ case 0x6:
++ return 6;
++ case 0x7:
++ return 7;
++ case 0xc0:
++ return 8;
++ case 0xc1:
++ return 9;
++ case 0xc4:
++ return 10;
++ case 0xc5:
++ return 11;
++ case 0xd0:
++ return 12;
++ case 0xd1:
++ return 13;
++ case 0xd4:
++ return 14;
++ case 0xd5:
++ return 15;
++ case 0xe0:
++ return 16;
++ case 0xe1:
++ return 17;
++ case 0xe4:
++ return 18;
++ case 0xe5:
++ return 19;
++ default:
++ return 0xff;
++ }
++}
++#endif
++
++/*
++ * Virtual view <-> DMA view memory address translations
++ * virt_to_bus: Used to translate the virtual address to an
++ * address suitable to be passed to set_dma_addr
++ * bus_to_virt: Used to convert an address for DMA operations
++ * to an address that the kernel can use.
++ */
++#define __virt_to_bus__is_a_macro
++#define __virt_to_bus(x) __virt_to_phys(x)
++
++#define __bus_to_virt__is_a_macro
++#define __bus_to_virt(x) __phys_to_virt(x)
++
++
++/*
++ * Note that this file is included by include/asm-arm/memory.h so
++ * the macros in this file have to play nice with those.
++ */
++#ifdef CONFIG_DISCONTIGMEM
++
++/*
++ * Given a kernel address, find the home node of the underlying memory.
++ */
++#define KVADDR_TO_NID(addr) \
++ ((unsigned long)(PFN_TO_NID(__virt_to_phys((unsigned long)addr) >> PAGE_SHIFT)))
++
++/*
++ * Given a kaddr, ADDR_TO_MAPBASE finds the owning node of the memory
++ * and returns the mem_map of that node.
++ */
++#define ADDR_TO_MAPBASE(kaddr) NODE_MEM_MAP(KVADDR_TO_NID((unsigned long)(kaddr)))
++
++#define PFN_TO_MAPBASE(pfn) NODE_MEM_MAP(PFN_TO_NID(pfn))
++
++/*
++ * Given a kaddr, LOCAL_MAR_NR finds the owning node of the memory
++ * and returns the index corresponding to the appropriate page in the
++ * node's mem_map.
++ */
++
++
++#define LOCAL_MAP_NR(kaddr) \
++ (((unsigned long)(kaddr) & (0xffffffUL)) >> PAGE_SHIFT)
++
++
++
++
+
+-#define __bus_to_virt(x) __phys_to_virt(x)
+-#define __virt_to_bus(x) __virt_to_phys(x)
+
++#endif /* CONFIG_DISCONTIGMEM */
+
+ #endif
+diff --git a/arch/arm/mm/discontig.c b/arch/arm/mm/discontig.c
+index c8c0c4b..f336eb1 100644
+--- a/arch/arm/mm/discontig.c
++++ b/arch/arm/mm/discontig.c
+@@ -13,7 +13,7 @@
+ #include <linux/mmzone.h>
+ #include <linux/bootmem.h>
+
+-#if MAX_NUMNODES != 4 && MAX_NUMNODES != 16
++#if MAX_NUMNODES != 4 && MAX_NUMNODES != 16 && MAX_NUMNODES != 64 && MAX_NUMNODES != 32
+ # error Fix Me Please
+ #endif
+
+@@ -40,6 +40,104 @@ pg_data_t discontig_node_data[MAX_NUMNODES] = {
+ { .bdata = &bootmem_node_data[14] },
+ { .bdata = &bootmem_node_data[15] },
+ #endif
++
++#if MAX_NUMNODES == 32
++ { .bdata = &bootmem_node_data[4] },
++ { .bdata = &bootmem_node_data[5] },
++ { .bdata = &bootmem_node_data[6] },
++ { .bdata = &bootmem_node_data[7] },
++ { .bdata = &bootmem_node_data[8] },
++ { .bdata = &bootmem_node_data[9] },
++ { .bdata = &bootmem_node_data[10] },
++ { .bdata = &bootmem_node_data[11] },
++ { .bdata = &bootmem_node_data[12] },
++ { .bdata = &bootmem_node_data[13] },
++ { .bdata = &bootmem_node_data[14] },
++ { .bdata = &bootmem_node_data[15] },
++
++ { .bdata = &bootmem_node_data[16] },
++ { .bdata = &bootmem_node_data[17] },
++ { .bdata = &bootmem_node_data[18] },
++ { .bdata = &bootmem_node_data[19] },
++ { .bdata = &bootmem_node_data[20] },
++ { .bdata = &bootmem_node_data[21] },
++ { .bdata = &bootmem_node_data[22] },
++ { .bdata = &bootmem_node_data[23] },
++ { .bdata = &bootmem_node_data[24] },
++ { .bdata = &bootmem_node_data[25] },
++ { .bdata = &bootmem_node_data[26] },
++ { .bdata = &bootmem_node_data[27] },
++ { .bdata = &bootmem_node_data[28] },
++ { .bdata = &bootmem_node_data[29] },
++ { .bdata = &bootmem_node_data[30] },
++ { .bdata = &bootmem_node_data[31] },
++#endif
++
++#if MAX_NUMNODES == 64
++ { .bdata = &bootmem_node_data[4] },
++ { .bdata = &bootmem_node_data[5] },
++ { .bdata = &bootmem_node_data[6] },
++ { .bdata = &bootmem_node_data[7] },
++ { .bdata = &bootmem_node_data[8] },
++ { .bdata = &bootmem_node_data[9] },
++ { .bdata = &bootmem_node_data[10] },
++ { .bdata = &bootmem_node_data[11] },
++ { .bdata = &bootmem_node_data[12] },
++ { .bdata = &bootmem_node_data[13] },
++ { .bdata = &bootmem_node_data[14] },
++ { .bdata = &bootmem_node_data[15] },
++
++ { .bdata = &bootmem_node_data[16] },
++ { .bdata = &bootmem_node_data[17] },
++ { .bdata = &bootmem_node_data[18] },
++ { .bdata = &bootmem_node_data[19] },
++ { .bdata = &bootmem_node_data[20] },
++ { .bdata = &bootmem_node_data[21] },
++ { .bdata = &bootmem_node_data[22] },
++ { .bdata = &bootmem_node_data[23] },
++ { .bdata = &bootmem_node_data[24] },
++ { .bdata = &bootmem_node_data[25] },
++ { .bdata = &bootmem_node_data[26] },
++ { .bdata = &bootmem_node_data[27] },
++ { .bdata = &bootmem_node_data[28] },
++ { .bdata = &bootmem_node_data[29] },
++ { .bdata = &bootmem_node_data[30] },
++ { .bdata = &bootmem_node_data[31] },
++
++ { .bdata = &bootmem_node_data[32] },
++ { .bdata = &bootmem_node_data[33] },
++ { .bdata = &bootmem_node_data[34] },
++ { .bdata = &bootmem_node_data[35] },
++ { .bdata = &bootmem_node_data[36] },
++ { .bdata = &bootmem_node_data[37] },
++ { .bdata = &bootmem_node_data[38] },
++ { .bdata = &bootmem_node_data[39] },
++ { .bdata = &bootmem_node_data[40] },
++ { .bdata = &bootmem_node_data[41] },
++ { .bdata = &bootmem_node_data[42] },
++ { .bdata = &bootmem_node_data[43] },
++ { .bdata = &bootmem_node_data[44] },
++ { .bdata = &bootmem_node_data[45] },
++ { .bdata = &bootmem_node_data[46] },
++ { .bdata = &bootmem_node_data[47] },
++
++ { .bdata = &bootmem_node_data[48] },
++ { .bdata = &bootmem_node_data[49] },
++ { .bdata = &bootmem_node_data[50] },
++ { .bdata = &bootmem_node_data[51] },
++ { .bdata = &bootmem_node_data[52] },
++ { .bdata = &bootmem_node_data[53] },
++ { .bdata = &bootmem_node_data[54] },
++ { .bdata = &bootmem_node_data[55] },
++ { .bdata = &bootmem_node_data[56] },
++ { .bdata = &bootmem_node_data[57] },
++ { .bdata = &bootmem_node_data[58] },
++ { .bdata = &bootmem_node_data[59] },
++ { .bdata = &bootmem_node_data[60] },
++ { .bdata = &bootmem_node_data[61] },
++ { .bdata = &bootmem_node_data[62] },
++ { .bdata = &bootmem_node_data[63] },
++#endif
+ };
+
+ EXPORT_SYMBOL(discontig_node_data);
+diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
+index 30a69d6..a38c66f 100644
+--- a/arch/arm/mm/init.c
++++ b/arch/arm/mm/init.c
+@@ -43,26 +43,18 @@ static struct meminfo meminfo = { 0, };
+ void show_mem(void)
+ {
+ int free = 0, total = 0, reserved = 0;
+- int shared = 0, cached = 0, slab = 0, node, i;
++ int shared = 0, cached = 0, slab = 0, node, i, k;
+ struct meminfo * mi = &meminfo;
+
+ printk("Mem-info:\n");
+ show_free_areas();
+ for_each_online_node(node) {
+- pg_data_t *n = NODE_DATA(node);
+- struct page *map = n->node_mem_map - n->node_start_pfn;
+-
+ for_each_nodebank (i,mi,node) {
+- unsigned int pfn1, pfn2;
+- struct page *page, *end;
+-
+- pfn1 = __phys_to_pfn(mi->bank[i].start);
+- pfn2 = __phys_to_pfn(mi->bank[i].size + mi->bank[i].start);
++ struct page *page;
+
+- page = map + pfn1;
+- end = map + pfn2;
++ page = NODE_MEM_MAP(node);
+
+- do {
++ for (k=0; k<NODE_DATA(node)->node_present_pages; k++) {
+ total++;
+ if (PageReserved(page))
+ reserved++;
+@@ -75,7 +67,7 @@ void show_mem(void)
+ else
+ shared += page_count(page) - 1;
+ page++;
+- } while (page < end);
++ };
+ }
+ }
+
+@@ -94,11 +86,19 @@ void show_mem(void)
+ * the end, we won't clash.
+ */
+ static unsigned int __init
+-find_bootmap_pfn(int node, struct meminfo *mi, unsigned int bootmap_pages)
++find_bootmap_pfn(int node, struct meminfo *mi, unsigned int bootmap_pages, int initrd_node)
+ {
+ unsigned int start_pfn, bank, bootmap_pfn;
+
+- start_pfn = PAGE_ALIGN(__pa(&_end)) >> PAGE_SHIFT;
++ if (node == initrd_node) {
++ /* push start_pfn past the ramdisk */
++ start_pfn = (phys_initrd_start + phys_initrd_size) >> PAGE_SHIFT;
++ /* if (unlikely) not an even page length, round up by a page */
++ start_pfn = ((phys_initrd_start + phys_initrd_size) & PAGE_MASK ? start_pfn+1 : start_pfn);
++ } else {
++ start_pfn = PAGE_ALIGN(__pa(&_end)) >> PAGE_SHIFT;
++ }
++
+ bootmap_pfn = 0;
+
+ for_each_nodebank(bank, mi, node) {
+@@ -220,7 +220,7 @@ bootmem_init_node(int node, int initrd_node, struct meminfo *mi)
+ * Allocate the bootmem bitmap page.
+ */
+ boot_pages = bootmem_bootmap_pages(end_pfn - start_pfn);
+- boot_pfn = find_bootmap_pfn(node, mi, boot_pages);
++ boot_pfn = find_bootmap_pfn(node, mi, boot_pages, initrd_node);
+
+ /*
+ * Initialise the bootmem allocator for this node, handing the
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0026-TS72xx-PATA-support.patch b/recipes/linux/linux-2.6.27/ts72xx/0026-TS72xx-PATA-support.patch
new file mode 100644
index 0000000000..7d5b72512f
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0026-TS72xx-PATA-support.patch
@@ -0,0 +1,442 @@
+From 0b580299f52393b09828821ec0335a844a366853 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 15:57:10 +0100
+Subject: [PATCH] TS72xx PATA support
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Support for ATA devices on Technologic Systems SBC.
+Support for the compact flash control on Technologic System TS-7200 SBC.
+TS9600 IDE interface support.
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/include/mach/ts72xx.h | 13 +++
+ drivers/ata/Kconfig | 20 ++++
+ drivers/ata/Makefile | 3 +
+ drivers/ata/pata_ts7200_cf.c | 85 +++++++++++++++
+ drivers/ata/pata_ts72xx.c | 155 ++++++++++++++++++++++++++++
+ drivers/ata/pata_ts9600.c | 88 ++++++++++++++++
+ 6 files changed, 364 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/ata/pata_ts7200_cf.c
+ create mode 100644 drivers/ata/pata_ts72xx.c
+ create mode 100644 drivers/ata/pata_ts9600.c
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx.h b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+index 1a21a86..616aeca 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ts72xx.h
++++ b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+@@ -128,6 +128,19 @@
+ #define TS72XX_PLD_VERSION_PHYS_BASE 0x23400000
+ #define TS72XX_PLD_VERSION_SIZE 0x00001000
+
++/*
++ * TS7200 CF memory map:
++ *
++ * phys size description
++ * 11000000 7 CF registers (8-bit each), starting at 11000001
++ * 10400006 2 CF aux registers (8-bit)
++ * 21000000 2 CF data register (16-bit)
++ */
++
++#define TS7200_CF_CMD_PHYS_BASE 0x11000000
++#define TS7200_CF_AUX_PHYS_BASE 0x10400006
++#define TS7200_CF_DATA_PHYS_BASE 0x21000000
++
+ #ifndef __ASSEMBLY__
+ #include <asm/io.h>
+
+diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
+index 11c8c19..19ef945 100644
+--- a/drivers/ata/Kconfig
++++ b/drivers/ata/Kconfig
+@@ -725,5 +725,25 @@ config PATA_BF54X
+
+ If unsure, say N.
+
++config PATA_TS72XX
++ bool "TS72XX ATA support"
++ depends on ARCH_EP93XX && MACH_TS72XX
++ help
++ This option enables support for ATA devices on Technologic Systems SBC.
++
++config PATA_TS7200_CF
++ tristate "TS7200 Compact Flash support"
++ depends on PATA_TS72XX
++ help
++ This option enables support for the compact flash control on
++ Technologic System TS-7200 SBC.
++
++config PATA_TS9600
++ tristate "TS9600 IDE interface support"
++ depends on PATA_TS72XX && BLK_DEV_IDE_TS9600 != y
++ help
++ This option enables support for Technologic Systems TS-9600 PC/104 IDE interface.
++
+ endif # ATA_SFF
++
+ endif # ATA
+diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile
+index 674965f..f496c63 100644
+--- a/drivers/ata/Makefile
++++ b/drivers/ata/Makefile
+@@ -72,6 +72,9 @@ obj-$(CONFIG_PATA_BF54X) += pata_bf54x.o
+ obj-$(CONFIG_PATA_PLATFORM) += pata_platform.o
+ obj-$(CONFIG_PATA_OF_PLATFORM) += pata_of_platform.o
+ obj-$(CONFIG_PATA_ICSIDE) += pata_icside.o
++obj-$(CONFIG_PATA_TS72XX) += pata_ts72xx.o
++obj-$(CONFIG_PATA_TS7200_CF) += pata_ts7200_cf.o
++obj-$(CONFIG_PATA_TS9600) += pata_ts9600.o
+ # Should be last but two libata driver
+ obj-$(CONFIG_PATA_ACPI) += pata_acpi.o
+ # Should be last but one libata driver
+diff --git a/drivers/ata/pata_ts7200_cf.c b/drivers/ata/pata_ts7200_cf.c
+new file mode 100644
+index 0000000..a08aedf
+--- /dev/null
++++ b/drivers/ata/pata_ts7200_cf.c
+@@ -0,0 +1,85 @@
++/*
++ * Technologic Systems TS-7200 Compact Flash PATA device driver.
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/libata.h>
++#include <scsi/scsi_host.h>
++#include <linux/platform_device.h>
++#include <linux/dma-mapping.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <mach/hardware.h>
++
++#define DRV_NAME "pata_ts7200_cf"
++#define DRV_VERSION "0.2"
++
++static struct resource ts7200_cf_resources[] = {
++ [0] = {
++ .start = TS7200_CF_CMD_PHYS_BASE,
++ .end = TS7200_CF_CMD_PHYS_BASE + 8,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = TS7200_CF_AUX_PHYS_BASE,
++ .end = TS7200_CF_AUX_PHYS_BASE + 1,
++ .flags = IORESOURCE_MEM,
++ },
++ [2] = {
++ .start = TS7200_CF_DATA_PHYS_BASE,
++ .end = TS7200_CF_DATA_PHYS_BASE + 2,
++ .flags = IORESOURCE_MEM,
++ },
++ [3] = {
++ .start = IRQ_EP93XX_EXT0, /* pin 103 of EP9301 */
++ .end = IRQ_EP93XX_EXT0,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++
++static struct platform_device ts7200_cf_device = {
++ .name = "ts72xx-ide",
++ .id = 0,
++ .dev = {
++ .dma_mask = &ts7200_cf_device.dev.coherent_dma_mask,
++ .coherent_dma_mask = DMA_BIT_MASK(32),
++ },
++ .num_resources = ARRAY_SIZE(ts7200_cf_resources),
++ .resource = ts7200_cf_resources,
++};
++
++
++static __init int pata_ts7200_cf_init(void)
++{
++ return (board_is_ts7200()) ? \
++ platform_device_register(&ts7200_cf_device) : -ENODEV;
++}
++
++static __exit void pata_ts7200_cf_exit(void)
++{
++ platform_device_unregister(&ts7200_cf_device);
++}
++
++module_init(pata_ts7200_cf_init);
++module_exit(pata_ts7200_cf_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TS-7200 CF PATA device driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
+diff --git a/drivers/ata/pata_ts72xx.c b/drivers/ata/pata_ts72xx.c
+new file mode 100644
+index 0000000..a2c12d1
+--- /dev/null
++++ b/drivers/ata/pata_ts72xx.c
+@@ -0,0 +1,155 @@
++/*
++ * TS-72XX PATA driver for Technologic Systems boards.
++ *
++ * Based on pata_platform.c by Paul Mundt &
++ * Alessandro Zummo <a.zummo@towertech.it>
++ * and old pata-ts72xx.c by Alessandro Zummo <a.zummo@towertech.it>
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/interrupt.h>
++#include <scsi/scsi_host.h>
++#include <linux/ata.h>
++#include <linux/libata.h>
++
++#define DRV_NAME "pata_ts72xx"
++#define DRV_VERSION "2.0"
++
++
++/*
++ * Provide our own set_mode() as we don't want to change anything that has
++ * already been configured..
++ */
++static int ts72xx_set_mode(struct ata_link *link, struct ata_device **unused)
++{
++ struct ata_device *dev;
++
++ ata_link_for_each_dev(dev, link) {
++ if (ata_dev_enabled(dev)) {
++ /* We don't really care */
++ dev->pio_mode = dev->xfer_mode = XFER_PIO_0;
++ dev->xfer_shift = ATA_SHIFT_PIO;
++ dev->flags |= ATA_DFLAG_PIO;
++ ata_dev_printk(dev, KERN_INFO, "configured for PIO\n");
++ }
++ }
++ return 0;
++}
++
++static struct scsi_host_template ts72xx_sht = {
++ ATA_PIO_SHT(DRV_NAME),
++};
++
++static struct ata_port_operations ts72xx_port_ops = {
++ .inherits = &ata_sff_port_ops,
++ .set_mode = ts72xx_set_mode,
++};
++
++static __devinit int ts72xx_pata_probe(struct platform_device *pdev)
++{
++ struct ata_host *host;
++ struct ata_port *ap;
++ int irq;
++
++ struct resource *pata_cmd = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ struct resource *pata_aux = platform_get_resource(pdev, IORESOURCE_MEM, 1);
++ struct resource *pata_data = platform_get_resource(pdev, IORESOURCE_MEM, 2);
++
++ if (!pata_cmd || !pata_aux || !pata_data) {
++ dev_err(&pdev->dev, "missing resource(s)\n");
++ return -EINVAL;
++ }
++
++ irq = platform_get_irq(pdev, 0);
++ if (irq < 0)
++ irq = 0; /* no irq */
++
++ /*
++ * Now that that's out of the way, wire up the port
++ */
++ host = ata_host_alloc(&pdev->dev, 1);
++ if (!host)
++ return -ENOMEM;
++ ap = host->ports[0];
++
++ ap->ops = &ts72xx_port_ops;
++ ap->pio_mask = 0x1f; /* PIO0-4 */
++ ap->flags |= ATA_FLAG_SLAVE_POSS;
++
++ /*
++ * Use polling mode if there's no IRQ
++ */
++ if (!irq) {
++ ap->flags |= ATA_FLAG_PIO_POLLING;
++ ata_port_desc(ap, "no IRQ, using PIO polling");
++ }
++
++ ap->ioaddr.cmd_addr = devm_ioremap(&pdev->dev, pata_cmd->start,
++ pata_cmd->end - pata_cmd->start + 1);
++ ap->ioaddr.ctl_addr = devm_ioremap(&pdev->dev, pata_aux->start,
++ pata_aux->end - pata_aux->start + 1);
++
++ if (!ap->ioaddr.cmd_addr || !ap->ioaddr.ctl_addr) {
++ dev_err(&pdev->dev, "failed to map IO/CTL base\n");
++ return -ENOMEM;
++ }
++
++ ap->ioaddr.altstatus_addr = ap->ioaddr.ctl_addr;
++
++ ata_sff_std_ports(&ap->ioaddr);
++ ap->ioaddr.data_addr = devm_ioremap(&pdev->dev, pata_data->start,
++ pata_data->end - pata_data->start + 1);
++
++ ata_port_desc(ap, "mmio cmd 0x%llx ctl 0x%llx",
++ (unsigned long long)pata_cmd->start,
++ (unsigned long long)pata_aux->start);
++
++ return ata_host_activate(host, irq, irq ? ata_sff_interrupt : NULL,
++ 0 /* irq flags */, &ts72xx_sht);
++}
++
++static __devexit int ts72xx_pata_remove(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct ata_host *host = dev_get_drvdata(dev);
++
++ ata_host_detach(host);
++
++ return 0;
++}
++
++static struct platform_driver ts72xx_pata_platform_driver = {
++ .probe = ts72xx_pata_probe,
++ .remove = __devexit_p(ts72xx_pata_remove),
++ .driver = {
++ .name = "ts72xx-ide",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init ts72xx_pata_init(void)
++{
++ return platform_driver_register(&ts72xx_pata_platform_driver);
++}
++
++static void __exit ts72xx_pata_exit(void)
++{
++ platform_driver_unregister(&ts72xx_pata_platform_driver);
++}
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("low-level driver for TS-72xx device PATA");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
++
++module_init(ts72xx_pata_init);
++module_exit(ts72xx_pata_exit);
+diff --git a/drivers/ata/pata_ts9600.c b/drivers/ata/pata_ts9600.c
+new file mode 100644
+index 0000000..b7348d2
+--- /dev/null
++++ b/drivers/ata/pata_ts9600.c
+@@ -0,0 +1,88 @@
++/*
++ * Technologic Systems TS-9600 PATA device driver.
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/libata.h>
++#include <scsi/scsi_host.h>
++#include <linux/platform_device.h>
++#include <linux/dma-mapping.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <mach/hardware.h>
++
++#define DRV_NAME "pata_ts9600"
++#define DRV_VERSION "0.2"
++
++#define TS9600_IDE_IO (TS72XX_PC104_8BIT_IO_PHYS_BASE + 0x1F0)
++#define TS9600_IDE_DATA (TS72XX_PC104_16BIT_IO_PHYS_BASE + 0x1F0)
++#define TS9600_IDE_IRQ IRQ_EP93XX_EXT3 // IRQ7 (no other possibility for arm)
++
++static struct resource ts9600_resources[] = {
++ [0] = {
++ .start = TS9600_IDE_IO,
++ .end = TS9600_IDE_IO + 8,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = TS9600_IDE_IO + 0x206,
++ .end = TS9600_IDE_IO + 0x206 + 1,
++ .flags = IORESOURCE_MEM,
++ },
++ [2] = {
++ .start = TS9600_IDE_DATA,
++ .end = TS9600_IDE_DATA + 2,
++ .flags = IORESOURCE_MEM,
++ },
++ [3] = {
++ .start = TS9600_IDE_IRQ,
++ .end = TS9600_IDE_IRQ,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++
++static struct platform_device ts9600_device = {
++ .name = "ts72xx-ide",
++ .id = 9600,
++ .dev = {
++ .dma_mask = &ts9600_device.dev.coherent_dma_mask,
++ .coherent_dma_mask = DMA_BIT_MASK(32),
++ },
++ .num_resources = ARRAY_SIZE(ts9600_resources),
++ .resource = ts9600_resources,
++};
++
++
++static __init int pata_ts9600_init(void)
++{
++ return platform_device_register(&ts9600_device);
++}
++
++static __exit void pata_ts9600_exit(void)
++{
++ platform_device_unregister(&ts9600_device);
++}
++
++module_init(pata_ts9600_init);
++module_exit(pata_ts9600_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TS-9600 PATA device driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0027-TS72xx-TS-SER1-support.patch b/recipes/linux/linux-2.6.27/ts72xx/0027-TS72xx-TS-SER1-support.patch
new file mode 100644
index 0000000000..97bdf7b33e
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0027-TS72xx-TS-SER1-support.patch
@@ -0,0 +1,213 @@
+From 2ccfb6a663fefa068b57f974379b543c19921791 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 14:33:36 +0100
+Subject: [PATCH] TS72xx TS-SER1 support
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/serial/8250_ts_ser1.c | 148 +++++++++++++++++++++++++++++++++++++++++
+ drivers/serial/Kconfig | 17 +++++
+ drivers/serial/Makefile | 1 +
+ 3 files changed, 166 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/serial/8250_ts_ser1.c
+
+diff --git a/drivers/serial/8250_ts_ser1.c b/drivers/serial/8250_ts_ser1.c
+new file mode 100644
+index 0000000..054a8e2
+--- /dev/null
++++ b/drivers/serial/8250_ts_ser1.c
+@@ -0,0 +1,148 @@
++/*
++ * linux/drivers/serial/8250_ts_ser1.c
++ * Technologic Systems TS-SER1 support.
++ *
++ * (c) Copyright 2006-2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Data taken from include/asm-i386/serial.h
++ *
++ * 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.
++ *
++ * Pin Number:
++ * 1 DCD
++ * 2 Receive data
++ * 3 Trasmit data
++ * 4 DTR
++ * 5 Signal Ground
++ * 6 DSR
++ * 7 RTS
++ * 8 CTS
++ * 9 RI
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/serial_8250.h>
++#include <linux/irq.h>
++#include <mach/hardware.h>
++#include <mach/gpio.h>
++
++
++#define TS72XX_SER1_IO_PHYS_BASE (TS72XX_PC104_8BIT_IO_PHYS_BASE)
++#define TS72XX_SER1_IO_SIZE (TS72XX_PC104_8BIT_IO_SIZE)
++
++#define TS_SER1_PORT_COM3 0x3E8
++#define TS_SER1_PORT_COM4 0x2E8
++#define TS_SER1_PORT_COM5 0x3A8
++
++/* Value to write in 16550A scratch register */
++#define MARKER_BYTE 0xAA /* or 0x55 */
++
++#define PORT(_base,_irq) \
++ { \
++ .iobase = _base, \
++ .membase = (void __iomem *)0, \
++ .irq = _irq, \
++ .uartclk = 1843200, \
++ .iotype = UPIO_PORT, \
++ .flags = UPF_BOOT_AUTOCONF, \
++ }
++// Note: IRQ can be shared (see CONFIG_SERIAL_8250_SHARE_IRQ)
++
++
++static struct plat_serial8250_port ts72xx_ser1_data_com3[] = {
++ PORT(TS_SER1_PORT_COM3, 0),
++ { },
++};
++
++static struct plat_serial8250_port ts72xx_ser1_data_com4[] = {
++ PORT(TS_SER1_PORT_COM4, 0),
++ { },
++};
++
++static struct plat_serial8250_port ts72xx_ser1_data_com5[] = {
++ PORT(TS_SER1_PORT_COM5, 0),
++ { },
++};
++
++static struct platform_device ts72xx_ser1_device = {
++ .name = "serial8250",
++ .id = 0,
++ .dev = {
++ .platform_data = ts72xx_ser1_data_com3,
++ },
++};
++
++static void __iomem *iomem;
++
++
++static int __init ts_ser1_init(void)
++{
++ static struct plat_serial8250_port *comX = NULL;
++ int n = 0; // COM number as printed on TS-SER1 pcb
++
++ iomem = ioremap(TS72XX_SER1_IO_PHYS_BASE, TS72XX_SER1_IO_SIZE);
++
++ if (iomem != NULL) {
++ __raw_writeb(MARKER_BYTE, iomem + TS_SER1_PORT_COM3 + 7);
++ if (__raw_readb(iomem + TS_SER1_PORT_COM3 + 7) == MARKER_BYTE) {
++ comX = ts72xx_ser1_data_com3;
++ n = 3;
++ } else {
++ __raw_writeb(MARKER_BYTE, iomem + TS_SER1_PORT_COM4 + 7);
++ if (__raw_readb(iomem + TS_SER1_PORT_COM4 + 7) == MARKER_BYTE) {
++ comX = ts72xx_ser1_data_com4;
++ n = 4;
++ } else {
++ __raw_writeb(MARKER_BYTE, iomem + TS_SER1_PORT_COM5 + 7);
++ if (__raw_readb(iomem + TS_SER1_PORT_COM5 + 7) == MARKER_BYTE) {
++ comX = ts72xx_ser1_data_com5;
++ n = 5;
++ }
++ }
++ }
++
++ if (comX) {
++ #if CONFIG_SERIAL_8250_TS_SER1_IRQ == 5
++ gpio_direction_input(EP93XX_GPIO_LINE_F(3));
++ comX->irq = gpio_to_irq(EP93XX_GPIO_LINE_F(3)); // 83
++ set_irq_type(comX->irq, IRQ_TYPE_EDGE_RISING);
++ #elif CONFIG_SERIAL_8250_TS_SER1_IRQ == 6
++ comX->irq = IRQ_EP93XX_EXT1;
++ #elif CONFIG_SERIAL_8250_TS_SER1_IRQ == 7
++ comX->irq = IRQ_EP93XX_EXT3;
++ #else
++ comX->irq = IRQ_EP93XX_EXT3;
++ #endif
++
++ comX->iobase += (unsigned long)iomem; // virtual address
++ }
++
++ ts72xx_ser1_device.id = n;
++ ts72xx_ser1_device.dev.platform_data = comX;
++ }
++
++ return ((comX == NULL) ? -ENODEV :
++ platform_device_register(&ts72xx_ser1_device));
++}
++
++static void __exit ts_ser1_exit(void)
++{
++ iounmap(iomem);
++ platform_device_unregister(&ts72xx_ser1_device);
++}
++
++module_init(ts_ser1_init);
++module_exit(ts_ser1_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("8250 serial probe module for TS-SER1 (TS-72xx)");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.3");
+diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
+index 77cb342..945daff 100644
+--- a/drivers/serial/Kconfig
++++ b/drivers/serial/Kconfig
+@@ -276,6 +276,23 @@ config SERIAL_8250_RM9K
+ port hardware found on MIPS RM9122 and similar processors.
+ If unsure, say N.
+
++config SERIAL_8250_TS_SER1
++ tristate "Support TS-SER1 (for TS-72XX SBC)"
++ depends on SERIAL_8250 != n && MACH_TS72XX
++ help
++ Say Y here if you have a TS-SER1 PC/104 peripheral.
++ COM number will be configured automaticaly.
++
++ To compile this driver as a module, choose M here: the module
++ will be called 8250_ts_ser1.
++
++config SERIAL_8250_TS_SER1_IRQ
++ int "Selected IRQ (5, 6 or 7)"
++ depends on SERIAL_8250_TS_SER1
++ default "5"
++ help
++ Enter jumper IRQ configuration
++
+ comment "Non-8250 serial port support"
+
+ config SERIAL_AMBA_PL010
+diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
+index 7e7383e..b4bd691 100644
+--- a/drivers/serial/Makefile
++++ b/drivers/serial/Makefile
+@@ -18,6 +18,7 @@ obj-$(CONFIG_SERIAL_8250_BOCA) += 8250_boca.o
+ obj-$(CONFIG_SERIAL_8250_EXAR_ST16C554) += 8250_exar_st16c554.o
+ obj-$(CONFIG_SERIAL_8250_HUB6) += 8250_hub6.o
+ obj-$(CONFIG_SERIAL_8250_MCA) += 8250_mca.o
++obj-$(CONFIG_SERIAL_8250_TS_SER1) += 8250_ts_ser1.o
+ obj-$(CONFIG_SERIAL_AMBA_PL010) += amba-pl010.o
+ obj-$(CONFIG_SERIAL_AMBA_PL011) += amba-pl011.o
+ obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0028-TS72xx-TS-ETH100.patch b/recipes/linux/linux-2.6.27/ts72xx/0028-TS72xx-TS-ETH100.patch
new file mode 100644
index 0000000000..1d747f8239
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0028-TS72xx-TS-ETH100.patch
@@ -0,0 +1,259 @@
+From 08d05de078e923857288f5dc629ac4a51354e035 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 14:34:59 +0100
+Subject: [PATCH] TS72xx TS-ETH100
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/net/Kconfig | 10 ++
+ drivers/net/Makefile | 1 +
+ drivers/net/ax88796.c | 4 +
+ drivers/net/ax88796_ts_eth100.c | 184 +++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 199 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/net/ax88796_ts_eth100.c
+
+diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
+index 60a0453..b0fec06 100644
+--- a/drivers/net/Kconfig
++++ b/drivers/net/Kconfig
+@@ -236,6 +236,16 @@ config AX88796_93CX6
+ help
+ Select this if your platform comes with an external 93CX6 eeprom.
+
++config AX88796_TS_ETH100
++ tristate "Support for TS-ETH100 (TS-72XX SBC)"
++ depends on AX88796 && MACH_TS72XX
++ help
++ Say Y here if you have a TS-ETH100 PC/104 peripheral.
++ IRQ numbers and I/O address will be configurated automaticaly.
++
++ To compile this driver as a module, choose M here: the module
++ will be called ax88796_ts_eth100.
++
+ config MACE
+ tristate "MACE (Power Mac ethernet) support"
+ depends on PPC_PMAC && PPC32
+diff --git a/drivers/net/Makefile b/drivers/net/Makefile
+index 7629c90..0be3739 100644
+--- a/drivers/net/Makefile
++++ b/drivers/net/Makefile
+@@ -124,6 +124,7 @@ obj-$(CONFIG_B44) += b44.o
+ obj-$(CONFIG_FORCEDETH) += forcedeth.o
+ obj-$(CONFIG_NE_H8300) += ne-h8300.o
+ obj-$(CONFIG_AX88796) += ax88796.o
++obj-$(CONFIG_AX88796_TS_ETH100) += ax88796_ts_eth100.o
+
+ obj-$(CONFIG_TSI108_ETH) += tsi108_eth.o
+ obj-$(CONFIG_MV643XX_ETH) += mv643xx_eth.o
+diff --git a/drivers/net/ax88796.c b/drivers/net/ax88796.c
+index a886a4b..f96d9eb 100644
+--- a/drivers/net/ax88796.c
++++ b/drivers/net/ax88796.c
+@@ -911,7 +911,11 @@ static int ax_probe(struct platform_device *pdev)
+ goto exit_mem2;
+ }
+
++ #ifdef CONFIG_AX88796_TS_ETH100
++ ei_status.reg_offset[0x10] = ax->map2 - ei_status.mem + 0x10;
++ #else
+ ei_status.reg_offset[0x1f] = ax->map2 - ei_status.mem;
++ #endif
+ }
+
+ /* got resources, now initialise and register device */
+diff --git a/drivers/net/ax88796_ts_eth100.c b/drivers/net/ax88796_ts_eth100.c
+new file mode 100644
+index 0000000..19746c3
+--- /dev/null
++++ b/drivers/net/ax88796_ts_eth100.c
+@@ -0,0 +1,184 @@
++/*
++ * linux/drivers/net/ax88796_ts_eth100.c
++ * Technologic Systems TS-ETH100 support.
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/irq.h>
++#include <net/ax88796.h>
++#include <mach/hardware.h>
++#include <mach/gpio.h>
++
++#define TS72XX_ETH100_IO8_PHYS_BASE (TS72XX_PC104_8BIT_IO_PHYS_BASE)
++#define TS72XX_ETH100_IO8_SIZE (TS72XX_PC104_8BIT_IO_SIZE)
++#define TS72XX_ETH100_IO16_PHYS_BASE (TS72XX_PC104_16BIT_IO_PHYS_BASE)
++#define TS72XX_ETH100_IO16_SIZE (TS72XX_PC104_16BIT_IO_SIZE)
++
++/* Technologic systems I/O space */
++#define TS_ETH100_PLD_0 0x100
++#define TS_ETH100_PLD_1 0x110
++#define TS_ETH100_PLD_2 0x120
++#define TS_ETH100_PLD_3 0x130
++
++/* NE2000 I/O space */
++#define TS_ETH100_MAC_0 0x200
++#define TS_ETH100_MAC_1 0x240
++#define TS_ETH100_MAC_2 0x300
++#define TS_ETH100_MAC_3 0x340
++
++/* Board identifier must be 5 ; PLD revision should be 1 */
++#define is_eth100_present(__iomem, __offset) \
++ (((__raw_readb(__iomem + __offset) & 0xF) == 0x5) && \
++ ((__raw_readb(__iomem + __offset + 4) & 0xF) == 0x1))
++
++/* Jumpers status (SRAM control register) */
++#define read_irq(__iomem, __offset) \
++ (__raw_readb(__iomem + __offset + 8) & 0xE)
++
++
++static u32 offsets[0x20] = {
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
++ 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
++};
++
++static struct ax_plat_data ts72xx_eth100_asix_data = {
++ .flags = AXFLG_HAS_93CX6,
++ .wordlength = 2,
++ .dcr_val = 0x48,
++ .rcr_val = 0x40,
++ .reg_offsets = offsets,
++};
++
++static struct resource ts72xx_eth100_resource[] = {
++ [0] = {
++ .start = TS72XX_ETH100_IO8_PHYS_BASE,
++ .end = TS72XX_ETH100_IO8_PHYS_BASE + 0x3ff, //0x20 -1,
++ .flags = IORESOURCE_MEM
++ },
++ [1] = { /* 0x10 is NE_DATAPORT is 16-bit access */
++ .start = TS72XX_ETH100_IO16_PHYS_BASE,
++ .end = TS72XX_ETH100_IO16_PHYS_BASE + 0x3ff, //0x20 -1,
++ .flags = IORESOURCE_MEM
++ },
++ [2] = {
++ .start = IRQ_EP93XX_EXT1,
++ .end = IRQ_EP93XX_EXT1,
++ .flags = IORESOURCE_IRQ
++ }
++};
++
++
++static void ts72xx_eth100_release(struct device *dev)
++{
++ // nothing to do (no kfree) because we have static struct
++}
++
++
++static struct platform_device ts72xx_eth100_device_asix = {
++ .name = "ax88796",
++ .id = 0,
++ .num_resources = ARRAY_SIZE(ts72xx_eth100_resource),
++ .resource = ts72xx_eth100_resource,
++ .dev = {
++ .platform_data = &ts72xx_eth100_asix_data,
++ .release = ts72xx_eth100_release,
++ }
++};
++
++
++static int __init ts_eth100_init(void)
++{
++ void __iomem *iomem;
++ static struct platform_device *ethX = NULL;
++
++ iomem = ioremap(TS72XX_ETH100_IO8_PHYS_BASE, TS72XX_ETH100_IO8_SIZE);
++ if (iomem != NULL) {
++ int irq = 0;
++
++ ethX = &ts72xx_eth100_device_asix;
++
++ if (is_eth100_present(iomem, TS_ETH100_PLD_0)) {
++ ethX->resource[0].start += TS_ETH100_MAC_0;
++ ethX->resource[0].end += TS_ETH100_MAC_0;
++ ethX->resource[1].start += TS_ETH100_MAC_0;
++ ethX->resource[1].end += TS_ETH100_MAC_0;
++ irq = read_irq(iomem, TS_ETH100_PLD_0);
++ } else if(is_eth100_present(iomem, TS_ETH100_PLD_1)) {
++ ethX->resource[0].start += TS_ETH100_MAC_1;
++ ethX->resource[0].end += TS_ETH100_MAC_1;
++ ethX->resource[1].start += TS_ETH100_MAC_1;
++ ethX->resource[1].end += TS_ETH100_MAC_1;
++ irq = read_irq(iomem, TS_ETH100_PLD_1);
++ } else if(is_eth100_present(iomem, TS_ETH100_PLD_2)) {
++ ethX->resource[0].start += TS_ETH100_MAC_2;
++ ethX->resource[0].end += TS_ETH100_MAC_2;
++ ethX->resource[1].start += TS_ETH100_MAC_2;
++ ethX->resource[1].end += TS_ETH100_MAC_2;
++ irq = read_irq(iomem, TS_ETH100_PLD_2);
++ } else if(is_eth100_present(iomem, TS_ETH100_PLD_3)) {
++ ethX->resource[0].start += TS_ETH100_MAC_3;
++ ethX->resource[0].end += TS_ETH100_MAC_3;
++ ethX->resource[1].start += TS_ETH100_MAC_3;
++ ethX->resource[1].end += TS_ETH100_MAC_3;
++ irq = read_irq(iomem, TS_ETH100_PLD_3);
++ } else {
++ ethX = NULL;
++ }
++
++ /* Translate IRQ number */
++ if (ethX != NULL) {
++ switch (irq) {
++ case 0x2: /* IRQ5 */
++ ethX->resource[2].start = gpio_to_irq(EP93XX_GPIO_LINE_F(3)); // 83
++ ethX->resource[2].end = gpio_to_irq(EP93XX_GPIO_LINE_F(3));
++ gpio_direction_input(EP93XX_GPIO_LINE_F(3));
++ set_irq_type(ethX->resource[2].start, IRQ_TYPE_EDGE_RISING);
++ break;
++ case 0x4: /* IRQ6 */
++ ethX->resource[2].start = IRQ_EP93XX_EXT1;
++ ethX->resource[2].end = IRQ_EP93XX_EXT1;
++ break;
++ case 0x8: /* IRQ7 */
++ default:
++ ethX->resource[2].start = IRQ_EP93XX_EXT3;
++ ethX->resource[2].end = IRQ_EP93XX_EXT3;
++ break;
++ }
++ }
++
++ iounmap(iomem);
++ }
++
++ return ((ethX == NULL) ? -ENODEV :
++ platform_device_register(&ts72xx_eth100_device_asix));
++}
++
++
++static void __exit ts_eth100_exit(void)
++{
++ platform_device_unregister(&ts72xx_eth100_device_asix);
++}
++
++module_init(ts_eth100_init);
++module_exit(ts_eth100_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("Asix 88796 ethernet probe module for TS-ETH100 (TS-72xx)");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.2");
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0029-EP93xx-Power-Management-Routines.patch b/recipes/linux/linux-2.6.27/ts72xx/0029-EP93xx-Power-Management-Routines.patch
new file mode 100644
index 0000000000..846a510b1a
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0029-EP93xx-Power-Management-Routines.patch
@@ -0,0 +1,125 @@
+From 6637a098eabb13d068c66e83e5bb0954a5266486 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 14:36:38 +0100
+Subject: [PATCH] EP93xx Power Management Routines
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/Makefile | 3 +
+ arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h | 1 +
+ arch/arm/mach-ep93xx/pm.c | 77 +++++++++++++++++++++++
+ 3 files changed, 81 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/pm.c
+
+diff --git a/arch/arm/mach-ep93xx/Makefile b/arch/arm/mach-ep93xx/Makefile
+index bbf8f9a..2f65745 100644
+--- a/arch/arm/mach-ep93xx/Makefile
++++ b/arch/arm/mach-ep93xx/Makefile
+@@ -17,3 +17,6 @@ obj-$(CONFIG_MACH_GESBC9312) += gesbc9312.o
+ obj-$(CONFIG_MACH_MICRO9) += micro9.o
+ obj-$(CONFIG_MACH_TS72XX) += ts72xx.o
+ obj-$(CONFIG_MACH_TS72XX_SBCINFO) += ts72xx_sbcinfo.o
++
++# Power Management
++obj-$(CONFIG_PM) += pm.o
+diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+index c0a8a95..f5218de 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
++++ b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+@@ -135,6 +135,7 @@
+ #define EP93XX_SYSCON_CLOCK_SET2 EP93XX_SYSCON_REG(0x24)
+ #define EP93XX_SYSCON_DEVICE_CONFIG EP93XX_SYSCON_REG(0x80)
+ #define EP93XX_SYSCON_DEVICE_CONFIG_CRUNCH_ENABLE 0x00800000
++#define EP93XX_SYSCON_DEVICE_CONFIG_SHENA 0x00000001
+ #define EP93XX_SYSCON_SWLOCK EP93XX_SYSCON_REG(0xc0)
+ #define EP93XX_SYSCON_CHIPID EP93XX_SYSCON_REG(0x94)
+
+diff --git a/arch/arm/mach-ep93xx/pm.c b/arch/arm/mach-ep93xx/pm.c
+new file mode 100644
+index 0000000..0c4ba53
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/pm.c
+@@ -0,0 +1,77 @@
++/*
++ * arch/arm/mach-ep93xx/pm.c
++ *
++ * EP93xx Power Management Routines
++ *
++ * Based on pm.c from Andre Renaud, Bluewater Systems Ltd.
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/suspend.h>
++#include <linux/sched.h>
++#include <linux/proc_fs.h>
++#include <linux/interrupt.h>
++#include <linux/sysfs.h>
++#include <linux/module.h>
++#include <mach/hardware.h>
++
++
++static inline void ep93xx_standby(void)
++{
++ u32 v;
++ v = __raw_readl(EP93XX_SYSCON_DEVICE_CONFIG);
++ v |= EP93XX_SYSCON_DEVICE_CONFIG_SHENA;
++ __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
++ __raw_writel(v, EP93XX_SYSCON_DEVICE_CONFIG);
++
++ v = __raw_readl(EP93XX_SYSCON_STANDBY);
++
++ asm("nop; nop; nop; nop; nop");
++}
++
++static inline void ep93xx_resume(void)
++{
++ u32 v;
++
++ v = __raw_readl(EP93XX_SYSCON_DEVICE_CONFIG);
++ v &= ~EP93XX_SYSCON_DEVICE_CONFIG_SHENA;
++ __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
++ __raw_writel(v, EP93XX_SYSCON_DEVICE_CONFIG);
++}
++
++static int suspend_ep93xx_enter(suspend_state_t state)
++{
++ switch (state) {
++ case PM_SUSPEND_STANDBY:
++ case PM_SUSPEND_MEM:
++ ep93xx_standby(); /* go zzz */
++ ep93xx_resume();
++ }
++ return 0;
++}
++
++static int suspend_ep93xx_valid(suspend_state_t state)
++{
++ return (state == PM_SUSPEND_STANDBY) ||
++ (state == PM_SUSPEND_MEM);
++}
++
++
++static struct platform_suspend_ops ep93xx_suspend_ops = {
++ .enter = suspend_ep93xx_enter,
++ .valid = suspend_ep93xx_valid,
++};
++
++static int __init ep93xx_pm_init(void)
++{
++ pr_info("ep93xx: Power Management\n");
++ suspend_set_ops(&ep93xx_suspend_ops);
++ return 0;
++}
++__initcall(ep93xx_pm_init);
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/0030-EP93xx-CPUfreq-driver.patch b/recipes/linux/linux-2.6.27/ts72xx/0030-EP93xx-CPUfreq-driver.patch
new file mode 100644
index 0000000000..eecbf0b3ce
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/0030-EP93xx-CPUfreq-driver.patch
@@ -0,0 +1,332 @@
+From 9334371292b94cebacd6383c8d60a06bdd7d899b Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 4 Jan 2009 14:37:24 +0100
+Subject: [PATCH] EP93xx CPUfreq driver
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/Kconfig | 11 ++-
+ arch/arm/mach-ep93xx/Makefile | 2 +
+ arch/arm/mach-ep93xx/cpufreq.c | 265 ++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 277 insertions(+), 1 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/cpufreq.c
+
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index d196fe8..f6259a8 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -1007,7 +1007,7 @@ config ATAGS_PROC
+
+ endmenu
+
+-if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_PXA)
++if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_EP93XX || ARCH_PXA)
+
+ menu "CPU Frequency scaling"
+
+@@ -1043,6 +1043,15 @@ config CPU_FREQ_IMX
+
+ If in doubt, say N.
+
++config CPU_FREQ_EP93XX
++ tristate "CPUfreq driver for EP93XX CPUs"
++ depends on ARCH_EP93XX && CPU_FREQ
++ default n
++ help
++ This enables the CPUfreq driver for EP9301 CPUs. Not tested with EP9302.
++
++ If in doubt, say N.
++
+ config CPU_FREQ_PXA
+ bool
+ depends on CPU_FREQ && ARCH_PXA && PXA25x
+diff --git a/arch/arm/mach-ep93xx/Makefile b/arch/arm/mach-ep93xx/Makefile
+index 2f65745..4b6b542 100644
+--- a/arch/arm/mach-ep93xx/Makefile
++++ b/arch/arm/mach-ep93xx/Makefile
+@@ -6,6 +6,8 @@ obj-m :=
+ obj-n :=
+ obj- :=
+
++obj-$(CONFIG_CPU_FREQ_EP93XX) += cpufreq.o
++
+ obj-$(CONFIG_MACH_ADSSPHERE) += adssphere.o
+ obj-$(CONFIG_MACH_EDB9302) += edb9302.o
+ obj-$(CONFIG_MACH_EDB9302A) += edb9302a.o
+diff --git a/arch/arm/mach-ep93xx/cpufreq.c b/arch/arm/mach-ep93xx/cpufreq.c
+new file mode 100644
+index 0000000..1721ac4
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/cpufreq.c
+@@ -0,0 +1,265 @@
++/*
++ * cpufreq.c: clock scaling for Cirrus EP93XX embedded chip
++ *
++ * Copyright (C) 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * Based on "cpu-ep93xx.c" driver (for 2.4 kernel) by
++ * Bob Lees bob@diamond.demon.co.uk (Diamond Consulting Services Ltd)
++ * Ideas taken from "clock.c" by Lennert Buytenhek <buytenh@wantstofly.org>
++ *
++ * 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
++ *
++ * Theory of operations
++ * ====================
++ *
++ * Clock scaling can be used to lower the power consumption of the CPU
++ * core. For this processor the major power saving is reducing the mem clk.
++ *
++ * The ep93xx has 2 registers to control the 2 PLLs of the ep93xx:
++ * PLL1 controls the cpu, bus and peripheral clocks;
++ * PLL2 controls the USB, MIR and ADC clocks.
++ *
++ * ClkSet1 (EP93XX_SYSCON_CLOCK_SET1) 0x80930020 Clock speed control 1 (i.e. PLL1 config)
++ * ClkSet2 (EP93XX_SYSCON_CLOCK_SET2) 0x80930024 Clock speed control 2 (i.e. PLL2 config)
++ *
++ * This driver only focus on PLL1. The pll has two multipliers/dividers:
++ * Fout = 14.7456 * (PLL1_X1FBD + 1) * (PLL1_X2FBD + 1) / ((PLL1_X2IPD + 1) * 2 ^ PLL1_PS)
++ * = 14.7456 * (PLL1_X1FBD + 1) * (PLL1_X2FBD + 1) / (PLL1_X2IPD + 1) / 2 ^ PLL1_PS
++ *
++ *
++ * fclk [processor ] = pll1 / fclk_divisor
++ * hclk [AHB bus clock] = pll1 / hclk_divisor
++ * pclk [APB bus clock] = hclk / pclk_divisor
++ * fclk >= hclk > pclk
++ *
++ * EP9301 EP9302/07/12/15
++ * PLL1 fout max (MHz) 528 528
++ * fclk min (MHz) 12.9 12.9
++ * fclk max (MHz) 166 200
++ * hclk max (MHz) 66 100
++ * pclk max (MHz) 50 50
++ *
++ * Notes:
++ * - Ethernet (100 MBit) doesn't work with hclk < 25MHz.
++ * - This driver does not use the clk_{put,roundrate} (clock.c) functions. It is
++ * standalone.
++ * - Is it safe to have fclk = hclk ?
++ */
++
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/cpufreq.h>
++#include <mach/hardware.h>
++
++
++/* ClkSet1 register */
++#define SYSCON_CLKSET1_PLL1_PS_SHIFT 16
++#define SYSCON_CLKSET1_PCLK_DIV_SHIFT 18
++#define SYSCON_CLKSET1_HCLK_DIV_SHIFT 20
++#define SYSCON_CLKSET1_FCLK_DIV_SHIFT 25
++
++#define CLKSET1(p, pl, pd, h, f) ( p | \
++ ( pl << SYSCON_CLKSET1_PLL1_PS_SHIFT) | \
++ ( pd << SYSCON_CLKSET1_PCLK_DIV_SHIFT)| \
++ ( h << SYSCON_CLKSET1_HCLK_DIV_SHIFT) | \
++ ( f << SYSCON_CLKSET1_FCLK_DIV_SHIFT))
++
++typedef struct {
++ int speed; /* in kHz */
++ u32 preset; /* x1fbd, x2fbd and x2ipd are left unchanged */
++ u32 pll1_ps; /* sets final divide from pll */
++ u32 pdiv; /* sets pclk, peripheral clk (division of hclk) */
++ u32 hdiv; /* sets hclk, bus (memory) clk */
++ u32 fdiv; /* sets fclk, processor clk */
++} ep93xx_speed_settings_t;
++
++static char fclk_divisors[] = { 1, 2, 4, 8, 16, 1, 1, 1 };
++
++
++/* Suitable for EP9301. Assumed: PLL1 = 331.8 MHz (X1FBD1=19, X1FBD2=17, X2IPD=15)*/
++static ep93xx_speed_settings_t ep93xx_clkset1_settings[] =
++{
++ /* { speed, preset, pll1_ps, pdiv, hdiv, fdiv } */
++ { 165888, 0x00809a2f, 0, 1, 3, 1 }, /* [0x02B49A2F] fclk=165.9 (fdiv=2), hclk=66.4 (hdiv=5), pclk=33.2 (pdiv=2), ps=1 */
++ { 165887, 0x00809a2f, 1, 1, 3, 0 }, /* [0x00B59A2F] fclk=165.9 (fdiv=1), hclk=33.2 (hdiv=5), pclk=16.6 (pdiv=2), ps=2 */
++ { 82944, 0x00809a2f, 0, 1, 3, 2 }, /* [0x04B49A2F] fclk=82.9 (fdiv=4), hclk=66.4 (hdiv=5), pclk=33.2 (pdiv=2), ps=1 */
++ { 82943, 0x00809a2f, 0, 1, 4, 2 }, /* [0x04C49A2F] fclk=82.9 (fdiv=4), hclk=55.3 (hdiv=6), pclk=27.6 (pdiv=2), ps=1 */
++ { 82942, 0x00809a2f, 1, 1, 2, 1 }, /* [0x02A59A2F] fclk=82.9 (fdiv=2), hclk=41.5 (hdiv=4), pclk=20.7 (pdiv=2), ps=2 */
++ { 41472, 0x00809a2f, 0, 1, 5, 3 }, /* [0x06D49A2F] fclk=41.5 (fdiv=8), hclk=41.5 (hdiv=8), pclk=20.7 (pdiv=2), ps=1 */
++};
++
++#if 0
++/* Suitable for EP9302/07/12/15. Assumed: PLL1 = 400.1 MHz (X1FBD1=23, X1FBD2=25, X2IPD=22) */
++static ep93xx_speed_settings_t ep93xx_clkset1_settings[] =
++{
++ /* { speed, preset, pll1_ps, pdiv, hdiv, fdiv } */
++ { 200027, 0x0080bb36, 0, 1, 2, 1 }, /* [0x02A4BB36] fclk=200.0 (fdiv=2), hclk=100.0 (hdiv=4), pclk=50.0 (pdiv=2), ps=1 */
++ { 200026, 0x0080bb36, 0, 1, 3, 1 }, /* [0x02B4BB36] fclk=200.0 (fdiv=2), hclk=80.0 (hdiv=5), pclk=40.0 (pdiv=2), ps=1 */
++ { 200025, 0x0080bb36, 0, 1, 4, 1 }, /* [0x02C4BB36] fclk=200.0 (fdiv=2), hclk=66.7 (hdiv=6), pclk=33.3 (pdiv=2), ps=1 */
++ { 100013, 0x0080bb36, 0, 1, 3, 2 }, /* [0x04B4BB36] fclk=100.0 (fdiv=4), hclk=80.0 (hdiv=5), pclk=40.0 (pdiv=2), ps=1 */
++ { 100012, 0x0080bb36, 1, 1, 2, 1 }, /* [0x02A5BB36] fclk=100.0 (fdiv=2), hclk=50.0 (hdiv=4), pclk=25.0 (pdiv=2), ps=2 */
++ { 100011, 0x0080bb36, 1, 1, 1, 1 }, /* [0x0295BB36] fclk=100.0 (fdiv=2), hclk=100.0 (hdiv=2), pclk=50.0 (pdiv=2), ps=2 */
++ { 50006, 0x0080bb36, 2, 1, 2, 1 }, /* [0x02A6BB36] fclk=50.0 (fdiv=2), hclk=25.0 (hdiv=4), pclk=12.5 (pdiv=2), ps=4 */
++ { 50005, 0x0080bb36, 2, 1, 1, 1 }, /* [0x0296BB36] fclk=50.0 (fdiv=2), hclk=50.0 (hdiv=2), pclk=25.0 (pdiv=2), ps=4 */
++ { 25003, 0x0080bb36, 3, 1, 1, 1 }, /* [0x0297BB36] fclk=25.0 (fdiv=2), hclk=25.0 (hdiv=2), pclk=12.5 (pdiv=2), ps=8 */
++};
++#endif
++
++
++static unsigned long calc_pll_rate(u32 config_word)
++{
++ unsigned long long rate;
++
++ rate = 14745600;
++ rate *= ((config_word >> 11) & 0x1f) + 1; /* X1FBD (5 bits) */
++ rate *= ((config_word >> 5) & 0x3f) + 1; /* X2FBD (6 bits) */
++ do_div(rate, (config_word & 0x1f) + 1); /* X2IPD (5 bits) */
++ rate = rate >> ((config_word >> 16) & 3); /* PS (2 bits) */
++
++ return (unsigned long)rate;
++}
++
++
++static ep93xx_speed_settings_t *ep93xx_find_clkset1(unsigned int khz, unsigned int relation)
++{
++ int i;
++ ep93xx_speed_settings_t *p = &ep93xx_clkset1_settings[0];
++
++ switch (relation) {
++ case CPUFREQ_RELATION_L: /* lowest frequency at or above target */
++ for (i = 0; i < sizeof(ep93xx_clkset1_settings)/sizeof(ep93xx_speed_settings_t); i++) {
++ if (ep93xx_clkset1_settings[i].speed < khz)
++ continue;
++ if (p->speed > ep93xx_clkset1_settings[i].speed) // take lowest value
++ p = &ep93xx_clkset1_settings[i];
++ }
++ break;
++
++ case CPUFREQ_RELATION_H: /* highest frequency below or at target */
++ for (i = 0; i < sizeof(ep93xx_clkset1_settings)/sizeof(ep93xx_speed_settings_t); i++) {
++ if (ep93xx_clkset1_settings[i].speed > khz)
++ continue;
++ if (p->speed < ep93xx_clkset1_settings[i].speed) // take highest value
++ p = &ep93xx_clkset1_settings[i];
++ }
++ break;
++ }
++
++ return p;
++}
++
++
++static int ep93xx_verify_speed(struct cpufreq_policy *policy)
++{
++ if (policy->cpu != 0)
++ return -EINVAL;
++
++ cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, policy->cpuinfo.max_freq);
++
++ return 0;
++}
++
++
++static unsigned int ep93xx_get_speed(unsigned int cpu)
++{
++ unsigned int freq;
++ u32 value;
++
++ if (cpu)
++ return 0;
++
++ value = __raw_readl(EP93XX_SYSCON_CLOCK_SET1);
++ if (!(value & 0x00800000)) { /* PLL1 bypassed? */
++ freq = 14745600;
++ } else {
++ freq = calc_pll_rate(value);
++ }
++ freq /= fclk_divisors[(value >> 25) & 0x7];
++
++ freq = (freq + 500) / 1000; /* rounded result in kHz */
++ return freq;
++}
++
++
++static int ep93xx_set_target(struct cpufreq_policy *policy,
++ unsigned int target_freq,
++ unsigned int relation)
++{
++ struct cpufreq_freqs freqs;
++ ep93xx_speed_settings_t *config;
++ u32 value;
++
++ config = ep93xx_find_clkset1(target_freq, relation);
++
++ freqs.old = ep93xx_get_speed(0);
++ freqs.new = config->speed;
++ freqs.cpu = 0;
++ freqs.flags = 0;
++
++ //printk("ep93xx: target_freq=%d, old=%d new=%d (kHz) rel=%d\n", target_freq, freqs.old, freqs.new, relation);
++
++ cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
++
++ value = CLKSET1(config->preset, config->pll1_ps,
++ config->pdiv, config->hdiv, config->fdiv);
++ __raw_writel(value, EP93XX_SYSCON_CLOCK_SET1);
++
++ /* 5 nops required to fluch instruction pipeline */
++ __asm__ __volatile__("nop; nop; nop; nop; nop");
++
++ cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
++
++ return 0;
++}
++
++
++static int __init ep93xx_cpufreq_driver_init(struct cpufreq_policy *policy)
++{
++ printk(KERN_INFO "ep93xx-cpufreq: driver v1.0\n");
++
++ if (policy->cpu != 0)
++ return -EINVAL;
++
++ policy->cur = policy->min = policy->max = ep93xx_get_speed(0);
++
++ policy->cpuinfo.min_freq = 13000;
++
++ /* Check CPU version (ep9301 special case) */
++ if (policy->cur <= 166000)
++ policy->cpuinfo.max_freq = 166000;
++ else
++ policy->cpuinfo.max_freq = 200000;
++
++ policy->cpuinfo.transition_latency = 1000000; /* 1ms (unknown = CPUFREQ_ETERNAL) */
++
++ return 0;
++}
++
++static struct cpufreq_driver ep93xx_driver = {
++ .flags = CPUFREQ_STICKY,
++ .verify = ep93xx_verify_speed,
++ .target = ep93xx_set_target,
++ .get = ep93xx_get_speed,
++ .init = ep93xx_cpufreq_driver_init,
++ .name = "ep93xx",
++};
++
++static int __init ep93xx_cpufreq_init(void)
++{
++ return cpufreq_register_driver(&ep93xx_driver);
++}
++
++arch_initcall(ep93xx_cpufreq_init);
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.27/ts72xx/defconfig b/recipes/linux/linux-2.6.27/ts72xx/defconfig
new file mode 100644
index 0000000000..479b5dced2
--- /dev/null
+++ b/recipes/linux/linux-2.6.27/ts72xx/defconfig
@@ -0,0 +1,1312 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.27.15
+# Sat Feb 7 00:39:10 2009
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+# CONFIG_GENERIC_CLOCKEVENTS is not set
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_SUPPORTS_AOUT=y
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=16
+# CONFIG_CGROUPS is not set
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+CONFIG_IPC_NS=y
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_MARKERS=y
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+# CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set
+# CONFIG_HAVE_IOREMAP_PROT is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_ARCH_TRACEHOOK is not set
+# CONFIG_HAVE_DMA_ATTRS is not set
+# CONFIG_USE_GENERIC_SMP_HELPERS is not set
+CONFIG_HAVE_CLK=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_CLASSIC_RCU=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_EBSA110 is not set
+CONFIG_ARCH_EP93XX=y
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_MSM7X00A is not set
+
+#
+# Cirrus EP93xx Implementation Options
+#
+# CONFIG_CRUNCH is not set
+
+#
+# EP93xx Platforms
+#
+# CONFIG_MACH_ADSSPHERE is not set
+# CONFIG_MACH_EDB9302 is not set
+# CONFIG_MACH_EDB9302A is not set
+# CONFIG_MACH_EDB9307 is not set
+# CONFIG_MACH_EDB9312 is not set
+# CONFIG_MACH_EDB9315 is not set
+# CONFIG_MACH_EDB9315A is not set
+# CONFIG_MACH_GESBC9312 is not set
+# CONFIG_MACH_MICRO9 is not set
+# CONFIG_MACH_MICRO9H is not set
+# CONFIG_MACH_MICRO9M is not set
+# CONFIG_MACH_MICRO9L is not set
+CONFIG_MACH_TS72XX=y
+# CONFIG_MACH_TS72XX_SBCINFO is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_PABRT_NOIFAR=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_ARM_VIC=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
+CONFIG_NODES_SHIFT=5
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_NEED_MULTIPLE_NODES=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=ttyAM0,115200 ip=192.168.1.3:192.168.1.2:192.168.1.2:255.255.255.0 root=/dev/nfs nfsroot=192.168.1.2:/media/data/devel/oe/ts72xx-stable/tmp/deploy/glibc/images/ts72xx/nfsroot debug "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+# CONFIG_IP_ROUTE_MULTIPATH is not set
+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+CONFIG_NET_IPIP=y
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+CONFIG_ARPD=y
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=y
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+CONFIG_NETWORK_SECMARK=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
+# CONFIG_NF_CONNTRACK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_FIB_RULES=y
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_TS7200_NOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_TS7250=y
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+CONFIG_EEPROM_93CX6=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_TS72XX_MAX197 is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_EP93XX_ETH=y
+CONFIG_AX88796=y
+CONFIG_AX88796_93CX6=y
+CONFIG_AX88796_TS_ETH100=y
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+# CONFIG_IWLWIFI_LEDS is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+CONFIG_PPP_SYNC_TTY=y
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_BSDCOMP=y
+CONFIG_PPP_MPPE=y
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=y
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_AMBAKMI is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_DEVKMEM is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_AMBA_PL010=y
+CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
+# CONFIG_SERIAL_AMBA_PL011 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=128
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_I2C is not set
+# CONFIG_SPI is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_SYSFS=y
+
+#
+# I2C GPIO expanders:
+#
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+# CONFIG_EP93XX_WATCHDOG is not set
+CONFIG_TS72XX_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_TS72XX_CONSOLE is not set
+# CONFIG_SOUND is not set
+# CONFIG_HID_SUPPORT is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+CONFIG_USB_DEBUG=y
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+CONFIG_USB_MON=y
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=y
+CONFIG_USB_SERIAL_CONSOLE=y
+# CONFIG_USB_EZUSB is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_IUU is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_MOTOROLA is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=y
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_SPCP8X5 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+CONFIG_USB_SERIAL_OPTION=y
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_GPIO=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+CONFIG_RTC_DRV_M48T86=y
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_EP93XX is not set
+# CONFIG_RTC_DRV_PL030 is not set
+# CONFIG_RTC_DRV_PL031 is not set
+# CONFIG_DMADEVICES is not set
+
+#
+# Voltage and Current regulators
+#
+# CONFIG_REGULATOR is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_UIO is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+# CONFIG_EXT2_FS_POSIX_ACL is not set
+# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_DNOTIFY is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_CONFIGFS_FS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_ACL_SUPPORT=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=2048
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_MEMORY_INIT=y
+CONFIG_FRAME_POINTER=y
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FTRACE=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+# CONFIG_FTRACE is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_MANAGER=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=y
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_LZO is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_GENERIC_FIND_FIRST_BIT is not set
+# CONFIG_GENERIC_FIND_NEXT_BIT is not set
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/recipes/linux/linux-2.6.28/mh355/defconfig b/recipes/linux/linux-2.6.28/mh355/defconfig
new file mode 100644
index 0000000000..a912594cb8
--- /dev/null
+++ b/recipes/linux/linux-2.6.28/mh355/defconfig
@@ -0,0 +1,1419 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.28.10
+# Sat Mar 20 22:28:15 2010
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-mh355"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+# CONFIG_GROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_COMPAT_BRK=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_CLASSIC_RCU=y
+# CONFIG_FREEZER is not set
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+CONFIG_ARCH_AT91=y
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_MSM is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Atmel AT91 System-on-Chip
+#
+# CONFIG_ARCH_AT91RM9200 is not set
+# CONFIG_ARCH_AT91SAM9260 is not set
+# CONFIG_ARCH_AT91SAM9261 is not set
+CONFIG_ARCH_AT91SAM9263=y
+# CONFIG_ARCH_AT91SAM9RL is not set
+# CONFIG_ARCH_AT91SAM9G20 is not set
+# CONFIG_ARCH_AT91CAP9 is not set
+# CONFIG_ARCH_AT91X40 is not set
+CONFIG_AT91_PMC_UNIT=y
+
+#
+# AT91SAM9263 Board Type
+#
+# CONFIG_MACH_AT91SAM9263EK is not set
+# CONFIG_MACH_USB_A9263 is not set
+# CONFIG_MACH_CSB737 is not set
+# CONFIG_MACH_TOTEMNOVA is not set
+# CONFIG_MACH_NEOCORE926 is not set
+CONFIG_MACH_MH355=y
+# CONFIG_MH355_LCD_TX09D70 is not set
+CONFIG_MH355_LCD_FG0700K2DSSWBG01=y
+
+#
+# AT91 Board Options
+#
+# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
+# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
+
+#
+# AT91 Feature Selections
+#
+# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
+CONFIG_AT91_TIMER_HZ=100
+CONFIG_AT91_EARLY_DBGU=y
+# CONFIG_AT91_EARLY_USART0 is not set
+# CONFIG_AT91_EARLY_USART1 is not set
+# CONFIG_AT91_EARLY_USART2 is not set
+# CONFIG_AT91_EARLY_USART3 is not set
+# CONFIG_AT91_EARLY_USART4 is not set
+# CONFIG_AT91_EARLY_USART5 is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_PABRT_NOIFAR=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/mtdblock5 rootfstype=jffs2 fbcon=rotate:3"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+# CONFIG_VFP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_OLD_REGULATORY=y
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_CFI_UTIL=y
+CONFIG_MTD_RAM=y
+CONFIG_MTD_ROM=y
+CONFIG_MTD_ABSENT=y
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x10000000
+CONFIG_MTD_PHYSMAP_LEN=0x400000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_DATAFLASH=y
+# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
+# CONFIG_MTD_DATAFLASH_OTP is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_ATMEL=y
+# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
+# CONFIG_MTD_NAND_ATMEL_ECC_HW_HSIAO is not set
+CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
+# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+CONFIG_ATMEL_PWM=y
+# CONFIG_ATMEL_TCLIB is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_ATMEL_SSC=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_C2PORT is not set
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=y
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_IDE_GD=y
+CONFIG_IDE_GD_ATA=y
+# CONFIG_IDE_GD_ATAPI is not set
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_MACB=y
+# CONFIG_MACB_TX_SRAM is not set
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_SMC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+# CONFIG_IWLWIFI_LEDS is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_WM97XX is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+CONFIG_SERIAL_ATMEL_PDC=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_I2C is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_ATMEL=y
+# CONFIG_SPI_BITBANG is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+# CONFIG_W1_MASTER_DS1WM is not set
+CONFIG_W1_MASTER_GPIO=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+CONFIG_W1_SLAVE_SMEM=y
+# CONFIG_W1_SLAVE_DS2433 is not set
+# CONFIG_W1_SLAVE_DS2760 is not set
+# CONFIG_W1_SLAVE_BQ27000 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_AT91SAM9X_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D15605 is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_ATMEL=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_VMASTER=y
+CONFIG_SND_AC97_CODEC=y
+CONFIG_SND_DRIVERS=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_AC97_POWER_SAVE is not set
+CONFIG_SND_ARM=y
+CONFIG_SND_AT91_AC97=y
+CONFIG_SND_SPI=y
+# CONFIG_SND_AT73C213 is not set
+CONFIG_SND_USB=y
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+# CONFIG_SND_SOC is not set
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_COMPAT=y
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_BRIGHT=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+CONFIG_HID_DELL=y
+CONFIG_HID_EZKEY=y
+CONFIG_HID_GYRATION=y
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# CONFIG_THRUSTMASTER_FF is not set
+# CONFIG_ZEROPLUS_FF is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
+#
+
+#
+# see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+CONFIG_USB_LIBUSUAL=y
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+CONFIG_USB_GADGET_AT91=y
+CONFIG_USB_AT91=y
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+CONFIG_USB_CDC_COMPOSITE=m
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+CONFIG_MMC_AT91=y
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_ATMEL_PWM=y
+CONFIG_LEDS_GPIO=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_AT91SAM9=y
+CONFIG_RTC_DRV_AT91SAM9_RTT=0
+CONFIG_RTC_DRV_AT91SAM9_GPBR=0
+# CONFIG_DMADEVICES is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_UIO is not set
+
+#
+# File systems
+#
+# CONFIG_EXT2_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_FILE_LOCKING=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_REGISTER_V4 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+
+#
+# Tracers
+#
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/recipes/linux/linux-2.6.28/mh355/linux-2.6.28.10-at91-mh.patch b/recipes/linux/linux-2.6.28/mh355/linux-2.6.28.10-at91-mh.patch
new file mode 100644
index 0000000000..7ebce5662d
--- /dev/null
+++ b/recipes/linux/linux-2.6.28/mh355/linux-2.6.28.10-at91-mh.patch
@@ -0,0 +1,2860 @@
+diff -Nur linux-2.6.28.10-at91/arch/arm/configs/mh355_defconfig linux-2.6.28.10-at91-mh/arch/arm/configs/mh355_defconfig
+--- linux-2.6.28.10-at91/arch/arm/configs/mh355_defconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.28.10-at91-mh/arch/arm/configs/mh355_defconfig 2010-03-20 22:22:57.000000000 +0100
+@@ -0,0 +1,1419 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.28.10
++# Sat Mar 20 22:09:33 2010
++#
++CONFIG_ARM=y
++CONFIG_SYS_SUPPORTS_APM_EMULATION=y
++CONFIG_GENERIC_GPIO=y
++CONFIG_GENERIC_TIME=y
++CONFIG_GENERIC_CLOCKEVENTS=y
++CONFIG_MMU=y
++# CONFIG_NO_IOPORT is not set
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_HAVE_LATENCYTOP_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
++CONFIG_VECTORS_BASE=0xffff0000
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION="-mh355"
++# CONFIG_LOCALVERSION_AUTO is not set
++# CONFIG_SWAP is not set
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_AUDIT is not set
++# CONFIG_IKCONFIG is not set
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_CGROUPS is not set
++# CONFIG_GROUP_SCHED is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_SYSCTL=y
++CONFIG_ANON_INODES=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_AIO=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_COMPAT_BRK=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_CLK=y
++CONFIG_HAVE_GENERIC_DMA_COHERENT=y
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++# CONFIG_BLK_DEV_BSG is not set
++# CONFIG_BLK_DEV_INTEGRITY is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++# CONFIG_IOSCHED_DEADLINE is not set
++# CONFIG_IOSCHED_CFQ is not set
++CONFIG_DEFAULT_AS=y
++# CONFIG_DEFAULT_DEADLINE is not set
++# CONFIG_DEFAULT_CFQ is not set
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="anticipatory"
++CONFIG_CLASSIC_RCU=y
++# CONFIG_FREEZER is not set
++
++#
++# System Type
++#
++# CONFIG_ARCH_AAEC2000 is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_REALVIEW is not set
++# CONFIG_ARCH_VERSATILE is not set
++CONFIG_ARCH_AT91=y
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_NETX is not set
++# CONFIG_ARCH_H720X is not set
++# CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_IOP13XX is not set
++# CONFIG_ARCH_IOP32X is not set
++# CONFIG_ARCH_IOP33X is not set
++# CONFIG_ARCH_IXP23XX is not set
++# CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_IXP4XX is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_KIRKWOOD is not set
++# CONFIG_ARCH_KS8695 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_LOKI is not set
++# CONFIG_ARCH_MV78XX0 is not set
++# CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_ORION5X is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_DAVINCI is not set
++# CONFIG_ARCH_OMAP is not set
++# CONFIG_ARCH_MSM is not set
++
++#
++# Boot options
++#
++
++#
++# Power management
++#
++
++#
++# Atmel AT91 System-on-Chip
++#
++# CONFIG_ARCH_AT91RM9200 is not set
++# CONFIG_ARCH_AT91SAM9260 is not set
++# CONFIG_ARCH_AT91SAM9261 is not set
++CONFIG_ARCH_AT91SAM9263=y
++# CONFIG_ARCH_AT91SAM9RL is not set
++# CONFIG_ARCH_AT91SAM9G20 is not set
++# CONFIG_ARCH_AT91CAP9 is not set
++# CONFIG_ARCH_AT91X40 is not set
++CONFIG_AT91_PMC_UNIT=y
++
++#
++# AT91SAM9263 Board Type
++#
++# CONFIG_MACH_AT91SAM9263EK is not set
++# CONFIG_MACH_USB_A9263 is not set
++# CONFIG_MACH_CSB737 is not set
++# CONFIG_MACH_TOTEMNOVA is not set
++# CONFIG_MACH_NEOCORE926 is not set
++CONFIG_MACH_MH355=y
++# CONFIG_MH355_LCD_TX09D70 is not set
++CONFIG_MH355_LCD_FG0700K2DSSWBG01=y
++
++#
++# AT91 Board Options
++#
++# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
++# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
++
++#
++# AT91 Feature Selections
++#
++# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
++CONFIG_AT91_TIMER_HZ=100
++CONFIG_AT91_EARLY_DBGU=y
++# CONFIG_AT91_EARLY_USART0 is not set
++# CONFIG_AT91_EARLY_USART1 is not set
++# CONFIG_AT91_EARLY_USART2 is not set
++# CONFIG_AT91_EARLY_USART3 is not set
++# CONFIG_AT91_EARLY_USART4 is not set
++# CONFIG_AT91_EARLY_USART5 is not set
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM926T=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_PABRT_NOIFAR=y
++CONFIG_CPU_CACHE_VIVT=y
++CONFIG_CPU_COPY_V4WB=y
++CONFIG_CPU_TLB_V4WBI=y
++CONFIG_CPU_CP15=y
++CONFIG_CPU_CP15_MMU=y
++
++#
++# Processor Features
++#
++# CONFIG_ARM_THUMB is not set
++# CONFIG_CPU_ICACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
++# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
++# CONFIG_OUTER_CACHE is not set
++
++#
++# Bus support
++#
++# CONFIG_PCI_SYSCALL is not set
++# CONFIG_ARCH_SUPPORTS_MSI is not set
++# CONFIG_PCCARD is not set
++
++#
++# Kernel Features
++#
++# CONFIG_NO_HZ is not set
++# CONFIG_HIGH_RES_TIMERS is not set
++CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
++CONFIG_VMSPLIT_3G=y
++# CONFIG_VMSPLIT_2G is not set
++# CONFIG_VMSPLIT_1G is not set
++CONFIG_PAGE_OFFSET=0xC0000000
++# CONFIG_PREEMPT is not set
++CONFIG_HZ=100
++# CONFIG_AEABI is not set
++CONFIG_ARCH_FLATMEM_HAS_HOLES=y
++# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
++# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++CONFIG_PAGEFLAGS_EXTENDED=y
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_RESOURCES_64BIT is not set
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=0
++CONFIG_VIRT_TO_BUS=y
++CONFIG_UNEVICTABLE_LRU=y
++# CONFIG_LEDS is not set
++CONFIG_ALIGNMENT_TRAP=y
++
++#
++# Boot options
++#
++CONFIG_ZBOOT_ROM_TEXT=0x0
++CONFIG_ZBOOT_ROM_BSS=0x0
++CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/mtdblock5 rootfstype=jffs2 fbcon=rotate:3"
++# CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
++
++#
++# CPU Power Management
++#
++# CONFIG_CPU_IDLE is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++# CONFIG_VFP is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++CONFIG_HAVE_AOUT=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_ARTHUR is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++CONFIG_ARCH_SUSPEND_POSSIBLE=y
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++# CONFIG_NET_KEY is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++CONFIG_IP_PNP=y
++# CONFIG_IP_PNP_DHCP is not set
++CONFIG_IP_PNP_BOOTP=y
++CONFIG_IP_PNP_RARP=y
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_BEET is not set
++# CONFIG_INET_LRO is not set
++# CONFIG_INET_DIAG is not set
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++# CONFIG_IPV6 is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_NETFILTER is not set
++# CONFIG_IP_DCCP is not set
++# CONFIG_IP_SCTP is not set
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_NET_DSA is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++# CONFIG_PHONET is not set
++CONFIG_WIRELESS=y
++# CONFIG_CFG80211 is not set
++CONFIG_WIRELESS_OLD_REGULATORY=y
++# CONFIG_WIRELESS_EXT is not set
++# CONFIG_MAC80211 is not set
++# CONFIG_IEEE80211 is not set
++# CONFIG_RFKILL is not set
++# CONFIG_NET_9P is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=y
++CONFIG_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++# CONFIG_MTD_AR7_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# CONFIG_MTD_OOPS is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++CONFIG_MTD_CFI=y
++CONFIG_MTD_JEDECPROBE=y
++CONFIG_MTD_GEN_PROBE=y
++# CONFIG_MTD_CFI_ADV_OPTIONS is not set
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++CONFIG_MTD_MAP_BANK_WIDTH_2=y
++CONFIG_MTD_MAP_BANK_WIDTH_4=y
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++CONFIG_MTD_CFI_I2=y
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++CONFIG_MTD_CFI_INTELEXT=y
++CONFIG_MTD_CFI_AMDSTD=y
++CONFIG_MTD_CFI_STAA=y
++CONFIG_MTD_CFI_UTIL=y
++CONFIG_MTD_RAM=y
++CONFIG_MTD_ROM=y
++CONFIG_MTD_ABSENT=y
++
++#
++# Mapping drivers for chip access
++#
++CONFIG_MTD_COMPLEX_MAPPINGS=y
++CONFIG_MTD_PHYSMAP=y
++CONFIG_MTD_PHYSMAP_START=0x10000000
++CONFIG_MTD_PHYSMAP_LEN=0x400000
++CONFIG_MTD_PHYSMAP_BANKWIDTH=2
++# CONFIG_MTD_ARM_INTEGRATOR is not set
++# CONFIG_MTD_IMPA7 is not set
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++CONFIG_MTD_DATAFLASH=y
++# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
++# CONFIG_MTD_DATAFLASH_OTP is not set
++# CONFIG_MTD_M25P80 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++CONFIG_MTD_NAND=y
++CONFIG_MTD_NAND_VERIFY_WRITE=y
++# CONFIG_MTD_NAND_ECC_SMC is not set
++# CONFIG_MTD_NAND_MUSEUM_IDS is not set
++# CONFIG_MTD_NAND_GPIO is not set
++CONFIG_MTD_NAND_IDS=y
++# CONFIG_MTD_NAND_DISKONCHIP is not set
++CONFIG_MTD_NAND_ATMEL=y
++# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
++# CONFIG_MTD_NAND_ATMEL_ECC_HW_HSIAO is not set
++CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
++# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
++# CONFIG_MTD_NAND_NANDSIM is not set
++# CONFIG_MTD_NAND_PLATFORM is not set
++# CONFIG_MTD_ALAUDA is not set
++# CONFIG_MTD_ONENAND is not set
++
++#
++# UBI - Unsorted block images
++#
++# CONFIG_MTD_UBI is not set
++# CONFIG_PARPORT is not set
++CONFIG_BLK_DEV=y
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++# CONFIG_BLK_DEV_UB is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=8192
++# CONFIG_BLK_DEV_XIP is not set
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_MISC_DEVICES=y
++CONFIG_ATMEL_PWM=y
++# CONFIG_ATMEL_TCLIB is not set
++# CONFIG_EEPROM_93CX6 is not set
++CONFIG_ATMEL_SSC=y
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_C2PORT is not set
++CONFIG_HAVE_IDE=y
++CONFIG_IDE=y
++
++#
++# Please see Documentation/ide/ide.txt for help/info on IDE drives
++#
++# CONFIG_BLK_DEV_IDE_SATA is not set
++CONFIG_IDE_GD=y
++CONFIG_IDE_GD_ATA=y
++# CONFIG_IDE_GD_ATAPI is not set
++# CONFIG_BLK_DEV_IDECD is not set
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_BLK_DEV_IDESCSI is not set
++# CONFIG_IDE_TASK_IOCTL is not set
++CONFIG_IDE_PROC_FS=y
++
++#
++# IDE chipset support/bugfixes
++#
++# CONFIG_BLK_DEV_PLATFORM is not set
++# CONFIG_BLK_DEV_IDEDMA is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=y
++CONFIG_SCSI_DMA=y
++# CONFIG_SCSI_TGT is not set
++# CONFIG_SCSI_NETLINK is not set
++CONFIG_SCSI_PROC_FS=y
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++CONFIG_BLK_DEV_SR=y
++# CONFIG_BLK_DEV_SR_VENDOR is not set
++# CONFIG_CHR_DEV_SG is not set
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++CONFIG_SCSI_MULTI_LUN=y
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++# CONFIG_SCSI_SCAN_ASYNC is not set
++CONFIG_SCSI_WAIT_SCAN=m
++
++#
++# SCSI Transports
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
++# CONFIG_SCSI_SRP_ATTRS is not set
++CONFIG_SCSI_LOWLEVEL=y
++# CONFIG_ISCSI_TCP is not set
++# CONFIG_SCSI_DEBUG is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++CONFIG_NETDEVICES=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_VETH is not set
++CONFIG_PHYLIB=y
++
++#
++# MII PHY device drivers
++#
++# CONFIG_MARVELL_PHY is not set
++# CONFIG_DAVICOM_PHY is not set
++# CONFIG_QSEMI_PHY is not set
++# CONFIG_LXT_PHY is not set
++# CONFIG_CICADA_PHY is not set
++# CONFIG_VITESSE_PHY is not set
++# CONFIG_SMSC_PHY is not set
++# CONFIG_BROADCOM_PHY is not set
++# CONFIG_ICPLUS_PHY is not set
++# CONFIG_REALTEK_PHY is not set
++# CONFIG_FIXED_PHY is not set
++# CONFIG_MDIO_BITBANG is not set
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++CONFIG_MACB=y
++# CONFIG_MACB_TX_SRAM is not set
++# CONFIG_AX88796 is not set
++# CONFIG_SMC91X is not set
++# CONFIG_DM9000 is not set
++# CONFIG_ENC28J60 is not set
++# CONFIG_SMC911X is not set
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
++# CONFIG_B44 is not set
++# CONFIG_NETDEV_1000 is not set
++# CONFIG_NETDEV_10000 is not set
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 is not set
++# CONFIG_WLAN_80211 is not set
++# CONFIG_IWLWIFI_LEDS is not set
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++# CONFIG_INPUT_POLLDEV is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++CONFIG_INPUT_KEYBOARD=y
++# CONFIG_KEYBOARD_ATKBD is not set
++# CONFIG_KEYBOARD_SUNKBD is not set
++# CONFIG_KEYBOARD_LKKBD is not set
++# CONFIG_KEYBOARD_XTKBD is not set
++# CONFIG_KEYBOARD_NEWTON is not set
++# CONFIG_KEYBOARD_STOWAWAY is not set
++CONFIG_KEYBOARD_GPIO=y
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++CONFIG_INPUT_TOUCHSCREEN=y
++CONFIG_TOUCHSCREEN_ADS7846=y
++# CONFIG_TOUCHSCREEN_FUJITSU is not set
++# CONFIG_TOUCHSCREEN_GUNZE is not set
++# CONFIG_TOUCHSCREEN_ELO is not set
++# CONFIG_TOUCHSCREEN_MTOUCH is not set
++# CONFIG_TOUCHSCREEN_INEXIO is not set
++# CONFIG_TOUCHSCREEN_MK712 is not set
++# CONFIG_TOUCHSCREEN_PENMOUNT is not set
++# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
++# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
++# CONFIG_TOUCHSCREEN_WM97XX is not set
++# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
++# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++# CONFIG_SERIO is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_CONSOLE_TRANSLATIONS=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_DEVKMEM=y
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_ATMEL=y
++CONFIG_SERIAL_ATMEL_CONSOLE=y
++CONFIG_SERIAL_ATMEL_PDC=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=256
++# CONFIG_IPMI_HANDLER is not set
++CONFIG_HW_RANDOM=y
++# CONFIG_NVRAM is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++# CONFIG_I2C is not set
++CONFIG_SPI=y
++# CONFIG_SPI_DEBUG is not set
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_ATMEL=y
++# CONFIG_SPI_BITBANG is not set
++
++#
++# SPI Protocol Masters
++#
++# CONFIG_SPI_AT25 is not set
++# CONFIG_SPI_SPIDEV is not set
++# CONFIG_SPI_TLE62X0 is not set
++CONFIG_W1=y
++
++#
++# 1-wire Bus Masters
++#
++# CONFIG_W1_MASTER_DS2490 is not set
++# CONFIG_W1_MASTER_DS1WM is not set
++CONFIG_W1_MASTER_GPIO=y
++
++#
++# 1-wire Slaves
++#
++# CONFIG_W1_SLAVE_THERM is not set
++CONFIG_W1_SLAVE_SMEM=y
++# CONFIG_W1_SLAVE_DS2433 is not set
++# CONFIG_W1_SLAVE_DS2760 is not set
++# CONFIG_W1_SLAVE_BQ27000 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++CONFIG_WATCHDOG=y
++CONFIG_WATCHDOG_NOWAYOUT=y
++
++#
++# Watchdog Device Drivers
++#
++# CONFIG_SOFT_WATCHDOG is not set
++CONFIG_AT91SAM9X_WATCHDOG=y
++
++#
++# USB-based Watchdog Cards
++#
++# CONFIG_USBPCWATCHDOG is not set
++CONFIG_SSB_POSSIBLE=y
++
++#
++# Sonics Silicon Backplane
++#
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_CORE is not set
++# CONFIG_MFD_SM501 is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_MFD_T7L66XB is not set
++# CONFIG_MFD_TC6387XB is not set
++
++#
++# Multimedia devices
++#
++
++#
++# Multimedia core support
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
++# CONFIG_DAB is not set
++
++#
++# Graphics support
++#
++# CONFIG_VGASTATE is not set
++# CONFIG_VIDEO_OUTPUT_CONTROL is not set
++CONFIG_FB=y
++# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_FB_DDC is not set
++# CONFIG_FB_BOOT_VESA_SUPPORT is not set
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
++# CONFIG_FB_SYS_FILLRECT is not set
++# CONFIG_FB_SYS_COPYAREA is not set
++# CONFIG_FB_SYS_IMAGEBLIT is not set
++# CONFIG_FB_FOREIGN_ENDIAN is not set
++# CONFIG_FB_SYS_FOPS is not set
++# CONFIG_FB_SVGALIB is not set
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_BACKLIGHT is not set
++# CONFIG_FB_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++
++#
++# Frame buffer hardware drivers
++#
++# CONFIG_FB_S1D15605 is not set
++# CONFIG_FB_S1D13XXX is not set
++CONFIG_FB_ATMEL=y
++# CONFIG_FB_VIRTUAL is not set
++# CONFIG_FB_METRONOME is not set
++# CONFIG_FB_MB862XX is not set
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Display device support
++#
++# CONFIG_DISPLAY_SUPPORT is not set
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
++CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
++# CONFIG_FONTS is not set
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++CONFIG_LOGO=y
++CONFIG_LOGO_LINUX_MONO=y
++CONFIG_LOGO_LINUX_VGA16=y
++CONFIG_LOGO_LINUX_CLUT224=y
++CONFIG_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++CONFIG_SND=y
++CONFIG_SND_TIMER=y
++CONFIG_SND_PCM=y
++# CONFIG_SND_SEQUENCER is not set
++CONFIG_SND_OSSEMUL=y
++CONFIG_SND_MIXER_OSS=y
++CONFIG_SND_PCM_OSS=y
++CONFIG_SND_PCM_OSS_PLUGINS=y
++# CONFIG_SND_DYNAMIC_MINORS is not set
++CONFIG_SND_SUPPORT_OLD_API=y
++CONFIG_SND_VERBOSE_PROCFS=y
++# CONFIG_SND_VERBOSE_PRINTK is not set
++# CONFIG_SND_DEBUG is not set
++CONFIG_SND_VMASTER=y
++CONFIG_SND_AC97_CODEC=y
++CONFIG_SND_DRIVERS=y
++# CONFIG_SND_DUMMY is not set
++# CONFIG_SND_MTPAV is not set
++# CONFIG_SND_SERIAL_U16550 is not set
++# CONFIG_SND_MPU401 is not set
++# CONFIG_SND_AC97_POWER_SAVE is not set
++CONFIG_SND_ARM=y
++CONFIG_SND_AT91_AC97=y
++CONFIG_SND_SPI=y
++# CONFIG_SND_AT73C213 is not set
++CONFIG_SND_USB=y
++# CONFIG_SND_USB_AUDIO is not set
++# CONFIG_SND_USB_CAIAQ is not set
++# CONFIG_SND_SOC is not set
++# CONFIG_SOUND_PRIME is not set
++CONFIG_AC97_BUS=y
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++# CONFIG_HIDRAW is not set
++
++#
++# USB Input Devices
++#
++CONFIG_USB_HID=y
++# CONFIG_HID_PID is not set
++# CONFIG_USB_HIDDEV is not set
++
++#
++# Special HID drivers
++#
++CONFIG_HID_COMPAT=y
++CONFIG_HID_A4TECH=y
++CONFIG_HID_APPLE=y
++CONFIG_HID_BELKIN=y
++CONFIG_HID_BRIGHT=y
++CONFIG_HID_CHERRY=y
++CONFIG_HID_CHICONY=y
++CONFIG_HID_CYPRESS=y
++CONFIG_HID_DELL=y
++CONFIG_HID_EZKEY=y
++CONFIG_HID_GYRATION=y
++CONFIG_HID_LOGITECH=y
++# CONFIG_LOGITECH_FF is not set
++# CONFIG_LOGIRUMBLEPAD2_FF is not set
++CONFIG_HID_MICROSOFT=y
++CONFIG_HID_MONTEREY=y
++CONFIG_HID_PANTHERLORD=y
++# CONFIG_PANTHERLORD_FF is not set
++CONFIG_HID_PETALYNX=y
++CONFIG_HID_SAMSUNG=y
++CONFIG_HID_SONY=y
++CONFIG_HID_SUNPLUS=y
++# CONFIG_THRUSTMASTER_FF is not set
++# CONFIG_ZEROPLUS_FF is not set
++CONFIG_USB_SUPPORT=y
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++# CONFIG_USB_ARCH_HAS_EHCI is not set
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++CONFIG_USB_DEVICE_CLASS=y
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_OTG is not set
++CONFIG_USB_MON=y
++# CONFIG_USB_WUSB is not set
++# CONFIG_USB_WUSB_CBAF is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_C67X00_HCD is not set
++# CONFIG_USB_ISP116X_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_SL811_HCD is not set
++# CONFIG_USB_R8A66597_HCD is not set
++# CONFIG_USB_HWA_HCD is not set
++# CONFIG_USB_MUSB_HDRC is not set
++# CONFIG_USB_GADGET_MUSB_HDRC is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++# CONFIG_USB_WDM is not set
++# CONFIG_USB_TMC is not set
++
++#
++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
++#
++
++#
++# see USB_STORAGE Help for more information
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_ONETOUCH is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
++CONFIG_USB_LIBUSUAL=y
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB port drivers
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_SEVSEG is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_BERRY_CHARGE is not set
++# CONFIG_USB_LED is not set
++# CONFIG_USB_CYPRESS_CY7C63 is not set
++# CONFIG_USB_CYTHERM is not set
++# CONFIG_USB_PHIDGET is not set
++# CONFIG_USB_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
++# CONFIG_USB_TEST is not set
++# CONFIG_USB_ISIGHTFW is not set
++# CONFIG_USB_VST is not set
++CONFIG_USB_GADGET=y
++# CONFIG_USB_GADGET_DEBUG is not set
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_VBUS_DRAW=2
++CONFIG_USB_GADGET_SELECTED=y
++CONFIG_USB_GADGET_AT91=y
++CONFIG_USB_AT91=y
++# CONFIG_USB_GADGET_ATMEL_USBA is not set
++# CONFIG_USB_GADGET_FSL_USB2 is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++# CONFIG_USB_GADGET_PXA25X is not set
++# CONFIG_USB_GADGET_PXA27X is not set
++# CONFIG_USB_GADGET_S3C2410 is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_QE is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_GOKU is not set
++# CONFIG_USB_GADGET_DUMMY_HCD is not set
++# CONFIG_USB_GADGET_DUALSPEED is not set
++CONFIG_USB_ZERO=m
++CONFIG_USB_ETH=m
++CONFIG_USB_ETH_RNDIS=y
++CONFIG_USB_GADGETFS=m
++CONFIG_USB_FILE_STORAGE=m
++# CONFIG_USB_FILE_STORAGE_TEST is not set
++CONFIG_USB_G_SERIAL=m
++# CONFIG_USB_MIDI_GADGET is not set
++# CONFIG_USB_G_PRINTER is not set
++CONFIG_USB_CDC_COMPOSITE=m
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++# CONFIG_MMC_UNSAFE_RESUME is not set
++
++#
++# MMC/SD/SDIO Card Drivers
++#
++CONFIG_MMC_BLOCK=y
++CONFIG_MMC_BLOCK_BOUNCE=y
++# CONFIG_SDIO_UART is not set
++# CONFIG_MMC_TEST is not set
++
++#
++# MMC/SD/SDIO Host Controller Drivers
++#
++# CONFIG_MMC_SDHCI is not set
++CONFIG_MMC_AT91=y
++# CONFIG_MMC_SPI is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_ACCESSIBILITY is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++CONFIG_LEDS_ATMEL_PWM=y
++CONFIG_LEDS_GPIO=y
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++CONFIG_LEDS_TRIGGER_IDE_DISK=y
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++CONFIG_LEDS_TRIGGER_BACKLIGHT=y
++CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
++CONFIG_RTC_LIB=y
++CONFIG_RTC_CLASS=y
++CONFIG_RTC_HCTOSYS=y
++CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
++# CONFIG_RTC_DEBUG is not set
++
++#
++# RTC interfaces
++#
++CONFIG_RTC_INTF_SYSFS=y
++CONFIG_RTC_INTF_PROC=y
++CONFIG_RTC_INTF_DEV=y
++# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
++# CONFIG_RTC_DRV_TEST is not set
++
++#
++# SPI RTC drivers
++#
++# CONFIG_RTC_DRV_M41T94 is not set
++# CONFIG_RTC_DRV_DS1305 is not set
++# CONFIG_RTC_DRV_DS1390 is not set
++# CONFIG_RTC_DRV_MAX6902 is not set
++# CONFIG_RTC_DRV_R9701 is not set
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_DS3234 is not set
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
++# CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
++# CONFIG_RTC_DRV_V3020 is not set
++
++#
++# on-CPU RTC drivers
++#
++CONFIG_RTC_DRV_AT91SAM9=y
++CONFIG_RTC_DRV_AT91SAM9_RTT=0
++CONFIG_RTC_DRV_AT91SAM9_GPBR=0
++# CONFIG_DMADEVICES is not set
++# CONFIG_REGULATOR is not set
++# CONFIG_UIO is not set
++
++#
++# File systems
++#
++# CONFIG_EXT2_FS is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_EXT4_FS is not set
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++CONFIG_FILE_LOCKING=y
++# CONFIG_XFS_FS is not set
++# CONFIG_OCFS2_FS is not set
++CONFIG_DNOTIFY=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++# CONFIG_MSDOS_FS is not set
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
++CONFIG_PROC_PAGE_MONITOR=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
++# CONFIG_JFFS2_SUMMARY is not set
++# CONFIG_JFFS2_FS_XATTR is not set
++# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
++CONFIG_JFFS2_ZLIB=y
++# CONFIG_JFFS2_LZO is not set
++CONFIG_JFFS2_RTIME=y
++# CONFIG_JFFS2_RUBIN is not set
++CONFIG_CRAMFS=y
++# CONFIG_VXFS_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++CONFIG_NETWORK_FILESYSTEMS=y
++CONFIG_NFS_FS=y
++# CONFIG_NFS_V3 is not set
++# CONFIG_NFS_V4 is not set
++CONFIG_ROOT_NFS=y
++# CONFIG_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_SUNRPC_REGISTER_V4 is not set
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++CONFIG_NLS_CODEPAGE_850=y
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
++# CONFIG_DLM is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
++CONFIG_DEBUG_KERNEL=y
++# CONFIG_DEBUG_SHIRQ is not set
++CONFIG_DETECT_SOFTLOCKUP=y
++# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
++CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
++CONFIG_SCHED_DEBUG=y
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_TIMER_STATS is not set
++# CONFIG_DEBUG_OBJECTS is not set
++# CONFIG_DEBUG_SLAB is not set
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_LOCK_ALLOC is not set
++# CONFIG_PROVE_LOCKING is not set
++# CONFIG_LOCK_STAT is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++# CONFIG_DEBUG_KOBJECT is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_DEBUG_VM is not set
++# CONFIG_DEBUG_WRITECOUNT is not set
++CONFIG_DEBUG_MEMORY_INIT=y
++# CONFIG_DEBUG_LIST is not set
++# CONFIG_DEBUG_SG is not set
++CONFIG_FRAME_POINTER=y
++# CONFIG_BOOT_PRINTK_DELAY is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_BACKTRACE_SELF_TEST is not set
++# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
++# CONFIG_FAULT_INJECTION is not set
++# CONFIG_LATENCYTOP is not set
++# CONFIG_SYSCTL_SYSCALL_CHECK is not set
++CONFIG_HAVE_FUNCTION_TRACER=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_STACK_TRACER is not set
++# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
++# CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++# CONFIG_KGDB is not set
++CONFIG_DEBUG_USER=y
++# CONFIG_DEBUG_ERRORS is not set
++# CONFIG_DEBUG_STACK_USAGE is not set
++CONFIG_DEBUG_LL=y
++# CONFIG_DEBUG_ICEDCC is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITYFS is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++# CONFIG_CRYPTO is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++# CONFIG_CRC_T10DIF is not set
++# CONFIG_CRC_ITU_T is not set
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++# CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
+diff -Nur linux-2.6.28.10-at91/arch/arm/mach-at91/board-mh355.c linux-2.6.28.10-at91-mh/arch/arm/mach-at91/board-mh355.c
+--- linux-2.6.28.10-at91/arch/arm/mach-at91/board-mh355.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.28.10-at91-mh/arch/arm/mach-at91/board-mh355.c 2010-03-20 20:40:35.000000000 +0100
+@@ -0,0 +1,692 @@
++/*
++ * linux/arch/arm/mach-at91/board-mh355.c
++ *
++ * Copyright (C) 2009 Microhard
++ *
++ * 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
++ */
++
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/spi/spi.h>
++#include <linux/spi/ads7846.h>
++#include <linux/i2c/at24.h>
++#include <linux/fb.h>
++#include <linux/gpio_keys.h>
++#include <linux/input.h>
++#include <linux/leds.h>
++#include <linux/w1-gpio.h>
++
++#include <video/atmel_lcdc.h>
++
++#include <asm/setup.h>
++#include <asm/mach-types.h>
++#include <asm/irq.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <mach/hardware.h>
++#include <mach/board.h>
++#include <mach/gpio.h>
++#include <mach/at91sam9_smc.h>
++#include <mach/at91_shdwc.h>
++#include <mach/at91sam9263_matrix.h>
++
++#include "sam9_smc.h"
++#include "generic.h"
++
++
++static void __init mh355_map_io(void)
++{
++ /* Initialize processor: 18.432 MHz crystal */
++ at91sam9263_initialize(18432000);
++
++ /* DGBU on ttyS0. (Rx & Tx only) */
++ at91_register_uart(0, 0, 0);
++
++ /* USART0 on ttyS1. (Rx, Tx, RTS, CTS) */
++ at91_register_uart(AT91SAM9263_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS);
++
++ /* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */
++ at91_register_uart(AT91SAM9263_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);
++
++ /* USART2 on ttyS3. (Rx, Tx, RTS, CTS) */
++ at91_register_uart(AT91SAM9263_ID_US2, 3, ATMEL_UART_CTS | ATMEL_UART_RTS);
++
++
++ /* set serial console to ttyS0 (ie, DBGU) */
++ at91_set_serial_console(0);
++}
++
++static void __init mh355_init_irq(void)
++{
++ at91sam9263_init_interrupts(NULL);
++}
++
++
++/*
++ * USB Host port
++ */
++static struct at91_usbh_data __initdata mh355_usbh_data = {
++ .ports = 2,
++ .vbus_pin = { 0, 0 },
++};
++
++/*
++ * USB Device port
++k
++*/
++static struct at91_udc_data __initdata mh355_udc_data = {
++ .vbus_pin = AT91_PIN_PA25,
++ .pullup_pin = 0, /* pull-up driven by UDC */
++};
++
++
++/*
++ * ADS7846 Touchscreen
++ */
++#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
++static int ads7843_pendown_state(void)
++{
++ return !at91_get_gpio_value(AT91_PIN_PA15); /* Touchscreen PENIRQ */
++}
++
++static struct ads7846_platform_data ads_info = {
++ .model = 7843,
++ .x_min = 150,
++ .x_max = 3830,
++ .y_min = 190,
++ .y_max = 3830,
++ .vref_delay_usecs = 100,
++ .x_plate_ohms = 450,
++ .y_plate_ohms = 250,
++ .pressure_max = 15000,
++ .debounce_max = 1,
++ .debounce_rep = 0,
++ .debounce_tol = (~0),
++ .get_pendown_state = ads7843_pendown_state,
++};
++
++static void __init mh355_add_device_ts(void)
++{
++ at91_set_B_periph(AT91_PIN_PA15, 1); /* External IRQ1, with pullup */
++ at91_set_gpio_input(AT91_PIN_PA31, 1); /* Touchscreen BUSY signal */
++}
++#else
++static void __init mh355_add_device_ts(void) {}
++#endif
++
++/*
++ * SPI devices.
++ */
++static struct spi_board_info mh355_spi_devices[] = {
++#if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
++ { /* DataFlash card */
++ .modalias = "mtd_dataflash",
++ .chip_select = 0,
++ .max_speed_hz = 15 * 1000 * 1000,
++ .bus_num = 0,
++ },
++#endif
++#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
++ {
++ .modalias = "ads7846",
++ .chip_select = 0,
++ .max_speed_hz = 125000 * 16, /* max sample rate * clocks per sample */
++ .bus_num = 1,
++ .platform_data = &ads_info,
++ .irq = AT91SAM9263_ID_IRQ1,
++ },
++#endif
++};
++
++
++/*
++ * MCI (SD/MMC)
++ */
++static struct at91_mmc_data __initdata mh355_mmc_data = {
++ .wire4 = 1,
++ .det_pin = AT91_PIN_PA21,
++ .wp_pin = AT91_PIN_PA16,
++// .vcc_pin = ... not connected
++};
++
++
++/*
++ * MACB Ethernet device
++ */
++static struct at91_eth_data __initdata mh355_macb_data = {
++ .phy_irq_pin = AT91_PIN_PE31,
++ .is_rmii = 1,
++};
++
++
++/*
++ * NAND flash
++ */
++static struct mtd_partition __initdata mh355_nand_partition[] = {
++ {
++ .name = "Bootstrap",
++ .offset = 0,
++ .size = 0x20000,
++ },
++
++ {
++ .name = "U-Boot",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = 0x40000,
++ },
++
++ {
++ .name = "U-Boot-env",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = 0x40000,
++ },
++ {
++ .name = "Kernel",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = 0x360000,
++ },
++
++// {
++// .name = "Splash",
++// .offset = MTDPART_OFS_NXTBLK,
++// .size = 0x160000,
++// },
++
++ {
++ .name = "Root-FS",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = MTDPART_SIZ_FULL,
++ }
++};
++
++static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
++{
++ *num_partitions = ARRAY_SIZE(mh355_nand_partition);
++ return mh355_nand_partition;
++}
++
++static struct atmel_nand_data __initdata mh355_nand_data = {
++ .ale = 21,
++ .cle = 22,
++// .det_pin = ... not connected
++
++ /*
++ ** Modificato RDY da PB30 in PA22 per renderlo compatibile con sistemi ATMEL.
++ */
++// .rdy_pin = AT91_PIN_PB30,
++ .rdy_pin = AT91_PIN_PA22,
++ .enable_pin = AT91_PIN_PD15,
++ .partition_info = nand_partitions,
++#if defined(CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16)
++ .bus_width_16 = 1,
++#else
++ .bus_width_16 = 0,
++#endif
++};
++
++static struct sam9_smc_config __initdata mh355_nand_smc_config = {
++ .ncs_read_setup = 0,
++ .nrd_setup = 1,
++ .ncs_write_setup = 0,
++ .nwe_setup = 1,
++
++ .ncs_read_pulse = 3,
++ .nrd_pulse = 3,
++ .ncs_write_pulse = 3,
++ .nwe_pulse = 3,
++
++ .read_cycle = 5,
++ .write_cycle = 5,
++
++ .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE,
++ .tdf_cycles = 2,
++};
++
++static void __init mh355_add_device_nand(void)
++{
++ /* setup bus-width (8 or 16) */
++ if (mh355_nand_data.bus_width_16)
++ mh355_nand_smc_config.mode |= AT91_SMC_DBW_16;
++ else
++ mh355_nand_smc_config.mode |= AT91_SMC_DBW_8;
++
++ /* configure chip-select 3 (NAND) */
++ sam9_smc_configure(3, &mh355_nand_smc_config);
++
++ at91_add_device_nand(&mh355_nand_data);
++}
++
++
++/*
++ * LCD Controller
++ */
++#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
++
++#define AT91SAM9263_DEFAULT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
++ | ATMEL_LCDC_DISTYPE_TFT \
++ | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
++
++
++static void at91_lcdc_power_control(int on)
++{
++ /*
++ ** Commentato per non interagire con il PA22 utilizzato dalla NAND flash. Da rimettere in un posto giusto.
++ */
++// at91_set_gpio_value(AT91_PIN_PA22, on);
++}
++
++static u64 lcdc_dmamask = 0xffffffffUL;
++static struct atmel_lcdfb_info lcdc_data;
++
++static struct resource lcdc_resources[] = {
++ [0] = {
++ .start = AT91SAM9263_LCDC_BASE,
++ .end = AT91SAM9263_LCDC_BASE + SZ_4K - 1,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = AT91_CHIPSELECT_6,
++ .end = AT91_CHIPSELECT_6 + SZ_4M - 1,
++ .flags = IORESOURCE_MEM,
++ },
++ [2] = {
++ .start = AT91SAM9263_ID_LCDC,
++ .end = AT91SAM9263_ID_LCDC,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct platform_device at91_lcdc_device = {
++ .name = "atmel_lcdfb",
++ .id = 0,
++ .dev = {
++ .dma_mask = &lcdc_dmamask,
++ .coherent_dma_mask = 0xffffffffUL,
++ .platform_data = &lcdc_data,
++ },
++ .resource = lcdc_resources,
++ .num_resources = ARRAY_SIZE(lcdc_resources),
++};
++
++static void __init mh355_add_device_lcdc(struct atmel_lcdfb_info *data)
++{
++ if (!data)
++ return;
++
++ at91_set_A_periph(AT91_PIN_PC0, 0); /* LCDVSYNC */
++ at91_set_A_periph(AT91_PIN_PC1, 0); /* LCDHSYNC */
++ at91_set_A_periph(AT91_PIN_PC2, 0); /* LCDDOTCK */
++ at91_set_A_periph(AT91_PIN_PC3, 0); /* LCDDEN */
++ at91_set_B_periph(AT91_PIN_PB9, 0); /* LCDCC */
++ at91_set_A_periph(AT91_PIN_PC6, 0); /* LCDD2 */
++ at91_set_A_periph(AT91_PIN_PC7, 0); /* LCDD3 */
++ at91_set_A_periph(AT91_PIN_PC8, 0); /* LCDD4 */
++ at91_set_A_periph(AT91_PIN_PC9, 0); /* LCDD5 */
++ at91_set_A_periph(AT91_PIN_PC10, 0); /* LCDD6 */
++ at91_set_A_periph(AT91_PIN_PC11, 0); /* LCDD7 */
++ at91_set_A_periph(AT91_PIN_PC14, 0); /* LCDD10 */
++ at91_set_A_periph(AT91_PIN_PC15, 0); /* LCDD11 */
++ at91_set_A_periph(AT91_PIN_PC16, 0); /* LCDD12 */
++ at91_set_B_periph(AT91_PIN_PC12, 0); /* LCDD13 */
++ at91_set_A_periph(AT91_PIN_PC18, 0); /* LCDD14 */
++ at91_set_A_periph(AT91_PIN_PC19, 0); /* LCDD15 */
++ at91_set_A_periph(AT91_PIN_PC22, 0); /* LCDD18 */
++ at91_set_A_periph(AT91_PIN_PC23, 0); /* LCDD19 */
++ at91_set_A_periph(AT91_PIN_PC24, 0); /* LCDD20 */
++ at91_set_B_periph(AT91_PIN_PC17, 0); /* LCDD21 */
++ at91_set_A_periph(AT91_PIN_PC26, 0); /* LCDD22 */
++ at91_set_A_periph(AT91_PIN_PC27, 0); /* LCDD23 */
++
++ lcdc_data = *data;
++ platform_device_register(&at91_lcdc_device);
++}
++
++
++#if defined(CONFIG_MH355_LCD_TX09D70)
++/* Hitachi TX09D70VM1CCA - 3.5", 320x240 */
++static struct fb_videomode at91_tft_vga_modes[] = {
++ {
++ .name = "TX09D50VM1CCA @ 60",
++ .refresh = 60,
++ .xres = 240,
++ .yres = 320,
++ .pixclock = KHZ2PICOS(4965),
++ .left_margin = 1,
++ .right_margin = 33,
++ .upper_margin = 1,
++ .lower_margin = 0,
++ .hsync_len = 5,
++ .vsync_len = 1,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++ .vmode = FB_VMODE_NONINTERLACED,
++ },
++};
++
++static struct fb_monspecs at91fb_default_monspecs = {
++ .manufacturer = "HIT",
++ .monitor = "TX09D70VM1CCA",
++ .modedb = at91_tft_vga_modes,
++ .modedb_len = ARRAY_SIZE(at91_tft_vga_modes),
++ .hfmin = 15000,
++ .hfmax = 64000,
++ .vfmin = 50,
++ .vfmax = 150,
++};
++
++/* Driver datas */
++static struct atmel_lcdfb_info __initdata mh355_lcdc_data = {
++ .lcdcon_is_backlight = true,
++ .default_bpp = 16,
++ .default_dmacon = ATMEL_LCDC_DMAEN,
++ .default_lcdcon2 = AT91SAM9263_DEFAULT_LCDCON2,
++ .default_monspecs = &at91fb_default_monspecs,
++ .atmel_lcdfb_power_control = at91_lcdc_power_control,
++ .guard_time = 1,
++};
++
++#elif defined(CONFIG_MH355_LCD_FG0700K2DSSWBG01)
++/* DataImage FG0700K2 - 7.0", 800x480, 350cd */
++static struct fb_videomode __initdata tft_modes[] = {
++ {
++ .name = "DataImage 800x480 @ 60",
++ .refresh = 60,
++ .xres = 800,
++ .yres = 480,
++ .pixclock = KHZ2PICOS(15000),
++
++ .left_margin = 256,
++ .right_margin = 0,
++ .upper_margin = 45,
++ .lower_margin = 0,
++
++ .hsync_len = 5,
++ .vsync_len = 1,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++ .vmode = FB_VMODE_NONINTERLACED,
++ },
++};
++
++static struct fb_monspecs __initdata tft_default_monspecs = {
++ .manufacturer = "DataImage",
++ .monitor = "FG0700K2",
++ .modedb = tft_modes,
++ .modedb_len = ARRAY_SIZE(tft_modes),
++ .hfmin = 10000,
++ .hfmax = 35000,
++ .vfmin = 40,
++ .vfmax = 90,
++ .dclkmax = 35000000,
++};
++
++static struct atmel_lcdfb_info __initdata mh355_lcdc_data = {
++ .default_bpp = 16,
++ .default_dmacon = ATMEL_LCDC_DMAEN,
++ .default_lcdcon2 = AT91SAM9263_DEFAULT_LCDCON2,
++ .default_monspecs = &tft_default_monspecs,
++ .guard_time = 2,
++ .lcd_wiring_mode = ATMEL_LCDC_WIRING_RGB,
++};
++
++#else
++#error "Undefined LCD display!"
++#endif
++
++#else
++static struct atmel_lcdfb_info __initdata mh355_lcdc_data;
++#endif
++
++
++/*
++ * GPIO Buttons
++ */
++#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
++static struct gpio_keys_button mh355_buttons[] = {
++ { /* SW3 */
++ .code = BTN_LEFT,
++ .gpio = AT91_PIN_PC5,
++ .active_low = 1,
++ .desc = "SW3",
++ .wakeup = 1,
++ },
++ { /* SW4 */
++ .code = BTN_RIGHT,
++ .gpio = AT91_PIN_PC4,
++ .active_low = 1,
++ .desc = "SW4",
++ .wakeup = 1,
++ }
++};
++
++static struct gpio_keys_platform_data mh355_button_data = {
++ .buttons = mh355_buttons,
++ .nbuttons = ARRAY_SIZE(mh355_buttons),
++};
++
++static struct platform_device mh355_button_device = {
++ .name = "gpio-keys",
++ .id = -1,
++ .num_resources = 0,
++ .dev = {
++ .platform_data = &mh355_button_data,
++ }
++};
++
++static void __init mh355_add_device_buttons(void)
++{
++ int i;
++
++ for (i = 0; i < mh355_button_data.nbuttons; i ++) {
++ at91_set_gpio_input(mh355_buttons[i].gpio, 1);
++ at91_set_deglitch(mh355_buttons[i].gpio, 1);
++ }
++
++// platform_device_register(&mh355_button_device);
++}
++#else
++static void __init mh355_add_device_buttons(void) {}
++#endif
++
++
++/*
++ * AC97
++ */
++static struct atmel_ac97_data mh355_ac97_data = {
++ .reset_pin = 0,
++};
++
++
++/*
++ * LEDs ... these could all be PWM-driven, for variable brightness
++ */
++static struct gpio_led mh355_leds[] = {
++ { /* "right" led, green, userled2 (could be driven by pwm2) */
++ .name = "led0",
++ .gpio = AT91_PIN_PB7,
++ .active_low = 1,
++ .default_trigger = "nand-disk",
++ },
++ { /* "power" led, yellow (could be driven by pwm0) */
++ .name = "led1",
++ .gpio = AT91_PIN_PB8,
++ .active_low = 1,
++ .default_trigger = "heartbeat",
++ }
++};
++
++#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)
++struct w1_gpio_platform_data pm926x_w1_platdata = {
++ .pin = AT91_PIN_PB31,
++ .is_open_drain = 0,
++};
++
++static struct platform_device pm926x_w1_device = {
++ .name = "w1-gpio",
++ .id = 0,
++ .dev = {
++ .platform_data = &pm926x_w1_platdata,
++ },
++};
++#endif
++
++#if defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE)
++static struct at91_cf_data mh355_cf_data = {
++ .det_pin = AT91_PIN_PA30,
++ .rst_pin = AT91_PIN_PA23,
++ .irq_pin = AT91_PIN_PA24,
++ // .vcc_pin = ... always powered
++ .chipselect = 4,
++};
++
++static struct resource mh355_cf_resources[] = {
++ [0] = {
++ .start = AT91_CHIPSELECT_4,
++ .end = AT91_CHIPSELECT_4 + (0x10000000 - 1),
++ .flags = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT,
++ },
++};
++
++static struct platform_device mh355_cf_device = {
++ .name = "at91_cf",
++ .id = -1,
++ .dev = {
++ .platform_data = &mh355_cf_data,
++ },
++ .resource = mh355_cf_resources,
++ .num_resources = ARRAY_SIZE(mh355_cf_resources),
++};
++
++#define CF_NWE_SETUP (9 << 0)
++#define CF_NCS_WR_SETUP (2 << 8)
++#define CF_NRD_SETUP (9 << 16)
++#define CF_NCS_RD_SETUP (2 << 24)
++
++#define CF_NWE_PULSE (17 << 0)
++#define CF_NCS_WR_PULSE (27 << 8)
++#define CF_NRD_PULSE (17 << 16)
++#define CF_NCS_RD_PULSE (27 << 24)
++
++#define CF_NWE_CYCLE (40 << 0)
++#define CF_NRD_CYCLE (40 << 16)
++
++#define CF_TDF (1 << 16)
++
++static void __init mh355_add_device_cf(void) {
++struct at91_cf_data *data = & mh355_cf_data;
++unsigned int csa;
++
++ // Setup Compact flash, first enable the address range of
++ // CS4 in HMATRIX user interface
++ csa = at91_sys_read(AT91_MATRIX_EBI0CSA);
++ at91_sys_write(AT91_MATRIX_EBI0CSA, csa | AT91_MATRIX_EBI0_CS4A_SMC_CF1);
++
++ /* Configure SMC CS4 */
++ at91_sys_write(AT91_SMC_SETUP(4),
++ (CF_NWE_SETUP |
++ CF_NCS_WR_SETUP |
++ CF_NRD_SETUP |
++ CF_NCS_RD_SETUP));
++
++ at91_sys_write(AT91_SMC_PULSE(4), (CF_NWE_PULSE |
++ CF_NCS_WR_PULSE |
++ CF_NRD_PULSE |
++ CF_NCS_RD_PULSE));
++ at91_sys_write(AT91_SMC_CYCLE(4), (CF_NWE_CYCLE | CF_NRD_CYCLE));
++ // 16 bit
++ at91_sys_write (AT91_SMC_MODE(4), (AT91_SMC_READMODE |
++ AT91_SMC_WRITEMODE |
++ AT91_SMC_EXNWMODE_DISABLE |
++ AT91_SMC_DBW_16 |
++ CF_TDF));
++
++ /* input/irq */
++ if (data->irq_pin) {
++ at91_set_gpio_input(data->irq_pin, 0);
++ at91_set_deglitch(data->irq_pin, 1);
++ }
++ at91_set_gpio_input(data->det_pin, 0);
++ at91_set_deglitch(data->det_pin, 1);
++
++ /* outputs, initially off */
++ if (data->vcc_pin)
++ at91_set_gpio_output(data->vcc_pin, 0);
++ if (data->rst_pin)
++ at91_set_gpio_output(data->rst_pin, 0);
++
++ /* force poweron defaults for these pins ... */
++ at91_set_A_periph(AT91_PIN_PD5, 0); /* PD5/CF_NWAIT */
++ at91_set_A_periph(AT91_PIN_PD14, 0); /* A25/CFRNW */
++ at91_set_A_periph(AT91_PIN_PD6, 0); /* NCS4/CFCS0 */
++ at91_set_A_periph(AT91_PIN_PD8, 0); /* PD8/CFCE1 */
++ at91_set_A_periph(AT91_PIN_PD9, 0); /* PD9/CFCE2 */
++
++ platform_device_register(&mh355_cf_device);
++}
++#else
++void __init mh355_add_device_cf(void) {}
++#endif
++
++static void __init mh355_board_init(void)
++{
++ /* Serial */
++ at91_add_device_serial();
++ /* USB Host */
++ at91_add_device_usbh(&mh355_usbh_data);
++ /* USB Device */
++ at91_add_device_udc(&mh355_udc_data);
++ /* SPI */
++ at91_add_device_spi(mh355_spi_devices, ARRAY_SIZE(mh355_spi_devices));
++ /* Touchscreen */
++ mh355_add_device_ts();
++ /* MMC */
++ at91_add_device_mmc(1, &mh355_mmc_data);
++ /* Ethernet */
++ at91_add_device_eth(&mh355_macb_data);
++ /* NAND */
++ mh355_add_device_nand();
++ /* LCD Controller */
++ mh355_add_device_lcdc(&mh355_lcdc_data);
++ /* Push Buttons */
++ mh355_add_device_buttons();
++ /* AC97 */
++ at91_add_device_ac97(&mh355_ac97_data);
++#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)
++ platform_device_register(&pm926x_w1_device);
++#endif
++ /* Compact flash */
++ mh355_add_device_cf();
++ /* LEDs */
++ at91_gpio_leds(mh355_leds, ARRAY_SIZE(mh355_leds));
++ /* shutdown controller, wakeup button (5 msec low) */
++ at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10) | AT91_SHDW_WKMODE0_LOW
++ | AT91_SHDW_RTTWKEN);
++}
++
++MACHINE_START(MH355, "Microhard mh355")
++ /* Maintainer: Atmel */
++ .phys_io = AT91_BASE_SYS,
++ .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
++ .boot_params = AT91_SDRAM_BASE + 0x100,
++ .timer = &at91sam926x_timer,
++ .map_io = mh355_map_io,
++ .init_irq = mh355_init_irq,
++ .init_machine = mh355_board_init,
++MACHINE_END
+diff -Nur linux-2.6.28.10-at91/arch/arm/mach-at91/Kconfig linux-2.6.28.10-at91-mh/arch/arm/mach-at91/Kconfig
+--- linux-2.6.28.10-at91/arch/arm/mach-at91/Kconfig 2010-03-20 20:20:31.000000000 +0100
++++ linux-2.6.28.10-at91-mh/arch/arm/mach-at91/Kconfig 2010-03-20 22:18:02.000000000 +0100
+@@ -280,6 +280,28 @@
+ help
+ Select this if you are using the Adeneo Neocore 926 board.
+
++config MACH_MH355
++ bool "Microhard MH355 Board"
++ depends on ARCH_AT91SAM9263
++ help
++ Select this if you are using Microhard MH355 board.
++ <http://www.microhard.biz>
++
++choice
++ prompt "LCD Display"
++
++config MH355_LCD_TX09D70
++ bool "3.5\", 320x240 Hitachi TX09D70"
++ depends on MACH_MH355
++
++config MH355_LCD_FG0700K2DSSWBG01
++ bool "7.0\", 800x480 DataImage FG0700K2"
++ depends on MACH_MH355
++
++
++endchoice
++
++
+ endif
+
+ # ----------------------------------------------------------
+@@ -347,13 +369,13 @@
+
+ config MTD_AT91_DATAFLASH_CARD
+ bool "Enable DataFlash Card support"
+- depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_TOTEMNOVA || MACH_NEOCORE926)
++ depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_TOTEMNOVA || MACH_NEOCORE926 || MACH_MH355)
+ help
+ Enable support for the DataFlash card.
+
+ config MTD_NAND_ATMEL_BUSWIDTH_16
+ bool "Enable 16-bit data bus interface to NAND flash"
+- depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91CAP9ADK)
++ depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91CAP9ADK || MACH_MH355)
+ help
+ On AT91SAM926x boards both types of NAND flash can be present
+ (8 and 16 bit data bus width).
+diff -Nur linux-2.6.28.10-at91/arch/arm/mach-at91/Makefile linux-2.6.28.10-at91-mh/arch/arm/mach-at91/Makefile
+--- linux-2.6.28.10-at91/arch/arm/mach-at91/Makefile 2010-03-20 20:20:31.000000000 +0100
++++ linux-2.6.28.10-at91-mh/arch/arm/mach-at91/Makefile 2010-03-20 21:30:16.000000000 +0100
+@@ -54,6 +54,7 @@
+ obj-$(CONFIG_MACH_CSB737) += board-csb737.o
+ obj-$(CONFIG_MACH_TOTEMNOVA) += board-totemnova.o
+ obj-$(CONFIG_MACH_NEOCORE926) += board-neocore926.o
++obj-$(CONFIG_MACH_MH355) += board-mh355.o
+
+ # AT91SAM9RL board-specific support
+ obj-$(CONFIG_MACH_AT91SAM9RLEK) += board-sam9rlek.o
+diff -Nur linux-2.6.28.10-at91/arch/arm/tools/mach-types linux-2.6.28.10-at91-mh/arch/arm/tools/mach-types
+--- linux-2.6.28.10-at91/arch/arm/tools/mach-types 2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.28.10-at91-mh/arch/arm/tools/mach-types 2010-03-20 21:12:39.000000000 +0100
+@@ -12,7 +12,7 @@
+ #
+ # http://www.arm.linux.org.uk/developer/machines/?action=new
+ #
+-# Last update: Thu Sep 25 10:10:50 2008
++# Last update: Thu Sep 17 09:50:24 2009
+ #
+ # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
+ #
+@@ -916,7 +916,7 @@
+ apf9328 MACH_APF9328 APF9328 906
+ omap_wipoq MACH_OMAP_WIPOQ OMAP_WIPOQ 907
+ omap_twip MACH_OMAP_TWIP OMAP_TWIP 908
+-palmt650 MACH_PALMT650 PALMT650 909
++treo650 MACH_TREO650 TREO650 909
+ acumen MACH_ACUMEN ACUMEN 910
+ xp100 MACH_XP100 XP100 911
+ fs2410 MACH_FS2410 FS2410 912
+@@ -1232,7 +1232,7 @@
+ vpac270 MACH_VPAC270 VPAC270 1227
+ rd129 MACH_RD129 RD129 1228
+ htcwizard MACH_HTCWIZARD HTCWIZARD 1229
+-xscale_treo680 MACH_XSCALE_TREO680 XSCALE_TREO680 1230
++treo680 MACH_TREO680 TREO680 1230
+ tecon_tmezon MACH_TECON_TMEZON TECON_TMEZON 1231
+ zylonite MACH_ZYLONITE ZYLONITE 1233
+ gene1270 MACH_GENE1270 GENE1270 1234
+@@ -1380,7 +1380,7 @@
+ olip8 MACH_OLIP8 OLIP8 1378
+ ghi270hg MACH_GHI270HG GHI270HG 1379
+ davinci_dm6467_evm MACH_DAVINCI_DM6467_EVM DAVINCI_DM6467_EVM 1380
+-davinci_dm355_evm MACH_DAVINCI_DM350_EVM DAVINCI_DM350_EVM 1381
++davinci_dm355_evm MACH_DAVINCI_DM355_EVM DAVINCI_DM355_EVM 1381
+ blackriver MACH_BLACKRIVER BLACKRIVER 1383
+ sandgate_wp MACH_SANDGATEWP SANDGATEWP 1384
+ cdotbwsg MACH_CDOTBWSG CDOTBWSG 1385
+@@ -1418,10 +1418,10 @@
+ cnty_titan MACH_CNTY_TITAN CNTY_TITAN 1418
+ app3xx MACH_APP3XX APP3XX 1419
+ sideoatsgrama MACH_SIDEOATSGRAMA SIDEOATSGRAMA 1420
+-palmtreo700p MACH_PALMTREO700P PALMTREO700P 1421
+-palmtreo700w MACH_PALMTREO700W PALMTREO700W 1422
+-palmtreo750 MACH_PALMTREO750 PALMTREO750 1423
+-palmtreo755p MACH_PALMTREO755P PALMTREO755P 1424
++treo700p MACH_TREO700P TREO700P 1421
++treo700w MACH_TREO700W TREO700W 1422
++treo750 MACH_TREO750 TREO750 1423
++treo755p MACH_TREO755P TREO755P 1424
+ ezreganut9200 MACH_EZREGANUT9200 EZREGANUT9200 1425
+ sarge MACH_SARGE SARGE 1426
+ a696 MACH_A696 A696 1427
+@@ -1455,7 +1455,7 @@
+ h6044 MACH_H6044 H6044 1458
+ app MACH_APP APP 1459
+ tct_hammer MACH_TCT_HAMMER TCT_HAMMER 1460
+-herald MACH_HERMES HERMES 1461
++herald MACH_HERALD HERALD 1461
+ artemis MACH_ARTEMIS ARTEMIS 1462
+ htctitan MACH_HTCTITAN HTCTITAN 1463
+ qranium MACH_QRANIUM QRANIUM 1464
+@@ -1638,7 +1638,7 @@
+ aml_m8050 MACH_AML_M8050 AML_M8050 1644
+ mx35_3ds MACH_MX35_3DS MX35_3DS 1645
+ mars MACH_MARS MARS 1646
+-ntosd_644xa MACH_NTOSD_644XA NTOSD_644XA 1647
++neuros_osd2 MACH_NEUROS_OSD2 NEUROS_OSD2 1647
+ badger MACH_BADGER BADGER 1648
+ trizeps4wl MACH_TRIZEPS4WL TRIZEPS4WL 1649
+ trizeps5 MACH_TRIZEPS5 TRIZEPS5 1650
+@@ -1721,7 +1721,7 @@
+ csb637xo MACH_CSB637XO CSB637XO 1730
+ evisiong MACH_EVISIONG EVISIONG 1731
+ stmp37xx MACH_STMP37XX STMP37XX 1732
+-stmp378x MACH_STMP38XX STMP38XX 1733
++stmp378x MACH_STMP378X STMP378X 1733
+ tnt MACH_TNT TNT 1734
+ tbxt MACH_TBXT TBXT 1735
+ playmate MACH_PLAYMATE PLAYMATE 1736
+@@ -1769,9 +1769,9 @@
+ mi424wr MACH_MI424WR MI424WR 1778
+ axs_ultrax MACH_AXS_ULTRAX AXS_ULTRAX 1779
+ at572d940deb MACH_AT572D940DEB AT572D940DEB 1780
+-davinci_da8xx_evm MACH_DAVINCI_DA8XX_EVM DAVINCI_DA8XX_EVM 1781
++davinci_da830_evm MACH_DAVINCI_DA830_EVM DAVINCI_DA830_EVM 1781
+ ep9302 MACH_EP9302 EP9302 1782
+-at572d940hfeb MACH_AT572D940HFEB AT572D940HFEB 1783
++at572d940hfek MACH_AT572D940HFEB AT572D940HFEB 1783
+ cybook3 MACH_CYBOOK3 CYBOOK3 1784
+ wdg002 MACH_WDG002 WDG002 1785
+ sg560adsl MACH_SG560ADSL SG560ADSL 1786
+@@ -1811,13 +1811,13 @@
+ jade MACH_JADE JADE 1821
+ ks8695_softplc MACH_KS8695_SOFTPLC KS8695_SOFTPLC 1822
+ gprisc3 MACH_GPRISC3 GPRISC3 1823
+-stamp9260 MACH_STAMP9260 STAMP9260 1824
++stamp9g20 MACH_STAMP9G20 STAMP9G20 1824
+ smdk6430 MACH_SMDK6430 SMDK6430 1825
+ smdkc100 MACH_SMDKC100 SMDKC100 1826
+ tavorevb MACH_TAVOREVB TAVOREVB 1827
+ saar MACH_SAAR SAAR 1828
+ deister_eyecam MACH_DEISTER_EYECAM DEISTER_EYECAM 1829
+-at91sam9m10ek MACH_AT91SAM9M10EK AT91SAM9M10EK 1830
++at91sam9m10g45ek MACH_AT91SAM9M10G45EK AT91SAM9M10G45EK 1830
+ linkstation_produo MACH_LINKSTATION_PRODUO LINKSTATION_PRODUO 1831
+ hit_b0 MACH_HIT_B0 HIT_B0 1832
+ adx_rmu MACH_ADX_RMU ADX_RMU 1833
+@@ -1899,3 +1899,524 @@
+ asusp535 MACH_ASUSP535 ASUSP535 1909
+ htcraphael MACH_HTCRAPHAEL HTCRAPHAEL 1910
+ sygdg1 MACH_SYGDG1 SYGDG1 1911
++sygdg2 MACH_SYGDG2 SYGDG2 1912
++seoul MACH_SEOUL SEOUL 1913
++salerno MACH_SALERNO SALERNO 1914
++ucn_s3c64xx MACH_UCN_S3C64XX UCN_S3C64XX 1915
++msm7201a MACH_MSM7201A MSM7201A 1916
++lpr1 MACH_LPR1 LPR1 1917
++armadillo500fx MACH_ARMADILLO500FX ARMADILLO500FX 1918
++g3evm MACH_G3EVM G3EVM 1919
++z3_dm355 MACH_Z3_DM355 Z3_DM355 1920
++w90p910evb MACH_W90P910EVB W90P910EVB 1921
++w90p920evb MACH_W90P920EVB W90P920EVB 1922
++w90p950evb MACH_W90P950EVB W90P950EVB 1923
++w90n960evb MACH_W90N960EVB W90N960EVB 1924
++camhd MACH_CAMHD CAMHD 1925
++mvc100 MACH_MVC100 MVC100 1926
++electrum_200 MACH_ELECTRUM_200 ELECTRUM_200 1927
++htcjade MACH_HTCJADE HTCJADE 1928
++memphis MACH_MEMPHIS MEMPHIS 1929
++imx27sbc MACH_IMX27SBC IMX27SBC 1930
++lextar MACH_LEXTAR LEXTAR 1931
++mv88f6281gtw_ge MACH_MV88F6281GTW_GE MV88F6281GTW_GE 1932
++ncp MACH_NCP NCP 1933
++z32an_series MACH_Z32AN Z32AN 1934
++tmq_capd MACH_TMQ_CAPD TMQ_CAPD 1935
++omap3_wl MACH_OMAP3_WL OMAP3_WL 1936
++chumby MACH_CHUMBY CHUMBY 1937
++atsarm9 MACH_ATSARM9 ATSARM9 1938
++davinci_dm365_evm MACH_DAVINCI_DM365_EVM DAVINCI_DM365_EVM 1939
++bahamas MACH_BAHAMAS BAHAMAS 1940
++das MACH_DAS DAS 1941
++minidas MACH_MINIDAS MINIDAS 1942
++vk1000 MACH_VK1000 VK1000 1943
++centro MACH_CENTRO CENTRO 1944
++ctera_2bay MACH_CTERA_2BAY CTERA_2BAY 1945
++edgeconnect MACH_EDGECONNECT EDGECONNECT 1946
++nd27000 MACH_ND27000 ND27000 1947
++cobra MACH_GEMALTO_COBRA GEMALTO_COBRA 1948
++ingelabs_comet MACH_INGELABS_COMET INGELABS_COMET 1949
++pollux_wiz MACH_POLLUX_WIZ POLLUX_WIZ 1950
++blackstone MACH_BLACKSTONE BLACKSTONE 1951
++topaz MACH_TOPAZ TOPAZ 1952
++aixle MACH_AIXLE AIXLE 1953
++mw998 MACH_MW998 MW998 1954
++nokia_rx51 MACH_NOKIA_RX51 NOKIA_RX51 1955
++vsc5605ev MACH_VSC5605EV VSC5605EV 1956
++nt98700dk MACH_NT98700DK NT98700DK 1957
++icontact MACH_ICONTACT ICONTACT 1958
++swarco_frcpu MACH_SWARCO_FRCPU SWARCO_FRCPU 1959
++swarco_scpu MACH_SWARCO_SCPU SWARCO_SCPU 1960
++bbox_p16 MACH_BBOX_P16 BBOX_P16 1961
++bstd MACH_BSTD BSTD 1962
++sbc2440ii MACH_SBC2440II SBC2440II 1963
++pcm034 MACH_PCM034 PCM034 1964
++neso MACH_NESO NESO 1965
++wlnx_9g20 MACH_WLNX_9G20 WLNX_9G20 1966
++omap_zoom2 MACH_OMAP_ZOOM2 OMAP_ZOOM2 1967
++totemnova MACH_TOTEMNOVA TOTEMNOVA 1968
++c5000 MACH_C5000 C5000 1969
++unipo_at91sam9263 MACH_UNIPO_AT91SAM9263 UNIPO_AT91SAM9263 1970
++ethernut5 MACH_ETHERNUT5 ETHERNUT5 1971
++arm11 MACH_ARM11 ARM11 1972
++cpuat9260 MACH_CPUAT9260 CPUAT9260 1973
++cpupxa255 MACH_CPUPXA255 CPUPXA255 1974
++eukrea_cpuimx27 MACH_CPUIMX27 CPUIMX27 1975
++cheflux MACH_CHEFLUX CHEFLUX 1976
++eb_cpux9k2 MACH_EB_CPUX9K2 EB_CPUX9K2 1977
++opcotec MACH_OPCOTEC OPCOTEC 1978
++yt MACH_YT YT 1979
++motoq MACH_MOTOQ MOTOQ 1980
++bsb1 MACH_BSB1 BSB1 1981
++acs5k MACH_ACS5K ACS5K 1982
++milan MACH_MILAN MILAN 1983
++quartzv2 MACH_QUARTZV2 QUARTZV2 1984
++rsvp MACH_RSVP RSVP 1985
++rmp200 MACH_RMP200 RMP200 1986
++snapper_9260 MACH_SNAPPER_9260 SNAPPER_9260 1987
++dsm320 MACH_DSM320 DSM320 1988
++adsgcm MACH_ADSGCM ADSGCM 1989
++ase2_400 MACH_ASE2_400 ASE2_400 1990
++pizza MACH_PIZZA PIZZA 1991
++spot_ngpl MACH_SPOT_NGPL SPOT_NGPL 1992
++armata MACH_ARMATA ARMATA 1993
++exeda MACH_EXEDA EXEDA 1994
++mx31sf005 MACH_MX31SF005 MX31SF005 1995
++f5d8231_4_v2 MACH_F5D8231_4_V2 F5D8231_4_V2 1996
++q2440 MACH_Q2440 Q2440 1997
++qq2440 MACH_QQ2440 QQ2440 1998
++mini2440 MACH_MINI2440 MINI2440 1999
++colibri300 MACH_COLIBRI300 COLIBRI300 2000
++jades MACH_JADES JADES 2001
++spark MACH_SPARK SPARK 2002
++benzina MACH_BENZINA BENZINA 2003
++blaze MACH_BLAZE BLAZE 2004
++linkstation_ls_hgl MACH_LINKSTATION_LS_HGL LINKSTATION_LS_HGL 2005
++htckovsky MACH_HTCVENUS HTCVENUS 2006
++sony_prs505 MACH_SONY_PRS505 SONY_PRS505 2007
++hanlin_v3 MACH_HANLIN_V3 HANLIN_V3 2008
++sapphira MACH_SAPPHIRA SAPPHIRA 2009
++dack_sda_01 MACH_DACK_SDA_01 DACK_SDA_01 2010
++armbox MACH_ARMBOX ARMBOX 2011
++harris_rvp MACH_HARRIS_RVP HARRIS_RVP 2012
++ribaldo MACH_RIBALDO RIBALDO 2013
++agora MACH_AGORA AGORA 2014
++omap3_mini MACH_OMAP3_MINI OMAP3_MINI 2015
++a9sam6432_b MACH_A9SAM6432_B A9SAM6432_B 2016
++usg2410 MACH_USG2410 USG2410 2017
++pc72052_i10_revb MACH_PC72052_I10_REVB PC72052_I10_REVB 2018
++mx35_exm32 MACH_MX35_EXM32 MX35_EXM32 2019
++topas910 MACH_TOPAS910 TOPAS910 2020
++hyena MACH_HYENA HYENA 2021
++pospax MACH_POSPAX POSPAX 2022
++hdl_gx MACH_HDL_GX HDL_GX 2023
++ctera_4bay MACH_CTERA_4BAY CTERA_4BAY 2024
++ctera_plug_c MACH_CTERA_PLUG_C CTERA_PLUG_C 2025
++crwea_plug_i MACH_CRWEA_PLUG_I CRWEA_PLUG_I 2026
++egauge2 MACH_EGAUGE2 EGAUGE2 2027
++didj MACH_DIDJ DIDJ 2028
++m_s3c2443 MACH_MEISTER MEISTER 2029
++htcblackstone MACH_HTCBLACKSTONE HTCBLACKSTONE 2030
++cpuat9g20 MACH_CPUAT9G20 CPUAT9G20 2031
++smdk6440 MACH_SMDK6440 SMDK6440 2032
++omap_35xx_mvp MACH_OMAP_35XX_MVP OMAP_35XX_MVP 2033
++ctera_plug_i MACH_CTERA_PLUG_I CTERA_PLUG_I 2034
++pvg610_100 MACH_PVG610 PVG610 2035
++hprw6815 MACH_HPRW6815 HPRW6815 2036
++omap3_oswald MACH_OMAP3_OSWALD OMAP3_OSWALD 2037
++nas4220b MACH_NAS4220B NAS4220B 2038
++htcraphael_cdma MACH_HTCRAPHAEL_CDMA HTCRAPHAEL_CDMA 2039
++htcdiamond_cdma MACH_HTCDIAMOND_CDMA HTCDIAMOND_CDMA 2040
++scaler MACH_SCALER SCALER 2041
++zylonite2 MACH_ZYLONITE2 ZYLONITE2 2042
++aspenite MACH_ASPENITE ASPENITE 2043
++teton MACH_TETON TETON 2044
++ttc_dkb MACH_TTC_DKB TTC_DKB 2045
++bishop2 MACH_BISHOP2 BISHOP2 2046
++ippv5 MACH_IPPV5 IPPV5 2047
++farm926 MACH_FARM926 FARM926 2048
++mmccpu MACH_MMCCPU MMCCPU 2049
++sgmsfl MACH_SGMSFL SGMSFL 2050
++tt8000 MACH_TT8000 TT8000 2051
++zrn4300lp MACH_ZRN4300LP ZRN4300LP 2052
++mptc MACH_MPTC MPTC 2053
++h6051 MACH_H6051 H6051 2054
++pvg610_101 MACH_PVG610_101 PVG610_101 2055
++stamp9261_pc_evb MACH_STAMP9261_PC_EVB STAMP9261_PC_EVB 2056
++pelco_odysseus MACH_PELCO_ODYSSEUS PELCO_ODYSSEUS 2057
++tny_a9260 MACH_TNY_A9260 TNY_A9260 2058
++tny_a9g20 MACH_TNY_A9G20 TNY_A9G20 2059
++aesop_mp2530f MACH_AESOP_MP2530F AESOP_MP2530F 2060
++dx900 MACH_DX900 DX900 2061
++cpodc2 MACH_CPODC2 CPODC2 2062
++tilt_8925 MACH_TILT_8925 TILT_8925 2063
++davinci_dm357_evm MACH_DAVINCI_DM357_EVM DAVINCI_DM357_EVM 2064
++swordfish MACH_SWORDFISH SWORDFISH 2065
++corvus MACH_CORVUS CORVUS 2066
++taurus MACH_TAURUS TAURUS 2067
++axm MACH_AXM AXM 2068
++axc MACH_AXC AXC 2069
++baby MACH_BABY BABY 2070
++mp200 MACH_MP200 MP200 2071
++pcm043 MACH_PCM043 PCM043 2072
++hanlin_v3c MACH_HANLIN_V3C HANLIN_V3C 2073
++kbk9g20 MACH_KBK9G20 KBK9G20 2074
++adsturbog5 MACH_ADSTURBOG5 ADSTURBOG5 2075
++avenger_lite1 MACH_AVENGER_LITE1 AVENGER_LITE1 2076
++suc82x MACH_SUC SUC 2077
++at91sam7s256 MACH_AT91SAM7S256 AT91SAM7S256 2078
++mendoza MACH_MENDOZA MENDOZA 2079
++kira MACH_KIRA KIRA 2080
++mx1hbm MACH_MX1HBM MX1HBM 2081
++quatro43xx MACH_QUATRO43XX QUATRO43XX 2082
++quatro4230 MACH_QUATRO4230 QUATRO4230 2083
++nsb400 MACH_NSB400 NSB400 2084
++drp255 MACH_DRP255 DRP255 2085
++thoth MACH_THOTH THOTH 2086
++firestone MACH_FIRESTONE FIRESTONE 2087
++asusp750 MACH_ASUSP750 ASUSP750 2088
++ctera_dl MACH_CTERA_DL CTERA_DL 2089
++socr MACH_SOCR SOCR 2090
++htcoxygen MACH_HTCOXYGEN HTCOXYGEN 2091
++heroc MACH_HEROC HEROC 2092
++zeno6800 MACH_ZENO6800 ZENO6800 2093
++sc2mcs MACH_SC2MCS SC2MCS 2094
++gene100 MACH_GENE100 GENE100 2095
++as353x MACH_AS353X AS353X 2096
++sheevaplug MACH_SHEEVAPLUG SHEEVAPLUG 2097
++at91sam9g20 MACH_AT91SAM9G20 AT91SAM9G20 2098
++mv88f6192gtw_fe MACH_MV88F6192GTW_FE MV88F6192GTW_FE 2099
++cc9200 MACH_CC9200 CC9200 2100
++sm9200 MACH_SM9200 SM9200 2101
++tp9200 MACH_TP9200 TP9200 2102
++snapperdv MACH_SNAPPERDV SNAPPERDV 2103
++avengers_lite MACH_AVENGERS_LITE AVENGERS_LITE 2104
++avengers_lite1 MACH_AVENGERS_LITE1 AVENGERS_LITE1 2105
++omap3axon MACH_OMAP3AXON OMAP3AXON 2106
++ma8xx MACH_MA8XX MA8XX 2107
++mp201ek MACH_MP201EK MP201EK 2108
++davinci_tux MACH_DAVINCI_TUX DAVINCI_TUX 2109
++mpa1600 MACH_MPA1600 MPA1600 2110
++pelco_troy MACH_PELCO_TROY PELCO_TROY 2111
++nsb667 MACH_NSB667 NSB667 2112
++rovers5_4mpix MACH_ROVERS5_4MPIX ROVERS5_4MPIX 2113
++twocom MACH_TWOCOM TWOCOM 2114
++ubisys_p9_rcu3r2 MACH_UBISYS_P9_RCU3R2 UBISYS_P9_RCU3R2 2115
++hero_espresso MACH_HERO_ESPRESSO HERO_ESPRESSO 2116
++afeusb MACH_AFEUSB AFEUSB 2117
++t830 MACH_T830 T830 2118
++spd8020_cc MACH_SPD8020_CC SPD8020_CC 2119
++om_3d7k MACH_OM_3D7K OM_3D7K 2120
++picocom2 MACH_PICOCOM2 PICOCOM2 2121
++uwg4mx27 MACH_UWG4MX27 UWG4MX27 2122
++uwg4mx31 MACH_UWG4MX31 UWG4MX31 2123
++cherry MACH_CHERRY CHERRY 2124
++mx51_babbage MACH_MX51_BABBAGE MX51_BABBAGE 2125
++s3c2440turkiye MACH_S3C2440TURKIYE S3C2440TURKIYE 2126
++tx37 MACH_TX37 TX37 2127
++sbc2800_9g20 MACH_SBC2800_9G20 SBC2800_9G20 2128
++benzglb MACH_BENZGLB BENZGLB 2129
++benztd MACH_BENZTD BENZTD 2130
++cartesio_plus MACH_CARTESIO_PLUS CARTESIO_PLUS 2131
++solrad_g20 MACH_SOLRAD_G20 SOLRAD_G20 2132
++mx27wallace MACH_MX27WALLACE MX27WALLACE 2133
++fmzwebmodul MACH_FMZWEBMODUL FMZWEBMODUL 2134
++rd78x00_masa MACH_RD78X00_MASA RD78X00_MASA 2135
++smallogger MACH_SMALLOGGER SMALLOGGER 2136
++ccw9p9215 MACH_CCW9P9215 CCW9P9215 2137
++dm355_leopard MACH_DM355_LEOPARD DM355_LEOPARD 2138
++ts219 MACH_TS219 TS219 2139
++tny_a9263 MACH_TNY_A9263 TNY_A9263 2140
++apollo MACH_APOLLO APOLLO 2141
++at91cap9stk MACH_AT91CAP9STK AT91CAP9STK 2142
++spc300 MACH_SPC300 SPC300 2143
++eko MACH_EKO EKO 2144
++ccw9m2443 MACH_CCW9M2443 CCW9M2443 2145
++ccw9m2443js MACH_CCW9M2443JS CCW9M2443JS 2146
++m2m_router_device MACH_M2M_ROUTER_DEVICE M2M_ROUTER_DEVICE 2147
++str9104nas MACH_STAR9104NAS STAR9104NAS 2148
++pca100 MACH_PCA100 PCA100 2149
++z3_dm365_mod_01 MACH_Z3_DM365_MOD_01 Z3_DM365_MOD_01 2150
++hipox MACH_HIPOX HIPOX 2151
++omap3_piteds MACH_OMAP3_PITEDS OMAP3_PITEDS 2152
++bm150r MACH_BM150R BM150R 2153
++tbone MACH_TBONE TBONE 2154
++merlin MACH_MERLIN MERLIN 2155
++falcon MACH_FALCON FALCON 2156
++davinci_da850_evm MACH_DAVINCI_DA850_EVM DAVINCI_DA850_EVM 2157
++s5p6440 MACH_S5P6440 S5P6440 2158
++at91sam9g10ek MACH_AT91SAM9G10EK AT91SAM9G10EK 2159
++omap_4430sdp MACH_OMAP_4430SDP OMAP_4430SDP 2160
++lpc313x MACH_LPC313X LPC313X 2161
++magx_zn5 MACH_MAGX_ZN5 MAGX_ZN5 2162
++magx_em30 MACH_MAGX_EM30 MAGX_EM30 2163
++magx_ve66 MACH_MAGX_VE66 MAGX_VE66 2164
++meesc MACH_MEESC MEESC 2165
++otc570 MACH_OTC570 OTC570 2166
++bcu2412 MACH_BCU2412 BCU2412 2167
++beacon MACH_BEACON BEACON 2168
++actia_tgw MACH_ACTIA_TGW ACTIA_TGW 2169
++e4430 MACH_E4430 E4430 2170
++ql300 MACH_QL300 QL300 2171
++btmavb101 MACH_BTMAVB101 BTMAVB101 2172
++btmawb101 MACH_BTMAWB101 BTMAWB101 2173
++sq201 MACH_SQ201 SQ201 2174
++quatro45xx MACH_QUATRO45XX QUATRO45XX 2175
++openpad MACH_OPENPAD OPENPAD 2176
++tx25 MACH_TX25 TX25 2177
++omap3_torpedo MACH_OMAP3_TORPEDO OMAP3_TORPEDO 2178
++htcraphael_k MACH_HTCRAPHAEL_K HTCRAPHAEL_K 2179
++lal43 MACH_LAL43 LAL43 2181
++htcraphael_cdma500 MACH_HTCRAPHAEL_CDMA500 HTCRAPHAEL_CDMA500 2182
++anw6410 MACH_ANW6410 ANW6410 2183
++htcprophet MACH_HTCPROPHET HTCPROPHET 2185
++cfa_10022 MACH_CFA_10022 CFA_10022 2186
++imx27_visstrim_m10 MACH_IMX27_VISSTRIM_M10 IMX27_VISSTRIM_M10 2187
++px2imx27 MACH_PX2IMX27 PX2IMX27 2188
++stm3210e_eval MACH_STM3210E_EVAL STM3210E_EVAL 2189
++dvs10 MACH_DVS10 DVS10 2190
++portuxg20 MACH_PORTUXG20 PORTUXG20 2191
++arm_spv MACH_ARM_SPV ARM_SPV 2192
++smdkc110 MACH_SMDKC110 SMDKC110 2193
++cabespresso MACH_CABESPRESSO CABESPRESSO 2194
++hmc800 MACH_HMC800 HMC800 2195
++sholes MACH_SHOLES SHOLES 2196
++btmxc31 MACH_BTMXC31 BTMXC31 2197
++dt501 MACH_DT501 DT501 2198
++ktx MACH_KTX KTX 2199
++omap3517evm MACH_OMAP3517EVM OMAP3517EVM 2200
++netspace_v2 MACH_NETSPACE_V2 NETSPACE_V2 2201
++netspace_max_v2 MACH_NETSPACE_MAX_V2 NETSPACE_MAX_V2 2202
++d2net_v2 MACH_D2NET_V2 D2NET_V2 2203
++net2big_v2 MACH_NET2BIG_V2 NET2BIG_V2 2204
++net4big_v2 MACH_NET4BIG_V2 NET4BIG_V2 2205
++net5big_v2 MACH_NET5BIG_V2 NET5BIG_V2 2206
++endb2443 MACH_ENDB2443 ENDB2443 2207
++inetspace_v2 MACH_INETSPACE_V2 INETSPACE_V2 2208
++tros MACH_TROS TROS 2209
++pelco_homer MACH_PELCO_HOMER PELCO_HOMER 2210
++ofsp8 MACH_OFSP8 OFSP8 2211
++at91sam9g45ekes MACH_AT91SAM9G45EKES AT91SAM9G45EKES 2212
++guf_cupid MACH_GUF_CUPID GUF_CUPID 2213
++eab1r MACH_EAB1R EAB1R 2214
++desirec MACH_DESIREC DESIREC 2215
++cordoba MACH_CORDOBA CORDOBA 2216
++irvine MACH_IRVINE IRVINE 2217
++sff772 MACH_SFF772 SFF772 2218
++pelco_milano MACH_PELCO_MILANO PELCO_MILANO 2219
++pc7302 MACH_PC7302 PC7302 2220
++bip6000 MACH_BIP6000 BIP6000 2221
++silvermoon MACH_SILVERMOON SILVERMOON 2222
++vc0830 MACH_VC0830 VC0830 2223
++dt430 MACH_DT430 DT430 2224
++ji42pf MACH_JI42PF JI42PF 2225
++gnet_ksm MACH_GNET_KSM GNET_KSM 2226
++gnet_sgm MACH_GNET_SGM GNET_SGM 2227
++gnet_sgr MACH_GNET_SGR GNET_SGR 2228
++omap3_icetekevm MACH_OMAP3_ICETEKEVM OMAP3_ICETEKEVM 2229
++pnp MACH_PNP PNP 2230
++ctera_2bay_k MACH_CTERA_2BAY_K CTERA_2BAY_K 2231
++ctera_2bay_u MACH_CTERA_2BAY_U CTERA_2BAY_U 2232
++sas_c MACH_SAS_C SAS_C 2233
++vma2315 MACH_VMA2315 VMA2315 2234
++vcs MACH_VCS VCS 2235
++spear600 MACH_SPEAR600 SPEAR600 2236
++spear300 MACH_SPEAR300 SPEAR300 2237
++spear1300 MACH_SPEAR1300 SPEAR1300 2238
++lilly1131 MACH_LILLY1131 LILLY1131 2239
++arvoo_ax301 MACH_ARVOO_AX301 ARVOO_AX301 2240
++mapphone MACH_MAPPHONE MAPPHONE 2241
++legend MACH_LEGEND LEGEND 2242
++salsa MACH_SALSA SALSA 2243
++lounge MACH_LOUNGE LOUNGE 2244
++vision MACH_VISION VISION 2245
++vmb20 MACH_VMB20 VMB20 2246
++hy2410 MACH_HY2410 HY2410 2247
++hy9315 MACH_HY9315 HY9315 2248
++bullwinkle MACH_BULLWINKLE BULLWINKLE 2249
++arm_ultimator2 MACH_ARM_ULTIMATOR2 ARM_ULTIMATOR2 2250
++vs_v210 MACH_VS_V210 VS_V210 2252
++vs_v212 MACH_VS_V212 VS_V212 2253
++hmt MACH_HMT HMT 2254
++suen3 MACH_SUEN3 SUEN3 2255
++vesper MACH_VESPER VESPER 2256
++str9 MACH_STR9 STR9 2257
++omap3_wl_ff MACH_OMAP3_WL_FF OMAP3_WL_FF 2258
++simcom MACH_SIMCOM SIMCOM 2259
++mcwebio MACH_MCWEBIO MCWEBIO 2260
++omap3_phrazer MACH_OMAP3_PHRAZER OMAP3_PHRAZER 2261
++darwin MACH_DARWIN DARWIN 2262
++oratiscomu MACH_ORATISCOMU ORATISCOMU 2263
++rtsbc20 MACH_RTSBC20 RTSBC20 2264
++sgh_i780 MACH_I780 I780 2265
++gemini324 MACH_GEMINI324 GEMINI324 2266
++oratislan MACH_ORATISLAN ORATISLAN 2267
++oratisalog MACH_ORATISALOG ORATISALOG 2268
++oratismadi MACH_ORATISMADI ORATISMADI 2269
++oratisot16 MACH_ORATISOT16 ORATISOT16 2270
++oratisdesk MACH_ORATISDESK ORATISDESK 2271
++v2_ca9 MACH_V2P_CA9 V2P_CA9 2272
++sintexo MACH_SINTEXO SINTEXO 2273
++cm3389 MACH_CM3389 CM3389 2274
++omap3_cio MACH_OMAP3_CIO OMAP3_CIO 2275
++sgh_i900 MACH_SGH_I900 SGH_I900 2276
++bst100 MACH_BST100 BST100 2277
++passion MACH_PASSION PASSION 2278
++indesign_at91sam MACH_INDESIGN_AT91SAM INDESIGN_AT91SAM 2279
++c4_badger MACH_C4_BADGER C4_BADGER 2280
++c4_viper MACH_C4_VIPER C4_VIPER 2281
++d2net MACH_D2NET D2NET 2282
++bigdisk MACH_BIGDISK BIGDISK 2283
++notalvision MACH_NOTALVISION NOTALVISION 2284
++omap3_kboc MACH_OMAP3_KBOC OMAP3_KBOC 2285
++cyclone MACH_CYCLONE CYCLONE 2286
++ninja MACH_NINJA NINJA 2287
++at91sam9g20ek_2mmc MACH_AT91SAM9G20EK_2MMC AT91SAM9G20EK_2MMC 2288
++bcmring MACH_BCMRING BCMRING 2289
++resol_dl2 MACH_RESOL_DL2 RESOL_DL2 2290
++ifosw MACH_IFOSW IFOSW 2291
++htcrhodium MACH_HTCRHODIUM HTCRHODIUM 2292
++htctopaz MACH_HTCTOPAZ HTCTOPAZ 2293
++matrix504 MACH_MATRIX504 MATRIX504 2294
++mrfsa MACH_MRFSA MRFSA 2295
++sc_p270 MACH_SC_P270 SC_P270 2296
++atlas5_evb MACH_ATLAS5_EVB ATLAS5_EVB 2297
++pelco_lobox MACH_PELCO_LOBOX PELCO_LOBOX 2298
++dilax_pcu200 MACH_DILAX_PCU200 DILAX_PCU200 2299
++leonardo MACH_LEONARDO LEONARDO 2300
++zoran_approach7 MACH_ZORAN_APPROACH7 ZORAN_APPROACH7 2301
++dp6xx MACH_DP6XX DP6XX 2302
++bcm2153_vesper MACH_BCM2153_VESPER BCM2153_VESPER 2303
++mahimahi MACH_MAHIMAHI MAHIMAHI 2304
++clickc MACH_CLICKC CLICKC 2305
++zb_gateway MACH_ZB_GATEWAY ZB_GATEWAY 2306
++tazcard MACH_TAZCARD TAZCARD 2307
++tazdev MACH_TAZDEV TAZDEV 2308
++annax_cb_arm MACH_ANNAX_CB_ARM ANNAX_CB_ARM 2309
++annax_dm3 MACH_ANNAX_DM3 ANNAX_DM3 2310
++cerebric MACH_CEREBRIC CEREBRIC 2311
++orca MACH_ORCA ORCA 2312
++pc9260 MACH_PC9260 PC9260 2313
++ems285a MACH_EMS285A EMS285A 2314
++gec2410 MACH_GEC2410 GEC2410 2315
++gec2440 MACH_GEC2440 GEC2440 2316
++mw903 MACH_ARCH_MW903 ARCH_MW903 2317
++mw2440 MACH_MW2440 MW2440 2318
++ecac2378 MACH_ECAC2378 ECAC2378 2319
++tazkiosk MACH_TAZKIOSK TAZKIOSK 2320
++whiterabbit_mch MACH_WHITERABBIT_MCH WHITERABBIT_MCH 2321
++sbox9263 MACH_SBOX9263 SBOX9263 2322
++oreo MACH_OREO OREO 2323
++smdk6442 MACH_SMDK6442 SMDK6442 2324
++openrd_base MACH_OPENRD_BASE OPENRD_BASE 2325
++incredible MACH_INCREDIBLE INCREDIBLE 2326
++incrediblec MACH_INCREDIBLEC INCREDIBLEC 2327
++heroct MACH_HEROCT HEROCT 2328
++mmnet1000 MACH_MMNET1000 MMNET1000 2329
++devkit8000 MACH_DEVKIT8000 DEVKIT8000 2330
++devkit9000 MACH_DEVKIT9000 DEVKIT9000 2331
++mx31txtr MACH_MX31TXTR MX31TXTR 2332
++u380 MACH_U380 U380 2333
++oamp3_hualu MACH_HUALU_BOARD HUALU_BOARD 2334
++npcmx50 MACH_NPCMX50 NPCMX50 2335
++mx51_lange51 MACH_MX51_LANGE51 MX51_LANGE51 2336
++mx51_lange52 MACH_MX51_LANGE52 MX51_LANGE52 2337
++riom MACH_RIOM RIOM 2338
++comcas MACH_COMCAS COMCAS 2339
++wsi_mx27 MACH_WSI_MX27 WSI_MX27 2340
++cm_t35 MACH_CM_T35 CM_T35 2341
++net2big MACH_NET2BIG NET2BIG 2342
++motorola_a1600 MACH_MOTOROLA_A1600 MOTOROLA_A1600 2343
++igep0020 MACH_IGEP0020 IGEP0020 2344
++igep0010 MACH_IGEP0010 IGEP0010 2345
++mv6281gtwge2 MACH_MV6281GTWGE2 MV6281GTWGE2 2346
++scat100 MACH_SCAT100 SCAT100 2347
++sanmina MACH_SANMINA SANMINA 2348
++momento MACH_MOMENTO MOMENTO 2349
++nuc9xx MACH_NUC9XX NUC9XX 2350
++nuc910evb MACH_NUC910EVB NUC910EVB 2351
++nuc920evb MACH_NUC920EVB NUC920EVB 2352
++nuc950evb MACH_NUC950EVB NUC950EVB 2353
++nuc945evb MACH_NUC945EVB NUC945EVB 2354
++nuc960evb MACH_NUC960EVB NUC960EVB 2355
++nuc932evb MACH_NUC932EVB NUC932EVB 2356
++nuc900 MACH_NUC900 NUC900 2357
++sd1soc MACH_SD1SOC SD1SOC 2358
++ln2440bc MACH_LN2440BC LN2440BC 2359
++rsbc MACH_RSBC RSBC 2360
++openrd_client MACH_OPENRD_CLIENT OPENRD_CLIENT 2361
++hpipaq11x MACH_HPIPAQ11X HPIPAQ11X 2362
++wayland MACH_WAYLAND WAYLAND 2363
++acnbsx102 MACH_ACNBSX102 ACNBSX102 2364
++hwat91 MACH_HWAT91 HWAT91 2365
++at91sam9263cs MACH_AT91SAM9263CS AT91SAM9263CS 2366
++csb732 MACH_CSB732 CSB732 2367
++u8500 MACH_U8500 U8500 2368
++huqiu MACH_HUQIU HUQIU 2369
++mx51_kunlun MACH_MX51_KUNLUN MX51_KUNLUN 2370
++pmt1g MACH_PMT1G PMT1G 2371
++htcelf MACH_HTCELF HTCELF 2372
++armadillo420 MACH_ARMADILLO420 ARMADILLO420 2373
++armadillo440 MACH_ARMADILLO440 ARMADILLO440 2374
++u_chip_dual_arm MACH_U_CHIP_DUAL_ARM U_CHIP_DUAL_ARM 2375
++csr_bdb3 MACH_CSR_BDB3 CSR_BDB3 2376
++dolby_cat1018 MACH_DOLBY_CAT1018 DOLBY_CAT1018 2377
++hy9307 MACH_HY9307 HY9307 2378
++aspire_easystore MACH_A_ES A_ES 2379
++davinci_irif MACH_DAVINCI_IRIF DAVINCI_IRIF 2380
++agama9263 MACH_AGAMA9263 AGAMA9263 2381
++marvell_jasper MACH_MARVELL_JASPER MARVELL_JASPER 2382
++flint MACH_FLINT FLINT 2383
++tavorevb3 MACH_TAVOREVB3 TAVOREVB3 2384
++sch_m490 MACH_SCH_M490 SCH_M490 2386
++rbl01 MACH_RBL01 RBL01 2387
++omnifi MACH_OMNIFI OMNIFI 2388
++otavalo MACH_OTAVALO OTAVALO 2389
++sienna MACH_SIENNA SIENNA 2390
++htc_excalibur_s620 MACH_HTC_EXCALIBUR_S620 HTC_EXCALIBUR_S620 2391
++htc_opal MACH_HTC_OPAL HTC_OPAL 2392
++touchbook MACH_TOUCHBOOK TOUCHBOOK 2393
++latte MACH_LATTE LATTE 2394
++xa200 MACH_XA200 XA200 2395
++nimrod MACH_NIMROD NIMROD 2396
++cc9p9215_3g MACH_CC9P9215_3G CC9P9215_3G 2397
++cc9p9215_3gjs MACH_CC9P9215_3GJS CC9P9215_3GJS 2398
++tk71 MACH_TK71 TK71 2399
++comham3525 MACH_COMHAM3525 COMHAM3525 2400
++mx31erebus MACH_MX31EREBUS MX31EREBUS 2401
++mcardmx27 MACH_MCARDMX27 MCARDMX27 2402
++paradise MACH_PARADISE PARADISE 2403
++tide MACH_TIDE TIDE 2404
++wzl2440 MACH_WZL2440 WZL2440 2405
++sdrdemo MACH_SDRDEMO SDRDEMO 2406
++ethercan2 MACH_ETHERCAN2 ETHERCAN2 2407
++ecmimg20 MACH_ECMIMG20 ECMIMG20 2408
++omap_dragon MACH_OMAP_DRAGON OMAP_DRAGON 2409
++halo MACH_HALO HALO 2410
++huangshan MACH_HUANGSHAN HUANGSHAN 2411
++vl_ma2sc MACH_VL_MA2SC VL_MA2SC 2412
++raumfeld_rc MACH_RAUMFELD_RC RAUMFELD_RC 2413
++raumfeld_connector MACH_RAUMFELD_CONNECTOR RAUMFELD_CONNECTOR 2414
++raumfeld_speaker MACH_RAUMFELD_SPEAKER RAUMFELD_SPEAKER 2415
++multibus_master MACH_MULTIBUS_MASTER MULTIBUS_MASTER 2416
++multibus_pbk MACH_MULTIBUS_PBK MULTIBUS_PBK 2417
++tnetv107x MACH_TNETV107X TNETV107X 2418
++snake MACH_SNAKE SNAKE 2419
++cwmx27 MACH_CWMX27 CWMX27 2420
++sch_m480 MACH_SCH_M480 SCH_M480 2421
++platypus MACH_PLATYPUS PLATYPUS 2422
++pss2 MACH_PSS2 PSS2 2423
++davinci_apm150 MACH_DAVINCI_APM150 DAVINCI_APM150 2424
++str9100 MACH_STR9100 STR9100 2425
++net5big MACH_NET5BIG NET5BIG 2426
++seabed9263 MACH_SEABED9263 SEABED9263 2427
++mx51_m2id MACH_MX51_M2ID MX51_M2ID 2428
++octvocplus_eb MACH_OCTVOCPLUS_EB OCTVOCPLUS_EB 2429
++klk_firefox MACH_KLK_FIREFOX KLK_FIREFOX 2430
++klk_wirma_module MACH_KLK_WIRMA_MODULE KLK_WIRMA_MODULE 2431
++klk_wirma_mmi MACH_KLK_WIRMA_MMI KLK_WIRMA_MMI 2432
++supersonic MACH_SUPERSONIC SUPERSONIC 2433
++liberty MACH_LIBERTY LIBERTY 2434
++mh355 MACH_MH355 MH355 2435
++
+diff -Nur linux-2.6.28.10-at91/drivers/video/atmel_lcdfb.c linux-2.6.28.10-at91-mh/drivers/video/atmel_lcdfb.c
+--- linux-2.6.28.10-at91/drivers/video/atmel_lcdfb.c 2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.28.10-at91-mh/drivers/video/atmel_lcdfb.c 2010-03-20 20:51:11.000000000 +0100
+@@ -2,6 +2,7 @@
+ * Driver for AT91/AT32 LCD Controller
+ *
+ * Copyright (C) 2007 Atmel Corporation
++ * Modifications: March 2010, Modified for mh355
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file COPYING in the main directory of this archive for
+@@ -29,7 +30,7 @@
+
+ /* configurable parameters */
+ #define ATMEL_LCDC_CVAL_DEFAULT 0xc8
+-#define ATMEL_LCDC_DMA_BURST_LEN 8
++#define ATMEL_LCDC_DMA_BURST_LEN 16 // was 8
+
+ #if defined(CONFIG_ARCH_AT91SAM9263) || defined(CONFIG_ARCH_AT91CAP9) || \
+ defined(CONFIG_ARCH_AT91SAM9RL)
+@@ -216,7 +217,7 @@
+
+ /* Wait for the LCDC core to become idle */
+ while (lcdc_readl(sinfo, ATMEL_LCDC_PWRCON) & ATMEL_LCDC_BUSY)
+- msleep(10);
++ msleep(1); // msleep(10);
+
+ lcdc_writel(sinfo, ATMEL_LCDC_DMACON, 0);
+ }
+@@ -227,7 +228,7 @@
+
+ /* Wait for DMA engine to become idle... */
+ while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY)
+- msleep(10);
++ msleep(1); // msleep(10);
+ }
+
+ static void atmel_lcdfb_start(struct atmel_lcdfb_info *sinfo)
+@@ -352,7 +353,8 @@
+ dev_dbg(dev, " clk: %lu KHz\n", clk_value_khz);
+
+ if ((PICOS2KHZ(var->pixclock) * var->bits_per_pixel / 8) > clk_value_khz) {
+- dev_err(dev, "%lu KHz pixel clock is too fast\n", PICOS2KHZ(var->pixclock));
++ dev_err(dev, "%lu KHz pixel clock is too fast, bits_per_pixel=%lu\n", PICOS2KHZ(var->pixclock), var->bits_per_pixel);
++// dev_err(dev, "%lu KHz pixel clock is too fast\n", PICOS2KHZ(var->pixclock));
+ return -EINVAL;
+ }
+
diff --git a/recipes/linux/linux-2.6.28/nokia900/defconfig b/recipes/linux/linux-2.6.28/nokia900/defconfig
new file mode 100644
index 0000000000..e5c8451918
--- /dev/null
+++ b/recipes/linux/linux-2.6.28/nokia900/defconfig
@@ -0,0 +1,2059 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.28-omap1
+# Tue Feb 2 10:26:01 2010
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_OPROFILE_OMAP_GPTIMER=y
+CONFIG_OPROFILE_ARMV7=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_CGROUPS=y
+# CONFIG_CGROUP_DEBUG is not set
+# CONFIG_CGROUP_NS is not set
+CONFIG_CGROUP_FREEZER=y
+# CONFIG_CGROUP_DEVICE is not set
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_RT_GROUP_SCHED=y
+# CONFIG_USER_SCHED is not set
+CONFIG_CGROUP_SCHED=y
+# CONFIG_CGROUP_CPUACCT is not set
+CONFIG_RESOURCE_COUNTERS=y
+CONFIG_MM_OWNER=y
+CONFIG_CGROUP_MEM_RES_CTLR=y
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_COMPAT_BRK=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+CONFIG_KPROBES=y
+CONFIG_KRETPROBES=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_CLASSIC_RCU=y
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+CONFIG_ARCH_OMAP=y
+# CONFIG_ARCH_MSM is not set
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP_OTG=y
+# CONFIG_ARCH_OMAP1 is not set
+# CONFIG_ARCH_OMAP2 is not set
+CONFIG_ARCH_OMAP3=y
+
+#
+# OMAP Feature Selections
+#
+# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
+# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
+CONFIG_OMAP_SMARTREFLEX=y
+# CONFIG_OMAP_SMARTREFLEX_TESTING is not set
+CONFIG_OMAP_RESET_CLOCKS=y
+CONFIG_OMAP_BOOT_TAG=y
+CONFIG_OMAP_BOOT_REASON=y
+CONFIG_OMAP_COMPONENT_VERSION=y
+CONFIG_OMAP_GPIO_SWITCH=y
+CONFIG_OMAP_MUX=y
+CONFIG_OMAP_MUX_DEBUG=y
+CONFIG_OMAP_MUX_WARNINGS=y
+CONFIG_OMAP_MCBSP=y
+# CONFIG_OMAP_MMU_FWK is not set
+# CONFIG_OMAP_MBOX_FWK is not set
+CONFIG_OMAP_IOMMU=m
+# CONFIG_OMAP_IOMMU_DEBUG is not set
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+# CONFIG_OMAP3_DEBOBS is not set
+CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_TICK_GPTIMER=1
+CONFIG_OMAP_DM_TIMER=y
+# CONFIG_OMAP_LL_DEBUG_UART1 is not set
+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
+CONFIG_OMAP_LL_DEBUG_UART3=y
+CONFIG_OMAP_SERIAL_WAKE=y
+# CONFIG_OMAP_PM_NONE is not set
+# CONFIG_OMAP_PM_NOOP is not set
+CONFIG_OMAP_PM_SRF=y
+CONFIG_ARCH_OMAP34XX=y
+CONFIG_ARCH_OMAP3430=y
+
+#
+# OMAP Board Type
+#
+CONFIG_MACH_NOKIA_RX51=y
+CONFIG_VIDEO_MACH_RX51=m
+# CONFIG_VIDEO_MACH_RX51_OLD_I2C is not set
+CONFIG_MACH_NOKIA_RX71=y
+# CONFIG_MACH_OMAP_LDP is not set
+# CONFIG_MACH_OMAP_3430SDP is not set
+# CONFIG_MACH_OMAP3EVM is not set
+# CONFIG_MACH_OMAP3_BEAGLE is not set
+# CONFIG_MACH_OVERO is not set
+# CONFIG_MACH_OMAP3_PANDORA is not set
+# CONFIG_RX51_CAMERA_BUTTON is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_32v6K=y
+CONFIG_CPU_V7=y
+CONFIG_CPU_32v7=y
+CONFIG_CPU_ABRT_EV7=y
+CONFIG_CPU_PABRT_IFAR=y
+CONFIG_CPU_CACHE_V7=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V7=y
+CONFIG_CPU_HAS_ASID=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_ARM_THUMBEE=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+CONFIG_HAS_TLS_REG=y
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT=y
+CONFIG_HZ=128
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="init=/sbin/preinit ubi.mtd=rootfs root=ubi0:rootfs rootfstype=ubifs rootflags=bulk_read,no_chk_data_crc rw console=ttyMTD,log console=tty0 snd-soc-rx51.hp_lim=42 snd-soc-tlv320aic3x.hp_dac_lim=6"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_VFP=y
+CONFIG_VFPv3=y
+CONFIG_NEON=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_DEBUG=y
+# CONFIG_PM_VERBOSE is not set
+CONFIG_CAN_PM_TRACE=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_APM_EMULATION is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETLABEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
+# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
+# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_MAC is not set
+# CONFIG_NETFILTER_XT_MATCH_MARK is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+# CONFIG_IP_VS is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_NF_DEFRAG_IPV4 is not set
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
+# CONFIG_IP_NF_MATCH_AH is not set
+# CONFIG_IP_NF_MATCH_ECN is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+CONFIG_IP_NF_FILTER=m
+# CONFIG_IP_NF_TARGET_REJECT is not set
+# CONFIG_IP_NF_TARGET_LOG is not set
+# CONFIG_IP_NF_TARGET_ULOG is not set
+# CONFIG_IP_NF_TARGET_IDLETIMER is not set
+# CONFIG_IP_NF_MANGLE is not set
+# CONFIG_IP_NF_RAW is not set
+# CONFIG_IP_NF_SECURITY is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+CONFIG_IP_NF_HB=m
+# CONFIG_IP_NF_HB_DEBUG is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+CONFIG_PHONET=m
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_NET_TCPPROBE is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+# CONFIG_BT_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIBRF6150 is not set
+CONFIG_BT_HCIH4P=m
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_WIRELESS=y
+CONFIG_CFG80211=y
+CONFIG_NL80211=y
+CONFIG_WIRELESS_OLD_REGULATORY=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_MAC80211=m
+
+#
+# Rate control algorithm selection
+#
+# CONFIG_MAC80211_RC_PID is not set
+CONFIG_MAC80211_RC_MINSTREL=y
+# CONFIG_MAC80211_RC_DEFAULT_PID is not set
+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+CONFIG_MAC80211_RC_DEFAULT="minstrel"
+# CONFIG_MAC80211_MESH is not set
+# CONFIG_MAC80211_LEDS is not set
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_MENU is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+CONFIG_MTD_OOPS=y
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+CONFIG_MTD_ONENAND=y
+# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
+# CONFIG_MTD_ONENAND_GENERIC is not set
+CONFIG_MTD_ONENAND_OMAP2=y
+# CONFIG_MTD_ONENAND_OTP is not set
+# CONFIG_MTD_ONENAND_2X_PROGRAM is not set
+# CONFIG_MTD_ONENAND_SIM is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_NOKIA_AV_DETECT=m
+# CONFIG_ICS932S401 is not set
+CONFIG_OMAP_STI=y
+CONFIG_OMAP_STI_CONSOLE=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_C2PORT is not set
+CONFIG_OMAP_SSI=m
+CONFIG_SSI_MCSAAB_IMP=m
+CONFIG_SSI_CMT_SPEECH=m
+# CONFIG_SSI_CMT_SPEECH_DEBUG is not set
+CONFIG_SSI_CHAR=m
+# CONFIG_SSI_CHAR_DEBUG is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+# CONFIG_SCSI_LOWLEVEL is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_LIBERTAS is not set
+# CONFIG_LIBERTAS_THINFIRM is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_USB_NET_RNDIS_WLAN is not set
+# CONFIG_RTL8187 is not set
+# CONFIG_MAC80211_HWSIM is not set
+# CONFIG_P54_COMMON is not set
+# CONFIG_IWLWIFI_LEDS is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_B43 is not set
+# CONFIG_B43LEGACY is not set
+# CONFIG_ZD1211RW is not set
+# CONFIG_RT2X00 is not set
+CONFIG_WL12XX=y
+CONFIG_WL1251=m
+# CONFIG_WL1271 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLHC=m
+CONFIG_SLIP_SMART=y
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_TWL4030=y
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_TSC2005=m
+# CONFIG_TOUCHSCREEN_TSC210X is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+CONFIG_INPUT_LIRC=y
+CONFIG_LIRC_DEV=m
+CONFIG_LIRC_RX51=m
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+# CONFIG_INPUT_CM109 is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_OMAP3_ROM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_OMAP=y
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_AT24 is not set
+# CONFIG_SENSORS_EEPROM is not set
+CONFIG_TPA6130A2=y
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_TPS65010 is not set
+CONFIG_TWL4030_MADC=y
+CONFIG_TWL4030_PWRBUTTON=y
+CONFIG_TWL4030_POWEROFF=y
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+CONFIG_SENSORS_TSL2563=m
+# CONFIG_LP5521 is not set
+CONFIG_LIS302DL=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_OMAP24XX=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_TSC210X is not set
+# CONFIG_SPI_TSC2301 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+CONFIG_GPIO_TWL4030=y
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_AD7414 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADT7462 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ADT7473 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_MAX1111 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_SENSORS_TSC210X is not set
+CONFIG_SENSORS_OMAP34XX=y
+# CONFIG_HWMON_DEBUG_CHIP is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_OMAP_WATCHDOG=m
+CONFIG_TWL4030_WATCHDOG=m
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+CONFIG_TWL4030_CORE=y
+CONFIG_TWL4030_POWER=y
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM8350_I2C is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_DMA_SG=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
+
+#
+# Encoders/decoders and other helper chips
+#
+
+#
+# Audio decoders
+#
+# CONFIG_VIDEO_TVAUDIO is not set
+# CONFIG_VIDEO_TDA7432 is not set
+# CONFIG_VIDEO_TDA9840 is not set
+# CONFIG_VIDEO_TDA9875 is not set
+# CONFIG_VIDEO_TEA6415C is not set
+# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_MSP3400 is not set
+# CONFIG_VIDEO_CS5345 is not set
+# CONFIG_VIDEO_CS53L32A is not set
+# CONFIG_VIDEO_M52790 is not set
+# CONFIG_VIDEO_TLV320AIC23B is not set
+# CONFIG_VIDEO_WM8775 is not set
+# CONFIG_VIDEO_WM8739 is not set
+# CONFIG_VIDEO_VP27SMPX is not set
+
+#
+# Video decoders
+#
+# CONFIG_VIDEO_BT819 is not set
+# CONFIG_VIDEO_BT856 is not set
+# CONFIG_VIDEO_BT866 is not set
+# CONFIG_VIDEO_KS0127 is not set
+# CONFIG_VIDEO_OV7670 is not set
+# CONFIG_VIDEO_TCM825X is not set
+CONFIG_VIDEO_ET8EK8=m
+CONFIG_VIDEO_AD5820=m
+CONFIG_VIDEO_ADP1653=m
+# CONFIG_VIDEO_SAA7110 is not set
+# CONFIG_VIDEO_SAA7111 is not set
+# CONFIG_VIDEO_SAA7114 is not set
+# CONFIG_VIDEO_SAA711X is not set
+# CONFIG_VIDEO_SAA717X is not set
+# CONFIG_VIDEO_SAA7191 is not set
+# CONFIG_VIDEO_TVP5150 is not set
+# CONFIG_VIDEO_VPX3220 is not set
+CONFIG_VIDEO_SMIA_SENSOR=m
+
+#
+# Video and audio decoders
+#
+# CONFIG_VIDEO_CX25840 is not set
+
+#
+# MPEG video encoders
+#
+# CONFIG_VIDEO_CX2341X is not set
+
+#
+# Video encoders
+#
+# CONFIG_VIDEO_SAA7127 is not set
+# CONFIG_VIDEO_SAA7185 is not set
+# CONFIG_VIDEO_ADV7170 is not set
+# CONFIG_VIDEO_ADV7175 is not set
+
+#
+# Video improvement chips
+#
+# CONFIG_VIDEO_UPD64031A is not set
+# CONFIG_VIDEO_UPD64083 is not set
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+CONFIG_VIDEO_OMAP3=m
+CONFIG_VIDEO_SMIAREGS=m
+# CONFIG_SOC_CAMERA is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VIDEO_CLASS is not set
+# CONFIG_USB_GSPCA is not set
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+# CONFIG_USB_STKWEBCAM is not set
+# CONFIG_USB_S2255 is not set
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_I2C_SI4713=m
+# CONFIG_USB_DSBR is not set
+# CONFIG_USB_SI470X is not set
+CONFIG_I2C_BCM2048=m
+# CONFIG_USB_MR800 is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+CONFIG_PVR=m
+CONFIG_PVR_RELEASE=y
+# CONFIG_PVR_DEBUG is not set
+# CONFIG_PVR_TIMING is not set
+# CONFIG_PVR_EXAMPLES is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+CONFIG_FB_OMAP_BOOTLOADER_INIT=y
+CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=14
+CONFIG_OMAP2_DSS=y
+CONFIG_OMAP2_DSS_VRAM_SIZE=0
+# CONFIG_OMAP2_DSS_DEBUG_SUPPORT is not set
+# CONFIG_OMAP2_DSS_RFBI is not set
+CONFIG_OMAP2_DSS_VENC=y
+CONFIG_OMAP2_DSS_SDI=y
+# CONFIG_OMAP2_DSS_DSI is not set
+# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
+CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
+
+#
+# OMAP2/3 Display Device Drivers
+#
+# CONFIG_PANEL_NEVADA is not set
+CONFIG_PANEL_ACX565AKM=y
+# CONFIG_PANEL_GENERIC is not set
+# CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C is not set
+# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
+CONFIG_FB_OMAP2=y
+# CONFIG_FB_OMAP2_DEBUG_SUPPORT is not set
+# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
+CONFIG_FB_OMAP2_NUM_FBS=3
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=y
+
+#
+# Display hardware drivers
+#
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_LOGO is not set
+CONFIG_SOUND=y
+# CONFIG_SOUND_OSS_CORE is not set
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_JACK=y
+# CONFIG_SND_SEQUENCER is not set
+# CONFIG_SND_MIXER_OSS is not set
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_DRIVERS=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+CONFIG_SND_ARM=y
+CONFIG_SND_SPI=y
+# CONFIG_SND_USB is not set
+CONFIG_SND_SOC=y
+CONFIG_SND_OMAP_SOC=y
+CONFIG_SND_OMAP_SOC_MCBSP=y
+CONFIG_SND_OMAP_SOC_RX51=y
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_TLV320AIC3X=y
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+
+#
+# Special HID drivers
+#
+# CONFIG_HID_COMPAT is not set
+# CONFIG_HID_A4TECH is not set
+# CONFIG_HID_APPLE is not set
+# CONFIG_HID_BELKIN is not set
+# CONFIG_HID_BRIGHT is not set
+# CONFIG_HID_CHERRY is not set
+# CONFIG_HID_CHICONY is not set
+# CONFIG_HID_CYPRESS is not set
+# CONFIG_HID_DELL is not set
+# CONFIG_HID_EZKEY is not set
+# CONFIG_HID_GYRATION is not set
+# CONFIG_HID_LOGITECH is not set
+# CONFIG_HID_MICROSOFT is not set
+# CONFIG_HID_MONTEREY is not set
+# CONFIG_HID_PANTHERLORD is not set
+# CONFIG_HID_PETALYNX is not set
+# CONFIG_HID_SAMSUNG is not set
+# CONFIG_HID_SONY is not set
+# CONFIG_HID_SUNPLUS is not set
+# CONFIG_THRUSTMASTER_FF is not set
+# CONFIG_ZEROPLUS_FF is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+CONFIG_USB_DYNAMIC_MINORS=y
+CONFIG_USB_SUSPEND=y
+CONFIG_USB_OTG=y
+CONFIG_USB_OTG_WHITELIST=y
+CONFIG_USB_OTG_BLACKLIST_HUB=y
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_MUSB_SOC=y
+
+#
+# OMAP 343x high speed USB support
+#
+# CONFIG_USB_MUSB_HOST is not set
+# CONFIG_USB_MUSB_PERIPHERAL is not set
+CONFIG_USB_MUSB_OTG=y
+CONFIG_USB_GADGET_MUSB_HDRC=y
+CONFIG_USB_MUSB_HDRC_HCD=y
+# CONFIG_MUSB_PIO_ONLY is not set
+CONFIG_USB_INVENTRA_DMA=y
+# CONFIG_USB_TI_CPPI_DMA is not set
+CONFIG_USB_MUSB_DEBUG=y
+CONFIG_MUSB_PROC_FS=y
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
+#
+
+#
+# see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+CONFIG_USB_LIBUSUAL=y
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+CONFIG_USB_TEST=m
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_ZERO=m
+# CONFIG_USB_ZERO_HNPTEST is not set
+# CONFIG_USB_ETH is not set
+# CONFIG_USB_GADGETFS is not set
+CONFIG_USB_FILE_STORAGE=m
+CONFIG_USB_FILE_STORAGE_TEST=y
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+CONFIG_USB_G_NOKIA=m
+CONFIG_USB_G_SOFTUPD=m
+
+#
+# OTG and related infrastructure
+#
+CONFIG_USB_OTG_UTILS=y
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_ISP1301_OMAP is not set
+CONFIG_TWL4030_USB=y
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=m
+# CONFIG_MMC_BLOCK_BOUNCE is not set
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+CONFIG_MMC_OMAP_HS=m
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_OMAP is not set
+# CONFIG_LEDS_OMAP_PWM is not set
+# CONFIG_LEDS_PCA9532 is not set
+# CONFIG_LEDS_GPIO is not set
+# CONFIG_LEDS_PCA955X is not set
+CONFIG_LEDS_TWL4030_VIBRA=m
+CONFIG_LEDS_LP5523=m
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+CONFIG_RTC_DRV_TWL4030=m
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_DMADEVICES is not set
+CONFIG_REGULATOR=y
+# CONFIG_REGULATOR_DEBUG is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+CONFIG_REGULATOR_TWL4030=y
+# CONFIG_UIO is not set
+
+#
+# CBUS support
+#
+# CONFIG_CBUS is not set
+CONFIG_MPU_BRIDGE=m
+CONFIG_BRIDGE_DVFS=y
+CONFIG_BRIDGE_MEMPOOL_SIZE=0x412800
+# CONFIG_BRIDGE_DEBUG is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_EXT4_FS=m
+# CONFIG_EXT4DEV_COMPAT is not set
+CONFIG_EXT4_FS_XATTR=y
+# CONFIG_EXT4_FS_POSIX_ACL is not set
+# CONFIG_EXT4_FS_SECURITY is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=m
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_FILE_LOCKING=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_PRINT_QUOTA_WARNING=y
+# CONFIG_QFMT_V1 is not set
+CONFIG_QFMT_V2=y
+CONFIG_QUOTACTL=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+# CONFIG_JFFS2_CMODE_PRIORITY is not set
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_JFFS2_CMODE_FAVOURLZO=y
+CONFIG_UBIFS_FS=y
+# CONFIG_UBIFS_FS_XATTR is not set
+# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_REGISTER_V4 is not set
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+CONFIG_CIFS_XATTR=y
+# CONFIG_CIFS_POSIX is not set
+# CONFIG_CIFS_DEBUG2 is not set
+CONFIG_CIFS_EXPERIMENTAL=y
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf-8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+CONFIG_NLS_CODEPAGE_852=m
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=m
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_KPROBES_SANITY_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_LKDTM is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_PANIC_INFO_BUFF=m
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+
+#
+# Tracers
+#
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+CONFIG_SECURITY=y
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_NETWORK is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_SECURITY_ROOTPLUG is not set
+CONFIG_SECURITY_LOWMEM=y
+CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=y
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/recipes/linux/linux-2.6.32/eee701/defconfig b/recipes/linux/linux-2.6.32/eee701/defconfig
index 9da00fc65a..8e59e10544 100644
--- a/recipes/linux/linux-2.6.32/eee701/defconfig
+++ b/recipes/linux/linux-2.6.32/eee701/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.32.2
-# Fri Jan 15 03:30:14 2010
+# Linux kernel version: 2.6.32.8
+# Sun Feb 14 17:45:59 2010
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
@@ -278,7 +278,6 @@ CONFIG_MICROCODE_INTEL=y
CONFIG_MICROCODE_OLD_INTERFACE=y
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
-# CONFIG_X86_CPU_DEBUG is not set
# CONFIG_NOHIGHMEM is not set
CONFIG_HIGHMEM4G=y
# CONFIG_HIGHMEM64G is not set
@@ -882,7 +881,7 @@ CONFIG_PNP_DEBUG_MESSAGES=y
#
CONFIG_PNPACPI=y
CONFIG_BLK_DEV=y
-CONFIG_BLK_DEV_FD=y
+CONFIG_BLK_DEV_FD=m
CONFIG_BLK_CPQ_DA=m
CONFIG_BLK_CPQ_CISS_DA=m
# CONFIG_CISS_SCSI_TAPE is not set
@@ -1758,13 +1757,13 @@ CONFIG_SSB_DRIVER_PCICORE=y
# CONFIG_AB3100_CORE is not set
# CONFIG_EZX_PCAP is not set
# CONFIG_REGULATOR is not set
-CONFIG_MEDIA_SUPPORT=m
+CONFIG_MEDIA_SUPPORT=y
#
# Multimedia core support
#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_DEV=y
+CONFIG_VIDEO_V4L2_COMMON=y
CONFIG_VIDEO_ALLOW_V4L1=y
CONFIG_VIDEO_V4L1_COMPAT=y
CONFIG_DVB_CORE=m
@@ -1795,8 +1794,8 @@ CONFIG_MEDIA_TUNER_XC5000=m
CONFIG_MEDIA_TUNER_MXL5005S=m
CONFIG_MEDIA_TUNER_MXL5007T=m
CONFIG_MEDIA_TUNER_MC44S803=m
-CONFIG_VIDEO_V4L2=m
-CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_V4L1=y
CONFIG_VIDEOBUF_GEN=m
CONFIG_VIDEOBUF_DMA_SG=m
CONFIG_VIDEOBUF_VMALLOC=m
@@ -1808,36 +1807,78 @@ CONFIG_VIDEO_TUNER=m
CONFIG_VIDEO_CAPTURE_DRIVERS=y
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
CONFIG_VIDEO_IR_I2C=m
-CONFIG_VIDEO_TDA9840=m
-CONFIG_VIDEO_TEA6415C=m
-CONFIG_VIDEO_TEA6420=m
+
+#
+# Encoders/decoders and other helper chips
+#
+
+#
+# Audio decoders
+#
+# CONFIG_VIDEO_TVAUDIO is not set
+# CONFIG_VIDEO_TDA7432 is not set
+# CONFIG_VIDEO_TDA9840 is not set
+# CONFIG_VIDEO_TDA9875 is not set
+# CONFIG_VIDEO_TEA6415C is not set
+# CONFIG_VIDEO_TEA6420 is not set
CONFIG_VIDEO_MSP3400=m
CONFIG_VIDEO_CS5345=m
CONFIG_VIDEO_CS53L32A=m
CONFIG_VIDEO_M52790=m
+# CONFIG_VIDEO_TLV320AIC23B is not set
CONFIG_VIDEO_WM8775=m
CONFIG_VIDEO_WM8739=m
CONFIG_VIDEO_VP27SMPX=m
-CONFIG_VIDEO_SAA6588=m
-CONFIG_VIDEO_BT819=m
-CONFIG_VIDEO_BT856=m
-CONFIG_VIDEO_BT866=m
-CONFIG_VIDEO_KS0127=m
+
+#
+# RDS decoders
+#
+# CONFIG_VIDEO_SAA6588 is not set
+
+#
+# Video decoders
+#
+# CONFIG_VIDEO_ADV7180 is not set
+# CONFIG_VIDEO_BT819 is not set
+# CONFIG_VIDEO_BT856 is not set
+# CONFIG_VIDEO_BT866 is not set
+# CONFIG_VIDEO_KS0127 is not set
CONFIG_VIDEO_OV7670=m
-CONFIG_VIDEO_MT9V011=m
-CONFIG_VIDEO_SAA7110=m
+# CONFIG_VIDEO_MT9V011 is not set
+# CONFIG_VIDEO_TCM825X is not set
+# CONFIG_VIDEO_SAA7110 is not set
CONFIG_VIDEO_SAA711X=m
CONFIG_VIDEO_SAA717X=m
-CONFIG_VIDEO_TVP5150=m
-CONFIG_VIDEO_VPX3220=m
+# CONFIG_VIDEO_SAA7191 is not set
+# CONFIG_VIDEO_TVP514X is not set
+# CONFIG_VIDEO_TVP5150 is not set
+# CONFIG_VIDEO_VPX3220 is not set
+
+#
+# Video and audio decoders
+#
CONFIG_VIDEO_CX25840=m
+
+#
+# MPEG video encoders
+#
CONFIG_VIDEO_CX2341X=m
+
+#
+# Video encoders
+#
CONFIG_VIDEO_SAA7127=m
-CONFIG_VIDEO_SAA7185=m
-CONFIG_VIDEO_ADV7170=m
-CONFIG_VIDEO_ADV7175=m
+# CONFIG_VIDEO_SAA7185 is not set
+# CONFIG_VIDEO_ADV7170 is not set
+# CONFIG_VIDEO_ADV7175 is not set
+# CONFIG_VIDEO_THS7303 is not set
+# CONFIG_VIDEO_ADV7343 is not set
+
+#
+# Video improvement chips
+#
CONFIG_VIDEO_UPD64031A=m
CONFIG_VIDEO_UPD64083=m
# CONFIG_VIDEO_VIVI is not set
@@ -1877,7 +1918,7 @@ CONFIG_VIDEO_SAA7164=m
CONFIG_VIDEO_CAFE_CCIC=m
# CONFIG_SOC_CAMERA is not set
CONFIG_V4L_USB_DRIVERS=y
-CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS=y
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
CONFIG_USB_GSPCA=m
CONFIG_USB_M5602=m
@@ -2176,17 +2217,17 @@ CONFIG_DRM_KMS_HELPER=y
# CONFIG_DRM_I810 is not set
# CONFIG_DRM_I830 is not set
CONFIG_DRM_I915=y
-# CONFIG_DRM_I915_KMS is not set
+CONFIG_DRM_I915_KMS=y
# CONFIG_DRM_MGA is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_VIA is not set
# CONFIG_DRM_SAVAGE is not set
-CONFIG_VGASTATE=y
+# CONFIG_VGASTATE is not set
CONFIG_VIDEO_OUTPUT_CONTROL=y
CONFIG_FB=y
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB_DDC=y
-CONFIG_FB_BOOT_VESA_SUPPORT=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
@@ -2200,7 +2241,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_TILEBLITTING is not set
#
# Frame buffer hardware drivers
@@ -2211,16 +2252,14 @@ CONFIG_FB_TILEBLITTING=y
# CONFIG_FB_ARC is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not set
-CONFIG_FB_VGA16=y
-CONFIG_FB_VESA=y
+# CONFIG_FB_VGA16 is not set
+# CONFIG_FB_VESA is not set
# CONFIG_FB_N411 is not set
# CONFIG_FB_HGA is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_NVIDIA is not set
# CONFIG_FB_RIVA is not set
-CONFIG_FB_I810=y
-CONFIG_FB_I810_GTF=y
-CONFIG_FB_I810_I2C=y
+# CONFIG_FB_I810 is not set
# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX is not set
# CONFIG_FB_RADEON is not set
@@ -2269,19 +2308,11 @@ CONFIG_VGA_CONSOLE=y
# CONFIG_VGACON_SOFT_SCROLLBACK is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
# CONFIG_LOGO is not set
CONFIG_SOUND=y
CONFIG_SOUND_OSS_CORE=y
diff --git a/recipes/linux/linux-2.6.32/eee701/intelfb.patch b/recipes/linux/linux-2.6.32/eee701/intelfb.patch
new file mode 100644
index 0000000000..b723b52b99
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/eee701/intelfb.patch
@@ -0,0 +1,16 @@
+t a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
+index 371d753..aaabbcb 100644
+--- a/drivers/gpu/drm/i915/intel_fb.c
++++ b/drivers/gpu/drm/i915/intel_fb.c
+@@ -148,7 +148,7 @@ static int intelfb_create(struct drm_device *dev, uint32_t fb_width,
+
+ mutex_lock(&dev->struct_mutex);
+
+- ret = i915_gem_object_pin(fbo, PAGE_SIZE);
++ ret = i915_gem_object_pin(fbo, 64*1024);
+ if (ret) {
+ DRM_ERROR("failed to pin fb: %d\n", ret);
+ goto out_unref;
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0001-ts72xx_base.patch b/recipes/linux/linux-2.6.32/ts72xx/0001-ts72xx_base.patch
new file mode 100644
index 0000000000..f49d424129
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0001-ts72xx_base.patch
@@ -0,0 +1,446 @@
+From 69224adc54640f5fe47c5303ecbf99cb58ac8b43 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 16:48:52 +0100
+Subject: [PATCH] ts72xx_base
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+- patch: allow to force nF bit in control reg
+- small fix: drivers/input/keyboard/ep93xx_keypad.c
+- register pwm1
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/Kconfig | 1 +
+ arch/arm/include/asm/memory.h | 2 +
+ arch/arm/mach-ep93xx/Kconfig | 9 ++
+ arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h | 11 ++
+ arch/arm/mach-ep93xx/include/mach/memory.h | 28 +++++
+ arch/arm/mach-ep93xx/include/mach/ts72xx.h | 125 +++++++++++++++++++++--
+ arch/arm/mach-ep93xx/ts72xx.c | 40 +++++++-
+ arch/arm/mm/proc-arm920.S | 5 +-
+ drivers/input/keyboard/ep93xx_keypad.c | 1 +
+ 9 files changed, 210 insertions(+), 12 deletions(-)
+
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index 1c4119c..0f1d52f 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -288,6 +288,7 @@ config ARCH_EP93XX
+ select CPU_ARM920T
+ select ARM_AMBA
+ select ARM_VIC
++ select ARCH_SPARSEMEM_ENABLE
+ select GENERIC_GPIO
+ select HAVE_CLK
+ select COMMON_CLKDEV
+diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h
+index cefedf0..bc2ff8b 100644
+--- a/arch/arm/include/asm/memory.h
++++ b/arch/arm/include/asm/memory.h
+@@ -125,8 +125,10 @@
+ * private definitions which should NOT be used outside memory.h
+ * files. Use virt_to_phys/phys_to_virt/__pa/__va instead.
+ */
++#ifndef __virt_to_phys
+ #define __virt_to_phys(x) ((x) - PAGE_OFFSET + PHYS_OFFSET)
+ #define __phys_to_virt(x) ((x) - PHYS_OFFSET + PAGE_OFFSET)
++#endif
+
+ /*
+ * Convert a physical address to a Page Frame Number and back
+diff --git a/arch/arm/mach-ep93xx/Kconfig b/arch/arm/mach-ep93xx/Kconfig
+index 9167c3d..335b0bb 100644
+--- a/arch/arm/mach-ep93xx/Kconfig
++++ b/arch/arm/mach-ep93xx/Kconfig
+@@ -7,6 +7,15 @@ config CRUNCH
+ help
+ Enable kernel support for MaverickCrunch.
+
++config CR1_NFBIT
++ bool "Turn on nF bit in ControlRegister 1"
++ help
++ Say 'Y' here to force the nF bit on. Usually this is set
++ by the bootrom. If it is not set, then the CPU core will
++ run from HCLK instead of FCLK, and performance will suffer.
++ If you see BogoMIPS of about 1/4 of your CPU clock, try
++ turning this on; your performance should double.
++
+ comment "EP93xx Platforms"
+
+ choice
+diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+index b1f937e..358d8ff 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
++++ b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+@@ -111,16 +111,26 @@
+ #define EP93XX_I2S_BASE EP93XX_APB_IOMEM(0x00020000)
+
+ #define EP93XX_SECURITY_BASE EP93XX_APB_IOMEM(0x00030000)
++#define EP93XX_SECURITY_REG(x) (EP93XX_SECURITY_BASE + (x))
++#define EP93XX_SECURITY_UNIQID EP93XX_SECURITY_REG(0x2440)
+
+ #define EP93XX_GPIO_BASE EP93XX_APB_IOMEM(0x00040000)
+ #define EP93XX_GPIO_REG(x) (EP93XX_GPIO_BASE + (x))
+ #define EP93XX_GPIO_F_INT_STATUS EP93XX_GPIO_REG(0x5c)
++#define EP93XX_GPIO_F_INT_DEBOUNCE EP93XX_GPIO_REG(0x64)
+ #define EP93XX_GPIO_A_INT_STATUS EP93XX_GPIO_REG(0xa0)
++#define EP93XX_GPIO_A_INT_DEBOUNCE EP93XX_GPIO_REG(0xa8)
+ #define EP93XX_GPIO_B_INT_STATUS EP93XX_GPIO_REG(0xbc)
++#define EP93XX_GPIO_B_INT_DEBOUNCE EP93XX_GPIO_REG(0xc4)
+ #define EP93XX_GPIO_EEDRIVE EP93XX_GPIO_REG(0xc8)
+
++#define EP93XX_GPIO_A_DATA EP93XX_GPIO_REG(0x00)
++#define EP93XX_GPIO_A_DIRECTION EP93XX_GPIO_REG(0x10)
++#define EP93XX_GPIO_B_DATA EP93XX_GPIO_REG(0x04)
++
+ #define EP93XX_AAC_BASE EP93XX_APB_IOMEM(0x00080000)
+
++#define EP93XX_SPI_PHYS_BASE (EP93XX_APB_PHYS_BASE + 0x000a0000)
+ #define EP93XX_SPI_BASE EP93XX_APB_IOMEM(0x000a0000)
+
+ #define EP93XX_IRDA_BASE EP93XX_APB_IOMEM(0x000b0000)
+@@ -220,6 +230,7 @@
+ #define EP93XX_SYSCON_SYSCFG_LEECLK (1<<3)
+ #define EP93XX_SYSCON_SYSCFG_LCSN2 (1<<1)
+ #define EP93XX_SYSCON_SYSCFG_LCSN1 (1<<0)
++#define EP93XX_SYSCON_CHIPID EP93XX_SYSCON_REG(0x94)
+ #define EP93XX_SYSCON_SWLOCK EP93XX_SYSCON_REG(0xc0)
+
+ #define EP93XX_WATCHDOG_BASE EP93XX_APB_IOMEM(0x00140000)
+diff --git a/arch/arm/mach-ep93xx/include/mach/memory.h b/arch/arm/mach-ep93xx/include/mach/memory.h
+index 554064e..78eaacf 100644
+--- a/arch/arm/mach-ep93xx/include/mach/memory.h
++++ b/arch/arm/mach-ep93xx/include/mach/memory.h
+@@ -19,4 +19,32 @@
+ #error "Kconfig bug: No EP93xx PHYS_OFFSET set"
+ #endif
+
++/*
++ * Non-linear mapping like so:
++ * phys => virt
++ * 0x00000000 => 0xc0000000
++ * 0x01000000 => 0xc1000000
++ * 0x04000000 => 0xc4000000
++ * 0x05000000 => 0xc5000000
++ * 0xe0000000 => 0xc8000000
++ * 0xe1000000 => 0xc9000000
++ * 0xe4000000 => 0xcc000000
++ * 0xe5000000 => 0xcd000000
++ *
++ * As suggested here: http://marc.info/?l=linux-arm&m=122754446724900&w=2
++ *
++ * Note that static inline functions won't work here because
++ * arch/arm/include/asm/memory.h uses "#ifndef __virt_to_phys" to check whether to
++ * use generic functions or not.
++ */
++
++#define __phys_to_virt(p) \
++ (((p) & 0x07ffffff) | (((p) & 0xe0000000) ? 0x08000000 : 0) | PAGE_OFFSET)
++
++#define __virt_to_phys(v) \
++ (((v) & 0x07ffffff) | (((v) & 0x08000000) ? 0xe0000000 : 0 ))
++
++#define SECTION_SIZE_BITS 24
++#define MAX_PHYSMEM_BITS 32
++
+ #endif
+diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx.h b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+index 3bd934e..006c5a2 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ts72xx.h
++++ b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+@@ -8,21 +8,35 @@
+ * virt phys size
+ * febff000 22000000 4K model number register
+ * febfe000 22400000 4K options register
+- * febfd000 22800000 4K options register #2
++ * febfd000 22800000 4K options register #2 (JP6 and TS-9420 flags)
+ * febfc000 [67]0000000 4K NAND data register
+ * febfb000 [67]0400000 4K NAND control register
+ * febfa000 [67]0800000 4K NAND busy register
+ * febf9000 10800000 4K TS-5620 RTC index register
+ * febf8000 11700000 4K TS-5620 RTC data register
++ * febf7000 23800000 4K CPLD watchdog (control register)
++ * febf6000 23c00000 4K CPLD watchdog (feed register)
++ * febf5000 23400000 4K PLD version (3 bits)
++ * febf4000 22c00000 4K RS-485 control register
++ * febf3000 23000000 4K RS-485 mode register
++ * febf2000 10800000 4K jumpers/max197 busy bit/COM1 dcd register (8-bit, read only)
++ * febf1000 10f00000 4K max197 sample/control register (16-bit read/8-bit write)
++ * febf0000 11e00000 4K PC/104 8-bit I/O
++ * febef000 21e00000 4K PC/104 16-bit I/O
++ * fea00000 11a00000 1MB PC/104 8-bit memory
++ * fe900000 21a00000 1MB PC/104 16-bit memory
+ */
+
+ #define TS72XX_MODEL_PHYS_BASE 0x22000000
+ #define TS72XX_MODEL_VIRT_BASE 0xfebff000
+ #define TS72XX_MODEL_SIZE 0x00001000
+
+-#define TS72XX_MODEL_TS7200 0x00
+-#define TS72XX_MODEL_TS7250 0x01
+-#define TS72XX_MODEL_TS7260 0x02
++#define TS7XXX_MODEL_TS7200 0x00
++#define TS7XXX_MODEL_TS7250 0x01
++#define TS7XXX_MODEL_TS7260 0x02
++#define TS7XXX_MODEL_TS7300 0x03
++#define TS7XXX_MODEL_TS7400 0x04
++#define TS7XXX_MODEL_MASK 0x07
+
+
+ #define TS72XX_OPTIONS_PHYS_BASE 0x22400000
+@@ -50,12 +64,13 @@
+ #define TS72XX_NAND2_CONTROL_PHYS_BASE 0x70400000
+ #define TS72XX_NAND_CONTROL_VIRT_BASE 0xfebfb000
+ #define TS72XX_NAND_CONTROL_SIZE 0x00001000
++#define TS72XX_NAND_CONTROL_OFFSET 0x00400000
+
+ #define TS72XX_NAND1_BUSY_PHYS_BASE 0x60800000
+ #define TS72XX_NAND2_BUSY_PHYS_BASE 0x70800000
+ #define TS72XX_NAND_BUSY_VIRT_BASE 0xfebfa000
+ #define TS72XX_NAND_BUSY_SIZE 0x00001000
+-
++#define TS72XX_NAND_BUSY_OFFSET 0x00800000
+
+ #define TS72XX_RTC_INDEX_VIRT_BASE 0xfebf9000
+ #define TS72XX_RTC_INDEX_PHYS_BASE 0x10800000
+@@ -65,33 +80,123 @@
+ #define TS72XX_RTC_DATA_PHYS_BASE 0x11700000
+ #define TS72XX_RTC_DATA_SIZE 0x00001000
+
++#define TS72XX_WATCHDOG_CONTROL_VIRT_BASE 0xfebf7000
++#define TS72XX_WATCHDOG_CONTROL_PHYS_BASE 0x23800000
++#define TS72XX_WATCHDOG_CONTROL_SIZE 0x00001000
++
++#define TS72XX_WATCHDOG_FEED_VIRT_BASE 0xfebf6000
++#define TS72XX_WATCHDOG_FEED_PHYS_BASE 0x23c00000
++#define TS72XX_WATCHDOG_FEED_SIZE 0x00001000
++
++#define TS72XX_PLD_VERSION_VIRT_BASE 0xfebf5000
++#define TS72XX_PLD_VERSION_PHYS_BASE 0x23400000
++#define TS72XX_PLD_VERSION_SIZE 0x00001000
++
++#define TS72XX_RS485_CONTROL_VIRT_BASE 0xfebf4000
++#define TS72XX_RS485_CONTROL_PHYS_BASE 0x22c00000
++#define TS72XX_RS485_CONTROL_SIZE 0x00001000
++
++#define TS72XX_RS485_MODE_VIRT_BASE 0xfebf3000
++#define TS72XX_RS485_MODE_PHYS_BASE 0x23000000
++#define TS72XX_RS485_MODE_SIZE 0x00001000
++
++#define TS72XX_JUMPERS_MAX197_VIRT_BASE 0xfebf2000
++#define TS72XX_JUMPERS_MAX197_PHYS_BASE 0x10800000
++#define TS72XX_JUMPERS_MAX197_SIZE 0x00001000
++
++#define TS72XX_MAX197_SAMPLE_VIRT_BASE 0xfebf1000
++#define TS72XX_MAX197_SAMPLE_PHYS_BASE 0x10f00000
++#define TS72XX_MAX197_SAMPLE_SIZE 0x00001000
++
++#define TS72XX_RS485_AUTO485FD 1
++#define TS72XX_RS485_AUTO485HD 2
++#define TS72XX_RS485_MODE_RS232 0x00
++#define TS72XX_RS485_MODE_FD 0x01
++#define TS72XX_RS485_MODE_9600_HD 0x04
++#define TS72XX_RS485_MODE_19200_HD 0x05
++#define TS72XX_RS485_MODE_57600_HD 0x06
++#define TS72XX_RS485_MODE_115200_HD 0x07
++
++
++#define TS72XX_PC104_8BIT_IO_VIRT_BASE 0xfebf0000
++#define TS72XX_PC104_8BIT_IO_PHYS_BASE 0x11e00000
++#define TS72XX_PC104_8BIT_IO_SIZE 0x00001000
++#define TS72XX_PC104_8BIT_MEM_VIRT_BASE 0xfea00000
++#define TS72XX_PC104_8BIT_MEM_PHYS_BASE 0x11a00000
++#define TS72XX_PC104_8BIT_MEM_SIZE 0x00100000
++
++#define TS72XX_PC104_16BIT_IO_VIRT_BASE 0xfebef000
++#define TS72XX_PC104_16BIT_IO_PHYS_BASE 0x21e00000
++#define TS72XX_PC104_16BIT_IO_SIZE 0x00001000
++#define TS72XX_PC104_16BIT_MEM_VIRT_BASE 0xfe900000
++#define TS72XX_PC104_16BIT_MEM_PHYS_BASE 0x21a00000
++#define TS72XX_PC104_16BIT_MEM_SIZE 0x00100000
++
++/*
++ * TS7200 CF memory map:
++ *
++ * phys size description
++ * 11000000 7 CF registers (8-bit each), starting at 11000001
++ * 10400006 2 CF aux registers (8-bit)
++ * 21000000 2 CF data register (16-bit)
++ */
++
++#define TS7200_CF_CMD_PHYS_BASE 0x11000000
++#define TS7200_CF_AUX_PHYS_BASE 0x10400006
++#define TS7200_CF_DATA_PHYS_BASE 0x21000000
+
+ #ifndef __ASSEMBLY__
+
+ static inline int board_is_ts7200(void)
+ {
+- return __raw_readb(TS72XX_MODEL_VIRT_BASE) == TS72XX_MODEL_TS7200;
++ return (__raw_readb(TS72XX_MODEL_VIRT_BASE) &
++ TS7XXX_MODEL_MASK) == TS7XXX_MODEL_TS7200;
+ }
+
+ static inline int board_is_ts7250(void)
+ {
+- return __raw_readb(TS72XX_MODEL_VIRT_BASE) == TS72XX_MODEL_TS7250;
++ return (__raw_readb(TS72XX_MODEL_VIRT_BASE) &
++ TS7XXX_MODEL_MASK) == TS7XXX_MODEL_TS7250;
+ }
+
+ static inline int board_is_ts7260(void)
+ {
+- return __raw_readb(TS72XX_MODEL_VIRT_BASE) == TS72XX_MODEL_TS7260;
++ return (__raw_readb(TS72XX_MODEL_VIRT_BASE) &
++ TS7XXX_MODEL_MASK) == TS7XXX_MODEL_TS7260;
++}
++
++static inline int board_is_ts7400(void)
++{
++ return (__raw_readb(TS72XX_MODEL_VIRT_BASE) &
++ TS7XXX_MODEL_MASK) == TS7XXX_MODEL_TS7400;
+ }
+
+ static inline int is_max197_installed(void)
+ {
+ return !!(__raw_readb(TS72XX_OPTIONS_VIRT_BASE) &
+- TS72XX_OPTIONS_MAX197);
++ TS72XX_OPTIONS_MAX197);
+ }
+
+ static inline int is_ts9420_installed(void)
+ {
+ return !!(__raw_readb(TS72XX_OPTIONS2_VIRT_BASE) &
+- TS72XX_OPTIONS2_TS9420);
++ TS72XX_OPTIONS2_TS9420);
++}
++
++static inline int is_rs485_installed(void)
++{
++ return !!(__raw_readb(TS72XX_OPTIONS_VIRT_BASE) &
++ TS72XX_OPTIONS_COM2_RS485);
++}
++
++static inline int get_ts72xx_pld_version(void)
++{
++ return (__raw_readb(TS72XX_PLD_VERSION_VIRT_BASE) & 0x7);
++}
++
++/* User jumper */
++static inline int is_jp6_set(void)
++{
++ return (__raw_readb(TS72XX_OPTIONS2_VIRT_BASE) & 0x1);
+ }
+ #endif
+diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
+index 259f782..4a97ff7 100644
+--- a/arch/arm/mach-ep93xx/ts72xx.c
++++ b/arch/arm/mach-ep93xx/ts72xx.c
+@@ -51,7 +51,36 @@ static struct map_desc ts72xx_io_desc[] __initdata = {
+ .pfn = __phys_to_pfn(TS72XX_RTC_DATA_PHYS_BASE),
+ .length = TS72XX_RTC_DATA_SIZE,
+ .type = MT_DEVICE,
+- }
++ },
++ /* Use this for debug only. Each device will map its own PC/104 address space */
++ ///* PC/104 (8-bit) I/O bus */
++ //{
++ // .virtual = TS72XX_PC104_8BIT_IO_VIRT_BASE,
++ // .pfn = __phys_to_pfn(TS72XX_PC104_8BIT_IO_PHYS_BASE),
++ // .length = TS72XX_PC104_8BIT_IO_SIZE,
++ // .type = MT_DEVICE,
++ //},
++ ///* PC/104 (16-bit) I/O bus */
++ //{
++ // .virtual = TS72XX_PC104_16BIT_IO_VIRT_BASE,
++ // .pfn = __phys_to_pfn(TS72XX_PC104_16BIT_IO_PHYS_BASE),
++ // .length = TS72XX_PC104_16BIT_IO_SIZE,
++ // .type = MT_DEVICE,
++ //},
++ ///* PC/104 (8-bit) MEM bus */
++ //{
++ // .virtual = TS72XX_PC104_8BIT_MEM_VIRT_BASE,
++ // .pfn = __phys_to_pfn(TS72XX_PC104_8BIT_MEM_PHYS_BASE),
++ // .length = TS72XX_PC104_8BIT_MEM_SIZE,
++ // .type = MT_DEVICE,
++ //},
++ ///* PC/104 (16-bit) MEM bus */
++ //{
++ // .virtual = TS72XX_PC104_16BIT_MEM_VIRT_BASE,
++ // .pfn = __phys_to_pfn(TS72XX_PC104_16BIT_MEM_PHYS_BASE),
++ // .length = TS72XX_PC104_16BIT_MEM_SIZE,
++ // .type = MT_DEVICE,
++ //}
+ };
+
+ static struct map_desc ts72xx_nand_io_desc[] __initdata = {
+@@ -140,6 +169,9 @@ static void __init ts72xx_register_flash(void)
+ platform_device_register(&ts72xx_flash);
+ }
+
++/*************************************************************************
++ * RTC
++ *************************************************************************/
+ static unsigned char ts72xx_rtc_readbyte(unsigned long addr)
+ {
+ __raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE);
+@@ -166,6 +198,9 @@ static struct platform_device ts72xx_rtc_device = {
+ .num_resources = 0,
+ };
+
++/*************************************************************************
++ * Ethernet
++ *************************************************************************/
+ static struct ep93xx_eth_data ts72xx_eth_data = {
+ .phy_id = 1,
+ };
+@@ -177,6 +212,9 @@ static void __init ts72xx_init_machine(void)
+ platform_device_register(&ts72xx_rtc_device);
+
+ ep93xx_register_eth(&ts72xx_eth_data, 1);
++
++ /* PWM1 is DIO_6 on TS-72xx header */
++ ep93xx_register_pwm(0, 1);
+ }
+
+ MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC")
+diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S
+index 2b7c197..f85476b 100644
+--- a/arch/arm/mm/proc-arm920.S
++++ b/arch/arm/mm/proc-arm920.S
+@@ -198,7 +198,7 @@ ENTRY(arm920_coherent_kern_range)
+ */
+ ENTRY(arm920_coherent_user_range)
+ bic r0, r0, #CACHE_DLINESIZE - 1
+-1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry
++1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
+ mcr p15, 0, r0, c7, c5, 1 @ invalidate I entry
+ add r0, r0, #CACHE_DLINESIZE
+ cmp r0, r1
+@@ -373,6 +373,9 @@ __arm920_setup:
+ mrc p15, 0, r0, c1, c0 @ get control register v4
+ bic r0, r0, r5
+ orr r0, r0, r6
++#ifdef CONFIG_CR1_NFBIT
++ orr r0, r0, #0x40000000 @ set nF
++#endif
+ mov pc, lr
+ .size __arm920_setup, . - __arm920_setup
+
+diff --git a/drivers/input/keyboard/ep93xx_keypad.c b/drivers/input/keyboard/ep93xx_keypad.c
+index 181d30e..0012907 100644
+--- a/drivers/input/keyboard/ep93xx_keypad.c
++++ b/drivers/input/keyboard/ep93xx_keypad.c
+@@ -23,6 +23,7 @@
+ #include <linux/platform_device.h>
+ #include <linux/interrupt.h>
+ #include <linux/input.h>
++#include <linux/io.h>
+ #include <linux/clk.h>
+
+ #include <mach/hardware.h>
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0002-ts72xx_force_machine-id.patch b/recipes/linux/linux-2.6.32/ts72xx/0002-ts72xx_force_machine-id.patch
new file mode 100644
index 0000000000..5d14d93cc7
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0002-ts72xx_force_machine-id.patch
@@ -0,0 +1,50 @@
+From 88876d29c602759651b448912627ebfae9d12cf6 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:03:17 +0100
+Subject: [PATCH] ts72xx_force_machine-id
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/kernel/head.S | 3 +++
+ arch/arm/mach-ep93xx/Kconfig | 7 +++++++
+ 2 files changed, 10 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
+index 38ccbe1..c2e4514 100644
+--- a/arch/arm/kernel/head.S
++++ b/arch/arm/kernel/head.S
+@@ -82,6 +82,9 @@ ENTRY(stext)
+ bl __lookup_processor_type @ r5=procinfo r9=cpuid
+ movs r10, r5 @ invalid processor (r5=0)?
+ beq __error_p @ yes, error 'p'
++#ifdef CONFIG_MACH_TS72XX_FORCE_MACHINEID
++ ldr r1, =0x2a1
++#endif
+ bl __lookup_machine_type @ r5=machinfo
+ movs r8, r5 @ invalid machine (r5=0)?
+ beq __error_a @ yes, error 'a'
+diff --git a/arch/arm/mach-ep93xx/Kconfig b/arch/arm/mach-ep93xx/Kconfig
+index 335b0bb..049c9dd 100644
+--- a/arch/arm/mach-ep93xx/Kconfig
++++ b/arch/arm/mach-ep93xx/Kconfig
+@@ -191,6 +191,13 @@ config EP93XX_EARLY_UART3
+
+ endchoice
+
++config MACH_TS72XX_FORCE_MACHINEID
++ bool "Force Machine ID"
++ depends on MACH_TS72XX
++ help
++ Say 'Y' here to force Machine ID to 0x2A1 (MACH_TYPE_TS72XX legacy value)
++ In early days Technologic Systems fixed the 0x163 value in redboot.
++
+ endmenu
+
+ endif
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0003-ep93xx_cpuinfo.patch b/recipes/linux/linux-2.6.32/ts72xx/0003-ep93xx_cpuinfo.patch
new file mode 100644
index 0000000000..9f894f4458
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0003-ep93xx_cpuinfo.patch
@@ -0,0 +1,37 @@
+From 3ce6628293a97c7fcbec52d6889338d3dbdbd595 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:07:14 +0100
+Subject: [PATCH] ep93xx_cpuinfo
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/kernel/setup.c | 9 +++++++++
+ 1 files changed, 9 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
+index c6c57b6..29d5f4f 100644
+--- a/arch/arm/kernel/setup.c
++++ b/arch/arm/kernel/setup.c
+@@ -860,6 +860,15 @@ static int c_show(struct seq_file *m, void *v)
+ seq_puts(m, "\n");
+
+ seq_printf(m, "Hardware\t: %s\n", machine_name);
++
++ #if defined(CONFIG_ARCH_EP93XX)
++ #include <mach/io.h>
++ #include <mach/ep93xx-regs.h>
++ system_rev = *((unsigned int *)EP93XX_SYSCON_CHIPID) >> 28;
++ system_serial_low = *((unsigned int *)EP93XX_SECURITY_UNIQID);
++ system_serial_high = 0;
++ #endif
++
+ seq_printf(m, "Revision\t: %04x\n", system_rev);
+ seq_printf(m, "Serial\t\t: %08x%08x\n",
+ system_serial_high, system_serial_low);
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0004-ts72xx_sbcinfo.patch b/recipes/linux/linux-2.6.32/ts72xx/0004-ts72xx_sbcinfo.patch
new file mode 100644
index 0000000000..aa24abc0df
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0004-ts72xx_sbcinfo.patch
@@ -0,0 +1,226 @@
+From c46befec6d609225589895559e3ffa165368e90e Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:11:19 +0100
+Subject: [PATCH] ts72xx_sbcinfo
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/Kconfig | 7 ++
+ arch/arm/mach-ep93xx/Makefile | 1 +
+ arch/arm/mach-ep93xx/ts72xx.c | 5 +
+ arch/arm/mach-ep93xx/ts72xx_sbcinfo.c | 156 +++++++++++++++++++++++++++++++++
+ 4 files changed, 169 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/ts72xx_sbcinfo.c
+
+diff --git a/arch/arm/mach-ep93xx/Kconfig b/arch/arm/mach-ep93xx/Kconfig
+index 049c9dd..34d2c3b 100644
+--- a/arch/arm/mach-ep93xx/Kconfig
++++ b/arch/arm/mach-ep93xx/Kconfig
+@@ -198,6 +198,13 @@ config MACH_TS72XX_FORCE_MACHINEID
+ Say 'Y' here to force Machine ID to 0x2A1 (MACH_TYPE_TS72XX legacy value)
+ In early days Technologic Systems fixed the 0x163 value in redboot.
+
++config MACH_TS72XX_SBCINFO
++ tristate "Add procfs /proc/driver/sbcinfo"
++ depends on MACH_TS72XX
++ help
++ Say 'Y' to add a procfs entry containing some information
++ related to Technologic Systems TS-72xx SBC.
++
+ endmenu
+
+ endif
+diff --git a/arch/arm/mach-ep93xx/Makefile b/arch/arm/mach-ep93xx/Makefile
+index eae6199..c2451e6 100644
+--- a/arch/arm/mach-ep93xx/Makefile
++++ b/arch/arm/mach-ep93xx/Makefile
+@@ -11,3 +11,4 @@ obj-$(CONFIG_MACH_EDB93XX) += edb93xx.o
+ obj-$(CONFIG_MACH_GESBC9312) += gesbc9312.o
+ obj-$(CONFIG_MACH_MICRO9) += micro9.o
+ obj-$(CONFIG_MACH_TS72XX) += ts72xx.o
++obj-$(CONFIG_MACH_TS72XX_SBCINFO) += ts72xx_sbcinfo.o
+diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
+index 4a97ff7..2c0af20 100644
+--- a/arch/arm/mach-ep93xx/ts72xx.c
++++ b/arch/arm/mach-ep93xx/ts72xx.c
+@@ -32,6 +32,11 @@ static struct map_desc ts72xx_io_desc[] __initdata = {
+ .length = TS72XX_MODEL_SIZE,
+ .type = MT_DEVICE,
+ }, {
++ .virtual = TS72XX_PLD_VERSION_VIRT_BASE,
++ .pfn = __phys_to_pfn(TS72XX_PLD_VERSION_PHYS_BASE),
++ .length = TS72XX_PLD_VERSION_SIZE,
++ .type = MT_DEVICE,
++ }, {
+ .virtual = TS72XX_OPTIONS_VIRT_BASE,
+ .pfn = __phys_to_pfn(TS72XX_OPTIONS_PHYS_BASE),
+ .length = TS72XX_OPTIONS_SIZE,
+diff --git a/arch/arm/mach-ep93xx/ts72xx_sbcinfo.c b/arch/arm/mach-ep93xx/ts72xx_sbcinfo.c
+new file mode 100644
+index 0000000..4589d14
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/ts72xx_sbcinfo.c
+@@ -0,0 +1,156 @@
++/*
++ * Technologic Systems TS-72XX sbc /proc/driver/sbcinfo entry.
++ *
++ * Original idea by Liberty Young (Technologic Systems).
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/io.h>
++#include <linux/proc_fs.h>
++#include <mach/hardware.h>
++#include <mach/ts72xx.h>
++
++struct infos {
++ const char *cpu_rev;
++ int model, pld;
++ int option_ad;
++ int option_rs485;
++ unsigned char jumpers[6]; // 0=off,1=on,2=error
++};
++
++static const char *revisions[] = { "A", "B", "C", "D0", "D1", "E0", "E1", "E2", "??" };
++
++
++static void get_sbcinfo(struct infos *data)
++{
++ void __iomem *p;
++ short rev;
++
++ /* CPU revision */
++ rev = __raw_readl(EP93XX_SYSCON_CHIPID) >> 28;
++ if (rev > ARRAY_SIZE(revisions))
++ rev = ARRAY_SIZE(revisions) - 1;
++ data->cpu_rev = revisions[rev];
++
++ /* Board model */
++ if (board_is_ts7200())
++ data->model = 7200;
++ else if (board_is_ts7250())
++ data->model = 7250;
++ else if (board_is_ts7260())
++ data->model = 7260;
++ else if (board_is_ts7400())
++ data->model = 7400;
++ else
++ data->model = 0;
++
++ data->pld = get_ts72xx_pld_version();
++
++ /* A/D converter (8 x 12-bit channels) */
++ if ((data->model == 7200) || (data->model == 7250)) {
++ data->option_ad = is_max197_installed();
++ } else {
++ data->option_ad = 0;
++ }
++
++ /* COM2 RS-485 */
++ if (is_rs485_installed()) {
++ data->option_rs485 = 1;
++ } else {
++ data->option_rs485 = 0;
++ }
++
++ /* jumpers */
++ p = ioremap(TS72XX_JUMPERS_MAX197_PHYS_BASE, TS72XX_JUMPERS_MAX197_SIZE);
++ if (p) {
++ unsigned char c = __raw_readb(p);
++
++ data->jumpers[0] = 2; // JP1 (bootstrap)
++ data->jumpers[1] = !!(c & 0x01); // JP2 (enable serial console)
++ data->jumpers[2] = !!(c & 0x02); // JP3 (flash write enable)
++ data->jumpers[3] = !(c & 0x08); // JP4 (console on COM2)
++ data->jumpers[4] = !(c & 0x10); // JP5 (test)
++ data->jumpers[5] = !!(is_jp6_set()); // JP6 (user jumper)
++
++ iounmap(p);
++ } else {
++ data->jumpers[0] = data->jumpers[1] = data->jumpers[2] = 2;
++ data->jumpers[3] = data->jumpers[4] = data->jumpers[5] = 2;
++ }
++
++}
++
++
++static int ts72xx_sbcinfo_read_proc(char *buffer, char **start, off_t offset,
++ int count, int *eof, void *data)
++{
++ int len, size = count;
++ char *p = buffer;
++ struct infos nfo;
++ const char jpc[3] = { 'n', 'y', '?' };
++
++ get_sbcinfo(&nfo);
++ len = scnprintf(p, size,
++ "Model : TS-%d (CPU rev %s) (PLD rev %c)\n"
++ "Option max197 A/D : %s\n"
++ "Option RS-485 : %s\n"
++ "Jumpers : JP2=%c JP3=%c JP4=%c JP5=%c JP6=%c\n",
++ nfo.model, nfo.cpu_rev, nfo.pld + 0x40,
++ (nfo.option_ad ? "yes" : "no"),
++ (nfo.option_rs485 ? "yes" : "no"),
++ jpc[nfo.jumpers[1]], jpc[nfo.jumpers[2]], jpc[nfo.jumpers[3]], jpc[nfo.jumpers[4]],
++ jpc[nfo.jumpers[5]]);
++
++ if (len <= offset + count)
++ *eof = 1;
++
++ *start = buffer + offset;
++ len -= offset;
++
++ if (len > count)
++ len = count;
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++
++
++static int __init ts72xx_sbcinfo_init(void)
++{
++ struct proc_dir_entry *entry;
++ int ret = 0;
++
++ entry = create_proc_read_entry("driver/sbcinfo", 0,
++ NULL, ts72xx_sbcinfo_read_proc, NULL);
++
++ if (!entry) {
++ printk(KERN_ERR "sbcinfo: can't create /proc/driver/sbcinfo\n");
++ ret = -ENOMEM;
++ }
++
++ return ret;
++}
++
++static void __exit ts72xx_sbcinfo_exit(void)
++{
++ remove_proc_entry("driver/sbcinfo", NULL);
++ return;
++}
++
++module_init(ts72xx_sbcinfo_init);
++module_exit(ts72xx_sbcinfo_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("Show information of Technologic Systems TS-72XX sbc");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("1.02");
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0005-ep93xx_eth.patch b/recipes/linux/linux-2.6.32/ts72xx/0005-ep93xx_eth.patch
new file mode 100644
index 0000000000..0a4b9c4cbd
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0005-ep93xx_eth.patch
@@ -0,0 +1,540 @@
+From 260c46b5aebe614f8020b1b9a2a2fff4cbf85da4 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:45:23 +0100
+Subject: [PATCH] ep93xx_eth
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/net/arm/Kconfig | 1 +
+ drivers/net/arm/ep93xx_eth.c | 339 ++++++++++++++++++++++++++++++++++--------
+ 2 files changed, 278 insertions(+), 62 deletions(-)
+
+diff --git a/drivers/net/arm/Kconfig b/drivers/net/arm/Kconfig
+index c37ee9e..a5f2a98 100644
+--- a/drivers/net/arm/Kconfig
++++ b/drivers/net/arm/Kconfig
+@@ -52,6 +52,7 @@ config EP93XX_ETH
+ tristate "EP93xx Ethernet support"
+ depends on ARM && ARCH_EP93XX
+ select MII
++ select PHYLIB
+ help
+ This is a driver for the ethernet hardware included in EP93xx CPUs.
+ Say Y if you are building a kernel for EP93xx based devices.
+diff --git a/drivers/net/arm/ep93xx_eth.c b/drivers/net/arm/ep93xx_eth.c
+index b25467a..923a21b 100644
+--- a/drivers/net/arm/ep93xx_eth.c
++++ b/drivers/net/arm/ep93xx_eth.c
+@@ -2,6 +2,7 @@
+ * EP93xx ethernet network device driver
+ * Copyright (C) 2006 Lennert Buytenhek <buytenh@wantstofly.org>
+ * Dedicated to Marija Kulikova.
++ * Copyright (C) 2007 Herbert Valerio Riedel <hvr@gnu.org>
+ *
+ * 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
+@@ -14,6 +15,7 @@
+ #include <linux/kernel.h>
+ #include <linux/netdevice.h>
+ #include <linux/mii.h>
++#include <linux/phy.h>
+ #include <linux/etherdevice.h>
+ #include <linux/ethtool.h>
+ #include <linux/init.h>
+@@ -25,7 +27,7 @@
+ #include <asm/io.h>
+
+ #define DRV_MODULE_NAME "ep93xx-eth"
+-#define DRV_MODULE_VERSION "0.1"
++#define DRV_MODULE_VERSION "0.12"
+
+ #define RX_QUEUE_ENTRIES 64
+ #define TX_QUEUE_ENTRIES 8
+@@ -37,6 +39,8 @@
+ #define REG_RXCTL_DEFAULT 0x00073800
+ #define REG_TXCTL 0x0004
+ #define REG_TXCTL_ENABLE 0x00000001
++#define REG_TESTCTL 0x0008
++#define REG_TESTCTL_MFDX 0x00000040
+ #define REG_MIICMD 0x0010
+ #define REG_MIICMD_READ 0x00008000
+ #define REG_MIICMD_WRITE 0x00004000
+@@ -45,6 +49,9 @@
+ #define REG_MIISTS_BUSY 0x00000001
+ #define REG_SELFCTL 0x0020
+ #define REG_SELFCTL_RESET 0x00000001
++#define REG_SELFCTL_MDCDIV_MSK 0x00007e00
++#define REG_SELFCTL_MDCDIV_OFS 9
++#define REG_SELFCTL_PSPRS 0x00000100
+ #define REG_INTEN 0x0024
+ #define REG_INTEN_TX 0x00000008
+ #define REG_INTEN_RX 0x00000007
+@@ -174,8 +181,14 @@ struct ep93xx_priv
+
+ struct net_device_stats stats;
+
+- struct mii_if_info mii;
+ u8 mdc_divisor;
++ int phy_supports_mfps:1;
++
++ struct mii_bus mii_bus;
++ struct phy_device *phy_dev;
++ int speed;
++ int duplex;
++ int link;
+ };
+
+ #define rdb(ep, off) __raw_readb((ep)->base_addr + (off))
+@@ -185,8 +198,6 @@ struct ep93xx_priv
+ #define wrw(ep, off, val) __raw_writew((val), (ep)->base_addr + (off))
+ #define wrl(ep, off, val) __raw_writel((val), (ep)->base_addr + (off))
+
+-static int ep93xx_mdio_read(struct net_device *dev, int phy_id, int reg);
+-
+ static struct net_device_stats *ep93xx_get_stats(struct net_device *dev)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+@@ -522,6 +533,22 @@ err:
+ return 1;
+ }
+
++static int ep93xx_mdio_reset(struct mii_bus *bus)
++{
++ struct ep93xx_priv *ep = bus->priv;
++
++ u32 selfctl = rdl(ep, REG_SELFCTL);
++
++ selfctl &= ~(REG_SELFCTL_MDCDIV_MSK | REG_SELFCTL_PSPRS);
++
++ selfctl |= (ep->mdc_divisor - 1) << REG_SELFCTL_MDCDIV_OFS;
++ selfctl |= REG_SELFCTL_PSPRS;
++
++ wrl(ep, REG_SELFCTL, selfctl);
++
++ return 0;
++}
++
+ static int ep93xx_start_hw(struct net_device *dev)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+@@ -540,11 +567,8 @@ static int ep93xx_start_hw(struct net_device *dev)
+ return 1;
+ }
+
+- wrl(ep, REG_SELFCTL, ((ep->mdc_divisor - 1) << 9));
+-
+- /* Does the PHY support preamble suppress? */
+- if ((ep93xx_mdio_read(dev, ep->mii.phy_id, MII_BMSR) & 0x0040) != 0)
+- wrl(ep, REG_SELFCTL, ((ep->mdc_divisor - 1) << 9) | (1 << 8));
++ /* The reset cleared REG_SELFCTL, so set the MDC divisor again */
++ ep93xx_mdio_reset(&ep->mii_bus);
+
+ /* Receive descriptor ring. */
+ addr = ep->descs_dma_addr + offsetof(struct ep93xx_descs, rdesc);
+@@ -653,6 +677,8 @@ static int ep93xx_open(struct net_device *dev)
+
+ wrl(ep, REG_GIINTMSK, REG_GIINTMSK_ENABLE);
+
++ phy_start(ep->phy_dev);
++
+ netif_start_queue(dev);
+
+ return 0;
+@@ -665,6 +691,9 @@ static int ep93xx_close(struct net_device *dev)
+ napi_disable(&ep->napi);
+ netif_stop_queue(dev);
+
++ if (ep->phy_dev)
++ phy_stop(ep->phy_dev);
++
+ wrl(ep, REG_GIINTMSK, 0);
+ free_irq(ep->irq, dev);
+ ep93xx_stop_hw(dev);
+@@ -676,51 +705,83 @@ static int ep93xx_close(struct net_device *dev)
+ static int ep93xx_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+- struct mii_ioctl_data *data = if_mii(ifr);
+
+- return generic_mii_ioctl(&ep->mii, data, cmd, NULL);
++ return phy_mii_ioctl(ep->phy_dev, if_mii(ifr), cmd);
+ }
+
+-static int ep93xx_mdio_read(struct net_device *dev, int phy_id, int reg)
++/* common MII transactions should take < 100 iterations */
++#define EP93XX_PHY_TIMEOUT 2000
++
++static int ep93xx_mdio_wait(struct mii_bus *bus)
+ {
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- int data;
+- int i;
++ struct ep93xx_priv *ep = bus->priv;
++ unsigned int timeout = EP93XX_PHY_TIMEOUT;
+
+- wrl(ep, REG_MIICMD, REG_MIICMD_READ | (phy_id << 5) | reg);
++ while ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY)
++ && timeout--)
++ cpu_relax();
+
+- for (i = 0; i < 10; i++) {
+- if ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY) == 0)
+- break;
+- msleep(1);
++ if (timeout <= 0) {
++ dev_err(&bus->dev, "MII operation timed out\n");
++ return -ETIMEDOUT;
+ }
+
+- if (i == 10) {
+- printk(KERN_INFO DRV_MODULE_NAME ": mdio read timed out\n");
+- data = 0xffff;
+- } else {
+- data = rdl(ep, REG_MIIDATA);
+- }
++ return 0;
++}
++
++static int ep93xx_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
++{
++ struct ep93xx_priv *ep = bus->priv;
++ u32 selfctl;
++ u32 data;
++
++ if (ep93xx_mdio_wait(bus) < 0)
++ return -ETIMEDOUT;
++
++ selfctl = rdl(ep, REG_SELFCTL);
++
++ if (ep->phy_supports_mfps)
++ wrl(ep, REG_SELFCTL, selfctl | REG_SELFCTL_PSPRS);
++ else
++ wrl(ep, REG_SELFCTL, selfctl & ~REG_SELFCTL_PSPRS);
++
++ wrl(ep, REG_MIICMD, REG_MIICMD_READ | (mii_id << 5) | regnum);
++
++ if (ep93xx_mdio_wait(bus) < 0)
++ return -ETIMEDOUT;
++
++ data = rdl(ep, REG_MIIDATA);
++
++ wrl(ep, REG_SELFCTL, selfctl);
+
+ return data;
+ }
+
+-static void ep93xx_mdio_write(struct net_device *dev, int phy_id, int reg, int data)
++static int ep93xx_mdio_write(struct mii_bus *bus, int mii_id, int regnum,
++ u16 value)
+ {
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- int i;
++ struct ep93xx_priv *ep = bus->priv;
++ u32 selfctl;
+
+- wrl(ep, REG_MIIDATA, data);
+- wrl(ep, REG_MIICMD, REG_MIICMD_WRITE | (phy_id << 5) | reg);
++ if (ep93xx_mdio_wait(bus) < 0)
++ return -ETIMEDOUT;
+
+- for (i = 0; i < 10; i++) {
+- if ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY) == 0)
+- break;
+- msleep(1);
+- }
++ selfctl = rdl(ep, REG_SELFCTL);
+
+- if (i == 10)
+- printk(KERN_INFO DRV_MODULE_NAME ": mdio write timed out\n");
++ if (ep->phy_supports_mfps)
++ wrl(ep, REG_SELFCTL, selfctl | REG_SELFCTL_PSPRS);
++ else
++ wrl(ep, REG_SELFCTL, selfctl & ~REG_SELFCTL_PSPRS);
++
++ wrl(ep, REG_MIIDATA, value);
++ wrl(ep, REG_MIICMD, REG_MIICMD_WRITE | (mii_id << 5) | regnum);
++
++ if (ep93xx_mdio_wait(bus) < 0)
++ return -ETIMEDOUT;
++
++ wrl(ep, REG_SELFCTL, selfctl);
++
++ return 0;
+ }
+
+ static void ep93xx_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
+@@ -732,33 +793,30 @@ static void ep93xx_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *i
+ static int ep93xx_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_ethtool_gset(&ep->mii, cmd);
++ struct phy_device *phydev = ep->phy_dev;
++
++ if (!phydev)
++ return -ENODEV;
++
++ return phy_ethtool_gset(phydev, cmd);
+ }
+
+ static int ep93xx_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_ethtool_sset(&ep->mii, cmd);
+-}
++ struct phy_device *phydev = ep->phy_dev;
+
+-static int ep93xx_nway_reset(struct net_device *dev)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_nway_restart(&ep->mii);
+-}
++ if (!phydev)
++ return -ENODEV;
+
+-static u32 ep93xx_get_link(struct net_device *dev)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_link_ok(&ep->mii);
++ return phy_ethtool_sset(phydev, cmd);
+ }
+
+ static const struct ethtool_ops ep93xx_ethtool_ops = {
+ .get_drvinfo = ep93xx_get_drvinfo,
+ .get_settings = ep93xx_get_settings,
+ .set_settings = ep93xx_set_settings,
+- .nway_reset = ep93xx_nway_reset,
+- .get_link = ep93xx_get_link,
++ .get_link = ethtool_op_get_link,
+ };
+
+ static const struct net_device_ops ep93xx_netdev_ops = {
+@@ -820,12 +878,122 @@ static int ep93xx_eth_remove(struct platform_device *pdev)
+ return 0;
+ }
+
++static void ep93xx_adjust_link(struct net_device *dev)
++{
++ struct ep93xx_priv *ep = netdev_priv(dev);
++ struct phy_device *phydev = ep->phy_dev;
++
++ int status_change = 0;
++
++ if (phydev->link) {
++ if ((ep->speed != phydev->speed) ||
++ (ep->duplex != phydev->duplex)) {
++ /* speed and/or duplex state changed */
++ u32 testctl = rdl(ep, REG_TESTCTL);
++
++ if (DUPLEX_FULL == phydev->duplex)
++ testctl |= REG_TESTCTL_MFDX;
++ else
++ testctl &= ~(REG_TESTCTL_MFDX);
++
++ wrl(ep, REG_TESTCTL, testctl);
++
++ ep->speed = phydev->speed;
++ ep->duplex = phydev->duplex;
++ status_change = 1;
++ }
++ }
++
++ /* test for online/offline link transition */
++ if (phydev->link != ep->link) {
++ if (phydev->link) /* link went online */
++ netif_tx_schedule_all(dev);
++ else { /* link went offline */
++ ep->speed = 0;
++ ep->duplex = -1;
++ }
++ ep->link = phydev->link;
++
++ status_change = 1;
++ }
++
++ if (status_change)
++ phy_print_status(phydev);
++}
++
++static int ep93xx_mii_probe(struct net_device *dev, int phy_addr)
++{
++ struct ep93xx_priv *ep = netdev_priv(dev);
++ struct phy_device *phydev = NULL;
++ int val;
++
++ if (phy_addr >= 0 && phy_addr < PHY_MAX_ADDR)
++ phydev = ep->mii_bus.phy_map[phy_addr];
++
++ if (!phydev) {
++ dev_info(&dev->dev,
++ "PHY not found at specified address,"
++ " trying autodetection\n");
++
++ /* find the first phy */
++ for (phy_addr = 0; phy_addr < PHY_MAX_ADDR; phy_addr++) {
++ if (ep->mii_bus.phy_map[phy_addr]) {
++ phydev = ep->mii_bus.phy_map[phy_addr];
++ break;
++ }
++ }
++ }
++
++ if (!phydev) {
++ dev_err(&dev->dev, "no PHY found\n");
++ return -ENODEV;
++ }
++
++ phydev = phy_connect(dev, dev_name(&phydev->dev),
++ ep93xx_adjust_link, 0, PHY_INTERFACE_MODE_MII);
++
++ if (IS_ERR(phydev)) {
++ dev_err(&dev->dev, "Could not attach to PHY\n");
++ return PTR_ERR(phydev);
++ }
++
++ ep->phy_supports_mfps = 0;
++
++ val = phy_read(phydev, MII_BMSR);
++ if (val < 0) {
++ dev_err(&phydev->dev, "failed to read MII register\n");
++ return val;
++ }
++
++ if (val & 0x0040) {
++ dev_info(&phydev->dev,
++ "PHY supports MII frame preamble suppression\n");
++ ep->phy_supports_mfps = 1;
++ }
++
++ phydev->supported &= PHY_BASIC_FEATURES;
++
++ phydev->advertising = phydev->supported;
++
++ ep->link = 0;
++ ep->speed = 0;
++ ep->duplex = -1;
++ ep->phy_dev = phydev;
++
++ dev_info(&dev->dev, "attached PHY driver [%s] "
++ "(mii_bus:phy_addr=%s, irq=%d)\n",
++ phydev->drv->name, dev_name(&phydev->dev), phydev->irq);
++
++ return 0;
++}
++
+ static int ep93xx_eth_probe(struct platform_device *pdev)
+ {
+ struct ep93xx_eth_data *data;
+ struct net_device *dev;
+ struct ep93xx_priv *ep;
+- int err;
++ DECLARE_MAC_BUF(mac_buf);
++ int err, i;
+
+ if (pdev == NULL)
+ return -ENODEV;
+@@ -848,7 +1016,7 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
+ if (ep->res == NULL) {
+ dev_err(&pdev->dev, "Could not reserve memory region\n");
+ err = -ENOMEM;
+- goto err_out;
++ goto err_out_request_mem_region;
+ }
+
+ ep->base_addr = ioremap(pdev->resource[0].start,
+@@ -856,17 +1024,36 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
+ if (ep->base_addr == NULL) {
+ dev_err(&pdev->dev, "Failed to ioremap ethernet registers\n");
+ err = -EIO;
+- goto err_out;
++ goto err_out_ioremap;
+ }
+ ep->irq = pdev->resource[1].start;
+
+- ep->mii.phy_id = data->phy_id;
+- ep->mii.phy_id_mask = 0x1f;
+- ep->mii.reg_num_mask = 0x1f;
+- ep->mii.dev = dev;
+- ep->mii.mdio_read = ep93xx_mdio_read;
+- ep->mii.mdio_write = ep93xx_mdio_write;
++ /* mdio/mii bus */
++ ep->mii_bus.state = MDIOBUS_ALLOCATED; /* see mdiobus_alloc */
++ ep->mii_bus.name = "ep93xx_mii_bus";
++ snprintf(ep->mii_bus.id, MII_BUS_ID_SIZE, "0");
++
++ ep->mii_bus.read = ep93xx_mdio_read;
++ ep->mii_bus.write = ep93xx_mdio_write;
++ ep->mii_bus.reset = ep93xx_mdio_reset;
++
++ ep->mii_bus.phy_mask = 0;
++
++ ep->mii_bus.priv = ep;
++ ep->mii_bus.dev = dev->dev;
++
++ ep->mii_bus.irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
++ if (NULL == ep->mii_bus.irq) {
++ dev_err(&pdev->dev, "Could not allocate memory\n");
++ err = -ENOMEM;
++ goto err_out_mii_bus_irq_kmalloc;
++ }
++
++ for (i = 0; i < PHY_MAX_ADDR; i++)
++ ep->mii_bus.irq[i] = PHY_POLL;
++
+ ep->mdc_divisor = 40; /* Max HCLK 100 MHz, min MDIO clk 2.5 MHz. */
++ ep->phy_supports_mfps = 0; /* probe without preamble suppression */
+
+ if (is_zero_ether_addr(dev->dev_addr))
+ random_ether_addr(dev->dev_addr);
+@@ -874,7 +1061,7 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
+ err = register_netdev(dev);
+ if (err) {
+ dev_err(&pdev->dev, "Failed to register netdev\n");
+- goto err_out;
++ goto err_out_register_netdev;
+ }
+
+ printk(KERN_INFO "%s: ep93xx on-chip ethernet, IRQ %d, "
+@@ -883,8 +1070,36 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
+ data->dev_addr[2], data->dev_addr[3],
+ data->dev_addr[4], data->dev_addr[5]);
+
++ err = mdiobus_register(&ep->mii_bus);
++ if (err) {
++ dev_err(&dev->dev, "Could not register MII bus\n");
++ goto err_out_mdiobus_register;
++ }
++
++ err = ep93xx_mii_probe(dev, data->phy_id);
++ if (err) {
++ dev_err(&dev->dev, "failed to probe MII bus\n");
++ goto err_out_mii_probe;
++ }
++
++ dev_info(&dev->dev, "ep93xx on-chip ethernet, IRQ %d, %s\n",
++ ep->irq, print_mac(mac_buf, dev->dev_addr));
++
+ return 0;
+
++err_out_mii_probe:
++ mdiobus_unregister(&ep->mii_bus);
++err_out_mdiobus_register:
++ unregister_netdev(dev);
++err_out_register_netdev:
++ kfree(ep->mii_bus.irq);
++err_out_mii_bus_irq_kmalloc:
++ iounmap(ep->base_addr);
++err_out_ioremap:
++ release_resource(ep->res);
++ kfree(ep->res);
++err_out_request_mem_region:
++ free_netdev(dev);
+ err_out:
+ ep93xx_eth_remove(pdev);
+ return err;
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0006-ts72xx_ts_ser1.patch b/recipes/linux/linux-2.6.32/ts72xx/0006-ts72xx_ts_ser1.patch
new file mode 100644
index 0000000000..7443d6c64b
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0006-ts72xx_ts_ser1.patch
@@ -0,0 +1,216 @@
+From eb753556815cde046e35d206880a507eb052ac4e Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:52:13 +0100
+Subject: [PATCH] ts72xx_ts_ser1
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/serial/8250_ts_ser1.c | 150 +++++++++++++++++++++++++++++++++++++++++
+ drivers/serial/Kconfig | 17 +++++
+ drivers/serial/Makefile | 1 +
+ 3 files changed, 168 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/serial/8250_ts_ser1.c
+
+diff --git a/drivers/serial/8250_ts_ser1.c b/drivers/serial/8250_ts_ser1.c
+new file mode 100644
+index 0000000..a3c95d4
+--- /dev/null
++++ b/drivers/serial/8250_ts_ser1.c
+@@ -0,0 +1,150 @@
++/*
++ * linux/drivers/serial/8250_ts_ser1.c
++ * Technologic Systems TS-SER1 support.
++ *
++ * (c) Copyright 2006-2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Data taken from include/asm-i386/serial.h
++ *
++ * 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.
++ *
++ * Pin Number:
++ * 1 DCD
++ * 2 Receive data
++ * 3 Trasmit data
++ * 4 DTR
++ * 5 Signal Ground
++ * 6 DSR
++ * 7 RTS
++ * 8 CTS
++ * 9 RI
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/serial_8250.h>
++#include <linux/irq.h>
++#include <linux/io.h>
++#include <mach/hardware.h>
++#include <mach/ts72xx.h>
++#include <mach/gpio.h>
++
++
++#define TS72XX_SER1_IO_PHYS_BASE (TS72XX_PC104_8BIT_IO_PHYS_BASE)
++#define TS72XX_SER1_IO_SIZE (TS72XX_PC104_8BIT_IO_SIZE)
++
++#define TS_SER1_PORT_COM3 0x3E8
++#define TS_SER1_PORT_COM4 0x2E8
++#define TS_SER1_PORT_COM5 0x3A8
++
++/* Value to write in 16550A scratch register */
++#define MARKER_BYTE 0xAA /* or 0x55 */
++
++#define PORT(_base,_irq) \
++ { \
++ .iobase = _base, \
++ .membase = (void __iomem *)0, \
++ .irq = _irq, \
++ .uartclk = 1843200, \
++ .iotype = UPIO_PORT, \
++ .flags = UPF_BOOT_AUTOCONF, \
++ }
++// Note: IRQ can be shared (see CONFIG_SERIAL_8250_SHARE_IRQ)
++
++
++static struct plat_serial8250_port ts72xx_ser1_data_com3[] = {
++ PORT(TS_SER1_PORT_COM3, 0),
++ { },
++};
++
++static struct plat_serial8250_port ts72xx_ser1_data_com4[] = {
++ PORT(TS_SER1_PORT_COM4, 0),
++ { },
++};
++
++static struct plat_serial8250_port ts72xx_ser1_data_com5[] = {
++ PORT(TS_SER1_PORT_COM5, 0),
++ { },
++};
++
++static struct platform_device ts72xx_ser1_device = {
++ .name = "serial8250",
++ .id = 0,
++ .dev = {
++ .platform_data = ts72xx_ser1_data_com3,
++ },
++};
++
++static void __iomem *iomem;
++
++
++static int __init ts_ser1_init(void)
++{
++ static struct plat_serial8250_port *comX = NULL;
++ int n = 0; // COM number as printed on TS-SER1 pcb
++
++ iomem = ioremap(TS72XX_SER1_IO_PHYS_BASE, TS72XX_SER1_IO_SIZE);
++
++ if (iomem != NULL) {
++ __raw_writeb(MARKER_BYTE, iomem + TS_SER1_PORT_COM3 + 7);
++ if (__raw_readb(iomem + TS_SER1_PORT_COM3 + 7) == MARKER_BYTE) {
++ comX = ts72xx_ser1_data_com3;
++ n = 3;
++ } else {
++ __raw_writeb(MARKER_BYTE, iomem + TS_SER1_PORT_COM4 + 7);
++ if (__raw_readb(iomem + TS_SER1_PORT_COM4 + 7) == MARKER_BYTE) {
++ comX = ts72xx_ser1_data_com4;
++ n = 4;
++ } else {
++ __raw_writeb(MARKER_BYTE, iomem + TS_SER1_PORT_COM5 + 7);
++ if (__raw_readb(iomem + TS_SER1_PORT_COM5 + 7) == MARKER_BYTE) {
++ comX = ts72xx_ser1_data_com5;
++ n = 5;
++ }
++ }
++ }
++
++ if (comX) {
++ #if CONFIG_SERIAL_8250_TS_SER1_IRQ == 5
++ gpio_direction_input(EP93XX_GPIO_LINE_F(3));
++ comX->irq = gpio_to_irq(EP93XX_GPIO_LINE_F(3)); // 83
++ set_irq_type(comX->irq, IRQ_TYPE_EDGE_RISING);
++ #elif CONFIG_SERIAL_8250_TS_SER1_IRQ == 6
++ comX->irq = IRQ_EP93XX_EXT1;
++ #elif CONFIG_SERIAL_8250_TS_SER1_IRQ == 7
++ comX->irq = IRQ_EP93XX_EXT3;
++ #else
++ comX->irq = IRQ_EP93XX_EXT3;
++ #endif
++
++ comX->iobase += (unsigned long)iomem; // virtual address
++ }
++
++ ts72xx_ser1_device.id = n;
++ ts72xx_ser1_device.dev.platform_data = comX;
++ }
++
++ return ((comX == NULL) ? -ENODEV :
++ platform_device_register(&ts72xx_ser1_device));
++}
++
++static void __exit ts_ser1_exit(void)
++{
++ iounmap(iomem);
++ platform_device_unregister(&ts72xx_ser1_device);
++}
++
++module_init(ts_ser1_init);
++module_exit(ts_ser1_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("8250 serial probe module for TS-SER1 (TS-72xx)");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.3");
+diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
+index e522572..0eeca06 100644
+--- a/drivers/serial/Kconfig
++++ b/drivers/serial/Kconfig
+@@ -275,6 +275,23 @@ config SERIAL_8250_RM9K
+ port hardware found on MIPS RM9122 and similar processors.
+ If unsure, say N.
+
++config SERIAL_8250_TS_SER1
++ tristate "Support TS-SER1 (for TS-72XX SBC)"
++ depends on SERIAL_8250 != n && MACH_TS72XX
++ help
++ Say Y here if you have a TS-SER1 PC/104 peripheral.
++ COM number will be configured automaticaly.
++
++ To compile this driver as a module, choose M here: the module
++ will be called 8250_ts_ser1.
++
++config SERIAL_8250_TS_SER1_IRQ
++ int "Selected IRQ (5, 6 or 7)"
++ depends on SERIAL_8250_TS_SER1
++ default "5"
++ help
++ Enter jumper IRQ configuration
++
+ comment "Non-8250 serial port support"
+
+ config SERIAL_AMBA_PL010
+diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
+index d21d5dd..f8fdb4f 100644
+--- a/drivers/serial/Makefile
++++ b/drivers/serial/Makefile
+@@ -28,6 +28,7 @@ obj-$(CONFIG_SERIAL_8250_BOCA) += 8250_boca.o
+ obj-$(CONFIG_SERIAL_8250_EXAR_ST16C554) += 8250_exar_st16c554.o
+ obj-$(CONFIG_SERIAL_8250_HUB6) += 8250_hub6.o
+ obj-$(CONFIG_SERIAL_8250_MCA) += 8250_mca.o
++obj-$(CONFIG_SERIAL_8250_TS_SER1) += 8250_ts_ser1.o
+ obj-$(CONFIG_SERIAL_AMBA_PL010) += amba-pl010.o
+ obj-$(CONFIG_SERIAL_AMBA_PL011) += amba-pl011.o
+ obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0007-ts72xx_rs485.patch b/recipes/linux/linux-2.6.32/ts72xx/0007-ts72xx_rs485.patch
new file mode 100644
index 0000000000..437a99abf8
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0007-ts72xx_rs485.patch
@@ -0,0 +1,236 @@
+From 406bb1336e9e5401adc61a0227f9bfc5f5a1ef5a Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:54:33 +0100
+Subject: [PATCH] ts72xx_rs485
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Crude hack...
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/include/asm/ioctls.h | 3 +
+ drivers/serial/Kconfig | 8 +++
+ drivers/serial/amba-pl010.c | 137 +++++++++++++++++++++++++++++++++++++++--
+ 3 files changed, 142 insertions(+), 6 deletions(-)
+
+diff --git a/arch/arm/include/asm/ioctls.h b/arch/arm/include/asm/ioctls.h
+index a91d8a1..a4b60ae 100644
+--- a/arch/arm/include/asm/ioctls.h
++++ b/arch/arm/include/asm/ioctls.h
+@@ -70,6 +70,9 @@
+ #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
+ #define FIOQSIZE 0x545E
+
++#define TIOC_SBCC485 0x545F /* TS72xx RTS/485 mode clear */
++#define TIOC_SBCS485 0x5460 /* TS72xx RTS/485 mode set */
++
+ /* Used for packet mode */
+ #define TIOCPKT_DATA 0
+ #define TIOCPKT_FLUSHREAD 1
+diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
+index 0eeca06..ff24f69 100644
+--- a/drivers/serial/Kconfig
++++ b/drivers/serial/Kconfig
+@@ -321,6 +321,14 @@ config SERIAL_AMBA_PL010_CONSOLE
+ your boot loader (lilo or loadlin) about how to pass options to the
+ kernel at boot time.)
+
++config SERIAL_AMBA_PL010_TS72XX
++ bool "Support for RS-485 on AMBA serial port (for TS-72XX SBC)"
++ depends on SERIAL_AMBA_PL010 != n && MACH_TS72XX
++ help
++ This add support for RS-485 on some Technologic System SBC.
++
++ If unsure, say N.
++
+ config SERIAL_AMBA_PL011
+ tristate "ARM AMBA PL011 serial port support"
+ depends on ARM_AMBA
+diff --git a/drivers/serial/amba-pl010.c b/drivers/serial/amba-pl010.c
+index 429a8ae..aff4d9c 100644
+--- a/drivers/serial/amba-pl010.c
++++ b/drivers/serial/amba-pl010.c
+@@ -50,6 +50,10 @@
+
+ #include <asm/io.h>
+
++#if defined(CONFIG_SERIAL_AMBA_PL010_TS72XX)
++#include <mach/ts72xx.h>
++#endif
++
+ #define UART_NR 8
+
+ #define SERIAL_AMBA_MAJOR 204
+@@ -64,6 +68,12 @@
+ #define UART_DUMMY_RSR_RX 256
+ #define UART_PORT_SIZE 64
+
++#if defined(CONFIG_SERIAL_AMBA_PL010_TS72XX)
++static void __iomem *ts_rs485_data9_register;
++static void __iomem *ts_rs485_control_register;
++#endif
++
++
+ /*
+ * We wrap our port structure around the generic uart_port.
+ */
+@@ -385,7 +395,7 @@ pl010_set_termios(struct uart_port *port, struct ktermios *termios,
+ /*
+ * Ask the core to calculate the divisor for us.
+ */
+- baud = uart_get_baud_rate(port, termios, old, 0, uap->port.uartclk/16);
++ baud = uart_get_baud_rate(port, termios, old, 0, uap->port.uartclk/16);
+ quot = uart_get_divisor(port, baud);
+
+ switch (termios->c_cflag & CSIZE) {
+@@ -519,6 +529,107 @@ static int pl010_verify_port(struct uart_port *port, struct serial_struct *ser)
+ return ret;
+ }
+
++
++#if defined(CONFIG_SERIAL_AMBA_PL010_TS72XX)
++static int ts72xx_rs485_init(void)
++{
++ ts_rs485_data9_register = ioremap(TS72XX_RS485_MODE_PHYS_BASE, 4096);
++ if (ts_rs485_data9_register == NULL) {
++ return -1;
++ }
++
++ ts_rs485_control_register = ioremap(TS72XX_RS485_CONTROL_PHYS_BASE, 4096);
++ if (ts_rs485_control_register == NULL) {
++ iounmap(ts_rs485_data9_register);
++ return -1;
++ }
++
++ return 0;
++}
++
++static int ts72xx_auto485(struct uart_port *port, unsigned int cmd, unsigned long *arg)
++{
++ int baud, cflag, mode;
++ int datalength;
++
++ mode = (int)*arg;
++ if (!is_rs485_installed()) {
++ printk("amba-pl010.c: this board does not support RS485 auto mode\n");
++ return -EINVAL;
++ }
++
++ if (port->line != 1) {
++ printk("amba-pl010.c: auto RS485 mode is only supported on second port (/dev/ttyAM1)\n");
++ return -EINVAL;
++ }
++
++ datalength = 8;
++ cflag = port->state->port.tty->termios->c_cflag;
++ if (cflag & PARENB)
++ datalength++;
++
++ if (cflag & CSTOPB)
++ datalength++;
++
++ baud = tty_get_baud_rate(port->state->port.tty);
++
++ switch (cmd) {
++ case TIOC_SBCC485:
++ if ((mode & TS72XX_RS485_AUTO485FD) || (mode & TS72XX_RS485_AUTO485HD)) {
++ printk("amba-pl010.c: unsetting auto RS485 mode\n");
++ __raw_writew(TS72XX_RS485_MODE_RS232, ts_rs485_control_register);
++ __raw_writew(TS72XX_RS485_MODE_RS232, ts_rs485_data9_register);
++ }
++ break;
++ case TIOC_SBCS485:
++ if (mode & TS72XX_RS485_AUTO485FD) {
++ printk ("amba-pl010.c: setting FULL duplex auto RS485 mode\n");
++ __raw_writew(TS72XX_RS485_MODE_FD, ts_rs485_control_register);
++ if (datalength > 8)
++ __raw_writew(TS72XX_RS485_MODE_FD, ts_rs485_data9_register);
++ } else if (mode & TS72XX_RS485_AUTO485HD) {
++ printk("amba-pl010.c: setting HALF DUPLEX auto RS485 mode\n");
++ switch (baud) {
++ case 9600:
++ __raw_writew(TS72XX_RS485_MODE_9600_HD, ts_rs485_control_register);
++ break;
++ case 19200:
++ __raw_writew(TS72XX_RS485_MODE_19200_HD, ts_rs485_control_register);
++ break;
++ case 57600:
++ __raw_writew(TS72XX_RS485_MODE_57600_HD, ts_rs485_control_register);
++ break;
++ case 115200:
++ __raw_writew(TS72XX_RS485_MODE_115200_HD, ts_rs485_control_register);
++ break;
++ default:
++ printk("amba-pl010.c: %d baud rate is not supported for auto RS485 mode\n", baud);
++ return -1;
++ }
++ if (datalength > 8)
++ __raw_writew(TS72XX_RS485_MODE_FD, ts_rs485_data9_register);
++ }
++ break;
++ }
++
++ return 0;
++}
++
++static int pl010_ioctl(struct uart_port *port, unsigned int cmd, unsigned long arg)
++{
++ switch (cmd) {
++ case TIOC_SBCC485:
++ case TIOC_SBCS485:
++ return ts72xx_auto485(port, cmd, (unsigned long *)arg);
++ default:
++ return -ENOIOCTLCMD;
++ }
++
++ return -ENOIOCTLCMD;
++}
++#endif /* CONFIG_SERIAL_AMBA_PL010_TS72XX */
++
++
+ static struct uart_ops amba_pl010_pops = {
+ .tx_empty = pl010_tx_empty,
+ .set_mctrl = pl010_set_mctrl,
+@@ -536,6 +647,9 @@ static struct uart_ops amba_pl010_pops = {
+ .request_port = pl010_request_port,
+ .config_port = pl010_config_port,
+ .verify_port = pl010_verify_port,
++#if defined(CONFIG_SERIAL_AMBA_PL010_TS72XX)
++ .ioctl = pl010_ioctl,
++#endif
+ };
+
+ static struct uart_amba_port *amba_ports[UART_NR];
+@@ -792,11 +906,22 @@ static int __init pl010_init(void)
+ printk(KERN_INFO "Serial: AMBA driver\n");
+
+ ret = uart_register_driver(&amba_reg);
+- if (ret == 0) {
+- ret = amba_driver_register(&pl010_driver);
+- if (ret)
+- uart_unregister_driver(&amba_reg);
+- }
++ if (ret == 0) {
++ ret = amba_driver_register(&pl010_driver);
++
++ #if defined(CONFIG_SERIAL_AMBA_PL010_TS72XX)
++ if (!ret && is_rs485_installed()) {
++ ret = ts72xx_rs485_init();
++ if (ret)
++ printk("amba-pl010.c: ts72xx_rs485_init() failed\n");
++ else
++ printk("amba-pl010.c: auto RS485 mode initialized\n");
++ }
++ #endif
++
++ if (ret)
++ uart_unregister_driver(&amba_reg);
++ }
+ return ret;
+ }
+
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0008-ts72xx_ts_eth100.patch b/recipes/linux/linux-2.6.32/ts72xx/0008-ts72xx_ts_eth100.patch
new file mode 100644
index 0000000000..a1db2553df
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0008-ts72xx_ts_eth100.patch
@@ -0,0 +1,261 @@
+From 8791c5e3d690b09e95eeda98449b1759d2e83c4c Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:59:19 +0100
+Subject: [PATCH] ts72xx_ts_eth100
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/net/Kconfig | 10 ++
+ drivers/net/Makefile | 1 +
+ drivers/net/ax88796.c | 4 +
+ drivers/net/ax88796_ts_eth100.c | 185 +++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 200 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/net/ax88796_ts_eth100.c
+
+diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
+index b2f71f7..485d22a 100644
+--- a/drivers/net/Kconfig
++++ b/drivers/net/Kconfig
+@@ -236,6 +236,16 @@ config AX88796_93CX6
+ help
+ Select this if your platform comes with an external 93CX6 eeprom.
+
++config AX88796_TS_ETH100
++ tristate "Support for TS-ETH100 (TS-72XX SBC)"
++ depends on AX88796 && MACH_TS72XX
++ help
++ Say Y here if you have a TS-ETH100 PC/104 peripheral.
++ IRQ numbers and I/O address will be configurated automatically.
++
++ To compile this driver as a module, choose M here: the module
++ will be called ax88796_ts_eth100.
++
+ config MACE
+ tristate "MACE (Power Mac ethernet) support"
+ depends on PPC_PMAC && PPC32
+diff --git a/drivers/net/Makefile b/drivers/net/Makefile
+index 246323d..ef10c5e 100644
+--- a/drivers/net/Makefile
++++ b/drivers/net/Makefile
+@@ -140,6 +140,7 @@ obj-$(CONFIG_B44) += b44.o
+ obj-$(CONFIG_FORCEDETH) += forcedeth.o
+ obj-$(CONFIG_NE_H8300) += ne-h8300.o 8390.o
+ obj-$(CONFIG_AX88796) += ax88796.o
++obj-$(CONFIG_AX88796_TS_ETH100) += ax88796_ts_eth100.o
+ obj-$(CONFIG_BCM63XX_ENET) += bcm63xx_enet.o
+
+ obj-$(CONFIG_TSI108_ETH) += tsi108_eth.o
+diff --git a/drivers/net/ax88796.c b/drivers/net/ax88796.c
+index 62d9c9c..5cf29f5 100644
+--- a/drivers/net/ax88796.c
++++ b/drivers/net/ax88796.c
+@@ -934,7 +934,11 @@ static int ax_probe(struct platform_device *pdev)
+ goto exit_mem2;
+ }
+
++ #ifdef CONFIG_AX88796_TS_ETH100
++ ei_status.reg_offset[0x10] = ax->map2 - ei_status.mem + 0x10;
++ #else
+ ei_status.reg_offset[0x1f] = ax->map2 - ei_status.mem;
++ #endif
+ }
+
+ /* got resources, now initialise and register device */
+diff --git a/drivers/net/ax88796_ts_eth100.c b/drivers/net/ax88796_ts_eth100.c
+new file mode 100644
+index 0000000..e8eb5e7
+--- /dev/null
++++ b/drivers/net/ax88796_ts_eth100.c
+@@ -0,0 +1,185 @@
++/*
++ * linux/drivers/net/ax88796_ts_eth100.c
++ * Technologic Systems TS-ETH100 support.
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/irq.h>
++#include <linux/io.h>
++#include <net/ax88796.h>
++#include <mach/ts72xx.h>
++#include <mach/gpio.h>
++
++#define TS72XX_ETH100_IO8_PHYS_BASE (TS72XX_PC104_8BIT_IO_PHYS_BASE)
++#define TS72XX_ETH100_IO8_SIZE (TS72XX_PC104_8BIT_IO_SIZE)
++#define TS72XX_ETH100_IO16_PHYS_BASE (TS72XX_PC104_16BIT_IO_PHYS_BASE)
++#define TS72XX_ETH100_IO16_SIZE (TS72XX_PC104_16BIT_IO_SIZE)
++
++/* Technologic systems I/O space */
++#define TS_ETH100_PLD_0 0x100
++#define TS_ETH100_PLD_1 0x110
++#define TS_ETH100_PLD_2 0x120
++#define TS_ETH100_PLD_3 0x130
++
++/* NE2000 I/O space */
++#define TS_ETH100_MAC_0 0x200
++#define TS_ETH100_MAC_1 0x240
++#define TS_ETH100_MAC_2 0x300
++#define TS_ETH100_MAC_3 0x340
++
++/* Board identifier must be 5 ; PLD revision should be 1 */
++#define is_eth100_present(__iomem, __offset) \
++ (((__raw_readb(__iomem + __offset) & 0xF) == 0x5) && \
++ ((__raw_readb(__iomem + __offset + 4) & 0xF) == 0x1))
++
++/* Jumpers status (SRAM control register) */
++#define read_irq(__iomem, __offset) \
++ (__raw_readb(__iomem + __offset + 8) & 0xE)
++
++
++static u32 offsets[0x20] = {
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
++ 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
++};
++
++static struct ax_plat_data ts72xx_eth100_asix_data = {
++ .flags = AXFLG_HAS_93CX6,
++ .wordlength = 2,
++ .dcr_val = 0x48,
++ .rcr_val = 0x40,
++ .reg_offsets = offsets,
++};
++
++static struct resource ts72xx_eth100_resource[] = {
++ [0] = {
++ .start = TS72XX_ETH100_IO8_PHYS_BASE,
++ .end = TS72XX_ETH100_IO8_PHYS_BASE + 0x3ff, //0x20 -1,
++ .flags = IORESOURCE_MEM
++ },
++ [1] = { /* 0x10 is NE_DATAPORT is 16-bit access */
++ .start = TS72XX_ETH100_IO16_PHYS_BASE,
++ .end = TS72XX_ETH100_IO16_PHYS_BASE + 0x3ff, //0x20 -1,
++ .flags = IORESOURCE_MEM
++ },
++ [2] = {
++ .start = IRQ_EP93XX_EXT1,
++ .end = IRQ_EP93XX_EXT1,
++ .flags = IORESOURCE_IRQ
++ }
++};
++
++
++static void ts72xx_eth100_release(struct device *dev)
++{
++ // nothing to do (no kfree) because we have static struct
++}
++
++
++static struct platform_device ts72xx_eth100_device_asix = {
++ .name = "ax88796",
++ .id = 0,
++ .num_resources = ARRAY_SIZE(ts72xx_eth100_resource),
++ .resource = ts72xx_eth100_resource,
++ .dev = {
++ .platform_data = &ts72xx_eth100_asix_data,
++ .release = ts72xx_eth100_release,
++ }
++};
++
++
++static int __init ts_eth100_init(void)
++{
++ void __iomem *iomem;
++ static struct platform_device *ethX = NULL;
++
++ iomem = ioremap(TS72XX_ETH100_IO8_PHYS_BASE, TS72XX_ETH100_IO8_SIZE);
++ if (iomem != NULL) {
++ int irq = 0;
++
++ ethX = &ts72xx_eth100_device_asix;
++
++ if (is_eth100_present(iomem, TS_ETH100_PLD_0)) {
++ ethX->resource[0].start += TS_ETH100_MAC_0;
++ ethX->resource[0].end += TS_ETH100_MAC_0;
++ ethX->resource[1].start += TS_ETH100_MAC_0;
++ ethX->resource[1].end += TS_ETH100_MAC_0;
++ irq = read_irq(iomem, TS_ETH100_PLD_0);
++ } else if(is_eth100_present(iomem, TS_ETH100_PLD_1)) {
++ ethX->resource[0].start += TS_ETH100_MAC_1;
++ ethX->resource[0].end += TS_ETH100_MAC_1;
++ ethX->resource[1].start += TS_ETH100_MAC_1;
++ ethX->resource[1].end += TS_ETH100_MAC_1;
++ irq = read_irq(iomem, TS_ETH100_PLD_1);
++ } else if(is_eth100_present(iomem, TS_ETH100_PLD_2)) {
++ ethX->resource[0].start += TS_ETH100_MAC_2;
++ ethX->resource[0].end += TS_ETH100_MAC_2;
++ ethX->resource[1].start += TS_ETH100_MAC_2;
++ ethX->resource[1].end += TS_ETH100_MAC_2;
++ irq = read_irq(iomem, TS_ETH100_PLD_2);
++ } else if(is_eth100_present(iomem, TS_ETH100_PLD_3)) {
++ ethX->resource[0].start += TS_ETH100_MAC_3;
++ ethX->resource[0].end += TS_ETH100_MAC_3;
++ ethX->resource[1].start += TS_ETH100_MAC_3;
++ ethX->resource[1].end += TS_ETH100_MAC_3;
++ irq = read_irq(iomem, TS_ETH100_PLD_3);
++ } else {
++ ethX = NULL;
++ }
++
++ /* Translate IRQ number */
++ if (ethX != NULL) {
++ switch (irq) {
++ case 0x2: /* IRQ5 */
++ ethX->resource[2].start = gpio_to_irq(EP93XX_GPIO_LINE_F(3)); // 83
++ ethX->resource[2].end = gpio_to_irq(EP93XX_GPIO_LINE_F(3));
++ gpio_direction_input(EP93XX_GPIO_LINE_F(3));
++ set_irq_type(ethX->resource[2].start, IRQ_TYPE_EDGE_RISING);
++ break;
++ case 0x4: /* IRQ6 */
++ ethX->resource[2].start = IRQ_EP93XX_EXT1;
++ ethX->resource[2].end = IRQ_EP93XX_EXT1;
++ break;
++ case 0x8: /* IRQ7 */
++ default:
++ ethX->resource[2].start = IRQ_EP93XX_EXT3;
++ ethX->resource[2].end = IRQ_EP93XX_EXT3;
++ break;
++ }
++ }
++
++ iounmap(iomem);
++ }
++
++ return ((ethX == NULL) ? -ENODEV :
++ platform_device_register(&ts72xx_eth100_device_asix));
++}
++
++
++static void __exit ts_eth100_exit(void)
++{
++ platform_device_unregister(&ts72xx_eth100_device_asix);
++}
++
++module_init(ts_eth100_init);
++module_exit(ts_eth100_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("Asix 88796 ethernet probe module for TS-ETH100 (TS-72xx)");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.2");
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0009-ts7200_cf_ide.patch b/recipes/linux/linux-2.6.32/ts72xx/0009-ts7200_cf_ide.patch
new file mode 100644
index 0000000000..5a1d39ba01
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0009-ts7200_cf_ide.patch
@@ -0,0 +1,120 @@
+From 77d609ddb4485126aff3239050a0ce908c00ee71 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 18:02:58 +0100
+Subject: [PATCH] ts7200_cf_ide
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/ide/Kconfig | 7 +++++
+ drivers/ide/Makefile | 1 +
+ drivers/ide/ide_ts7200_cf.c | 64 +++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 72 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/ide/ide_ts7200_cf.c
+
+diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig
+index 9a5d0aa..2c5182b 100644
+--- a/drivers/ide/Kconfig
++++ b/drivers/ide/Kconfig
+@@ -732,6 +732,13 @@ config BLK_DEV_IDE_AT91
+ depends on ARM && ARCH_AT91 && !ARCH_AT91RM9200 && !ARCH_AT91X40
+ select IDE_TIMINGS
+
++config BLK_DEV_TS7200_CF
++ tristate "TS-7200 IDE (CompactFlash) interface support"
++ depends on ARM && ARCH_EP93XX
++ help
++ Say Y here if you want to support the TS-7200 Compact Flash IDE controller
++ (manufactured by Technologic Systems).
++
+ config BLK_DEV_IDE_ICSIDE
+ tristate "ICS IDE interface support"
+ depends on ARM && ARCH_ACORN
+diff --git a/drivers/ide/Makefile b/drivers/ide/Makefile
+index 81df925..4bef198 100644
+--- a/drivers/ide/Makefile
++++ b/drivers/ide/Makefile
+@@ -111,6 +111,7 @@ obj-$(CONFIG_BLK_DEV_PLATFORM) += ide_platform.o
+ obj-$(CONFIG_BLK_DEV_IDE_ICSIDE) += icside.o
+ obj-$(CONFIG_BLK_DEV_IDE_RAPIDE) += rapide.o
+ obj-$(CONFIG_BLK_DEV_PALMCHIP_BK3710) += palm_bk3710.o
++obj-$(CONFIG_BLK_DEV_TS7200_CF) += ide_ts7200_cf.o
+
+ obj-$(CONFIG_BLK_DEV_IDE_AU1XXX) += au1xxx-ide.o
+
+diff --git a/drivers/ide/ide_ts7200_cf.c b/drivers/ide/ide_ts7200_cf.c
+new file mode 100644
+index 0000000..14c9765
+--- /dev/null
++++ b/drivers/ide/ide_ts7200_cf.c
+@@ -0,0 +1,64 @@
++/*
++ * Technologic Systems TS-7200 Compact Flash IDE device driver.
++ *
++ * (c) Copyright 2009 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/ide.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <mach/ts72xx.h>
++
++
++static const struct ide_port_info ts7200_cf_ide_port_info = {
++ .host_flags = IDE_HFLAG_NO_DMA, // IDE_HFLAG_MMIO
++ .chipset = ide_generic,
++};
++
++static __init int ide_ts7200_cf_init(void)
++{
++ struct ide_hw hw, *hws[] = { &hw };
++ void __iomem *base, *ctl, *data;
++ struct ide_host *host;
++
++ base = ioremap(TS7200_CF_CMD_PHYS_BASE, 0x10); // 8-bit access
++ ctl = ioremap(TS7200_CF_AUX_PHYS_BASE, 0x10); // 8-bit access (usually base+0x206)
++ data = ioremap(TS7200_CF_DATA_PHYS_BASE, 0x10); // 16-bit access
++
++ if ((base != NULL) && (ctl != NULL) && (data != NULL)) {
++ memset(&hw, 0, sizeof(hw));
++
++ ide_std_init_ports(&hw, (unsigned long)base, (unsigned long)ctl);
++ hw.io_ports.data_addr = (unsigned long)data;
++ hw.irq = IRQ_EP93XX_EXT0;
++
++ return ide_host_add(&ts7200_cf_ide_port_info, hws, 1, &host);
++ }
++
++ if (base) iounmap(base);
++ if (ctl) iounmap(ctl);
++ if (data) iounmap(data);
++
++ return -ENODEV;
++}
++
++
++module_init(ide_ts7200_cf_init);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TS-7200 Compact Flash IDE driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.2");
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0010-ts72xx_pata.patch b/recipes/linux/linux-2.6.32/ts72xx/0010-ts72xx_pata.patch
new file mode 100644
index 0000000000..a57a3d0c1f
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0010-ts72xx_pata.patch
@@ -0,0 +1,414 @@
+From caec39562afb6755f47dace8cdc46a0451034c3d Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 18:05:25 +0100
+Subject: [PATCH] ts72xx_pata
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/ata/Kconfig | 20 ++++++
+ drivers/ata/Makefile | 3 +
+ drivers/ata/pata_ts7200_cf.c | 85 +++++++++++++++++++++++
+ drivers/ata/pata_ts72xx.c | 155 ++++++++++++++++++++++++++++++++++++++++++
+ drivers/ata/pata_ts9600.c | 88 ++++++++++++++++++++++++
+ 5 files changed, 351 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/ata/pata_ts7200_cf.c
+ create mode 100644 drivers/ata/pata_ts72xx.c
+ create mode 100644 drivers/ata/pata_ts9600.c
+
+diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
+index f2df6e2..0a310b4 100644
+--- a/drivers/ata/Kconfig
++++ b/drivers/ata/Kconfig
+@@ -781,5 +781,25 @@ config PATA_BF54X
+
+ If unsure, say N.
+
++config PATA_TS72XX
++ bool "TS72XX ATA support"
++ depends on ARCH_EP93XX && MACH_TS72XX
++ help
++ This option enables support for ATA devices on Technologic Systems SBC.
++
++config PATA_TS7200_CF
++ tristate "TS7200 Compact Flash support"
++ depends on PATA_TS72XX
++ help
++ This option enables support for the compact flash control on
++ Technologic System TS-7200 SBC.
++
++config PATA_TS9600
++ tristate "TS9600 IDE interface support"
++ depends on PATA_TS72XX && BLK_DEV_IDE_TS9600 != y
++ help
++ This option enables support for Technologic Systems TS-9600 PC/104 IDE interface.
++
+ endif # ATA_SFF
++
+ endif # ATA
+diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile
+index 01e126f..f784f0e 100644
+--- a/drivers/ata/Makefile
++++ b/drivers/ata/Makefile
+@@ -77,6 +77,9 @@ obj-$(CONFIG_PATA_PLATFORM) += pata_platform.o
+ obj-$(CONFIG_PATA_AT91) += pata_at91.o
+ obj-$(CONFIG_PATA_OF_PLATFORM) += pata_of_platform.o
+ obj-$(CONFIG_PATA_ICSIDE) += pata_icside.o
++obj-$(CONFIG_PATA_TS72XX) += pata_ts72xx.o
++obj-$(CONFIG_PATA_TS7200_CF) += pata_ts7200_cf.o
++obj-$(CONFIG_PATA_TS9600) += pata_ts9600.o
+ # Should be last but two libata driver
+ obj-$(CONFIG_PATA_ACPI) += pata_acpi.o
+ # Should be last but one libata driver
+diff --git a/drivers/ata/pata_ts7200_cf.c b/drivers/ata/pata_ts7200_cf.c
+new file mode 100644
+index 0000000..cc884b5
+--- /dev/null
++++ b/drivers/ata/pata_ts7200_cf.c
+@@ -0,0 +1,85 @@
++/*
++ * Technologic Systems TS-7200 Compact Flash PATA device driver.
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/libata.h>
++#include <scsi/scsi_host.h>
++#include <linux/platform_device.h>
++#include <linux/dma-mapping.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <mach/ts72xx.h>
++
++#define DRV_NAME "pata_ts7200_cf"
++#define DRV_VERSION "0.2"
++
++static struct resource ts7200_cf_resources[] = {
++ [0] = {
++ .start = TS7200_CF_CMD_PHYS_BASE,
++ .end = TS7200_CF_CMD_PHYS_BASE + 8,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = TS7200_CF_AUX_PHYS_BASE,
++ .end = TS7200_CF_AUX_PHYS_BASE + 1,
++ .flags = IORESOURCE_MEM,
++ },
++ [2] = {
++ .start = TS7200_CF_DATA_PHYS_BASE,
++ .end = TS7200_CF_DATA_PHYS_BASE + 2,
++ .flags = IORESOURCE_MEM,
++ },
++ [3] = {
++ .start = IRQ_EP93XX_EXT0, /* pin 103 of EP9301 */
++ .end = IRQ_EP93XX_EXT0,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++
++static struct platform_device ts7200_cf_device = {
++ .name = "ts72xx-ide",
++ .id = 0,
++ .dev = {
++ .dma_mask = &ts7200_cf_device.dev.coherent_dma_mask,
++ .coherent_dma_mask = DMA_BIT_MASK(32),
++ },
++ .num_resources = ARRAY_SIZE(ts7200_cf_resources),
++ .resource = ts7200_cf_resources,
++};
++
++
++static __init int pata_ts7200_cf_init(void)
++{
++ return (board_is_ts7200()) ? \
++ platform_device_register(&ts7200_cf_device) : -ENODEV;
++}
++
++static __exit void pata_ts7200_cf_exit(void)
++{
++ platform_device_unregister(&ts7200_cf_device);
++}
++
++module_init(pata_ts7200_cf_init);
++module_exit(pata_ts7200_cf_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TS-7200 CF PATA device driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
+diff --git a/drivers/ata/pata_ts72xx.c b/drivers/ata/pata_ts72xx.c
+new file mode 100644
+index 0000000..e96cee3
+--- /dev/null
++++ b/drivers/ata/pata_ts72xx.c
+@@ -0,0 +1,155 @@
++/*
++ * TS-72XX PATA driver for Technologic Systems boards.
++ *
++ * Based on pata_platform.c by Paul Mundt &
++ * Alessandro Zummo <a.zummo@towertech.it>
++ * and old pata-ts72xx.c by Alessandro Zummo <a.zummo@towertech.it>
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/interrupt.h>
++#include <scsi/scsi_host.h>
++#include <linux/ata.h>
++#include <linux/libata.h>
++
++#define DRV_NAME "pata_ts72xx"
++#define DRV_VERSION "2.01"
++
++
++/*
++ * Provide our own set_mode() as we don't want to change anything that has
++ * already been configured..
++ */
++static int ts72xx_set_mode(struct ata_link *link, struct ata_device **unused)
++{
++ struct ata_device *dev;
++
++ ata_for_each_dev(dev, link, ENABLED) {
++ if (ata_dev_enabled(dev)) {
++ /* We don't really care */
++ dev->pio_mode = dev->xfer_mode = XFER_PIO_0;
++ dev->xfer_shift = ATA_SHIFT_PIO;
++ dev->flags |= ATA_DFLAG_PIO;
++ ata_dev_printk(dev, KERN_INFO, "configured for PIO\n");
++ }
++ }
++ return 0;
++}
++
++static struct scsi_host_template ts72xx_sht = {
++ ATA_PIO_SHT(DRV_NAME),
++};
++
++static struct ata_port_operations ts72xx_port_ops = {
++ .inherits = &ata_sff_port_ops,
++ .set_mode = ts72xx_set_mode,
++};
++
++static __devinit int ts72xx_pata_probe(struct platform_device *pdev)
++{
++ struct ata_host *host;
++ struct ata_port *ap;
++ int irq;
++
++ struct resource *pata_cmd = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ struct resource *pata_aux = platform_get_resource(pdev, IORESOURCE_MEM, 1);
++ struct resource *pata_data = platform_get_resource(pdev, IORESOURCE_MEM, 2);
++
++ if (!pata_cmd || !pata_aux || !pata_data) {
++ dev_err(&pdev->dev, "missing resource(s)\n");
++ return -EINVAL;
++ }
++
++ irq = platform_get_irq(pdev, 0);
++ if (irq < 0)
++ irq = 0; /* no irq */
++
++ /*
++ * Now that that's out of the way, wire up the port
++ */
++ host = ata_host_alloc(&pdev->dev, 1);
++ if (!host)
++ return -ENOMEM;
++ ap = host->ports[0];
++
++ ap->ops = &ts72xx_port_ops;
++ ap->pio_mask = 0x1f; /* PIO0-4 */
++ ap->flags |= ATA_FLAG_SLAVE_POSS;
++
++ /*
++ * Use polling mode if there's no IRQ
++ */
++ if (!irq) {
++ ap->flags |= ATA_FLAG_PIO_POLLING;
++ ata_port_desc(ap, "no IRQ, using PIO polling");
++ }
++
++ ap->ioaddr.cmd_addr = devm_ioremap(&pdev->dev, pata_cmd->start,
++ pata_cmd->end - pata_cmd->start + 1);
++ ap->ioaddr.ctl_addr = devm_ioremap(&pdev->dev, pata_aux->start,
++ pata_aux->end - pata_aux->start + 1);
++
++ if (!ap->ioaddr.cmd_addr || !ap->ioaddr.ctl_addr) {
++ dev_err(&pdev->dev, "failed to map IO/CTL base\n");
++ return -ENOMEM;
++ }
++
++ ap->ioaddr.altstatus_addr = ap->ioaddr.ctl_addr;
++
++ ata_sff_std_ports(&ap->ioaddr);
++ ap->ioaddr.data_addr = devm_ioremap(&pdev->dev, pata_data->start,
++ pata_data->end - pata_data->start + 1);
++
++ ata_port_desc(ap, "mmio cmd 0x%llx ctl 0x%llx",
++ (unsigned long long)pata_cmd->start,
++ (unsigned long long)pata_aux->start);
++
++ return ata_host_activate(host, irq, irq ? ata_sff_interrupt : NULL,
++ 0 /* irq flags */, &ts72xx_sht);
++}
++
++static __devexit int ts72xx_pata_remove(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct ata_host *host = dev_get_drvdata(dev);
++
++ ata_host_detach(host);
++
++ return 0;
++}
++
++static struct platform_driver ts72xx_pata_platform_driver = {
++ .probe = ts72xx_pata_probe,
++ .remove = __devexit_p(ts72xx_pata_remove),
++ .driver = {
++ .name = "ts72xx-ide",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init ts72xx_pata_init(void)
++{
++ return platform_driver_register(&ts72xx_pata_platform_driver);
++}
++
++static void __exit ts72xx_pata_exit(void)
++{
++ platform_driver_unregister(&ts72xx_pata_platform_driver);
++}
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("low-level driver for TS-72xx device PATA");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
++
++module_init(ts72xx_pata_init);
++module_exit(ts72xx_pata_exit);
+diff --git a/drivers/ata/pata_ts9600.c b/drivers/ata/pata_ts9600.c
+new file mode 100644
+index 0000000..0eb485a
+--- /dev/null
++++ b/drivers/ata/pata_ts9600.c
+@@ -0,0 +1,88 @@
++/*
++ * Technologic Systems TS-9600 PATA device driver.
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/libata.h>
++#include <scsi/scsi_host.h>
++#include <linux/platform_device.h>
++#include <linux/dma-mapping.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <mach/ts72xx.h>
++
++#define DRV_NAME "pata_ts9600"
++#define DRV_VERSION "0.2"
++
++#define TS9600_IDE_IO (TS72XX_PC104_8BIT_IO_PHYS_BASE + 0x1F0)
++#define TS9600_IDE_DATA (TS72XX_PC104_16BIT_IO_PHYS_BASE + 0x1F0)
++#define TS9600_IDE_IRQ IRQ_EP93XX_EXT3 // IRQ7 (no other possibility for arm)
++
++static struct resource ts9600_resources[] = {
++ [0] = {
++ .start = TS9600_IDE_IO,
++ .end = TS9600_IDE_IO + 8,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = TS9600_IDE_IO + 0x206,
++ .end = TS9600_IDE_IO + 0x206 + 1,
++ .flags = IORESOURCE_MEM,
++ },
++ [2] = {
++ .start = TS9600_IDE_DATA,
++ .end = TS9600_IDE_DATA + 2,
++ .flags = IORESOURCE_MEM,
++ },
++ [3] = {
++ .start = TS9600_IDE_IRQ,
++ .end = TS9600_IDE_IRQ,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++
++static struct platform_device ts9600_device = {
++ .name = "ts72xx-ide",
++ .id = 9600,
++ .dev = {
++ .dma_mask = &ts9600_device.dev.coherent_dma_mask,
++ .coherent_dma_mask = DMA_BIT_MASK(32),
++ },
++ .num_resources = ARRAY_SIZE(ts9600_resources),
++ .resource = ts9600_resources,
++};
++
++
++static __init int pata_ts9600_init(void)
++{
++ return platform_device_register(&ts9600_device);
++}
++
++static __exit void pata_ts9600_exit(void)
++{
++ platform_device_unregister(&ts9600_device);
++}
++
++module_init(pata_ts9600_init);
++module_exit(pata_ts9600_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TS-9600 PATA device driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0011-ep93xx_pm.patch b/recipes/linux/linux-2.6.32/ts72xx/0011-ep93xx_pm.patch
new file mode 100644
index 0000000000..093d0e16a6
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0011-ep93xx_pm.patch
@@ -0,0 +1,114 @@
+From d4b791d23b63acc50213dc679eb2bd2d10aa697d Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 18:28:27 +0100
+Subject: [PATCH] ep93xx_pm
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/Makefile | 3 ++
+ arch/arm/mach-ep93xx/pm.c | 78 +++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 81 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/pm.c
+
+diff --git a/arch/arm/mach-ep93xx/Makefile b/arch/arm/mach-ep93xx/Makefile
+index c2451e6..8624d62 100644
+--- a/arch/arm/mach-ep93xx/Makefile
++++ b/arch/arm/mach-ep93xx/Makefile
+@@ -12,3 +12,6 @@ obj-$(CONFIG_MACH_GESBC9312) += gesbc9312.o
+ obj-$(CONFIG_MACH_MICRO9) += micro9.o
+ obj-$(CONFIG_MACH_TS72XX) += ts72xx.o
+ obj-$(CONFIG_MACH_TS72XX_SBCINFO) += ts72xx_sbcinfo.o
++
++# Power Management
++obj-$(CONFIG_PM) += pm.o
+diff --git a/arch/arm/mach-ep93xx/pm.c b/arch/arm/mach-ep93xx/pm.c
+new file mode 100644
+index 0000000..d3714c8
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/pm.c
+@@ -0,0 +1,78 @@
++/*
++ * arch/arm/mach-ep93xx/pm.c
++ *
++ * EP93xx Power Management Routines
++ *
++ * Based on pm.c from Andre Renaud, Bluewater Systems Ltd.
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/suspend.h>
++#include <linux/sched.h>
++#include <linux/proc_fs.h>
++#include <linux/interrupt.h>
++#include <linux/sysfs.h>
++#include <linux/module.h>
++#include <linux/io.h>
++#include <mach/hardware.h>
++
++
++static inline void ep93xx_standby(void)
++{
++ u32 v;
++ v = __raw_readl(EP93XX_SYSCON_DEVCFG);
++ v |= EP93XX_SYSCON_DEVCFG_SHENA;
++ __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
++ __raw_writel(v, EP93XX_SYSCON_DEVCFG);
++
++ v = __raw_readl(EP93XX_SYSCON_STANDBY);
++
++ asm("nop; nop; nop; nop; nop");
++}
++
++static inline void ep93xx_resume(void)
++{
++ u32 v;
++
++ v = __raw_readl(EP93XX_SYSCON_DEVCFG);
++ v &= ~EP93XX_SYSCON_DEVCFG_SHENA;
++ __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
++ __raw_writel(v, EP93XX_SYSCON_DEVCFG);
++}
++
++static int suspend_ep93xx_enter(suspend_state_t state)
++{
++ switch (state) {
++ case PM_SUSPEND_STANDBY:
++ case PM_SUSPEND_MEM:
++ ep93xx_standby(); /* go zzz */
++ ep93xx_resume();
++ }
++ return 0;
++}
++
++static int suspend_ep93xx_valid(suspend_state_t state)
++{
++ return (state == PM_SUSPEND_STANDBY) ||
++ (state == PM_SUSPEND_MEM);
++}
++
++
++static struct platform_suspend_ops ep93xx_suspend_ops = {
++ .enter = suspend_ep93xx_enter,
++ .valid = suspend_ep93xx_valid,
++};
++
++static int __init ep93xx_pm_init(void)
++{
++ pr_info("ep93xx: Power Management\n");
++ suspend_set_ops(&ep93xx_suspend_ops);
++ return 0;
++}
++__initcall(ep93xx_pm_init);
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0012-ts72xx_gpio_i2c.patch b/recipes/linux/linux-2.6.32/ts72xx/0012-ts72xx_gpio_i2c.patch
new file mode 100644
index 0000000000..c0b9d92116
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0012-ts72xx_gpio_i2c.patch
@@ -0,0 +1,63 @@
+From 6983bb07df054687038f1dac74644ae1408d4f28 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 18:44:11 +0100
+Subject: [PATCH] ts72xx_gpio_i2c
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/ts72xx.c | 22 ++++++++++++++++++++++
+ 1 files changed, 22 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
+index 2c0af20..6b0ddd9 100644
+--- a/arch/arm/mach-ep93xx/ts72xx.c
++++ b/arch/arm/mach-ep93xx/ts72xx.c
+@@ -16,6 +16,9 @@
+ #include <linux/io.h>
+ #include <linux/m48t86.h>
+ #include <linux/mtd/physmap.h>
++#include <linux/gpio.h>
++#include <linux/i2c.h>
++#include <linux/i2c-gpio.h>
+
+ #include <mach/hardware.h>
+ #include <mach/ts72xx.h>
+@@ -210,12 +213,31 @@ static struct ep93xx_eth_data ts72xx_eth_data = {
+ .phy_id = 1,
+ };
+
++/*************************************************************************
++ * i2c peripheral handling
++ *************************************************************************/
++static struct i2c_gpio_platform_data ts72xx_i2c_gpio_data = {
++ .sda_pin = EP93XX_GPIO_LINE_EGPIO14, // DIO_6 (TS72XX DIO 2x8 header)
++ .sda_is_open_drain = 0,
++ .scl_pin = EP93XX_GPIO_LINE_EGPIO15, // DIO_7 (TS72XX DIO 2x8 header)
++ .scl_is_open_drain = 0,
++ .udelay = 0, /* default to 100 kHz */
++ .timeout = 0, /* default to 100 ms */
++};
++
++static struct i2c_board_info __initdata ts72xx_i2c_board_info[] = {
++};
++
++
+ static void __init ts72xx_init_machine(void)
+ {
+ ep93xx_init_devices();
+ ts72xx_register_flash();
+ platform_device_register(&ts72xx_rtc_device);
+
++ ep93xx_register_i2c(&ts72xx_i2c_gpio_data,
++ ts72xx_i2c_board_info,
++ ARRAY_SIZE(ts72xx_i2c_board_info));
+ ep93xx_register_eth(&ts72xx_eth_data, 1);
+
+ /* PWM1 is DIO_6 on TS-72xx header */
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0013-ts72xx_dio_keypad.patch b/recipes/linux/linux-2.6.32/ts72xx/0013-ts72xx_dio_keypad.patch
new file mode 100644
index 0000000000..6cc091a3e7
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0013-ts72xx_dio_keypad.patch
@@ -0,0 +1,567 @@
+From f00550cd73030bc2033e4482f31722d83a09b2a8 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 18:49:25 +0100
+Subject: [PATCH] ts72xx_dio_keypad
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/include/mach/ts72xx-keypad.h | 30 ++
+ drivers/input/keyboard/Kconfig | 42 +++
+ drivers/input/keyboard/Makefile | 4 +
+ drivers/input/keyboard/ts72xx_dio_3x4.c | 65 +++++
+ drivers/input/keyboard/ts72xx_dio_4x4.c | 65 +++++
+ drivers/input/keyboard/ts72xx_keypad.c | 292 +++++++++++++++++++++
+ 6 files changed, 498 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/include/mach/ts72xx-keypad.h
+ create mode 100644 drivers/input/keyboard/ts72xx_dio_3x4.c
+ create mode 100644 drivers/input/keyboard/ts72xx_dio_4x4.c
+ create mode 100644 drivers/input/keyboard/ts72xx_keypad.c
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx-keypad.h b/arch/arm/mach-ep93xx/include/mach/ts72xx-keypad.h
+new file mode 100644
+index 0000000..bf44759
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/include/mach/ts72xx-keypad.h
+@@ -0,0 +1,30 @@
++/*
++ * TS-72xx "GPIO Port X" input keypad driver
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on OMAP Keypad Driver (omap-keypad.c)
++ *
++ * 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.
++ */
++
++#ifndef __ASM_ARCH_TS72XX_KEYPAD_H
++#define __ASM_ARCH_TS72XX_KEYPAD_H
++
++#define EP93XX_PORTX_MAXROW 4
++#define EP93XX_PORTX_MAXCOL 4
++
++/* Example: Port X bit 0..7 = C0,..Cx,R0..Ry
++ * Cols are outputs
++ * Rows are inputs
++ */
++struct ep93xx_gpio_portx_keypad_platform_data {
++ int nr_rows, nr_cols;
++ int keycodes[EP93XX_PORTX_MAXROW][EP93XX_PORTX_MAXCOL]; /* Left to right, from top to bottom */
++ int gpio_rows[EP93XX_PORTX_MAXROW]; /* R0, R1, .., R_{MAXROW-1} */
++ int gpio_cols[EP93XX_PORTX_MAXCOL]; /* C0, C1, .., C_{MAXCOL-1} */
++};
++
++#endif /* __ASM_ARCH_TS72XX_KEYPAD_H */
+diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
+index ee98b1b..3c5c421 100644
+--- a/drivers/input/keyboard/Kconfig
++++ b/drivers/input/keyboard/Kconfig
+@@ -164,6 +164,48 @@ config KEYBOARD_EP93XX
+
+ To compile this driver as a module, choose M here: the
+ module will be called ep93xx_keypad.
++
++config KEYBOARD_TS72XX
++ tristate "TS72XX matrix keypad support"
++ depends on MACH_TS72XX
++ help
++ This driver implements supports for a matrix keypad connected
++ to EP93XX GPIO port B (aka DIO of TS-72XX SBCs).
++ Maximum of 4 rows and 4 cols are supported (using up to 4 interrupts).
++ This is implemented as a platform driver.
++
++ To compile this driver as a module, choose M here: the
++ module will be called ep93xx-keypad.
++
++if KEYBOARD_TS72XX
++
++choice
++ prompt "Keypad type"
++ default TS72XX_DIO_4X4_KEYPAD
++
++config TS72XX_DIO_3X4_KEYPAD
++ tristate "TS-72xx 3x4 matrix keypad"
++ depends on MACH_TS72XX
++ help
++ This a 12 keys (4 rows, 3 cols using DIO_0-6) keypad with the following layout:
++ 1 2 3
++ 4 5 6
++ 7 8 9
++ * 0 #
++
++config TS72XX_DIO_4X4_KEYPAD
++ tristate "TS-72xx 4x4 matrix keypad"
++ depends on MACH_TS72XX
++ help
++ This a 16 keys (4 rows, 4 cols using DIO_0-7) keypad with the following layout:
++ 7 8 9 F
++ 4 5 6 E
++ 1 2 3 D
++ A 0 B C
++
++endchoice
++
++endif # KEYBOARD_TS72XX
+
+ config KEYBOARD_GPIO
+ tristate "GPIO Buttons"
+diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile
+index babad5e..1a96733 100644
+--- a/drivers/input/keyboard/Makefile
++++ b/drivers/input/keyboard/Makefile
+@@ -37,3 +37,7 @@ obj-$(CONFIG_KEYBOARD_TOSA) += tosakbd.o
+ obj-$(CONFIG_KEYBOARD_TWL4030) += twl4030_keypad.o
+ obj-$(CONFIG_KEYBOARD_XTKBD) += xtkbd.o
+ obj-$(CONFIG_KEYBOARD_W90P910) += w90p910_keypad.o
++
++obj-$(CONFIG_KEYBOARD_TS72XX) += ts72xx_keypad.o
++obj-$(CONFIG_TS72XX_DIO_3X4_KEYPAD) += ts72xx_dio_3x4.o
++obj-$(CONFIG_TS72XX_DIO_4X4_KEYPAD) += ts72xx_dio_4x4.o
+diff --git a/drivers/input/keyboard/ts72xx_dio_3x4.c b/drivers/input/keyboard/ts72xx_dio_3x4.c
+new file mode 100644
+index 0000000..b149a7a
+--- /dev/null
++++ b/drivers/input/keyboard/ts72xx_dio_3x4.c
+@@ -0,0 +1,65 @@
++/*
++ * TS-72xx keypad device driver for DIO1 header (DIO_0 thru DIO_7 are using port B)
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/input.h>
++
++#include <mach/ts72xx-keypad.h>
++
++/* Port B = XX R0 R1 R2 R3 C0 C1 C2
++ * (i.e. col2 is bit 0, row0 is bit 6, ...)
++ */
++static struct ep93xx_gpio_portx_keypad_platform_data kp_portb_3x4 = {
++ .nr_rows = 4,
++ .nr_cols = 3,
++ { { KEY_1, KEY_2, KEY_3 },
++ { KEY_4, KEY_5, KEY_6 },
++ { KEY_7, KEY_8, KEY_9 },
++ { KEY_KPASTERISK, KEY_0, KEY_ENTER }
++ },
++ .gpio_rows = { 6, 5, 4, 3 },
++ .gpio_cols = { 2, 1, 0 },
++};
++
++
++static void ts72xx_dio_release(struct device *dev)
++{
++ // nothing to do (no kfree) because we have static struct
++}
++
++static struct platform_device kp_portb_3x4_device = {
++ .name = "ep93xx-gpio-keypad",
++ .id = -1, // one instance only
++ .dev = {
++ .platform_data = &kp_portb_3x4,
++ .release = ts72xx_dio_release,
++ },
++};
++
++static int __init ts72xx_dio_init(void)
++{
++ return platform_device_register(&kp_portb_3x4_device);
++}
++
++static void __exit ts72xx_dio_exit(void)
++{
++ platform_device_unregister(&kp_portb_3x4_device);
++}
++
++module_init(ts72xx_dio_init);
++module_exit(ts72xx_dio_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("Platform device 3x4 keypad");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/input/keyboard/ts72xx_dio_4x4.c b/drivers/input/keyboard/ts72xx_dio_4x4.c
+new file mode 100644
+index 0000000..2d8089a
+--- /dev/null
++++ b/drivers/input/keyboard/ts72xx_dio_4x4.c
+@@ -0,0 +1,65 @@
++/*
++ * TS-72xx keypad device driver for DIO1 header (DIO_0 thru DIO_7 are using port B)
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/input.h>
++
++#include <mach/ts72xx-keypad.h>
++
++/* Port B = C0 R3 C1 R2 C2 C3 R1 R0
++ * (i.e. row0 is bit 0, row1 is bit 1, ...)
++ */
++static struct ep93xx_gpio_portx_keypad_platform_data kp_portb_4x4 = {
++ .nr_rows = 4,
++ .nr_cols = 4,
++ { { KEY_7, KEY_8, KEY_9, KEY_F },
++ { KEY_4, KEY_5, KEY_6, KEY_E },
++ { KEY_1, KEY_2, KEY_3, KEY_D },
++ { KEY_A, KEY_0, KEY_B, KEY_C }
++ },
++ .gpio_rows = { 0, 1, 4, 6 },
++ .gpio_cols = { 7, 5, 3, 2 },
++};
++
++
++static void ts72xx_dio_release(struct device *dev)
++{
++ // nothing to do (no kfree) because we have static struct
++}
++
++static struct platform_device kp_portb_4x4_device = {
++ .name = "ep93xx-gpio-keypad",
++ .id = -1, // one instance only
++ .dev = {
++ .platform_data = &kp_portb_4x4,
++ .release = ts72xx_dio_release,
++ },
++};
++
++static int __init ts72xx_dio_init(void)
++{
++ return platform_device_register(&kp_portb_4x4_device);
++}
++
++static void __exit ts72xx_dio_exit(void)
++{
++ platform_device_unregister(&kp_portb_4x4_device);
++}
++
++module_init(ts72xx_dio_init);
++module_exit(ts72xx_dio_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("Platform device 4x4 keypad");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/input/keyboard/ts72xx_keypad.c b/drivers/input/keyboard/ts72xx_keypad.c
+new file mode 100644
+index 0000000..6979689
+--- /dev/null
++++ b/drivers/input/keyboard/ts72xx_keypad.c
+@@ -0,0 +1,292 @@
++/*
++ * TS-72xx "GPIO Port B" input keypad driver
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on OMAP Keypad Driver (omap-keypad.c)
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/delay.h>
++#include <linux/input.h>
++#include <linux/platform_device.h>
++#include <linux/irq.h>
++#include <linux/io.h>
++#include <mach/hardware.h>
++#include <mach/gpio.h>
++
++#include <mach/ts72xx-keypad.h>
++
++#define DRV_NAME_PREFIX "ts72xx_keypad: "
++#define DRV_VERSION "2.0"
++
++/* We choose port B */
++#define EP93XX_GPIO_X_DATA EP93XX_GPIO_B_DATA
++#define EP93XX_GPIO_LINE_X EP93XX_GPIO_LINE_B
++
++struct ep93xx_gpio_portx_keypad {
++ u8 rows;
++ u8 cols;
++ int irqs[EP93XX_PORTX_MAXROW];
++ u8 mask_input;
++ u8 mask_output;
++ u8 row_trigger, col_trigger;
++ u8 mask_input_trigger;
++ struct timer_list timer;
++ struct input_dev *input;
++ struct ep93xx_gpio_portx_keypad_platform_data *rsc;
++};
++
++static void ep93xx_gpio_portx_tasklet(unsigned long);
++static void ep93xx_gpio_portx_timer(unsigned long);
++
++DECLARE_TASKLET_DISABLED(kp_tasklet, ep93xx_gpio_portx_tasklet, 0);
++
++
++static void ep93xx_gpio_portx_timer(unsigned long data)
++{
++ struct ep93xx_gpio_portx_keypad *ctx = (struct ep93xx_gpio_portx_keypad *)data;
++ int i;
++
++ for (i = 0; i < ctx->rows; i++)
++ enable_irq(ctx->irqs[i]);
++}
++
++
++static void ep93xx_gpio_portx_tasklet(unsigned long data)
++{
++ struct ep93xx_gpio_portx_keypad *ctx = (struct ep93xx_gpio_portx_keypad *)data;
++ int i, j;
++ u8 save;
++
++ /* Save data register */
++ save = __raw_readb(EP93XX_GPIO_X_DATA);
++
++ /* Make sure row is still 0 */
++ if (!(save & ctx->mask_input_trigger)) {
++
++ for (i = 0; i < ctx->cols; i++) {
++ for (j = 0; j < ctx->cols; j++) {
++ if (i == j)
++ gpio_set_value(EP93XX_GPIO_LINE_X(ctx->rsc->gpio_cols[j]), 1); //high
++ else
++ gpio_set_value(EP93XX_GPIO_LINE_X(ctx->rsc->gpio_cols[j]), 0); //low
++ }
++
++ if (__raw_readb(EP93XX_GPIO_X_DATA) & ctx->mask_input_trigger) {
++ ctx->col_trigger = i;
++ //printk("=>key col=%d, row=%d |%x\n", i, ctx->row_trigger, ctx->rsc->keycodes[ctx->row_trigger][i]);
++ input_report_key(ctx->input, ctx->rsc->keycodes[ctx->row_trigger][ctx->col_trigger], 1);
++ input_sync(ctx->input);
++ }
++ }
++
++ } else { // key released
++ input_report_key(ctx->input, ctx->rsc->keycodes[ctx->row_trigger][ctx->col_trigger], 0);
++ input_sync(ctx->input);
++ }
++
++ /* Restore all outputs to 0 */
++ __raw_writeb(save, EP93XX_GPIO_X_DATA);
++
++ /* Wait a little before enabling IRQ again */
++ mod_timer(&ctx->timer, jiffies + HZ/10);
++}
++
++
++/* Interrupt handler */
++static irqreturn_t ep93xx_gpio_portx_key_int(int irq, void *dev_id)
++{
++ struct ep93xx_gpio_portx_keypad *ctx = dev_id;
++ int i;
++
++ for (i = 0; i < ctx->rows; i++)
++ disable_irq(ctx->irqs[i]);
++
++ ctx->mask_input_trigger = 0;
++ for (i = 0; i < ctx->rows; i++) {
++ if (gpio_to_irq(EP93XX_GPIO_LINE_X(ctx->rsc->gpio_rows[i])) == irq) {
++ ctx->row_trigger = i;
++ ctx->mask_input_trigger = (1 << ctx->rsc->gpio_rows[i]);
++ break;
++ }
++ }
++
++ // deferred-execution method
++ tasklet_schedule(&kp_tasklet);
++
++ return IRQ_HANDLED;
++}
++
++
++static int __devinit ep93xx_keypad_probe(struct platform_device *pdev)
++{
++ struct ep93xx_gpio_portx_keypad *ctx;
++ struct input_dev *input_dev;
++ int i, j, ret, irq_idx;
++ struct ep93xx_gpio_portx_keypad_platform_data *pdata = pdev->dev.platform_data;
++
++ const char *irq_names[EP93XX_PORTX_MAXROW] = {
++ "kp-row0", "kp-row1", "kp-row2", "kp-row3" };
++
++ if (pdata == NULL) {
++ return -EINVAL;
++ }
++
++ if (!pdata->nr_rows || !pdata->nr_cols ||
++ (pdata->nr_rows > EP93XX_PORTX_MAXROW) ||
++ (pdata->nr_cols > EP93XX_PORTX_MAXCOL)) {
++ printk(KERN_ERR DRV_NAME_PREFIX "No rows, cols from pdata\n");
++ return -EINVAL;
++ }
++
++ ctx = kzalloc(sizeof(struct ep93xx_gpio_portx_keypad), GFP_KERNEL);
++ if (!ctx) {
++ return -ENOMEM;
++ }
++
++ input_dev = input_allocate_device();
++ if (!input_dev) {
++ kfree(ctx);
++ return -ENOMEM;
++ }
++
++ platform_set_drvdata(pdev, ctx);
++
++ ctx->input = input_dev;
++ ctx->rsc = pdata;
++ ctx->rows = pdata->nr_rows;
++ ctx->cols = pdata->nr_cols;
++
++ input_dev->evbit[0] = BIT(EV_KEY); // | BIT(EV_REP);
++
++ for (i = 0; i < pdata->nr_rows; i++) {
++ for (j = 0; j < pdata->nr_cols; j++) {
++ int code = pdata->keycodes[i][j];
++ if (code > 0)
++ set_bit(code, input_dev->keybit);
++ }
++ }
++ __clear_bit(KEY_RESERVED, input_dev->keybit);
++
++ input_dev->name = "GPIO keypad";
++ input_dev->phys = "ep93xx-keypad/input0";
++ input_dev->dev.parent = &pdev->dev;
++
++ input_dev->id.bustype = BUS_HOST;
++ input_dev->id.vendor = 0x0001;
++ input_dev->id.product = 0x0001;
++ input_dev->id.version = 0x0100;
++
++ ret = input_register_device(ctx->input);
++ if (ret < 0) {
++ printk(KERN_ERR DRV_NAME_PREFIX "Unable to register input device\n");
++ goto err1;
++ }
++
++ ctx->mask_output = 0;
++ for (i = 0; i < pdata->nr_cols; i++) {
++ ctx->mask_output |= (1 << pdata->gpio_cols[i]);
++ gpio_direction_output(EP93XX_GPIO_LINE_X(pdata->gpio_cols[i]), 0); // low
++ }
++
++ ctx->mask_input = 0;
++ for (i = 0; i < pdata->nr_rows; i++) {
++ ctx->mask_input |= (1 << pdata->gpio_rows[i]);
++ gpio_direction_input(EP93XX_GPIO_LINE_X(pdata->gpio_rows[i]));
++ }
++
++ for (i = 0; i < pdata->nr_rows; i++) {
++ ctx->irqs[i] = gpio_to_irq(EP93XX_GPIO_LINE_X(pdata->gpio_rows[i]));
++ set_irq_type(ctx->irqs[i], IRQ_TYPE_EDGE_FALLING);
++ ep93xx_gpio_int_debounce(ctx->irqs[i], 1); // TODO: create IRQ_TYPE_DEBOUNCE
++
++ ret = request_irq(ctx->irqs[i], ep93xx_gpio_portx_key_int, 0, irq_names[i], ctx);
++ if (ret < 0) {
++ irq_idx = i;
++ printk(KERN_ERR DRV_NAME_PREFIX "request_irq (%d)\n", ctx->irqs[i]);
++ goto err2;
++ }
++ }
++
++ tasklet_enable(&kp_tasklet);
++ kp_tasklet.data = (unsigned long)ctx;
++
++ setup_timer(&ctx->timer, ep93xx_gpio_portx_timer, (unsigned long)ctx);
++
++ return 0;
++
++err2:
++ for (i = 0; i <= irq_idx; i++)
++ free_irq(ctx->irqs[i], ctx);
++ input_unregister_device(input_dev);
++ input_dev = NULL;
++err1:
++ kfree(ctx);
++ input_free_device(input_dev);
++
++ return -EINVAL;
++}
++
++
++static int __devexit ep93xx_keypad_remove(struct platform_device *pdev)
++{
++ struct ep93xx_gpio_portx_keypad *ctx = platform_get_drvdata(pdev);
++ int i;
++
++ for (i = 0; i < ctx->rows; i++) {
++ disable_irq(ctx->irqs[i]);
++ free_irq(ctx->irqs[i], ctx);
++ }
++
++ del_timer_sync(&ctx->timer);
++
++ tasklet_disable(&kp_tasklet);
++ tasklet_kill(&kp_tasklet);
++
++ input_unregister_device(ctx->input);
++ kfree(ctx);
++
++ return 0;
++}
++
++
++#define ep93xx_keypad_suspend NULL
++#define ep93xx_keypad_resume NULL
++
++static struct platform_driver ep93xx_keypad_driver = {
++ .driver = {
++ .name = "ep93xx-gpio-keypad",
++ .owner = THIS_MODULE,
++ },
++ .probe = ep93xx_keypad_probe,
++ .remove = __devexit_p(ep93xx_keypad_remove),
++ .suspend = ep93xx_keypad_suspend,
++ .resume = ep93xx_keypad_resume,
++};
++
++static int __init ep93xx_keypad_init(void)
++{
++ printk(KERN_INFO DRV_NAME_PREFIX "platform driver v" DRV_VERSION "\n");
++ return platform_driver_register(&ep93xx_keypad_driver);
++}
++
++static void __exit ep93xx_keypad_exit(void)
++{
++ platform_driver_unregister(&ep93xx_keypad_driver);
++}
++
++module_init(ep93xx_keypad_init);
++module_exit(ep93xx_keypad_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("EP93xx GPIO port B keypad driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0014-ep93xx_spi.patch b/recipes/linux/linux-2.6.32/ts72xx/0014-ep93xx_spi.patch
new file mode 100644
index 0000000000..d10c5b416a
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0014-ep93xx_spi.patch
@@ -0,0 +1,985 @@
+From 2caff4e73854c56387d00ccd8b379b77288d8faa Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 19:10:30 +0100
+Subject: [PATCH] ep93xx_spi
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/clock.c | 4 +
+ arch/arm/mach-ep93xx/core.c | 30 ++
+ arch/arm/mach-ep93xx/include/mach/spi.h | 18 ++
+ arch/arm/mach-ep93xx/ts72xx.c | 40 +++
+ drivers/spi/Kconfig | 13 +
+ drivers/spi/Makefile | 2 +
+ drivers/spi/spi_ep93xx.c | 500 +++++++++++++++++++++++++++++++
+ drivers/spi/spi_ep93xx.h | 61 ++++
+ drivers/spi/tmp124.c | 158 ++++++++++
+ 9 files changed, 826 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/include/mach/spi.h
+ create mode 100644 drivers/spi/spi_ep93xx.c
+ create mode 100644 drivers/spi/spi_ep93xx.h
+ create mode 100644 drivers/spi/tmp124.c
+
+diff --git a/arch/arm/mach-ep93xx/clock.c b/arch/arm/mach-ep93xx/clock.c
+index 1d0f9d8..d952910 100644
+--- a/arch/arm/mach-ep93xx/clock.c
++++ b/arch/arm/mach-ep93xx/clock.c
+@@ -98,6 +98,9 @@ static struct clk clk_pwm = {
+ .parent = &clk_xtali,
+ .rate = EP93XX_EXT_CLK_RATE,
+ };
++static struct clk clk_ssp = {
++ .rate = EP93XX_EXT_CLK_RATE / 2,
++};
+
+ static struct clk clk_video = {
+ .sw_locked = 1,
+@@ -185,6 +188,7 @@ static struct clk_lookup clocks[] = {
+ INIT_CK("ep93xx-keypad", NULL, &clk_keypad),
+ INIT_CK("ep93xx-fb", NULL, &clk_video),
+ INIT_CK(NULL, "pwm_clk", &clk_pwm),
++ INIT_CK(NULL, "sspclk", &clk_ssp),
+ INIT_CK(NULL, "m2p0", &clk_m2p0),
+ INIT_CK(NULL, "m2p1", &clk_m2p1),
+ INIT_CK(NULL, "m2p2", &clk_m2p2),
+diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
+index b4357c3..e9abf81 100644
+--- a/arch/arm/mach-ep93xx/core.c
++++ b/arch/arm/mach-ep93xx/core.c
+@@ -31,6 +31,7 @@
+
+ #include <mach/hardware.h>
+ #include <mach/fb.h>
++#include <mach/spi.h>
+
+ #include <asm/mach/map.h>
+ #include <asm/mach/time.h>
+@@ -611,6 +612,34 @@ static struct platform_device ep93xx_leds = {
+ },
+ };
+
++/*************************************************************************
++ * EP93xx ssp peripheral handling
++ *************************************************************************/
++static struct resource ep93xx_ssp_resources[] = {
++ {
++ .start = EP93XX_SPI_PHYS_BASE,
++ .end = EP93XX_SPI_PHYS_BASE + 0x14,
++ .flags = IORESOURCE_MEM,
++ }, {
++ .start = IRQ_EP93XX_SSP, // overrun in receive fifo
++ .end = IRQ_EP93XX_SSP,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++static struct ep93xx_spi_data ep93xx_ssp_data = {
++ .chip_select_num = 4,
++};
++
++static struct platform_device ep93xx_ssp_device = {
++ .name = "ep93xx-spi",
++ .id = 1,
++ .resource = ep93xx_ssp_resources,
++ .num_resources = ARRAY_SIZE(ep93xx_ssp_resources),
++ .dev = {
++ .platform_data = &ep93xx_ssp_data,
++ }
++};
+
+ /*************************************************************************
+ * EP93xx pwm peripheral handling
+@@ -743,5 +772,6 @@ void __init ep93xx_init_devices(void)
+
+ platform_device_register(&ep93xx_rtc_device);
+ platform_device_register(&ep93xx_ohci_device);
++ platform_device_register(&ep93xx_ssp_device);
+ platform_device_register(&ep93xx_leds);
+ }
+diff --git a/arch/arm/mach-ep93xx/include/mach/spi.h b/arch/arm/mach-ep93xx/include/mach/spi.h
+new file mode 100644
+index 0000000..0e07fc9
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/include/mach/spi.h
+@@ -0,0 +1,18 @@
++/*
++ * arch/arm/mach-ep93xx/include/mach/spi.h
++ */
++
++struct ep93xx_spi_data {
++ u16 chip_select_num;
++};
++
++
++/* spi_board_info.controller_data for SPI slave devices */
++struct ep93xx_spi_chip {
++ void (*cs_control)(u32 command);
++};
++
++/* Chip-select state */
++#define SPI_CS_ASSERT 0x1
++#define SPI_CS_DEASSERT 0x2
++#define SPI_CS_INIT 0x4
+diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
+index 6b0ddd9..6c61965 100644
+--- a/arch/arm/mach-ep93xx/ts72xx.c
++++ b/arch/arm/mach-ep93xx/ts72xx.c
+@@ -19,9 +19,11 @@
+ #include <linux/gpio.h>
+ #include <linux/i2c.h>
+ #include <linux/i2c-gpio.h>
++#include <linux/spi/spi.h>
+
+ #include <mach/hardware.h>
+ #include <mach/ts72xx.h>
++#include <mach/spi.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/map.h>
+@@ -207,6 +209,39 @@ static struct platform_device ts72xx_rtc_device = {
+ };
+
+ /*************************************************************************
++ * SPI
++ *************************************************************************/
++
++#if defined(CONFIG_SPI_TMP124) || defined(CONFIG_SPI_TMP124_MODULE)
++void tmp124_spi_cs(u32 command) // FGPIO[2]
++{
++ if (command & SPI_CS_ASSERT) {
++ gpio_set_value(EP93XX_GPIO_LINE_MCCD2, 0);
++ } else if (command & SPI_CS_DEASSERT) {
++ gpio_set_value(EP93XX_GPIO_LINE_MCCD2, 1);
++ } else if (command & SPI_CS_INIT) {
++ gpio_request(EP93XX_GPIO_LINE_MCCD2, "TMP124 cs");
++ gpio_direction_output(EP93XX_GPIO_LINE_MCCD2, 1);
++ }
++}
++
++static struct ep93xx_spi_chip tmp124_hw = {
++ .cs_control = tmp124_spi_cs,
++};
++
++static struct spi_board_info ts72xx_spi_bus[] __initdata = {
++ {
++ /* TMP124 */
++ .modalias = "tmp124",
++ .controller_data = &tmp124_hw,
++ .bus_num = 1,
++ .chip_select = 0,
++ .max_speed_hz = 2 * 1000 * 1000,
++ }
++};
++#endif
++
++/*************************************************************************
+ * Ethernet
+ *************************************************************************/
+ static struct ep93xx_eth_data ts72xx_eth_data = {
+@@ -240,6 +275,11 @@ static void __init ts72xx_init_machine(void)
+ ARRAY_SIZE(ts72xx_i2c_board_info));
+ ep93xx_register_eth(&ts72xx_eth_data, 1);
+
++ #if defined(CONFIG_SPI_TMP124) || defined(CONFIG_SPI_TMP124_MODULE)
++ spi_register_board_info(ts72xx_spi_bus,
++ ARRAY_SIZE(ts72xx_spi_bus));
++ #endif
++
+ /* PWM1 is DIO_6 on TS-72xx header */
+ ep93xx_register_pwm(0, 1);
+ }
+diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
+index 4b6f7cb..e71e2ea 100644
+--- a/drivers/spi/Kconfig
++++ b/drivers/spi/Kconfig
+@@ -244,6 +244,12 @@ config SPI_XILINX
+ See the "OPB Serial Peripheral Interface (SPI) (v1.00e)"
+ Product Specification document (DS464) for hardware details.
+
++config SPI_EP93XX
++ tristate "EP93XX SPI controller"
++ depends on SPI_MASTER
++ help
++ Simple SPI driver for EP93xx.
++
+ #
+ # Add new SPI master controllers in alphabetical order above this line
+ #
+@@ -272,6 +278,13 @@ config SPI_TLE62X0
+ sysfs interface, with each line presented as a kind of GPIO
+ exposing both switch control and diagnostic feedback.
+
++config SPI_TMP124
++ tristate "Texas Instruments TMP1224, TMP124"
++ depends on SPI_MASTER && SYSFS
++ help
++ SPI driver for TMP12X temperature sensor chips.
++ This provides a sysfs entry for temperature reading (2°C accurate).
++
+ #
+ # Add new SPI protocol masters in alphabetical order above this line
+ #
+diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
+index 21a1182..ccc9075 100644
+--- a/drivers/spi/Makefile
++++ b/drivers/spi/Makefile
+@@ -31,6 +31,7 @@ obj-$(CONFIG_SPI_S3C24XX_GPIO) += spi_s3c24xx_gpio.o
+ obj-$(CONFIG_SPI_S3C24XX) += spi_s3c24xx.o
+ obj-$(CONFIG_SPI_TXX9) += spi_txx9.o
+ obj-$(CONFIG_SPI_XILINX) += xilinx_spi.o
++obj-$(CONFIG_SPI_EP93XX) += spi_ep93xx.o
+ obj-$(CONFIG_SPI_SH_SCI) += spi_sh_sci.o
+ obj-$(CONFIG_SPI_STMP3XXX) += spi_stmp.o
+ # ... add above this line ...
+@@ -38,6 +39,7 @@ obj-$(CONFIG_SPI_STMP3XXX) += spi_stmp.o
+ # SPI protocol drivers (device/link on bus)
+ obj-$(CONFIG_SPI_SPIDEV) += spidev.o
+ obj-$(CONFIG_SPI_TLE62X0) += tle62x0.o
++obj-$(CONFIG_SPI_TMP124) += tmp124.o
+ # ... add above this line ...
+
+ # SPI slave controller drivers (upstream link)
+diff --git a/drivers/spi/spi_ep93xx.c b/drivers/spi/spi_ep93xx.c
+new file mode 100644
+index 0000000..0e86b38
+--- /dev/null
++++ b/drivers/spi/spi_ep93xx.c
+@@ -0,0 +1,500 @@
++/*
++ * EP93xx SPI driver
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on pxa2xx_spi.c by Stephen Street / StreetFire Sound Labs
++ *
++ * 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.
++ *
++ * Notes:
++ * - Uses SSP IP of processor
++ * - Restricted to SPI master mode
++ * - No DMA transfer
++ * - No power management support
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/device.h>
++#include <linux/interrupt.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <linux/spi/spi.h>
++#include <linux/clk.h>
++#include <linux/io.h>
++#include <asm/irq.h>
++#include <mach/hardware.h>
++#include <mach/spi.h>
++
++#include <linux/sched.h>
++#include <linux/spinlock.h>
++#include <linux/workqueue.h>
++
++#include "spi_ep93xx.h"
++
++
++struct ep93xx_spi {
++ struct spi_master *master; /* SPI framework hookup */
++ void __iomem *ioaddr; /* Virtual base address to SSP registers */
++ u32 freq_max;
++ u32 freq_min;
++ struct clk *clk;
++
++ struct workqueue_struct *workqueue;
++ struct work_struct work;
++ spinlock_t lock;
++ struct list_head queue;
++
++ struct ep93xx_spi_chip *cs_chip; /* Chip Select function */
++};
++
++static inline u16 read_reg(void __iomem *base, off_t offset)
++{
++ return __raw_readw(base + offset);
++}
++
++static inline void write_reg(u16 v, void __iomem *base, off_t offset)
++{
++ __raw_writew(v, base + offset);
++}
++
++/*
++ * compute SCR and CPSDVR bits to setup spi clock based on main input clock rate
++ * that was specified in platform data structure
++ * according to datasheet:
++ * tempclk = sspclk / cpsdvr
++ * spiclk = tempclk / (scr + 1)
++ * SCR valid range is 0..255
++ * CPSDVR valid range is 2..254
++ */
++static int spi_speed_set(struct ep93xx_spi *drv_data, unsigned speed_hz)
++{
++ unsigned long mainclk_hz = clk_get_rate(drv_data->clk);
++ u32 cpsdvr, scr;
++ u16 ssp_cr0;
++
++ for (cpsdvr = 2; cpsdvr <= 254; cpsdvr+=2) {
++ scr = DIV_ROUND_UP(mainclk_hz / speed_hz, cpsdvr);
++ /* now we have SCR+1 in scr, so count with that */
++ if (scr == 0) { /* speed_hz too big */
++ return -EINVAL;
++ }
++ if (scr <= (255 + 1))
++ break; /* we have valid scr and cpsdvr */
++ }
++ if (cpsdvr > 254) {
++ /* speed_hz is too small, set to minimum speed */
++ scr = 256;
++ cpsdvr = 254;
++ }
++ scr--;
++ write_reg(cpsdvr, drv_data->ioaddr, SSPCPSR);
++ ssp_cr0 = read_reg(drv_data->ioaddr, SSPCR0);
++ ssp_cr0 &= ~(SSP_CONTROL_SCR(0xff));
++ write_reg((ssp_cr0 | SSP_CONTROL_SCR(scr)), drv_data->ioaddr, SSPCR0);
++
++ return 0;
++}
++
++static irqreturn_t ssp_int(int irq, void *dev_id)
++{
++ struct ep93xx_spi *drv_data = dev_id;
++ write_reg(SSP_SSPIxx_RORIS, drv_data->ioaddr, SSPIxR); /* clear it */
++
++ printk(KERN_WARNING "SSP overrun\n");
++ return IRQ_HANDLED;
++}
++
++static int transfer_one_work(struct ep93xx_spi *drv_data, struct spi_message *msg)
++{
++ struct spi_device *spi = msg->spi;
++ struct spi_transfer *xfer;
++ int i;
++ u8 *p;
++
++ drv_data->cs_chip->cs_control(SPI_CS_ASSERT);
++
++ list_for_each_entry(xfer, &msg->transfers, transfer_list) {
++ if (!(xfer->tx_buf || xfer->rx_buf)) {
++ dev_dbg(&spi->dev, "missing rx or tx buf\n");
++ drv_data->cs_chip->cs_control(SPI_CS_DEASSERT);
++ return -EINVAL;
++ }
++
++ if (xfer->bits_per_word) {
++ u16 v = read_reg(drv_data->ioaddr, SSPCR0);
++ v = v & SSP_CONTROL_DSS_MASK;
++ v = v | ((xfer->bits_per_word - 1) & SSP_CONTROL_DSS_MASK);
++ write_reg(v, drv_data->ioaddr, SSPCR0);
++ }
++
++ if (xfer->speed_hz) {
++ if (spi_speed_set(drv_data,xfer->speed_hz) != 0){
++ dev_err(&spi->dev, "xfer speed hz invalid\n");
++ return -EINVAL;
++ }
++ }
++
++ if (xfer->tx_buf) {
++ p = (u8 *)xfer->tx_buf;
++
++ if ((spi->bits_per_word == 16 && xfer->bits_per_word == 0) ||
++ (xfer->bits_per_word == 16)) {
++ for (i = 0; i < xfer->len; i+=2)
++ write_reg((p[i] << 8) + p[i+1], drv_data->ioaddr, SSPDR);
++ } else {
++ for (i = 0; i < xfer->len; i++)
++ write_reg(p[i], drv_data->ioaddr, SSPDR);
++ }
++ }
++
++ if (xfer->rx_buf) {
++ u16 v;
++ p = xfer->rx_buf;
++
++ if ((spi->bits_per_word == 16 && xfer->bits_per_word == 0) ||
++ (xfer->bits_per_word == 16)) {
++ for (i = 0; i < xfer->len; i+=2) {
++ v = read_reg(drv_data->ioaddr, SSPDR);
++ p[i] = v >> 8;
++ p[i+1] = v & 0xFF;
++ }
++ } else {
++ for (i = 0; i < xfer->len; i++)
++ p[i] = read_reg(drv_data->ioaddr, SSPDR);
++ }
++ }
++
++ /* restore device bits_per_word */
++ if (xfer->bits_per_word) {
++ u16 v = read_reg(drv_data->ioaddr, SSPCR0);
++ v = v & SSP_CONTROL_DSS_MASK;
++ v |= spi->bits_per_word - 1;
++ write_reg(v, drv_data->ioaddr, SSPCR0);
++ }
++
++ /* restore device speed_hz */
++ if (xfer->speed_hz) {
++ if (spi_speed_set(drv_data,spi->max_speed_hz) != 0)
++ return -EINVAL;
++ }
++
++ dev_dbg(&spi->dev, "transfer: len=%u, tx_buf=%p, rx_buf=%p\n", xfer->len, xfer->tx_buf, xfer->rx_buf);
++ }
++
++ if (xfer->delay_usecs)
++ udelay(xfer->delay_usecs);
++ drv_data->cs_chip->cs_control(SPI_CS_DEASSERT);
++
++ msg->actual_length = 0;
++ msg->status = 0;
++
++ if (msg->complete)
++ msg->complete(msg->context);
++
++ return 0;
++}
++
++
++static void ssp_work(struct work_struct *work)
++{
++ struct ep93xx_spi *drv_data = container_of(work, struct ep93xx_spi, work);
++ unsigned long flags;
++
++ spin_lock_irqsave(&drv_data->lock, flags);
++ while (!list_empty(&drv_data->queue)) {
++ struct spi_message *m;
++
++ m = container_of(drv_data->queue.next, struct spi_message, queue);
++ list_del_init(&m->queue);
++ spin_unlock_irqrestore(&drv_data->lock, flags);
++
++ transfer_one_work(drv_data, m);
++
++ spin_lock_irqsave(&drv_data->lock, flags);
++ }
++ spin_unlock_irqrestore(&drv_data->lock, flags);
++}
++
++
++static int ssp_transfer(struct spi_device *spi, struct spi_message *m)
++{
++ struct spi_master *master = spi->master;
++ struct ep93xx_spi *drv_data = spi_master_get_devdata(master);
++ struct spi_transfer *t;
++ unsigned long flags;
++
++ m->actual_length = 0;
++
++ /* check each transfer's parameters */
++ list_for_each_entry (t, &m->transfers, transfer_list) {
++ u32 speed_hz = t->speed_hz ? t->speed_hz : spi->max_speed_hz;
++ u8 bits_per_word = t->bits_per_word ? t->bits_per_word : spi->bits_per_word;
++
++ if (!t->tx_buf && !t->rx_buf && t->len)
++ return -EINVAL;
++ if (bits_per_word < 4 || bits_per_word > 16)
++ return -EINVAL;
++ /*if (t->len & ((bits_per_word >> 3) - 1))
++ return -EINVAL;*/
++ if (speed_hz < drv_data->freq_min || speed_hz > drv_data->freq_max)
++ return -EINVAL;
++ }
++
++ spin_lock_irqsave(&drv_data->lock, flags);
++ list_add_tail(&m->queue, &drv_data->queue);
++ queue_work(drv_data->workqueue, &drv_data->work);
++ spin_unlock_irqrestore(&drv_data->lock, flags);
++
++ return 0;
++
++}
++
++/* the spi->mode bits understood by this driver: */
++#define MODEBITS (SPI_CPOL | SPI_CPHA)
++
++static int ssp_setup(struct spi_device *spi)
++{
++ struct ep93xx_spi *drv_data = spi_master_get_devdata(spi->master);
++ struct ep93xx_spi_chip *chip_info;
++ u16 v;
++
++ /* Get controller data */
++ chip_info = spi->controller_data;
++ if (!chip_info) {
++ dev_err(&spi->dev, "setup: controller data required\n");
++ return -EINVAL;
++ }
++ drv_data->cs_chip = chip_info;
++ drv_data->cs_chip->cs_control(SPI_CS_INIT);
++
++ if (!spi->bits_per_word) {
++ spi->bits_per_word = 8;
++ }
++
++ if (spi->bits_per_word < 4 || spi->bits_per_word > 16) {
++ dev_dbg(&spi->dev, "setup: unsupported %d bit words\n",
++ spi->bits_per_word);
++ return -EINVAL;
++ }
++
++ if (spi->chip_select > spi->master->num_chipselect) {
++ dev_dbg(&spi->dev, "setup: invalid chipselect %u (%u defined)\n",
++ spi->chip_select, spi->master->num_chipselect);
++ return -EINVAL;
++ }
++
++ if (spi->mode & ~MODEBITS) {
++ dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
++ spi->mode & ~MODEBITS);
++ return -EINVAL;
++ }
++
++ v = read_reg(drv_data->ioaddr, SSPCR0);
++
++ if (spi->mode & SPI_CPOL)
++ v |= SSP_CONTROL_SPO;
++ else
++ v &= ~SSP_CONTROL_SPO;
++
++ if (spi->mode & SPI_CPHA)
++ v |= SSP_CONTROL_SPH;
++ else
++ v &= ~SSP_CONTROL_SPH;
++
++ v = v & SSP_CONTROL_DSS_MASK;
++ v |= spi->bits_per_word - 1;
++
++ write_reg(v, drv_data->ioaddr, SSPCR0);
++
++ if (!spi->max_speed_hz) {
++ spi->max_speed_hz = drv_data->freq_min;
++ } else if (spi->max_speed_hz > drv_data->freq_max ||
++ spi->max_speed_hz < drv_data->freq_min){
++ return -EINVAL;
++ }
++
++ if (spi_speed_set(drv_data,spi->max_speed_hz) != 0){
++ dev_dbg(&spi->dev, "setup: unsupported speed %u\n", spi->max_speed_hz);
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++
++static void ssp_cleanup(struct spi_device *spi)
++{
++ struct ep93xx_spi *drv_data = spi_master_get_devdata(spi->master);
++ drv_data->cs_chip = NULL;
++}
++
++
++static int __init spi_ep93xx_probe(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct spi_master *master;
++ struct ep93xx_spi_data *spi_data = pdev->dev.platform_data;
++ struct ep93xx_spi *drv_data = NULL;
++ struct resource *memory_resource;
++ int irq, status = 0, min_div = 2, max_div = 254*(255+1);
++
++ /* Check I2SonSSP bit (ssp pins and i2s pins are multiplexed)
++ We could force with ep93xx_devcfg_clear_bits */
++ if (readl(EP93XX_SYSCON_DEVCFG) & EP93XX_SYSCON_DEVCFG_I2SONSSP)
++ return -ENODEV;
++
++ /* Allocate master with space for drv_data */
++ master = spi_alloc_master(dev, sizeof(struct ep93xx_spi));
++ if (!master) {
++ dev_err(&pdev->dev, "can not alloc spi_master\n");
++ return -ENOMEM;
++ }
++
++ /* Setup register addresses */
++ memory_resource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!memory_resource) {
++ dev_err(&pdev->dev, "memory resources not defined\n");
++ status = -ENODEV;
++ goto out_error_master_alloc;
++ }
++
++ drv_data = spi_master_get_devdata(master);
++ drv_data->master = master;
++ drv_data->ioaddr = ioremap(memory_resource->start, memory_resource->end - memory_resource->start + 1);
++ drv_data->clk = clk_get(&pdev->dev, "sspclk");
++ drv_data->freq_max = clk_get_rate(drv_data->clk) / min_div;
++ drv_data->freq_min = clk_get_rate(drv_data->clk) / max_div + 1;
++
++ INIT_WORK(&drv_data->work, ssp_work);
++ spin_lock_init(&drv_data->lock);
++ INIT_LIST_HEAD(&drv_data->queue);
++
++ drv_data->workqueue = create_singlethread_workqueue(dev_name(master->dev.parent));
++ if (!drv_data->workqueue) {
++ status = -EBUSY;
++ goto out_error_master_alloc;
++ }
++
++ master->bus_num = pdev->id;
++ master->num_chipselect = spi_data->chip_select_num;
++ master->cleanup = ssp_cleanup;
++ master->setup = ssp_setup;
++ master->transfer = ssp_transfer;
++
++ /* Attach to IRQ */
++ irq = platform_get_irq(pdev, 0);
++ if (irq < 0) {
++ dev_err(&pdev->dev, "irq resource not defined\n");
++ status = -ENODEV;
++ goto out_error_master_alloc;
++ }
++
++ status = request_irq(irq, ssp_int, 0, dev_name(dev), drv_data);
++ if (status < 0) {
++ dev_err(&pdev->dev, "can not get IRQ\n");
++ goto out_error_master_alloc;
++ }
++
++ /* Load default SSP configuration */
++ write_reg(SSP_CONTROL_SSE, drv_data->ioaddr, SSPCR1);
++ write_reg(SPI_DEFAULT0, drv_data->ioaddr, SSPCR0);
++ write_reg(SPI_DEFAULT_DIVISOR, drv_data->ioaddr, SSPCPSR);
++ write_reg(0x00, drv_data->ioaddr, SSPCR1);
++
++ /* Register with the SPI framework */
++ platform_set_drvdata(pdev, drv_data);
++ status = spi_register_master(master);
++ if (status != 0) {
++ dev_err(&pdev->dev, "problem registering spi master\n");
++ goto out_error_irq_alloc;
++ }
++
++ write_reg(SPI_DEFAULT1, drv_data->ioaddr, SSPCR1);
++ return status;
++
++out_error_irq_alloc:
++ free_irq(irq, drv_data);
++
++out_error_master_alloc:
++ spi_master_put(master);
++ return status;
++}
++
++static int spi_ep93xx_remove(struct platform_device *pdev)
++{
++ struct ep93xx_spi *drv_data = platform_get_drvdata(pdev);
++ int irq;
++
++ if (!drv_data)
++ return 0;
++
++ /* Disable SSP (clear SSE bit) */
++ write_reg(0x00, drv_data->ioaddr, SSPCR1);
++
++ /* Release IRQ */
++ irq = platform_get_irq(pdev, 0);
++
++ if (irq >= 0)
++ free_irq(irq, drv_data);
++
++ /* Disconnect from the SPI framework */
++ spi_unregister_master(drv_data->master);
++
++ /* Remove the workqueue */
++ destroy_workqueue(drv_data->workqueue);
++
++ iounmap(drv_data->ioaddr);
++
++ /* Prevent double remove */
++ platform_set_drvdata(pdev, NULL);
++
++ clk_put(drv_data->clk);
++ spi_master_put(drv_data->master);
++
++ return 0;
++}
++
++static void spi_ep93xx_shutdown(struct platform_device *pdev)
++{
++ int status = 0;
++
++ if ((status = spi_ep93xx_remove(pdev)) != 0)
++ dev_err(&pdev->dev, "shutdown failed with %d\n", status);
++}
++
++static struct platform_driver ep93xx_spi_platform_driver = {
++ .driver = {
++ .name = "ep93xx-spi",
++ .bus = &platform_bus_type,
++ .owner = THIS_MODULE,
++ },
++ .remove = __exit_p(spi_ep93xx_remove),
++ .shutdown = spi_ep93xx_shutdown,
++};
++
++static int __init spi_ep93xx_init(void)
++{
++ return platform_driver_probe(&ep93xx_spi_platform_driver, spi_ep93xx_probe);
++}
++
++static void __exit spi_ep93xx_exit(void)
++{
++ platform_driver_unregister(&ep93xx_spi_platform_driver);
++}
++
++module_init(spi_ep93xx_init);
++module_exit(spi_ep93xx_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("EP93xx SPI Controller Driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.25");
+diff --git a/drivers/spi/spi_ep93xx.h b/drivers/spi/spi_ep93xx.h
+new file mode 100644
+index 0000000..6fad735
+--- /dev/null
++++ b/drivers/spi/spi_ep93xx.h
+@@ -0,0 +1,61 @@
++/*
++ * EP93xx SPI (simple) include
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on pxa2xx_spi.c by Stephen Street / StreetFire Sound Labs
++ *
++ * 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.
++ *
++ */
++
++/* SSP Registers */
++#define SSPCR0 0x00 /* Control register 0 */
++#define SSPCR1 0x04 /* Control register 1 */
++#define SSPDR 0x08 /* Receice FIFO data register (16-bit read) */
++ /* Transmit FIFO data register (16-bit write) */
++#define SSPSR 0x0C /* Status register */
++#define SSPCPSR 0x10 /* Clock prescale register (from 2 to 254, even number) */
++#define SSPIxR 0x14 /* Interrupt identification register (read) */
++ /* Interrupt clear register (write) */
++
++/* SSP control registers bit fields & masks */
++#define SSP_CONTROL_SCR(x) (((x) & 0xFF) << 8) /* Serial clock rate = SCLKOUT / CPSDVR / (1+SCR) */
++#define SSP_CONTROL_SPH (1 << 7) /* SCLKOUT phase (for SPI only) */
++#define SSP_CONTROL_SPO (1 << 6) /* SCLKOUT polarity (for SPI only) */
++#define SSP_CONTROL_FRF(x) (((x) & 3) << 4) /* Frame format (0=SPI) */
++#define SSP_CONTROL_DSS_4BIT_DATA 3
++#define SSP_CONTROL_DSS_8BIT_DATA 7
++#define SSP_CONTROL_DSS_15BIT_DATA 14
++#define SSP_CONTROL_DSS_16BIT_DATA 15
++#define SSP_CONTROL_DSS_MASK 0xF
++#define SSP_CONTROL_MS (1 << 5) /* 0=master, 1=slave (can be modified when SSE=0) */
++#define SSP_CONTROL_SSE (1 << 4) /* SSP operation enable (=1), disable (=0) */
++#define SSP_CONTROL_LBM (1 << 3) /* Loop back mode */
++#define SSP_CONTROL_RORIE (1 << 2) /* Interrupt enable : overrun condition */
++#define SSP_CONTROL_TIE (1 << 1) /* Interrupt enable : transmit fifo */
++#define SSP_CONTROL_RIE (1 << 0) /* Interrupt enable : receive fifo */
++
++/* SSP status register (read only) */
++#define SSP_STATUS_BUSY (1 << 4) /* Busy flag (0: SSP is idle) */
++#define SSP_STATUS_RFF (1 << 3) /* Receive fifo full ? (1=full) */
++#define SSP_STATUS_RNE (1 << 2) /* Receive fifo not empty ? (0=empty) */
++#define SSP_STATUS_TNF (1 << 1) /* Transmit fifo not full ? (0=full) */
++#define SSP_STATUS_TFE (1 << 0) /* Transmit fifo empty ? (1=empty) */
++
++/* SSP SSPIIR/SSPICR register (write 1 to clear interrupt) */
++#define SSP_SSPIxx_RORIS (1 << 2) /* Receive fifo overrun interrupt status */
++#define SSP_SSPIxx_TIS (1 << 1) /* Transmit fifo service request interrupt status */
++#define SSP_SSPIxx_RIS (1 << 0) /* Receive fifo service request interrupt status */
++
++/* Default configuration values */
++#define SPI_DEFAULT0 (SSP_CONTROL_DSS_16BIT_DATA | SSP_CONTROL_FRF(0) | SSP_CONTROL_SCR(0))
++#define SPI_DEFAULT1 (SSP_CONTROL_SSE | SSP_CONTROL_RORIE)
++#define SPI_DEFAULT_DIVISOR 254
+diff --git a/drivers/spi/tmp124.c b/drivers/spi/tmp124.c
+new file mode 100644
+index 0000000..d3600f7
+--- /dev/null
++++ b/drivers/spi/tmp124.c
+@@ -0,0 +1,158 @@
++/*
++ * TMP124 SPI protocol driver
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on tle62x0.c by Ben Dooks, <ben@simtec.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.
++ *
++ * Note: The chip uses a '3-wire SPI' (miso and mosi are the same pin).
++ */
++
++#include <linux/device.h>
++#include <linux/kernel.h>
++#include <linux/spi/spi.h>
++
++struct tmp124_state {
++ struct spi_device *bus;
++ u8 tx_buff[2];
++ u8 rx_buff[2];
++};
++
++
++static inline int tmp124_write_then_read(struct tmp124_state *st)
++{
++ struct spi_message msg;
++ struct spi_transfer xfer[2] = {
++ {
++ .tx_buf = st->tx_buff,
++ .rx_buf = NULL,
++ .len = 2,
++ .delay_usecs = 1000,
++ }, {
++ .tx_buf = NULL,
++ .rx_buf = st->rx_buff,
++ .len = 2,
++ }
++ };
++
++ spi_message_init(&msg);
++ spi_message_add_tail(&xfer[0], &msg);
++ spi_message_add_tail(&xfer[1], &msg);
++
++ return spi_sync(st->bus, &msg);
++}
++
++
++static ssize_t tmp124_temperature_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct tmp124_state *st = dev_get_drvdata(dev);
++ int ret;
++
++ st->tx_buff[0] = 0x80;
++ st->tx_buff[1] = 0x00;
++
++ ret = tmp124_write_then_read(st);
++ if (ret < 0) {
++ dev_err(&st->bus->dev, "tmp124_write_then_read\n");
++ ret = 0;
++ } else {
++ signed short v = (st->rx_buff[0] << 8) + st->rx_buff[1];
++ signed long val;
++
++ val = v >> 3;
++
++ /* 2 digit precision (0.0625*100) */
++ val = (val * 50) / 8;
++ ret = snprintf(buf, PAGE_SIZE, "%ld.%02ld\n", val/100, abs(val%100));
++ }
++ return ret;
++}
++
++
++static DEVICE_ATTR(temperature, S_IRUGO, tmp124_temperature_show, NULL);
++
++
++static int __devinit tmp124_probe(struct spi_device *spi)
++{
++ struct tmp124_state *st;
++ int ret;
++
++ st = kzalloc(sizeof(struct tmp124_state), GFP_KERNEL);
++ if (st == NULL) {
++ dev_err(&spi->dev, "no memory for device state\n");
++ return -ENOMEM;
++ }
++
++ /* required config */
++ spi->bits_per_word = 16;
++
++ st->bus = spi;
++
++ ret = spi_setup(spi);
++ if (ret) {
++ dev_err(&spi->dev, "setup device\n");
++ goto err;
++ }
++
++ ret = device_create_file(&spi->dev, &dev_attr_temperature);
++ if (ret) {
++ dev_err(&spi->dev, "cannot create temperature attribute\n");
++ goto err;
++ }
++
++ spi_set_drvdata(spi, st);
++ return 0;
++
++err:
++ kfree(st);
++ return ret;
++}
++
++
++static int __devexit tmp124_remove(struct spi_device *spi)
++{
++ struct tmp124_state *st = spi_get_drvdata(spi);
++
++ device_remove_file(&spi->dev, &dev_attr_temperature);
++ kfree(st);
++
++ return 0;
++}
++
++
++static struct spi_driver tmp124_driver = {
++ .driver = {
++ .name = "tmp124",
++ .owner = THIS_MODULE,
++ },
++ .probe = tmp124_probe,
++ .remove = __devexit_p(tmp124_remove),
++};
++
++static __init int tmp124_init(void)
++{
++ return spi_register_driver(&tmp124_driver);
++}
++
++static __exit void tmp124_exit(void)
++{
++ spi_unregister_driver(&tmp124_driver);
++}
++
++module_init(tmp124_init);
++module_exit(tmp124_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TMP124 SPI Protocol Driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.1");
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0015-ep93xx_cpufreq.patch b/recipes/linux/linux-2.6.32/ts72xx/0015-ep93xx_cpufreq.patch
new file mode 100644
index 0000000000..afd5b3e2f8
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0015-ep93xx_cpufreq.patch
@@ -0,0 +1,360 @@
+From d4ed3962171cdc235c9a55f864bf4db856224d0a Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 19:46:15 +0100
+Subject: [PATCH] ep93xx_cpufreq
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/Kconfig | 12 ++
+ arch/arm/mach-ep93xx/Makefile | 2 +
+ arch/arm/mach-ep93xx/cpufreq.c | 291 ++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 305 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/cpufreq.c
+
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index 0f1d52f..05eab87 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -294,6 +294,7 @@ config ARCH_EP93XX
+ select COMMON_CLKDEV
+ select ARCH_REQUIRE_GPIOLIB
+ select ARCH_HAS_HOLES_MEMORYMODEL
++ select ARCH_HAS_CPUFREQ
+ help
+ This enables support for the Cirrus EP93xx series of CPUs.
+
+@@ -1350,6 +1351,17 @@ config CPU_FREQ_INTEGRATOR
+
+ If in doubt, say Y.
+
++config CPU_FREQ_EP93XX
++ tristate "CPUfreq driver for EP93XX CPUs"
++ depends on ARCH_EP93XX && CPU_FREQ
++ default n
++ help
++ This enables the CPUfreq driver for EP9301 CPUs. Not tested with EP9302.
++
++ For details, take a look at <file:Documentation/cpu-freq>.
++
++ If in doubt, say N.
++
+ config CPU_FREQ_PXA
+ bool
+ depends on CPU_FREQ && ARCH_PXA && PXA25x
+diff --git a/arch/arm/mach-ep93xx/Makefile b/arch/arm/mach-ep93xx/Makefile
+index 8624d62..f8d126c 100644
+--- a/arch/arm/mach-ep93xx/Makefile
++++ b/arch/arm/mach-ep93xx/Makefile
+@@ -6,6 +6,8 @@ obj-m :=
+ obj-n :=
+ obj- :=
+
++obj-$(CONFIG_CPU_FREQ_EP93XX) += cpufreq.o
++
+ obj-$(CONFIG_MACH_ADSSPHERE) += adssphere.o
+ obj-$(CONFIG_MACH_EDB93XX) += edb93xx.o
+ obj-$(CONFIG_MACH_GESBC9312) += gesbc9312.o
+diff --git a/arch/arm/mach-ep93xx/cpufreq.c b/arch/arm/mach-ep93xx/cpufreq.c
+new file mode 100644
+index 0000000..9188e5c
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/cpufreq.c
+@@ -0,0 +1,291 @@
++/*
++ * cpufreq.c: clock scaling for Cirrus EP93XX embedded chip
++ *
++ * Copyright (C) 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * Based on "cpu-ep93xx.c" driver (for 2.4 kernel) by
++ * Bob Lees bob@diamond.demon.co.uk (Diamond Consulting Services Ltd)
++ * Ideas taken from "clock.c" by Lennert Buytenhek <buytenh@wantstofly.org>
++ *
++ * 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
++ *
++ * Theory of operations
++ * ====================
++ *
++ * Clock scaling can be used to lower the power consumption of the CPU
++ * core. For this processor the major power saving is reducing the mem clk.
++ *
++ * The ep93xx has 2 registers to control the 2 PLLs of the ep93xx:
++ * PLL1 controls the cpu, bus and peripheral clocks;
++ * PLL2 controls the USB, MIR and ADC clocks.
++ *
++ * ClkSet1 (EP93XX_SYSCON_CLOCK_SET1) 0x80930020 Clock speed control 1 (i.e. PLL1 config)
++ * ClkSet2 (EP93XX_SYSCON_CLOCK_SET2) 0x80930024 Clock speed control 2 (i.e. PLL2 config)
++ *
++ * This driver only focus on PLL1. The pll has two multipliers/dividers:
++ * Fout = 14.7456 * (PLL1_X1FBD + 1) * (PLL1_X2FBD + 1) / ((PLL1_X2IPD + 1) * 2 ^ PLL1_PS)
++ * = 14.7456 * (PLL1_X1FBD + 1) * (PLL1_X2FBD + 1) / (PLL1_X2IPD + 1) / 2 ^ PLL1_PS
++ *
++ * PLL1_X2 output (before the PS divide), must be > 290Mhz and <= 528Mhz
++ *
++ * fclk [processor ] = pll1 / fclk_divisor
++ * hclk [AHB bus clock] = pll1 / hclk_divisor
++ * pclk [APB bus clock] = hclk / pclk_divisor
++ * fclk >= hclk > pclk
++ *
++ * EP9301 EP9302/07/12/15
++ * PLL1 fout max (MHz) 528 528
++ * fclk min (MHz) 12.9 12.9
++ * fclk max (MHz) 166 200
++ * hclk max (MHz) 66 100
++ * pclk max (MHz) 50 50
++ *
++ * Notes:
++ * - This driver does not use the clk_{get,put,roundrate} (clock.c) functions.
++ * That's quite dirty, but clock.c is not complete yet.
++ * - Significant power saving is made by lowering hclk not fclk.
++ * - Ethernet (100 MBit) doesn't work with hclk < 25MHz.
++ * - Is it safe to have fclk = hclk ?
++ * - calc_pll_rate is taken from clock.c (Lennert Buytenhek)
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/io.h>
++#include <linux/cpufreq.h>
++#include <mach/hardware.h>
++
++
++/* ClkSet1 register */
++#define SYSCON_CLKSET1_PLL1_PS_SHIFT 16
++#define SYSCON_CLKSET1_PCLK_DIV_SHIFT 18
++#define SYSCON_CLKSET1_HCLK_DIV_SHIFT 20
++#define SYSCON_CLKSET1_FCLK_DIV_SHIFT 25
++
++#define CLKSET1(p, pl, pd, h, f) ( p | \
++ ( pl << SYSCON_CLKSET1_PLL1_PS_SHIFT) | \
++ ( pd << SYSCON_CLKSET1_PCLK_DIV_SHIFT)| \
++ ( h << SYSCON_CLKSET1_HCLK_DIV_SHIFT) | \
++ ( f << SYSCON_CLKSET1_FCLK_DIV_SHIFT))
++
++/* SMC_ROM = 0, nBYP1 = 1 */
++#define PLL1_MASK(x1fbd1,x1fbd2,x2ipd) (0x800000 | (x1fbd1 << 11) | (x1fbd2 << 5) | (x2ipd))
++
++typedef struct {
++ int speed; /* in kHz */
++ u32 preset; /* x1fbd, x2fbd and x2ipd are left unchanged */
++ u32 pll1_ps; /* sets final divide from pll */
++ u32 pdiv; /* sets pclk, peripheral clk (division of hclk) */
++ u32 hdiv; /* sets hclk, bus (memory) clk */
++ u32 fdiv; /* sets fclk, processor clk */
++} ep93xx_speed_settings_t;
++
++static const char fclk_divisors[] = { 1, 2, 4, 8, 16, 1, 1, 1 };
++
++
++/* Suitable for EP9301. PLL1 rate (without final PS divider):
++ - PLL1_RATE(19,17,15) = 331.776 MHz
++ - PLL1_MASK(19, 7, 7) = 294.912 MHz
++ */
++static const ep93xx_speed_settings_t ep93xx_clkset1_settings[] =
++{
++ /* { speed, preset, pll1_ps, pdiv, hdiv, fdiv } */
++ { 165888, PLL1_MASK(19,17,15), 0, 1, 3, 1 }, /* [0x02B49A2F] fclk=165.9 (fdiv=2), hclk=66.4 (hdiv=5), pclk=33.2 (pdiv=2), ps=1 */
++ { 165887, PLL1_MASK(19,17,15), 1, 1, 3, 0 }, /* [0x00B59A2F] fclk=165.9 (fdiv=1), hclk=33.2 (hdiv=5), pclk=16.6 (pdiv=2), ps=2 */
++ { 147456, PLL1_MASK(19, 7, 7), 0, 1, 3, 1 }, /* [0x02B498E7] fclk=147.5 (fdiv=2), hclk=59.0 (hdiv=5), pclk=29.5 (pdiv=2), ps=1 */
++ { 147455, PLL1_MASK(19, 7, 7), 0, 2, 3, 1 }, /* [0x02B898E7] fclk=147.5 (fdiv=2), hclk=59.0 (hdiv=5), pclk=14.7 (pdiv=4), ps=1 */
++ { 73728, PLL1_MASK(19, 7, 7), 0, 1, 3, 2 }, /* [0x04B498E7] fclk=73.7 (fdiv=4), hclk=59.0 (hdiv=5), pclk=29.5 (pdiv=2), ps=1 */
++ { 82944, PLL1_MASK(19,17,15), 0, 1, 3, 2 }, /* [0x04B49A2F] fclk=82.9 (fdiv=4), hclk=66.4 (hdiv=5), pclk=33.2 (pdiv=2), ps=1 */
++ { 82943, PLL1_MASK(19,17,15), 0, 1, 4, 2 }, /* [0x04C49A2F] fclk=82.9 (fdiv=4), hclk=55.3 (hdiv=6), pclk=27.6 (pdiv=2), ps=1 */
++ { 82942, PLL1_MASK(19,17,15), 1, 1, 2, 1 }, /* [0x02A59A2F] fclk=82.9 (fdiv=2), hclk=41.5 (hdiv=4), pclk=20.7 (pdiv=2), ps=2 */
++ { 41472, PLL1_MASK(19,17,15), 0, 1, 5, 3 }, /* [0x06D49A2F] fclk=41.5 (fdiv=8), hclk=41.5 (hdiv=8), pclk=20.7 (pdiv=2), ps=1 */
++};
++
++#if 0
++/* Suitable for EP9302/07/12/15. Assumed: PLL1 = 400.1 MHz (X1FBD1=23, X1FBD2=25, X2IPD=22) */
++static ep93xx_speed_settings_t ep93xx_clkset1_settings[] =
++{
++ /* { speed, preset, pll1_ps, pdiv, hdiv, fdiv } */
++ { 200027, 0x0080bb36, 0, 1, 2, 1 }, /* [0x02A4BB36] fclk=200.0 (fdiv=2), hclk=100.0 (hdiv=4), pclk=50.0 (pdiv=2), ps=1 */
++ { 200026, 0x0080bb36, 0, 1, 3, 1 }, /* [0x02B4BB36] fclk=200.0 (fdiv=2), hclk=80.0 (hdiv=5), pclk=40.0 (pdiv=2), ps=1 */
++ { 200025, 0x0080bb36, 0, 1, 4, 1 }, /* [0x02C4BB36] fclk=200.0 (fdiv=2), hclk=66.7 (hdiv=6), pclk=33.3 (pdiv=2), ps=1 */
++ { 100013, 0x0080bb36, 0, 1, 3, 2 }, /* [0x04B4BB36] fclk=100.0 (fdiv=4), hclk=80.0 (hdiv=5), pclk=40.0 (pdiv=2), ps=1 */
++ { 100012, 0x0080bb36, 1, 1, 2, 1 }, /* [0x02A5BB36] fclk=100.0 (fdiv=2), hclk=50.0 (hdiv=4), pclk=25.0 (pdiv=2), ps=2 */
++ { 100011, 0x0080bb36, 1, 1, 1, 1 }, /* [0x0295BB36] fclk=100.0 (fdiv=2), hclk=100.0 (hdiv=2), pclk=50.0 (pdiv=2), ps=2 */
++ { 50006, 0x0080bb36, 2, 1, 2, 1 }, /* [0x02A6BB36] fclk=50.0 (fdiv=2), hclk=25.0 (hdiv=4), pclk=12.5 (pdiv=2), ps=4 */
++ { 50005, 0x0080bb36, 2, 1, 1, 1 }, /* [0x0296BB36] fclk=50.0 (fdiv=2), hclk=50.0 (hdiv=2), pclk=25.0 (pdiv=2), ps=4 */
++ { 25003, 0x0080bb36, 3, 1, 1, 1 }, /* [0x0297BB36] fclk=25.0 (fdiv=2), hclk=25.0 (hdiv=2), pclk=12.5 (pdiv=2), ps=8 */
++};
++#endif
++
++
++static unsigned long calc_pll_rate(u32 config_word)
++{
++ unsigned long long rate;
++
++ rate = 14745600;
++ rate *= ((config_word >> 11) & 0x1f) + 1; /* X1FBD (5 bits) */
++ rate *= ((config_word >> 5) & 0x3f) + 1; /* X2FBD (6 bits) */
++ do_div(rate, (config_word & 0x1f) + 1); /* X2IPD (5 bits) */
++ rate = rate >> ((config_word >> 16) & 3); /* PS (2 bits) */
++
++ return (unsigned long)rate;
++}
++
++
++static const ep93xx_speed_settings_t *ep93xx_find_clkset1(unsigned int khz, unsigned int relation)
++{
++ int i;
++ const ep93xx_speed_settings_t *p = &ep93xx_clkset1_settings[0];
++
++ switch (relation) {
++ case CPUFREQ_RELATION_L: /* lowest frequency at or above target */
++ for (i = 0; i < ARRAY_SIZE(ep93xx_clkset1_settings); i++) {
++ if (ep93xx_clkset1_settings[i].speed < khz)
++ continue;
++ if (p->speed > ep93xx_clkset1_settings[i].speed) // take lowest value
++ p = &ep93xx_clkset1_settings[i];
++ }
++ break;
++
++ case CPUFREQ_RELATION_H: /* highest frequency below or at target */
++ for (i = 0; i < ARRAY_SIZE(ep93xx_clkset1_settings); i++) {
++ if (ep93xx_clkset1_settings[i].speed > khz)
++ continue;
++ if (p->speed < ep93xx_clkset1_settings[i].speed) // take highest value
++ p = &ep93xx_clkset1_settings[i];
++ }
++ break;
++ }
++
++ return p;
++}
++
++
++static int ep93xx_verify_speed(struct cpufreq_policy *policy)
++{
++ if (policy->cpu != 0)
++ return -EINVAL;
++
++ cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, policy->cpuinfo.max_freq);
++
++ return 0;
++}
++
++
++static unsigned int ep93xx_get_speed(unsigned int cpu)
++{
++ unsigned int freq;
++ u32 value;
++
++ if (cpu)
++ return 0;
++
++ value = __raw_readl(EP93XX_SYSCON_CLOCK_SET1);
++ if (!(value & 0x00800000)) { /* PLL1 bypassed? */
++ freq = 14745600;
++ } else {
++ freq = calc_pll_rate(value);
++ }
++ freq /= fclk_divisors[(value >> 25) & 0x7];
++
++ freq = (freq + 500) / 1000; /* rounded result in kHz */
++ return freq;
++}
++
++
++static int ep93xx_set_target(struct cpufreq_policy *policy,
++ unsigned int target_freq,
++ unsigned int relation)
++{
++ struct cpufreq_freqs freqs;
++ const ep93xx_speed_settings_t *config;
++ u32 value;
++
++ config = ep93xx_find_clkset1(target_freq, relation);
++
++ freqs.old = ep93xx_get_speed(0);
++ freqs.new = config->speed;
++ freqs.cpu = 0;
++ freqs.flags = 0;
++
++ pr_debug("ep93xx: target_freq=%d, old=%d new=%d (kHz) rel=%d\n", target_freq, freqs.old, freqs.new, relation);
++
++ cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
++
++ value = CLKSET1(config->preset, config->pll1_ps,
++ config->pdiv, config->hdiv, config->fdiv);
++ __raw_writel(value, EP93XX_SYSCON_CLOCK_SET1);
++
++ /* 5 nops required to flush instruction pipeline */
++ __asm__ __volatile__("nop; nop; nop; nop; nop");
++
++ cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
++
++ return 0;
++}
++
++
++static int __init ep93xx_cpufreq_driver_init(struct cpufreq_policy *policy)
++{
++ printk(KERN_INFO "ep93xx-cpufreq: driver v1.01\n");
++
++ if (policy->cpu != 0)
++ return -EINVAL;
++
++ policy->cur = ep93xx_get_speed(0);
++ policy->min = 25000;
++
++ policy->cpuinfo.min_freq = 13000;
++
++ /* All EP93xx are running up to 200Mhz, except EP9301 */
++ if (policy->cur <= 166000)
++ policy->cpuinfo.max_freq = 166000;
++ else
++ policy->cpuinfo.max_freq = 200000;
++
++ policy->cpuinfo.transition_latency = 1600000; /* 8..16ms (according to datasheet) */
++ policy->max = policy->cpuinfo.max_freq;
++
++ return 0;
++}
++
++static struct cpufreq_driver ep93xx_driver = {
++ .flags = CPUFREQ_STICKY,
++ .verify = ep93xx_verify_speed,
++ .target = ep93xx_set_target,
++ .get = ep93xx_get_speed,
++ .init = ep93xx_cpufreq_driver_init,
++ .name = "ep93xx",
++};
++
++
++static int __init ep93xx_cpufreq_init(void)
++{
++ return cpufreq_register_driver(&ep93xx_driver);
++}
++module_init(ep93xx_cpufreq_init);
++
++static void __exit ep93xx_cpufreq_exit(void)
++{
++ cpufreq_unregister_driver(&ep93xx_driver);
++}
++module_exit(ep93xx_cpufreq_exit);
++
++MODULE_DESCRIPTION("CPU frequency scaling driver for EP93xx");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("1.01");
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/0016-ts7200_nor_flash.patch b/recipes/linux/linux-2.6.32/ts72xx/0016-ts7200_nor_flash.patch
new file mode 100644
index 0000000000..135646b555
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/0016-ts7200_nor_flash.patch
@@ -0,0 +1,163 @@
+From 3c225a7077a7e9f0575fdfe6209342b5eb073b60 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 19:50:34 +0100
+Subject: [PATCH] ts7200_nor_flash
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/mtd/maps/Kconfig | 8 +++
+ drivers/mtd/maps/Makefile | 1 +
+ drivers/mtd/maps/ts7200_flash.c | 106 +++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 115 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/mtd/maps/ts7200_flash.c
+
+diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
+index 14be075..bc20ac9 100644
+--- a/drivers/mtd/maps/Kconfig
++++ b/drivers/mtd/maps/Kconfig
+@@ -445,6 +445,14 @@ config MTD_OMAP_NOR
+ These boards include the Innovator, H2, H3, OSK, Perseus2, and
+ more. If you have such a board, say 'Y'.
+
++config MTD_TS7200_NOR
++ tristate "Technologic Systems TS-7200 flash 8Mb"
++ depends on MTD_CFI && ARCH_EP93XX
++ help
++ This provides a map driver for the on-board flash of the Technologic
++ System's TS-7200 board. The 8MB flash is splitted into 3 partitions
++ which are accessed as separate MTD devices.
++
+ # This needs CFI or JEDEC, depending on the cards found.
+ config MTD_PCI
+ tristate "PCI MTD driver"
+diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile
+index ae2f6db..fb04757 100644
+--- a/drivers/mtd/maps/Makefile
++++ b/drivers/mtd/maps/Makefile
+@@ -58,6 +58,7 @@ obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o
+ obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o
+ obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_vr_nor.o
+ obj-$(CONFIG_MTD_BFIN_ASYNC) += bfin-async-flash.o
++obj-$(CONFIG_MTD_TS7200_NOR) += ts7200_flash.o
+ obj-$(CONFIG_MTD_RBTX4939) += rbtx4939-flash.o
+ obj-$(CONFIG_MTD_VMU) += vmu-flash.o
+ obj-$(CONFIG_MTD_GPIO_ADDR) += gpio-addr-flash.o
+diff --git a/drivers/mtd/maps/ts7200_flash.c b/drivers/mtd/maps/ts7200_flash.c
+new file mode 100644
+index 0000000..efc5f00
+--- /dev/null
++++ b/drivers/mtd/maps/ts7200_flash.c
+@@ -0,0 +1,106 @@
++/*
++ * ts7200_flash.c - mapping for TS-7200 SBCs (8mb NOR flash)
++ * No platform_device resource is used here. All is hardcoded.
++ *
++ * (c) Copyright 2006 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on ts5500_flash.c by Sean Young <sean@mess.org>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <asm/io.h>
++#include <asm/sizes.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/map.h>
++#include <linux/mtd/partitions.h>
++
++#define WINDOW_ADDR 0x60000000
++#define WINDOW_SIZE SZ_8M
++#define WINDOW_READABLE_SIZE (WINDOW_SIZE/SZ_1M)
++
++
++static struct mtd_info *mymtd;
++
++static struct map_info ts7200nor_map = {
++ .name = "Full TS-7200 NOR flash",
++ .size = WINDOW_SIZE,
++ .bankwidth = 2,
++ .phys = WINDOW_ADDR,
++};
++
++/*
++ * MTD partitioning stuff
++ */
++#ifdef CONFIG_MTD_PARTITIONS
++static struct mtd_partition static_partitions[] =
++{
++ {
++ .name = "TS-BOOTROM",
++ .offset = 0,
++ .size = 0x20000,
++ .mask_flags = MTD_WRITEABLE, /* force read-only */
++ },
++ {
++ .name = "RootFS",
++ .offset = 0x20000,
++ .size = 0x600000,
++ },
++ {
++ .name = "Redboot",
++ .offset = 0x620000,
++ .size = MTDPART_SIZ_FULL, /* up to the end */
++ },
++};
++#endif
++
++int __init init_ts7200nor(void)
++{
++ printk(KERN_NOTICE "TS-7200 flash mapping: %dmo at 0x%x\n", WINDOW_READABLE_SIZE, WINDOW_ADDR);
++
++ ts7200nor_map.virt = ioremap(WINDOW_ADDR, WINDOW_SIZE);
++ if (!ts7200nor_map.virt) {
++ printk("ts7200_flash: failed to ioremap\n");
++ return -EIO;
++ }
++
++ simple_map_init(&ts7200nor_map);
++ mymtd = do_map_probe("cfi_probe", &ts7200nor_map);
++ if (mymtd) {
++ mymtd->owner = THIS_MODULE;
++ add_mtd_device(mymtd);
++#ifdef CONFIG_MTD_PARTITIONS
++ return add_mtd_partitions(mymtd, static_partitions, ARRAY_SIZE(static_partitions));
++#else
++ return 0;
++#endif
++ }
++
++ iounmap((void *)ts7200nor_map.virt);
++ return -ENXIO;
++}
++
++static void __exit cleanup_ts7200nor(void)
++{
++ if (mymtd) {
++ del_mtd_device(mymtd);
++ map_destroy(mymtd);
++ }
++ if (ts7200nor_map.virt) {
++ iounmap((void *)ts7200nor_map.virt);
++ ts7200nor_map.virt = 0;
++ }
++}
++
++module_init(init_ts7200nor);
++module_exit(cleanup_ts7200nor);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("MTD map driver for TS-7200 board (" __MODULE_STRING(WINDOW_READABLE_SIZE) "MB flash version)");
+--
+1.6.0.4
+
diff --git a/recipes/linux/linux-2.6.32/ts72xx/defconfig b/recipes/linux/linux-2.6.32/ts72xx/defconfig
new file mode 100644
index 0000000000..506640e26b
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ts72xx/defconfig
@@ -0,0 +1,1686 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.32-rc3
+# Sun Oct 11 19:14:09 2009
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-m"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_POSIX_MQUEUE_SYSCTL=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=16
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+CONFIG_RELAY=y
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+CONFIG_IPC_NS=y
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+# CONFIG_SLOW_WORK is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_FREEZER is not set
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+CONFIG_ARCH_EP93XX=y
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_BCMRING is not set
+
+#
+# Cirrus EP93xx Implementation Options
+#
+# CONFIG_CRUNCH is not set
+CONFIG_CR1_NFBIT=y
+
+#
+# EP93xx Platforms
+#
+CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET=y
+# CONFIG_EP93XX_SDCE0_PHYS_OFFSET is not set
+# CONFIG_MACH_ADSSPHERE is not set
+# CONFIG_MACH_EDB9301 is not set
+# CONFIG_MACH_EDB9302 is not set
+# CONFIG_MACH_EDB9307 is not set
+# CONFIG_MACH_EDB9312 is not set
+# CONFIG_MACH_EDB9315 is not set
+# CONFIG_MACH_GESBC9312 is not set
+# CONFIG_MACH_MICRO9H is not set
+# CONFIG_MACH_MICRO9M is not set
+# CONFIG_MACH_MICRO9L is not set
+CONFIG_MACH_TS72XX=y
+CONFIG_EP93XX_EARLY_UART1=y
+# CONFIG_EP93XX_EARLY_UART2 is not set
+# CONFIG_EP93XX_EARLY_UART3 is not set
+CONFIG_MACH_TS72XX_FORCE_MACHINEID=y
+CONFIG_MACH_TS72XX_SBCINFO=m
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+CONFIG_ARM_VIC=y
+CONFIG_ARM_VIC_NR=2
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+CONFIG_SPARSEMEM_MANUAL=y
+CONFIG_SPARSEMEM=y
+CONFIG_HAVE_MEMORY_PRESENT=y
+CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=ttyAM0,115200 root=/dev/nfs ip=192.168.1.50 nfsroot=192.168.1.48:/home/matt/TS-7200/nfsroot"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_FREQ is not set
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=m
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_MULTIPLE_TABLES is not set
+# CONFIG_IP_ROUTE_MULTIPATH is not set
+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_TCP_MD5SIG=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETLABEL is not set
+CONFIG_NETWORK_SECMARK=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_DCCP=m
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+# CONFIG_NETFILTER_TPROXY is not set
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_HL=m
+# CONFIG_NETFILTER_XT_TARGET_LED is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_SECMARK=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_HL=m
+# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+# CONFIG_NETFILTER_XT_MATCH_OSF is not set
+CONFIG_IP_VS=m
+CONFIG_IP_VS_DEBUG=y
+CONFIG_IP_VS_TAB_BITS=12
+
+#
+# IPVS transport protocol load balancing support
+#
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_PROTO_AH_ESP=y
+CONFIG_IP_VS_PROTO_ESP=y
+CONFIG_IP_VS_PROTO_AH=y
+
+#
+# IPVS scheduler
+#
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_WRR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_SH=m
+CONFIG_IP_VS_SED=m
+CONFIG_IP_VS_NQ=m
+
+#
+# IPVS application helper
+#
+CONFIG_IP_VS_FTP=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV4=m
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_DCCP=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PROTO_UDPLITE=m
+CONFIG_NF_NAT_PROTO_SCTP=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_SECURITY is not set
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+# CONFIG_IP_DCCP is not set
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_MSG is not set
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+# CONFIG_SCTP_HMAC_SHA1 is not set
+CONFIG_SCTP_HMAC_MD5=y
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_WIRELESS=y
+CONFIG_CFG80211=m
+# CONFIG_NL80211_TESTMODE is not set
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
+# CONFIG_CFG80211_REG_DEBUG is not set
+CONFIG_CFG80211_DEFAULT_PS=y
+CONFIG_CFG80211_DEFAULT_PS_VALUE=1
+# CONFIG_CFG80211_DEBUGFS is not set
+CONFIG_WIRELESS_OLD_REGULATORY=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+# CONFIG_LIB80211 is not set
+CONFIG_MAC80211=m
+CONFIG_MAC80211_RC_PID=y
+# CONFIG_MAC80211_RC_MINSTREL is not set
+CONFIG_MAC80211_RC_DEFAULT_PID=y
+# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set
+CONFIG_MAC80211_RC_DEFAULT="pid"
+# CONFIG_MAC80211_MESH is not set
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_MENU is not set
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_TS7250=y
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=65536
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+CONFIG_EP93XX_PWM=m
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_TS72XX_MAX197=m
+CONFIG_TS72XX_MAX197_AVERAGE=y
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+CONFIG_SCSI_TGT=y
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+CONFIG_SCSI_CONSTANTS=y
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+# CONFIG_SCSI_LOWLEVEL is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_EP93XX_ETH=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_ETHOC is not set
+# CONFIG_SMC911X is not set
+# CONFIG_SMSC911X is not set
+# CONFIG_DNET is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851 is not set
+# CONFIG_KS8851_MLL is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+CONFIG_WLAN=y
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=m
+CONFIG_INPUT_POLLDEV=m
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_QT2160 is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_EP93XX=m
+CONFIG_KEYBOARD_TS72XX=m
+CONFIG_KEYBOARD_GPIO=m
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_ELANTECH is not set
+# CONFIG_MOUSE_PS2_SENTELIC is not set
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+CONFIG_MOUSE_SERIAL=m
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_MOUSE_SYNAPTICS_I2C is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+# CONFIG_INPUT_CM109 is not set
+CONFIG_INPUT_UINPUT=m
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_AMBAKMI is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_DEVKMEM is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+CONFIG_SERIAL_8250_TS_SER1=m
+CONFIG_SERIAL_8250_TS_SER1_IRQ=5
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_AMBA_PL010=y
+CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
+CONFIG_SERIAL_AMBA_PL010_TS72XX=y
+# CONFIG_SERIAL_AMBA_PL011 is not set
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=m
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_ALGOBIT=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+CONFIG_I2C_GPIO=y
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_DS1682=m
+CONFIG_SENSORS_TSL2550=m
+CONFIG_I2C_DEBUG_CORE=y
+CONFIG_I2C_DEBUG_ALGO=y
+CONFIG_I2C_DEBUG_BUS=y
+CONFIG_I2C_DEBUG_CHIP=y
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+# CONFIG_SPI_PL022 is not set
+CONFIG_SPI_EP93XX=y
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_SPIDEV=m
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_SPI_TMP124=y
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+# CONFIG_GPIO_PL061 is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_EP93XX_WATCHDOG=m
+CONFIG_TS72XX_WATCHDOG=m
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB=m
+# CONFIG_SSB_SILENT is not set
+# CONFIG_SSB_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_TS72XX_CONSOLE=m
+CONFIG_TS72XX_CONSOLE_COLUMNS=20
+CONFIG_TS72XX_CONSOLE_ROWS=4
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+# CONFIG_HID_DRAGONRISE is not set
+CONFIG_HID_EZKEY=y
+# CONFIG_HID_KYE is not set
+CONFIG_HID_GYRATION=y
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+# CONFIG_HID_NTRIG is not set
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_SMARTJOYPLUS is not set
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_ZEROPLUS is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+CONFIG_USB_DEBUG=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+# CONFIG_USB_GADGET is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_NOP_USB_XCEIV is not set
+# CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc1"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+CONFIG_RTC_DRV_M48T86=y
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_EP93XX=y
+# CONFIG_RTC_DRV_PL030 is not set
+# CONFIG_RTC_DRV_PL031 is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+# CONFIG_DNOTIFY is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+# CONFIG_CUSE is not set
+CONFIG_GENERIC_ACL=y
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_CONFIGFS_FS=m
+# CONFIG_MISC_FILESYSTEMS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=m
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+CONFIG_NLS_ISO8859_15=m
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+CONFIG_DLM=m
+CONFIG_DLM_DEBUG=y
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=2048
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_FTRACE is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+CONFIG_ARM_UNWIND=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+CONFIG_SECURITY=y
+# CONFIG_SECURITYFS is not set
+CONFIG_SECURITY_NETWORK=y
+# CONFIG_SECURITY_NETWORK_XFRM is not set
+# CONFIG_SECURITY_PATH is not set
+CONFIG_SECURITY_FILE_CAPABILITIES=y
+# CONFIG_SECURITY_ROOTPLUG is not set
+# CONFIG_SECURITY_TOMOYO is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_XTS=m
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_GHASH is not set
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_KHAZAD=m
+# CONFIG_CRYPTO_SALSA20 is not set
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_ZLIB is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_T10DIF is not set
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
diff --git a/recipes/linux/linux-2.6.33/mpc8641-hpcn/defconfig b/recipes/linux/linux-2.6.33/mpc8641-hpcn/defconfig
new file mode 100644
index 0000000000..754a79ba74
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/mpc8641-hpcn/defconfig
@@ -0,0 +1,1752 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.32-rc5
+# Thu Nov 5 08:20:46 2009
+#
+# CONFIG_PPC64 is not set
+
+#
+# Processor support
+#
+CONFIG_PPC_BOOK3S_32=y
+# CONFIG_PPC_85xx is not set
+# CONFIG_PPC_8xx is not set
+# CONFIG_40x is not set
+# CONFIG_44x is not set
+# CONFIG_E200 is not set
+CONFIG_PPC_BOOK3S=y
+CONFIG_6xx=y
+CONFIG_PPC_FPU=y
+# CONFIG_PHYS_64BIT is not set
+CONFIG_ALTIVEC=y
+CONFIG_PPC_STD_MMU=y
+CONFIG_PPC_STD_MMU_32=y
+# CONFIG_PPC_MM_SLICES is not set
+CONFIG_PPC_HAVE_PMU_SUPPORT=y
+CONFIG_SMP=y
+CONFIG_NR_CPUS=2
+CONFIG_PPC32=y
+CONFIG_WORD_SIZE=32
+# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_TIME_VSYSCALL=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
+# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set
+CONFIG_IRQ_PER_CPU=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_ARCH_HAS_ILOG2_U32=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
+CONFIG_PPC=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_SCHED_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_PPC_OF=y
+CONFIG_OF=y
+CONFIG_PPC_UDBG_16550=y
+CONFIG_GENERIC_TBSYNC=y
+CONFIG_AUDIT_ARCH=y
+CONFIG_GENERIC_BUG=y
+CONFIG_DTC=y
+CONFIG_DEFAULT_UIMAGE=y
+# CONFIG_PPC_DCR_NATIVE is not set
+# CONFIG_PPC_DCR_MMIO is not set
+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_POSIX_MQUEUE_SYSCTL=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+CONFIG_AUDIT=y
+# CONFIG_AUDITSYSCALL is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_GROUP_SCHED=y
+# CONFIG_FAIR_GROUP_SCHED is not set
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_HAVE_PERF_EVENTS=y
+
+#
+# Kernel Performance Events And Counters
+#
+# CONFIG_PERF_EVENTS is not set
+# CONFIG_PERF_COUNTERS is not set
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_PCI_QUIRKS=y
+CONFIG_SLUB_DEBUG=y
+CONFIG_COMPAT_BRK=y
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_HAVE_IOREMAP_PROT=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_ARCH_TRACEHOOK=y
+CONFIG_HAVE_DMA_ATTRS=y
+CONFIG_USE_GENERIC_SMP_HELPERS=y
+CONFIG_HAVE_DMA_API_DEBUG=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_SLOW_WORK is not set
+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_STOP_MACHINE=y
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_FREEZER is not set
+
+#
+# Platform support
+#
+# CONFIG_PPC_CHRP is not set
+# CONFIG_MPC5121_ADS is not set
+# CONFIG_MPC5121_GENERIC is not set
+# CONFIG_PPC_MPC52xx is not set
+# CONFIG_PPC_PMAC is not set
+# CONFIG_PPC_CELL is not set
+# CONFIG_PPC_CELL_NATIVE is not set
+# CONFIG_PPC_82xx is not set
+# CONFIG_PQ2ADS is not set
+# CONFIG_PPC_83xx is not set
+CONFIG_PPC_86xx=y
+CONFIG_MPC8641_HPCN=y
+# CONFIG_SBC8641D is not set
+# CONFIG_MPC8610_HPCD is not set
+# CONFIG_GEF_PPC9A is not set
+# CONFIG_GEF_SBC310 is not set
+# CONFIG_GEF_SBC610 is not set
+CONFIG_MPC8641=y
+CONFIG_PPC_OF_BOOT_TRAMPOLINE=y
+# CONFIG_IPIC is not set
+CONFIG_MPIC=y
+# CONFIG_MPIC_WEIRD is not set
+CONFIG_PPC_I8259=y
+# CONFIG_PPC_RTAS is not set
+# CONFIG_MMIO_NVRAM is not set
+# CONFIG_PPC_MPC106 is not set
+# CONFIG_PPC_970_NAP is not set
+# CONFIG_PPC_INDIRECT_IO is not set
+# CONFIG_GENERIC_IOMAP is not set
+# CONFIG_CPU_FREQ is not set
+# CONFIG_TAU is not set
+# CONFIG_QUICC_ENGINE is not set
+CONFIG_FSL_ULI1575=y
+# CONFIG_MPC8xxx_GPIO is not set
+# CONFIG_SIMPLE_GPIO is not set
+
+#
+# Kernel options
+#
+CONFIG_HIGHMEM=y
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_300 is not set
+CONFIG_HZ_1000=y
+CONFIG_HZ=1000
+CONFIG_SCHED_HRTICK=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_HAVE_AOUT is not set
+CONFIG_BINFMT_MISC=m
+CONFIG_IOMMU_HELPER=y
+CONFIG_SWIOTLB=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+CONFIG_ARCH_HAS_WALK_MEMORY=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
+# CONFIG_KEXEC is not set
+# CONFIG_CRASH_DUMP is not set
+# CONFIG_IRQ_ALL_CPUS is not set
+CONFIG_MAX_ACTIVE_REGIONS=32
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_MIGRATION=y
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_PPC_4K_PAGES=y
+# CONFIG_PPC_16K_PAGES is not set
+# CONFIG_PPC_64K_PAGES is not set
+# CONFIG_PPC_256K_PAGES is not set
+CONFIG_FORCE_MAX_ZONEORDER=11
+CONFIG_PROC_DEVICETREE=y
+# CONFIG_CMDLINE_BOOL is not set
+CONFIG_EXTRA_TARGETS=""
+# CONFIG_PM is not set
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_PPC_INDIRECT_PCI=y
+CONFIG_FSL_SOC=y
+CONFIG_FSL_PCI=y
+CONFIG_PPC_PCI_CHOICE=y
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCI_SYSCALL=y
+# CONFIG_PCIEPORTBUS is not set
+CONFIG_ARCH_SUPPORTS_MSI=y
+# CONFIG_PCI_MSI is not set
+# CONFIG_PCI_LEGACY is not set
+# CONFIG_PCI_DEBUG is not set
+# CONFIG_PCI_STUB is not set
+# CONFIG_PCI_IOV is not set
+# CONFIG_PCCARD is not set
+# CONFIG_HOTPLUG_PCI is not set
+CONFIG_HAS_RAPIDIO=y
+# CONFIG_RAPIDIO is not set
+
+#
+# Advanced setup
+#
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Default settings for advanced configuration options are used
+#
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_PAGE_OFFSET=0xc0000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_PHYSICAL_START=0x00000000
+CONFIG_TASK_SIZE=0xc0000000
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=y
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=m
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+CONFIG_NET_IPIP=y
+CONFIG_NET_IPGRE=y
+CONFIG_NET_IPGRE_BROADCAST=y
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+CONFIG_ARPD=y
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=y
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=y
+CONFIG_INET6_XFRM_MODE_TUNNEL=y
+CONFIG_INET6_XFRM_MODE_BEET=y
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=y
+CONFIG_IPV6_NDISC_NODETYPE=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_MSG is not set
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+# CONFIG_SCTP_HMAC_SHA1 is not set
+CONFIG_SCTP_HMAC_MD5=y
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_FIB_RULES=y
+CONFIG_WIRELESS=y
+# CONFIG_CFG80211 is not set
+CONFIG_CFG80211_DEFAULT_PS_VALUE=0
+CONFIG_WIRELESS_OLD_REGULATORY=y
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_LIB80211 is not set
+
+#
+# CFG80211 needs to be enabled for MAC80211
+#
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+# CONFIG_MTD is not set
+CONFIG_OF_DEVICE=y
+CONFIG_OF_I2C=y
+CONFIG_OF_MDIO=y
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=y
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=131072
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_PHANTOM is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_HP_ILO is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+CONFIG_EEPROM_LEGACY=y
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_CB710_CORE is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=y
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+CONFIG_SCSI_LOGGING=y
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_CXGB3_ISCSI is not set
+# CONFIG_SCSI_BNX2_ISCSI is not set
+# CONFIG_BE2ISCSI is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_MVSAS is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_MPT2SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
+# CONFIG_FCOE is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_PMCRAID is not set
+# CONFIG_SCSI_SRP is not set
+# CONFIG_SCSI_BFA_FC is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_ATA_VERBOSE_ERROR=y
+CONFIG_SATA_PMP=y
+CONFIG_SATA_AHCI=y
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_FSL is not set
+CONFIG_ATA_SFF=y
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+CONFIG_PATA_ALI=y
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATP867X is not set
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD640_PCI is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NINJA32 is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_NS87415 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RDC is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+# CONFIG_PATA_PLATFORM is not set
+# CONFIG_PATA_SCH is not set
+# CONFIG_MD is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# You can enable one or both FireWire driver stacks.
+#
+
+#
+# See the help texts for more information.
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+# CONFIG_MACINTOSH_DRIVERS is not set
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_ARCNET is not set
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+CONFIG_VITESSE_PHY=y
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_ETHOC is not set
+# CONFIG_DNET is not set
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_B44 is not set
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851_MLL is not set
+# CONFIG_ATL2 is not set
+# CONFIG_XILINX_EMACLITE is not set
+CONFIG_NETDEV_1000=y
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_E1000E is not set
+# CONFIG_IP1000 is not set
+# CONFIG_IGB is not set
+# CONFIG_IGBVF is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_CNIC is not set
+CONFIG_FSL_PQ_MDIO=y
+CONFIG_GIANFAR=y
+# CONFIG_MV643XX_ETH is not set
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+# CONFIG_ATL1E is not set
+# CONFIG_ATL1C is not set
+# CONFIG_JME is not set
+CONFIG_NETDEV_10000=y
+# CONFIG_CHELSIO_T1 is not set
+CONFIG_CHELSIO_T3_DEPENDS=y
+# CONFIG_CHELSIO_T3 is not set
+# CONFIG_ENIC is not set
+# CONFIG_IXGBE is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_VXGE is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+# CONFIG_NIU is not set
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_CORE is not set
+# CONFIG_TEHUTI is not set
+# CONFIG_BNX2X is not set
+# CONFIG_QLGE is not set
+# CONFIG_SFC is not set
+# CONFIG_BE2NET is not set
+# CONFIG_TR is not set
+CONFIG_WLAN=y
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=m
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO_XILINX_XPS_PS2 is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_NOZOMI is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DETECT_IRQ=y
+CONFIG_SERIAL_8250_RSA=y
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_UARTLITE is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+# CONFIG_SERIAL_OF_PLATFORM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_HVC_UDBG is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+CONFIG_NVRAM=y
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+# CONFIG_I2C_CHARDEV is not set
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# PC SMBus host controller drivers
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_ISCH is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+CONFIG_I2C_MPC=y
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Graphics adapter I2C/DDC channel drivers
+#
+# CONFIG_I2C_VOODOO3 is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+# CONFIG_SPI is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+# CONFIG_GPIOLIB is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_AGP is not set
+CONFIG_VGA_ARB=y
+# CONFIG_DRM is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=y
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+CONFIG_SOUND_OSS_CORE_PRECLAIM=y
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_HRTIMER is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_VMASTER=y
+# CONFIG_SND_RAWMIDI_SEQ is not set
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
+CONFIG_SND_AC97_CODEC=y
+CONFIG_SND_DRIVERS=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_AC97_POWER_SAVE is not set
+CONFIG_SND_PCI=y
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AW2 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_OXYGEN is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_CS5530 is not set
+# CONFIG_SND_CTXFI is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_INDIGOIOX is not set
+# CONFIG_SND_INDIGODJX is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_HIFIER is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+CONFIG_SND_INTEL8X0=y
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_LX6464ES is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VIRTUOSO is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+CONFIG_SND_PPC=y
+CONFIG_SND_USB=y
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_USX2Y is not set
+# CONFIG_SND_USB_CAIAQ is not set
+# CONFIG_SND_SOC is not set
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+# CONFIG_HID_DRAGONRISE is not set
+CONFIG_HID_EZKEY=y
+# CONFIG_HID_KYE is not set
+CONFIG_HID_GYRATION=y
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+# CONFIG_HID_NTRIG is not set
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_SMARTJOYPLUS is not set
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_ZEROPLUS is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_XHCI_HCD is not set
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_EHCI_FSL is not set
+CONFIG_USB_EHCI_HCD_PPC_OF=y
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
+CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
+CONFIG_USB_OHCI_HCD_PPC_OF=y
+CONFIG_USB_OHCI_HCD_PCI=y
+CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
+CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_WHCI_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+# CONFIG_USB_GADGET is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_NOP_USB_XCEIV is not set
+# CONFIG_UWB is not set
+# CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_NEW_LEDS is not set
+# CONFIG_ACCESSIBILITY is not set
+# CONFIG_INFINIBAND is not set
+# CONFIG_EDAC is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+CONFIG_RTC_DRV_CMOS=y
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_GENERIC is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4_FS is not set
+CONFIG_JBD=y
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=y
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+CONFIG_ADFS_FS=m
+# CONFIG_ADFS_FS_RW is not set
+CONFIG_AFFS_FS=m
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+CONFIG_BFS_FS=m
+CONFIG_EFS_FS=m
+CONFIG_CRAMFS=y
+# CONFIG_SQUASHFS is not set
+CONFIG_VXFS_FS=m
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+CONFIG_HPFS_FS=m
+CONFIG_QNX4FS_FS=m
+# CONFIG_ROMFS_FS is not set
+CONFIG_SYSV_FS=m
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
+CONFIG_ROOT_NFS=y
+CONFIG_NFSD=y
+# CONFIG_NFSD_V3 is not set
+# CONFIG_NFSD_V4 is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+# CONFIG_NLS_ISO8859_1 is not set
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_HAVE_LMB=y
+CONFIG_NLATTR=y
+CONFIG_GENERIC_ATOMIC64=y
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_HIGHMEM is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+# CONFIG_DEBUG_PAGEALLOC is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+# CONFIG_BOOT_TRACER is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_KMEMTRACE is not set
+# CONFIG_WORKQUEUE_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_PPC_DISABLE_WERROR is not set
+CONFIG_PPC_WERROR=y
+CONFIG_PRINT_STACK_DEPTH=64
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_CODE_PATCHING_SELFTEST is not set
+# CONFIG_FTR_FIXUP_SELFTEST is not set
+# CONFIG_MSI_BITMAP_SELFTEST is not set
+# CONFIG_XMON is not set
+# CONFIG_IRQSTACKS is not set
+# CONFIG_BDI_SWITCH is not set
+# CONFIG_BOOTX_TEXT is not set
+# CONFIG_PPC_EARLY_DEBUG is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_ZLIB is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
+# CONFIG_CRYPTO_DEV_TALITOS is not set
+# CONFIG_PPC_CLOCK is not set
+# CONFIG_VIRTUALIZATION is not set
diff --git a/recipes/linux/linux-2.6.33/p2020ds/defconfig b/recipes/linux/linux-2.6.33/p2020ds/defconfig
new file mode 100644
index 0000000000..7d98bc60d2
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/p2020ds/defconfig
@@ -0,0 +1,1986 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.33-rc3
+# Wed Jan 6 09:24:07 2010
+#
+# CONFIG_PPC64 is not set
+
+#
+# Processor support
+#
+# CONFIG_PPC_BOOK3S_32 is not set
+CONFIG_PPC_85xx=y
+# CONFIG_PPC_8xx is not set
+# CONFIG_40x is not set
+# CONFIG_44x is not set
+# CONFIG_E200 is not set
+CONFIG_E500=y
+# CONFIG_PPC_E500MC is not set
+CONFIG_FSL_EMB_PERFMON=y
+CONFIG_BOOKE=y
+CONFIG_FSL_BOOKE=y
+# CONFIG_PHYS_64BIT is not set
+CONFIG_SPE=y
+CONFIG_PPC_MMU_NOHASH=y
+CONFIG_PPC_MMU_NOHASH_32=y
+CONFIG_PPC_BOOK3E_MMU=y
+# CONFIG_PPC_MM_SLICES is not set
+CONFIG_SMP=y
+CONFIG_NR_CPUS=8
+CONFIG_PPC32=y
+CONFIG_WORD_SIZE=32
+# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_TIME_VSYSCALL=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
+# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set
+CONFIG_IRQ_PER_CPU=y
+CONFIG_NR_IRQS=512
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_ARCH_HAS_ILOG2_U32=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
+CONFIG_PPC=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_SCHED_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_PPC_OF=y
+CONFIG_OF=y
+CONFIG_PPC_UDBG_16550=y
+CONFIG_GENERIC_TBSYNC=y
+CONFIG_AUDIT_ARCH=y
+CONFIG_GENERIC_BUG=y
+CONFIG_DTC=y
+CONFIG_DEFAULT_UIMAGE=y
+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+# CONFIG_PPC_DCR_NATIVE is not set
+# CONFIG_PPC_DCR_MMIO is not set
+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_POSIX_MQUEUE_SYSCTL=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+CONFIG_AUDIT=y
+# CONFIG_AUDITSYSCALL is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_TINY_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_GROUP_SCHED=y
+# CONFIG_FAIR_GROUP_SCHED is not set
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_HAVE_PERF_EVENTS=y
+
+#
+# Kernel Performance Events And Counters
+#
+# CONFIG_PERF_EVENTS is not set
+# CONFIG_PERF_COUNTERS is not set
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_PCI_QUIRKS=y
+CONFIG_SLUB_DEBUG=y
+CONFIG_COMPAT_BRK=y
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_HAVE_IOREMAP_PROT=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_ARCH_TRACEHOOK=y
+CONFIG_HAVE_DMA_ATTRS=y
+CONFIG_USE_GENERIC_SMP_HELPERS=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_DMA_API_DEBUG=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+# CONFIG_SLOW_WORK is not set
+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_STOP_MACHINE=y
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+CONFIG_INLINE_SPIN_UNLOCK=y
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+CONFIG_INLINE_READ_UNLOCK=y
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+CONFIG_INLINE_READ_UNLOCK_IRQ=y
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+CONFIG_INLINE_WRITE_UNLOCK=y
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+CONFIG_MUTEX_SPIN_ON_OWNER=y
+# CONFIG_FREEZER is not set
+CONFIG_PPC_MSI_BITMAP=y
+
+#
+# Platform support
+#
+# CONFIG_PPC_CELL is not set
+# CONFIG_PPC_CELL_NATIVE is not set
+# CONFIG_PQ2ADS is not set
+CONFIG_FSL_SOC_BOOKE=y
+CONFIG_MPC8540_ADS=y
+CONFIG_MPC8560_ADS=y
+CONFIG_MPC85xx_CDS=y
+CONFIG_MPC85xx_MDS=y
+CONFIG_MPC8536_DS=y
+CONFIG_MPC85xx_DS=y
+CONFIG_MPC85xx_RDB=y
+CONFIG_SOCRATES=y
+CONFIG_KSI8560=y
+CONFIG_XES_MPC85xx=y
+CONFIG_STX_GP3=y
+CONFIG_TQM8540=y
+CONFIG_TQM8541=y
+CONFIG_TQM8548=y
+CONFIG_TQM8555=y
+CONFIG_TQM8560=y
+CONFIG_SBC8548=y
+# CONFIG_SBC8560 is not set
+# CONFIG_P4080_DS is not set
+CONFIG_TQM85xx=y
+# CONFIG_IPIC is not set
+CONFIG_MPIC=y
+# CONFIG_MPIC_WEIRD is not set
+CONFIG_PPC_I8259=y
+# CONFIG_PPC_RTAS is not set
+# CONFIG_MMIO_NVRAM is not set
+# CONFIG_PPC_MPC106 is not set
+# CONFIG_PPC_970_NAP is not set
+# CONFIG_PPC_INDIRECT_IO is not set
+# CONFIG_GENERIC_IOMAP is not set
+# CONFIG_CPU_FREQ is not set
+CONFIG_QUICC_ENGINE=y
+CONFIG_QE_GPIO=y
+CONFIG_CPM2=y
+CONFIG_FSL_ULI1575=y
+CONFIG_CPM=y
+CONFIG_MPC8xxx_GPIO=y
+# CONFIG_SIMPLE_GPIO is not set
+
+#
+# Kernel options
+#
+CONFIG_HIGHMEM=y
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_SCHED_HRTICK=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_HAVE_AOUT is not set
+CONFIG_BINFMT_MISC=m
+CONFIG_MATH_EMULATION=y
+CONFIG_IOMMU_HELPER=y
+CONFIG_SWIOTLB=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+CONFIG_ARCH_HAS_WALK_MEMORY=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
+# CONFIG_IRQ_ALL_CPUS is not set
+CONFIG_SPARSE_IRQ=y
+CONFIG_MAX_ACTIVE_REGIONS=32
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_MIGRATION=y
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_PPC_4K_PAGES=y
+# CONFIG_PPC_16K_PAGES is not set
+# CONFIG_PPC_64K_PAGES is not set
+# CONFIG_PPC_256K_PAGES is not set
+CONFIG_FORCE_MAX_ZONEORDER=11
+CONFIG_PROC_DEVICETREE=y
+# CONFIG_CMDLINE_BOOL is not set
+CONFIG_EXTRA_TARGETS=""
+# CONFIG_PM is not set
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_PPC_INDIRECT_PCI=y
+CONFIG_FSL_SOC=y
+CONFIG_FSL_PCI=y
+CONFIG_PPC_PCI_CHOICE=y
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCI_SYSCALL=y
+# CONFIG_PCIEPORTBUS is not set
+CONFIG_ARCH_SUPPORTS_MSI=y
+CONFIG_PCI_MSI=y
+# CONFIG_PCI_LEGACY is not set
+# CONFIG_PCI_DEBUG is not set
+# CONFIG_PCI_STUB is not set
+# CONFIG_PCI_IOV is not set
+# CONFIG_PCCARD is not set
+# CONFIG_HOTPLUG_PCI is not set
+CONFIG_HAS_RAPIDIO=y
+CONFIG_RAPIDIO=y
+CONFIG_RAPIDIO_DISC_TIMEOUT=30
+
+#
+# Advanced setup
+#
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Default settings for advanced configuration options are used
+#
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_LOWMEM_CAM_NUM=3
+CONFIG_PAGE_OFFSET=0xc0000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_PHYSICAL_START=0x00000000
+CONFIG_PHYSICAL_ALIGN=0x04000000
+CONFIG_TASK_SIZE=0xc0000000
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=y
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+CONFIG_NET_IPIP=y
+CONFIG_NET_IPGRE=y
+CONFIG_NET_IPGRE_BROADCAST=y
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+CONFIG_ARPD=y
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+CONFIG_INET_ESP=y
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=y
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=y
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=y
+CONFIG_INET6_XFRM_MODE_TUNNEL=y
+CONFIG_INET6_XFRM_MODE_BEET=y
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=y
+# CONFIG_IPV6_SIT_6RD is not set
+CONFIG_IPV6_NDISC_NODETYPE=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_MSG is not set
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+# CONFIG_SCTP_HMAC_SHA1 is not set
+CONFIG_SCTP_HMAC_MD5=y
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_FIB_RULES=y
+CONFIG_WIRELESS=y
+# CONFIG_CFG80211 is not set
+# CONFIG_LIB80211 is not set
+
+#
+# CFG80211 needs to be enabled for MAC80211
+#
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+CONFIG_MTD_OF_PARTS=y
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_PHYSMAP_OF=y
+# CONFIG_MTD_INTEL_VR_NOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_CAFE is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+CONFIG_MTD_NAND_FSL_ELBC=y
+# CONFIG_MTD_NAND_FSL_UPM is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+CONFIG_OF_DEVICE=y
+CONFIG_OF_GPIO=y
+CONFIG_OF_I2C=y
+CONFIG_OF_MDIO=y
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+
+#
+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
+#
+CONFIG_BLK_DEV_NBD=y
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=131072
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
+# CONFIG_PHANTOM is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_HP_ILO is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+CONFIG_EEPROM_LEGACY=y
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_CB710_CORE is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=y
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+CONFIG_SCSI_LOGGING=y
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_CXGB3_ISCSI is not set
+# CONFIG_SCSI_BNX2_ISCSI is not set
+# CONFIG_BE2ISCSI is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_HPSA is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_3W_SAS is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_MVSAS is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_MPT2SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
+# CONFIG_FCOE is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_PMCRAID is not set
+# CONFIG_SCSI_PM8001 is not set
+# CONFIG_SCSI_SRP is not set
+# CONFIG_SCSI_BFA_FC is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_ATA_VERBOSE_ERROR=y
+CONFIG_SATA_PMP=y
+CONFIG_SATA_AHCI=y
+# CONFIG_SATA_SIL24 is not set
+CONFIG_SATA_FSL=y
+CONFIG_ATA_SFF=y
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+CONFIG_PATA_ALI=y
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATP867X is not set
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD640_PCI is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NINJA32 is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_NS87415 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RDC is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_TOSHIBA is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+# CONFIG_PATA_PLATFORM is not set
+# CONFIG_PATA_SCH is not set
+# CONFIG_MD is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# You can enable one or both FireWire driver stacks.
+#
+
+#
+# The newer stack is recommended.
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+# CONFIG_MACINTOSH_DRIVERS is not set
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_ARCNET is not set
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+CONFIG_MARVELL_PHY=y
+CONFIG_DAVICOM_PHY=y
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+CONFIG_CICADA_PHY=y
+CONFIG_VITESSE_PHY=y
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+CONFIG_FIXED_PHY=y
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_ETHOC is not set
+# CONFIG_DNET is not set
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_B44 is not set
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851_MLL is not set
+# CONFIG_ATL2 is not set
+# CONFIG_XILINX_EMACLITE is not set
+CONFIG_FS_ENET=y
+CONFIG_FS_ENET_HAS_SCC=y
+CONFIG_FS_ENET_HAS_FCC=y
+# CONFIG_FS_ENET_MDIO_FCC is not set
+CONFIG_NETDEV_1000=y
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_E1000E is not set
+# CONFIG_IP1000 is not set
+# CONFIG_IGB is not set
+# CONFIG_IGBVF is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_CNIC is not set
+CONFIG_FSL_PQ_MDIO=y
+CONFIG_GIANFAR=y
+CONFIG_UCC_GETH=y
+# CONFIG_UGETH_TX_ON_DEMAND is not set
+# CONFIG_MV643XX_ETH is not set
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+# CONFIG_ATL1E is not set
+# CONFIG_ATL1C is not set
+# CONFIG_JME is not set
+CONFIG_NETDEV_10000=y
+# CONFIG_CHELSIO_T1 is not set
+CONFIG_CHELSIO_T3_DEPENDS=y
+# CONFIG_CHELSIO_T3 is not set
+# CONFIG_ENIC is not set
+# CONFIG_IXGBE is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_VXGE is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+# CONFIG_NIU is not set
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_CORE is not set
+# CONFIG_TEHUTI is not set
+# CONFIG_BNX2X is not set
+# CONFIG_QLGE is not set
+# CONFIG_SFC is not set
+# CONFIG_BE2NET is not set
+# CONFIG_TR is not set
+CONFIG_WLAN=y
+# CONFIG_AIRO is not set
+# CONFIG_ATMEL is not set
+# CONFIG_PRISM54 is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_RIONET is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_VMXNET3 is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=m
+# CONFIG_INPUT_POLLDEV is not set
+# CONFIG_INPUT_SPARSEKMAP is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO_XILINX_XPS_PS2 is not set
+# CONFIG_SERIO_ALTERA_PS2 is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_NOZOMI is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DETECT_IRQ=y
+CONFIG_SERIAL_8250_RSA=y
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_UARTLITE is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_CPM is not set
+# CONFIG_SERIAL_JSM is not set
+# CONFIG_SERIAL_OF_PLATFORM is not set
+CONFIG_SERIAL_QE=m
+# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_HVC_UDBG is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+CONFIG_NVRAM=y
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+# CONFIG_I2C_CHARDEV is not set
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# PC SMBus host controller drivers
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_ISCH is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+CONFIG_I2C_CPM=m
+# CONFIG_I2C_DESIGNWARE is not set
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_MPC=y
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+# CONFIG_SPI is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# Memory mapped GPIO expanders:
+#
+# CONFIG_GPIO_XILINX is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+
+#
+# PCI GPIO expanders:
+#
+# CONFIG_GPIO_CS5535 is not set
+# CONFIG_GPIO_BT8XX is not set
+# CONFIG_GPIO_LANGWELL is not set
+
+#
+# SPI GPIO expanders:
+#
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_UCB1400_CORE is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_MFD_88PM8607 is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_AGP is not set
+CONFIG_VGA_ARB=y
+# CONFIG_DRM is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=y
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+CONFIG_SOUND_OSS_CORE_PRECLAIM=y
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_HRTIMER is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_VMASTER=y
+# CONFIG_SND_RAWMIDI_SEQ is not set
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
+CONFIG_SND_AC97_CODEC=y
+CONFIG_SND_DRIVERS=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_AC97_POWER_SAVE is not set
+CONFIG_SND_PCI=y
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AW2 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_OXYGEN is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_CS5530 is not set
+# CONFIG_SND_CS5535AUDIO is not set
+# CONFIG_SND_CTXFI is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_INDIGOIOX is not set
+# CONFIG_SND_INDIGODJX is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_HIFIER is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+CONFIG_SND_INTEL8X0=y
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_LX6464ES is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VIRTUOSO is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+CONFIG_SND_PPC=y
+CONFIG_SND_USB=y
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_USX2Y is not set
+# CONFIG_SND_USB_CAIAQ is not set
+# CONFIG_SND_SOC is not set
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+# CONFIG_HID_DRAGONRISE is not set
+CONFIG_HID_EZKEY=y
+# CONFIG_HID_KYE is not set
+CONFIG_HID_GYRATION=y
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+# CONFIG_HID_NTRIG is not set
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_SMARTJOYPLUS is not set
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_ZEROPLUS is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_XHCI_HCD is not set
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_XPS_USB_HCD_XILINX is not set
+CONFIG_USB_EHCI_FSL=y
+CONFIG_USB_EHCI_HCD_PPC_OF=y
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
+CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
+CONFIG_USB_OHCI_HCD_PPC_OF=y
+CONFIG_USB_OHCI_HCD_PCI=y
+CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
+CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_FHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_WHCI_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+# CONFIG_USB_GADGET is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_NOP_USB_XCEIV is not set
+# CONFIG_UWB is not set
+# CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_NEW_LEDS is not set
+# CONFIG_ACCESSIBILITY is not set
+# CONFIG_INFINIBAND is not set
+CONFIG_EDAC=y
+
+#
+# Reporting subsystems
+#
+# CONFIG_EDAC_DEBUG is not set
+CONFIG_EDAC_MM_EDAC=y
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_BQ32K is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+CONFIG_RTC_DRV_CMOS=y
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_GENERIC is not set
+CONFIG_DMADEVICES=y
+
+#
+# DMA Devices
+#
+CONFIG_FSL_DMA=y
+CONFIG_DMA_ENGINE=y
+
+#
+# DMA Clients
+#
+# CONFIG_NET_DMA is not set
+# CONFIG_ASYNC_TX_DMA is not set
+# CONFIG_DMATEST is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=y
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+CONFIG_ADFS_FS=m
+# CONFIG_ADFS_FS_RW is not set
+CONFIG_AFFS_FS=m
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+CONFIG_BFS_FS=m
+CONFIG_EFS_FS=m
+CONFIG_CRAMFS=y
+# CONFIG_SQUASHFS is not set
+CONFIG_VXFS_FS=m
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+CONFIG_HPFS_FS=m
+CONFIG_QNX4FS_FS=m
+# CONFIG_ROMFS_FS is not set
+CONFIG_SYSV_FS=m
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
+CONFIG_ROOT_NFS=y
+CONFIG_NFSD=y
+# CONFIG_NFSD_V3 is not set
+# CONFIG_NFSD_V4 is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+# CONFIG_NLS_ISO8859_1 is not set
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+CONFIG_UCC_SLOW=y
+CONFIG_UCC_FAST=y
+CONFIG_UCC=y
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_HAVE_LMB=y
+CONFIG_NLATTR=y
+CONFIG_GENERIC_ATOMIC64=y
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_HIGHMEM is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+# CONFIG_DEBUG_PAGEALLOC is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+# CONFIG_BOOT_TRACER is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_KMEMTRACE is not set
+# CONFIG_WORKQUEUE_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_PPC_DISABLE_WERROR is not set
+CONFIG_PPC_WERROR=y
+CONFIG_PRINT_STACK_DEPTH=64
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_PPC_EMULATED_STATS is not set
+# CONFIG_CODE_PATCHING_SELFTEST is not set
+# CONFIG_FTR_FIXUP_SELFTEST is not set
+# CONFIG_MSI_BITMAP_SELFTEST is not set
+# CONFIG_XMON is not set
+# CONFIG_IRQSTACKS is not set
+CONFIG_VIRQ_DEBUG=y
+# CONFIG_BDI_SWITCH is not set
+# CONFIG_PPC_EARLY_DEBUG is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AUTHENC=y
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA256=y
+CONFIG_CRYPTO_SHA512=y
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_ZLIB is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
+CONFIG_CRYPTO_DEV_TALITOS=y
+CONFIG_PPC_CLOCK=y
+CONFIG_PPC_LIB_RHEAP=y
+# CONFIG_VIRTUALIZATION is not set
diff --git a/recipes/linux/linux-2.6.32+2.6.33-rc6/spitz/defconfig b/recipes/linux/linux-2.6.33/spitz/defconfig
index 1aedc1219f..1aedc1219f 100644
--- a/recipes/linux/linux-2.6.32+2.6.33-rc6/spitz/defconfig
+++ b/recipes/linux/linux-2.6.33/spitz/defconfig
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0001-ts72xx_base.patch b/recipes/linux/linux-2.6.33/ts72xx/0001-ts72xx_base.patch
new file mode 100644
index 0000000000..4579a0f315
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0001-ts72xx_base.patch
@@ -0,0 +1,417 @@
+From bb51edb79643d438abfa5b332547abf90caf7677 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 16:48:52 +0100
+Subject: [PATCH 01/16] ts72xx_base
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+- patch: allow to force nF bit in control reg
+- small fix: drivers/input/keyboard/ep93xx_keypad.c
+- register pwm1
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/Kconfig | 1 +
+ arch/arm/mach-ep93xx/Kconfig | 9 ++
+ arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h | 11 ++
+ arch/arm/mach-ep93xx/include/mach/memory.h | 28 +++++
+ arch/arm/mach-ep93xx/include/mach/ts72xx.h | 125 +++++++++++++++++++++--
+ arch/arm/mach-ep93xx/ts72xx.c | 40 +++++++-
+ arch/arm/mm/proc-arm920.S | 5 +-
+ 7 files changed, 207 insertions(+), 12 deletions(-)
+
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index 184a6bd..6cf5ed4 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -290,6 +290,7 @@ config ARCH_EP93XX
+ select CPU_ARM920T
+ select ARM_AMBA
+ select ARM_VIC
++ select ARCH_SPARSEMEM_ENABLE
+ select GENERIC_GPIO
+ select HAVE_CLK
+ select COMMON_CLKDEV
+diff --git a/arch/arm/mach-ep93xx/Kconfig b/arch/arm/mach-ep93xx/Kconfig
+index 9167c3d..335b0bb 100644
+--- a/arch/arm/mach-ep93xx/Kconfig
++++ b/arch/arm/mach-ep93xx/Kconfig
+@@ -7,6 +7,15 @@ config CRUNCH
+ help
+ Enable kernel support for MaverickCrunch.
+
++config CR1_NFBIT
++ bool "Turn on nF bit in ControlRegister 1"
++ help
++ Say 'Y' here to force the nF bit on. Usually this is set
++ by the bootrom. If it is not set, then the CPU core will
++ run from HCLK instead of FCLK, and performance will suffer.
++ If you see BogoMIPS of about 1/4 of your CPU clock, try
++ turning this on; your performance should double.
++
+ comment "EP93xx Platforms"
+
+ choice
+diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+index d55194a..d811c4f 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
++++ b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+@@ -111,16 +111,26 @@
+ #define EP93XX_I2S_BASE EP93XX_APB_IOMEM(0x00020000)
+
+ #define EP93XX_SECURITY_BASE EP93XX_APB_IOMEM(0x00030000)
++#define EP93XX_SECURITY_REG(x) (EP93XX_SECURITY_BASE + (x))
++#define EP93XX_SECURITY_UNIQID EP93XX_SECURITY_REG(0x2440)
+
+ #define EP93XX_GPIO_BASE EP93XX_APB_IOMEM(0x00040000)
+ #define EP93XX_GPIO_REG(x) (EP93XX_GPIO_BASE + (x))
+ #define EP93XX_GPIO_F_INT_STATUS EP93XX_GPIO_REG(0x5c)
++#define EP93XX_GPIO_F_INT_DEBOUNCE EP93XX_GPIO_REG(0x64)
+ #define EP93XX_GPIO_A_INT_STATUS EP93XX_GPIO_REG(0xa0)
++#define EP93XX_GPIO_A_INT_DEBOUNCE EP93XX_GPIO_REG(0xa8)
+ #define EP93XX_GPIO_B_INT_STATUS EP93XX_GPIO_REG(0xbc)
++#define EP93XX_GPIO_B_INT_DEBOUNCE EP93XX_GPIO_REG(0xc4)
+ #define EP93XX_GPIO_EEDRIVE EP93XX_GPIO_REG(0xc8)
+
++#define EP93XX_GPIO_A_DATA EP93XX_GPIO_REG(0x00)
++#define EP93XX_GPIO_A_DIRECTION EP93XX_GPIO_REG(0x10)
++#define EP93XX_GPIO_B_DATA EP93XX_GPIO_REG(0x04)
++
+ #define EP93XX_AAC_BASE EP93XX_APB_IOMEM(0x00080000)
+
++#define EP93XX_SPI_PHYS_BASE (EP93XX_APB_PHYS_BASE + 0x000a0000)
+ #define EP93XX_SPI_BASE EP93XX_APB_IOMEM(0x000a0000)
+
+ #define EP93XX_IRDA_BASE EP93XX_APB_IOMEM(0x000b0000)
+@@ -221,6 +231,7 @@
+ #define EP93XX_SYSCON_SYSCFG_LEECLK (1<<3)
+ #define EP93XX_SYSCON_SYSCFG_LCSN2 (1<<1)
+ #define EP93XX_SYSCON_SYSCFG_LCSN1 (1<<0)
++#define EP93XX_SYSCON_CHIPID EP93XX_SYSCON_REG(0x94)
+ #define EP93XX_SYSCON_SWLOCK EP93XX_SYSCON_REG(0xc0)
+
+ #define EP93XX_WATCHDOG_BASE EP93XX_APB_IOMEM(0x00140000)
+diff --git a/arch/arm/mach-ep93xx/include/mach/memory.h b/arch/arm/mach-ep93xx/include/mach/memory.h
+index 554064e..78eaacf 100644
+--- a/arch/arm/mach-ep93xx/include/mach/memory.h
++++ b/arch/arm/mach-ep93xx/include/mach/memory.h
+@@ -19,4 +19,32 @@
+ #error "Kconfig bug: No EP93xx PHYS_OFFSET set"
+ #endif
+
++/*
++ * Non-linear mapping like so:
++ * phys => virt
++ * 0x00000000 => 0xc0000000
++ * 0x01000000 => 0xc1000000
++ * 0x04000000 => 0xc4000000
++ * 0x05000000 => 0xc5000000
++ * 0xe0000000 => 0xc8000000
++ * 0xe1000000 => 0xc9000000
++ * 0xe4000000 => 0xcc000000
++ * 0xe5000000 => 0xcd000000
++ *
++ * As suggested here: http://marc.info/?l=linux-arm&m=122754446724900&w=2
++ *
++ * Note that static inline functions won't work here because
++ * arch/arm/include/asm/memory.h uses "#ifndef __virt_to_phys" to check whether to
++ * use generic functions or not.
++ */
++
++#define __phys_to_virt(p) \
++ (((p) & 0x07ffffff) | (((p) & 0xe0000000) ? 0x08000000 : 0) | PAGE_OFFSET)
++
++#define __virt_to_phys(v) \
++ (((v) & 0x07ffffff) | (((v) & 0x08000000) ? 0xe0000000 : 0 ))
++
++#define SECTION_SIZE_BITS 24
++#define MAX_PHYSMEM_BITS 32
++
+ #endif
+diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx.h b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+index 3bd934e..006c5a2 100644
+--- a/arch/arm/mach-ep93xx/include/mach/ts72xx.h
++++ b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+@@ -8,21 +8,35 @@
+ * virt phys size
+ * febff000 22000000 4K model number register
+ * febfe000 22400000 4K options register
+- * febfd000 22800000 4K options register #2
++ * febfd000 22800000 4K options register #2 (JP6 and TS-9420 flags)
+ * febfc000 [67]0000000 4K NAND data register
+ * febfb000 [67]0400000 4K NAND control register
+ * febfa000 [67]0800000 4K NAND busy register
+ * febf9000 10800000 4K TS-5620 RTC index register
+ * febf8000 11700000 4K TS-5620 RTC data register
++ * febf7000 23800000 4K CPLD watchdog (control register)
++ * febf6000 23c00000 4K CPLD watchdog (feed register)
++ * febf5000 23400000 4K PLD version (3 bits)
++ * febf4000 22c00000 4K RS-485 control register
++ * febf3000 23000000 4K RS-485 mode register
++ * febf2000 10800000 4K jumpers/max197 busy bit/COM1 dcd register (8-bit, read only)
++ * febf1000 10f00000 4K max197 sample/control register (16-bit read/8-bit write)
++ * febf0000 11e00000 4K PC/104 8-bit I/O
++ * febef000 21e00000 4K PC/104 16-bit I/O
++ * fea00000 11a00000 1MB PC/104 8-bit memory
++ * fe900000 21a00000 1MB PC/104 16-bit memory
+ */
+
+ #define TS72XX_MODEL_PHYS_BASE 0x22000000
+ #define TS72XX_MODEL_VIRT_BASE 0xfebff000
+ #define TS72XX_MODEL_SIZE 0x00001000
+
+-#define TS72XX_MODEL_TS7200 0x00
+-#define TS72XX_MODEL_TS7250 0x01
+-#define TS72XX_MODEL_TS7260 0x02
++#define TS7XXX_MODEL_TS7200 0x00
++#define TS7XXX_MODEL_TS7250 0x01
++#define TS7XXX_MODEL_TS7260 0x02
++#define TS7XXX_MODEL_TS7300 0x03
++#define TS7XXX_MODEL_TS7400 0x04
++#define TS7XXX_MODEL_MASK 0x07
+
+
+ #define TS72XX_OPTIONS_PHYS_BASE 0x22400000
+@@ -50,12 +64,13 @@
+ #define TS72XX_NAND2_CONTROL_PHYS_BASE 0x70400000
+ #define TS72XX_NAND_CONTROL_VIRT_BASE 0xfebfb000
+ #define TS72XX_NAND_CONTROL_SIZE 0x00001000
++#define TS72XX_NAND_CONTROL_OFFSET 0x00400000
+
+ #define TS72XX_NAND1_BUSY_PHYS_BASE 0x60800000
+ #define TS72XX_NAND2_BUSY_PHYS_BASE 0x70800000
+ #define TS72XX_NAND_BUSY_VIRT_BASE 0xfebfa000
+ #define TS72XX_NAND_BUSY_SIZE 0x00001000
+-
++#define TS72XX_NAND_BUSY_OFFSET 0x00800000
+
+ #define TS72XX_RTC_INDEX_VIRT_BASE 0xfebf9000
+ #define TS72XX_RTC_INDEX_PHYS_BASE 0x10800000
+@@ -65,33 +80,123 @@
+ #define TS72XX_RTC_DATA_PHYS_BASE 0x11700000
+ #define TS72XX_RTC_DATA_SIZE 0x00001000
+
++#define TS72XX_WATCHDOG_CONTROL_VIRT_BASE 0xfebf7000
++#define TS72XX_WATCHDOG_CONTROL_PHYS_BASE 0x23800000
++#define TS72XX_WATCHDOG_CONTROL_SIZE 0x00001000
++
++#define TS72XX_WATCHDOG_FEED_VIRT_BASE 0xfebf6000
++#define TS72XX_WATCHDOG_FEED_PHYS_BASE 0x23c00000
++#define TS72XX_WATCHDOG_FEED_SIZE 0x00001000
++
++#define TS72XX_PLD_VERSION_VIRT_BASE 0xfebf5000
++#define TS72XX_PLD_VERSION_PHYS_BASE 0x23400000
++#define TS72XX_PLD_VERSION_SIZE 0x00001000
++
++#define TS72XX_RS485_CONTROL_VIRT_BASE 0xfebf4000
++#define TS72XX_RS485_CONTROL_PHYS_BASE 0x22c00000
++#define TS72XX_RS485_CONTROL_SIZE 0x00001000
++
++#define TS72XX_RS485_MODE_VIRT_BASE 0xfebf3000
++#define TS72XX_RS485_MODE_PHYS_BASE 0x23000000
++#define TS72XX_RS485_MODE_SIZE 0x00001000
++
++#define TS72XX_JUMPERS_MAX197_VIRT_BASE 0xfebf2000
++#define TS72XX_JUMPERS_MAX197_PHYS_BASE 0x10800000
++#define TS72XX_JUMPERS_MAX197_SIZE 0x00001000
++
++#define TS72XX_MAX197_SAMPLE_VIRT_BASE 0xfebf1000
++#define TS72XX_MAX197_SAMPLE_PHYS_BASE 0x10f00000
++#define TS72XX_MAX197_SAMPLE_SIZE 0x00001000
++
++#define TS72XX_RS485_AUTO485FD 1
++#define TS72XX_RS485_AUTO485HD 2
++#define TS72XX_RS485_MODE_RS232 0x00
++#define TS72XX_RS485_MODE_FD 0x01
++#define TS72XX_RS485_MODE_9600_HD 0x04
++#define TS72XX_RS485_MODE_19200_HD 0x05
++#define TS72XX_RS485_MODE_57600_HD 0x06
++#define TS72XX_RS485_MODE_115200_HD 0x07
++
++
++#define TS72XX_PC104_8BIT_IO_VIRT_BASE 0xfebf0000
++#define TS72XX_PC104_8BIT_IO_PHYS_BASE 0x11e00000
++#define TS72XX_PC104_8BIT_IO_SIZE 0x00001000
++#define TS72XX_PC104_8BIT_MEM_VIRT_BASE 0xfea00000
++#define TS72XX_PC104_8BIT_MEM_PHYS_BASE 0x11a00000
++#define TS72XX_PC104_8BIT_MEM_SIZE 0x00100000
++
++#define TS72XX_PC104_16BIT_IO_VIRT_BASE 0xfebef000
++#define TS72XX_PC104_16BIT_IO_PHYS_BASE 0x21e00000
++#define TS72XX_PC104_16BIT_IO_SIZE 0x00001000
++#define TS72XX_PC104_16BIT_MEM_VIRT_BASE 0xfe900000
++#define TS72XX_PC104_16BIT_MEM_PHYS_BASE 0x21a00000
++#define TS72XX_PC104_16BIT_MEM_SIZE 0x00100000
++
++/*
++ * TS7200 CF memory map:
++ *
++ * phys size description
++ * 11000000 7 CF registers (8-bit each), starting at 11000001
++ * 10400006 2 CF aux registers (8-bit)
++ * 21000000 2 CF data register (16-bit)
++ */
++
++#define TS7200_CF_CMD_PHYS_BASE 0x11000000
++#define TS7200_CF_AUX_PHYS_BASE 0x10400006
++#define TS7200_CF_DATA_PHYS_BASE 0x21000000
+
+ #ifndef __ASSEMBLY__
+
+ static inline int board_is_ts7200(void)
+ {
+- return __raw_readb(TS72XX_MODEL_VIRT_BASE) == TS72XX_MODEL_TS7200;
++ return (__raw_readb(TS72XX_MODEL_VIRT_BASE) &
++ TS7XXX_MODEL_MASK) == TS7XXX_MODEL_TS7200;
+ }
+
+ static inline int board_is_ts7250(void)
+ {
+- return __raw_readb(TS72XX_MODEL_VIRT_BASE) == TS72XX_MODEL_TS7250;
++ return (__raw_readb(TS72XX_MODEL_VIRT_BASE) &
++ TS7XXX_MODEL_MASK) == TS7XXX_MODEL_TS7250;
+ }
+
+ static inline int board_is_ts7260(void)
+ {
+- return __raw_readb(TS72XX_MODEL_VIRT_BASE) == TS72XX_MODEL_TS7260;
++ return (__raw_readb(TS72XX_MODEL_VIRT_BASE) &
++ TS7XXX_MODEL_MASK) == TS7XXX_MODEL_TS7260;
++}
++
++static inline int board_is_ts7400(void)
++{
++ return (__raw_readb(TS72XX_MODEL_VIRT_BASE) &
++ TS7XXX_MODEL_MASK) == TS7XXX_MODEL_TS7400;
+ }
+
+ static inline int is_max197_installed(void)
+ {
+ return !!(__raw_readb(TS72XX_OPTIONS_VIRT_BASE) &
+- TS72XX_OPTIONS_MAX197);
++ TS72XX_OPTIONS_MAX197);
+ }
+
+ static inline int is_ts9420_installed(void)
+ {
+ return !!(__raw_readb(TS72XX_OPTIONS2_VIRT_BASE) &
+- TS72XX_OPTIONS2_TS9420);
++ TS72XX_OPTIONS2_TS9420);
++}
++
++static inline int is_rs485_installed(void)
++{
++ return !!(__raw_readb(TS72XX_OPTIONS_VIRT_BASE) &
++ TS72XX_OPTIONS_COM2_RS485);
++}
++
++static inline int get_ts72xx_pld_version(void)
++{
++ return (__raw_readb(TS72XX_PLD_VERSION_VIRT_BASE) & 0x7);
++}
++
++/* User jumper */
++static inline int is_jp6_set(void)
++{
++ return (__raw_readb(TS72XX_OPTIONS2_VIRT_BASE) & 0x1);
+ }
+ #endif
+diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
+index 259f782..4a97ff7 100644
+--- a/arch/arm/mach-ep93xx/ts72xx.c
++++ b/arch/arm/mach-ep93xx/ts72xx.c
+@@ -51,7 +51,36 @@ static struct map_desc ts72xx_io_desc[] __initdata = {
+ .pfn = __phys_to_pfn(TS72XX_RTC_DATA_PHYS_BASE),
+ .length = TS72XX_RTC_DATA_SIZE,
+ .type = MT_DEVICE,
+- }
++ },
++ /* Use this for debug only. Each device will map its own PC/104 address space */
++ ///* PC/104 (8-bit) I/O bus */
++ //{
++ // .virtual = TS72XX_PC104_8BIT_IO_VIRT_BASE,
++ // .pfn = __phys_to_pfn(TS72XX_PC104_8BIT_IO_PHYS_BASE),
++ // .length = TS72XX_PC104_8BIT_IO_SIZE,
++ // .type = MT_DEVICE,
++ //},
++ ///* PC/104 (16-bit) I/O bus */
++ //{
++ // .virtual = TS72XX_PC104_16BIT_IO_VIRT_BASE,
++ // .pfn = __phys_to_pfn(TS72XX_PC104_16BIT_IO_PHYS_BASE),
++ // .length = TS72XX_PC104_16BIT_IO_SIZE,
++ // .type = MT_DEVICE,
++ //},
++ ///* PC/104 (8-bit) MEM bus */
++ //{
++ // .virtual = TS72XX_PC104_8BIT_MEM_VIRT_BASE,
++ // .pfn = __phys_to_pfn(TS72XX_PC104_8BIT_MEM_PHYS_BASE),
++ // .length = TS72XX_PC104_8BIT_MEM_SIZE,
++ // .type = MT_DEVICE,
++ //},
++ ///* PC/104 (16-bit) MEM bus */
++ //{
++ // .virtual = TS72XX_PC104_16BIT_MEM_VIRT_BASE,
++ // .pfn = __phys_to_pfn(TS72XX_PC104_16BIT_MEM_PHYS_BASE),
++ // .length = TS72XX_PC104_16BIT_MEM_SIZE,
++ // .type = MT_DEVICE,
++ //}
+ };
+
+ static struct map_desc ts72xx_nand_io_desc[] __initdata = {
+@@ -140,6 +169,9 @@ static void __init ts72xx_register_flash(void)
+ platform_device_register(&ts72xx_flash);
+ }
+
++/*************************************************************************
++ * RTC
++ *************************************************************************/
+ static unsigned char ts72xx_rtc_readbyte(unsigned long addr)
+ {
+ __raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE);
+@@ -166,6 +198,9 @@ static struct platform_device ts72xx_rtc_device = {
+ .num_resources = 0,
+ };
+
++/*************************************************************************
++ * Ethernet
++ *************************************************************************/
+ static struct ep93xx_eth_data ts72xx_eth_data = {
+ .phy_id = 1,
+ };
+@@ -177,6 +212,9 @@ static void __init ts72xx_init_machine(void)
+ platform_device_register(&ts72xx_rtc_device);
+
+ ep93xx_register_eth(&ts72xx_eth_data, 1);
++
++ /* PWM1 is DIO_6 on TS-72xx header */
++ ep93xx_register_pwm(0, 1);
+ }
+
+ MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC")
+diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S
+index 471669e..158cc35 100644
+--- a/arch/arm/mm/proc-arm920.S
++++ b/arch/arm/mm/proc-arm920.S
+@@ -198,7 +198,7 @@ ENTRY(arm920_coherent_kern_range)
+ */
+ ENTRY(arm920_coherent_user_range)
+ bic r0, r0, #CACHE_DLINESIZE - 1
+-1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry
++1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
+ mcr p15, 0, r0, c7, c5, 1 @ invalidate I entry
+ add r0, r0, #CACHE_DLINESIZE
+ cmp r0, r1
+@@ -374,6 +374,9 @@ __arm920_setup:
+ mrc p15, 0, r0, c1, c0 @ get control register v4
+ bic r0, r0, r5
+ orr r0, r0, r6
++#ifdef CONFIG_CR1_NFBIT
++ orr r0, r0, #0x40000000 @ set nF
++#endif
+ mov pc, lr
+ .size __arm920_setup, . - __arm920_setup
+
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0002-ts72xx_force_machine-id.patch b/recipes/linux/linux-2.6.33/ts72xx/0002-ts72xx_force_machine-id.patch
new file mode 100644
index 0000000000..41f8462875
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0002-ts72xx_force_machine-id.patch
@@ -0,0 +1,50 @@
+From 8860be24fe28b65982fee215659e8f80db388a13 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:03:17 +0100
+Subject: [PATCH 02/16] ts72xx_force_machine-id
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/kernel/head.S | 3 +++
+ arch/arm/mach-ep93xx/Kconfig | 7 +++++++
+ 2 files changed, 10 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
+index eb62bf9..450fefa 100644
+--- a/arch/arm/kernel/head.S
++++ b/arch/arm/kernel/head.S
+@@ -82,6 +82,9 @@ ENTRY(stext)
+ bl __lookup_processor_type @ r5=procinfo r9=cpuid
+ movs r10, r5 @ invalid processor (r5=0)?
+ beq __error_p @ yes, error 'p'
++#ifdef CONFIG_MACH_TS72XX_FORCE_MACHINEID
++ ldr r1, =0x2a1
++#endif
+ bl __lookup_machine_type @ r5=machinfo
+ movs r8, r5 @ invalid machine (r5=0)?
+ beq __error_a @ yes, error 'a'
+diff --git a/arch/arm/mach-ep93xx/Kconfig b/arch/arm/mach-ep93xx/Kconfig
+index 335b0bb..049c9dd 100644
+--- a/arch/arm/mach-ep93xx/Kconfig
++++ b/arch/arm/mach-ep93xx/Kconfig
+@@ -191,6 +191,13 @@ config EP93XX_EARLY_UART3
+
+ endchoice
+
++config MACH_TS72XX_FORCE_MACHINEID
++ bool "Force Machine ID"
++ depends on MACH_TS72XX
++ help
++ Say 'Y' here to force Machine ID to 0x2A1 (MACH_TYPE_TS72XX legacy value)
++ In early days Technologic Systems fixed the 0x163 value in redboot.
++
+ endmenu
+
+ endif
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0003-ep93xx_cpuinfo.patch b/recipes/linux/linux-2.6.33/ts72xx/0003-ep93xx_cpuinfo.patch
new file mode 100644
index 0000000000..cb4b872c22
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0003-ep93xx_cpuinfo.patch
@@ -0,0 +1,37 @@
+From 60ab834032b50ad88ede8d50cfc7375cd0d705a0 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:07:14 +0100
+Subject: [PATCH 03/16] ep93xx_cpuinfo
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/kernel/setup.c | 9 +++++++++
+ 1 files changed, 9 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
+index 621acad..55914ad 100644
+--- a/arch/arm/kernel/setup.c
++++ b/arch/arm/kernel/setup.c
+@@ -861,6 +861,15 @@ static int c_show(struct seq_file *m, void *v)
+ seq_puts(m, "\n");
+
+ seq_printf(m, "Hardware\t: %s\n", machine_name);
++
++ #if defined(CONFIG_ARCH_EP93XX)
++ #include <mach/io.h>
++ #include <mach/ep93xx-regs.h>
++ system_rev = *((unsigned int *)EP93XX_SYSCON_CHIPID) >> 28;
++ system_serial_low = *((unsigned int *)EP93XX_SECURITY_UNIQID);
++ system_serial_high = 0;
++ #endif
++
+ seq_printf(m, "Revision\t: %04x\n", system_rev);
+ seq_printf(m, "Serial\t\t: %08x%08x\n",
+ system_serial_high, system_serial_low);
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0004-ts72xx_sbcinfo.patch b/recipes/linux/linux-2.6.33/ts72xx/0004-ts72xx_sbcinfo.patch
new file mode 100644
index 0000000000..9dda5e9257
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0004-ts72xx_sbcinfo.patch
@@ -0,0 +1,226 @@
+From 529f5a6533c34c4057f7f659acfecd7282a0fd01 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:11:19 +0100
+Subject: [PATCH 04/16] ts72xx_sbcinfo
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/Kconfig | 7 ++
+ arch/arm/mach-ep93xx/Makefile | 1 +
+ arch/arm/mach-ep93xx/ts72xx.c | 5 +
+ arch/arm/mach-ep93xx/ts72xx_sbcinfo.c | 156 +++++++++++++++++++++++++++++++++
+ 4 files changed, 169 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/ts72xx_sbcinfo.c
+
+diff --git a/arch/arm/mach-ep93xx/Kconfig b/arch/arm/mach-ep93xx/Kconfig
+index 049c9dd..34d2c3b 100644
+--- a/arch/arm/mach-ep93xx/Kconfig
++++ b/arch/arm/mach-ep93xx/Kconfig
+@@ -198,6 +198,13 @@ config MACH_TS72XX_FORCE_MACHINEID
+ Say 'Y' here to force Machine ID to 0x2A1 (MACH_TYPE_TS72XX legacy value)
+ In early days Technologic Systems fixed the 0x163 value in redboot.
+
++config MACH_TS72XX_SBCINFO
++ tristate "Add procfs /proc/driver/sbcinfo"
++ depends on MACH_TS72XX
++ help
++ Say 'Y' to add a procfs entry containing some information
++ related to Technologic Systems TS-72xx SBC.
++
+ endmenu
+
+ endif
+diff --git a/arch/arm/mach-ep93xx/Makefile b/arch/arm/mach-ep93xx/Makefile
+index eae6199..c2451e6 100644
+--- a/arch/arm/mach-ep93xx/Makefile
++++ b/arch/arm/mach-ep93xx/Makefile
+@@ -11,3 +11,4 @@ obj-$(CONFIG_MACH_EDB93XX) += edb93xx.o
+ obj-$(CONFIG_MACH_GESBC9312) += gesbc9312.o
+ obj-$(CONFIG_MACH_MICRO9) += micro9.o
+ obj-$(CONFIG_MACH_TS72XX) += ts72xx.o
++obj-$(CONFIG_MACH_TS72XX_SBCINFO) += ts72xx_sbcinfo.o
+diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
+index 4a97ff7..2c0af20 100644
+--- a/arch/arm/mach-ep93xx/ts72xx.c
++++ b/arch/arm/mach-ep93xx/ts72xx.c
+@@ -32,6 +32,11 @@ static struct map_desc ts72xx_io_desc[] __initdata = {
+ .length = TS72XX_MODEL_SIZE,
+ .type = MT_DEVICE,
+ }, {
++ .virtual = TS72XX_PLD_VERSION_VIRT_BASE,
++ .pfn = __phys_to_pfn(TS72XX_PLD_VERSION_PHYS_BASE),
++ .length = TS72XX_PLD_VERSION_SIZE,
++ .type = MT_DEVICE,
++ }, {
+ .virtual = TS72XX_OPTIONS_VIRT_BASE,
+ .pfn = __phys_to_pfn(TS72XX_OPTIONS_PHYS_BASE),
+ .length = TS72XX_OPTIONS_SIZE,
+diff --git a/arch/arm/mach-ep93xx/ts72xx_sbcinfo.c b/arch/arm/mach-ep93xx/ts72xx_sbcinfo.c
+new file mode 100644
+index 0000000..4589d14
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/ts72xx_sbcinfo.c
+@@ -0,0 +1,156 @@
++/*
++ * Technologic Systems TS-72XX sbc /proc/driver/sbcinfo entry.
++ *
++ * Original idea by Liberty Young (Technologic Systems).
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/io.h>
++#include <linux/proc_fs.h>
++#include <mach/hardware.h>
++#include <mach/ts72xx.h>
++
++struct infos {
++ const char *cpu_rev;
++ int model, pld;
++ int option_ad;
++ int option_rs485;
++ unsigned char jumpers[6]; // 0=off,1=on,2=error
++};
++
++static const char *revisions[] = { "A", "B", "C", "D0", "D1", "E0", "E1", "E2", "??" };
++
++
++static void get_sbcinfo(struct infos *data)
++{
++ void __iomem *p;
++ short rev;
++
++ /* CPU revision */
++ rev = __raw_readl(EP93XX_SYSCON_CHIPID) >> 28;
++ if (rev > ARRAY_SIZE(revisions))
++ rev = ARRAY_SIZE(revisions) - 1;
++ data->cpu_rev = revisions[rev];
++
++ /* Board model */
++ if (board_is_ts7200())
++ data->model = 7200;
++ else if (board_is_ts7250())
++ data->model = 7250;
++ else if (board_is_ts7260())
++ data->model = 7260;
++ else if (board_is_ts7400())
++ data->model = 7400;
++ else
++ data->model = 0;
++
++ data->pld = get_ts72xx_pld_version();
++
++ /* A/D converter (8 x 12-bit channels) */
++ if ((data->model == 7200) || (data->model == 7250)) {
++ data->option_ad = is_max197_installed();
++ } else {
++ data->option_ad = 0;
++ }
++
++ /* COM2 RS-485 */
++ if (is_rs485_installed()) {
++ data->option_rs485 = 1;
++ } else {
++ data->option_rs485 = 0;
++ }
++
++ /* jumpers */
++ p = ioremap(TS72XX_JUMPERS_MAX197_PHYS_BASE, TS72XX_JUMPERS_MAX197_SIZE);
++ if (p) {
++ unsigned char c = __raw_readb(p);
++
++ data->jumpers[0] = 2; // JP1 (bootstrap)
++ data->jumpers[1] = !!(c & 0x01); // JP2 (enable serial console)
++ data->jumpers[2] = !!(c & 0x02); // JP3 (flash write enable)
++ data->jumpers[3] = !(c & 0x08); // JP4 (console on COM2)
++ data->jumpers[4] = !(c & 0x10); // JP5 (test)
++ data->jumpers[5] = !!(is_jp6_set()); // JP6 (user jumper)
++
++ iounmap(p);
++ } else {
++ data->jumpers[0] = data->jumpers[1] = data->jumpers[2] = 2;
++ data->jumpers[3] = data->jumpers[4] = data->jumpers[5] = 2;
++ }
++
++}
++
++
++static int ts72xx_sbcinfo_read_proc(char *buffer, char **start, off_t offset,
++ int count, int *eof, void *data)
++{
++ int len, size = count;
++ char *p = buffer;
++ struct infos nfo;
++ const char jpc[3] = { 'n', 'y', '?' };
++
++ get_sbcinfo(&nfo);
++ len = scnprintf(p, size,
++ "Model : TS-%d (CPU rev %s) (PLD rev %c)\n"
++ "Option max197 A/D : %s\n"
++ "Option RS-485 : %s\n"
++ "Jumpers : JP2=%c JP3=%c JP4=%c JP5=%c JP6=%c\n",
++ nfo.model, nfo.cpu_rev, nfo.pld + 0x40,
++ (nfo.option_ad ? "yes" : "no"),
++ (nfo.option_rs485 ? "yes" : "no"),
++ jpc[nfo.jumpers[1]], jpc[nfo.jumpers[2]], jpc[nfo.jumpers[3]], jpc[nfo.jumpers[4]],
++ jpc[nfo.jumpers[5]]);
++
++ if (len <= offset + count)
++ *eof = 1;
++
++ *start = buffer + offset;
++ len -= offset;
++
++ if (len > count)
++ len = count;
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++
++
++static int __init ts72xx_sbcinfo_init(void)
++{
++ struct proc_dir_entry *entry;
++ int ret = 0;
++
++ entry = create_proc_read_entry("driver/sbcinfo", 0,
++ NULL, ts72xx_sbcinfo_read_proc, NULL);
++
++ if (!entry) {
++ printk(KERN_ERR "sbcinfo: can't create /proc/driver/sbcinfo\n");
++ ret = -ENOMEM;
++ }
++
++ return ret;
++}
++
++static void __exit ts72xx_sbcinfo_exit(void)
++{
++ remove_proc_entry("driver/sbcinfo", NULL);
++ return;
++}
++
++module_init(ts72xx_sbcinfo_init);
++module_exit(ts72xx_sbcinfo_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("Show information of Technologic Systems TS-72XX sbc");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("1.02");
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0005-ep93xx_eth.patch b/recipes/linux/linux-2.6.33/ts72xx/0005-ep93xx_eth.patch
new file mode 100644
index 0000000000..62a21bfed1
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0005-ep93xx_eth.patch
@@ -0,0 +1,539 @@
+From f73beb2a36d7d5a5036191512971b077469f9aec Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:45:23 +0100
+Subject: [PATCH 05/16] ep93xx_eth
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/net/arm/Kconfig | 1 +
+ drivers/net/arm/ep93xx_eth.c | 338 ++++++++++++++++++++++++++++++++++--------
+ 2 files changed, 277 insertions(+), 62 deletions(-)
+
+diff --git a/drivers/net/arm/Kconfig b/drivers/net/arm/Kconfig
+index 39e1c0d..55c0dd4 100644
+--- a/drivers/net/arm/Kconfig
++++ b/drivers/net/arm/Kconfig
+@@ -52,6 +52,7 @@ config EP93XX_ETH
+ tristate "EP93xx Ethernet support"
+ depends on ARM && ARCH_EP93XX
+ select MII
++ select PHYLIB
+ help
+ This is a driver for the ethernet hardware included in EP93xx CPUs.
+ Say Y if you are building a kernel for EP93xx based devices.
+diff --git a/drivers/net/arm/ep93xx_eth.c b/drivers/net/arm/ep93xx_eth.c
+index b25467a..9880208 100644
+--- a/drivers/net/arm/ep93xx_eth.c
++++ b/drivers/net/arm/ep93xx_eth.c
+@@ -2,6 +2,7 @@
+ * EP93xx ethernet network device driver
+ * Copyright (C) 2006 Lennert Buytenhek <buytenh@wantstofly.org>
+ * Dedicated to Marija Kulikova.
++ * Copyright (C) 2007 Herbert Valerio Riedel <hvr@gnu.org>
+ *
+ * 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
+@@ -14,6 +15,7 @@
+ #include <linux/kernel.h>
+ #include <linux/netdevice.h>
+ #include <linux/mii.h>
++#include <linux/phy.h>
+ #include <linux/etherdevice.h>
+ #include <linux/ethtool.h>
+ #include <linux/init.h>
+@@ -25,7 +27,7 @@
+ #include <asm/io.h>
+
+ #define DRV_MODULE_NAME "ep93xx-eth"
+-#define DRV_MODULE_VERSION "0.1"
++#define DRV_MODULE_VERSION "0.12"
+
+ #define RX_QUEUE_ENTRIES 64
+ #define TX_QUEUE_ENTRIES 8
+@@ -37,6 +39,8 @@
+ #define REG_RXCTL_DEFAULT 0x00073800
+ #define REG_TXCTL 0x0004
+ #define REG_TXCTL_ENABLE 0x00000001
++#define REG_TESTCTL 0x0008
++#define REG_TESTCTL_MFDX 0x00000040
+ #define REG_MIICMD 0x0010
+ #define REG_MIICMD_READ 0x00008000
+ #define REG_MIICMD_WRITE 0x00004000
+@@ -45,6 +49,9 @@
+ #define REG_MIISTS_BUSY 0x00000001
+ #define REG_SELFCTL 0x0020
+ #define REG_SELFCTL_RESET 0x00000001
++#define REG_SELFCTL_MDCDIV_MSK 0x00007e00
++#define REG_SELFCTL_MDCDIV_OFS 9
++#define REG_SELFCTL_PSPRS 0x00000100
+ #define REG_INTEN 0x0024
+ #define REG_INTEN_TX 0x00000008
+ #define REG_INTEN_RX 0x00000007
+@@ -174,8 +181,14 @@ struct ep93xx_priv
+
+ struct net_device_stats stats;
+
+- struct mii_if_info mii;
+ u8 mdc_divisor;
++ int phy_supports_mfps:1;
++
++ struct mii_bus mii_bus;
++ struct phy_device *phy_dev;
++ int speed;
++ int duplex;
++ int link;
+ };
+
+ #define rdb(ep, off) __raw_readb((ep)->base_addr + (off))
+@@ -185,8 +198,6 @@ struct ep93xx_priv
+ #define wrw(ep, off, val) __raw_writew((val), (ep)->base_addr + (off))
+ #define wrl(ep, off, val) __raw_writel((val), (ep)->base_addr + (off))
+
+-static int ep93xx_mdio_read(struct net_device *dev, int phy_id, int reg);
+-
+ static struct net_device_stats *ep93xx_get_stats(struct net_device *dev)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+@@ -522,6 +533,22 @@ err:
+ return 1;
+ }
+
++static int ep93xx_mdio_reset(struct mii_bus *bus)
++{
++ struct ep93xx_priv *ep = bus->priv;
++
++ u32 selfctl = rdl(ep, REG_SELFCTL);
++
++ selfctl &= ~(REG_SELFCTL_MDCDIV_MSK | REG_SELFCTL_PSPRS);
++
++ selfctl |= (ep->mdc_divisor - 1) << REG_SELFCTL_MDCDIV_OFS;
++ selfctl |= REG_SELFCTL_PSPRS;
++
++ wrl(ep, REG_SELFCTL, selfctl);
++
++ return 0;
++}
++
+ static int ep93xx_start_hw(struct net_device *dev)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+@@ -540,11 +567,8 @@ static int ep93xx_start_hw(struct net_device *dev)
+ return 1;
+ }
+
+- wrl(ep, REG_SELFCTL, ((ep->mdc_divisor - 1) << 9));
+-
+- /* Does the PHY support preamble suppress? */
+- if ((ep93xx_mdio_read(dev, ep->mii.phy_id, MII_BMSR) & 0x0040) != 0)
+- wrl(ep, REG_SELFCTL, ((ep->mdc_divisor - 1) << 9) | (1 << 8));
++ /* The reset cleared REG_SELFCTL, so set the MDC divisor again */
++ ep93xx_mdio_reset(&ep->mii_bus);
+
+ /* Receive descriptor ring. */
+ addr = ep->descs_dma_addr + offsetof(struct ep93xx_descs, rdesc);
+@@ -653,6 +677,8 @@ static int ep93xx_open(struct net_device *dev)
+
+ wrl(ep, REG_GIINTMSK, REG_GIINTMSK_ENABLE);
+
++ phy_start(ep->phy_dev);
++
+ netif_start_queue(dev);
+
+ return 0;
+@@ -665,6 +691,9 @@ static int ep93xx_close(struct net_device *dev)
+ napi_disable(&ep->napi);
+ netif_stop_queue(dev);
+
++ if (ep->phy_dev)
++ phy_stop(ep->phy_dev);
++
+ wrl(ep, REG_GIINTMSK, 0);
+ free_irq(ep->irq, dev);
+ ep93xx_stop_hw(dev);
+@@ -676,51 +705,83 @@ static int ep93xx_close(struct net_device *dev)
+ static int ep93xx_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+- struct mii_ioctl_data *data = if_mii(ifr);
+
+- return generic_mii_ioctl(&ep->mii, data, cmd, NULL);
++ return phy_mii_ioctl(ep->phy_dev, if_mii(ifr), cmd);
+ }
+
+-static int ep93xx_mdio_read(struct net_device *dev, int phy_id, int reg)
++/* common MII transactions should take < 100 iterations */
++#define EP93XX_PHY_TIMEOUT 2000
++
++static int ep93xx_mdio_wait(struct mii_bus *bus)
+ {
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- int data;
+- int i;
++ struct ep93xx_priv *ep = bus->priv;
++ unsigned int timeout = EP93XX_PHY_TIMEOUT;
+
+- wrl(ep, REG_MIICMD, REG_MIICMD_READ | (phy_id << 5) | reg);
++ while ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY)
++ && timeout--)
++ cpu_relax();
+
+- for (i = 0; i < 10; i++) {
+- if ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY) == 0)
+- break;
+- msleep(1);
++ if (timeout <= 0) {
++ dev_err(&bus->dev, "MII operation timed out\n");
++ return -ETIMEDOUT;
+ }
+
+- if (i == 10) {
+- printk(KERN_INFO DRV_MODULE_NAME ": mdio read timed out\n");
+- data = 0xffff;
+- } else {
+- data = rdl(ep, REG_MIIDATA);
+- }
++ return 0;
++}
++
++static int ep93xx_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
++{
++ struct ep93xx_priv *ep = bus->priv;
++ u32 selfctl;
++ u32 data;
++
++ if (ep93xx_mdio_wait(bus) < 0)
++ return -ETIMEDOUT;
++
++ selfctl = rdl(ep, REG_SELFCTL);
++
++ if (ep->phy_supports_mfps)
++ wrl(ep, REG_SELFCTL, selfctl | REG_SELFCTL_PSPRS);
++ else
++ wrl(ep, REG_SELFCTL, selfctl & ~REG_SELFCTL_PSPRS);
++
++ wrl(ep, REG_MIICMD, REG_MIICMD_READ | (mii_id << 5) | regnum);
++
++ if (ep93xx_mdio_wait(bus) < 0)
++ return -ETIMEDOUT;
++
++ data = rdl(ep, REG_MIIDATA);
++
++ wrl(ep, REG_SELFCTL, selfctl);
+
+ return data;
+ }
+
+-static void ep93xx_mdio_write(struct net_device *dev, int phy_id, int reg, int data)
++static int ep93xx_mdio_write(struct mii_bus *bus, int mii_id, int regnum,
++ u16 value)
+ {
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- int i;
++ struct ep93xx_priv *ep = bus->priv;
++ u32 selfctl;
+
+- wrl(ep, REG_MIIDATA, data);
+- wrl(ep, REG_MIICMD, REG_MIICMD_WRITE | (phy_id << 5) | reg);
++ if (ep93xx_mdio_wait(bus) < 0)
++ return -ETIMEDOUT;
+
+- for (i = 0; i < 10; i++) {
+- if ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY) == 0)
+- break;
+- msleep(1);
+- }
++ selfctl = rdl(ep, REG_SELFCTL);
+
+- if (i == 10)
+- printk(KERN_INFO DRV_MODULE_NAME ": mdio write timed out\n");
++ if (ep->phy_supports_mfps)
++ wrl(ep, REG_SELFCTL, selfctl | REG_SELFCTL_PSPRS);
++ else
++ wrl(ep, REG_SELFCTL, selfctl & ~REG_SELFCTL_PSPRS);
++
++ wrl(ep, REG_MIIDATA, value);
++ wrl(ep, REG_MIICMD, REG_MIICMD_WRITE | (mii_id << 5) | regnum);
++
++ if (ep93xx_mdio_wait(bus) < 0)
++ return -ETIMEDOUT;
++
++ wrl(ep, REG_SELFCTL, selfctl);
++
++ return 0;
+ }
+
+ static void ep93xx_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
+@@ -732,33 +793,30 @@ static void ep93xx_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *i
+ static int ep93xx_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_ethtool_gset(&ep->mii, cmd);
++ struct phy_device *phydev = ep->phy_dev;
++
++ if (!phydev)
++ return -ENODEV;
++
++ return phy_ethtool_gset(phydev, cmd);
+ }
+
+ static int ep93xx_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+ {
+ struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_ethtool_sset(&ep->mii, cmd);
+-}
++ struct phy_device *phydev = ep->phy_dev;
+
+-static int ep93xx_nway_reset(struct net_device *dev)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_nway_restart(&ep->mii);
+-}
++ if (!phydev)
++ return -ENODEV;
+
+-static u32 ep93xx_get_link(struct net_device *dev)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_link_ok(&ep->mii);
++ return phy_ethtool_sset(phydev, cmd);
+ }
+
+ static const struct ethtool_ops ep93xx_ethtool_ops = {
+ .get_drvinfo = ep93xx_get_drvinfo,
+ .get_settings = ep93xx_get_settings,
+ .set_settings = ep93xx_set_settings,
+- .nway_reset = ep93xx_nway_reset,
+- .get_link = ep93xx_get_link,
++ .get_link = ethtool_op_get_link,
+ };
+
+ static const struct net_device_ops ep93xx_netdev_ops = {
+@@ -820,12 +878,121 @@ static int ep93xx_eth_remove(struct platform_device *pdev)
+ return 0;
+ }
+
++static void ep93xx_adjust_link(struct net_device *dev)
++{
++ struct ep93xx_priv *ep = netdev_priv(dev);
++ struct phy_device *phydev = ep->phy_dev;
++
++ int status_change = 0;
++
++ if (phydev->link) {
++ if ((ep->speed != phydev->speed) ||
++ (ep->duplex != phydev->duplex)) {
++ /* speed and/or duplex state changed */
++ u32 testctl = rdl(ep, REG_TESTCTL);
++
++ if (DUPLEX_FULL == phydev->duplex)
++ testctl |= REG_TESTCTL_MFDX;
++ else
++ testctl &= ~(REG_TESTCTL_MFDX);
++
++ wrl(ep, REG_TESTCTL, testctl);
++
++ ep->speed = phydev->speed;
++ ep->duplex = phydev->duplex;
++ status_change = 1;
++ }
++ }
++
++ /* test for online/offline link transition */
++ if (phydev->link != ep->link) {
++ if (phydev->link) /* link went online */
++ netif_tx_schedule_all(dev);
++ else { /* link went offline */
++ ep->speed = 0;
++ ep->duplex = -1;
++ }
++ ep->link = phydev->link;
++
++ status_change = 1;
++ }
++
++ if (status_change)
++ phy_print_status(phydev);
++}
++
++static int ep93xx_mii_probe(struct net_device *dev, int phy_addr)
++{
++ struct ep93xx_priv *ep = netdev_priv(dev);
++ struct phy_device *phydev = NULL;
++ int val;
++
++ if (phy_addr >= 0 && phy_addr < PHY_MAX_ADDR)
++ phydev = ep->mii_bus.phy_map[phy_addr];
++
++ if (!phydev) {
++ dev_info(&dev->dev,
++ "PHY not found at specified address,"
++ " trying autodetection\n");
++
++ /* find the first phy */
++ for (phy_addr = 0; phy_addr < PHY_MAX_ADDR; phy_addr++) {
++ if (ep->mii_bus.phy_map[phy_addr]) {
++ phydev = ep->mii_bus.phy_map[phy_addr];
++ break;
++ }
++ }
++ }
++
++ if (!phydev) {
++ dev_err(&dev->dev, "no PHY found\n");
++ return -ENODEV;
++ }
++
++ phydev = phy_connect(dev, dev_name(&phydev->dev),
++ ep93xx_adjust_link, 0, PHY_INTERFACE_MODE_MII);
++
++ if (IS_ERR(phydev)) {
++ dev_err(&dev->dev, "Could not attach to PHY\n");
++ return PTR_ERR(phydev);
++ }
++
++ ep->phy_supports_mfps = 0;
++
++ val = phy_read(phydev, MII_BMSR);
++ if (val < 0) {
++ dev_err(&phydev->dev, "failed to read MII register\n");
++ return val;
++ }
++
++ if (val & 0x0040) {
++ dev_info(&phydev->dev,
++ "PHY supports MII frame preamble suppression\n");
++ ep->phy_supports_mfps = 1;
++ }
++
++ phydev->supported &= PHY_BASIC_FEATURES;
++
++ phydev->advertising = phydev->supported;
++
++ ep->link = 0;
++ ep->speed = 0;
++ ep->duplex = -1;
++ ep->phy_dev = phydev;
++
++ dev_info(&dev->dev, "attached PHY driver [%s] "
++ "(mii_bus:phy_addr=%s, irq=%d)\n",
++ phydev->drv->name, dev_name(&phydev->dev), phydev->irq);
++
++ return 0;
++}
++
+ static int ep93xx_eth_probe(struct platform_device *pdev)
+ {
+ struct ep93xx_eth_data *data;
+ struct net_device *dev;
+ struct ep93xx_priv *ep;
+- int err;
++ int err, i;
+
+ if (pdev == NULL)
+ return -ENODEV;
+@@ -848,7 +1015,7 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
+ if (ep->res == NULL) {
+ dev_err(&pdev->dev, "Could not reserve memory region\n");
+ err = -ENOMEM;
+- goto err_out;
++ goto err_out_request_mem_region;
+ }
+
+ ep->base_addr = ioremap(pdev->resource[0].start,
+@@ -856,17 +1023,36 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
+ if (ep->base_addr == NULL) {
+ dev_err(&pdev->dev, "Failed to ioremap ethernet registers\n");
+ err = -EIO;
+- goto err_out;
++ goto err_out_ioremap;
+ }
+ ep->irq = pdev->resource[1].start;
+
+- ep->mii.phy_id = data->phy_id;
+- ep->mii.phy_id_mask = 0x1f;
+- ep->mii.reg_num_mask = 0x1f;
+- ep->mii.dev = dev;
+- ep->mii.mdio_read = ep93xx_mdio_read;
+- ep->mii.mdio_write = ep93xx_mdio_write;
++ /* mdio/mii bus */
++ ep->mii_bus.state = MDIOBUS_ALLOCATED; /* see mdiobus_alloc */
++ ep->mii_bus.name = "ep93xx_mii_bus";
++ snprintf(ep->mii_bus.id, MII_BUS_ID_SIZE, "0");
++
++ ep->mii_bus.read = ep93xx_mdio_read;
++ ep->mii_bus.write = ep93xx_mdio_write;
++ ep->mii_bus.reset = ep93xx_mdio_reset;
++
++ ep->mii_bus.phy_mask = 0;
++
++ ep->mii_bus.priv = ep;
++ ep->mii_bus.dev = dev->dev;
++
++ ep->mii_bus.irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
++ if (NULL == ep->mii_bus.irq) {
++ dev_err(&pdev->dev, "Could not allocate memory\n");
++ err = -ENOMEM;
++ goto err_out_mii_bus_irq_kmalloc;
++ }
++
++ for (i = 0; i < PHY_MAX_ADDR; i++)
++ ep->mii_bus.irq[i] = PHY_POLL;
++
+ ep->mdc_divisor = 40; /* Max HCLK 100 MHz, min MDIO clk 2.5 MHz. */
++ ep->phy_supports_mfps = 0; /* probe without preamble suppression */
+
+ if (is_zero_ether_addr(dev->dev_addr))
+ random_ether_addr(dev->dev_addr);
+@@ -874,7 +1060,7 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
+ err = register_netdev(dev);
+ if (err) {
+ dev_err(&pdev->dev, "Failed to register netdev\n");
+- goto err_out;
++ goto err_out_register_netdev;
+ }
+
+ printk(KERN_INFO "%s: ep93xx on-chip ethernet, IRQ %d, "
+@@ -883,8 +1069,36 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
+ data->dev_addr[2], data->dev_addr[3],
+ data->dev_addr[4], data->dev_addr[5]);
+
++ err = mdiobus_register(&ep->mii_bus);
++ if (err) {
++ dev_err(&dev->dev, "Could not register MII bus\n");
++ goto err_out_mdiobus_register;
++ }
++
++ err = ep93xx_mii_probe(dev, data->phy_id);
++ if (err) {
++ dev_err(&dev->dev, "failed to probe MII bus\n");
++ goto err_out_mii_probe;
++ }
++
++ dev_info(&dev->dev, "ep93xx on-chip ethernet, IRQ %d, %pM\n",
++ ep->irq, dev->dev_addr);
++
+ return 0;
+
++err_out_mii_probe:
++ mdiobus_unregister(&ep->mii_bus);
++err_out_mdiobus_register:
++ unregister_netdev(dev);
++err_out_register_netdev:
++ kfree(ep->mii_bus.irq);
++err_out_mii_bus_irq_kmalloc:
++ iounmap(ep->base_addr);
++err_out_ioremap:
++ release_resource(ep->res);
++ kfree(ep->res);
++err_out_request_mem_region:
++ free_netdev(dev);
+ err_out:
+ ep93xx_eth_remove(pdev);
+ return err;
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0006-ts72xx_ts_ser1.patch b/recipes/linux/linux-2.6.33/ts72xx/0006-ts72xx_ts_ser1.patch
new file mode 100644
index 0000000000..f1c73825ba
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0006-ts72xx_ts_ser1.patch
@@ -0,0 +1,216 @@
+From 2decd8745e8768e975100914edb2828417e69155 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:52:13 +0100
+Subject: [PATCH 06/16] ts72xx_ts_ser1
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/serial/8250_ts_ser1.c | 150 +++++++++++++++++++++++++++++++++++++++++
+ drivers/serial/Kconfig | 17 +++++
+ drivers/serial/Makefile | 1 +
+ 3 files changed, 168 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/serial/8250_ts_ser1.c
+
+diff --git a/drivers/serial/8250_ts_ser1.c b/drivers/serial/8250_ts_ser1.c
+new file mode 100644
+index 0000000..a3c95d4
+--- /dev/null
++++ b/drivers/serial/8250_ts_ser1.c
+@@ -0,0 +1,150 @@
++/*
++ * linux/drivers/serial/8250_ts_ser1.c
++ * Technologic Systems TS-SER1 support.
++ *
++ * (c) Copyright 2006-2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Data taken from include/asm-i386/serial.h
++ *
++ * 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.
++ *
++ * Pin Number:
++ * 1 DCD
++ * 2 Receive data
++ * 3 Trasmit data
++ * 4 DTR
++ * 5 Signal Ground
++ * 6 DSR
++ * 7 RTS
++ * 8 CTS
++ * 9 RI
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/serial_8250.h>
++#include <linux/irq.h>
++#include <linux/io.h>
++#include <mach/hardware.h>
++#include <mach/ts72xx.h>
++#include <mach/gpio.h>
++
++
++#define TS72XX_SER1_IO_PHYS_BASE (TS72XX_PC104_8BIT_IO_PHYS_BASE)
++#define TS72XX_SER1_IO_SIZE (TS72XX_PC104_8BIT_IO_SIZE)
++
++#define TS_SER1_PORT_COM3 0x3E8
++#define TS_SER1_PORT_COM4 0x2E8
++#define TS_SER1_PORT_COM5 0x3A8
++
++/* Value to write in 16550A scratch register */
++#define MARKER_BYTE 0xAA /* or 0x55 */
++
++#define PORT(_base,_irq) \
++ { \
++ .iobase = _base, \
++ .membase = (void __iomem *)0, \
++ .irq = _irq, \
++ .uartclk = 1843200, \
++ .iotype = UPIO_PORT, \
++ .flags = UPF_BOOT_AUTOCONF, \
++ }
++// Note: IRQ can be shared (see CONFIG_SERIAL_8250_SHARE_IRQ)
++
++
++static struct plat_serial8250_port ts72xx_ser1_data_com3[] = {
++ PORT(TS_SER1_PORT_COM3, 0),
++ { },
++};
++
++static struct plat_serial8250_port ts72xx_ser1_data_com4[] = {
++ PORT(TS_SER1_PORT_COM4, 0),
++ { },
++};
++
++static struct plat_serial8250_port ts72xx_ser1_data_com5[] = {
++ PORT(TS_SER1_PORT_COM5, 0),
++ { },
++};
++
++static struct platform_device ts72xx_ser1_device = {
++ .name = "serial8250",
++ .id = 0,
++ .dev = {
++ .platform_data = ts72xx_ser1_data_com3,
++ },
++};
++
++static void __iomem *iomem;
++
++
++static int __init ts_ser1_init(void)
++{
++ static struct plat_serial8250_port *comX = NULL;
++ int n = 0; // COM number as printed on TS-SER1 pcb
++
++ iomem = ioremap(TS72XX_SER1_IO_PHYS_BASE, TS72XX_SER1_IO_SIZE);
++
++ if (iomem != NULL) {
++ __raw_writeb(MARKER_BYTE, iomem + TS_SER1_PORT_COM3 + 7);
++ if (__raw_readb(iomem + TS_SER1_PORT_COM3 + 7) == MARKER_BYTE) {
++ comX = ts72xx_ser1_data_com3;
++ n = 3;
++ } else {
++ __raw_writeb(MARKER_BYTE, iomem + TS_SER1_PORT_COM4 + 7);
++ if (__raw_readb(iomem + TS_SER1_PORT_COM4 + 7) == MARKER_BYTE) {
++ comX = ts72xx_ser1_data_com4;
++ n = 4;
++ } else {
++ __raw_writeb(MARKER_BYTE, iomem + TS_SER1_PORT_COM5 + 7);
++ if (__raw_readb(iomem + TS_SER1_PORT_COM5 + 7) == MARKER_BYTE) {
++ comX = ts72xx_ser1_data_com5;
++ n = 5;
++ }
++ }
++ }
++
++ if (comX) {
++ #if CONFIG_SERIAL_8250_TS_SER1_IRQ == 5
++ gpio_direction_input(EP93XX_GPIO_LINE_F(3));
++ comX->irq = gpio_to_irq(EP93XX_GPIO_LINE_F(3)); // 83
++ set_irq_type(comX->irq, IRQ_TYPE_EDGE_RISING);
++ #elif CONFIG_SERIAL_8250_TS_SER1_IRQ == 6
++ comX->irq = IRQ_EP93XX_EXT1;
++ #elif CONFIG_SERIAL_8250_TS_SER1_IRQ == 7
++ comX->irq = IRQ_EP93XX_EXT3;
++ #else
++ comX->irq = IRQ_EP93XX_EXT3;
++ #endif
++
++ comX->iobase += (unsigned long)iomem; // virtual address
++ }
++
++ ts72xx_ser1_device.id = n;
++ ts72xx_ser1_device.dev.platform_data = comX;
++ }
++
++ return ((comX == NULL) ? -ENODEV :
++ platform_device_register(&ts72xx_ser1_device));
++}
++
++static void __exit ts_ser1_exit(void)
++{
++ iounmap(iomem);
++ platform_device_unregister(&ts72xx_ser1_device);
++}
++
++module_init(ts_ser1_init);
++module_exit(ts_ser1_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("8250 serial probe module for TS-SER1 (TS-72xx)");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.3");
+diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
+index 9ff47db..c9afa26 100644
+--- a/drivers/serial/Kconfig
++++ b/drivers/serial/Kconfig
+@@ -275,6 +275,23 @@ config SERIAL_8250_RM9K
+ port hardware found on MIPS RM9122 and similar processors.
+ If unsure, say N.
+
++config SERIAL_8250_TS_SER1
++ tristate "Support TS-SER1 (for TS-72XX SBC)"
++ depends on SERIAL_8250 != n && MACH_TS72XX
++ help
++ Say Y here if you have a TS-SER1 PC/104 peripheral.
++ COM number will be configured automaticaly.
++
++ To compile this driver as a module, choose M here: the module
++ will be called 8250_ts_ser1.
++
++config SERIAL_8250_TS_SER1_IRQ
++ int "Selected IRQ (5, 6 or 7)"
++ depends on SERIAL_8250_TS_SER1
++ default "5"
++ help
++ Enter jumper IRQ configuration
++
+ comment "Non-8250 serial port support"
+
+ config SERIAL_AMBA_PL010
+diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
+index 5548fe7..1c655ad 100644
+--- a/drivers/serial/Makefile
++++ b/drivers/serial/Makefile
+@@ -28,6 +28,7 @@ obj-$(CONFIG_SERIAL_8250_BOCA) += 8250_boca.o
+ obj-$(CONFIG_SERIAL_8250_EXAR_ST16C554) += 8250_exar_st16c554.o
+ obj-$(CONFIG_SERIAL_8250_HUB6) += 8250_hub6.o
+ obj-$(CONFIG_SERIAL_8250_MCA) += 8250_mca.o
++obj-$(CONFIG_SERIAL_8250_TS_SER1) += 8250_ts_ser1.o
+ obj-$(CONFIG_SERIAL_AMBA_PL010) += amba-pl010.o
+ obj-$(CONFIG_SERIAL_AMBA_PL011) += amba-pl011.o
+ obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0007-ts72xx_rs485.patch b/recipes/linux/linux-2.6.33/ts72xx/0007-ts72xx_rs485.patch
new file mode 100644
index 0000000000..c1974f6b6d
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0007-ts72xx_rs485.patch
@@ -0,0 +1,236 @@
+From 9fe9aa83eb2af8eea9e90c73aaa3ee9e0018b8d7 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:54:33 +0100
+Subject: [PATCH 07/16] ts72xx_rs485
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+Crude hack...
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/include/asm/ioctls.h | 3 +
+ drivers/serial/Kconfig | 8 +++
+ drivers/serial/amba-pl010.c | 137 +++++++++++++++++++++++++++++++++++++++--
+ 3 files changed, 142 insertions(+), 6 deletions(-)
+
+diff --git a/arch/arm/include/asm/ioctls.h b/arch/arm/include/asm/ioctls.h
+index a91d8a1..a4b60ae 100644
+--- a/arch/arm/include/asm/ioctls.h
++++ b/arch/arm/include/asm/ioctls.h
+@@ -70,6 +70,9 @@
+ #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
+ #define FIOQSIZE 0x545E
+
++#define TIOC_SBCC485 0x545F /* TS72xx RTS/485 mode clear */
++#define TIOC_SBCS485 0x5460 /* TS72xx RTS/485 mode set */
++
+ /* Used for packet mode */
+ #define TIOCPKT_DATA 0
+ #define TIOCPKT_FLUSHREAD 1
+diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
+index c9afa26..d5d2f8c 100644
+--- a/drivers/serial/Kconfig
++++ b/drivers/serial/Kconfig
+@@ -321,6 +321,14 @@ config SERIAL_AMBA_PL010_CONSOLE
+ your boot loader (lilo or loadlin) about how to pass options to the
+ kernel at boot time.)
+
++config SERIAL_AMBA_PL010_TS72XX
++ bool "Support for RS-485 on AMBA serial port (for TS-72XX SBC)"
++ depends on SERIAL_AMBA_PL010 != n && MACH_TS72XX
++ help
++ This add support for RS-485 on some Technologic System SBC.
++
++ If unsure, say N.
++
+ config SERIAL_AMBA_PL011
+ tristate "ARM AMBA PL011 serial port support"
+ depends on ARM_AMBA
+diff --git a/drivers/serial/amba-pl010.c b/drivers/serial/amba-pl010.c
+index 429a8ae..aff4d9c 100644
+--- a/drivers/serial/amba-pl010.c
++++ b/drivers/serial/amba-pl010.c
+@@ -50,6 +50,10 @@
+
+ #include <asm/io.h>
+
++#if defined(CONFIG_SERIAL_AMBA_PL010_TS72XX)
++#include <mach/ts72xx.h>
++#endif
++
+ #define UART_NR 8
+
+ #define SERIAL_AMBA_MAJOR 204
+@@ -64,6 +68,12 @@
+ #define UART_DUMMY_RSR_RX 256
+ #define UART_PORT_SIZE 64
+
++#if defined(CONFIG_SERIAL_AMBA_PL010_TS72XX)
++static void __iomem *ts_rs485_data9_register;
++static void __iomem *ts_rs485_control_register;
++#endif
++
++
+ /*
+ * We wrap our port structure around the generic uart_port.
+ */
+@@ -385,7 +395,7 @@ pl010_set_termios(struct uart_port *port, struct ktermios *termios,
+ /*
+ * Ask the core to calculate the divisor for us.
+ */
+- baud = uart_get_baud_rate(port, termios, old, 0, uap->port.uartclk/16);
++ baud = uart_get_baud_rate(port, termios, old, 0, uap->port.uartclk/16);
+ quot = uart_get_divisor(port, baud);
+
+ switch (termios->c_cflag & CSIZE) {
+@@ -519,6 +529,107 @@ static int pl010_verify_port(struct uart_port *port, struct serial_struct *ser)
+ return ret;
+ }
+
++
++#if defined(CONFIG_SERIAL_AMBA_PL010_TS72XX)
++static int ts72xx_rs485_init(void)
++{
++ ts_rs485_data9_register = ioremap(TS72XX_RS485_MODE_PHYS_BASE, 4096);
++ if (ts_rs485_data9_register == NULL) {
++ return -1;
++ }
++
++ ts_rs485_control_register = ioremap(TS72XX_RS485_CONTROL_PHYS_BASE, 4096);
++ if (ts_rs485_control_register == NULL) {
++ iounmap(ts_rs485_data9_register);
++ return -1;
++ }
++
++ return 0;
++}
++
++static int ts72xx_auto485(struct uart_port *port, unsigned int cmd, unsigned long *arg)
++{
++ int baud, cflag, mode;
++ int datalength;
++
++ mode = (int)*arg;
++ if (!is_rs485_installed()) {
++ printk("amba-pl010.c: this board does not support RS485 auto mode\n");
++ return -EINVAL;
++ }
++
++ if (port->line != 1) {
++ printk("amba-pl010.c: auto RS485 mode is only supported on second port (/dev/ttyAM1)\n");
++ return -EINVAL;
++ }
++
++ datalength = 8;
++ cflag = port->state->port.tty->termios->c_cflag;
++ if (cflag & PARENB)
++ datalength++;
++
++ if (cflag & CSTOPB)
++ datalength++;
++
++ baud = tty_get_baud_rate(port->state->port.tty);
++
++ switch (cmd) {
++ case TIOC_SBCC485:
++ if ((mode & TS72XX_RS485_AUTO485FD) || (mode & TS72XX_RS485_AUTO485HD)) {
++ printk("amba-pl010.c: unsetting auto RS485 mode\n");
++ __raw_writew(TS72XX_RS485_MODE_RS232, ts_rs485_control_register);
++ __raw_writew(TS72XX_RS485_MODE_RS232, ts_rs485_data9_register);
++ }
++ break;
++ case TIOC_SBCS485:
++ if (mode & TS72XX_RS485_AUTO485FD) {
++ printk ("amba-pl010.c: setting FULL duplex auto RS485 mode\n");
++ __raw_writew(TS72XX_RS485_MODE_FD, ts_rs485_control_register);
++ if (datalength > 8)
++ __raw_writew(TS72XX_RS485_MODE_FD, ts_rs485_data9_register);
++ } else if (mode & TS72XX_RS485_AUTO485HD) {
++ printk("amba-pl010.c: setting HALF DUPLEX auto RS485 mode\n");
++ switch (baud) {
++ case 9600:
++ __raw_writew(TS72XX_RS485_MODE_9600_HD, ts_rs485_control_register);
++ break;
++ case 19200:
++ __raw_writew(TS72XX_RS485_MODE_19200_HD, ts_rs485_control_register);
++ break;
++ case 57600:
++ __raw_writew(TS72XX_RS485_MODE_57600_HD, ts_rs485_control_register);
++ break;
++ case 115200:
++ __raw_writew(TS72XX_RS485_MODE_115200_HD, ts_rs485_control_register);
++ break;
++ default:
++ printk("amba-pl010.c: %d baud rate is not supported for auto RS485 mode\n", baud);
++ return -1;
++ }
++ if (datalength > 8)
++ __raw_writew(TS72XX_RS485_MODE_FD, ts_rs485_data9_register);
++ }
++ break;
++ }
++
++ return 0;
++}
++
++static int pl010_ioctl(struct uart_port *port, unsigned int cmd, unsigned long arg)
++{
++ switch (cmd) {
++ case TIOC_SBCC485:
++ case TIOC_SBCS485:
++ return ts72xx_auto485(port, cmd, (unsigned long *)arg);
++ default:
++ return -ENOIOCTLCMD;
++ }
++
++ return -ENOIOCTLCMD;
++}
++#endif /* CONFIG_SERIAL_AMBA_PL010_TS72XX */
++
++
+ static struct uart_ops amba_pl010_pops = {
+ .tx_empty = pl010_tx_empty,
+ .set_mctrl = pl010_set_mctrl,
+@@ -536,6 +647,9 @@ static struct uart_ops amba_pl010_pops = {
+ .request_port = pl010_request_port,
+ .config_port = pl010_config_port,
+ .verify_port = pl010_verify_port,
++#if defined(CONFIG_SERIAL_AMBA_PL010_TS72XX)
++ .ioctl = pl010_ioctl,
++#endif
+ };
+
+ static struct uart_amba_port *amba_ports[UART_NR];
+@@ -792,11 +906,22 @@ static int __init pl010_init(void)
+ printk(KERN_INFO "Serial: AMBA driver\n");
+
+ ret = uart_register_driver(&amba_reg);
+- if (ret == 0) {
+- ret = amba_driver_register(&pl010_driver);
+- if (ret)
+- uart_unregister_driver(&amba_reg);
+- }
++ if (ret == 0) {
++ ret = amba_driver_register(&pl010_driver);
++
++ #if defined(CONFIG_SERIAL_AMBA_PL010_TS72XX)
++ if (!ret && is_rs485_installed()) {
++ ret = ts72xx_rs485_init();
++ if (ret)
++ printk("amba-pl010.c: ts72xx_rs485_init() failed\n");
++ else
++ printk("amba-pl010.c: auto RS485 mode initialized\n");
++ }
++ #endif
++
++ if (ret)
++ uart_unregister_driver(&amba_reg);
++ }
+ return ret;
+ }
+
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0008-ts72xx_ts_eth100.patch b/recipes/linux/linux-2.6.33/ts72xx/0008-ts72xx_ts_eth100.patch
new file mode 100644
index 0000000000..0ef09f26a5
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0008-ts72xx_ts_eth100.patch
@@ -0,0 +1,261 @@
+From 1276afc164f22c1d2304df0f57e0bdcab160f0b8 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 17:59:19 +0100
+Subject: [PATCH 08/16] ts72xx_ts_eth100
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/net/Kconfig | 10 ++
+ drivers/net/Makefile | 1 +
+ drivers/net/ax88796.c | 4 +
+ drivers/net/ax88796_ts_eth100.c | 185 +++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 200 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/net/ax88796_ts_eth100.c
+
+diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
+index dd9a09c..4007f1e 100644
+--- a/drivers/net/Kconfig
++++ b/drivers/net/Kconfig
+@@ -236,6 +236,16 @@ config AX88796_93CX6
+ help
+ Select this if your platform comes with an external 93CX6 eeprom.
+
++config AX88796_TS_ETH100
++ tristate "Support for TS-ETH100 (TS-72XX SBC)"
++ depends on AX88796 && MACH_TS72XX
++ help
++ Say Y here if you have a TS-ETH100 PC/104 peripheral.
++ IRQ numbers and I/O address will be configurated automatically.
++
++ To compile this driver as a module, choose M here: the module
++ will be called ax88796_ts_eth100.
++
+ config MACE
+ tristate "MACE (Power Mac ethernet) support"
+ depends on PPC_PMAC && PPC32
+diff --git a/drivers/net/Makefile b/drivers/net/Makefile
+index ad1346d..5e50254 100644
+--- a/drivers/net/Makefile
++++ b/drivers/net/Makefile
+@@ -140,6 +140,7 @@ obj-$(CONFIG_B44) += b44.o
+ obj-$(CONFIG_FORCEDETH) += forcedeth.o
+ obj-$(CONFIG_NE_H8300) += ne-h8300.o 8390.o
+ obj-$(CONFIG_AX88796) += ax88796.o
++obj-$(CONFIG_AX88796_TS_ETH100) += ax88796_ts_eth100.o
+ obj-$(CONFIG_BCM63XX_ENET) += bcm63xx_enet.o
+
+ obj-$(CONFIG_TSI108_ETH) += tsi108_eth.o
+diff --git a/drivers/net/ax88796.c b/drivers/net/ax88796.c
+index 1dd4403..8a88508 100644
+--- a/drivers/net/ax88796.c
++++ b/drivers/net/ax88796.c
+@@ -934,7 +934,11 @@ static int ax_probe(struct platform_device *pdev)
+ goto exit_mem2;
+ }
+
++ #ifdef CONFIG_AX88796_TS_ETH100
++ ei_status.reg_offset[0x10] = ax->map2 - ei_status.mem + 0x10;
++ #else
+ ei_status.reg_offset[0x1f] = ax->map2 - ei_status.mem;
++ #endif
+ }
+
+ /* got resources, now initialise and register device */
+diff --git a/drivers/net/ax88796_ts_eth100.c b/drivers/net/ax88796_ts_eth100.c
+new file mode 100644
+index 0000000..e8eb5e7
+--- /dev/null
++++ b/drivers/net/ax88796_ts_eth100.c
+@@ -0,0 +1,185 @@
++/*
++ * linux/drivers/net/ax88796_ts_eth100.c
++ * Technologic Systems TS-ETH100 support.
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/irq.h>
++#include <linux/io.h>
++#include <net/ax88796.h>
++#include <mach/ts72xx.h>
++#include <mach/gpio.h>
++
++#define TS72XX_ETH100_IO8_PHYS_BASE (TS72XX_PC104_8BIT_IO_PHYS_BASE)
++#define TS72XX_ETH100_IO8_SIZE (TS72XX_PC104_8BIT_IO_SIZE)
++#define TS72XX_ETH100_IO16_PHYS_BASE (TS72XX_PC104_16BIT_IO_PHYS_BASE)
++#define TS72XX_ETH100_IO16_SIZE (TS72XX_PC104_16BIT_IO_SIZE)
++
++/* Technologic systems I/O space */
++#define TS_ETH100_PLD_0 0x100
++#define TS_ETH100_PLD_1 0x110
++#define TS_ETH100_PLD_2 0x120
++#define TS_ETH100_PLD_3 0x130
++
++/* NE2000 I/O space */
++#define TS_ETH100_MAC_0 0x200
++#define TS_ETH100_MAC_1 0x240
++#define TS_ETH100_MAC_2 0x300
++#define TS_ETH100_MAC_3 0x340
++
++/* Board identifier must be 5 ; PLD revision should be 1 */
++#define is_eth100_present(__iomem, __offset) \
++ (((__raw_readb(__iomem + __offset) & 0xF) == 0x5) && \
++ ((__raw_readb(__iomem + __offset + 4) & 0xF) == 0x1))
++
++/* Jumpers status (SRAM control register) */
++#define read_irq(__iomem, __offset) \
++ (__raw_readb(__iomem + __offset + 8) & 0xE)
++
++
++static u32 offsets[0x20] = {
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
++ 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
++};
++
++static struct ax_plat_data ts72xx_eth100_asix_data = {
++ .flags = AXFLG_HAS_93CX6,
++ .wordlength = 2,
++ .dcr_val = 0x48,
++ .rcr_val = 0x40,
++ .reg_offsets = offsets,
++};
++
++static struct resource ts72xx_eth100_resource[] = {
++ [0] = {
++ .start = TS72XX_ETH100_IO8_PHYS_BASE,
++ .end = TS72XX_ETH100_IO8_PHYS_BASE + 0x3ff, //0x20 -1,
++ .flags = IORESOURCE_MEM
++ },
++ [1] = { /* 0x10 is NE_DATAPORT is 16-bit access */
++ .start = TS72XX_ETH100_IO16_PHYS_BASE,
++ .end = TS72XX_ETH100_IO16_PHYS_BASE + 0x3ff, //0x20 -1,
++ .flags = IORESOURCE_MEM
++ },
++ [2] = {
++ .start = IRQ_EP93XX_EXT1,
++ .end = IRQ_EP93XX_EXT1,
++ .flags = IORESOURCE_IRQ
++ }
++};
++
++
++static void ts72xx_eth100_release(struct device *dev)
++{
++ // nothing to do (no kfree) because we have static struct
++}
++
++
++static struct platform_device ts72xx_eth100_device_asix = {
++ .name = "ax88796",
++ .id = 0,
++ .num_resources = ARRAY_SIZE(ts72xx_eth100_resource),
++ .resource = ts72xx_eth100_resource,
++ .dev = {
++ .platform_data = &ts72xx_eth100_asix_data,
++ .release = ts72xx_eth100_release,
++ }
++};
++
++
++static int __init ts_eth100_init(void)
++{
++ void __iomem *iomem;
++ static struct platform_device *ethX = NULL;
++
++ iomem = ioremap(TS72XX_ETH100_IO8_PHYS_BASE, TS72XX_ETH100_IO8_SIZE);
++ if (iomem != NULL) {
++ int irq = 0;
++
++ ethX = &ts72xx_eth100_device_asix;
++
++ if (is_eth100_present(iomem, TS_ETH100_PLD_0)) {
++ ethX->resource[0].start += TS_ETH100_MAC_0;
++ ethX->resource[0].end += TS_ETH100_MAC_0;
++ ethX->resource[1].start += TS_ETH100_MAC_0;
++ ethX->resource[1].end += TS_ETH100_MAC_0;
++ irq = read_irq(iomem, TS_ETH100_PLD_0);
++ } else if(is_eth100_present(iomem, TS_ETH100_PLD_1)) {
++ ethX->resource[0].start += TS_ETH100_MAC_1;
++ ethX->resource[0].end += TS_ETH100_MAC_1;
++ ethX->resource[1].start += TS_ETH100_MAC_1;
++ ethX->resource[1].end += TS_ETH100_MAC_1;
++ irq = read_irq(iomem, TS_ETH100_PLD_1);
++ } else if(is_eth100_present(iomem, TS_ETH100_PLD_2)) {
++ ethX->resource[0].start += TS_ETH100_MAC_2;
++ ethX->resource[0].end += TS_ETH100_MAC_2;
++ ethX->resource[1].start += TS_ETH100_MAC_2;
++ ethX->resource[1].end += TS_ETH100_MAC_2;
++ irq = read_irq(iomem, TS_ETH100_PLD_2);
++ } else if(is_eth100_present(iomem, TS_ETH100_PLD_3)) {
++ ethX->resource[0].start += TS_ETH100_MAC_3;
++ ethX->resource[0].end += TS_ETH100_MAC_3;
++ ethX->resource[1].start += TS_ETH100_MAC_3;
++ ethX->resource[1].end += TS_ETH100_MAC_3;
++ irq = read_irq(iomem, TS_ETH100_PLD_3);
++ } else {
++ ethX = NULL;
++ }
++
++ /* Translate IRQ number */
++ if (ethX != NULL) {
++ switch (irq) {
++ case 0x2: /* IRQ5 */
++ ethX->resource[2].start = gpio_to_irq(EP93XX_GPIO_LINE_F(3)); // 83
++ ethX->resource[2].end = gpio_to_irq(EP93XX_GPIO_LINE_F(3));
++ gpio_direction_input(EP93XX_GPIO_LINE_F(3));
++ set_irq_type(ethX->resource[2].start, IRQ_TYPE_EDGE_RISING);
++ break;
++ case 0x4: /* IRQ6 */
++ ethX->resource[2].start = IRQ_EP93XX_EXT1;
++ ethX->resource[2].end = IRQ_EP93XX_EXT1;
++ break;
++ case 0x8: /* IRQ7 */
++ default:
++ ethX->resource[2].start = IRQ_EP93XX_EXT3;
++ ethX->resource[2].end = IRQ_EP93XX_EXT3;
++ break;
++ }
++ }
++
++ iounmap(iomem);
++ }
++
++ return ((ethX == NULL) ? -ENODEV :
++ platform_device_register(&ts72xx_eth100_device_asix));
++}
++
++
++static void __exit ts_eth100_exit(void)
++{
++ platform_device_unregister(&ts72xx_eth100_device_asix);
++}
++
++module_init(ts_eth100_init);
++module_exit(ts_eth100_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("Asix 88796 ethernet probe module for TS-ETH100 (TS-72xx)");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.2");
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0009-ts7200_cf_ide.patch b/recipes/linux/linux-2.6.33/ts72xx/0009-ts7200_cf_ide.patch
new file mode 100644
index 0000000000..7734cd9c11
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0009-ts7200_cf_ide.patch
@@ -0,0 +1,120 @@
+From f3f5377ac58fe141926416e177803af01f510ad4 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 18:02:58 +0100
+Subject: [PATCH 09/16] ts7200_cf_ide
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/ide/Kconfig | 7 +++++
+ drivers/ide/Makefile | 1 +
+ drivers/ide/ide_ts7200_cf.c | 64 +++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 72 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/ide/ide_ts7200_cf.c
+
+diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig
+index 98ccfeb..51f8d95 100644
+--- a/drivers/ide/Kconfig
++++ b/drivers/ide/Kconfig
+@@ -707,6 +707,13 @@ config BLK_DEV_IDE_AT91
+ depends on ARM && ARCH_AT91 && !ARCH_AT91RM9200 && !ARCH_AT91X40
+ select IDE_TIMINGS
+
++config BLK_DEV_TS7200_CF
++ tristate "TS-7200 IDE (CompactFlash) interface support"
++ depends on ARM && ARCH_EP93XX
++ help
++ Say Y here if you want to support the TS-7200 Compact Flash IDE controller
++ (manufactured by Technologic Systems).
++
+ config BLK_DEV_IDE_ICSIDE
+ tristate "ICS IDE interface support"
+ depends on ARM && ARCH_ACORN
+diff --git a/drivers/ide/Makefile b/drivers/ide/Makefile
+index 81df925..4bef198 100644
+--- a/drivers/ide/Makefile
++++ b/drivers/ide/Makefile
+@@ -111,6 +111,7 @@ obj-$(CONFIG_BLK_DEV_PLATFORM) += ide_platform.o
+ obj-$(CONFIG_BLK_DEV_IDE_ICSIDE) += icside.o
+ obj-$(CONFIG_BLK_DEV_IDE_RAPIDE) += rapide.o
+ obj-$(CONFIG_BLK_DEV_PALMCHIP_BK3710) += palm_bk3710.o
++obj-$(CONFIG_BLK_DEV_TS7200_CF) += ide_ts7200_cf.o
+
+ obj-$(CONFIG_BLK_DEV_IDE_AU1XXX) += au1xxx-ide.o
+
+diff --git a/drivers/ide/ide_ts7200_cf.c b/drivers/ide/ide_ts7200_cf.c
+new file mode 100644
+index 0000000..14c9765
+--- /dev/null
++++ b/drivers/ide/ide_ts7200_cf.c
+@@ -0,0 +1,64 @@
++/*
++ * Technologic Systems TS-7200 Compact Flash IDE device driver.
++ *
++ * (c) Copyright 2009 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/ide.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <mach/ts72xx.h>
++
++
++static const struct ide_port_info ts7200_cf_ide_port_info = {
++ .host_flags = IDE_HFLAG_NO_DMA, // IDE_HFLAG_MMIO
++ .chipset = ide_generic,
++};
++
++static __init int ide_ts7200_cf_init(void)
++{
++ struct ide_hw hw, *hws[] = { &hw };
++ void __iomem *base, *ctl, *data;
++ struct ide_host *host;
++
++ base = ioremap(TS7200_CF_CMD_PHYS_BASE, 0x10); // 8-bit access
++ ctl = ioremap(TS7200_CF_AUX_PHYS_BASE, 0x10); // 8-bit access (usually base+0x206)
++ data = ioremap(TS7200_CF_DATA_PHYS_BASE, 0x10); // 16-bit access
++
++ if ((base != NULL) && (ctl != NULL) && (data != NULL)) {
++ memset(&hw, 0, sizeof(hw));
++
++ ide_std_init_ports(&hw, (unsigned long)base, (unsigned long)ctl);
++ hw.io_ports.data_addr = (unsigned long)data;
++ hw.irq = IRQ_EP93XX_EXT0;
++
++ return ide_host_add(&ts7200_cf_ide_port_info, hws, 1, &host);
++ }
++
++ if (base) iounmap(base);
++ if (ctl) iounmap(ctl);
++ if (data) iounmap(data);
++
++ return -ENODEV;
++}
++
++
++module_init(ide_ts7200_cf_init);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TS-7200 Compact Flash IDE driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.2");
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0010-ts72xx_pata.patch b/recipes/linux/linux-2.6.33/ts72xx/0010-ts72xx_pata.patch
new file mode 100644
index 0000000000..1320a21de2
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0010-ts72xx_pata.patch
@@ -0,0 +1,413 @@
+From 664b026d713459f7af0d4eb8dce3a7ba4b236509 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 18:05:25 +0100
+Subject: [PATCH 10/16] ts72xx_pata
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/ata/Kconfig | 18 +++++
+ drivers/ata/Makefile | 3 +
+ drivers/ata/pata_ts7200_cf.c | 85 +++++++++++++++++++++++
+ drivers/ata/pata_ts72xx.c | 155 ++++++++++++++++++++++++++++++++++++++++++
+ drivers/ata/pata_ts9600.c | 88 ++++++++++++++++++++++++
+ 5 files changed, 349 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/ata/pata_ts7200_cf.c
+ create mode 100644 drivers/ata/pata_ts72xx.c
+ create mode 100644 drivers/ata/pata_ts9600.c
+
+diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
+index 56c6374..54b00d5 100644
+--- a/drivers/ata/Kconfig
++++ b/drivers/ata/Kconfig
+@@ -798,6 +798,24 @@ config PATA_MACIO
+ most PowerMac models. Some models have multiple busses using
+ different chipsets, though generally, MacIO is one of them.
+
++config PATA_TS72XX
++ bool "TS72XX ATA support"
++ depends on ARCH_EP93XX && MACH_TS72XX
++ help
++ This option enables support for ATA devices on Technologic Systems SBC.
++
++config PATA_TS7200_CF
++ tristate "TS7200 Compact Flash support"
++ depends on PATA_TS72XX
++ help
++ This option enables support for the compact flash control on
++ Technologic System TS-7200 SBC.
++
++config PATA_TS9600
++ tristate "TS9600 IDE interface support"
++ depends on PATA_TS72XX && BLK_DEV_IDE_TS9600 != y
++ help
++ This option enables support for Technologic Systems TS-9600 PC/104 IDE interface.
+
+ endif # ATA_SFF
+ endif # ATA
+diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile
+index fc936d4..183ce00 100644
+--- a/drivers/ata/Makefile
++++ b/drivers/ata/Makefile
+@@ -79,6 +79,9 @@ obj-$(CONFIG_PATA_PLATFORM) += pata_platform.o
+ obj-$(CONFIG_PATA_AT91) += pata_at91.o
+ obj-$(CONFIG_PATA_OF_PLATFORM) += pata_of_platform.o
+ obj-$(CONFIG_PATA_ICSIDE) += pata_icside.o
++obj-$(CONFIG_PATA_TS72XX) += pata_ts72xx.o
++obj-$(CONFIG_PATA_TS7200_CF) += pata_ts7200_cf.o
++obj-$(CONFIG_PATA_TS9600) += pata_ts9600.o
+ # Should be last but two libata driver
+ obj-$(CONFIG_PATA_ACPI) += pata_acpi.o
+ # Should be last but one libata driver
+diff --git a/drivers/ata/pata_ts7200_cf.c b/drivers/ata/pata_ts7200_cf.c
+new file mode 100644
+index 0000000..cc884b5
+--- /dev/null
++++ b/drivers/ata/pata_ts7200_cf.c
+@@ -0,0 +1,85 @@
++/*
++ * Technologic Systems TS-7200 Compact Flash PATA device driver.
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/libata.h>
++#include <scsi/scsi_host.h>
++#include <linux/platform_device.h>
++#include <linux/dma-mapping.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <mach/ts72xx.h>
++
++#define DRV_NAME "pata_ts7200_cf"
++#define DRV_VERSION "0.2"
++
++static struct resource ts7200_cf_resources[] = {
++ [0] = {
++ .start = TS7200_CF_CMD_PHYS_BASE,
++ .end = TS7200_CF_CMD_PHYS_BASE + 8,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = TS7200_CF_AUX_PHYS_BASE,
++ .end = TS7200_CF_AUX_PHYS_BASE + 1,
++ .flags = IORESOURCE_MEM,
++ },
++ [2] = {
++ .start = TS7200_CF_DATA_PHYS_BASE,
++ .end = TS7200_CF_DATA_PHYS_BASE + 2,
++ .flags = IORESOURCE_MEM,
++ },
++ [3] = {
++ .start = IRQ_EP93XX_EXT0, /* pin 103 of EP9301 */
++ .end = IRQ_EP93XX_EXT0,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++
++static struct platform_device ts7200_cf_device = {
++ .name = "ts72xx-ide",
++ .id = 0,
++ .dev = {
++ .dma_mask = &ts7200_cf_device.dev.coherent_dma_mask,
++ .coherent_dma_mask = DMA_BIT_MASK(32),
++ },
++ .num_resources = ARRAY_SIZE(ts7200_cf_resources),
++ .resource = ts7200_cf_resources,
++};
++
++
++static __init int pata_ts7200_cf_init(void)
++{
++ return (board_is_ts7200()) ? \
++ platform_device_register(&ts7200_cf_device) : -ENODEV;
++}
++
++static __exit void pata_ts7200_cf_exit(void)
++{
++ platform_device_unregister(&ts7200_cf_device);
++}
++
++module_init(pata_ts7200_cf_init);
++module_exit(pata_ts7200_cf_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TS-7200 CF PATA device driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
+diff --git a/drivers/ata/pata_ts72xx.c b/drivers/ata/pata_ts72xx.c
+new file mode 100644
+index 0000000..e96cee3
+--- /dev/null
++++ b/drivers/ata/pata_ts72xx.c
+@@ -0,0 +1,155 @@
++/*
++ * TS-72XX PATA driver for Technologic Systems boards.
++ *
++ * Based on pata_platform.c by Paul Mundt &
++ * Alessandro Zummo <a.zummo@towertech.it>
++ * and old pata-ts72xx.c by Alessandro Zummo <a.zummo@towertech.it>
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/interrupt.h>
++#include <scsi/scsi_host.h>
++#include <linux/ata.h>
++#include <linux/libata.h>
++
++#define DRV_NAME "pata_ts72xx"
++#define DRV_VERSION "2.01"
++
++
++/*
++ * Provide our own set_mode() as we don't want to change anything that has
++ * already been configured..
++ */
++static int ts72xx_set_mode(struct ata_link *link, struct ata_device **unused)
++{
++ struct ata_device *dev;
++
++ ata_for_each_dev(dev, link, ENABLED) {
++ if (ata_dev_enabled(dev)) {
++ /* We don't really care */
++ dev->pio_mode = dev->xfer_mode = XFER_PIO_0;
++ dev->xfer_shift = ATA_SHIFT_PIO;
++ dev->flags |= ATA_DFLAG_PIO;
++ ata_dev_printk(dev, KERN_INFO, "configured for PIO\n");
++ }
++ }
++ return 0;
++}
++
++static struct scsi_host_template ts72xx_sht = {
++ ATA_PIO_SHT(DRV_NAME),
++};
++
++static struct ata_port_operations ts72xx_port_ops = {
++ .inherits = &ata_sff_port_ops,
++ .set_mode = ts72xx_set_mode,
++};
++
++static __devinit int ts72xx_pata_probe(struct platform_device *pdev)
++{
++ struct ata_host *host;
++ struct ata_port *ap;
++ int irq;
++
++ struct resource *pata_cmd = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ struct resource *pata_aux = platform_get_resource(pdev, IORESOURCE_MEM, 1);
++ struct resource *pata_data = platform_get_resource(pdev, IORESOURCE_MEM, 2);
++
++ if (!pata_cmd || !pata_aux || !pata_data) {
++ dev_err(&pdev->dev, "missing resource(s)\n");
++ return -EINVAL;
++ }
++
++ irq = platform_get_irq(pdev, 0);
++ if (irq < 0)
++ irq = 0; /* no irq */
++
++ /*
++ * Now that that's out of the way, wire up the port
++ */
++ host = ata_host_alloc(&pdev->dev, 1);
++ if (!host)
++ return -ENOMEM;
++ ap = host->ports[0];
++
++ ap->ops = &ts72xx_port_ops;
++ ap->pio_mask = 0x1f; /* PIO0-4 */
++ ap->flags |= ATA_FLAG_SLAVE_POSS;
++
++ /*
++ * Use polling mode if there's no IRQ
++ */
++ if (!irq) {
++ ap->flags |= ATA_FLAG_PIO_POLLING;
++ ata_port_desc(ap, "no IRQ, using PIO polling");
++ }
++
++ ap->ioaddr.cmd_addr = devm_ioremap(&pdev->dev, pata_cmd->start,
++ pata_cmd->end - pata_cmd->start + 1);
++ ap->ioaddr.ctl_addr = devm_ioremap(&pdev->dev, pata_aux->start,
++ pata_aux->end - pata_aux->start + 1);
++
++ if (!ap->ioaddr.cmd_addr || !ap->ioaddr.ctl_addr) {
++ dev_err(&pdev->dev, "failed to map IO/CTL base\n");
++ return -ENOMEM;
++ }
++
++ ap->ioaddr.altstatus_addr = ap->ioaddr.ctl_addr;
++
++ ata_sff_std_ports(&ap->ioaddr);
++ ap->ioaddr.data_addr = devm_ioremap(&pdev->dev, pata_data->start,
++ pata_data->end - pata_data->start + 1);
++
++ ata_port_desc(ap, "mmio cmd 0x%llx ctl 0x%llx",
++ (unsigned long long)pata_cmd->start,
++ (unsigned long long)pata_aux->start);
++
++ return ata_host_activate(host, irq, irq ? ata_sff_interrupt : NULL,
++ 0 /* irq flags */, &ts72xx_sht);
++}
++
++static __devexit int ts72xx_pata_remove(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct ata_host *host = dev_get_drvdata(dev);
++
++ ata_host_detach(host);
++
++ return 0;
++}
++
++static struct platform_driver ts72xx_pata_platform_driver = {
++ .probe = ts72xx_pata_probe,
++ .remove = __devexit_p(ts72xx_pata_remove),
++ .driver = {
++ .name = "ts72xx-ide",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init ts72xx_pata_init(void)
++{
++ return platform_driver_register(&ts72xx_pata_platform_driver);
++}
++
++static void __exit ts72xx_pata_exit(void)
++{
++ platform_driver_unregister(&ts72xx_pata_platform_driver);
++}
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("low-level driver for TS-72xx device PATA");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
++
++module_init(ts72xx_pata_init);
++module_exit(ts72xx_pata_exit);
+diff --git a/drivers/ata/pata_ts9600.c b/drivers/ata/pata_ts9600.c
+new file mode 100644
+index 0000000..0eb485a
+--- /dev/null
++++ b/drivers/ata/pata_ts9600.c
+@@ -0,0 +1,88 @@
++/*
++ * Technologic Systems TS-9600 PATA device driver.
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/libata.h>
++#include <scsi/scsi_host.h>
++#include <linux/platform_device.h>
++#include <linux/dma-mapping.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <mach/ts72xx.h>
++
++#define DRV_NAME "pata_ts9600"
++#define DRV_VERSION "0.2"
++
++#define TS9600_IDE_IO (TS72XX_PC104_8BIT_IO_PHYS_BASE + 0x1F0)
++#define TS9600_IDE_DATA (TS72XX_PC104_16BIT_IO_PHYS_BASE + 0x1F0)
++#define TS9600_IDE_IRQ IRQ_EP93XX_EXT3 // IRQ7 (no other possibility for arm)
++
++static struct resource ts9600_resources[] = {
++ [0] = {
++ .start = TS9600_IDE_IO,
++ .end = TS9600_IDE_IO + 8,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = TS9600_IDE_IO + 0x206,
++ .end = TS9600_IDE_IO + 0x206 + 1,
++ .flags = IORESOURCE_MEM,
++ },
++ [2] = {
++ .start = TS9600_IDE_DATA,
++ .end = TS9600_IDE_DATA + 2,
++ .flags = IORESOURCE_MEM,
++ },
++ [3] = {
++ .start = TS9600_IDE_IRQ,
++ .end = TS9600_IDE_IRQ,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++
++static struct platform_device ts9600_device = {
++ .name = "ts72xx-ide",
++ .id = 9600,
++ .dev = {
++ .dma_mask = &ts9600_device.dev.coherent_dma_mask,
++ .coherent_dma_mask = DMA_BIT_MASK(32),
++ },
++ .num_resources = ARRAY_SIZE(ts9600_resources),
++ .resource = ts9600_resources,
++};
++
++
++static __init int pata_ts9600_init(void)
++{
++ return platform_device_register(&ts9600_device);
++}
++
++static __exit void pata_ts9600_exit(void)
++{
++ platform_device_unregister(&ts9600_device);
++}
++
++module_init(pata_ts9600_init);
++module_exit(pata_ts9600_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TS-9600 PATA device driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0011-ep93xx_pm.patch b/recipes/linux/linux-2.6.33/ts72xx/0011-ep93xx_pm.patch
new file mode 100644
index 0000000000..d1f675ab2e
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0011-ep93xx_pm.patch
@@ -0,0 +1,114 @@
+From 21901427289fae9c16e9bfd40fbf81ddb78424a6 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 18:28:27 +0100
+Subject: [PATCH 11/16] ep93xx_pm
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/Makefile | 3 ++
+ arch/arm/mach-ep93xx/pm.c | 78 +++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 81 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/pm.c
+
+diff --git a/arch/arm/mach-ep93xx/Makefile b/arch/arm/mach-ep93xx/Makefile
+index c2451e6..8624d62 100644
+--- a/arch/arm/mach-ep93xx/Makefile
++++ b/arch/arm/mach-ep93xx/Makefile
+@@ -12,3 +12,6 @@ obj-$(CONFIG_MACH_GESBC9312) += gesbc9312.o
+ obj-$(CONFIG_MACH_MICRO9) += micro9.o
+ obj-$(CONFIG_MACH_TS72XX) += ts72xx.o
+ obj-$(CONFIG_MACH_TS72XX_SBCINFO) += ts72xx_sbcinfo.o
++
++# Power Management
++obj-$(CONFIG_PM) += pm.o
+diff --git a/arch/arm/mach-ep93xx/pm.c b/arch/arm/mach-ep93xx/pm.c
+new file mode 100644
+index 0000000..d3714c8
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/pm.c
+@@ -0,0 +1,78 @@
++/*
++ * arch/arm/mach-ep93xx/pm.c
++ *
++ * EP93xx Power Management Routines
++ *
++ * Based on pm.c from Andre Renaud, Bluewater Systems Ltd.
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/suspend.h>
++#include <linux/sched.h>
++#include <linux/proc_fs.h>
++#include <linux/interrupt.h>
++#include <linux/sysfs.h>
++#include <linux/module.h>
++#include <linux/io.h>
++#include <mach/hardware.h>
++
++
++static inline void ep93xx_standby(void)
++{
++ u32 v;
++ v = __raw_readl(EP93XX_SYSCON_DEVCFG);
++ v |= EP93XX_SYSCON_DEVCFG_SHENA;
++ __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
++ __raw_writel(v, EP93XX_SYSCON_DEVCFG);
++
++ v = __raw_readl(EP93XX_SYSCON_STANDBY);
++
++ asm("nop; nop; nop; nop; nop");
++}
++
++static inline void ep93xx_resume(void)
++{
++ u32 v;
++
++ v = __raw_readl(EP93XX_SYSCON_DEVCFG);
++ v &= ~EP93XX_SYSCON_DEVCFG_SHENA;
++ __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
++ __raw_writel(v, EP93XX_SYSCON_DEVCFG);
++}
++
++static int suspend_ep93xx_enter(suspend_state_t state)
++{
++ switch (state) {
++ case PM_SUSPEND_STANDBY:
++ case PM_SUSPEND_MEM:
++ ep93xx_standby(); /* go zzz */
++ ep93xx_resume();
++ }
++ return 0;
++}
++
++static int suspend_ep93xx_valid(suspend_state_t state)
++{
++ return (state == PM_SUSPEND_STANDBY) ||
++ (state == PM_SUSPEND_MEM);
++}
++
++
++static struct platform_suspend_ops ep93xx_suspend_ops = {
++ .enter = suspend_ep93xx_enter,
++ .valid = suspend_ep93xx_valid,
++};
++
++static int __init ep93xx_pm_init(void)
++{
++ pr_info("ep93xx: Power Management\n");
++ suspend_set_ops(&ep93xx_suspend_ops);
++ return 0;
++}
++__initcall(ep93xx_pm_init);
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0012-ts72xx_gpio_i2c.patch b/recipes/linux/linux-2.6.33/ts72xx/0012-ts72xx_gpio_i2c.patch
new file mode 100644
index 0000000000..3fc7900d82
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0012-ts72xx_gpio_i2c.patch
@@ -0,0 +1,63 @@
+From 263d4fa9251abb4288e6dbe55d6ea64486e8a370 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 18:44:11 +0100
+Subject: [PATCH 12/16] ts72xx_gpio_i2c
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/ts72xx.c | 22 ++++++++++++++++++++++
+ 1 files changed, 22 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
+index 2c0af20..6b0ddd9 100644
+--- a/arch/arm/mach-ep93xx/ts72xx.c
++++ b/arch/arm/mach-ep93xx/ts72xx.c
+@@ -16,6 +16,9 @@
+ #include <linux/io.h>
+ #include <linux/m48t86.h>
+ #include <linux/mtd/physmap.h>
++#include <linux/gpio.h>
++#include <linux/i2c.h>
++#include <linux/i2c-gpio.h>
+
+ #include <mach/hardware.h>
+ #include <mach/ts72xx.h>
+@@ -210,12 +213,31 @@ static struct ep93xx_eth_data ts72xx_eth_data = {
+ .phy_id = 1,
+ };
+
++/*************************************************************************
++ * i2c peripheral handling
++ *************************************************************************/
++static struct i2c_gpio_platform_data ts72xx_i2c_gpio_data = {
++ .sda_pin = EP93XX_GPIO_LINE_EGPIO14, // DIO_6 (TS72XX DIO 2x8 header)
++ .sda_is_open_drain = 0,
++ .scl_pin = EP93XX_GPIO_LINE_EGPIO15, // DIO_7 (TS72XX DIO 2x8 header)
++ .scl_is_open_drain = 0,
++ .udelay = 0, /* default to 100 kHz */
++ .timeout = 0, /* default to 100 ms */
++};
++
++static struct i2c_board_info __initdata ts72xx_i2c_board_info[] = {
++};
++
++
+ static void __init ts72xx_init_machine(void)
+ {
+ ep93xx_init_devices();
+ ts72xx_register_flash();
+ platform_device_register(&ts72xx_rtc_device);
+
++ ep93xx_register_i2c(&ts72xx_i2c_gpio_data,
++ ts72xx_i2c_board_info,
++ ARRAY_SIZE(ts72xx_i2c_board_info));
+ ep93xx_register_eth(&ts72xx_eth_data, 1);
+
+ /* PWM1 is DIO_6 on TS-72xx header */
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0013-ts72xx_dio_keypad.patch b/recipes/linux/linux-2.6.33/ts72xx/0013-ts72xx_dio_keypad.patch
new file mode 100644
index 0000000000..cf7eeb0100
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0013-ts72xx_dio_keypad.patch
@@ -0,0 +1,567 @@
+From 273f68ce8204a2b63cca6aabf5a9518738a12e86 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 18:49:25 +0100
+Subject: [PATCH 13/16] ts72xx_dio_keypad
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/include/mach/ts72xx-keypad.h | 30 ++
+ drivers/input/keyboard/Kconfig | 42 +++
+ drivers/input/keyboard/Makefile | 4 +
+ drivers/input/keyboard/ts72xx_dio_3x4.c | 65 +++++
+ drivers/input/keyboard/ts72xx_dio_4x4.c | 65 +++++
+ drivers/input/keyboard/ts72xx_keypad.c | 292 +++++++++++++++++++++
+ 6 files changed, 498 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/include/mach/ts72xx-keypad.h
+ create mode 100644 drivers/input/keyboard/ts72xx_dio_3x4.c
+ create mode 100644 drivers/input/keyboard/ts72xx_dio_4x4.c
+ create mode 100644 drivers/input/keyboard/ts72xx_keypad.c
+
+diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx-keypad.h b/arch/arm/mach-ep93xx/include/mach/ts72xx-keypad.h
+new file mode 100644
+index 0000000..bf44759
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/include/mach/ts72xx-keypad.h
+@@ -0,0 +1,30 @@
++/*
++ * TS-72xx "GPIO Port X" input keypad driver
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on OMAP Keypad Driver (omap-keypad.c)
++ *
++ * 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.
++ */
++
++#ifndef __ASM_ARCH_TS72XX_KEYPAD_H
++#define __ASM_ARCH_TS72XX_KEYPAD_H
++
++#define EP93XX_PORTX_MAXROW 4
++#define EP93XX_PORTX_MAXCOL 4
++
++/* Example: Port X bit 0..7 = C0,..Cx,R0..Ry
++ * Cols are outputs
++ * Rows are inputs
++ */
++struct ep93xx_gpio_portx_keypad_platform_data {
++ int nr_rows, nr_cols;
++ int keycodes[EP93XX_PORTX_MAXROW][EP93XX_PORTX_MAXCOL]; /* Left to right, from top to bottom */
++ int gpio_rows[EP93XX_PORTX_MAXROW]; /* R0, R1, .., R_{MAXROW-1} */
++ int gpio_cols[EP93XX_PORTX_MAXCOL]; /* C0, C1, .., C_{MAXCOL-1} */
++};
++
++#endif /* __ASM_ARCH_TS72XX_KEYPAD_H */
+diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
+index 02c836e..c0f1231 100644
+--- a/drivers/input/keyboard/Kconfig
++++ b/drivers/input/keyboard/Kconfig
+@@ -174,6 +174,48 @@ config KEYBOARD_EP93XX
+
+ To compile this driver as a module, choose M here: the
+ module will be called ep93xx_keypad.
++
++config KEYBOARD_TS72XX
++ tristate "TS72XX matrix keypad support"
++ depends on MACH_TS72XX
++ help
++ This driver implements supports for a matrix keypad connected
++ to EP93XX GPIO port B (aka DIO of TS-72XX SBCs).
++ Maximum of 4 rows and 4 cols are supported (using up to 4 interrupts).
++ This is implemented as a platform driver.
++
++ To compile this driver as a module, choose M here: the
++ module will be called ep93xx-keypad.
++
++if KEYBOARD_TS72XX
++
++choice
++ prompt "Keypad type"
++ default TS72XX_DIO_4X4_KEYPAD
++
++config TS72XX_DIO_3X4_KEYPAD
++ tristate "TS-72xx 3x4 matrix keypad"
++ depends on MACH_TS72XX
++ help
++ This a 12 keys (4 rows, 3 cols using DIO_0-6) keypad with the following layout:
++ 1 2 3
++ 4 5 6
++ 7 8 9
++ * 0 #
++
++config TS72XX_DIO_4X4_KEYPAD
++ tristate "TS-72xx 4x4 matrix keypad"
++ depends on MACH_TS72XX
++ help
++ This a 16 keys (4 rows, 4 cols using DIO_0-7) keypad with the following layout:
++ 7 8 9 F
++ 4 5 6 E
++ 1 2 3 D
++ A 0 B C
++
++endchoice
++
++endif # KEYBOARD_TS72XX
+
+ config KEYBOARD_GPIO
+ tristate "GPIO Buttons"
+diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile
+index 78654ef..01fc02b 100644
+--- a/drivers/input/keyboard/Makefile
++++ b/drivers/input/keyboard/Makefile
+@@ -39,3 +39,7 @@ obj-$(CONFIG_KEYBOARD_TOSA) += tosakbd.o
+ obj-$(CONFIG_KEYBOARD_TWL4030) += twl4030_keypad.o
+ obj-$(CONFIG_KEYBOARD_XTKBD) += xtkbd.o
+ obj-$(CONFIG_KEYBOARD_W90P910) += w90p910_keypad.o
++
++obj-$(CONFIG_KEYBOARD_TS72XX) += ts72xx_keypad.o
++obj-$(CONFIG_TS72XX_DIO_3X4_KEYPAD) += ts72xx_dio_3x4.o
++obj-$(CONFIG_TS72XX_DIO_4X4_KEYPAD) += ts72xx_dio_4x4.o
+diff --git a/drivers/input/keyboard/ts72xx_dio_3x4.c b/drivers/input/keyboard/ts72xx_dio_3x4.c
+new file mode 100644
+index 0000000..b149a7a
+--- /dev/null
++++ b/drivers/input/keyboard/ts72xx_dio_3x4.c
+@@ -0,0 +1,65 @@
++/*
++ * TS-72xx keypad device driver for DIO1 header (DIO_0 thru DIO_7 are using port B)
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/input.h>
++
++#include <mach/ts72xx-keypad.h>
++
++/* Port B = XX R0 R1 R2 R3 C0 C1 C2
++ * (i.e. col2 is bit 0, row0 is bit 6, ...)
++ */
++static struct ep93xx_gpio_portx_keypad_platform_data kp_portb_3x4 = {
++ .nr_rows = 4,
++ .nr_cols = 3,
++ { { KEY_1, KEY_2, KEY_3 },
++ { KEY_4, KEY_5, KEY_6 },
++ { KEY_7, KEY_8, KEY_9 },
++ { KEY_KPASTERISK, KEY_0, KEY_ENTER }
++ },
++ .gpio_rows = { 6, 5, 4, 3 },
++ .gpio_cols = { 2, 1, 0 },
++};
++
++
++static void ts72xx_dio_release(struct device *dev)
++{
++ // nothing to do (no kfree) because we have static struct
++}
++
++static struct platform_device kp_portb_3x4_device = {
++ .name = "ep93xx-gpio-keypad",
++ .id = -1, // one instance only
++ .dev = {
++ .platform_data = &kp_portb_3x4,
++ .release = ts72xx_dio_release,
++ },
++};
++
++static int __init ts72xx_dio_init(void)
++{
++ return platform_device_register(&kp_portb_3x4_device);
++}
++
++static void __exit ts72xx_dio_exit(void)
++{
++ platform_device_unregister(&kp_portb_3x4_device);
++}
++
++module_init(ts72xx_dio_init);
++module_exit(ts72xx_dio_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("Platform device 3x4 keypad");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/input/keyboard/ts72xx_dio_4x4.c b/drivers/input/keyboard/ts72xx_dio_4x4.c
+new file mode 100644
+index 0000000..2d8089a
+--- /dev/null
++++ b/drivers/input/keyboard/ts72xx_dio_4x4.c
+@@ -0,0 +1,65 @@
++/*
++ * TS-72xx keypad device driver for DIO1 header (DIO_0 thru DIO_7 are using port B)
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/input.h>
++
++#include <mach/ts72xx-keypad.h>
++
++/* Port B = C0 R3 C1 R2 C2 C3 R1 R0
++ * (i.e. row0 is bit 0, row1 is bit 1, ...)
++ */
++static struct ep93xx_gpio_portx_keypad_platform_data kp_portb_4x4 = {
++ .nr_rows = 4,
++ .nr_cols = 4,
++ { { KEY_7, KEY_8, KEY_9, KEY_F },
++ { KEY_4, KEY_5, KEY_6, KEY_E },
++ { KEY_1, KEY_2, KEY_3, KEY_D },
++ { KEY_A, KEY_0, KEY_B, KEY_C }
++ },
++ .gpio_rows = { 0, 1, 4, 6 },
++ .gpio_cols = { 7, 5, 3, 2 },
++};
++
++
++static void ts72xx_dio_release(struct device *dev)
++{
++ // nothing to do (no kfree) because we have static struct
++}
++
++static struct platform_device kp_portb_4x4_device = {
++ .name = "ep93xx-gpio-keypad",
++ .id = -1, // one instance only
++ .dev = {
++ .platform_data = &kp_portb_4x4,
++ .release = ts72xx_dio_release,
++ },
++};
++
++static int __init ts72xx_dio_init(void)
++{
++ return platform_device_register(&kp_portb_4x4_device);
++}
++
++static void __exit ts72xx_dio_exit(void)
++{
++ platform_device_unregister(&kp_portb_4x4_device);
++}
++
++module_init(ts72xx_dio_init);
++module_exit(ts72xx_dio_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("Platform device 4x4 keypad");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/input/keyboard/ts72xx_keypad.c b/drivers/input/keyboard/ts72xx_keypad.c
+new file mode 100644
+index 0000000..6979689
+--- /dev/null
++++ b/drivers/input/keyboard/ts72xx_keypad.c
+@@ -0,0 +1,292 @@
++/*
++ * TS-72xx "GPIO Port B" input keypad driver
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on OMAP Keypad Driver (omap-keypad.c)
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/delay.h>
++#include <linux/input.h>
++#include <linux/platform_device.h>
++#include <linux/irq.h>
++#include <linux/io.h>
++#include <mach/hardware.h>
++#include <mach/gpio.h>
++
++#include <mach/ts72xx-keypad.h>
++
++#define DRV_NAME_PREFIX "ts72xx_keypad: "
++#define DRV_VERSION "2.0"
++
++/* We choose port B */
++#define EP93XX_GPIO_X_DATA EP93XX_GPIO_B_DATA
++#define EP93XX_GPIO_LINE_X EP93XX_GPIO_LINE_B
++
++struct ep93xx_gpio_portx_keypad {
++ u8 rows;
++ u8 cols;
++ int irqs[EP93XX_PORTX_MAXROW];
++ u8 mask_input;
++ u8 mask_output;
++ u8 row_trigger, col_trigger;
++ u8 mask_input_trigger;
++ struct timer_list timer;
++ struct input_dev *input;
++ struct ep93xx_gpio_portx_keypad_platform_data *rsc;
++};
++
++static void ep93xx_gpio_portx_tasklet(unsigned long);
++static void ep93xx_gpio_portx_timer(unsigned long);
++
++DECLARE_TASKLET_DISABLED(kp_tasklet, ep93xx_gpio_portx_tasklet, 0);
++
++
++static void ep93xx_gpio_portx_timer(unsigned long data)
++{
++ struct ep93xx_gpio_portx_keypad *ctx = (struct ep93xx_gpio_portx_keypad *)data;
++ int i;
++
++ for (i = 0; i < ctx->rows; i++)
++ enable_irq(ctx->irqs[i]);
++}
++
++
++static void ep93xx_gpio_portx_tasklet(unsigned long data)
++{
++ struct ep93xx_gpio_portx_keypad *ctx = (struct ep93xx_gpio_portx_keypad *)data;
++ int i, j;
++ u8 save;
++
++ /* Save data register */
++ save = __raw_readb(EP93XX_GPIO_X_DATA);
++
++ /* Make sure row is still 0 */
++ if (!(save & ctx->mask_input_trigger)) {
++
++ for (i = 0; i < ctx->cols; i++) {
++ for (j = 0; j < ctx->cols; j++) {
++ if (i == j)
++ gpio_set_value(EP93XX_GPIO_LINE_X(ctx->rsc->gpio_cols[j]), 1); //high
++ else
++ gpio_set_value(EP93XX_GPIO_LINE_X(ctx->rsc->gpio_cols[j]), 0); //low
++ }
++
++ if (__raw_readb(EP93XX_GPIO_X_DATA) & ctx->mask_input_trigger) {
++ ctx->col_trigger = i;
++ //printk("=>key col=%d, row=%d |%x\n", i, ctx->row_trigger, ctx->rsc->keycodes[ctx->row_trigger][i]);
++ input_report_key(ctx->input, ctx->rsc->keycodes[ctx->row_trigger][ctx->col_trigger], 1);
++ input_sync(ctx->input);
++ }
++ }
++
++ } else { // key released
++ input_report_key(ctx->input, ctx->rsc->keycodes[ctx->row_trigger][ctx->col_trigger], 0);
++ input_sync(ctx->input);
++ }
++
++ /* Restore all outputs to 0 */
++ __raw_writeb(save, EP93XX_GPIO_X_DATA);
++
++ /* Wait a little before enabling IRQ again */
++ mod_timer(&ctx->timer, jiffies + HZ/10);
++}
++
++
++/* Interrupt handler */
++static irqreturn_t ep93xx_gpio_portx_key_int(int irq, void *dev_id)
++{
++ struct ep93xx_gpio_portx_keypad *ctx = dev_id;
++ int i;
++
++ for (i = 0; i < ctx->rows; i++)
++ disable_irq(ctx->irqs[i]);
++
++ ctx->mask_input_trigger = 0;
++ for (i = 0; i < ctx->rows; i++) {
++ if (gpio_to_irq(EP93XX_GPIO_LINE_X(ctx->rsc->gpio_rows[i])) == irq) {
++ ctx->row_trigger = i;
++ ctx->mask_input_trigger = (1 << ctx->rsc->gpio_rows[i]);
++ break;
++ }
++ }
++
++ // deferred-execution method
++ tasklet_schedule(&kp_tasklet);
++
++ return IRQ_HANDLED;
++}
++
++
++static int __devinit ep93xx_keypad_probe(struct platform_device *pdev)
++{
++ struct ep93xx_gpio_portx_keypad *ctx;
++ struct input_dev *input_dev;
++ int i, j, ret, irq_idx;
++ struct ep93xx_gpio_portx_keypad_platform_data *pdata = pdev->dev.platform_data;
++
++ const char *irq_names[EP93XX_PORTX_MAXROW] = {
++ "kp-row0", "kp-row1", "kp-row2", "kp-row3" };
++
++ if (pdata == NULL) {
++ return -EINVAL;
++ }
++
++ if (!pdata->nr_rows || !pdata->nr_cols ||
++ (pdata->nr_rows > EP93XX_PORTX_MAXROW) ||
++ (pdata->nr_cols > EP93XX_PORTX_MAXCOL)) {
++ printk(KERN_ERR DRV_NAME_PREFIX "No rows, cols from pdata\n");
++ return -EINVAL;
++ }
++
++ ctx = kzalloc(sizeof(struct ep93xx_gpio_portx_keypad), GFP_KERNEL);
++ if (!ctx) {
++ return -ENOMEM;
++ }
++
++ input_dev = input_allocate_device();
++ if (!input_dev) {
++ kfree(ctx);
++ return -ENOMEM;
++ }
++
++ platform_set_drvdata(pdev, ctx);
++
++ ctx->input = input_dev;
++ ctx->rsc = pdata;
++ ctx->rows = pdata->nr_rows;
++ ctx->cols = pdata->nr_cols;
++
++ input_dev->evbit[0] = BIT(EV_KEY); // | BIT(EV_REP);
++
++ for (i = 0; i < pdata->nr_rows; i++) {
++ for (j = 0; j < pdata->nr_cols; j++) {
++ int code = pdata->keycodes[i][j];
++ if (code > 0)
++ set_bit(code, input_dev->keybit);
++ }
++ }
++ __clear_bit(KEY_RESERVED, input_dev->keybit);
++
++ input_dev->name = "GPIO keypad";
++ input_dev->phys = "ep93xx-keypad/input0";
++ input_dev->dev.parent = &pdev->dev;
++
++ input_dev->id.bustype = BUS_HOST;
++ input_dev->id.vendor = 0x0001;
++ input_dev->id.product = 0x0001;
++ input_dev->id.version = 0x0100;
++
++ ret = input_register_device(ctx->input);
++ if (ret < 0) {
++ printk(KERN_ERR DRV_NAME_PREFIX "Unable to register input device\n");
++ goto err1;
++ }
++
++ ctx->mask_output = 0;
++ for (i = 0; i < pdata->nr_cols; i++) {
++ ctx->mask_output |= (1 << pdata->gpio_cols[i]);
++ gpio_direction_output(EP93XX_GPIO_LINE_X(pdata->gpio_cols[i]), 0); // low
++ }
++
++ ctx->mask_input = 0;
++ for (i = 0; i < pdata->nr_rows; i++) {
++ ctx->mask_input |= (1 << pdata->gpio_rows[i]);
++ gpio_direction_input(EP93XX_GPIO_LINE_X(pdata->gpio_rows[i]));
++ }
++
++ for (i = 0; i < pdata->nr_rows; i++) {
++ ctx->irqs[i] = gpio_to_irq(EP93XX_GPIO_LINE_X(pdata->gpio_rows[i]));
++ set_irq_type(ctx->irqs[i], IRQ_TYPE_EDGE_FALLING);
++ ep93xx_gpio_int_debounce(ctx->irqs[i], 1); // TODO: create IRQ_TYPE_DEBOUNCE
++
++ ret = request_irq(ctx->irqs[i], ep93xx_gpio_portx_key_int, 0, irq_names[i], ctx);
++ if (ret < 0) {
++ irq_idx = i;
++ printk(KERN_ERR DRV_NAME_PREFIX "request_irq (%d)\n", ctx->irqs[i]);
++ goto err2;
++ }
++ }
++
++ tasklet_enable(&kp_tasklet);
++ kp_tasklet.data = (unsigned long)ctx;
++
++ setup_timer(&ctx->timer, ep93xx_gpio_portx_timer, (unsigned long)ctx);
++
++ return 0;
++
++err2:
++ for (i = 0; i <= irq_idx; i++)
++ free_irq(ctx->irqs[i], ctx);
++ input_unregister_device(input_dev);
++ input_dev = NULL;
++err1:
++ kfree(ctx);
++ input_free_device(input_dev);
++
++ return -EINVAL;
++}
++
++
++static int __devexit ep93xx_keypad_remove(struct platform_device *pdev)
++{
++ struct ep93xx_gpio_portx_keypad *ctx = platform_get_drvdata(pdev);
++ int i;
++
++ for (i = 0; i < ctx->rows; i++) {
++ disable_irq(ctx->irqs[i]);
++ free_irq(ctx->irqs[i], ctx);
++ }
++
++ del_timer_sync(&ctx->timer);
++
++ tasklet_disable(&kp_tasklet);
++ tasklet_kill(&kp_tasklet);
++
++ input_unregister_device(ctx->input);
++ kfree(ctx);
++
++ return 0;
++}
++
++
++#define ep93xx_keypad_suspend NULL
++#define ep93xx_keypad_resume NULL
++
++static struct platform_driver ep93xx_keypad_driver = {
++ .driver = {
++ .name = "ep93xx-gpio-keypad",
++ .owner = THIS_MODULE,
++ },
++ .probe = ep93xx_keypad_probe,
++ .remove = __devexit_p(ep93xx_keypad_remove),
++ .suspend = ep93xx_keypad_suspend,
++ .resume = ep93xx_keypad_resume,
++};
++
++static int __init ep93xx_keypad_init(void)
++{
++ printk(KERN_INFO DRV_NAME_PREFIX "platform driver v" DRV_VERSION "\n");
++ return platform_driver_register(&ep93xx_keypad_driver);
++}
++
++static void __exit ep93xx_keypad_exit(void)
++{
++ platform_driver_unregister(&ep93xx_keypad_driver);
++}
++
++module_init(ep93xx_keypad_init);
++module_exit(ep93xx_keypad_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("EP93xx GPIO port B keypad driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0014-ep93xx_spi.patch b/recipes/linux/linux-2.6.33/ts72xx/0014-ep93xx_spi.patch
new file mode 100644
index 0000000000..59f45b8fa4
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0014-ep93xx_spi.patch
@@ -0,0 +1,985 @@
+From cbe1d1ec511fb332cb6b94fbe4e6c7816f4d13b9 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 19:10:30 +0100
+Subject: [PATCH 14/16] ep93xx_spi
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/mach-ep93xx/clock.c | 4 +
+ arch/arm/mach-ep93xx/core.c | 30 ++
+ arch/arm/mach-ep93xx/include/mach/spi.h | 18 ++
+ arch/arm/mach-ep93xx/ts72xx.c | 40 +++
+ drivers/spi/Kconfig | 13 +
+ drivers/spi/Makefile | 2 +
+ drivers/spi/spi_ep93xx.c | 500 +++++++++++++++++++++++++++++++
+ drivers/spi/spi_ep93xx.h | 61 ++++
+ drivers/spi/tmp124.c | 158 ++++++++++
+ 9 files changed, 826 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/include/mach/spi.h
+ create mode 100644 drivers/spi/spi_ep93xx.c
+ create mode 100644 drivers/spi/spi_ep93xx.h
+ create mode 100644 drivers/spi/tmp124.c
+
+diff --git a/arch/arm/mach-ep93xx/clock.c b/arch/arm/mach-ep93xx/clock.c
+index 1d0f9d8..d952910 100644
+--- a/arch/arm/mach-ep93xx/clock.c
++++ b/arch/arm/mach-ep93xx/clock.c
+@@ -98,6 +98,9 @@ static struct clk clk_pwm = {
+ .parent = &clk_xtali,
+ .rate = EP93XX_EXT_CLK_RATE,
+ };
++static struct clk clk_ssp = {
++ .rate = EP93XX_EXT_CLK_RATE / 2,
++};
+
+ static struct clk clk_video = {
+ .sw_locked = 1,
+@@ -185,6 +188,7 @@ static struct clk_lookup clocks[] = {
+ INIT_CK("ep93xx-keypad", NULL, &clk_keypad),
+ INIT_CK("ep93xx-fb", NULL, &clk_video),
+ INIT_CK(NULL, "pwm_clk", &clk_pwm),
++ INIT_CK(NULL, "sspclk", &clk_ssp),
+ INIT_CK(NULL, "m2p0", &clk_m2p0),
+ INIT_CK(NULL, "m2p1", &clk_m2p1),
+ INIT_CK(NULL, "m2p2", &clk_m2p2),
+diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
+index 1f0d665..4f02340 100644
+--- a/arch/arm/mach-ep93xx/core.c
++++ b/arch/arm/mach-ep93xx/core.c
+@@ -32,6 +32,7 @@
+ #include <mach/hardware.h>
+ #include <mach/fb.h>
+ #include <mach/ep93xx_keypad.h>
++#include <mach/spi.h>
+
+ #include <asm/mach/map.h>
+ #include <asm/mach/time.h>
+@@ -612,6 +613,34 @@ static struct platform_device ep93xx_leds = {
+ },
+ };
+
++/*************************************************************************
++ * EP93xx ssp peripheral handling
++ *************************************************************************/
++static struct resource ep93xx_ssp_resources[] = {
++ {
++ .start = EP93XX_SPI_PHYS_BASE,
++ .end = EP93XX_SPI_PHYS_BASE + 0x14,
++ .flags = IORESOURCE_MEM,
++ }, {
++ .start = IRQ_EP93XX_SSP, // overrun in receive fifo
++ .end = IRQ_EP93XX_SSP,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++static struct ep93xx_spi_data ep93xx_ssp_data = {
++ .chip_select_num = 4,
++};
++
++static struct platform_device ep93xx_ssp_device = {
++ .name = "ep93xx-spi",
++ .id = 1,
++ .resource = ep93xx_ssp_resources,
++ .num_resources = ARRAY_SIZE(ep93xx_ssp_resources),
++ .dev = {
++ .platform_data = &ep93xx_ssp_data,
++ }
++};
+
+ /*************************************************************************
+ * EP93xx pwm peripheral handling
+@@ -820,5 +849,6 @@ void __init ep93xx_init_devices(void)
+
+ platform_device_register(&ep93xx_rtc_device);
+ platform_device_register(&ep93xx_ohci_device);
++ platform_device_register(&ep93xx_ssp_device);
+ platform_device_register(&ep93xx_leds);
+ }
+diff --git a/arch/arm/mach-ep93xx/include/mach/spi.h b/arch/arm/mach-ep93xx/include/mach/spi.h
+new file mode 100644
+index 0000000..0e07fc9
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/include/mach/spi.h
+@@ -0,0 +1,18 @@
++/*
++ * arch/arm/mach-ep93xx/include/mach/spi.h
++ */
++
++struct ep93xx_spi_data {
++ u16 chip_select_num;
++};
++
++
++/* spi_board_info.controller_data for SPI slave devices */
++struct ep93xx_spi_chip {
++ void (*cs_control)(u32 command);
++};
++
++/* Chip-select state */
++#define SPI_CS_ASSERT 0x1
++#define SPI_CS_DEASSERT 0x2
++#define SPI_CS_INIT 0x4
+diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
+index 6b0ddd9..6c61965 100644
+--- a/arch/arm/mach-ep93xx/ts72xx.c
++++ b/arch/arm/mach-ep93xx/ts72xx.c
+@@ -19,9 +19,11 @@
+ #include <linux/gpio.h>
+ #include <linux/i2c.h>
+ #include <linux/i2c-gpio.h>
++#include <linux/spi/spi.h>
+
+ #include <mach/hardware.h>
+ #include <mach/ts72xx.h>
++#include <mach/spi.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/map.h>
+@@ -207,6 +209,39 @@ static struct platform_device ts72xx_rtc_device = {
+ };
+
+ /*************************************************************************
++ * SPI
++ *************************************************************************/
++
++#if defined(CONFIG_SPI_TMP124) || defined(CONFIG_SPI_TMP124_MODULE)
++void tmp124_spi_cs(u32 command) // FGPIO[2]
++{
++ if (command & SPI_CS_ASSERT) {
++ gpio_set_value(EP93XX_GPIO_LINE_MCCD2, 0);
++ } else if (command & SPI_CS_DEASSERT) {
++ gpio_set_value(EP93XX_GPIO_LINE_MCCD2, 1);
++ } else if (command & SPI_CS_INIT) {
++ gpio_request(EP93XX_GPIO_LINE_MCCD2, "TMP124 cs");
++ gpio_direction_output(EP93XX_GPIO_LINE_MCCD2, 1);
++ }
++}
++
++static struct ep93xx_spi_chip tmp124_hw = {
++ .cs_control = tmp124_spi_cs,
++};
++
++static struct spi_board_info ts72xx_spi_bus[] __initdata = {
++ {
++ /* TMP124 */
++ .modalias = "tmp124",
++ .controller_data = &tmp124_hw,
++ .bus_num = 1,
++ .chip_select = 0,
++ .max_speed_hz = 2 * 1000 * 1000,
++ }
++};
++#endif
++
++/*************************************************************************
+ * Ethernet
+ *************************************************************************/
+ static struct ep93xx_eth_data ts72xx_eth_data = {
+@@ -240,6 +275,11 @@ static void __init ts72xx_init_machine(void)
+ ARRAY_SIZE(ts72xx_i2c_board_info));
+ ep93xx_register_eth(&ts72xx_eth_data, 1);
+
++ #if defined(CONFIG_SPI_TMP124) || defined(CONFIG_SPI_TMP124_MODULE)
++ spi_register_board_info(ts72xx_spi_bus,
++ ARRAY_SIZE(ts72xx_spi_bus));
++ #endif
++
+ /* PWM1 is DIO_6 on TS-72xx header */
+ ep93xx_register_pwm(0, 1);
+ }
+diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
+index f55eb01..84c38b8 100644
+--- a/drivers/spi/Kconfig
++++ b/drivers/spi/Kconfig
+@@ -100,6 +100,12 @@ config SPI_BUTTERFLY
+ inexpensive battery powered microcontroller evaluation board.
+ This same cable can be used to flash new firmware.
+
++config SPI_EP93XX
++ tristate "EP93XX SPI controller"
++ depends on SPI_MASTER
++ help
++ Simple SPI driver for EP93xx.
++
+ config SPI_GPIO
+ tristate "GPIO-based bitbanging SPI Master"
+ depends on GENERIC_GPIO
+@@ -341,6 +347,13 @@ config SPI_TLE62X0
+ sysfs interface, with each line presented as a kind of GPIO
+ exposing both switch control and diagnostic feedback.
+
++config SPI_TMP124
++ tristate "Texas Instruments TMP1224, TMP124"
++ depends on SPI_MASTER && SYSFS
++ help
++ SPI driver for TMP12X temperature sensor chips.
++ This provides a sysfs entry for temperature reading (2°C accurate).
++
+ #
+ # Add new SPI protocol masters in alphabetical order above this line
+ #
+diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
+index f3d2810..6ea5abf 100644
+--- a/drivers/spi/Makefile
++++ b/drivers/spi/Makefile
+@@ -18,6 +18,7 @@ obj-$(CONFIG_SPI_AU1550) += au1550_spi.o
+ obj-$(CONFIG_SPI_BUTTERFLY) += spi_butterfly.o
+ obj-$(CONFIG_SPI_DESIGNWARE) += dw_spi.o
+ obj-$(CONFIG_SPI_DW_PCI) += dw_spi_pci.o
++obj-$(CONFIG_SPI_EP93XX) += spi_ep93xx.o
+ obj-$(CONFIG_SPI_GPIO) += spi_gpio.o
+ obj-$(CONFIG_SPI_IMX) += spi_imx.o
+ obj-$(CONFIG_SPI_LM70_LLP) += spi_lm70llp.o
+@@ -52,6 +53,7 @@ spi_s3c24xx_hw-$(CONFIG_SPI_S3C24XX_FIQ) += spi_s3c24xx_fiq.o
+ # SPI protocol drivers (device/link on bus)
+ obj-$(CONFIG_SPI_SPIDEV) += spidev.o
+ obj-$(CONFIG_SPI_TLE62X0) += tle62x0.o
++obj-$(CONFIG_SPI_TMP124) += tmp124.o
+ # ... add above this line ...
+
+ # SPI slave controller drivers (upstream link)
+diff --git a/drivers/spi/spi_ep93xx.c b/drivers/spi/spi_ep93xx.c
+new file mode 100644
+index 0000000..0e86b38
+--- /dev/null
++++ b/drivers/spi/spi_ep93xx.c
+@@ -0,0 +1,500 @@
++/*
++ * EP93xx SPI driver
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on pxa2xx_spi.c by Stephen Street / StreetFire Sound Labs
++ *
++ * 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.
++ *
++ * Notes:
++ * - Uses SSP IP of processor
++ * - Restricted to SPI master mode
++ * - No DMA transfer
++ * - No power management support
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/device.h>
++#include <linux/interrupt.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <linux/spi/spi.h>
++#include <linux/clk.h>
++#include <linux/io.h>
++#include <asm/irq.h>
++#include <mach/hardware.h>
++#include <mach/spi.h>
++
++#include <linux/sched.h>
++#include <linux/spinlock.h>
++#include <linux/workqueue.h>
++
++#include "spi_ep93xx.h"
++
++
++struct ep93xx_spi {
++ struct spi_master *master; /* SPI framework hookup */
++ void __iomem *ioaddr; /* Virtual base address to SSP registers */
++ u32 freq_max;
++ u32 freq_min;
++ struct clk *clk;
++
++ struct workqueue_struct *workqueue;
++ struct work_struct work;
++ spinlock_t lock;
++ struct list_head queue;
++
++ struct ep93xx_spi_chip *cs_chip; /* Chip Select function */
++};
++
++static inline u16 read_reg(void __iomem *base, off_t offset)
++{
++ return __raw_readw(base + offset);
++}
++
++static inline void write_reg(u16 v, void __iomem *base, off_t offset)
++{
++ __raw_writew(v, base + offset);
++}
++
++/*
++ * compute SCR and CPSDVR bits to setup spi clock based on main input clock rate
++ * that was specified in platform data structure
++ * according to datasheet:
++ * tempclk = sspclk / cpsdvr
++ * spiclk = tempclk / (scr + 1)
++ * SCR valid range is 0..255
++ * CPSDVR valid range is 2..254
++ */
++static int spi_speed_set(struct ep93xx_spi *drv_data, unsigned speed_hz)
++{
++ unsigned long mainclk_hz = clk_get_rate(drv_data->clk);
++ u32 cpsdvr, scr;
++ u16 ssp_cr0;
++
++ for (cpsdvr = 2; cpsdvr <= 254; cpsdvr+=2) {
++ scr = DIV_ROUND_UP(mainclk_hz / speed_hz, cpsdvr);
++ /* now we have SCR+1 in scr, so count with that */
++ if (scr == 0) { /* speed_hz too big */
++ return -EINVAL;
++ }
++ if (scr <= (255 + 1))
++ break; /* we have valid scr and cpsdvr */
++ }
++ if (cpsdvr > 254) {
++ /* speed_hz is too small, set to minimum speed */
++ scr = 256;
++ cpsdvr = 254;
++ }
++ scr--;
++ write_reg(cpsdvr, drv_data->ioaddr, SSPCPSR);
++ ssp_cr0 = read_reg(drv_data->ioaddr, SSPCR0);
++ ssp_cr0 &= ~(SSP_CONTROL_SCR(0xff));
++ write_reg((ssp_cr0 | SSP_CONTROL_SCR(scr)), drv_data->ioaddr, SSPCR0);
++
++ return 0;
++}
++
++static irqreturn_t ssp_int(int irq, void *dev_id)
++{
++ struct ep93xx_spi *drv_data = dev_id;
++ write_reg(SSP_SSPIxx_RORIS, drv_data->ioaddr, SSPIxR); /* clear it */
++
++ printk(KERN_WARNING "SSP overrun\n");
++ return IRQ_HANDLED;
++}
++
++static int transfer_one_work(struct ep93xx_spi *drv_data, struct spi_message *msg)
++{
++ struct spi_device *spi = msg->spi;
++ struct spi_transfer *xfer;
++ int i;
++ u8 *p;
++
++ drv_data->cs_chip->cs_control(SPI_CS_ASSERT);
++
++ list_for_each_entry(xfer, &msg->transfers, transfer_list) {
++ if (!(xfer->tx_buf || xfer->rx_buf)) {
++ dev_dbg(&spi->dev, "missing rx or tx buf\n");
++ drv_data->cs_chip->cs_control(SPI_CS_DEASSERT);
++ return -EINVAL;
++ }
++
++ if (xfer->bits_per_word) {
++ u16 v = read_reg(drv_data->ioaddr, SSPCR0);
++ v = v & SSP_CONTROL_DSS_MASK;
++ v = v | ((xfer->bits_per_word - 1) & SSP_CONTROL_DSS_MASK);
++ write_reg(v, drv_data->ioaddr, SSPCR0);
++ }
++
++ if (xfer->speed_hz) {
++ if (spi_speed_set(drv_data,xfer->speed_hz) != 0){
++ dev_err(&spi->dev, "xfer speed hz invalid\n");
++ return -EINVAL;
++ }
++ }
++
++ if (xfer->tx_buf) {
++ p = (u8 *)xfer->tx_buf;
++
++ if ((spi->bits_per_word == 16 && xfer->bits_per_word == 0) ||
++ (xfer->bits_per_word == 16)) {
++ for (i = 0; i < xfer->len; i+=2)
++ write_reg((p[i] << 8) + p[i+1], drv_data->ioaddr, SSPDR);
++ } else {
++ for (i = 0; i < xfer->len; i++)
++ write_reg(p[i], drv_data->ioaddr, SSPDR);
++ }
++ }
++
++ if (xfer->rx_buf) {
++ u16 v;
++ p = xfer->rx_buf;
++
++ if ((spi->bits_per_word == 16 && xfer->bits_per_word == 0) ||
++ (xfer->bits_per_word == 16)) {
++ for (i = 0; i < xfer->len; i+=2) {
++ v = read_reg(drv_data->ioaddr, SSPDR);
++ p[i] = v >> 8;
++ p[i+1] = v & 0xFF;
++ }
++ } else {
++ for (i = 0; i < xfer->len; i++)
++ p[i] = read_reg(drv_data->ioaddr, SSPDR);
++ }
++ }
++
++ /* restore device bits_per_word */
++ if (xfer->bits_per_word) {
++ u16 v = read_reg(drv_data->ioaddr, SSPCR0);
++ v = v & SSP_CONTROL_DSS_MASK;
++ v |= spi->bits_per_word - 1;
++ write_reg(v, drv_data->ioaddr, SSPCR0);
++ }
++
++ /* restore device speed_hz */
++ if (xfer->speed_hz) {
++ if (spi_speed_set(drv_data,spi->max_speed_hz) != 0)
++ return -EINVAL;
++ }
++
++ dev_dbg(&spi->dev, "transfer: len=%u, tx_buf=%p, rx_buf=%p\n", xfer->len, xfer->tx_buf, xfer->rx_buf);
++ }
++
++ if (xfer->delay_usecs)
++ udelay(xfer->delay_usecs);
++ drv_data->cs_chip->cs_control(SPI_CS_DEASSERT);
++
++ msg->actual_length = 0;
++ msg->status = 0;
++
++ if (msg->complete)
++ msg->complete(msg->context);
++
++ return 0;
++}
++
++
++static void ssp_work(struct work_struct *work)
++{
++ struct ep93xx_spi *drv_data = container_of(work, struct ep93xx_spi, work);
++ unsigned long flags;
++
++ spin_lock_irqsave(&drv_data->lock, flags);
++ while (!list_empty(&drv_data->queue)) {
++ struct spi_message *m;
++
++ m = container_of(drv_data->queue.next, struct spi_message, queue);
++ list_del_init(&m->queue);
++ spin_unlock_irqrestore(&drv_data->lock, flags);
++
++ transfer_one_work(drv_data, m);
++
++ spin_lock_irqsave(&drv_data->lock, flags);
++ }
++ spin_unlock_irqrestore(&drv_data->lock, flags);
++}
++
++
++static int ssp_transfer(struct spi_device *spi, struct spi_message *m)
++{
++ struct spi_master *master = spi->master;
++ struct ep93xx_spi *drv_data = spi_master_get_devdata(master);
++ struct spi_transfer *t;
++ unsigned long flags;
++
++ m->actual_length = 0;
++
++ /* check each transfer's parameters */
++ list_for_each_entry (t, &m->transfers, transfer_list) {
++ u32 speed_hz = t->speed_hz ? t->speed_hz : spi->max_speed_hz;
++ u8 bits_per_word = t->bits_per_word ? t->bits_per_word : spi->bits_per_word;
++
++ if (!t->tx_buf && !t->rx_buf && t->len)
++ return -EINVAL;
++ if (bits_per_word < 4 || bits_per_word > 16)
++ return -EINVAL;
++ /*if (t->len & ((bits_per_word >> 3) - 1))
++ return -EINVAL;*/
++ if (speed_hz < drv_data->freq_min || speed_hz > drv_data->freq_max)
++ return -EINVAL;
++ }
++
++ spin_lock_irqsave(&drv_data->lock, flags);
++ list_add_tail(&m->queue, &drv_data->queue);
++ queue_work(drv_data->workqueue, &drv_data->work);
++ spin_unlock_irqrestore(&drv_data->lock, flags);
++
++ return 0;
++
++}
++
++/* the spi->mode bits understood by this driver: */
++#define MODEBITS (SPI_CPOL | SPI_CPHA)
++
++static int ssp_setup(struct spi_device *spi)
++{
++ struct ep93xx_spi *drv_data = spi_master_get_devdata(spi->master);
++ struct ep93xx_spi_chip *chip_info;
++ u16 v;
++
++ /* Get controller data */
++ chip_info = spi->controller_data;
++ if (!chip_info) {
++ dev_err(&spi->dev, "setup: controller data required\n");
++ return -EINVAL;
++ }
++ drv_data->cs_chip = chip_info;
++ drv_data->cs_chip->cs_control(SPI_CS_INIT);
++
++ if (!spi->bits_per_word) {
++ spi->bits_per_word = 8;
++ }
++
++ if (spi->bits_per_word < 4 || spi->bits_per_word > 16) {
++ dev_dbg(&spi->dev, "setup: unsupported %d bit words\n",
++ spi->bits_per_word);
++ return -EINVAL;
++ }
++
++ if (spi->chip_select > spi->master->num_chipselect) {
++ dev_dbg(&spi->dev, "setup: invalid chipselect %u (%u defined)\n",
++ spi->chip_select, spi->master->num_chipselect);
++ return -EINVAL;
++ }
++
++ if (spi->mode & ~MODEBITS) {
++ dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
++ spi->mode & ~MODEBITS);
++ return -EINVAL;
++ }
++
++ v = read_reg(drv_data->ioaddr, SSPCR0);
++
++ if (spi->mode & SPI_CPOL)
++ v |= SSP_CONTROL_SPO;
++ else
++ v &= ~SSP_CONTROL_SPO;
++
++ if (spi->mode & SPI_CPHA)
++ v |= SSP_CONTROL_SPH;
++ else
++ v &= ~SSP_CONTROL_SPH;
++
++ v = v & SSP_CONTROL_DSS_MASK;
++ v |= spi->bits_per_word - 1;
++
++ write_reg(v, drv_data->ioaddr, SSPCR0);
++
++ if (!spi->max_speed_hz) {
++ spi->max_speed_hz = drv_data->freq_min;
++ } else if (spi->max_speed_hz > drv_data->freq_max ||
++ spi->max_speed_hz < drv_data->freq_min){
++ return -EINVAL;
++ }
++
++ if (spi_speed_set(drv_data,spi->max_speed_hz) != 0){
++ dev_dbg(&spi->dev, "setup: unsupported speed %u\n", spi->max_speed_hz);
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++
++static void ssp_cleanup(struct spi_device *spi)
++{
++ struct ep93xx_spi *drv_data = spi_master_get_devdata(spi->master);
++ drv_data->cs_chip = NULL;
++}
++
++
++static int __init spi_ep93xx_probe(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct spi_master *master;
++ struct ep93xx_spi_data *spi_data = pdev->dev.platform_data;
++ struct ep93xx_spi *drv_data = NULL;
++ struct resource *memory_resource;
++ int irq, status = 0, min_div = 2, max_div = 254*(255+1);
++
++ /* Check I2SonSSP bit (ssp pins and i2s pins are multiplexed)
++ We could force with ep93xx_devcfg_clear_bits */
++ if (readl(EP93XX_SYSCON_DEVCFG) & EP93XX_SYSCON_DEVCFG_I2SONSSP)
++ return -ENODEV;
++
++ /* Allocate master with space for drv_data */
++ master = spi_alloc_master(dev, sizeof(struct ep93xx_spi));
++ if (!master) {
++ dev_err(&pdev->dev, "can not alloc spi_master\n");
++ return -ENOMEM;
++ }
++
++ /* Setup register addresses */
++ memory_resource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!memory_resource) {
++ dev_err(&pdev->dev, "memory resources not defined\n");
++ status = -ENODEV;
++ goto out_error_master_alloc;
++ }
++
++ drv_data = spi_master_get_devdata(master);
++ drv_data->master = master;
++ drv_data->ioaddr = ioremap(memory_resource->start, memory_resource->end - memory_resource->start + 1);
++ drv_data->clk = clk_get(&pdev->dev, "sspclk");
++ drv_data->freq_max = clk_get_rate(drv_data->clk) / min_div;
++ drv_data->freq_min = clk_get_rate(drv_data->clk) / max_div + 1;
++
++ INIT_WORK(&drv_data->work, ssp_work);
++ spin_lock_init(&drv_data->lock);
++ INIT_LIST_HEAD(&drv_data->queue);
++
++ drv_data->workqueue = create_singlethread_workqueue(dev_name(master->dev.parent));
++ if (!drv_data->workqueue) {
++ status = -EBUSY;
++ goto out_error_master_alloc;
++ }
++
++ master->bus_num = pdev->id;
++ master->num_chipselect = spi_data->chip_select_num;
++ master->cleanup = ssp_cleanup;
++ master->setup = ssp_setup;
++ master->transfer = ssp_transfer;
++
++ /* Attach to IRQ */
++ irq = platform_get_irq(pdev, 0);
++ if (irq < 0) {
++ dev_err(&pdev->dev, "irq resource not defined\n");
++ status = -ENODEV;
++ goto out_error_master_alloc;
++ }
++
++ status = request_irq(irq, ssp_int, 0, dev_name(dev), drv_data);
++ if (status < 0) {
++ dev_err(&pdev->dev, "can not get IRQ\n");
++ goto out_error_master_alloc;
++ }
++
++ /* Load default SSP configuration */
++ write_reg(SSP_CONTROL_SSE, drv_data->ioaddr, SSPCR1);
++ write_reg(SPI_DEFAULT0, drv_data->ioaddr, SSPCR0);
++ write_reg(SPI_DEFAULT_DIVISOR, drv_data->ioaddr, SSPCPSR);
++ write_reg(0x00, drv_data->ioaddr, SSPCR1);
++
++ /* Register with the SPI framework */
++ platform_set_drvdata(pdev, drv_data);
++ status = spi_register_master(master);
++ if (status != 0) {
++ dev_err(&pdev->dev, "problem registering spi master\n");
++ goto out_error_irq_alloc;
++ }
++
++ write_reg(SPI_DEFAULT1, drv_data->ioaddr, SSPCR1);
++ return status;
++
++out_error_irq_alloc:
++ free_irq(irq, drv_data);
++
++out_error_master_alloc:
++ spi_master_put(master);
++ return status;
++}
++
++static int spi_ep93xx_remove(struct platform_device *pdev)
++{
++ struct ep93xx_spi *drv_data = platform_get_drvdata(pdev);
++ int irq;
++
++ if (!drv_data)
++ return 0;
++
++ /* Disable SSP (clear SSE bit) */
++ write_reg(0x00, drv_data->ioaddr, SSPCR1);
++
++ /* Release IRQ */
++ irq = platform_get_irq(pdev, 0);
++
++ if (irq >= 0)
++ free_irq(irq, drv_data);
++
++ /* Disconnect from the SPI framework */
++ spi_unregister_master(drv_data->master);
++
++ /* Remove the workqueue */
++ destroy_workqueue(drv_data->workqueue);
++
++ iounmap(drv_data->ioaddr);
++
++ /* Prevent double remove */
++ platform_set_drvdata(pdev, NULL);
++
++ clk_put(drv_data->clk);
++ spi_master_put(drv_data->master);
++
++ return 0;
++}
++
++static void spi_ep93xx_shutdown(struct platform_device *pdev)
++{
++ int status = 0;
++
++ if ((status = spi_ep93xx_remove(pdev)) != 0)
++ dev_err(&pdev->dev, "shutdown failed with %d\n", status);
++}
++
++static struct platform_driver ep93xx_spi_platform_driver = {
++ .driver = {
++ .name = "ep93xx-spi",
++ .bus = &platform_bus_type,
++ .owner = THIS_MODULE,
++ },
++ .remove = __exit_p(spi_ep93xx_remove),
++ .shutdown = spi_ep93xx_shutdown,
++};
++
++static int __init spi_ep93xx_init(void)
++{
++ return platform_driver_probe(&ep93xx_spi_platform_driver, spi_ep93xx_probe);
++}
++
++static void __exit spi_ep93xx_exit(void)
++{
++ platform_driver_unregister(&ep93xx_spi_platform_driver);
++}
++
++module_init(spi_ep93xx_init);
++module_exit(spi_ep93xx_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("EP93xx SPI Controller Driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.25");
+diff --git a/drivers/spi/spi_ep93xx.h b/drivers/spi/spi_ep93xx.h
+new file mode 100644
+index 0000000..6fad735
+--- /dev/null
++++ b/drivers/spi/spi_ep93xx.h
+@@ -0,0 +1,61 @@
++/*
++ * EP93xx SPI (simple) include
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on pxa2xx_spi.c by Stephen Street / StreetFire Sound Labs
++ *
++ * 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.
++ *
++ */
++
++/* SSP Registers */
++#define SSPCR0 0x00 /* Control register 0 */
++#define SSPCR1 0x04 /* Control register 1 */
++#define SSPDR 0x08 /* Receice FIFO data register (16-bit read) */
++ /* Transmit FIFO data register (16-bit write) */
++#define SSPSR 0x0C /* Status register */
++#define SSPCPSR 0x10 /* Clock prescale register (from 2 to 254, even number) */
++#define SSPIxR 0x14 /* Interrupt identification register (read) */
++ /* Interrupt clear register (write) */
++
++/* SSP control registers bit fields & masks */
++#define SSP_CONTROL_SCR(x) (((x) & 0xFF) << 8) /* Serial clock rate = SCLKOUT / CPSDVR / (1+SCR) */
++#define SSP_CONTROL_SPH (1 << 7) /* SCLKOUT phase (for SPI only) */
++#define SSP_CONTROL_SPO (1 << 6) /* SCLKOUT polarity (for SPI only) */
++#define SSP_CONTROL_FRF(x) (((x) & 3) << 4) /* Frame format (0=SPI) */
++#define SSP_CONTROL_DSS_4BIT_DATA 3
++#define SSP_CONTROL_DSS_8BIT_DATA 7
++#define SSP_CONTROL_DSS_15BIT_DATA 14
++#define SSP_CONTROL_DSS_16BIT_DATA 15
++#define SSP_CONTROL_DSS_MASK 0xF
++#define SSP_CONTROL_MS (1 << 5) /* 0=master, 1=slave (can be modified when SSE=0) */
++#define SSP_CONTROL_SSE (1 << 4) /* SSP operation enable (=1), disable (=0) */
++#define SSP_CONTROL_LBM (1 << 3) /* Loop back mode */
++#define SSP_CONTROL_RORIE (1 << 2) /* Interrupt enable : overrun condition */
++#define SSP_CONTROL_TIE (1 << 1) /* Interrupt enable : transmit fifo */
++#define SSP_CONTROL_RIE (1 << 0) /* Interrupt enable : receive fifo */
++
++/* SSP status register (read only) */
++#define SSP_STATUS_BUSY (1 << 4) /* Busy flag (0: SSP is idle) */
++#define SSP_STATUS_RFF (1 << 3) /* Receive fifo full ? (1=full) */
++#define SSP_STATUS_RNE (1 << 2) /* Receive fifo not empty ? (0=empty) */
++#define SSP_STATUS_TNF (1 << 1) /* Transmit fifo not full ? (0=full) */
++#define SSP_STATUS_TFE (1 << 0) /* Transmit fifo empty ? (1=empty) */
++
++/* SSP SSPIIR/SSPICR register (write 1 to clear interrupt) */
++#define SSP_SSPIxx_RORIS (1 << 2) /* Receive fifo overrun interrupt status */
++#define SSP_SSPIxx_TIS (1 << 1) /* Transmit fifo service request interrupt status */
++#define SSP_SSPIxx_RIS (1 << 0) /* Receive fifo service request interrupt status */
++
++/* Default configuration values */
++#define SPI_DEFAULT0 (SSP_CONTROL_DSS_16BIT_DATA | SSP_CONTROL_FRF(0) | SSP_CONTROL_SCR(0))
++#define SPI_DEFAULT1 (SSP_CONTROL_SSE | SSP_CONTROL_RORIE)
++#define SPI_DEFAULT_DIVISOR 254
+diff --git a/drivers/spi/tmp124.c b/drivers/spi/tmp124.c
+new file mode 100644
+index 0000000..d3600f7
+--- /dev/null
++++ b/drivers/spi/tmp124.c
+@@ -0,0 +1,158 @@
++/*
++ * TMP124 SPI protocol driver
++ *
++ * (c) Copyright 2008 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on tle62x0.c by Ben Dooks, <ben@simtec.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.
++ *
++ * Note: The chip uses a '3-wire SPI' (miso and mosi are the same pin).
++ */
++
++#include <linux/device.h>
++#include <linux/kernel.h>
++#include <linux/spi/spi.h>
++
++struct tmp124_state {
++ struct spi_device *bus;
++ u8 tx_buff[2];
++ u8 rx_buff[2];
++};
++
++
++static inline int tmp124_write_then_read(struct tmp124_state *st)
++{
++ struct spi_message msg;
++ struct spi_transfer xfer[2] = {
++ {
++ .tx_buf = st->tx_buff,
++ .rx_buf = NULL,
++ .len = 2,
++ .delay_usecs = 1000,
++ }, {
++ .tx_buf = NULL,
++ .rx_buf = st->rx_buff,
++ .len = 2,
++ }
++ };
++
++ spi_message_init(&msg);
++ spi_message_add_tail(&xfer[0], &msg);
++ spi_message_add_tail(&xfer[1], &msg);
++
++ return spi_sync(st->bus, &msg);
++}
++
++
++static ssize_t tmp124_temperature_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct tmp124_state *st = dev_get_drvdata(dev);
++ int ret;
++
++ st->tx_buff[0] = 0x80;
++ st->tx_buff[1] = 0x00;
++
++ ret = tmp124_write_then_read(st);
++ if (ret < 0) {
++ dev_err(&st->bus->dev, "tmp124_write_then_read\n");
++ ret = 0;
++ } else {
++ signed short v = (st->rx_buff[0] << 8) + st->rx_buff[1];
++ signed long val;
++
++ val = v >> 3;
++
++ /* 2 digit precision (0.0625*100) */
++ val = (val * 50) / 8;
++ ret = snprintf(buf, PAGE_SIZE, "%ld.%02ld\n", val/100, abs(val%100));
++ }
++ return ret;
++}
++
++
++static DEVICE_ATTR(temperature, S_IRUGO, tmp124_temperature_show, NULL);
++
++
++static int __devinit tmp124_probe(struct spi_device *spi)
++{
++ struct tmp124_state *st;
++ int ret;
++
++ st = kzalloc(sizeof(struct tmp124_state), GFP_KERNEL);
++ if (st == NULL) {
++ dev_err(&spi->dev, "no memory for device state\n");
++ return -ENOMEM;
++ }
++
++ /* required config */
++ spi->bits_per_word = 16;
++
++ st->bus = spi;
++
++ ret = spi_setup(spi);
++ if (ret) {
++ dev_err(&spi->dev, "setup device\n");
++ goto err;
++ }
++
++ ret = device_create_file(&spi->dev, &dev_attr_temperature);
++ if (ret) {
++ dev_err(&spi->dev, "cannot create temperature attribute\n");
++ goto err;
++ }
++
++ spi_set_drvdata(spi, st);
++ return 0;
++
++err:
++ kfree(st);
++ return ret;
++}
++
++
++static int __devexit tmp124_remove(struct spi_device *spi)
++{
++ struct tmp124_state *st = spi_get_drvdata(spi);
++
++ device_remove_file(&spi->dev, &dev_attr_temperature);
++ kfree(st);
++
++ return 0;
++}
++
++
++static struct spi_driver tmp124_driver = {
++ .driver = {
++ .name = "tmp124",
++ .owner = THIS_MODULE,
++ },
++ .probe = tmp124_probe,
++ .remove = __devexit_p(tmp124_remove),
++};
++
++static __init int tmp124_init(void)
++{
++ return spi_register_driver(&tmp124_driver);
++}
++
++static __exit void tmp124_exit(void)
++{
++ spi_unregister_driver(&tmp124_driver);
++}
++
++module_init(tmp124_init);
++module_exit(tmp124_exit);
++
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("TMP124 SPI Protocol Driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("0.1");
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0015-ep93xx_cpufreq.patch b/recipes/linux/linux-2.6.33/ts72xx/0015-ep93xx_cpufreq.patch
new file mode 100644
index 0000000000..4666a3e8de
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0015-ep93xx_cpufreq.patch
@@ -0,0 +1,360 @@
+From bb39467bbccfd0c0e6d8c496ab9a5c84eacb36d6 Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 19:46:15 +0100
+Subject: [PATCH 15/16] ep93xx_cpufreq
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ arch/arm/Kconfig | 12 ++
+ arch/arm/mach-ep93xx/Makefile | 2 +
+ arch/arm/mach-ep93xx/cpufreq.c | 291 ++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 305 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-ep93xx/cpufreq.c
+
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index 6cf5ed4..df90774 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -296,6 +296,7 @@ config ARCH_EP93XX
+ select COMMON_CLKDEV
+ select ARCH_REQUIRE_GPIOLIB
+ select ARCH_HAS_HOLES_MEMORYMODEL
++ select ARCH_HAS_CPUFREQ
+ help
+ This enables support for the Cirrus EP93xx series of CPUs.
+
+@@ -1380,6 +1381,17 @@ config CPU_FREQ_INTEGRATOR
+
+ If in doubt, say Y.
+
++config CPU_FREQ_EP93XX
++ tristate "CPUfreq driver for EP93XX CPUs"
++ depends on ARCH_EP93XX && CPU_FREQ
++ default n
++ help
++ This enables the CPUfreq driver for EP9301 CPUs. Not tested with EP9302.
++
++ For details, take a look at <file:Documentation/cpu-freq>.
++
++ If in doubt, say N.
++
+ config CPU_FREQ_PXA
+ bool
+ depends on CPU_FREQ && ARCH_PXA && PXA25x
+diff --git a/arch/arm/mach-ep93xx/Makefile b/arch/arm/mach-ep93xx/Makefile
+index 8624d62..f8d126c 100644
+--- a/arch/arm/mach-ep93xx/Makefile
++++ b/arch/arm/mach-ep93xx/Makefile
+@@ -6,6 +6,8 @@ obj-m :=
+ obj-n :=
+ obj- :=
+
++obj-$(CONFIG_CPU_FREQ_EP93XX) += cpufreq.o
++
+ obj-$(CONFIG_MACH_ADSSPHERE) += adssphere.o
+ obj-$(CONFIG_MACH_EDB93XX) += edb93xx.o
+ obj-$(CONFIG_MACH_GESBC9312) += gesbc9312.o
+diff --git a/arch/arm/mach-ep93xx/cpufreq.c b/arch/arm/mach-ep93xx/cpufreq.c
+new file mode 100644
+index 0000000..9188e5c
+--- /dev/null
++++ b/arch/arm/mach-ep93xx/cpufreq.c
+@@ -0,0 +1,291 @@
++/*
++ * cpufreq.c: clock scaling for Cirrus EP93XX embedded chip
++ *
++ * Copyright (C) 2008 Matthieu Crapet <mcrapet@gmail.com>
++ *
++ * Based on "cpu-ep93xx.c" driver (for 2.4 kernel) by
++ * Bob Lees bob@diamond.demon.co.uk (Diamond Consulting Services Ltd)
++ * Ideas taken from "clock.c" by Lennert Buytenhek <buytenh@wantstofly.org>
++ *
++ * 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
++ *
++ * Theory of operations
++ * ====================
++ *
++ * Clock scaling can be used to lower the power consumption of the CPU
++ * core. For this processor the major power saving is reducing the mem clk.
++ *
++ * The ep93xx has 2 registers to control the 2 PLLs of the ep93xx:
++ * PLL1 controls the cpu, bus and peripheral clocks;
++ * PLL2 controls the USB, MIR and ADC clocks.
++ *
++ * ClkSet1 (EP93XX_SYSCON_CLOCK_SET1) 0x80930020 Clock speed control 1 (i.e. PLL1 config)
++ * ClkSet2 (EP93XX_SYSCON_CLOCK_SET2) 0x80930024 Clock speed control 2 (i.e. PLL2 config)
++ *
++ * This driver only focus on PLL1. The pll has two multipliers/dividers:
++ * Fout = 14.7456 * (PLL1_X1FBD + 1) * (PLL1_X2FBD + 1) / ((PLL1_X2IPD + 1) * 2 ^ PLL1_PS)
++ * = 14.7456 * (PLL1_X1FBD + 1) * (PLL1_X2FBD + 1) / (PLL1_X2IPD + 1) / 2 ^ PLL1_PS
++ *
++ * PLL1_X2 output (before the PS divide), must be > 290Mhz and <= 528Mhz
++ *
++ * fclk [processor ] = pll1 / fclk_divisor
++ * hclk [AHB bus clock] = pll1 / hclk_divisor
++ * pclk [APB bus clock] = hclk / pclk_divisor
++ * fclk >= hclk > pclk
++ *
++ * EP9301 EP9302/07/12/15
++ * PLL1 fout max (MHz) 528 528
++ * fclk min (MHz) 12.9 12.9
++ * fclk max (MHz) 166 200
++ * hclk max (MHz) 66 100
++ * pclk max (MHz) 50 50
++ *
++ * Notes:
++ * - This driver does not use the clk_{get,put,roundrate} (clock.c) functions.
++ * That's quite dirty, but clock.c is not complete yet.
++ * - Significant power saving is made by lowering hclk not fclk.
++ * - Ethernet (100 MBit) doesn't work with hclk < 25MHz.
++ * - Is it safe to have fclk = hclk ?
++ * - calc_pll_rate is taken from clock.c (Lennert Buytenhek)
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/io.h>
++#include <linux/cpufreq.h>
++#include <mach/hardware.h>
++
++
++/* ClkSet1 register */
++#define SYSCON_CLKSET1_PLL1_PS_SHIFT 16
++#define SYSCON_CLKSET1_PCLK_DIV_SHIFT 18
++#define SYSCON_CLKSET1_HCLK_DIV_SHIFT 20
++#define SYSCON_CLKSET1_FCLK_DIV_SHIFT 25
++
++#define CLKSET1(p, pl, pd, h, f) ( p | \
++ ( pl << SYSCON_CLKSET1_PLL1_PS_SHIFT) | \
++ ( pd << SYSCON_CLKSET1_PCLK_DIV_SHIFT)| \
++ ( h << SYSCON_CLKSET1_HCLK_DIV_SHIFT) | \
++ ( f << SYSCON_CLKSET1_FCLK_DIV_SHIFT))
++
++/* SMC_ROM = 0, nBYP1 = 1 */
++#define PLL1_MASK(x1fbd1,x1fbd2,x2ipd) (0x800000 | (x1fbd1 << 11) | (x1fbd2 << 5) | (x2ipd))
++
++typedef struct {
++ int speed; /* in kHz */
++ u32 preset; /* x1fbd, x2fbd and x2ipd are left unchanged */
++ u32 pll1_ps; /* sets final divide from pll */
++ u32 pdiv; /* sets pclk, peripheral clk (division of hclk) */
++ u32 hdiv; /* sets hclk, bus (memory) clk */
++ u32 fdiv; /* sets fclk, processor clk */
++} ep93xx_speed_settings_t;
++
++static const char fclk_divisors[] = { 1, 2, 4, 8, 16, 1, 1, 1 };
++
++
++/* Suitable for EP9301. PLL1 rate (without final PS divider):
++ - PLL1_RATE(19,17,15) = 331.776 MHz
++ - PLL1_MASK(19, 7, 7) = 294.912 MHz
++ */
++static const ep93xx_speed_settings_t ep93xx_clkset1_settings[] =
++{
++ /* { speed, preset, pll1_ps, pdiv, hdiv, fdiv } */
++ { 165888, PLL1_MASK(19,17,15), 0, 1, 3, 1 }, /* [0x02B49A2F] fclk=165.9 (fdiv=2), hclk=66.4 (hdiv=5), pclk=33.2 (pdiv=2), ps=1 */
++ { 165887, PLL1_MASK(19,17,15), 1, 1, 3, 0 }, /* [0x00B59A2F] fclk=165.9 (fdiv=1), hclk=33.2 (hdiv=5), pclk=16.6 (pdiv=2), ps=2 */
++ { 147456, PLL1_MASK(19, 7, 7), 0, 1, 3, 1 }, /* [0x02B498E7] fclk=147.5 (fdiv=2), hclk=59.0 (hdiv=5), pclk=29.5 (pdiv=2), ps=1 */
++ { 147455, PLL1_MASK(19, 7, 7), 0, 2, 3, 1 }, /* [0x02B898E7] fclk=147.5 (fdiv=2), hclk=59.0 (hdiv=5), pclk=14.7 (pdiv=4), ps=1 */
++ { 73728, PLL1_MASK(19, 7, 7), 0, 1, 3, 2 }, /* [0x04B498E7] fclk=73.7 (fdiv=4), hclk=59.0 (hdiv=5), pclk=29.5 (pdiv=2), ps=1 */
++ { 82944, PLL1_MASK(19,17,15), 0, 1, 3, 2 }, /* [0x04B49A2F] fclk=82.9 (fdiv=4), hclk=66.4 (hdiv=5), pclk=33.2 (pdiv=2), ps=1 */
++ { 82943, PLL1_MASK(19,17,15), 0, 1, 4, 2 }, /* [0x04C49A2F] fclk=82.9 (fdiv=4), hclk=55.3 (hdiv=6), pclk=27.6 (pdiv=2), ps=1 */
++ { 82942, PLL1_MASK(19,17,15), 1, 1, 2, 1 }, /* [0x02A59A2F] fclk=82.9 (fdiv=2), hclk=41.5 (hdiv=4), pclk=20.7 (pdiv=2), ps=2 */
++ { 41472, PLL1_MASK(19,17,15), 0, 1, 5, 3 }, /* [0x06D49A2F] fclk=41.5 (fdiv=8), hclk=41.5 (hdiv=8), pclk=20.7 (pdiv=2), ps=1 */
++};
++
++#if 0
++/* Suitable for EP9302/07/12/15. Assumed: PLL1 = 400.1 MHz (X1FBD1=23, X1FBD2=25, X2IPD=22) */
++static ep93xx_speed_settings_t ep93xx_clkset1_settings[] =
++{
++ /* { speed, preset, pll1_ps, pdiv, hdiv, fdiv } */
++ { 200027, 0x0080bb36, 0, 1, 2, 1 }, /* [0x02A4BB36] fclk=200.0 (fdiv=2), hclk=100.0 (hdiv=4), pclk=50.0 (pdiv=2), ps=1 */
++ { 200026, 0x0080bb36, 0, 1, 3, 1 }, /* [0x02B4BB36] fclk=200.0 (fdiv=2), hclk=80.0 (hdiv=5), pclk=40.0 (pdiv=2), ps=1 */
++ { 200025, 0x0080bb36, 0, 1, 4, 1 }, /* [0x02C4BB36] fclk=200.0 (fdiv=2), hclk=66.7 (hdiv=6), pclk=33.3 (pdiv=2), ps=1 */
++ { 100013, 0x0080bb36, 0, 1, 3, 2 }, /* [0x04B4BB36] fclk=100.0 (fdiv=4), hclk=80.0 (hdiv=5), pclk=40.0 (pdiv=2), ps=1 */
++ { 100012, 0x0080bb36, 1, 1, 2, 1 }, /* [0x02A5BB36] fclk=100.0 (fdiv=2), hclk=50.0 (hdiv=4), pclk=25.0 (pdiv=2), ps=2 */
++ { 100011, 0x0080bb36, 1, 1, 1, 1 }, /* [0x0295BB36] fclk=100.0 (fdiv=2), hclk=100.0 (hdiv=2), pclk=50.0 (pdiv=2), ps=2 */
++ { 50006, 0x0080bb36, 2, 1, 2, 1 }, /* [0x02A6BB36] fclk=50.0 (fdiv=2), hclk=25.0 (hdiv=4), pclk=12.5 (pdiv=2), ps=4 */
++ { 50005, 0x0080bb36, 2, 1, 1, 1 }, /* [0x0296BB36] fclk=50.0 (fdiv=2), hclk=50.0 (hdiv=2), pclk=25.0 (pdiv=2), ps=4 */
++ { 25003, 0x0080bb36, 3, 1, 1, 1 }, /* [0x0297BB36] fclk=25.0 (fdiv=2), hclk=25.0 (hdiv=2), pclk=12.5 (pdiv=2), ps=8 */
++};
++#endif
++
++
++static unsigned long calc_pll_rate(u32 config_word)
++{
++ unsigned long long rate;
++
++ rate = 14745600;
++ rate *= ((config_word >> 11) & 0x1f) + 1; /* X1FBD (5 bits) */
++ rate *= ((config_word >> 5) & 0x3f) + 1; /* X2FBD (6 bits) */
++ do_div(rate, (config_word & 0x1f) + 1); /* X2IPD (5 bits) */
++ rate = rate >> ((config_word >> 16) & 3); /* PS (2 bits) */
++
++ return (unsigned long)rate;
++}
++
++
++static const ep93xx_speed_settings_t *ep93xx_find_clkset1(unsigned int khz, unsigned int relation)
++{
++ int i;
++ const ep93xx_speed_settings_t *p = &ep93xx_clkset1_settings[0];
++
++ switch (relation) {
++ case CPUFREQ_RELATION_L: /* lowest frequency at or above target */
++ for (i = 0; i < ARRAY_SIZE(ep93xx_clkset1_settings); i++) {
++ if (ep93xx_clkset1_settings[i].speed < khz)
++ continue;
++ if (p->speed > ep93xx_clkset1_settings[i].speed) // take lowest value
++ p = &ep93xx_clkset1_settings[i];
++ }
++ break;
++
++ case CPUFREQ_RELATION_H: /* highest frequency below or at target */
++ for (i = 0; i < ARRAY_SIZE(ep93xx_clkset1_settings); i++) {
++ if (ep93xx_clkset1_settings[i].speed > khz)
++ continue;
++ if (p->speed < ep93xx_clkset1_settings[i].speed) // take highest value
++ p = &ep93xx_clkset1_settings[i];
++ }
++ break;
++ }
++
++ return p;
++}
++
++
++static int ep93xx_verify_speed(struct cpufreq_policy *policy)
++{
++ if (policy->cpu != 0)
++ return -EINVAL;
++
++ cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, policy->cpuinfo.max_freq);
++
++ return 0;
++}
++
++
++static unsigned int ep93xx_get_speed(unsigned int cpu)
++{
++ unsigned int freq;
++ u32 value;
++
++ if (cpu)
++ return 0;
++
++ value = __raw_readl(EP93XX_SYSCON_CLOCK_SET1);
++ if (!(value & 0x00800000)) { /* PLL1 bypassed? */
++ freq = 14745600;
++ } else {
++ freq = calc_pll_rate(value);
++ }
++ freq /= fclk_divisors[(value >> 25) & 0x7];
++
++ freq = (freq + 500) / 1000; /* rounded result in kHz */
++ return freq;
++}
++
++
++static int ep93xx_set_target(struct cpufreq_policy *policy,
++ unsigned int target_freq,
++ unsigned int relation)
++{
++ struct cpufreq_freqs freqs;
++ const ep93xx_speed_settings_t *config;
++ u32 value;
++
++ config = ep93xx_find_clkset1(target_freq, relation);
++
++ freqs.old = ep93xx_get_speed(0);
++ freqs.new = config->speed;
++ freqs.cpu = 0;
++ freqs.flags = 0;
++
++ pr_debug("ep93xx: target_freq=%d, old=%d new=%d (kHz) rel=%d\n", target_freq, freqs.old, freqs.new, relation);
++
++ cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
++
++ value = CLKSET1(config->preset, config->pll1_ps,
++ config->pdiv, config->hdiv, config->fdiv);
++ __raw_writel(value, EP93XX_SYSCON_CLOCK_SET1);
++
++ /* 5 nops required to flush instruction pipeline */
++ __asm__ __volatile__("nop; nop; nop; nop; nop");
++
++ cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
++
++ return 0;
++}
++
++
++static int __init ep93xx_cpufreq_driver_init(struct cpufreq_policy *policy)
++{
++ printk(KERN_INFO "ep93xx-cpufreq: driver v1.01\n");
++
++ if (policy->cpu != 0)
++ return -EINVAL;
++
++ policy->cur = ep93xx_get_speed(0);
++ policy->min = 25000;
++
++ policy->cpuinfo.min_freq = 13000;
++
++ /* All EP93xx are running up to 200Mhz, except EP9301 */
++ if (policy->cur <= 166000)
++ policy->cpuinfo.max_freq = 166000;
++ else
++ policy->cpuinfo.max_freq = 200000;
++
++ policy->cpuinfo.transition_latency = 1600000; /* 8..16ms (according to datasheet) */
++ policy->max = policy->cpuinfo.max_freq;
++
++ return 0;
++}
++
++static struct cpufreq_driver ep93xx_driver = {
++ .flags = CPUFREQ_STICKY,
++ .verify = ep93xx_verify_speed,
++ .target = ep93xx_set_target,
++ .get = ep93xx_get_speed,
++ .init = ep93xx_cpufreq_driver_init,
++ .name = "ep93xx",
++};
++
++
++static int __init ep93xx_cpufreq_init(void)
++{
++ return cpufreq_register_driver(&ep93xx_driver);
++}
++module_init(ep93xx_cpufreq_init);
++
++static void __exit ep93xx_cpufreq_exit(void)
++{
++ cpufreq_unregister_driver(&ep93xx_driver);
++}
++module_exit(ep93xx_cpufreq_exit);
++
++MODULE_DESCRIPTION("CPU frequency scaling driver for EP93xx");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("1.01");
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/0016-ts7200_nor_flash.patch b/recipes/linux/linux-2.6.33/ts72xx/0016-ts7200_nor_flash.patch
new file mode 100644
index 0000000000..1019ef0b1e
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/0016-ts7200_nor_flash.patch
@@ -0,0 +1,163 @@
+From e2c4839b01100328ca00eda735ed08d13da4e02e Mon Sep 17 00:00:00 2001
+From: Matthieu Crapet <mcrapet@gmail.com>
+Date: Sun, 17 Jan 2010 19:50:34 +0100
+Subject: [PATCH 16/16] ts7200_nor_flash
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+---
+ drivers/mtd/maps/Kconfig | 8 +++
+ drivers/mtd/maps/Makefile | 1 +
+ drivers/mtd/maps/ts7200_flash.c | 106 +++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 115 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/mtd/maps/ts7200_flash.c
+
+diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
+index 2de0cc8..3f3bfde 100644
+--- a/drivers/mtd/maps/Kconfig
++++ b/drivers/mtd/maps/Kconfig
+@@ -437,6 +437,14 @@ config MTD_OMAP_NOR
+ These boards include the Innovator, H2, H3, OSK, Perseus2, and
+ more. If you have such a board, say 'Y'.
+
++config MTD_TS7200_NOR
++ tristate "Technologic Systems TS-7200 flash 8Mb"
++ depends on MTD_CFI && ARCH_EP93XX
++ help
++ This provides a map driver for the on-board flash of the Technologic
++ System's TS-7200 board. The 8MB flash is splitted into 3 partitions
++ which are accessed as separate MTD devices.
++
+ # This needs CFI or JEDEC, depending on the cards found.
+ config MTD_PCI
+ tristate "PCI MTD driver"
+diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile
+index ce31521..b8894ed 100644
+--- a/drivers/mtd/maps/Makefile
++++ b/drivers/mtd/maps/Makefile
+@@ -58,6 +58,7 @@ obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o
+ obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o
+ obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_vr_nor.o
+ obj-$(CONFIG_MTD_BFIN_ASYNC) += bfin-async-flash.o
++obj-$(CONFIG_MTD_TS7200_NOR) += ts7200_flash.o
+ obj-$(CONFIG_MTD_RBTX4939) += rbtx4939-flash.o
+ obj-$(CONFIG_MTD_VMU) += vmu-flash.o
+ obj-$(CONFIG_MTD_GPIO_ADDR) += gpio-addr-flash.o
+diff --git a/drivers/mtd/maps/ts7200_flash.c b/drivers/mtd/maps/ts7200_flash.c
+new file mode 100644
+index 0000000..efc5f00
+--- /dev/null
++++ b/drivers/mtd/maps/ts7200_flash.c
+@@ -0,0 +1,106 @@
++/*
++ * ts7200_flash.c - mapping for TS-7200 SBCs (8mb NOR flash)
++ * No platform_device resource is used here. All is hardcoded.
++ *
++ * (c) Copyright 2006 Matthieu Crapet <mcrapet@gmail.com>
++ * Based on ts5500_flash.c by Sean Young <sean@mess.org>
++ *
++ * 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.
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <asm/io.h>
++#include <asm/sizes.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/map.h>
++#include <linux/mtd/partitions.h>
++
++#define WINDOW_ADDR 0x60000000
++#define WINDOW_SIZE SZ_8M
++#define WINDOW_READABLE_SIZE (WINDOW_SIZE/SZ_1M)
++
++
++static struct mtd_info *mymtd;
++
++static struct map_info ts7200nor_map = {
++ .name = "Full TS-7200 NOR flash",
++ .size = WINDOW_SIZE,
++ .bankwidth = 2,
++ .phys = WINDOW_ADDR,
++};
++
++/*
++ * MTD partitioning stuff
++ */
++#ifdef CONFIG_MTD_PARTITIONS
++static struct mtd_partition static_partitions[] =
++{
++ {
++ .name = "TS-BOOTROM",
++ .offset = 0,
++ .size = 0x20000,
++ .mask_flags = MTD_WRITEABLE, /* force read-only */
++ },
++ {
++ .name = "RootFS",
++ .offset = 0x20000,
++ .size = 0x600000,
++ },
++ {
++ .name = "Redboot",
++ .offset = 0x620000,
++ .size = MTDPART_SIZ_FULL, /* up to the end */
++ },
++};
++#endif
++
++int __init init_ts7200nor(void)
++{
++ printk(KERN_NOTICE "TS-7200 flash mapping: %dmo at 0x%x\n", WINDOW_READABLE_SIZE, WINDOW_ADDR);
++
++ ts7200nor_map.virt = ioremap(WINDOW_ADDR, WINDOW_SIZE);
++ if (!ts7200nor_map.virt) {
++ printk("ts7200_flash: failed to ioremap\n");
++ return -EIO;
++ }
++
++ simple_map_init(&ts7200nor_map);
++ mymtd = do_map_probe("cfi_probe", &ts7200nor_map);
++ if (mymtd) {
++ mymtd->owner = THIS_MODULE;
++ add_mtd_device(mymtd);
++#ifdef CONFIG_MTD_PARTITIONS
++ return add_mtd_partitions(mymtd, static_partitions, ARRAY_SIZE(static_partitions));
++#else
++ return 0;
++#endif
++ }
++
++ iounmap((void *)ts7200nor_map.virt);
++ return -ENXIO;
++}
++
++static void __exit cleanup_ts7200nor(void)
++{
++ if (mymtd) {
++ del_mtd_device(mymtd);
++ map_destroy(mymtd);
++ }
++ if (ts7200nor_map.virt) {
++ iounmap((void *)ts7200nor_map.virt);
++ ts7200nor_map.virt = 0;
++ }
++}
++
++module_init(init_ts7200nor);
++module_exit(cleanup_ts7200nor);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Matthieu Crapet <mcrapet@gmail.com>");
++MODULE_DESCRIPTION("MTD map driver for TS-7200 board (" __MODULE_STRING(WINDOW_READABLE_SIZE) "MB flash version)");
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.33/ts72xx/defconfig b/recipes/linux/linux-2.6.33/ts72xx/defconfig
new file mode 100644
index 0000000000..13ae72b1a0
--- /dev/null
+++ b/recipes/linux/linux-2.6.33/ts72xx/defconfig
@@ -0,0 +1,1750 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.33
+# Sun Mar 7 12:13:14 2010
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_KERNEL_GZIP=y
+# CONFIG_KERNEL_BZIP2 is not set
+# CONFIG_KERNEL_LZMA is not set
+# CONFIG_KERNEL_LZO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_POSIX_MQUEUE_SYSCTL=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_TINY_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=16
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+CONFIG_RELAY=y
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+CONFIG_IPC_NS=y
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+# CONFIG_SLOW_WORK is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+CONFIG_BLK_DEV_BSG=y
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_SPIN_UNLOCK is not set
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_READ_UNLOCK is not set
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_WRITE_UNLOCK is not set
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
+# CONFIG_FREEZER is not set
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+CONFIG_ARCH_EP93XX=y
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_DOVE is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_U8500 is not set
+
+#
+# Cirrus EP93xx Implementation Options
+#
+# CONFIG_CRUNCH is not set
+CONFIG_CR1_NFBIT=y
+
+#
+# EP93xx Platforms
+#
+CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET=y
+# CONFIG_EP93XX_SDCE0_PHYS_OFFSET is not set
+# CONFIG_EP93XX_SDCE1_PHYS_OFFSET is not set
+# CONFIG_EP93XX_SDCE2_PHYS_OFFSET is not set
+# CONFIG_EP93XX_SDCE3_ASYNC_PHYS_OFFSET is not set
+# CONFIG_MACH_ADSSPHERE is not set
+# CONFIG_MACH_EDB9301 is not set
+# CONFIG_MACH_EDB9302 is not set
+# CONFIG_MACH_EDB9307 is not set
+# CONFIG_MACH_EDB9312 is not set
+# CONFIG_MACH_EDB9315 is not set
+# CONFIG_MACH_GESBC9312 is not set
+# CONFIG_MACH_MICRO9H is not set
+# CONFIG_MACH_MICRO9L is not set
+CONFIG_MACH_TS72XX=y
+CONFIG_EP93XX_EARLY_UART1=y
+# CONFIG_EP93XX_EARLY_UART2 is not set
+# CONFIG_EP93XX_EARLY_UART3 is not set
+CONFIG_MACH_TS72XX_FORCE_MACHINEID=y
+CONFIG_MACH_TS72XX_SBCINFO=m
+
+#
+# Processor Type
+#
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+CONFIG_ARM_VIC=y
+CONFIG_ARM_VIC_NR=2
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+CONFIG_SPARSEMEM_MANUAL=y
+CONFIG_SPARSEMEM=y
+CONFIG_HAVE_MEMORY_PRESENT=y
+CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPLIT_PTLOCK_CPUS=999999
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=ttyAM0,115200 ip=192.168.1.3:192.168.1.2:192.168.1.2:255.255.255.0 root=/dev/nfs nfsroot=192.168.1.2:/media/data/devel/oe/ts72xx-stable/tmp/deploy/glibc/images/ts72xx/nfsroot debug "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_FREQ is not set
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=m
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_MULTIPLE_TABLES is not set
+# CONFIG_IP_ROUTE_MULTIPATH is not set
+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_TCP_MD5SIG=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETLABEL is not set
+CONFIG_NETWORK_SECMARK=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_DCCP=m
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+# CONFIG_NETFILTER_TPROXY is not set
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_HL=m
+# CONFIG_NETFILTER_XT_TARGET_LED is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_SECMARK=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_HL=m
+# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+# CONFIG_NETFILTER_XT_MATCH_OSF is not set
+CONFIG_IP_VS=m
+CONFIG_IP_VS_DEBUG=y
+CONFIG_IP_VS_TAB_BITS=12
+
+#
+# IPVS transport protocol load balancing support
+#
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_PROTO_AH_ESP=y
+CONFIG_IP_VS_PROTO_ESP=y
+CONFIG_IP_VS_PROTO_AH=y
+
+#
+# IPVS scheduler
+#
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_WRR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_SH=m
+CONFIG_IP_VS_SED=m
+CONFIG_IP_VS_NQ=m
+
+#
+# IPVS application helper
+#
+CONFIG_IP_VS_FTP=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV4=m
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_DCCP=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PROTO_UDPLITE=m
+CONFIG_NF_NAT_PROTO_SCTP=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_SECURITY is not set
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+# CONFIG_IP_DCCP is not set
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_MSG is not set
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+# CONFIG_SCTP_HMAC_SHA1 is not set
+CONFIG_SCTP_HMAC_MD5=y
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_WIRELESS=y
+CONFIG_WEXT_CORE=y
+CONFIG_WEXT_PROC=y
+CONFIG_CFG80211=m
+# CONFIG_NL80211_TESTMODE is not set
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
+# CONFIG_CFG80211_REG_DEBUG is not set
+CONFIG_CFG80211_DEFAULT_PS=y
+# CONFIG_CFG80211_DEBUGFS is not set
+CONFIG_WIRELESS_OLD_REGULATORY=y
+CONFIG_CFG80211_WEXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+# CONFIG_LIB80211 is not set
+CONFIG_MAC80211=m
+CONFIG_MAC80211_RC_PID=y
+# CONFIG_MAC80211_RC_MINSTREL is not set
+CONFIG_MAC80211_RC_DEFAULT_PID=y
+# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set
+CONFIG_MAC80211_RC_DEFAULT="pid"
+# CONFIG_MAC80211_MESH is not set
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_MENU is not set
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_TS7250=y
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_DRBD is not set
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=65536
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+CONFIG_EP93XX_PWM=m
+CONFIG_DS1682=m
+# CONFIG_TI_DAC7512 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+CONFIG_SCSI_TGT=y
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+CONFIG_SCSI_CONSTANTS=y
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+# CONFIG_SCSI_LOWLEVEL is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_EP93XX_ETH=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_ETHOC is not set
+# CONFIG_SMC911X is not set
+# CONFIG_SMSC911X is not set
+# CONFIG_DNET is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851 is not set
+# CONFIG_KS8851_MLL is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+CONFIG_WLAN=y
+# CONFIG_LIBERTAS_THINFIRM is not set
+# CONFIG_AT76C50X_USB is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_USB_NET_RNDIS_WLAN is not set
+# CONFIG_RTL8187 is not set
+# CONFIG_MAC80211_HWSIM is not set
+# CONFIG_ATH_COMMON is not set
+# CONFIG_B43 is not set
+# CONFIG_B43LEGACY is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_LIBERTAS is not set
+# CONFIG_P54_COMMON is not set
+# CONFIG_RT2X00 is not set
+# CONFIG_WL12XX is not set
+# CONFIG_ZD1211RW is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=m
+CONFIG_INPUT_POLLDEV=m
+# CONFIG_INPUT_SPARSEKMAP is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_QT2160 is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_EP93XX=m
+CONFIG_KEYBOARD_TS72XX=m
+# CONFIG_TS72XX_DIO_3X4_KEYPAD is not set
+# CONFIG_TS72XX_DIO_4X4_KEYPAD is not set
+CONFIG_KEYBOARD_GPIO=m
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_ELANTECH is not set
+# CONFIG_MOUSE_PS2_SENTELIC is not set
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+CONFIG_MOUSE_SERIAL=m
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_MOUSE_SYNAPTICS_I2C is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+# CONFIG_INPUT_CM109 is not set
+CONFIG_INPUT_UINPUT=m
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_AMBAKMI is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO_ALTERA_PS2 is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_DEVKMEM is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+CONFIG_SERIAL_8250_TS_SER1=m
+CONFIG_SERIAL_8250_TS_SER1_IRQ=5
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_AMBA_PL010=y
+CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
+CONFIG_SERIAL_AMBA_PL010_TS72XX=y
+# CONFIG_SERIAL_AMBA_PL011 is not set
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=m
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_ALGOBIT=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+CONFIG_I2C_GPIO=y
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_SENSORS_TSL2550=m
+CONFIG_I2C_DEBUG_CORE=y
+CONFIG_I2C_DEBUG_ALGO=y
+CONFIG_I2C_DEBUG_BUS=y
+CONFIG_I2C_DEBUG_CHIP=y
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_EP93XX=y
+# CONFIG_SPI_GPIO is not set
+# CONFIG_SPI_PL022 is not set
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_DESIGNWARE is not set
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_SPIDEV=m
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_SPI_TMP124=y
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+# CONFIG_GPIO_PL061 is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_ADP5588 is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_EP93XX_WATCHDOG=m
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB=m
+# CONFIG_SSB_SILENT is not set
+# CONFIG_SSB_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_MFD_88PM8607 is not set
+# CONFIG_AB4500_CORE is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+# CONFIG_HID_DRAGONRISE is not set
+CONFIG_HID_EZKEY=y
+# CONFIG_HID_KYE is not set
+CONFIG_HID_GYRATION=y
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+# CONFIG_HID_NTRIG is not set
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_SMARTJOYPLUS is not set
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_ZEROPLUS is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+CONFIG_USB_DEBUG=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+# CONFIG_USB_GADGET is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_USB_ULPI is not set
+# CONFIG_NOP_USB_XCEIV is not set
+# CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+# CONFIG_LEDS_LT3593 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc1"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_BQ32K is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+CONFIG_RTC_DRV_M48T86=y
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_EP93XX=y
+# CONFIG_RTC_DRV_PL030 is not set
+# CONFIG_RTC_DRV_PL031 is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+# CONFIG_DNOTIFY is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+# CONFIG_CUSE is not set
+CONFIG_GENERIC_ACL=y
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_CONFIGFS_FS=m
+# CONFIG_MISC_FILESYSTEMS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=m
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+CONFIG_NLS_ISO8859_15=m
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+CONFIG_DLM=m
+CONFIG_DLM_DEBUG=y
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=2048
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_FTRACE is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+CONFIG_ARM_UNWIND=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_OC_ETM is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+CONFIG_SECURITY=y
+# CONFIG_SECURITYFS is not set
+CONFIG_SECURITY_NETWORK=y
+# CONFIG_SECURITY_NETWORK_XFRM is not set
+# CONFIG_SECURITY_PATH is not set
+# CONFIG_SECURITY_TOMOYO is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_XTS=m
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_GHASH is not set
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_KHAZAD=m
+# CONFIG_CRYPTO_SALSA20 is not set
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_ZLIB is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_T10DIF is not set
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
diff --git a/recipes/linux/linux-amsdelta-2.6_2.6.16-omap2.bb b/recipes/linux/linux-amsdelta-2.6_2.6.16-omap2.bb
index db72fe7d31..d989b831ae 100644
--- a/recipes/linux/linux-amsdelta-2.6_2.6.16-omap2.bb
+++ b/recipes/linux/linux-amsdelta-2.6_2.6.16-omap2.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "2.6 Linux kernel for the Amstrad Delta (E3)"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_MACHINE = "amsdelta"
diff --git a/recipes/linux/linux-bast_2.4.25-vrs1-bast1.bb b/recipes/linux/linux-bast_2.4.25-vrs1-bast1.bb
index 2fbdf1aa9c..04fb39c87e 100644
--- a/recipes/linux/linux-bast_2.4.25-vrs1-bast1.bb
+++ b/recipes/linux/linux-bast_2.4.25-vrs1-bast1.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for Simtec EB2410ITX"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
KV = "2.4.25"
KERNEL_CCSUFFIX = "-3.3.3"
diff --git a/recipes/linux/linux-bd-neon-2.6_2.6.22.bb b/recipes/linux/linux-bd-neon-2.6_2.6.22.bb
index 3fca851ef2..111b43aa7e 100644
--- a/recipes/linux/linux-bd-neon-2.6_2.6.22.bb
+++ b/recipes/linux/linux-bd-neon-2.6_2.6.22.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "2.6 Linux Kernel for Boundary Devices NEON Board"
SECTION = "kernel"
HOMEPAGE = "N/A"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_MACHINE = "bd-neon"
DEPENDS += "u-boot-utils-native"
diff --git a/recipes/linux/linux-colinux_2.4.28.bb b/recipes/linux/linux-colinux_2.4.28.bb
index dc052afce1..58ea5889ea 100644
--- a/recipes/linux/linux-colinux_2.4.28.bb
+++ b/recipes/linux/linux-colinux_2.4.28.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "User Mode Linux Kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COLV = "0.6.1"
COMPATIBLE_MACHINE = "colinux"
diff --git a/recipes/linux/linux-colinux_2.6.10.bb b/recipes/linux/linux-colinux_2.6.10.bb
index df06ccdd65..f206c98662 100644
--- a/recipes/linux/linux-colinux_2.6.10.bb
+++ b/recipes/linux/linux-colinux_2.6.10.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "User Mode Linux Kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COLV = "0.6.2"
COMPATIBLE_MACHINE = "colinux"
diff --git a/recipes/linux/linux-davinci/hawkboard/defconfig b/recipes/linux/linux-davinci/hawkboard/defconfig
index 1952db3929..63ce472d0c 100644
--- a/recipes/linux/linux-davinci/hawkboard/defconfig
+++ b/recipes/linux/linux-davinci/hawkboard/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.32-rc6
-# Tue Jan 5 14:21:28 2010
+# Mon Mar 1 20:45:34 2010
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -128,7 +128,7 @@ CONFIG_MODVERSIONS=y
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_BLOCK=y
CONFIG_LBDAF=y
-# CONFIG_BLK_DEV_BSG is not set
+CONFIG_BLK_DEV_BSG=y
# CONFIG_BLK_DEV_INTEGRITY is not set
#
@@ -422,23 +422,125 @@ CONFIG_NETFILTER_ADVANCED=y
#
# Core Netfilter Configuration
#
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NETFILTER_XTABLES is not set
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_DCCP=m
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_TPROXY=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_HL=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+CONFIG_NETFILTER_XT_TARGET_TPROXY=m
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_HL=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_RECENT=m
+# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_SOCKET=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_OSF=m
# CONFIG_IP_VS is not set
#
# IP: Netfilter Configuration
#
-# CONFIG_NF_DEFRAG_IPV4 is not set
+CONFIG_NF_DEFRAG_IPV4=m
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_DCCP=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PROTO_UDPLITE=m
+CONFIG_NF_NAT_PROTO_SCTP=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
#
# IPv6: Netfilter Configuration
#
+# CONFIG_NF_CONNTRACK_IPV6 is not set
# CONFIG_IP6_NF_QUEUE is not set
# CONFIG_IP6_NF_IPTABLES is not set
# CONFIG_IP_DCCP is not set
@@ -460,6 +562,7 @@ CONFIG_NETFILTER_ADVANCED=y
# CONFIG_PHONET is not set
# CONFIG_IEEE802154 is not set
# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
# CONFIG_DCB is not set
#
@@ -489,8 +592,9 @@ CONFIG_LIB80211_CRYPT_TKIP=m
#
# Generic Driver Options
#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_DEVTMPFS is not set
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=m
@@ -660,6 +764,7 @@ CONFIG_SCSI_WAIT_SCAN=m
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
CONFIG_SCSI_LOWLEVEL=y
@@ -1769,7 +1874,7 @@ CONFIG_JBD=y
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
+CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_FS=m
# CONFIG_XFS_QUOTA is not set
# CONFIG_XFS_POSIX_ACL is not set
@@ -1788,6 +1893,7 @@ CONFIG_INOTIFY_USER=y
# CONFIG_AUTOFS_FS is not set
CONFIG_AUTOFS4_FS=m
# CONFIG_FUSE_FS is not set
+CONFIG_GENERIC_ACL=y
#
# Caches
@@ -1818,7 +1924,7 @@ CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
+CONFIG_TMPFS_POSIX_ACL=y
# CONFIG_HUGETLB_PAGE is not set
# CONFIG_CONFIGFS_FS is not set
CONFIG_MISC_FILESYSTEMS=y
@@ -2073,7 +2179,7 @@ CONFIG_CRYPTO_ECB=m
#
# Digest
#
-# CONFIG_CRYPTO_CRC32C is not set
+CONFIG_CRYPTO_CRC32C=m
# CONFIG_CRYPTO_GHASH is not set
# CONFIG_CRYPTO_MD4 is not set
# CONFIG_CRYPTO_MD5 is not set
@@ -2132,13 +2238,17 @@ CONFIG_CRC_T10DIF=m
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
-# CONFIG_LIBCRC32C is not set
+CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_GENERIC_ALLOCATOR=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
diff --git a/recipes/linux/linux-davinci_git.bb b/recipes/linux/linux-davinci_git.bb
index 9c8d4ab67e..61922f51c7 100644
--- a/recipes/linux/linux-davinci_git.bb
+++ b/recipes/linux/linux-davinci_git.bb
@@ -16,9 +16,9 @@ S = "${WORKDIR}/git"
# dm355-evm/dm365-evm/dm6446-evm/dm6467-evm/dm6467t-evm Davinci PSP 03.01.00/03.02.00 (build r30)
# The main PR is now using MACHINE_KERNEL_PR, for davinci see conf/machine/include/davinci.inc
-ARAGO_DM_REV = "c2aeffe9e835c5b6b275edc416951ce4a348b0fd"
+ARAGO_DM_REV = "e87a8397d2830db11ce1518bd2abc4e8815763f1"
ARAGO_DM_PV = "2.6.31+2.6.32-rc2-${PR}+gitr${SRCREV}"
-ARAGO_DM_BR = "r30"
+ARAGO_DM_BR = "r32"
ARAGO_DM_URI = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git;branch=${BRANCH} "
SRCREV_dm355-evm = ${ARAGO_DM_REV}
@@ -74,3 +74,7 @@ SRC_URI_append_da850-omapl138-evm = "file://logo_linux_clut224.ppm \
SRC_URI_append_hawkboard = "file://logo_linux_clut224.ppm \
file://da850_omapl138_opp456mhz.patch;patch=1 \
file://patch_hawk.diff;patch=1"
+
+do_configure_prepend_hawkboard() {
+ sed -i s:2157:2495:g ${S}/arch/arm/tools/mach-types
+}
diff --git a/recipes/linux/linux-ea3250-2.6.27.8/defconfig b/recipes/linux/linux-ea3250-2.6.27.8/defconfig
new file mode 100644
index 0000000000..4dd347f025
--- /dev/null
+++ b/recipes/linux/linux-ea3250-2.6.27.8/defconfig
@@ -0,0 +1,1364 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.27.8
+# Wed Sep 23 05:00:03 2009
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+# CONFIG_GENERIC_GPIO is not set
+# CONFIG_GENERIC_TIME is not set
+# CONFIG_GENERIC_CLOCKEVENTS is not set
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_SUPPORTS_AOUT=y
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_COMPAT_BRK=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+# CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set
+# CONFIG_HAVE_IOREMAP_PROT is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_ARCH_TRACEHOOK is not set
+# CONFIG_HAVE_DMA_ATTRS is not set
+# CONFIG_USE_GENERIC_SMP_HELPERS is not set
+# CONFIG_HAVE_CLK is not set
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+CONFIG_LBD=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_CLASSIC_RCU=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X is not set
+CONFIG_ARCH_LPC32XX=y
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_MSM7X00A is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# LPC32XX board implementations
+#
+# CONFIG_MACH_PHY3250 is not set
+CONFIG_MACH_EA3250=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+# CONFIG_SCHED_HRTICK is not set
+CONFIG_EA3250_DISPLAY_SUPPORT=y
+CONFIG_EA3250_QVGA_3_2_LCD=y
+# CONFIG_EA3250_QVGA_2_8_OLED is not set
+
+#
+# LPC32XX chip components
+#
+# CONFIG_MACH_LPC32XX_IRAM_RESERVED is not set
+CONFIG_MACH_LPC32XX_IRAM_FOR_CLCD=y
+# CONFIG_MACH_LPC32XX_IRAM_FOR_NET is not set
+# CONFIG_MAC_LPC32XX_MII_SUPPORT is not set
+CONFIG_SPWM_LPC32XX=y
+
+#
+# Standard UARTS
+#
+CONFIG_MACH_LPC32XX_UART5_ENABLE=y
+# CONFIG_MACH_LPC32XX_UART3_ENABLE is not set
+# CONFIG_MACH_LPC32XX_UART4_ENABLE is not set
+# CONFIG_MACH_LPC32XX_UART6_ENABLE is not set
+
+#
+# High speed UARTS
+#
+# CONFIG_MACH_LPC32XX_HSUART1_ENABLE is not set
+# CONFIG_MACH_LPC32XX_HSUART2_ENABLE is not set
+# CONFIG_MACH_LPC32XX_HSUART7_ENABLE is not set
+
+#
+# I2C interfaces
+#
+CONFIG_MACH_LPC32XX_I2C0_ENABLE=y
+# CONFIG_MACH_LPC32XX_I2C1_ENABLE is not set
+CONFIG_MACH_LPC32XX_USBOTG_I2C_ENABLE=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_PABRT_NOIFAR=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+CONFIG_PREEMPT=y
+CONFIG_AEABI=y
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n81 root=/dev/nfs rw nfsroot=192.168.1.51:/home/usb10132/dev/ltib-8-1-2-sv/rootfs ip=dhcp init=/sbin/init"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_VFP=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=y
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_SUSPEND is not set
+# CONFIG_APM_EMULATION is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=y
+# CONFIG_IEEE80211_DEBUG is not set
+# CONFIG_IEEE80211_CRYPT_WEP is not set
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_MUSEUM_IDS=y
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SLC_LPC32XX=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MISC_DEVICES is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+CONFIG_SMSC_PHY=y
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+CONFIG_LPC32XX_MII=y
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+# CONFIG_IWLWIFI_LEDS is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_LIFEBOOK=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_LPC32XX is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_AMBAKMI is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_AMBA_PL010 is not set
+# CONFIG_SERIAL_AMBA_PL011 is not set
+# CONFIG_SERIAL_HS_LPC32XX is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_PNX=y
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_AT24 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
+CONFIG_SENSORS_PCA9532=y
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_LPC32XX=y
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_AT25=y
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_LPC32XX_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_ARMCLCD=y
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+CONFIG_USB_LIBUSUAL=y
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_ARMMMCI=y
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_NEW_LEDS is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_PL030 is not set
+# CONFIG_RTC_DRV_PL031 is not set
+CONFIG_RTC_DRV_LPC32XX=y
+# CONFIG_DMADEVICES is not set
+
+#
+# Voltage and Current regulators
+#
+# CONFIG_REGULATOR is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_UIO is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FTRACE=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+# CONFIG_FTRACE is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_MANAGER is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_LZO is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_GENERIC_FIND_FIRST_BIT is not set
+# CONFIG_GENERIC_FIND_NEXT_BIT is not set
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/recipes/linux/linux-ea3250-2.6.27.8/kernel-arm-2.6.27.8-lpc32xx_update5_fix.patch b/recipes/linux/linux-ea3250-2.6.27.8/kernel-arm-2.6.27.8-lpc32xx_update5_fix.patch
new file mode 100644
index 0000000000..004e34d222
--- /dev/null
+++ b/recipes/linux/linux-ea3250-2.6.27.8/kernel-arm-2.6.27.8-lpc32xx_update5_fix.patch
@@ -0,0 +1,21 @@
+diff -Naur -X linux/Documentation/dontdiff linux-2.6.27.8/arch/arm/mach-lpc32xx/board-ea3250.c linux-2.6.27.8-new/arch/arm/mach-lpc32xx/board-ea3250.c
+--- linux-2.6.27.8/arch/arm/mach-lpc32xx/board-ea3250.c 2010-01-05 12:06:37.000000000 +0100
++++ linux-2.6.27.8-new/arch/arm/mach-lpc32xx/board-ea3250.c 2010-01-05 12:08:50.000000000 +0100
+@@ -429,7 +429,7 @@
+ .width = -1,
+ .height = -1,
+ .tim2 = (CLCDC_LCDTIMING2_IVS | CLCDC_LCDTIMING2_IHS |
+- CLCD_LCDTIMING2_IPC),
++ CLCDC_LCDTIMING2_IPC),
+ .cntl = (CNTL_BGR | CLCDC_LCDCTRL_TFT | CNTL_LCDVCOMP(1) |
+ CLCDC_LCDCTRL_BPP16_565),
+ .bpp = 16,
+@@ -460,7 +460,7 @@
+ .width = -1,
+ .height = -1,
+ .tim2 = (CLCDC_LCDTIMING2_IVS | CLCDC_LCDTIMING2_IHS |
+- CLCD_LCDTIMING2_IPC),
++ CLCDC_LCDTIMING2_IPC),
+ .cntl = (CNTL_BGR | CLCDC_LCDCTRL_TFT | CNTL_LCDVCOMP(1) |
+ CLCDC_LCDCTRL_BPP16_565),
+ .bpp = 16,
diff --git a/recipes/linux/linux-ea3250-2.6.27.8/lpc32xx-spwm.patch b/recipes/linux/linux-ea3250-2.6.27.8/lpc32xx-spwm.patch
new file mode 100644
index 0000000000..64e9fff1eb
--- /dev/null
+++ b/recipes/linux/linux-ea3250-2.6.27.8/lpc32xx-spwm.patch
@@ -0,0 +1,227 @@
+diff -Naur -X linux/Documentation/dontdiff linux-2.6.27.8/arch/arm/mach-lpc32xx/arch-lpc32xx.c linux-2.6.27.8-new/arch/arm/mach-lpc32xx/arch-lpc32xx.c
+--- linux-2.6.27.8/arch/arm/mach-lpc32xx/arch-lpc32xx.c 2009-11-24 15:42:39.000000000 +0100
++++ linux-2.6.27.8-new/arch/arm/mach-lpc32xx/arch-lpc32xx.c 2009-11-24 15:52:40.000000000 +0100
+@@ -342,6 +342,9 @@
+ tmp |= UART_UART6_IRDAMOD_BYPASS;
+ #endif
+ __raw_writel(tmp, UARTCTL_CTRL(io_p2v(UART_CTRL_BASE)));
++#if defined(CONFIG_SPWM_LPC32XX)
++ lpc32xx_spwm_init();
++#endif
+ }
+
+ static struct map_desc lpc32xx_io_desc[] __initdata = {
+diff -Naur -X linux/Documentation/dontdiff linux-2.6.27.8/arch/arm/mach-lpc32xx/include/mach/lpc32xx_pwm.h linux-2.6.27.8-new/arch/arm/mach-lpc32xx/include/mach/lpc32xx_pwm.h
+--- linux-2.6.27.8/arch/arm/mach-lpc32xx/include/mach/lpc32xx_pwm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.27.8-new/arch/arm/mach-lpc32xx/include/mach/lpc32xx_pwm.h 2009-11-24 15:54:09.000000000 +0100
+@@ -0,0 +1,31 @@
++/*
++ * linux/arch/arm/mach-lpc32xx/include/mach/lpc32xx_pwm.h
++ *
++ * Copyright (C) 2009 Fontys University of Applied Sciences, Eindhoven
++ * Laurens Timmermans <l.timmermans@fontys.nl>
++ *
++ * 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 LPC32XX_PWM_H
++#define LPC32XX_PWM_H
++
++#define PWM1 0
++#define PWM2 1
++
++#define RTC_CLK 0x00
++#define PERIPH_CLK 0x01
++
++#endif
+diff -Naur -X linux/Documentation/dontdiff linux-2.6.27.8/arch/arm/mach-lpc32xx/Kconfig linux-2.6.27.8-new/arch/arm/mach-lpc32xx/Kconfig
+--- linux-2.6.27.8/arch/arm/mach-lpc32xx/Kconfig 2009-11-24 15:42:39.000000000 +0100
++++ linux-2.6.27.8-new/arch/arm/mach-lpc32xx/Kconfig 2009-11-24 16:01:16.000000000 +0100
+@@ -185,6 +185,12 @@
+ which support is selected, the ethernet interface driver needs to be
+ selected in the device driver networking section.
+
++config SPWM_LPC32XX
++ bool "SPWM"
++ default FALSE
++ help
++ Enable simple-PWM support
++
+ menu "Standard UARTS"
+
+ config MACH_LPC32XX_UART5_ENABLE
+diff -Naur -X linux/Documentation/dontdiff linux-2.6.27.8/arch/arm/mach-lpc32xx/Makefile linux-2.6.27.8-new/arch/arm/mach-lpc32xx/Makefile
+--- linux-2.6.27.8/arch/arm/mach-lpc32xx/Makefile 2009-11-24 15:42:39.000000000 +0100
++++ linux-2.6.27.8-new/arch/arm/mach-lpc32xx/Makefile 2009-11-24 16:01:39.000000000 +0100
+@@ -7,6 +7,7 @@
+ obj-y := timer-lpc32xx.o irq-lpc32xx.o arch-lpc32xx.o
+ obj-y += serial-lpc32xx.o clocks-lpc32xx.o
+ obj-y += dma-lpc32xx.o uid-lpc32xx.o
++obj-y += spwm-lpc32xx.o
+ obj-m :=
+ obj-n :=
+ obj- :=
+diff -Naur -X linux/Documentation/dontdiff linux-2.6.27.8/arch/arm/mach-lpc32xx/spwm-lpc32xx.c linux-2.6.27.8-new/arch/arm/mach-lpc32xx/spwm-lpc32xx.c
+--- linux-2.6.27.8/arch/arm/mach-lpc32xx/spwm-lpc32xx.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.27.8-new/arch/arm/mach-lpc32xx/spwm-lpc32xx.c 2009-11-24 16:07:20.000000000 +0100
+@@ -0,0 +1,126 @@
++/*
++ * linux/arch/arm/mach-lpc32xx/spwm-lpc32xx.c
++ *
++ * Copyright (C) 2009 Fontys University of Applied Sciences, Eindhoven
++ * Laurens Timmermans <l.timmermans@fontys.nl>
++ *
++ * 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
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++
++#include <mach/lpc32xx_clkpwr.h>
++#include <mach/lpc32xx_pwm.h>
++#include "sys-lpc32xx.h"
++
++#define MAX_PWM 1
++
++/* sets bits in w at position x of width y to value z */
++#define _BITS(w,x,y,z) (w = (w & ~(((0x01 << y)-1) << ((x+1)-y))) | ((z & ((0x01 << y)-1)) << ((x+1)-y)))
++
++#define PWM_IOBASE(x) io_p2v(PWM1_BASE + (x*4))
++
++void lpc32xx_spwm_enable(u32 ch)
++{
++ u32 pwm_ctrl;
++
++ if(ch > MAX_PWM)
++ return;
++
++ pwm_ctrl = __raw_readl(PWM_IOBASE(ch));
++ _BITS(pwm_ctrl, 31, 0x01, 0x01);
++ __raw_writel(pwm_ctrl, PWM_IOBASE(ch));
++}
++EXPORT_SYMBOL(lpc32xx_spwm_enable);
++
++void lpc32xx_spwm_disable(u32 ch)
++{
++ u32 pwm_ctrl;
++
++ if(ch > MAX_PWM)
++ return;
++
++ pwm_ctrl = __raw_readl(PWM_IOBASE(ch));
++ _BITS(pwm_ctrl, 31, 0x01, 0x00);
++ __raw_writel(pwm_ctrl, PWM_IOBASE(ch));
++}
++EXPORT_SYMBOL(lpc32xx_spwm_disable);
++
++void lpc32xx_spwm_set_dutycycle(u32 ch, u32 dutycycle)
++{
++ u32 pwm_ctrl;
++
++ if(ch > MAX_PWM)
++ return;
++
++ pwm_ctrl = __raw_readl(PWM_IOBASE(ch));
++ _BITS(pwm_ctrl, 0x07, 0x08, dutycycle);
++ __raw_writel(pwm_ctrl, PWM_IOBASE(ch));
++}
++EXPORT_SYMBOL(lpc32xx_spwm_set_dutycycle);
++
++void lpc32xx_spwm_set_reloadv(u32 ch, u32 reloadv)
++{
++ u32 pwm_ctrl;
++
++ if(ch > MAX_PWM)
++ return;
++
++ pwm_ctrl = __raw_readl(PWM_IOBASE(ch));
++ _BITS(pwm_ctrl, 0x0F, 0x08, reloadv);
++ __raw_writel(pwm_ctrl, PWM_IOBASE(ch));
++}
++EXPORT_SYMBOL(lpc32xx_spwm_set_reloadv);
++
++void lpc32xx_spwm_set_clocksource(u32 ch, u32 clk)
++{
++ u32 clk_ctrl;
++
++ if(ch > MAX_PWM)
++ return;
++
++ clk_ctrl = __raw_readl(CLKPWR_PWM_CLK_CTRL(CLKPWR_IOBASE));
++ _BITS(clk_ctrl, (ch*2 + 1), 0x01, clk);
++ __raw_writel(clk_ctrl, CLKPWR_PWM_CLK_CTRL(CLKPWR_IOBASE));
++}
++EXPORT_SYMBOL(lpc32xx_spwm_set_clocksource);
++
++void lpc32xx_spwm_set_clockdiv(u32 ch, u32 div)
++{
++ u32 clk_ctrl;
++
++ if(ch > MAX_PWM)
++ return;
++
++ clk_ctrl = __raw_readl(CLKPWR_PWM_CLK_CTRL(CLKPWR_IOBASE));
++ _BITS(clk_ctrl, (ch*4 + 7), 0x04, div);
++ __raw_writel(clk_ctrl, CLKPWR_PWM_CLK_CTRL(CLKPWR_IOBASE));
++}
++EXPORT_SYMBOL(lpc32xx_spwm_set_clockdiv);
++
++void __init lpc32xx_spwm_init(void)
++{
++ u32 clk_ctrl;
++
++ /* enable the clock */
++ clk_ctrl = __raw_readl(CLKPWR_PWM_CLK_CTRL(CLKPWR_IOBASE));
++ clk_ctrl |= (0x05);
++ __raw_writel(clk_ctrl, CLKPWR_PWM_CLK_CTRL(CLKPWR_IOBASE));
++
++ /* initially set clockdiv to 1 */
++ lpc32xx_spwm_set_clockdiv(PWM1, 1);
++ lpc32xx_spwm_set_clockdiv(PWM2, 1);
++}
+diff -Naur -X linux/Documentation/dontdiff linux-2.6.27.8/arch/arm/mach-lpc32xx/sys-lpc32xx.h linux-2.6.27.8-new/arch/arm/mach-lpc32xx/sys-lpc32xx.h
+--- linux-2.6.27.8/arch/arm/mach-lpc32xx/sys-lpc32xx.h 2009-11-24 15:42:39.000000000 +0100
++++ linux-2.6.27.8-new/arch/arm/mach-lpc32xx/sys-lpc32xx.h 2009-11-24 16:08:24.000000000 +0100
+@@ -83,14 +83,17 @@
+ #endif
+
+ /* Chip specific structures and functions */
+-extern struct platform_device serial_std_platform_device;
+-extern struct platform_device serial_hspd_platform_device;
++extern struct platform_device serial_std_platform_device;
++extern struct platform_device serial_hspd_platform_device;
+ extern struct sys_timer lpc32xx_timer;
+ extern void lpc32xx_init_irq (void);
+ extern void serial_init(void);
+ extern void __init lpc32xx_init (void);
+ extern void __init lpc32xx_map_io(void);
+ extern int __init clk_init(void);
++#if defined(CONFIG_SPWM_LPC32XX)
++extern void lpc32xx_spwm_init(void);
++#endif
+
+ #endif
diff --git a/recipes/linux/linux-ea3250_2.6.27.8.bb b/recipes/linux/linux-ea3250_2.6.27.8.bb
new file mode 100644
index 0000000000..4bfbd3e4a3
--- /dev/null
+++ b/recipes/linux/linux-ea3250_2.6.27.8.bb
@@ -0,0 +1,46 @@
+SECTION = "kernel"
+DESCRIPTION = "Linux kernel for the EmbeddedArtists LPC3250 development board"
+HOMEPAGE = "http://embeddedartists.com"
+# DEPENDS = ""
+LICENSE = "GPLv2"
+PR = "r0"
+
+# Location of the base kernel and NXP's patches
+
+# It is advisable to mirror the patches listed below, as there is no certainty
+# that they will stay there indefinitely.
+# - Joost
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.27.8.tar.bz2 \
+ http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx.patch;patch=1 \
+ http://bitshrine.org/gpp/kernel-arm-2.6.27.8-update1.patch;patch=1 \
+ http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx_update2.patch;patch=1 \
+ http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx_update3.patch;patch=1 \
+ http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx_armtskit_update2.patch;patch=1 \
+ http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx_ea3250.patch;patch=1 \
+ http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx_update4.patch;patch=1 \
+ http://bitshrine.org/gpp/kernel-arm-2.6.27.8-lpc32xx_update5.patch;patch=1 \
+ file://kernel-arm-2.6.27.8-lpc32xx_update5_fix.patch;patch=1 \
+ file://lpc32xx-spwm.patch;patch=1 \
+ file://defconfig"
+
+# Source directory
+S = "${WORKDIR}/linux-${PV}"
+
+# Which machines are supported by this kernel
+COMPATIBLE_HOST = 'arm.*-linux'
+
+# Kernel object suffix (should be .o)
+KERNEL_OBJECT_SUFFIX = ".o"
+
+# Inherit the class that actually builds the kernel
+inherit kernel
+
+# Kernel command line
+# XXX
+CMDLINE = "root=/dev/mmcblk0p2 console=ttyS0,115200"
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+}
+
+COMPATIBLE_MACHINE = "ea3250"
diff --git a/recipes/linux/linux-efika_2.6.18+2.6.19-rc6.bb b/recipes/linux/linux-efika_2.6.18+2.6.19-rc6.bb
index 1907b09f75..a5fba1bc20 100644
--- a/recipes/linux/linux-efika_2.6.18+2.6.19-rc6.bb
+++ b/recipes/linux/linux-efika_2.6.18+2.6.19-rc6.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for the EFIKA dev platform"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r3"
COMPATIBLE_MACHINE = "efika"
diff --git a/recipes/linux/linux-efika_2.6.20.20.bb b/recipes/linux/linux-efika_2.6.20.20.bb
index 2f707a17e3..c51ebc467e 100644
--- a/recipes/linux/linux-efika_2.6.20.20.bb
+++ b/recipes/linux/linux-efika_2.6.20.20.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for the EFIKA dev platform"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r2"
COMPATIBLE_MACHINE = "efika"
diff --git a/recipes/linux/linux-efika_2.6.20.bb b/recipes/linux/linux-efika_2.6.20.bb
index 839d206cd1..4cd121c722 100644
--- a/recipes/linux/linux-efika_2.6.20.bb
+++ b/recipes/linux/linux-efika_2.6.20.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for the EFIKA dev platform"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r2"
COMPATIBLE_MACHINE = "efika"
diff --git a/recipes/linux/linux-efika_2.6.21+git.bb b/recipes/linux/linux-efika_2.6.21+git.bb
index 20b5bf86b6..e4f92c6e09 100644
--- a/recipes/linux/linux-efika_2.6.21+git.bb
+++ b/recipes/linux/linux-efika_2.6.21+git.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for the EFIKA dev platform"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
PV = "2.6.21+git${SRCDATE}"
diff --git a/recipes/linux/linux-epia_2.6.11.bb b/recipes/linux/linux-epia_2.6.11.bb
index 04c47ca397..f5e63ac709 100644
--- a/recipes/linux/linux-epia_2.6.11.bb
+++ b/recipes/linux/linux-epia_2.6.11.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for VIA EPiA"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
KERNEL_CCSUFFIX = "-3.3.4"
diff --git a/recipes/linux/linux-epia_2.6.12.bb b/recipes/linux/linux-epia_2.6.12.bb
index 04c47ca397..f5e63ac709 100644
--- a/recipes/linux/linux-epia_2.6.12.bb
+++ b/recipes/linux/linux-epia_2.6.12.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for VIA EPiA"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
KERNEL_CCSUFFIX = "-3.3.4"
diff --git a/recipes/linux/linux-epia_2.6.19.2.bb b/recipes/linux/linux-epia_2.6.19.2.bb
index ce253c45c6..0a2d6c70ab 100644
--- a/recipes/linux/linux-epia_2.6.19.2.bb
+++ b/recipes/linux/linux-epia_2.6.19.2.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for VIA EPiA"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
KERNEL_CCSUFFIX = "-3.3.4"
diff --git a/recipes/linux/linux-epia_2.6.8.1.bb b/recipes/linux/linux-epia_2.6.8.1.bb
index 315ff118e8..5cf1d4ed7f 100644
--- a/recipes/linux/linux-epia_2.6.8.1.bb
+++ b/recipes/linux/linux-epia_2.6.8.1.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for VIA EPiA"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r15"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
diff --git a/recipes/linux/linux-geodegx_2.4.24.bb b/recipes/linux/linux-geodegx_2.4.24.bb
index fb42b562cc..af147a796e 100644
--- a/recipes/linux/linux-geodegx_2.4.24.bb
+++ b/recipes/linux/linux-geodegx_2.4.24.bb
@@ -6,7 +6,7 @@ COMPATIBLE_MACHINE = "geodegx"
KV = "2.4.24"
DESCRIPTION = "Linux kernel for the AMD Geode GX processor"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.4/linux-${KV}.tar.bz2 \
http://www.amd.com/files/connectivitysolutions/geode/Patches_Linux_${KV}_1.00.tar.gz \
diff --git a/recipes/linux/linux-geodelx_2.6.11.bb b/recipes/linux/linux-geodelx_2.6.11.bb
index adfd7475bb..ef287c72ac 100644
--- a/recipes/linux/linux-geodelx_2.6.11.bb
+++ b/recipes/linux/linux-geodelx_2.6.11.bb
@@ -6,7 +6,7 @@ COMPATIBLE_MACHINE = "geodelx"
DESCRIPTION = "Linux kernel for the AMD Geode GX5535/LX5536"
HOMEPAGE = "http://www.amd.com/embedded"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
AMD_DRIVER_VERSION = "02.03.0100"
diff --git a/recipes/linux/linux-gumstix_2.6.15.bb b/recipes/linux/linux-gumstix_2.6.15.bb
index 1812148f6e..60d269b467 100644
--- a/recipes/linux/linux-gumstix_2.6.15.bb
+++ b/recipes/linux/linux-gumstix_2.6.15.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for the Gumstix"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r2"
DEPENDS = "u-boot-utils-native"
diff --git a/recipes/linux/linux-h1940_2.6.11-bk1-h1940.bb b/recipes/linux/linux-h1940_2.6.11-bk1-h1940.bb
index 7624f32a8a..265788f11a 100644
--- a/recipes/linux/linux-h1940_2.6.11-bk1-h1940.bb
+++ b/recipes/linux/linux-h1940_2.6.11-bk1-h1940.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for h1940 devices."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_HOST = "arm.*-linux"
COMPATIBLE_MACHINE = "h1940"
diff --git a/recipes/linux/linux-h1940_2.6.14-h1940.bb b/recipes/linux/linux-h1940_2.6.14-h1940.bb
index 0669600a98..c0ade59e9a 100644
--- a/recipes/linux/linux-h1940_2.6.14-h1940.bb
+++ b/recipes/linux/linux-h1940_2.6.14-h1940.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for h1940 devices."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_HOST = "arm.*-linux"
COMPATIBLE_MACHINE = "h1940"
diff --git a/recipes/linux/linux-h1940_2.6.17-h1940.bb b/recipes/linux/linux-h1940_2.6.17-h1940.bb
index f7ad0185f3..a82ad8526d 100644
--- a/recipes/linux/linux-h1940_2.6.17-h1940.bb
+++ b/recipes/linux/linux-h1940_2.6.17-h1940.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for h1940 devices."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
diff --git a/recipes/linux/linux-h6300-omap1_2.6.12-rc5.bb b/recipes/linux/linux-h6300-omap1_2.6.12-rc5.bb
index 58e85781a3..2bb3300ad1 100644
--- a/recipes/linux/linux-h6300-omap1_2.6.12-rc5.bb
+++ b/recipes/linux/linux-h6300-omap1_2.6.12-rc5.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for h6300 devices."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/linux-2.6.12-rc5.tar.bz2 \
http://www.muru.com/linux/omap/patches/patch-2.6.12-rc5-omap2.bz2;patch=1 \
diff --git a/recipes/linux/linux-h6300-omap1_2.6.14.3.bb b/recipes/linux/linux-h6300-omap1_2.6.14.3.bb
index 7726bad494..31ce45dc87 100644
--- a/recipes/linux/linux-h6300-omap1_2.6.14.3.bb
+++ b/recipes/linux/linux-h6300-omap1_2.6.14.3.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for h6300 devices."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2 \
http://www.muru.com/linux/omap/patches/patch-2.6.14-omap2.bz2;patch=1 \
diff --git a/recipes/linux/linux-h6300-omap1_2.6.16.16.bb b/recipes/linux/linux-h6300-omap1_2.6.16.16.bb
index 8b5f627846..0db8ca2d35 100644
--- a/recipes/linux/linux-h6300-omap1_2.6.16.16.bb
+++ b/recipes/linux/linux-h6300-omap1_2.6.16.16.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for HP iPAQ h6300 series OMAP1510 based phones."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.16.tar.bz2 \
http://www.muru.com/linux/omap/patches/patch-2.6.16-omap2.bz2;patch=1 \
diff --git a/recipes/linux/linux-hackndev-2.6_git.bb b/recipes/linux/linux-hackndev-2.6_git.bb
index 5c093a1674..4c577d247d 100644
--- a/recipes/linux/linux-hackndev-2.6_git.bb
+++ b/recipes/linux/linux-hackndev-2.6_git.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Hack&Dev's Linux kernel for Palm devices."
HOMEPAGE = "http://www.hackndev.com/"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r14"
COMPATIBLE_MACHINE = "(palmld|palmtc|palmtt3|palmtt5|palmtx|palmz31|palmz72|palmt650)"
diff --git a/recipes/linux/linux-handhelds-2.6.inc b/recipes/linux/linux-handhelds-2.6.inc
index fe482830f8..4a3ed7d23e 100644
--- a/recipes/linux/linux-handhelds-2.6.inc
+++ b/recipes/linux/linux-handhelds-2.6.inc
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_HOST = "arm.*-linux"
COMPATIBLE_MACHINE ?= "(asus620|asus730|aximx50|aximx50v|eseries|h1910|h2200|h3600|h3800|h3900|h4000|h5000|htcalpine|htcapache|htcblueangel|htchermes|htchimalaya|htcsable|htcuniversal|htcwallaby|hx4700|ghi270|looxc550|jornada56x|magician|rx1950|rx3000)"
diff --git a/recipes/linux/linux-handhelds-2.6_2.6.16-hh9.bb b/recipes/linux/linux-handhelds-2.6_2.6.16-hh9.bb
index 8b1f153f11..184464323e 100644
--- a/recipes/linux/linux-handhelds-2.6_2.6.16-hh9.bb
+++ b/recipes/linux/linux-handhelds-2.6_2.6.16-hh9.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
# Override where to look for defconfigs and patches,
diff --git a/recipes/linux/linux-handhelds-2.6_2.6.17-hh4.bb b/recipes/linux/linux-handhelds-2.6_2.6.17-hh4.bb
index c19678efe2..58de694232 100644
--- a/recipes/linux/linux-handhelds-2.6_2.6.17-hh4.bb
+++ b/recipes/linux/linux-handhelds-2.6_2.6.17-hh4.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/linux/linux-handhelds-2.6_2.6.18-hh2.bb b/recipes/linux/linux-handhelds-2.6_2.6.18-hh2.bb
index 724971cacb..6c93da3598 100644
--- a/recipes/linux/linux-handhelds-2.6_2.6.18-hh2.bb
+++ b/recipes/linux/linux-handhelds-2.6_2.6.18-hh2.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/linux/linux-handhelds-2.6_2.6.19-hh13.bb b/recipes/linux/linux-handhelds-2.6_2.6.19-hh13.bb
index 77f55415ba..a8d4438fa3 100644
--- a/recipes/linux/linux-handhelds-2.6_2.6.19-hh13.bb
+++ b/recipes/linux/linux-handhelds-2.6_2.6.19-hh13.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/linux/linux-handhelds-2.6_2.6.20-hh10.bb b/recipes/linux/linux-handhelds-2.6_2.6.20-hh10.bb
index 8e760267f4..4ec2aaedf2 100644
--- a/recipes/linux/linux-handhelds-2.6_2.6.20-hh10.bb
+++ b/recipes/linux/linux-handhelds-2.6_2.6.20-hh10.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/linux/linux-handhelds-2.6_2.6.21-hh20.bb b/recipes/linux/linux-handhelds-2.6_2.6.21-hh20.bb
index d955c0ab39..c661d7e9b2 100644
--- a/recipes/linux/linux-handhelds-2.6_2.6.21-hh20.bb
+++ b/recipes/linux/linux-handhelds-2.6_2.6.21-hh20.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r26"
DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/linux/linux-handhelds-2.6_cvs.bb b/recipes/linux/linux-handhelds-2.6_cvs.bb
index 93e884e994..8ebdb1a994 100644
--- a/recipes/linux/linux-handhelds-2.6_cvs.bb
+++ b/recipes/linux/linux-handhelds-2.6_cvs.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PV = "${K_MAJOR}.${K_MINOR}.${K_MICRO}-hh${HHV}+cvs${SRCDATE}"
PR = "r1"
diff --git a/recipes/linux/linux-jlime-ben_2.6.32.bb b/recipes/linux/linux-jlime-ben_2.6.32.bb
index 798fac3f87..c2b1a8e1ac 100644
--- a/recipes/linux/linux-jlime-ben_2.6.32.bb
+++ b/recipes/linux/linux-jlime-ben_2.6.32.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux 2.6.32 kernel for the ben nanonote"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
SRCREV = "${AUTOREV}"
diff --git a/recipes/linux/linux-jlime-current.bb b/recipes/linux/linux-jlime-current.bb
index 21cf1a224b..806fd6102c 100644
--- a/recipes/linux/linux-jlime-current.bb
+++ b/recipes/linux/linux-jlime-current.bb
@@ -7,7 +7,7 @@
DESCRIPTION = "2.6 Linux Development Kernel for JLime supported Machines."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_MACHINE = "fillmein"
diff --git a/recipes/linux/linux-jlime-jornada6xx_2.6.11.bb b/recipes/linux/linux-jlime-jornada6xx_2.6.11.bb
index 654b02788c..43b9e00650 100644
--- a/recipes/linux/linux-jlime-jornada6xx_2.6.11.bb
+++ b/recipes/linux/linux-jlime-jornada6xx_2.6.11.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for Hitachi SH3 based Jornada 6xx"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
diff --git a/recipes/linux/linux-jlime-jornada6xx_2.6.17.bb b/recipes/linux/linux-jlime-jornada6xx_2.6.17.bb
index 5bd44ecf68..9b61343238 100644
--- a/recipes/linux/linux-jlime-jornada6xx_2.6.17.bb
+++ b/recipes/linux/linux-jlime-jornada6xx_2.6.17.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "JLime Linux kernel for SuperH based Jornada 6xx"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_MACHINE = "jornada6xx"
diff --git a/recipes/linux/linux-jlime-jornada6xx_2.6.21rc5.bb b/recipes/linux/linux-jlime-jornada6xx_2.6.21rc5.bb
index c7ebe829c4..c932df901f 100644
--- a/recipes/linux/linux-jlime-jornada6xx_2.6.21rc5.bb
+++ b/recipes/linux/linux-jlime-jornada6xx_2.6.21rc5.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "JLime Linux kernel for SuperH based Jornada 6xx"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
COMPATIBLE_HOST = "sh.*-linux"
diff --git a/recipes/linux/linux-jlime-jornada6xx_2.6.25.bb b/recipes/linux/linux-jlime-jornada6xx_2.6.25.bb
index c55cf1578f..502dc51eb1 100644
--- a/recipes/linux/linux-jlime-jornada6xx_2.6.25.bb
+++ b/recipes/linux/linux-jlime-jornada6xx_2.6.25.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "JLime Linux kernel for SuperH based Jornada 6xx"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
SRCREV = "${AUTOREV}"
diff --git a/recipes/linux/linux-jlime-jornada6xx_2.6.32.bb b/recipes/linux/linux-jlime-jornada6xx_2.6.32.bb
index d3d1625070..c0c258f027 100644
--- a/recipes/linux/linux-jlime-jornada6xx_2.6.32.bb
+++ b/recipes/linux/linux-jlime-jornada6xx_2.6.32.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux 2.6.32 kernel for the SuperH-based Jornada 6xx"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
SRCREV = "${AUTOREV}"
diff --git a/recipes/linux/linux-jlime-jornada7xx-2.6.32+git/defconf_jlime b/recipes/linux/linux-jlime-jornada7xx-2.6.32+git/defconf_jlime
new file mode 100644
index 0000000000..9d73997316
--- /dev/null
+++ b/recipes/linux/linux-jlime-jornada7xx-2.6.32+git/defconf_jlime
@@ -0,0 +1,1742 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.32
+# Sun Jan 24 18:41:36 2010
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLUB_DEBUG=y
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+CONFIG_SLOW_WORK=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_BLOCK=y
+# CONFIG_LBDAF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+# CONFIG_FREEZER is not set
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+CONFIG_ARCH_SA1100=y
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_BCMRING is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_COLLIE is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_BADGE4 is not set
+CONFIG_SA1100_JORNADA720=y
+# CONFIG_SA1100_JORNADA720_FLASHROM is not set
+CONFIG_SA1100_JORNADA720_SSP=y
+# CONFIG_SA1100_JORNADA820 is not set
+# CONFIG_SA1100_HACKKIT is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SIMPAD is not set
+CONFIG_SA1100_SSP=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_SA1100=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4=y
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_CACHE_V4WB=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WB=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+CONFIG_SA1111=y
+CONFIG_DMABOUNCE=y
+CONFIG_FORCE_MAX_ZONEORDER=9
+
+#
+# Bus support
+#
+CONFIG_ISA=y
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+# CONFIG_PCMCIA_IOCTL is not set
+
+#
+# PC-card bridges
+#
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+# CONFIG_PCMCIA_SA1100 is not set
+CONFIG_PCMCIA_SA1111=y
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+CONFIG_SPARSEMEM_MANUAL=y
+CONFIG_SPARSEMEM=y
+CONFIG_HAVE_MEMORY_PRESENT=y
+CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_SUSPEND is not set
+CONFIG_APM_EMULATION=y
+# CONFIG_PM_RUNTIME is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
+CONFIG_NF_CONNTRACK=m
+# CONFIG_NF_CT_ACCT is not set
+# CONFIG_NF_CONNTRACK_MARK is not set
+# CONFIG_NF_CONNTRACK_EVENTS is not set
+# CONFIG_NF_CT_PROTO_DCCP is not set
+# CONFIG_NF_CT_PROTO_SCTP is not set
+# CONFIG_NF_CT_PROTO_UDPLITE is not set
+# CONFIG_NF_CONNTRACK_AMANDA is not set
+# CONFIG_NF_CONNTRACK_FTP is not set
+# CONFIG_NF_CONNTRACK_H323 is not set
+# CONFIG_NF_CONNTRACK_IRC is not set
+# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
+# CONFIG_NF_CONNTRACK_PPTP is not set
+# CONFIG_NF_CONNTRACK_SANE is not set
+# CONFIG_NF_CONNTRACK_SIP is not set
+# CONFIG_NF_CONNTRACK_TFTP is not set
+# CONFIG_NF_CT_NETLINK is not set
+CONFIG_NETFILTER_XTABLES=y
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
+# CONFIG_NETFILTER_XT_MATCH_HL is not set
+# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
+# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
+# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_MAC is not set
+# CONFIG_NETFILTER_XT_MATCH_MARK is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
+# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+# CONFIG_NETFILTER_XT_MATCH_STATE is not set
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+# CONFIG_IP_VS is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV4=m
+CONFIG_NF_CONNTRACK_IPV4=m
+# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
+# CONFIG_IP_NF_MATCH_AH is not set
+# CONFIG_IP_NF_MATCH_ECN is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+# CONFIG_IP_NF_FILTER is not set
+# CONFIG_IP_NF_TARGET_LOG is not set
+# CONFIG_IP_NF_TARGET_ULOG is not set
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+# CONFIG_IP_NF_TARGET_NETMAP is not set
+CONFIG_IP_NF_TARGET_REDIRECT=m
+# CONFIG_NF_NAT_SNMP_BASIC is not set
+# CONFIG_NF_NAT_FTP is not set
+# CONFIG_NF_NAT_IRC is not set
+# CONFIG_NF_NAT_TFTP is not set
+# CONFIG_NF_NAT_AMANDA is not set
+# CONFIG_NF_NAT_PPTP is not set
+# CONFIG_NF_NAT_H323 is not set
+# CONFIG_NF_NAT_SIP is not set
+# CONFIG_IP_NF_MANGLE is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+# CONFIG_IP_NF_RAW is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_STP=m
+CONFIG_BRIDGE=m
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_KINGSUN_DONGLE is not set
+# CONFIG_KSDAZZLE_DONGLE is not set
+# CONFIG_KS959_DONGLE is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_SA1100_FIR=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+# CONFIG_BT_BNEP_MC_FILTER is not set
+# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIBTUSB=m
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_BT_MRVL is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_WIRELESS=y
+CONFIG_CFG80211=m
+# CONFIG_NL80211_TESTMODE is not set
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
+# CONFIG_CFG80211_REG_DEBUG is not set
+CONFIG_CFG80211_DEFAULT_PS=y
+CONFIG_CFG80211_DEFAULT_PS_VALUE=1
+CONFIG_WIRELESS_OLD_REGULATORY=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_LIB80211=y
+CONFIG_LIB80211_CRYPT_WEP=m
+CONFIG_LIB80211_CRYPT_CCMP=m
+CONFIG_LIB80211_CRYPT_TKIP=m
+# CONFIG_LIB80211_DEBUG is not set
+CONFIG_MAC80211=m
+CONFIG_MAC80211_RC_MINSTREL=y
+# CONFIG_MAC80211_RC_DEFAULT_PID is not set
+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+CONFIG_MAC80211_RC_DEFAULT="minstrel"
+# CONFIG_MAC80211_MESH is not set
+# CONFIG_MAC80211_LEDS is not set
+# CONFIG_MAC80211_DEBUG_MENU is not set
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+# CONFIG_MTD is not set
+CONFIG_PARPORT=m
+# CONFIG_PARPORT_PC is not set
+# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_AX88796 is not set
+# CONFIG_PARPORT_1284 is not set
+# CONFIG_PNP is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MG_DISK is not set
+# CONFIG_MISC_DEVICES is not set
+CONFIG_EEPROM_93CX6=m
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=m
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+# CONFIG_SCSI_LOWLEVEL is not set
+CONFIG_SCSI_LOWLEVEL_PCMCIA=y
+CONFIG_PCMCIA_AHA152X=m
+CONFIG_PCMCIA_FDOMAIN=m
+CONFIG_PCMCIA_NINJA_SCSI=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=m
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+# CONFIG_ATA_VERBOSE_ERROR is not set
+# CONFIG_SATA_PMP is not set
+CONFIG_ATA_SFF=y
+# CONFIG_SATA_MV is not set
+# CONFIG_PATA_LEGACY is not set
+CONFIG_PATA_PCMCIA=y
+# CONFIG_PATA_QDI is not set
+# CONFIG_PATA_WINBOND_VLB is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_ARCNET is not set
+# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=m
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+CONFIG_WLAN=y
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+CONFIG_PCMCIA_RAYCS=m
+# CONFIG_LIBERTAS is not set
+# CONFIG_LIBERTAS_THINFIRM is not set
+# CONFIG_ATMEL is not set
+CONFIG_AT76C50X_USB=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_USB_ZD1201=m
+CONFIG_USB_NET_RNDIS_WLAN=m
+CONFIG_RTL8187=m
+# CONFIG_MAC80211_HWSIM is not set
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+CONFIG_ATH_COMMON=m
+CONFIG_AR9170_USB=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+CONFIG_HOSTAP_CS=m
+# CONFIG_B43 is not set
+# CONFIG_B43LEGACY is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_RT2X00=m
+CONFIG_RT2500USB=m
+CONFIG_RT73USB=m
+CONFIG_RT2800USB=m
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_HT=y
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_CRYPTO=y
+# CONFIG_RT2X00_DEBUG is not set
+CONFIG_HERMES=m
+# CONFIG_HERMES_CACHE_FW_ON_INIT is not set
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_WL12XX=m
+# CONFIG_WL1251 is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_CDC_EEM=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_SMSC95XX=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_NET_INT51X1=m
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+# CONFIG_WAN is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+CONFIG_KEYBOARD_HP7XX=y
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+CONFIG_MOUSE_SERIAL=m
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+CONFIG_TOUCHSCREEN_HP7XX=y
+# CONFIG_TOUCHSCREEN_HTCPEN is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_W90X900 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=m
+CONFIG_SERIO_SERPORT=m
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_SA1111 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+CONFIG_PPDEV=m
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+CONFIG_IPWIRELESS=m
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+# CONFIG_I2C is not set
+# CONFIG_SPI is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_SA1100_WATCHDOG=m
+
+#
+# ISA-based Watchdog Cards
+#
+# CONFIG_PCWATCHDOG is not set
+# CONFIG_MIXCOMWD is not set
+# CONFIG_WDT is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP_SA11X0 is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_SA1100 is not set
+CONFIG_FB_S1D13XXX=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+# CONFIG_LCD_ILI9320 is not set
+# CONFIG_LCD_PLATFORM is not set
+CONFIG_LCD_HP700=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_GENERIC is not set
+CONFIG_BACKLIGHT_HP700=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_LOGO is not set
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_A4TECH=m
+CONFIG_HID_APPLE=m
+CONFIG_HID_BELKIN=m
+CONFIG_HID_CHERRY=m
+CONFIG_HID_CHICONY=m
+CONFIG_HID_CYPRESS=m
+CONFIG_HID_DRAGONRISE=m
+# CONFIG_DRAGONRISE_FF is not set
+CONFIG_HID_EZKEY=m
+CONFIG_HID_KYE=m
+CONFIG_HID_GYRATION=m
+CONFIG_HID_TWINHAN=m
+CONFIG_HID_KENSINGTON=m
+CONFIG_HID_LOGITECH=m
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=m
+CONFIG_HID_MONTEREY=m
+CONFIG_HID_NTRIG=m
+CONFIG_HID_PANTHERLORD=m
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=m
+CONFIG_HID_SAMSUNG=m
+CONFIG_HID_SONY=m
+CONFIG_HID_SUNPLUS=m
+CONFIG_HID_GREENASIA=m
+# CONFIG_GREENASIA_FF is not set
+CONFIG_HID_SMARTJOYPLUS=m
+# CONFIG_SMARTJOYPLUS_FF is not set
+CONFIG_HID_TOPSEED=m
+CONFIG_HID_THRUSTMASTER=m
+# CONFIG_THRUSTMASTER_FF is not set
+CONFIG_HID_WACOM=m
+CONFIG_HID_ZEROPLUS=m
+# CONFIG_ZEROPLUS_FF is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+CONFIG_USB_DEBUG=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+CONFIG_USB_MON=m
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+CONFIG_USB_PRINTER=m
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+CONFIG_USB_SERIAL=m
+# CONFIG_USB_EZUSB is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+CONFIG_USB_SERIAL_AIRCABLE=m
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+CONFIG_USB_SERIAL_CP210X=m
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+# CONFIG_USB_SERIAL_IUU is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_MOTOROLA is not set
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_QUALCOMM is not set
+# CONFIG_USB_SERIAL_SPCP8X5 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+# CONFIG_USB_SERIAL_SYMBOL is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_OPTICON is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_R8A66597 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C_HSOTG is not set
+# CONFIG_USB_GADGET_IMX is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+CONFIG_USB_GADGET_M66592=y
+CONFIG_USB_M66592=m
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_CI13XXX is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LANGWELL is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+# CONFIG_USB_AUDIO is not set
+CONFIG_USB_ETH=m
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_ETH_EEM is not set
+# CONFIG_USB_GADGETFS is not set
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_NOP_USB_XCEIV is not set
+# CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_NEW_LEDS is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=m
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+CONFIG_STAGING=y
+# CONFIG_STAGING_EXCLUDE_BUILD is not set
+CONFIG_USB_IP_COMMON=m
+CONFIG_USB_IP_VHCI_HCD=m
+CONFIG_USB_IP_HOST=m
+# CONFIG_W35UND is not set
+CONFIG_PRISM2_USB=m
+# CONFIG_ECHO is not set
+# CONFIG_OTUS is not set
+# CONFIG_COMEDI is not set
+# CONFIG_ASUS_OLED is not set
+# CONFIG_PANEL is not set
+# CONFIG_INPUT_MIMIO is not set
+# CONFIG_TRANZPORT is not set
+
+#
+# Android
+#
+
+#
+# Qualcomm MSM Camera And Video
+#
+
+#
+# Camera Sensor Selection
+#
+# CONFIG_INPUT_GPIO is not set
+# CONFIG_DST is not set
+# CONFIG_POHMELFS is not set
+# CONFIG_PLAN9AUTH is not set
+# CONFIG_USB_SERIAL_QUATECH2 is not set
+# CONFIG_USB_SERIAL_QUATECH_USB2 is not set
+# CONFIG_VT6656 is not set
+CONFIG_FB_UDL=m
+
+#
+# RAR Register Driver
+#
+# CONFIG_RAR_REGISTER is not set
+# CONFIG_IIO is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_EXT4_FS=m
+CONFIG_EXT4_FS_XATTR=y
+# CONFIG_EXT4_FS_POSIX_ACL is not set
+# CONFIG_EXT4_FS_SECURITY is not set
+# CONFIG_EXT4_DEBUG is not set
+CONFIG_JBD=m
+CONFIG_JBD2=m
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_REISERFS_FS_XATTR is not set
+CONFIG_JFS_FS=m
+# CONFIG_JFS_POSIX_ACL is not set
+# CONFIG_JFS_SECURITY is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_DEBUG is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+# CONFIG_CUSE is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=852
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-2"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+CONFIG_MINIX_FS=m
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-2"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=0
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_MEMORY_INIT=y
+CONFIG_FRAME_POINTER=y
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_FTRACE is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_ARM_UNWIND is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_ZLIB is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+# CONFIG_CRYPTO_HW is not set
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC_ITU_T=y
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
diff --git a/recipes/linux/linux-jlime-jornada7xx_2.6.17.bb b/recipes/linux/linux-jlime-jornada7xx_2.6.17.bb
index 0d95972010..0018fa2aae 100644
--- a/recipes/linux/linux-jlime-jornada7xx_2.6.17.bb
+++ b/recipes/linux/linux-jlime-jornada7xx_2.6.17.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "JLime Linux kernel for Arm based Jornada 7xx"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
COMPATIBLE_HOST = "arm.*-linux"
diff --git a/recipes/linux/linux-jlime-jornada7xx_2.6.18.bb b/recipes/linux/linux-jlime-jornada7xx_2.6.18.bb
index 789dddf9b8..f1d0707b70 100644
--- a/recipes/linux/linux-jlime-jornada7xx_2.6.18.bb
+++ b/recipes/linux/linux-jlime-jornada7xx_2.6.18.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "JLime Linux kernel for Arm based Jornada 7xx"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
COMPATIBLE_HOST = "arm.*-linux"
diff --git a/recipes/linux/linux-jlime-jornada7xx_2.6.19rc6.bb b/recipes/linux/linux-jlime-jornada7xx_2.6.19rc6.bb
index a80f4c91a1..8d688ca54f 100644
--- a/recipes/linux/linux-jlime-jornada7xx_2.6.19rc6.bb
+++ b/recipes/linux/linux-jlime-jornada7xx_2.6.19rc6.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "JLime Linux kernel for Arm based Jornada 7xx"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
COMPATIBLE_HOST = "arm.*-linux"
diff --git a/recipes/linux/linux-jlime-jornada7xx_2.6.32+git.bb b/recipes/linux/linux-jlime-jornada7xx_2.6.32+git.bb
new file mode 100644
index 0000000000..cc39c73925
--- /dev/null
+++ b/recipes/linux/linux-jlime-jornada7xx_2.6.32+git.bb
@@ -0,0 +1,35 @@
+SECTION = "kernel"
+DESCRIPTION = "JLime Linux kernel for Arm based Jornada 7xx"
+LICENSE = "GPLv2"
+PR = "r0"
+
+COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = "jornada7xx"
+
+SRC_URI = "file://defconf_jlime"
+
+S = "${WORKDIR}/linux-hpc"
+
+inherit kernel
+
+ARCH = "arm"
+
+FILES_kernel-image = "/boot/${KERNEL_IMAGETYPE}*"
+
+do_fetch () {
+ cd ${WORKDIR}
+ [ -d linux-hpc ] && {
+ cd linux-hpc
+ git pull
+ } || {
+ git clone git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git
+ cd linux-hpc
+ # written individual do_fetch function because I don't know how to do this in SRC_URI:
+ git-checkout --track -b v2.6.32-hpc origin/v2.6.32-hpc
+ git-checkout v2.6.32-hpc
+ }
+}
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/defconf_jlime ${S}/.config
+}
diff --git a/recipes/linux/linux-kirkwood/openrd-base/defconfig b/recipes/linux/linux-kirkwood/openrd-base/defconfig
index 8bcd95e560..cb6fb6a569 100644
--- a/recipes/linux/linux-kirkwood/openrd-base/defconfig
+++ b/recipes/linux/linux-kirkwood/openrd-base/defconfig
@@ -2367,7 +2367,7 @@ CONFIG_MSDOS_PARTITION=y
CONFIG_EFI_PARTITION=y
# CONFIG_SYSV68_PARTITION is not set
CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
diff --git a/recipes/linux/linux-kirkwood/openrd-client/defconfig b/recipes/linux/linux-kirkwood/openrd-client/defconfig
index 0498bf5176..661408b962 100644
--- a/recipes/linux/linux-kirkwood/openrd-client/defconfig
+++ b/recipes/linux/linux-kirkwood/openrd-client/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.33-rc1
-# Sat Jan 9 15:57:17 2010
+# Sun Feb 28 20:26:16 2010
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -701,8 +701,9 @@ CONFIG_MAC80211_RC_DEFAULT="minstrel"
#
# Generic Driver Options
#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_DEVTMPFS is not set
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
@@ -856,7 +857,8 @@ CONFIG_MISC_DEVICES=y
# CONFIG_AD525X_DPOT is not set
# CONFIG_PHANTOM is not set
# CONFIG_SGI_IOC4 is not set
-# CONFIG_TIFM_CORE is not set
+CONFIG_TIFM_CORE=y
+CONFIG_TIFM_7XX1=y
# CONFIG_ICS932S401 is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_HP_ILO is not set
@@ -1234,9 +1236,22 @@ CONFIG_USB_NET_INT51X1=m
# CONFIG_WAN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_PPPOL2TP=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLHC=m
+CONFIG_SLIP_SMART=y
+CONFIG_SLIP_MODE_SLIP6=y
+CONFIG_NET_FC=y
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
@@ -2255,6 +2270,8 @@ CONFIG_SDIO_UART=y
# MMC/SD/SDIO Host Controller Drivers
#
CONFIG_MMC_SDHCI=y
+# CONFIG_MMC_SDHCI_PCI is not set
+# CONFIG_MMC_SDHCI_PLTFM is not set
# CONFIG_MMC_AT91 is not set
# CONFIG_MMC_ATMELMCI is not set
CONFIG_MMC_TIFM_SD=y
@@ -2418,6 +2435,7 @@ CONFIG_AUTOFS_FS=m
CONFIG_AUTOFS4_FS=m
CONFIG_FUSE_FS=m
CONFIG_CUSE=m
+CONFIG_GENERIC_ACL=y
#
# Caches
@@ -2453,7 +2471,7 @@ CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
+CONFIG_TMPFS_POSIX_ACL=y
# CONFIG_HUGETLB_PAGE is not set
CONFIG_CONFIGFS_FS=m
CONFIG_MISC_FILESYSTEMS=y
@@ -2532,7 +2550,7 @@ CONFIG_CIFS_EXPERIMENTAL=y
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
diff --git a/recipes/linux/linux-kirkwood/sheevaplug/defconfig b/recipes/linux/linux-kirkwood/sheevaplug/defconfig
index 8e56415e92..6451d8de7a 100644
--- a/recipes/linux/linux-kirkwood/sheevaplug/defconfig
+++ b/recipes/linux/linux-kirkwood/sheevaplug/defconfig
@@ -2369,7 +2369,7 @@ CONFIG_MSDOS_PARTITION=y
CONFIG_EFI_PARTITION=y
# CONFIG_SYSV68_PARTITION is not set
CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
diff --git a/recipes/linux/linux-kirkwood_2.6.29.5.bb b/recipes/linux/linux-kirkwood_2.6.29.5.bb
index f503829211..668c06aa81 100644
--- a/recipes/linux/linux-kirkwood_2.6.29.5.bb
+++ b/recipes/linux/linux-kirkwood_2.6.29.5.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for Marvell Kirkwood based devices"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_MACHINE = "sheevaplug"
require linux.inc
diff --git a/recipes/linux/linux-kirkwood_2.6.30.5.bb b/recipes/linux/linux-kirkwood_2.6.30.5.bb
index 84dbb8dbcc..699d973a72 100644
--- a/recipes/linux/linux-kirkwood_2.6.30.5.bb
+++ b/recipes/linux/linux-kirkwood_2.6.30.5.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for Marvell Kirkwood based devices"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_MACHINE = "(openrd-base|sheevaplug)"
require linux.inc
diff --git a/recipes/linux/linux-kirkwood_2.6.31.bb b/recipes/linux/linux-kirkwood_2.6.31.bb
index f046feaadd..56d0116bcc 100644
--- a/recipes/linux/linux-kirkwood_2.6.31.bb
+++ b/recipes/linux/linux-kirkwood_2.6.31.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for Marvell Kirkwood based devices"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_MACHINE = "openrd-base"
diff --git a/recipes/linux/linux-kirkwood_2.6.33-rc1.bb b/recipes/linux/linux-kirkwood_2.6.33-rc1.bb
index d65eaf9520..893e349aca 100644
--- a/recipes/linux/linux-kirkwood_2.6.33-rc1.bb
+++ b/recipes/linux/linux-kirkwood_2.6.33-rc1.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for Marvell Kirkwood based devices"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_MACHINE = "openrd-base|openrd-client|sheevaplug"
diff --git a/recipes/linux/linux-kirkwood_2.6.33-rc5.bb b/recipes/linux/linux-kirkwood_2.6.33-rc5.bb
index b54add9102..cae7554077 100644
--- a/recipes/linux/linux-kirkwood_2.6.33-rc5.bb
+++ b/recipes/linux/linux-kirkwood_2.6.33-rc5.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for Marvell Kirkwood based devices"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_MACHINE = "openrd-base|openrd-client|sheevaplug"
diff --git a/recipes/linux/linux-ks8695_2.6.16.bb b/recipes/linux/linux-ks8695_2.6.16.bb
index a357443fdb..81a745f526 100644
--- a/recipes/linux/linux-ks8695_2.6.16.bb
+++ b/recipes/linux/linux-ks8695_2.6.16.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for Micrel KS8695(P) based devices"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
diff --git a/recipes/linux/linux-leviathan/defconfig b/recipes/linux/linux-leviathan/defconfig
index 18c69a21af..30568af22c 100644
--- a/recipes/linux/linux-leviathan/defconfig
+++ b/recipes/linux/linux-leviathan/defconfig
@@ -998,9 +998,9 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x8=y
# CONFIG_FONT_8x16 is not set
-CONFIG_FONT_6x11=y
+# CONFIG_FONT_6x11 is not set
# CONFIG_FONT_7x14 is not set
# CONFIG_FONT_PEARL_8x8 is not set
# CONFIG_FONT_ACORN_8x8 is not set
@@ -1046,7 +1046,6 @@ CONFIG_SND_SOC=y
CONFIG_SND_MSM_SOC=y
CONFIG_SND_MSM_DAI_SOC=y
CONFIG_SND_MSM_SOC_MSM7K=y
-CONFIG_SND_MSM_SOC_TEMP_ALSA_FIX=y
CONFIG_SND_SOC_I2C_AND_SPI=y
# CONFIG_SND_SOC_ALL_CODECS is not set
# CONFIG_SOUND_PRIME is not set
diff --git a/recipes/linux/linux-leviathan_git.bb b/recipes/linux/linux-leviathan_git.bb
index edf55b785d..2510a90bdb 100644
--- a/recipes/linux/linux-leviathan_git.bb
+++ b/recipes/linux/linux-leviathan_git.bb
@@ -1,16 +1,25 @@
require linux.inc
+DEPENDS = "android-image-utils-native"
PV = "2.6.32+${PR}+gitr${SRCREV}"
-PR = "r0"
+PR = "r1"
COMPATIBLE_MACHINE = "htcdream"
-# CMDLINE is irrelevant on this hardware as we need a special userland tool to cook the image
CMDLINE = "console=tty0 no_console_suspend=1 root=/dev/mmcblk0p1 rootdelay=8 fbcon=rotate:1 panic=30 mem=110M"
-SRCREV = "deabc32225429b3c0db44f7e62d95d0d2525290b"
+SRCREV_LAST_GOOD = "deabc32225429b3c0db44f7e62d95d0d2525290b"
+SRCREV = "0c68b1e8e4507090b8affbcedaac8efde6d0e9b7"
SRC_URI = "\
git://gitorious.org/htc-msm-2-6-32/leviathan-incoming.git;protocol=git \
file://defconfig \
"
S = "${WORKDIR}/git"
+
+do_deploy_append() {
+ touch -f empty
+ mkbootimg --kernel ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin \
+ --ramdisk empty \
+ --cmdline "${CMDLINE}" \
+ --output ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.fastboot
+}
diff --git a/recipes/linux/linux-linkstationppc_2.6.28.4.bb b/recipes/linux/linux-linkstationppc_2.6.28.4.bb
index 3c15d78e42..e86886e435 100644
--- a/recipes/linux/linux-linkstationppc_2.6.28.4.bb
+++ b/recipes/linux/linux-linkstationppc_2.6.28.4.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for the Buffalo Linkstation HD/HG"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
DEPENDS = "dtc-native u-boot-mkimage-native"
diff --git a/recipes/linux/linux-magicbox_2.6.18.6.bb b/recipes/linux/linux-magicbox_2.6.18.6.bb
index bd9a1c4060..66c3e12a1e 100644
--- a/recipes/linux/linux-magicbox_2.6.18.6.bb
+++ b/recipes/linux/linux-magicbox_2.6.18.6.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for Magicbox ver 1.1 and 2.0 router boards"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r2"
DEPENDS = "u-boot"
diff --git a/recipes/linux/linux-magicbox_2.6.19.2.bb b/recipes/linux/linux-magicbox_2.6.19.2.bb
index 2c79a94e10..f8f967a990 100644
--- a/recipes/linux/linux-magicbox_2.6.19.2.bb
+++ b/recipes/linux/linux-magicbox_2.6.19.2.bb
@@ -2,7 +2,7 @@
# Released under the MIT license (see packages/COPYING)
SECTION = "kernel"
DESCRIPTION = "Linux kernel for Magicbox ver 1.1 and 2.0 router boards"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r3"
DEPENDS = "u-boot"
diff --git a/recipes/linux/linux-mainstone_2.6.25.bb b/recipes/linux/linux-mainstone_2.6.25.bb
index f2d972dd78..499a71d09f 100644
--- a/recipes/linux/linux-mainstone_2.6.25.bb
+++ b/recipes/linux/linux-mainstone_2.6.25.bb
@@ -2,7 +2,7 @@ require linux.inc
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the Mainstone (PXA270 ref design)"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \
diff --git a/recipes/linux/linux-mini2440_2.6.30+git.bb b/recipes/linux/linux-mini2440_2.6.30+git.bb
index 09706e8bb5..9a87c1dfad 100644
--- a/recipes/linux/linux-mini2440_2.6.30+git.bb
+++ b/recipes/linux/linux-mini2440_2.6.30+git.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for mini2440 development board"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
MACHINE_KERNEL_PR = "r5"
GGSRC = "http://www.xora.org.uk/oe/patches/"
diff --git a/recipes/linux/linux-mini2440_2.6.31+git.bb b/recipes/linux/linux-mini2440_2.6.31+git.bb
index 012fc07dd5..346ec0a6f2 100644
--- a/recipes/linux/linux-mini2440_2.6.31+git.bb
+++ b/recipes/linux/linux-mini2440_2.6.31+git.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for mini2440 / micro2440 development boards"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
require linux.inc
diff --git a/recipes/linux/linux-ml403-mvista-2.6.x_git.bb b/recipes/linux/linux-ml403-mvista-2.6.x_git.bb
index 59bcff431e..28b670844c 100644
--- a/recipes/linux/linux-ml403-mvista-2.6.x_git.bb
+++ b/recipes/linux/linux-ml403-mvista-2.6.x_git.bb
@@ -2,7 +2,7 @@
# Released under the MIT license (see packages/COPYING)
SECTION = "kernel"
DESCRIPTION = "Linux kernel for Xilinx ML403 Virtex 4 fpga board"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS = "git-native"
PR = "r1"
DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/linux/linux-mtx-1_2.4.27.bb b/recipes/linux/linux-mtx-1_2.4.27.bb
index 952edb0140..3ed0b22569 100644
--- a/recipes/linux/linux-mtx-1_2.4.27.bb
+++ b/recipes/linux/linux-mtx-1_2.4.27.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for MTX-1 (MeshCube)"
HOMEPAGE = "http://meshcube.org/meshwiki/"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
KV = "${PV}"
PR = "r11"
inherit module-base kernel
diff --git a/recipes/linux/linux-mtx-2_2.4.27.bb b/recipes/linux/linux-mtx-2_2.4.27.bb
index 3379d548a1..4a0c87ecdb 100644
--- a/recipes/linux/linux-mtx-2_2.4.27.bb
+++ b/recipes/linux/linux-mtx-2_2.4.27.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for MTX-2 (Surfbox2)"
HOMEPAGE = "http://meshcube.org/meshwiki/"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
KV = "${PV}"
PR = "r11"
inherit module-base kernel
diff --git a/recipes/linux/linux-mtx-3_2.6.15.4.bb b/recipes/linux/linux-mtx-3_2.6.15.4.bb
index e3b23b1968..40e317a3bd 100644
--- a/recipes/linux/linux-mtx-3_2.6.15.4.bb
+++ b/recipes/linux/linux-mtx-3_2.6.15.4.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for MTX-3 (Surfbox3)"
HOMEPAGE = "http://meshcube.org/meshwiki/"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
KV = "${PV}"
PR = "r11"
diff --git a/recipes/linux/linux-mtx-3_2.6.15.bb b/recipes/linux/linux-mtx-3_2.6.15.bb
index e1613d6f60..1fc44f4354 100644
--- a/recipes/linux/linux-mtx-3_2.6.15.bb
+++ b/recipes/linux/linux-mtx-3_2.6.15.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for MTX-3 (Surfbox3)"
HOMEPAGE = "http://meshcube.org/meshwiki/"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
KV = "${PV}"
PR = "r11"
inherit module-base kernel
diff --git a/recipes/linux/linux-n1200_2.6.27-rc9+git.bb b/recipes/linux/linux-n1200_2.6.27-rc9+git.bb
index 7674379a6b..cd01720dd0 100644
--- a/recipes/linux/linux-n1200_2.6.27-rc9+git.bb
+++ b/recipes/linux/linux-n1200_2.6.27-rc9+git.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for the Thecus n1200"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r3"
DEPENDS = "u-boot-mkimage-native"
COMPATIBLE_MACHINE = "n1200"
diff --git a/recipes/linux/linux-navman_2.6.18.bb b/recipes/linux/linux-navman_2.6.18.bb
index 2c9aef9e62..edeea9c911 100644
--- a/recipes/linux/linux-navman_2.6.18.bb
+++ b/recipes/linux/linux-navman_2.6.18.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for Cirrus Logic ep39xx compatible machines"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
#DEPENDS = "u-boot"
diff --git a/recipes/linux/linux-nokia800.inc b/recipes/linux/linux-nokia800.inc
index 0f52b7c3b3..f6d14d58b4 100644
--- a/recipes/linux/linux-nokia800.inc
+++ b/recipes/linux/linux-nokia800.inc
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for Nokia 770/800"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
inherit kernel
diff --git a/recipes/linux/linux-omap-2.6_2.6.9-omap1.bb b/recipes/linux/linux-omap-2.6_2.6.9-omap1.bb
index cdcdcdf825..e036cf2b56 100644
--- a/recipes/linux/linux-omap-2.6_2.6.9-omap1.bb
+++ b/recipes/linux/linux-omap-2.6_2.6.9-omap1.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for OMAP processors"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.9.tar.bz2 \
http://www.muru.com/linux/omap/patches/patch-2.6.9-omap1.bz2;patch=1 \
diff --git a/recipes/linux/linux-omap-archos-2.6.27.10-omap1/defconfig b/recipes/linux/linux-omap-archos-2.6.27.10-omap1/defconfig
new file mode 100644
index 0000000000..7617bb5da8
--- /dev/null
+++ b/recipes/linux/linux-omap-archos-2.6.27.10-omap1/defconfig
@@ -0,0 +1,2183 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.27.10-omap1
+# Wed Dec 16 11:37:56 2009
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_SUPPORTS_AOUT=y
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_PANIC_TIMEOUT=0
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_COMPAT_BRK=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_ASHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+# CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set
+# CONFIG_HAVE_IOREMAP_PROT is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_ARCH_TRACEHOOK is not set
+# CONFIG_HAVE_DMA_ATTRS is not set
+# CONFIG_USE_GENERIC_SMP_HELPERS is not set
+CONFIG_HAVE_CLK=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_CLASSIC_RCU=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+CONFIG_ARCH_OMAP=y
+# CONFIG_ARCH_MSM7X00A is not set
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP_OTG=y
+# CONFIG_ARCH_OMAP1 is not set
+# CONFIG_ARCH_OMAP2 is not set
+CONFIG_ARCH_OMAP3=y
+
+#
+# OMAP Feature Selections
+#
+# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
+# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
+CONFIG_OMAP_RESET_CLOCKS=y
+CONFIG_OMAP_BOOT_TAG=y
+CONFIG_OMAP_BOOT_REASON=y
+# CONFIG_OMAP_COMPONENT_VERSION is not set
+# CONFIG_OMAP_GPIO_SWITCH is not set
+CONFIG_OMAP_MUX=y
+CONFIG_OMAP_MUX_DEBUG=y
+CONFIG_OMAP_MUX_WARNINGS=y
+CONFIG_OMAP_MCBSP=y
+
+#
+# McBSP fifo support
+#
+CONFIG_USE_MCBSP_FIFO=y
+# CONFIG_OMAP_MMU_FWK is not set
+# CONFIG_OMAP_MBOX_FWK is not set
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_DM_TIMER=y
+# CONFIG_OMAP_LL_DEBUG_UART1 is not set
+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
+CONFIG_OMAP_LL_DEBUG_UART3=y
+CONFIG_OMAP_SERIAL_WAKE=y
+CONFIG_OMAP_DMA_LIBRARY_CHANNELS=32
+CONFIG_OMAP2_DSS=y
+CONFIG_OMAP2_DSS_DEBUG_SUPPORT=y
+# CONFIG_OMAP2_DSS_RFBI is not set
+CONFIG_OMAP2_DSS_VENC=y
+# CONFIG_OMAP2_DSS_SDI is not set
+CONFIG_OMAP2_DSS_DSI=y
+CONFIG_OMAP2_DSS_USE_DSI_PLL=y
+# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
+CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=4
+
+#
+# USBHOST Port Configuration
+#
+CONFIG_OMAP_EHCI_PHY_MODE_PORT1=y
+# CONFIG_OMAP_EHCI_TLL_MODE_PORT1 is not set
+# CONFIG_OMAP_OHCI_PHY_MODE_3PIN_PORT1 is not set
+# CONFIG_OMAP_OHCI_PHY_MODE_4PIN_PORT1 is not set
+CONFIG_OMAP_EHCI_PHY_MODE_PORT2=y
+# CONFIG_OMAP_EHCI_TLL_MODE_PORT2 is not set
+# CONFIG_OMAP_OHCI_PHY_MODE_3PIN_PORT2 is not set
+# CONFIG_OMAP_OHCI_PHY_MODE_4PIN_PORT2 is not set
+# CONFIG_OMAP_EHCI_TLL_MODE_PORT3 is not set
+CONFIG_OMAP_OHCI_PHY_MODE_3PIN_PORT3=y
+# CONFIG_OMAP_OHCI_PHY_MODE_4PIN_PORT3 is not set
+# CONFIG_OMAP_DISPLAY is not set
+CONFIG_ARCH_OMAP34XX=y
+CONFIG_ARCH_OMAP3430=y
+
+#
+# OMAP Board Type
+#
+# CONFIG_MACH_OMAP_LDP is not set
+# CONFIG_MACH_OMAP_ZOOM2 is not set
+# CONFIG_MACH_OMAP_3430SDP is not set
+# CONFIG_MACH_OMAP3EVM is not set
+# CONFIG_MACH_OMAP3_BEAGLE is not set
+# CONFIG_MACH_OVERO is not set
+CONFIG_MACH_ARCHOS_G6H=y
+CONFIG_MACH_ARCHOS_G6S=y
+CONFIG_MACH_ARCHOS_A5S=y
+CONFIG_MACH_ARCHOS_A5H=y
+CONFIG_MACH_ARCHOS_A5ST=y
+CONFIG_MACH_ARCHOS=y
+CONFIG_ARCHOS_FIXUP=y
+# CONFIG_MACH_ARCHOS_CORE_DUMP is not set
+# CONFIG_MACH_ARCHOS_PRODTEST_MTD is not set
+# CONFIG_INTERCONNECT_IO_POSTING is not set
+CONFIG_OMAP3_PM=y
+# CONFIG_OMAP_VOLT_SR_BYPASS is not set
+# CONFIG_OMAP_VOLT_SR is not set
+CONFIG_OMAP_VOLT_VSEL=y
+# CONFIG_OMAP_VOLT_VMODE is not set
+# CONFIG_OMAP3ES2_VDD1_OPP1 is not set
+# CONFIG_OMAP3ES2_VDD1_OPP2 is not set
+CONFIG_OMAP3ES2_VDD1_OPP3=y
+# CONFIG_OMAP3ES2_VDD1_OPP4 is not set
+# CONFIG_OMAP3ES2_VDD1_OPP5 is not set
+# CONFIG_OMAP3_CORE_133MHZ is not set
+CONFIG_OMAP3_CORE_166MHZ=y
+CONFIG_OMAP3ES2_VDD2_OPP3=y
+# CONFIG_OMAP3ES2_VDD2_OPP2_L3_83MHZ is not set
+CONFIG_OMAP3ES2_VDD2_OPP3_L3_166MHZ=y
+# CONFIG_OMAP3ES2_VDD2_OPP2_L3_66MHZ is not set
+# CONFIG_OMAP3ES2_VDD2_OPP3_L3_133MHZ is not set
+CONFIG_OMAP_TICK_GPTIMER=1
+# CONFIG_TRACK_RESOURCES is not set
+CONFIG_AUTO_POWER_DOMAIN_CTRL=y
+CONFIG_MPU_OFF=y
+CONFIG_OMAP34XX_OFFMODE=y
+CONFIG_OMAP34XX_OSWR=y
+CONFIG_CORE_OFF=y
+CONFIG_CORE_OFF_CPUIDLE=y
+CONFIG_SYSOFFMODE=y
+CONFIG_HW_SUP_TRANS=y
+# CONFIG_DISABLE_EMUDOMAIN_CONTROL is not set
+# CONFIG_ENABLE_SWLATENCY_MEASURE is not set
+# CONFIG_HS_SERIAL_SUPPORT is not set
+# CONFIG_ENABLE_OFF_MODE_JTAG_ETM_DEBUG is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_32v6K=y
+CONFIG_CPU_V7=y
+CONFIG_CPU_32v7=y
+CONFIG_CPU_ABRT_EV7=y
+CONFIG_CPU_PABRT_IFAR=y
+CONFIG_CPU_CACHE_V7=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V7=y
+CONFIG_CPU_HAS_ASID=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_ARM_THUMBEE is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_LOCKDOWN_TO_64K_L2 is not set
+# CONFIG_CPU_LOCKDOWN_TO_128K_L2 is not set
+CONFIG_CPU_LOCKDOWN_TO_256K_L2=y
+CONFIG_CPU_USER_L2_PLE_ACCESS=y
+# CONFIG_CPU_L2CACHE_DISABLE is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_ARM_ERRATA_430973=y
+CONFIG_ARM_ERRATA_451027=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_ENABLE_LONG_IDLE_PERIODS=y
+CONFIG_DEFER_ALL_DEFERRABLE_TIMERS=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=128
+# CONFIG_THUMB2_KERNEL is not set
+# CONFIG_ARM_ASM_UNIFIED is not set
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_CPU_V7_SYSFS=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="root=/dev/sda1 rw init=/sbin/init console=ttyS2,115200n8 mem=256M nohz=off omapfb.vram=3686400 extrabaud=1000000"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_MIN_TICKS=10
+CONFIG_CPU_FREQ_SAMPLING_LATENCY_MULTIPLIER=1000
+CONFIG_OPROFILE_ARMV7=y
+
+#
+# CPUIdle
+#
+
+#
+# CPU idle PM support
+#
+CONFIG_CPU_IDLE=y
+
+#
+# Governors
+#
+# CONFIG_CPU_IDLE_GOV_LADDER is not set
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_VFP=y
+CONFIG_VFPv3=y
+CONFIG_NEON=y
+CONFIG_ARM_ERRATUM_451034=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_HAS_WAKELOCK=y
+CONFIG_HAS_EARLYSUSPEND=y
+CONFIG_WAKELOCK=y
+CONFIG_WAKELOCK_STAT=y
+CONFIG_USER_WAKELOCK=y
+CONFIG_EARLYSUSPEND=y
+CONFIG_NO_USER_SPACE_SCREEN_ACCESS_CONTROL=y
+# CONFIG_CONSOLE_EARLYSUSPEND is not set
+# CONFIG_FB_EARLYSUSPEND is not set
+# CONFIG_APM_EMULATION is not set
+CONFIG_HDD_DPM=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+CONFIG_ANDROID_PARANOID_NETWORK=y
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIBTUSB=m
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+# CONFIG_BT_HCIBRF6150 is not set
+# CONFIG_BT_HCIH4P is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+CONFIG_CFG80211=y
+CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_RFKILL=y
+# CONFIG_RFKILL_PM is not set
+# CONFIG_RFKILL_INPUT is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_FIRMWARE_IN_KERNEL is not set
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=m
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=m
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=m
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+CONFIG_MTD_OMAP_NOR=m
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=m
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_OMAP2=m
+CONFIG_MTD_NAND_OMAP_HWECC=y
+# CONFIG_MTD_NAND_OMAP_OOB_ECC is not set
+CONFIG_MTD_NAND_OMAP_PREFETCH=y
+# CONFIG_MTD_NAND_OMAP_PREFETCH_DMA is not set
+CONFIG_MTD_NAND_IDS=m
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=m
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=1
+CONFIG_BLK_DEV_RAM_SIZE=34720
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+CONFIG_ANDROID_PMEM=y
+CONFIG_TIMED_OUTPUT=y
+CONFIG_TIMED_GPIO=y
+CONFIG_BINDER_IPC=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_OMAP_STI is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_KERNEL_DEBUGGER_CORE is not set
+# CONFIG_LOW_MEMORY_KILLER is not set
+CONFIG_LOGGER=y
+# CONFIG_UID_STAT is not set
+# CONFIG_ANDROID_RAM_CONSOLE is not set
+# CONFIG_AD5820_DRIVER is not set
+
+#
+# SMC Driver Support for OMAP3
+#
+# CONFIG_SMC_DRIVER is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_SMC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+# CONFIG_LIBERTAS_SDIO is not set
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_USB_ZD1201=m
+CONFIG_USB_NET_RNDIS_WLAN=m
+# CONFIG_IWLWIFI_LEDS is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+# CONFIG_USB_ALI_M5632 is not set
+# CONFIG_USB_AN2720 is not set
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+# CONFIG_USB_EPSON2888 is not set
+# CONFIG_USB_KC2190 is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_HSO=m
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+# CONFIG_PPP_DEFLATE is not set
+# CONFIG_PPP_BSDCOMP is not set
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_KEYRESET is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_ADS_SCALED_EV is not set
+# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_TSC2005 is not set
+# CONFIG_TOUCHSCREEN_TSC2102 is not set
+# CONFIG_TOUCHSCREEN_TSC210X is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=m
+# CONFIG_INPUT_GPIO is not set
+# CONFIG_INPUT_KEYCHORD is not set
+CONFIG_INPUT_MMA7456L=m
+CONFIG_INPUT_ARCHOS_IRREMOTE=m
+# CONFIG_IRPRODTEST_EN is not set
+# CONFIG_BOTH_UART_IR is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVMEM=y
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_SERIAL_OMAP=y
+CONFIG_SERIAL_OMAP_CONSOLE=y
+CONFIG_SERIAL_OMAP_DMA_UART1=y
+CONFIG_SERIAL_OMAP_UART1_RXDMA_TIMEOUT=1
+CONFIG_SERIAL_OMAP_UART1_RXDMA_BUFSIZE=4096
+CONFIG_SERIAL_OMAP_DMA_UART2=y
+CONFIG_SERIAL_OMAP_UART2_RXDMA_TIMEOUT=1
+CONFIG_SERIAL_OMAP_UART2_RXDMA_BUFSIZE=4096
+# CONFIG_SERIAL_OMAP_DMA_UART3 is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+CONFIG_ARCHOS_IRBLASTER=m
+# CONFIG_ARCHOS_SUPERVISOR is not set
+# CONFIG_ARCHOS_SV_CLIENT_BATTERY is not set
+CONFIG_ATMEGA_RTC=y
+# CONFIG_ATMEGAG6_IO is not set
+CONFIG_ATMEGAG7_IO=y
+CONFIG_HELMET=m
+# CONFIG_TCG_TPM is not set
+# CONFIG_DCC_TTY is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_OMAP=y
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_SENSORS_ATMEGA=y
+# CONFIG_DS1682 is not set
+# CONFIG_AT24 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_ISP1301_OMAP is not set
+# CONFIG_ISP1301_HOST is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_SENSORS_TLV320AIC23 is not set
+# CONFIG_SENSORS_WM87XX is not set
+# CONFIG_USB_LAT_CONST is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_SENSORS_TSL2563 is not set
+# CONFIG_LP5521 is not set
+# CONFIG_SENSORS_AKM8976 is not set
+# CONFIG_SENSORS_PCA963X is not set
+CONFIG_SENSORS_HELMETCAM=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_OMAP24XX=y
+CONFIG_SPI_OMAP34XX_GPIO=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_IDCC is not set
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_HX5091 is not set
+# CONFIG_SPI_TSC2101 is not set
+# CONFIG_SPI_TSC2102 is not set
+# CONFIG_SPI_TSC210X is not set
+# CONFIG_SPI_TSC2301 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_AD7414 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ADT7473 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_SENSORS_TSC210X is not set
+CONFIG_SENSORS_OMAP34XX=y
+# CONFIG_HWMON_DEBUG_CHIP is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+# CONFIG_VIDEO_ALLOW_V4L1 is not set
+# CONFIG_VIDEO_V4L1_COMPAT is not set
+CONFIG_DVB_CORE=m
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_DMA_SG=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+CONFIG_VIDEO_ADV_DEBUG=y
+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
+
+#
+# Encoders/decoders and other helper chips
+#
+
+#
+# Audio decoders
+#
+# CONFIG_VIDEO_TVAUDIO is not set
+# CONFIG_VIDEO_TDA7432 is not set
+# CONFIG_VIDEO_TDA9840 is not set
+# CONFIG_VIDEO_TDA9875 is not set
+# CONFIG_VIDEO_TEA6415C is not set
+# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_MSP3400 is not set
+# CONFIG_VIDEO_CS5345 is not set
+# CONFIG_VIDEO_CS53L32A is not set
+# CONFIG_VIDEO_M52790 is not set
+# CONFIG_VIDEO_TLV320AIC23B is not set
+# CONFIG_VIDEO_WM8775 is not set
+# CONFIG_VIDEO_WM8739 is not set
+# CONFIG_VIDEO_VP27SMPX is not set
+
+#
+# Video decoders
+#
+# CONFIG_VIDEO_OV7670 is not set
+# CONFIG_VIDEO_TCM825X is not set
+# CONFIG_VIDEO_OV9640 is not set
+# CONFIG_VIDEO_MT9P012 is not set
+# CONFIG_VIDEO_DW9710 is not set
+# CONFIG_VIDEO_OV3640 is not set
+# CONFIG_VIDEO_IMX046 is not set
+# CONFIG_VIDEO_LV8093 is not set
+# CONFIG_VIDEO_SAA711X is not set
+# CONFIG_VIDEO_SAA717X is not set
+CONFIG_VIDEO_TVP514X=m
+# CONFIG_VIDEO_TVP5150 is not set
+
+#
+# Video and audio decoders
+#
+# CONFIG_VIDEO_CX25840 is not set
+
+#
+# MPEG video encoders
+#
+# CONFIG_VIDEO_CX2341X is not set
+
+#
+# Video encoders
+#
+# CONFIG_VIDEO_SAA7127 is not set
+CONFIG_VIDEO_ADV734X=m
+
+#
+# Video improvement chips
+#
+# CONFIG_VIDEO_UPD64031A is not set
+# CONFIG_VIDEO_UPD64083 is not set
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_VIDEO_AU0828 is not set
+CONFIG_VIDEO_OMAP_VIDEOLIB=m
+CONFIG_VIDEO_OMAP_VIDEOOUT=m
+# CONFIG_VID1_TV_MANAGER is not set
+CONFIG_VID1_LCD_MANAGER=y
+# CONFIG_VID2_TV_MANAGER is not set
+CONFIG_VID2_LCD_MANAGER=y
+CONFIG_VIDEO_OMAP_RESZ=m
+CONFIG_VIDEO_OMAP_IMGDMA=m
+CONFIG_VIDEO_OMAP3=m
+CONFIG_VIDEO_OMAP34XX_ISP_PREVIEWER=m
+CONFIG_VIDEO_OMAP34XX_ISP_RESIZER=m
+CONFIG_VIDEO_OMAP34XX_TVP_ISP_GLUE=m
+CONFIG_VIDEO_OMAP3_BUFFALLOC=y
+# CONFIG_VIDEO_OMAP2 is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VIDEO_CLASS is not set
+CONFIG_USB_GSPCA=m
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_ZR364XX is not set
+# CONFIG_USB_STKWEBCAM is not set
+# CONFIG_USB_S2255 is not set
+# CONFIG_SOC_CAMERA is not set
+# CONFIG_VIDEO_SH_MOBILE_CEU is not set
+# CONFIG_RADIO_ADAPTERS is not set
+CONFIG_DVB_CAPTURE_DRIVERS=y
+# CONFIG_TTPCI_EEPROM is not set
+
+#
+# Supported USB Adapters
+#
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+# CONFIG_DVB_USB_A800 is not set
+# CONFIG_DVB_USB_DIBUSB_MB is not set
+# CONFIG_DVB_USB_DIBUSB_MC is not set
+CONFIG_DVB_USB_DIB0700=m
+CONFIG_DVB_USB_DIB0700_ARCHOS_DEVICES=y
+# CONFIG_DVB_USB_UMT_010 is not set
+# CONFIG_DVB_USB_CXUSB is not set
+# CONFIG_DVB_USB_M920X is not set
+# CONFIG_DVB_USB_GL861 is not set
+# CONFIG_DVB_USB_AU6610 is not set
+# CONFIG_DVB_USB_DIGITV is not set
+# CONFIG_DVB_USB_VP7045 is not set
+# CONFIG_DVB_USB_VP702X is not set
+# CONFIG_DVB_USB_GP8PSK is not set
+# CONFIG_DVB_USB_NOVA_T_USB2 is not set
+# CONFIG_DVB_USB_TTUSB2 is not set
+# CONFIG_DVB_USB_DTT200U is not set
+# CONFIG_DVB_USB_OPERA1 is not set
+# CONFIG_DVB_USB_AF9005 is not set
+# CONFIG_DVB_USB_DW2102 is not set
+# CONFIG_DVB_USB_ANYSEE is not set
+# CONFIG_DVB_TTUSB_BUDGET is not set
+# CONFIG_DVB_TTUSB_DEC is not set
+# CONFIG_DVB_CINERGYT2 is not set
+# CONFIG_DVB_SIANO_SMS1XXX is not set
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+# CONFIG_DVB_B2C2_FLEXCOP is not set
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# DVB-S (satellite) frontends
+#
+# CONFIG_DVB_CX24110 is not set
+# CONFIG_DVB_CX24123 is not set
+# CONFIG_DVB_MT312 is not set
+# CONFIG_DVB_S5H1420 is not set
+# CONFIG_DVB_STV0299 is not set
+# CONFIG_DVB_TDA8083 is not set
+# CONFIG_DVB_TDA10086 is not set
+# CONFIG_DVB_VES1X93 is not set
+# CONFIG_DVB_TUNER_ITD1000 is not set
+# CONFIG_DVB_TDA826X is not set
+# CONFIG_DVB_TUA6100 is not set
+
+#
+# DVB-T (terrestrial) frontends
+#
+# CONFIG_DVB_SP8870 is not set
+# CONFIG_DVB_SP887X is not set
+# CONFIG_DVB_CX22700 is not set
+# CONFIG_DVB_CX22702 is not set
+# CONFIG_DVB_DRX397XD is not set
+# CONFIG_DVB_L64781 is not set
+# CONFIG_DVB_TDA1004X is not set
+# CONFIG_DVB_NXT6000 is not set
+# CONFIG_DVB_MT352 is not set
+# CONFIG_DVB_ZL10353 is not set
+# CONFIG_DVB_DIB3000MB is not set
+# CONFIG_DVB_DIB3000MC is not set
+# CONFIG_DVB_DIB7000M is not set
+CONFIG_DVB_DIB7000P=m
+# CONFIG_DVB_TDA10048 is not set
+
+#
+# DVB-C (cable) frontends
+#
+# CONFIG_DVB_VES1820 is not set
+# CONFIG_DVB_TDA10021 is not set
+# CONFIG_DVB_TDA10023 is not set
+# CONFIG_DVB_STV0297 is not set
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+# CONFIG_DVB_NXT200X is not set
+# CONFIG_DVB_OR51211 is not set
+# CONFIG_DVB_OR51132 is not set
+# CONFIG_DVB_BCM3510 is not set
+# CONFIG_DVB_LGDT330X is not set
+# CONFIG_DVB_S5H1409 is not set
+# CONFIG_DVB_AU8522 is not set
+# CONFIG_DVB_S5H1411 is not set
+
+#
+# Digital terrestrial only tuners/PLL
+#
+# CONFIG_DVB_PLL is not set
+CONFIG_DVB_TUNER_DIB0070=m
+
+#
+# SEC control devices for DVB-S
+#
+# CONFIG_DVB_LNBP21 is not set
+# CONFIG_DVB_ISL6405 is not set
+# CONFIG_DVB_ISL6421 is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+CONFIG_FB_FOREIGN_ENDIAN=y
+CONFIG_FB_BOTH_ENDIAN=y
+# CONFIG_FB_BIG_ENDIAN is not set
+# CONFIG_FB_LITTLE_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_BACKLIGHT=y
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_TILEBLITTING=y
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_OMAP is not set
+CONFIG_FB_OMAP_BOOTLOADER_INIT=y
+CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=8
+CONFIG_FB_OMAP2=y
+CONFIG_FB_OMAP2_DEBUG=y
+# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
+CONFIG_FB_OMAP2_NUM_FBS=3
+
+#
+# OMAP2/3 Display Device Drivers
+#
+# CONFIG_PANEL_GENERIC is not set
+CONFIG_PANEL_ARCHOS_HDMI=y
+CONFIG_RES_480P=y
+# CONFIG_RES_576P is not set
+# CONFIG_RES_720P is not set
+# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
+# CONFIG_PANEL_N800 is not set
+# CONFIG_CTRL_BLIZZARD is not set
+CONFIG_PANEL_SAMSUNG_LMS480KC01=y
+CONFIG_PANEL_ARCHOS_EXTDAC=y
+# CONFIG_PANEL_TPO_WVGA48 is not set
+CONFIG_PANEL_CPT_WVGA48=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_ILI9320 is not set
+# CONFIG_LCD_VGG2432A4 is not set
+CONFIG_LCD_PLATFORM=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=y
+
+#
+# Display hardware drivers
+#
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=m
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+CONFIG_SOUND=m
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+# CONFIG_SND_DRIVERS is not set
+# CONFIG_SND_ARM is not set
+# CONFIG_SND_SPI is not set
+# CONFIG_SND_USB is not set
+CONFIG_SND_SOC=m
+CONFIG_SND_OMAP_SOC=m
+CONFIG_SND_OMAP_SOC_MCBSP=m
+CONFIG_SND_OMAP_SOC_ARCHOS=m
+CONFIG_SND_SOC_I2C_AND_SPI=m
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_WL1271=m
+CONFIG_SND_SOC_WM8985=m
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+CONFIG_USB_EHCI_HCD=m
+CONFIG_OMAP_EHCI_PHY_MODE=y
+# CONFIG_OMAP_EHCI_TLL_MODE is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+CONFIG_USB_MUSB_HDRC=m
+CONFIG_USB_MUSB_SOC=y
+
+#
+# OMAP 343x high speed USB support
+#
+# CONFIG_USB_MUSB_HOST is not set
+# CONFIG_USB_MUSB_PERIPHERAL is not set
+CONFIG_USB_MUSB_DUAL_ROLE=y
+# CONFIG_USB_MUSB_OTG is not set
+CONFIG_USB_GADGET_MUSB_HDRC=y
+CONFIG_USB_MUSB_HDRC_HCD=y
+# CONFIG_MUSB_PIO_ONLY is not set
+CONFIG_USB_INVENTRA_DMA=y
+CONFIG_MUSB_USE_SYSTEM_DMA_RX=y
+# CONFIG_USB_TI_CPPI_DMA is not set
+CONFIG_USB_MUSB_DEBUG=y
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+# CONFIG_USB_EZUSB is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_IUU is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_MOTOROLA is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_SPCP8X5 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+CONFIG_USB_SERIAL_OPTION=m
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_BLOCKDEV_STORAGE=m
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+CONFIG_USB_ANDROID=m
+CONFIG_USB_CDC_COMPOSITE=m
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+# CONFIG_MMC_EMBEDDED_SDIO is not set
+# CONFIG_MMC_PARANOID_SD_INIT is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_MMC_BLOCK_PARANOID_RESUME=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+CONFIG_MMC_OMAP_HS=m
+CONFIG_OMAP_HS_MMC1=y
+# CONFIG_OMAP_HS_MMC2 is not set
+# CONFIG_OMAP_HS_MMC3 is not set
+# CONFIG_TIWLAN_SDIO is not set
+# CONFIG_MMC_SPI is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_OMAP_DEBUG is not set
+# CONFIG_LEDS_OMAP is not set
+# CONFIG_LEDS_OMAP_PWM is not set
+# CONFIG_LEDS_PCA9532 is not set
+# CONFIG_LEDS_GPIO is not set
+# CONFIG_LEDS_PCA955X is not set
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGERS is not set
+CONFIG_SWITCH=y
+# CONFIG_SWITCH_GPIO is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+CONFIG_RTC_INTF_ALARM=y
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_DMADEVICES is not set
+
+#
+# Voltage and Current regulators
+#
+# CONFIG_REGULATOR is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_UIO is not set
+# CONFIG_MPU_BRIDGE is not set
+
+#
+# CBUS support
+#
+# CONFIG_CBUS is not set
+
+#
+# File systems
+#
+# CONFIG_EXT2_FS is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_UMODE=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_VFAT_NO_CREATE_WITH_LONGNAMES is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_YAFFS_FS=m
+CONFIG_YAFFS_YAFFS1=y
+# CONFIG_YAFFS_9BYTE_TAGS is not set
+# CONFIG_YAFFS_DOES_ECC is not set
+CONFIG_YAFFS_YAFFS2=y
+CONFIG_YAFFS_AUTO_YAFFS2=y
+# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
+# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
+# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
+CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
+# CONFIG_JFFS2_FS is not set
+CONFIG_UBIFS_FS=m
+# CONFIG_UBIFS_FS_XATTR is not set
+# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_ARCHOS_HIDDEN_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_HAVE_FTRACE=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+# CONFIG_FTRACE is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_MANAGER=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_GENERIC_FIND_FIRST_BIT is not set
+# CONFIG_GENERIC_FIND_NEXT_BIT is not set
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=m
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_LZO_COMPRESS=m
+CONFIG_LZO_DECOMPRESS=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/recipes/linux/linux-omap-archos-2.6.27.10-omap1/patch-archos-2.6.27-omap1.bz2 b/recipes/linux/linux-omap-archos-2.6.27.10-omap1/patch-archos-2.6.27-omap1.bz2
new file mode 100644
index 0000000000..c729618eaf
--- /dev/null
+++ b/recipes/linux/linux-omap-archos-2.6.27.10-omap1/patch-archos-2.6.27-omap1.bz2
Binary files differ
diff --git a/recipes/linux/linux-omap-archos_2.6.27.10-omap1.bb b/recipes/linux/linux-omap-archos_2.6.27.10-omap1.bb
new file mode 100644
index 0000000000..4f2da2b67e
--- /dev/null
+++ b/recipes/linux/linux-omap-archos_2.6.27.10-omap1.bb
@@ -0,0 +1,16 @@
+require linux.inc
+
+DESCRIPTION = "Archos 5 Linux kernel for OMAP processors"
+KERNEL_IMAGETYPE = "zImage"
+
+COMPATIBLE_MACHINE = "archos5it"
+#COMPATIBLE_MACHINE = "(archos5|archos5it)"
+
+PV = "2.6.27.10-omap1"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.27.tar.bz2 \
+ http://www.muru.com/linux/omap/patches/patch-2.6.27-omap1.bz2;patch=1 \
+ file://patch-archos-2.6.27-omap1.bz2;patch=1 \
+ file://defconfig"
+
+S = "${WORKDIR}/linux-2.6.27"
diff --git a/recipes/linux/linux-omap-zoomsync-2.6.32/omapzoom2/defconfig b/recipes/linux/linux-omap-zoomsync-2.6.32/omapzoom2/defconfig
index f3edfd905a..2560965609 100644
--- a/recipes/linux/linux-omap-zoomsync-2.6.32/omapzoom2/defconfig
+++ b/recipes/linux/linux-omap-zoomsync-2.6.32/omapzoom2/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.32-rc7
-# Fri Jan 8 12:29:00 2010
+# Linux kernel version: 2.6.32.7
+# Thu Mar 18 21:35:16 2010
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -29,6 +29,7 @@ CONFIG_CONSTRUCTORS=y
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
@@ -49,11 +50,13 @@ CONFIG_TASK_IO_ACCOUNTING=y
#
CONFIG_TREE_RCU=y
# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_TINY_RCU is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=32
# CONFIG_RCU_FANOUT_EXACT is not set
# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_IKCONFIG is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=14
CONFIG_GROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
@@ -123,21 +126,48 @@ CONFIG_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_BLOCK=y
CONFIG_LBDAF=y
-# CONFIG_BLK_DEV_BSG is not set
+CONFIG_BLK_DEV_BSG=y
# CONFIG_BLK_DEV_INTEGRITY is not set
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_SPIN_UNLOCK is not set
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_READ_UNLOCK is not set
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_WRITE_UNLOCK is not set
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
CONFIG_FREEZER=y
#
@@ -166,6 +196,7 @@ CONFIG_MMU=y
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_DOVE is not set
# CONFIG_ARCH_KIRKWOOD is not set
# CONFIG_ARCH_LOKI is not set
# CONFIG_ARCH_MV78XX0 is not set
@@ -188,6 +219,7 @@ CONFIG_MMU=y
# CONFIG_ARCH_DAVINCI is not set
CONFIG_ARCH_OMAP=y
# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_U8500 is not set
#
# TI OMAP Implementations
@@ -201,20 +233,21 @@ CONFIG_ARCH_OMAP3=y
#
# OMAP Feature Selections
#
-# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
-# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
# CONFIG_OMAP_SMARTREFLEX is not set
+# CONFIG_TWL5030_GLITCH_FIX is not set
+CONFIG_OMAP_VOLT_VPFORCEUPDATE=y
+# CONFIG_OMAP_VOLT_VCBYPASS is not set
# CONFIG_OMAP_RESET_CLOCKS is not set
CONFIG_OMAP_MUX=y
CONFIG_OMAP_MUX_DEBUG=y
CONFIG_OMAP_MUX_WARNINGS=y
CONFIG_OMAP_MCBSP=y
-# CONFIG_OMAP_MBOX_FWK is not set
+CONFIG_OMAP_MBOX_FWK=y
CONFIG_OMAP_IOMMU=y
# CONFIG_OMAP_MPU_TIMER is not set
CONFIG_OMAP_32K_TIMER=y
-# CONFIG_OMAP3_DEBOBS is not set
# CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set
+# CONFIG_OMAP3_DEBOBS is not set
CONFIG_OMAP_32K_TIMER_HZ=128
CONFIG_OMAP_DM_TIMER=y
# CONFIG_OMAP_LL_DEBUG_UART1 is not set
@@ -222,10 +255,11 @@ CONFIG_OMAP_DM_TIMER=y
# CONFIG_OMAP_LL_DEBUG_UART3 is not set
CONFIG_OMAP_LL_DEBUG_NONE=y
# CONFIG_OMAP_PM_NONE is not set
-CONFIG_OMAP_PM_NOOP=y
-# CONFIG_OMAP_PM_SRF is not set
+# CONFIG_OMAP_PM_NOOP is not set
+CONFIG_OMAP_PM_SRF=y
CONFIG_ARCH_OMAP34XX=y
CONFIG_ARCH_OMAP3430=y
+CONFIG_OMAP_PACKAGE_CBB=y
#
# OMAP Board Type
@@ -234,18 +268,22 @@ CONFIG_ARCH_OMAP3430=y
# CONFIG_MACH_OMAP_LDP is not set
# CONFIG_MACH_OVERO is not set
# CONFIG_MACH_OMAP3EVM is not set
-# CONFIG_WLAN_1273 is not set
+CONFIG_WLAN_1273=y
# CONFIG_MACH_OMAP3517EVM is not set
# CONFIG_MACH_OMAP3_PANDORA is not set
+# CONFIG_MACH_OMAP3_TOUCHBOOK is not set
# CONFIG_MACH_OMAP_3430SDP is not set
# CONFIG_MACH_NOKIA_RX51 is not set
CONFIG_MACH_OMAP_ZOOM2=y
-# CONFIG_MACH_CM_T35 is not set
# CONFIG_MACH_OMAP_ZOOM3 is not set
-# CONFIG_WIFI_CONTROL_FUNC is not set
-# CONFIG_TIWLAN_SDIO is not set
-# CONFIG_MACH_OMAP_3630SDP is not set
+CONFIG_WIFI_CONTROL_FUNC=y
+CONFIG_TIWLAN_SDIO=y
+CONFIG_TIWLAN_MMC_CONTROLLER=3
+# CONFIG_MACH_CM_T35 is not set
# CONFIG_MACH_IGEP0020 is not set
+# CONFIG_MACH_OMAP_3630SDP is not set
+# CONFIG_OMAP3_EMU is not set
+# CONFIG_OMAP3_SDRC_AC_TIMING is not set
#
# Processor Type
@@ -268,7 +306,7 @@ CONFIG_CPU_CP15_MMU=y
# Processor Features
#
CONFIG_ARM_THUMB=y
-# CONFIG_ARM_THUMBEE is not set
+CONFIG_ARM_THUMBEE=y
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_DISABLE is not set
# CONFIG_CPU_BPREDICT_DISABLE is not set
@@ -297,9 +335,9 @@ CONFIG_VMSPLIT_3G=y
# CONFIG_VMSPLIT_2G is not set
# CONFIG_VMSPLIT_1G is not set
CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT=y
CONFIG_HZ=128
# CONFIG_THUMB2_KERNEL is not set
CONFIG_AEABI=y
@@ -318,8 +356,6 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=0
CONFIG_VIRT_TO_BUS=y
-CONFIG_HAVE_MLOCK=y
-CONFIG_HAVE_MLOCKED_PAGE_BIT=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
# CONFIG_LEDS is not set
@@ -333,7 +369,8 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE=" debug "
# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
#
# CPU Power Management
@@ -372,22 +409,19 @@ CONFIG_NEON=y
CONFIG_BINFMT_ELF=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_AOUT=m
CONFIG_BINFMT_MISC=y
#
# Power management options
#
CONFIG_PM=y
-CONFIG_PM_DEBUG=y
-CONFIG_PM_VERBOSE=y
-CONFIG_CAN_PM_TRACE=y
+# CONFIG_PM_DEBUG is not set
CONFIG_PM_SLEEP=y
CONFIG_SUSPEND=y
-# CONFIG_PM_TEST_SUSPEND is not set
CONFIG_SUSPEND_FREEZER=y
-# CONFIG_APM_EMULATION is not set
-# CONFIG_PM_RUNTIME is not set
+CONFIG_APM_EMULATION=y
+CONFIG_PM_RUNTIME=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_NET=y
@@ -395,7 +429,7 @@ CONFIG_NET=y
# Networking options
#
CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
+CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
CONFIG_XFRM_USER=y
@@ -440,10 +474,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_RDS is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
+CONFIG_STP=m
+CONFIG_BRIDGE=m
# CONFIG_NET_DSA is not set
-# CONFIG_VLAN_8021Q is not set
+CONFIG_VLAN_8021Q=m
+# CONFIG_VLAN_8021Q_GVRP is not set
# CONFIG_DECNET is not set
+CONFIG_LLC=m
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
@@ -453,7 +490,39 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_WAN_ROUTER is not set
# CONFIG_PHONET is not set
# CONFIG_IEEE802154 is not set
-# CONFIG_NET_SCHED is not set
+CONFIG_NET_SCHED=y
+
+#
+# Queueing/Scheduling
+#
+# CONFIG_NET_SCH_CBQ is not set
+# CONFIG_NET_SCH_HTB is not set
+# CONFIG_NET_SCH_HFSC is not set
+# CONFIG_NET_SCH_PRIO is not set
+# CONFIG_NET_SCH_MULTIQ is not set
+# CONFIG_NET_SCH_RED is not set
+# CONFIG_NET_SCH_SFQ is not set
+# CONFIG_NET_SCH_TEQL is not set
+# CONFIG_NET_SCH_TBF is not set
+# CONFIG_NET_SCH_GRED is not set
+# CONFIG_NET_SCH_DSMARK is not set
+# CONFIG_NET_SCH_NETEM is not set
+# CONFIG_NET_SCH_DRR is not set
+
+#
+# Classification
+#
+# CONFIG_NET_CLS_BASIC is not set
+# CONFIG_NET_CLS_TCINDEX is not set
+# CONFIG_NET_CLS_ROUTE4 is not set
+# CONFIG_NET_CLS_FW is not set
+# CONFIG_NET_CLS_U32 is not set
+# CONFIG_NET_CLS_RSVP is not set
+# CONFIG_NET_CLS_RSVP6 is not set
+# CONFIG_NET_CLS_FLOW is not set
+# CONFIG_NET_EMATCH is not set
+# CONFIG_NET_CLS_ACT is not set
+CONFIG_NET_SCH_FIFO=y
# CONFIG_DCB is not set
#
@@ -463,11 +532,49 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_HAMRADIO is not set
# CONFIG_CAN is not set
# CONFIG_IRDA is not set
-# CONFIG_BT is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIBTUSB=m
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_BT_MRVL=m
+CONFIG_BT_MRVL_SDIO=m
# CONFIG_AF_RXRPC is not set
-# CONFIG_WIRELESS is not set
-# CONFIG_WIMAX is not set
-# CONFIG_RFKILL is not set
+CONFIG_WIRELESS=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WEXT_CORE=y
+CONFIG_WEXT_PROC=y
+CONFIG_WEXT_PRIV=y
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT_SYSFS=y
+# CONFIG_LIB80211 is not set
+
+#
+# CFG80211 needs to be enabled for MAC80211
+#
+CONFIG_WIMAX=m
+CONFIG_WIMAX_DEBUG_LEVEL=8
+CONFIG_RFKILL=m
+CONFIG_RFKILL_LEDS=y
+CONFIG_RFKILL_INPUT=y
# CONFIG_NET_9P is not set
#
@@ -477,11 +584,14 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
#
# Generic Driver Options
#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_DEVTMPFS is not set
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
+CONFIG_FW_LOADER=m
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
@@ -560,6 +670,7 @@ CONFIG_MTD_NAND_VERIFY_WRITE=y
CONFIG_MTD_NAND_OMAP2=y
CONFIG_MTD_NAND_OMAP_PREFETCH=y
# CONFIG_MTD_NAND_OMAP_PREFETCH_DMA is not set
+# CONFIG_MTD_NAND_OMAP_PREFETCH_IRQ is not set
CONFIG_MTD_NAND_IDS=y
# CONFIG_MTD_NAND_DISKONCHIP is not set
# CONFIG_MTD_NAND_NANDSIM is not set
@@ -581,6 +692,7 @@ CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_DRBD is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=y
@@ -591,9 +703,13 @@ CONFIG_BLK_DEV_RAM_SIZE=16384
# CONFIG_ATA_OVER_ETH is not set
# CONFIG_MG_DISK is not set
CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
# CONFIG_ICS932S401 is not set
# CONFIG_ENCLOSURE_SERVICES is not set
+CONFIG_CS5535_MFGPT_DEFAULT_IRQ=7
# CONFIG_ISL29003 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_TI_DAC7512 is not set
# CONFIG_C2PORT is not set
#
@@ -604,6 +720,14 @@ CONFIG_MISC_DEVICES=y
# CONFIG_EEPROM_LEGACY is not set
# CONFIG_EEPROM_MAX6875 is not set
# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IWMC3200TOP is not set
+
+#
+# Texas Instruments shared transport line discipline
+#
+# CONFIG_TI_ST is not set
+# CONFIG_ST_BT is not set
+# CONFIG_ST_FM is not set
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
@@ -626,10 +750,10 @@ CONFIG_BLK_DEV_SD=y
# CONFIG_BLK_DEV_SR is not set
# CONFIG_CHR_DEV_SG is not set
# CONFIG_CHR_DEV_SCH is not set
-# CONFIG_SCSI_MULTI_LUN is not set
+CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_SCAN_ASYNC=y
CONFIG_SCSI_WAIT_SCAN=m
#
@@ -638,6 +762,7 @@ CONFIG_SCSI_WAIT_SCAN=m
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
CONFIG_SCSI_LOWLEVEL=y
@@ -700,12 +825,14 @@ CONFIG_SMSC911X=y
CONFIG_NETDEV_1000=y
CONFIG_NETDEV_10000=y
CONFIG_WLAN=y
-# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
#
-# Enable WiMAX (Networking options) to see the WiMAX drivers
+# WiMAX Wireless Broadband devices
#
+# CONFIG_WIMAX_I2400M_USB is not set
+# CONFIG_WIMAX_I2400M_SDIO is not set
#
# USB Network Adapters
@@ -715,6 +842,7 @@ CONFIG_WLAN=y
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set
+# CONFIG_USB_HSO is not set
# CONFIG_WAN is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
@@ -730,6 +858,7 @@ CONFIG_WLAN=y
CONFIG_INPUT=y
# CONFIG_INPUT_FF_MEMLESS is not set
# CONFIG_INPUT_POLLDEV is not set
+# CONFIG_INPUT_SPARSEKMAP is not set
#
# Userland interfaces
@@ -738,6 +867,7 @@ CONFIG_INPUT=y
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_APMPOWER is not set
#
# Input Device Drivers
@@ -766,6 +896,7 @@ CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_DYNAPRO is not set
# CONFIG_TOUCHSCREEN_EETI is not set
# CONFIG_TOUCHSCREEN_FUJITSU is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
@@ -792,6 +923,7 @@ CONFIG_SERIO=y
CONFIG_SERIO_SERPORT=y
CONFIG_SERIO_LIBPS2=y
# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO_ALTERA_PS2 is not set
# CONFIG_GAMEPORT is not set
#
@@ -869,7 +1001,6 @@ CONFIG_I2C_OMAP=y
#
# Miscellaneous I2C Chip support
#
-# CONFIG_DS1682 is not set
# CONFIG_SENSORS_TSL2550 is not set
# CONFIG_TWL4030_MADC is not set
# CONFIG_I2C_DEBUG_CORE is not set
@@ -886,6 +1017,7 @@ CONFIG_SPI_MASTER=y
# CONFIG_SPI_BITBANG is not set
# CONFIG_SPI_GPIO is not set
CONFIG_SPI_OMAP24XX=y
+# CONFIG_SPI_XILINX is not set
#
# SPI Protocol Masters
@@ -951,7 +1083,8 @@ CONFIG_W1_CON=y
# CONFIG_W1_SLAVE_BQ27000 is not set
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
-# CONFIG_PDA_POWER is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
# CONFIG_BATTERY_DS2760 is not set
# CONFIG_BATTERY_DS2782 is not set
# CONFIG_BATTERY_BQ27x00 is not set
@@ -982,20 +1115,21 @@ CONFIG_SSB_POSSIBLE=y
#
# Multifunction device drivers
#
-# CONFIG_MFD_CORE is not set
+CONFIG_MFD_CORE=y
# CONFIG_MFD_SM501 is not set
# CONFIG_MFD_ASIC3 is not set
# CONFIG_HTC_EGPIO is not set
# CONFIG_HTC_PASIC3 is not set
# CONFIG_TPS65010 is not set
CONFIG_TWL4030_CORE=y
-# CONFIG_TWL4030_POWER is not set
-# CONFIG_TWL4030_CODEC is not set
+CONFIG_TWL4030_POWER=y
+CONFIG_TWL4030_CODEC=y
# CONFIG_MFD_TMIO is not set
# CONFIG_MFD_T7L66XB is not set
# CONFIG_MFD_TC6387XB is not set
# CONFIG_MFD_TC6393XB is not set
# CONFIG_PMIC_DA903X is not set
+# CONFIG_PMIC_ADP5520 is not set
# CONFIG_MFD_WM8400 is not set
# CONFIG_MFD_WM831X is not set
# CONFIG_MFD_WM8350_I2C is not set
@@ -1003,6 +1137,8 @@ CONFIG_TWL4030_CORE=y
# CONFIG_MFD_MC13783 is not set
# CONFIG_AB3100_CORE is not set
# CONFIG_EZX_PCAP is not set
+# CONFIG_MFD_88PM8607 is not set
+# CONFIG_AB4500_CORE is not set
CONFIG_REGULATOR=y
# CONFIG_REGULATOR_DEBUG is not set
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
@@ -1133,7 +1269,7 @@ CONFIG_VIDEO_OMAP34XX_ISP_PREVIEWER=y
CONFIG_VIDEO_OMAP34XX_ISP_RESIZER=y
# CONFIG_SOC_CAMERA is not set
CONFIG_V4L_USB_DRIVERS=y
-# CONFIG_USB_VIDEO_CLASS is not set
+CONFIG_USB_VIDEO_CLASS=y
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
CONFIG_USB_GSPCA=m
# CONFIG_USB_M5602 is not set
@@ -1148,6 +1284,7 @@ CONFIG_USB_GSPCA=m
# CONFIG_USB_GSPCA_OV519 is not set
# CONFIG_USB_GSPCA_OV534 is not set
# CONFIG_USB_GSPCA_PAC207 is not set
+# CONFIG_USB_GSPCA_PAC7302 is not set
# CONFIG_USB_GSPCA_PAC7311 is not set
# CONFIG_USB_GSPCA_SN9C20X is not set
# CONFIG_USB_GSPCA_SONIXB is not set
@@ -1161,6 +1298,7 @@ CONFIG_USB_GSPCA=m
# CONFIG_USB_GSPCA_SQ905 is not set
# CONFIG_USB_GSPCA_SQ905C is not set
# CONFIG_USB_GSPCA_STK014 is not set
+# CONFIG_USB_GSPCA_STV0680 is not set
# CONFIG_USB_GSPCA_SUNPLUS is not set
# CONFIG_USB_GSPCA_T613 is not set
# CONFIG_USB_GSPCA_TV8532 is not set
@@ -1185,6 +1323,7 @@ CONFIG_RADIO_ADAPTERS=y
# CONFIG_RADIO_SI470X is not set
# CONFIG_USB_MR800 is not set
# CONFIG_RADIO_TEA5764 is not set
+# CONFIG_RADIO_TEF6862 is not set
CONFIG_DAB=y
# CONFIG_USB_DABUSB is not set
@@ -1217,6 +1356,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y
#
# CONFIG_FB_UVESA is not set
# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_TMIO is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FB_METRONOME is not set
# CONFIG_FB_MB862XX is not set
@@ -1229,6 +1369,7 @@ CONFIG_OMAP2_VRAM_SIZE=16
CONFIG_OMAP2_DSS_DEBUG_SUPPORT=y
# CONFIG_OMAP2_DSS_RFBI is not set
CONFIG_OMAP2_DSS_VENC=y
+CONFIG_OMAP2_DSS_HDMI=y
# CONFIG_OMAP2_DSS_SDI is not set
# CONFIG_OMAP2_DSS_DSI is not set
# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
@@ -1242,9 +1383,7 @@ CONFIG_FB_OMAP2_NUM_FBS=3
# OMAP2/3 Display Device Drivers
#
CONFIG_PANEL_GENERIC=y
-# CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C is not set
# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
-# CONFIG_PANEL_SHARP_LQ043T1DG01 is not set
CONFIG_PANEL_NEC_NL8048HL11_01B=y
# CONFIG_SIL9022 is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
@@ -1268,9 +1407,16 @@ CONFIG_BACKLIGHT_GENERIC=y
#
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE is not set
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
-# CONFIG_LOGO is not set
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_SOUND=y
# CONFIG_SOUND_OSS_CORE is not set
CONFIG_SND=y
@@ -1349,11 +1495,12 @@ CONFIG_USB_HID=y
# CONFIG_HID_SMARTJOYPLUS is not set
# CONFIG_HID_TOPSEED is not set
# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_WACOM is not set
# CONFIG_HID_ZEROPLUS is not set
CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB_ARCH_HAS_EHCI=y
CONFIG_USB=y
CONFIG_USB_DEBUG=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
@@ -1376,6 +1523,7 @@ CONFIG_USB_MON=y
# USB Host Controller Drivers
#
# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_EHCI_HCD is not set
# CONFIG_USB_OXU210HP_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1760_HCD is not set
@@ -1439,7 +1587,66 @@ CONFIG_USB_STORAGE=m
#
# USB port drivers
#
-# CONFIG_USB_SERIAL is not set
+CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP210X=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_IUU=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_OTI6858=m
+CONFIG_USB_SERIAL_QUALCOMM=m
+CONFIG_USB_SERIAL_SPCP8X5=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIEMENS_MPI=m
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_SYMBOL=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_SERIAL_OPTICON=m
+CONFIG_USB_SERIAL_DEBUG=m
#
# USB Miscellaneous drivers
@@ -1465,7 +1672,7 @@ CONFIG_USB_SISUSBVGA_CON=y
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB_VST is not set
+CONFIG_USB_VST=m
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_DEBUG=y
CONFIG_USB_GADGET_DEBUG_FILES=y
@@ -1501,10 +1708,12 @@ CONFIG_USB_ETH_EEM=y
CONFIG_USB_GADGETFS=m
CONFIG_USB_FILE_STORAGE=m
CONFIG_USB_FILE_STORAGE_TEST=y
+# CONFIG_USB_MASS_STORAGE is not set
CONFIG_USB_G_SERIAL=m
CONFIG_USB_MIDI_GADGET=m
CONFIG_USB_G_PRINTER=m
CONFIG_USB_CDC_COMPOSITE=m
+# CONFIG_USB_G_MULTI is not set
#
# OTG and related infrastructure
@@ -1512,11 +1721,13 @@ CONFIG_USB_CDC_COMPOSITE=m
CONFIG_USB_OTG_UTILS=y
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_ISP1301_OMAP is not set
+# CONFIG_USB_ULPI is not set
CONFIG_TWL4030_USB=y
# CONFIG_NOP_USB_XCEIV is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_UNSAFE_RESUME=y
+CONFIG_MMC_EMBEDDED_SDIO=y
#
# MMC/SD/SDIO Card Drivers
@@ -1621,7 +1832,9 @@ CONFIG_RTC_DRV_TWL4030=y
# CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T35 is not set
# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
# CONFIG_RTC_DRV_V3020 is not set
#
@@ -1634,15 +1847,48 @@ CONFIG_RTC_DRV_TWL4030=y
#
# TI VLYNQ
#
-# CONFIG_STAGING is not set
-CONFIG_MPU_BRIDGE=y
-CONFIG_BRIDGE_MEMPOOL_SIZE=0x600000
-# CONFIG_BRIDGE_DEBUG is not set
+CONFIG_STAGING=y
+# CONFIG_STAGING_EXCLUDE_BUILD is not set
+# CONFIG_USB_IP_COMMON is not set
+# CONFIG_PRISM2_USB is not set
+# CONFIG_ECHO is not set
+# CONFIG_COMEDI is not set
+# CONFIG_ASUS_OLED is not set
+# CONFIG_INPUT_MIMIO is not set
+# CONFIG_TRANZPORT is not set
+
+#
+# Qualcomm MSM Camera And Video
+#
#
-# Bridge Hacking
+# Camera Sensor Selection
#
-# CONFIG_BRIDGE_CHECK_ALIGN_128 is not set
+# CONFIG_INPUT_GPIO is not set
+# CONFIG_DST is not set
+# CONFIG_POHMELFS is not set
+# CONFIG_PLAN9AUTH is not set
+# CONFIG_LINE6_USB is not set
+# CONFIG_USB_SERIAL_QUATECH2 is not set
+# CONFIG_USB_SERIAL_QUATECH_USB2 is not set
+# CONFIG_VT6656 is not set
+# CONFIG_FB_UDL is not set
+
+#
+# RAR Register Driver
+#
+# CONFIG_RAR_REGISTER is not set
+# CONFIG_IIO is not set
+# CONFIG_RAMZSWAP is not set
+# CONFIG_BATMAN_ADV is not set
+# CONFIG_STRIP is not set
+CONFIG_MPU_BRIDGE=y
+# CONFIG_BRIDGE_DVFS is not set
+CONFIG_BRIDGE_MEMPOOL_SIZE=0x600000
+# CONFIG_BRIDGE_DEBUG is not set
+# CONFIG_BRIDGE_WDT3 is not set
+# CONFIG_BRIDGE_RECOVERY is not set
+# CONFIG_BRIDGE_CACHE_LINE_CHECK is not set
#
# Bridge Notifications
@@ -1657,6 +1903,7 @@ CONFIG_BRIDGE_MEMPOOL_SIZE=0x600000
#
# File systems
#
+CONFIG_FS_JOURNAL_INFO=y
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
@@ -1689,6 +1936,7 @@ CONFIG_QUOTACTL=y
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set
+CONFIG_GENERIC_ACL=y
#
# Caches
@@ -1719,7 +1967,7 @@ CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
+CONFIG_TMPFS_POSIX_ACL=y
# CONFIG_HUGETLB_PAGE is not set
# CONFIG_CONFIGFS_FS is not set
CONFIG_MISC_FILESYSTEMS=y
@@ -1852,6 +2100,7 @@ CONFIG_TIMER_STATS=y
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_KMEMLEAK is not set
+CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
@@ -1879,12 +2128,14 @@ CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
# CONFIG_PAGE_POISONING is not set
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_TRACING_SUPPORT=y
CONFIG_FTRACE=y
# CONFIG_FUNCTION_TRACER is not set
# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
# CONFIG_SCHED_TRACER is not set
# CONFIG_ENABLE_DEFAULT_TRACERS is not set
# CONFIG_BOOT_TRACER is not set
@@ -1904,7 +2155,9 @@ CONFIG_ARM_UNWIND=y
# CONFIG_DEBUG_ERRORS is not set
# CONFIG_DEBUG_STACK_USAGE is not set
CONFIG_DEBUG_LL=y
+# CONFIG_EARLY_PRINTK is not set
# CONFIG_DEBUG_ICEDCC is not set
+# CONFIG_OC_ETM is not set
#
# Security options
@@ -1912,7 +2165,11 @@ CONFIG_DEBUG_LL=y
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
CONFIG_CRYPTO=y
#
@@ -2018,7 +2275,7 @@ CONFIG_CRYPTO_HW=y
CONFIG_BITREVERSE=y
CONFIG_GENERIC_FIND_LAST_BIT=y
CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
+CONFIG_CRC16=m
CONFIG_CRC_T10DIF=y
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
diff --git a/recipes/linux/linux-omap-zoomsync-2.6.32/omapzoom36x/defconfig b/recipes/linux/linux-omap-zoomsync-2.6.32/omapzoom36x/defconfig
new file mode 100644
index 0000000000..4216f96687
--- /dev/null
+++ b/recipes/linux/linux-omap-zoomsync-2.6.32/omapzoom36x/defconfig
@@ -0,0 +1,2167 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.32
+# Fri Jan 22 00:28:18 2010
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_TINY_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_COMPAT_BRK=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+# CONFIG_SLOW_WORK is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS is not set
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_SPIN_UNLOCK is not set
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_READ_UNLOCK is not set
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_WRITE_UNLOCK is not set
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_DOVE is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+CONFIG_ARCH_OMAP=y
+# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_U8500 is not set
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP_OTG=y
+# CONFIG_ARCH_OMAP1 is not set
+# CONFIG_ARCH_OMAP2 is not set
+CONFIG_ARCH_OMAP3=y
+# CONFIG_ARCH_OMAP4 is not set
+
+#
+# OMAP Feature Selections
+#
+CONFIG_OMAP_SMARTREFLEX=y
+# CONFIG_OMAP_SMARTREFLEX_TESTING is not set
+CONFIG_OMAP_RESET_CLOCKS=y
+CONFIG_OMAP_MUX=y
+CONFIG_OMAP_MUX_DEBUG=y
+CONFIG_OMAP_MUX_WARNINGS=y
+CONFIG_OMAP_MCBSP=y
+# CONFIG_OMAP_MBOX_FWK is not set
+CONFIG_OMAP_IOMMU=y
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+# CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set
+# CONFIG_OMAP3_DEBOBS is not set
+CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_DM_TIMER=y
+# CONFIG_OMAP_LL_DEBUG_UART1 is not set
+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
+# CONFIG_OMAP_LL_DEBUG_UART3 is not set
+CONFIG_OMAP_LL_DEBUG_NONE=y
+# CONFIG_OMAP_PM_NONE is not set
+# CONFIG_OMAP_PM_NOOP is not set
+CONFIG_OMAP_PM_SRF=y
+CONFIG_ARCH_OMAP34XX=y
+CONFIG_ARCH_OMAP3430=y
+CONFIG_OMAP_PACKAGE_CBP=y
+
+#
+# OMAP Board Type
+#
+# CONFIG_MACH_OMAP3_BEAGLE is not set
+# CONFIG_MACH_OMAP_LDP is not set
+# CONFIG_MACH_OVERO is not set
+# CONFIG_MACH_OMAP3EVM is not set
+CONFIG_WIFI_CONTROL_FUNC=y
+CONFIG_TIWLAN_SDIO=y
+CONFIG_TIWLAN_MMC_CONTROLLER=3
+CONFIG_WLAN_1273=y
+# CONFIG_MACH_OMAP3517EVM is not set
+# CONFIG_MACH_OMAP3_PANDORA is not set
+# CONFIG_MACH_OMAP3_TOUCHBOOK is not set
+# CONFIG_MACH_OMAP_3430SDP is not set
+# CONFIG_MACH_NOKIA_RX51 is not set
+# CONFIG_MACH_OMAP_ZOOM2 is not set
+CONFIG_MACH_OMAP_ZOOM3=y
+# CONFIG_MACH_CM_T35 is not set
+# CONFIG_MACH_IGEP0020 is not set
+# CONFIG_MACH_OMAP_3630SDP is not set
+# CONFIG_OMAP3_EMU is not set
+# CONFIG_OMAP3_SDRC_AC_TIMING is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_32v6K=y
+CONFIG_CPU_V7=y
+CONFIG_CPU_32v7=y
+CONFIG_CPU_ABRT_EV7=y
+CONFIG_CPU_PABRT_V7=y
+CONFIG_CPU_CACHE_V7=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V7=y
+CONFIG_CPU_HAS_ASID=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_ARM_THUMBEE is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+CONFIG_HAS_TLS_REG=y
+CONFIG_ARM_L1_CACHE_SHIFT=6
+# CONFIG_ARM_ERRATA_430973 is not set
+# CONFIG_ARM_ERRATA_458693 is not set
+# CONFIG_ARM_ERRATA_460075 is not set
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=128
+# CONFIG_THUMB2_KERNEL is not set
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+CONFIG_HIGHMEM=y
+# CONFIG_HIGHPTE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="root=/dev/nfs nfsroot=192.168.0.1:/home/user/buildroot ip=192.168.0.2:192.168.0.1:192.168.0.1:255.255.255.0:tgt:eth0:off rw console=ttyS2,115200n8"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# CPU Power Management
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_VFP=y
+CONFIG_VFPv3=y
+CONFIG_NEON=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_DEBUG=y
+CONFIG_PM_VERBOSE=y
+CONFIG_CAN_PM_TRACE=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+# CONFIG_PM_TEST_SUSPEND is not set
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_APM_EMULATION is not set
+# CONFIG_PM_RUNTIME is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=y
+# CONFIG_XFRM_SUB_POLICY is not set
+CONFIG_XFRM_MIGRATE=y
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=y
+CONFIG_NET_KEY_MIGRATE=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+# CONFIG_BT_BNEP is not set
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_BT_MRVL is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_WIRELESS=y
+# CONFIG_CFG80211 is not set
+# CONFIG_LIB80211 is not set
+
+#
+# CFG80211 needs to be enabled for MAC80211
+#
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_OMAP2=y
+CONFIG_MTD_NAND_OMAP_PREFETCH=y
+# CONFIG_MTD_NAND_OMAP_PREFETCH_DMA is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_DRBD is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+CONFIG_CS5535_MFGPT_DEFAULT_IRQ=7
+# CONFIG_ISL29003 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_TI_DAC7512 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IWMC3200TOP is not set
+
+#
+# Texas Instruments shared transport line discipline
+#
+CONFIG_TI_ST=m
+CONFIG_ST_BT=m
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+CONFIG_SMSC_PHY=y
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_ETHOC is not set
+# CONFIG_SMC911X is not set
+CONFIG_SMSC911X=y
+# CONFIG_DNET is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851 is not set
+# CONFIG_KS8851_MLL is not set
+CONFIG_NETDEV_1000=y
+CONFIG_NETDEV_10000=y
+CONFIG_WLAN=y
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+# CONFIG_INPUT_SPARSEKMAP is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_QT2160 is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+CONFIG_KEYBOARD_TWL4030=y
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
+# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_DYNAPRO is not set
+# CONFIG_TOUCHSCREEN_EETI is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MCS5000 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI=y
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_TOUCHSCREEN_W90X900 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO_ALTERA_PS2 is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=32
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DETECT_IRQ=y
+CONFIG_SERIAL_8250_RSA=y
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_OMAP is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_OMAP=y
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_OMAP24XX=y
+# CONFIG_SPI_XILINX is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+CONFIG_GPIO_TWL4030=y
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+CONFIG_W1=y
+CONFIG_W1_CON=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+# CONFIG_W1_MASTER_DS2482 is not set
+# CONFIG_W1_MASTER_DS1WM is not set
+# CONFIG_W1_MASTER_GPIO is not set
+# CONFIG_HDQ_MASTER_OMAP is not set
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2431 is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+# CONFIG_W1_SLAVE_DS2760 is not set
+# CONFIG_W1_SLAVE_BQ27000 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_DS2782 is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_BATTERY_MAX17040 is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_OMAP_WATCHDOG=y
+# CONFIG_TWL4030_WATCHDOG is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+CONFIG_MFD_CORE=y
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TPS65010 is not set
+CONFIG_TWL4030_CORE=y
+CONFIG_TWL4030_POWER=y
+CONFIG_TWL4030_CODEC=y
+# CONFIG_TWL4030_MADC is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_MFD_88PM8607 is not set
+# CONFIG_AB4500_CORE is not set
+CONFIG_REGULATOR=y
+# CONFIG_REGULATOR_DEBUG is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_REGULATOR_MAX1586 is not set
+CONFIG_REGULATOR_TWL4030=y
+# CONFIG_REGULATOR_LP3971 is not set
+# CONFIG_REGULATOR_TPS65023 is not set
+# CONFIG_REGULATOR_TPS6507X is not set
+CONFIG_MEDIA_SUPPORT=y
+
+#
+# Multimedia core support
+#
+CONFIG_VIDEO_DEV=y
+CONFIG_VIDEO_V4L2_COMMON=y
+# CONFIG_VIDEO_ALLOW_V4L1 is not set
+CONFIG_VIDEO_V4L1_COMPAT=y
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_MEDIA=y
+
+#
+# Multimedia drivers
+#
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=y
+# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=y
+CONFIG_MEDIA_TUNER_TDA8290=y
+CONFIG_MEDIA_TUNER_TDA9887=y
+CONFIG_MEDIA_TUNER_TEA5761=y
+CONFIG_MEDIA_TUNER_TEA5767=y
+CONFIG_MEDIA_TUNER_MT20XX=y
+CONFIG_MEDIA_TUNER_XC2028=y
+CONFIG_MEDIA_TUNER_XC5000=y
+CONFIG_MEDIA_TUNER_MC44S803=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEOBUF_GEN=y
+CONFIG_VIDEOBUF_DMA_SG=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
+
+#
+# Encoders/decoders and other helper chips
+#
+
+#
+# Audio decoders
+#
+# CONFIG_VIDEO_TVAUDIO is not set
+# CONFIG_VIDEO_TDA7432 is not set
+# CONFIG_VIDEO_TDA9840 is not set
+# CONFIG_VIDEO_TDA9875 is not set
+# CONFIG_VIDEO_TEA6415C is not set
+# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_MSP3400 is not set
+# CONFIG_VIDEO_CS5345 is not set
+# CONFIG_VIDEO_CS53L32A is not set
+# CONFIG_VIDEO_M52790 is not set
+# CONFIG_VIDEO_TLV320AIC23B is not set
+# CONFIG_VIDEO_WM8775 is not set
+# CONFIG_VIDEO_WM8739 is not set
+# CONFIG_VIDEO_VP27SMPX is not set
+
+#
+# RDS decoders
+#
+# CONFIG_VIDEO_SAA6588 is not set
+
+#
+# Video decoders
+#
+# CONFIG_VIDEO_ADV7180 is not set
+# CONFIG_VIDEO_BT819 is not set
+# CONFIG_VIDEO_BT856 is not set
+# CONFIG_VIDEO_BT866 is not set
+# CONFIG_VIDEO_KS0127 is not set
+# CONFIG_VIDEO_OV7670 is not set
+# CONFIG_VIDEO_MT9V011 is not set
+# CONFIG_VIDEO_TCM825X is not set
+# CONFIG_VIDEO_ET8EK8 is not set
+# CONFIG_VIDEO_AD5820 is not set
+# CONFIG_VIDEO_ADP1653 is not set
+# CONFIG_VIDEO_MT9P012 is not set
+# CONFIG_VIDEO_DW9710 is not set
+# CONFIG_VIDEO_OV3640 is not set
+CONFIG_VIDEO_IMX046=y
+CONFIG_VIDEO_LV8093=y
+# CONFIG_VIDEO_SAA7110 is not set
+# CONFIG_VIDEO_SAA711X is not set
+# CONFIG_VIDEO_SAA717X is not set
+# CONFIG_VIDEO_TVP514X is not set
+# CONFIG_VIDEO_TVP5150 is not set
+# CONFIG_VIDEO_VPX3220 is not set
+# CONFIG_VIDEO_SMIA_SENSOR is not set
+
+#
+# Video and audio decoders
+#
+# CONFIG_VIDEO_CX25840 is not set
+
+#
+# MPEG video encoders
+#
+# CONFIG_VIDEO_CX2341X is not set
+
+#
+# Video encoders
+#
+# CONFIG_VIDEO_SAA7127 is not set
+# CONFIG_VIDEO_SAA7185 is not set
+# CONFIG_VIDEO_ADV7170 is not set
+# CONFIG_VIDEO_ADV7175 is not set
+# CONFIG_VIDEO_THS7303 is not set
+# CONFIG_VIDEO_ADV7343 is not set
+
+#
+# Video improvement chips
+#
+# CONFIG_VIDEO_UPD64031A is not set
+# CONFIG_VIDEO_UPD64083 is not set
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+CONFIG_VIDEO_OMAP3_OUT=y
+CONFIG_VIDEO_OMAP3=y
+CONFIG_VIDEO_OMAP34XX_ISP_PREVIEWER=y
+CONFIG_VIDEO_OMAP34XX_ISP_RESIZER=y
+# CONFIG_VIDEO_SMIAREGS is not set
+# CONFIG_SOC_CAMERA is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VIDEO_CLASS is not set
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+CONFIG_USB_GSPCA=m
+# CONFIG_USB_M5602 is not set
+# CONFIG_USB_STV06XX is not set
+# CONFIG_USB_GL860 is not set
+# CONFIG_USB_GSPCA_CONEX is not set
+# CONFIG_USB_GSPCA_ETOMS is not set
+# CONFIG_USB_GSPCA_FINEPIX is not set
+# CONFIG_USB_GSPCA_JEILINJ is not set
+# CONFIG_USB_GSPCA_MARS is not set
+# CONFIG_USB_GSPCA_MR97310A is not set
+# CONFIG_USB_GSPCA_OV519 is not set
+# CONFIG_USB_GSPCA_OV534 is not set
+# CONFIG_USB_GSPCA_PAC207 is not set
+# CONFIG_USB_GSPCA_PAC7302 is not set
+# CONFIG_USB_GSPCA_PAC7311 is not set
+# CONFIG_USB_GSPCA_SN9C20X is not set
+# CONFIG_USB_GSPCA_SONIXB is not set
+# CONFIG_USB_GSPCA_SONIXJ is not set
+# CONFIG_USB_GSPCA_SPCA500 is not set
+# CONFIG_USB_GSPCA_SPCA501 is not set
+# CONFIG_USB_GSPCA_SPCA505 is not set
+# CONFIG_USB_GSPCA_SPCA506 is not set
+# CONFIG_USB_GSPCA_SPCA508 is not set
+# CONFIG_USB_GSPCA_SPCA561 is not set
+# CONFIG_USB_GSPCA_SQ905 is not set
+# CONFIG_USB_GSPCA_SQ905C is not set
+# CONFIG_USB_GSPCA_STK014 is not set
+# CONFIG_USB_GSPCA_STV0680 is not set
+# CONFIG_USB_GSPCA_SUNPLUS is not set
+# CONFIG_USB_GSPCA_T613 is not set
+# CONFIG_USB_GSPCA_TV8532 is not set
+# CONFIG_USB_GSPCA_VC032X is not set
+# CONFIG_USB_GSPCA_ZC3XX is not set
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_HDPVR is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_CX231XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_ZC0301 is not set
+CONFIG_USB_PWC_INPUT_EVDEV=y
+# CONFIG_USB_ZR364XX is not set
+# CONFIG_USB_STKWEBCAM is not set
+# CONFIG_USB_S2255 is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_I2C_SI4713 is not set
+# CONFIG_RADIO_SI4713 is not set
+# CONFIG_USB_DSBR is not set
+# CONFIG_RADIO_SI470X is not set
+# CONFIG_USB_MR800 is not set
+# CONFIG_RADIO_TEA5764 is not set
+# CONFIG_RADIO_TEF6862 is not set
+# CONFIG_RADIO_ADAPTERS is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
+CONFIG_OMAP2_VRAM=y
+CONFIG_OMAP2_VRFB=y
+CONFIG_OMAP2_DSS=y
+CONFIG_OMAP2_VRAM_SIZE=4
+# CONFIG_OMAP2_DSS_DEBUG_SUPPORT is not set
+# CONFIG_OMAP2_DSS_RFBI is not set
+CONFIG_OMAP2_DSS_VENC=y
+# CONFIG_OMAP2_DSS_SDI is not set
+# CONFIG_OMAP2_DSS_DSI is not set
+# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
+CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=4
+CONFIG_FB_OMAP2=y
+# CONFIG_FB_OMAP2_DEBUG_SUPPORT is not set
+# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
+CONFIG_FB_OMAP2_NUM_FBS=1
+
+#
+# OMAP2/3 Display Device Drivers
+#
+# CONFIG_PANEL_GENERIC is not set
+# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
+CONFIG_PANEL_NEC_NL8048HL11_01B=y
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_SOUND=y
+# CONFIG_SOUND_OSS_CORE is not set
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_JACK=y
+# CONFIG_SND_SEQUENCER is not set
+# CONFIG_SND_MIXER_OSS is not set
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_HRTIMER is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+# CONFIG_SND_RAWMIDI_SEQ is not set
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
+CONFIG_SND_DRIVERS=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+CONFIG_SND_ARM=y
+CONFIG_SND_SPI=y
+CONFIG_SND_USB=y
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+CONFIG_SND_SOC=y
+CONFIG_SND_OMAP_SOC=y
+CONFIG_SND_OMAP_SOC_MCBSP=y
+CONFIG_SND_OMAP_SOC_ZOOM2=y
+CONFIG_SND_SOC_I2C_AND_SPI=y
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_TWL4030=y
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+# CONFIG_HID_A4TECH is not set
+# CONFIG_HID_APPLE is not set
+# CONFIG_HID_BELKIN is not set
+# CONFIG_HID_CHERRY is not set
+# CONFIG_HID_CHICONY is not set
+# CONFIG_HID_CYPRESS is not set
+# CONFIG_HID_DRAGONRISE is not set
+# CONFIG_HID_EZKEY is not set
+# CONFIG_HID_KYE is not set
+# CONFIG_HID_GYRATION is not set
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+# CONFIG_HID_LOGITECH is not set
+# CONFIG_HID_MICROSOFT is not set
+# CONFIG_HID_MONTEREY is not set
+# CONFIG_HID_NTRIG is not set
+# CONFIG_HID_PANTHERLORD is not set
+# CONFIG_HID_PETALYNX is not set
+# CONFIG_HID_SAMSUNG is not set
+# CONFIG_HID_SONY is not set
+# CONFIG_HID_SUNPLUS is not set
+# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_SMARTJOYPLUS is not set
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_WACOM is not set
+# CONFIG_HID_ZEROPLUS is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+CONFIG_USB_DEBUG=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+CONFIG_USB_OTG=y
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_MUSB_SOC=y
+
+#
+# OMAP 343x high speed USB support
+#
+# CONFIG_USB_MUSB_HOST is not set
+# CONFIG_USB_MUSB_PERIPHERAL is not set
+CONFIG_USB_MUSB_OTG=y
+CONFIG_USB_GADGET_MUSB_HDRC=y
+CONFIG_USB_MUSB_HDRC_HCD=y
+# CONFIG_MUSB_PIO_ONLY is not set
+CONFIG_USB_INVENTRA_DMA=y
+# CONFIG_USB_TI_CPPI_DMA is not set
+# CONFIG_USB_MUSB_DEBUG is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=y
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=y
+# CONFIG_USB_SERIAL_CONSOLE is not set
+# CONFIG_USB_EZUSB is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP210X is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_IUU is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_MOTOROLA is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_QUALCOMM is not set
+# CONFIG_USB_SERIAL_SPCP8X5 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_SYMBOL is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_OPTICON is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_R8A66597 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C_HSOTG is not set
+# CONFIG_USB_GADGET_IMX is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_CI13XXX is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LANGWELL is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_ZERO=m
+# CONFIG_USB_ZERO_HNPTEST is not set
+CONFIG_USB_AUDIO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_ETH_EEM is not set
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+# CONFIG_USB_MASS_STORAGE is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+CONFIG_USB_CDC_COMPOSITE=m
+# CONFIG_USB_G_MULTI is not set
+
+#
+# OTG and related infrastructure
+#
+CONFIG_USB_OTG_UTILS=y
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_ISP1301_OMAP is not set
+# CONFIG_USB_ULPI is not set
+CONFIG_TWL4030_USB=y
+# CONFIG_NOP_USB_XCEIV is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+CONFIG_MMC_EMBEDDED_SDIO=y
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_OMAP is not set
+CONFIG_MMC_OMAP_HS=y
+# CONFIG_MMC_AT91 is not set
+# CONFIG_MMC_ATMELMCI is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_NEW_LEDS is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+CONFIG_RTC_DRV_TWL4030=y
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+CONFIG_MPU_BRIDGE=m
+CONFIG_BRIDGE_DVFS=y
+CONFIG_BRIDGE_MEMPOOL_SIZE=0x600000
+# CONFIG_BRIDGE_DEBUG is not set
+
+#
+# Bridge Hacking
+#
+# CONFIG_BRIDGE_CHECK_ALIGN_128 is not set
+
+#
+# Bridge Notifications
+#
+# CONFIG_BRIDGE_NTFY_PWRERR is not set
+
+#
+# CBUS support
+#
+# CONFIG_CBUS is not set
+
+#
+# File systems
+#
+CONFIG_FS_JOURNAL_INFO=y
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_PRINT_QUOTA_WARNING=y
+CONFIG_QUOTA_TREE=y
+# CONFIG_QFMT_V1 is not set
+CONFIG_QFMT_V2=y
+CONFIG_QUOTACTL=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_ACL_SUPPORT=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_HIGHMEM is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+# CONFIG_PAGE_POISONING is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+# CONFIG_BOOT_TRACER is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_KMEMTRACE is not set
+# CONFIG_WORKQUEUE_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+CONFIG_ARM_UNWIND=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_OC_ETM is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=y
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_ZLIB is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+CONFIG_CRC_T10DIF=y
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
diff --git a/recipes/linux/linux-omap-zoomsync/logo_linux_clut224.ppm b/recipes/linux/linux-omap-zoomsync/logo_linux_clut224.ppm
new file mode 100644
index 0000000000..7350579756
--- /dev/null
+++ b/recipes/linux/linux-omap-zoomsync/logo_linux_clut224.ppm
@@ -0,0 +1,1152004 @@
+P3
+# CREATOR: GIMP PNM Filter Version 1.1
+800 480
+255
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+34
+36
+33
+42
+53
+53
+35
+46
+46
+20
+24
+25
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+74
+85
+85
+99
+118
+117
+127
+151
+143
+143
+171
+168
+143
+171
+168
+147
+172
+164
+147
+172
+164
+147
+172
+164
+139
+167
+164
+117
+133
+126
+85
+101
+95
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+145
+169
+161
+160
+180
+179
+145
+169
+161
+147
+172
+164
+147
+172
+164
+147
+172
+164
+147
+172
+164
+145
+169
+161
+143
+171
+168
+143
+171
+168
+160
+180
+179
+66
+77
+78
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+143
+171
+168
+142
+166
+158
+160
+180
+179
+199
+212
+213
+220
+222
+219
+231
+233
+230
+228
+230
+227
+220
+222
+219
+179
+200
+199
+147
+172
+164
+145
+169
+161
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+143
+171
+168
+145
+169
+161
+199
+208
+203
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+240
+245
+248
+150
+178
+176
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+149
+174
+166
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+248
+250
+247
+145
+169
+161
+149
+174
+166
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+149
+174
+166
+147
+172
+164
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+147
+172
+164
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+85
+108
+100
+85
+108
+100
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+147
+172
+164
+147
+172
+164
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+160
+180
+179
+149
+174
+166
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+147
+172
+164
+145
+169
+161
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+244
+247
+243
+143
+171
+168
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+160
+180
+179
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+147
+172
+164
+149
+174
+166
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+147
+172
+164
+145
+169
+161
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+248
+250
+247
+160
+180
+179
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+147
+172
+164
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+145
+169
+161
+147
+172
+164
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+28
+28
+40
+57
+57
+58
+73
+68
+71
+89
+89
+74
+96
+89
+81
+104
+96
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+149
+174
+166
+145
+169
+161
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+160
+180
+179
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+38
+48
+49
+74
+96
+89
+83
+106
+98
+84
+111
+108
+85
+108
+100
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+147
+172
+164
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+145
+169
+161
+147
+172
+164
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+71
+89
+89
+85
+108
+100
+84
+111
+108
+85
+108
+100
+83
+106
+98
+85
+108
+100
+83
+106
+98
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+149
+174
+166
+145
+169
+161
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+160
+180
+179
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+74
+96
+89
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+147
+172
+164
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+145
+169
+161
+147
+172
+164
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+58
+76
+75
+83
+106
+98
+81
+104
+96
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+81
+104
+96
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+149
+174
+166
+145
+169
+161
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+160
+180
+179
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+19
+21
+18
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+60
+78
+78
+35
+46
+46
+18
+28
+28
+6
+13
+15
+6
+13
+15
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+147
+172
+164
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+145
+169
+161
+147
+172
+164
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+40
+57
+57
+83
+106
+98
+81
+104
+96
+84
+111
+108
+83
+106
+98
+69
+91
+84
+14
+22
+18
+5
+7
+3
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+149
+174
+166
+145
+169
+161
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+160
+180
+179
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+57
+82
+80
+84
+111
+108
+83
+106
+98
+84
+111
+108
+75
+101
+99
+6
+13
+15
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+147
+172
+164
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+145
+169
+161
+147
+172
+164
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+81
+96
+91
+83
+106
+98
+84
+111
+108
+83
+106
+98
+44
+58
+53
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+149
+174
+166
+145
+169
+161
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+160
+180
+179
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+75
+101
+99
+83
+106
+98
+84
+111
+108
+81
+104
+96
+19
+21
+18
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+147
+172
+164
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+145
+169
+161
+147
+172
+164
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+81
+104
+96
+84
+111
+108
+81
+104
+96
+84
+111
+108
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+149
+174
+166
+145
+169
+161
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+160
+180
+179
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+71
+89
+89
+84
+111
+108
+83
+106
+98
+83
+106
+98
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+147
+172
+164
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+145
+169
+161
+147
+172
+164
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+51
+65
+60
+81
+104
+96
+84
+111
+108
+84
+111
+108
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+149
+174
+166
+145
+169
+161
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+160
+180
+179
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+30
+31
+83
+106
+98
+81
+104
+96
+81
+104
+96
+26
+34
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+147
+172
+164
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+145
+169
+161
+147
+172
+164
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+71
+89
+89
+84
+111
+108
+84
+111
+108
+54
+72
+72
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+85
+108
+100
+85
+108
+100
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+149
+174
+166
+145
+169
+161
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+160
+180
+179
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+14
+22
+18
+81
+104
+96
+85
+108
+100
+85
+108
+100
+20
+27
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+83
+106
+98
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+147
+172
+164
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+145
+169
+161
+147
+172
+164
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+30
+32
+30
+75
+101
+99
+84
+111
+108
+75
+101
+99
+20
+24
+25
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+83
+106
+98
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+149
+174
+166
+145
+169
+161
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+160
+180
+179
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+23
+30
+27
+78
+101
+93
+83
+106
+98
+81
+104
+96
+44
+58
+53
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+147
+172
+164
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+145
+169
+161
+147
+172
+164
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+8
+11
+7
+58
+76
+75
+84
+111
+108
+85
+108
+100
+75
+101
+99
+58
+73
+68
+37
+44
+40
+20
+27
+24
+8
+11
+7
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+81
+104
+96
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+149
+174
+166
+145
+169
+161
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+160
+180
+179
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+5
+7
+3
+50
+68
+67
+85
+108
+100
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+84
+111
+108
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+147
+172
+164
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+145
+169
+161
+147
+172
+164
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+51
+65
+60
+75
+101
+99
+84
+111
+108
+84
+111
+108
+83
+106
+98
+81
+104
+96
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+147
+172
+164
+145
+169
+161
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+160
+180
+179
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+68
+94
+91
+85
+108
+100
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+83
+106
+98
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+121
+137
+131
+143
+171
+168
+169
+186
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+218
+228
+223
+145
+169
+161
+147
+172
+164
+49
+51
+48
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+8
+11
+7
+74
+96
+89
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+83
+106
+98
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+76
+92
+86
+143
+171
+168
+147
+172
+164
+244
+247
+243
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+183
+204
+203
+160
+180
+179
+139
+167
+164
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+54
+72
+72
+84
+111
+108
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+83
+106
+98
+81
+104
+96
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+61
+72
+73
+145
+169
+161
+143
+171
+168
+213
+226
+227
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+160
+180
+179
+145
+169
+161
+121
+140
+139
+11
+17
+19
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+16
+18
+15
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+58
+76
+75
+38
+48
+49
+14
+22
+18
+5
+7
+3
+5
+7
+3
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+41
+48
+44
+75
+101
+99
+104
+135
+126
+126
+146
+144
+147
+172
+164
+145
+169
+161
+199
+201
+198
+254
+255
+252
+254
+255
+252
+254
+255
+252
+242
+244
+241
+143
+171
+168
+145
+169
+161
+129
+158
+155
+114
+145
+136
+93
+123
+114
+58
+76
+75
+14
+22
+18
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+45
+56
+57
+84
+111
+108
+83
+106
+98
+81
+104
+96
+81
+104
+96
+68
+94
+91
+14
+22
+18
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+8
+11
+7
+55
+70
+64
+100
+133
+130
+117
+152
+148
+114
+145
+136
+117
+152
+148
+114
+145
+136
+142
+166
+158
+143
+171
+168
+150
+178
+176
+254
+255
+252
+254
+255
+252
+254
+255
+252
+211
+220
+215
+149
+174
+166
+143
+171
+168
+118
+150
+140
+104
+138
+134
+117
+152
+148
+108
+139
+130
+117
+152
+148
+83
+106
+98
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+62
+84
+77
+81
+104
+96
+84
+111
+108
+84
+111
+108
+75
+101
+99
+5
+7
+3
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+44
+58
+53
+104
+138
+134
+114
+145
+136
+114
+145
+136
+114
+145
+136
+108
+139
+130
+104
+138
+134
+117
+152
+148
+132
+156
+148
+147
+172
+164
+147
+172
+164
+237
+239
+236
+254
+255
+252
+252
+254
+251
+179
+200
+199
+149
+174
+166
+160
+180
+179
+114
+145
+136
+114
+145
+136
+114
+145
+136
+108
+139
+130
+114
+145
+136
+104
+138
+134
+114
+145
+136
+78
+101
+93
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+78
+96
+96
+83
+106
+98
+83
+106
+98
+85
+108
+100
+42
+53
+53
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+16
+18
+15
+84
+111
+108
+117
+152
+148
+104
+138
+134
+114
+145
+136
+104
+138
+134
+114
+145
+136
+104
+138
+134
+74
+96
+89
+39
+53
+47
+35
+46
+46
+160
+180
+179
+143
+171
+168
+143
+171
+168
+154
+179
+171
+151
+176
+168
+145
+169
+161
+145
+169
+161
+99
+118
+117
+30
+37
+33
+54
+72
+72
+89
+116
+113
+117
+152
+148
+117
+152
+148
+114
+145
+136
+117
+152
+148
+114
+145
+136
+104
+138
+134
+40
+57
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+29
+39
+39
+100
+130
+121
+114
+145
+136
+114
+145
+136
+117
+152
+148
+114
+145
+136
+100
+133
+130
+44
+58
+53
+6
+13
+15
+0
+1
+0
+0
+1
+0
+0
+2
+0
+136
+156
+155
+147
+172
+164
+143
+171
+168
+160
+180
+179
+143
+171
+168
+160
+180
+179
+142
+166
+158
+54
+72
+72
+0
+1
+0
+5
+7
+3
+0
+2
+0
+18
+28
+28
+68
+94
+91
+108
+139
+130
+104
+138
+134
+118
+150
+140
+114
+145
+136
+114
+145
+136
+71
+94
+87
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+78
+101
+93
+83
+106
+98
+81
+104
+96
+84
+111
+108
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+44
+62
+61
+114
+145
+136
+117
+152
+148
+108
+139
+130
+114
+145
+136
+100
+133
+130
+39
+53
+47
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+66
+81
+76
+99
+115
+109
+99
+115
+109
+99
+115
+109
+93
+109
+103
+99
+115
+109
+99
+118
+117
+19
+21
+18
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+15
+25
+26
+81
+104
+96
+104
+138
+134
+114
+145
+136
+114
+145
+136
+114
+145
+136
+92
+118
+116
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+71
+89
+89
+84
+111
+108
+84
+111
+108
+83
+106
+98
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+58
+73
+68
+114
+145
+136
+114
+145
+136
+117
+152
+148
+104
+138
+134
+69
+91
+84
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+35
+46
+46
+100
+133
+130
+114
+145
+136
+117
+152
+148
+114
+145
+136
+100
+130
+121
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+51
+65
+60
+83
+106
+98
+84
+111
+108
+84
+111
+108
+8
+11
+7
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+48
+62
+57
+114
+145
+136
+114
+145
+136
+104
+138
+134
+114
+145
+136
+55
+70
+64
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+16
+18
+15
+89
+116
+113
+114
+145
+136
+114
+145
+136
+104
+138
+134
+93
+123
+114
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+27
+24
+84
+111
+108
+83
+106
+98
+83
+106
+98
+23
+33
+34
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+29
+39
+39
+104
+138
+134
+117
+152
+148
+114
+145
+136
+114
+145
+136
+40
+57
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+8
+11
+7
+92
+118
+116
+117
+152
+148
+114
+145
+136
+104
+138
+134
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+57
+82
+80
+84
+111
+108
+85
+108
+100
+54
+72
+72
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+85
+108
+100
+85
+108
+100
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+104
+135
+126
+114
+145
+136
+114
+145
+136
+114
+145
+136
+50
+68
+67
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+14
+22
+18
+93
+123
+114
+117
+152
+148
+114
+145
+136
+117
+152
+148
+54
+72
+72
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+73
+98
+96
+85
+108
+100
+85
+108
+100
+20
+27
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+74
+96
+89
+117
+152
+148
+104
+138
+134
+114
+145
+136
+66
+88
+81
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+18
+22
+24
+104
+138
+134
+108
+139
+130
+114
+145
+136
+108
+139
+130
+15
+25
+26
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+20
+24
+25
+78
+101
+93
+84
+111
+108
+78
+101
+93
+20
+24
+25
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+29
+39
+39
+114
+145
+136
+114
+145
+136
+118
+150
+140
+89
+116
+113
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+39
+53
+47
+117
+152
+148
+114
+145
+136
+117
+152
+148
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+15
+19
+21
+66
+88
+81
+84
+111
+108
+81
+104
+96
+44
+58
+53
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+114
+145
+136
+104
+138
+134
+117
+152
+148
+18
+28
+28
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+75
+101
+99
+114
+145
+136
+114
+145
+136
+114
+145
+136
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+34
+51
+50
+81
+104
+96
+84
+111
+108
+81
+104
+96
+58
+73
+68
+37
+44
+40
+20
+27
+24
+8
+11
+7
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+26
+34
+30
+114
+145
+136
+104
+138
+134
+114
+145
+136
+66
+88
+81
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+19
+21
+18
+108
+139
+130
+104
+138
+134
+114
+145
+136
+75
+101
+99
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+85
+108
+100
+83
+106
+98
+84
+111
+108
+85
+108
+100
+85
+108
+100
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+68
+94
+91
+114
+145
+136
+114
+145
+136
+104
+138
+134
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+69
+91
+84
+117
+152
+148
+114
+145
+136
+114
+145
+136
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+83
+106
+98
+81
+104
+96
+83
+106
+98
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+104
+135
+126
+114
+145
+136
+117
+152
+148
+71
+94
+87
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+15
+19
+21
+108
+139
+130
+118
+150
+140
+104
+138
+134
+53
+68
+62
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+84
+111
+108
+83
+106
+98
+81
+104
+96
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+35
+46
+46
+104
+138
+134
+114
+145
+136
+114
+145
+136
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+0
+1
+0
+84
+111
+108
+114
+145
+136
+117
+152
+148
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+83
+106
+98
+81
+104
+96
+83
+106
+98
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+62
+84
+77
+114
+145
+136
+114
+145
+136
+100
+133
+130
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+44
+62
+61
+114
+145
+136
+114
+145
+136
+114
+145
+136
+8
+11
+7
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+89
+116
+113
+117
+152
+148
+114
+145
+136
+73
+98
+96
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+18
+28
+28
+104
+138
+134
+114
+145
+136
+114
+145
+136
+34
+51
+50
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+81
+104
+96
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+114
+145
+136
+114
+145
+136
+114
+145
+136
+55
+70
+64
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+114
+145
+136
+117
+152
+148
+104
+138
+134
+55
+70
+64
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+83
+106
+98
+84
+111
+108
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+15
+25
+26
+108
+139
+130
+114
+145
+136
+117
+152
+148
+41
+48
+44
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+93
+123
+114
+114
+145
+136
+117
+152
+148
+69
+91
+84
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+26
+34
+30
+117
+152
+148
+104
+138
+134
+114
+145
+136
+23
+33
+34
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+114
+145
+136
+114
+145
+136
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+81
+104
+96
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+35
+42
+39
+114
+145
+136
+104
+138
+134
+118
+150
+140
+18
+28
+28
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+73
+98
+96
+114
+145
+136
+114
+145
+136
+89
+116
+113
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+34
+51
+50
+118
+150
+140
+118
+150
+140
+104
+138
+134
+23
+24
+22
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+78
+101
+93
+104
+138
+134
+114
+145
+136
+93
+123
+114
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+29
+39
+39
+104
+138
+134
+118
+150
+140
+114
+145
+136
+26
+34
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+83
+106
+98
+117
+152
+148
+104
+138
+134
+89
+116
+113
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+23
+33
+34
+118
+150
+140
+104
+138
+134
+117
+152
+148
+27
+37
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+114
+145
+136
+114
+145
+136
+81
+104
+96
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+114
+145
+136
+114
+145
+136
+104
+138
+134
+48
+62
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+100
+133
+130
+114
+145
+136
+104
+138
+134
+71
+89
+89
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+104
+138
+134
+114
+145
+136
+114
+145
+136
+60
+78
+78
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+0
+1
+0
+114
+145
+136
+117
+152
+148
+114
+145
+136
+48
+62
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+41
+48
+44
+55
+70
+64
+66
+88
+81
+73
+98
+96
+81
+104
+96
+83
+106
+98
+81
+104
+96
+74
+96
+89
+66
+88
+81
+55
+70
+64
+35
+46
+46
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+75
+101
+99
+114
+145
+136
+114
+145
+136
+89
+116
+113
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+35
+42
+39
+114
+145
+136
+114
+145
+136
+114
+145
+136
+23
+30
+27
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+38
+48
+49
+69
+91
+84
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+85
+108
+100
+83
+106
+98
+85
+108
+100
+69
+91
+84
+41
+48
+44
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+51
+65
+60
+117
+152
+148
+114
+145
+136
+108
+139
+130
+8
+11
+7
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+58
+80
+73
+114
+145
+136
+114
+145
+136
+100
+133
+130
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+42
+39
+73
+98
+96
+85
+108
+100
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+83
+106
+98
+81
+104
+96
+83
+106
+98
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+73
+98
+96
+33
+40
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+14
+22
+18
+114
+145
+136
+114
+145
+136
+114
+145
+136
+44
+58
+53
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+100
+133
+130
+104
+138
+134
+114
+145
+136
+69
+91
+84
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+54
+72
+72
+85
+108
+100
+85
+108
+100
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+83
+106
+98
+81
+104
+96
+83
+106
+98
+84
+111
+108
+84
+111
+108
+83
+106
+98
+58
+73
+68
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+89
+116
+113
+117
+152
+148
+114
+145
+136
+93
+123
+114
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+34
+51
+50
+114
+145
+136
+114
+145
+136
+114
+145
+136
+35
+46
+46
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+71
+89
+89
+85
+108
+100
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+81
+104
+96
+84
+111
+108
+83
+106
+98
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+75
+101
+99
+71
+89
+89
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+48
+62
+57
+104
+138
+134
+117
+152
+148
+104
+138
+134
+41
+48
+44
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+92
+118
+116
+117
+152
+148
+114
+145
+136
+100
+130
+121
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+26
+34
+30
+69
+91
+84
+81
+104
+96
+68
+94
+91
+33
+40
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+62
+84
+77
+84
+111
+108
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+81
+104
+96
+83
+106
+98
+84
+111
+108
+84
+111
+108
+83
+106
+98
+85
+108
+100
+83
+106
+98
+84
+111
+108
+62
+84
+77
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+104
+138
+134
+114
+145
+136
+118
+150
+140
+89
+116
+113
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+121
+140
+139
+93
+112
+111
+33
+40
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+63
+78
+73
+126
+146
+144
+52
+59
+55
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+40
+57
+57
+114
+145
+136
+114
+145
+136
+104
+138
+134
+57
+82
+80
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+26
+34
+30
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+27
+37
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+44
+62
+61
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+73
+98
+96
+56
+64
+60
+35
+46
+46
+18
+28
+28
+8
+11
+7
+5
+7
+3
+0
+1
+0
+0
+1
+0
+0
+2
+0
+6
+13
+15
+6
+13
+15
+20
+30
+31
+38
+48
+49
+50
+68
+67
+74
+96
+89
+81
+104
+96
+84
+111
+108
+85
+108
+100
+84
+111
+108
+81
+104
+96
+84
+111
+108
+40
+57
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+58
+76
+75
+104
+138
+134
+118
+150
+140
+104
+138
+134
+54
+72
+72
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+42
+47
+49
+147
+172
+164
+143
+171
+168
+147
+172
+164
+117
+136
+135
+60
+68
+64
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+26
+34
+30
+86
+105
+104
+142
+166
+158
+149
+174
+166
+143
+171
+168
+110
+129
+128
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+13
+15
+12
+104
+135
+126
+114
+145
+136
+114
+145
+136
+104
+135
+126
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+66
+88
+81
+83
+106
+98
+81
+104
+96
+84
+111
+108
+83
+106
+98
+83
+106
+98
+66
+88
+81
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+81
+104
+96
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+57
+82
+80
+14
+22
+18
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+20
+27
+24
+60
+78
+78
+83
+106
+98
+84
+111
+108
+83
+106
+98
+85
+108
+100
+83
+106
+98
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+13
+15
+12
+104
+135
+126
+114
+145
+136
+118
+150
+140
+108
+139
+130
+26
+34
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+99
+115
+109
+147
+172
+164
+149
+174
+166
+143
+171
+168
+149
+174
+166
+143
+171
+168
+135
+162
+160
+81
+92
+93
+19
+21
+18
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+52
+59
+55
+110
+129
+128
+143
+171
+168
+145
+169
+161
+143
+171
+168
+143
+171
+168
+149
+174
+166
+149
+174
+166
+30
+32
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+104
+138
+134
+114
+145
+136
+114
+145
+136
+61
+72
+73
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+75
+101
+99
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+75
+101
+99
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+54
+72
+72
+84
+111
+108
+83
+106
+98
+84
+111
+108
+75
+101
+99
+18
+28
+28
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+18
+28
+28
+73
+98
+96
+84
+111
+108
+83
+106
+98
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+40
+57
+57
+104
+138
+134
+118
+150
+140
+104
+138
+134
+100
+130
+121
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+22
+24
+143
+171
+168
+147
+172
+164
+184
+186
+183
+190
+207
+200
+157
+182
+173
+147
+172
+164
+147
+172
+164
+143
+171
+168
+145
+169
+161
+93
+109
+103
+0
+2
+0
+37
+38
+36
+125
+152
+150
+147
+172
+164
+147
+172
+164
+160
+180
+179
+145
+169
+161
+190
+192
+188
+203
+216
+217
+147
+172
+164
+143
+171
+168
+86
+105
+104
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+50
+68
+67
+114
+145
+136
+117
+152
+148
+114
+145
+136
+93
+123
+114
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+72
+87
+82
+83
+106
+98
+84
+111
+108
+83
+106
+98
+83
+106
+98
+85
+108
+100
+69
+91
+84
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+81
+104
+96
+84
+111
+108
+81
+104
+96
+74
+96
+89
+13
+15
+12
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+11
+13
+10
+78
+96
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+75
+101
+99
+104
+138
+134
+117
+152
+148
+114
+145
+136
+89
+116
+113
+5
+7
+3
+0
+2
+0
+0
+2
+0
+78
+86
+82
+147
+172
+164
+143
+171
+168
+237
+242
+245
+252
+254
+251
+248
+250
+247
+220
+222
+219
+173
+190
+183
+149
+174
+166
+143
+171
+168
+143
+171
+168
+5
+7
+3
+78
+96
+96
+147
+172
+164
+145
+169
+161
+160
+180
+179
+199
+208
+203
+237
+242
+245
+252
+254
+251
+254
+255
+252
+175
+196
+195
+147
+172
+164
+142
+166
+158
+11
+13
+10
+0
+2
+0
+0
+2
+0
+42
+53
+53
+114
+145
+136
+114
+145
+136
+114
+145
+136
+104
+138
+134
+18
+28
+28
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+27
+37
+37
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+85
+108
+100
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+37
+44
+40
+84
+111
+108
+81
+104
+96
+84
+111
+108
+18
+28
+28
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+20
+27
+24
+84
+111
+108
+84
+111
+108
+84
+111
+108
+35
+46
+46
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+8
+11
+7
+93
+123
+114
+104
+138
+134
+118
+150
+140
+117
+152
+148
+84
+111
+108
+6
+13
+15
+5
+7
+3
+135
+162
+160
+145
+169
+161
+160
+184
+176
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+199
+212
+213
+145
+169
+161
+143
+171
+168
+42
+53
+53
+117
+136
+135
+160
+180
+179
+142
+166
+158
+240
+245
+248
+249
+252
+248
+252
+254
+251
+252
+254
+251
+254
+255
+252
+228
+230
+227
+160
+180
+179
+139
+167
+164
+63
+78
+73
+0
+2
+0
+39
+53
+47
+104
+138
+134
+117
+152
+148
+104
+138
+134
+118
+150
+140
+42
+53
+53
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+27
+37
+37
+66
+88
+81
+78
+101
+93
+71
+89
+89
+27
+37
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+53
+68
+62
+84
+111
+108
+83
+106
+98
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+0
+2
+0
+58
+80
+73
+81
+104
+96
+83
+106
+98
+50
+68
+67
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+22
+24
+100
+130
+121
+104
+138
+134
+114
+145
+136
+114
+145
+136
+99
+115
+109
+58
+76
+75
+142
+166
+158
+160
+180
+179
+213
+226
+227
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+223
+226
+222
+160
+180
+179
+149
+174
+166
+147
+172
+164
+145
+169
+161
+145
+169
+161
+167
+187
+186
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+248
+250
+247
+248
+250
+247
+154
+179
+171
+147
+172
+164
+126
+146
+144
+55
+70
+64
+117
+152
+148
+114
+145
+136
+114
+145
+136
+114
+145
+136
+58
+76
+75
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+66
+88
+81
+81
+104
+96
+84
+111
+108
+27
+37
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+27
+37
+37
+84
+111
+108
+84
+111
+108
+72
+87
+82
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+15
+25
+26
+100
+133
+130
+114
+145
+136
+117
+152
+148
+114
+145
+136
+139
+167
+164
+145
+169
+161
+149
+174
+166
+248
+250
+247
+252
+254
+251
+254
+255
+252
+254
+255
+252
+249
+252
+248
+194
+207
+208
+145
+169
+161
+143
+171
+168
+149
+174
+166
+163
+183
+182
+150
+178
+176
+149
+174
+166
+145
+169
+161
+160
+180
+179
+231
+233
+230
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+203
+216
+217
+147
+172
+164
+143
+171
+168
+125
+152
+150
+104
+138
+134
+114
+145
+136
+114
+145
+136
+58
+76
+75
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+75
+101
+99
+83
+106
+98
+85
+108
+100
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+6
+13
+15
+83
+106
+98
+85
+108
+100
+78
+101
+93
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+11
+13
+10
+89
+116
+113
+114
+145
+136
+117
+152
+148
+145
+169
+161
+143
+171
+168
+194
+207
+208
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+175
+196
+195
+145
+169
+161
+160
+180
+179
+223
+226
+222
+252
+254
+251
+254
+255
+252
+254
+255
+252
+239
+241
+238
+194
+207
+208
+145
+169
+161
+150
+178
+176
+233
+235
+232
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+149
+174
+166
+160
+180
+179
+127
+158
+149
+118
+150
+140
+104
+138
+134
+44
+62
+61
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+81
+104
+96
+84
+111
+108
+84
+111
+108
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+84
+111
+108
+84
+111
+108
+75
+101
+99
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+69
+84
+79
+135
+162
+160
+149
+174
+166
+149
+174
+166
+237
+242
+245
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+143
+171
+168
+160
+184
+176
+240
+245
+248
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+201
+211
+206
+143
+171
+168
+163
+183
+182
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+182
+199
+192
+147
+172
+164
+143
+171
+168
+104
+138
+134
+26
+34
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+81
+104
+96
+83
+106
+98
+84
+111
+108
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+83
+106
+98
+85
+108
+100
+81
+104
+96
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+6
+13
+15
+142
+166
+158
+147
+172
+164
+190
+192
+188
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+163
+183
+182
+149
+174
+166
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+182
+199
+192
+149
+174
+166
+220
+222
+219
+254
+255
+252
+252
+254
+251
+254
+255
+252
+237
+239
+236
+143
+171
+168
+147
+172
+164
+81
+96
+91
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+73
+98
+96
+84
+111
+108
+83
+106
+98
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+84
+111
+108
+84
+111
+108
+75
+101
+99
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+69
+80
+80
+143
+171
+168
+143
+171
+168
+218
+228
+223
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+147
+172
+164
+173
+190
+183
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+231
+233
+230
+143
+171
+168
+179
+200
+199
+252
+254
+251
+254
+255
+252
+252
+254
+251
+254
+255
+252
+169
+186
+179
+143
+171
+168
+135
+162
+160
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+26
+34
+30
+69
+91
+84
+81
+104
+96
+68
+94
+91
+33
+40
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+66
+88
+81
+84
+111
+108
+85
+108
+100
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+30
+37
+33
+83
+106
+98
+85
+108
+100
+66
+88
+81
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+131
+151
+150
+147
+172
+164
+163
+183
+182
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+223
+218
+160
+180
+179
+194
+207
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+149
+174
+166
+169
+186
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+147
+172
+164
+142
+166
+158
+61
+72
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+26
+34
+30
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+27
+37
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+50
+68
+67
+83
+106
+98
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+57
+82
+80
+84
+111
+108
+84
+111
+108
+61
+72
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+45
+52
+48
+147
+172
+164
+147
+172
+164
+207
+217
+212
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+223
+218
+145
+169
+161
+199
+208
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+143
+171
+168
+163
+183
+182
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+169
+186
+179
+142
+166
+158
+117
+133
+126
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+66
+88
+81
+83
+106
+98
+81
+104
+96
+84
+111
+108
+83
+106
+98
+83
+106
+98
+66
+88
+81
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+35
+46
+46
+81
+104
+96
+85
+108
+100
+83
+106
+98
+18
+28
+28
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+27
+29
+81
+104
+96
+81
+104
+96
+81
+104
+96
+35
+42
+39
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+104
+123
+122
+160
+180
+179
+151
+176
+168
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+147
+172
+164
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+147
+172
+164
+176
+194
+187
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+248
+250
+247
+183
+204
+203
+160
+180
+179
+143
+171
+168
+37
+38
+36
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+75
+101
+99
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+75
+101
+99
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+84
+111
+108
+84
+111
+108
+84
+111
+108
+71
+94
+87
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+13
+15
+12
+74
+96
+89
+84
+111
+108
+84
+111
+108
+84
+111
+108
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+24
+25
+145
+169
+161
+143
+171
+168
+199
+208
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+150
+178
+176
+151
+176
+168
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+194
+207
+208
+143
+171
+168
+213
+223
+218
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+242
+244
+241
+147
+172
+164
+143
+171
+168
+93
+109
+103
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+72
+87
+82
+83
+106
+98
+84
+111
+108
+83
+106
+98
+83
+106
+98
+85
+108
+100
+66
+88
+81
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+58
+73
+68
+83
+106
+98
+84
+111
+108
+84
+111
+108
+73
+98
+96
+18
+28
+28
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+28
+28
+73
+98
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+55
+70
+64
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+92
+94
+91
+143
+171
+168
+145
+169
+161
+237
+242
+245
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+211
+220
+215
+143
+171
+168
+167
+187
+186
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+145
+169
+161
+160
+180
+179
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+175
+196
+195
+145
+169
+161
+143
+171
+168
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+27
+37
+37
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+29
+39
+39
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+25
+26
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+58
+73
+68
+20
+24
+25
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+27
+24
+61
+76
+71
+85
+108
+100
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+138
+162
+154
+160
+180
+179
+160
+184
+176
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+173
+190
+183
+160
+180
+179
+169
+186
+179
+239
+241
+238
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+203
+216
+217
+150
+178
+176
+147
+172
+164
+228
+230
+227
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+213
+226
+227
+149
+174
+166
+143
+171
+168
+69
+84
+79
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+27
+37
+37
+66
+88
+81
+78
+101
+93
+72
+87
+82
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+48
+62
+57
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+85
+108
+100
+73
+98
+96
+51
+65
+60
+35
+49
+44
+23
+30
+27
+6
+13
+15
+5
+7
+3
+5
+7
+3
+0
+2
+0
+5
+7
+3
+5
+7
+3
+13
+15
+12
+23
+30
+27
+41
+48
+44
+50
+68
+67
+73
+98
+96
+85
+108
+100
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+45
+56
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+60
+68
+64
+143
+171
+168
+145
+169
+161
+213
+226
+227
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+248
+250
+247
+240
+245
+248
+169
+186
+179
+143
+171
+168
+143
+171
+168
+169
+186
+179
+175
+196
+195
+173
+190
+183
+160
+180
+179
+149
+174
+166
+145
+169
+161
+213
+226
+227
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+163
+183
+182
+147
+172
+164
+131
+151
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+62
+84
+77
+81
+104
+96
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+85
+108
+100
+84
+111
+108
+75
+101
+99
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+57
+82
+80
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+121
+140
+139
+143
+171
+168
+169
+186
+179
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+254
+255
+252
+173
+190
+183
+143
+171
+168
+147
+172
+164
+143
+171
+168
+143
+171
+168
+143
+171
+168
+149
+174
+166
+228
+230
+227
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+211
+220
+215
+147
+172
+164
+143
+171
+168
+45
+56
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+6
+13
+15
+71
+89
+89
+84
+111
+108
+83
+106
+98
+81
+104
+96
+84
+111
+108
+83
+106
+98
+81
+104
+96
+81
+104
+96
+84
+111
+108
+83
+106
+98
+85
+108
+100
+83
+106
+98
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+72
+87
+82
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+42
+39
+145
+169
+161
+145
+169
+161
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+143
+171
+168
+147
+172
+164
+112
+128
+122
+37
+38
+36
+42
+53
+53
+145
+169
+161
+160
+180
+179
+199
+208
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+160
+180
+179
+147
+172
+164
+112
+128
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+58
+73
+68
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+81
+104
+96
+83
+106
+98
+84
+111
+108
+58
+76
+75
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+93
+112
+111
+160
+180
+179
+143
+171
+168
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+205
+215
+210
+160
+180
+179
+139
+167
+164
+35
+46
+46
+0
+1
+0
+0
+1
+0
+112
+128
+122
+139
+167
+164
+151
+176
+168
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+199
+208
+203
+145
+169
+161
+145
+169
+161
+23
+27
+29
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+35
+42
+39
+75
+101
+99
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+74
+96
+89
+33
+40
+37
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+13
+15
+12
+145
+169
+161
+145
+169
+161
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+160
+180
+179
+147
+172
+164
+121
+137
+131
+0
+1
+0
+0
+2
+0
+5
+7
+3
+45
+56
+57
+147
+172
+164
+143
+171
+168
+217
+219
+216
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+231
+233
+230
+160
+180
+179
+143
+171
+168
+85
+101
+95
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+34
+51
+50
+71
+89
+89
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+84
+111
+108
+69
+91
+84
+35
+46
+46
+5
+7
+3
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+74
+85
+85
+143
+171
+168
+149
+174
+166
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+226
+227
+147
+172
+164
+143
+171
+168
+65
+73
+69
+0
+1
+0
+0
+1
+0
+5
+7
+3
+6
+13
+15
+136
+156
+155
+143
+171
+168
+169
+186
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+173
+190
+183
+145
+169
+161
+135
+162
+160
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+0
+1
+0
+15
+19
+21
+35
+46
+46
+53
+68
+62
+69
+84
+79
+73
+98
+96
+78
+101
+93
+81
+104
+96
+78
+101
+93
+68
+94
+91
+71
+89
+89
+50
+68
+67
+35
+49
+44
+15
+19
+21
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+136
+156
+155
+149
+174
+166
+169
+186
+179
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+173
+190
+183
+150
+178
+176
+136
+156
+155
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+78
+86
+82
+147
+172
+164
+143
+171
+168
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+220
+222
+219
+160
+180
+179
+147
+172
+164
+61
+72
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+5
+7
+3
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+0
+2
+0
+5
+7
+3
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+52
+59
+55
+145
+169
+161
+160
+180
+179
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+237
+242
+245
+145
+169
+161
+149
+174
+166
+88
+104
+98
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+145
+169
+161
+143
+171
+168
+179
+200
+199
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+249
+252
+248
+169
+186
+179
+145
+169
+161
+122
+145
+138
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+104
+123
+122
+160
+180
+179
+147
+172
+164
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+199
+208
+203
+147
+172
+164
+149
+174
+166
+23
+27
+29
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+99
+118
+117
+147
+172
+164
+147
+172
+164
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+199
+212
+213
+143
+171
+168
+143
+171
+168
+37
+44
+40
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+26
+34
+30
+145
+169
+161
+143
+171
+168
+183
+204
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+160
+180
+179
+143
+171
+168
+112
+128
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+42
+44
+41
+147
+172
+164
+160
+180
+179
+194
+207
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+248
+250
+247
+147
+172
+164
+160
+180
+179
+93
+112
+111
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+96
+98
+95
+143
+171
+168
+147
+172
+164
+242
+244
+241
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+223
+218
+145
+169
+161
+147
+172
+164
+52
+59
+55
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+121
+140
+139
+142
+166
+158
+169
+186
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+179
+200
+199
+145
+169
+161
+145
+169
+161
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+139
+167
+164
+147
+172
+164
+167
+187
+186
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+163
+183
+182
+147
+172
+164
+129
+158
+155
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+61
+72
+73
+143
+171
+168
+139
+167
+164
+215
+225
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+231
+233
+230
+160
+180
+179
+145
+169
+161
+72
+87
+82
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+35
+46
+46
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+69
+77
+73
+142
+166
+158
+160
+180
+179
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+223
+233
+227
+145
+169
+161
+160
+180
+179
+74
+85
+85
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+138
+162
+154
+149
+174
+166
+167
+187
+186
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+169
+186
+179
+143
+171
+168
+136
+156
+155
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+50
+68
+67
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+83
+106
+98
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+126
+146
+144
+145
+169
+161
+160
+180
+179
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+194
+207
+208
+142
+166
+158
+138
+162
+154
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+85
+96
+97
+149
+174
+166
+147
+172
+164
+237
+239
+236
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+220
+222
+219
+149
+174
+166
+143
+171
+168
+56
+64
+60
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+68
+94
+91
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+75
+101
+99
+40
+57
+57
+18
+22
+24
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+41
+48
+44
+147
+172
+164
+143
+171
+168
+201
+211
+206
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+145
+169
+161
+143
+171
+168
+93
+112
+111
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+26
+28
+25
+143
+171
+168
+143
+171
+168
+183
+204
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+240
+245
+248
+160
+180
+179
+147
+172
+164
+110
+129
+128
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+96
+91
+83
+106
+98
+83
+106
+98
+83
+106
+98
+73
+98
+96
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+99
+118
+117
+149
+174
+166
+150
+178
+176
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+199
+212
+213
+147
+172
+164
+160
+180
+179
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+112
+128
+122
+149
+174
+166
+149
+174
+166
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+149
+174
+166
+147
+172
+164
+30
+32
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+35
+46
+46
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+19
+21
+18
+145
+169
+161
+147
+172
+164
+182
+199
+192
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+248
+250
+247
+169
+186
+179
+145
+169
+161
+121
+137
+131
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+42
+47
+49
+147
+172
+164
+143
+171
+168
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+239
+241
+238
+147
+172
+164
+143
+171
+168
+86
+105
+104
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+78
+101
+93
+81
+104
+96
+83
+106
+98
+84
+111
+108
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+85
+96
+97
+160
+180
+179
+139
+167
+164
+233
+235
+232
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+226
+227
+143
+171
+168
+143
+171
+168
+61
+72
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+136
+156
+155
+149
+174
+166
+160
+184
+176
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+190
+192
+188
+147
+172
+164
+139
+167
+164
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+73
+98
+96
+84
+111
+108
+81
+104
+96
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+132
+156
+148
+145
+169
+161
+173
+190
+183
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+169
+186
+179
+145
+169
+161
+135
+162
+160
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+69
+77
+73
+147
+172
+164
+143
+171
+168
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+213
+226
+227
+147
+172
+164
+145
+169
+161
+66
+77
+78
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+58
+76
+75
+83
+106
+98
+84
+111
+108
+83
+106
+98
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+51
+65
+60
+143
+171
+168
+143
+171
+168
+213
+223
+218
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+160
+180
+179
+142
+166
+158
+78
+96
+96
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+13
+15
+12
+139
+167
+164
+143
+171
+168
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+163
+183
+182
+145
+169
+161
+127
+151
+143
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+38
+48
+49
+83
+106
+98
+84
+111
+108
+84
+111
+108
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+117
+136
+135
+147
+172
+164
+160
+180
+179
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+193
+195
+192
+145
+169
+161
+147
+172
+164
+19
+21
+18
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+93
+112
+111
+147
+172
+164
+147
+172
+164
+242
+244
+241
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+205
+215
+210
+149
+174
+166
+143
+171
+168
+42
+53
+53
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+84
+111
+108
+83
+106
+98
+83
+106
+98
+41
+48
+44
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+85
+108
+100
+85
+108
+100
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+34
+36
+33
+147
+172
+164
+145
+169
+161
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+150
+178
+176
+160
+180
+179
+104
+123
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+37
+38
+36
+147
+172
+164
+143
+171
+168
+199
+208
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+149
+174
+166
+145
+169
+161
+104
+123
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+44
+62
+61
+84
+111
+108
+84
+111
+108
+68
+94
+91
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+83
+106
+98
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+93
+109
+103
+160
+180
+179
+149
+174
+166
+242
+244
+241
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+211
+220
+215
+145
+169
+161
+145
+169
+161
+42
+47
+49
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+117
+136
+135
+147
+172
+164
+150
+178
+176
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+160
+180
+179
+145
+169
+161
+20
+24
+25
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+8
+11
+7
+69
+91
+84
+83
+106
+98
+83
+106
+98
+42
+53
+53
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+83
+106
+98
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+142
+166
+158
+143
+171
+168
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+163
+183
+182
+143
+171
+168
+127
+151
+143
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+56
+64
+60
+147
+172
+164
+160
+180
+179
+211
+220
+215
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+139
+167
+164
+145
+169
+161
+81
+96
+91
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+11
+17
+19
+73
+98
+96
+83
+106
+98
+85
+108
+100
+38
+48
+49
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+60
+78
+78
+160
+180
+179
+145
+169
+161
+223
+226
+222
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+226
+227
+145
+169
+161
+149
+174
+166
+69
+80
+80
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+0
+1
+0
+129
+158
+155
+145
+169
+161
+167
+187
+186
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+169
+186
+179
+160
+180
+179
+135
+162
+160
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+6
+13
+15
+57
+82
+80
+84
+111
+108
+85
+108
+100
+58
+80
+73
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+81
+104
+96
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+125
+152
+150
+160
+180
+179
+150
+178
+176
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+175
+196
+195
+147
+172
+164
+136
+156
+155
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+81
+92
+93
+145
+169
+161
+147
+172
+164
+233
+235
+232
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+213
+223
+218
+142
+166
+158
+143
+171
+168
+60
+68
+64
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+35
+49
+44
+78
+96
+96
+85
+108
+100
+85
+108
+100
+66
+88
+81
+42
+53
+53
+26
+34
+30
+13
+15
+12
+5
+7
+3
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+45
+52
+48
+142
+166
+158
+145
+169
+161
+217
+219
+216
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+239
+236
+160
+180
+179
+160
+180
+179
+93
+109
+103
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+20
+27
+24
+143
+171
+168
+143
+171
+168
+183
+204
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+160
+180
+179
+147
+172
+164
+117
+136
+135
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+85
+108
+100
+85
+108
+100
+85
+108
+100
+81
+104
+96
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+85
+108
+100
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+112
+128
+122
+143
+171
+168
+149
+174
+166
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+199
+208
+203
+142
+166
+158
+139
+167
+164
+30
+32
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+118
+120
+117
+147
+172
+164
+149
+174
+166
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+199
+212
+213
+147
+172
+164
+147
+172
+164
+33
+40
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+81
+104
+96
+81
+104
+96
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+27
+29
+143
+171
+168
+149
+174
+166
+183
+204
+203
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+249
+252
+248
+150
+178
+176
+143
+171
+168
+117
+133
+126
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+46
+46
+143
+171
+168
+143
+171
+168
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+244
+247
+243
+143
+171
+168
+143
+171
+168
+99
+115
+109
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+85
+96
+97
+147
+172
+164
+149
+174
+166
+237
+239
+236
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+211
+220
+215
+147
+172
+164
+143
+171
+168
+56
+64
+60
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+122
+145
+138
+147
+172
+164
+157
+182
+173
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+193
+195
+192
+143
+171
+168
+139
+167
+164
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+132
+156
+148
+160
+180
+179
+167
+187
+186
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+167
+187
+186
+147
+172
+164
+138
+162
+154
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+73
+75
+72
+147
+172
+164
+143
+171
+168
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+226
+227
+147
+172
+164
+147
+172
+164
+71
+89
+89
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+61
+72
+73
+145
+169
+161
+147
+172
+164
+215
+225
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+160
+180
+179
+139
+167
+164
+78
+96
+96
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+6
+13
+15
+136
+156
+155
+143
+171
+168
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+163
+183
+182
+145
+169
+161
+125
+152
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+83
+106
+98
+83
+106
+98
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+121
+137
+131
+143
+171
+168
+160
+180
+179
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+175
+196
+195
+145
+169
+161
+145
+169
+161
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+52
+59
+55
+88
+104
+98
+78
+86
+82
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+88
+104
+98
+149
+174
+166
+145
+169
+161
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+217
+219
+216
+147
+172
+164
+147
+172
+164
+45
+56
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+35
+46
+46
+149
+174
+166
+145
+169
+161
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+150
+178
+176
+160
+180
+179
+93
+112
+111
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+86
+105
+104
+143
+171
+168
+143
+171
+168
+143
+171
+168
+135
+162
+160
+23
+27
+29
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+30
+32
+30
+160
+180
+179
+142
+166
+158
+199
+208
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+160
+180
+179
+147
+172
+164
+110
+129
+128
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+83
+106
+98
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+99
+115
+109
+145
+169
+161
+160
+180
+179
+242
+244
+241
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+205
+215
+210
+142
+166
+158
+145
+169
+161
+42
+47
+49
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+30
+32
+30
+149
+174
+166
+160
+180
+179
+213
+223
+218
+199
+201
+198
+147
+172
+164
+99
+115
+109
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+109
+132
+125
+143
+171
+168
+150
+178
+176
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+187
+204
+197
+147
+172
+164
+145
+169
+161
+23
+30
+27
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+143
+171
+168
+145
+169
+161
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+160
+180
+179
+143
+171
+168
+122
+145
+138
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+61
+72
+73
+147
+172
+164
+203
+216
+217
+252
+254
+251
+254
+255
+252
+145
+169
+161
+136
+156
+155
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+55
+56
+54
+145
+169
+161
+143
+171
+168
+211
+220
+215
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+239
+236
+160
+180
+179
+142
+166
+158
+85
+101
+95
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+81
+104
+96
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+78
+86
+82
+147
+172
+164
+143
+171
+168
+233
+235
+232
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+226
+227
+147
+172
+164
+149
+174
+166
+61
+72
+73
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+69
+77
+73
+147
+172
+164
+205
+215
+210
+252
+254
+251
+248
+250
+247
+160
+180
+179
+135
+159
+151
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+136
+156
+155
+147
+172
+164
+163
+183
+182
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+173
+190
+183
+160
+180
+179
+136
+156
+155
+8
+11
+7
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+136
+156
+155
+149
+174
+166
+163
+183
+182
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+176
+194
+187
+147
+172
+164
+138
+162
+154
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+69
+80
+80
+143
+171
+168
+203
+216
+217
+252
+254
+251
+254
+255
+252
+143
+171
+168
+135
+162
+160
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+74
+85
+85
+149
+174
+166
+147
+172
+164
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+215
+225
+219
+143
+171
+168
+160
+180
+179
+60
+68
+64
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+52
+59
+55
+145
+169
+161
+147
+172
+164
+213
+223
+218
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+239
+236
+139
+167
+164
+160
+180
+179
+85
+96
+97
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+69
+80
+80
+147
+172
+164
+205
+215
+210
+252
+254
+251
+252
+254
+251
+145
+169
+161
+136
+156
+155
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+16
+18
+15
+143
+171
+168
+143
+171
+168
+179
+200
+199
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+240
+245
+248
+169
+186
+179
+145
+169
+161
+125
+152
+150
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+110
+129
+128
+160
+180
+179
+160
+180
+179
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+199
+208
+203
+145
+169
+161
+147
+172
+164
+23
+27
+29
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+69
+80
+80
+143
+171
+168
+203
+216
+217
+252
+254
+251
+254
+255
+252
+149
+174
+166
+135
+162
+160
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+99
+115
+109
+145
+169
+161
+149
+174
+166
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+199
+212
+213
+145
+169
+161
+143
+171
+168
+35
+46
+46
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+78
+101
+93
+66
+88
+81
+51
+65
+60
+23
+33
+34
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+33
+34
+145
+169
+161
+142
+166
+158
+190
+207
+200
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+246
+249
+245
+150
+178
+176
+143
+171
+168
+112
+128
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+69
+80
+80
+149
+174
+166
+205
+215
+210
+254
+255
+252
+254
+255
+252
+147
+172
+164
+136
+156
+155
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+42
+47
+49
+143
+171
+168
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+246
+249
+245
+143
+171
+168
+147
+172
+164
+99
+115
+109
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+37
+44
+40
+37
+44
+40
+37
+44
+40
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+85
+108
+100
+71
+89
+89
+19
+21
+18
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+85
+96
+97
+150
+178
+176
+160
+180
+179
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+207
+217
+212
+149
+174
+166
+143
+171
+168
+52
+59
+55
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+69
+80
+80
+143
+171
+168
+203
+216
+217
+254
+255
+252
+254
+255
+252
+149
+174
+166
+135
+162
+160
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+121
+137
+131
+147
+172
+164
+160
+180
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+194
+207
+208
+143
+171
+168
+145
+169
+161
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+85
+108
+100
+84
+111
+108
+81
+104
+96
+20
+24
+25
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+142
+166
+158
+142
+166
+158
+173
+190
+183
+254
+255
+252
+220
+222
+219
+176
+194
+187
+157
+182
+173
+173
+190
+183
+211
+220
+215
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+163
+183
+182
+147
+172
+164
+125
+152
+150
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+69
+77
+73
+149
+174
+166
+205
+215
+210
+254
+255
+252
+254
+255
+252
+147
+172
+164
+136
+156
+155
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+61
+72
+73
+160
+180
+179
+145
+169
+161
+213
+226
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+239
+236
+183
+204
+203
+160
+184
+176
+169
+186
+179
+199
+208
+203
+244
+247
+243
+231
+233
+230
+147
+172
+164
+143
+171
+168
+78
+86
+82
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+83
+106
+98
+83
+106
+98
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+71
+94
+87
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+78
+101
+93
+104
+135
+126
+108
+139
+130
+108
+139
+130
+108
+139
+130
+108
+139
+130
+108
+139
+130
+108
+139
+130
+108
+139
+130
+69
+91
+84
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+78
+96
+96
+147
+172
+164
+143
+171
+168
+213
+226
+227
+183
+204
+203
+143
+171
+168
+160
+180
+179
+139
+167
+164
+143
+171
+168
+143
+171
+168
+169
+186
+179
+249
+252
+248
+254
+255
+252
+254
+255
+252
+231
+233
+230
+160
+180
+179
+145
+169
+161
+88
+104
+98
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+37
+38
+36
+86
+105
+104
+143
+171
+168
+203
+216
+217
+254
+255
+252
+254
+255
+252
+149
+174
+166
+138
+162
+154
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+30
+37
+33
+35
+42
+39
+135
+162
+160
+145
+169
+161
+173
+190
+183
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+226
+227
+149
+174
+166
+143
+171
+168
+143
+171
+168
+143
+171
+168
+143
+171
+168
+154
+179
+171
+237
+242
+245
+169
+186
+179
+143
+171
+168
+135
+162
+160
+35
+42
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+29
+39
+39
+108
+139
+130
+108
+139
+130
+108
+139
+130
+108
+139
+130
+108
+139
+130
+108
+139
+130
+108
+139
+130
+108
+139
+130
+104
+135
+126
+26
+34
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+84
+111
+108
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+6
+13
+15
+30
+37
+33
+68
+94
+91
+83
+106
+98
+85
+108
+100
+84
+111
+108
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+117
+152
+148
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+108
+139
+130
+117
+152
+148
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+145
+169
+161
+143
+171
+168
+169
+186
+179
+220
+222
+219
+142
+166
+158
+169
+186
+179
+223
+233
+227
+254
+255
+252
+239
+241
+238
+173
+190
+183
+143
+171
+168
+194
+207
+208
+254
+255
+252
+254
+255
+252
+175
+196
+195
+145
+169
+161
+147
+172
+164
+117
+152
+148
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+108
+139
+130
+117
+152
+148
+132
+156
+148
+147
+172
+164
+205
+215
+210
+254
+255
+252
+254
+255
+252
+147
+172
+164
+143
+171
+168
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+132
+156
+148
+160
+180
+179
+143
+171
+168
+237
+239
+236
+254
+255
+252
+240
+245
+248
+149
+174
+166
+149
+174
+166
+217
+219
+216
+248
+250
+247
+246
+249
+245
+194
+207
+208
+142
+166
+158
+169
+186
+179
+217
+219
+216
+149
+174
+166
+147
+172
+164
+117
+152
+148
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+108
+139
+130
+117
+152
+148
+23
+33
+34
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+81
+104
+96
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+6
+13
+15
+69
+80
+80
+84
+111
+108
+83
+106
+98
+50
+68
+67
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+104
+138
+134
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+117
+152
+148
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+104
+138
+134
+114
+145
+136
+118
+150
+140
+147
+172
+164
+143
+171
+168
+201
+211
+206
+163
+183
+182
+143
+171
+168
+237
+242
+245
+252
+254
+251
+252
+254
+251
+252
+254
+251
+248
+250
+247
+151
+176
+168
+149
+174
+166
+240
+245
+248
+242
+244
+241
+143
+171
+168
+160
+180
+179
+127
+158
+149
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+117
+152
+148
+108
+139
+130
+104
+138
+134
+135
+159
+151
+143
+171
+168
+203
+216
+217
+254
+255
+252
+254
+255
+252
+147
+172
+164
+145
+169
+161
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+117
+152
+148
+114
+145
+136
+143
+171
+168
+143
+171
+168
+187
+204
+197
+254
+255
+252
+199
+208
+203
+160
+180
+179
+199
+212
+213
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+175
+196
+195
+143
+171
+168
+213
+223
+218
+169
+186
+179
+145
+169
+161
+138
+162
+154
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+117
+152
+148
+108
+139
+130
+114
+145
+136
+26
+34
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+20
+27
+24
+84
+111
+108
+85
+108
+100
+71
+89
+89
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+85
+108
+100
+118
+150
+140
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+104
+138
+134
+114
+145
+136
+104
+138
+134
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+114
+145
+136
+114
+145
+136
+114
+145
+136
+117
+152
+148
+139
+167
+164
+147
+172
+164
+147
+172
+164
+240
+245
+248
+143
+171
+168
+163
+183
+182
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+194
+207
+208
+143
+171
+168
+233
+235
+232
+199
+208
+203
+147
+172
+164
+145
+169
+161
+117
+152
+148
+104
+138
+134
+117
+152
+148
+104
+138
+134
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+114
+145
+136
+108
+139
+130
+117
+152
+148
+114
+145
+136
+129
+158
+155
+149
+174
+166
+205
+215
+210
+254
+255
+252
+249
+252
+248
+160
+180
+179
+143
+171
+168
+104
+138
+134
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+138
+162
+154
+145
+169
+161
+160
+180
+179
+248
+250
+247
+167
+187
+186
+145
+169
+161
+237
+239
+236
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+226
+227
+147
+172
+164
+194
+207
+208
+183
+204
+203
+150
+178
+176
+143
+171
+168
+117
+152
+148
+104
+138
+134
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+114
+145
+136
+114
+145
+136
+118
+150
+140
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+108
+139
+130
+117
+152
+148
+114
+145
+136
+23
+33
+34
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+6
+13
+15
+81
+104
+96
+84
+111
+108
+78
+101
+93
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+104
+138
+134
+118
+150
+140
+114
+145
+136
+114
+145
+136
+104
+138
+134
+117
+152
+148
+104
+138
+134
+118
+150
+140
+117
+152
+148
+114
+145
+136
+117
+152
+148
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+118
+150
+140
+114
+145
+136
+114
+145
+136
+114
+145
+136
+117
+152
+148
+114
+145
+136
+114
+145
+136
+117
+152
+148
+143
+171
+168
+160
+180
+179
+179
+200
+199
+254
+255
+252
+149
+174
+166
+160
+180
+179
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+254
+255
+252
+176
+194
+187
+147
+172
+164
+237
+242
+245
+154
+179
+171
+143
+171
+168
+142
+166
+158
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+118
+150
+140
+114
+145
+136
+114
+145
+136
+114
+145
+136
+118
+150
+140
+114
+145
+136
+114
+145
+136
+114
+145
+136
+117
+152
+148
+108
+139
+130
+117
+152
+148
+114
+145
+136
+132
+156
+148
+143
+171
+168
+203
+216
+217
+252
+254
+251
+254
+255
+252
+147
+172
+164
+147
+172
+164
+117
+152
+148
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+118
+150
+140
+114
+145
+136
+114
+145
+136
+114
+145
+136
+117
+152
+148
+114
+145
+136
+104
+138
+134
+118
+150
+140
+114
+145
+136
+114
+145
+136
+117
+152
+148
+125
+152
+150
+145
+169
+161
+143
+171
+168
+211
+220
+215
+179
+200
+199
+143
+171
+168
+231
+233
+230
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+203
+216
+217
+147
+172
+164
+203
+216
+217
+239
+241
+238
+149
+174
+166
+145
+169
+161
+138
+162
+154
+117
+152
+148
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+118
+150
+140
+114
+145
+136
+114
+145
+136
+114
+145
+136
+118
+150
+140
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+104
+138
+134
+117
+152
+148
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+104
+138
+134
+118
+150
+140
+26
+34
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+83
+106
+98
+85
+108
+100
+83
+106
+98
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+118
+150
+140
+104
+138
+134
+104
+138
+134
+117
+152
+148
+114
+145
+136
+114
+145
+136
+118
+150
+140
+104
+138
+134
+108
+139
+130
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+117
+152
+148
+104
+138
+134
+114
+145
+136
+114
+145
+136
+104
+138
+134
+114
+145
+136
+104
+138
+134
+108
+139
+130
+132
+156
+148
+145
+169
+161
+145
+169
+161
+233
+235
+232
+254
+255
+252
+175
+196
+195
+145
+169
+161
+199
+212
+213
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+143
+171
+168
+163
+183
+182
+211
+220
+215
+160
+180
+179
+149
+174
+166
+129
+158
+155
+114
+145
+136
+114
+145
+136
+114
+145
+136
+117
+152
+148
+104
+138
+134
+114
+145
+136
+114
+145
+136
+117
+152
+148
+104
+138
+134
+114
+145
+136
+118
+150
+140
+104
+138
+134
+114
+145
+136
+114
+145
+136
+114
+145
+136
+104
+138
+134
+129
+158
+155
+149
+174
+166
+205
+215
+210
+254
+255
+252
+252
+254
+251
+143
+171
+168
+145
+169
+161
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+117
+152
+148
+104
+138
+134
+114
+145
+136
+114
+145
+136
+117
+152
+148
+104
+138
+134
+114
+145
+136
+118
+150
+140
+104
+138
+134
+114
+145
+136
+104
+138
+134
+114
+145
+136
+114
+145
+136
+143
+171
+168
+147
+172
+164
+160
+180
+179
+213
+223
+218
+149
+174
+166
+167
+187
+186
+249
+252
+248
+252
+254
+251
+254
+255
+252
+237
+242
+245
+169
+186
+179
+147
+172
+164
+239
+241
+238
+252
+254
+251
+184
+186
+183
+160
+180
+179
+143
+171
+168
+114
+145
+136
+114
+145
+136
+114
+145
+136
+114
+145
+136
+117
+152
+148
+104
+138
+134
+114
+145
+136
+114
+145
+136
+117
+152
+148
+104
+138
+134
+114
+145
+136
+114
+145
+136
+114
+145
+136
+117
+152
+148
+114
+145
+136
+114
+145
+136
+114
+145
+136
+104
+138
+134
+117
+152
+148
+117
+152
+148
+114
+145
+136
+118
+150
+140
+104
+138
+134
+27
+37
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+84
+111
+108
+84
+111
+108
+75
+101
+99
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+84
+111
+108
+114
+145
+136
+118
+150
+140
+114
+145
+136
+114
+145
+136
+104
+138
+134
+114
+145
+136
+114
+145
+136
+117
+152
+148
+100
+133
+130
+89
+116
+113
+89
+116
+113
+89
+116
+113
+89
+116
+113
+85
+108
+100
+86
+117
+108
+89
+116
+113
+89
+116
+113
+86
+117
+108
+89
+116
+113
+86
+117
+108
+92
+118
+116
+92
+118
+116
+139
+167
+164
+143
+171
+168
+169
+186
+179
+254
+255
+252
+254
+255
+252
+240
+245
+248
+149
+174
+166
+147
+172
+164
+176
+194
+187
+205
+215
+210
+183
+204
+203
+147
+172
+164
+147
+172
+164
+213
+226
+227
+169
+186
+179
+145
+169
+161
+135
+162
+160
+92
+118
+116
+89
+116
+113
+89
+116
+113
+85
+108
+100
+86
+117
+108
+89
+116
+113
+89
+116
+113
+85
+108
+100
+86
+117
+108
+89
+116
+113
+89
+116
+113
+86
+117
+108
+99
+115
+109
+89
+116
+113
+86
+117
+108
+86
+117
+108
+86
+117
+108
+119
+143
+136
+143
+171
+168
+203
+216
+217
+252
+254
+251
+254
+255
+252
+143
+171
+168
+139
+167
+164
+89
+116
+113
+89
+116
+113
+89
+116
+113
+85
+108
+100
+86
+117
+108
+89
+116
+113
+89
+116
+113
+85
+108
+100
+86
+117
+108
+89
+116
+113
+89
+116
+113
+86
+117
+108
+89
+116
+113
+86
+117
+108
+99
+115
+109
+86
+117
+108
+99
+115
+109
+119
+143
+136
+147
+172
+164
+160
+180
+179
+218
+228
+223
+173
+190
+183
+160
+180
+179
+160
+180
+179
+201
+211
+206
+201
+211
+206
+150
+178
+176
+143
+171
+168
+199
+208
+203
+254
+255
+252
+252
+254
+251
+213
+226
+227
+145
+169
+161
+143
+171
+168
+121
+140
+139
+89
+116
+113
+89
+116
+113
+86
+117
+108
+86
+117
+108
+89
+116
+113
+89
+116
+113
+85
+108
+100
+86
+117
+108
+89
+116
+113
+89
+116
+113
+89
+116
+113
+86
+117
+108
+89
+116
+113
+104
+138
+134
+117
+152
+148
+114
+145
+136
+114
+145
+136
+108
+139
+130
+104
+138
+134
+117
+152
+148
+114
+145
+136
+114
+145
+136
+26
+34
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+34
+51
+50
+83
+106
+98
+85
+108
+100
+68
+94
+91
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+49
+44
+55
+70
+64
+53
+68
+62
+53
+68
+62
+53
+68
+62
+55
+70
+64
+50
+68
+67
+53
+68
+62
+51
+65
+60
+26
+34
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+5
+7
+3
+0
+1
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+56
+64
+60
+149
+174
+166
+149
+174
+166
+213
+226
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+233
+235
+232
+163
+183
+182
+143
+171
+168
+143
+171
+168
+145
+169
+161
+169
+186
+179
+213
+226
+227
+237
+239
+236
+143
+171
+168
+143
+171
+168
+92
+94
+91
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+0
+1
+0
+0
+1
+0
+0
+1
+0
+69
+80
+80
+149
+174
+166
+205
+215
+210
+254
+255
+252
+254
+255
+252
+149
+174
+166
+136
+156
+155
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+11
+13
+10
+139
+167
+164
+145
+169
+161
+175
+196
+195
+240
+245
+248
+175
+196
+195
+147
+172
+164
+143
+171
+168
+160
+180
+179
+147
+172
+164
+199
+208
+203
+240
+245
+248
+252
+254
+251
+254
+255
+252
+254
+255
+252
+163
+183
+182
+147
+172
+164
+125
+152
+150
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+53
+68
+62
+53
+68
+62
+53
+68
+62
+53
+68
+62
+55
+70
+64
+53
+68
+62
+53
+68
+62
+53
+68
+62
+53
+68
+62
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+6
+13
+15
+23
+30
+27
+51
+65
+60
+85
+108
+100
+84
+111
+108
+84
+111
+108
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+117
+136
+135
+147
+172
+164
+169
+186
+179
+246
+249
+245
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+231
+233
+230
+217
+219
+216
+213
+226
+227
+248
+250
+247
+254
+255
+252
+187
+204
+197
+149
+174
+166
+145
+169
+161
+18
+22
+24
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+69
+80
+80
+143
+171
+168
+203
+216
+217
+254
+255
+252
+252
+254
+251
+149
+174
+166
+135
+162
+160
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+93
+112
+111
+143
+171
+168
+149
+174
+166
+239
+241
+238
+254
+255
+252
+237
+242
+245
+211
+220
+215
+217
+219
+216
+240
+245
+248
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+203
+216
+217
+147
+172
+164
+147
+172
+164
+42
+53
+53
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+83
+106
+98
+81
+104
+96
+81
+104
+96
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+84
+111
+108
+38
+48
+49
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+37
+38
+36
+145
+169
+161
+160
+180
+179
+183
+204
+203
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+240
+245
+248
+160
+180
+179
+160
+180
+179
+104
+123
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+69
+77
+73
+149
+174
+166
+205
+215
+210
+254
+255
+252
+254
+255
+252
+147
+172
+164
+138
+162
+154
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+34
+36
+33
+147
+172
+164
+147
+172
+164
+199
+212
+213
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+149
+174
+166
+143
+171
+168
+112
+128
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+93
+109
+103
+145
+169
+161
+147
+172
+164
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+205
+215
+210
+142
+166
+158
+139
+167
+164
+38
+48
+49
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+69
+80
+80
+143
+171
+168
+203
+216
+217
+254
+255
+252
+254
+255
+252
+143
+171
+168
+136
+156
+155
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+121
+137
+131
+145
+169
+161
+154
+179
+171
+249
+252
+248
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+199
+201
+198
+143
+171
+168
+145
+169
+161
+23
+24
+22
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+83
+106
+98
+83
+106
+98
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+35
+49
+44
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+13
+15
+12
+143
+171
+168
+143
+171
+168
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+150
+178
+176
+143
+171
+168
+127
+151
+143
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+69
+77
+73
+149
+174
+166
+205
+215
+210
+254
+255
+252
+254
+255
+252
+147
+172
+164
+138
+162
+154
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+56
+64
+60
+149
+174
+166
+143
+171
+168
+217
+219
+216
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+223
+233
+227
+145
+169
+161
+143
+171
+168
+78
+96
+96
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+81
+104
+96
+84
+111
+108
+83
+106
+98
+83
+106
+98
+81
+104
+96
+84
+111
+108
+75
+101
+99
+37
+44
+40
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+69
+80
+80
+149
+174
+166
+149
+174
+166
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+147
+172
+164
+160
+180
+179
+65
+73
+69
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+69
+80
+80
+143
+171
+168
+203
+216
+217
+254
+255
+252
+254
+255
+252
+143
+171
+168
+135
+162
+160
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+135
+159
+151
+143
+171
+168
+169
+186
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+173
+190
+183
+145
+169
+161
+135
+162
+160
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+75
+101
+99
+75
+101
+99
+71
+89
+89
+50
+68
+67
+37
+44
+40
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+131
+151
+150
+145
+169
+161
+169
+186
+179
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+173
+190
+183
+145
+169
+161
+138
+162
+154
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+69
+77
+73
+149
+174
+166
+205
+215
+210
+254
+255
+252
+254
+255
+252
+149
+174
+166
+136
+156
+155
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+81
+92
+93
+149
+174
+166
+143
+171
+168
+233
+235
+232
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+143
+171
+168
+145
+169
+161
+61
+72
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+5
+7
+3
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+52
+59
+55
+160
+180
+179
+139
+167
+164
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+160
+180
+179
+143
+171
+168
+100
+102
+99
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+69
+77
+73
+143
+171
+168
+203
+216
+217
+254
+255
+252
+254
+255
+252
+149
+174
+166
+135
+162
+160
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+15
+19
+21
+147
+172
+164
+143
+171
+168
+179
+200
+199
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+157
+182
+173
+145
+169
+161
+117
+136
+135
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+104
+123
+122
+145
+169
+161
+160
+180
+179
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+199
+208
+203
+145
+169
+161
+145
+169
+161
+23
+33
+34
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+58
+59
+57
+149
+174
+166
+187
+204
+197
+254
+255
+252
+242
+244
+241
+149
+174
+166
+121
+137
+131
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+99
+118
+117
+147
+172
+164
+149
+174
+166
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+143
+171
+168
+149
+174
+166
+33
+40
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+26
+28
+25
+143
+171
+168
+145
+169
+161
+194
+207
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+150
+178
+176
+160
+180
+179
+117
+133
+126
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+136
+156
+155
+147
+172
+164
+167
+187
+186
+154
+179
+171
+149
+174
+166
+66
+81
+76
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+45
+47
+44
+147
+172
+164
+160
+180
+179
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+149
+174
+166
+143
+171
+168
+93
+112
+111
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+86
+105
+104
+147
+172
+164
+147
+172
+164
+233
+235
+232
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+223
+218
+147
+172
+164
+145
+169
+161
+56
+64
+60
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+35
+42
+39
+131
+151
+150
+149
+174
+166
+135
+162
+160
+86
+105
+104
+5
+7
+3
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+126
+146
+144
+145
+169
+161
+150
+178
+176
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+175
+196
+195
+149
+174
+166
+145
+169
+161
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+136
+156
+155
+143
+171
+168
+176
+194
+187
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+167
+187
+186
+143
+171
+168
+125
+152
+150
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+19
+21
+18
+5
+7
+3
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+66
+77
+78
+149
+174
+166
+160
+180
+179
+215
+225
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+231
+233
+230
+160
+180
+179
+143
+171
+168
+72
+87
+82
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+66
+77
+78
+149
+174
+166
+149
+174
+166
+213
+226
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+147
+172
+164
+149
+174
+166
+78
+86
+82
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+8
+11
+7
+136
+156
+155
+142
+166
+158
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+248
+250
+247
+160
+180
+179
+145
+169
+161
+131
+151
+150
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+121
+140
+139
+147
+172
+164
+169
+186
+179
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+194
+207
+208
+143
+171
+168
+147
+172
+164
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+86
+105
+104
+145
+169
+161
+147
+172
+164
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+213
+226
+227
+147
+172
+164
+143
+171
+168
+52
+59
+55
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+46
+46
+149
+174
+166
+143
+171
+168
+199
+212
+213
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+242
+244
+241
+147
+172
+164
+145
+169
+161
+99
+118
+117
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+30
+32
+30
+143
+171
+168
+160
+180
+179
+190
+207
+200
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+248
+250
+247
+151
+176
+168
+145
+169
+161
+110
+129
+128
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+45
+52
+48
+62
+84
+77
+78
+101
+93
+81
+104
+96
+74
+96
+89
+57
+82
+80
+35
+46
+46
+8
+11
+7
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+99
+118
+117
+147
+172
+164
+147
+172
+164
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+201
+211
+206
+160
+180
+179
+142
+166
+158
+42
+44
+41
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+112
+128
+122
+145
+169
+161
+149
+174
+166
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+194
+207
+208
+145
+169
+161
+147
+172
+164
+23
+30
+27
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+42
+39
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+85
+108
+100
+84
+111
+108
+75
+101
+99
+35
+49
+44
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+142
+166
+158
+147
+172
+164
+179
+200
+199
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+249
+252
+248
+160
+180
+179
+145
+169
+161
+121
+140
+139
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+42
+53
+53
+160
+180
+179
+143
+171
+168
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+239
+241
+238
+143
+171
+168
+143
+171
+168
+88
+104
+98
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+17
+19
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+49
+44
+83
+106
+98
+83
+106
+98
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+48
+62
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+74
+85
+85
+160
+180
+179
+145
+169
+161
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+218
+228
+223
+143
+171
+168
+149
+174
+166
+61
+72
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+5
+7
+3
+136
+156
+155
+147
+172
+164
+169
+186
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+176
+194
+187
+160
+180
+179
+135
+162
+160
+8
+11
+7
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+38
+48
+49
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+24
+25
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+84
+111
+108
+85
+108
+100
+83
+106
+98
+84
+111
+108
+83
+106
+98
+42
+53
+53
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+136
+156
+155
+145
+169
+161
+167
+187
+186
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+167
+187
+186
+160
+180
+179
+136
+156
+155
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+72
+87
+82
+147
+172
+164
+143
+171
+168
+223
+233
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+220
+222
+219
+145
+169
+161
+145
+169
+161
+61
+72
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+66
+88
+81
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+83
+106
+98
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+69
+91
+84
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+81
+104
+96
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+52
+59
+55
+143
+171
+168
+147
+172
+164
+211
+220
+215
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+239
+241
+238
+145
+169
+161
+147
+172
+164
+86
+105
+104
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+13
+15
+12
+145
+169
+161
+160
+180
+179
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+160
+180
+179
+147
+172
+164
+126
+146
+144
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+44
+62
+61
+18
+22
+24
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+27
+37
+37
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+75
+101
+99
+41
+48
+44
+8
+11
+7
+0
+1
+0
+5
+7
+3
+30
+32
+30
+68
+94
+91
+81
+104
+96
+84
+111
+108
+84
+111
+108
+55
+70
+64
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+117
+133
+126
+147
+172
+164
+160
+180
+179
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+190
+207
+200
+147
+172
+164
+143
+171
+168
+26
+28
+25
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+93
+112
+111
+145
+169
+161
+147
+172
+164
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+205
+215
+210
+147
+172
+164
+147
+172
+164
+38
+48
+49
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+28
+28
+83
+106
+98
+83
+106
+98
+83
+106
+98
+73
+98
+96
+14
+22
+18
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+61
+76
+71
+83
+106
+98
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+23
+24
+22
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+60
+78
+78
+81
+104
+96
+81
+104
+96
+84
+111
+108
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+27
+37
+37
+147
+172
+164
+143
+171
+168
+194
+207
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+150
+178
+176
+147
+172
+164
+110
+129
+128
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+35
+46
+46
+147
+172
+164
+147
+172
+164
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+149
+174
+166
+147
+172
+164
+99
+118
+117
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+42
+53
+53
+84
+111
+108
+84
+111
+108
+83
+106
+98
+23
+27
+29
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+40
+57
+57
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+6
+13
+15
+75
+101
+99
+83
+106
+98
+84
+111
+108
+33
+40
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+96
+98
+95
+160
+180
+179
+145
+169
+161
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+211
+220
+215
+147
+172
+164
+147
+172
+164
+45
+52
+48
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+121
+140
+139
+147
+172
+164
+150
+178
+176
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+147
+172
+164
+145
+169
+161
+19
+21
+18
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+53
+68
+62
+81
+104
+96
+83
+106
+98
+58
+76
+75
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+37
+44
+40
+83
+106
+98
+83
+106
+98
+83
+106
+98
+81
+104
+96
+73
+98
+96
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+53
+68
+62
+84
+111
+108
+83
+106
+98
+44
+62
+61
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+138
+162
+154
+160
+180
+179
+173
+190
+183
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+169
+186
+179
+160
+180
+179
+125
+152
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+60
+68
+64
+149
+174
+166
+143
+171
+168
+215
+225
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+143
+171
+168
+143
+171
+168
+76
+92
+86
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+71
+89
+89
+84
+111
+108
+85
+108
+100
+29
+39
+39
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+57
+82
+80
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+44
+58
+53
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+26
+34
+30
+84
+111
+108
+85
+108
+100
+62
+84
+77
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+61
+76
+71
+143
+171
+168
+145
+169
+161
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+223
+233
+227
+139
+167
+164
+142
+166
+158
+78
+86
+82
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+136
+156
+155
+145
+169
+161
+167
+187
+186
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+169
+186
+179
+145
+169
+161
+135
+162
+160
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+71
+94
+87
+83
+106
+98
+84
+111
+108
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+85
+108
+100
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+11
+17
+19
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+83
+106
+98
+84
+111
+108
+78
+96
+96
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+126
+146
+144
+143
+171
+168
+150
+178
+176
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+175
+196
+195
+143
+171
+168
+139
+167
+164
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+85
+96
+97
+149
+174
+166
+147
+172
+164
+237
+239
+236
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+220
+222
+219
+145
+169
+161
+143
+171
+168
+56
+64
+60
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+75
+101
+99
+83
+106
+98
+85
+108
+100
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+42
+53
+53
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+66
+88
+81
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+83
+106
+98
+83
+106
+98
+78
+101
+93
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+42
+53
+53
+149
+174
+166
+147
+172
+164
+211
+220
+215
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+149
+174
+166
+149
+174
+166
+93
+112
+111
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+23
+24
+22
+160
+180
+179
+143
+171
+168
+183
+204
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+160
+180
+179
+147
+172
+164
+117
+136
+135
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+84
+111
+108
+84
+111
+108
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+62
+84
+77
+81
+104
+96
+81
+104
+96
+83
+106
+98
+84
+111
+108
+45
+52
+48
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+104
+123
+122
+147
+172
+164
+143
+171
+168
+246
+249
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+201
+211
+206
+147
+172
+164
+145
+169
+161
+37
+38
+36
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+112
+128
+122
+145
+169
+161
+149
+174
+166
+246
+249
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+194
+207
+208
+143
+171
+168
+147
+172
+164
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+78
+101
+93
+81
+104
+96
+85
+108
+100
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+15
+19
+21
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+78
+101
+93
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+24
+25
+142
+166
+158
+160
+180
+179
+199
+208
+203
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+160
+180
+179
+160
+180
+179
+117
+136
+135
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+42
+47
+49
+160
+180
+179
+143
+171
+168
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+240
+245
+248
+147
+172
+164
+143
+171
+168
+93
+112
+111
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+68
+94
+91
+84
+111
+108
+84
+111
+108
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+45
+52
+48
+83
+106
+98
+81
+104
+96
+83
+106
+98
+84
+111
+108
+62
+84
+77
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+84
+111
+108
+84
+111
+108
+71
+89
+89
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+92
+93
+145
+169
+161
+139
+167
+164
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+211
+220
+215
+142
+166
+158
+147
+172
+164
+56
+64
+60
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+131
+151
+150
+147
+172
+164
+163
+183
+182
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+190
+192
+188
+145
+169
+161
+142
+166
+158
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+58
+80
+73
+83
+106
+98
+83
+106
+98
+33
+40
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+73
+98
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+38
+48
+49
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+26
+34
+30
+83
+106
+98
+85
+108
+100
+66
+88
+81
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+138
+162
+154
+143
+171
+168
+173
+190
+183
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+167
+187
+186
+143
+171
+168
+136
+156
+155
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+69
+77
+73
+147
+172
+164
+145
+169
+161
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+226
+227
+143
+171
+168
+143
+171
+168
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+44
+62
+61
+84
+111
+108
+84
+111
+108
+58
+80
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+46
+46
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+81
+104
+96
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+40
+57
+57
+84
+111
+108
+84
+111
+108
+50
+68
+67
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+61
+72
+73
+145
+169
+161
+143
+171
+168
+213
+226
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+223
+233
+227
+151
+176
+168
+149
+174
+166
+81
+92
+93
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+15
+19
+21
+139
+167
+164
+143
+171
+168
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+163
+183
+182
+147
+172
+164
+125
+152
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+26
+34
+30
+83
+106
+98
+84
+111
+108
+85
+108
+100
+27
+37
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+75
+101
+99
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+62
+84
+77
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+74
+96
+89
+83
+106
+98
+83
+106
+98
+37
+44
+40
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+117
+133
+126
+160
+180
+179
+154
+179
+171
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+147
+172
+164
+145
+169
+161
+23
+24
+22
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+93
+109
+103
+147
+172
+164
+147
+172
+164
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+205
+215
+210
+160
+180
+179
+149
+174
+166
+42
+47
+49
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+73
+98
+96
+81
+104
+96
+84
+111
+108
+81
+104
+96
+40
+57
+57
+13
+15
+12
+5
+7
+3
+5
+7
+3
+33
+40
+37
+73
+98
+96
+85
+108
+100
+81
+104
+96
+83
+106
+98
+84
+111
+108
+83
+106
+98
+27
+37
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+48
+62
+57
+84
+111
+108
+84
+111
+108
+84
+111
+108
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+29
+39
+39
+145
+169
+161
+143
+171
+168
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+242
+244
+241
+160
+180
+179
+143
+171
+168
+104
+123
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+37
+38
+36
+145
+169
+161
+147
+172
+164
+199
+208
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+244
+247
+243
+147
+172
+164
+147
+172
+164
+104
+123
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+42
+53
+53
+83
+106
+98
+84
+111
+108
+81
+104
+96
+84
+111
+108
+75
+101
+99
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+69
+91
+84
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+42
+53
+53
+83
+106
+98
+83
+106
+98
+81
+104
+96
+68
+94
+91
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+99
+115
+109
+143
+171
+168
+147
+172
+164
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+205
+215
+210
+145
+169
+161
+145
+169
+161
+41
+48
+44
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+117
+136
+135
+147
+172
+164
+150
+178
+176
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+199
+208
+203
+147
+172
+164
+147
+172
+164
+23
+27
+29
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+6
+13
+15
+68
+94
+91
+83
+106
+98
+84
+111
+108
+83
+106
+98
+85
+108
+100
+83
+106
+98
+83
+106
+98
+84
+111
+108
+83
+106
+98
+81
+104
+96
+83
+106
+98
+84
+111
+108
+83
+106
+98
+30
+32
+30
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+16
+18
+15
+35
+46
+46
+68
+94
+91
+85
+108
+100
+84
+111
+108
+84
+111
+108
+84
+111
+108
+44
+58
+53
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+142
+166
+158
+147
+172
+164
+193
+195
+192
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+163
+183
+182
+160
+180
+179
+121
+140
+139
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+56
+64
+60
+147
+172
+164
+160
+180
+179
+211
+220
+215
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+237
+242
+245
+147
+172
+164
+145
+169
+161
+85
+96
+97
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+11
+17
+19
+74
+96
+89
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+44
+62
+61
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+85
+108
+100
+83
+106
+98
+84
+111
+108
+83
+106
+98
+81
+104
+96
+83
+106
+98
+83
+106
+98
+11
+17
+19
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+69
+77
+73
+160
+180
+179
+143
+171
+168
+223
+233
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+223
+226
+222
+145
+169
+161
+145
+169
+161
+66
+81
+76
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+129
+158
+155
+145
+169
+161
+167
+187
+186
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+167
+187
+186
+160
+180
+179
+138
+162
+154
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+15
+19
+21
+63
+78
+73
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+83
+106
+98
+81
+104
+96
+83
+106
+98
+84
+111
+108
+45
+56
+57
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+125
+152
+150
+145
+169
+161
+163
+183
+182
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+175
+196
+195
+143
+171
+168
+136
+156
+155
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+71
+89
+89
+147
+172
+164
+147
+172
+164
+233
+235
+232
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+215
+225
+219
+139
+167
+164
+143
+171
+168
+60
+68
+64
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+23
+33
+34
+50
+68
+67
+68
+94
+91
+75
+101
+99
+75
+101
+99
+68
+94
+91
+51
+65
+60
+14
+22
+18
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+83
+106
+98
+83
+106
+98
+84
+111
+108
+83
+106
+98
+81
+104
+96
+83
+106
+98
+83
+106
+98
+15
+25
+26
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+45
+56
+57
+145
+169
+161
+160
+180
+179
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+239
+241
+238
+147
+172
+164
+151
+176
+168
+86
+105
+104
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+19
+21
+18
+143
+171
+168
+143
+171
+168
+179
+200
+199
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+248
+250
+247
+169
+186
+179
+147
+172
+164
+121
+140
+139
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+110
+129
+128
+145
+169
+161
+151
+176
+168
+246
+249
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+194
+207
+208
+147
+172
+164
+149
+174
+166
+30
+32
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+99
+115
+109
+149
+174
+166
+149
+174
+166
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+199
+212
+213
+143
+171
+168
+147
+172
+164
+35
+42
+39
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+27
+29
+147
+172
+164
+143
+171
+168
+199
+208
+203
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+249
+252
+248
+147
+172
+164
+160
+180
+179
+117
+133
+126
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+42
+47
+49
+143
+171
+168
+143
+171
+168
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+240
+245
+248
+151
+176
+168
+143
+171
+168
+93
+112
+111
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+96
+98
+95
+147
+172
+164
+143
+171
+168
+237
+239
+236
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+145
+169
+161
+143
+171
+168
+52
+59
+55
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+0
+1
+0
+122
+145
+138
+145
+169
+161
+157
+182
+173
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+193
+195
+192
+147
+172
+164
+145
+169
+161
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+85
+108
+100
+85
+108
+100
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+139
+167
+164
+147
+172
+164
+173
+190
+183
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+163
+183
+182
+143
+171
+168
+131
+151
+150
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+73
+75
+72
+143
+171
+168
+160
+180
+179
+220
+222
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+223
+233
+227
+143
+171
+168
+143
+171
+168
+71
+89
+89
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+61
+72
+73
+143
+171
+168
+143
+171
+168
+218
+228
+223
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+223
+233
+227
+149
+174
+166
+149
+174
+166
+78
+86
+82
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+11
+13
+10
+135
+162
+160
+143
+171
+168
+173
+190
+183
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+169
+186
+179
+145
+169
+161
+132
+156
+148
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+121
+137
+131
+149
+174
+166
+163
+183
+182
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+147
+172
+164
+145
+169
+161
+14
+22
+18
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+85
+101
+95
+147
+172
+164
+143
+171
+168
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+217
+219
+216
+147
+172
+164
+143
+171
+168
+45
+56
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+38
+48
+49
+147
+172
+164
+145
+169
+161
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+242
+244
+241
+160
+180
+179
+139
+167
+164
+93
+112
+111
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+26
+28
+25
+149
+174
+166
+145
+169
+161
+190
+207
+200
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+248
+250
+247
+151
+176
+168
+149
+174
+166
+117
+133
+126
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+99
+115
+109
+143
+171
+168
+160
+180
+179
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+194
+207
+208
+145
+169
+161
+149
+174
+166
+42
+44
+41
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+110
+129
+128
+147
+172
+164
+160
+180
+179
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+194
+207
+208
+147
+172
+164
+143
+171
+168
+26
+34
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+83
+106
+98
+78
+101
+93
+69
+91
+84
+62
+84
+77
+48
+62
+57
+23
+33
+34
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+18
+22
+24
+145
+169
+161
+145
+169
+161
+179
+200
+199
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+163
+183
+182
+160
+180
+179
+117
+136
+135
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+52
+59
+55
+145
+169
+161
+143
+171
+168
+211
+220
+215
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+145
+169
+161
+143
+171
+168
+88
+104
+98
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+84
+111
+108
+78
+101
+93
+42
+53
+53
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+72
+87
+82
+160
+180
+179
+143
+171
+168
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+226
+227
+145
+169
+161
+145
+169
+161
+61
+76
+71
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+136
+156
+155
+147
+172
+164
+163
+183
+182
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+175
+196
+195
+149
+174
+166
+136
+156
+155
+8
+11
+7
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+83
+106
+98
+81
+104
+96
+83
+106
+98
+81
+104
+96
+83
+106
+98
+84
+111
+108
+85
+108
+100
+81
+104
+96
+84
+111
+108
+85
+108
+100
+73
+98
+96
+20
+24
+25
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+132
+156
+148
+147
+172
+164
+163
+183
+182
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+167
+187
+186
+143
+171
+168
+136
+156
+155
+8
+11
+7
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+78
+86
+82
+143
+171
+168
+147
+172
+164
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+228
+230
+227
+143
+171
+168
+143
+171
+168
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+85
+108
+100
+81
+104
+96
+27
+37
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+56
+64
+60
+143
+171
+168
+147
+172
+164
+215
+225
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+239
+236
+149
+174
+166
+149
+174
+166
+85
+101
+95
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+145
+169
+161
+143
+171
+168
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+248
+250
+247
+169
+186
+179
+147
+172
+164
+125
+152
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+81
+104
+96
+83
+106
+98
+81
+104
+96
+83
+106
+98
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+83
+106
+98
+19
+21
+18
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+117
+133
+126
+160
+180
+179
+160
+180
+179
+246
+249
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+194
+207
+208
+147
+172
+164
+143
+171
+168
+23
+27
+29
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+0
+1
+0
+109
+111
+108
+147
+172
+164
+149
+174
+166
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+205
+215
+210
+145
+169
+161
+143
+171
+168
+41
+48
+44
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+15
+25
+26
+68
+94
+91
+84
+111
+108
+84
+111
+108
+75
+101
+99
+54
+72
+72
+34
+51
+50
+18
+28
+28
+6
+13
+15
+6
+13
+15
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+6
+13
+15
+6
+13
+15
+20
+24
+25
+35
+46
+46
+50
+68
+67
+73
+98
+96
+84
+111
+108
+84
+111
+108
+75
+101
+99
+35
+46
+46
+0
+1
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+6
+13
+15
+18
+22
+24
+33
+40
+37
+53
+68
+62
+75
+101
+99
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+68
+94
+91
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+33
+34
+143
+171
+168
+145
+169
+161
+183
+204
+203
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+145
+169
+161
+160
+180
+179
+104
+123
+122
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+29
+39
+39
+143
+171
+168
+143
+171
+168
+201
+211
+206
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+240
+245
+248
+160
+180
+179
+147
+172
+164
+99
+118
+117
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+46
+46
+83
+106
+98
+81
+104
+96
+73
+98
+96
+37
+44
+40
+5
+7
+3
+5
+7
+3
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+26
+34
+30
+69
+91
+84
+85
+108
+100
+83
+106
+98
+53
+68
+62
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+40
+57
+57
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+35
+46
+46
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+93
+109
+103
+143
+171
+168
+149
+174
+166
+242
+244
+241
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+211
+220
+215
+145
+169
+161
+147
+172
+164
+49
+51
+48
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+121
+137
+131
+149
+174
+166
+154
+179
+171
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+199
+201
+198
+143
+171
+168
+145
+169
+161
+18
+22
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+49
+44
+85
+108
+100
+84
+111
+108
+61
+76
+71
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+50
+68
+67
+84
+111
+108
+84
+111
+108
+50
+68
+67
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+28
+28
+75
+101
+99
+84
+111
+108
+85
+108
+100
+71
+94
+87
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+16
+18
+15
+136
+156
+155
+147
+172
+164
+175
+196
+195
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+163
+183
+182
+143
+171
+168
+131
+151
+150
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+61
+72
+73
+143
+171
+168
+143
+171
+168
+213
+226
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+223
+233
+227
+147
+172
+164
+143
+171
+168
+76
+92
+86
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+27
+24
+84
+111
+108
+84
+111
+108
+54
+72
+72
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+55
+70
+64
+83
+106
+98
+83
+106
+98
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+35
+49
+44
+83
+106
+98
+84
+111
+108
+84
+111
+108
+18
+28
+28
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+69
+80
+80
+149
+174
+166
+147
+172
+164
+228
+230
+227
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+226
+227
+149
+174
+166
+147
+172
+164
+71
+89
+89
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+136
+156
+155
+145
+169
+161
+173
+190
+183
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+173
+190
+183
+160
+180
+179
+132
+156
+148
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+72
+87
+82
+83
+106
+98
+85
+101
+95
+5
+7
+3
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+6
+13
+15
+73
+98
+96
+84
+111
+108
+68
+94
+91
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+66
+88
+81
+81
+104
+96
+83
+106
+98
+39
+53
+47
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+122
+145
+138
+160
+180
+179
+163
+183
+182
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+193
+195
+192
+149
+174
+166
+135
+162
+160
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+81
+96
+91
+160
+180
+179
+143
+171
+168
+237
+239
+236
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+217
+219
+216
+145
+169
+161
+143
+171
+168
+56
+64
+60
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+30
+27
+75
+101
+99
+84
+111
+108
+44
+58
+53
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+45
+56
+57
+83
+106
+98
+85
+108
+100
+23
+33
+34
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+42
+53
+53
+84
+111
+108
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+42
+47
+49
+147
+172
+164
+139
+167
+164
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+244
+247
+243
+143
+171
+168
+149
+174
+166
+104
+106
+103
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+19
+21
+18
+145
+169
+161
+143
+171
+168
+187
+204
+197
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+160
+180
+179
+143
+171
+168
+117
+136
+135
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+48
+62
+57
+83
+106
+98
+85
+108
+100
+15
+25
+26
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+25
+26
+84
+111
+108
+85
+108
+100
+51
+65
+60
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+20
+27
+24
+81
+104
+96
+83
+106
+98
+66
+88
+81
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+112
+128
+122
+145
+169
+161
+160
+180
+179
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+149
+174
+166
+147
+172
+164
+29
+39
+39
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+104
+123
+122
+142
+166
+158
+160
+180
+179
+213
+223
+218
+237
+239
+236
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+190
+207
+200
+149
+174
+166
+147
+172
+164
+34
+36
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+62
+84
+77
+84
+111
+108
+84
+111
+108
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+8
+11
+7
+83
+106
+98
+85
+108
+100
+57
+82
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+84
+111
+108
+84
+111
+108
+78
+96
+96
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+18
+22
+24
+160
+180
+179
+142
+166
+158
+194
+207
+208
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+160
+180
+179
+145
+169
+161
+121
+137
+131
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+42
+47
+49
+147
+172
+164
+143
+171
+168
+143
+171
+168
+143
+171
+168
+147
+172
+164
+157
+182
+173
+173
+190
+183
+187
+204
+197
+203
+216
+217
+218
+228
+223
+237
+239
+236
+248
+250
+247
+252
+254
+251
+237
+242
+245
+149
+174
+166
+143
+171
+168
+93
+112
+111
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+74
+96
+89
+83
+106
+98
+84
+111
+108
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+84
+111
+108
+85
+108
+100
+78
+101
+93
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+83
+106
+98
+85
+108
+100
+81
+104
+96
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+78
+96
+96
+145
+169
+161
+145
+169
+161
+233
+235
+232
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+226
+227
+142
+166
+158
+160
+180
+179
+56
+64
+60
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+136
+156
+155
+147
+172
+164
+151
+176
+168
+217
+219
+216
+194
+207
+208
+175
+196
+195
+163
+183
+182
+160
+180
+179
+145
+169
+161
+143
+171
+168
+143
+171
+168
+143
+171
+168
+150
+178
+176
+173
+190
+183
+160
+180
+179
+149
+174
+166
+142
+166
+158
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+83
+106
+98
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+83
+106
+98
+84
+111
+108
+75
+101
+99
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+135
+162
+160
+143
+171
+168
+173
+190
+183
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+167
+187
+186
+143
+171
+168
+136
+156
+155
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+69
+80
+80
+147
+172
+164
+143
+171
+168
+228
+230
+227
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+223
+233
+227
+220
+222
+219
+199
+208
+203
+175
+196
+195
+163
+183
+182
+143
+171
+168
+160
+180
+179
+139
+167
+164
+78
+86
+82
+0
+2
+0
+74
+85
+85
+147
+172
+164
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+78
+101
+93
+84
+111
+108
+75
+101
+99
+20
+27
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+18
+28
+28
+85
+108
+100
+85
+108
+100
+83
+106
+98
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+81
+104
+96
+83
+106
+98
+73
+98
+96
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+61
+72
+73
+145
+169
+161
+149
+174
+166
+213
+226
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+231
+233
+230
+145
+169
+161
+147
+172
+164
+78
+96
+96
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+13
+15
+12
+143
+171
+168
+147
+172
+164
+167
+187
+186
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+149
+174
+166
+149
+174
+166
+129
+158
+155
+142
+166
+158
+145
+169
+161
+143
+171
+168
+56
+64
+60
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+73
+98
+96
+83
+106
+98
+85
+108
+100
+48
+62
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+56
+64
+60
+84
+111
+108
+84
+111
+108
+73
+98
+96
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+84
+111
+108
+84
+111
+108
+74
+96
+89
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+121
+140
+139
+143
+171
+168
+151
+176
+168
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+194
+207
+208
+145
+169
+161
+142
+166
+158
+20
+24
+25
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+99
+118
+117
+149
+174
+166
+143
+171
+168
+237
+242
+245
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+205
+215
+210
+147
+172
+164
+160
+180
+179
+76
+92
+86
+147
+172
+164
+143
+171
+168
+147
+172
+164
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+60
+78
+78
+85
+108
+100
+84
+111
+108
+75
+101
+99
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+85
+101
+95
+83
+106
+98
+84
+111
+108
+60
+78
+78
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+30
+37
+33
+83
+106
+98
+84
+111
+108
+69
+84
+79
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+37
+38
+36
+147
+172
+164
+147
+172
+164
+199
+212
+213
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+244
+247
+243
+145
+169
+161
+160
+180
+179
+104
+123
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+30
+32
+30
+147
+172
+164
+147
+172
+164
+194
+207
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+240
+245
+248
+147
+172
+164
+145
+169
+161
+117
+136
+135
+147
+172
+164
+149
+174
+166
+143
+171
+168
+20
+24
+25
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+45
+52
+48
+84
+111
+108
+85
+108
+100
+85
+108
+100
+57
+82
+80
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+57
+82
+80
+75
+101
+99
+84
+111
+108
+83
+106
+98
+39
+53
+47
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+57
+82
+80
+84
+111
+108
+83
+106
+98
+54
+72
+72
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+93
+112
+111
+147
+172
+164
+149
+174
+166
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+203
+216
+217
+145
+169
+161
+142
+166
+158
+41
+48
+44
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+126
+146
+144
+147
+172
+164
+150
+178
+176
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+179
+200
+199
+143
+171
+168
+160
+180
+179
+99
+115
+109
+149
+174
+166
+147
+172
+164
+129
+158
+155
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+16
+18
+15
+84
+111
+108
+85
+108
+100
+85
+108
+100
+84
+111
+108
+66
+88
+81
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+17
+19
+76
+92
+86
+85
+108
+100
+85
+108
+100
+84
+111
+108
+85
+108
+100
+11
+17
+19
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+81
+104
+96
+84
+111
+108
+83
+106
+98
+45
+56
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+136
+156
+155
+160
+180
+179
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+249
+252
+248
+169
+186
+179
+143
+171
+168
+126
+146
+144
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+56
+64
+60
+147
+172
+164
+145
+169
+161
+213
+226
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+145
+169
+161
+147
+172
+164
+85
+96
+97
+147
+172
+164
+147
+172
+164
+145
+169
+161
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+58
+73
+68
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+75
+101
+99
+48
+62
+57
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+16
+18
+15
+51
+65
+60
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+58
+76
+75
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+69
+91
+84
+84
+111
+108
+83
+106
+98
+85
+108
+100
+26
+34
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+78
+86
+82
+145
+169
+161
+147
+172
+164
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+226
+227
+147
+172
+164
+149
+174
+166
+66
+77
+78
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+138
+162
+154
+145
+169
+161
+169
+186
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+169
+186
+179
+149
+174
+166
+139
+167
+164
+136
+156
+155
+160
+180
+179
+143
+171
+168
+85
+101
+95
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+6
+13
+15
+78
+101
+93
+84
+111
+108
+81
+104
+96
+85
+108
+100
+84
+111
+108
+84
+111
+108
+83
+106
+98
+68
+94
+91
+48
+62
+57
+37
+44
+40
+20
+27
+24
+11
+13
+10
+5
+7
+3
+5
+7
+3
+0
+2
+0
+5
+7
+3
+5
+7
+3
+13
+15
+12
+20
+27
+24
+37
+44
+40
+48
+62
+57
+68
+94
+91
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+84
+111
+108
+73
+98
+96
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+13
+15
+12
+45
+52
+48
+75
+101
+99
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+127
+151
+143
+160
+180
+179
+163
+183
+182
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+173
+190
+183
+160
+180
+179
+136
+156
+155
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+85
+96
+97
+147
+172
+164
+143
+171
+168
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+147
+172
+164
+143
+171
+168
+249
+252
+248
+252
+254
+251
+252
+254
+251
+254
+255
+252
+213
+226
+227
+160
+180
+179
+149
+174
+166
+78
+86
+82
+145
+169
+161
+145
+169
+161
+143
+171
+168
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+29
+39
+39
+83
+106
+98
+84
+111
+108
+85
+108
+100
+85
+108
+100
+83
+106
+98
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+75
+101
+99
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+85
+108
+100
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+30
+37
+33
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+85
+108
+100
+84
+111
+108
+83
+106
+98
+81
+104
+96
+66
+88
+81
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+45
+56
+57
+147
+172
+164
+147
+172
+164
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+145
+169
+161
+147
+172
+164
+86
+105
+104
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+15
+19
+21
+143
+171
+168
+143
+171
+168
+175
+196
+195
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+145
+169
+161
+143
+171
+168
+175
+196
+195
+252
+254
+251
+252
+254
+251
+254
+255
+252
+249
+252
+248
+151
+176
+168
+143
+171
+168
+131
+151
+150
+160
+180
+179
+145
+169
+161
+147
+172
+164
+42
+53
+53
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+37
+44
+40
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+83
+106
+98
+83
+106
+98
+85
+108
+100
+83
+106
+98
+81
+104
+96
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+81
+104
+96
+84
+111
+108
+29
+39
+39
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+39
+53
+47
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+117
+133
+126
+147
+172
+164
+151
+176
+168
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+199
+208
+203
+143
+171
+168
+147
+172
+164
+34
+36
+33
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+112
+128
+122
+147
+172
+164
+147
+172
+164
+244
+247
+243
+252
+254
+251
+252
+254
+251
+254
+255
+252
+194
+207
+208
+147
+172
+164
+149
+174
+166
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+194
+207
+208
+147
+172
+164
+147
+172
+164
+145
+169
+161
+139
+167
+164
+160
+180
+179
+147
+172
+164
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+26
+34
+30
+74
+96
+89
+83
+106
+98
+84
+111
+108
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+73
+98
+96
+23
+30
+27
+5
+7
+3
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+81
+104
+96
+84
+111
+108
+83
+106
+98
+83
+106
+98
+83
+106
+98
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+20
+27
+24
+160
+180
+179
+139
+167
+164
+194
+207
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+169
+186
+179
+143
+171
+168
+110
+129
+128
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+45
+47
+44
+160
+180
+179
+139
+167
+164
+199
+212
+213
+252
+254
+251
+254
+255
+252
+254
+255
+252
+248
+250
+247
+147
+172
+164
+147
+172
+164
+213
+226
+227
+252
+254
+251
+252
+254
+251
+254
+255
+252
+242
+244
+241
+147
+172
+164
+143
+171
+168
+149
+174
+166
+145
+169
+161
+145
+169
+161
+145
+169
+161
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+6
+13
+15
+50
+68
+67
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+51
+65
+60
+5
+7
+3
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+88
+104
+98
+145
+169
+161
+149
+174
+166
+237
+239
+236
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+211
+220
+215
+143
+171
+168
+145
+169
+161
+52
+59
+55
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+127
+151
+143
+149
+174
+166
+154
+179
+171
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+160
+180
+179
+160
+180
+179
+145
+169
+161
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+175
+196
+195
+145
+169
+161
+160
+180
+179
+110
+129
+128
+143
+171
+168
+160
+180
+179
+117
+136
+135
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+13
+15
+12
+48
+62
+57
+73
+98
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+78
+96
+96
+45
+56
+57
+11
+17
+19
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+136
+156
+155
+149
+174
+166
+176
+194
+187
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+169
+186
+179
+160
+180
+179
+125
+152
+150
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+66
+77
+78
+145
+169
+161
+143
+171
+168
+218
+228
+223
+252
+254
+251
+252
+254
+251
+254
+255
+252
+233
+235
+232
+145
+169
+161
+145
+169
+161
+242
+244
+241
+254
+255
+252
+254
+255
+252
+254
+255
+252
+233
+235
+232
+145
+169
+161
+147
+172
+164
+92
+94
+91
+145
+169
+161
+142
+166
+158
+145
+169
+161
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+14
+22
+18
+35
+46
+46
+55
+70
+64
+69
+84
+79
+69
+91
+84
+74
+96
+89
+81
+104
+96
+78
+101
+93
+68
+94
+91
+62
+84
+77
+54
+72
+72
+34
+51
+50
+20
+27
+24
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+61
+72
+73
+145
+169
+161
+160
+180
+179
+220
+222
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+139
+167
+164
+145
+169
+161
+78
+86
+82
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+143
+171
+168
+147
+172
+164
+167
+187
+186
+252
+254
+251
+254
+255
+252
+252
+254
+251
+254
+255
+252
+160
+180
+179
+160
+180
+179
+150
+178
+176
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+160
+180
+179
+143
+171
+168
+135
+162
+160
+143
+171
+168
+143
+171
+168
+143
+171
+168
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+126
+146
+144
+145
+169
+161
+150
+178
+176
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+182
+199
+192
+143
+171
+168
+147
+172
+164
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+104
+106
+103
+145
+169
+161
+147
+172
+164
+239
+241
+238
+252
+254
+251
+252
+254
+251
+248
+250
+247
+205
+215
+210
+147
+172
+164
+147
+172
+164
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+217
+219
+216
+145
+169
+161
+149
+174
+166
+78
+86
+82
+149
+174
+166
+143
+171
+168
+147
+172
+164
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+41
+48
+44
+143
+171
+168
+143
+171
+168
+207
+217
+212
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+160
+180
+179
+149
+174
+166
+99
+115
+109
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+30
+31
+143
+171
+168
+143
+171
+168
+183
+204
+203
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+145
+169
+161
+160
+180
+179
+194
+207
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+150
+178
+176
+143
+171
+168
+121
+140
+139
+160
+180
+179
+147
+172
+164
+143
+171
+168
+30
+32
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+85
+108
+100
+85
+108
+100
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+99
+115
+109
+151
+176
+168
+143
+171
+168
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+145
+169
+161
+160
+180
+179
+33
+40
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+0
+1
+0
+121
+137
+131
+147
+172
+164
+149
+174
+166
+240
+245
+248
+254
+255
+252
+254
+255
+252
+252
+254
+251
+173
+190
+183
+145
+169
+161
+145
+169
+161
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+199
+208
+203
+145
+169
+161
+145
+169
+161
+93
+109
+103
+147
+172
+164
+143
+171
+168
+34
+36
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+83
+106
+98
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+139
+167
+164
+160
+180
+179
+187
+204
+197
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+154
+179
+171
+160
+180
+179
+119
+143
+136
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+45
+56
+57
+147
+172
+164
+143
+171
+168
+211
+220
+215
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+143
+171
+168
+143
+171
+168
+231
+233
+230
+254
+255
+252
+254
+255
+252
+248
+250
+247
+237
+242
+245
+143
+171
+168
+143
+171
+168
+93
+112
+111
+20
+24
+25
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+83
+106
+98
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+76
+92
+86
+145
+169
+161
+139
+167
+164
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+215
+225
+219
+145
+169
+161
+139
+167
+164
+61
+72
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+138
+162
+154
+143
+171
+168
+157
+182
+173
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+149
+174
+166
+143
+171
+168
+147
+172
+164
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+169
+186
+179
+143
+171
+168
+145
+169
+161
+11
+13
+10
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+135
+162
+160
+143
+171
+168
+173
+190
+183
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+167
+187
+186
+143
+171
+168
+138
+162
+154
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+74
+85
+85
+149
+174
+166
+143
+171
+168
+223
+233
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+147
+172
+164
+143
+171
+168
+246
+249
+245
+254
+255
+252
+252
+254
+251
+254
+255
+252
+228
+230
+227
+142
+166
+158
+160
+180
+179
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+81
+104
+96
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+56
+64
+60
+147
+172
+164
+143
+171
+168
+213
+223
+218
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+239
+241
+238
+147
+172
+164
+160
+180
+179
+81
+92
+93
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+13
+15
+12
+145
+169
+161
+160
+180
+179
+173
+190
+183
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+147
+172
+164
+160
+180
+179
+173
+190
+183
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+149
+174
+166
+142
+166
+158
+132
+156
+148
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+23
+33
+34
+44
+58
+53
+58
+76
+75
+69
+91
+84
+73
+98
+96
+81
+104
+96
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+84
+111
+108
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+117
+136
+135
+147
+172
+164
+160
+180
+179
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+143
+171
+168
+142
+166
+158
+26
+28
+25
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+99
+118
+117
+145
+169
+161
+143
+171
+168
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+199
+208
+203
+145
+169
+161
+143
+171
+168
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+143
+171
+168
+143
+171
+168
+42
+47
+49
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+45
+56
+57
+73
+98
+96
+85
+108
+100
+85
+108
+100
+83
+106
+98
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+34
+36
+33
+160
+180
+179
+142
+166
+158
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+244
+247
+243
+149
+174
+166
+160
+180
+179
+104
+123
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+39
+41
+39
+143
+171
+168
+149
+174
+166
+199
+208
+203
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+160
+180
+179
+145
+169
+161
+211
+220
+215
+249
+252
+248
+213
+226
+227
+169
+186
+179
+147
+172
+164
+145
+169
+161
+147
+172
+164
+104
+123
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+19
+21
+18
+74
+96
+89
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+83
+106
+98
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+83
+106
+98
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+86
+105
+104
+145
+169
+161
+143
+171
+168
+239
+241
+238
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+215
+212
+145
+169
+161
+145
+169
+161
+45
+52
+48
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+131
+151
+150
+147
+172
+164
+150
+178
+176
+254
+255
+252
+240
+245
+248
+252
+254
+251
+252
+254
+251
+154
+179
+171
+143
+171
+168
+143
+171
+168
+160
+180
+179
+145
+169
+161
+160
+180
+179
+194
+207
+208
+194
+207
+208
+147
+172
+164
+145
+169
+161
+23
+24
+22
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+16
+18
+15
+73
+98
+96
+85
+108
+100
+83
+106
+98
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+13
+15
+12
+139
+167
+164
+149
+174
+166
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+163
+183
+182
+143
+171
+168
+125
+152
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+60
+68
+64
+145
+169
+161
+143
+171
+168
+213
+226
+227
+252
+254
+251
+252
+254
+251
+228
+230
+227
+175
+196
+195
+147
+172
+164
+145
+169
+161
+167
+187
+186
+215
+225
+219
+254
+255
+252
+254
+255
+252
+233
+235
+232
+143
+171
+168
+143
+171
+168
+81
+92
+93
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+62
+84
+77
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+83
+106
+98
+81
+104
+96
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+69
+80
+80
+147
+172
+164
+147
+172
+164
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+228
+230
+227
+143
+171
+168
+151
+176
+168
+69
+77
+73
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+135
+162
+160
+145
+169
+161
+169
+186
+179
+203
+216
+217
+163
+183
+182
+143
+171
+168
+147
+172
+164
+160
+180
+179
+175
+196
+195
+248
+250
+247
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+169
+186
+179
+147
+172
+164
+135
+159
+151
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+28
+28
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+81
+104
+96
+81
+104
+96
+71
+89
+89
+45
+52
+48
+23
+33
+34
+15
+19
+21
+6
+13
+15
+6
+13
+15
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+131
+151
+150
+160
+180
+179
+160
+180
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+182
+199
+192
+160
+180
+179
+139
+167
+164
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+86
+105
+104
+139
+167
+164
+147
+172
+164
+143
+171
+168
+169
+186
+179
+203
+216
+217
+244
+247
+243
+248
+250
+247
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+213
+223
+218
+143
+171
+168
+143
+171
+168
+60
+68
+64
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+52
+59
+55
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+68
+94
+91
+19
+21
+18
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+45
+52
+48
+145
+169
+161
+145
+169
+161
+203
+216
+217
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+143
+171
+168
+145
+169
+161
+93
+109
+103
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+23
+24
+22
+149
+174
+166
+147
+172
+164
+176
+194
+187
+248
+250
+247
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+248
+250
+247
+169
+186
+179
+147
+172
+164
+117
+136
+135
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+57
+82
+80
+83
+106
+98
+83
+106
+98
+84
+111
+108
+78
+101
+93
+6
+13
+15
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+104
+123
+122
+143
+171
+168
+149
+174
+166
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+199
+208
+203
+143
+171
+168
+143
+171
+168
+34
+36
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+104
+123
+122
+143
+171
+168
+150
+178
+176
+246
+249
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+194
+207
+208
+145
+169
+161
+147
+172
+164
+37
+38
+36
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+73
+98
+96
+84
+111
+108
+81
+104
+96
+84
+111
+108
+41
+48
+44
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+27
+29
+147
+172
+164
+147
+172
+164
+199
+208
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+249
+252
+248
+150
+178
+176
+147
+172
+164
+121
+137
+131
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+49
+51
+48
+149
+174
+166
+147
+172
+164
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+244
+247
+243
+150
+178
+176
+143
+171
+168
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+75
+101
+99
+81
+104
+96
+84
+111
+108
+81
+104
+96
+15
+25
+26
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+85
+96
+97
+147
+172
+164
+143
+171
+168
+237
+239
+236
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+223
+218
+147
+172
+164
+160
+180
+179
+44
+62
+61
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+131
+151
+150
+147
+172
+164
+160
+180
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+193
+195
+192
+143
+171
+168
+143
+171
+168
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+75
+101
+99
+83
+106
+98
+84
+111
+108
+83
+106
+98
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+135
+159
+151
+160
+180
+179
+169
+186
+179
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+167
+187
+186
+143
+171
+168
+132
+156
+148
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+65
+73
+69
+147
+172
+164
+147
+172
+164
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+213
+226
+227
+149
+174
+166
+145
+169
+161
+71
+89
+89
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+76
+92
+86
+84
+111
+108
+81
+104
+96
+84
+111
+108
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+61
+72
+73
+142
+166
+158
+143
+171
+168
+213
+223
+218
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+147
+172
+164
+143
+171
+168
+85
+96
+97
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+15
+19
+21
+136
+156
+155
+143
+171
+168
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+163
+183
+182
+145
+169
+161
+125
+152
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+50
+68
+67
+84
+111
+108
+83
+106
+98
+84
+111
+108
+8
+11
+7
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+121
+137
+131
+143
+171
+168
+160
+180
+179
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+147
+172
+164
+145
+169
+161
+14
+22
+18
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+93
+109
+103
+149
+174
+166
+145
+169
+161
+242
+244
+241
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+211
+220
+215
+147
+172
+164
+147
+172
+164
+42
+53
+53
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+30
+27
+81
+104
+96
+84
+111
+108
+83
+106
+98
+23
+33
+34
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+46
+46
+149
+174
+166
+145
+169
+161
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+244
+247
+243
+160
+180
+179
+143
+171
+168
+99
+118
+117
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+30
+32
+30
+160
+180
+179
+139
+167
+164
+199
+208
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+248
+250
+247
+151
+176
+168
+160
+180
+179
+112
+128
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+69
+84
+79
+84
+111
+108
+83
+106
+98
+55
+70
+64
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+85
+108
+100
+85
+108
+100
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+93
+112
+111
+147
+172
+164
+150
+178
+176
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+199
+212
+213
+145
+169
+161
+145
+169
+161
+45
+47
+44
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+109
+132
+125
+147
+172
+164
+150
+178
+176
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+199
+201
+198
+145
+169
+161
+139
+167
+164
+23
+27
+29
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+14
+22
+18
+78
+101
+93
+84
+111
+108
+84
+111
+108
+20
+27
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+13
+15
+12
+143
+171
+168
+145
+169
+161
+193
+195
+192
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+160
+180
+179
+160
+180
+179
+121
+140
+139
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+56
+64
+60
+145
+169
+161
+143
+171
+168
+213
+223
+218
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+237
+242
+245
+149
+174
+166
+147
+172
+164
+85
+101
+95
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+30
+32
+30
+78
+101
+93
+83
+106
+98
+78
+101
+93
+19
+21
+18
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+78
+86
+82
+145
+169
+161
+149
+174
+166
+223
+233
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+145
+169
+161
+145
+169
+161
+63
+78
+73
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+135
+162
+160
+147
+172
+164
+167
+187
+186
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+173
+190
+183
+149
+174
+166
+136
+156
+155
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+25
+26
+68
+94
+91
+84
+111
+108
+75
+101
+99
+40
+57
+57
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+136
+156
+155
+160
+180
+179
+163
+183
+182
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+175
+196
+195
+143
+171
+168
+136
+156
+155
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+81
+92
+93
+143
+171
+168
+147
+172
+164
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+223
+226
+222
+143
+171
+168
+150
+178
+176
+61
+72
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+44
+58
+53
+78
+101
+93
+84
+111
+108
+81
+104
+96
+58
+73
+68
+37
+44
+40
+20
+27
+24
+8
+11
+7
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+45
+56
+57
+145
+169
+161
+145
+169
+161
+211
+220
+215
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+147
+172
+164
+151
+176
+168
+88
+104
+98
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+16
+18
+15
+145
+169
+161
+143
+171
+168
+179
+200
+199
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+169
+186
+179
+145
+169
+161
+122
+145
+138
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+84
+111
+108
+85
+108
+100
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+75
+101
+99
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+110
+129
+128
+143
+171
+168
+150
+178
+176
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+147
+172
+164
+143
+171
+168
+26
+34
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+99
+115
+109
+149
+174
+166
+149
+174
+166
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+199
+212
+213
+145
+169
+161
+143
+171
+168
+37
+44
+40
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+83
+106
+98
+84
+111
+108
+81
+104
+96
+81
+104
+96
+83
+106
+98
+84
+111
+108
+85
+108
+100
+83
+106
+98
+81
+104
+96
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+26
+34
+30
+149
+174
+166
+149
+174
+166
+190
+207
+200
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+147
+172
+164
+160
+180
+179
+117
+133
+126
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+42
+47
+49
+143
+171
+168
+143
+171
+168
+199
+212
+213
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+244
+247
+243
+160
+180
+179
+147
+172
+164
+99
+118
+117
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+81
+104
+96
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+88
+104
+98
+147
+172
+164
+160
+180
+179
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+217
+219
+216
+145
+169
+161
+139
+167
+164
+52
+59
+55
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+121
+137
+131
+151
+176
+168
+160
+180
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+194
+207
+208
+142
+166
+158
+145
+169
+161
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+83
+106
+98
+83
+106
+98
+83
+106
+98
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+136
+156
+155
+143
+171
+168
+169
+186
+179
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+160
+184
+176
+143
+171
+168
+136
+156
+155
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+61
+72
+73
+147
+172
+164
+147
+172
+164
+220
+222
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+248
+250
+247
+218
+228
+223
+160
+180
+179
+143
+171
+168
+78
+86
+82
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+63
+78
+73
+147
+172
+164
+160
+180
+179
+220
+222
+219
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+233
+235
+232
+147
+172
+164
+147
+172
+164
+72
+87
+82
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+139
+167
+164
+143
+171
+168
+173
+190
+183
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+249
+252
+248
+169
+186
+179
+147
+172
+164
+132
+156
+148
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+83
+106
+98
+81
+104
+96
+81
+104
+96
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+126
+146
+144
+145
+169
+161
+150
+178
+176
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+175
+196
+195
+160
+180
+179
+145
+169
+161
+11
+17
+19
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+96
+98
+95
+149
+174
+166
+143
+171
+168
+237
+239
+236
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+217
+219
+216
+143
+171
+168
+160
+180
+179
+45
+56
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+45
+47
+44
+160
+180
+179
+145
+169
+161
+205
+215
+210
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+147
+172
+164
+143
+171
+168
+109
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+23
+27
+29
+149
+174
+166
+143
+171
+168
+187
+204
+197
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+248
+250
+247
+150
+178
+176
+147
+172
+164
+117
+133
+126
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+83
+106
+98
+83
+106
+98
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+99
+118
+117
+145
+169
+161
+160
+180
+179
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+201
+211
+206
+147
+172
+164
+147
+172
+164
+29
+39
+39
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+110
+129
+128
+147
+172
+164
+160
+180
+179
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+199
+208
+203
+147
+172
+164
+143
+171
+168
+30
+32
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+84
+111
+108
+84
+111
+108
+84
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+22
+24
+143
+171
+168
+145
+169
+161
+187
+204
+197
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+160
+180
+179
+147
+172
+164
+126
+146
+144
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+45
+56
+57
+145
+169
+161
+143
+171
+168
+211
+220
+215
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+147
+172
+164
+143
+171
+168
+88
+104
+98
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+104
+96
+81
+104
+96
+85
+108
+100
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+76
+92
+86
+147
+172
+164
+147
+172
+164
+233
+235
+232
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+226
+227
+139
+167
+164
+160
+180
+179
+60
+68
+64
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+125
+152
+150
+147
+172
+164
+163
+183
+182
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+175
+196
+195
+149
+174
+166
+135
+162
+160
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+135
+162
+160
+143
+171
+168
+167
+187
+186
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+173
+190
+183
+145
+169
+161
+129
+158
+155
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+0
+1
+0
+78
+86
+82
+143
+171
+168
+147
+172
+164
+223
+233
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+228
+230
+227
+149
+174
+166
+160
+180
+179
+65
+73
+69
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+61
+72
+73
+145
+169
+161
+149
+174
+166
+213
+223
+218
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+143
+171
+168
+143
+171
+168
+92
+94
+91
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+6
+13
+15
+138
+162
+154
+160
+180
+179
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+160
+180
+179
+145
+169
+161
+125
+152
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+121
+137
+131
+145
+169
+161
+160
+180
+179
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+199
+201
+198
+147
+172
+164
+143
+171
+168
+23
+27
+29
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+93
+109
+103
+147
+172
+164
+147
+172
+164
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+203
+216
+217
+145
+169
+161
+143
+171
+168
+42
+53
+53
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+34
+36
+33
+143
+171
+168
+160
+180
+179
+183
+204
+203
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+143
+171
+168
+149
+174
+166
+104
+123
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+37
+38
+36
+139
+167
+164
+160
+180
+179
+194
+207
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+244
+247
+243
+160
+180
+179
+149
+174
+166
+99
+115
+109
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+20
+27
+24
+20
+27
+24
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+93
+112
+111
+145
+169
+161
+149
+174
+166
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+211
+220
+215
+143
+171
+168
+149
+174
+166
+42
+53
+53
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+109
+132
+125
+147
+172
+164
+154
+179
+171
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+199
+201
+198
+143
+171
+168
+147
+172
+164
+20
+24
+25
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+33
+40
+37
+85
+108
+100
+85
+108
+100
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+142
+166
+158
+143
+171
+168
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+150
+178
+176
+147
+172
+164
+125
+152
+150
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+60
+68
+64
+147
+172
+164
+143
+171
+168
+220
+222
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+223
+233
+227
+149
+174
+166
+143
+171
+168
+81
+96
+91
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+27
+37
+37
+84
+111
+108
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+69
+80
+80
+147
+172
+164
+147
+172
+164
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+149
+174
+166
+147
+172
+164
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+136
+156
+155
+150
+178
+176
+167
+187
+186
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+173
+190
+183
+145
+169
+161
+135
+162
+160
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+30
+37
+33
+83
+106
+98
+85
+108
+100
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+126
+146
+144
+160
+180
+179
+169
+186
+179
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+167
+187
+186
+160
+180
+179
+142
+166
+158
+11
+17
+19
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+81
+96
+91
+145
+169
+161
+147
+172
+164
+233
+235
+232
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+143
+171
+168
+145
+169
+161
+61
+72
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+27
+37
+37
+84
+111
+108
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+45
+56
+57
+145
+169
+161
+139
+167
+164
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+244
+247
+243
+145
+169
+161
+143
+171
+168
+104
+106
+103
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+20
+24
+25
+145
+169
+161
+143
+171
+168
+187
+204
+197
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+157
+182
+173
+145
+169
+161
+121
+137
+131
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+14
+22
+18
+44
+58
+53
+78
+101
+93
+81
+104
+96
+85
+108
+100
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+112
+128
+122
+143
+171
+168
+151
+176
+168
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+143
+171
+168
+145
+169
+161
+27
+37
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+104
+123
+122
+145
+169
+161
+160
+180
+179
+246
+249
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+194
+207
+208
+143
+171
+168
+143
+171
+168
+33
+40
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+37
+44
+40
+66
+88
+81
+75
+101
+99
+86
+117
+108
+75
+101
+99
+84
+111
+108
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+27
+29
+147
+172
+164
+160
+180
+179
+194
+207
+208
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+249
+252
+248
+169
+186
+179
+143
+171
+168
+138
+162
+154
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+42
+53
+53
+145
+169
+161
+143
+171
+168
+203
+216
+217
+254
+255
+252
+254
+255
+252
+231
+233
+230
+213
+223
+218
+207
+217
+212
+215
+225
+219
+237
+242
+245
+254
+255
+252
+252
+254
+251
+254
+255
+252
+248
+250
+247
+147
+172
+164
+143
+171
+168
+99
+115
+109
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+27
+24
+50
+68
+67
+84
+111
+108
+84
+111
+108
+85
+108
+100
+84
+111
+108
+85
+108
+100
+83
+106
+98
+83
+106
+98
+85
+108
+100
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+92
+94
+91
+145
+169
+161
+142
+166
+158
+237
+239
+236
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+217
+219
+216
+143
+171
+168
+147
+172
+164
+143
+171
+168
+56
+64
+60
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+131
+151
+150
+142
+166
+158
+169
+186
+179
+199
+208
+203
+160
+180
+179
+143
+171
+168
+143
+171
+168
+143
+171
+168
+143
+171
+168
+145
+169
+161
+163
+183
+182
+211
+220
+215
+254
+255
+252
+252
+254
+251
+179
+200
+199
+149
+174
+166
+139
+167
+164
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+45
+52
+48
+68
+94
+91
+85
+108
+100
+84
+111
+108
+81
+104
+96
+81
+104
+96
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+136
+156
+155
+143
+171
+168
+173
+190
+183
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+169
+186
+179
+147
+172
+164
+160
+180
+179
+143
+171
+168
+110
+129
+128
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+69
+80
+80
+145
+169
+161
+143
+171
+168
+139
+167
+164
+154
+179
+171
+179
+200
+199
+201
+211
+206
+213
+215
+212
+201
+211
+206
+176
+194
+187
+143
+171
+168
+143
+171
+168
+163
+183
+182
+239
+241
+238
+231
+233
+230
+145
+169
+161
+143
+171
+168
+69
+84
+79
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+30
+37
+33
+58
+76
+75
+84
+111
+108
+85
+108
+100
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+81
+104
+96
+85
+108
+100
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+60
+68
+64
+149
+174
+166
+149
+174
+166
+213
+226
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+233
+235
+232
+143
+171
+168
+160
+180
+179
+199
+208
+203
+163
+183
+182
+145
+169
+161
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+56
+64
+60
+143
+171
+168
+143
+171
+168
+199
+208
+203
+246
+249
+245
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+244
+247
+243
+176
+194
+187
+143
+171
+168
+160
+180
+179
+237
+242
+245
+163
+183
+182
+149
+174
+166
+131
+151
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+16
+18
+15
+48
+62
+57
+73
+98
+96
+84
+111
+108
+85
+108
+100
+81
+104
+96
+84
+111
+108
+81
+104
+96
+84
+111
+108
+83
+106
+98
+81
+104
+96
+84
+111
+108
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+121
+140
+139
+147
+172
+164
+169
+186
+179
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+194
+207
+208
+142
+166
+158
+143
+171
+168
+244
+247
+243
+175
+196
+195
+143
+171
+168
+23
+30
+27
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+24
+25
+135
+162
+160
+151
+176
+168
+213
+226
+227
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+187
+204
+197
+145
+169
+161
+167
+187
+186
+213
+215
+212
+149
+174
+166
+143
+171
+168
+45
+56
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+37
+44
+40
+57
+82
+80
+84
+111
+108
+85
+108
+100
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+66
+88
+81
+83
+106
+98
+85
+108
+100
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+46
+46
+147
+172
+164
+143
+171
+168
+199
+212
+213
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+242
+244
+241
+147
+172
+164
+143
+171
+168
+182
+199
+192
+252
+254
+251
+190
+192
+188
+149
+174
+166
+34
+36
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+93
+112
+111
+149
+174
+166
+199
+212
+213
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+248
+250
+247
+175
+196
+195
+145
+169
+161
+203
+216
+217
+160
+180
+179
+147
+172
+164
+112
+128
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+27
+24
+50
+68
+67
+75
+101
+99
+84
+111
+108
+85
+108
+100
+83
+106
+98
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+81
+104
+96
+84
+111
+108
+83
+106
+98
+81
+104
+96
+84
+111
+108
+83
+106
+98
+66
+88
+81
+38
+48
+49
+6
+13
+15
+29
+39
+39
+84
+111
+108
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+109
+111
+108
+145
+169
+161
+147
+172
+164
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+205
+215
+210
+147
+172
+164
+143
+171
+168
+231
+233
+230
+252
+254
+251
+167
+187
+186
+143
+171
+168
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+19
+21
+18
+145
+169
+161
+169
+186
+179
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+240
+245
+248
+149
+174
+166
+157
+182
+173
+199
+208
+203
+143
+171
+168
+147
+172
+164
+23
+30
+27
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+45
+52
+48
+74
+96
+89
+85
+108
+100
+85
+108
+100
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+78
+101
+93
+56
+64
+60
+23
+27
+29
+5
+7
+3
+0
+1
+0
+0
+2
+0
+30
+37
+33
+81
+104
+96
+85
+108
+100
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+16
+18
+15
+143
+171
+168
+143
+171
+168
+194
+207
+208
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+187
+204
+197
+201
+211
+206
+240
+245
+248
+254
+255
+252
+160
+180
+179
+147
+172
+164
+163
+183
+182
+252
+254
+251
+246
+249
+245
+149
+174
+166
+126
+146
+144
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+61
+72
+73
+160
+180
+179
+199
+212
+213
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+176
+194
+187
+143
+171
+168
+213
+226
+227
+147
+172
+164
+143
+171
+168
+85
+101
+95
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+30
+37
+33
+58
+76
+75
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+84
+111
+108
+81
+104
+96
+84
+111
+108
+58
+80
+73
+29
+39
+39
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+27
+37
+37
+84
+111
+108
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+78
+86
+82
+147
+172
+164
+145
+169
+161
+231
+233
+230
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+226
+227
+160
+180
+179
+143
+171
+168
+149
+174
+166
+167
+187
+186
+218
+228
+223
+160
+180
+179
+145
+169
+161
+203
+216
+217
+252
+254
+251
+199
+212
+213
+149
+174
+166
+81
+92
+93
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+88
+104
+98
+145
+169
+161
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+201
+211
+206
+147
+172
+164
+220
+222
+219
+176
+194
+187
+160
+180
+179
+135
+162
+160
+8
+11
+7
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+41
+48
+44
+71
+89
+89
+84
+111
+108
+84
+111
+108
+81
+104
+96
+71
+89
+89
+44
+62
+61
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+16
+18
+15
+48
+62
+57
+73
+98
+96
+83
+106
+98
+83
+106
+98
+81
+104
+96
+81
+104
+96
+81
+104
+96
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+73
+98
+96
+45
+52
+48
+11
+17
+19
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+30
+37
+33
+83
+106
+98
+85
+108
+100
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+109
+132
+125
+147
+172
+164
+143
+171
+168
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+199
+208
+203
+145
+169
+161
+203
+216
+217
+169
+186
+179
+145
+169
+161
+167
+187
+186
+145
+169
+161
+150
+178
+176
+249
+252
+248
+237
+239
+236
+151
+176
+168
+142
+166
+158
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+104
+123
+122
+160
+180
+179
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+217
+219
+216
+147
+172
+164
+203
+216
+217
+199
+212
+213
+145
+169
+161
+145
+169
+161
+42
+47
+49
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+24
+25
+68
+94
+91
+84
+111
+108
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+85
+108
+100
+85
+108
+100
+75
+101
+99
+37
+44
+40
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+37
+44
+40
+62
+84
+77
+84
+111
+108
+84
+111
+108
+85
+108
+100
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+54
+72
+72
+23
+27
+29
+0
+1
+0
+5
+7
+3
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+17
+19
+38
+48
+49
+38
+48
+49
+27
+37
+37
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+104
+123
+122
+149
+174
+166
+163
+183
+182
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+203
+216
+217
+145
+169
+161
+163
+183
+182
+160
+180
+179
+147
+172
+164
+143
+171
+168
+145
+169
+161
+194
+207
+208
+237
+242
+245
+160
+180
+179
+160
+180
+179
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+93
+109
+103
+142
+166
+158
+223
+233
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+199
+212
+213
+145
+169
+161
+211
+220
+215
+213
+226
+227
+147
+172
+164
+145
+169
+161
+37
+38
+36
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+27
+24
+83
+106
+98
+83
+106
+98
+85
+108
+100
+84
+111
+108
+84
+111
+108
+83
+106
+98
+85
+108
+100
+84
+111
+108
+85
+108
+100
+84
+111
+108
+83
+106
+98
+37
+44
+40
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+27
+24
+50
+68
+67
+75
+101
+99
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+81
+104
+96
+83
+106
+98
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+62
+84
+77
+34
+51
+50
+5
+7
+3
+5
+7
+3
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+99
+115
+109
+160
+180
+179
+163
+183
+182
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+249
+252
+248
+182
+199
+192
+143
+171
+168
+149
+174
+166
+175
+196
+195
+149
+174
+166
+147
+172
+164
+199
+208
+203
+145
+169
+161
+142
+166
+158
+88
+104
+98
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+74
+85
+85
+143
+171
+168
+217
+219
+216
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+187
+204
+197
+149
+174
+166
+231
+233
+230
+220
+222
+219
+160
+180
+179
+143
+171
+168
+26
+34
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+73
+98
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+78
+101
+93
+51
+65
+60
+34
+51
+50
+44
+62
+61
+76
+92
+86
+85
+108
+100
+83
+106
+98
+84
+111
+108
+75
+101
+99
+13
+15
+12
+6
+13
+15
+45
+52
+48
+69
+91
+84
+84
+111
+108
+84
+111
+108
+85
+108
+100
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+96
+91
+48
+62
+57
+18
+22
+24
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+93
+109
+103
+147
+172
+164
+160
+180
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+240
+245
+248
+242
+244
+241
+151
+176
+168
+160
+180
+179
+142
+166
+158
+147
+172
+164
+135
+162
+160
+69
+80
+80
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+34
+36
+33
+143
+171
+168
+176
+194
+187
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+160
+180
+179
+143
+171
+168
+252
+254
+251
+211
+220
+215
+147
+172
+164
+143
+171
+168
+23
+24
+22
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+53
+68
+62
+83
+106
+98
+83
+106
+98
+83
+106
+98
+58
+76
+75
+5
+7
+3
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+50
+68
+67
+81
+104
+96
+85
+108
+100
+84
+111
+108
+74
+96
+89
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+84
+111
+108
+81
+104
+96
+83
+106
+98
+81
+104
+96
+83
+106
+98
+81
+104
+96
+81
+104
+96
+75
+101
+99
+34
+51
+50
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+86
+105
+104
+143
+171
+168
+151
+176
+168
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+211
+220
+215
+143
+171
+168
+145
+169
+161
+135
+162
+160
+85
+96
+97
+13
+15
+12
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+121
+137
+131
+143
+171
+168
+223
+233
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+145
+169
+161
+199
+208
+203
+254
+255
+252
+203
+216
+217
+147
+172
+164
+147
+172
+164
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+75
+101
+99
+84
+111
+108
+84
+111
+108
+68
+94
+91
+5
+7
+3
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+60
+78
+78
+84
+111
+108
+81
+104
+96
+84
+111
+108
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+68
+94
+91
+75
+101
+99
+84
+111
+108
+78
+101
+93
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+92
+94
+91
+147
+172
+164
+147
+172
+164
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+169
+186
+179
+143
+171
+168
+132
+156
+148
+5
+7
+3
+0
+1
+0
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+42
+47
+49
+143
+171
+168
+151
+176
+168
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+218
+228
+223
+143
+171
+168
+150
+178
+176
+244
+247
+243
+254
+255
+252
+203
+216
+217
+160
+180
+179
+142
+166
+158
+8
+11
+7
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+20
+27
+24
+83
+106
+98
+81
+104
+96
+85
+108
+100
+35
+46
+46
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+5
+7
+3
+20
+27
+24
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+84
+111
+108
+83
+106
+98
+78
+101
+93
+50
+68
+67
+26
+28
+25
+0
+1
+0
+69
+91
+84
+84
+111
+108
+73
+98
+96
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+76
+92
+86
+143
+171
+168
+143
+171
+168
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+143
+171
+168
+147
+172
+164
+74
+85
+85
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+81
+92
+93
+160
+180
+179
+151
+176
+168
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+201
+211
+206
+160
+180
+179
+149
+174
+166
+218
+228
+223
+252
+254
+251
+254
+255
+252
+199
+208
+203
+145
+169
+161
+143
+171
+168
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+30
+37
+33
+84
+111
+108
+84
+111
+108
+84
+111
+108
+19
+21
+18
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+6
+13
+15
+81
+104
+96
+84
+111
+108
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+62
+84
+77
+34
+51
+50
+6
+13
+15
+0
+2
+0
+0
+1
+0
+0
+2
+0
+73
+98
+96
+83
+106
+98
+74
+96
+89
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+69
+84
+79
+149
+174
+166
+143
+171
+168
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+193
+195
+192
+147
+172
+164
+142
+166
+158
+13
+15
+12
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+81
+96
+91
+143
+171
+168
+147
+172
+164
+175
+196
+195
+211
+220
+215
+231
+233
+230
+239
+241
+238
+223
+233
+227
+203
+216
+217
+167
+187
+186
+145
+169
+161
+160
+180
+179
+213
+226
+227
+254
+255
+252
+252
+254
+251
+252
+254
+251
+194
+207
+208
+149
+174
+166
+139
+167
+164
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+26
+34
+30
+81
+104
+96
+83
+106
+98
+84
+111
+108
+20
+27
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+83
+106
+98
+84
+111
+108
+84
+111
+108
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+74
+96
+89
+44
+58
+53
+15
+19
+21
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+68
+94
+91
+84
+111
+108
+73
+98
+96
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+69
+71
+68
+147
+172
+164
+145
+169
+161
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+143
+171
+168
+160
+180
+179
+93
+112
+111
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+41
+48
+44
+121
+140
+139
+145
+169
+161
+143
+171
+168
+143
+171
+168
+139
+167
+164
+160
+180
+179
+147
+172
+164
+143
+171
+168
+175
+196
+195
+237
+239
+236
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+187
+204
+197
+147
+172
+164
+138
+162
+154
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+84
+111
+108
+84
+111
+108
+81
+104
+96
+42
+53
+53
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+27
+37
+37
+84
+111
+108
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+83
+106
+98
+76
+92
+86
+18
+28
+28
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+74
+96
+89
+83
+106
+98
+78
+101
+93
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+61
+72
+73
+160
+180
+179
+145
+169
+161
+239
+241
+238
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+190
+207
+200
+145
+169
+161
+143
+171
+168
+39
+41
+39
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+37
+38
+36
+76
+92
+86
+99
+115
+109
+138
+162
+154
+145
+169
+161
+147
+172
+164
+237
+239
+236
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+194
+207
+208
+143
+171
+168
+131
+151
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+73
+98
+96
+84
+111
+108
+81
+104
+96
+73
+98
+96
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+76
+92
+86
+84
+111
+108
+84
+111
+108
+81
+104
+96
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+69
+91
+84
+39
+53
+47
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+73
+98
+96
+84
+111
+108
+78
+101
+93
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+52
+59
+55
+142
+166
+158
+160
+180
+179
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+160
+180
+179
+143
+171
+168
+121
+137
+131
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+42
+53
+53
+160
+180
+179
+147
+172
+164
+203
+216
+217
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+248
+250
+247
+190
+192
+188
+145
+169
+161
+122
+145
+138
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+49
+44
+83
+106
+98
+84
+111
+108
+85
+108
+100
+68
+94
+91
+20
+27
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+19
+21
+18
+71
+89
+89
+84
+111
+108
+81
+104
+96
+83
+106
+98
+57
+82
+80
+78
+96
+96
+81
+104
+96
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+58
+76
+75
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+1
+0
+69
+91
+84
+83
+106
+98
+78
+96
+96
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+42
+47
+49
+147
+172
+164
+142
+166
+158
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+226
+227
+149
+174
+166
+143
+171
+168
+60
+68
+64
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+131
+151
+150
+147
+172
+164
+160
+184
+176
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+175
+196
+195
+160
+180
+179
+117
+136
+135
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+66
+88
+81
+84
+111
+108
+85
+108
+100
+84
+111
+108
+85
+108
+100
+74
+96
+89
+69
+84
+79
+68
+94
+91
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+74
+96
+89
+5
+7
+3
+0
+1
+0
+18
+28
+28
+54
+72
+72
+81
+104
+96
+83
+106
+98
+83
+106
+98
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+73
+98
+96
+48
+62
+57
+15
+19
+21
+68
+94
+91
+85
+108
+100
+78
+101
+93
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+38
+48
+49
+147
+172
+164
+149
+174
+166
+213
+226
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+173
+190
+183
+149
+174
+166
+136
+156
+155
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+78
+86
+82
+147
+172
+164
+143
+171
+168
+223
+233
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+169
+186
+179
+145
+169
+161
+109
+132
+125
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+0
+1
+0
+69
+91
+84
+84
+111
+108
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+85
+108
+100
+85
+108
+100
+84
+111
+108
+83
+106
+98
+78
+101
+93
+26
+28
+25
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+35
+46
+46
+71
+89
+89
+81
+104
+96
+84
+111
+108
+81
+104
+96
+83
+106
+98
+83
+106
+98
+83
+106
+98
+85
+108
+100
+83
+106
+98
+84
+111
+108
+78
+96
+96
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+37
+38
+36
+143
+171
+168
+149
+174
+166
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+143
+171
+168
+149
+174
+166
+92
+94
+91
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+13
+15
+12
+139
+167
+164
+160
+180
+179
+175
+196
+195
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+167
+187
+186
+147
+172
+164
+104
+123
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+54
+72
+72
+81
+104
+96
+81
+104
+96
+81
+104
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+71
+89
+89
+15
+25
+26
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+14
+22
+18
+44
+62
+61
+73
+98
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+81
+104
+96
+85
+108
+100
+83
+106
+98
+58
+73
+68
+20
+27
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+30
+32
+30
+149
+174
+166
+147
+172
+164
+213
+226
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+193
+195
+192
+145
+169
+161
+145
+169
+161
+15
+25
+26
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+104
+106
+103
+145
+169
+161
+145
+169
+161
+242
+244
+241
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+163
+183
+182
+143
+171
+168
+99
+115
+109
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+15
+25
+26
+45
+56
+57
+58
+76
+75
+58
+80
+73
+54
+72
+72
+44
+62
+61
+20
+30
+31
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+26
+34
+30
+54
+72
+72
+81
+104
+96
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+69
+91
+84
+45
+52
+48
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+23
+24
+22
+147
+172
+164
+145
+169
+161
+211
+220
+215
+254
+255
+252
+254
+255
+252
+254
+255
+252
+249
+252
+248
+150
+178
+176
+143
+171
+168
+112
+128
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+37
+38
+36
+160
+180
+179
+139
+167
+164
+199
+208
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+169
+186
+179
+143
+171
+168
+93
+112
+111
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+0
+1
+0
+5
+7
+3
+0
+1
+0
+6
+13
+15
+39
+53
+47
+69
+91
+84
+83
+106
+98
+83
+106
+98
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+83
+106
+98
+58
+76
+75
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+139
+167
+164
+160
+180
+179
+203
+216
+217
+254
+255
+252
+254
+255
+252
+254
+255
+252
+203
+216
+217
+145
+169
+161
+147
+172
+164
+42
+53
+53
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+109
+132
+125
+149
+174
+166
+150
+178
+176
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+143
+171
+168
+147
+172
+164
+96
+98
+95
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+18
+28
+28
+50
+68
+67
+78
+101
+93
+83
+106
+98
+81
+104
+96
+84
+111
+108
+84
+111
+108
+83
+106
+98
+84
+111
+108
+73
+98
+96
+48
+62
+57
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+24
+25
+54
+72
+72
+54
+72
+72
+41
+48
+44
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+11
+13
+10
+145
+169
+161
+147
+172
+164
+145
+169
+161
+175
+196
+195
+199
+208
+203
+211
+220
+215
+149
+174
+166
+160
+180
+179
+122
+145
+138
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+60
+68
+64
+149
+174
+166
+160
+180
+179
+176
+194
+187
+199
+212
+213
+179
+200
+199
+167
+187
+186
+143
+171
+168
+143
+171
+168
+81
+96
+91
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+35
+46
+46
+58
+80
+73
+83
+106
+98
+84
+111
+108
+81
+104
+96
+85
+108
+100
+83
+106
+98
+84
+111
+108
+85
+108
+100
+66
+88
+81
+37
+44
+40
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+30
+37
+33
+85
+108
+100
+84
+111
+108
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+143
+171
+168
+147
+172
+164
+143
+171
+168
+145
+169
+161
+143
+171
+168
+143
+171
+168
+143
+171
+168
+145
+169
+161
+69
+77
+73
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+135
+159
+151
+145
+169
+161
+143
+171
+168
+149
+174
+166
+143
+171
+168
+147
+172
+164
+149
+174
+166
+149
+174
+166
+71
+89
+89
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+11
+17
+19
+44
+58
+53
+73
+98
+96
+84
+111
+108
+84
+111
+108
+81
+104
+96
+84
+111
+108
+84
+111
+108
+84
+111
+108
+75
+101
+99
+50
+68
+67
+20
+27
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+30
+37
+33
+85
+108
+100
+83
+106
+98
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+52
+59
+55
+93
+112
+111
+131
+151
+150
+138
+162
+154
+145
+169
+161
+145
+169
+161
+160
+180
+179
+139
+167
+164
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+81
+92
+93
+147
+172
+164
+147
+172
+164
+147
+172
+164
+139
+167
+164
+136
+156
+155
+122
+145
+138
+69
+77
+73
+23
+24
+22
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+26
+34
+30
+58
+76
+75
+81
+104
+96
+81
+104
+96
+81
+104
+96
+85
+108
+100
+85
+108
+100
+85
+108
+100
+85
+108
+100
+69
+91
+84
+45
+52
+48
+11
+13
+10
+0
+2
+0
+0
+1
+0
+27
+37
+37
+84
+111
+108
+83
+106
+98
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+56
+64
+60
+85
+108
+100
+84
+111
+108
+86
+105
+104
+92
+118
+116
+56
+64
+60
+52
+59
+55
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+14
+22
+18
+66
+77
+78
+69
+77
+73
+93
+112
+111
+85
+108
+100
+85
+108
+100
+75
+101
+99
+16
+18
+15
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+6
+13
+15
+38
+48
+49
+68
+94
+91
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+84
+111
+108
+61
+76
+71
+23
+33
+34
+35
+49
+44
+83
+106
+98
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+60
+78
+78
+83
+106
+98
+84
+111
+108
+85
+108
+100
+68
+94
+91
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+23
+30
+27
+81
+104
+96
+85
+108
+100
+85
+108
+100
+75
+101
+99
+30
+37
+33
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+19
+21
+18
+48
+62
+57
+78
+101
+93
+83
+106
+98
+83
+106
+98
+81
+104
+96
+85
+108
+100
+85
+108
+100
+84
+111
+108
+75
+101
+99
+81
+104
+96
+85
+108
+100
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+61
+76
+71
+84
+111
+108
+83
+106
+98
+85
+108
+100
+55
+70
+64
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+11
+13
+10
+75
+101
+99
+84
+111
+108
+85
+108
+100
+85
+108
+100
+40
+57
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+29
+39
+39
+57
+82
+80
+84
+111
+108
+84
+111
+108
+84
+111
+108
+83
+106
+98
+85
+108
+100
+84
+111
+108
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+48
+62
+57
+84
+111
+108
+84
+111
+108
+84
+111
+108
+15
+19
+21
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+78
+101
+93
+84
+111
+108
+84
+111
+108
+75
+101
+99
+20
+24
+25
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+0
+1
+0
+0
+2
+0
+6
+13
+15
+39
+53
+47
+78
+96
+96
+84
+111
+108
+83
+106
+98
+83
+106
+98
+85
+108
+100
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+46
+46
+83
+106
+98
+83
+106
+98
+55
+70
+64
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+71
+89
+89
+81
+104
+96
+78
+101
+93
+52
+59
+55
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+23
+30
+27
+60
+78
+78
+84
+111
+108
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+33
+34
+84
+111
+108
+84
+111
+108
+11
+17
+19
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+50
+68
+67
+84
+111
+108
+73
+98
+96
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+30
+37
+33
+81
+104
+96
+85
+108
+100
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+14
+22
+18
+83
+106
+98
+50
+68
+67
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+35
+49
+44
+83
+106
+98
+19
+21
+18
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+27
+37
+37
+84
+111
+108
+84
+111
+108
+58
+76
+75
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+85
+108
+100
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+6
+13
+15
+34
+51
+50
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+30
+37
+33
+83
+106
+98
+85
+108
+100
+61
+76
+71
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+50
+68
+67
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+44
+58
+53
+44
+58
+53
+29
+39
+39
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+69
+71
+68
+123
+125
+122
+169
+171
+168
+199
+201
+198
+228
+230
+227
+239
+241
+238
+249
+252
+248
+249
+252
+248
+239
+241
+238
+228
+230
+227
+199
+201
+198
+169
+171
+168
+123
+125
+122
+69
+71
+68
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+92
+94
+91
+180
+182
+179
+248
+250
+247
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+248
+250
+247
+184
+186
+183
+92
+94
+91
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+239
+236
+8
+11
+7
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+8
+11
+7
+237
+239
+236
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+69
+71
+68
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+69
+71
+68
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+249
+252
+248
+237
+239
+236
+223
+226
+222
+204
+206
+203
+175
+177
+174
+123
+125
+122
+73
+75
+72
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+113
+115
+112
+231
+233
+230
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+231
+233
+230
+113
+115
+112
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+104
+106
+103
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+104
+106
+103
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+165
+167
+164
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+165
+167
+164
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+169
+171
+168
+69
+71
+68
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+58
+59
+57
+217
+219
+216
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+220
+222
+219
+64
+65
+63
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+213
+215
+212
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+217
+219
+216
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+204
+206
+203
+45
+47
+44
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+123
+125
+122
+248
+250
+247
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+123
+125
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+73
+75
+72
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+78
+80
+77
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+96
+98
+95
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+96
+98
+95
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+123
+125
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+151
+153
+150
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+156
+158
+155
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+184
+186
+183
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+190
+192
+188
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+193
+195
+192
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+193
+195
+192
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+146
+148
+145
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+151
+153
+150
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+151
+153
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+42
+44
+41
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+49
+51
+48
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+30
+32
+30
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+30
+32
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+109
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+113
+115
+112
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+118
+120
+117
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+156
+158
+155
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+160
+162
+159
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+127
+129
+126
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+127
+129
+126
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+246
+249
+245
+37
+38
+36
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+42
+47
+49
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+146
+148
+145
+69
+71
+68
+37
+38
+36
+11
+13
+10
+11
+13
+10
+37
+38
+36
+69
+71
+68
+146
+148
+145
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+240
+245
+248
+49
+51
+48
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+19
+21
+18
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+20
+24
+25
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+220
+222
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+217
+219
+216
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+169
+171
+168
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+213
+215
+212
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+246
+249
+245
+123
+125
+122
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+127
+129
+126
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+209
+212
+208
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+123
+125
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+133
+135
+132
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+58
+59
+57
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+58
+59
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+23
+24
+22
+69
+71
+68
+142
+144
+141
+242
+244
+241
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+23
+24
+22
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+96
+98
+95
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+239
+241
+238
+42
+47
+49
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+55
+56
+54
+239
+241
+238
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+96
+98
+95
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+233
+235
+232
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+156
+158
+155
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+156
+158
+155
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+23
+27
+29
+204
+206
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+104
+106
+103
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+220
+222
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+58
+59
+57
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+58
+59
+57
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+220
+222
+219
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+96
+98
+95
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+100
+102
+99
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+169
+171
+168
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+239
+241
+238
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+19
+21
+18
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+165
+167
+164
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+73
+75
+72
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+118
+120
+117
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+123
+125
+122
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+73
+75
+72
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+246
+249
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+204
+206
+203
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+217
+219
+216
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+246
+249
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+87
+88
+86
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+242
+244
+241
+15
+19
+21
+239
+241
+238
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+87
+88
+86
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+113
+115
+112
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+252
+254
+251
+213
+215
+212
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+165
+167
+164
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+215
+212
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+6
+13
+15
+213
+215
+212
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+165
+167
+164
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+156
+158
+155
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+64
+65
+63
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+73
+75
+72
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+156
+158
+155
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+184
+186
+183
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+165
+167
+164
+0
+1
+0
+160
+162
+159
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+180
+182
+179
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+42
+44
+41
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+237
+242
+245
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+34
+36
+33
+109
+111
+108
+169
+171
+168
+209
+212
+208
+237
+239
+236
+249
+252
+248
+249
+252
+248
+237
+239
+236
+209
+212
+208
+169
+171
+168
+109
+111
+108
+30
+32
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+34
+36
+33
+109
+111
+108
+169
+171
+168
+209
+212
+208
+237
+239
+236
+249
+252
+248
+249
+252
+248
+237
+239
+236
+209
+212
+208
+169
+171
+168
+109
+111
+108
+30
+32
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+24
+22
+104
+106
+103
+175
+177
+174
+217
+219
+216
+242
+244
+241
+249
+252
+248
+237
+239
+236
+204
+206
+203
+146
+148
+145
+58
+59
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+16
+18
+15
+100
+102
+99
+169
+171
+168
+217
+219
+216
+239
+241
+238
+249
+252
+248
+231
+233
+230
+204
+206
+203
+142
+144
+141
+64
+65
+63
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+100
+102
+99
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+104
+106
+103
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+237
+242
+245
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+42
+47
+49
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+175
+177
+174
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+184
+186
+183
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+42
+47
+49
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+23
+27
+29
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+78
+80
+77
+0
+1
+0
+73
+75
+72
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+23
+24
+22
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+248
+250
+247
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+69
+71
+68
+193
+195
+192
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+190
+192
+188
+64
+65
+63
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+69
+71
+68
+193
+195
+192
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+190
+192
+188
+64
+65
+63
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+13
+15
+12
+146
+148
+145
+240
+245
+248
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+193
+195
+192
+39
+41
+39
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+17
+19
+142
+144
+141
+248
+250
+247
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+193
+195
+192
+39
+41
+39
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+55
+56
+54
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+11
+17
+19
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+16
+18
+15
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+55
+56
+54
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+184
+186
+183
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+37
+38
+36
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+42
+47
+49
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+184
+186
+183
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+118
+120
+117
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+6
+13
+15
+0
+1
+0
+0
+1
+0
+233
+235
+232
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+113
+115
+112
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+11
+13
+10
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+248
+250
+247
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+16
+18
+15
+169
+171
+168
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+165
+167
+164
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+16
+18
+15
+169
+171
+168
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+165
+167
+164
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+42
+47
+49
+220
+222
+219
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+242
+244
+241
+69
+71
+68
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+49
+51
+48
+220
+222
+219
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+244
+247
+243
+64
+65
+63
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+109
+111
+108
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+180
+182
+179
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+180
+182
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+104
+106
+103
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+1
+0
+73
+75
+72
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+146
+148
+145
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+160
+162
+159
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+73
+75
+72
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+213
+215
+212
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+151
+153
+150
+0
+1
+0
+0
+2
+0
+0
+1
+0
+151
+153
+150
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+215
+212
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+42
+47
+49
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+237
+242
+245
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+30
+32
+30
+217
+219
+216
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+215
+212
+30
+32
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+30
+32
+30
+217
+219
+216
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+215
+212
+30
+32
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+45
+47
+44
+239
+241
+238
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+240
+245
+248
+49
+51
+48
+0
+2
+0
+0
+2
+0
+0
+2
+0
+55
+56
+54
+240
+245
+248
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+237
+242
+245
+49
+51
+48
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+156
+158
+155
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+127
+129
+126
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+133
+135
+132
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+156
+158
+155
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+1
+0
+0
+1
+0
+217
+219
+216
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+240
+245
+248
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+22
+24
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+215
+212
+0
+1
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+42
+47
+49
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+64
+65
+63
+0
+2
+0
+0
+1
+0
+0
+1
+0
+64
+65
+63
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+49
+51
+48
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+118
+120
+117
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+204
+206
+203
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+22
+24
+220
+222
+219
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+220
+222
+219
+23
+24
+22
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+22
+24
+220
+222
+219
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+220
+222
+219
+23
+24
+22
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+18
+22
+24
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+217
+219
+216
+5
+7
+3
+0
+2
+0
+30
+32
+30
+237
+239
+236
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+204
+206
+203
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+193
+195
+192
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+87
+88
+86
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+87
+88
+86
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+190
+192
+188
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+1
+0
+0
+1
+0
+104
+106
+103
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+113
+115
+112
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+133
+135
+132
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+104
+106
+103
+0
+1
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+146
+148
+145
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+142
+144
+141
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+22
+24
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+165
+167
+164
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+242
+244
+241
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+180
+182
+179
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+239
+241
+238
+156
+158
+155
+78
+80
+77
+34
+36
+33
+11
+13
+10
+11
+13
+10
+34
+36
+33
+78
+80
+77
+156
+158
+155
+239
+241
+238
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+193
+195
+192
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+180
+182
+179
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+239
+241
+238
+156
+158
+155
+78
+80
+77
+34
+36
+33
+11
+13
+10
+11
+13
+10
+34
+36
+33
+78
+80
+77
+156
+158
+155
+239
+241
+238
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+193
+195
+192
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+165
+167
+164
+252
+254
+251
+252
+254
+251
+254
+255
+252
+249
+252
+248
+165
+167
+164
+87
+88
+86
+34
+36
+33
+11
+13
+10
+5
+7
+3
+30
+32
+30
+92
+94
+91
+190
+192
+188
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+109
+111
+108
+0
+1
+0
+199
+201
+198
+254
+255
+252
+254
+255
+252
+254
+255
+252
+249
+252
+248
+165
+167
+164
+92
+94
+91
+34
+36
+33
+13
+15
+12
+5
+7
+3
+30
+32
+30
+87
+88
+86
+184
+186
+183
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+100
+102
+99
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+220
+222
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+42
+47
+49
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+42
+44
+41
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+217
+219
+216
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+0
+2
+0
+0
+1
+0
+8
+11
+7
+237
+239
+236
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+228
+230
+227
+5
+7
+3
+0
+2
+0
+0
+1
+0
+0
+1
+0
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+6
+13
+15
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+233
+235
+232
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+146
+148
+145
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+142
+144
+141
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+231
+233
+230
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+26
+28
+25
+204
+206
+203
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+104
+106
+103
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+73
+75
+72
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+73
+75
+72
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+109
+111
+108
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+156
+158
+155
+15
+19
+21
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+19
+21
+18
+160
+162
+159
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+109
+111
+108
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+109
+111
+108
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+156
+158
+155
+15
+19
+21
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+19
+21
+18
+160
+162
+159
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+109
+111
+108
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+190
+192
+188
+37
+38
+36
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+100
+102
+99
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+113
+115
+112
+252
+254
+251
+252
+254
+251
+254
+255
+252
+190
+192
+188
+37
+38
+36
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+100
+102
+99
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+204
+206
+203
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+23
+24
+22
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+27
+29
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+248
+250
+247
+237
+242
+245
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+1
+0
+133
+135
+132
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+248
+250
+247
+87
+88
+86
+0
+2
+0
+0
+1
+0
+100
+102
+99
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+133
+135
+132
+0
+1
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+78
+80
+77
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+55
+56
+54
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+55
+56
+54
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+78
+80
+77
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+19
+21
+18
+64
+65
+63
+142
+144
+141
+240
+245
+248
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+18
+22
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+45
+47
+44
+237
+242
+245
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+109
+111
+108
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+8
+11
+7
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+109
+111
+108
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+118
+120
+117
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+237
+242
+245
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+8
+11
+7
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+109
+111
+108
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+118
+120
+117
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+237
+242
+245
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+169
+171
+168
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+123
+125
+122
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+248
+250
+247
+252
+254
+251
+252
+254
+251
+165
+167
+164
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+127
+129
+126
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+42
+44
+41
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+15
+19
+21
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+244
+247
+243
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+1
+0
+26
+28
+25
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+199
+201
+198
+0
+1
+0
+0
+1
+0
+213
+215
+212
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+26
+28
+25
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+169
+171
+168
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+220
+222
+219
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+220
+222
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+169
+171
+168
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+169
+171
+168
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+22
+24
+223
+226
+222
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+146
+148
+145
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+100
+102
+99
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+127
+129
+126
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+133
+135
+132
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+118
+120
+117
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+100
+102
+99
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+127
+129
+126
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+133
+135
+132
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+118
+120
+117
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+215
+212
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+6
+13
+15
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+204
+206
+203
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+6
+13
+15
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+109
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+248
+250
+247
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+160
+162
+159
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+55
+56
+54
+73
+75
+72
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+165
+167
+164
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+15
+19
+21
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+133
+135
+132
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+133
+135
+132
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+248
+250
+247
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+37
+38
+36
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+204
+206
+203
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+184
+186
+183
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+213
+215
+212
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+204
+206
+203
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+0
+1
+0
+209
+212
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+217
+219
+216
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+213
+215
+212
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+204
+206
+203
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+0
+1
+0
+209
+212
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+217
+219
+216
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+55
+56
+54
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+142
+144
+141
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+55
+56
+54
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+146
+148
+145
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+156
+158
+155
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+244
+247
+243
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+15
+19
+21
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+244
+247
+243
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+42
+47
+49
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+169
+171
+168
+184
+186
+183
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+49
+51
+48
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+109
+111
+108
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+42
+47
+49
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+45
+47
+44
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+104
+106
+103
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+118
+120
+117
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+175
+177
+174
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+215
+212
+11
+17
+19
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+37
+38
+36
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+73
+75
+72
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+82
+84
+81
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+42
+44
+41
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+37
+38
+36
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+73
+75
+72
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+82
+84
+81
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+42
+44
+41
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+193
+195
+192
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+82
+84
+81
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+193
+195
+192
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+82
+84
+81
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+199
+201
+198
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+23
+27
+29
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+27
+29
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+237
+242
+245
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+193
+195
+192
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+248
+250
+247
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+193
+195
+192
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+199
+201
+198
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+209
+212
+208
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+209
+212
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+199
+201
+198
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+151
+153
+150
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+142
+144
+141
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+23
+27
+29
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+87
+88
+86
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+220
+222
+219
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+223
+226
+222
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+104
+106
+103
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+87
+88
+86
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+220
+222
+219
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+223
+226
+222
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+104
+106
+103
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+113
+115
+112
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+37
+38
+36
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+113
+115
+112
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+37
+38
+36
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+231
+233
+230
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+220
+222
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+42
+44
+41
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+42
+47
+49
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+217
+219
+216
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+78
+80
+77
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+78
+80
+77
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+37
+38
+36
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+123
+125
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+123
+125
+122
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+37
+38
+36
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+249
+252
+248
+127
+129
+126
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+104
+106
+103
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+58
+59
+57
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+151
+153
+150
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+142
+144
+141
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+146
+148
+145
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+156
+158
+155
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+151
+153
+150
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+142
+144
+141
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+146
+148
+145
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+156
+158
+155
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+55
+56
+54
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+16
+18
+15
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+55
+56
+54
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+16
+18
+15
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+237
+242
+245
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+190
+192
+188
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+87
+88
+86
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+78
+80
+77
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+190
+192
+188
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+220
+222
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+133
+135
+132
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+37
+38
+36
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+37
+38
+36
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+133
+135
+132
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+209
+212
+208
+42
+47
+49
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+73
+75
+72
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+87
+88
+86
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+193
+195
+192
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+87
+88
+86
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+87
+88
+86
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+199
+201
+198
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+193
+195
+192
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+87
+88
+86
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+87
+88
+86
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+199
+201
+198
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+18
+22
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+18
+22
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+248
+250
+247
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+160
+162
+159
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+127
+129
+126
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+127
+129
+126
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+156
+158
+155
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+109
+111
+108
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+109
+111
+108
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+199
+201
+198
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+204
+206
+203
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+223
+226
+222
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+249
+252
+248
+175
+177
+174
+73
+75
+72
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+42
+47
+49
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+123
+125
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+213
+215
+212
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+42
+44
+41
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+42
+44
+41
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+213
+215
+212
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+42
+44
+41
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+42
+44
+41
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+109
+111
+108
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+175
+177
+174
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+184
+186
+183
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+109
+111
+108
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+0
+1
+0
+239
+241
+238
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+237
+242
+245
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+69
+71
+68
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+64
+65
+63
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+239
+236
+223
+226
+222
+204
+206
+203
+180
+182
+179
+127
+129
+126
+73
+75
+72
+15
+19
+21
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+26
+28
+25
+223
+226
+222
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+160
+162
+159
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+18
+22
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+23
+27
+29
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+18
+22
+24
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+23
+27
+29
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+58
+59
+57
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+240
+245
+248
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+15
+19
+21
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+55
+56
+54
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+142
+144
+141
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+142
+144
+141
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+160
+162
+159
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+160
+162
+159
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+204
+206
+203
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+193
+195
+192
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+246
+249
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+249
+252
+248
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+246
+249
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+249
+252
+248
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+239
+241
+238
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+100
+102
+99
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+104
+106
+103
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+23
+27
+29
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+23
+27
+29
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+11
+13
+10
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+175
+177
+174
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+220
+222
+219
+15
+19
+21
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+6
+13
+15
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+165
+167
+164
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+215
+212
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+213
+215
+212
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+169
+171
+168
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+169
+171
+168
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+169
+171
+168
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+96
+98
+95
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+92
+94
+91
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+142
+144
+141
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+37
+38
+36
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+23
+24
+22
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+23
+24
+22
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+242
+244
+241
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+23
+24
+22
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+23
+24
+22
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+242
+244
+241
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+73
+75
+72
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+113
+115
+112
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+118
+120
+117
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+73
+75
+72
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+55
+56
+54
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+55
+56
+54
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+190
+192
+188
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+190
+192
+188
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+104
+106
+103
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+64
+65
+63
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+213
+215
+212
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+37
+38
+36
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+42
+47
+49
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+220
+222
+219
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+213
+215
+212
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+37
+38
+36
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+42
+47
+49
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+220
+222
+219
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+220
+222
+219
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+240
+245
+248
+55
+56
+54
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+58
+59
+57
+240
+245
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+217
+219
+216
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+199
+201
+198
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+193
+195
+192
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+30
+32
+30
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+30
+32
+30
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+73
+75
+72
+248
+250
+247
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+96
+98
+95
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+193
+195
+192
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+87
+88
+86
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+92
+94
+91
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+199
+201
+198
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+193
+195
+192
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+87
+88
+86
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+92
+94
+91
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+199
+201
+198
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+96
+98
+95
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+237
+242
+245
+45
+47
+44
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+49
+51
+48
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+96
+98
+95
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+87
+88
+86
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+87
+88
+86
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+123
+125
+122
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+123
+125
+122
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+42
+47
+49
+237
+242
+245
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+133
+135
+132
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+151
+153
+150
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+142
+144
+141
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+142
+144
+141
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+151
+153
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+151
+153
+150
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+142
+144
+141
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+142
+144
+141
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+151
+153
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+209
+212
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+244
+247
+243
+123
+125
+122
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+123
+125
+122
+242
+244
+241
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+215
+212
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+5
+7
+3
+223
+226
+222
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+220
+222
+219
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+217
+219
+216
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+217
+219
+216
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+23
+24
+22
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+175
+177
+174
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+85
+96
+97
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+104
+106
+103
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+85
+96
+97
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+220
+222
+219
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+228
+230
+227
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+104
+106
+103
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+42
+47
+49
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+248
+250
+247
+231
+233
+230
+142
+144
+141
+69
+71
+68
+34
+36
+33
+11
+13
+10
+11
+13
+10
+37
+38
+36
+64
+65
+63
+142
+144
+141
+231
+233
+230
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+42
+47
+49
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+58
+59
+57
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+175
+177
+174
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+169
+171
+168
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+55
+56
+54
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+11
+13
+10
+204
+206
+203
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+204
+206
+203
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+37
+38
+36
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+64
+65
+63
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+78
+80
+77
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+42
+47
+49
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+37
+38
+36
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+64
+65
+63
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+78
+80
+77
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+42
+47
+49
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+113
+115
+112
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+118
+120
+117
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+151
+153
+150
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+87
+88
+86
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+82
+84
+81
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+151
+153
+150
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+175
+177
+174
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+23
+27
+29
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+209
+212
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+204
+206
+203
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+213
+215
+212
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+213
+215
+212
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+209
+212
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+204
+206
+203
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+213
+215
+212
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+213
+215
+212
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+151
+153
+150
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+151
+153
+150
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+5
+7
+3
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+240
+245
+248
+6
+13
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+242
+244
+241
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+142
+144
+141
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+239
+241
+238
+42
+47
+49
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+104
+106
+103
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+118
+120
+117
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+133
+135
+132
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+118
+120
+117
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+104
+106
+103
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+118
+120
+117
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+133
+135
+132
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+118
+120
+117
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+151
+153
+150
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+156
+158
+155
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+87
+88
+86
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+169
+171
+168
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+165
+167
+164
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+252
+254
+251
+82
+84
+81
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+104
+106
+103
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+73
+75
+72
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+6
+13
+15
+237
+239
+236
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+104
+106
+103
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+118
+120
+117
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+6
+13
+15
+237
+239
+236
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+104
+106
+103
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+118
+120
+117
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+237
+242
+245
+13
+15
+12
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+123
+125
+122
+249
+252
+248
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+127
+129
+126
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+175
+177
+174
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+248
+250
+247
+87
+88
+86
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+78
+80
+77
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+180
+182
+179
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+73
+75
+72
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+109
+111
+108
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+104
+106
+103
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+151
+153
+150
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+22
+24
+156
+158
+155
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+109
+111
+108
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+104
+106
+103
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+151
+153
+150
+16
+18
+15
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+22
+24
+156
+158
+155
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+109
+111
+108
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+64
+65
+63
+217
+219
+216
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+220
+222
+219
+64
+65
+63
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+18
+22
+24
+248
+250
+247
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+237
+242
+245
+5
+7
+3
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+6
+13
+15
+239
+241
+238
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+248
+250
+247
+19
+21
+18
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+237
+242
+245
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+180
+182
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+237
+239
+236
+151
+153
+150
+73
+75
+72
+34
+36
+33
+11
+13
+10
+11
+13
+10
+34
+36
+33
+73
+75
+72
+151
+153
+150
+237
+242
+245
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+193
+195
+192
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+180
+182
+179
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+237
+239
+236
+151
+153
+150
+73
+75
+72
+34
+36
+33
+11
+13
+10
+11
+13
+10
+34
+36
+33
+73
+75
+72
+151
+153
+150
+237
+242
+245
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+193
+195
+192
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+113
+115
+112
+231
+233
+230
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+231
+233
+230
+118
+120
+117
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+113
+115
+112
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+160
+162
+159
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+160
+162
+159
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+113
+115
+112
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+18
+22
+24
+223
+226
+222
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+223
+226
+222
+18
+22
+24
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+18
+22
+24
+223
+226
+222
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+223
+226
+222
+18
+22
+24
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+5
+7
+3
+92
+94
+91
+184
+186
+183
+248
+250
+247
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+249
+252
+248
+184
+186
+183
+92
+94
+91
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+209
+212
+208
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+73
+75
+72
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+73
+75
+72
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+213
+215
+212
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+30
+32
+30
+217
+219
+216
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+215
+212
+30
+32
+30
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+30
+32
+30
+217
+219
+216
+254
+255
+252
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+252
+254
+251
+252
+254
+251
+252
+254
+251
+252
+254
+251
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+213
+215
+212
+30
+32
+30
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+15
+19
+21
+73
+75
+72
+127
+129
+126
+169
+171
+168
+199
+201
+198
+231
+233
+230
+242
+244
+241
+249
+252
+248
+249
+252
+248
+242
+244
+241
+231
+233
+230
+199
+201
+198
+169
+171
+168
+127
+129
+126
+73
+75
+72
+15
+19
+21
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+15
+19
+21
+169
+171
+168
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+165
+167
+164
+15
+19
+21
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+15
+19
+21
+169
+171
+168
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+165
+167
+164
+15
+19
+21
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+69
+71
+68
+193
+195
+192
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+190
+192
+188
+64
+65
+63
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+69
+71
+68
+193
+195
+192
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+190
+192
+188
+64
+65
+63
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+254
+255
+252
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+34
+36
+33
+113
+115
+112
+169
+171
+168
+209
+212
+208
+237
+239
+236
+249
+252
+248
+249
+252
+248
+237
+239
+236
+209
+212
+208
+169
+171
+168
+109
+111
+108
+34
+36
+33
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+34
+36
+33
+113
+115
+112
+169
+171
+168
+209
+212
+208
+237
+239
+236
+249
+252
+248
+249
+252
+248
+237
+239
+236
+209
+212
+208
+169
+171
+168
+109
+111
+108
+34
+36
+33
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+1
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+1
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
+0
+2
+0
diff --git a/recipes/linux/linux-omap-zoomsync/omapzoom2/defconfig b/recipes/linux/linux-omap-zoomsync/omapzoom2/defconfig
index 2919ba89bb..202122ec0d 100755
--- a/recipes/linux/linux-omap-zoomsync/omapzoom2/defconfig
+++ b/recipes/linux/linux-omap-zoomsync/omapzoom2/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.31-rc7-omap1
-# Sun Jan 24 18:06:59 2010
+# Thu Feb 11 13:48:04 2010
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -119,14 +119,14 @@ CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_BLOCK=y
CONFIG_LBDAF=y
-# CONFIG_BLK_DEV_BSG is not set
+CONFIG_BLK_DEV_BSG=y
# CONFIG_BLK_DEV_INTEGRITY is not set
#
@@ -331,9 +331,9 @@ CONFIG_CPU_FREQ_TABLE=y
# CONFIG_CPU_FREQ_DEBUG is not set
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
@@ -362,8 +362,8 @@ CONFIG_NEON=y
CONFIG_BINFMT_ELF=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
#
# Power management options
@@ -381,13 +381,14 @@ CONFIG_NET=y
# Networking options
#
CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
+CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
CONFIG_XFRM_USER=y
# CONFIG_XFRM_SUB_POLICY is not set
CONFIG_XFRM_MIGRATE=y
# CONFIG_XFRM_STATISTICS is not set
+CONFIG_XFRM_IPCOMP=m
CONFIG_NET_KEY=y
CONFIG_NET_KEY_MIGRATE=y
CONFIG_INET=y
@@ -398,7 +399,7 @@ CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
-# CONFIG_NET_IPIP is not set
+CONFIG_NET_IPIP=m
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
@@ -407,7 +408,7 @@ CONFIG_IP_PNP_RARP=y
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
CONFIG_INET_XFRM_MODE_TRANSPORT=y
CONFIG_INET_XFRM_MODE_TUNNEL=y
CONFIG_INET_XFRM_MODE_BEET=y
@@ -418,17 +419,38 @@ CONFIG_INET_TCP_DIAG=y
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+# CONFIG_INET6_ESP is not set
+CONFIG_INET6_IPCOMP=m
+CONFIG_IPV6_MIP6=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_NDISC_NODETYPE=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
# CONFIG_NETWORK_SECMARK is not set
# CONFIG_NETFILTER is not set
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
+CONFIG_STP=m
+CONFIG_BRIDGE=m
# CONFIG_NET_DSA is not set
-# CONFIG_VLAN_8021Q is not set
+CONFIG_VLAN_8021Q=m
+# CONFIG_VLAN_8021Q_GVRP is not set
# CONFIG_DECNET is not set
+CONFIG_LLC=m
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
@@ -447,7 +469,46 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
# CONFIG_CAN is not set
-# CONFIG_IRDA is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+CONFIG_KINGSUN_DONGLE=m
+CONFIG_KSDAZZLE_DONGLE=m
+CONFIG_KS959_DONGLE=m
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_MCS_FIR=m
CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
@@ -512,7 +573,7 @@ CONFIG_RFKILL_INPUT=y
#
# Generic Driver Options
#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_UEVENT_HELPER_PATH=""
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=m
@@ -637,7 +698,7 @@ CONFIG_MISC_DEVICES=y
# CONFIG_EEPROM_AT25 is not set
# CONFIG_EEPROM_LEGACY is not set
# CONFIG_EEPROM_MAX6875 is not set
-# CONFIG_EEPROM_93CX6 is not set
+CONFIG_EEPROM_93CX6=m
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
@@ -672,6 +733,7 @@ CONFIG_SCSI_WAIT_SCAN=m
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
CONFIG_SCSI_LOWLEVEL=y
@@ -682,13 +744,34 @@ CONFIG_SCSI_LOWLEVEL=y
# CONFIG_SCSI_DH is not set
# CONFIG_SCSI_OSD_INITIATOR is not set
# CONFIG_ATA is not set
-# CONFIG_MD is not set
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID6_PQ=m
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_LOG_USERSPACE=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_QL=m
+CONFIG_DM_MULTIPATH_ST=m
+CONFIG_DM_DELAY=m
+CONFIG_DM_UEVENT=y
CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
+CONFIG_DUMMY=m
+CONFIG_BONDING=m
+CONFIG_MACVLAN=m
+CONFIG_EQUALIZER=m
+CONFIG_TUN=m
# CONFIG_VETH is not set
CONFIG_PHYLIB=y
@@ -744,20 +827,38 @@ CONFIG_LIBERTAS_SDIO=m
# CONFIG_LIBERTAS_SPI is not set
# CONFIG_LIBERTAS_DEBUG is not set
# CONFIG_LIBERTAS_THINFIRM is not set
-# CONFIG_AT76C50X_USB is not set
+CONFIG_AT76C50X_USB=m
CONFIG_USB_ZD1201=m
-# CONFIG_USB_NET_RNDIS_WLAN is not set
-# CONFIG_RTL8187 is not set
+CONFIG_USB_NET_RNDIS_WLAN=m
+CONFIG_RTL8187=m
+CONFIG_RTL8187_LEDS=y
# CONFIG_MAC80211_HWSIM is not set
-# CONFIG_P54_COMMON is not set
-# CONFIG_AR9170_USB is not set
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+# CONFIG_P54_SPI is not set
+CONFIG_P54_LEDS=y
+CONFIG_ATH_COMMON=m
+CONFIG_AR9170_USB=m
+CONFIG_AR9170_LEDS=y
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
# CONFIG_B43 is not set
# CONFIG_B43LEGACY is not set
-# CONFIG_ZD1211RW is not set
-# CONFIG_RT2X00 is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_RT2X00=m
+CONFIG_RT2500USB=m
+CONFIG_RT73USB=m
+CONFIG_RT2800USB=m
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_HT=y
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_CRYPTO=y
+CONFIG_RT2X00_LIB_RFKILL=y
+CONFIG_RT2X00_LIB_LEDS=y
+# CONFIG_RT2X00_DEBUG is not set
CONFIG_WL12XX=m
# CONFIG_IWM is not set
@@ -768,10 +869,10 @@ CONFIG_WL12XX=m
#
# USB Network Adapters
#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
CONFIG_USB_USBNET=m
CONFIG_USB_NET_AX8817X=m
CONFIG_USB_NET_CDCETHER=m
@@ -792,7 +893,7 @@ CONFIG_USB_ARMLINUX=y
# CONFIG_USB_KC2190 is not set
CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_HSO=m
-# CONFIG_USB_NET_INT51X1 is not set
+CONFIG_USB_NET_INT51X1=m
# CONFIG_WAN is not set
CONFIG_PPP=m
CONFIG_PPP_MULTILINK=y
@@ -816,7 +917,7 @@ CONFIG_SLHC=m
#
CONFIG_INPUT=y
# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
+CONFIG_INPUT_POLLDEV=m
#
# Userland interfaces
@@ -834,6 +935,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_NEWTON is not set
CONFIG_KEYBOARD_TWL4030=y
# CONFIG_KEYBOARD_STOWAWAY is not set
@@ -1421,8 +1523,16 @@ CONFIG_PANEL_NEC=y
#
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE is not set
-# CONFIG_LOGO is not set
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_SOUND=y
# CONFIG_SOUND_OSS_CORE is not set
CONFIG_SND=y
@@ -1433,7 +1543,7 @@ CONFIG_SND_JACK=y
# CONFIG_SND_SEQUENCER is not set
# CONFIG_SND_MIXER_OSS is not set
# CONFIG_SND_PCM_OSS is not set
-# CONFIG_SND_HRTIMER is not set
+CONFIG_SND_HRTIMER=m
# CONFIG_SND_DYNAMIC_MINORS is not set
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_VERBOSE_PROCFS=y
@@ -1611,7 +1721,8 @@ CONFIG_USB_LIBUSUAL=y
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_FTDI_ELAN is not set
# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_SISUSBVGA_CON is not set
# CONFIG_USB_LD is not set
# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_IOWARRIOR is not set
@@ -1684,21 +1795,29 @@ CONFIG_MMC_OMAP_HS=y
# CONFIG_MEMSTICK is not set
# CONFIG_ACCESSIBILITY is not set
CONFIG_NEW_LEDS=y
-# CONFIG_LEDS_CLASS is not set
+CONFIG_LEDS_CLASS=m
#
# LED drivers
#
+CONFIG_LEDS_OMAP=m
+CONFIG_LEDS_OMAP_PWM=m
+# CONFIG_LEDS_PCA9532 is not set
+# CONFIG_LEDS_GPIO is not set
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
#
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
-# CONFIG_LEDS_TRIGGER_TIMER is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_GPIO is not set
-# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_LEDS_TRIGGER_BACKLIGHT=m
+CONFIG_LEDS_TRIGGER_GPIO=m
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
#
# iptables trigger is under Netfilter config (LED target)
@@ -1803,7 +1922,11 @@ CONFIG_JBD=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_DEBUG is not set
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_BTRFS_FS is not set
@@ -1823,6 +1946,7 @@ CONFIG_QUOTACTL=y
# CONFIG_AUTOFS4_FS is not set
CONFIG_FUSE_FS=m
CONFIG_CUSE=m
+CONFIG_GENERIC_ACL=y
#
# Caches
@@ -1856,7 +1980,7 @@ CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
+CONFIG_TMPFS_POSIX_ACL=y
# CONFIG_HUGETLB_PAGE is not set
# CONFIG_CONFIGFS_FS is not set
CONFIG_MISC_FILESYSTEMS=y
@@ -1889,6 +2013,7 @@ CONFIG_ROOT_NFS=y
# CONFIG_NFSD is not set
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
@@ -1967,7 +2092,7 @@ CONFIG_NLS_ISO8859_1=y
#
# Kernel hacking
#
-# CONFIG_PRINTK_TIME is not set
+CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=1024
@@ -2041,7 +2166,7 @@ CONFIG_ARM_UNWIND=y
# CONFIG_DEBUG_USER is not set
# CONFIG_DEBUG_ERRORS is not set
# CONFIG_DEBUG_STACK_USAGE is not set
-CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_LL is not set
# CONFIG_DEBUG_ICEDCC is not set
#
@@ -2051,6 +2176,10 @@ CONFIG_DEBUG_LL=y
# CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
CONFIG_CRYPTO=y
#
@@ -2096,7 +2225,7 @@ CONFIG_CRYPTO_PCBC=m
#
# Hash modes
#
-# CONFIG_CRYPTO_HMAC is not set
+CONFIG_CRYPTO_HMAC=m
# CONFIG_CRYPTO_XCBC is not set
#
@@ -2138,7 +2267,7 @@ CONFIG_CRYPTO_DES=y
#
# Compression
#
-# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_DEFLATE=m
# CONFIG_CRYPTO_ZLIB is not set
# CONFIG_CRYPTO_LZO is not set
diff --git a/recipes/linux/linux-omap-zoomsync_2.6.31.bb b/recipes/linux/linux-omap-zoomsync_2.6.31.bb
index 6f075f2380..3a2f861e8b 100644
--- a/recipes/linux/linux-omap-zoomsync_2.6.31.bb
+++ b/recipes/linux/linux-omap-zoomsync_2.6.31.bb
@@ -11,7 +11,7 @@ DEFAULT_PREFERENCE_omapzoom2 = "1"
LOBRANCH?= "master"
SRCREV = "da065810e5705b8ec32a9329ed10d31671df075a"
-OEV = "oe2"
+OEV = "oe3"
PE = "1"
# The main PR is now using MACHINE_KERNEL_PR, for omap3 see conf/machine/include/omap3.inc
@@ -19,7 +19,8 @@ PV = "2.6.30+2.6.31-rc7-${OEV}"
PR_append = "+gitr${SRCREV}"
SRC_URI = "git://dev.omapzoom.org/pub/scm/integration/kernel-omap3.git;branch=${LOBRANCH};protocol=http \
- file://defconfig"
+ file://logo_linux_clut224.ppm \
+ file://defconfig"
SRC_URI_append = " \
"
diff --git a/recipes/linux/linux-omap-zoomsync_2.6.32.bb b/recipes/linux/linux-omap-zoomsync_2.6.32.bb
index f9aff13258..78e10c9655 100644
--- a/recipes/linux/linux-omap-zoomsync_2.6.32.bb
+++ b/recipes/linux/linux-omap-zoomsync_2.6.32.bb
@@ -5,22 +5,30 @@ KERNEL_IMAGETYPE = "uImage"
FILESPATHPKG_prepend = "${PN}-2.6.32:"
-COMPATIBLE_MACHINE = "omapzoom2"
+COMPATIBLE_MACHINE = "omapzoom2|omapzoom36x"
DEFAULT_PREFERENCE = "-1"
-#DEFAULT_PREFERENCE_omapzoom2 = "1"
+DEFAULT_PREFERENCE_omapzoom2 = "1"
-LOBRANCH?= "master"
+SRCREV_omapzoom2 = "015cbaf1035cd9a61d33a27de2a22902555db3c5"
-SRCREV = "69eb2b26cc8b4d0a0db963a100c02d1acbfd90eb"
-OEV = "oe1"
+SRCREV_omapzoom36x = "2e3c681c6228de2a3f8fbb0cfbc940e7ea825a09"
+
+OEV = "oe5"
PE = "1"
# The main PR is now using MACHINE_KERNEL_PR, for omap3 see conf/machine/include/omap3.inc
-PV = "2.6.31+2.6.32-rc7-${OEV}"
+PV_omapzoom2 = "2.6.32.7-${OEV}"
+PV_omapzoom36x = "2.6.32-rc7-${OEV}"
+
PR_append = "+gitr${SRCREV}"
-SRC_URI = "git://dev.omapzoom.org/pub/scm/integration/kernel-omap3.git;branch=${LOBRANCH};protocol=http \
+SRC_URI_omapzoom2 = "git://dev.omapzoom.org/pub/scm/integration/kernel-omap3.git;branch=master;protocol=git \
+ file://logo_linux_clut224.ppm \
+ file://defconfig"
+
+SRC_URI_omapzoom36x = "git://dev.omapzoom.org/pub/scm/integration/kernel-omap3.git;branch=L23.I3.3;protocol=git \
+ file://logo_linux_clut224.ppm \
file://defconfig"
SRC_URI_append = " \
diff --git a/recipes/linux/linux-omap_2.6.29.bb b/recipes/linux/linux-omap_2.6.29.bb
index 1a0fc51c5a..1396be33c5 100644
--- a/recipes/linux/linux-omap_2.6.29.bb
+++ b/recipes/linux/linux-omap_2.6.29.bb
@@ -10,6 +10,7 @@ DEFAULT_PREFERENCE_overo = "1"
DEFAULT_PREFERENCE_beagleboard = "1"
DEFAULT_PREFERENCE_omap3-touchbook = "1"
DEFAULT_PREFERENCE_omap3evm = "1"
+DEFAULT_PREFERENCE_omapzoom = "1"
SRCREV = "58cf2f1425abfd3a449f9fe985e48be2d2555022"
diff --git a/recipes/linux/linux-openmoko-2.6.24_git.bb b/recipes/linux/linux-openmoko-2.6.24_git.bb
index 99e478c3d6..d980e21cb4 100644
--- a/recipes/linux/linux-openmoko-2.6.24_git.bb
+++ b/recipes/linux/linux-openmoko-2.6.24_git.bb
@@ -6,6 +6,7 @@ DESCRIPTION = "The Linux kernel for the Openmoko devices GTA01 (Neo1973) and GTA
KERNEL_RELEASE = "2.6.24"
KERNEL_VERSION = "${KERNEL_RELEASE}"
+SRCREV = "fb42ce6724576fc173faf8abfb04aa2c36d213b7"
OEV = "oe5"
PV = "${KERNEL_RELEASE}-${OEV}+gitr${SRCREV}"
PR = "r1"
diff --git a/recipes/linux/linux-openmoko-2.6.28_git.bb b/recipes/linux/linux-openmoko-2.6.28_git.bb
index 2e1d133546..403a29b172 100644
--- a/recipes/linux/linux-openmoko-2.6.28_git.bb
+++ b/recipes/linux/linux-openmoko-2.6.28_git.bb
@@ -6,6 +6,7 @@ DESCRIPTION_${PN} = "Linux ${KERNEL_RELEASE} kernel for the Openmoko Neo GSM Sma
KERNEL_RELEASE = "2.6.28"
KERNEL_VERSION = "${KERNEL_RELEASE}"
+SRCREV = "8c65792a5c83c76d662a617a7c4e1ae8104bb6a5"
OEV = "oe2"
PV = "${KERNEL_RELEASE}-${OEV}+gitr${SRCREV}"
PR = "r0"
diff --git a/recipes/linux/linux-openmoko-2.6.31_git.bb b/recipes/linux/linux-openmoko-2.6.31_git.bb
index 15301f5da4..8db2533941 100644
--- a/recipes/linux/linux-openmoko-2.6.31_git.bb
+++ b/recipes/linux/linux-openmoko-2.6.31_git.bb
@@ -6,6 +6,7 @@ DESCRIPTION_${PN} = "Linux ${KERNEL_VERSION} kernel for the Openmoko Neo GSM Sma
KERNEL_RELEASE = "2.6.31"
KERNEL_VERSION = "${KERNEL_RELEASE}"
+SRCREV = "dd32737aa524e09c1d141a0e735dd58674552244"
OEV = "oe1"
PV = "${KERNEL_RELEASE}-${OEV}+gitr${SRCREV}"
PR = "r6"
diff --git a/recipes/linux/linux-openmoko-2.6.32/0001-DRM-for-platform-devices.patch b/recipes/linux/linux-openmoko-2.6.32/0001-DRM-for-platform-devices.patch
deleted file mode 100644
index 2c9b611165..0000000000
--- a/recipes/linux/linux-openmoko-2.6.32/0001-DRM-for-platform-devices.patch
+++ /dev/null
@@ -1,458 +0,0 @@
-From da270cf61e67d912b38e314719511efc4c2ea085 Mon Sep 17 00:00:00 2001
-From: Thomas White <taw@bitwiz.org.uk>
-Date: Tue, 20 Oct 2009 15:52:30 +0200
-Subject: [PATCH 1/4] DRM for platform devices
-
-This modifies the DRM core in a small number of places to allow platform
-devices to be used for direct rendering, alongside PCI devices.
-
-Signed-off-by: Thomas White <taw@bitwiz.org.uk>
----
- drivers/gpu/drm/Kconfig | 2 +-
- drivers/gpu/drm/drm_bufs.c | 2 +-
- drivers/gpu/drm/drm_drv.c | 27 ++++++++++
- drivers/gpu/drm/drm_info.c | 27 ++++++++--
- drivers/gpu/drm/drm_ioctl.c | 118 ++++++++++++++++++++++++++++++-------------
- drivers/gpu/drm/drm_stub.c | 76 +++++++++++++++++++++++++++-
- drivers/gpu/drm/drm_sysfs.c | 6 ++-
- include/drm/drmP.h | 13 +++++
- 8 files changed, 224 insertions(+), 47 deletions(-)
-
-diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
-index 39b393d..cef3d2c 100644
---- a/drivers/gpu/drm/Kconfig
-+++ b/drivers/gpu/drm/Kconfig
-@@ -6,7 +6,7 @@
- #
- menuconfig DRM
- tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)"
-- depends on (AGP || AGP=n) && PCI && !EMULATED_CMPXCHG && MMU
-+ depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && MMU
- select I2C
- select I2C_ALGOBIT
- help
-diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c
-index 6246e3f..b9f15bf 100644
---- a/drivers/gpu/drm/drm_bufs.c
-+++ b/drivers/gpu/drm/drm_bufs.c
-@@ -188,7 +188,7 @@ static int drm_addmap_core(struct drm_device * dev, resource_size_t offset,
- switch (map->type) {
- case _DRM_REGISTERS:
- case _DRM_FRAME_BUFFER:
--#if !defined(__sparc__) && !defined(__alpha__) && !defined(__ia64__) && !defined(__powerpc64__) && !defined(__x86_64__)
-+#if !defined(__sparc__) && !defined(__alpha__) && !defined(__ia64__) && !defined(__powerpc64__) && !defined(__x86_64__) && !defined(__arm__)
- if (map->offset + (map->size-1) < map->offset ||
- map->offset < virt_to_phys(high_memory)) {
- kfree(map);
-diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
-index b39d7bf..a7861e8 100644
---- a/drivers/gpu/drm/drm_drv.c
-+++ b/drivers/gpu/drm/drm_drv.c
-@@ -247,6 +247,7 @@ int drm_lastclose(struct drm_device * dev)
- */
- int drm_init(struct drm_driver *driver)
- {
-+#ifdef CONFIG_PCI
- struct pci_dev *pdev = NULL;
- const struct pci_device_id *pid;
- int i;
-@@ -280,11 +281,37 @@ int drm_init(struct drm_driver *driver)
- drm_get_dev(pdev, pid, driver);
- }
- }
-+#endif
- return 0;
- }
-
- EXPORT_SYMBOL(drm_init);
-
-+/**
-+ * Call this to associate a drm_driver with a platform_device.
-+ *
-+ * \return zero on success or a negative number on failure.
-+ *
-+ * This is a replacement for drm_init(), but for platform drivers.
-+ * In this case, the caller must provide the matching platform_device
-+ *
-+ * since there is no physical bus to scan through.
-+ *
-+ * \sa drm_init
-+ *
-+ */
-+int drm_platform_init(struct drm_driver *driver, struct platform_device *pdev,
-+ void *priv)
-+{
-+ DRM_DEBUG("\n");
-+
-+ INIT_LIST_HEAD(&driver->device_list);
-+
-+ return drm_get_platform_dev(pdev, driver, priv);
-+}
-+
-+EXPORT_SYMBOL(drm_platform_init);
-+
- void drm_exit(struct drm_driver *driver)
- {
- struct drm_device *dev, *tmp;
-diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c
-index f0f6c6b..838c2ee 100644
---- a/drivers/gpu/drm/drm_info.c
-+++ b/drivers/gpu/drm/drm_info.c
-@@ -52,12 +52,28 @@ int drm_name_info(struct seq_file *m, void *data)
- return 0;
-
- if (master->unique) {
-- seq_printf(m, "%s %s %s\n",
-- dev->driver->pci_driver.name,
-- pci_name(dev->pdev), master->unique);
-+
-+ if (drm_core_is_platform(dev)) {
-+ seq_printf(m, "%s %s %s\n",
-+ dev->driver->name,
-+ dev_name(&dev->platform_dev->dev),
-+ master->unique);
-+ } else {
-+ seq_printf(m, "%s %s %s\n",
-+ dev->driver->pci_driver.name,
-+ pci_name(dev->pdev), master->unique);
-+ }
-+
- } else {
-- seq_printf(m, "%s %s\n", dev->driver->pci_driver.name,
-- pci_name(dev->pdev));
-+
-+ if (drm_core_is_platform(dev)) {
-+ seq_printf(m, "%s %s\n", dev->driver->name,
-+ dev_name(&dev->platform_dev->dev));
-+ } else {
-+ seq_printf(m, "%s %s\n", dev->driver->pci_driver.name,
-+ pci_name(dev->pdev));
-+ }
-+
- }
-
- return 0;
-@@ -325,4 +341,3 @@ int drm_vma_info(struct seq_file *m, void *data)
- }
-
- #endif
--
-diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
-index 9b9ff46..133ef29 100644
---- a/drivers/gpu/drm/drm_ioctl.c
-+++ b/drivers/gpu/drm/drm_ioctl.c
-@@ -83,7 +83,6 @@ int drm_setunique(struct drm_device *dev, void *data,
- {
- struct drm_unique *u = data;
- struct drm_master *master = file_priv->master;
-- int domain, bus, slot, func, ret;
-
- if (master->unique_len || master->unique)
- return -EBUSY;
-@@ -101,28 +100,46 @@ int drm_setunique(struct drm_device *dev, void *data,
-
- master->unique[master->unique_len] = '\0';
-
-- dev->devname = kmalloc(strlen(dev->driver->pci_driver.name) +
-- strlen(master->unique) + 2, GFP_KERNEL);
-- if (!dev->devname)
-- return -ENOMEM;
-+ if ( !drm_core_is_platform(dev) ) {
-
-- sprintf(dev->devname, "%s@%s", dev->driver->pci_driver.name,
-- master->unique);
-+ int domain, bus, slot, func, ret;
-
-- /* Return error if the busid submitted doesn't match the device's actual
-- * busid.
-- */
-- ret = sscanf(master->unique, "PCI:%d:%d:%d", &bus, &slot, &func);
-- if (ret != 3)
-- return -EINVAL;
-- domain = bus >> 8;
-- bus &= 0xff;
-+ /* PCI device */
-+ dev->devname = kmalloc(strlen(dev->driver->pci_driver.name) +
-+ strlen(master->unique) + 2, GFP_KERNEL);
-+ if (!dev->devname)
-+ return -ENOMEM;
-
-- if ((domain != drm_get_pci_domain(dev)) ||
-- (bus != dev->pdev->bus->number) ||
-- (slot != PCI_SLOT(dev->pdev->devfn)) ||
-- (func != PCI_FUNC(dev->pdev->devfn)))
-- return -EINVAL;
-+ sprintf(dev->devname, "%s@%s", dev->driver->pci_driver.name,
-+ master->unique);
-+
-+ /* Return error if the busid submitted doesn't match the
-+ * device's actual busid.
-+ */
-+ ret = sscanf(master->unique, "PCI:%d:%d:%d", &bus, &slot, &func);
-+ if (ret != 3)
-+ return -EINVAL;
-+ domain = bus >> 8;
-+ bus &= 0xff;
-+
-+ if ((domain != drm_get_pci_domain(dev)) ||
-+ (bus != dev->pdev->bus->number) ||
-+ (slot != PCI_SLOT(dev->pdev->devfn)) ||
-+ (func != PCI_FUNC(dev->pdev->devfn)))
-+ return -EINVAL;
-+
-+ } else {
-+
-+ /* Platform device */
-+ dev->devname = kmalloc(strlen(dev->driver->name) +
-+ strlen(master->unique) + 2, GFP_KERNEL);
-+ if (!dev->devname)
-+ return -ENOMEM;
-+
-+ sprintf(dev->devname, "%s@%s", dev->driver->name,
-+ master->unique);
-+
-+ }
-
- return 0;
- }
-@@ -141,23 +158,52 @@ static int drm_set_busid(struct drm_device *dev, struct drm_file *file_priv)
- if (master->unique == NULL)
- return -ENOMEM;
-
-- len = snprintf(master->unique, master->unique_len, "pci:%04x:%02x:%02x.%d",
-- drm_get_pci_domain(dev),
-- dev->pdev->bus->number,
-- PCI_SLOT(dev->pdev->devfn),
-- PCI_FUNC(dev->pdev->devfn));
-- if (len >= master->unique_len)
-- DRM_ERROR("buffer overflow");
-- else
-- master->unique_len = len;
--
-- dev->devname = kmalloc(strlen(dev->driver->pci_driver.name) +
-- master->unique_len + 2, GFP_KERNEL);
-- if (dev->devname == NULL)
-- return -ENOMEM;
-+ if ( !drm_core_is_platform(dev) ) {
-+
-+ /* PCI device */
-
-- sprintf(dev->devname, "%s@%s", dev->driver->pci_driver.name,
-- master->unique);
-+ len = snprintf(master->unique, master->unique_len,
-+ "pci:%04x:%02x:%02x.%d",
-+ drm_get_pci_domain(dev),
-+ dev->pdev->bus->number,
-+ PCI_SLOT(dev->pdev->devfn),
-+ PCI_FUNC(dev->pdev->devfn));
-+ if (len >= master->unique_len)
-+ DRM_ERROR("buffer overflow");
-+ else
-+ master->unique_len = len;
-+
-+ dev->devname = kmalloc(strlen(dev->driver->pci_driver.name) +
-+ master->unique_len + 2, GFP_KERNEL);
-+ if (dev->devname == NULL)
-+ return -ENOMEM;
-+
-+ sprintf(dev->devname, "%s@%s", dev->driver->pci_driver.name,
-+ master->unique);
-+
-+ } else {
-+
-+ /* Platform device */
-+
-+ int len;
-+
-+ len = snprintf(master->unique, master->unique_len,
-+ "platform:%s", dev->platform_dev->name);
-+
-+ if (len >= master->unique_len)
-+ DRM_ERROR("buffer overflow");
-+ else
-+ master->unique_len = len;
-+
-+ dev->devname = kmalloc(strlen(dev->driver->name)
-+ + master->unique_len + 2, GFP_KERNEL);
-+ if (dev->devname == NULL)
-+ return -ENOMEM;
-+
-+ sprintf(dev->devname, "%s@%s", dev->driver->name,
-+ master->unique);
-+
-+ }
-
- return 0;
- }
-diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
-index 55bb8a8..a7069ad 100644
---- a/drivers/gpu/drm/drm_stub.c
-+++ b/drivers/gpu/drm/drm_stub.c
-@@ -230,8 +230,10 @@ static int drm_fill_in_dev(struct drm_device * dev, struct pci_dev *pdev,
- idr_init(&dev->drw_idr);
-
- dev->pdev = pdev;
-- dev->pci_device = pdev->device;
-- dev->pci_vendor = pdev->vendor;
-+ if (pdev) {
-+ dev->pci_device = pdev->device;
-+ dev->pci_vendor = pdev->vendor;
-+ }
-
- #ifdef __alpha__
- dev->hose = pdev->sysdata;
-@@ -449,6 +451,76 @@ err_g1:
- EXPORT_SYMBOL(drm_get_dev);
-
- /**
-+ *
-+ * Register a platform device as a DRM device
-+ *
-+ * \param pdev - platform device structure
-+ * \param driver - the matching drm_driver structure
-+ * \return zero on success or a negative number on failure.
-+ *
-+ * Attempt to gets inter module "drm" information. If we are first
-+ * then register the character device and inter module information.
-+ * Try and register, if we fail to register, backout previous work.
-+ *
-+ * \sa drm_get_dev
-+ */
-+int drm_get_platform_dev(struct platform_device *pdev,
-+ struct drm_driver *driver, void *priv)
-+{
-+ struct drm_device *dev;
-+ int ret;
-+ DRM_DEBUG("\n");
-+
-+ dev = kmalloc(sizeof(*dev), GFP_KERNEL);
-+ if (!dev)
-+ return -ENOMEM;
-+ dev->dev_private = priv;
-+
-+ if ((ret = drm_fill_in_dev(dev, NULL, NULL, driver))) {
-+ printk(KERN_ERR "DRM: Fill_in_dev failed.\n");
-+ goto err_g1;
-+ }
-+ dev->platform_dev = pdev;
-+
-+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
-+ ret = drm_get_minor(dev, &dev->control, DRM_MINOR_CONTROL);
-+ if (ret)
-+ goto err_g2;
-+ }
-+
-+ if ((ret = drm_get_minor(dev, &dev->primary, DRM_MINOR_LEGACY)))
-+ goto err_g3;
-+
-+ if (dev->driver->load) {
-+ ret = dev->driver->load(dev, 0);
-+ if (ret)
-+ goto err_g3;
-+ }
-+
-+ /* setup the grouping for the legacy output */
-+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
-+ ret = drm_mode_group_init_legacy_group(dev, &dev->primary->mode_group);
-+ if (ret)
-+ goto err_g3;
-+ }
-+
-+ list_add_tail(&dev->driver_item, &driver->device_list);
-+
-+ DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",
-+ driver->name, driver->major, driver->minor, driver->patchlevel,
-+ driver->date, dev->primary->index);
-+
-+ return 0;
-+
-+err_g3:
-+ drm_put_minor(&dev->primary);
-+err_g2:
-+err_g1:
-+ kfree(dev);
-+ return ret;
-+}
-+
-+/**
- * Put a secondary minor number.
- *
- * \param sec_minor - structure to be released
-diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
-index f7a615b..fea2b71 100644
---- a/drivers/gpu/drm/drm_sysfs.c
-+++ b/drivers/gpu/drm/drm_sysfs.c
-@@ -482,7 +482,11 @@ int drm_sysfs_device_add(struct drm_minor *minor)
- int err;
- char *minor_str;
-
-- minor->kdev.parent = &minor->dev->pdev->dev;
-+ if (minor->dev->pdev) {
-+ minor->kdev.parent = &minor->dev->pdev->dev;
-+ } else {
-+ minor->kdev.parent = &minor->dev->platform_dev->dev;
-+ }
- minor->kdev.class = drm_class;
- minor->kdev.release = drm_sysfs_device_release;
- minor->kdev.devt = minor->device;
-diff --git a/include/drm/drmP.h b/include/drm/drmP.h
-index 45b67d9..66253f9 100644
---- a/include/drm/drmP.h
-+++ b/include/drm/drmP.h
-@@ -55,6 +55,7 @@
- #include <linux/mm.h>
- #include <linux/cdev.h>
- #include <linux/mutex.h>
-+#include <linux/platform_device.h>
- #if defined(__alpha__) || defined(__powerpc__)
- #include <asm/pgtable.h> /* For pte_wrprotect */
- #endif
-@@ -113,6 +114,7 @@ extern void drm_ut_debug_printk(unsigned int request_level,
- #define DRIVER_IRQ_VBL2 0x800
- #define DRIVER_GEM 0x1000
- #define DRIVER_MODESET 0x2000
-+#define DRIVER_IS_PLATFORM 0x4000
-
- /***********************************************************************/
- /** \name Begin the DRM... */
-@@ -981,6 +983,7 @@ struct drm_device {
- wait_queue_head_t buf_writers; /**< Processes waiting to ctx switch */
-
- struct drm_agp_head *agp; /**< AGP data */
-+ struct platform_device *platform_dev; /**< platform device structure */
-
- struct pci_dev *pdev; /**< PCI device structure */
- int pci_vendor; /**< PCI vendor id */
-@@ -1091,12 +1094,20 @@ static inline int drm_mtrr_del(int handle, unsigned long offset,
- }
- #endif
-
-+static inline int drm_core_is_platform(struct drm_device *dev)
-+{
-+ return drm_core_check_feature(dev, DRIVER_IS_PLATFORM);
-+}
-+
- /******************************************************************/
- /** \name Internal function definitions */
- /*@{*/
-
- /* Driver support (drm_drv.h) */
- extern int drm_init(struct drm_driver *driver);
-+extern int drm_platform_init(struct drm_driver *driver,
-+ struct platform_device *pdev,
-+ void *dev_private);
- extern void drm_exit(struct drm_driver *driver);
- extern int drm_ioctl(struct inode *inode, struct file *filp,
- unsigned int cmd, unsigned long arg);
-@@ -1314,6 +1325,8 @@ extern int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
- struct drm_file *file_priv);
- struct drm_master *drm_master_create(struct drm_minor *minor);
- extern struct drm_master *drm_master_get(struct drm_master *master);
-+extern int drm_get_platform_dev(struct platform_device *pdev,
-+ struct drm_driver *driver, void *priv);
- extern void drm_master_put(struct drm_master **master);
- extern int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
- struct drm_driver *driver);
---
-1.6.5.3
-
diff --git a/recipes/linux/linux-openmoko-2.6.32/0001-glamo-drm-use-dev_set_drvdata-instead-of-setting-dri.patch b/recipes/linux/linux-openmoko-2.6.32/0001-glamo-drm-use-dev_set_drvdata-instead-of-setting-dri.patch
deleted file mode 100644
index d9afec8830..0000000000
--- a/recipes/linux/linux-openmoko-2.6.32/0001-glamo-drm-use-dev_set_drvdata-instead-of-setting-dri.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From eadea0d7bda93fec0e2c7a3b675fc6ab21cdfe61 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <Martin.Jansa@gmail.com>
-Date: Tue, 22 Dec 2009 16:11:27 +0100
-Subject: [PATCH 1/2] glamo-drm: use dev_set_drvdata instead of setting driver_data directly
-
-* driver_data is private since 2.6.32
- http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b4028437876866aba4747a655ede00f892089e14
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
----
- drivers/mfd/glamo/glamo-drm-drv.c | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/mfd/glamo/glamo-drm-drv.c b/drivers/mfd/glamo/glamo-drm-drv.c
-index 81215f4..4352091 100644
---- a/drivers/mfd/glamo/glamo-drm-drv.c
-+++ b/drivers/mfd/glamo/glamo-drm-drv.c
-@@ -355,7 +355,7 @@ out_release_regs:
- release_mem_region(gdrm->reg->start, resource_size(gdrm->reg));
- out_free:
- kfree(gdrm);
-- pdev->dev.driver_data = NULL;
-+ dev_set_drvdata(&pdev->dev, NULL);
- return rc;
- }
-
---
-1.6.6.rc4
-
diff --git a/recipes/linux/linux-openmoko-2.6.32/0001-wm8753-fix-build-with-gcc-4.4.2-which-works-ok-with-.patch b/recipes/linux/linux-openmoko-2.6.32/0001-wm8753-fix-build-with-gcc-4.4.2-which-works-ok-with-.patch
index c6b989f997..c6a16ab4d5 100644
--- a/recipes/linux/linux-openmoko-2.6.32/0001-wm8753-fix-build-with-gcc-4.4.2-which-works-ok-with-.patch
+++ b/recipes/linux/linux-openmoko-2.6.32/0001-wm8753-fix-build-with-gcc-4.4.2-which-works-ok-with-.patch
@@ -1,17 +1,18 @@
-From 63b619f9466dc36648d082dc4e4fad714a343d80 Mon Sep 17 00:00:00 2001
+From b3b22a8f23e6b49d21bbfe70f278a0d79419e3df Mon Sep 17 00:00:00 2001
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Sat, 7 Nov 2009 20:33:06 +0100
-Subject: [PATCH 1/5] wm8753: fix build with gcc-4.4.2, which works ok with 4.1.2
+Subject: [PATCH 1/9] wm8753: fix build with gcc-4.4.2, which works ok with 4.1.2
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
sound/soc/codecs/wm8753.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c
-index d80d414..1e685b2 100644
+index 5ad677c..e148406 100644
--- a/sound/soc/codecs/wm8753.c
+++ b/sound/soc/codecs/wm8753.c
-@@ -709,7 +709,9 @@ static void pll_factors(struct _pll_div *pll_div, unsigned int target,
+@@ -710,7 +710,9 @@ static void pll_factors(struct _pll_div *pll_div, unsigned int target,
Nmod = target % source;
Kpart = FIXED_PLL_SIZE * (long long)Nmod;
@@ -23,5 +24,5 @@ index d80d414..1e685b2 100644
K = Kpart & 0xFFFFFFFF;
--
-1.6.5.2
+1.6.6.1
diff --git a/recipes/linux/linux-openmoko-2.6.32/0002-DRM-for-platform-devices.patch b/recipes/linux/linux-openmoko-2.6.32/0002-DRM-for-platform-devices.patch
new file mode 100644
index 0000000000..4e47a088d0
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0002-DRM-for-platform-devices.patch
@@ -0,0 +1,458 @@
+From 660570997a5c998aaecc94798b6ea8d60b0da053 Mon Sep 17 00:00:00 2001
+From: Thomas White <taw@bitwiz.org.uk>
+Date: Tue, 20 Oct 2009 15:52:30 +0200
+Subject: [PATCH 2/9] DRM for platform devices
+
+This modifies the DRM core in a small number of places to allow platform
+devices to be used for direct rendering, alongside PCI devices.
+
+Signed-off-by: Thomas White <taw@bitwiz.org.uk>
+---
+ drivers/gpu/drm/Kconfig | 2 +-
+ drivers/gpu/drm/drm_bufs.c | 2 +-
+ drivers/gpu/drm/drm_drv.c | 27 ++++++++++
+ drivers/gpu/drm/drm_info.c | 27 ++++++++--
+ drivers/gpu/drm/drm_ioctl.c | 118 ++++++++++++++++++++++++++++++-------------
+ drivers/gpu/drm/drm_stub.c | 76 +++++++++++++++++++++++++++-
+ drivers/gpu/drm/drm_sysfs.c | 6 ++-
+ include/drm/drmP.h | 13 +++++
+ 8 files changed, 224 insertions(+), 47 deletions(-)
+
+diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
+index 96eddd1..8b050ad 100644
+--- a/drivers/gpu/drm/Kconfig
++++ b/drivers/gpu/drm/Kconfig
+@@ -6,7 +6,7 @@
+ #
+ menuconfig DRM
+ tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)"
+- depends on (AGP || AGP=n) && PCI && !EMULATED_CMPXCHG && MMU
++ depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && MMU
+ select I2C
+ select I2C_ALGOBIT
+ help
+diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c
+index 8417cc4..5a3b203 100644
+--- a/drivers/gpu/drm/drm_bufs.c
++++ b/drivers/gpu/drm/drm_bufs.c
+@@ -188,7 +188,7 @@ static int drm_addmap_core(struct drm_device * dev, resource_size_t offset,
+ switch (map->type) {
+ case _DRM_REGISTERS:
+ case _DRM_FRAME_BUFFER:
+-#if !defined(__sparc__) && !defined(__alpha__) && !defined(__ia64__) && !defined(__powerpc64__) && !defined(__x86_64__)
++#if !defined(__sparc__) && !defined(__alpha__) && !defined(__ia64__) && !defined(__powerpc64__) && !defined(__x86_64__) && !defined(__arm__)
+ if (map->offset + (map->size-1) < map->offset ||
+ map->offset < virt_to_phys(high_memory)) {
+ kfree(map);
+diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
+index a75ca63..26005d9 100644
+--- a/drivers/gpu/drm/drm_drv.c
++++ b/drivers/gpu/drm/drm_drv.c
+@@ -247,6 +247,7 @@ int drm_lastclose(struct drm_device * dev)
+ */
+ int drm_init(struct drm_driver *driver)
+ {
++#ifdef CONFIG_PCI
+ struct pci_dev *pdev = NULL;
+ const struct pci_device_id *pid;
+ int i;
+@@ -280,11 +281,37 @@ int drm_init(struct drm_driver *driver)
+ drm_get_dev(pdev, pid, driver);
+ }
+ }
++#endif
+ return 0;
+ }
+
+ EXPORT_SYMBOL(drm_init);
+
++/**
++ * Call this to associate a drm_driver with a platform_device.
++ *
++ * \return zero on success or a negative number on failure.
++ *
++ * This is a replacement for drm_init(), but for platform drivers.
++ * In this case, the caller must provide the matching platform_device
++ *
++ * since there is no physical bus to scan through.
++ *
++ * \sa drm_init
++ *
++ */
++int drm_platform_init(struct drm_driver *driver, struct platform_device *pdev,
++ void *priv)
++{
++ DRM_DEBUG("\n");
++
++ INIT_LIST_HEAD(&driver->device_list);
++
++ return drm_get_platform_dev(pdev, driver, priv);
++}
++
++EXPORT_SYMBOL(drm_platform_init);
++
+ void drm_exit(struct drm_driver *driver)
+ {
+ struct drm_device *dev, *tmp;
+diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c
+index f0f6c6b..838c2ee 100644
+--- a/drivers/gpu/drm/drm_info.c
++++ b/drivers/gpu/drm/drm_info.c
+@@ -52,12 +52,28 @@ int drm_name_info(struct seq_file *m, void *data)
+ return 0;
+
+ if (master->unique) {
+- seq_printf(m, "%s %s %s\n",
+- dev->driver->pci_driver.name,
+- pci_name(dev->pdev), master->unique);
++
++ if (drm_core_is_platform(dev)) {
++ seq_printf(m, "%s %s %s\n",
++ dev->driver->name,
++ dev_name(&dev->platform_dev->dev),
++ master->unique);
++ } else {
++ seq_printf(m, "%s %s %s\n",
++ dev->driver->pci_driver.name,
++ pci_name(dev->pdev), master->unique);
++ }
++
+ } else {
+- seq_printf(m, "%s %s\n", dev->driver->pci_driver.name,
+- pci_name(dev->pdev));
++
++ if (drm_core_is_platform(dev)) {
++ seq_printf(m, "%s %s\n", dev->driver->name,
++ dev_name(&dev->platform_dev->dev));
++ } else {
++ seq_printf(m, "%s %s\n", dev->driver->pci_driver.name,
++ pci_name(dev->pdev));
++ }
++
+ }
+
+ return 0;
+@@ -325,4 +341,3 @@ int drm_vma_info(struct seq_file *m, void *data)
+ }
+
+ #endif
+-
+diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
+index 9b9ff46..133ef29 100644
+--- a/drivers/gpu/drm/drm_ioctl.c
++++ b/drivers/gpu/drm/drm_ioctl.c
+@@ -83,7 +83,6 @@ int drm_setunique(struct drm_device *dev, void *data,
+ {
+ struct drm_unique *u = data;
+ struct drm_master *master = file_priv->master;
+- int domain, bus, slot, func, ret;
+
+ if (master->unique_len || master->unique)
+ return -EBUSY;
+@@ -101,28 +100,46 @@ int drm_setunique(struct drm_device *dev, void *data,
+
+ master->unique[master->unique_len] = '\0';
+
+- dev->devname = kmalloc(strlen(dev->driver->pci_driver.name) +
+- strlen(master->unique) + 2, GFP_KERNEL);
+- if (!dev->devname)
+- return -ENOMEM;
++ if ( !drm_core_is_platform(dev) ) {
+
+- sprintf(dev->devname, "%s@%s", dev->driver->pci_driver.name,
+- master->unique);
++ int domain, bus, slot, func, ret;
+
+- /* Return error if the busid submitted doesn't match the device's actual
+- * busid.
+- */
+- ret = sscanf(master->unique, "PCI:%d:%d:%d", &bus, &slot, &func);
+- if (ret != 3)
+- return -EINVAL;
+- domain = bus >> 8;
+- bus &= 0xff;
++ /* PCI device */
++ dev->devname = kmalloc(strlen(dev->driver->pci_driver.name) +
++ strlen(master->unique) + 2, GFP_KERNEL);
++ if (!dev->devname)
++ return -ENOMEM;
+
+- if ((domain != drm_get_pci_domain(dev)) ||
+- (bus != dev->pdev->bus->number) ||
+- (slot != PCI_SLOT(dev->pdev->devfn)) ||
+- (func != PCI_FUNC(dev->pdev->devfn)))
+- return -EINVAL;
++ sprintf(dev->devname, "%s@%s", dev->driver->pci_driver.name,
++ master->unique);
++
++ /* Return error if the busid submitted doesn't match the
++ * device's actual busid.
++ */
++ ret = sscanf(master->unique, "PCI:%d:%d:%d", &bus, &slot, &func);
++ if (ret != 3)
++ return -EINVAL;
++ domain = bus >> 8;
++ bus &= 0xff;
++
++ if ((domain != drm_get_pci_domain(dev)) ||
++ (bus != dev->pdev->bus->number) ||
++ (slot != PCI_SLOT(dev->pdev->devfn)) ||
++ (func != PCI_FUNC(dev->pdev->devfn)))
++ return -EINVAL;
++
++ } else {
++
++ /* Platform device */
++ dev->devname = kmalloc(strlen(dev->driver->name) +
++ strlen(master->unique) + 2, GFP_KERNEL);
++ if (!dev->devname)
++ return -ENOMEM;
++
++ sprintf(dev->devname, "%s@%s", dev->driver->name,
++ master->unique);
++
++ }
+
+ return 0;
+ }
+@@ -141,23 +158,52 @@ static int drm_set_busid(struct drm_device *dev, struct drm_file *file_priv)
+ if (master->unique == NULL)
+ return -ENOMEM;
+
+- len = snprintf(master->unique, master->unique_len, "pci:%04x:%02x:%02x.%d",
+- drm_get_pci_domain(dev),
+- dev->pdev->bus->number,
+- PCI_SLOT(dev->pdev->devfn),
+- PCI_FUNC(dev->pdev->devfn));
+- if (len >= master->unique_len)
+- DRM_ERROR("buffer overflow");
+- else
+- master->unique_len = len;
+-
+- dev->devname = kmalloc(strlen(dev->driver->pci_driver.name) +
+- master->unique_len + 2, GFP_KERNEL);
+- if (dev->devname == NULL)
+- return -ENOMEM;
++ if ( !drm_core_is_platform(dev) ) {
++
++ /* PCI device */
+
+- sprintf(dev->devname, "%s@%s", dev->driver->pci_driver.name,
+- master->unique);
++ len = snprintf(master->unique, master->unique_len,
++ "pci:%04x:%02x:%02x.%d",
++ drm_get_pci_domain(dev),
++ dev->pdev->bus->number,
++ PCI_SLOT(dev->pdev->devfn),
++ PCI_FUNC(dev->pdev->devfn));
++ if (len >= master->unique_len)
++ DRM_ERROR("buffer overflow");
++ else
++ master->unique_len = len;
++
++ dev->devname = kmalloc(strlen(dev->driver->pci_driver.name) +
++ master->unique_len + 2, GFP_KERNEL);
++ if (dev->devname == NULL)
++ return -ENOMEM;
++
++ sprintf(dev->devname, "%s@%s", dev->driver->pci_driver.name,
++ master->unique);
++
++ } else {
++
++ /* Platform device */
++
++ int len;
++
++ len = snprintf(master->unique, master->unique_len,
++ "platform:%s", dev->platform_dev->name);
++
++ if (len >= master->unique_len)
++ DRM_ERROR("buffer overflow");
++ else
++ master->unique_len = len;
++
++ dev->devname = kmalloc(strlen(dev->driver->name)
++ + master->unique_len + 2, GFP_KERNEL);
++ if (dev->devname == NULL)
++ return -ENOMEM;
++
++ sprintf(dev->devname, "%s@%s", dev->driver->name,
++ master->unique);
++
++ }
+
+ return 0;
+ }
+diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
+index 55bb8a8..5e3d65a 100644
+--- a/drivers/gpu/drm/drm_stub.c
++++ b/drivers/gpu/drm/drm_stub.c
+@@ -230,8 +230,10 @@ static int drm_fill_in_dev(struct drm_device * dev, struct pci_dev *pdev,
+ idr_init(&dev->drw_idr);
+
+ dev->pdev = pdev;
+- dev->pci_device = pdev->device;
+- dev->pci_vendor = pdev->vendor;
++ if (pdev) {
++ dev->pci_device = pdev->device;
++ dev->pci_vendor = pdev->vendor;
++ }
+
+ #ifdef __alpha__
+ dev->hose = pdev->sysdata;
+@@ -449,6 +451,76 @@ err_g1:
+ EXPORT_SYMBOL(drm_get_dev);
+
+ /**
++ *
++ * Register a platform device as a DRM device
++ *
++ * \param pdev - platform device structure
++ * \param driver - the matching drm_driver structure
++ * \return zero on success or a negative number on failure.
++ *
++ * Attempt to gets inter module "drm" information. If we are first
++ * then register the character device and inter module information.
++ * Try and register, if we fail to register, backout previous work.
++ *
++ * \sa drm_get_dev
++ */
++int drm_get_platform_dev(struct platform_device *pdev,
++ struct drm_driver *driver, void *priv)
++{
++ struct drm_device *dev;
++ int ret;
++ DRM_DEBUG("\n");
++
++ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
++ if (!dev)
++ return -ENOMEM;
++ dev->dev_private = priv;
++
++ if ((ret = drm_fill_in_dev(dev, NULL, NULL, driver))) {
++ printk(KERN_ERR "DRM: Fill_in_dev failed.\n");
++ goto err_g1;
++ }
++ dev->platform_dev = pdev;
++
++ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
++ ret = drm_get_minor(dev, &dev->control, DRM_MINOR_CONTROL);
++ if (ret)
++ goto err_g2;
++ }
++
++ if ((ret = drm_get_minor(dev, &dev->primary, DRM_MINOR_LEGACY)))
++ goto err_g3;
++
++ if (dev->driver->load) {
++ ret = dev->driver->load(dev, 0);
++ if (ret)
++ goto err_g3;
++ }
++
++ /* setup the grouping for the legacy output */
++ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
++ ret = drm_mode_group_init_legacy_group(dev, &dev->primary->mode_group);
++ if (ret)
++ goto err_g3;
++ }
++
++ list_add_tail(&dev->driver_item, &driver->device_list);
++
++ DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",
++ driver->name, driver->major, driver->minor, driver->patchlevel,
++ driver->date, dev->primary->index);
++
++ return 0;
++
++err_g3:
++ drm_put_minor(&dev->primary);
++err_g2:
++err_g1:
++ kfree(dev);
++ return ret;
++}
++
++/**
+ * Put a secondary minor number.
+ *
+ * \param sec_minor - structure to be released
+diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
+index 7e42b7e..c08e7b7 100644
+--- a/drivers/gpu/drm/drm_sysfs.c
++++ b/drivers/gpu/drm/drm_sysfs.c
+@@ -486,7 +486,11 @@ int drm_sysfs_device_add(struct drm_minor *minor)
+ int err;
+ char *minor_str;
+
+- minor->kdev.parent = &minor->dev->pdev->dev;
++ if (minor->dev->pdev) {
++ minor->kdev.parent = &minor->dev->pdev->dev;
++ } else {
++ minor->kdev.parent = &minor->dev->platform_dev->dev;
++ }
+ minor->kdev.class = drm_class;
+ minor->kdev.release = drm_sysfs_device_release;
+ minor->kdev.devt = minor->device;
+diff --git a/include/drm/drmP.h b/include/drm/drmP.h
+index 7ad3faa..1d9a229 100644
+--- a/include/drm/drmP.h
++++ b/include/drm/drmP.h
+@@ -55,6 +55,7 @@
+ #include <linux/mm.h>
+ #include <linux/cdev.h>
+ #include <linux/mutex.h>
++#include <linux/platform_device.h>
+ #if defined(__alpha__) || defined(__powerpc__)
+ #include <asm/pgtable.h> /* For pte_wrprotect */
+ #endif
+@@ -143,6 +144,7 @@ extern void drm_ut_debug_printk(unsigned int request_level,
+ #define DRIVER_IRQ_VBL2 0x800
+ #define DRIVER_GEM 0x1000
+ #define DRIVER_MODESET 0x2000
++#define DRIVER_IS_PLATFORM 0x4000
+
+ /***********************************************************************/
+ /** \name Begin the DRM... */
+@@ -1008,6 +1010,7 @@ struct drm_device {
+ wait_queue_head_t buf_writers; /**< Processes waiting to ctx switch */
+
+ struct drm_agp_head *agp; /**< AGP data */
++ struct platform_device *platform_dev; /**< platform device structure */
+
+ struct pci_dev *pdev; /**< PCI device structure */
+ int pci_vendor; /**< PCI vendor id */
+@@ -1118,12 +1121,20 @@ static inline int drm_mtrr_del(int handle, unsigned long offset,
+ }
+ #endif
+
++static inline int drm_core_is_platform(struct drm_device *dev)
++{
++ return drm_core_check_feature(dev, DRIVER_IS_PLATFORM);
++}
++
+ /******************************************************************/
+ /** \name Internal function definitions */
+ /*@{*/
+
+ /* Driver support (drm_drv.h) */
+ extern int drm_init(struct drm_driver *driver);
++extern int drm_platform_init(struct drm_driver *driver,
++ struct platform_device *pdev,
++ void *dev_private);
+ extern void drm_exit(struct drm_driver *driver);
+ extern int drm_ioctl(struct inode *inode, struct file *filp,
+ unsigned int cmd, unsigned long arg);
+@@ -1342,6 +1353,8 @@ extern int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+ struct drm_master *drm_master_create(struct drm_minor *minor);
+ extern struct drm_master *drm_master_get(struct drm_master *master);
++extern int drm_get_platform_dev(struct platform_device *pdev,
++ struct drm_driver *driver, void *priv);
+ extern void drm_master_put(struct drm_master **master);
+ extern int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
+ struct drm_driver *driver);
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0002-Glamo-DRM-and-KMS-driver.patch b/recipes/linux/linux-openmoko-2.6.32/0002-Glamo-DRM-and-KMS-driver.patch
deleted file mode 100644
index 4a837e9b08..0000000000
--- a/recipes/linux/linux-openmoko-2.6.32/0002-Glamo-DRM-and-KMS-driver.patch
+++ /dev/null
@@ -1,3818 +0,0 @@
-From 01435b6f8fba2031e6941756a6a4e42be553f4a0 Mon Sep 17 00:00:00 2001
-From: Thomas White <taw@bitwiz.org.uk>
-Date: Tue, 20 Oct 2009 16:14:55 +0200
-Subject: [PATCH 2/4] Glamo DRM and KMS driver
-
-This adds the Glamo DRM and KMS driver, but not the modifications needed
-elsewhere to support it.
-
-Signed-off-by: Thomas White <taw@bitwiz.org.uk>
----
- drivers/gpu/drm/drm_stub.c | 2 +-
- drivers/mfd/glamo/Kconfig | 15 +
- drivers/mfd/glamo/Makefile | 5 +-
- drivers/mfd/glamo/glamo-buffer.c | 372 ++++++++++++++
- drivers/mfd/glamo/glamo-buffer.h | 60 +++
- drivers/mfd/glamo/glamo-cmdq.c | 528 ++++++++++++++++++++
- drivers/mfd/glamo/glamo-cmdq.h | 49 ++
- drivers/mfd/glamo/glamo-display.c | 875 +++++++++++++++++++++++++++++++++
- drivers/mfd/glamo/glamo-display.h | 39 ++
- drivers/mfd/glamo/glamo-drm-drv.c | 453 +++++++++++++++++
- drivers/mfd/glamo/glamo-drm-private.h | 156 ++++++
- drivers/mfd/glamo/glamo-fence.c | 329 +++++++++++++
- drivers/mfd/glamo/glamo-fence.h | 36 ++
- drivers/mfd/glamo/glamo-kms-fb.c | 540 ++++++++++++++++++++
- drivers/mfd/glamo/glamo-kms-fb.h | 41 ++
- include/drm/Kbuild | 1 +
- include/drm/glamo_drm.h | 153 ++++++
- 17 files changed, 3652 insertions(+), 2 deletions(-)
- create mode 100644 drivers/mfd/glamo/glamo-buffer.c
- create mode 100644 drivers/mfd/glamo/glamo-buffer.h
- create mode 100644 drivers/mfd/glamo/glamo-cmdq.c
- create mode 100644 drivers/mfd/glamo/glamo-cmdq.h
- create mode 100644 drivers/mfd/glamo/glamo-display.c
- create mode 100644 drivers/mfd/glamo/glamo-display.h
- create mode 100644 drivers/mfd/glamo/glamo-drm-drv.c
- create mode 100644 drivers/mfd/glamo/glamo-drm-private.h
- create mode 100644 drivers/mfd/glamo/glamo-fence.c
- create mode 100644 drivers/mfd/glamo/glamo-fence.h
- create mode 100644 drivers/mfd/glamo/glamo-kms-fb.c
- create mode 100644 drivers/mfd/glamo/glamo-kms-fb.h
- create mode 100644 include/drm/glamo_drm.h
-
-diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
-index a7069ad..5e3d65a 100644
---- a/drivers/gpu/drm/drm_stub.c
-+++ b/drivers/gpu/drm/drm_stub.c
-@@ -471,7 +471,7 @@ int drm_get_platform_dev(struct platform_device *pdev,
- int ret;
- DRM_DEBUG("\n");
-
-- dev = kmalloc(sizeof(*dev), GFP_KERNEL);
-+ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
- if (!dev)
- return -ENOMEM;
- dev->dev_private = priv;
-diff --git a/drivers/mfd/glamo/Kconfig b/drivers/mfd/glamo/Kconfig
-index 8c93bcb..375e5db 100644
---- a/drivers/mfd/glamo/Kconfig
-+++ b/drivers/mfd/glamo/Kconfig
-@@ -39,3 +39,18 @@ config MFD_GLAMO_MCI
- neo1973 GTA-02.
-
- If unsure, say N.
-+
-+config MFD_GLAMO_DRM
-+ tristate "Glamo direct rendering and kernel modesetting support"
-+ depends on MFD_GLAMO && DRM
-+ select FB_CFB_FILLRECT
-+ select FB_CFB_COPYAREA
-+ select FB_CFB_IMAGEBLIT
-+ help
-+ Direct Rendering Manager interface for the S-Media Glamo chip, as
-+ used in Openmoko FreeRunner (GTA02).
-+
-+ This DRM driver includes kernel modesetting (KMS) support. As such,
-+ do not select MFD_GLAMO_FB above if you choose to enable this option.
-+
-+ If unsure, say N.
-diff --git a/drivers/mfd/glamo/Makefile b/drivers/mfd/glamo/Makefile
-index ebf26f7..d5ebf8f 100644
---- a/drivers/mfd/glamo/Makefile
-+++ b/drivers/mfd/glamo/Makefile
-@@ -1,5 +1,5 @@
- #
--# Makefile for the Smedia Glamo framebuffer driver
-+# Makefile for the Smedia Glamo driver(s)
- #
-
- obj-$(CONFIG_MFD_GLAMO) += glamo-core.o
-@@ -8,4 +8,7 @@ obj-$(CONFIG_MFD_GLAMO_SPI) += glamo-spi.o
-
- obj-$(CONFIG_MFD_GLAMO_FB) += glamo-fb.o
- obj-$(CONFIG_MFD_GLAMO_MCI) += glamo-mci.o
-+obj-$(CONFIG_MFD_GLAMO_DRM) += glamo-drm.o
-
-+glamo-drm-objs := glamo-drm-drv.o glamo-cmdq.o glamo-buffer.o \
-+ glamo-display.o glamo-kms-fb.o glamo-fence.o
-diff --git a/drivers/mfd/glamo/glamo-buffer.c b/drivers/mfd/glamo/glamo-buffer.c
-new file mode 100644
-index 0000000..45500d3
---- /dev/null
-+++ b/drivers/mfd/glamo/glamo-buffer.c
-@@ -0,0 +1,372 @@
-+/*
-+ * SMedia Glamo 336x/337x memory management
-+ *
-+ * Copyright (c) 2009 Thomas White <taw@bitwiz.org.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, see <http://www.gnu.org/licenses/>.
-+ *
-+ *
-+ * Memory mapping functions based on i915_gem.c, to which the following
-+ * notice applies:
-+ *
-+ * Copyright © 2008 Intel Corporation
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-+ * IN THE SOFTWARE.
-+ *
-+ * Authors:
-+ * Eric Anholt <eric@anholt.net>
-+ */
-+
-+
-+#include <drm/drmP.h>
-+#include <drm/glamo_drm.h>
-+
-+#include "glamo-drm-private.h"
-+#include "glamo-cmdq.h" /* For glamo_cmdq_blank() */
-+
-+
-+struct drm_gem_object *glamo_gem_object_alloc(struct drm_device *dev, int size,
-+ int alignment)
-+{
-+ struct drm_gem_object *obj;
-+ struct glamodrm_handle *gdrm;
-+ struct drm_glamo_gem_object *gobj;
-+
-+ gdrm = dev->dev_private;
-+
-+ size = roundup(size, PAGE_SIZE);
-+
-+ obj = drm_gem_object_alloc(dev, size);
-+ if (obj == NULL) return NULL;
-+
-+ /* See glamodrm_gem_init_object() below */
-+ gobj = obj->driver_private;
-+
-+ /* Allocate memory for this object in VRAM */
-+ gobj->block = drm_mm_search_free(gdrm->mmgr, size, alignment, 1);
-+ if (!gobj->block) {
-+ goto fail;
-+ }
-+ gobj->block = drm_mm_get_block(gobj->block, size, alignment);
-+ if (!gobj->block) {
-+ goto fail;
-+ }
-+
-+ /* Arrange for the contents to be set to zero */
-+ glamo_cmdq_blank(gdrm, obj);
-+
-+ return obj;
-+
-+fail:
-+ mutex_lock(&dev->struct_mutex);
-+ drm_gem_object_unreference(obj);
-+ mutex_unlock(&dev->struct_mutex);
-+ printk(KERN_INFO "[glamo-drm] Failed to allocate object\n");
-+
-+ return NULL;
-+}
-+
-+
-+int glamo_ioctl_gem_create(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv)
-+{
-+ struct drm_glamo_gem_create *args = data;
-+ struct drm_gem_object *obj;
-+ int handle, ret, alignment, size;
-+
-+ /* Alignment must be a non-zero multiple of 2 */
-+ alignment = args->alignment;
-+ if ( alignment < 2 ) alignment = 2;
-+ if ( alignment % 2 ) alignment *= 2;
-+
-+ /* Size must be similarly sanitised */
-+ size = args->size;
-+ if ( size < 2 ) size = 2;
-+ if ( size % 2 ) size += 1;
-+
-+ /* Create an object */
-+ obj = glamo_gem_object_alloc(dev, size, alignment);
-+ if ( obj == NULL ) return -ENOMEM;
-+
-+ /* Create a handle for it */
-+ ret = drm_gem_handle_create(file_priv, obj, &handle);
-+ mutex_lock(&dev->struct_mutex);
-+ drm_gem_object_handle_unreference(obj);
-+ mutex_unlock(&dev->struct_mutex);
-+ if (ret) goto fail;
-+
-+ /* Return */
-+ args->handle = handle;
-+ return 0;
-+
-+fail:
-+ mutex_lock(&dev->struct_mutex);
-+ drm_gem_object_unreference(obj);
-+ mutex_unlock(&dev->struct_mutex);
-+ printk(KERN_INFO "[glamo-drm] Failed to allocate object\n");
-+ return ret;
-+}
-+
-+
-+int glamodrm_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
-+{
-+ struct drm_gem_object *obj = vma->vm_private_data;
-+ struct drm_device *dev = obj->dev;
-+ struct drm_glamo_gem_object *gobj = obj->driver_private;
-+ struct glamodrm_handle *gdrm = dev->dev_private;
-+ pgoff_t page_offset;
-+ unsigned long pfn;
-+ int ret = 0;
-+
-+ /* We don't use vmf->pgoff since that has the fake offset */
-+ page_offset = ((unsigned long)vmf->virtual_address - vma->vm_start) >>
-+ PAGE_SHIFT;
-+
-+ mutex_lock(&dev->struct_mutex);
-+ pfn = ((gdrm->vram->start + GLAMO_OFFSET_FB + gobj->block->start)
-+ >> PAGE_SHIFT) + page_offset;
-+ ret = vm_insert_pfn(vma, (unsigned long)vmf->virtual_address, pfn);
-+ mutex_unlock(&dev->struct_mutex);
-+
-+ switch (ret) {
-+ case -ENOMEM:
-+ case -EAGAIN:
-+ return VM_FAULT_OOM;
-+ case -EFAULT:
-+ case -EBUSY:
-+ DRM_ERROR("can't insert pfn?? fault or busy...\n");
-+ return VM_FAULT_SIGBUS;
-+ default:
-+ return VM_FAULT_NOPAGE;
-+ }
-+}
-+
-+
-+static int glamo_gem_create_mmap_offset(struct drm_gem_object *obj)
-+{
-+ struct drm_device *dev = obj->dev;
-+ struct drm_gem_mm *mm = dev->mm_private;
-+ struct drm_glamo_gem_object *gobj = obj->driver_private;
-+ struct drm_map_list *list;
-+ struct drm_local_map *map;
-+ int ret = 0;
-+
-+ /* Set the object up for mmap'ing */
-+ list = &obj->map_list;
-+ list->map = kzalloc(sizeof(struct drm_map_list), GFP_KERNEL);
-+ if (!list->map)
-+ return -ENOMEM;
-+
-+ map = list->map;
-+ map->type = _DRM_GEM;
-+ map->size = obj->size;
-+ map->handle = obj;
-+
-+ /* Get a DRM GEM mmap offset allocated... */
-+ list->file_offset_node = drm_mm_search_free(&mm->offset_manager,
-+ obj->size / PAGE_SIZE, 0, 0);
-+ if (!list->file_offset_node) {
-+ DRM_ERROR("failed to allocate offset for bo %d\n", obj->name);
-+ ret = -ENOMEM;
-+ goto out_free_list;
-+ }
-+
-+ list->file_offset_node = drm_mm_get_block(list->file_offset_node,
-+ obj->size / PAGE_SIZE, 0);
-+ if (!list->file_offset_node) {
-+ ret = -ENOMEM;
-+ goto out_free_list;
-+ }
-+
-+ list->hash.key = list->file_offset_node->start;
-+ if (drm_ht_insert_item(&mm->offset_hash, &list->hash)) {
-+ DRM_ERROR("failed to add to map hash\n");
-+ goto out_free_mm;
-+ }
-+
-+ /* By now we should be all set, any drm_mmap request on the offset
-+ * below will get to our mmap & fault handler */
-+ gobj->mmap_offset = ((uint64_t) list->hash.key) << PAGE_SHIFT;
-+
-+ return 0;
-+
-+out_free_mm:
-+ drm_mm_put_block(list->file_offset_node);
-+out_free_list:
-+ kfree(list->map);
-+
-+ return ret;
-+}
-+
-+
-+int glamo_ioctl_gem_mmap(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv)
-+{
-+ struct drm_glamo_gem_mmap *args = data;
-+ struct drm_gem_object *obj;
-+ struct drm_glamo_gem_object *gobj;
-+ int ret;
-+
-+ obj = drm_gem_object_lookup(dev, file_priv, args->handle);
-+ if (obj == NULL)
-+ return -EBADF;
-+
-+ mutex_lock(&dev->struct_mutex);
-+
-+ gobj = obj->driver_private;
-+ if (!gobj->mmap_offset) {
-+ ret = glamo_gem_create_mmap_offset(obj);
-+ if (ret) {
-+ mutex_unlock(&dev->struct_mutex);
-+ return ret;
-+ }
-+ }
-+
-+ args->offset = gobj->mmap_offset;
-+
-+ drm_gem_object_unreference(obj);
-+ mutex_unlock(&dev->struct_mutex);
-+
-+ return 0;
-+}
-+
-+
-+int glamo_ioctl_gem_pin(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv)
-+{
-+ printk(KERN_INFO "glamo_ioctl_gem_pin\n");
-+ return 0;
-+}
-+
-+
-+int glamo_ioctl_gem_unpin(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv)
-+{
-+ printk(KERN_INFO "glamo_ioctl_gem_unpin\n");
-+ return 0;
-+}
-+
-+
-+int glamo_ioctl_gem_pread(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv)
-+{
-+ printk(KERN_INFO "glamo_ioctl_gem_pread\n");
-+ return 0;
-+}
-+
-+
-+int glamo_ioctl_gem_pwrite(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv)
-+{
-+ printk(KERN_INFO "glamo_ioctl_gem_pwrite\n");
-+ return 0;
-+}
-+
-+
-+int glamodrm_gem_init_object(struct drm_gem_object *obj)
-+{
-+ struct drm_glamo_gem_object *gobj;
-+
-+ /* Allocate a private structure */
-+ gobj = kzalloc(sizeof(*gobj), GFP_KERNEL);
-+ if (!gobj) return -ENOMEM;
-+
-+ obj->driver_private = gobj;
-+ gobj->obj = obj;
-+
-+ return 0;
-+}
-+
-+
-+void glamodrm_gem_free_object(struct drm_gem_object *obj)
-+{
-+ struct drm_glamo_gem_object *gobj;
-+ struct drm_map_list *list;
-+ struct drm_device *dev;
-+ struct drm_gem_mm *mm;
-+ struct drm_local_map *map;
-+
-+ dev = obj->dev;
-+ mm = dev->mm_private;
-+ gobj = obj->driver_private;
-+
-+ /* Free the VRAM */
-+ if ( gobj->block != NULL ) {
-+ drm_mm_put_block(gobj->block);
-+ }
-+
-+ /* Release mappings */
-+ list = &obj->map_list;
-+ drm_ht_remove_item(&mm->offset_hash, &list->hash);
-+ if (list->file_offset_node) {
-+ drm_mm_put_block(list->file_offset_node);
-+ list->file_offset_node = NULL;
-+ }
-+ map = list->map;
-+ if (map) {
-+ kfree(map);
-+ list->map = NULL;
-+ }
-+
-+ /* Free the private structure */
-+ kfree(obj->driver_private);
-+}
-+
-+
-+/* Memory management initialisation */
-+int glamo_buffer_init(struct glamodrm_handle *gdrm)
-+{
-+ gdrm->mmgr = kzalloc(sizeof(struct drm_mm), GFP_KERNEL);
-+ drm_mm_init(gdrm->mmgr, 0, gdrm->vram_size);
-+
-+ /* Reserve a scratch buffer. We do this outside the protections
-+ * of the other GEM code. To do this safely, the allocation must
-+ * be a multiple of PAGE_SIZE. */
-+ gdrm->scratch = drm_mm_search_free(gdrm->mmgr, PAGE_SIZE, 4, 1);
-+ if ( gdrm->scratch ) {
-+ gdrm->scratch = drm_mm_get_block(gdrm->scratch, PAGE_SIZE, 4);
-+ }
-+ if ( !gdrm->scratch ) {
-+ printk(KERN_WARNING "[glamo-drm] Couldn't allocate"
-+ " scratch buffer!\n");
-+ }
-+
-+ return 0;
-+}
-+
-+
-+/* Memory management finalisation */
-+int glamo_buffer_final(struct glamodrm_handle *gdrm)
-+{
-+ drm_mm_takedown(gdrm->mmgr);
-+ kfree(gdrm->mmgr);
-+ return 0;
-+}
-diff --git a/drivers/mfd/glamo/glamo-buffer.h b/drivers/mfd/glamo/glamo-buffer.h
-new file mode 100644
-index 0000000..41f18fd
---- /dev/null
-+++ b/drivers/mfd/glamo/glamo-buffer.h
-@@ -0,0 +1,60 @@
-+/*
-+ * SMedia Glamo 336x/337x memory management
-+ *
-+ * Copyright (c) 2009 Thomas White <taw@bitwiz.org.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
-+ *
-+ */
-+
-+#ifndef __GLAMO_BUFFER_H
-+#define __GLAMO_BUFFER_H
-+
-+#include <drm/drmP.h>
-+
-+#include "glamo-drm-private.h"
-+
-+extern int glamo_buffer_init(struct glamodrm_handle *gdrm);
-+extern int glamo_buffer_final(struct glamodrm_handle *gdrm);
-+
-+extern int glamodrm_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
-+
-+extern int glamodrm_gem_init_object(struct drm_gem_object *obj);
-+
-+extern void glamodrm_gem_free_object(struct drm_gem_object *obj);
-+
-+extern struct drm_gem_object *glamo_gem_object_alloc(struct drm_device *dev,
-+ int size, int alignment);
-+
-+extern int glamo_ioctl_gem_create(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv);
-+
-+extern int glamo_ioctl_gem_mmap(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv);
-+
-+extern int glamo_ioctl_gem_pin(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv);
-+
-+extern int glamo_ioctl_gem_unpin(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv);
-+
-+extern int glamo_ioctl_gem_pread(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv);
-+
-+extern int glamo_ioctl_gem_pwrite(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv);
-+
-+#endif /* __GLAMO_BUFFER_H */
-diff --git a/drivers/mfd/glamo/glamo-cmdq.c b/drivers/mfd/glamo/glamo-cmdq.c
-new file mode 100644
-index 0000000..caedc27
---- /dev/null
-+++ b/drivers/mfd/glamo/glamo-cmdq.c
-@@ -0,0 +1,528 @@
-+/*
-+ * SMedia Glamo 336x/337x command queue handling
-+ *
-+ * Copyright (C) 2008-2009 Thomas White <taw@bitwiz.org.uk>
-+ * Copyright (C) 2009 Andreas Pokorny <andreas.pokorny@gmail.com>
-+ * Based on xf86-video-glamo (see below for details)
-+ *
-+ * All rights reserved.
-+ *
-+ * 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
-+ *
-+ * Command queue handling functions based on those from xf86-video-glamo, to
-+ * which the following licence applies:
-+ *
-+ * Copyright 2007 OpenMoko, Inc.
-+ * Copyright © 2009 Lars-Peter Clausen <lars@metafoo.de>
-+ *
-+ * This driver is based on Xati,
-+ * Copyright 2004 Eric Anholt
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that copyright
-+ * notice and this permission notice appear in supporting documentation, and
-+ * that the name of the copyright holders not be used in advertising or
-+ * publicity pertaining to distribution of the software without specific,
-+ * written prior permission. The copyright holders make no representations
-+ * about the suitability of this software for any purpose. It is provided "as
-+ * is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
-+ * OF THIS SOFTWARE.
-+ */
-+
-+
-+#include <drm/drmP.h>
-+#include <drm/glamo_drm.h>
-+
-+#include "glamo-core.h"
-+#include "glamo-drm-private.h"
-+#include "glamo-regs.h"
-+
-+
-+static inline void reg_write(struct glamodrm_handle *gdrm,
-+ u_int16_t reg, u_int16_t val)
-+{
-+ iowrite16(val, gdrm->reg_base + reg);
-+}
-+
-+
-+static inline u16 reg_read(struct glamodrm_handle *gdrm, u_int16_t reg)
-+{
-+ return ioread16(gdrm->reg_base + reg);
-+}
-+
-+
-+static u32 glamo_get_read(struct glamodrm_handle *gdrm)
-+{
-+ /* we could turn off clock here */
-+ u32 ring_read = reg_read(gdrm, GLAMO_REG_CMDQ_READ_ADDRL);
-+ ring_read |= (reg_read(gdrm, GLAMO_REG_CMDQ_READ_ADDRH) & 0x7) << 16;
-+
-+ return ring_read;
-+}
-+
-+
-+static u32 glamo_get_write(struct glamodrm_handle *gdrm)
-+{
-+ u32 ring_write = reg_read(gdrm, GLAMO_REG_CMDQ_WRITE_ADDRL);
-+ ring_write |= (reg_read(gdrm, GLAMO_REG_CMDQ_WRITE_ADDRH) & 0x7) << 16;
-+
-+ return ring_write;
-+}
-+
-+
-+/* Add commands to the ring buffer */
-+int glamo_add_to_ring(struct glamodrm_handle *gdrm, u16 *addr,
-+ unsigned int count)
-+{
-+ size_t ring_write, ring_read;
-+ size_t new_ring_write;
-+
-+ if ( count >= GLAMO_CMDQ_SIZE ) {
-+ printk(KERN_WARNING "[glamo-drm] CmdQ submission too large\n");
-+ return -EINVAL;
-+ }
-+
-+ down(&gdrm->add_to_ring);
-+
-+ ring_write = glamo_get_write(gdrm);
-+
-+ /* Calculate where we'll end up */
-+ new_ring_write = (ring_write + count) % GLAMO_CMDQ_SIZE;
-+
-+ /* Wait until there is enough space to queue the cmd buffer */
-+ if (new_ring_write > ring_write) {
-+ /* Loop while the read pointer is between the old and new
-+ * positions */
-+ do {
-+ ring_read = glamo_get_read(gdrm);
-+ } while (ring_read > ring_write && ring_read < new_ring_write);
-+ } else {
-+ /* Same, but kind of inside-out */
-+ do {
-+ ring_read = glamo_get_read(gdrm);
-+ } while (ring_read > ring_write || ring_read < new_ring_write);
-+ }
-+
-+ /* Are we about to wrap around? */
-+ if (ring_write >= new_ring_write) {
-+
-+ u32 rest_size;
-+
-+ /* Wrap around */
-+ rest_size = GLAMO_CMDQ_SIZE - ring_write; /* Space left */
-+
-+ /* Write from current position to end */
-+ memcpy_toio(gdrm->cmdq_base+ring_write, addr, rest_size);
-+
-+ /* Write from start */
-+ memcpy_toio(gdrm->cmdq_base, addr+(rest_size>>1),
-+ count - rest_size);
-+
-+ /* ring_write being 0 will result in a deadlock because the
-+ * cmdq read will never stop. To avoid such an behaviour insert
-+ * an empty instruction. */
-+ if (new_ring_write == 0) {
-+ iowrite16(0x0000, gdrm->cmdq_base);
-+ iowrite16(0x0000, gdrm->cmdq_base + 2);
-+ new_ring_write = 4;
-+ }
-+
-+ } else {
-+
-+ memcpy_toio(gdrm->cmdq_base+ring_write, addr, count);
-+
-+ }
-+
-+ reg_write(gdrm, GLAMO_REG_CMDQ_WRITE_ADDRH,
-+ (new_ring_write >> 16) & 0x7f);
-+ reg_write(gdrm, GLAMO_REG_CMDQ_WRITE_ADDRL,
-+ new_ring_write & 0xffff);
-+
-+ if ( !(reg_read(gdrm, GLAMO_REG_CMDQ_STATUS) & 1<<3) ) {
-+ printk(KERN_ERR "[glamo-drm] CmdQ decode failure.\n");
-+ }
-+
-+ up(&gdrm->add_to_ring);
-+
-+ return 0;
-+}
-+
-+
-+/* Return true for a legal sequence of commands, otherwise false */
-+static int glamo_sanitize_buffer(u16 *cmds, unsigned int count)
-+{
-+ /* XXX FIXME TODO: Implementation... */
-+ return 1;
-+}
-+
-+
-+/* Substitute the real addresses in VRAM for any required buffer objects */
-+static int glamo_do_relocation(struct glamodrm_handle *gdrm,
-+ drm_glamo_cmd_buffer_t *cbuf, u16 *cmds,
-+ struct drm_device *dev,
-+ struct drm_file *file_priv)
-+{
-+ u32 *handles;
-+ int *offsets;
-+ int nobjs = cbuf->nobjs;
-+ int i;
-+
-+ if ( nobjs > 32 ) return -EINVAL; /* Get real... */
-+
-+ handles = kmalloc(nobjs*sizeof(u32), GFP_KERNEL);
-+ if ( handles == NULL ) return -1;
-+ if ( copy_from_user(handles, cbuf->objs, nobjs*sizeof(u32)) )
-+ return -1;
-+
-+ offsets = kmalloc(nobjs*sizeof(int), GFP_KERNEL);
-+ if ( offsets == NULL ) return -1;
-+ if ( copy_from_user(offsets, cbuf->obj_pos, nobjs*sizeof(int)) )
-+ return -1;
-+
-+ for ( i=0; i<nobjs; i++ ) {
-+
-+ u32 handle = handles[i];
-+ int offset = offsets[i];
-+ struct drm_gem_object *obj;
-+ struct drm_glamo_gem_object *gobj;
-+ u32 addr;
-+ u16 addr_low, addr_high;
-+
-+ if ( offset > cbuf->bufsz ) {
-+ printk(KERN_WARNING "[glamo-drm] Offset out of range"
-+ " for this relocation!\n");
-+ goto fail;
-+ }
-+
-+ obj = drm_gem_object_lookup(dev, file_priv, handle);
-+ if ( obj == NULL ) return -1;
-+
-+ /* Unref the object now, or it'll never get freed.
-+ * This should really happen after the GPU has finished
-+ * the commands which are about to be submitted. */
-+ drm_gem_object_unreference(obj);
-+
-+ gobj = obj->driver_private;
-+ if ( gobj == NULL ) {
-+ printk(KERN_WARNING "[glamo-drm] This object has no"
-+ " private data!\n");
-+ goto fail;
-+ }
-+
-+ addr = GLAMO_OFFSET_FB + gobj->block->start;
-+ addr_low = addr & 0xffff;
-+ addr_high = (addr >> 16) & 0x7f;
-+
-+ /* FIXME: Should really check that the register is a
-+ * valid one for this relocation. */
-+
-+ *(cmds+(offset/2)+1) = addr_low;
-+ *(cmds+(offset/2)+3) = addr_high;
-+
-+ }
-+
-+ kfree(handles);
-+ kfree(offsets);
-+ return 0;
-+
-+fail:
-+ kfree(handles);
-+ kfree(offsets);
-+ return -1;
-+}
-+
-+
-+/* This is DRM_IOCTL_GLAMO_CMDBUF */
-+int glamo_ioctl_cmdbuf(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv)
-+{
-+ int ret = 0;
-+ struct glamodrm_handle *gdrm;
-+ unsigned int count;
-+ drm_glamo_cmd_buffer_t *cbuf = data;
-+ u16 *cmds;
-+
-+ gdrm = dev->dev_private;
-+
-+ count = cbuf->bufsz;
-+
-+ if ( count > PAGE_SIZE ) return -EINVAL;
-+
-+ cmds = kmalloc(count, GFP_KERNEL);
-+ if ( cmds == NULL ) return -ENOMEM;
-+ if ( copy_from_user(cmds, cbuf->buf, count) ) {
-+ printk(KERN_WARNING "[glamo-drm] copy from user failed\n");
-+ ret = -EINVAL;
-+ goto cleanup;
-+ }
-+
-+ /* Check the buffer isn't going to tell Glamo to enact naughtiness */
-+ if ( !glamo_sanitize_buffer(cmds, count) ) {
-+ printk(KERN_WARNING "[glamo-drm] sanitize buffer failed\n");
-+ ret = -EINVAL;
-+ goto cleanup;
-+ }
-+
-+ /* Perform relocation, if necessary */
-+ if ( cbuf->nobjs ) {
-+ if ( glamo_do_relocation(gdrm, cbuf, cmds, dev, file_priv) )
-+ {
-+ printk(KERN_WARNING "[glamo-drm] Relocation failed\n");
-+ ret = -EINVAL;
-+ goto cleanup;
-+ }
-+ }
-+
-+ glamo_add_to_ring(gdrm, cmds, count);
-+
-+cleanup:
-+ kfree(cmds);
-+
-+ return ret;
-+}
-+
-+
-+/* Return true for a legal sequence of commands, otherwise false */
-+static int glamo_sanitize_burst(u16 base, u16 *cmds, unsigned int count)
-+{
-+ /* XXX FIXME TODO: Implementation... */
-+ return 1;
-+}
-+
-+
-+static int glamo_relocate_burst(struct glamodrm_handle *gdrm,
-+ drm_glamo_cmd_burst_t *cbuf, u16 *data,
-+ struct drm_device *dev,
-+ struct drm_file *file_priv)
-+{
-+ u32 *handles;
-+ int *offsets;
-+ int nobjs = cbuf->nobjs;
-+ int i;
-+
-+ if ( nobjs > 32 ) return -EINVAL; /* Get real... */
-+
-+ handles = kmalloc(nobjs*sizeof(u32), GFP_KERNEL);
-+ if ( handles == NULL ) return -1;
-+ if ( copy_from_user(handles, cbuf->objs, nobjs*sizeof(u32)) )
-+ return -1;
-+
-+ offsets = kmalloc(nobjs*sizeof(int), GFP_KERNEL);
-+ if ( offsets == NULL ) return -1;
-+ if ( copy_from_user(offsets, cbuf->obj_pos, nobjs*sizeof(int)) )
-+ return -1;
-+
-+ for ( i=0; i<nobjs; i++ ) {
-+
-+ u32 handle = handles[i];
-+ int offset = offsets[i];
-+ struct drm_gem_object *obj;
-+ struct drm_glamo_gem_object *gobj;
-+ u32 addr;
-+ u16 addr_low, addr_high;
-+
-+ if ( offset > cbuf->bufsz ) {
-+ printk(KERN_WARNING "[glamo-drm] Offset out of range"
-+ " for this relocation!\n");
-+ goto fail;
-+ }
-+
-+ obj = drm_gem_object_lookup(dev, file_priv, handle);
-+ if ( obj == NULL ) return -1;
-+
-+ /* Unref the object now, or it'll never get freed.
-+ * FIXME: This should really happen after the GPU has
-+ * finished executing these commands. */
-+ drm_gem_object_unreference(obj);
-+
-+ gobj = obj->driver_private;
-+ if ( gobj == NULL ) {
-+ printk(KERN_WARNING "[glamo-drm] This object has no"
-+ " private data!\n");
-+ goto fail;
-+ }
-+
-+ addr = GLAMO_OFFSET_FB + gobj->block->start;
-+ addr_low = addr & 0xffff;
-+ addr_high = (addr >> 16) & 0x7f;
-+
-+ /* FIXME: Should really check that the register is a
-+ * valid one for this relocation. */
-+
-+ *(data+(offset/2)+0) = addr_low;
-+ *(data+(offset/2)+1) = addr_high;
-+
-+ }
-+
-+ kfree(handles);
-+ kfree(offsets);
-+ return 0;
-+
-+fail:
-+ kfree(handles);
-+ kfree(offsets);
-+ return -1;
-+}
-+
-+
-+/* This is DRM_IOCTL_GLAMO_CMDBURST */
-+int glamo_ioctl_cmdburst(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv)
-+{
-+ int ret = 0;
-+ struct glamodrm_handle *gdrm;
-+ drm_glamo_cmd_burst_t *cbuf = data;
-+ u16 *burst;
-+ size_t burst_size;
-+ size_t data_size;
-+
-+ gdrm = dev->dev_private;
-+
-+ data_size = cbuf->bufsz;
-+ if ( data_size % 4 ) data_size += 2;
-+ if ( data_size % 4 ) return -EINVAL;
-+ burst_size = data_size + 4; /* Add space for header */
-+ if ( burst_size > PAGE_SIZE ) return -EINVAL;
-+
-+ burst = kmalloc(burst_size, GFP_KERNEL);
-+ if ( burst == NULL ) return -ENOMEM;
-+
-+ /* Get data from userspace */
-+ if ( copy_from_user(burst+2, cbuf->data, cbuf->bufsz) ) {
-+ printk(KERN_WARNING "[glamo-drm] copy from user failed\n");
-+ ret = -EINVAL;
-+ goto cleanup;
-+ }
-+
-+ /* Sanitise */
-+ if ( !glamo_sanitize_burst(cbuf->base, burst+2, cbuf->bufsz) ) {
-+ printk(KERN_WARNING "[glamo-drm] sanitize buffer failed\n");
-+ ret = -EINVAL;
-+ goto cleanup;
-+ }
-+
-+ /* Relocate */
-+ if ( cbuf->nobjs ) {
-+ if ( glamo_relocate_burst(gdrm, cbuf, burst+2, dev, file_priv) )
-+ {
-+ printk(KERN_WARNING "[glamo-drm] Relocation failed\n");
-+ ret = -EINVAL;
-+ goto cleanup;
-+ }
-+ }
-+
-+ /* Add burst header */
-+ burst[0] = 1<<15 | cbuf->base;
-+ burst[1] = data_size / 2; /* -> 2-byte words */
-+ if ( burst[1] & 0x01 ) {
-+ printk(KERN_CRIT "Burst not aligned!\n");
-+ goto cleanup;
-+ }
-+
-+ /* Zero-pad if necessary */
-+ if ( data_size % 4 ) {
-+ burst[burst_size-1] = 0x0000;
-+ }
-+
-+ /* Add to command queue */
-+ glamo_add_to_ring(gdrm, burst, burst_size);
-+
-+cleanup:
-+ kfree(burst);
-+
-+ return ret;
-+}
-+
-+
-+int glamo_cmdq_init(struct glamodrm_handle *gdrm)
-+{
-+ unsigned int i;
-+
-+ init_MUTEX(&gdrm->add_to_ring);
-+
-+ /* Enable 2D and 3D */
-+ glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_2D);
-+ glamo_engine_reset(gdrm->glamo_core, GLAMO_ENGINE_2D);
-+
-+ /* Start by zeroing the command queue memory */
-+ for ( i=0; i<GLAMO_CMDQ_SIZE; i+=2 ) {
-+ iowrite16(0x0000, gdrm->cmdq_base+i);
-+ }
-+
-+ glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_CMDQ);
-+ glamo_engine_reset(gdrm->glamo_core, GLAMO_ENGINE_CMDQ);
-+
-+ /* Set up command queue location */
-+ reg_write(gdrm, GLAMO_REG_CMDQ_BASE_ADDRL,
-+ GLAMO_OFFSET_CMDQ & 0xffff);
-+ reg_write(gdrm, GLAMO_REG_CMDQ_BASE_ADDRH,
-+ (GLAMO_OFFSET_CMDQ >> 16) & 0x7f);
-+
-+ /* Length of command queue in 1k blocks, minus one */
-+ reg_write(gdrm, GLAMO_REG_CMDQ_LEN, (GLAMO_CMDQ_SIZE >> 10)-1);
-+ reg_write(gdrm, GLAMO_REG_CMDQ_WRITE_ADDRH, 0);
-+ reg_write(gdrm, GLAMO_REG_CMDQ_WRITE_ADDRL, 0);
-+ reg_write(gdrm, GLAMO_REG_CMDQ_CONTROL,
-+ 1 << 12 | /* Turbo flip (?) */
-+ 5 << 8 | /* no interrupt */
-+ 8 << 4); /* HQ threshold */
-+
-+ return 0;
-+}
-+
-+
-+int glamo_cmdq_shutdown(struct glamodrm_handle *gdrm)
-+{
-+ return 0;
-+}
-+
-+
-+void glamo_cmdq_suspend(struct glamodrm_handle *gdrm)
-+{
-+ /* Placeholder... */
-+}
-+
-+
-+void glamo_cmdq_resume(struct glamodrm_handle *gdrm)
-+{
-+ glamo_cmdq_init(gdrm);
-+}
-+
-+
-+/* Initialise an object's contents to zero.
-+ * This is in glamo-cmdq.c in the hope that we can accelerate it later. */
-+void glamo_cmdq_blank(struct glamodrm_handle *gdrm, struct drm_gem_object *obj)
-+{
-+ char __iomem *cookie;
-+ struct drm_glamo_gem_object *gobj;
-+ int i;
-+
-+ gobj = obj->driver_private;
-+
-+ cookie = ioremap(gdrm->vram->start + gobj->block->start, obj->size);
-+ for ( i=0; i<obj->size; i+=2 ) {
-+ iowrite16(0, cookie+i);
-+ }
-+ iounmap(cookie);
-+}
-diff --git a/drivers/mfd/glamo/glamo-cmdq.h b/drivers/mfd/glamo/glamo-cmdq.h
-new file mode 100644
-index 0000000..510d195
---- /dev/null
-+++ b/drivers/mfd/glamo/glamo-cmdq.h
-@@ -0,0 +1,49 @@
-+/* Smedia Glamo 336x/337x command queue handling
-+ *
-+ * Copyright (c) 2008-2009 Thomas White <taw@bitwiz.org.uk>
-+ * Copyright (c) 2009 Andreas Pokorny <andreas.pokorny@gmail.com>
-+ * Based on xf86-video-glamo
-+ * Copyright 2007 OpenMoko, Inc.
-+ * Copyright © 2009 Lars-Peter Clausen <lars@metafoo.de>
-+ *
-+ * All rights reserved.
-+ *
-+ * 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 __GLAMO_CMDQ_H
-+#define __GLAMO_CMDQ_H
-+
-+#include <drm/drmP.h>
-+
-+#include "glamo-drm-private.h"
-+
-+extern int glamo_ioctl_cmdbuf(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv);
-+extern int glamo_ioctl_cmdburst(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv);
-+extern void glamo_cmdq_blank(struct glamodrm_handle *gdrm,
-+ struct drm_gem_object *obj);
-+
-+extern int glamo_cmdq_init(struct glamodrm_handle *gdrm);
-+extern int glamo_cmdq_shutdown(struct glamodrm_handle *gdrm);
-+extern void glamo_cmdq_suspend(struct glamodrm_handle *gdrm);
-+extern void glamo_cmdq_resume(struct glamodrm_handle *gdrm);
-+
-+extern int glamo_add_to_ring(struct glamodrm_handle *gdrm, u16 *addr,
-+ unsigned int count);
-+
-+#endif /* __GLAMO_CMDQ_H */
-diff --git a/drivers/mfd/glamo/glamo-display.c b/drivers/mfd/glamo/glamo-display.c
-new file mode 100644
-index 0000000..93aa917
---- /dev/null
-+++ b/drivers/mfd/glamo/glamo-display.c
-@@ -0,0 +1,875 @@
-+/*
-+ * SMedia Glamo 336x/337x display
-+ *
-+ * Copyright (C) 2008-2009 Thomas White <taw@bitwiz.org.uk>
-+ *
-+ * Based on glamo-fb.c (C) 2007-2008 by Openmoko, Inc.
-+ * Author: Harald Welte <laforge@openmoko.org>
-+ * All rights reserved.
-+ *
-+ * 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
-+ *
-+ *
-+ * Based on intel_display.c and intel_crt.c from drivers/gpu/drm/i915
-+ * to which the following licence applies:
-+ *
-+ * Copyright © 2006-2007 Intel Corporation
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors:
-+ * Eric Anholt <eric@anholt.net>
-+ *
-+ */
-+
-+#define DEBUG 1
-+
-+#include <drm/drmP.h>
-+#include <drm/glamo_drm.h>
-+#include <drm/drm_crtc_helper.h>
-+#include <drm/drm_crtc.h>
-+
-+#include "glamo-core.h"
-+#include "glamo-drm-private.h"
-+#include "glamo-regs.h"
-+#include "glamo-kms-fb.h"
-+#include "glamo-display.h"
-+#include <linux/glamofb.h>
-+
-+
-+#define GLAMO_LCD_WIDTH_MASK 0x03FF
-+#define GLAMO_LCD_HEIGHT_MASK 0x03FF
-+#define GLAMO_LCD_PITCH_MASK 0x07FE
-+#define GLAMO_LCD_HV_TOTAL_MASK 0x03FF
-+#define GLAMO_LCD_HV_RETR_START_MASK 0x03FF
-+#define GLAMO_LCD_HV_RETR_END_MASK 0x03FF
-+#define GLAMO_LCD_HV_RETR_DISP_START_MASK 0x03FF
-+#define GLAMO_LCD_HV_RETR_DISP_END_MASK 0x03FF
-+
-+
-+struct glamofb_par {
-+ struct drm_device *dev;
-+ struct drm_display_mode *our_mode;
-+ struct glamo_framebuffer *glamo_fb;
-+ int crtc_count;
-+ /* crtc currently bound to this */
-+ uint32_t crtc_ids[2];
-+};
-+
-+
-+static int reg_read_lcd(struct glamodrm_handle *gdrm, u_int16_t reg)
-+{
-+ int i = 0;
-+
-+ for (i = 0; i != 2; i++)
-+ nop();
-+
-+ return ioread16(gdrm->lcd_base + reg);
-+}
-+
-+
-+static void reg_write_lcd(struct glamodrm_handle *gdrm,
-+ u_int16_t reg, u_int16_t val)
-+{
-+ int i = 0;
-+
-+ for (i = 0; i != 2; i++)
-+ nop();
-+
-+ iowrite16(val, gdrm->lcd_base + reg);
-+}
-+
-+
-+static void reg_set_bit_mask_lcd(struct glamodrm_handle *gdrm,
-+ u_int16_t reg, u_int16_t mask,
-+ u_int16_t val)
-+{
-+ u_int16_t tmp;
-+
-+ val &= mask;
-+
-+ tmp = reg_read_lcd(gdrm, reg);
-+ tmp &= ~mask;
-+ tmp |= val;
-+ reg_write_lcd(gdrm, reg, tmp);
-+}
-+
-+
-+/* Note that this has nothing at all to do with the engine command queue
-+ * in glamo-cmdq.c */
-+static inline int glamo_lcd_cmdq_empty(struct glamodrm_handle *gdrm)
-+{
-+ /* DGCMdQempty -- 1 == command queue is empty */
-+ return reg_read_lcd(gdrm, GLAMO_REG_LCD_STATUS1) & (1 << 15);
-+}
-+
-+
-+/* call holding gfb->lock_cmd when locking, until you unlock */
-+int glamo_lcd_cmd_mode(struct glamodrm_handle *gdrm, int on)
-+{
-+ int timeout = 2000000;
-+
-+ dev_dbg(gdrm->dev, "glamofb_cmd_mode(on=%d)\n", on);
-+ if (on) {
-+
-+ while ((!glamo_lcd_cmdq_empty(gdrm)) && (timeout--))
-+ /* yield() */;
-+ if (timeout < 0) {
-+ printk(KERN_ERR "*************"
-+ " LCD command queue never got empty "
-+ "*************\n");
-+ return -EIO;
-+ }
-+
-+ /* display the entire frame then switch to command */
-+ reg_write_lcd(gdrm, GLAMO_REG_LCD_COMMAND1,
-+ GLAMO_LCD_CMD_TYPE_DISP |
-+ GLAMO_LCD_CMD_DATA_FIRE_VSYNC);
-+
-+ /* wait until lcd idle */
-+ timeout = 2000000;
-+ while ((!reg_read_lcd(gdrm, GLAMO_REG_LCD_STATUS2) & (1 << 12))
-+ && (timeout--))
-+ /* yield() */;
-+ if (timeout < 0) {
-+ printk(KERN_ERR"*************"
-+ " LCD never idle "
-+ "*************\n");
-+ return -EIO;
-+ }
-+
-+ mdelay(100);
-+
-+ } else {
-+ /* RGB interface needs vsync/hsync */
-+ int mode;
-+ mode = reg_read_lcd(gdrm, GLAMO_REG_LCD_MODE3);
-+ if ( mode & GLAMO_LCD_MODE3_RGB)
-+ reg_write_lcd(gdrm, GLAMO_REG_LCD_COMMAND1,
-+ GLAMO_LCD_CMD_TYPE_DISP |
-+ GLAMO_LCD_CMD_DATA_DISP_SYNC);
-+
-+ reg_write_lcd(gdrm, GLAMO_REG_LCD_COMMAND1,
-+ GLAMO_LCD_CMD_TYPE_DISP |
-+ GLAMO_LCD_CMD_DATA_DISP_FIRE);
-+ }
-+
-+ return 0;
-+}
-+
-+
-+static struct glamo_script lcd_init_script[] = {
-+ { GLAMO_REG_LCD_MODE1, 0x0020 },
-+ /* no display rotation, no hardware cursor, no dither, no gamma,
-+ * no retrace flip, vsync low-active, hsync low active,
-+ * no TVCLK, no partial display, hw dest color from fb,
-+ * no partial display mode, LCD1, software flip, */
-+ { GLAMO_REG_LCD_MODE2, 0x9020 },
-+ /* video flip, no ptr, no ptr, dhclk off,
-+ * normal mode, no cpuif,
-+ * res, serial msb first, single fb, no fr ctrl,
-+ * cpu if bits all zero, no crc
-+ * 0000 0000 0010 0000 */
-+ { GLAMO_REG_LCD_MODE3, 0x0b40 },
-+ /* src data rgb565, res, 18bit rgb666
-+ * 000 01 011 0100 0000 */
-+ { GLAMO_REG_LCD_POLARITY, 0x440c },
-+ /* DE high active, no cpu/lcd if, cs0 force low, a0 low active,
-+ * np cpu if, 9bit serial data, sclk rising edge latch data
-+ * 01 00 0 100 0 000 01 0 0 */
-+ /* The following values assume 640*480@16bpp */
-+ /* FIXME: fb0 has not yet been allocated! */
-+ { GLAMO_REG_LCD_A_BASE1, PAGE_SIZE }, /* display A base address 15:0 */
-+ { GLAMO_REG_LCD_A_BASE2, 0x0000 }, /* display A base address 22:16 */
-+ { GLAMO_REG_LCD_B_BASE1, 0x6000 }, /* display B base address 15:0 */
-+ { GLAMO_REG_LCD_B_BASE2, 0x0009 }, /* display B base address 22:16 */
-+ { GLAMO_REG_LCD_CURSOR_BASE1, 0xC000 }, /* cursor base address 15:0 */
-+ { GLAMO_REG_LCD_CURSOR_BASE2, 0x0012 }, /* cursor base address 22:16 */
-+ { GLAMO_REG_LCD_COMMAND2, 0x0000 }, /* display page A */
-+};
-+
-+
-+static int glamo_run_lcd_script(struct glamodrm_handle *gdrm,
-+ struct glamo_script *script, int len)
-+{
-+ int i;
-+
-+ for (i = 0; i < len; i++) {
-+ struct glamo_script *line = &script[i];
-+
-+ if (line->reg == 0xffff)
-+ return 0;
-+ else if (line->reg == 0xfffe)
-+ msleep(line->val);
-+ else
-+ reg_write_lcd(gdrm, script[i].reg, script[i].val);
-+ }
-+
-+ return 0;
-+}
-+
-+
-+extern void jbt6k74_action(int val);
-+
-+/* Power on/off */
-+static void glamo_crtc_dpms(struct drm_crtc *crtc, int mode)
-+{
-+}
-+
-+
-+static bool glamo_crtc_mode_fixup(struct drm_crtc *crtc,
-+ struct drm_display_mode *mode,
-+ struct drm_display_mode *adjusted_mode)
-+{
-+ return true;
-+}
-+
-+
-+static int glamo_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
-+ struct drm_framebuffer *old_fb)
-+{
-+ struct glamodrm_handle *gdrm;
-+ struct glamo_crtc *gcrtc;
-+ struct glamo_framebuffer *gfb;
-+ struct drm_gem_object *obj;
-+ struct drm_glamo_gem_object *gobj;
-+ u32 addr;
-+ u16 addr_low, addr_high;
-+
-+ if (!crtc->fb) {
-+ DRM_DEBUG("No FB bound\n");
-+ return -EINVAL;
-+ }
-+
-+ /* Dig out our handle */
-+ gcrtc = to_glamo_crtc(crtc);
-+ gdrm = gcrtc->gdrm; /* Here it is! */
-+
-+ gfb = to_glamo_framebuffer(crtc->fb);
-+ obj = gfb->obj;
-+ gobj = obj->driver_private;
-+
-+ addr = GLAMO_OFFSET_FB + gobj->block->start;
-+ addr_low = addr & 0xffff;
-+ addr_high = ((addr >> 16) & 0x7f) | 0x4000;
-+
-+ glamo_lcd_cmd_mode(gdrm, 1);
-+ reg_write_lcd(gdrm, GLAMO_REG_LCD_A_BASE1, addr_low);
-+ reg_write_lcd(gdrm, GLAMO_REG_LCD_A_BASE2, addr_high);
-+ glamo_lcd_cmd_mode(gdrm, 0);
-+
-+ return 0;
-+}
-+
-+
-+static int glamo_crtc_mode_set(struct drm_crtc *crtc,
-+ struct drm_display_mode *mode,
-+ struct drm_display_mode *adjusted_mode,
-+ int x, int y,
-+ struct drm_framebuffer *old_fb)
-+{
-+ struct glamodrm_handle *gdrm;
-+ struct glamo_crtc *gcrtc;
-+ int retr_start, retr_end, disp_start, disp_end;
-+
-+ /* Dig out our handle */
-+ gcrtc = to_glamo_crtc(crtc);
-+ gdrm = gcrtc->gdrm; /* Here it is! */
-+
-+ glamo_lcd_cmd_mode(gdrm, 1);
-+
-+ glamo_engine_reclock(gdrm->glamo_core, GLAMO_ENGINE_LCD, mode->clock);
-+ gdrm->saved_clock = mode->clock;
-+
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_WIDTH,
-+ GLAMO_LCD_WIDTH_MASK, mode->hdisplay);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HEIGHT,
-+ GLAMO_LCD_HEIGHT_MASK, mode->vdisplay);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_PITCH,
-+ GLAMO_LCD_PITCH_MASK, mode->hdisplay*2);
-+
-+ /* Convert "X modeline timings" into "Glamo timings" */
-+ retr_start = 0;
-+ retr_end = retr_start + mode->hsync_end - mode->hsync_start;
-+ disp_start = mode->htotal - mode->hsync_start;
-+ disp_end = disp_start + mode->hdisplay;
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_TOTAL,
-+ GLAMO_LCD_HV_TOTAL_MASK, mode->htotal);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_START,
-+ GLAMO_LCD_HV_RETR_START_MASK, retr_start);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_END,
-+ GLAMO_LCD_HV_RETR_END_MASK, retr_end);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_START,
-+ GLAMO_LCD_HV_RETR_DISP_START_MASK, disp_start);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_END,
-+ GLAMO_LCD_HV_RETR_DISP_END_MASK, disp_end);
-+
-+ /* The same in the vertical direction */
-+ retr_start = 0;
-+ retr_end = retr_start + mode->vsync_end - mode->vsync_start;
-+ disp_start = mode->vtotal - mode->vsync_start;
-+ disp_end = disp_start + mode->vdisplay;
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_TOTAL,
-+ GLAMO_LCD_HV_TOTAL_MASK, mode->vtotal);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_START,
-+ GLAMO_LCD_HV_RETR_START_MASK, retr_start);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_END,
-+ GLAMO_LCD_HV_RETR_END_MASK, retr_end);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_START,
-+ GLAMO_LCD_HV_RETR_DISP_START_MASK, disp_start);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_END,
-+ GLAMO_LCD_HV_RETR_DISP_END_MASK, disp_end);
-+
-+ glamo_lcd_cmd_mode(gdrm, 0);
-+
-+ glamo_crtc_mode_set_base(crtc, 0, 0, old_fb);
-+
-+ return 0;
-+}
-+
-+
-+static void glamo_crtc_prepare(struct drm_crtc *crtc)
-+{
-+}
-+
-+
-+static void glamo_crtc_commit(struct drm_crtc *crtc)
-+{
-+}
-+
-+
-+static int glamo_crtc_cursor_set(struct drm_crtc *crtc,
-+ struct drm_file *file_priv,
-+ uint32_t handle,
-+ uint32_t width, uint32_t height)
-+{
-+ return 0;
-+}
-+
-+
-+static int glamo_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
-+{
-+ return 0;
-+}
-+
-+
-+static void glamo_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-+ u16 *blue, uint32_t size)
-+{
-+}
-+
-+
-+static void glamo_crtc_destroy(struct drm_crtc *crtc)
-+{
-+ struct glamo_crtc *glamo_crtc = to_glamo_crtc(crtc);
-+ drm_crtc_cleanup(crtc);
-+ kfree(glamo_crtc);
-+}
-+
-+
-+static enum drm_connector_status
-+glamo_connector_detect(struct drm_connector *connector)
-+{
-+ /* One hopes it hasn't been de-soldered... */
-+ return connector_status_connected;
-+}
-+
-+
-+static void glamo_connector_destroy(struct drm_connector *connector)
-+{
-+ drm_sysfs_connector_remove(connector);
-+ drm_connector_cleanup(connector);
-+ kfree(connector);
-+}
-+
-+
-+static int glamo_connector_get_modes(struct drm_connector *connector)
-+{
-+ struct drm_display_mode *mode;
-+ struct glamo_fb_platform_data *fb_info;
-+ struct glamo_output *goutput = to_glamo_output(connector);
-+ struct glamodrm_handle *gdrm = goutput->gdrm;
-+
-+ /* Dig out the record which will tell us about the hardware */
-+ fb_info = gdrm->glamo_core->pdata->fb_data;
-+
-+ mode = drm_mode_create(connector->dev);
-+ if (!mode)
-+ return 0;
-+ /* Fill in 'mode' here */
-+ mode->type = DRM_MODE_TYPE_DEFAULT | DRM_MODE_TYPE_PREFERRED;
-+
-+ /* Convert framebuffer timings into KMS timings */
-+ mode->clock = 1000000000UL / fb_info->modes[0].pixclock; /* ps -> kHz */
-+ mode->clock *= 1000; /* kHz -> Hz */
-+ mode->hdisplay = fb_info->modes[0].xres;
-+ mode->hsync_start = fb_info->modes[0].right_margin + mode->hdisplay;
-+ mode->hsync_end = mode->hsync_start + fb_info->modes[0].hsync_len;
-+ mode->htotal = mode->hsync_end + fb_info->modes[0].left_margin;
-+ mode->hskew = 0;
-+
-+ mode->vdisplay = fb_info->modes[0].yres;
-+ mode->vsync_start = fb_info->modes[0].lower_margin + mode->vdisplay;
-+ mode->vsync_end = mode->vsync_start + fb_info->modes[0].vsync_len;
-+ mode->vtotal = mode->vsync_end + fb_info->modes[0].upper_margin;
-+ mode->vscan = 0;
-+
-+ /* Physical size */
-+ mode->width_mm = fb_info->width;
-+ mode->height_mm = fb_info->height;
-+
-+ drm_mode_set_name(mode);
-+ drm_mode_probed_add(connector, mode);
-+
-+ return 1; /* one mode, for now */
-+}
-+
-+
-+static int glamo_connector_set_property(struct drm_connector *connector,
-+ struct drm_property *property,
-+ uint64_t value)
-+{
-+ return 0;
-+}
-+
-+
-+static int glamo_connector_mode_valid(struct drm_connector *connector,
-+ struct drm_display_mode *mode)
-+{
-+ if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
-+ return MODE_NO_DBLESCAN;
-+
-+ return MODE_OK;
-+}
-+
-+
-+struct drm_encoder *
-+glamo_connector_best_encoder(struct drm_connector *connector)
-+{
-+ struct glamo_output *glamo_output = to_glamo_output(connector);
-+ return &glamo_output->enc;
-+}
-+
-+
-+static void glamo_encoder_dpms(struct drm_encoder *encoder, int mode)
-+{
-+}
-+
-+
-+static bool glamo_encoder_mode_fixup(struct drm_encoder *encoder,
-+ struct drm_display_mode *mode,
-+ struct drm_display_mode *adjusted_mode)
-+{
-+ return true;
-+}
-+
-+
-+void glamo_encoder_prepare(struct drm_encoder *encoder)
-+{
-+}
-+
-+
-+void glamo_encoder_commit(struct drm_encoder *encoder)
-+{
-+}
-+
-+
-+static void glamo_encoder_mode_set(struct drm_encoder *encoder,
-+ struct drm_display_mode *mode,
-+ struct drm_display_mode *adjusted_mode)
-+{
-+}
-+
-+
-+static void glamo_encoder_destroy(struct drm_encoder *encoder)
-+{
-+ drm_encoder_cleanup(encoder);
-+}
-+
-+
-+static void glamo_framebuffer_destroy(struct drm_framebuffer *fb)
-+{
-+ struct glamo_framebuffer *glamo_fb = to_glamo_framebuffer(fb);
-+ struct drm_device *dev = fb->dev;
-+
-+ drm_framebuffer_cleanup(fb);
-+ mutex_lock(&dev->struct_mutex);
-+ drm_gem_object_unreference(glamo_fb->obj);
-+ mutex_unlock(&dev->struct_mutex);
-+
-+ kfree(glamo_fb);
-+}
-+
-+static int glamo_framebuffer_create_handle(struct drm_framebuffer *fb,
-+ struct drm_file *file_priv,
-+ unsigned int *handle)
-+{
-+ struct glamo_framebuffer *glamo_fb = to_glamo_framebuffer(fb);
-+ struct drm_gem_object *object = glamo_fb->obj;
-+
-+ return drm_gem_handle_create(file_priv, object, handle);
-+}
-+
-+
-+static const struct drm_framebuffer_funcs glamo_fb_funcs = {
-+ .destroy = glamo_framebuffer_destroy,
-+ .create_handle = glamo_framebuffer_create_handle,
-+};
-+
-+
-+int glamo_framebuffer_create(struct drm_device *dev,
-+ struct drm_mode_fb_cmd *mode_cmd,
-+ struct drm_framebuffer **fb,
-+ struct drm_gem_object *obj)
-+{
-+ struct glamo_framebuffer *glamo_fb;
-+ int ret;
-+
-+ glamo_fb = kzalloc(sizeof(*glamo_fb), GFP_KERNEL);
-+ if (!glamo_fb)
-+ return -ENOMEM;
-+
-+ ret = drm_framebuffer_init(dev, &glamo_fb->base, &glamo_fb_funcs);
-+ if (ret) {
-+ DRM_ERROR("framebuffer init failed %d\n", ret);
-+ return ret;
-+ }
-+
-+ drm_helper_mode_fill_fb_struct(&glamo_fb->base, mode_cmd);
-+
-+ glamo_fb->obj = obj;
-+
-+ *fb = &glamo_fb->base;
-+
-+ return 0;
-+}
-+
-+
-+static struct drm_framebuffer *
-+glamo_user_framebuffer_create(struct drm_device *dev,
-+ struct drm_file *filp,
-+ struct drm_mode_fb_cmd *mode_cmd)
-+{
-+ struct drm_gem_object *obj;
-+ struct drm_framebuffer *fb;
-+ int ret;
-+
-+ obj = drm_gem_object_lookup(dev, filp, mode_cmd->handle);
-+ if (!obj)
-+ return NULL;
-+
-+ ret = glamo_framebuffer_create(dev, mode_cmd, &fb, obj);
-+ if (ret) {
-+ drm_gem_object_unreference(obj);
-+ return NULL;
-+ }
-+
-+ return fb;
-+}
-+
-+
-+int glamo_fbchanged(struct drm_device *dev)
-+{
-+ return 0;
-+}
-+
-+
-+/* CRTC functions */
-+static const struct drm_crtc_funcs glamo_crtc_funcs = {
-+ .cursor_set = glamo_crtc_cursor_set,
-+ .cursor_move = glamo_crtc_cursor_move,
-+ .gamma_set = glamo_crtc_gamma_set,
-+ .set_config = drm_crtc_helper_set_config,
-+ .destroy = glamo_crtc_destroy,
-+};
-+
-+
-+/* CRTC helper functions */
-+static const struct drm_crtc_helper_funcs glamo_crtc_helper_funcs = {
-+ .dpms = glamo_crtc_dpms,
-+ .mode_fixup = glamo_crtc_mode_fixup,
-+ .mode_set = glamo_crtc_mode_set,
-+ .mode_set_base = glamo_crtc_mode_set_base,
-+ .prepare = glamo_crtc_prepare,
-+ .commit = glamo_crtc_commit,
-+};
-+
-+
-+/* Connector functions */
-+static const struct drm_connector_funcs glamo_connector_funcs = {
-+ .detect = glamo_connector_detect,
-+ .fill_modes = drm_helper_probe_single_connector_modes,
-+ .destroy = glamo_connector_destroy,
-+ .set_property = glamo_connector_set_property,
-+};
-+
-+
-+/* Connector helper functions */
-+static const struct drm_connector_helper_funcs glamo_connector_helper_funcs = {
-+ .mode_valid = glamo_connector_mode_valid,
-+ .get_modes = glamo_connector_get_modes,
-+ .best_encoder = glamo_connector_best_encoder,
-+};
-+
-+
-+/* Encoder functions */
-+static const struct drm_encoder_funcs glamo_encoder_funcs = {
-+ .destroy = glamo_encoder_destroy,
-+};
-+
-+
-+/* Encoder helper functions */
-+static const struct drm_encoder_helper_funcs glamo_encoder_helper_funcs = {
-+ .dpms = glamo_encoder_dpms,
-+ .mode_fixup = glamo_encoder_mode_fixup,
-+ .prepare = glamo_encoder_prepare,
-+ .commit = glamo_encoder_commit,
-+ .mode_set = glamo_encoder_mode_set,
-+};
-+
-+
-+/* Mode functions */
-+static const struct drm_mode_config_funcs glamo_mode_funcs = {
-+ .fb_create = glamo_user_framebuffer_create,
-+ .fb_changed = glamo_fbchanged
-+};
-+
-+
-+static struct drm_mode_set kernelfb_mode;
-+
-+
-+/* Restore's the kernel's fbcon mode, used for panic path */
-+void glamo_display_restore(void)
-+{
-+ drm_crtc_helper_set_config(&kernelfb_mode);
-+}
-+
-+
-+static int glamo_display_panic(struct notifier_block *n, unsigned long ununsed,
-+ void *panic_str)
-+{
-+ DRM_ERROR("panic occurred, switching back to text console\n");
-+
-+ glamo_display_restore();
-+ return 0;
-+}
-+
-+
-+static struct notifier_block paniced = {
-+ .notifier_call = glamo_display_panic,
-+};
-+
-+
-+int glamo_display_init(struct drm_device *dev)
-+{
-+ struct glamodrm_handle *gdrm;
-+ struct glamo_crtc *glamo_crtc;
-+ struct glamo_output *glamo_output;
-+ struct drm_connector *connector;
-+ struct glamo_framebuffer *glamo_fb;
-+ struct fb_info *info;
-+ struct glamofb_par *par;
-+ struct drm_mode_set *modeset;
-+
-+ gdrm = dev->dev_private;
-+
-+ /* Initial setup of the LCD controller */
-+ glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_LCD);
-+ glamo_engine_reset(gdrm->glamo_core, GLAMO_ENGINE_LCD);
-+
-+ glamo_run_lcd_script(gdrm, lcd_init_script,
-+ ARRAY_SIZE(lcd_init_script));
-+
-+ drm_mode_config_init(dev);
-+
-+ dev->mode_config.min_width = 240;
-+ dev->mode_config.min_height = 320;
-+ dev->mode_config.max_width = 480;
-+ dev->mode_config.max_height = 640;
-+
-+ dev->mode_config.funcs = (void *)&glamo_mode_funcs;
-+
-+ /* Initialise our CRTC object.
-+ * Only one connector per CRTC. We know this: it's kind of soldered. */
-+ glamo_crtc = kzalloc(sizeof(struct glamo_crtc)
-+ + sizeof(struct drm_connector *), GFP_KERNEL);
-+ if (glamo_crtc == NULL) return 1;
-+ glamo_crtc->gdrm = gdrm;
-+ glamo_crtc->blank_mode = DRM_MODE_DPMS_OFF;
-+ drm_crtc_init(dev, &glamo_crtc->base, &glamo_crtc_funcs);
-+ drm_crtc_helper_add(&glamo_crtc->base, &glamo_crtc_helper_funcs);
-+
-+ glamo_crtc->mode_set.crtc = &glamo_crtc->base;
-+ glamo_crtc->mode_set.connectors =
-+ (struct drm_connector **)(glamo_crtc + 1);
-+ glamo_crtc->mode_set.num_connectors = 0;
-+
-+ /* Create our "output" object: consists of an output and an encoder */
-+ glamo_output = kzalloc(sizeof(struct glamo_output), GFP_KERNEL);
-+ if (glamo_output == NULL) return 1;
-+ connector = &glamo_output->base;
-+ glamo_output->gdrm = gdrm;
-+
-+ /* Initialise the connector */
-+ drm_connector_init(dev, connector, &glamo_connector_funcs,
-+ DRM_MODE_CONNECTOR_Unknown);
-+ drm_sysfs_connector_add(connector);
-+ connector->interlace_allowed = 0;
-+ connector->doublescan_allowed = 0;
-+
-+ /* Initialise the encoder */
-+ drm_encoder_init(dev, &glamo_output->enc, &glamo_encoder_funcs,
-+ DRM_MODE_ENCODER_DAC);
-+ glamo_output->enc.possible_crtcs = 1 << 0;
-+ drm_mode_connector_attach_encoder(&glamo_output->base,
-+ &glamo_output->enc);
-+
-+ drm_encoder_helper_add(&glamo_output->enc, &glamo_encoder_helper_funcs);
-+ drm_connector_helper_add(connector, &glamo_connector_helper_funcs);
-+
-+ drm_helper_initial_config(dev);
-+
-+ if (list_empty(&dev->mode_config.fb_kernel_list)) {
-+ int ret, cols, cols_g;
-+ cols_g = reg_read_lcd(gdrm, GLAMO_REG_LCD_MODE3) & 0xc000;
-+ switch ( cols_g ) {
-+ case GLAMO_LCD_SRC_RGB565 :
-+ cols = GLAMO_FB_RGB565; break;
-+ case GLAMO_LCD_SRC_ARGB1555 :
-+ cols = GLAMO_FB_ARGB1555; break;
-+ case GLAMO_LCD_SRC_ARGB4444 :
-+ cols = GLAMO_FB_ARGB4444; break;
-+ default :
-+ printk(KERN_WARNING "Unrecognised LCD colour mode\n");
-+ cols = GLAMO_FB_RGB565; break; /* Take a guess */
-+ }
-+ ret = glamofb_create(dev, 480, 640, 480, 640, cols, &glamo_fb);
-+ if (ret) return -EINVAL;
-+ }
-+
-+ info = glamo_fb->base.fbdev;
-+ par = info->par;
-+
-+ modeset = &glamo_crtc->mode_set;
-+ modeset->fb = &glamo_fb->base;
-+ modeset->connectors[0] = connector;
-+
-+ par->crtc_ids[0] = glamo_crtc->base.base.id;
-+
-+ modeset->num_connectors = 1;
-+ modeset->mode = modeset->crtc->desired_mode;
-+
-+ par->crtc_count = 1;
-+
-+ if (register_framebuffer(info) < 0)
-+ return -EINVAL;
-+
-+ printk(KERN_INFO "[glamo-drm] fb%d: %s frame buffer device\n",
-+ info->node, info->fix.id);
-+
-+ /* Switch back to kernel console on panic */
-+ kernelfb_mode = *modeset;
-+ atomic_notifier_chain_register(&panic_notifier_list, &paniced);
-+ printk(KERN_INFO "[glamo-drm] Registered panic notifier\n");
-+
-+ return 0;
-+}
-+
-+
-+void glamo_display_suspend(struct glamodrm_handle *gdrm)
-+{
-+ gdrm->saved_width = reg_read_lcd(gdrm, GLAMO_REG_LCD_WIDTH);
-+ gdrm->saved_height = reg_read_lcd(gdrm, GLAMO_REG_LCD_HEIGHT);
-+ gdrm->saved_pitch = reg_read_lcd(gdrm, GLAMO_REG_LCD_PITCH);
-+ gdrm->saved_htotal = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_TOTAL);
-+ gdrm->saved_hrtrst = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_START);
-+ gdrm->saved_hrtren = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_END);
-+ gdrm->saved_hdspst = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_START);
-+ gdrm->saved_hdspen = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_END);
-+ gdrm->saved_vtotal = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_TOTAL);
-+ gdrm->saved_vrtrst = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_START);
-+ gdrm->saved_vrtren = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_END);
-+ gdrm->saved_vdspst = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_START);
-+ gdrm->saved_vdspen = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_END);
-+}
-+
-+
-+void glamo_display_resume(struct glamodrm_handle *gdrm)
-+{
-+ glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_LCD);
-+ glamo_engine_reset(gdrm->glamo_core, GLAMO_ENGINE_LCD);
-+ glamo_run_lcd_script(gdrm, lcd_init_script,
-+ ARRAY_SIZE(lcd_init_script));
-+
-+ /* Enable pixel clock */
-+ glamo_engine_clkreg_set(gdrm->glamo_core,
-+ GLAMO_ENGINE_LCD,
-+ GLAMO_CLOCK_LCD_EN_DCLK,
-+ GLAMO_CLOCK_LCD_EN_DCLK);
-+
-+ /* Restore timings */
-+ glamo_lcd_cmd_mode(gdrm, 1);
-+ glamo_engine_reclock(gdrm->glamo_core, GLAMO_ENGINE_LCD,
-+ gdrm->saved_clock);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_WIDTH, GLAMO_LCD_WIDTH_MASK,
-+ gdrm->saved_width);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HEIGHT, GLAMO_LCD_HEIGHT_MASK,
-+ gdrm->saved_height);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_PITCH, GLAMO_LCD_PITCH_MASK,
-+ gdrm->saved_pitch);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_TOTAL,
-+ GLAMO_LCD_HV_TOTAL_MASK, gdrm->saved_htotal);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_START,
-+ GLAMO_LCD_HV_RETR_START_MASK, gdrm->saved_hrtrst);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_END,
-+ GLAMO_LCD_HV_RETR_END_MASK, gdrm->saved_hrtren);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_START,
-+ GLAMO_LCD_HV_RETR_DISP_START_MASK,
-+ gdrm->saved_hdspst);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_END,
-+ GLAMO_LCD_HV_RETR_DISP_END_MASK,
-+ gdrm->saved_hdspen);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_TOTAL,
-+ GLAMO_LCD_HV_TOTAL_MASK, gdrm->saved_vtotal);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_START,
-+ GLAMO_LCD_HV_RETR_START_MASK, gdrm->saved_vrtrst);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_END,
-+ GLAMO_LCD_HV_RETR_END_MASK, gdrm->saved_vrtren);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_START,
-+ GLAMO_LCD_HV_RETR_DISP_START_MASK,
-+ gdrm->saved_vdspst);
-+ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_END,
-+ GLAMO_LCD_HV_RETR_DISP_END_MASK,
-+ gdrm->saved_vdspen);
-+ glamo_lcd_cmd_mode(gdrm, 0);
-+}
-diff --git a/drivers/mfd/glamo/glamo-display.h b/drivers/mfd/glamo/glamo-display.h
-new file mode 100644
-index 0000000..d6f21bc
---- /dev/null
-+++ b/drivers/mfd/glamo/glamo-display.h
-@@ -0,0 +1,39 @@
-+/* Smedia Glamo 336x/337x Display
-+ *
-+ * Copyright (c) 2008-2009 Thomas White <taw@bitwiz.org.uk>
-+ *
-+ * All rights reserved.
-+ *
-+ * 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 __GLAMO_DISPLAY_H
-+#define __GLAMO_DISPLAY_H
-+
-+#include <drm/drmP.h>
-+#include "glamo-drm-private.h"
-+
-+extern int glamo_display_init(struct drm_device *dev);
-+
-+extern int glamo_framebuffer_create(struct drm_device *dev,
-+ struct drm_mode_fb_cmd *mode_cmd,
-+ struct drm_framebuffer **fb,
-+ struct drm_gem_object *obj);
-+
-+extern void glamo_display_suspend(struct glamodrm_handle *gdrm);
-+extern void glamo_display_resume(struct glamodrm_handle *gdrm);
-+
-+#endif /* __GLAMO_DISPLAY_H */
-diff --git a/drivers/mfd/glamo/glamo-drm-drv.c b/drivers/mfd/glamo/glamo-drm-drv.c
-new file mode 100644
-index 0000000..81215f4
---- /dev/null
-+++ b/drivers/mfd/glamo/glamo-drm-drv.c
-@@ -0,0 +1,453 @@
-+/* Smedia Glamo 336x/337x Graphics Driver
-+ *
-+ * Copyright (C) 2009 Openmoko, Inc. Jorge Luis Zapata <turran@openmoko.com>
-+ * Copyright (C) 2008-2009 Thomas White <taw@bitwiz.org.uk>
-+ * Copyright (C) 2009 Andreas Pokorny <andreas.pokorny@gmail.com>
-+ *
-+ * All rights reserved.
-+ *
-+ * 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
-+ */
-+
-+
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <drm/drmP.h>
-+#include <drm/glamo_drm.h>
-+#include <linux/glamofb.h>
-+
-+#include "glamo-core.h"
-+#include "glamo-cmdq.h"
-+#include "glamo-buffer.h"
-+#include "glamo-drm-private.h"
-+#include "glamo-display.h"
-+#include "glamo-kms-fb.h"
-+#include "glamo-fence.h"
-+
-+#define DRIVER_AUTHOR "Openmoko, Inc."
-+#define DRIVER_NAME "glamo-drm"
-+#define DRIVER_DESC "SMedia Glamo 3362"
-+#define DRIVER_DATE "20090614"
-+
-+
-+static int glamo_ioctl_swap(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv)
-+{
-+ printk(KERN_INFO "glamo_ioctl_swap\n");
-+ return 0;
-+}
-+
-+
-+static int glamo_ioctl_gem_info(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv)
-+{
-+ printk(KERN_INFO "glamo_ioctl_gem_info\n");
-+ return 0;
-+}
-+
-+
-+struct drm_ioctl_desc glamo_ioctls[] = {
-+ DRM_IOCTL_DEF(DRM_GLAMO_CMDBUF, glamo_ioctl_cmdbuf, DRM_AUTH),
-+ DRM_IOCTL_DEF(DRM_GLAMO_SWAP, glamo_ioctl_swap, DRM_AUTH),
-+ DRM_IOCTL_DEF(DRM_GLAMO_CMDBURST, glamo_ioctl_cmdburst, DRM_AUTH),
-+ DRM_IOCTL_DEF(DRM_GLAMO_GEM_INFO, glamo_ioctl_gem_info, DRM_AUTH),
-+ DRM_IOCTL_DEF(DRM_GLAMO_GEM_CREATE, glamo_ioctl_gem_create, DRM_AUTH),
-+ DRM_IOCTL_DEF(DRM_GLAMO_GEM_MMAP, glamo_ioctl_gem_mmap, DRM_AUTH),
-+ DRM_IOCTL_DEF(DRM_GLAMO_GEM_PIN, glamo_ioctl_gem_pin, DRM_AUTH),
-+ DRM_IOCTL_DEF(DRM_GLAMO_GEM_UNPIN, glamo_ioctl_gem_unpin, DRM_AUTH),
-+ DRM_IOCTL_DEF(DRM_GLAMO_GEM_PREAD, glamo_ioctl_gem_pread, DRM_AUTH),
-+ DRM_IOCTL_DEF(DRM_GLAMO_GEM_PWRITE, glamo_ioctl_gem_pwrite, DRM_AUTH),
-+ DRM_IOCTL_DEF(DRM_GLAMO_GEM_WAIT_RENDERING,
-+ glamo_ioctl_wait_rendering, DRM_AUTH),
-+};
-+
-+
-+static int glamodrm_firstopen(struct drm_device *dev)
-+{
-+ DRM_DEBUG("\n");
-+ return 0;
-+}
-+
-+
-+static int glamodrm_open(struct drm_device *dev, struct drm_file *fh)
-+{
-+ DRM_DEBUG("\n");
-+ return 0;
-+}
-+
-+
-+static void glamodrm_preclose(struct drm_device *dev, struct drm_file *fh)
-+{
-+ DRM_DEBUG("\n");
-+}
-+
-+static void glamodrm_postclose(struct drm_device *dev, struct drm_file *fh)
-+{
-+ DRM_DEBUG("\n");
-+}
-+
-+
-+static void glamodrm_lastclose(struct drm_device *dev)
-+{
-+ DRM_DEBUG("\n");
-+}
-+
-+
-+static int glamodrm_master_create(struct drm_device *dev,
-+ struct drm_master *master)
-+{
-+ DRM_DEBUG("\n");
-+
-+ return 0;
-+}
-+
-+
-+static void glamodrm_master_destroy(struct drm_device *dev,
-+ struct drm_master *master)
-+{
-+ DRM_DEBUG("\n");
-+}
-+
-+
-+static int glamodrm_load(struct drm_device *dev, unsigned long flags)
-+{
-+ struct glamodrm_handle *gdrm;
-+ gdrm = dev->dev_private;
-+
-+ glamo_buffer_init(gdrm);
-+ glamo_cmdq_init(gdrm);
-+ glamo_fence_init(gdrm);
-+ glamo_display_init(dev);
-+
-+ return 0;
-+}
-+
-+
-+static int glamodrm_unload(struct drm_device *dev)
-+{
-+ struct glamodrm_handle *gdrm;
-+
-+ gdrm = dev->dev_private;
-+
-+ glamo_engine_disable(gdrm->glamo_core, GLAMO_ENGINE_2D);
-+ glamo_engine_disable(gdrm->glamo_core, GLAMO_ENGINE_3D);
-+ glamo_buffer_final(gdrm);
-+ glamo_fence_shutdown(gdrm);
-+
-+ return 0;
-+}
-+
-+
-+static struct vm_operations_struct glamodrm_gem_vm_ops = {
-+ .fault = glamodrm_gem_fault,
-+};
-+
-+static struct drm_driver glamodrm_drm_driver = {
-+ .driver_features = DRIVER_IS_PLATFORM | DRIVER_GEM | DRIVER_MODESET,
-+ .firstopen = glamodrm_firstopen,
-+ .load = glamodrm_load,
-+ .unload = glamodrm_unload,
-+ .open = glamodrm_open,
-+ .preclose = glamodrm_preclose,
-+ .postclose = glamodrm_postclose,
-+ .lastclose = glamodrm_lastclose,
-+ .reclaim_buffers = drm_core_reclaim_buffers,
-+ .get_map_ofs = drm_core_get_map_ofs,
-+ .get_reg_ofs = drm_core_get_reg_ofs,
-+ .master_create = glamodrm_master_create,
-+ .master_destroy = glamodrm_master_destroy,
-+ .gem_init_object = glamodrm_gem_init_object,
-+ .gem_free_object = glamodrm_gem_free_object,
-+ .gem_vm_ops = &glamodrm_gem_vm_ops,
-+ .ioctls = glamo_ioctls,
-+ .fops = {
-+ .owner = THIS_MODULE,
-+ .open = drm_open,
-+ .release = drm_release,
-+ .ioctl = drm_ioctl,
-+ .mmap = drm_gem_mmap,
-+ .poll = drm_poll,
-+ .fasync = drm_fasync,
-+ },
-+ .major = 0,
-+ .minor = 1,
-+ .patchlevel = 0,
-+ .name = DRIVER_NAME,
-+ .desc = DRIVER_DESC,
-+ .date = DRIVER_DATE,
-+};
-+
-+
-+static int glamodrm_probe(struct platform_device *pdev)
-+{
-+ int rc;
-+ struct glamodrm_handle *gdrm;
-+ struct glamo_core *core = dev_get_drvdata(pdev->dev.parent);
-+
-+ printk(KERN_INFO "[glamo-drm] SMedia Glamo Direct Rendering Support\n");
-+
-+ gdrm = kzalloc(sizeof(*gdrm), GFP_KERNEL);
-+ if ( !gdrm )
-+ return -ENOMEM;
-+ platform_set_drvdata(pdev, gdrm);
-+ gdrm->glamo_core = core;
-+ gdrm->dev = &pdev->dev;
-+
-+ /* Find the command queue registers */
-+ gdrm->reg = platform_get_resource_byname(pdev, IORESOURCE_MEM,
-+ "glamo-cmdq-regs");
-+ if ( !gdrm->reg ) {
-+ dev_err(&pdev->dev, "Unable to find cmdq registers.\n");
-+ rc = -ENOENT;
-+ goto out_free;
-+ }
-+ gdrm->reg = request_mem_region(gdrm->reg->start,
-+ resource_size(gdrm->reg), pdev->name);
-+ if ( !gdrm->reg ) {
-+ dev_err(&pdev->dev, "failed to request MMIO region\n");
-+ rc = -ENOENT;
-+ goto out_free;
-+ }
-+ gdrm->reg_base = ioremap_nocache(gdrm->reg->start,
-+ resource_size(gdrm->reg));
-+ if ( !gdrm->reg_base ) {
-+ dev_err(&pdev->dev, "failed to ioremap() MMIO registers\n");
-+ rc = -ENOENT;
-+ goto out_release_regs;
-+ }
-+
-+ /* Find the command queue itself */
-+ gdrm->cmdq = platform_get_resource_byname(pdev, IORESOURCE_MEM,
-+ "glamo-command-queue");
-+ if ( !gdrm->cmdq ) {
-+ dev_err(&pdev->dev, "Unable to find command queue.\n");
-+ rc = -ENOENT;
-+ goto out_unmap_regs;
-+ }
-+ gdrm->cmdq = request_mem_region(gdrm->cmdq->start,
-+ resource_size(gdrm->cmdq), pdev->name);
-+ if ( !gdrm->cmdq ) {
-+ dev_err(&pdev->dev, "failed to request command queue region\n");
-+ rc = -ENOENT;
-+ goto out_unmap_regs;
-+ }
-+ gdrm->cmdq_base = ioremap_nocache(gdrm->cmdq->start,
-+ resource_size(gdrm->cmdq));
-+ if ( !gdrm->cmdq_base ) {
-+ dev_err(&pdev->dev, "failed to ioremap() command queue\n");
-+ rc = -ENOENT;
-+ goto out_release_cmdq;
-+ }
-+
-+ /* Find the VRAM */
-+ gdrm->vram = platform_get_resource_byname(pdev, IORESOURCE_MEM,
-+ "glamo-fb-mem");
-+ if ( !gdrm->vram ) {
-+ dev_err(&pdev->dev, "Unable to find VRAM.\n");
-+ rc = -ENOENT;
-+ goto out_unmap_cmdq;
-+ }
-+ gdrm->vram = request_mem_region(gdrm->vram->start,
-+ resource_size(gdrm->vram), pdev->name);
-+ if ( !gdrm->vram ) {
-+ dev_err(&pdev->dev, "failed to request VRAM region\n");
-+ rc = -ENOENT;
-+ goto out_unmap_cmdq;
-+ }
-+
-+ /* Find the LCD controller */
-+ gdrm->lcd_regs = platform_get_resource_byname(pdev, IORESOURCE_MEM,
-+ "glamo-fb-regs");
-+ if ( !gdrm->lcd_regs ) {
-+ dev_err(&pdev->dev, "Unable to find LCD registers.\n");
-+ rc = -ENOENT;
-+ goto out_release_vram;
-+ }
-+ gdrm->lcd_regs = request_mem_region(gdrm->lcd_regs->start,
-+ resource_size(gdrm->lcd_regs),
-+ pdev->name);
-+ if ( !gdrm->lcd_regs ) {
-+ dev_err(&pdev->dev, "failed to request LCD registers\n");
-+ rc = -ENOENT;
-+ goto out_release_vram;
-+ }
-+ gdrm->lcd_base = ioremap_nocache(gdrm->lcd_regs->start,
-+ resource_size(gdrm->lcd_regs));
-+ if ( !gdrm->lcd_base ) {
-+ dev_err(&pdev->dev, "failed to ioremap() LCD registers\n");
-+ rc = -ENOENT;
-+ goto out_release_lcd;
-+ }
-+
-+ /* Find the 2D engine */
-+ gdrm->twod_regs = platform_get_resource(pdev, IORESOURCE_MEM, 4);
-+ if ( !gdrm->twod_regs ) {
-+ dev_err(&pdev->dev, "Unable to find 2D registers.\n");
-+ rc = -ENOENT;
-+ goto out_unmap_lcd;
-+ }
-+ gdrm->twod_regs = request_mem_region(gdrm->twod_regs->start,
-+ resource_size(gdrm->twod_regs),
-+ pdev->name);
-+ if ( !gdrm->twod_regs ) {
-+ dev_err(&pdev->dev, "failed to request 2D registers\n");
-+ rc = -ENOENT;
-+ goto out_unmap_lcd;
-+ }
-+ gdrm->twod_base = ioremap(gdrm->twod_regs->start,
-+ resource_size(gdrm->twod_regs));
-+ if ( !gdrm->twod_base ) {
-+ dev_err(&pdev->dev, "failed to ioremap() 2D registers\n");
-+ rc = -ENOENT;
-+ goto out_release_2d;
-+ }
-+
-+ /* Hook up IRQ handle for fence processing */
-+ gdrm->twod_irq = platform_get_irq_byname(pdev, "glamo-2d-irq");
-+ rc = request_irq(gdrm->twod_irq, glamo_fence_irq_handler,
-+ IRQF_SHARED, pdev->name, gdrm);
-+ if ( rc ) {
-+ dev_err(&pdev->dev, "failed to register irq.\n");
-+ goto out_unmap_2d;
-+ }
-+
-+ gdrm->vram_size = GLAMO_FB_SIZE;
-+ printk(KERN_INFO "[glamo-drm] %lli bytes of VRAM\n",
-+ (long long int)gdrm->vram_size);
-+
-+ /* Initialise DRM */
-+ drm_platform_init(&glamodrm_drm_driver, pdev, (void *)gdrm);
-+
-+ return 0;
-+
-+out_unmap_2d:
-+ iounmap(gdrm->twod_base);
-+out_release_2d:
-+ release_mem_region(gdrm->twod_regs->start,
-+ resource_size(gdrm->twod_regs));
-+out_unmap_lcd:
-+ iounmap(gdrm->lcd_base);
-+out_release_lcd:
-+ release_mem_region(gdrm->lcd_regs->start,
-+ resource_size(gdrm->lcd_regs));
-+out_release_vram:
-+ release_mem_region(gdrm->vram->start, resource_size(gdrm->vram));
-+out_unmap_cmdq:
-+ iounmap(gdrm->cmdq_base);
-+out_release_cmdq:
-+ release_mem_region(gdrm->cmdq->start, resource_size(gdrm->cmdq));
-+out_unmap_regs:
-+ iounmap(gdrm->reg_base);
-+out_release_regs:
-+ release_mem_region(gdrm->reg->start, resource_size(gdrm->reg));
-+out_free:
-+ kfree(gdrm);
-+ pdev->dev.driver_data = NULL;
-+ return rc;
-+}
-+
-+
-+static int glamodrm_remove(struct platform_device *pdev)
-+{
-+ struct glamodrm_handle *gdrm = platform_get_drvdata(pdev);
-+
-+ glamo_buffer_final(gdrm);
-+ glamo_cmdq_shutdown(gdrm);
-+
-+ drm_exit(&glamodrm_drm_driver);
-+
-+ platform_set_drvdata(pdev, NULL);
-+
-+ /* Release registers */
-+ iounmap(gdrm->reg_base);
-+ release_mem_region(gdrm->reg->start, resource_size(gdrm->reg));
-+
-+ /* Release VRAM */
-+ release_mem_region(gdrm->vram->start, resource_size(gdrm->vram));
-+
-+ /* Release command queue */
-+ iounmap(gdrm->cmdq_base);
-+ release_mem_region(gdrm->cmdq->start, resource_size(gdrm->cmdq));
-+
-+ /* Release 2D engine */
-+ free_irq(gdrm->twod_irq, gdrm);
-+ iounmap(gdrm->twod_base);
-+ release_mem_region(gdrm->twod_regs->start,
-+ resource_size(gdrm->twod_regs));
-+
-+ kfree(gdrm);
-+
-+ return 0;
-+}
-+
-+
-+static int glamodrm_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct glamodrm_handle *gdrm = platform_get_drvdata(pdev);
-+
-+ glamo_kmsfb_suspend(gdrm);
-+ glamo_display_suspend(gdrm);
-+ glamo_cmdq_suspend(gdrm);
-+
-+ /* glamo_core.c will suspend the engines for us */
-+
-+ return 0;
-+}
-+
-+
-+static int glamodrm_resume(struct platform_device *pdev)
-+{
-+ struct glamodrm_handle *gdrm = platform_get_drvdata(pdev);
-+
-+ glamo_cmdq_resume(gdrm);
-+ glamo_display_resume(gdrm);
-+ glamo_kmsfb_resume(gdrm);
-+
-+ return 0;
-+}
-+
-+
-+static struct platform_driver glamodrm_driver = {
-+ .probe = glamodrm_probe,
-+ .remove = glamodrm_remove,
-+ .suspend = glamodrm_suspend,
-+ .resume = glamodrm_resume,
-+ .driver = {
-+ .name = "glamo-fb",
-+ .owner = THIS_MODULE,
-+ },
-+};
-+
-+
-+static int __devinit glamodrm_init(void)
-+{
-+ glamodrm_drm_driver.num_ioctls = DRM_ARRAY_SIZE(glamo_ioctls);
-+ return platform_driver_register(&glamodrm_driver);
-+}
-+
-+
-+static void __exit glamodrm_exit(void)
-+{
-+ platform_driver_unregister(&glamodrm_driver);
-+}
-+
-+
-+module_init(glamodrm_init);
-+module_exit(glamodrm_exit);
-+
-+MODULE_AUTHOR(DRIVER_AUTHOR);
-+MODULE_DESCRIPTION(DRIVER_DESC);
-+MODULE_LICENSE("GPL");
-diff --git a/drivers/mfd/glamo/glamo-drm-private.h b/drivers/mfd/glamo/glamo-drm-private.h
-new file mode 100644
-index 0000000..7949a2e
---- /dev/null
-+++ b/drivers/mfd/glamo/glamo-drm-private.h
-@@ -0,0 +1,156 @@
-+/* Smedia Glamo 336x/337x DRM private bits
-+ *
-+ * Copyright (C) 2008-2009 Thomas White <taw@bitwiz.org.uk>
-+ * Copyright (C) 2009 Andreas Pokorny <andreas.pokorny@gmail.com>
-+ * Based on xf86-video-glamo
-+ * Copyright 2007 OpenMoko, Inc.
-+ * Copyright © 2009 Lars-Peter Clausen <lars@metafoo.de>
-+ *
-+ * All rights reserved.
-+ *
-+ * 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 __GLAMO_DRMPRIV_H
-+#define __GLAMO_DRMPRIV_H
-+
-+
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/semaphore.h>
-+#include <linux/spinlock.h>
-+#include <linux/wait.h>
-+
-+#include "glamo-core.h"
-+
-+
-+/* Memory to allocate for the framebuffer.
-+ * The rest is reserved for the DRM memory manager */
-+#define GLAMO_FRAMEBUFFER_ALLOCATION (2*480*640)
-+
-+
-+struct glamodrm_handle {
-+
-+ /* This device */
-+ struct device *dev;
-+
-+ /* The parent device handle */
-+ struct glamo_core *glamo_core;
-+
-+ /* Framebuffer handle for the console (i.e. /dev/fb0) */
-+ struct fb_info *fb;
-+
-+ /* Command queue registers */
-+ struct resource *reg;
-+ char __iomem *reg_base;
-+
-+ /* VRAM region */
-+ struct resource *vram;
-+
-+ /* Command queue region */
-+ struct resource *cmdq;
-+ char __iomem *cmdq_base;
-+
-+ /* LCD controller registers */
-+ struct resource *lcd_regs;
-+ char __iomem *lcd_base;
-+
-+ /* 2D engine registers and IRQ */
-+ struct resource *twod_regs;
-+ char __iomem *twod_base;
-+ unsigned int twod_irq;
-+
-+ ssize_t vram_size;
-+
-+ /* Memory management */
-+ struct drm_mm *mmgr;
-+
-+ /* semaphore against concurrent ioctl */
-+ struct semaphore add_to_ring;
-+
-+ /* Saved state */
-+ u_int16_t saved_clock;
-+ u_int16_t saved_width;
-+ u_int16_t saved_height;
-+ u_int16_t saved_pitch;
-+ u_int16_t saved_htotal;
-+ u_int16_t saved_hrtrst;
-+ u_int16_t saved_hrtren;
-+ u_int16_t saved_hdspst;
-+ u_int16_t saved_hdspen;
-+ u_int16_t saved_vtotal;
-+ u_int16_t saved_vrtrst;
-+ u_int16_t saved_vrtren;
-+ u_int16_t saved_vdspst;
-+ u_int16_t saved_vdspen;
-+
-+ /* Fencing */
-+ atomic_t curr_seq; /* The last used stamp number */
-+ struct list_head fence_list; /* List of active fences */
-+ rwlock_t fence_list_lock; /* Lock to protect fence_list */
-+ wait_queue_head_t fence_queue; /* Waitqueue */
-+ struct tasklet_struct fence_tl; /* Tasklet for fence IRQ */
-+
-+ /* A scratch block */
-+ struct drm_mm_node *scratch;
-+};
-+
-+
-+/* Private data. This is where we keep our memory management bits */
-+struct drm_glamo_gem_object {
-+ struct drm_gem_object *obj; /* The GEM object this refers to */
-+ struct drm_mm_node *block; /* Block handle for drm_mm */
-+ uint64_t mmap_offset;
-+};
-+
-+
-+struct glamo_crtc {
-+ struct drm_crtc base;
-+ struct glamodrm_handle *gdrm;
-+ /* a mode_set for fbdev users on this crtc */
-+ struct drm_mode_set mode_set;
-+ int blank_mode;
-+};
-+
-+
-+struct glamo_framebuffer {
-+ struct drm_framebuffer base;
-+ struct drm_gem_object *obj;
-+};
-+
-+
-+struct glamo_output {
-+ struct drm_connector base;
-+ struct drm_encoder enc;
-+ struct glamodrm_handle *gdrm;
-+};
-+
-+
-+/* Colour mode for KMS framebuffer */
-+enum {
-+ GLAMO_FB_RGB565,
-+ GLAMO_FB_ARGB1555,
-+ GLAMO_FB_ARGB4444
-+};
-+
-+
-+#define to_glamo_crtc(x) container_of(x, struct glamo_crtc, base)
-+#define to_glamo_output(x) container_of(x, struct glamo_output, base)
-+#define enc_to_glamo_output(x) container_of(x, struct glamo_output, enc)
-+#define to_glamo_framebuffer(x) container_of(x, struct glamo_framebuffer, base)
-+
-+
-+#endif /* __GLAMO_DRMPRIV_H */
-diff --git a/drivers/mfd/glamo/glamo-fence.c b/drivers/mfd/glamo/glamo-fence.c
-new file mode 100644
-index 0000000..ab77241
---- /dev/null
-+++ b/drivers/mfd/glamo/glamo-fence.c
-@@ -0,0 +1,329 @@
-+/*
-+ * SMedia Glamo 336x/337x fence objects
-+ *
-+ * Copyright (c) 2009 Thomas White <taw@bitwiz.org.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, see <http://www.gnu.org/licenses/>.
-+ *
-+ *
-+ * Loosely based on radeon_fence.c, to which the following notice applies:
-+ *
-+ * Copyright 2009 Jerome Glisse.
-+ * All Rights Reserved.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the
-+ * "Software"), to deal in the Software without restriction, including
-+ * without limitation the rights to use, copy, modify, merge, publish,
-+ * distribute, sub license, and/or sell copies of the Software, and to
-+ * permit persons to whom the Software is furnished to do so, subject to
-+ * the following conditions:
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
-+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * The above copyright notice and this permission notice (including the
-+ * next paragraph) shall be included in all copies or substantial portions
-+ * of the Software.
-+ *
-+ */
-+/*
-+ * Authors:
-+ * Jerome Glisse <glisse@freedesktop.org>
-+ * Dave Airlie
-+ */
-+
-+
-+#include <drm/drmP.h>
-+#include <drm/glamo_drm.h>
-+#include <linux/kernel.h>
-+#include <linux/irq.h>
-+#include <linux/interrupt.h>
-+#include <linux/spinlock.h>
-+#include <linux/lockdep.h>
-+
-+#include "glamo-drm-private.h"
-+#include "glamo-regs.h"
-+#include "glamo-core.h"
-+#include "glamo-cmdq.h"
-+
-+
-+static struct lock_class_key glamo_fence_lock_key;
-+
-+
-+struct glamo_fence
-+{
-+ struct list_head list;
-+ uint16_t seq; /* Wait for at least this ID */
-+ int signalled; /* Non-zero when fence has passed */
-+ struct glamodrm_handle *gdrm;
-+};
-+
-+
-+static void glamo_fence_emit(struct glamo_fence *fence)
-+{
-+ u16 fring[6];
-+
-+ fring[0] = 0x8000 | GLAMO_REG_2D_ID1;
-+ fring[1] = 3;
-+ fence->seq = atomic_inc_return(&fence->gdrm->curr_seq);
-+ if ( fence->seq > 1<<14 ) {
-+ atomic_set(&fence->gdrm->curr_seq, 0);
-+ fence->seq = atomic_inc_return(&fence->gdrm->curr_seq);
-+ }
-+ fring[2] = 1<<15 | fence->seq;
-+ fring[3] = 0; /* Unused */
-+ fring[4] = 0; /* Unused */
-+ fring[5] = 0; /* Padding */
-+
-+ glamo_add_to_ring(fence->gdrm, fring, 12);
-+}
-+
-+
-+static void glamo_fence_enable(struct glamodrm_handle *gdrm)
-+{
-+ glamo_enable_irq(gdrm->glamo_core, GLAMO_IRQ_2D);
-+}
-+
-+
-+static inline u16 reg_read_2d(struct glamodrm_handle *gdrm, u_int16_t reg)
-+{
-+ /* For command queue, the address is given relative to
-+ * the overall base of Glamo. This isn't the case here. */
-+ return ioread16(gdrm->twod_base + reg-GLAMO_REGOFS_2D);
-+}
-+
-+
-+static inline u16 reg_read_cmdq(struct glamodrm_handle *gdrm, u_int16_t reg)
-+{
-+ return ioread16(gdrm->reg_base + reg);
-+}
-+
-+
-+static void glamo_cmdq_wait(struct glamodrm_handle *gdrm,
-+ enum glamo_engine engine)
-+{
-+ u16 mask, val, status;
-+ int i;
-+
-+ switch (engine)
-+ {
-+ case GLAMO_ENGINE_ALL:
-+ mask = 1 << 2;
-+ val = mask;
-+ break;
-+ default:
-+ return;
-+ }
-+
-+ for ( i=0; i<1000; i++ ) {
-+ status = reg_read_cmdq(gdrm, GLAMO_REG_CMDQ_STATUS);
-+ if ((status & mask) == val) break;
-+ mdelay(1);
-+ }
-+ if ( i == 1000 ) {
-+ size_t ring_read;
-+ printk(KERN_WARNING "[glamo-drm] CmdQ timeout!\n");
-+ printk(KERN_WARNING "[glamo-drm] status = %x\n", status);
-+ ring_read = reg_read_cmdq(gdrm, GLAMO_REG_CMDQ_READ_ADDRL);
-+ ring_read |= ((reg_read_cmdq(gdrm, GLAMO_REG_CMDQ_READ_ADDRH)
-+ & 0x7) << 16);
-+ printk(KERN_INFO "[glamo-drm] ring_read now 0x%x\n",
-+ ring_read);
-+ }
-+}
-+
-+
-+irqreturn_t glamo_fence_irq_handler(unsigned int irq, void *data)
-+{
-+ struct glamodrm_handle *gdrm = data;
-+
-+ if (!gdrm) {
-+ printk(KERN_ERR "[glamo-drm] 2D IRQ called with no data\n");
-+ return IRQ_NONE;
-+ }
-+ glamo_clear_irq(gdrm->glamo_core, GLAMO_IRQ_2D);
-+
-+ tasklet_schedule(&gdrm->fence_tl);
-+
-+ return IRQ_HANDLED;
-+}
-+
-+
-+/* This is nasty. I'm sorry. */
-+static void glamo_fence_debodge(struct glamodrm_handle *gdrm)
-+{
-+ struct list_head *tmp;
-+
-+ printk(KERN_ERR "[glamo-drm] Attempting to recover...\n");
-+
-+ glamo_cmdq_wait(gdrm, GLAMO_ENGINE_ALL);
-+ glamo_engine_reset(gdrm->glamo_core, GLAMO_ENGINE_2D);
-+
-+ read_lock(&gdrm->fence_list_lock);
-+ list_for_each(tmp, &gdrm->fence_list) {
-+
-+ struct glamo_fence *fence;
-+
-+ fence = list_entry(tmp, struct glamo_fence, list);
-+
-+ if ( fence->signalled != 1 ) {
-+ printk(KERN_ERR "[glamo-drm] Fence seq#%i was not"
-+ " signalled\n", fence->seq);
-+ }
-+ fence->signalled = 1;
-+
-+ }
-+ read_unlock(&gdrm->fence_list_lock);
-+
-+ wake_up_all(&gdrm->fence_queue);
-+}
-+
-+
-+static void glamo_fence_tl(unsigned long data)
-+{
-+ struct glamodrm_handle *gdrm = (struct glamodrm_handle *)data;
-+ int wake = 0;
-+ u16 seq;
-+ struct list_head *tmp;
-+
-+ seq = reg_read_2d(gdrm, GLAMO_REG_2D_ID1) & 0x7fff;
-+
-+ read_lock(&gdrm->fence_list_lock);
-+ list_for_each(tmp, &gdrm->fence_list) {
-+
-+ struct glamo_fence *fence;
-+
-+ fence = list_entry(tmp, struct glamo_fence, list);
-+ if ( seq >= fence->seq ) {
-+ fence->signalled = 1;
-+ wake = 1;
-+ }
-+
-+ }
-+ read_unlock(&gdrm->fence_list_lock);
-+
-+ if ( wake ) wake_up_all(&gdrm->fence_queue);
-+}
-+
-+
-+static struct glamo_fence *glamo_fence_new(struct glamodrm_handle *gdrm)
-+{
-+ struct glamo_fence *fence;
-+ unsigned long irq_flags;
-+
-+ fence = kmalloc(sizeof(*fence), GFP_KERNEL);
-+ fence->signalled = 0;
-+ fence->gdrm = gdrm;
-+
-+ /* Add to list */
-+ write_lock_irqsave(&gdrm->fence_list_lock, irq_flags);
-+ list_add(&fence->list, &gdrm->fence_list);
-+ write_unlock_irqrestore(&gdrm->fence_list_lock, irq_flags);
-+
-+ return fence;
-+}
-+
-+
-+static struct glamo_fence *glamo_fence_destroy(struct glamo_fence *fence)
-+{
-+ unsigned long irq_flags;
-+ struct glamodrm_handle *gdrm = fence->gdrm;
-+
-+ /* Remove from list */
-+ write_lock_irqsave(&gdrm->fence_list_lock, irq_flags);
-+ list_del(&fence->list);
-+ write_unlock_irqrestore(&gdrm->fence_list_lock, irq_flags);
-+
-+ kfree(fence);
-+
-+ return fence;
-+}
-+
-+
-+int glamo_ioctl_wait_rendering(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv)
-+{
-+ struct glamodrm_handle *gdrm;
-+ struct drm_glamo_gem_wait_rendering *args = data;
-+ struct glamo_fence *fence;
-+ int r;
-+
-+ gdrm = dev->dev_private;
-+
-+ if ( !args->have_handle ) {
-+ glamo_cmdq_wait(gdrm, GLAMO_ENGINE_ALL);
-+ return 0;
-+ }
-+
-+ fence = glamo_fence_new(gdrm);
-+ if ( fence == NULL ) {
-+ printk(KERN_WARNING "[glamo-drm] Couldn't allocate fence -"
-+ " falling back to busy wait.\n");
-+ glamo_cmdq_wait(gdrm, GLAMO_ENGINE_ALL);
-+ return 0;
-+ }
-+
-+ glamo_fence_emit(fence);
-+
-+ /* Wait... */
-+ r = wait_event_interruptible_timeout(gdrm->fence_queue,
-+ fence->signalled, HZ);
-+ if ( r == 0 ) {
-+ printk(KERN_ERR "[glamo-drm] Timeout!\n");
-+ glamo_fence_debodge(gdrm);
-+ }
-+
-+ glamo_fence_destroy(fence);
-+
-+ return 0;
-+}
-+
-+
-+void glamo_fence_init(struct glamodrm_handle *gdrm)
-+{
-+ unsigned long irq_flags;
-+
-+ if ( gdrm->twod_irq == 0 ) {
-+ printk(KERN_ERR "[glamo-drm] Attempted to initialise fence"
-+ " system before 2D IRQ registered\n");
-+ return;
-+ }
-+
-+ gdrm->fence_list_lock = __RW_LOCK_UNLOCKED(gdrm->fence_list_lock);
-+ lockdep_set_class(&gdrm->fence_list_lock, &glamo_fence_lock_key);
-+ init_waitqueue_head(&gdrm->fence_queue);
-+
-+ atomic_set(&gdrm->curr_seq, 0);
-+
-+ write_lock_irqsave(&gdrm->fence_list_lock, irq_flags);
-+ INIT_LIST_HEAD(&gdrm->fence_list);
-+ write_unlock_irqrestore(&gdrm->fence_list_lock, irq_flags);
-+
-+ tasklet_init(&gdrm->fence_tl, glamo_fence_tl, (unsigned long)gdrm);
-+
-+ glamo_fence_enable(gdrm);
-+}
-+
-+
-+void glamo_fence_shutdown(struct glamodrm_handle *gdrm)
-+{
-+ wake_up_all(&gdrm->fence_queue);
-+ tasklet_kill(&gdrm->fence_tl);
-+}
-diff --git a/drivers/mfd/glamo/glamo-fence.h b/drivers/mfd/glamo/glamo-fence.h
-new file mode 100644
-index 0000000..948fae3
---- /dev/null
-+++ b/drivers/mfd/glamo/glamo-fence.h
-@@ -0,0 +1,36 @@
-+/*
-+ * SMedia Glamo 336x/337x fence objects
-+ *
-+ * Copyright (c) 2009 Thomas White <taw@bitwiz.org.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, see <http://www.gnu.org/licenses/>.
-+ *
-+ */
-+
-+#ifndef __GLAMO_FENCE_H
-+#define __GLAMO_FENCE_H
-+
-+#include <drm/drmP.h>
-+
-+#include "glamo-drm-private.h"
-+
-+extern void glamo_fence_irq_handler(unsigned int irq, struct irq_desc *desc);
-+
-+extern void glamo_fence_init(struct glamodrm_handle *gdrm);
-+extern void glamo_fence_shutdown(struct glamodrm_handle *gdrm);
-+
-+extern int glamo_ioctl_wait_rendering(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv);
-+
-+#endif /* __GLAMO_FENCE_H */
-diff --git a/drivers/mfd/glamo/glamo-kms-fb.c b/drivers/mfd/glamo/glamo-kms-fb.c
-new file mode 100644
-index 0000000..61cd605
---- /dev/null
-+++ b/drivers/mfd/glamo/glamo-kms-fb.c
-@@ -0,0 +1,540 @@
-+/*
-+ * SMedia Glamo 336x/337x KMS Framebuffer
-+ *
-+ * Copyright (C) 2009 Thomas White <taw@bitwiz.org.uk>
-+ *
-+ * Based on glamo-fb.c (C) 2007-2008 by Openmoko, Inc.
-+ * Author: Harald Welte <laforge@openmoko.org>
-+ * All rights reserved.
-+ *
-+ * 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
-+ *
-+ *
-+ * Based on intel_fb.c from drivers/gpu/drm/i915
-+ * to which the following licence applies:
-+ *
-+ * Copyright © 2006-2007 Intel Corporation
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors:
-+ * Eric Anholt <eric@anholt.net>
-+ *
-+ */
-+
-+
-+#include <drm/drmP.h>
-+#include <drm/glamo_drm.h>
-+#include <drm/drm_crtc_helper.h>
-+#include <drm/drm_crtc.h>
-+
-+#include "glamo-core.h"
-+#include "glamo-drm-private.h"
-+#include "glamo-display.h"
-+#include "glamo-buffer.h"
-+
-+
-+struct glamofb_par {
-+ struct drm_device *dev;
-+ struct drm_display_mode *our_mode;
-+ struct glamo_framebuffer *glamo_fb;
-+ int crtc_count;
-+ /* crtc currently bound to this */
-+ uint32_t crtc_ids[2];
-+};
-+
-+
-+static int glamofb_setcolreg(unsigned regno, unsigned red, unsigned green,
-+ unsigned blue, unsigned transp,
-+ struct fb_info *info)
-+{
-+ struct glamofb_par *par = info->par;
-+ struct drm_device *dev = par->dev;
-+ struct drm_crtc *crtc;
-+ int i;
-+
-+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
-+ struct glamo_crtc *glamo_crtc = to_glamo_crtc(crtc);
-+ struct drm_mode_set *modeset = &glamo_crtc->mode_set;
-+ struct drm_framebuffer *fb = modeset->fb;
-+
-+ for (i = 0; i < par->crtc_count; i++)
-+ if (crtc->base.id == par->crtc_ids[i])
-+ break;
-+
-+ if (i == par->crtc_count)
-+ continue;
-+
-+
-+ if (regno > 255)
-+ return 1;
-+
-+ if (regno < 16) {
-+ switch (fb->depth) {
-+ case 15:
-+ fb->pseudo_palette[regno] = ((red & 0xf800) >> 1) |
-+ ((green & 0xf800) >> 6) |
-+ ((blue & 0xf800) >> 11);
-+ break;
-+ case 16:
-+ fb->pseudo_palette[regno] = (red & 0xf800) |
-+ ((green & 0xfc00) >> 5) |
-+ ((blue & 0xf800) >> 11);
-+ break;
-+ case 24:
-+ case 32:
-+ fb->pseudo_palette[regno] = ((red & 0xff00) << 8) |
-+ (green & 0xff00) |
-+ ((blue & 0xff00) >> 8);
-+ break;
-+ }
-+ }
-+ }
-+ return 0;
-+}
-+
-+static int glamofb_check_var(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ struct glamofb_par *par = info->par;
-+ struct glamo_framebuffer *glamo_fb = par->glamo_fb;
-+ struct drm_framebuffer *fb = &glamo_fb->base;
-+ int depth;
-+
-+ /* Need to resize the fb object !!! */
-+ if (var->xres > fb->width || var->yres > fb->height) {
-+ DRM_ERROR("Cannot resize framebuffer object (%dx%d > %dx%d)\n",
-+ var->xres,var->yres,fb->width,fb->height);
-+ DRM_ERROR("Need resizing code.\n");
-+ return -EINVAL;
-+ }
-+
-+ switch (var->bits_per_pixel) {
-+ case 16:
-+ depth = (var->green.length == 6) ? 16 : 15;
-+ break;
-+ case 32:
-+ depth = (var->transp.length > 0) ? 32 : 24;
-+ break;
-+ default:
-+ depth = var->bits_per_pixel;
-+ break;
-+ }
-+
-+ switch (depth) {
-+ case 16:
-+ var->red.offset = 11;
-+ var->green.offset = 5;
-+ var->blue.offset = 0;
-+ var->red.length = 5;
-+ var->green.length = 6;
-+ var->blue.length = 5;
-+ var->transp.length = 0;
-+ var->transp.offset = 0;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+/* this will let fbcon do the mode init */
-+/* FIXME: take mode config lock? */
-+static int glamofb_set_par(struct fb_info *info)
-+{
-+ struct glamofb_par *par = info->par;
-+ struct drm_device *dev = par->dev;
-+ struct fb_var_screeninfo *var = &info->var;
-+ int i;
-+
-+ DRM_DEBUG("%d %d\n", var->xres, var->pixclock);
-+
-+ if (var->pixclock != -1) {
-+
-+ DRM_ERROR("PIXEL CLOCK SET\n");
-+ return -EINVAL;
-+ } else {
-+ struct drm_crtc *crtc;
-+ int ret;
-+
-+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
-+ struct glamo_crtc *glamo_crtc = to_glamo_crtc(crtc);
-+
-+ for (i = 0; i < par->crtc_count; i++)
-+ if (crtc->base.id == par->crtc_ids[i])
-+ break;
-+
-+ if (i == par->crtc_count)
-+ continue;
-+
-+ if (crtc->fb == glamo_crtc->mode_set.fb) {
-+ mutex_lock(&dev->mode_config.mutex);
-+ ret = crtc->funcs->set_config(&glamo_crtc->mode_set);
-+ mutex_unlock(&dev->mode_config.mutex);
-+ if (ret)
-+ return ret;
-+ }
-+ }
-+ return 0;
-+ }
-+}
-+
-+static int glamofb_pan_display(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ struct glamofb_par *par = info->par;
-+ struct drm_device *dev = par->dev;
-+ struct drm_mode_set *modeset;
-+ struct drm_crtc *crtc;
-+ struct glamo_crtc *glamo_crtc;
-+ int ret = 0;
-+ int i;
-+
-+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
-+ for (i = 0; i < par->crtc_count; i++)
-+ if (crtc->base.id == par->crtc_ids[i])
-+ break;
-+
-+ if (i == par->crtc_count)
-+ continue;
-+
-+ glamo_crtc = to_glamo_crtc(crtc);
-+ modeset = &glamo_crtc->mode_set;
-+
-+ modeset->x = var->xoffset;
-+ modeset->y = var->yoffset;
-+
-+ if (modeset->num_connectors) {
-+ mutex_lock(&dev->mode_config.mutex);
-+ ret = crtc->funcs->set_config(modeset);
-+ mutex_unlock(&dev->mode_config.mutex);
-+ if (!ret) {
-+ info->var.xoffset = var->xoffset;
-+ info->var.yoffset = var->yoffset;
-+ }
-+ }
-+ }
-+
-+ return ret;
-+}
-+
-+static void glamofb_on(struct fb_info *info)
-+{
-+ struct glamofb_par *par = info->par;
-+ struct drm_device *dev = par->dev;
-+ struct drm_crtc *crtc;
-+ struct drm_encoder *encoder;
-+ int i;
-+
-+ /*
-+ * For each CRTC in this fb, find all associated encoders
-+ * and turn them off, then turn off the CRTC.
-+ */
-+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
-+ struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
-+
-+ for (i = 0; i < par->crtc_count; i++)
-+ if (crtc->base.id == par->crtc_ids[i])
-+ break;
-+
-+ crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
-+
-+ /* Found a CRTC on this fb, now find encoders */
-+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
-+ if (encoder->crtc == crtc) {
-+ struct drm_encoder_helper_funcs *encoder_funcs;
-+ encoder_funcs = encoder->helper_private;
-+ encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
-+ }
-+ }
-+ }
-+}
-+
-+static void glamofb_off(struct fb_info *info, int dpms_mode)
-+{
-+ struct glamofb_par *par = info->par;
-+ struct drm_device *dev = par->dev;
-+ struct drm_crtc *crtc;
-+ struct drm_encoder *encoder;
-+ int i;
-+
-+ /*
-+ * For each CRTC in this fb, find all associated encoders
-+ * and turn them off, then turn off the CRTC.
-+ */
-+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
-+ struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
-+
-+ for (i = 0; i < par->crtc_count; i++)
-+ if (crtc->base.id == par->crtc_ids[i])
-+ break;
-+
-+ /* Found a CRTC on this fb, now find encoders */
-+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
-+ if (encoder->crtc == crtc) {
-+ struct drm_encoder_helper_funcs *encoder_funcs;
-+ encoder_funcs = encoder->helper_private;
-+ encoder_funcs->dpms(encoder, dpms_mode);
-+ }
-+ }
-+ if (dpms_mode == DRM_MODE_DPMS_OFF)
-+ crtc_funcs->dpms(crtc, dpms_mode);
-+ }
-+}
-+
-+static int glamofb_blank(int blank, struct fb_info *info)
-+{
-+ switch (blank) {
-+ case FB_BLANK_UNBLANK:
-+ glamofb_on(info);
-+ break;
-+ case FB_BLANK_NORMAL:
-+ glamofb_off(info, DRM_MODE_DPMS_STANDBY);
-+ break;
-+ case FB_BLANK_HSYNC_SUSPEND:
-+ glamofb_off(info, DRM_MODE_DPMS_STANDBY);
-+ break;
-+ case FB_BLANK_VSYNC_SUSPEND:
-+ glamofb_off(info, DRM_MODE_DPMS_SUSPEND);
-+ break;
-+ case FB_BLANK_POWERDOWN:
-+ glamofb_off(info, DRM_MODE_DPMS_OFF);
-+ break;
-+ }
-+ return 0;
-+}
-+
-+static struct fb_ops glamofb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_check_var = glamofb_check_var,
-+ .fb_set_par = glamofb_set_par,
-+ .fb_setcolreg = glamofb_setcolreg,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_pan_display = glamofb_pan_display,
-+ .fb_blank = glamofb_blank,
-+};
-+
-+
-+#define RESSIZE(ressource) (((ressource)->end - (ressource)->start)+1)
-+
-+
-+/* Here, we create a GEM object of the correct size, and then turn it into
-+ * /dev/fbX so that the kernel can put a console on it. */
-+int glamofb_create(struct drm_device *dev, uint32_t fb_width,
-+ uint32_t fb_height, uint32_t surface_width,
-+ uint32_t surface_height, int colour_mode,
-+ struct glamo_framebuffer **glamo_fb_p)
-+{
-+ struct fb_info *info;
-+ struct glamofb_par *par;
-+ struct drm_framebuffer *fb;
-+ struct glamo_framebuffer *glamo_fb;
-+ struct drm_mode_fb_cmd mode_cmd;
-+ struct drm_gem_object *fbo = NULL;
-+ struct drm_glamo_gem_object *gobj;
-+ struct device *device = &dev->platform_dev->dev;
-+ struct glamodrm_handle *gdrm;
-+ int size, ret;
-+ unsigned long offs;
-+
-+ gdrm = dev->dev_private;
-+
-+ mode_cmd.width = surface_width;
-+ mode_cmd.height = surface_height;
-+
-+ mode_cmd.bpp = 16;
-+ mode_cmd.pitch = ALIGN(mode_cmd.width * ((mode_cmd.bpp + 1) / 8), 64);
-+ mode_cmd.depth = 16;
-+
-+ size = mode_cmd.pitch * mode_cmd.height;
-+ size = ALIGN(size, PAGE_SIZE);
-+ if ( size > GLAMO_FRAMEBUFFER_ALLOCATION ) {
-+ printk(KERN_ERR "[glamo-drm] Not enough memory for fb\n");
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+ fbo = glamo_gem_object_alloc(dev, GLAMO_FRAMEBUFFER_ALLOCATION, 2);
-+ if (!fbo) {
-+ printk(KERN_ERR "[glamo-drm] Failed to allocate framebuffer\n");
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+ gobj = fbo->driver_private;
-+
-+ mutex_lock(&dev->struct_mutex);
-+
-+ ret = glamo_framebuffer_create(dev, &mode_cmd, &fb, fbo);
-+ if (ret) {
-+ DRM_ERROR("failed to allocate fb.\n");
-+ goto out_unref;
-+ }
-+
-+ list_add(&fb->filp_head, &dev->mode_config.fb_kernel_list);
-+
-+ glamo_fb = to_glamo_framebuffer(fb);
-+ *glamo_fb_p = glamo_fb;
-+
-+ info = framebuffer_alloc(sizeof(struct glamofb_par), device);
-+ if (!info) {
-+ ret = -ENOMEM;
-+ goto out_unref;
-+ }
-+
-+ par = info->par;
-+
-+ strcpy(info->fix.id, "glamodrmfb");
-+ info->fix.type = FB_TYPE_PACKED_PIXELS;
-+ info->fix.visual = FB_VISUAL_TRUECOLOR;
-+ info->fix.type_aux = 0;
-+ info->fix.xpanstep = 1; /* doing it in hw */
-+ info->fix.ypanstep = 1; /* doing it in hw */
-+ info->fix.ywrapstep = 0;
-+ info->fix.accel = FB_ACCEL_GLAMO;
-+ info->fix.type_aux = 0;
-+ info->flags = FBINFO_DEFAULT;
-+
-+ info->fbops = &glamofb_ops;
-+
-+ info->fix.line_length = fb->pitch;
-+ info->fix.smem_start = dev->mode_config.fb_base
-+ + (unsigned long) gdrm->vram->start;
-+ info->fix.smem_len = size;
-+
-+ info->flags = FBINFO_DEFAULT;
-+
-+ offs = gobj->block->start;
-+ info->screen_base = ioremap(gdrm->vram->start + offs + GLAMO_OFFSET_FB,
-+ GLAMO_FRAMEBUFFER_ALLOCATION);
-+ if (!info->screen_base) {
-+ printk(KERN_ERR "[glamo-drm] Couldn't map framebuffer!\n");
-+ ret = -ENOSPC;
-+ goto out_unref;
-+ }
-+ info->screen_size = size;
-+
-+ info->pseudo_palette = fb->pseudo_palette;
-+ info->var.xres_virtual = fb->width;
-+ info->var.yres_virtual = fb->height;
-+ info->var.bits_per_pixel = fb->bits_per_pixel;
-+ info->var.xoffset = 0;
-+ info->var.yoffset = 0;
-+ info->var.activate = FB_ACTIVATE_NOW;
-+ info->var.height = -1;
-+ info->var.width = -1;
-+ info->var.xres = fb_width;
-+ info->var.yres = fb_height;
-+
-+ info->fix.mmio_start = 0;
-+ info->fix.mmio_len = 0;
-+
-+ info->pixmap.size = 64*1024;
-+ info->pixmap.buf_align = 8;
-+ info->pixmap.access_align = 32;
-+ info->pixmap.flags = FB_PIXMAP_SYSTEM;
-+ info->pixmap.scan_align = 1;
-+
-+ switch (fb->depth) {
-+ case 16:
-+ switch ( colour_mode ) {
-+ case GLAMO_FB_RGB565:
-+ info->var.red.offset = 11;
-+ info->var.green.offset = 5;
-+ info->var.blue.offset = 0;
-+ info->var.red.length = 5;
-+ info->var.green.length = 6;
-+ info->var.blue.length = 5;
-+ info->var.transp.length = 0;
-+ break;
-+ case GLAMO_FB_ARGB1555:
-+ info->var.transp.offset = 15;
-+ info->var.red.offset = 10;
-+ info->var.green.offset = 5;
-+ info->var.blue.offset = 0;
-+ info->var.transp.length = 1;
-+ info->var.red.length = 5;
-+ info->var.green.length = 5;
-+ info->var.blue.length = 5;
-+ break;
-+ case GLAMO_FB_ARGB4444:
-+ info->var.transp.offset = 12;
-+ info->var.red.offset = 8;
-+ info->var.green.offset = 4;
-+ info->var.blue.offset = 0;
-+ info->var.transp.length = 4;
-+ info->var.red.length = 4;
-+ info->var.green.length = 4;
-+ info->var.blue.length = 4;
-+ break;
-+ }
-+ break;
-+ case 24:
-+ case 32:
-+ default:
-+ /* The Smedia Glamo doesn't support anything but 16bit color */
-+ printk(KERN_ERR "[glamo-drm] Only 16bpp is supported.\n");
-+ return -EINVAL;
-+ }
-+
-+ fb->fbdev = info;
-+ par->glamo_fb = glamo_fb;
-+ par->dev = dev;
-+ gdrm->fb = info;
-+
-+ info->var.pixclock = -1;
-+
-+ printk(KERN_INFO "[glamo-drm] Allocated %dx%d fb: bo %p\n",
-+ glamo_fb->base.width, glamo_fb->base.height, fbo);
-+ mutex_unlock(&dev->struct_mutex);
-+ return 0;
-+
-+out_unref:
-+ drm_gem_object_unreference(fbo);
-+ mutex_unlock(&dev->struct_mutex);
-+out:
-+ return ret;
-+}
-+
-+
-+void glamo_kmsfb_suspend(struct glamodrm_handle *gdrm)
-+{
-+ fb_set_suspend(gdrm->fb, 1);
-+}
-+
-+
-+void glamo_kmsfb_resume(struct glamodrm_handle *gdrm)
-+{
-+ fb_set_suspend(gdrm->fb, 0);
-+}
-diff --git a/drivers/mfd/glamo/glamo-kms-fb.h b/drivers/mfd/glamo/glamo-kms-fb.h
-new file mode 100644
-index 0000000..1960e76
---- /dev/null
-+++ b/drivers/mfd/glamo/glamo-kms-fb.h
-@@ -0,0 +1,41 @@
-+/*
-+ * SMedia Glamo 336x/337x KMS framebuffer
-+ *
-+ * Copyright (C) 2009 Thomas White <taw@bitwiz.org.uk>
-+ *
-+ * Based on glamo-fb.c (C) 2007-2008 by Openmoko, Inc.
-+ * Author: Harald Welte <laforge@openmoko.org>
-+ * All rights reserved.
-+ *
-+ * 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 __GLAMO_KMS_FB_H
-+#define __GLAMO_KMS_FB_H
-+
-+#include <drm/drmP.h>
-+#include "glamo-drm-private.h"
-+
-+extern int glamofb_create(struct drm_device *dev, uint32_t fb_width,
-+ uint32_t fb_height, uint32_t surface_width,
-+ uint32_t surface_height, int colour_mode,
-+ struct glamo_framebuffer **glamo_fb_p);
-+
-+extern void glamo_kmsfb_suspend(struct glamodrm_handle *gdrm);
-+extern void glamo_kmsfb_resume(struct glamodrm_handle *gdrm);
-+
-+#endif /* __GLAMO_KMS_FB_H */
-diff --git a/include/drm/Kbuild b/include/drm/Kbuild
-index b940fdf..48b7b55 100644
---- a/include/drm/Kbuild
-+++ b/include/drm/Kbuild
-@@ -8,3 +8,4 @@ unifdef-y += radeon_drm.h
- unifdef-y += sis_drm.h
- unifdef-y += savage_drm.h
- unifdef-y += via_drm.h
-+unifdef-y += glamo_drm.h
-diff --git a/include/drm/glamo_drm.h b/include/drm/glamo_drm.h
-new file mode 100644
-index 0000000..4c194dc
---- /dev/null
-+++ b/include/drm/glamo_drm.h
-@@ -0,0 +1,153 @@
-+/* glamo_drm.h -- Public header for the Glamo driver
-+ *
-+ * Copyright 2009 Thomas White
-+ * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas.
-+ * Copyright 2000 VA Linux Systems, Inc., Fremont, California.
-+ * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas.
-+ * All rights reserved.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors:
-+ * Thomas White <taw@bitwiz.org.uk>
-+ * Kevin E. Martin <martin@valinux.com>
-+ * Gareth Hughes <gareth@valinux.com>
-+ * Keith Whitwell <keith@tungstengraphics.com>
-+ */
-+
-+#ifndef __GLAMO_DRM_H__
-+#define __GLAMO_DRM_H__
-+
-+#include "drm.h"
-+
-+#define GLAMO_GEM_DOMAIN_VRAM (0x1)
-+
-+/* Glamo specific ioctls */
-+#define DRM_GLAMO_CMDBUF 0x01
-+#define DRM_GLAMO_SWAP 0x02
-+#define DRM_GLAMO_CMDBURST 0x03
-+
-+#define DRM_GLAMO_GEM_INFO 0x1c
-+#define DRM_GLAMO_GEM_CREATE 0x1d
-+#define DRM_GLAMO_GEM_MMAP 0x1e
-+#define DRM_GLAMO_GEM_PIN 0x1f
-+#define DRM_GLAMO_GEM_UNPIN 0x20
-+#define DRM_GLAMO_GEM_PREAD 0x21
-+#define DRM_GLAMO_GEM_PWRITE 0x22
-+#define DRM_GLAMO_GEM_WAIT_RENDERING 0x24
-+
-+#define DRM_IOCTL_GLAMO_CMDBUF DRM_IOW(DRM_COMMAND_BASE + DRM_GLAMO_CMDBUF, drm_glamo_cmd_buffer_t)
-+#define DRM_IOCTL_GLAMO_SWAP DRM_IO(DRM_COMMAND_BASE + DRM_GLAMO_SWAP)
-+#define DRM_IOCTL_GLAMO_CMDBURST DRM_IOW(DRM_COMMAND_BASE + DRM_GLAMO_CMDBURST, drm_glamo_cmd_burst_t)
-+
-+#define DRM_IOCTL_GLAMO_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_INFO, struct drm_glamo_gem_info)
-+#define DRM_IOCTL_GLAMO_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_CREATE, struct drm_glamo_gem_create)
-+#define DRM_IOCTL_GLAMO_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_MMAP, struct drm_glamo_gem_mmap)
-+#define DRM_IOCTL_GLAMO_GEM_PIN DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_PIN, struct drm_glamo_gem_pin)
-+#define DRM_IOCTL_GLAMO_GEM_UNPIN DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_UNPIN, struct drm_glamo_gem_unpin)
-+#define DRM_IOCTL_GLAMO_GEM_PREAD DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_PREAD, struct drm_glamo_gem_pread)
-+#define DRM_IOCTL_GLAMO_GEM_PWRITE DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_PWRITE, struct drm_glamo_gem_pwrite)
-+#define DRM_IOCTL_GLAMO_GEM_WAIT_RENDERING DRM_IOW(DRM_COMMAND_BASE + DRM_GLAMO_GEM_WAIT_RENDERING, struct drm_glamo_gem_wait_rendering)
-+
-+
-+/* Simple command submission - a list of 16-bit address-data pairs */
-+typedef struct drm_glamo_cmd_buffer {
-+ unsigned int bufsz; /* Size of buffer, in bytes */
-+ char __user *buf; /* Buffer of stuff to go onto the ring buffer */
-+ unsigned int *obj_pos; /* Offsets (in bytes) at which to put objs */
-+ uint32_t *objs; /* List of buffer object (handles) to use */
-+ unsigned int nobjs; /* Number of objects referenced */
-+ int nbox;
-+ struct drm_clip_rect __user *boxes;
-+} drm_glamo_cmd_buffer_t;
-+
-+
-+/* Burst command submission - base address and data:
-+ * - Data can be 32-bit (more easily)
-+ * - Easier for the kernel to validate */
-+typedef struct drm_glamo_cmd_burst {
-+ uint16_t base; /* Base address (command) */
-+ int bufsz; /* Size of data, in bytes */
-+ uint16_t *data; /* Pointer to data */
-+ unsigned int *obj_pos; /* Offsets (in bytes) at which to put objs */
-+ uint32_t *objs; /* List of buffer object (handles) to use */
-+ unsigned int nobjs; /* Number of objects referenced */
-+} drm_glamo_cmd_burst_t;
-+
-+struct drm_glamo_gem_info {
-+ uint64_t vram_start;
-+ uint64_t vram_size;
-+};
-+
-+struct drm_glamo_gem_create {
-+ uint64_t size;
-+ uint64_t alignment;
-+ uint32_t handle;
-+ uint32_t initial_domain; // to allow VRAM to be created
-+ uint32_t no_backing_store;
-+};
-+
-+struct drm_glamo_gem_mmap {
-+ uint32_t handle; /* Handle goes in... */
-+ uint64_t offset; /* ...offset comes out */
-+};
-+
-+struct drm_glamo_gem_wait_rendering {
-+ uint32_t handle;
-+ int have_handle;
-+};
-+
-+struct drm_glamo_gem_pin {
-+ uint32_t handle;
-+ uint32_t pin_domain;
-+ uint64_t alignment;
-+ uint64_t offset;
-+};
-+
-+struct drm_glamo_gem_unpin {
-+ uint32_t handle;
-+ uint32_t pad;
-+};
-+
-+struct drm_glamo_gem_pread {
-+ /** Handle for the object being read. */
-+ uint32_t handle;
-+ uint32_t pad;
-+ /** Offset into the object to read from */
-+ uint64_t offset;
-+ /** Length of data to read */
-+ uint64_t size;
-+ /** Pointer to write the data into. */
-+ uint64_t data_ptr; /* void *, but pointers are not 32/64 compatible */
-+};
-+
-+struct drm_glamo_gem_pwrite {
-+ /** Handle for the object being written to. */
-+ uint32_t handle;
-+ uint32_t pad;
-+ /** Offset into the object to write to */
-+ uint64_t offset;
-+ /** Length of data to write */
-+ uint64_t size;
-+ /** Pointer to read the data from. */
-+ uint64_t data_ptr; /* void *, but pointers are not 32/64 compatible */
-+};
-+
-+#endif
---
-1.6.5.3
-
diff --git a/recipes/linux/linux-openmoko-2.6.32/0002-glamo-drm-select-DRM_KMS_HELPER-for-crtc-functions.patch b/recipes/linux/linux-openmoko-2.6.32/0002-glamo-drm-select-DRM_KMS_HELPER-for-crtc-functions.patch
deleted file mode 100644
index ddcb709b27..0000000000
--- a/recipes/linux/linux-openmoko-2.6.32/0002-glamo-drm-select-DRM_KMS_HELPER-for-crtc-functions.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 9880cfc5fe34d8be48bc8c30cb3c3188ebf11b59 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <Martin.Jansa@gmail.com>
-Date: Tue, 22 Dec 2009 16:32:57 +0100
-Subject: [PATCH 2/2] glamo-drm: select DRM_KMS_HELPER for crtc functions
-
----
- drivers/mfd/glamo/Kconfig | 1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/mfd/glamo/Kconfig b/drivers/mfd/glamo/Kconfig
-index 375e5db..cdcd3bc 100644
---- a/drivers/mfd/glamo/Kconfig
-+++ b/drivers/mfd/glamo/Kconfig
-@@ -46,6 +46,7 @@ config MFD_GLAMO_DRM
- select FB_CFB_FILLRECT
- select FB_CFB_COPYAREA
- select FB_CFB_IMAGEBLIT
-+ select DRM_KMS_HELPER
- help
- Direct Rendering Manager interface for the S-Media Glamo chip, as
- used in Openmoko FreeRunner (GTA02).
---
-1.6.6.rc4
-
diff --git a/recipes/linux/linux-openmoko-2.6.32/0003-Glamo-DRM-and-KMS-driver.patch b/recipes/linux/linux-openmoko-2.6.32/0003-Glamo-DRM-and-KMS-driver.patch
new file mode 100644
index 0000000000..6c1cc415d9
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0003-Glamo-DRM-and-KMS-driver.patch
@@ -0,0 +1,3788 @@
+From eff70b6d14cc372944bbeda0dd0afe8599327f96 Mon Sep 17 00:00:00 2001
+From: Thomas White <taw@bitwiz.org.uk>
+Date: Tue, 20 Oct 2009 16:14:55 +0200
+Subject: [PATCH 3/9] Glamo DRM and KMS driver
+
+This adds the Glamo DRM and KMS driver, but not the modifications needed
+elsewhere to support it.
+
+Signed-off-by: Thomas White <taw@bitwiz.org.uk>
+---
+ drivers/mfd/glamo/Kconfig | 15 +
+ drivers/mfd/glamo/Makefile | 5 +-
+ drivers/mfd/glamo/glamo-buffer.c | 372 ++++++++++++++
+ drivers/mfd/glamo/glamo-buffer.h | 60 +++
+ drivers/mfd/glamo/glamo-cmdq.c | 528 ++++++++++++++++++++
+ drivers/mfd/glamo/glamo-cmdq.h | 49 ++
+ drivers/mfd/glamo/glamo-display.c | 869 +++++++++++++++++++++++++++++++++
+ drivers/mfd/glamo/glamo-display.h | 39 ++
+ drivers/mfd/glamo/glamo-drm-drv.c | 444 +++++++++++++++++
+ drivers/mfd/glamo/glamo-drm-private.h | 156 ++++++
+ drivers/mfd/glamo/glamo-fence.c | 330 +++++++++++++
+ drivers/mfd/glamo/glamo-fence.h | 34 ++
+ drivers/mfd/glamo/glamo-kms-fb.c | 540 ++++++++++++++++++++
+ drivers/mfd/glamo/glamo-kms-fb.h | 41 ++
+ include/drm/Kbuild | 1 +
+ include/drm/glamo_drm.h | 153 ++++++
+ 16 files changed, 3635 insertions(+), 1 deletions(-)
+ create mode 100644 drivers/mfd/glamo/glamo-buffer.c
+ create mode 100644 drivers/mfd/glamo/glamo-buffer.h
+ create mode 100644 drivers/mfd/glamo/glamo-cmdq.c
+ create mode 100644 drivers/mfd/glamo/glamo-cmdq.h
+ create mode 100644 drivers/mfd/glamo/glamo-display.c
+ create mode 100644 drivers/mfd/glamo/glamo-display.h
+ create mode 100644 drivers/mfd/glamo/glamo-drm-drv.c
+ create mode 100644 drivers/mfd/glamo/glamo-drm-private.h
+ create mode 100644 drivers/mfd/glamo/glamo-fence.c
+ create mode 100644 drivers/mfd/glamo/glamo-fence.h
+ create mode 100644 drivers/mfd/glamo/glamo-kms-fb.c
+ create mode 100644 drivers/mfd/glamo/glamo-kms-fb.h
+ create mode 100644 include/drm/glamo_drm.h
+
+diff --git a/drivers/mfd/glamo/Kconfig b/drivers/mfd/glamo/Kconfig
+index 3aa4831..214c70e 100644
+--- a/drivers/mfd/glamo/Kconfig
++++ b/drivers/mfd/glamo/Kconfig
+@@ -40,3 +40,18 @@ config MFD_GLAMO_MCI
+ neo1973 GTA-02.
+
+ If unsure, say N.
++
++config MFD_GLAMO_DRM
++ tristate "Glamo direct rendering and kernel modesetting support"
++ depends on MFD_GLAMO && DRM
++ select FB_CFB_FILLRECT
++ select FB_CFB_COPYAREA
++ select FB_CFB_IMAGEBLIT
++ help
++ Direct Rendering Manager interface for the S-Media Glamo chip, as
++ used in Openmoko FreeRunner (GTA02).
++
++ This DRM driver includes kernel modesetting (KMS) support. As such,
++ do not select MFD_GLAMO_FB above if you choose to enable this option.
++
++ If unsure, say N.
+diff --git a/drivers/mfd/glamo/Makefile b/drivers/mfd/glamo/Makefile
+index ebf26f7..d5ebf8f 100644
+--- a/drivers/mfd/glamo/Makefile
++++ b/drivers/mfd/glamo/Makefile
+@@ -1,5 +1,5 @@
+ #
+-# Makefile for the Smedia Glamo framebuffer driver
++# Makefile for the Smedia Glamo driver(s)
+ #
+
+ obj-$(CONFIG_MFD_GLAMO) += glamo-core.o
+@@ -8,4 +8,7 @@ obj-$(CONFIG_MFD_GLAMO_SPI) += glamo-spi.o
+
+ obj-$(CONFIG_MFD_GLAMO_FB) += glamo-fb.o
+ obj-$(CONFIG_MFD_GLAMO_MCI) += glamo-mci.o
++obj-$(CONFIG_MFD_GLAMO_DRM) += glamo-drm.o
+
++glamo-drm-objs := glamo-drm-drv.o glamo-cmdq.o glamo-buffer.o \
++ glamo-display.o glamo-kms-fb.o glamo-fence.o
+diff --git a/drivers/mfd/glamo/glamo-buffer.c b/drivers/mfd/glamo/glamo-buffer.c
+new file mode 100644
+index 0000000..45500d3
+--- /dev/null
++++ b/drivers/mfd/glamo/glamo-buffer.c
+@@ -0,0 +1,372 @@
++/*
++ * SMedia Glamo 336x/337x memory management
++ *
++ * Copyright (c) 2009 Thomas White <taw@bitwiz.org.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, see <http://www.gnu.org/licenses/>.
++ *
++ *
++ * Memory mapping functions based on i915_gem.c, to which the following
++ * notice applies:
++ *
++ * Copyright © 2008 Intel Corporation
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the next
++ * paragraph) shall be included in all copies or substantial portions of the
++ * Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
++ * IN THE SOFTWARE.
++ *
++ * Authors:
++ * Eric Anholt <eric@anholt.net>
++ */
++
++
++#include <drm/drmP.h>
++#include <drm/glamo_drm.h>
++
++#include "glamo-drm-private.h"
++#include "glamo-cmdq.h" /* For glamo_cmdq_blank() */
++
++
++struct drm_gem_object *glamo_gem_object_alloc(struct drm_device *dev, int size,
++ int alignment)
++{
++ struct drm_gem_object *obj;
++ struct glamodrm_handle *gdrm;
++ struct drm_glamo_gem_object *gobj;
++
++ gdrm = dev->dev_private;
++
++ size = roundup(size, PAGE_SIZE);
++
++ obj = drm_gem_object_alloc(dev, size);
++ if (obj == NULL) return NULL;
++
++ /* See glamodrm_gem_init_object() below */
++ gobj = obj->driver_private;
++
++ /* Allocate memory for this object in VRAM */
++ gobj->block = drm_mm_search_free(gdrm->mmgr, size, alignment, 1);
++ if (!gobj->block) {
++ goto fail;
++ }
++ gobj->block = drm_mm_get_block(gobj->block, size, alignment);
++ if (!gobj->block) {
++ goto fail;
++ }
++
++ /* Arrange for the contents to be set to zero */
++ glamo_cmdq_blank(gdrm, obj);
++
++ return obj;
++
++fail:
++ mutex_lock(&dev->struct_mutex);
++ drm_gem_object_unreference(obj);
++ mutex_unlock(&dev->struct_mutex);
++ printk(KERN_INFO "[glamo-drm] Failed to allocate object\n");
++
++ return NULL;
++}
++
++
++int glamo_ioctl_gem_create(struct drm_device *dev, void *data,
++ struct drm_file *file_priv)
++{
++ struct drm_glamo_gem_create *args = data;
++ struct drm_gem_object *obj;
++ int handle, ret, alignment, size;
++
++ /* Alignment must be a non-zero multiple of 2 */
++ alignment = args->alignment;
++ if ( alignment < 2 ) alignment = 2;
++ if ( alignment % 2 ) alignment *= 2;
++
++ /* Size must be similarly sanitised */
++ size = args->size;
++ if ( size < 2 ) size = 2;
++ if ( size % 2 ) size += 1;
++
++ /* Create an object */
++ obj = glamo_gem_object_alloc(dev, size, alignment);
++ if ( obj == NULL ) return -ENOMEM;
++
++ /* Create a handle for it */
++ ret = drm_gem_handle_create(file_priv, obj, &handle);
++ mutex_lock(&dev->struct_mutex);
++ drm_gem_object_handle_unreference(obj);
++ mutex_unlock(&dev->struct_mutex);
++ if (ret) goto fail;
++
++ /* Return */
++ args->handle = handle;
++ return 0;
++
++fail:
++ mutex_lock(&dev->struct_mutex);
++ drm_gem_object_unreference(obj);
++ mutex_unlock(&dev->struct_mutex);
++ printk(KERN_INFO "[glamo-drm] Failed to allocate object\n");
++ return ret;
++}
++
++
++int glamodrm_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
++{
++ struct drm_gem_object *obj = vma->vm_private_data;
++ struct drm_device *dev = obj->dev;
++ struct drm_glamo_gem_object *gobj = obj->driver_private;
++ struct glamodrm_handle *gdrm = dev->dev_private;
++ pgoff_t page_offset;
++ unsigned long pfn;
++ int ret = 0;
++
++ /* We don't use vmf->pgoff since that has the fake offset */
++ page_offset = ((unsigned long)vmf->virtual_address - vma->vm_start) >>
++ PAGE_SHIFT;
++
++ mutex_lock(&dev->struct_mutex);
++ pfn = ((gdrm->vram->start + GLAMO_OFFSET_FB + gobj->block->start)
++ >> PAGE_SHIFT) + page_offset;
++ ret = vm_insert_pfn(vma, (unsigned long)vmf->virtual_address, pfn);
++ mutex_unlock(&dev->struct_mutex);
++
++ switch (ret) {
++ case -ENOMEM:
++ case -EAGAIN:
++ return VM_FAULT_OOM;
++ case -EFAULT:
++ case -EBUSY:
++ DRM_ERROR("can't insert pfn?? fault or busy...\n");
++ return VM_FAULT_SIGBUS;
++ default:
++ return VM_FAULT_NOPAGE;
++ }
++}
++
++
++static int glamo_gem_create_mmap_offset(struct drm_gem_object *obj)
++{
++ struct drm_device *dev = obj->dev;
++ struct drm_gem_mm *mm = dev->mm_private;
++ struct drm_glamo_gem_object *gobj = obj->driver_private;
++ struct drm_map_list *list;
++ struct drm_local_map *map;
++ int ret = 0;
++
++ /* Set the object up for mmap'ing */
++ list = &obj->map_list;
++ list->map = kzalloc(sizeof(struct drm_map_list), GFP_KERNEL);
++ if (!list->map)
++ return -ENOMEM;
++
++ map = list->map;
++ map->type = _DRM_GEM;
++ map->size = obj->size;
++ map->handle = obj;
++
++ /* Get a DRM GEM mmap offset allocated... */
++ list->file_offset_node = drm_mm_search_free(&mm->offset_manager,
++ obj->size / PAGE_SIZE, 0, 0);
++ if (!list->file_offset_node) {
++ DRM_ERROR("failed to allocate offset for bo %d\n", obj->name);
++ ret = -ENOMEM;
++ goto out_free_list;
++ }
++
++ list->file_offset_node = drm_mm_get_block(list->file_offset_node,
++ obj->size / PAGE_SIZE, 0);
++ if (!list->file_offset_node) {
++ ret = -ENOMEM;
++ goto out_free_list;
++ }
++
++ list->hash.key = list->file_offset_node->start;
++ if (drm_ht_insert_item(&mm->offset_hash, &list->hash)) {
++ DRM_ERROR("failed to add to map hash\n");
++ goto out_free_mm;
++ }
++
++ /* By now we should be all set, any drm_mmap request on the offset
++ * below will get to our mmap & fault handler */
++ gobj->mmap_offset = ((uint64_t) list->hash.key) << PAGE_SHIFT;
++
++ return 0;
++
++out_free_mm:
++ drm_mm_put_block(list->file_offset_node);
++out_free_list:
++ kfree(list->map);
++
++ return ret;
++}
++
++
++int glamo_ioctl_gem_mmap(struct drm_device *dev, void *data,
++ struct drm_file *file_priv)
++{
++ struct drm_glamo_gem_mmap *args = data;
++ struct drm_gem_object *obj;
++ struct drm_glamo_gem_object *gobj;
++ int ret;
++
++ obj = drm_gem_object_lookup(dev, file_priv, args->handle);
++ if (obj == NULL)
++ return -EBADF;
++
++ mutex_lock(&dev->struct_mutex);
++
++ gobj = obj->driver_private;
++ if (!gobj->mmap_offset) {
++ ret = glamo_gem_create_mmap_offset(obj);
++ if (ret) {
++ mutex_unlock(&dev->struct_mutex);
++ return ret;
++ }
++ }
++
++ args->offset = gobj->mmap_offset;
++
++ drm_gem_object_unreference(obj);
++ mutex_unlock(&dev->struct_mutex);
++
++ return 0;
++}
++
++
++int glamo_ioctl_gem_pin(struct drm_device *dev, void *data,
++ struct drm_file *file_priv)
++{
++ printk(KERN_INFO "glamo_ioctl_gem_pin\n");
++ return 0;
++}
++
++
++int glamo_ioctl_gem_unpin(struct drm_device *dev, void *data,
++ struct drm_file *file_priv)
++{
++ printk(KERN_INFO "glamo_ioctl_gem_unpin\n");
++ return 0;
++}
++
++
++int glamo_ioctl_gem_pread(struct drm_device *dev, void *data,
++ struct drm_file *file_priv)
++{
++ printk(KERN_INFO "glamo_ioctl_gem_pread\n");
++ return 0;
++}
++
++
++int glamo_ioctl_gem_pwrite(struct drm_device *dev, void *data,
++ struct drm_file *file_priv)
++{
++ printk(KERN_INFO "glamo_ioctl_gem_pwrite\n");
++ return 0;
++}
++
++
++int glamodrm_gem_init_object(struct drm_gem_object *obj)
++{
++ struct drm_glamo_gem_object *gobj;
++
++ /* Allocate a private structure */
++ gobj = kzalloc(sizeof(*gobj), GFP_KERNEL);
++ if (!gobj) return -ENOMEM;
++
++ obj->driver_private = gobj;
++ gobj->obj = obj;
++
++ return 0;
++}
++
++
++void glamodrm_gem_free_object(struct drm_gem_object *obj)
++{
++ struct drm_glamo_gem_object *gobj;
++ struct drm_map_list *list;
++ struct drm_device *dev;
++ struct drm_gem_mm *mm;
++ struct drm_local_map *map;
++
++ dev = obj->dev;
++ mm = dev->mm_private;
++ gobj = obj->driver_private;
++
++ /* Free the VRAM */
++ if ( gobj->block != NULL ) {
++ drm_mm_put_block(gobj->block);
++ }
++
++ /* Release mappings */
++ list = &obj->map_list;
++ drm_ht_remove_item(&mm->offset_hash, &list->hash);
++ if (list->file_offset_node) {
++ drm_mm_put_block(list->file_offset_node);
++ list->file_offset_node = NULL;
++ }
++ map = list->map;
++ if (map) {
++ kfree(map);
++ list->map = NULL;
++ }
++
++ /* Free the private structure */
++ kfree(obj->driver_private);
++}
++
++
++/* Memory management initialisation */
++int glamo_buffer_init(struct glamodrm_handle *gdrm)
++{
++ gdrm->mmgr = kzalloc(sizeof(struct drm_mm), GFP_KERNEL);
++ drm_mm_init(gdrm->mmgr, 0, gdrm->vram_size);
++
++ /* Reserve a scratch buffer. We do this outside the protections
++ * of the other GEM code. To do this safely, the allocation must
++ * be a multiple of PAGE_SIZE. */
++ gdrm->scratch = drm_mm_search_free(gdrm->mmgr, PAGE_SIZE, 4, 1);
++ if ( gdrm->scratch ) {
++ gdrm->scratch = drm_mm_get_block(gdrm->scratch, PAGE_SIZE, 4);
++ }
++ if ( !gdrm->scratch ) {
++ printk(KERN_WARNING "[glamo-drm] Couldn't allocate"
++ " scratch buffer!\n");
++ }
++
++ return 0;
++}
++
++
++/* Memory management finalisation */
++int glamo_buffer_final(struct glamodrm_handle *gdrm)
++{
++ drm_mm_takedown(gdrm->mmgr);
++ kfree(gdrm->mmgr);
++ return 0;
++}
+diff --git a/drivers/mfd/glamo/glamo-buffer.h b/drivers/mfd/glamo/glamo-buffer.h
+new file mode 100644
+index 0000000..41f18fd
+--- /dev/null
++++ b/drivers/mfd/glamo/glamo-buffer.h
+@@ -0,0 +1,60 @@
++/*
++ * SMedia Glamo 336x/337x memory management
++ *
++ * Copyright (c) 2009 Thomas White <taw@bitwiz.org.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
++ *
++ */
++
++#ifndef __GLAMO_BUFFER_H
++#define __GLAMO_BUFFER_H
++
++#include <drm/drmP.h>
++
++#include "glamo-drm-private.h"
++
++extern int glamo_buffer_init(struct glamodrm_handle *gdrm);
++extern int glamo_buffer_final(struct glamodrm_handle *gdrm);
++
++extern int glamodrm_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
++
++extern int glamodrm_gem_init_object(struct drm_gem_object *obj);
++
++extern void glamodrm_gem_free_object(struct drm_gem_object *obj);
++
++extern struct drm_gem_object *glamo_gem_object_alloc(struct drm_device *dev,
++ int size, int alignment);
++
++extern int glamo_ioctl_gem_create(struct drm_device *dev, void *data,
++ struct drm_file *file_priv);
++
++extern int glamo_ioctl_gem_mmap(struct drm_device *dev, void *data,
++ struct drm_file *file_priv);
++
++extern int glamo_ioctl_gem_pin(struct drm_device *dev, void *data,
++ struct drm_file *file_priv);
++
++extern int glamo_ioctl_gem_unpin(struct drm_device *dev, void *data,
++ struct drm_file *file_priv);
++
++extern int glamo_ioctl_gem_pread(struct drm_device *dev, void *data,
++ struct drm_file *file_priv);
++
++extern int glamo_ioctl_gem_pwrite(struct drm_device *dev, void *data,
++ struct drm_file *file_priv);
++
++#endif /* __GLAMO_BUFFER_H */
+diff --git a/drivers/mfd/glamo/glamo-cmdq.c b/drivers/mfd/glamo/glamo-cmdq.c
+new file mode 100644
+index 0000000..caedc27
+--- /dev/null
++++ b/drivers/mfd/glamo/glamo-cmdq.c
+@@ -0,0 +1,528 @@
++/*
++ * SMedia Glamo 336x/337x command queue handling
++ *
++ * Copyright (C) 2008-2009 Thomas White <taw@bitwiz.org.uk>
++ * Copyright (C) 2009 Andreas Pokorny <andreas.pokorny@gmail.com>
++ * Based on xf86-video-glamo (see below for details)
++ *
++ * All rights reserved.
++ *
++ * 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
++ *
++ * Command queue handling functions based on those from xf86-video-glamo, to
++ * which the following licence applies:
++ *
++ * Copyright 2007 OpenMoko, Inc.
++ * Copyright © 2009 Lars-Peter Clausen <lars@metafoo.de>
++ *
++ * This driver is based on Xati,
++ * Copyright 2004 Eric Anholt
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that copyright
++ * notice and this permission notice appear in supporting documentation, and
++ * that the name of the copyright holders not be used in advertising or
++ * publicity pertaining to distribution of the software without specific,
++ * written prior permission. The copyright holders make no representations
++ * about the suitability of this software for any purpose. It is provided "as
++ * is" without express or implied warranty.
++ *
++ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
++ * OF THIS SOFTWARE.
++ */
++
++
++#include <drm/drmP.h>
++#include <drm/glamo_drm.h>
++
++#include "glamo-core.h"
++#include "glamo-drm-private.h"
++#include "glamo-regs.h"
++
++
++static inline void reg_write(struct glamodrm_handle *gdrm,
++ u_int16_t reg, u_int16_t val)
++{
++ iowrite16(val, gdrm->reg_base + reg);
++}
++
++
++static inline u16 reg_read(struct glamodrm_handle *gdrm, u_int16_t reg)
++{
++ return ioread16(gdrm->reg_base + reg);
++}
++
++
++static u32 glamo_get_read(struct glamodrm_handle *gdrm)
++{
++ /* we could turn off clock here */
++ u32 ring_read = reg_read(gdrm, GLAMO_REG_CMDQ_READ_ADDRL);
++ ring_read |= (reg_read(gdrm, GLAMO_REG_CMDQ_READ_ADDRH) & 0x7) << 16;
++
++ return ring_read;
++}
++
++
++static u32 glamo_get_write(struct glamodrm_handle *gdrm)
++{
++ u32 ring_write = reg_read(gdrm, GLAMO_REG_CMDQ_WRITE_ADDRL);
++ ring_write |= (reg_read(gdrm, GLAMO_REG_CMDQ_WRITE_ADDRH) & 0x7) << 16;
++
++ return ring_write;
++}
++
++
++/* Add commands to the ring buffer */
++int glamo_add_to_ring(struct glamodrm_handle *gdrm, u16 *addr,
++ unsigned int count)
++{
++ size_t ring_write, ring_read;
++ size_t new_ring_write;
++
++ if ( count >= GLAMO_CMDQ_SIZE ) {
++ printk(KERN_WARNING "[glamo-drm] CmdQ submission too large\n");
++ return -EINVAL;
++ }
++
++ down(&gdrm->add_to_ring);
++
++ ring_write = glamo_get_write(gdrm);
++
++ /* Calculate where we'll end up */
++ new_ring_write = (ring_write + count) % GLAMO_CMDQ_SIZE;
++
++ /* Wait until there is enough space to queue the cmd buffer */
++ if (new_ring_write > ring_write) {
++ /* Loop while the read pointer is between the old and new
++ * positions */
++ do {
++ ring_read = glamo_get_read(gdrm);
++ } while (ring_read > ring_write && ring_read < new_ring_write);
++ } else {
++ /* Same, but kind of inside-out */
++ do {
++ ring_read = glamo_get_read(gdrm);
++ } while (ring_read > ring_write || ring_read < new_ring_write);
++ }
++
++ /* Are we about to wrap around? */
++ if (ring_write >= new_ring_write) {
++
++ u32 rest_size;
++
++ /* Wrap around */
++ rest_size = GLAMO_CMDQ_SIZE - ring_write; /* Space left */
++
++ /* Write from current position to end */
++ memcpy_toio(gdrm->cmdq_base+ring_write, addr, rest_size);
++
++ /* Write from start */
++ memcpy_toio(gdrm->cmdq_base, addr+(rest_size>>1),
++ count - rest_size);
++
++ /* ring_write being 0 will result in a deadlock because the
++ * cmdq read will never stop. To avoid such an behaviour insert
++ * an empty instruction. */
++ if (new_ring_write == 0) {
++ iowrite16(0x0000, gdrm->cmdq_base);
++ iowrite16(0x0000, gdrm->cmdq_base + 2);
++ new_ring_write = 4;
++ }
++
++ } else {
++
++ memcpy_toio(gdrm->cmdq_base+ring_write, addr, count);
++
++ }
++
++ reg_write(gdrm, GLAMO_REG_CMDQ_WRITE_ADDRH,
++ (new_ring_write >> 16) & 0x7f);
++ reg_write(gdrm, GLAMO_REG_CMDQ_WRITE_ADDRL,
++ new_ring_write & 0xffff);
++
++ if ( !(reg_read(gdrm, GLAMO_REG_CMDQ_STATUS) & 1<<3) ) {
++ printk(KERN_ERR "[glamo-drm] CmdQ decode failure.\n");
++ }
++
++ up(&gdrm->add_to_ring);
++
++ return 0;
++}
++
++
++/* Return true for a legal sequence of commands, otherwise false */
++static int glamo_sanitize_buffer(u16 *cmds, unsigned int count)
++{
++ /* XXX FIXME TODO: Implementation... */
++ return 1;
++}
++
++
++/* Substitute the real addresses in VRAM for any required buffer objects */
++static int glamo_do_relocation(struct glamodrm_handle *gdrm,
++ drm_glamo_cmd_buffer_t *cbuf, u16 *cmds,
++ struct drm_device *dev,
++ struct drm_file *file_priv)
++{
++ u32 *handles;
++ int *offsets;
++ int nobjs = cbuf->nobjs;
++ int i;
++
++ if ( nobjs > 32 ) return -EINVAL; /* Get real... */
++
++ handles = kmalloc(nobjs*sizeof(u32), GFP_KERNEL);
++ if ( handles == NULL ) return -1;
++ if ( copy_from_user(handles, cbuf->objs, nobjs*sizeof(u32)) )
++ return -1;
++
++ offsets = kmalloc(nobjs*sizeof(int), GFP_KERNEL);
++ if ( offsets == NULL ) return -1;
++ if ( copy_from_user(offsets, cbuf->obj_pos, nobjs*sizeof(int)) )
++ return -1;
++
++ for ( i=0; i<nobjs; i++ ) {
++
++ u32 handle = handles[i];
++ int offset = offsets[i];
++ struct drm_gem_object *obj;
++ struct drm_glamo_gem_object *gobj;
++ u32 addr;
++ u16 addr_low, addr_high;
++
++ if ( offset > cbuf->bufsz ) {
++ printk(KERN_WARNING "[glamo-drm] Offset out of range"
++ " for this relocation!\n");
++ goto fail;
++ }
++
++ obj = drm_gem_object_lookup(dev, file_priv, handle);
++ if ( obj == NULL ) return -1;
++
++ /* Unref the object now, or it'll never get freed.
++ * This should really happen after the GPU has finished
++ * the commands which are about to be submitted. */
++ drm_gem_object_unreference(obj);
++
++ gobj = obj->driver_private;
++ if ( gobj == NULL ) {
++ printk(KERN_WARNING "[glamo-drm] This object has no"
++ " private data!\n");
++ goto fail;
++ }
++
++ addr = GLAMO_OFFSET_FB + gobj->block->start;
++ addr_low = addr & 0xffff;
++ addr_high = (addr >> 16) & 0x7f;
++
++ /* FIXME: Should really check that the register is a
++ * valid one for this relocation. */
++
++ *(cmds+(offset/2)+1) = addr_low;
++ *(cmds+(offset/2)+3) = addr_high;
++
++ }
++
++ kfree(handles);
++ kfree(offsets);
++ return 0;
++
++fail:
++ kfree(handles);
++ kfree(offsets);
++ return -1;
++}
++
++
++/* This is DRM_IOCTL_GLAMO_CMDBUF */
++int glamo_ioctl_cmdbuf(struct drm_device *dev, void *data,
++ struct drm_file *file_priv)
++{
++ int ret = 0;
++ struct glamodrm_handle *gdrm;
++ unsigned int count;
++ drm_glamo_cmd_buffer_t *cbuf = data;
++ u16 *cmds;
++
++ gdrm = dev->dev_private;
++
++ count = cbuf->bufsz;
++
++ if ( count > PAGE_SIZE ) return -EINVAL;
++
++ cmds = kmalloc(count, GFP_KERNEL);
++ if ( cmds == NULL ) return -ENOMEM;
++ if ( copy_from_user(cmds, cbuf->buf, count) ) {
++ printk(KERN_WARNING "[glamo-drm] copy from user failed\n");
++ ret = -EINVAL;
++ goto cleanup;
++ }
++
++ /* Check the buffer isn't going to tell Glamo to enact naughtiness */
++ if ( !glamo_sanitize_buffer(cmds, count) ) {
++ printk(KERN_WARNING "[glamo-drm] sanitize buffer failed\n");
++ ret = -EINVAL;
++ goto cleanup;
++ }
++
++ /* Perform relocation, if necessary */
++ if ( cbuf->nobjs ) {
++ if ( glamo_do_relocation(gdrm, cbuf, cmds, dev, file_priv) )
++ {
++ printk(KERN_WARNING "[glamo-drm] Relocation failed\n");
++ ret = -EINVAL;
++ goto cleanup;
++ }
++ }
++
++ glamo_add_to_ring(gdrm, cmds, count);
++
++cleanup:
++ kfree(cmds);
++
++ return ret;
++}
++
++
++/* Return true for a legal sequence of commands, otherwise false */
++static int glamo_sanitize_burst(u16 base, u16 *cmds, unsigned int count)
++{
++ /* XXX FIXME TODO: Implementation... */
++ return 1;
++}
++
++
++static int glamo_relocate_burst(struct glamodrm_handle *gdrm,
++ drm_glamo_cmd_burst_t *cbuf, u16 *data,
++ struct drm_device *dev,
++ struct drm_file *file_priv)
++{
++ u32 *handles;
++ int *offsets;
++ int nobjs = cbuf->nobjs;
++ int i;
++
++ if ( nobjs > 32 ) return -EINVAL; /* Get real... */
++
++ handles = kmalloc(nobjs*sizeof(u32), GFP_KERNEL);
++ if ( handles == NULL ) return -1;
++ if ( copy_from_user(handles, cbuf->objs, nobjs*sizeof(u32)) )
++ return -1;
++
++ offsets = kmalloc(nobjs*sizeof(int), GFP_KERNEL);
++ if ( offsets == NULL ) return -1;
++ if ( copy_from_user(offsets, cbuf->obj_pos, nobjs*sizeof(int)) )
++ return -1;
++
++ for ( i=0; i<nobjs; i++ ) {
++
++ u32 handle = handles[i];
++ int offset = offsets[i];
++ struct drm_gem_object *obj;
++ struct drm_glamo_gem_object *gobj;
++ u32 addr;
++ u16 addr_low, addr_high;
++
++ if ( offset > cbuf->bufsz ) {
++ printk(KERN_WARNING "[glamo-drm] Offset out of range"
++ " for this relocation!\n");
++ goto fail;
++ }
++
++ obj = drm_gem_object_lookup(dev, file_priv, handle);
++ if ( obj == NULL ) return -1;
++
++ /* Unref the object now, or it'll never get freed.
++ * FIXME: This should really happen after the GPU has
++ * finished executing these commands. */
++ drm_gem_object_unreference(obj);
++
++ gobj = obj->driver_private;
++ if ( gobj == NULL ) {
++ printk(KERN_WARNING "[glamo-drm] This object has no"
++ " private data!\n");
++ goto fail;
++ }
++
++ addr = GLAMO_OFFSET_FB + gobj->block->start;
++ addr_low = addr & 0xffff;
++ addr_high = (addr >> 16) & 0x7f;
++
++ /* FIXME: Should really check that the register is a
++ * valid one for this relocation. */
++
++ *(data+(offset/2)+0) = addr_low;
++ *(data+(offset/2)+1) = addr_high;
++
++ }
++
++ kfree(handles);
++ kfree(offsets);
++ return 0;
++
++fail:
++ kfree(handles);
++ kfree(offsets);
++ return -1;
++}
++
++
++/* This is DRM_IOCTL_GLAMO_CMDBURST */
++int glamo_ioctl_cmdburst(struct drm_device *dev, void *data,
++ struct drm_file *file_priv)
++{
++ int ret = 0;
++ struct glamodrm_handle *gdrm;
++ drm_glamo_cmd_burst_t *cbuf = data;
++ u16 *burst;
++ size_t burst_size;
++ size_t data_size;
++
++ gdrm = dev->dev_private;
++
++ data_size = cbuf->bufsz;
++ if ( data_size % 4 ) data_size += 2;
++ if ( data_size % 4 ) return -EINVAL;
++ burst_size = data_size + 4; /* Add space for header */
++ if ( burst_size > PAGE_SIZE ) return -EINVAL;
++
++ burst = kmalloc(burst_size, GFP_KERNEL);
++ if ( burst == NULL ) return -ENOMEM;
++
++ /* Get data from userspace */
++ if ( copy_from_user(burst+2, cbuf->data, cbuf->bufsz) ) {
++ printk(KERN_WARNING "[glamo-drm] copy from user failed\n");
++ ret = -EINVAL;
++ goto cleanup;
++ }
++
++ /* Sanitise */
++ if ( !glamo_sanitize_burst(cbuf->base, burst+2, cbuf->bufsz) ) {
++ printk(KERN_WARNING "[glamo-drm] sanitize buffer failed\n");
++ ret = -EINVAL;
++ goto cleanup;
++ }
++
++ /* Relocate */
++ if ( cbuf->nobjs ) {
++ if ( glamo_relocate_burst(gdrm, cbuf, burst+2, dev, file_priv) )
++ {
++ printk(KERN_WARNING "[glamo-drm] Relocation failed\n");
++ ret = -EINVAL;
++ goto cleanup;
++ }
++ }
++
++ /* Add burst header */
++ burst[0] = 1<<15 | cbuf->base;
++ burst[1] = data_size / 2; /* -> 2-byte words */
++ if ( burst[1] & 0x01 ) {
++ printk(KERN_CRIT "Burst not aligned!\n");
++ goto cleanup;
++ }
++
++ /* Zero-pad if necessary */
++ if ( data_size % 4 ) {
++ burst[burst_size-1] = 0x0000;
++ }
++
++ /* Add to command queue */
++ glamo_add_to_ring(gdrm, burst, burst_size);
++
++cleanup:
++ kfree(burst);
++
++ return ret;
++}
++
++
++int glamo_cmdq_init(struct glamodrm_handle *gdrm)
++{
++ unsigned int i;
++
++ init_MUTEX(&gdrm->add_to_ring);
++
++ /* Enable 2D and 3D */
++ glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_2D);
++ glamo_engine_reset(gdrm->glamo_core, GLAMO_ENGINE_2D);
++
++ /* Start by zeroing the command queue memory */
++ for ( i=0; i<GLAMO_CMDQ_SIZE; i+=2 ) {
++ iowrite16(0x0000, gdrm->cmdq_base+i);
++ }
++
++ glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_CMDQ);
++ glamo_engine_reset(gdrm->glamo_core, GLAMO_ENGINE_CMDQ);
++
++ /* Set up command queue location */
++ reg_write(gdrm, GLAMO_REG_CMDQ_BASE_ADDRL,
++ GLAMO_OFFSET_CMDQ & 0xffff);
++ reg_write(gdrm, GLAMO_REG_CMDQ_BASE_ADDRH,
++ (GLAMO_OFFSET_CMDQ >> 16) & 0x7f);
++
++ /* Length of command queue in 1k blocks, minus one */
++ reg_write(gdrm, GLAMO_REG_CMDQ_LEN, (GLAMO_CMDQ_SIZE >> 10)-1);
++ reg_write(gdrm, GLAMO_REG_CMDQ_WRITE_ADDRH, 0);
++ reg_write(gdrm, GLAMO_REG_CMDQ_WRITE_ADDRL, 0);
++ reg_write(gdrm, GLAMO_REG_CMDQ_CONTROL,
++ 1 << 12 | /* Turbo flip (?) */
++ 5 << 8 | /* no interrupt */
++ 8 << 4); /* HQ threshold */
++
++ return 0;
++}
++
++
++int glamo_cmdq_shutdown(struct glamodrm_handle *gdrm)
++{
++ return 0;
++}
++
++
++void glamo_cmdq_suspend(struct glamodrm_handle *gdrm)
++{
++ /* Placeholder... */
++}
++
++
++void glamo_cmdq_resume(struct glamodrm_handle *gdrm)
++{
++ glamo_cmdq_init(gdrm);
++}
++
++
++/* Initialise an object's contents to zero.
++ * This is in glamo-cmdq.c in the hope that we can accelerate it later. */
++void glamo_cmdq_blank(struct glamodrm_handle *gdrm, struct drm_gem_object *obj)
++{
++ char __iomem *cookie;
++ struct drm_glamo_gem_object *gobj;
++ int i;
++
++ gobj = obj->driver_private;
++
++ cookie = ioremap(gdrm->vram->start + gobj->block->start, obj->size);
++ for ( i=0; i<obj->size; i+=2 ) {
++ iowrite16(0, cookie+i);
++ }
++ iounmap(cookie);
++}
+diff --git a/drivers/mfd/glamo/glamo-cmdq.h b/drivers/mfd/glamo/glamo-cmdq.h
+new file mode 100644
+index 0000000..510d195
+--- /dev/null
++++ b/drivers/mfd/glamo/glamo-cmdq.h
+@@ -0,0 +1,49 @@
++/* Smedia Glamo 336x/337x command queue handling
++ *
++ * Copyright (c) 2008-2009 Thomas White <taw@bitwiz.org.uk>
++ * Copyright (c) 2009 Andreas Pokorny <andreas.pokorny@gmail.com>
++ * Based on xf86-video-glamo
++ * Copyright 2007 OpenMoko, Inc.
++ * Copyright © 2009 Lars-Peter Clausen <lars@metafoo.de>
++ *
++ * All rights reserved.
++ *
++ * 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 __GLAMO_CMDQ_H
++#define __GLAMO_CMDQ_H
++
++#include <drm/drmP.h>
++
++#include "glamo-drm-private.h"
++
++extern int glamo_ioctl_cmdbuf(struct drm_device *dev, void *data,
++ struct drm_file *file_priv);
++extern int glamo_ioctl_cmdburst(struct drm_device *dev, void *data,
++ struct drm_file *file_priv);
++extern void glamo_cmdq_blank(struct glamodrm_handle *gdrm,
++ struct drm_gem_object *obj);
++
++extern int glamo_cmdq_init(struct glamodrm_handle *gdrm);
++extern int glamo_cmdq_shutdown(struct glamodrm_handle *gdrm);
++extern void glamo_cmdq_suspend(struct glamodrm_handle *gdrm);
++extern void glamo_cmdq_resume(struct glamodrm_handle *gdrm);
++
++extern int glamo_add_to_ring(struct glamodrm_handle *gdrm, u16 *addr,
++ unsigned int count);
++
++#endif /* __GLAMO_CMDQ_H */
+diff --git a/drivers/mfd/glamo/glamo-display.c b/drivers/mfd/glamo/glamo-display.c
+new file mode 100644
+index 0000000..34a665a
+--- /dev/null
++++ b/drivers/mfd/glamo/glamo-display.c
+@@ -0,0 +1,869 @@
++/*
++ * SMedia Glamo 336x/337x display
++ *
++ * Copyright (C) 2008-2009 Thomas White <taw@bitwiz.org.uk>
++ *
++ * Based on glamo-fb.c (C) 2007-2008 by Openmoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ * All rights reserved.
++ *
++ * 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
++ *
++ *
++ * Based on intel_display.c and intel_crt.c from drivers/gpu/drm/i915
++ * to which the following licence applies:
++ *
++ * Copyright © 2006-2007 Intel Corporation
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the next
++ * paragraph) shall be included in all copies or substantial portions of the
++ * Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ *
++ * Authors:
++ * Eric Anholt <eric@anholt.net>
++ *
++ */
++
++#define DEBUG 1
++
++#include <drm/drmP.h>
++#include <drm/glamo_drm.h>
++#include <drm/drm_crtc_helper.h>
++#include <drm/drm_crtc.h>
++
++#include "glamo-core.h"
++#include "glamo-drm-private.h"
++#include "glamo-regs.h"
++#include "glamo-kms-fb.h"
++#include "glamo-display.h"
++#include <linux/glamofb.h>
++
++
++#define GLAMO_LCD_WIDTH_MASK 0x03FF
++#define GLAMO_LCD_HEIGHT_MASK 0x03FF
++#define GLAMO_LCD_PITCH_MASK 0x07FE
++#define GLAMO_LCD_HV_TOTAL_MASK 0x03FF
++#define GLAMO_LCD_HV_RETR_START_MASK 0x03FF
++#define GLAMO_LCD_HV_RETR_END_MASK 0x03FF
++#define GLAMO_LCD_HV_RETR_DISP_START_MASK 0x03FF
++#define GLAMO_LCD_HV_RETR_DISP_END_MASK 0x03FF
++
++
++struct glamofb_par {
++ struct drm_device *dev;
++ struct drm_display_mode *our_mode;
++ struct glamo_framebuffer *glamo_fb;
++ int crtc_count;
++ /* crtc currently bound to this */
++ uint32_t crtc_ids[2];
++};
++
++
++static int reg_read_lcd(struct glamodrm_handle *gdrm, u_int16_t reg)
++{
++ int i = 0;
++
++ for (i = 0; i != 2; i++)
++ nop();
++
++ return ioread16(gdrm->lcd_base + reg);
++}
++
++
++static void reg_write_lcd(struct glamodrm_handle *gdrm,
++ u_int16_t reg, u_int16_t val)
++{
++ int i = 0;
++
++ for (i = 0; i != 2; i++)
++ nop();
++
++ iowrite16(val, gdrm->lcd_base + reg);
++}
++
++
++static void reg_set_bit_mask_lcd(struct glamodrm_handle *gdrm,
++ u_int16_t reg, u_int16_t mask,
++ u_int16_t val)
++{
++ u_int16_t tmp;
++
++ val &= mask;
++
++ tmp = reg_read_lcd(gdrm, reg);
++ tmp &= ~mask;
++ tmp |= val;
++ reg_write_lcd(gdrm, reg, tmp);
++}
++
++
++/* Note that this has nothing at all to do with the engine command queue
++ * in glamo-cmdq.c */
++static inline int glamo_lcd_cmdq_empty(struct glamodrm_handle *gdrm)
++{
++ /* DGCMdQempty -- 1 == command queue is empty */
++ return reg_read_lcd(gdrm, GLAMO_REG_LCD_STATUS1) & (1 << 15);
++}
++
++
++/* call holding gfb->lock_cmd when locking, until you unlock */
++int glamo_lcd_cmd_mode(struct glamodrm_handle *gdrm, int on)
++{
++ int timeout = 2000000;
++
++ dev_dbg(gdrm->dev, "glamofb_cmd_mode(on=%d)\n", on);
++ if (on) {
++
++ while ((!glamo_lcd_cmdq_empty(gdrm)) && (timeout--))
++ /* yield() */;
++ if (timeout < 0) {
++ printk(KERN_ERR "*************"
++ " LCD command queue never got empty "
++ "*************\n");
++ return -EIO;
++ }
++
++ /* display the entire frame then switch to command */
++ reg_write_lcd(gdrm, GLAMO_REG_LCD_COMMAND1,
++ GLAMO_LCD_CMD_TYPE_DISP |
++ GLAMO_LCD_CMD_DATA_FIRE_VSYNC);
++
++ /* wait until lcd idle */
++ timeout = 2000000;
++ while ((!reg_read_lcd(gdrm, GLAMO_REG_LCD_STATUS2) & (1 << 12))
++ && (timeout--))
++ /* yield() */;
++ if (timeout < 0) {
++ printk(KERN_ERR"*************"
++ " LCD never idle "
++ "*************\n");
++ return -EIO;
++ }
++
++ mdelay(100);
++
++ } else {
++ /* RGB interface needs vsync/hsync */
++ int mode;
++ mode = reg_read_lcd(gdrm, GLAMO_REG_LCD_MODE3);
++ if ( mode & GLAMO_LCD_MODE3_RGB)
++ reg_write_lcd(gdrm, GLAMO_REG_LCD_COMMAND1,
++ GLAMO_LCD_CMD_TYPE_DISP |
++ GLAMO_LCD_CMD_DATA_DISP_SYNC);
++
++ reg_write_lcd(gdrm, GLAMO_REG_LCD_COMMAND1,
++ GLAMO_LCD_CMD_TYPE_DISP |
++ GLAMO_LCD_CMD_DATA_DISP_FIRE);
++ }
++
++ return 0;
++}
++
++
++static struct glamo_script lcd_init_script[] = {
++ { GLAMO_REG_LCD_MODE1, 0x0020 },
++ /* no display rotation, no hardware cursor, no dither, no gamma,
++ * no retrace flip, vsync low-active, hsync low active,
++ * no TVCLK, no partial display, hw dest color from fb,
++ * no partial display mode, LCD1, software flip, */
++ { GLAMO_REG_LCD_MODE2, 0x9020 },
++ /* video flip, no ptr, no ptr, dhclk off,
++ * normal mode, no cpuif,
++ * res, serial msb first, single fb, no fr ctrl,
++ * cpu if bits all zero, no crc
++ * 0000 0000 0010 0000 */
++ { GLAMO_REG_LCD_MODE3, 0x0b40 },
++ /* src data rgb565, res, 18bit rgb666
++ * 000 01 011 0100 0000 */
++ { GLAMO_REG_LCD_POLARITY, 0x440c },
++ /* DE high active, no cpu/lcd if, cs0 force low, a0 low active,
++ * np cpu if, 9bit serial data, sclk rising edge latch data
++ * 01 00 0 100 0 000 01 0 0 */
++ /* The following values assume 640*480@16bpp */
++ /* FIXME: fb0 has not yet been allocated! */
++ { GLAMO_REG_LCD_A_BASE1, PAGE_SIZE }, /* display A base address 15:0 */
++ { GLAMO_REG_LCD_A_BASE2, 0x0000 }, /* display A base address 22:16 */
++ { GLAMO_REG_LCD_B_BASE1, 0x6000 }, /* display B base address 15:0 */
++ { GLAMO_REG_LCD_B_BASE2, 0x0009 }, /* display B base address 22:16 */
++ { GLAMO_REG_LCD_CURSOR_BASE1, 0xC000 }, /* cursor base address 15:0 */
++ { GLAMO_REG_LCD_CURSOR_BASE2, 0x0012 }, /* cursor base address 22:16 */
++ { GLAMO_REG_LCD_COMMAND2, 0x0000 }, /* display page A */
++};
++
++
++static int glamo_run_lcd_script(struct glamodrm_handle *gdrm,
++ struct glamo_script *script, int len)
++{
++ int i;
++
++ for (i = 0; i < len; i++) {
++ struct glamo_script *line = &script[i];
++
++ if (line->reg == 0xffff)
++ return 0;
++ else if (line->reg == 0xfffe)
++ msleep(line->val);
++ else
++ reg_write_lcd(gdrm, script[i].reg, script[i].val);
++ }
++
++ return 0;
++}
++
++
++extern void jbt6k74_action(int val);
++
++/* Power on/off */
++static void glamo_crtc_dpms(struct drm_crtc *crtc, int mode)
++{
++}
++
++
++static bool glamo_crtc_mode_fixup(struct drm_crtc *crtc,
++ struct drm_display_mode *mode,
++ struct drm_display_mode *adjusted_mode)
++{
++ return true;
++}
++
++
++static int glamo_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
++ struct drm_framebuffer *old_fb)
++{
++ struct glamodrm_handle *gdrm;
++ struct glamo_crtc *gcrtc;
++ struct glamo_framebuffer *gfb;
++ struct drm_gem_object *obj;
++ struct drm_glamo_gem_object *gobj;
++ u32 addr;
++ u16 addr_low, addr_high;
++
++ if (!crtc->fb) {
++ DRM_DEBUG("No FB bound\n");
++ return -EINVAL;
++ }
++
++ /* Dig out our handle */
++ gcrtc = to_glamo_crtc(crtc);
++ gdrm = gcrtc->gdrm; /* Here it is! */
++
++ gfb = to_glamo_framebuffer(crtc->fb);
++ obj = gfb->obj;
++ gobj = obj->driver_private;
++
++ addr = GLAMO_OFFSET_FB + gobj->block->start;
++ addr_low = addr & 0xffff;
++ addr_high = ((addr >> 16) & 0x7f) | 0x4000;
++
++ glamo_lcd_cmd_mode(gdrm, 1);
++ reg_write_lcd(gdrm, GLAMO_REG_LCD_A_BASE1, addr_low);
++ reg_write_lcd(gdrm, GLAMO_REG_LCD_A_BASE2, addr_high);
++ glamo_lcd_cmd_mode(gdrm, 0);
++
++ return 0;
++}
++
++
++static int glamo_crtc_mode_set(struct drm_crtc *crtc,
++ struct drm_display_mode *mode,
++ struct drm_display_mode *adjusted_mode,
++ int x, int y,
++ struct drm_framebuffer *old_fb)
++{
++ struct glamodrm_handle *gdrm;
++ struct glamo_crtc *gcrtc;
++ int retr_start, retr_end, disp_start, disp_end;
++
++ /* Dig out our handle */
++ gcrtc = to_glamo_crtc(crtc);
++ gdrm = gcrtc->gdrm; /* Here it is! */
++
++ glamo_lcd_cmd_mode(gdrm, 1);
++
++ glamo_engine_reclock(gdrm->glamo_core, GLAMO_ENGINE_LCD, mode->clock);
++ gdrm->saved_clock = mode->clock;
++
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_WIDTH,
++ GLAMO_LCD_WIDTH_MASK, mode->hdisplay);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HEIGHT,
++ GLAMO_LCD_HEIGHT_MASK, mode->vdisplay);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_PITCH,
++ GLAMO_LCD_PITCH_MASK, mode->hdisplay*2);
++
++ /* Convert "X modeline timings" into "Glamo timings" */
++ retr_start = 0;
++ retr_end = retr_start + mode->hsync_end - mode->hsync_start;
++ disp_start = mode->htotal - mode->hsync_start;
++ disp_end = disp_start + mode->hdisplay;
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_TOTAL,
++ GLAMO_LCD_HV_TOTAL_MASK, mode->htotal);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_START,
++ GLAMO_LCD_HV_RETR_START_MASK, retr_start);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_END,
++ GLAMO_LCD_HV_RETR_END_MASK, retr_end);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_START,
++ GLAMO_LCD_HV_RETR_DISP_START_MASK, disp_start);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_END,
++ GLAMO_LCD_HV_RETR_DISP_END_MASK, disp_end);
++
++ /* The same in the vertical direction */
++ retr_start = 0;
++ retr_end = retr_start + mode->vsync_end - mode->vsync_start;
++ disp_start = mode->vtotal - mode->vsync_start;
++ disp_end = disp_start + mode->vdisplay;
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_TOTAL,
++ GLAMO_LCD_HV_TOTAL_MASK, mode->vtotal);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_START,
++ GLAMO_LCD_HV_RETR_START_MASK, retr_start);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_END,
++ GLAMO_LCD_HV_RETR_END_MASK, retr_end);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_START,
++ GLAMO_LCD_HV_RETR_DISP_START_MASK, disp_start);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_END,
++ GLAMO_LCD_HV_RETR_DISP_END_MASK, disp_end);
++
++ glamo_lcd_cmd_mode(gdrm, 0);
++
++ glamo_crtc_mode_set_base(crtc, 0, 0, old_fb);
++
++ return 0;
++}
++
++
++static void glamo_crtc_prepare(struct drm_crtc *crtc)
++{
++}
++
++
++static void glamo_crtc_commit(struct drm_crtc *crtc)
++{
++}
++
++
++static int glamo_crtc_cursor_set(struct drm_crtc *crtc,
++ struct drm_file *file_priv,
++ uint32_t handle,
++ uint32_t width, uint32_t height)
++{
++ return 0;
++}
++
++
++static int glamo_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
++{
++ return 0;
++}
++
++
++static void glamo_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
++ u16 *blue, uint32_t size)
++{
++}
++
++
++static void glamo_crtc_destroy(struct drm_crtc *crtc)
++{
++ struct glamo_crtc *glamo_crtc = to_glamo_crtc(crtc);
++ drm_crtc_cleanup(crtc);
++ kfree(glamo_crtc);
++}
++
++
++static enum drm_connector_status
++glamo_connector_detect(struct drm_connector *connector)
++{
++ /* One hopes it hasn't been de-soldered... */
++ return connector_status_connected;
++}
++
++
++static void glamo_connector_destroy(struct drm_connector *connector)
++{
++ drm_sysfs_connector_remove(connector);
++ drm_connector_cleanup(connector);
++ kfree(connector);
++}
++
++
++static int glamo_connector_get_modes(struct drm_connector *connector)
++{
++ struct drm_display_mode *mode;
++ struct glamo_fb_platform_data *fb_info;
++ struct glamo_output *goutput = to_glamo_output(connector);
++ struct glamodrm_handle *gdrm = goutput->gdrm;
++
++ /* Dig out the record which will tell us about the hardware */
++ fb_info = gdrm->glamo_core->pdata->fb_data;
++
++ mode = drm_mode_create(connector->dev);
++ if (!mode)
++ return 0;
++ /* Fill in 'mode' here */
++ mode->type = DRM_MODE_TYPE_DEFAULT | DRM_MODE_TYPE_PREFERRED;
++
++ /* Convert framebuffer timings into KMS timings */
++ mode->clock = 1000000000UL / fb_info->modes[0].pixclock; /* ps -> kHz */
++ mode->clock *= 1000; /* kHz -> Hz */
++ mode->hdisplay = fb_info->modes[0].xres;
++ mode->hsync_start = fb_info->modes[0].right_margin + mode->hdisplay;
++ mode->hsync_end = mode->hsync_start + fb_info->modes[0].hsync_len;
++ mode->htotal = mode->hsync_end + fb_info->modes[0].left_margin;
++ mode->hskew = 0;
++
++ mode->vdisplay = fb_info->modes[0].yres;
++ mode->vsync_start = fb_info->modes[0].lower_margin + mode->vdisplay;
++ mode->vsync_end = mode->vsync_start + fb_info->modes[0].vsync_len;
++ mode->vtotal = mode->vsync_end + fb_info->modes[0].upper_margin;
++ mode->vscan = 0;
++
++ /* Physical size */
++ mode->width_mm = fb_info->width;
++ mode->height_mm = fb_info->height;
++
++ drm_mode_set_name(mode);
++ drm_mode_probed_add(connector, mode);
++
++ return 1; /* one mode, for now */
++}
++
++
++static int glamo_connector_set_property(struct drm_connector *connector,
++ struct drm_property *property,
++ uint64_t value)
++{
++ return 0;
++}
++
++
++static int glamo_connector_mode_valid(struct drm_connector *connector,
++ struct drm_display_mode *mode)
++{
++ if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
++ return MODE_NO_DBLESCAN;
++
++ return MODE_OK;
++}
++
++
++struct drm_encoder *
++glamo_connector_best_encoder(struct drm_connector *connector)
++{
++ struct glamo_output *glamo_output = to_glamo_output(connector);
++ return &glamo_output->enc;
++}
++
++
++static void glamo_encoder_dpms(struct drm_encoder *encoder, int mode)
++{
++}
++
++
++static bool glamo_encoder_mode_fixup(struct drm_encoder *encoder,
++ struct drm_display_mode *mode,
++ struct drm_display_mode *adjusted_mode)
++{
++ return true;
++}
++
++
++void glamo_encoder_prepare(struct drm_encoder *encoder)
++{
++}
++
++
++void glamo_encoder_commit(struct drm_encoder *encoder)
++{
++}
++
++
++static void glamo_encoder_mode_set(struct drm_encoder *encoder,
++ struct drm_display_mode *mode,
++ struct drm_display_mode *adjusted_mode)
++{
++}
++
++
++static void glamo_encoder_destroy(struct drm_encoder *encoder)
++{
++ drm_encoder_cleanup(encoder);
++}
++
++
++static void glamo_framebuffer_destroy(struct drm_framebuffer *fb)
++{
++ struct glamo_framebuffer *glamo_fb = to_glamo_framebuffer(fb);
++ struct drm_device *dev = fb->dev;
++
++ drm_framebuffer_cleanup(fb);
++ mutex_lock(&dev->struct_mutex);
++ drm_gem_object_unreference(glamo_fb->obj);
++ mutex_unlock(&dev->struct_mutex);
++
++ kfree(glamo_fb);
++}
++
++static int glamo_framebuffer_create_handle(struct drm_framebuffer *fb,
++ struct drm_file *file_priv,
++ unsigned int *handle)
++{
++ struct glamo_framebuffer *glamo_fb = to_glamo_framebuffer(fb);
++ struct drm_gem_object *object = glamo_fb->obj;
++
++ return drm_gem_handle_create(file_priv, object, handle);
++}
++
++
++static const struct drm_framebuffer_funcs glamo_fb_funcs = {
++ .destroy = glamo_framebuffer_destroy,
++ .create_handle = glamo_framebuffer_create_handle,
++};
++
++
++int glamo_framebuffer_create(struct drm_device *dev,
++ struct drm_mode_fb_cmd *mode_cmd,
++ struct drm_framebuffer **fb,
++ struct drm_gem_object *obj)
++{
++ struct glamo_framebuffer *glamo_fb;
++ int ret;
++
++ glamo_fb = kzalloc(sizeof(*glamo_fb), GFP_KERNEL);
++ if (!glamo_fb)
++ return -ENOMEM;
++
++ ret = drm_framebuffer_init(dev, &glamo_fb->base, &glamo_fb_funcs);
++ if (ret) {
++ DRM_ERROR("framebuffer init failed %d\n", ret);
++ return ret;
++ }
++
++ drm_helper_mode_fill_fb_struct(&glamo_fb->base, mode_cmd);
++
++ glamo_fb->obj = obj;
++
++ *fb = &glamo_fb->base;
++
++ return 0;
++}
++
++
++static struct drm_framebuffer *
++glamo_user_framebuffer_create(struct drm_device *dev,
++ struct drm_file *filp,
++ struct drm_mode_fb_cmd *mode_cmd)
++{
++ struct drm_gem_object *obj;
++ struct drm_framebuffer *fb;
++ int ret;
++
++ obj = drm_gem_object_lookup(dev, filp, mode_cmd->handle);
++ if (!obj)
++ return NULL;
++
++ ret = glamo_framebuffer_create(dev, mode_cmd, &fb, obj);
++ if (ret) {
++ drm_gem_object_unreference(obj);
++ return NULL;
++ }
++
++ return fb;
++}
++
++
++int glamo_fbchanged(struct drm_device *dev)
++{
++ return 0;
++}
++
++
++/* CRTC functions */
++static const struct drm_crtc_funcs glamo_crtc_funcs = {
++ .cursor_set = glamo_crtc_cursor_set,
++ .cursor_move = glamo_crtc_cursor_move,
++ .gamma_set = glamo_crtc_gamma_set,
++ .set_config = drm_crtc_helper_set_config,
++ .destroy = glamo_crtc_destroy,
++};
++
++
++/* CRTC helper functions */
++static const struct drm_crtc_helper_funcs glamo_crtc_helper_funcs = {
++ .dpms = glamo_crtc_dpms,
++ .mode_fixup = glamo_crtc_mode_fixup,
++ .mode_set = glamo_crtc_mode_set,
++ .mode_set_base = glamo_crtc_mode_set_base,
++ .prepare = glamo_crtc_prepare,
++ .commit = glamo_crtc_commit,
++};
++
++
++/* Connector functions */
++static const struct drm_connector_funcs glamo_connector_funcs = {
++ .detect = glamo_connector_detect,
++ .fill_modes = drm_helper_probe_single_connector_modes,
++ .destroy = glamo_connector_destroy,
++ .set_property = glamo_connector_set_property,
++};
++
++
++/* Connector helper functions */
++static const struct drm_connector_helper_funcs glamo_connector_helper_funcs = {
++ .mode_valid = glamo_connector_mode_valid,
++ .get_modes = glamo_connector_get_modes,
++ .best_encoder = glamo_connector_best_encoder,
++};
++
++
++/* Encoder functions */
++static const struct drm_encoder_funcs glamo_encoder_funcs = {
++ .destroy = glamo_encoder_destroy,
++};
++
++
++/* Encoder helper functions */
++static const struct drm_encoder_helper_funcs glamo_encoder_helper_funcs = {
++ .dpms = glamo_encoder_dpms,
++ .mode_fixup = glamo_encoder_mode_fixup,
++ .prepare = glamo_encoder_prepare,
++ .commit = glamo_encoder_commit,
++ .mode_set = glamo_encoder_mode_set,
++};
++
++
++/* Mode functions */
++static const struct drm_mode_config_funcs glamo_mode_funcs = {
++ .fb_create = glamo_user_framebuffer_create,
++ .fb_changed = glamo_fbchanged
++};
++
++
++static struct drm_mode_set kernelfb_mode;
++
++
++/* Restore's the kernel's fbcon mode, used for panic path */
++void glamo_display_restore(void)
++{
++ drm_crtc_helper_set_config(&kernelfb_mode);
++}
++
++
++static int glamo_display_panic(struct notifier_block *n, unsigned long ununsed,
++ void *panic_str)
++{
++ DRM_ERROR("panic occurred, switching back to text console\n");
++
++ glamo_display_restore();
++ return 0;
++}
++
++
++static struct notifier_block paniced = {
++ .notifier_call = glamo_display_panic,
++};
++
++
++int glamo_display_init(struct drm_device *dev)
++{
++ struct glamodrm_handle *gdrm;
++ struct glamo_crtc *glamo_crtc;
++ struct glamo_output *glamo_output;
++ struct drm_connector *connector;
++ struct glamo_framebuffer *glamo_fb;
++ struct fb_info *info;
++ struct glamofb_par *par;
++ struct drm_mode_set *modeset;
++
++ gdrm = dev->dev_private;
++
++ /* Initial setup of the LCD controller */
++ glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_LCD);
++ glamo_engine_reset(gdrm->glamo_core, GLAMO_ENGINE_LCD);
++
++ glamo_run_lcd_script(gdrm, lcd_init_script,
++ ARRAY_SIZE(lcd_init_script));
++
++ drm_mode_config_init(dev);
++
++ dev->mode_config.min_width = 240;
++ dev->mode_config.min_height = 320;
++ dev->mode_config.max_width = 480;
++ dev->mode_config.max_height = 640;
++
++ dev->mode_config.funcs = (void *)&glamo_mode_funcs;
++
++ /* Initialise our CRTC object.
++ * Only one connector per CRTC. We know this: it's kind of soldered. */
++ glamo_crtc = kzalloc(sizeof(struct glamo_crtc)
++ + sizeof(struct drm_connector *), GFP_KERNEL);
++ if (glamo_crtc == NULL) return 1;
++ glamo_crtc->gdrm = gdrm;
++ glamo_crtc->blank_mode = DRM_MODE_DPMS_OFF;
++ drm_crtc_init(dev, &glamo_crtc->base, &glamo_crtc_funcs);
++ drm_crtc_helper_add(&glamo_crtc->base, &glamo_crtc_helper_funcs);
++
++ glamo_crtc->mode_set.crtc = &glamo_crtc->base;
++ glamo_crtc->mode_set.connectors =
++ (struct drm_connector **)(glamo_crtc + 1);
++ glamo_crtc->mode_set.num_connectors = 0;
++
++ /* Create our "output" object: consists of an output and an encoder */
++ glamo_output = kzalloc(sizeof(struct glamo_output), GFP_KERNEL);
++ if (glamo_output == NULL) return 1;
++ connector = &glamo_output->base;
++ glamo_output->gdrm = gdrm;
++
++ /* Initialise the connector */
++ drm_connector_init(dev, connector, &glamo_connector_funcs,
++ DRM_MODE_CONNECTOR_Unknown);
++ drm_sysfs_connector_add(connector);
++ connector->interlace_allowed = 0;
++ connector->doublescan_allowed = 0;
++
++ /* Initialise the encoder */
++ drm_encoder_init(dev, &glamo_output->enc, &glamo_encoder_funcs,
++ DRM_MODE_ENCODER_DAC);
++ glamo_output->enc.possible_crtcs = 1 << 0;
++ drm_mode_connector_attach_encoder(&glamo_output->base,
++ &glamo_output->enc);
++
++ drm_encoder_helper_add(&glamo_output->enc, &glamo_encoder_helper_funcs);
++ drm_connector_helper_add(connector, &glamo_connector_helper_funcs);
++
++ drm_helper_initial_config(dev);
++
++ if (list_empty(&dev->mode_config.fb_kernel_list)) {
++ int ret, cols, cols_g;
++ cols_g = reg_read_lcd(gdrm, GLAMO_REG_LCD_MODE3) & 0xc000;
++ switch ( cols_g ) {
++ case GLAMO_LCD_SRC_RGB565 :
++ cols = GLAMO_FB_RGB565; break;
++ case GLAMO_LCD_SRC_ARGB1555 :
++ cols = GLAMO_FB_ARGB1555; break;
++ case GLAMO_LCD_SRC_ARGB4444 :
++ cols = GLAMO_FB_ARGB4444; break;
++ default :
++ printk(KERN_WARNING "Unrecognised LCD colour mode\n");
++ cols = GLAMO_FB_RGB565; break; /* Take a guess */
++ }
++ ret = glamofb_create(dev, 480, 640, 480, 640, cols, &glamo_fb);
++ if (ret) return -EINVAL;
++ }
++
++ info = glamo_fb->base.fbdev;
++ par = info->par;
++
++ modeset = &glamo_crtc->mode_set;
++ modeset->fb = &glamo_fb->base;
++ modeset->connectors[0] = connector;
++
++ par->crtc_ids[0] = glamo_crtc->base.base.id;
++
++ modeset->num_connectors = 1;
++ modeset->mode = modeset->crtc->desired_mode;
++
++ par->crtc_count = 1;
++
++ if (register_framebuffer(info) < 0)
++ return -EINVAL;
++
++ printk(KERN_INFO "[glamo-drm] fb%d: %s frame buffer device\n",
++ info->node, info->fix.id);
++
++ /* Switch back to kernel console on panic */
++ kernelfb_mode = *modeset;
++ atomic_notifier_chain_register(&panic_notifier_list, &paniced);
++ printk(KERN_INFO "[glamo-drm] Registered panic notifier\n");
++
++ return 0;
++}
++
++
++void glamo_display_suspend(struct glamodrm_handle *gdrm)
++{
++ gdrm->saved_width = reg_read_lcd(gdrm, GLAMO_REG_LCD_WIDTH);
++ gdrm->saved_height = reg_read_lcd(gdrm, GLAMO_REG_LCD_HEIGHT);
++ gdrm->saved_pitch = reg_read_lcd(gdrm, GLAMO_REG_LCD_PITCH);
++ gdrm->saved_htotal = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_TOTAL);
++ gdrm->saved_hrtrst = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_START);
++ gdrm->saved_hrtren = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_END);
++ gdrm->saved_hdspst = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_START);
++ gdrm->saved_hdspen = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_END);
++ gdrm->saved_vtotal = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_TOTAL);
++ gdrm->saved_vrtrst = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_START);
++ gdrm->saved_vrtren = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_END);
++ gdrm->saved_vdspst = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_START);
++ gdrm->saved_vdspen = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_END);
++}
++
++
++void glamo_display_resume(struct glamodrm_handle *gdrm)
++{
++ glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_LCD);
++ glamo_engine_reset(gdrm->glamo_core, GLAMO_ENGINE_LCD);
++ glamo_run_lcd_script(gdrm, lcd_init_script,
++ ARRAY_SIZE(lcd_init_script));
++
++ /* Restore timings */
++ glamo_lcd_cmd_mode(gdrm, 1);
++ glamo_engine_reclock(gdrm->glamo_core, GLAMO_ENGINE_LCD,
++ gdrm->saved_clock);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_WIDTH, GLAMO_LCD_WIDTH_MASK,
++ gdrm->saved_width);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HEIGHT, GLAMO_LCD_HEIGHT_MASK,
++ gdrm->saved_height);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_PITCH, GLAMO_LCD_PITCH_MASK,
++ gdrm->saved_pitch);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_TOTAL,
++ GLAMO_LCD_HV_TOTAL_MASK, gdrm->saved_htotal);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_START,
++ GLAMO_LCD_HV_RETR_START_MASK, gdrm->saved_hrtrst);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_END,
++ GLAMO_LCD_HV_RETR_END_MASK, gdrm->saved_hrtren);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_START,
++ GLAMO_LCD_HV_RETR_DISP_START_MASK,
++ gdrm->saved_hdspst);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_END,
++ GLAMO_LCD_HV_RETR_DISP_END_MASK,
++ gdrm->saved_hdspen);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_TOTAL,
++ GLAMO_LCD_HV_TOTAL_MASK, gdrm->saved_vtotal);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_START,
++ GLAMO_LCD_HV_RETR_START_MASK, gdrm->saved_vrtrst);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_END,
++ GLAMO_LCD_HV_RETR_END_MASK, gdrm->saved_vrtren);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_START,
++ GLAMO_LCD_HV_RETR_DISP_START_MASK,
++ gdrm->saved_vdspst);
++ reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_END,
++ GLAMO_LCD_HV_RETR_DISP_END_MASK,
++ gdrm->saved_vdspen);
++ glamo_lcd_cmd_mode(gdrm, 0);
++}
+diff --git a/drivers/mfd/glamo/glamo-display.h b/drivers/mfd/glamo/glamo-display.h
+new file mode 100644
+index 0000000..d6f21bc
+--- /dev/null
++++ b/drivers/mfd/glamo/glamo-display.h
+@@ -0,0 +1,39 @@
++/* Smedia Glamo 336x/337x Display
++ *
++ * Copyright (c) 2008-2009 Thomas White <taw@bitwiz.org.uk>
++ *
++ * All rights reserved.
++ *
++ * 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 __GLAMO_DISPLAY_H
++#define __GLAMO_DISPLAY_H
++
++#include <drm/drmP.h>
++#include "glamo-drm-private.h"
++
++extern int glamo_display_init(struct drm_device *dev);
++
++extern int glamo_framebuffer_create(struct drm_device *dev,
++ struct drm_mode_fb_cmd *mode_cmd,
++ struct drm_framebuffer **fb,
++ struct drm_gem_object *obj);
++
++extern void glamo_display_suspend(struct glamodrm_handle *gdrm);
++extern void glamo_display_resume(struct glamodrm_handle *gdrm);
++
++#endif /* __GLAMO_DISPLAY_H */
+diff --git a/drivers/mfd/glamo/glamo-drm-drv.c b/drivers/mfd/glamo/glamo-drm-drv.c
+new file mode 100644
+index 0000000..f30097e
+--- /dev/null
++++ b/drivers/mfd/glamo/glamo-drm-drv.c
+@@ -0,0 +1,444 @@
++/* Smedia Glamo 336x/337x Graphics Driver
++ *
++ * Copyright (C) 2009 Openmoko, Inc. Jorge Luis Zapata <turran@openmoko.com>
++ * Copyright (C) 2008-2009 Thomas White <taw@bitwiz.org.uk>
++ * Copyright (C) 2009 Andreas Pokorny <andreas.pokorny@gmail.com>
++ *
++ * All rights reserved.
++ *
++ * 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
++ */
++
++
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <drm/drmP.h>
++#include <drm/glamo_drm.h>
++#include <linux/glamofb.h>
++
++#include "glamo-core.h"
++#include "glamo-cmdq.h"
++#include "glamo-buffer.h"
++#include "glamo-drm-private.h"
++#include "glamo-display.h"
++#include "glamo-kms-fb.h"
++#include "glamo-fence.h"
++
++#define DRIVER_AUTHOR "Openmoko, Inc."
++#define DRIVER_NAME "glamo-drm"
++#define DRIVER_DESC "SMedia Glamo 3362"
++#define DRIVER_DATE "20090614"
++
++
++static int glamo_ioctl_swap(struct drm_device *dev, void *data,
++ struct drm_file *file_priv)
++{
++ printk(KERN_INFO "glamo_ioctl_swap\n");
++ return 0;
++}
++
++
++static int glamo_ioctl_gem_info(struct drm_device *dev, void *data,
++ struct drm_file *file_priv)
++{
++ printk(KERN_INFO "glamo_ioctl_gem_info\n");
++ return 0;
++}
++
++
++struct drm_ioctl_desc glamo_ioctls[] = {
++ DRM_IOCTL_DEF(DRM_GLAMO_CMDBUF, glamo_ioctl_cmdbuf, DRM_AUTH),
++ DRM_IOCTL_DEF(DRM_GLAMO_SWAP, glamo_ioctl_swap, DRM_AUTH),
++ DRM_IOCTL_DEF(DRM_GLAMO_CMDBURST, glamo_ioctl_cmdburst, DRM_AUTH),
++ DRM_IOCTL_DEF(DRM_GLAMO_GEM_INFO, glamo_ioctl_gem_info, DRM_AUTH),
++ DRM_IOCTL_DEF(DRM_GLAMO_GEM_CREATE, glamo_ioctl_gem_create, DRM_AUTH),
++ DRM_IOCTL_DEF(DRM_GLAMO_GEM_MMAP, glamo_ioctl_gem_mmap, DRM_AUTH),
++ DRM_IOCTL_DEF(DRM_GLAMO_GEM_PIN, glamo_ioctl_gem_pin, DRM_AUTH),
++ DRM_IOCTL_DEF(DRM_GLAMO_GEM_UNPIN, glamo_ioctl_gem_unpin, DRM_AUTH),
++ DRM_IOCTL_DEF(DRM_GLAMO_GEM_PREAD, glamo_ioctl_gem_pread, DRM_AUTH),
++ DRM_IOCTL_DEF(DRM_GLAMO_GEM_PWRITE, glamo_ioctl_gem_pwrite, DRM_AUTH),
++ DRM_IOCTL_DEF(DRM_GLAMO_GEM_WAIT_RENDERING,
++ glamo_ioctl_wait_rendering, DRM_AUTH),
++};
++
++
++static int glamodrm_firstopen(struct drm_device *dev)
++{
++ DRM_DEBUG("\n");
++ return 0;
++}
++
++
++static int glamodrm_open(struct drm_device *dev, struct drm_file *fh)
++{
++ DRM_DEBUG("\n");
++ return 0;
++}
++
++
++static void glamodrm_preclose(struct drm_device *dev, struct drm_file *fh)
++{
++ DRM_DEBUG("\n");
++}
++
++static void glamodrm_postclose(struct drm_device *dev, struct drm_file *fh)
++{
++ DRM_DEBUG("\n");
++}
++
++
++static void glamodrm_lastclose(struct drm_device *dev)
++{
++ DRM_DEBUG("\n");
++}
++
++
++static int glamodrm_master_create(struct drm_device *dev,
++ struct drm_master *master)
++{
++ DRM_DEBUG("\n");
++
++ return 0;
++}
++
++
++static void glamodrm_master_destroy(struct drm_device *dev,
++ struct drm_master *master)
++{
++ DRM_DEBUG("\n");
++}
++
++
++static int glamodrm_load(struct drm_device *dev, unsigned long flags)
++{
++ struct glamodrm_handle *gdrm;
++ gdrm = dev->dev_private;
++
++ glamo_buffer_init(gdrm);
++ glamo_cmdq_init(gdrm);
++ glamo_fence_init(gdrm);
++ glamo_display_init(dev);
++
++ return 0;
++}
++
++
++static int glamodrm_unload(struct drm_device *dev)
++{
++ struct glamodrm_handle *gdrm;
++
++ gdrm = dev->dev_private;
++
++ glamo_engine_disable(gdrm->glamo_core, GLAMO_ENGINE_2D);
++ glamo_engine_disable(gdrm->glamo_core, GLAMO_ENGINE_3D);
++ glamo_buffer_final(gdrm);
++ glamo_fence_shutdown(gdrm);
++
++ return 0;
++}
++
++
++static struct vm_operations_struct glamodrm_gem_vm_ops = {
++ .fault = glamodrm_gem_fault,
++};
++
++static struct drm_driver glamodrm_drm_driver = {
++ .driver_features = DRIVER_IS_PLATFORM | DRIVER_GEM | DRIVER_MODESET,
++ .firstopen = glamodrm_firstopen,
++ .load = glamodrm_load,
++ .unload = glamodrm_unload,
++ .open = glamodrm_open,
++ .preclose = glamodrm_preclose,
++ .postclose = glamodrm_postclose,
++ .lastclose = glamodrm_lastclose,
++ .reclaim_buffers = drm_core_reclaim_buffers,
++ .get_map_ofs = drm_core_get_map_ofs,
++ .get_reg_ofs = drm_core_get_reg_ofs,
++ .master_create = glamodrm_master_create,
++ .master_destroy = glamodrm_master_destroy,
++ .gem_init_object = glamodrm_gem_init_object,
++ .gem_free_object = glamodrm_gem_free_object,
++ .gem_vm_ops = &glamodrm_gem_vm_ops,
++ .ioctls = glamo_ioctls,
++ .fops = {
++ .owner = THIS_MODULE,
++ .open = drm_open,
++ .release = drm_release,
++ .ioctl = drm_ioctl,
++ .mmap = drm_gem_mmap,
++ .poll = drm_poll,
++ .fasync = drm_fasync,
++ },
++ .major = 0,
++ .minor = 1,
++ .patchlevel = 0,
++ .name = DRIVER_NAME,
++ .desc = DRIVER_DESC,
++ .date = DRIVER_DATE,
++};
++
++
++static int glamodrm_probe(struct platform_device *pdev)
++{
++ int rc;
++ struct glamodrm_handle *gdrm;
++ struct glamo_core *core = dev_get_drvdata(pdev->dev.parent);
++
++ printk(KERN_INFO "[glamo-drm] SMedia Glamo Direct Rendering Support\n");
++
++ gdrm = kzalloc(sizeof(*gdrm), GFP_KERNEL);
++ if ( !gdrm )
++ return -ENOMEM;
++ platform_set_drvdata(pdev, gdrm);
++ gdrm->glamo_core = core;
++ gdrm->dev = &pdev->dev;
++
++ /* Find the command queue registers */
++ gdrm->reg = platform_get_resource_byname(pdev, IORESOURCE_MEM,
++ "glamo-cmdq-regs");
++ if ( !gdrm->reg ) {
++ dev_err(&pdev->dev, "Unable to find cmdq registers.\n");
++ rc = -ENOENT;
++ goto out_free;
++ }
++ gdrm->reg = request_mem_region(gdrm->reg->start,
++ resource_size(gdrm->reg), pdev->name);
++ if ( !gdrm->reg ) {
++ dev_err(&pdev->dev, "failed to request MMIO region\n");
++ rc = -ENOENT;
++ goto out_free;
++ }
++ gdrm->reg_base = ioremap_nocache(gdrm->reg->start,
++ resource_size(gdrm->reg));
++ if ( !gdrm->reg_base ) {
++ dev_err(&pdev->dev, "failed to ioremap() MMIO registers\n");
++ rc = -ENOENT;
++ goto out_release_regs;
++ }
++
++ /* Find the command queue itself */
++ gdrm->cmdq = platform_get_resource_byname(pdev, IORESOURCE_MEM,
++ "glamo-command-queue");
++ if ( !gdrm->cmdq ) {
++ dev_err(&pdev->dev, "Unable to find command queue.\n");
++ rc = -ENOENT;
++ goto out_unmap_regs;
++ }
++ gdrm->cmdq = request_mem_region(gdrm->cmdq->start,
++ resource_size(gdrm->cmdq), pdev->name);
++ if ( !gdrm->cmdq ) {
++ dev_err(&pdev->dev, "failed to request command queue region\n");
++ rc = -ENOENT;
++ goto out_unmap_regs;
++ }
++ gdrm->cmdq_base = ioremap_nocache(gdrm->cmdq->start,
++ resource_size(gdrm->cmdq));
++ if ( !gdrm->cmdq_base ) {
++ dev_err(&pdev->dev, "failed to ioremap() command queue\n");
++ rc = -ENOENT;
++ goto out_release_cmdq;
++ }
++
++ /* Find the VRAM */
++ gdrm->vram = platform_get_resource_byname(pdev, IORESOURCE_MEM,
++ "glamo-fb-mem");
++ if ( !gdrm->vram ) {
++ dev_err(&pdev->dev, "Unable to find VRAM.\n");
++ rc = -ENOENT;
++ goto out_unmap_cmdq;
++ }
++ gdrm->vram = request_mem_region(gdrm->vram->start,
++ resource_size(gdrm->vram), pdev->name);
++ if ( !gdrm->vram ) {
++ dev_err(&pdev->dev, "failed to request VRAM region\n");
++ rc = -ENOENT;
++ goto out_unmap_cmdq;
++ }
++
++ /* Find the LCD controller */
++ gdrm->lcd_regs = platform_get_resource_byname(pdev, IORESOURCE_MEM,
++ "glamo-fb-regs");
++ if ( !gdrm->lcd_regs ) {
++ dev_err(&pdev->dev, "Unable to find LCD registers.\n");
++ rc = -ENOENT;
++ goto out_release_vram;
++ }
++ gdrm->lcd_regs = request_mem_region(gdrm->lcd_regs->start,
++ resource_size(gdrm->lcd_regs),
++ pdev->name);
++ if ( !gdrm->lcd_regs ) {
++ dev_err(&pdev->dev, "failed to request LCD registers\n");
++ rc = -ENOENT;
++ goto out_release_vram;
++ }
++ gdrm->lcd_base = ioremap_nocache(gdrm->lcd_regs->start,
++ resource_size(gdrm->lcd_regs));
++ if ( !gdrm->lcd_base ) {
++ dev_err(&pdev->dev, "failed to ioremap() LCD registers\n");
++ rc = -ENOENT;
++ goto out_release_lcd;
++ }
++
++ /* Find the 2D engine */
++ gdrm->twod_regs = platform_get_resource(pdev, IORESOURCE_MEM, 4);
++ if ( !gdrm->twod_regs ) {
++ dev_err(&pdev->dev, "Unable to find 2D registers.\n");
++ rc = -ENOENT;
++ goto out_unmap_lcd;
++ }
++ gdrm->twod_regs = request_mem_region(gdrm->twod_regs->start,
++ resource_size(gdrm->twod_regs),
++ pdev->name);
++ if ( !gdrm->twod_regs ) {
++ dev_err(&pdev->dev, "failed to request 2D registers\n");
++ rc = -ENOENT;
++ goto out_unmap_lcd;
++ }
++ gdrm->twod_base = ioremap(gdrm->twod_regs->start,
++ resource_size(gdrm->twod_regs));
++ if ( !gdrm->twod_base ) {
++ dev_err(&pdev->dev, "failed to ioremap() 2D registers\n");
++ rc = -ENOENT;
++ goto out_release_2d;
++ }
++
++ /* Hook up IRQ handle for fence processing */
++ gdrm->twod_irq = platform_get_irq_byname(pdev, "glamo-2d-irq");
++
++ gdrm->vram_size = GLAMO_FB_SIZE;
++ printk(KERN_INFO "[glamo-drm] %lli bytes of VRAM\n",
++ (long long int)gdrm->vram_size);
++
++ /* Initialise DRM */
++ drm_platform_init(&glamodrm_drm_driver, pdev, (void *)gdrm);
++
++ return 0;
++
++out_release_2d:
++ release_mem_region(gdrm->twod_regs->start,
++ resource_size(gdrm->twod_regs));
++out_unmap_lcd:
++ iounmap(gdrm->lcd_base);
++out_release_lcd:
++ release_mem_region(gdrm->lcd_regs->start,
++ resource_size(gdrm->lcd_regs));
++out_release_vram:
++ release_mem_region(gdrm->vram->start, resource_size(gdrm->vram));
++out_unmap_cmdq:
++ iounmap(gdrm->cmdq_base);
++out_release_cmdq:
++ release_mem_region(gdrm->cmdq->start, resource_size(gdrm->cmdq));
++out_unmap_regs:
++ iounmap(gdrm->reg_base);
++out_release_regs:
++ release_mem_region(gdrm->reg->start, resource_size(gdrm->reg));
++out_free:
++ kfree(gdrm);
++ pdev->dev.driver_data = NULL;
++ return rc;
++}
++
++
++static int glamodrm_remove(struct platform_device *pdev)
++{
++ struct glamodrm_handle *gdrm = platform_get_drvdata(pdev);
++
++ glamo_buffer_final(gdrm);
++ glamo_cmdq_shutdown(gdrm);
++
++ drm_exit(&glamodrm_drm_driver);
++
++ platform_set_drvdata(pdev, NULL);
++
++ /* Release registers */
++ iounmap(gdrm->reg_base);
++ release_mem_region(gdrm->reg->start, resource_size(gdrm->reg));
++
++ /* Release VRAM */
++ release_mem_region(gdrm->vram->start, resource_size(gdrm->vram));
++
++ /* Release command queue */
++ iounmap(gdrm->cmdq_base);
++ release_mem_region(gdrm->cmdq->start, resource_size(gdrm->cmdq));
++
++ /* Release 2D engine */
++ iounmap(gdrm->twod_base);
++ release_mem_region(gdrm->twod_regs->start,
++ resource_size(gdrm->twod_regs));
++
++ kfree(gdrm);
++
++ return 0;
++}
++
++
++static int glamodrm_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ struct glamodrm_handle *gdrm = platform_get_drvdata(pdev);
++
++ glamo_kmsfb_suspend(gdrm);
++ glamo_display_suspend(gdrm);
++ glamo_cmdq_suspend(gdrm);
++
++ /* glamo_core.c will suspend the engines for us */
++
++ return 0;
++}
++
++
++static int glamodrm_resume(struct platform_device *pdev)
++{
++ struct glamodrm_handle *gdrm = platform_get_drvdata(pdev);
++
++ glamo_cmdq_resume(gdrm);
++ glamo_display_resume(gdrm);
++ glamo_kmsfb_resume(gdrm);
++
++ return 0;
++}
++
++
++static struct platform_driver glamodrm_driver = {
++ .probe = glamodrm_probe,
++ .remove = glamodrm_remove,
++ .suspend = glamodrm_suspend,
++ .resume = glamodrm_resume,
++ .driver = {
++ .name = "glamo-fb",
++ .owner = THIS_MODULE,
++ },
++};
++
++
++static int __devinit glamodrm_init(void)
++{
++ glamodrm_drm_driver.num_ioctls = DRM_ARRAY_SIZE(glamo_ioctls);
++ return platform_driver_register(&glamodrm_driver);
++}
++
++
++static void __exit glamodrm_exit(void)
++{
++ platform_driver_unregister(&glamodrm_driver);
++}
++
++
++module_init(glamodrm_init);
++module_exit(glamodrm_exit);
++
++MODULE_AUTHOR(DRIVER_AUTHOR);
++MODULE_DESCRIPTION(DRIVER_DESC);
++MODULE_LICENSE("GPL");
+diff --git a/drivers/mfd/glamo/glamo-drm-private.h b/drivers/mfd/glamo/glamo-drm-private.h
+new file mode 100644
+index 0000000..7949a2e
+--- /dev/null
++++ b/drivers/mfd/glamo/glamo-drm-private.h
+@@ -0,0 +1,156 @@
++/* Smedia Glamo 336x/337x DRM private bits
++ *
++ * Copyright (C) 2008-2009 Thomas White <taw@bitwiz.org.uk>
++ * Copyright (C) 2009 Andreas Pokorny <andreas.pokorny@gmail.com>
++ * Based on xf86-video-glamo
++ * Copyright 2007 OpenMoko, Inc.
++ * Copyright © 2009 Lars-Peter Clausen <lars@metafoo.de>
++ *
++ * All rights reserved.
++ *
++ * 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 __GLAMO_DRMPRIV_H
++#define __GLAMO_DRMPRIV_H
++
++
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/semaphore.h>
++#include <linux/spinlock.h>
++#include <linux/wait.h>
++
++#include "glamo-core.h"
++
++
++/* Memory to allocate for the framebuffer.
++ * The rest is reserved for the DRM memory manager */
++#define GLAMO_FRAMEBUFFER_ALLOCATION (2*480*640)
++
++
++struct glamodrm_handle {
++
++ /* This device */
++ struct device *dev;
++
++ /* The parent device handle */
++ struct glamo_core *glamo_core;
++
++ /* Framebuffer handle for the console (i.e. /dev/fb0) */
++ struct fb_info *fb;
++
++ /* Command queue registers */
++ struct resource *reg;
++ char __iomem *reg_base;
++
++ /* VRAM region */
++ struct resource *vram;
++
++ /* Command queue region */
++ struct resource *cmdq;
++ char __iomem *cmdq_base;
++
++ /* LCD controller registers */
++ struct resource *lcd_regs;
++ char __iomem *lcd_base;
++
++ /* 2D engine registers and IRQ */
++ struct resource *twod_regs;
++ char __iomem *twod_base;
++ unsigned int twod_irq;
++
++ ssize_t vram_size;
++
++ /* Memory management */
++ struct drm_mm *mmgr;
++
++ /* semaphore against concurrent ioctl */
++ struct semaphore add_to_ring;
++
++ /* Saved state */
++ u_int16_t saved_clock;
++ u_int16_t saved_width;
++ u_int16_t saved_height;
++ u_int16_t saved_pitch;
++ u_int16_t saved_htotal;
++ u_int16_t saved_hrtrst;
++ u_int16_t saved_hrtren;
++ u_int16_t saved_hdspst;
++ u_int16_t saved_hdspen;
++ u_int16_t saved_vtotal;
++ u_int16_t saved_vrtrst;
++ u_int16_t saved_vrtren;
++ u_int16_t saved_vdspst;
++ u_int16_t saved_vdspen;
++
++ /* Fencing */
++ atomic_t curr_seq; /* The last used stamp number */
++ struct list_head fence_list; /* List of active fences */
++ rwlock_t fence_list_lock; /* Lock to protect fence_list */
++ wait_queue_head_t fence_queue; /* Waitqueue */
++ struct tasklet_struct fence_tl; /* Tasklet for fence IRQ */
++
++ /* A scratch block */
++ struct drm_mm_node *scratch;
++};
++
++
++/* Private data. This is where we keep our memory management bits */
++struct drm_glamo_gem_object {
++ struct drm_gem_object *obj; /* The GEM object this refers to */
++ struct drm_mm_node *block; /* Block handle for drm_mm */
++ uint64_t mmap_offset;
++};
++
++
++struct glamo_crtc {
++ struct drm_crtc base;
++ struct glamodrm_handle *gdrm;
++ /* a mode_set for fbdev users on this crtc */
++ struct drm_mode_set mode_set;
++ int blank_mode;
++};
++
++
++struct glamo_framebuffer {
++ struct drm_framebuffer base;
++ struct drm_gem_object *obj;
++};
++
++
++struct glamo_output {
++ struct drm_connector base;
++ struct drm_encoder enc;
++ struct glamodrm_handle *gdrm;
++};
++
++
++/* Colour mode for KMS framebuffer */
++enum {
++ GLAMO_FB_RGB565,
++ GLAMO_FB_ARGB1555,
++ GLAMO_FB_ARGB4444
++};
++
++
++#define to_glamo_crtc(x) container_of(x, struct glamo_crtc, base)
++#define to_glamo_output(x) container_of(x, struct glamo_output, base)
++#define enc_to_glamo_output(x) container_of(x, struct glamo_output, enc)
++#define to_glamo_framebuffer(x) container_of(x, struct glamo_framebuffer, base)
++
++
++#endif /* __GLAMO_DRMPRIV_H */
+diff --git a/drivers/mfd/glamo/glamo-fence.c b/drivers/mfd/glamo/glamo-fence.c
+new file mode 100644
+index 0000000..9119675
+--- /dev/null
++++ b/drivers/mfd/glamo/glamo-fence.c
+@@ -0,0 +1,330 @@
++/*
++ * SMedia Glamo 336x/337x fence objects
++ *
++ * Copyright (c) 2009 Thomas White <taw@bitwiz.org.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, see <http://www.gnu.org/licenses/>.
++ *
++ *
++ * Loosely based on radeon_fence.c, to which the following notice applies:
++ *
++ * Copyright 2009 Jerome Glisse.
++ * All Rights Reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the
++ * "Software"), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sub license, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
++ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
++ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
++ * USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * The above copyright notice and this permission notice (including the
++ * next paragraph) shall be included in all copies or substantial portions
++ * of the Software.
++ *
++ */
++/*
++ * Authors:
++ * Jerome Glisse <glisse@freedesktop.org>
++ * Dave Airlie
++ */
++
++
++#include <drm/drmP.h>
++#include <drm/glamo_drm.h>
++#include <linux/kernel.h>
++#include <linux/irq.h>
++#include <linux/interrupt.h>
++#include <linux/spinlock.h>
++#include <linux/lockdep.h>
++
++#include "glamo-drm-private.h"
++#include "glamo-regs.h"
++#include "glamo-core.h"
++#include "glamo-cmdq.h"
++
++
++static struct lock_class_key glamo_fence_lock_key;
++
++
++struct glamo_fence
++{
++ struct list_head list;
++ uint16_t seq; /* Wait for at least this ID */
++ int signalled; /* Non-zero when fence has passed */
++ struct glamodrm_handle *gdrm;
++};
++
++
++static void glamo_fence_emit(struct glamo_fence *fence)
++{
++ u16 fring[6];
++
++ fring[0] = 0x8000 | GLAMO_REG_2D_ID1;
++ fring[1] = 3;
++ fence->seq = atomic_inc_return(&fence->gdrm->curr_seq);
++ if ( fence->seq > 1<<14 ) {
++ atomic_set(&fence->gdrm->curr_seq, 0);
++ fence->seq = atomic_inc_return(&fence->gdrm->curr_seq);
++ }
++ fring[2] = 1<<15 | fence->seq;
++ fring[3] = 0; /* Unused */
++ fring[4] = 0; /* Unused */
++ fring[5] = 0; /* Padding */
++
++ glamo_add_to_ring(fence->gdrm, fring, 12);
++}
++
++
++static void glamo_fence_enable(struct glamodrm_handle *gdrm)
++{
++ enable_irq( GLAMO_IRQ_2D);
++}
++
++
++static inline u16 reg_read_2d(struct glamodrm_handle *gdrm, u_int16_t reg)
++{
++ /* For command queue, the address is given relative to
++ * the overall base of Glamo. This isn't the case here. */
++ return ioread16(gdrm->twod_base + reg-GLAMO_REGOFS_2D);
++}
++
++
++static inline u16 reg_read_cmdq(struct glamodrm_handle *gdrm, u_int16_t reg)
++{
++ return ioread16(gdrm->reg_base + reg);
++}
++
++
++static void glamo_cmdq_wait(struct glamodrm_handle *gdrm,
++ enum glamo_engine engine)
++{
++ u16 mask, val, status;
++ int i;
++
++ switch (engine)
++ {
++ case GLAMO_ENGINE_ALL:
++ mask = 1 << 2;
++ val = mask;
++ break;
++ default:
++ return;
++ }
++
++ for ( i=0; i<1000; i++ ) {
++ status = reg_read_cmdq(gdrm, GLAMO_REG_CMDQ_STATUS);
++ if ((status & mask) == val) break;
++ mdelay(1);
++ }
++ if ( i == 1000 ) {
++ size_t ring_read;
++ printk(KERN_WARNING "[glamo-drm] CmdQ timeout!\n");
++ printk(KERN_WARNING "[glamo-drm] status = %x\n", status);
++ ring_read = reg_read_cmdq(gdrm, GLAMO_REG_CMDQ_READ_ADDRL);
++ ring_read |= ((reg_read_cmdq(gdrm, GLAMO_REG_CMDQ_READ_ADDRH)
++ & 0x7) << 16);
++ printk(KERN_INFO "[glamo-drm] ring_read now 0x%x\n",
++ ring_read);
++ }
++}
++
++
++static irqreturn_t glamo_fence_irq_handler(int irq, void *data)
++{
++ struct glamodrm_handle *gdrm = data;
++ if (!gdrm) return IRQ_NONE;
++ tasklet_schedule(&gdrm->fence_tl);
++ return IRQ_HANDLED;
++}
++
++
++/* This is nasty. I'm sorry. */
++static void glamo_fence_debodge(struct glamodrm_handle *gdrm)
++{
++ struct list_head *tmp;
++
++ printk(KERN_ERR "[glamo-drm] Attempting to recover...\n");
++
++ glamo_cmdq_wait(gdrm, GLAMO_ENGINE_ALL);
++ glamo_engine_reset(gdrm->glamo_core, GLAMO_ENGINE_2D);
++
++ read_lock(&gdrm->fence_list_lock);
++ list_for_each(tmp, &gdrm->fence_list) {
++
++ struct glamo_fence *fence;
++
++ fence = list_entry(tmp, struct glamo_fence, list);
++
++ if ( fence->signalled != 1 ) {
++ printk(KERN_ERR "[glamo-drm] Fence seq#%i was not"
++ " signalled\n", fence->seq);
++ }
++ fence->signalled = 1;
++
++ }
++ read_unlock(&gdrm->fence_list_lock);
++
++ wake_up_all(&gdrm->fence_queue);
++}
++
++
++static void glamo_fence_tl(unsigned long data)
++{
++ struct glamodrm_handle *gdrm = (struct glamodrm_handle *)data;
++ int wake = 0;
++ u16 seq;
++ struct list_head *tmp;
++
++ seq = reg_read_2d(gdrm, GLAMO_REG_2D_ID1) & 0x7fff;
++
++ read_lock(&gdrm->fence_list_lock);
++ list_for_each(tmp, &gdrm->fence_list) {
++
++ struct glamo_fence *fence;
++
++ fence = list_entry(tmp, struct glamo_fence, list);
++ if ( seq >= fence->seq ) {
++ fence->signalled = 1;
++ wake = 1;
++ }
++
++ }
++ read_unlock(&gdrm->fence_list_lock);
++
++ if ( wake ) wake_up_all(&gdrm->fence_queue);
++}
++
++
++static struct glamo_fence *glamo_fence_new(struct glamodrm_handle *gdrm)
++{
++ struct glamo_fence *fence;
++ unsigned long irq_flags;
++
++ fence = kmalloc(sizeof(*fence), GFP_KERNEL);
++ fence->signalled = 0;
++ fence->gdrm = gdrm;
++
++ /* Add to list */
++ write_lock_irqsave(&gdrm->fence_list_lock, irq_flags);
++ list_add(&fence->list, &gdrm->fence_list);
++ write_unlock_irqrestore(&gdrm->fence_list_lock, irq_flags);
++
++ return fence;
++}
++
++
++static struct glamo_fence *glamo_fence_destroy(struct glamo_fence *fence)
++{
++ unsigned long irq_flags;
++ struct glamodrm_handle *gdrm = fence->gdrm;
++
++ /* Remove from list */
++ write_lock_irqsave(&gdrm->fence_list_lock, irq_flags);
++ list_del(&fence->list);
++ write_unlock_irqrestore(&gdrm->fence_list_lock, irq_flags);
++
++ kfree(fence);
++
++ return fence;
++}
++
++
++int glamo_ioctl_wait_rendering(struct drm_device *dev, void *data,
++ struct drm_file *file_priv)
++{
++ struct glamodrm_handle *gdrm;
++ struct drm_glamo_gem_wait_rendering *args = data;
++ struct glamo_fence *fence;
++ int r;
++
++ gdrm = dev->dev_private;
++
++ if ( !args->have_handle ) {
++ glamo_cmdq_wait(gdrm, GLAMO_ENGINE_ALL);
++ return 0;
++ }
++
++ fence = glamo_fence_new(gdrm);
++ if ( fence == NULL ) {
++ printk(KERN_WARNING "[glamo-drm] Couldn't allocate fence -"
++ " falling back to busy wait.\n");
++ glamo_cmdq_wait(gdrm, GLAMO_ENGINE_ALL);
++ return 0;
++ }
++
++ glamo_fence_emit(fence);
++
++ /* Wait... */
++ r = wait_event_interruptible_timeout(gdrm->fence_queue,
++ fence->signalled, HZ);
++ if ( r == 0 ) {
++ printk(KERN_ERR "[glamo-drm] Timeout!\n");
++ glamo_fence_debodge(gdrm);
++ }
++
++ glamo_fence_destroy(fence);
++
++ return 0;
++}
++
++
++void glamo_fence_init(struct glamodrm_handle *gdrm)
++{
++ unsigned long irq_flags;
++ int r;
++
++ if ( gdrm->twod_irq == 0 ) {
++ printk(KERN_ERR "[glamo-drm] Don't know which IRQ to use!\n");
++ return;
++ }
++
++ gdrm->fence_list_lock = __RW_LOCK_UNLOCKED(gdrm->fence_list_lock);
++ lockdep_set_class(&gdrm->fence_list_lock, &glamo_fence_lock_key);
++ init_waitqueue_head(&gdrm->fence_queue);
++
++ atomic_set(&gdrm->curr_seq, 0);
++
++ write_lock_irqsave(&gdrm->fence_list_lock, irq_flags);
++ INIT_LIST_HEAD(&gdrm->fence_list);
++ write_unlock_irqrestore(&gdrm->fence_list_lock, irq_flags);
++
++ tasklet_init(&gdrm->fence_tl, glamo_fence_tl, (unsigned long)gdrm);
++
++ r = request_irq(gdrm->twod_irq, glamo_fence_irq_handler,
++ IRQF_SHARED, "glamo-fence", gdrm);
++ if ( r ) {
++ printk(KERN_ERR "[glamo-drm] Failed to register irq.\n");
++ return;
++ }
++
++ glamo_fence_enable(gdrm);
++}
++
++
++void glamo_fence_shutdown(struct glamodrm_handle *gdrm)
++{
++ free_irq(gdrm->twod_irq, gdrm);
++ wake_up_all(&gdrm->fence_queue);
++ tasklet_kill(&gdrm->fence_tl);
++}
+diff --git a/drivers/mfd/glamo/glamo-fence.h b/drivers/mfd/glamo/glamo-fence.h
+new file mode 100644
+index 0000000..deda995
+--- /dev/null
++++ b/drivers/mfd/glamo/glamo-fence.h
+@@ -0,0 +1,34 @@
++/*
++ * SMedia Glamo 336x/337x fence objects
++ *
++ * Copyright (c) 2009 Thomas White <taw@bitwiz.org.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, see <http://www.gnu.org/licenses/>.
++ *
++ */
++
++#ifndef __GLAMO_FENCE_H
++#define __GLAMO_FENCE_H
++
++#include <drm/drmP.h>
++
++#include "glamo-drm-private.h"
++
++extern void glamo_fence_init(struct glamodrm_handle *gdrm);
++extern void glamo_fence_shutdown(struct glamodrm_handle *gdrm);
++
++extern int glamo_ioctl_wait_rendering(struct drm_device *dev, void *data,
++ struct drm_file *file_priv);
++
++#endif /* __GLAMO_FENCE_H */
+diff --git a/drivers/mfd/glamo/glamo-kms-fb.c b/drivers/mfd/glamo/glamo-kms-fb.c
+new file mode 100644
+index 0000000..61cd605
+--- /dev/null
++++ b/drivers/mfd/glamo/glamo-kms-fb.c
+@@ -0,0 +1,540 @@
++/*
++ * SMedia Glamo 336x/337x KMS Framebuffer
++ *
++ * Copyright (C) 2009 Thomas White <taw@bitwiz.org.uk>
++ *
++ * Based on glamo-fb.c (C) 2007-2008 by Openmoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ * All rights reserved.
++ *
++ * 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
++ *
++ *
++ * Based on intel_fb.c from drivers/gpu/drm/i915
++ * to which the following licence applies:
++ *
++ * Copyright © 2006-2007 Intel Corporation
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the next
++ * paragraph) shall be included in all copies or substantial portions of the
++ * Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ *
++ * Authors:
++ * Eric Anholt <eric@anholt.net>
++ *
++ */
++
++
++#include <drm/drmP.h>
++#include <drm/glamo_drm.h>
++#include <drm/drm_crtc_helper.h>
++#include <drm/drm_crtc.h>
++
++#include "glamo-core.h"
++#include "glamo-drm-private.h"
++#include "glamo-display.h"
++#include "glamo-buffer.h"
++
++
++struct glamofb_par {
++ struct drm_device *dev;
++ struct drm_display_mode *our_mode;
++ struct glamo_framebuffer *glamo_fb;
++ int crtc_count;
++ /* crtc currently bound to this */
++ uint32_t crtc_ids[2];
++};
++
++
++static int glamofb_setcolreg(unsigned regno, unsigned red, unsigned green,
++ unsigned blue, unsigned transp,
++ struct fb_info *info)
++{
++ struct glamofb_par *par = info->par;
++ struct drm_device *dev = par->dev;
++ struct drm_crtc *crtc;
++ int i;
++
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ struct glamo_crtc *glamo_crtc = to_glamo_crtc(crtc);
++ struct drm_mode_set *modeset = &glamo_crtc->mode_set;
++ struct drm_framebuffer *fb = modeset->fb;
++
++ for (i = 0; i < par->crtc_count; i++)
++ if (crtc->base.id == par->crtc_ids[i])
++ break;
++
++ if (i == par->crtc_count)
++ continue;
++
++
++ if (regno > 255)
++ return 1;
++
++ if (regno < 16) {
++ switch (fb->depth) {
++ case 15:
++ fb->pseudo_palette[regno] = ((red & 0xf800) >> 1) |
++ ((green & 0xf800) >> 6) |
++ ((blue & 0xf800) >> 11);
++ break;
++ case 16:
++ fb->pseudo_palette[regno] = (red & 0xf800) |
++ ((green & 0xfc00) >> 5) |
++ ((blue & 0xf800) >> 11);
++ break;
++ case 24:
++ case 32:
++ fb->pseudo_palette[regno] = ((red & 0xff00) << 8) |
++ (green & 0xff00) |
++ ((blue & 0xff00) >> 8);
++ break;
++ }
++ }
++ }
++ return 0;
++}
++
++static int glamofb_check_var(struct fb_var_screeninfo *var,
++ struct fb_info *info)
++{
++ struct glamofb_par *par = info->par;
++ struct glamo_framebuffer *glamo_fb = par->glamo_fb;
++ struct drm_framebuffer *fb = &glamo_fb->base;
++ int depth;
++
++ /* Need to resize the fb object !!! */
++ if (var->xres > fb->width || var->yres > fb->height) {
++ DRM_ERROR("Cannot resize framebuffer object (%dx%d > %dx%d)\n",
++ var->xres,var->yres,fb->width,fb->height);
++ DRM_ERROR("Need resizing code.\n");
++ return -EINVAL;
++ }
++
++ switch (var->bits_per_pixel) {
++ case 16:
++ depth = (var->green.length == 6) ? 16 : 15;
++ break;
++ case 32:
++ depth = (var->transp.length > 0) ? 32 : 24;
++ break;
++ default:
++ depth = var->bits_per_pixel;
++ break;
++ }
++
++ switch (depth) {
++ case 16:
++ var->red.offset = 11;
++ var->green.offset = 5;
++ var->blue.offset = 0;
++ var->red.length = 5;
++ var->green.length = 6;
++ var->blue.length = 5;
++ var->transp.length = 0;
++ var->transp.offset = 0;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++/* this will let fbcon do the mode init */
++/* FIXME: take mode config lock? */
++static int glamofb_set_par(struct fb_info *info)
++{
++ struct glamofb_par *par = info->par;
++ struct drm_device *dev = par->dev;
++ struct fb_var_screeninfo *var = &info->var;
++ int i;
++
++ DRM_DEBUG("%d %d\n", var->xres, var->pixclock);
++
++ if (var->pixclock != -1) {
++
++ DRM_ERROR("PIXEL CLOCK SET\n");
++ return -EINVAL;
++ } else {
++ struct drm_crtc *crtc;
++ int ret;
++
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ struct glamo_crtc *glamo_crtc = to_glamo_crtc(crtc);
++
++ for (i = 0; i < par->crtc_count; i++)
++ if (crtc->base.id == par->crtc_ids[i])
++ break;
++
++ if (i == par->crtc_count)
++ continue;
++
++ if (crtc->fb == glamo_crtc->mode_set.fb) {
++ mutex_lock(&dev->mode_config.mutex);
++ ret = crtc->funcs->set_config(&glamo_crtc->mode_set);
++ mutex_unlock(&dev->mode_config.mutex);
++ if (ret)
++ return ret;
++ }
++ }
++ return 0;
++ }
++}
++
++static int glamofb_pan_display(struct fb_var_screeninfo *var,
++ struct fb_info *info)
++{
++ struct glamofb_par *par = info->par;
++ struct drm_device *dev = par->dev;
++ struct drm_mode_set *modeset;
++ struct drm_crtc *crtc;
++ struct glamo_crtc *glamo_crtc;
++ int ret = 0;
++ int i;
++
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ for (i = 0; i < par->crtc_count; i++)
++ if (crtc->base.id == par->crtc_ids[i])
++ break;
++
++ if (i == par->crtc_count)
++ continue;
++
++ glamo_crtc = to_glamo_crtc(crtc);
++ modeset = &glamo_crtc->mode_set;
++
++ modeset->x = var->xoffset;
++ modeset->y = var->yoffset;
++
++ if (modeset->num_connectors) {
++ mutex_lock(&dev->mode_config.mutex);
++ ret = crtc->funcs->set_config(modeset);
++ mutex_unlock(&dev->mode_config.mutex);
++ if (!ret) {
++ info->var.xoffset = var->xoffset;
++ info->var.yoffset = var->yoffset;
++ }
++ }
++ }
++
++ return ret;
++}
++
++static void glamofb_on(struct fb_info *info)
++{
++ struct glamofb_par *par = info->par;
++ struct drm_device *dev = par->dev;
++ struct drm_crtc *crtc;
++ struct drm_encoder *encoder;
++ int i;
++
++ /*
++ * For each CRTC in this fb, find all associated encoders
++ * and turn them off, then turn off the CRTC.
++ */
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
++
++ for (i = 0; i < par->crtc_count; i++)
++ if (crtc->base.id == par->crtc_ids[i])
++ break;
++
++ crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
++
++ /* Found a CRTC on this fb, now find encoders */
++ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
++ if (encoder->crtc == crtc) {
++ struct drm_encoder_helper_funcs *encoder_funcs;
++ encoder_funcs = encoder->helper_private;
++ encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
++ }
++ }
++ }
++}
++
++static void glamofb_off(struct fb_info *info, int dpms_mode)
++{
++ struct glamofb_par *par = info->par;
++ struct drm_device *dev = par->dev;
++ struct drm_crtc *crtc;
++ struct drm_encoder *encoder;
++ int i;
++
++ /*
++ * For each CRTC in this fb, find all associated encoders
++ * and turn them off, then turn off the CRTC.
++ */
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
++
++ for (i = 0; i < par->crtc_count; i++)
++ if (crtc->base.id == par->crtc_ids[i])
++ break;
++
++ /* Found a CRTC on this fb, now find encoders */
++ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
++ if (encoder->crtc == crtc) {
++ struct drm_encoder_helper_funcs *encoder_funcs;
++ encoder_funcs = encoder->helper_private;
++ encoder_funcs->dpms(encoder, dpms_mode);
++ }
++ }
++ if (dpms_mode == DRM_MODE_DPMS_OFF)
++ crtc_funcs->dpms(crtc, dpms_mode);
++ }
++}
++
++static int glamofb_blank(int blank, struct fb_info *info)
++{
++ switch (blank) {
++ case FB_BLANK_UNBLANK:
++ glamofb_on(info);
++ break;
++ case FB_BLANK_NORMAL:
++ glamofb_off(info, DRM_MODE_DPMS_STANDBY);
++ break;
++ case FB_BLANK_HSYNC_SUSPEND:
++ glamofb_off(info, DRM_MODE_DPMS_STANDBY);
++ break;
++ case FB_BLANK_VSYNC_SUSPEND:
++ glamofb_off(info, DRM_MODE_DPMS_SUSPEND);
++ break;
++ case FB_BLANK_POWERDOWN:
++ glamofb_off(info, DRM_MODE_DPMS_OFF);
++ break;
++ }
++ return 0;
++}
++
++static struct fb_ops glamofb_ops = {
++ .owner = THIS_MODULE,
++ .fb_check_var = glamofb_check_var,
++ .fb_set_par = glamofb_set_par,
++ .fb_setcolreg = glamofb_setcolreg,
++ .fb_fillrect = cfb_fillrect,
++ .fb_copyarea = cfb_copyarea,
++ .fb_imageblit = cfb_imageblit,
++ .fb_pan_display = glamofb_pan_display,
++ .fb_blank = glamofb_blank,
++};
++
++
++#define RESSIZE(ressource) (((ressource)->end - (ressource)->start)+1)
++
++
++/* Here, we create a GEM object of the correct size, and then turn it into
++ * /dev/fbX so that the kernel can put a console on it. */
++int glamofb_create(struct drm_device *dev, uint32_t fb_width,
++ uint32_t fb_height, uint32_t surface_width,
++ uint32_t surface_height, int colour_mode,
++ struct glamo_framebuffer **glamo_fb_p)
++{
++ struct fb_info *info;
++ struct glamofb_par *par;
++ struct drm_framebuffer *fb;
++ struct glamo_framebuffer *glamo_fb;
++ struct drm_mode_fb_cmd mode_cmd;
++ struct drm_gem_object *fbo = NULL;
++ struct drm_glamo_gem_object *gobj;
++ struct device *device = &dev->platform_dev->dev;
++ struct glamodrm_handle *gdrm;
++ int size, ret;
++ unsigned long offs;
++
++ gdrm = dev->dev_private;
++
++ mode_cmd.width = surface_width;
++ mode_cmd.height = surface_height;
++
++ mode_cmd.bpp = 16;
++ mode_cmd.pitch = ALIGN(mode_cmd.width * ((mode_cmd.bpp + 1) / 8), 64);
++ mode_cmd.depth = 16;
++
++ size = mode_cmd.pitch * mode_cmd.height;
++ size = ALIGN(size, PAGE_SIZE);
++ if ( size > GLAMO_FRAMEBUFFER_ALLOCATION ) {
++ printk(KERN_ERR "[glamo-drm] Not enough memory for fb\n");
++ ret = -ENOMEM;
++ goto out;
++ }
++ fbo = glamo_gem_object_alloc(dev, GLAMO_FRAMEBUFFER_ALLOCATION, 2);
++ if (!fbo) {
++ printk(KERN_ERR "[glamo-drm] Failed to allocate framebuffer\n");
++ ret = -ENOMEM;
++ goto out;
++ }
++ gobj = fbo->driver_private;
++
++ mutex_lock(&dev->struct_mutex);
++
++ ret = glamo_framebuffer_create(dev, &mode_cmd, &fb, fbo);
++ if (ret) {
++ DRM_ERROR("failed to allocate fb.\n");
++ goto out_unref;
++ }
++
++ list_add(&fb->filp_head, &dev->mode_config.fb_kernel_list);
++
++ glamo_fb = to_glamo_framebuffer(fb);
++ *glamo_fb_p = glamo_fb;
++
++ info = framebuffer_alloc(sizeof(struct glamofb_par), device);
++ if (!info) {
++ ret = -ENOMEM;
++ goto out_unref;
++ }
++
++ par = info->par;
++
++ strcpy(info->fix.id, "glamodrmfb");
++ info->fix.type = FB_TYPE_PACKED_PIXELS;
++ info->fix.visual = FB_VISUAL_TRUECOLOR;
++ info->fix.type_aux = 0;
++ info->fix.xpanstep = 1; /* doing it in hw */
++ info->fix.ypanstep = 1; /* doing it in hw */
++ info->fix.ywrapstep = 0;
++ info->fix.accel = FB_ACCEL_GLAMO;
++ info->fix.type_aux = 0;
++ info->flags = FBINFO_DEFAULT;
++
++ info->fbops = &glamofb_ops;
++
++ info->fix.line_length = fb->pitch;
++ info->fix.smem_start = dev->mode_config.fb_base
++ + (unsigned long) gdrm->vram->start;
++ info->fix.smem_len = size;
++
++ info->flags = FBINFO_DEFAULT;
++
++ offs = gobj->block->start;
++ info->screen_base = ioremap(gdrm->vram->start + offs + GLAMO_OFFSET_FB,
++ GLAMO_FRAMEBUFFER_ALLOCATION);
++ if (!info->screen_base) {
++ printk(KERN_ERR "[glamo-drm] Couldn't map framebuffer!\n");
++ ret = -ENOSPC;
++ goto out_unref;
++ }
++ info->screen_size = size;
++
++ info->pseudo_palette = fb->pseudo_palette;
++ info->var.xres_virtual = fb->width;
++ info->var.yres_virtual = fb->height;
++ info->var.bits_per_pixel = fb->bits_per_pixel;
++ info->var.xoffset = 0;
++ info->var.yoffset = 0;
++ info->var.activate = FB_ACTIVATE_NOW;
++ info->var.height = -1;
++ info->var.width = -1;
++ info->var.xres = fb_width;
++ info->var.yres = fb_height;
++
++ info->fix.mmio_start = 0;
++ info->fix.mmio_len = 0;
++
++ info->pixmap.size = 64*1024;
++ info->pixmap.buf_align = 8;
++ info->pixmap.access_align = 32;
++ info->pixmap.flags = FB_PIXMAP_SYSTEM;
++ info->pixmap.scan_align = 1;
++
++ switch (fb->depth) {
++ case 16:
++ switch ( colour_mode ) {
++ case GLAMO_FB_RGB565:
++ info->var.red.offset = 11;
++ info->var.green.offset = 5;
++ info->var.blue.offset = 0;
++ info->var.red.length = 5;
++ info->var.green.length = 6;
++ info->var.blue.length = 5;
++ info->var.transp.length = 0;
++ break;
++ case GLAMO_FB_ARGB1555:
++ info->var.transp.offset = 15;
++ info->var.red.offset = 10;
++ info->var.green.offset = 5;
++ info->var.blue.offset = 0;
++ info->var.transp.length = 1;
++ info->var.red.length = 5;
++ info->var.green.length = 5;
++ info->var.blue.length = 5;
++ break;
++ case GLAMO_FB_ARGB4444:
++ info->var.transp.offset = 12;
++ info->var.red.offset = 8;
++ info->var.green.offset = 4;
++ info->var.blue.offset = 0;
++ info->var.transp.length = 4;
++ info->var.red.length = 4;
++ info->var.green.length = 4;
++ info->var.blue.length = 4;
++ break;
++ }
++ break;
++ case 24:
++ case 32:
++ default:
++ /* The Smedia Glamo doesn't support anything but 16bit color */
++ printk(KERN_ERR "[glamo-drm] Only 16bpp is supported.\n");
++ return -EINVAL;
++ }
++
++ fb->fbdev = info;
++ par->glamo_fb = glamo_fb;
++ par->dev = dev;
++ gdrm->fb = info;
++
++ info->var.pixclock = -1;
++
++ printk(KERN_INFO "[glamo-drm] Allocated %dx%d fb: bo %p\n",
++ glamo_fb->base.width, glamo_fb->base.height, fbo);
++ mutex_unlock(&dev->struct_mutex);
++ return 0;
++
++out_unref:
++ drm_gem_object_unreference(fbo);
++ mutex_unlock(&dev->struct_mutex);
++out:
++ return ret;
++}
++
++
++void glamo_kmsfb_suspend(struct glamodrm_handle *gdrm)
++{
++ fb_set_suspend(gdrm->fb, 1);
++}
++
++
++void glamo_kmsfb_resume(struct glamodrm_handle *gdrm)
++{
++ fb_set_suspend(gdrm->fb, 0);
++}
+diff --git a/drivers/mfd/glamo/glamo-kms-fb.h b/drivers/mfd/glamo/glamo-kms-fb.h
+new file mode 100644
+index 0000000..1960e76
+--- /dev/null
++++ b/drivers/mfd/glamo/glamo-kms-fb.h
+@@ -0,0 +1,41 @@
++/*
++ * SMedia Glamo 336x/337x KMS framebuffer
++ *
++ * Copyright (C) 2009 Thomas White <taw@bitwiz.org.uk>
++ *
++ * Based on glamo-fb.c (C) 2007-2008 by Openmoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ * All rights reserved.
++ *
++ * 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 __GLAMO_KMS_FB_H
++#define __GLAMO_KMS_FB_H
++
++#include <drm/drmP.h>
++#include "glamo-drm-private.h"
++
++extern int glamofb_create(struct drm_device *dev, uint32_t fb_width,
++ uint32_t fb_height, uint32_t surface_width,
++ uint32_t surface_height, int colour_mode,
++ struct glamo_framebuffer **glamo_fb_p);
++
++extern void glamo_kmsfb_suspend(struct glamodrm_handle *gdrm);
++extern void glamo_kmsfb_resume(struct glamodrm_handle *gdrm);
++
++#endif /* __GLAMO_KMS_FB_H */
+diff --git a/include/drm/Kbuild b/include/drm/Kbuild
+index b940fdf..48b7b55 100644
+--- a/include/drm/Kbuild
++++ b/include/drm/Kbuild
+@@ -8,3 +8,4 @@ unifdef-y += radeon_drm.h
+ unifdef-y += sis_drm.h
+ unifdef-y += savage_drm.h
+ unifdef-y += via_drm.h
++unifdef-y += glamo_drm.h
+diff --git a/include/drm/glamo_drm.h b/include/drm/glamo_drm.h
+new file mode 100644
+index 0000000..4c194dc
+--- /dev/null
++++ b/include/drm/glamo_drm.h
+@@ -0,0 +1,153 @@
++/* glamo_drm.h -- Public header for the Glamo driver
++ *
++ * Copyright 2009 Thomas White
++ * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas.
++ * Copyright 2000 VA Linux Systems, Inc., Fremont, California.
++ * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas.
++ * All rights reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the next
++ * paragraph) shall be included in all copies or substantial portions of the
++ * Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ *
++ * Authors:
++ * Thomas White <taw@bitwiz.org.uk>
++ * Kevin E. Martin <martin@valinux.com>
++ * Gareth Hughes <gareth@valinux.com>
++ * Keith Whitwell <keith@tungstengraphics.com>
++ */
++
++#ifndef __GLAMO_DRM_H__
++#define __GLAMO_DRM_H__
++
++#include "drm.h"
++
++#define GLAMO_GEM_DOMAIN_VRAM (0x1)
++
++/* Glamo specific ioctls */
++#define DRM_GLAMO_CMDBUF 0x01
++#define DRM_GLAMO_SWAP 0x02
++#define DRM_GLAMO_CMDBURST 0x03
++
++#define DRM_GLAMO_GEM_INFO 0x1c
++#define DRM_GLAMO_GEM_CREATE 0x1d
++#define DRM_GLAMO_GEM_MMAP 0x1e
++#define DRM_GLAMO_GEM_PIN 0x1f
++#define DRM_GLAMO_GEM_UNPIN 0x20
++#define DRM_GLAMO_GEM_PREAD 0x21
++#define DRM_GLAMO_GEM_PWRITE 0x22
++#define DRM_GLAMO_GEM_WAIT_RENDERING 0x24
++
++#define DRM_IOCTL_GLAMO_CMDBUF DRM_IOW(DRM_COMMAND_BASE + DRM_GLAMO_CMDBUF, drm_glamo_cmd_buffer_t)
++#define DRM_IOCTL_GLAMO_SWAP DRM_IO(DRM_COMMAND_BASE + DRM_GLAMO_SWAP)
++#define DRM_IOCTL_GLAMO_CMDBURST DRM_IOW(DRM_COMMAND_BASE + DRM_GLAMO_CMDBURST, drm_glamo_cmd_burst_t)
++
++#define DRM_IOCTL_GLAMO_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_INFO, struct drm_glamo_gem_info)
++#define DRM_IOCTL_GLAMO_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_CREATE, struct drm_glamo_gem_create)
++#define DRM_IOCTL_GLAMO_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_MMAP, struct drm_glamo_gem_mmap)
++#define DRM_IOCTL_GLAMO_GEM_PIN DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_PIN, struct drm_glamo_gem_pin)
++#define DRM_IOCTL_GLAMO_GEM_UNPIN DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_UNPIN, struct drm_glamo_gem_unpin)
++#define DRM_IOCTL_GLAMO_GEM_PREAD DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_PREAD, struct drm_glamo_gem_pread)
++#define DRM_IOCTL_GLAMO_GEM_PWRITE DRM_IOWR(DRM_COMMAND_BASE + DRM_GLAMO_GEM_PWRITE, struct drm_glamo_gem_pwrite)
++#define DRM_IOCTL_GLAMO_GEM_WAIT_RENDERING DRM_IOW(DRM_COMMAND_BASE + DRM_GLAMO_GEM_WAIT_RENDERING, struct drm_glamo_gem_wait_rendering)
++
++
++/* Simple command submission - a list of 16-bit address-data pairs */
++typedef struct drm_glamo_cmd_buffer {
++ unsigned int bufsz; /* Size of buffer, in bytes */
++ char __user *buf; /* Buffer of stuff to go onto the ring buffer */
++ unsigned int *obj_pos; /* Offsets (in bytes) at which to put objs */
++ uint32_t *objs; /* List of buffer object (handles) to use */
++ unsigned int nobjs; /* Number of objects referenced */
++ int nbox;
++ struct drm_clip_rect __user *boxes;
++} drm_glamo_cmd_buffer_t;
++
++
++/* Burst command submission - base address and data:
++ * - Data can be 32-bit (more easily)
++ * - Easier for the kernel to validate */
++typedef struct drm_glamo_cmd_burst {
++ uint16_t base; /* Base address (command) */
++ int bufsz; /* Size of data, in bytes */
++ uint16_t *data; /* Pointer to data */
++ unsigned int *obj_pos; /* Offsets (in bytes) at which to put objs */
++ uint32_t *objs; /* List of buffer object (handles) to use */
++ unsigned int nobjs; /* Number of objects referenced */
++} drm_glamo_cmd_burst_t;
++
++struct drm_glamo_gem_info {
++ uint64_t vram_start;
++ uint64_t vram_size;
++};
++
++struct drm_glamo_gem_create {
++ uint64_t size;
++ uint64_t alignment;
++ uint32_t handle;
++ uint32_t initial_domain; // to allow VRAM to be created
++ uint32_t no_backing_store;
++};
++
++struct drm_glamo_gem_mmap {
++ uint32_t handle; /* Handle goes in... */
++ uint64_t offset; /* ...offset comes out */
++};
++
++struct drm_glamo_gem_wait_rendering {
++ uint32_t handle;
++ int have_handle;
++};
++
++struct drm_glamo_gem_pin {
++ uint32_t handle;
++ uint32_t pin_domain;
++ uint64_t alignment;
++ uint64_t offset;
++};
++
++struct drm_glamo_gem_unpin {
++ uint32_t handle;
++ uint32_t pad;
++};
++
++struct drm_glamo_gem_pread {
++ /** Handle for the object being read. */
++ uint32_t handle;
++ uint32_t pad;
++ /** Offset into the object to read from */
++ uint64_t offset;
++ /** Length of data to read */
++ uint64_t size;
++ /** Pointer to write the data into. */
++ uint64_t data_ptr; /* void *, but pointers are not 32/64 compatible */
++};
++
++struct drm_glamo_gem_pwrite {
++ /** Handle for the object being written to. */
++ uint32_t handle;
++ uint32_t pad;
++ /** Offset into the object to write to */
++ uint64_t offset;
++ /** Length of data to write */
++ uint64_t size;
++ /** Pointer to read the data from. */
++ uint64_t data_ptr; /* void *, but pointers are not 32/64 compatible */
++};
++
++#endif
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0003-Work-on-Glamo-core-for-DRM.patch b/recipes/linux/linux-openmoko-2.6.32/0003-Work-on-Glamo-core-for-DRM.patch
deleted file mode 100644
index 76223ed136..0000000000
--- a/recipes/linux/linux-openmoko-2.6.32/0003-Work-on-Glamo-core-for-DRM.patch
+++ /dev/null
@@ -1,252 +0,0 @@
-From 50c9919c9bc7d3e1db72dcbdd62d73efad409720 Mon Sep 17 00:00:00 2001
-From: Thomas White <taw@bitwiz.org.uk>
-Date: Tue, 17 Nov 2009 23:45:29 +0100
-Subject: [PATCH 3/4] Work on Glamo-core for DRM
-
-This adds modifications to the core of the Glamo driver to expose functionality
-to support DRM and KMS.
-
-Signed-off-by: Thomas White <taw@bitwiz.org.uk>
----
- drivers/mfd/glamo/glamo-core.c | 85 +++++++++++++++++++++++++++++++++++++---
- drivers/mfd/glamo/glamo-core.h | 45 ++++++++++++++++-----
- drivers/mfd/glamo/glamo-regs.h | 24 +++++++++++
- include/linux/mfd/glamo.h | 7 +--
- 4 files changed, 140 insertions(+), 21 deletions(-)
-
-diff --git a/drivers/mfd/glamo/glamo-core.c b/drivers/mfd/glamo/glamo-core.c
-index e0e3940..32aeff1 100644
---- a/drivers/mfd/glamo/glamo-core.c
-+++ b/drivers/mfd/glamo/glamo-core.c
-@@ -221,10 +221,31 @@ static struct resource glamo_fb_resources[] = {
- .flags = IORESOURCE_MEM,
- }, {
- .name = "glamo-fb-mem",
-- .start = GLAMO_OFFSET_FB,
-- .end = GLAMO_OFFSET_FB + GLAMO_FB_SIZE - 1,
-+ .start = GLAMO_MEM_BASE + GLAMO_OFFSET_FB,
-+ .end = GLAMO_MEM_BASE + GLAMO_OFFSET_FB + GLAMO_FB_SIZE - 1,
- .flags = IORESOURCE_MEM,
-- },
-+ }, {
-+ .name = "glamo-cmdq-regs",
-+ .start = GLAMO_REGOFS_CMDQUEUE,
-+ .end = GLAMO_REGOFS_RISC - 1,
-+ .flags = IORESOURCE_MEM,
-+ }, {
-+ .name = "glamo-command-queue",
-+ .start = GLAMO_MEM_BASE + GLAMO_OFFSET_CMDQ,
-+ .end = GLAMO_MEM_BASE + GLAMO_OFFSET_CMDQ +
-+ GLAMO_CMDQ_SIZE - 1,
-+ .flags = IORESOURCE_MEM,
-+ }, {
-+ .name = "glamo-2d-regs",
-+ .start = GLAMO_REGOFS_2D,
-+ .end = GLAMO_REGOFS_3D- 1,
-+ .flags = IORESOURCE_MEM,
-+ }, {
-+ .name = "glamo-2d-irq",
-+ .start = GLAMO_IRQ_2D,
-+ .end = GLAMO_IRQ_2D,
-+ .flags = IORESOURCE_IRQ,
-+ }
- };
-
- static struct resource glamo_mmc_resources[] = {
-@@ -235,9 +256,9 @@ static struct resource glamo_mmc_resources[] = {
- .flags = IORESOURCE_MEM
- }, {
- .name = "glamo-mmc-mem",
-- .start = GLAMO_OFFSET_FB + GLAMO_FB_SIZE,
-- .end = GLAMO_OFFSET_FB + GLAMO_FB_SIZE +
-- GLAMO_MMC_BUFFER_SIZE - 1,
-+ .start = GLAMO_MEM_BASE + GLAMO_OFFSET_MMC,
-+ .end = GLAMO_MEM_BASE + GLAMO_OFFSET_MMC
-+ + GLAMO_MMC_BUFFER_SIZE - 1,
- .flags = IORESOURCE_MEM
- }, {
- .start = GLAMO_IRQ_MMC,
-@@ -354,6 +375,24 @@ static void glamo_irq_demux_handler(unsigned int irq, struct irq_desc *desc)
- sysfs
- */
-
-+void glamo_clear_irq(struct glamo_core *glamo, unsigned int irq)
-+{
-+ /* set interrupt source */
-+ __reg_write(glamo, GLAMO_REG_IRQ_CLEAR, irq);
-+}
-+
-+
-+void glamo_enable_irq(struct glamo_core *glamo, unsigned int irq)
-+{
-+ u_int16_t tmp;
-+
-+ /* set bit in enable register */
-+ tmp = __reg_read(glamo, GLAMO_REG_IRQ_ENABLE);
-+ tmp |= irq;
-+ __reg_write(glamo, GLAMO_REG_IRQ_ENABLE, tmp);
-+}
-+
-+
- static ssize_t regs_write(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t count)
- {
-@@ -579,6 +618,40 @@ int glamo_engine_disable(struct glamo_core *glamo, enum glamo_engine engine)
- }
- EXPORT_SYMBOL_GPL(glamo_engine_disable);
-
-+
-+static const u_int16_t engine_clock_regs[__NUM_GLAMO_ENGINES] = {
-+ [GLAMO_ENGINE_LCD] = GLAMO_REG_CLOCK_LCD,
-+ [GLAMO_ENGINE_MMC] = GLAMO_REG_CLOCK_MMC,
-+ [GLAMO_ENGINE_ISP] = GLAMO_REG_CLOCK_ISP,
-+ [GLAMO_ENGINE_JPEG] = GLAMO_REG_CLOCK_JPEG,
-+ [GLAMO_ENGINE_3D] = GLAMO_REG_CLOCK_3D,
-+ [GLAMO_ENGINE_2D] = GLAMO_REG_CLOCK_2D,
-+ [GLAMO_ENGINE_MPEG_ENC] = GLAMO_REG_CLOCK_MPEG,
-+ [GLAMO_ENGINE_MPEG_DEC] = GLAMO_REG_CLOCK_MPEG,
-+};
-+
-+void glamo_engine_clkreg_set(struct glamo_core *glamo,
-+ enum glamo_engine engine,
-+ u_int16_t mask, u_int16_t val)
-+{
-+ reg_set_bit_mask(glamo, engine_clock_regs[engine], mask, val);
-+}
-+EXPORT_SYMBOL_GPL(glamo_engine_clkreg_set);
-+
-+u_int16_t glamo_engine_clkreg_get(struct glamo_core *glamo,
-+ enum glamo_engine engine)
-+{
-+ u_int16_t val;
-+
-+ spin_lock(&glamo->lock);
-+ val = __reg_read(glamo, engine_clock_regs[engine]);
-+ spin_unlock(&glamo->lock);
-+
-+ return val;
-+}
-+EXPORT_SYMBOL_GPL(glamo_engine_clkreg_get);
-+
-+
- int __glamo_engine_suspend(struct glamo_core *glamo, enum glamo_engine engine)
- {
- int i;
-diff --git a/drivers/mfd/glamo/glamo-core.h b/drivers/mfd/glamo/glamo-core.h
-index e5b1a35..ea6caa3 100644
---- a/drivers/mfd/glamo/glamo-core.h
-+++ b/drivers/mfd/glamo/glamo-core.h
-@@ -3,18 +3,33 @@
-
- #include <linux/mfd/glamo.h>
-
-+/* Amount of Glamo memory */
-+#define GLAMO_INTERNAL_RAM_SIZE 0x800000
-+
-+/* Arbitrarily determined amount for the hardware cursor */
-+#define GLAMO_CURSOR_SIZE (4096)
-+#define GLAMO_MMC_BUFFER_SIZE (64 * 1024) /* 64k MMC buffer */
-+#define GLAMO_CMDQ_SIZE (128 * 1024) /* 128k ring buffer */
-+/* Remaining memory will be used for 2D and 3D graphics */
-+#define GLAMO_FB_SIZE (GLAMO_INTERNAL_RAM_SIZE \
-+ - GLAMO_CURSOR_SIZE \
-+ - GLAMO_MMC_BUFFER_SIZE \
-+ - GLAMO_CMDQ_SIZE)
-+/* A 640x480, 16bpp, double-buffered framebuffer */
-+#if (GLAMO_FB_SIZE < (640 * 480 * 4)) /* == 0x12c000 */
-+#error Not enough Glamo VRAM for framebuffer!
-+#endif
-+
- /* for the time being, we put the on-screen framebuffer into the lowest
- * VRAM space. This should make the code easily compatible with the various
-- * 2MB/4MB/8MB variants of the Smedia chips */
--#define GLAMO_OFFSET_VRAM 0x800000
--#define GLAMO_OFFSET_FB (GLAMO_OFFSET_VRAM)
--
--/* we only allocate the minimum possible size for the framebuffer to make
-- * sure we have sufficient memory for other functions of the chip */
--/*#define GLAMO_FB_SIZE (640*480*4) *//* == 0x12c000 */
--#define GLAMO_INTERNAL_RAM_SIZE 0x800000
--#define GLAMO_MMC_BUFFER_SIZE (64 * 1024)
--#define GLAMO_FB_SIZE (GLAMO_INTERNAL_RAM_SIZE - GLAMO_MMC_BUFFER_SIZE)
-+ * 2MB/4MB/8MB variants of the Smedia chips
-+ * glamo-fb.c assumes FB comes first, followed by cursor, so DON'T MOVE THEM
-+ * (see glamo_regs[] in glamo-fb.c for more information) */
-+#define GLAMO_MEM_BASE (0x800000)
-+#define GLAMO_OFFSET_FB (0x000000)
-+#define GLAMO_OFFSET_CURSOR (GLAMO_OFFSET_FB + GLAMO_FB_SIZE)
-+#define GLAMO_OFFSET_MMC (GLAMO_OFFSET_CURSOR + GLAMO_CURSOR_SIZE)
-+#define GLAMO_OFFSET_CMDQ (GLAMO_OFFSET_MMC + GLAMO_MMC_BUFFER_SIZE)
-
- enum glamo_pll {
- GLAMO_PLL1,
-@@ -57,4 +72,14 @@ void glamo_reg_read_batch(struct glamo_core *glamo, uint16_t reg,
- uint16_t count, uint16_t *values);
- void glamo_reg_write_batch(struct glamo_core *glamo, uint16_t reg,
- uint16_t count, uint16_t *values);
-+void glamo_engine_clkreg_set(struct glamo_core *glamo,
-+ enum glamo_engine engine,
-+ u_int16_t mask, u_int16_t val);
-+
-+extern void glamo_clear_irq(struct glamo_core *glamo, unsigned int irq);
-+extern void glamo_enable_irq(struct glamo_core *glamo, unsigned int irq);
-+
-+u_int16_t glamo_engine_clkreg_get(struct glamo_core *glamo,
-+ enum glamo_engine engine);
-+
- #endif /* __GLAMO_CORE_H */
-diff --git a/drivers/mfd/glamo/glamo-regs.h b/drivers/mfd/glamo/glamo-regs.h
-index 59848e1..8b2fd47 100644
---- a/drivers/mfd/glamo/glamo-regs.h
-+++ b/drivers/mfd/glamo/glamo-regs.h
-@@ -627,4 +627,28 @@ enum glamo_core_revisions {
- GLAMO_CORE_REV_A3 = 0x0003,
- };
-
-+enum glamo_register_cq {
-+ GLAMO_REG_CMDQ_BASE_ADDRL = 0x00,
-+ GLAMO_REG_CMDQ_BASE_ADDRH = 0x02,
-+ GLAMO_REG_CMDQ_LEN = 0x04,
-+ GLAMO_REG_CMDQ_WRITE_ADDRL = 0x06,
-+ GLAMO_REG_CMDQ_WRITE_ADDRH = 0x08,
-+ GLAMO_REG_CMDQ_FLIP = 0x0a,
-+ GLAMO_REG_CMDQ_CONTROL = 0x0c,
-+ GLAMO_REG_CMDQ_READ_ADDRL = 0x0e,
-+ GLAMO_REG_CMDQ_READ_ADDRH = 0x10,
-+ GLAMO_REG_CMDQ_STATUS = 0x12,
-+};
-+
-+#define REG_2D(x) (GLAMO_REGOFS_2D+(x))
-+
-+enum glamo_register_2d {
-+ GLAMO_REG_2D_DST_X = REG_2D(0x0a),
-+ GLAMO_REG_2D_COMMAND1 = REG_2D(0x3a),
-+ GLAMO_REG_2D_STATUS = REG_2D(0x42),
-+ GLAMO_REG_2D_ID1 = REG_2D(0x44),
-+ GLAMO_REG_2D_ID2 = REG_2D(0x46),
-+ GLAMO_REG_2D_ID3 = REG_2D(0x48),
-+};
-+
- #endif /* _GLAMO_REGS_H */
-diff --git a/include/linux/mfd/glamo.h b/include/linux/mfd/glamo.h
-index 529d4f0..ea91a06 100644
---- a/include/linux/mfd/glamo.h
-+++ b/include/linux/mfd/glamo.h
-@@ -41,12 +41,9 @@ enum glamo_engine {
- GLAMO_ENGINE_RISC = 11,
- GLAMO_ENGINE_MICROP1_MPEG_ENC = 12,
- GLAMO_ENGINE_MICROP1_MPEG_DEC = 13,
--#if 0
-- GLAMO_ENGINE_H264_DEC = 14,
-- GLAMO_ENGINE_RISC1 = 15,
-- GLAMO_ENGINE_SPI = 16,
--#endif
- __NUM_GLAMO_ENGINES
- };
-
-+#define GLAMO_ENGINE_ALL (__NUM_GLAMO_ENGINES)
-+
- #endif
---
-1.6.5.3
-
diff --git a/recipes/linux/linux-openmoko-2.6.32/0004-Add-JBT6k74-hook-for-use-by-KMS.patch b/recipes/linux/linux-openmoko-2.6.32/0004-Add-JBT6k74-hook-for-use-by-KMS.patch
deleted file mode 100644
index a223f5b7a9..0000000000
--- a/recipes/linux/linux-openmoko-2.6.32/0004-Add-JBT6k74-hook-for-use-by-KMS.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 6035b76b940c71e30824921271e8c3da8047f869 Mon Sep 17 00:00:00 2001
-From: Thomas White <taw@bitwiz.org.uk>
-Date: Sat, 21 Nov 2009 21:42:16 +0100
-Subject: [PATCH 4/4] Add JBT6k74 hook for use by KMS
-
-Signed-off-by: Thomas White <taw@bitwiz.org.uk>
----
- drivers/video/backlight/jbt6k74.c | 18 ++++++++++++++++++
- 1 files changed, 18 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/video/backlight/jbt6k74.c b/drivers/video/backlight/jbt6k74.c
-index b1aacb7..b9d02f2 100644
---- a/drivers/video/backlight/jbt6k74.c
-+++ b/drivers/video/backlight/jbt6k74.c
-@@ -688,6 +688,22 @@ static int jbt6k74_get_power(struct lcd_device *ld)
- }
- }
-
-+/* This is utterly, totally horrible. I'm REALLY sorry... */
-+struct jbt_info *jbt_global;
-+void jbt6k74_action(int val)
-+{
-+ if ( !jbt_global ) {
-+ printk(KERN_CRIT "JBT not initialised!!!\n");
-+ return;
-+ }
-+ if ( val == 0 ) {
-+ jbt6k74_enter_power_mode(jbt_global, JBT_POWER_MODE_SLEEP);
-+ } else {
-+ jbt6k74_enter_power_mode(jbt_global, JBT_POWER_MODE_NORMAL);
-+ }
-+}
-+EXPORT_SYMBOL_GPL(jbt6k74_action);
-+
- struct lcd_ops jbt6k74_lcd_ops = {
- .set_power = jbt6k74_set_power,
- .get_power = jbt6k74_get_power,
-@@ -718,6 +734,8 @@ static int __devinit jbt_probe(struct spi_device *spi)
- if (!jbt)
- return -ENOMEM;
-
-+ jbt_global = jbt;
-+
- jbt->spi = spi;
-
- jbt->lcd_dev = lcd_device_register("jbt6k74-lcd", &spi->dev, jbt,
---
-1.6.5.3
-
diff --git a/recipes/linux/linux-openmoko-2.6.32/0004-Work-on-Glamo-core-for-DRM.patch b/recipes/linux/linux-openmoko-2.6.32/0004-Work-on-Glamo-core-for-DRM.patch
new file mode 100644
index 0000000000..2bddd1758a
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0004-Work-on-Glamo-core-for-DRM.patch
@@ -0,0 +1,171 @@
+From eb0614d6a8a879bd3ac69050b3f5b012ef562b9e Mon Sep 17 00:00:00 2001
+From: Thomas White <taw@bitwiz.org.uk>
+Date: Tue, 17 Nov 2009 23:45:29 +0100
+Subject: [PATCH 4/9] Work on Glamo-core for DRM
+
+This adds modifications to the core of the Glamo driver to expose functionality
+to support DRM and KMS.
+
+Signed-off-by: Thomas White <taw@bitwiz.org.uk>
+---
+ drivers/mfd/glamo/glamo-core.c | 33 +++++++++++++++++++++++++++------
+ drivers/mfd/glamo/glamo-core.h | 35 +++++++++++++++++++++++++----------
+ drivers/mfd/glamo/glamo-regs.h | 24 ++++++++++++++++++++++++
+ include/linux/mfd/glamo.h | 7 ++-----
+ 4 files changed, 78 insertions(+), 21 deletions(-)
+
+diff --git a/drivers/mfd/glamo/glamo-core.c b/drivers/mfd/glamo/glamo-core.c
+index 82a906a..a614d44 100644
+--- a/drivers/mfd/glamo/glamo-core.c
++++ b/drivers/mfd/glamo/glamo-core.c
+@@ -221,10 +221,31 @@ static struct resource glamo_fb_resources[] = {
+ .flags = IORESOURCE_MEM,
+ }, {
+ .name = "glamo-fb-mem",
+- .start = GLAMO_OFFSET_FB,
+- .end = GLAMO_OFFSET_FB + GLAMO_FB_SIZE - 1,
++ .start = GLAMO_MEM_BASE + GLAMO_OFFSET_FB,
++ .end = GLAMO_MEM_BASE + GLAMO_OFFSET_FB + GLAMO_FB_SIZE - 1,
+ .flags = IORESOURCE_MEM,
+- },
++ }, {
++ .name = "glamo-cmdq-regs",
++ .start = GLAMO_REGOFS_CMDQUEUE,
++ .end = GLAMO_REGOFS_RISC - 1,
++ .flags = IORESOURCE_MEM,
++ }, {
++ .name = "glamo-command-queue",
++ .start = GLAMO_MEM_BASE + GLAMO_OFFSET_CMDQ,
++ .end = GLAMO_MEM_BASE + GLAMO_OFFSET_CMDQ +
++ GLAMO_CMDQ_SIZE - 1,
++ .flags = IORESOURCE_MEM,
++ }, {
++ .name = "glamo-2d-regs",
++ .start = GLAMO_REGOFS_2D,
++ .end = GLAMO_REGOFS_3D- 1,
++ .flags = IORESOURCE_MEM,
++ }, {
++ .name = "glamo-2d-irq",
++ .start = GLAMO_IRQ_2D,
++ .end = GLAMO_IRQ_2D,
++ .flags = IORESOURCE_IRQ,
++ }
+ };
+
+ static struct resource glamo_mmc_resources[] = {
+@@ -235,9 +256,9 @@ static struct resource glamo_mmc_resources[] = {
+ .flags = IORESOURCE_MEM
+ }, {
+ .name = "glamo-mmc-mem",
+- .start = GLAMO_OFFSET_FB + GLAMO_FB_SIZE,
+- .end = GLAMO_OFFSET_FB + GLAMO_FB_SIZE +
+- GLAMO_MMC_BUFFER_SIZE - 1,
++ .start = GLAMO_MEM_BASE + GLAMO_OFFSET_MMC,
++ .end = GLAMO_MEM_BASE + GLAMO_OFFSET_MMC
++ + GLAMO_MMC_BUFFER_SIZE - 1,
+ .flags = IORESOURCE_MEM
+ }, {
+ .start = GLAMO_IRQ_MMC,
+diff --git a/drivers/mfd/glamo/glamo-core.h b/drivers/mfd/glamo/glamo-core.h
+index 17017b0..d21bdc4 100644
+--- a/drivers/mfd/glamo/glamo-core.h
++++ b/drivers/mfd/glamo/glamo-core.h
+@@ -3,18 +3,33 @@
+
+ #include <linux/mfd/glamo.h>
+
++/* Amount of Glamo memory */
++#define GLAMO_INTERNAL_RAM_SIZE 0x800000
++
++/* Arbitrarily determined amount for the hardware cursor */
++#define GLAMO_CURSOR_SIZE (4096)
++#define GLAMO_MMC_BUFFER_SIZE (64 * 1024) /* 64k MMC buffer */
++#define GLAMO_CMDQ_SIZE (128 * 1024) /* 128k ring buffer */
++/* Remaining memory will be used for 2D and 3D graphics */
++#define GLAMO_FB_SIZE (GLAMO_INTERNAL_RAM_SIZE \
++ - GLAMO_CURSOR_SIZE \
++ - GLAMO_MMC_BUFFER_SIZE \
++ - GLAMO_CMDQ_SIZE)
++/* A 640x480, 16bpp, double-buffered framebuffer */
++#if (GLAMO_FB_SIZE < (640 * 480 * 4)) /* == 0x12c000 */
++#error Not enough Glamo VRAM for framebuffer!
++#endif
++
+ /* for the time being, we put the on-screen framebuffer into the lowest
+ * VRAM space. This should make the code easily compatible with the various
+- * 2MB/4MB/8MB variants of the Smedia chips */
+-#define GLAMO_OFFSET_VRAM 0x800000
+-#define GLAMO_OFFSET_FB (GLAMO_OFFSET_VRAM)
+-
+-/* we only allocate the minimum possible size for the framebuffer to make
+- * sure we have sufficient memory for other functions of the chip */
+-/*#define GLAMO_FB_SIZE (640*480*4) *//* == 0x12c000 */
+-#define GLAMO_INTERNAL_RAM_SIZE 0x800000
+-#define GLAMO_MMC_BUFFER_SIZE (64 * 1024)
+-#define GLAMO_FB_SIZE (GLAMO_INTERNAL_RAM_SIZE - GLAMO_MMC_BUFFER_SIZE)
++ * 2MB/4MB/8MB variants of the Smedia chips
++ * glamo-fb.c assumes FB comes first, followed by cursor, so DON'T MOVE THEM
++ * (see glamo_regs[] in glamo-fb.c for more information) */
++#define GLAMO_MEM_BASE (0x800000)
++#define GLAMO_OFFSET_FB (0x000000)
++#define GLAMO_OFFSET_CURSOR (GLAMO_OFFSET_FB + GLAMO_FB_SIZE)
++#define GLAMO_OFFSET_MMC (GLAMO_OFFSET_CURSOR + GLAMO_CURSOR_SIZE)
++#define GLAMO_OFFSET_CMDQ (GLAMO_OFFSET_MMC + GLAMO_MMC_BUFFER_SIZE)
+
+ enum glamo_pll {
+ GLAMO_PLL1,
+diff --git a/drivers/mfd/glamo/glamo-regs.h b/drivers/mfd/glamo/glamo-regs.h
+index 59848e1..8b2fd47 100644
+--- a/drivers/mfd/glamo/glamo-regs.h
++++ b/drivers/mfd/glamo/glamo-regs.h
+@@ -627,4 +627,28 @@ enum glamo_core_revisions {
+ GLAMO_CORE_REV_A3 = 0x0003,
+ };
+
++enum glamo_register_cq {
++ GLAMO_REG_CMDQ_BASE_ADDRL = 0x00,
++ GLAMO_REG_CMDQ_BASE_ADDRH = 0x02,
++ GLAMO_REG_CMDQ_LEN = 0x04,
++ GLAMO_REG_CMDQ_WRITE_ADDRL = 0x06,
++ GLAMO_REG_CMDQ_WRITE_ADDRH = 0x08,
++ GLAMO_REG_CMDQ_FLIP = 0x0a,
++ GLAMO_REG_CMDQ_CONTROL = 0x0c,
++ GLAMO_REG_CMDQ_READ_ADDRL = 0x0e,
++ GLAMO_REG_CMDQ_READ_ADDRH = 0x10,
++ GLAMO_REG_CMDQ_STATUS = 0x12,
++};
++
++#define REG_2D(x) (GLAMO_REGOFS_2D+(x))
++
++enum glamo_register_2d {
++ GLAMO_REG_2D_DST_X = REG_2D(0x0a),
++ GLAMO_REG_2D_COMMAND1 = REG_2D(0x3a),
++ GLAMO_REG_2D_STATUS = REG_2D(0x42),
++ GLAMO_REG_2D_ID1 = REG_2D(0x44),
++ GLAMO_REG_2D_ID2 = REG_2D(0x46),
++ GLAMO_REG_2D_ID3 = REG_2D(0x48),
++};
++
+ #endif /* _GLAMO_REGS_H */
+diff --git a/include/linux/mfd/glamo.h b/include/linux/mfd/glamo.h
+index 529d4f0..ea91a06 100644
+--- a/include/linux/mfd/glamo.h
++++ b/include/linux/mfd/glamo.h
+@@ -41,12 +41,9 @@ enum glamo_engine {
+ GLAMO_ENGINE_RISC = 11,
+ GLAMO_ENGINE_MICROP1_MPEG_ENC = 12,
+ GLAMO_ENGINE_MICROP1_MPEG_DEC = 13,
+-#if 0
+- GLAMO_ENGINE_H264_DEC = 14,
+- GLAMO_ENGINE_RISC1 = 15,
+- GLAMO_ENGINE_SPI = 16,
+-#endif
+ __NUM_GLAMO_ENGINES
+ };
+
++#define GLAMO_ENGINE_ALL (__NUM_GLAMO_ENGINES)
++
+ #endif
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0005-Add-JBT6k74-hook-for-use-by-KMS.patch b/recipes/linux/linux-openmoko-2.6.32/0005-Add-JBT6k74-hook-for-use-by-KMS.patch
new file mode 100644
index 0000000000..744004e7b1
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0005-Add-JBT6k74-hook-for-use-by-KMS.patch
@@ -0,0 +1,49 @@
+From 972c0a58e9e238c266adc77c88dcd8de6f123742 Mon Sep 17 00:00:00 2001
+From: Thomas White <taw@bitwiz.org.uk>
+Date: Sat, 21 Nov 2009 21:42:16 +0100
+Subject: [PATCH 5/9] Add JBT6k74 hook for use by KMS
+
+Signed-off-by: Thomas White <taw@bitwiz.org.uk>
+---
+ drivers/video/backlight/jbt6k74.c | 18 ++++++++++++++++++
+ 1 files changed, 18 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/video/backlight/jbt6k74.c b/drivers/video/backlight/jbt6k74.c
+index 8450904..95ca4cf 100644
+--- a/drivers/video/backlight/jbt6k74.c
++++ b/drivers/video/backlight/jbt6k74.c
+@@ -698,6 +698,22 @@ static int jbt6k74_get_power(struct lcd_device *ld)
+ }
+ }
+
++/* This is utterly, totally horrible. I'm REALLY sorry... */
++struct jbt_info *jbt_global;
++void jbt6k74_action(int val)
++{
++ if ( !jbt_global ) {
++ printk(KERN_CRIT "JBT not initialised!!!\n");
++ return;
++ }
++ if ( val == 0 ) {
++ jbt6k74_enter_power_mode(jbt_global, JBT_POWER_MODE_SLEEP);
++ } else {
++ jbt6k74_enter_power_mode(jbt_global, JBT_POWER_MODE_NORMAL);
++ }
++}
++EXPORT_SYMBOL_GPL(jbt6k74_action);
++
+ struct lcd_ops jbt6k74_lcd_ops = {
+ .set_power = jbt6k74_set_power,
+ .get_power = jbt6k74_get_power,
+@@ -728,6 +744,8 @@ static int __devinit jbt_probe(struct spi_device *spi)
+ if (!jbt)
+ return -ENOMEM;
+
++ jbt_global = jbt;
++
+ jbt->spi = spi;
+
+ jbt->lcd_dev = lcd_device_register("jbt6k74-lcd", &spi->dev, jbt,
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0006-glamo-drm-use-dev_set_drvdata-instead-of-setting-dri.patch b/recipes/linux/linux-openmoko-2.6.32/0006-glamo-drm-use-dev_set_drvdata-instead-of-setting-dri.patch
new file mode 100644
index 0000000000..f685608253
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0006-glamo-drm-use-dev_set_drvdata-instead-of-setting-dri.patch
@@ -0,0 +1,29 @@
+From be2d944c2b29b19b4cee7c64b00bd75cf7209724 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Tue, 22 Dec 2009 16:11:27 +0100
+Subject: [PATCH 6/9] glamo-drm: use dev_set_drvdata instead of setting driver_data directly
+
+* driver_data is private since 2.6.32
+ http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b4028437876866aba4747a655ede00f892089e14
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ drivers/mfd/glamo/glamo-drm-drv.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/mfd/glamo/glamo-drm-drv.c b/drivers/mfd/glamo/glamo-drm-drv.c
+index f30097e..1907a47 100644
+--- a/drivers/mfd/glamo/glamo-drm-drv.c
++++ b/drivers/mfd/glamo/glamo-drm-drv.c
+@@ -347,7 +347,7 @@ out_release_regs:
+ release_mem_region(gdrm->reg->start, resource_size(gdrm->reg));
+ out_free:
+ kfree(gdrm);
+- pdev->dev.driver_data = NULL;
++ dev_set_drvdata(&pdev->dev, NULL);
+ return rc;
+ }
+
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0007-glamo-drm-select-DRM_KMS_HELPER-for-crtc-functions.patch b/recipes/linux/linux-openmoko-2.6.32/0007-glamo-drm-select-DRM_KMS_HELPER-for-crtc-functions.patch
new file mode 100644
index 0000000000..68751942a9
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0007-glamo-drm-select-DRM_KMS_HELPER-for-crtc-functions.patch
@@ -0,0 +1,24 @@
+From 8bb128ce2474ef10c71ea681fa01e574c1ec3114 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Tue, 22 Dec 2009 16:32:57 +0100
+Subject: [PATCH 7/9] glamo-drm: select DRM_KMS_HELPER for crtc functions
+
+---
+ drivers/mfd/glamo/Kconfig | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/mfd/glamo/Kconfig b/drivers/mfd/glamo/Kconfig
+index 214c70e..a12ebf6 100644
+--- a/drivers/mfd/glamo/Kconfig
++++ b/drivers/mfd/glamo/Kconfig
+@@ -47,6 +47,7 @@ config MFD_GLAMO_DRM
+ select FB_CFB_FILLRECT
+ select FB_CFB_COPYAREA
+ select FB_CFB_IMAGEBLIT
++ select DRM_KMS_HELPER
+ help
+ Direct Rendering Manager interface for the S-Media Glamo chip, as
+ used in Openmoko FreeRunner (GTA02).
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0008-Fix-crash-when-reading-Glamo-registers-via-sysfs.patch b/recipes/linux/linux-openmoko-2.6.32/0008-Fix-crash-when-reading-Glamo-registers-via-sysfs.patch
new file mode 100644
index 0000000000..f5da51ed95
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0008-Fix-crash-when-reading-Glamo-registers-via-sysfs.patch
@@ -0,0 +1,38 @@
+From f6debba05c9f6d0337324dc0eaa8e892d2d3142b Mon Sep 17 00:00:00 2001
+From: Thomas White <taw@bitwiz.org.uk>
+Date: Thu, 4 Feb 2010 00:07:25 +0100
+Subject: [PATCH 8/9] Fix crash when reading Glamo registers via sysfs
+
+glamo-core didn't ioremap() some areas, so don't try to read them.
+
+Signed-off-by: Thomas White <taw@bitwiz.org.uk>
+---
+ drivers/mfd/glamo/glamo-core.c | 8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/mfd/glamo/glamo-core.c b/drivers/mfd/glamo/glamo-core.c
+index a614d44..faaf269 100644
+--- a/drivers/mfd/glamo/glamo-core.c
++++ b/drivers/mfd/glamo/glamo-core.c
+@@ -90,14 +90,14 @@ static const struct reg_range reg_range[] = {
+ /* { 0x0500, 0x300, "ISP", 0 }, */
+ /* { 0x0800, 0x400, "JPEG", 0 }, */
+ /* { 0x0c00, 0xcc, "MPEG", 0 }, */
+- { 0x1100, 0xb2, "LCD 1", 1 },
+- { 0x1200, 0x64, "LCD 2", 1 },
+- { 0x1400, 0x42, "MMC", 1 },
++ { 0x1100, 0xb2, "LCD 1", 0 },
++ { 0x1200, 0x64, "LCD 2", 0 },
++ { 0x1400, 0x42, "MMC", 0 },
+ /* { 0x1500, 0x080, "MPU 0", 0 },
+ { 0x1580, 0x080, "MPU 1", 0 },
+ { 0x1600, 0x080, "Cmd Queue", 0 },
+ { 0x1680, 0x080, "RISC CPU", 0 },*/
+- { 0x1700, 0x400, "2D Unit", 1 },
++ { 0x1700, 0x400, "2D Unit", 0 },
+ /* { 0x1b00, 0x900, "3D Unit", 0 }, */
+ };
+
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0009-A-couple-of-GEM-refcounting-fixes.patch b/recipes/linux/linux-openmoko-2.6.32/0009-A-couple-of-GEM-refcounting-fixes.patch
new file mode 100644
index 0000000000..7fb2fa8762
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0009-A-couple-of-GEM-refcounting-fixes.patch
@@ -0,0 +1,42 @@
+From 75e660e406cd4941f253ddbdeaa45f59d107a014 Mon Sep 17 00:00:00 2001
+From: Thomas White <taw@bitwiz.org.uk>
+Date: Sun, 7 Feb 2010 13:27:20 +0100
+Subject: [PATCH 9/9] A couple of GEM refcounting fixes
+
+This allows GEM objects to be freed properly, which wasn't working before.
+
+Signed-off-by: Thomas White <taw@bitwiz.org.uk>
+---
+ drivers/mfd/glamo/glamo-buffer.c | 2 ++
+ drivers/mfd/glamo/glamo-drm-drv.c | 2 ++
+ 2 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/mfd/glamo/glamo-buffer.c b/drivers/mfd/glamo/glamo-buffer.c
+index 45500d3..82ea0c0 100644
+--- a/drivers/mfd/glamo/glamo-buffer.c
++++ b/drivers/mfd/glamo/glamo-buffer.c
+@@ -245,6 +245,8 @@ int glamo_ioctl_gem_mmap(struct drm_device *dev, void *data,
+ if (!gobj->mmap_offset) {
+ ret = glamo_gem_create_mmap_offset(obj);
+ if (ret) {
++ printk(KERN_CRIT "Couldn't create mmap offset\n");
++ drm_gem_object_unreference(obj);
+ mutex_unlock(&dev->struct_mutex);
+ return ret;
+ }
+diff --git a/drivers/mfd/glamo/glamo-drm-drv.c b/drivers/mfd/glamo/glamo-drm-drv.c
+index 1907a47..e7220d5 100644
+--- a/drivers/mfd/glamo/glamo-drm-drv.c
++++ b/drivers/mfd/glamo/glamo-drm-drv.c
+@@ -153,6 +153,8 @@ static int glamodrm_unload(struct drm_device *dev)
+
+ static struct vm_operations_struct glamodrm_gem_vm_ops = {
+ .fault = glamodrm_gem_fault,
++ .open = drm_gem_vm_open,
++ .close = drm_gem_vm_close,
+ };
+
+ static struct drm_driver glamodrm_drm_driver = {
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0010-Simplify-the-JBT6k74-driver.patch b/recipes/linux/linux-openmoko-2.6.32/0010-Simplify-the-JBT6k74-driver.patch
new file mode 100644
index 0000000000..ca0c2af15b
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0010-Simplify-the-JBT6k74-driver.patch
@@ -0,0 +1,667 @@
+From cb84d543b9465a8ea48b504b1dfb745c6682a50e Mon Sep 17 00:00:00 2001
+From: Thomas White <taw@bitwiz.org.uk>
+Date: Sun, 28 Feb 2010 15:20:57 +0100
+Subject: [PATCH 1/2] Simplify the JBT6k74 driver
+
+Simplify the JBT6k74 driver
+
+We don't need all the native sleep states - they just complicate things. Instead, just
+use the LDO "power switch" to send it firmly to sleep and wake it up in a virgin state
+each time.
+
+Signed-off-by: Thomas White <taw@bitwiz.org.uk>
+---
+ drivers/mfd/glamo/glamo-display.c | 116 ++++++++++++------------
+ drivers/mfd/glamo/glamo-display.h | 2 +
+ drivers/mfd/glamo/glamo-drm-private.h | 10 ++
+ drivers/mfd/glamo/glamo-kms-fb.c | 54 ++----------
+ drivers/video/backlight/jbt6k74.c | 160 ++++++++-------------------------
+ include/linux/jbt6k74.h | 1 -
+ 6 files changed, 115 insertions(+), 228 deletions(-)
+
+diff --git a/drivers/mfd/glamo/glamo-display.c b/drivers/mfd/glamo/glamo-display.c
+index 34a665a..a384c8b 100644
+--- a/drivers/mfd/glamo/glamo-display.c
++++ b/drivers/mfd/glamo/glamo-display.c
+@@ -239,14 +239,6 @@ static int glamo_run_lcd_script(struct glamodrm_handle *gdrm,
+ }
+
+
+-extern void jbt6k74_action(int val);
+-
+-/* Power on/off */
+-static void glamo_crtc_dpms(struct drm_crtc *crtc, int mode)
+-{
+-}
+-
+-
+ static bool glamo_crtc_mode_fixup(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+@@ -275,6 +267,12 @@ static int glamo_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
+ gcrtc = to_glamo_crtc(crtc);
+ gdrm = gcrtc->gdrm; /* Here it is! */
+
++ if ( !gcrtc->pixel_clock_on ) {
++ printk(KERN_WARNING "[glamo-drm] Refusing to set base while "
++ "pixel clock is off.\n");
++ return -EBUSY;
++ }
++
+ gfb = to_glamo_framebuffer(crtc->fb);
+ obj = gfb->obj;
+ gobj = obj->driver_private;
+@@ -306,6 +304,12 @@ static int glamo_crtc_mode_set(struct drm_crtc *crtc,
+ gcrtc = to_glamo_crtc(crtc);
+ gdrm = gcrtc->gdrm; /* Here it is! */
+
++ if ( !gcrtc->pixel_clock_on ) {
++ printk(KERN_WARNING "[glamo-drm] Refusing to set mode while "
++ "pixel clock is off.\n");
++ return -EBUSY;
++ }
++
+ glamo_lcd_cmd_mode(gdrm, 1);
+
+ glamo_engine_reclock(gdrm->glamo_core, GLAMO_ENGINE_LCD, mode->clock);
+@@ -354,10 +358,47 @@ static int glamo_crtc_mode_set(struct drm_crtc *crtc,
+
+ glamo_crtc_mode_set_base(crtc, 0, 0, old_fb);
+
++ gcrtc->current_mode = *mode;
++ gcrtc->current_mode_set = 1;
++ gcrtc->current_fb = old_fb;
++
+ return 0;
+ }
+
+
++extern void jbt6k74_action(int val);
++
++/* This is not the right place to switch power on/off, because the helper
++ * stuff ends up calling this before/after setting the mode. We can't
++ * set modes with the display off (although backlight off would be OK) */
++static void glamo_crtc_dpms(struct drm_crtc *crtc, int mode)
++{
++ /* do nothing */
++}
++
++
++void glamo_lcd_power(struct glamodrm_handle *gdrm, int mode)
++{
++ struct drm_crtc *crtc = gdrm->crtc;
++ struct glamo_crtc *gcrtc = to_glamo_crtc(crtc);
++
++ if ( mode ) {
++ glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_LCD);
++ gcrtc->pixel_clock_on = 1;
++ jbt6k74_action(1);
++ if ( gcrtc->current_mode_set ) {
++ glamo_crtc_mode_set(crtc, &gcrtc->current_mode,
++ &gcrtc->current_mode, 0, 0,
++ gcrtc->current_fb);
++ }
++ } else {
++ jbt6k74_action(0);
++ glamo_engine_suspend(gdrm->glamo_core, GLAMO_ENGINE_LCD);
++ gcrtc->pixel_clock_on = 0;
++ }
++}
++
++
+ static void glamo_crtc_prepare(struct drm_crtc *crtc)
+ {
+ }
+@@ -725,6 +766,8 @@ int glamo_display_init(struct drm_device *dev)
+ + sizeof(struct drm_connector *), GFP_KERNEL);
+ if (glamo_crtc == NULL) return 1;
+ glamo_crtc->gdrm = gdrm;
++ gdrm->crtc = (struct drm_crtc *)glamo_crtc;
++ glamo_crtc->pixel_clock_on = 1;
+ glamo_crtc->blank_mode = DRM_MODE_DPMS_OFF;
+ drm_crtc_init(dev, &glamo_crtc->base, &glamo_crtc_funcs);
+ drm_crtc_helper_add(&glamo_crtc->base, &glamo_crtc_helper_funcs);
+@@ -808,62 +851,23 @@ int glamo_display_init(struct drm_device *dev)
+
+ void glamo_display_suspend(struct glamodrm_handle *gdrm)
+ {
+- gdrm->saved_width = reg_read_lcd(gdrm, GLAMO_REG_LCD_WIDTH);
+- gdrm->saved_height = reg_read_lcd(gdrm, GLAMO_REG_LCD_HEIGHT);
+- gdrm->saved_pitch = reg_read_lcd(gdrm, GLAMO_REG_LCD_PITCH);
+- gdrm->saved_htotal = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_TOTAL);
+- gdrm->saved_hrtrst = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_START);
+- gdrm->saved_hrtren = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_END);
+- gdrm->saved_hdspst = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_START);
+- gdrm->saved_hdspen = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_END);
+- gdrm->saved_vtotal = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_TOTAL);
+- gdrm->saved_vrtrst = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_START);
+- gdrm->saved_vrtren = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_END);
+- gdrm->saved_vdspst = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_START);
+- gdrm->saved_vdspen = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_END);
++ /* do nothing */
+ }
+
+
+ void glamo_display_resume(struct glamodrm_handle *gdrm)
+ {
++ struct drm_crtc *crtc = gdrm->crtc;
++ struct glamo_crtc *gcrtc = to_glamo_crtc(crtc);
++
+ glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_LCD);
+ glamo_engine_reset(gdrm->glamo_core, GLAMO_ENGINE_LCD);
+ glamo_run_lcd_script(gdrm, lcd_init_script,
+ ARRAY_SIZE(lcd_init_script));
+
+- /* Restore timings */
+- glamo_lcd_cmd_mode(gdrm, 1);
+- glamo_engine_reclock(gdrm->glamo_core, GLAMO_ENGINE_LCD,
+- gdrm->saved_clock);
+- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_WIDTH, GLAMO_LCD_WIDTH_MASK,
+- gdrm->saved_width);
+- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HEIGHT, GLAMO_LCD_HEIGHT_MASK,
+- gdrm->saved_height);
+- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_PITCH, GLAMO_LCD_PITCH_MASK,
+- gdrm->saved_pitch);
+- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_TOTAL,
+- GLAMO_LCD_HV_TOTAL_MASK, gdrm->saved_htotal);
+- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_START,
+- GLAMO_LCD_HV_RETR_START_MASK, gdrm->saved_hrtrst);
+- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_END,
+- GLAMO_LCD_HV_RETR_END_MASK, gdrm->saved_hrtren);
+- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_START,
+- GLAMO_LCD_HV_RETR_DISP_START_MASK,
+- gdrm->saved_hdspst);
+- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_END,
+- GLAMO_LCD_HV_RETR_DISP_END_MASK,
+- gdrm->saved_hdspen);
+- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_TOTAL,
+- GLAMO_LCD_HV_TOTAL_MASK, gdrm->saved_vtotal);
+- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_START,
+- GLAMO_LCD_HV_RETR_START_MASK, gdrm->saved_vrtrst);
+- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_END,
+- GLAMO_LCD_HV_RETR_END_MASK, gdrm->saved_vrtren);
+- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_START,
+- GLAMO_LCD_HV_RETR_DISP_START_MASK,
+- gdrm->saved_vdspst);
+- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_END,
+- GLAMO_LCD_HV_RETR_DISP_END_MASK,
+- gdrm->saved_vdspen);
+- glamo_lcd_cmd_mode(gdrm, 0);
++ if ( gcrtc->current_mode_set ) {
++ glamo_crtc_mode_set(crtc, &gcrtc->current_mode,
++ &gcrtc->current_mode, 0, 0,
++ gcrtc->current_fb);
++ }
+ }
+diff --git a/drivers/mfd/glamo/glamo-display.h b/drivers/mfd/glamo/glamo-display.h
+index d6f21bc..728bba5 100644
+--- a/drivers/mfd/glamo/glamo-display.h
++++ b/drivers/mfd/glamo/glamo-display.h
+@@ -36,4 +36,6 @@ extern int glamo_framebuffer_create(struct drm_device *dev,
+ extern void glamo_display_suspend(struct glamodrm_handle *gdrm);
+ extern void glamo_display_resume(struct glamodrm_handle *gdrm);
+
++extern void glamo_lcd_power(struct glamodrm_handle *gdrm, int mode);
++
+ #endif /* __GLAMO_DISPLAY_H */
+diff --git a/drivers/mfd/glamo/glamo-drm-private.h b/drivers/mfd/glamo/glamo-drm-private.h
+index 7949a2e..4e24019 100644
+--- a/drivers/mfd/glamo/glamo-drm-private.h
++++ b/drivers/mfd/glamo/glamo-drm-private.h
+@@ -106,6 +106,9 @@ struct glamodrm_handle {
+
+ /* A scratch block */
+ struct drm_mm_node *scratch;
++
++ /* We only have one */
++ struct drm_crtc *crtc;
+ };
+
+
+@@ -118,11 +121,18 @@ struct drm_glamo_gem_object {
+
+
+ struct glamo_crtc {
++
+ struct drm_crtc base;
+ struct glamodrm_handle *gdrm;
+ /* a mode_set for fbdev users on this crtc */
+ struct drm_mode_set mode_set;
+ int blank_mode;
++
++ int pixel_clock_on;
++
++ int current_mode_set;
++ struct drm_display_mode current_mode;
++ struct drm_framebuffer *current_fb;
+ };
+
+
+diff --git a/drivers/mfd/glamo/glamo-kms-fb.c b/drivers/mfd/glamo/glamo-kms-fb.c
+index 61cd605..57680ed 100644
+--- a/drivers/mfd/glamo/glamo-kms-fb.c
++++ b/drivers/mfd/glamo/glamo-kms-fb.c
+@@ -253,64 +253,24 @@ static void glamofb_on(struct fb_info *info)
+ {
+ struct glamofb_par *par = info->par;
+ struct drm_device *dev = par->dev;
+- struct drm_crtc *crtc;
+- struct drm_encoder *encoder;
+- int i;
++ struct glamodrm_handle *gdrm = dev->dev_private;
+
+- /*
+- * For each CRTC in this fb, find all associated encoders
+- * and turn them off, then turn off the CRTC.
+- */
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
++ printk(KERN_CRIT "Turning on display...\n");
+
+- for (i = 0; i < par->crtc_count; i++)
+- if (crtc->base.id == par->crtc_ids[i])
+- break;
+-
+- crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
++ gdrm = dev->dev_private;
+
+- /* Found a CRTC on this fb, now find encoders */
+- list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+- if (encoder->crtc == crtc) {
+- struct drm_encoder_helper_funcs *encoder_funcs;
+- encoder_funcs = encoder->helper_private;
+- encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
+- }
+- }
+- }
++ glamo_lcd_power(gdrm, 1);
+ }
+
+ static void glamofb_off(struct fb_info *info, int dpms_mode)
+ {
+ struct glamofb_par *par = info->par;
+ struct drm_device *dev = par->dev;
+- struct drm_crtc *crtc;
+- struct drm_encoder *encoder;
+- int i;
++ struct glamodrm_handle *gdrm = dev->dev_private;
+
+- /*
+- * For each CRTC in this fb, find all associated encoders
+- * and turn them off, then turn off the CRTC.
+- */
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+-
+- for (i = 0; i < par->crtc_count; i++)
+- if (crtc->base.id == par->crtc_ids[i])
+- break;
++ printk(KERN_CRIT "Turning off display...\n");
+
+- /* Found a CRTC on this fb, now find encoders */
+- list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+- if (encoder->crtc == crtc) {
+- struct drm_encoder_helper_funcs *encoder_funcs;
+- encoder_funcs = encoder->helper_private;
+- encoder_funcs->dpms(encoder, dpms_mode);
+- }
+- }
+- if (dpms_mode == DRM_MODE_DPMS_OFF)
+- crtc_funcs->dpms(crtc, dpms_mode);
+- }
++ glamo_lcd_power(gdrm, 0);
+ }
+
+ static int glamofb_blank(int blank, struct fb_info *info)
+diff --git a/drivers/video/backlight/jbt6k74.c b/drivers/video/backlight/jbt6k74.c
+index 95ca4cf..9554cb3 100644
+--- a/drivers/video/backlight/jbt6k74.c
++++ b/drivers/video/backlight/jbt6k74.c
+@@ -107,14 +107,12 @@ enum jbt_resolution {
+ };
+
+ enum jbt_power_mode {
+- JBT_POWER_MODE_DEEP_STANDBY,
+- JBT_POWER_MODE_SLEEP,
++ JBT_POWER_MODE_OFF,
+ JBT_POWER_MODE_NORMAL,
+ };
+
+ static const char *jbt_power_mode_names[] = {
+- [JBT_POWER_MODE_DEEP_STANDBY] = "deep-standby",
+- [JBT_POWER_MODE_SLEEP] = "sleep",
++ [JBT_POWER_MODE_OFF] = "off",
+ [JBT_POWER_MODE_NORMAL] = "normal",
+ };
+
+@@ -260,14 +258,18 @@ static int jbt_init_regs(struct jbt_info *jbt)
+ return ret ? -EIO : 0;
+ }
+
+-static int jbt_standby_to_sleep(struct jbt_info *jbt)
++
++static int jbt_off_to_normal(struct jbt_info *jbt)
+ {
+ int ret;
++
+ struct jbt6k74_platform_data *pdata = jbt->spi->dev.platform_data;
+
+ gpio_set_value_cansleep(pdata->gpio_reset, 1);
+ ret = regulator_bulk_enable(ARRAY_SIZE(jbt->supplies), jbt->supplies);
+
++ mdelay(30);
++
+ /* three times command zero */
+ ret |= jbt_reg_write_nodata(jbt, 0x00);
+ mdelay(1);
+@@ -279,18 +281,11 @@ static int jbt_standby_to_sleep(struct jbt_info *jbt)
+ /* deep standby out */
+ ret |= jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x11);
+ mdelay(1);
+- ret = jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE, 0x28);
++ ret |= jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE, 0x28);
+
+ /* (re)initialize register set */
+ ret |= jbt_init_regs(jbt);
+
+- return ret ? -EIO : 0;
+-}
+-
+-static int jbt_sleep_to_normal(struct jbt_info *jbt)
+-{
+- int ret;
+-
+ /* Make sure we are 120 ms after SLEEP_OUT */
+ if (time_before(jiffies, jbt->next_sleep))
+ mdelay(jiffies_to_msecs(jbt->next_sleep - jiffies));
+@@ -320,53 +315,34 @@ static int jbt_sleep_to_normal(struct jbt_info *jbt)
+
+ /* Sleep mode off */
+ ret |= jbt_reg_write_nodata(jbt, JBT_REG_SLEEP_OUT);
+- jbt->next_sleep = jiffies + msecs_to_jiffies(120);
+
+- /* Allow the booster and display controller to restart stably */
+- mdelay(5);
+-
+- return ret ? -EIO : 0;
+-}
+-
+-static int jbt_normal_to_sleep(struct jbt_info *jbt)
+-{
+- int ret;
+-
+- /* Make sure we are 120 ms after SLEEP_OUT */
+- while (time_before(jiffies, jbt->next_sleep))
+- cpu_relax();
+-
+- ret = jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_OFF);
+- ret |= jbt_reg_write16(jbt, JBT_REG_OUTPUT_CONTROL, 0x8000 | 1 << 3);
+- ret |= jbt_reg_write_nodata(jbt, JBT_REG_SLEEP_IN);
+ jbt->next_sleep = jiffies + msecs_to_jiffies(120);
+
+- /* Allow the internal circuits to stop automatically */
++ /* Allow the booster and display controller to restart stably */
+ mdelay(5);
+
+ return ret ? -EIO : 0;
+ }
+
+-static int jbt_sleep_to_standby(struct jbt_info *jbt)
++static int jbt_normal_to_off(struct jbt_info *jbt)
+ {
+ int ret;
+ struct jbt6k74_platform_data *pdata = jbt->spi->dev.platform_data;
+
+- ret = jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x00);
+-
+- if (!ret)
+- ret = regulator_bulk_disable(ARRAY_SIZE(jbt->supplies), jbt->supplies);
++ /* Pull the plug! */
++ ret = regulator_bulk_disable(ARRAY_SIZE(jbt->supplies),
++ jbt->supplies);
+
+ if (!ret)
+ gpio_set_value_cansleep(pdata->gpio_reset, 0);
+
+- return ret;
++ return ret ? -EIO : 0;
+ }
+
++
+ static int jbt6k74_enter_power_mode(struct jbt_info *jbt,
+ enum jbt_power_mode new_mode)
+ {
+- struct jbt6k74_platform_data *pdata = jbt->spi->dev.platform_data;
+ int ret = -EINVAL;
+
+ dev_dbg(&jbt->spi->dev, "entering (old_state=%s, new_state=%s)\n",
+@@ -375,49 +351,14 @@ static int jbt6k74_enter_power_mode(struct jbt_info *jbt,
+
+ mutex_lock(&jbt->lock);
+
+- if (jbt->suspended) {
+- switch (new_mode) {
+- case JBT_POWER_MODE_DEEP_STANDBY:
+- case JBT_POWER_MODE_SLEEP:
+- case JBT_POWER_MODE_NORMAL:
+- ret = 0;
+- jbt->suspend_mode = new_mode;
+- break;
+- default:
+- break;
+- }
+- } else if (new_mode == JBT_POWER_MODE_NORMAL &&
+- pdata->enable_pixel_clock) {
+- pdata->enable_pixel_clock(&jbt->spi->dev, 1);
+- }
+-
+ switch (jbt->power_mode) {
+- case JBT_POWER_MODE_DEEP_STANDBY:
+- switch (new_mode) {
+- case JBT_POWER_MODE_DEEP_STANDBY:
+- ret = 0;
+- break;
+- case JBT_POWER_MODE_SLEEP:
+- ret = jbt_standby_to_sleep(jbt);
+- break;
+- case JBT_POWER_MODE_NORMAL:
+- /* first transition into sleep */
+- ret = jbt_standby_to_sleep(jbt);
+- /* then transition into normal */
+- ret |= jbt_sleep_to_normal(jbt);
+- break;
+- }
+- break;
+- case JBT_POWER_MODE_SLEEP:
++ case JBT_POWER_MODE_OFF:
+ switch (new_mode) {
+- case JBT_POWER_MODE_SLEEP:
++ case JBT_POWER_MODE_OFF:
+ ret = 0;
+ break;
+- case JBT_POWER_MODE_DEEP_STANDBY:
+- ret = jbt_sleep_to_standby(jbt);
+- break;
+ case JBT_POWER_MODE_NORMAL:
+- ret = jbt_sleep_to_normal(jbt);
++ ret = jbt_off_to_normal(jbt);
+ break;
+ }
+ break;
+@@ -426,25 +367,16 @@ static int jbt6k74_enter_power_mode(struct jbt_info *jbt,
+ case JBT_POWER_MODE_NORMAL:
+ ret = 0;
+ break;
+- case JBT_POWER_MODE_DEEP_STANDBY:
+- /* first transition into sleep */
+- ret = jbt_normal_to_sleep(jbt);
+- /* then transition into deep standby */
+- ret |= jbt_sleep_to_standby(jbt);
+- break;
+- case JBT_POWER_MODE_SLEEP:
+- ret = jbt_normal_to_sleep(jbt);
++ case JBT_POWER_MODE_OFF:
++ ret = jbt_normal_to_off(jbt);
+ break;
+ }
+ }
+
+ if (ret == 0) {
+ jbt->power_mode = new_mode;
+- if (new_mode != JBT_POWER_MODE_NORMAL &&
+- pdata->enable_pixel_clock)
+- pdata->enable_pixel_clock(&jbt->spi->dev, 0);
+ } else {
+- dev_err(&jbt->spi->dev, "Failed enter state '%s': %d\n",
++ dev_err(&jbt->spi->dev, "Failed to enter state '%s': %d\n",
+ jbt_power_mode_names[new_mode], ret);
+ }
+
+@@ -470,8 +402,8 @@ static int jbt6k74_set_resolution(struct jbt_info *jbt,
+ if (jbt->power_mode == JBT_POWER_MODE_NORMAL) {
+
+ /* first transition into sleep */
+- ret = jbt_normal_to_sleep(jbt);
+- ret |= jbt_sleep_to_normal(jbt);
++ ret = jbt_normal_to_off(jbt);
++ ret |= jbt_off_to_normal(jbt);
+
+ if (ret) {
+ jbt->resolution = old_resolution;
+@@ -589,7 +521,7 @@ static ssize_t reset_write(struct device *dev, struct device_attribute *attr,
+
+ mutex_unlock(&jbt->lock);
+
+- jbt->power_mode = JBT_POWER_MODE_DEEP_STANDBY;
++ jbt->power_mode = JBT_POWER_MODE_OFF;
+ jbt6k74_enter_power_mode(jbt, old_power_mode);
+
+ return count;
+@@ -616,27 +548,6 @@ static struct attribute_group jbt_attr_group = {
+ .attrs = jbt_sysfs_entries,
+ };
+
+-/* FIXME: This in an ugly hack to delay display blanking.
+- When the jbt is in sleep mode it displays an all white screen and thus one
+- will a see a short flash.
+- By delaying the blanking we will give the backlight a chance to turn off and
+- thus avoid getting the flash */
+-static void jbt_blank_worker(struct work_struct *work)
+-{
+- struct jbt_info *jbt = container_of(work, struct jbt_info,
+- blank_work.work);
+-
+- switch (jbt->blank_mode) {
+- case FB_BLANK_NORMAL:
+- jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_SLEEP);
+- break;
+- case FB_BLANK_POWERDOWN:
+- jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_DEEP_STANDBY);
+- break;
+- default:
+- break;
+- }
+-}
+
+ static int jbt6k74_set_mode(struct lcd_device *ld, struct fb_videomode *m)
+ {
+@@ -649,7 +560,7 @@ static int jbt6k74_set_mode(struct lcd_device *ld, struct fb_videomode *m)
+ ret = jbt6k74_set_resolution(jbt, JBT_RESOLUTION_VGA);
+ } else {
+ dev_err(&jbt->spi->dev, "Unknown resolution.\n");
+- jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_SLEEP);
++ jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_OFF);
+ }
+
+ return ret;
+@@ -671,11 +582,11 @@ static int jbt6k74_set_power(struct lcd_device *ld, int power)
+ break;
+ case FB_BLANK_NORMAL:
+ dev_dbg(&jbt->spi->dev, "blank\n");
+- ret = schedule_delayed_work(&jbt->blank_work, HZ);
++ ret = jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_OFF);
+ break;
+ case FB_BLANK_POWERDOWN:
+ dev_dbg(&jbt->spi->dev, "powerdown\n");
+- ret = schedule_delayed_work(&jbt->blank_work, HZ);
++ ret = jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_OFF);
+ break;
+ default:
+ break;
+@@ -691,10 +602,10 @@ static int jbt6k74_get_power(struct lcd_device *ld)
+ switch (jbt->power_mode) {
+ case JBT_POWER_MODE_NORMAL:
+ return FB_BLANK_UNBLANK;
+- case JBT_POWER_MODE_SLEEP:
++ case JBT_POWER_MODE_OFF:
+ return FB_BLANK_NORMAL;
+ default:
+- return JBT_POWER_MODE_DEEP_STANDBY;
++ return JBT_POWER_MODE_OFF;
+ }
+ }
+
+@@ -707,7 +618,7 @@ void jbt6k74_action(int val)
+ return;
+ }
+ if ( val == 0 ) {
+- jbt6k74_enter_power_mode(jbt_global, JBT_POWER_MODE_SLEEP);
++ jbt6k74_enter_power_mode(jbt_global, JBT_POWER_MODE_OFF);
+ } else {
+ jbt6k74_enter_power_mode(jbt_global, JBT_POWER_MODE_NORMAL);
+ }
+@@ -756,11 +667,9 @@ static int __devinit jbt_probe(struct spi_device *spi)
+ goto err_free_drvdata;
+ }
+
+- INIT_DELAYED_WORK(&jbt->blank_work, jbt_blank_worker);
+-
+ jbt->resolution = JBT_RESOLUTION_VGA;
+- jbt->power_mode = JBT_POWER_MODE_DEEP_STANDBY;
+ jbt->next_sleep = jiffies + msecs_to_jiffies(120);
++ jbt->power_mode = JBT_POWER_MODE_OFF;
+ mutex_init(&jbt->lock);
+
+ dev_set_drvdata(&spi->dev, jbt);
+@@ -856,9 +765,10 @@ static int jbt_suspend(struct spi_device *spi, pm_message_t state)
+
+ jbt->suspend_mode = jbt->power_mode;
+
+- jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_DEEP_STANDBY);
+- jbt->suspended = 1;
++ printk(KERN_CRIT "[jbt] powering off for suspend\n");
++ jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_OFF);
+
++ printk(KERN_CRIT "[jbt] done\n");
+ dev_info(&spi->dev, "suspended\n");
+
+ return 0;
+@@ -869,11 +779,13 @@ int jbt6k74_resume(struct spi_device *spi)
+ struct jbt_info *jbt = dev_get_drvdata(&spi->dev);
+ dev_info(&spi->dev, "starting resume: %d\n", jbt->suspend_mode);
+
++ printk(KERN_CRIT "[jbt] powering on for resume\n");
+ mdelay(20);
+
+ jbt->suspended = 0;
+ jbt6k74_enter_power_mode(jbt, jbt->suspend_mode);
+
++ printk(KERN_CRIT "[jbt] done\n");
+ dev_info(&spi->dev, "resumed: %d\n", jbt->suspend_mode);
+
+ return 0;
+diff --git a/include/linux/jbt6k74.h b/include/linux/jbt6k74.h
+index 75488c4..4cf760c 100644
+--- a/include/linux/jbt6k74.h
++++ b/include/linux/jbt6k74.h
+@@ -13,7 +13,6 @@
+ */
+ struct jbt6k74_platform_data {
+ void (*probe_completed)(struct device *dev);
+- void (*enable_pixel_clock)(struct device *dev, int enable);
+
+ int gpio_reset;
+ };
+--
+1.7.0
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0011-Don-t-choke-if-userspace-provides-a-pixel-clock-valu.patch b/recipes/linux/linux-openmoko-2.6.32/0011-Don-t-choke-if-userspace-provides-a-pixel-clock-valu.patch
new file mode 100644
index 0000000000..0d47c1263f
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0011-Don-t-choke-if-userspace-provides-a-pixel-clock-valu.patch
@@ -0,0 +1,79 @@
+From 73abadc5bbbc94f4ca67effc5f5c3174c2a3ac48 Mon Sep 17 00:00:00 2001
+From: Thomas White <taw@bitwiz.org.uk>
+Date: Sun, 28 Feb 2010 15:40:13 +0100
+Subject: [PATCH 2/2] Don't choke if userspace provides a pixel clock value
+
+Don't choke if userspace provides a pixel clock value
+
+Signed-off-by: Thomas White <taw@bitwiz.org.uk>
+---
+ drivers/mfd/glamo/glamo-kms-fb.c | 46 ++++++++++++++++++-------------------
+ 1 files changed, 22 insertions(+), 24 deletions(-)
+
+diff --git a/drivers/mfd/glamo/glamo-kms-fb.c b/drivers/mfd/glamo/glamo-kms-fb.c
+index 57680ed..6d4b9ea 100644
+--- a/drivers/mfd/glamo/glamo-kms-fb.c
++++ b/drivers/mfd/glamo/glamo-kms-fb.c
+@@ -177,37 +177,35 @@ static int glamofb_set_par(struct fb_info *info)
+ struct drm_device *dev = par->dev;
+ struct fb_var_screeninfo *var = &info->var;
+ int i;
++ struct drm_crtc *crtc;
++ int ret;
+
+ DRM_DEBUG("%d %d\n", var->xres, var->pixclock);
+
+ if (var->pixclock != -1) {
++ DRM_ERROR("Warning: userspace gave me a pixel clock value (%i)"
++ "- I'm ignoring it.\n", var->pixclock);
++ }
+
+- DRM_ERROR("PIXEL CLOCK SET\n");
+- return -EINVAL;
+- } else {
+- struct drm_crtc *crtc;
+- int ret;
+-
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct glamo_crtc *glamo_crtc = to_glamo_crtc(crtc);
+-
+- for (i = 0; i < par->crtc_count; i++)
+- if (crtc->base.id == par->crtc_ids[i])
+- break;
+-
+- if (i == par->crtc_count)
+- continue;
+-
+- if (crtc->fb == glamo_crtc->mode_set.fb) {
+- mutex_lock(&dev->mode_config.mutex);
+- ret = crtc->funcs->set_config(&glamo_crtc->mode_set);
+- mutex_unlock(&dev->mode_config.mutex);
+- if (ret)
+- return ret;
+- }
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ struct glamo_crtc *glamo_crtc = to_glamo_crtc(crtc);
++
++ for (i = 0; i < par->crtc_count; i++)
++ if (crtc->base.id == par->crtc_ids[i])
++ break;
++
++ if (i == par->crtc_count)
++ continue;
++
++ if (crtc->fb == glamo_crtc->mode_set.fb) {
++ mutex_lock(&dev->mode_config.mutex);
++ ret = crtc->funcs->set_config(&glamo_crtc->mode_set);
++ mutex_unlock(&dev->mode_config.mutex);
++ if (ret)
++ return ret;
+ }
+- return 0;
+ }
++ return 0;
+ }
+
+ static int glamofb_pan_display(struct fb_var_screeninfo *var,
+--
+1.7.0
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0012-Report-all-FB-modes-given-by-the-lower-levels.patch b/recipes/linux/linux-openmoko-2.6.32/0012-Report-all-FB-modes-given-by-the-lower-levels.patch
new file mode 100644
index 0000000000..ac19dbd5d2
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0012-Report-all-FB-modes-given-by-the-lower-levels.patch
@@ -0,0 +1,102 @@
+From f8448d2b08c1e2cfd0faba0e3f3c4c58e4ecaa9f Mon Sep 17 00:00:00 2001
+From: Thomas White <taw@bitwiz.org.uk>
+Date: Mon, 1 Mar 2010 22:02:26 +0100
+Subject: [PATCH 12/13] Report all FB modes given by the lower levels
+
+Signed-off-by: Thomas White <taw@bitwiz.org.uk>
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ drivers/mfd/glamo/glamo-display.c | 70 +++++++++++++++++++++----------------
+ 1 files changed, 40 insertions(+), 30 deletions(-)
+
+diff --git a/drivers/mfd/glamo/glamo-display.c b/drivers/mfd/glamo/glamo-display.c
+index a384c8b..bc3a2ea 100644
+--- a/drivers/mfd/glamo/glamo-display.c
++++ b/drivers/mfd/glamo/glamo-display.c
+@@ -456,43 +456,53 @@ static void glamo_connector_destroy(struct drm_connector *connector)
+
+ static int glamo_connector_get_modes(struct drm_connector *connector)
+ {
+- struct drm_display_mode *mode;
+ struct glamo_fb_platform_data *fb_info;
+ struct glamo_output *goutput = to_glamo_output(connector);
+ struct glamodrm_handle *gdrm = goutput->gdrm;
++ int i;
+
+ /* Dig out the record which will tell us about the hardware */
+ fb_info = gdrm->glamo_core->pdata->fb_data;
+
+- mode = drm_mode_create(connector->dev);
+- if (!mode)
+- return 0;
+- /* Fill in 'mode' here */
+- mode->type = DRM_MODE_TYPE_DEFAULT | DRM_MODE_TYPE_PREFERRED;
+-
+- /* Convert framebuffer timings into KMS timings */
+- mode->clock = 1000000000UL / fb_info->modes[0].pixclock; /* ps -> kHz */
+- mode->clock *= 1000; /* kHz -> Hz */
+- mode->hdisplay = fb_info->modes[0].xres;
+- mode->hsync_start = fb_info->modes[0].right_margin + mode->hdisplay;
+- mode->hsync_end = mode->hsync_start + fb_info->modes[0].hsync_len;
+- mode->htotal = mode->hsync_end + fb_info->modes[0].left_margin;
+- mode->hskew = 0;
+-
+- mode->vdisplay = fb_info->modes[0].yres;
+- mode->vsync_start = fb_info->modes[0].lower_margin + mode->vdisplay;
+- mode->vsync_end = mode->vsync_start + fb_info->modes[0].vsync_len;
+- mode->vtotal = mode->vsync_end + fb_info->modes[0].upper_margin;
+- mode->vscan = 0;
+-
+- /* Physical size */
+- mode->width_mm = fb_info->width;
+- mode->height_mm = fb_info->height;
+-
+- drm_mode_set_name(mode);
+- drm_mode_probed_add(connector, mode);
+-
+- return 1; /* one mode, for now */
++ for ( i=0; i<fb_info->num_modes; i++ ) {
++
++ struct drm_display_mode *mode;
++
++ mode = drm_mode_create(connector->dev);
++ if ( !mode ) continue;
++
++ mode->type = DRM_MODE_TYPE_DEFAULT | DRM_MODE_TYPE_PREFERRED;
++
++ /* Convert framebuffer timings into KMS timings.
++ * First: ps -> kHz */
++ mode->clock = 1000000000UL / fb_info->modes[i].pixclock;
++ mode->clock *= 1000; /* then kHz -> Hz */
++ mode->hdisplay = fb_info->modes[i].xres;
++ mode->hsync_start = fb_info->modes[i].right_margin
++ + mode->hdisplay;
++ mode->hsync_end = mode->hsync_start
++ + fb_info->modes[i].hsync_len;
++ mode->htotal = mode->hsync_end + fb_info->modes[i].left_margin;
++ mode->hskew = 0;
++
++ mode->vdisplay = fb_info->modes[i].yres;
++ mode->vsync_start = fb_info->modes[i].lower_margin
++ + mode->vdisplay;
++ mode->vsync_end = mode->vsync_start
++ + fb_info->modes[i].vsync_len;
++ mode->vtotal = mode->vsync_end + fb_info->modes[i].upper_margin;
++ mode->vscan = 0;
++
++ /* Physical size */
++ mode->width_mm = fb_info->width;
++ mode->height_mm = fb_info->height;
++
++ drm_mode_set_name(mode);
++ drm_mode_probed_add(connector, mode);
++
++ }
++
++ return fb_info->num_modes;
+ }
+
+
+--
+1.7.0
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0013-Change-connector-type-to-LVDS.patch b/recipes/linux/linux-openmoko-2.6.32/0013-Change-connector-type-to-LVDS.patch
new file mode 100644
index 0000000000..1b8c653607
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0013-Change-connector-type-to-LVDS.patch
@@ -0,0 +1,29 @@
+From 3f1154d1b763f981791ad54987e61d31bde43ec7 Mon Sep 17 00:00:00 2001
+From: Thomas White <taw@bitwiz.org.uk>
+Date: Mon, 1 Mar 2010 22:07:57 +0100
+Subject: [PATCH 13/13] Change connector type to LVDS
+
+Not certain that this exactly describes what it is, and too lazy to check, but for sure
+it's a better description than "Unknown".
+
+Signed-off-by: Thomas White <taw@bitwiz.org.uk>
+---
+ drivers/mfd/glamo/glamo-display.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/mfd/glamo/glamo-display.c b/drivers/mfd/glamo/glamo-display.c
+index bc3a2ea..5f04697 100644
+--- a/drivers/mfd/glamo/glamo-display.c
++++ b/drivers/mfd/glamo/glamo-display.c
+@@ -795,7 +795,7 @@ int glamo_display_init(struct drm_device *dev)
+
+ /* Initialise the connector */
+ drm_connector_init(dev, connector, &glamo_connector_funcs,
+- DRM_MODE_CONNECTOR_Unknown);
++ DRM_MODE_CONNECTOR_LVDS);
+ drm_sysfs_connector_add(connector);
+ connector->interlace_allowed = 0;
+ connector->doublescan_allowed = 0;
+--
+1.7.0
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0014-Clean-up-JBT-hooks-and-allow-resolution-switching.patch b/recipes/linux/linux-openmoko-2.6.32/0014-Clean-up-JBT-hooks-and-allow-resolution-switching.patch
new file mode 100644
index 0000000000..287214b677
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0014-Clean-up-JBT-hooks-and-allow-resolution-switching.patch
@@ -0,0 +1,223 @@
+From 644aab63501ebff3e819fd25d23c63da6b6e1cf5 Mon Sep 17 00:00:00 2001
+From: Thomas White <taw@bitwiz.org.uk>
+Date: Mon, 8 Mar 2010 23:51:09 +0100
+Subject: [PATCH 14/15] Clean up JBT hooks, and allow resolution switching
+
+Signed-off-by: Thomas White <taw@bitwiz.org.uk>
+---
+ arch/arm/mach-s3c2442/mach-gta02.c | 2 +-
+ drivers/mfd/glamo/glamo-display.c | 17 ++++++----
+ drivers/video/backlight/jbt6k74.c | 57 +++++++++++++++++++----------------
+ include/linux/jbt6k74.h | 14 +++++++++
+ 4 files changed, 56 insertions(+), 34 deletions(-)
+
+diff --git a/arch/arm/mach-s3c2442/mach-gta02.c b/arch/arm/mach-s3c2442/mach-gta02.c
+index a969037..b580b1b 100644
+--- a/arch/arm/mach-s3c2442/mach-gta02.c
++++ b/arch/arm/mach-s3c2442/mach-gta02.c
+@@ -229,7 +229,7 @@ static struct fb_videomode gta02_glamo_modes[] = {
+ .name = "240x320",
+ .xres = 240,
+ .yres = 320,
+- .pixclock = 40816,
++ .pixclock = 100000,
+ .left_margin = 8,
+ .right_margin = 16,
+ .upper_margin = 2,
+diff --git a/drivers/mfd/glamo/glamo-display.c b/drivers/mfd/glamo/glamo-display.c
+index 5f04697..e56cdb4 100644
+--- a/drivers/mfd/glamo/glamo-display.c
++++ b/drivers/mfd/glamo/glamo-display.c
+@@ -52,19 +52,18 @@
+ *
+ */
+
+-#define DEBUG 1
+-
+ #include <drm/drmP.h>
+ #include <drm/glamo_drm.h>
+ #include <drm/drm_crtc_helper.h>
+ #include <drm/drm_crtc.h>
++#include <linux/glamofb.h>
++#include <linux/jbt6k74.h>
+
+ #include "glamo-core.h"
+ #include "glamo-drm-private.h"
+ #include "glamo-regs.h"
+ #include "glamo-kms-fb.h"
+ #include "glamo-display.h"
+-#include <linux/glamofb.h>
+
+
+ #define GLAMO_LCD_WIDTH_MASK 0x03FF
+@@ -356,6 +355,12 @@ static int glamo_crtc_mode_set(struct drm_crtc *crtc,
+
+ glamo_lcd_cmd_mode(gdrm, 0);
+
++ if ( mode->hdisplay == 240 ) {
++ jbt6k74_setresolution(JBT_RESOLUTION_QVGA);
++ } else {
++ jbt6k74_setresolution(JBT_RESOLUTION_VGA);
++ }
++
+ glamo_crtc_mode_set_base(crtc, 0, 0, old_fb);
+
+ gcrtc->current_mode = *mode;
+@@ -366,8 +371,6 @@ static int glamo_crtc_mode_set(struct drm_crtc *crtc,
+ }
+
+
+-extern void jbt6k74_action(int val);
+-
+ /* This is not the right place to switch power on/off, because the helper
+ * stuff ends up calling this before/after setting the mode. We can't
+ * set modes with the display off (although backlight off would be OK) */
+@@ -385,14 +388,14 @@ void glamo_lcd_power(struct glamodrm_handle *gdrm, int mode)
+ if ( mode ) {
+ glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_LCD);
+ gcrtc->pixel_clock_on = 1;
+- jbt6k74_action(1);
++ jbt6k74_setpower(JBT_POWER_MODE_NORMAL);
+ if ( gcrtc->current_mode_set ) {
+ glamo_crtc_mode_set(crtc, &gcrtc->current_mode,
+ &gcrtc->current_mode, 0, 0,
+ gcrtc->current_fb);
+ }
+ } else {
+- jbt6k74_action(0);
++ jbt6k74_setpower(JBT_POWER_MODE_OFF);
+ glamo_engine_suspend(gdrm->glamo_core, GLAMO_ENGINE_LCD);
+ gcrtc->pixel_clock_on = 0;
+ }
+diff --git a/drivers/video/backlight/jbt6k74.c b/drivers/video/backlight/jbt6k74.c
+index 9554cb3..40c31f6 100644
+--- a/drivers/video/backlight/jbt6k74.c
++++ b/drivers/video/backlight/jbt6k74.c
+@@ -101,15 +101,6 @@ enum jbt_register {
+ JBT_REG_HCLOCK_QVGA = 0xed,
+ };
+
+-enum jbt_resolution {
+- JBT_RESOLUTION_VGA,
+- JBT_RESOLUTION_QVGA,
+-};
+-
+-enum jbt_power_mode {
+- JBT_POWER_MODE_OFF,
+- JBT_POWER_MODE_NORMAL,
+-};
+
+ static const char *jbt_power_mode_names[] = {
+ [JBT_POWER_MODE_OFF] = "off",
+@@ -121,6 +112,7 @@ static const char *jbt_resolution_names[] = {
+ [JBT_RESOLUTION_QVGA] = "qvga",
+ };
+
++
+ struct jbt_info {
+ struct mutex lock; /* protects this structure */
+ enum jbt_resolution resolution;
+@@ -139,6 +131,8 @@ struct jbt_info {
+ uint16_t reg_cache[0xEE];
+ };
+
++struct jbt_info *jbt_global;
++
+ #define JBT_COMMAND 0x000
+ #define JBT_DATA 0x100
+
+@@ -401,8 +395,9 @@ static int jbt6k74_set_resolution(struct jbt_info *jbt,
+
+ if (jbt->power_mode == JBT_POWER_MODE_NORMAL) {
+
+- /* first transition into sleep */
++ /* "Reboot" the LCM */
+ ret = jbt_normal_to_off(jbt);
++ mdelay(1000);
+ ret |= jbt_off_to_normal(jbt);
+
+ if (ret) {
+@@ -609,22 +604,6 @@ static int jbt6k74_get_power(struct lcd_device *ld)
+ }
+ }
+
+-/* This is utterly, totally horrible. I'm REALLY sorry... */
+-struct jbt_info *jbt_global;
+-void jbt6k74_action(int val)
+-{
+- if ( !jbt_global ) {
+- printk(KERN_CRIT "JBT not initialised!!!\n");
+- return;
+- }
+- if ( val == 0 ) {
+- jbt6k74_enter_power_mode(jbt_global, JBT_POWER_MODE_OFF);
+- } else {
+- jbt6k74_enter_power_mode(jbt_global, JBT_POWER_MODE_NORMAL);
+- }
+-}
+-EXPORT_SYMBOL_GPL(jbt6k74_action);
+-
+ struct lcd_ops jbt6k74_lcd_ops = {
+ .set_power = jbt6k74_set_power,
+ .get_power = jbt6k74_get_power,
+@@ -758,6 +737,32 @@ static int __devexit jbt_remove(struct spi_device *spi)
+ return 0;
+ }
+
++/* Begin horrible layering violations (in the interest of making stuff work) */
++
++int jbt6k74_setresolution(enum jbt_resolution new_resolution)
++{
++ if ( !jbt_global ) {
++ printk(KERN_CRIT "JBT not initialised!!!\n");
++ return -1;
++ }
++ jbt6k74_set_resolution(jbt_global, new_resolution);
++ return 0;
++}
++EXPORT_SYMBOL_GPL(jbt6k74_setresolution);
++
++/* This is utterly, totally horrible. I'm REALLY sorry... */
++void jbt6k74_setpower(enum jbt_power_mode new_power)
++{
++ if ( !jbt_global ) {
++ printk(KERN_CRIT "JBT not initialised!!!\n");
++ return;
++ }
++ jbt6k74_enter_power_mode(jbt_global, new_power);
++}
++EXPORT_SYMBOL_GPL(jbt6k74_setpower);
++
++/* End horrible layering violations */
++
+ #ifdef CONFIG_PM
+ static int jbt_suspend(struct spi_device *spi, pm_message_t state)
+ {
+diff --git a/include/linux/jbt6k74.h b/include/linux/jbt6k74.h
+index 4cf760c..f430e5a 100644
+--- a/include/linux/jbt6k74.h
++++ b/include/linux/jbt6k74.h
+@@ -3,6 +3,20 @@
+
+ #include <linux/spi/spi.h>
+
++enum jbt_resolution {
++ JBT_RESOLUTION_VGA,
++ JBT_RESOLUTION_QVGA,
++};
++
++enum jbt_power_mode {
++ JBT_POWER_MODE_OFF,
++ JBT_POWER_MODE_NORMAL,
++};
++
++extern void jbt6k74_setpower(enum jbt_power_mode new_power);
++extern int jbt6k74_setresolution(enum jbt_resolution new_resolution);
++
++
+ /*
+ * struct jbt6k74_platform_data - Platform data for jbt6k74 driver
+ * @probe_completed: Callback to be called when the driver has been
+--
+1.7.0.2
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0015-ar6000-send-userspace-an-event-on-disconnection.patch b/recipes/linux/linux-openmoko-2.6.32/0015-ar6000-send-userspace-an-event-on-disconnection.patch
new file mode 100644
index 0000000000..fb0ede68e7
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0015-ar6000-send-userspace-an-event-on-disconnection.patch
@@ -0,0 +1,42 @@
+From 505ed5ebe6b5a296c83881e91fa7e8dd0ef021aa Mon Sep 17 00:00:00 2001
+From: Paul Fertser <fercerpav@gmail.com>
+Date: Sun, 21 Feb 2010 12:52:58 +0300
+Subject: [PATCH 15/15] ar6000: send userspace an event on disconnection
+
+Without this userspace gets confused and might fail to obtain a DHCP
+lease, bring the interface up etc etc.
+
+This place is definetely not the best or most intuitive to add this code
+but when added to the real disconnect callback it messes wpa_supplicant
+completely because hardware signals disconnection right after it was
+asked to associate (and signals association the next moment).
+
+The particular problem this patch solves is lack of DISCONNECTED event
+during suspend/resume; because of it "wpa_cli -a" doesn't relaunch its
+script and the interface is not brought up automatically after resume.
+
+Signed-off-by: Paul Fertser <fercerpav@gmail.com>
+---
+ drivers/ar6000/ar6000/ar6000_drv.c | 6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/ar6000/ar6000/ar6000_drv.c b/drivers/ar6000/ar6000/ar6000_drv.c
+index 90533ab..4e0ae72 100644
+--- a/drivers/ar6000/ar6000/ar6000_drv.c
++++ b/drivers/ar6000/ar6000/ar6000_drv.c
+@@ -934,6 +934,12 @@ static void
+ ar6000_unavail_ev(void *Instance)
+ {
+ AR_SOFTC_T *ar = (AR_SOFTC_T *)Instance;
++ union iwreq_data wrqu;
++
++ A_MEMZERO(&wrqu, sizeof(wrqu));
++ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
++ wireless_send_event(ar->arNetDev, SIOCGIWAP, &wrqu, NULL);
++
+ /* NULL out it's entry in the global list */
+ ar6000_devices[ar->arDeviceIndex] = NULL;
+ ar6000_destroy(ar->arNetDev, 1);
+--
+1.7.0.2
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/fix.compilation.if.no.GENERIC_TIME.patch b/recipes/linux/linux-openmoko-2.6.32/fix.compilation.if.no.GENERIC_TIME.patch
deleted file mode 100644
index 52f6e6b6b3..0000000000
--- a/recipes/linux/linux-openmoko-2.6.32/fix.compilation.if.no.GENERIC_TIME.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From patchwork Sat Jan 30 15:56:13 2010
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [-stable,2.6.32.7] clocksource: fix compilation if no GENERIC_TIME
-Date: Sat, 30 Jan 2010 15:56:13 -0000
-From: Aaro Koskinen <aaro.koskinen@iki.fi>
-X-Patchwork-Id: 75896
-
-See http://patchwork.kernel.org/patch/75896/
-
-Commit a9238ce3bb0fda6e760780b702c6cbd3793087d3 broke compilation on
-platforms that do not implement GENERIC_TIME (e.g. iop32x):
-
- kernel/time/clocksource.c: In function 'clocksource_register':
- kernel/time/clocksource.c:556: error: implicit declaration of function 'clocksource_max_deferment'
-
-Provide a dummy implementation of clocksource_max_deferment() for such
-platforms.
-
-Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
-
----
-kernel/time/clocksource.c | 5 +++++
- 1 files changed, 5 insertions(+), 0 deletions(-)
-
-diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c
-index 5155dc3..7b3a9d0 100644
---- a/kernel/time/clocksource.c
-+++ b/kernel/time/clocksource.c
-@@ -502,6 +502,11 @@ static void clocksource_select(void)
-
- #else /* CONFIG_GENERIC_TIME */
-
-+static inline u64 clocksource_max_deferment(struct clocksource *cs)
-+{
-+ return 0;
-+}
-+
- static inline void clocksource_select(void) { }
-
- #endif
diff --git a/recipes/linux/linux-openmoko-2.6.32_git.bb b/recipes/linux/linux-openmoko-2.6.32_git.bb
index d66f29f0e5..22afe7b568 100644
--- a/recipes/linux/linux-openmoko-2.6.32_git.bb
+++ b/recipes/linux/linux-openmoko-2.6.32_git.bb
@@ -3,11 +3,12 @@ require linux-openmoko.inc
DESCRIPTION_${PN} = "Linux ${KERNEL_RELEASE} kernel for the Openmoko Neo GSM Smartphones"
-KERNEL_RELEASE="2.6.32.7"
+KERNEL_RELEASE="2.6.32.9"
+SRCREV = "14be1091928fcce66812a85129768fb253b36420"
OEV = "oe1"
PV = "${KERNEL_RELEASE}-${OEV}+gitr${SRCREV}"
-PR = "r0"
+PR = "r4"
SRC_URI = "\
git://git.openmoko.org/git/kernel.git;protocol=git;branch=om-gta02-2.6.32 \
@@ -16,20 +17,25 @@ SRC_URI = "\
file://defconfig \
# build fix
file://0001-wm8753-fix-build-with-gcc-4.4.2-which-works-ok-with-.patch;patch=1 \
-# needed only for 2.6.32.7+
- file://fix.compilation.if.no.GENERIC_TIME.patch;patch=1 \
-# patches from Weiss's gdrm-2.6.31 branch
- file://0001-DRM-for-platform-devices.patch;patch=1 \
- file://0002-Glamo-DRM-and-KMS-driver.patch;patch=1 \
- file://0003-Work-on-Glamo-core-for-DRM.patch;patch=1 \
- file://0004-Add-JBT6k74-hook-for-use-by-KMS.patch;patch=1 \
-# patches for 2.6.32 gdrm
- file://0001-glamo-drm-use-dev_set_drvdata-instead-of-setting-dri.patch;patch=1 \
- file://0002-glamo-drm-select-DRM_KMS_HELPER-for-crtc-functions.patch;patch=1 \
+# patches from Weiss's gdrm-2.6.32 branch
+ file://0002-DRM-for-platform-devices.patch;patch=1 \
+ file://0003-Glamo-DRM-and-KMS-driver.patch;patch=1 \
+ file://0004-Work-on-Glamo-core-for-DRM.patch;patch=1 \
+ file://0005-Add-JBT6k74-hook-for-use-by-KMS.patch;patch=1 \
+ file://0006-glamo-drm-use-dev_set_drvdata-instead-of-setting-dri.patch;patch=1 \
+ file://0007-glamo-drm-select-DRM_KMS_HELPER-for-crtc-functions.patch;patch=1 \
+ file://0008-Fix-crash-when-reading-Glamo-registers-via-sysfs.patch;patch=1 \
+ file://0009-A-couple-of-GEM-refcounting-fixes.patch;patch=1 \
+ file://0010-Simplify-the-JBT6k74-driver.patch;patch=1 \
+ file://0011-Don-t-choke-if-userspace-provides-a-pixel-clock-valu.patch;patch=1 \
+ file://0012-Report-all-FB-modes-given-by-the-lower-levels.patch;patch=1 \
+ file://0013-Change-connector-type-to-LVDS.patch;patch=1 \
+ file://0014-Clean-up-JBT-hooks-and-allow-resolution-switching.patch;patch=1 \
+ file://0015-ar6000-send-userspace-an-event-on-disconnection.patch;patch=1 \
"
-SRC_URI[stablepatch.md5sum] = "a68305d3e77dddc9555ba58f678a1ce2"
-SRC_URI[stablepatch.sha256sum] = "b3382d02ec25e3ae86fac7852ba540e59af770a76604d317b39df57505b376bf"
+SRC_URI[stablepatch.md5sum] = "7f615dd3b4a3b19fb86e479996a2deb5"
+SRC_URI[stablepatch.sha256sum] = "8aeb15c31fb09c769f004c8dc51e29aa26be8e84d70db418af70ecefc463459a"
S = "${WORKDIR}/git"
diff --git a/recipes/linux/linux-openmoko-devel_git.bb b/recipes/linux/linux-openmoko-devel_git.bb
index fb9c4f0498..5a87f5bc86 100644
--- a/recipes/linux/linux-openmoko-devel_git.bb
+++ b/recipes/linux/linux-openmoko-devel_git.bb
@@ -6,6 +6,7 @@ DEFAULT_PREFERENCE = "-1"
KERNEL_RELEASE = "2.6.29"
KERNEL_VERSION = "${KERNEL_RELEASE}"
+SRCREV = "a15608f241a40b41fed5bffe511355c2067c4e88"
OEV = "oe1"
PV = "${KERNEL_RELEASE}-${OEV}+gitr${SRCREV}"
PR = "r1"
diff --git a/recipes/linux/linux-openmoko-shr-devel_git.bb b/recipes/linux/linux-openmoko-shr-devel_git.bb
index 00b2410195..69a340b741 100644
--- a/recipes/linux/linux-openmoko-shr-devel_git.bb
+++ b/recipes/linux/linux-openmoko-shr-devel_git.bb
@@ -6,6 +6,7 @@ DESCRIPTION_${PN} = "Linux ${KERNEL_VERSION} kernel for the Openmoko Neo GSM Sma
KERNEL_RELEASE = "2.6.29"
KERNEL_VERSION = "2.6.29-rc3"
+SRCREV = "a15608f241a40b41fed5bffe511355c2067c4e88"
OMV = "oe11"
PV = "${KERNEL_RELEASE}-${OMV}+gitr${SRCREV}"
PR = "r8"
diff --git a/recipes/linux/linux-openmoko-shr-drm-devel_git.bb b/recipes/linux/linux-openmoko-shr-drm-devel_git.bb
index a142d1f9c5..a0253c5243 100644
--- a/recipes/linux/linux-openmoko-shr-drm-devel_git.bb
+++ b/recipes/linux/linux-openmoko-shr-drm-devel_git.bb
@@ -7,6 +7,7 @@ DEFAULT_PREFERENCE = "-1"
KERNEL_RELEASE = "2.6.29"
KERNEL_VERSION = "2.6.29-rc3-drm"
+SRCREV = "e62a4ae1c6783f41b41a9ac3d258786586b65a40"
OMV = "oe15"
PV = "${KERNEL_RELEASE}-drm-${OMV}+gitr${SRCREV}"
PR = "r5"
diff --git a/recipes/linux/linux-orion_2.6.28.4.bb b/recipes/linux/linux-orion_2.6.28.4.bb
index c0a7d3c9af..eb27c6a2e4 100644
--- a/recipes/linux/linux-orion_2.6.28.4.bb
+++ b/recipes/linux/linux-orion_2.6.28.4.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for Marvell Orion based devices"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
COMPATIBLE_MACHINE = "(dns323|mv2120|kuropro|lspro|tsx09|ts409)"
diff --git a/recipes/linux/linux-palm-omap1_2.6.22-omap1.bb b/recipes/linux/linux-palm-omap1_2.6.22-omap1.bb
index 16fe38bf5c..e9731734b7 100644
--- a/recipes/linux/linux-palm-omap1_2.6.22-omap1.bb
+++ b/recipes/linux/linux-palm-omap1_2.6.22-omap1.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for OMAP1-based Palm devicess"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
COMPATIBLE_MACHINE = "(palmz71|palmtt|palmtt2)"
diff --git a/recipes/linux/linux-rp.inc b/recipes/linux/linux-rp.inc
index 041a095d91..18a6426c2f 100644
--- a/recipes/linux/linux-rp.inc
+++ b/recipes/linux/linux-rp.inc
@@ -1,6 +1,6 @@
DESCRIPTION = "2.6 Linux Development Kernel for Zaurus devices and iPAQ hx2750."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
inherit kernel
diff --git a/recipes/linux/linux-sequoia_2.6.21.bb b/recipes/linux/linux-sequoia_2.6.21.bb
index 006fd3a51d..121d53035d 100644
--- a/recipes/linux/linux-sequoia_2.6.21.bb
+++ b/recipes/linux/linux-sequoia_2.6.21.bb
@@ -2,7 +2,7 @@
# Released under the MIT license (see packages/COPYING)
SECTION = "kernel"
DESCRIPTION = "Linux kernel for AMCC's Sequoia dev board"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
#DEPENDS = "u-boot"
diff --git a/recipes/linux/linux-sgh-i900_2.6.32.bb b/recipes/linux/linux-sgh-i900_2.6.32.bb
index 4b5df5b7aa..f509d124e6 100644
--- a/recipes/linux/linux-sgh-i900_2.6.32.bb
+++ b/recipes/linux/linux-sgh-i900_2.6.32.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux 2.6.32 kernel for the Samsung Omnia SGH-i900."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
RDEPENDS += "marvell-gspi-fw"
diff --git a/recipes/linux/linux-smdk2440_2.6.20+git.bb b/recipes/linux/linux-smdk2440_2.6.20+git.bb
index b86d970e50..e90274bc8b 100644
--- a/recipes/linux/linux-smdk2440_2.6.20+git.bb
+++ b/recipes/linux/linux-smdk2440_2.6.20+git.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for smdk2440 compatible machines"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
GGSRC = "http://www.xora.org.uk/oe/patches/"
diff --git a/recipes/linux/linux-smdk2443_2.6.20+git.bb b/recipes/linux/linux-smdk2443_2.6.20+git.bb
index 034137e89c..136c2ab0b5 100644
--- a/recipes/linux/linux-smdk2443_2.6.20+git.bb
+++ b/recipes/linux/linux-smdk2443_2.6.20+git.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for smdk2443 compatible machines"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS += "u-boot-mkimage-openmoko-native"
PR = "r1"
diff --git a/recipes/linux/linux-storcenter_2.6.27.7.bb b/recipes/linux/linux-storcenter_2.6.27.7.bb
index b403cda2ab..a6f4ebc34f 100644
--- a/recipes/linux/linux-storcenter_2.6.27.7.bb
+++ b/recipes/linux/linux-storcenter_2.6.27.7.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for the IOMega StorCenter"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r2"
DEPENDS = "dtc-native"
diff --git a/recipes/linux/linux-sun4cdm_2.4.26.bb b/recipes/linux/linux-sun4cdm_2.4.26.bb
index 78a64d7aeb..4bde45fe4a 100644
--- a/recipes/linux/linux-sun4cdm_2.4.26.bb
+++ b/recipes/linux/linux-sun4cdm_2.4.26.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for sparc32/sun4c"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
DEPENDS += "elftoaout-native"
diff --git a/recipes/linux/linux-sun4cdm_2.6.8.1.bb b/recipes/linux/linux-sun4cdm_2.6.8.1.bb
index 7b097a1610..55bf3ae5cf 100644
--- a/recipes/linux/linux-sun4cdm_2.6.8.1.bb
+++ b/recipes/linux/linux-sun4cdm_2.6.8.1.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for sparc32/sun4c"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
diff --git a/recipes/linux/linux-titan-sh4_2.6.21.bb b/recipes/linux/linux-titan-sh4_2.6.21.bb
index ef5ffad0db..77db8d177e 100644
--- a/recipes/linux/linux-titan-sh4_2.6.21.bb
+++ b/recipes/linux/linux-titan-sh4_2.6.21.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for SH4 based TITAN (NP51R/LinkGear Series 100) router appliance"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r2"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
diff --git a/recipes/linux/linux-tornado-omap2_2.6.16.16.bb b/recipes/linux/linux-tornado-omap2_2.6.16.16.bb
index 9c6e133c28..d7080b0cf3 100644
--- a/recipes/linux/linux-tornado-omap2_2.6.16.16.bb
+++ b/recipes/linux/linux-tornado-omap2_2.6.16.16.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for HTC Tornado/Typhoon/Hurricane phones."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.16.tar.bz2 \
diff --git a/recipes/linux/linux-turbostation_2.6.20.2.bb b/recipes/linux/linux-turbostation_2.6.20.2.bb
index 308c5e7a46..9ba6f38eb4 100644
--- a/recipes/linux/linux-turbostation_2.6.20.2.bb
+++ b/recipes/linux/linux-turbostation_2.6.20.2.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for the QNAP TurboStation platform"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS = "u-boot-utils-native"
PR = "r2"
diff --git a/recipes/linux/linux-wrap-geode_2.6.17.bb b/recipes/linux/linux-wrap-geode_2.6.17.bb
index 3d9b81a936..baf82fc216 100644
--- a/recipes/linux/linux-wrap-geode_2.6.17.bb
+++ b/recipes/linux/linux-wrap-geode_2.6.17.bb
@@ -1,7 +1,7 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for PC-Engines WRAP which are \
Geode SC1100 (i486) based wirless router appliance boards"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
diff --git a/recipes/linux/linux-wrt_2.4.20.bb b/recipes/linux/linux-wrt_2.4.20.bb
index 23a5d4f203..8b7450ed10 100644
--- a/recipes/linux/linux-wrt_2.4.20.bb
+++ b/recipes/linux/linux-wrt_2.4.20.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the Linksys WRT54 devices"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.4/linux-2.4.20.tar.bz2 \
diff --git a/recipes/linux/linux-wrt_2.4.30.bb b/recipes/linux/linux-wrt_2.4.30.bb
index db285710b2..a2cd7e0e3b 100644
--- a/recipes/linux/linux-wrt_2.4.30.bb
+++ b/recipes/linux/linux-wrt_2.4.30.bb
@@ -2,7 +2,7 @@ SECTION = "kernel"
DESCRIPTION = "Linux kernel for the Linksys WRT54 devices"
HOMEPAGE = "http://openwrt.org"
DEPENDS = "lzma-native"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r2"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.4/linux-2.4.30.tar.bz2 \
diff --git a/recipes/linux/linux-x86_2.6.17.9.bb b/recipes/linux/linux-x86_2.6.17.9.bb
index 829c884560..571492c199 100644
--- a/recipes/linux/linux-x86_2.6.17.9.bb
+++ b/recipes/linux/linux-x86_2.6.17.9.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for x86 compatible machines"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r2"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
diff --git a/recipes/linux/linux-x86_2.6.20.bb b/recipes/linux/linux-x86_2.6.20.bb
index 3872c50cba..bed6e21edf 100644
--- a/recipes/linux/linux-x86_2.6.20.bb
+++ b/recipes/linux/linux-x86_2.6.20.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for x86 compatible machines"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r5"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 "
diff --git a/recipes/linux/linux-xilinx-ml507/defconfig b/recipes/linux/linux-xilinx-ml507/defconfig
new file mode 100644
index 0000000000..693e14168b
--- /dev/null
+++ b/recipes/linux/linux-xilinx-ml507/defconfig
@@ -0,0 +1,1415 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.32
+# Fri Feb 26 23:31:02 2010
+#
+# CONFIG_PPC64 is not set
+
+#
+# Processor support
+#
+# CONFIG_PPC_BOOK3S_32 is not set
+# CONFIG_PPC_85xx is not set
+# CONFIG_PPC_8xx is not set
+# CONFIG_40x is not set
+CONFIG_44x=y
+# CONFIG_E200 is not set
+# CONFIG_PPC_FPU is not set
+CONFIG_4xx=y
+CONFIG_BOOKE=y
+CONFIG_PTE_64BIT=y
+CONFIG_PHYS_64BIT=y
+CONFIG_PPC_MMU_NOHASH=y
+CONFIG_PPC_MMU_NOHASH_32=y
+# CONFIG_PPC_MM_SLICES is not set
+CONFIG_NOT_COHERENT_CACHE=y
+CONFIG_PPC32=y
+CONFIG_WORD_SIZE=32
+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
+CONFIG_MMU=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_TIME_VSYSCALL=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
+# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set
+CONFIG_IRQ_PER_CPU=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_ARCH_HAS_ILOG2_U32=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
+CONFIG_PPC=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_SCHED_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_PPC_OF=y
+CONFIG_OF=y
+CONFIG_PPC_UDBG_16550=y
+# CONFIG_GENERIC_TBSYNC is not set
+CONFIG_AUDIT_ARCH=y
+CONFIG_GENERIC_BUG=y
+CONFIG_DTC=y
+CONFIG_DEFAULT_UIMAGE=y
+CONFIG_PPC_DCR_NATIVE=y
+CONFIG_PPC_DCR_MMIO=y
+CONFIG_PPC_DCR=y
+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_POSIX_MQUEUE_SYSCTL=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+CONFIG_RD_BZIP2=y
+CONFIG_RD_LZMA=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+# CONFIG_EMBEDDED is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_HAVE_PERF_EVENTS=y
+
+#
+# Kernel Performance Events And Counters
+#
+# CONFIG_PERF_EVENTS is not set
+# CONFIG_PERF_COUNTERS is not set
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_PCI_QUIRKS=y
+CONFIG_COMPAT_BRK=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_HAVE_IOREMAP_PROT=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_ARCH_TRACEHOOK=y
+CONFIG_HAVE_DMA_ATTRS=y
+CONFIG_HAVE_DMA_API_DEBUG=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_SLOW_WORK is not set
+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_FREEZER is not set
+# CONFIG_PPC4xx_PCI_EXPRESS is not set
+
+#
+# Platform support
+#
+# CONFIG_PPC_CELL is not set
+# CONFIG_PPC_CELL_NATIVE is not set
+# CONFIG_PQ2ADS is not set
+# CONFIG_BAMBOO is not set
+# CONFIG_EBONY is not set
+# CONFIG_SAM440EP is not set
+# CONFIG_SEQUOIA is not set
+# CONFIG_TAISHAN is not set
+# CONFIG_KATMAI is not set
+# CONFIG_RAINIER is not set
+# CONFIG_WARP is not set
+# CONFIG_ARCHES is not set
+# CONFIG_CANYONLANDS is not set
+# CONFIG_GLACIER is not set
+# CONFIG_REDWOOD is not set
+# CONFIG_EIGER is not set
+# CONFIG_YOSEMITE is not set
+CONFIG_XILINX_VIRTEX440_GENERIC_BOARD=y
+# CONFIG_XILINX_ML510 is not set
+# CONFIG_PPC44x_SIMPLE is not set
+# CONFIG_PPC4xx_GPIO is not set
+CONFIG_XILINX_VIRTEX=y
+CONFIG_XILINX_VIRTEX_5_FXT=y
+# CONFIG_IPIC is not set
+# CONFIG_MPIC is not set
+# CONFIG_MPIC_WEIRD is not set
+# CONFIG_PPC_I8259 is not set
+# CONFIG_PPC_RTAS is not set
+# CONFIG_MMIO_NVRAM is not set
+# CONFIG_PPC_MPC106 is not set
+# CONFIG_PPC_970_NAP is not set
+# CONFIG_PPC_INDIRECT_IO is not set
+# CONFIG_GENERIC_IOMAP is not set
+# CONFIG_CPU_FREQ is not set
+# CONFIG_FSL_ULI1575 is not set
+# CONFIG_SIMPLE_GPIO is not set
+# CONFIG_XILINX_PCI is not set
+
+#
+# Kernel options
+#
+# CONFIG_HIGHMEM is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+# CONFIG_SCHED_HRTICK is not set
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_HAVE_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+CONFIG_MATH_EMULATION=y
+# CONFIG_IOMMU_HELPER is not set
+# CONFIG_SWIOTLB is not set
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+CONFIG_ARCH_HAS_WALK_MEMORY=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
+CONFIG_MAX_ACTIVE_REGIONS=32
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_MIGRATION=y
+CONFIG_PHYS_ADDR_T_64BIT=y
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_STDBINUTILS=y
+CONFIG_PPC_4K_PAGES=y
+# CONFIG_PPC_16K_PAGES is not set
+# CONFIG_PPC_64K_PAGES is not set
+# CONFIG_PPC_256K_PAGES is not set
+CONFIG_FORCE_MAX_ZONEORDER=11
+CONFIG_PROC_DEVICETREE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE=""
+CONFIG_EXTRA_TARGETS="simpleImage.virtex440-ml507 simpleImage.initrd.virtex440-ml507"
+CONFIG_SECCOMP=y
+# CONFIG_COMPRESSED_DEVICE_TREE is not set
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+CONFIG_ZONE_DMA=y
+CONFIG_PPC_INDIRECT_PCI=y
+CONFIG_4xx_SOC=y
+CONFIG_PPC_PCI_CHOICE=y
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCI_SYSCALL=y
+# CONFIG_PCIEPORTBUS is not set
+CONFIG_ARCH_SUPPORTS_MSI=y
+# CONFIG_PCI_MSI is not set
+# CONFIG_PCI_LEGACY is not set
+# CONFIG_PCI_DEBUG is not set
+# CONFIG_PCI_STUB is not set
+# CONFIG_PCI_IOV is not set
+# CONFIG_PCCARD is not set
+# CONFIG_HOTPLUG_PCI is not set
+# CONFIG_HAS_RAPIDIO is not set
+
+#
+# Advanced setup
+#
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Default settings for advanced configuration options are used
+#
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_PAGE_OFFSET=0xc0000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_PHYSICAL_START=0x00000000
+CONFIG_TASK_SIZE=0xc0000000
+CONFIG_CONSISTENT_SIZE=0x00200000
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_NDISC_NODETYPE=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
+# CONFIG_NF_CONNTRACK is not set
+# CONFIG_NETFILTER_TPROXY is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_HL is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_HL is not set
+# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
+# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
+# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_MAC is not set
+# CONFIG_NETFILTER_XT_MATCH_MARK is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+# CONFIG_IP_VS is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_NF_DEFRAG_IPV4 is not set
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
+# CONFIG_IP_NF_MATCH_AH is not set
+# CONFIG_IP_NF_MATCH_ECN is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+CONFIG_IP_NF_FILTER=m
+# CONFIG_IP_NF_TARGET_REJECT is not set
+# CONFIG_IP_NF_TARGET_LOG is not set
+# CONFIG_IP_NF_TARGET_ULOG is not set
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+# CONFIG_IP_NF_RAW is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_WIRELESS=y
+# CONFIG_CFG80211 is not set
+CONFIG_CFG80211_DEFAULT_PS_VALUE=0
+CONFIG_WIRELESS_OLD_REGULATORY=y
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_LIB80211 is not set
+
+#
+# CFG80211 needs to be enabled for MAC80211
+#
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_OF_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_PHYSMAP_OF=y
+# CONFIG_MTD_INTEL_VR_NOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+CONFIG_OF_DEVICE=y
+CONFIG_OF_GPIO=y
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_XILINX_SYSACE=y
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_PHANTOM is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_HP_ILO is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_CB710_CORE is not set
+CONFIG_XILINX_DRIVERS=y
+CONFIG_NEED_XILINX_LLDMA=y
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# You can enable one or both FireWire driver stacks.
+#
+
+#
+# See the help texts for more information.
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+# CONFIG_MACINTOSH_DRIVERS is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_ETHOC is not set
+# CONFIG_DNET is not set
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_IBM_NEW_EMAC is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_B44 is not set
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851_MLL is not set
+# CONFIG_XILINX_EMAC is not set
+# CONFIG_ATL2 is not set
+# CONFIG_XILINX_EMACLITE is not set
+CONFIG_NETDEV_1000=y
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_E1000E is not set
+# CONFIG_IP1000 is not set
+# CONFIG_IGB is not set
+# CONFIG_IGBVF is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_CNIC is not set
+# CONFIG_MV643XX_ETH is not set
+# CONFIG_XILINX_LL_TEMAC is not set
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+# CONFIG_XILINX_TEMAC is not set
+# CONFIG_ATL1E is not set
+CONFIG_XILINX_LLTEMAC=y
+# CONFIG_XILINX_LLTEMAC_MARVELL_88E1111_RGMII is not set
+CONFIG_XILINX_LLTEMAC_MARVELL_88E1111_GMII=y
+# CONFIG_XILINX_LLTEMAC_MARVELL_88E1111_MII is not set
+# CONFIG_XILINX_LLTEMAC_NATIONAL_DP83865_GMII is not set
+# CONFIG_ATL1C is not set
+# CONFIG_JME is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+CONFIG_WLAN=y
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_ELANTECH is not set
+# CONFIG_MOUSE_PS2_SENTELIC is not set
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_XILINXPS2 is not set
+CONFIG_SERIO_XILINX_XPS_PS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_NOZOMI is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_UARTLITE=y
+CONFIG_SERIAL_UARTLITE_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_SERIAL_OF_PLATFORM=y
+# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_HVC_UDBG is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_GEN_RTC is not set
+CONFIG_XILINX_HWICAP=y
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+# CONFIG_I2C is not set
+# CONFIG_SPI is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+CONFIG_GPIO_XILINX=y
+
+#
+# I2C GPIO expanders:
+#
+
+#
+# PCI GPIO expanders:
+#
+# CONFIG_GPIO_BT8XX is not set
+# CONFIG_GPIO_LANGWELL is not set
+
+#
+# SPI GPIO expanders:
+#
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_AGP is not set
+CONFIG_VGA_ARB=y
+# CONFIG_DRM is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_OF is not set
+# CONFIG_FB_CT65550 is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_VGA16 is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_S3 is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_VIA is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_VT8623 is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
+# CONFIG_FB_CARMINE is not set
+# CONFIG_FB_IBM_GXT4500 is not set
+CONFIG_FB_XILINX=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_SOUND is not set
+# CONFIG_HID_SUPPORT is not set
+# CONFIG_USB_SUPPORT is not set
+# CONFIG_UWB is not set
+# CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_NEW_LEDS is not set
+# CONFIG_ACCESSIBILITY is not set
+# CONFIG_INFINIBAND is not set
+# CONFIG_EDAC is not set
+# CONFIG_RTC_CLASS is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+CONFIG_XILINX_EDK=y
+CONFIG_XILINX_LLDMA_USE_DCR=y
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT2_FS_XIP=y
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4_FS is not set
+CONFIG_FS_XIP=y
+CONFIG_JBD=y
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+CONFIG_JFS_FS=y
+# CONFIG_JFS_POSIX_ACL is not set
+# CONFIG_JFS_SECURITY is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+# CONFIG_PROC_KCORE is not set
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+CONFIG_CRAMFS=y
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_ROMFS_BACKED_BY_BLOCK=y
+# CONFIG_ROMFS_BACKED_BY_MTD is not set
+# CONFIG_ROMFS_BACKED_BY_BOTH is not set
+CONFIG_ROMFS_ON_BLOCK=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_BZIP2=y
+CONFIG_DECOMPRESS_LZMA=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_HAVE_LMB=y
+CONFIG_NLATTR=y
+CONFIG_GENERIC_ATOMIC64=y
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+# CONFIG_DEBUG_PAGEALLOC is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+# CONFIG_BOOT_TRACER is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_KMEMTRACE is not set
+# CONFIG_WORKQUEUE_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_PPC_DISABLE_WERROR is not set
+CONFIG_PPC_WERROR=y
+CONFIG_PRINT_STACK_DEPTH=64
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_CODE_PATCHING_SELFTEST is not set
+# CONFIG_FTR_FIXUP_SELFTEST is not set
+# CONFIG_MSI_BITMAP_SELFTEST is not set
+# CONFIG_XMON is not set
+# CONFIG_IRQSTACKS is not set
+# CONFIG_BDI_SWITCH is not set
+# CONFIG_PPC_EARLY_DEBUG is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_MANAGER is not set
+# CONFIG_CRYPTO_MANAGER2 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_ZLIB is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
+# CONFIG_CRYPTO_DEV_PPC4XX is not set
+# CONFIG_PPC_CLOCK is not set
+# CONFIG_VIRTUALIZATION is not set
diff --git a/recipes/linux/linux-xilinx-ml507_git.bb b/recipes/linux/linux-xilinx-ml507_git.bb
new file mode 100644
index 0000000000..ec9de1cd49
--- /dev/null
+++ b/recipes/linux/linux-xilinx-ml507_git.bb
@@ -0,0 +1,23 @@
+require linux.inc
+
+DESCRIPTION = "Linux kernel for Xilinx ml507 platform"
+KERNEL_RELEASE = "2.6.32+git"
+
+COMPATIBLE_MACHINE = "xilinx-ml507"
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_xilinx-ml507 = "1"
+
+PV = "${KERNEL_RELEASE}"
+PR = "r0"
+
+SRCREV = "dc53725d22405e384b984d222542f526eaa9b829"
+SRC_URI = "git://git.xilinx.com/linux-2.6-xlnx.git;protocol=git \
+ file://defconfig"
+
+inherit kernel xilinx-bsp
+
+S = "${WORKDIR}/git"
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+}
diff --git a/recipes/linux/linux-xilinx-slab_git.bb b/recipes/linux/linux-xilinx-slab_git.bb
index 2900ad9516..8e9bfba74f 100644
--- a/recipes/linux/linux-xilinx-slab_git.bb
+++ b/recipes/linux/linux-xilinx-slab_git.bb
@@ -3,7 +3,7 @@
# Released under the MIT license (see packages/COPYING)
SECTION = "kernel"
DESCRIPTION = "Linux kernel for Xilinx ML403 Virtex 4 fpga board"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
SRCREV = "d7ed933b578d9c4dec0e23a5a6f78c464b31c47c"
diff --git a/recipes/linux/linux-xxs1500_2.4.21.bb b/recipes/linux/linux-xxs1500_2.4.21.bb
index b4fab93669..ed6b7a0d90 100644
--- a/recipes/linux/linux-xxs1500_2.4.21.bb
+++ b/recipes/linux/linux-xxs1500_2.4.21.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for mycable xxs1500"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
KV = "2.4.21"
PV = "${KV}"
diff --git a/recipes/linux/linux-z_2.6.20.bb b/recipes/linux/linux-z_2.6.20.bb
index 8c5c940155..faf4ec37d5 100644
--- a/recipes/linux/linux-z_2.6.20.bb
+++ b/recipes/linux/linux-z_2.6.20.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "2.6 Linux Development Kernel for the DNARD/Shark, SIMpad."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
inherit kernel
diff --git a/recipes/linux/linux.inc b/recipes/linux/linux.inc
index ed96ce6cf5..39d04e19ae 100644
--- a/recipes/linux/linux.inc
+++ b/recipes/linux/linux.inc
@@ -1,8 +1,8 @@
DESCRIPTION = "Linux Kernel"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
-inherit kernel
+inherit kernel siteinfo
RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
@@ -38,6 +38,9 @@ KERNEL_DEVICETREE_mpc8313e-rdb = "arch/${ARCH}/boot/dts/mpc8313erdb.dts"
KERNEL_DEVICETREE_mpc8315e-rdb = "arch/${ARCH}/boot/dts/mpc8315erdb.dts"
KERNEL_DEVICETREE_mpc8323e-rdb = "arch/${ARCH}/boot/dts/mpc832x_rdb.dts"
KERNEL_DEVICETREE_sequoia = "arch/${ARCH}/boot/dts/sequoia.dts"
+KERNEL_DEVICETREE_mpc8641-hpcn = "arch/${ARCH}/boot/dts/mpc8641_hpcn.dts"
+KERNEL_DEVICETREE_p2020ds = "arch/${ARCH}/boot/dts/p2020ds.dts"
+KERNEL_DEVICETREE_xilinx-ml507 = "arch/${ARCH}/boot/dts/virtex440-ml507.dts"
KERNEL_DEVICETREE_FLAGS = "-R 8 -S 0x3000"
@@ -116,9 +119,32 @@ do_configure_prepend() {
if [ "${UDEV_GE_141}" = "1" ] ; then
sed -e /CONFIG_SYSFS_DEPRECATED/d \
-e /CONFIG_SYSFS_DEPRECATED_V2/d \
+ -e /CONFIG_HOTPLUG/d \
+ -e /CONFIG_UEVENT_HELPER_PATH/d \
+ -e /CONFIG_UNIX/d \
+ -e /CONFIG_SYSFS/d \
+ -e /CONFIG_PROC_FS/d \
+ -e /CONFIG_TMPFS/d \
+ -e /CONFIG_INOTIFY_USER/d \
+ -e /CONFIG_SIGNALFD/d \
+ -e /CONFIG_TMPFS_POSIX_ACL/d \
+ -e /CONFIG_BLK_DEV_BSG/d \
-i '${S}/.config'
+
echo '# CONFIG_SYSFS_DEPRECATED is not set' >> ${S}/.config
echo '# CONFIG_SYSFS_DEPRECATED_V2 is not set' >> ${S}/.config
+ echo 'CONFIG_HOTPLUG=y' >> ${S}/.config
+ echo 'CONFIG_UEVENT_HELPER_PATH=""' >> ${S}/.config
+ echo 'CONFIG_UNIX=y' >> ${S}/.config
+ echo 'CONFIG_SYSFS=y' >> ${S}/.config
+ echo 'CONFIG_PROC_FS=y' >> ${S}/.config
+ echo 'CONFIG_TMPFS=y' >> ${S}/.config
+ echo 'CONFIG_INOTIFY_USER=y' >> ${S}/.config
+ echo 'CONFIG_SIGNALFD=y' >> ${S}/.config
+ echo 'CONFIG_TMPFS_POSIX_ACL=y' >> ${S}/.config
+ echo 'CONFIG_BLK_DEV_BSG=y' >> ${S}/.config
+ echo 'CONFIG_DEVTMPFS=y' >> ${S}/.config
+ echo 'CONFIG_DEVTMPFS_MOUNT=y' >> ${S}/.config
fi
#
@@ -164,9 +190,11 @@ do_devicetree_image() {
install -m 0644 devicetree ${D}/boot/devicetree-${KERNEL_VERSION}
install -d ${DEPLOY_DIR_IMAGE}
install -m 0644 devicetree ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.dtb
+ package_stagefile_shell ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.dtb
cd ${DEPLOY_DIR_IMAGE}
rm -f ${KERNEL_IMAGE_SYMLINK_NAME}.dtb
ln -sf ${KERNEL_IMAGE_BASE_NAME}.dtb ${KERNEL_IMAGE_SYMLINK_NAME}.dtb
+ package_stagefile_shell ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_SYMLINK_NAME}.dtb
fi
}
diff --git a/recipes/linux/linux/atngw100/defconfig b/recipes/linux/linux/atngw100/defconfig
index 489d094f3c..b54fca13dd 100644
--- a/recipes/linux/linux/atngw100/defconfig
+++ b/recipes/linux/linux/atngw100/defconfig
@@ -489,7 +489,7 @@ CONFIG_IP6_NF_RAW=m
# CONFIG_IP_SCTP is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
+CONFIG_BRIDGE=m
# CONFIG_NET_DSA is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
diff --git a/recipes/linux/linux_2.6.14.bb b/recipes/linux/linux_2.6.14.bb
index 702246bd8f..a7f4b0d3cd 100644
--- a/recipes/linux/linux_2.6.14.bb
+++ b/recipes/linux/linux_2.6.14.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_acern30 = "1"
diff --git a/recipes/linux/linux_2.6.20.bb b/recipes/linux/linux_2.6.20.bb
index d46c623e6b..21680fbda7 100644
--- a/recipes/linux/linux_2.6.20.bb
+++ b/recipes/linux/linux_2.6.20.bb
@@ -6,7 +6,7 @@ DEFAULT_PREFERENCE_at91sam9261ek = "20"
DEFAULT_PREFERENCE_at91sam9260ek = "20"
DEFAULT_PREFERENCE_nhk15 = "1"
-PR = "r10"
+PR = "r11"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.21.bz2;patch=1 \
@@ -37,7 +37,6 @@ SRC_URI_append_nhk15 = " \
file://linux-2.6.20_01_dec_2.patch;patch=1 \
file://patch_classdamp_pm_v_audio_codec_patch.patch;patch=1 \
file://patch_audiocodec_glitch.patch;patch=1 \
- file://0001-kbuild-include-limits.h-in-sumversion.c-for-path_max.patch;patch=1 \
file://hrw-saa-fix.diff;patch=1 \
file://hrw-make-create-kconfig-executable.patch;patch=1 \
"
diff --git a/recipes/linux/linux_2.6.22.bb b/recipes/linux/linux_2.6.22.bb
index 1e73139c5e..cd9a25c838 100644
--- a/recipes/linux/linux_2.6.22.bb
+++ b/recipes/linux/linux_2.6.22.bb
@@ -66,4 +66,4 @@ python do_compulab_image() {
os.symlink(img_file, link_file)
}
-addtask compulab_image after do_deploy before do_package
+addtask compulab_image after do_deploy before do_build
diff --git a/recipes/linux/linux_2.6.23+2.6.24-rc5.bb b/recipes/linux/linux_2.6.23+2.6.24-rc5.bb
index 32a3ac0a70..e56b78e500 100644
--- a/recipes/linux/linux_2.6.23+2.6.24-rc5.bb
+++ b/recipes/linux/linux_2.6.23+2.6.24-rc5.bb
@@ -63,5 +63,5 @@ python do_compulab_image() {
os.symlink(img_file, link_file)
}
-addtask compulab_image after do_deploy before do_package
+addtask compulab_image after do_deploy before do_build
diff --git a/recipes/linux/linux_2.6.24.bb b/recipes/linux/linux_2.6.24.bb
index 31a8a04346..2136a9b8db 100644
--- a/recipes/linux/linux_2.6.24.bb
+++ b/recipes/linux/linux_2.6.24.bb
@@ -7,7 +7,6 @@ DEFAULT_PREFERENCE_mpc8313e-rdb = "1"
DEFAULT_PREFERENCE_simpad = "1"
DEFAULT_PREFERENCE_atngw100 = "1"
DEFAULT_PREFERENCE_at32stk1000 = "1"
-DEFAULT_PREFERENCE_ts72xx = "1"
DEFAULT_PREFERENCE_hipox = "1"
DEFAULT_PREFERENCE_cs-e9302 = "1"
DEFAULT_PREFERENCE_smartq5 = "1"
@@ -164,5 +163,5 @@ python do_compulab_image() {
}
-addtask compulab_image after do_deploy before do_package_write
+addtask compulab_image after do_deploy before do_build
diff --git a/recipes/linux/linux_2.6.25.bb b/recipes/linux/linux_2.6.25.bb
index a89374a652..38e651b3ac 100644
--- a/recipes/linux/linux_2.6.25.bb
+++ b/recipes/linux/linux_2.6.25.bb
@@ -98,5 +98,5 @@ python do_compulab_image() {
}
-addtask compulab_image after do_deploy before do_package
+addtask compulab_image after do_deploy before do_build
diff --git a/recipes/linux/linux_2.6.27.bb b/recipes/linux/linux_2.6.27.bb
index bb7b1f347c..7661600e3c 100644
--- a/recipes/linux/linux_2.6.27.bb
+++ b/recipes/linux/linux_2.6.27.bb
@@ -1,15 +1,16 @@
require linux.inc
-PR = "r12"
+PR = "r14"
# Mark archs/machines that this kernel supports
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_boc01 = "1"
DEFAULT_PREFERENCE_progear = "1"
DEFAULT_PREFERENCE_simpad = "-1"
+DEFAULT_PREFERENCE_ts72xx = "1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.44.bz2;patch=1 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.45.bz2;patch=1 \
file://defconfig "
SRC_URI_append_boc01 = "\
@@ -42,6 +43,39 @@ SRC_URI_append_simpad = "\
file://connectplus-remove-ide-HACK.patch;patch=1 \
"
+SRC_URI_append_ts72xx = "\
+ file://0001-TS72xx-update-memory-map-comments.patch;patch=1 \
+ file://0002-GPIO-fix.patch;patch=1 \
+ file://0003-Debounce-IRQ.patch;patch=1 \
+ file://0004-OHCI-fix.patch;patch=1 \
+ file://0005-Fix-wrong-machine-ID-passed-from-RedBoot.patch;patch=1 \
+ file://0006-Force-the-nF-bit-on.patch;patch=1 \
+ file://0007-Use-CPLD-watchdog-to-reset.patch;patch=1 \
+ file://0008-Fix-UART-clocks.patch;patch=1 \
+ file://0009-CPU-info-and-board-revision.patch;patch=1 \
+ file://0010-GPIO-leds.patch;patch=1 \
+ file://0011-EP93xx-Ethernet-support.patch;patch=1 \
+ file://0012-TS72xx-watchdog.patch;patch=1 \
+ file://0013-TS7200-NOR-physmap-fix.patch;patch=1 \
+ file://0014-TS-7200-8MB-NOR-flash.patch;patch=1 \
+ file://0015-TS-72xx-MAX197-support.patch;patch=1 \
+ file://0016-RS485-common-bits.patch;patch=1 \
+ file://0017-TS-72xx-SBC-proc-info.patch;patch=1 \
+ file://0018-EP93xx-GPIO-I2C.patch;patch=1 \
+ file://0019-EP93xx-SPI-driver.patch;patch=1 \
+ file://0020-TS-72XX-LCD-console-driver.patch;patch=1 \
+ file://0021-EP93xx-GPIO-matrix-keypad.patch;patch=1 \
+ file://0022-TS-72xx-RS485-auto-mode-support.patch;patch=1 \
+ file://0023-Clean-and-invalidate-D-cache-entry.patch;patch=1 \
+ file://0024-PC-104-I-O-and-memory-mappings.patch;patch=1 \
+ file://0025-EP93xx-discontigmem.patch;patch=1 \
+ file://0026-TS72xx-PATA-support.patch;patch=1 \
+ file://0027-TS72xx-TS-SER1-support.patch;patch=1 \
+ file://0028-TS72xx-TS-ETH100.patch;patch=1 \
+ file://0029-EP93xx-Power-Management-Routines.patch;patch=1 \
+ file://0030-EP93xx-CPUfreq-driver.patch;patch=1 \
+ "
+
# see http://bugzilla.kernel.org/show_bug.cgi?id=11143
do_stage_append() {
if [ -f arch/${ARCH}/lib/crtsavres.o ]; then
diff --git a/recipes/linux/linux_2.6.28.bb b/recipes/linux/linux_2.6.28.bb
index 9ab1e1f727..52882088d4 100644
--- a/recipes/linux/linux_2.6.28.bb
+++ b/recipes/linux/linux_2.6.28.bb
@@ -6,13 +6,14 @@ PR = "r13"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_at91sam9263ek = "28"
-DEFAULT_PREFERENCE_ronetix-pm9263 = "28"
+DEFAULT_PREFERENCE_ronetix-pm9263 = "29"
DEFAULT_PREFERENCE_stb225 = "28"
DEFAULT_PREFERENCE_collie = "1"
DEFAULT_PREFERENCE_gamecube = "1"
DEFAULT_PREFERENCE_wrap = "1"
DEFAULT_PREFERENCE_tx27 = "1"
DEFAULT_PREFERENCE_nokia900 = "1"
+DEFAULT_PREFERENCE_mh355 = "1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2 \
${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.10.bz2;patch=1 \
@@ -25,7 +26,12 @@ SRC_URI_append_at91sam9263ek = " \
SRC_URI_append_ronetix-pm9263 = " \
file://linux-2.6.28-at91.patch.bz2;patch=1 \
file://linux-2.6.28-exp.patch.bz2;patch=1 \
- file://linux-2.6.28-at91-ronetix-12012009.patch;patch=1 "
+ http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.28/003_linux-2.6.28-at91-ronetix-20112009.patch;patch=1 "
+
+SRC_URI_append_mh355 = " \
+ file://linux-2.6.28-at91.patch.bz2;patch=1 \
+ file://linux-2.6.28-exp.patch.bz2;patch=1 \
+ file://linux-2.6.28.10-at91-mh.patch;patch=1 "
SRC_URI_append_stb225 = " \
file://uImage.patch;patch=1 \
@@ -72,6 +78,7 @@ SRC_URI_append_tx27 = " \
"
SRC_URI_nokia900 = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2 \
- http://repository.maemo.org/pool/maemo5.0/free/k/kernel/kernel_2.6.28-20094803.3+0m5.diff.gz;patch=1;name=nokia"
+ http://repository.maemo.org/pool/maemo5.0/free/k/kernel/kernel_2.6.28-20094803.3+0m5.diff.gz;patch=1 \
+ file://defconfig"
S = "${WORKDIR}/linux-2.6.28/"
diff --git a/recipes/linux/linux_2.6.29.bb b/recipes/linux/linux_2.6.29.bb
index 240faf224d..33f0eda267 100644
--- a/recipes/linux/linux_2.6.29.bb
+++ b/recipes/linux/linux_2.6.29.bb
@@ -1,6 +1,6 @@
require linux.inc
-PR = "r10"
+PR = "r11"
S = "${WORKDIR}/linux-2.6.29"
diff --git a/recipes/linux/linux_2.6.32+2.6.33-rc6.bb b/recipes/linux/linux_2.6.32+2.6.33-rc6.bb
deleted file mode 100644
index 7679546922..0000000000
--- a/recipes/linux/linux_2.6.32+2.6.33-rc6.bb
+++ /dev/null
@@ -1,41 +0,0 @@
-require linux.inc
-
-KERNEL_RELEASE = "2.6.33-rc6"
-OLD_KERNEL_RELEASE = "2.6.32"
-PV = "${OLD_KERNEL_RELEASE}+${KERNEL_RELEASE}"
-PR = "r1"
-
-S = "${WORKDIR}/linux-${OLD_KERNEL_RELEASE}"
-
-# Mark archs/machines that this kernel supports
-DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_simone = "-1"
-DEFAULT_PREFERENCE_akita = "-1"
-DEFAULT_PREFERENCE_c7x0 = "-1"
-DEFAULT_PREFERENCE_collie = "-1"
-DEFAULT_PREFERENCE_poodle = "-1"
-DEFAULT_PREFERENCE_spitz = "-1"
-DEFAULT_PREFERENCE_tosa = "-1"
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${OLD_KERNEL_RELEASE}.tar.bz2;name=kernel \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-${KERNEL_RELEASE}.bz2;name=rc6;patch=1 \
- file://defconfig"
-
-SRC_URI[rc6.md5sum] = "1d20a0359a18b8822a742d62a4bae2f5"
-SRC_URI[rc6.sha256sum] = "8b8ac844b7154d952469587bcb9d2cff089cc71ccd7522e38eedcdc1f2c007a5"
-SRC_URI[kernel.md5sum] = "260551284ac224c3a43c4adac7df4879"
-SRC_URI[kernel.sha256sum] = "5099786d80b8407d98a619df00209c2353517f22d804fdd9533b362adcb4504e"
-
-# Zaurus family bootloader patches
-RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
-ZAURUSPATCHES = " ${RPSRC}/pxa-linking-bug-r1.patch;patch=1;status=unmergable;name=pxa-linking-bug-r1 "
-SRC_URI[pxa-linking-bug-r1.md5sum] = "1e2a99787260c3566033e7f41180e2c8"
-SRC_URI[pxa-linking-bug-r1.sha256sum] = "785d2680022325ad54c1593082dce902f5fee31dae4c1922ba43956b1dcfcd8b"
-
-# Machine specific patches
-SRC_URI_append_akita = "${ZAURUSPATCHES}"
-SRC_URI_append_c7x0 = "${ZAURUSPATCHES}"
-SRC_URI_append_collie = "${ZAURUSPATCHES}"
-SRC_URI_append_poodle = "${ZAURUSPATCHES}"
-SRC_URI_append_spitz = "${ZAURUSPATCHES}"
-SRC_URI_append_tosa = "${ZAURUSPATCHES}"
diff --git a/recipes/linux/linux_2.6.32.bb b/recipes/linux/linux_2.6.32.bb
index 560ff42a67..0f07aa5bf2 100644
--- a/recipes/linux/linux_2.6.32.bb
+++ b/recipes/linux/linux_2.6.32.bb
@@ -1,6 +1,6 @@
require linux.inc
-PR = "r5"
+PR = "r10"
S = "${WORKDIR}/linux-${PV}"
@@ -20,9 +20,10 @@ DEFAULT_PREFERENCE_tosa = "-1"
DEFAULT_PREFERENCE_ben-nanonote = "-1"
DEFAULT_PREFERENCE_jornada6xx = "-1"
DEFAULT_PREFERENCE_jornada7xx = "-1"
+DEFAULT_PREFERENCE_ts72xx = "-1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2;name=kernel \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.5.bz2;patch=1 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.9.bz2;patch=1 \
file://defconfig"
SRC_URI[kernel.md5sum] = "260551284ac224c3a43c4adac7df4879"
@@ -45,6 +46,27 @@ SRC_URI_append_simone = " \
file://ep93xx/ep93xx-spi.patch;patch=1 \
file://ep93xx/ep93xx-cpuinfo.patch;patch=1 "
+FILES_kernel-image_simone = ""
+
+SRC_URI_append_ts72xx = " \
+ file://0001-ts72xx_base.patch;patch=1 \
+ file://0002-ts72xx_force_machine-id.patch;patch=1 \
+ file://0003-ep93xx_cpuinfo.patch;patch=1 \
+ file://0004-ts72xx_sbcinfo.patch;patch=1 \
+ file://0005-ep93xx_eth.patch;patch=1 \
+ file://0006-ts72xx_ts_ser1.patch;patch=1 \
+ file://0007-ts72xx_rs485.patch;patch=1 \
+ file://0008-ts72xx_ts_eth100.patch;patch=1 \
+ file://0009-ts7200_cf_ide.patch;patch=1 \
+ file://0010-ts72xx_pata.patch;patch=1 \
+ file://0011-ep93xx_pm.patch;patch=1 \
+ file://0012-ts72xx_gpio_i2c.patch;patch=1 \
+ file://0013-ts72xx_dio_keypad.patch;patch=1 \
+ file://0014-ep93xx_spi.patch;patch=1 \
+ file://0015-ep93xx_cpufreq.patch;patch=1 \
+ file://0016-ts7200_nor_flash.patch;patch=1 \
+ "
+
# Zaurus family bootloader patches
RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
ZAURUSPATCHES = " ${RPSRC}/pxa-linking-bug-r1.patch;patch=1;status=unmergable;name=pxa-linking-bug-r1 "
@@ -58,3 +80,6 @@ SRC_URI_append_collie = "${ZAURUSPATCHES}"
SRC_URI_append_poodle = "${ZAURUSPATCHES}"
SRC_URI_append_spitz = "${ZAURUSPATCHES}"
SRC_URI_append_tosa = "${ZAURUSPATCHES}"
+
+SRC_URI_append_eee701 = " \
+ file://intelfb.patch;patch=1 "
diff --git a/recipes/linux/linux_2.6.33.bb b/recipes/linux/linux_2.6.33.bb
new file mode 100644
index 0000000000..ddc810ef0f
--- /dev/null
+++ b/recipes/linux/linux_2.6.33.bb
@@ -0,0 +1,34 @@
+require linux.inc
+
+PR="r1"
+
+# Mark archs/machines that this kernel supports
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_ts72xx = "-1"
+DEFAULT_PREFERENCE_mpc8641-hpcn = "1"
+DEFAULT_PREFERENCE_p2020ds = "1"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/${P}.tar.bz2;name=kernel \
+ file://defconfig"
+
+SRC_URI[kernel.md5sum] = "c3883760b18d50e8d78819c54d579b00"
+SRC_URI[kernel.sha256sum] = "63e237de3b3c4c46a21833b9ce7e20574548d52dabbd1a8bf376041e4455d5c6"
+
+SRC_URI_append_ts72xx = " \
+ file://0001-ts72xx_base.patch;patch=1 \
+ file://0002-ts72xx_force_machine-id.patch;patch=1 \
+ file://0003-ep93xx_cpuinfo.patch;patch=1 \
+ file://0004-ts72xx_sbcinfo.patch;patch=1 \
+ file://0005-ep93xx_eth.patch;patch=1 \
+ file://0006-ts72xx_ts_ser1.patch;patch=1 \
+ file://0007-ts72xx_rs485.patch;patch=1 \
+ file://0008-ts72xx_ts_eth100.patch;patch=1 \
+ file://0009-ts7200_cf_ide.patch;patch=1 \
+ file://0010-ts72xx_pata.patch;patch=1 \
+ file://0011-ep93xx_pm.patch;patch=1 \
+ file://0012-ts72xx_gpio_i2c.patch;patch=1 \
+ file://0013-ts72xx_dio_keypad.patch;patch=1 \
+ file://0014-ep93xx_spi.patch;patch=1 \
+ file://0015-ep93xx_cpufreq.patch;patch=1 \
+ file://0016-ts7200_nor_flash.patch;patch=1 \
+ "
diff --git a/recipes/linux/logicpd-pxa270_2.6.17-rc5.bb b/recipes/linux/logicpd-pxa270_2.6.17-rc5.bb
index e7ab462c0b..33521aef9b 100644
--- a/recipes/linux/logicpd-pxa270_2.6.17-rc5.bb
+++ b/recipes/linux/logicpd-pxa270_2.6.17-rc5.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the LogicPD Zoom(PXA270 ref design)"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r3"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/linux-2.6.17-rc5.tar.bz2 \
diff --git a/recipes/linux/logicpd-pxa270_2.6.19.2.bb b/recipes/linux/logicpd-pxa270_2.6.19.2.bb
index 7a4eaae99b..5c508fd03a 100644
--- a/recipes/linux/logicpd-pxa270_2.6.19.2.bb
+++ b/recipes/linux/logicpd-pxa270_2.6.19.2.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the LogicPD Zoom(PXA270 ref design)"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
SRC_URI = "ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.2.tar.bz2 \
diff --git a/recipes/linux/mainstone-kernel_2.6.11.bb b/recipes/linux/mainstone-kernel_2.6.11.bb
index cae3bf799c..e4a15b03c6 100644
--- a/recipes/linux/mainstone-kernel_2.6.11.bb
+++ b/recipes/linux/mainstone-kernel_2.6.11.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the Mainstone (PXA270 ref design)"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.11.tar.bz2 \
diff --git a/recipes/linux/mainstone-kernel_2.6.18.bb b/recipes/linux/mainstone-kernel_2.6.18.bb
index 290bb5911d..b7034f02a5 100644
--- a/recipes/linux/mainstone-kernel_2.6.18.bb
+++ b/recipes/linux/mainstone-kernel_2.6.18.bb
@@ -2,7 +2,7 @@ require linux.inc
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the Mainstone (PXA270 ref design)"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r2"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 \
diff --git a/recipes/linux/mnci-ramses_2.4.21-rmk2-pxa1.bb b/recipes/linux/mnci-ramses_2.4.21-rmk2-pxa1.bb
index b001763710..02dc68a110 100644
--- a/recipes/linux/mnci-ramses_2.4.21-rmk2-pxa1.bb
+++ b/recipes/linux/mnci-ramses_2.4.21-rmk2-pxa1.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for MNCI device"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
DEPENDS = "modutils-cross virtual/${TARGET_PREFIX}gcc${KERNEL_CCSUFFIX}"
COMPATIBLE_MACHINE = "mnci"
KV = "2.4.21"
diff --git a/recipes/linux/mx21ads-kernel_2.6.19rc6.bb b/recipes/linux/mx21ads-kernel_2.6.19rc6.bb
index bc8e6242a7..392f5e5b71 100644
--- a/recipes/linux/mx21ads-kernel_2.6.19rc6.bb
+++ b/recipes/linux/mx21ads-kernel_2.6.19rc6.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the MX21ADS"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r2"
PV = "2.6.18+2.6.19-rc6"
diff --git a/recipes/linux/netbook-pro-kernel_2.6.17.bb b/recipes/linux/netbook-pro-kernel_2.6.17.bb
index 37704dcb64..d95c2b10cc 100644
--- a/recipes/linux/netbook-pro-kernel_2.6.17.bb
+++ b/recipes/linux/netbook-pro-kernel_2.6.17.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for Psion/Teklogix netbookpro compatible machines"
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r2"
COMPATIBLE_MACHINE = "netbook-pro"
diff --git a/recipes/linux/opensimpad_2.4.25-vrs2-pxa1-jpm1.bb b/recipes/linux/opensimpad_2.4.25-vrs2-pxa1-jpm1.bb
index 547010996d..36eb4dba99 100644
--- a/recipes/linux/opensimpad_2.4.25-vrs2-pxa1-jpm1.bb
+++ b/recipes/linux/opensimpad_2.4.25-vrs2-pxa1-jpm1.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for the SIEMENS SIMpad family of devices."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
KV = "${@bb.data.getVar('PV',d,True).split('-')[0]}"
VRSV = "${@bb.data.getVar('PV',d,True).split('-')[1]}"
PXAV = "${@bb.data.getVar('PV',d,True).split('-')[2]}"
diff --git a/recipes/linux/opensimpad_2.4.27-vrs1-pxa1-jpm1.bb b/recipes/linux/opensimpad_2.4.27-vrs1-pxa1-jpm1.bb
index d9324e9883..3ff820a7a9 100644
--- a/recipes/linux/opensimpad_2.4.27-vrs1-pxa1-jpm1.bb
+++ b/recipes/linux/opensimpad_2.4.27-vrs1-pxa1-jpm1.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for the SIEMENS SIMpad family of devices."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
KV = "${@bb.data.getVar('PV',d,True).split('-')[0]}"
VRSV = "${@bb.data.getVar('PV',d,True).split('-')[1]}"
PXAV = "${@bb.data.getVar('PV',d,True).split('-')[2]}"
diff --git a/recipes/linux/openzaurus-pxa27x_2.4.20-rmk2-embedix20050602.bb b/recipes/linux/openzaurus-pxa27x_2.4.20-rmk2-embedix20050602.bb
index e65f293de8..daedc2c60b 100644
--- a/recipes/linux/openzaurus-pxa27x_2.4.20-rmk2-embedix20050602.bb
+++ b/recipes/linux/openzaurus-pxa27x_2.4.20-rmk2-embedix20050602.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Linux kernel 2.4.20-embedix for Sharp Zaurus SL-C1000 and SL-C300
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602"
SECTION = "kernel"
PV = "2.4.20-rmk2-embedix"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
KV = "2.4.20"
PR = "r18"
diff --git a/recipes/linux/openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc b/recipes/linux/openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
index 6428629316..2eb111d009 100644
--- a/recipes/linux/openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
+++ b/recipes/linux/openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux kernel for OpenZaurus PXA processor based devices."
SECTION = "kernel"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PV = "2.4.18-rmk7-pxa3-embedix"
PR = "r46"
KV = "2.4.18"
diff --git a/recipes/linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb b/recipes/linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb
index 4c9e9a1840..afb62e3f96 100644
--- a/recipes/linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb
+++ b/recipes/linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Linux kernel for OpenZaurus StrongArm processor based devices."
SECTION = "kernel"
PV = "2.4.18-rmk7-pxa3-embedix"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
KV = "2.4.18"
RMKV = "7"
PXAV = "3"
diff --git a/recipes/linux/triton-kernel_2.6.11.bb b/recipes/linux/triton-kernel_2.6.11.bb
index c580706b25..d51dc63319 100644
--- a/recipes/linux/triton-kernel_2.6.11.bb
+++ b/recipes/linux/triton-kernel_2.6.11.bb
@@ -1,6 +1,6 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the KARO TRITON XScale Board"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR = "r0"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
diff --git a/recipes/linux/xanadux-ba-2.6_2.6.12.bb b/recipes/linux/xanadux-ba-2.6_2.6.12.bb
index 1e8274fa11..ecab935092 100644
--- a/recipes/linux/xanadux-ba-2.6_2.6.12.bb
+++ b/recipes/linux/xanadux-ba-2.6_2.6.12.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Xanadux Blueangel kernel based on the hh 2.6.12"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR ="r0"
SRC_URI = "cvs://anonymous@xanadux.cvs.sourceforge.net/cvsroot/xanadux;method=pserver;module=linux-2.6-xda;tag=K2-6-12-hh2-xda0-ba0"
diff --git a/recipes/linux/xanadux-un-2.6_2.6.12.bb b/recipes/linux/xanadux-un-2.6_2.6.12.bb
index 1cc983aa77..60e50139be 100644
--- a/recipes/linux/xanadux-un-2.6_2.6.12.bb
+++ b/recipes/linux/xanadux-un-2.6_2.6.12.bb
@@ -1,7 +1,7 @@
############## /home/jrs/cvs/oe/org.openembedded.dev/packages/linux/xanadux-un-2.6_2.6.12.bb ###############
DESCRIPTION = "Xanadux HTC-Universal kernel based on the hh 2.6.12"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PR ="r2"
SRC_URI = "cvs://anonymous@xanadux.cvs.sourceforge.net/cvsroot/xanadux;method=pserver;module=linux-2.6-xda;tag=K2-6-12-hh2-xda0-un0"
diff --git a/recipes/lirc/lirc_0.8.5.bb b/recipes/lirc/lirc_0.8.5.bb
index 34a40ff9ef..585edc5ad0 100644
--- a/recipes/lirc/lirc_0.8.5.bb
+++ b/recipes/lirc/lirc_0.8.5.bb
@@ -15,6 +15,7 @@ RDEPENDS_lirc-x = "lirc"
RDEPENDS_lirc-exec = "lirc"
RDEPENDS_lirc-nslu2example = "lirc lirc-exec"
RRECOMMENDS_lirc = "lirc-exec"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/lirc/lirc-${PV}.tar.gz \
file://lircd.init file://lircmd.init file://lircexec.init"
@@ -34,12 +35,6 @@ require lirc-config.inc
EXTRA_OEMAKE = 'SUBDIRS="daemons tools"'
-do_stage() {
- oe_libinstall -so -C tools liblirc_client ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/lirc/
- install -m 0644 tools/lirc_client.h ${STAGING_INCDIR}/lirc/
-}
-
do_install_append() {
install -d ${D}${sysconfdir}/init.d
install ${WORKDIR}/lircd.init ${D}${sysconfdir}/init.d/lircd
diff --git a/recipes/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch b/recipes/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch
new file mode 100644
index 0000000000..20f388e890
--- /dev/null
+++ b/recipes/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch
@@ -0,0 +1,23 @@
+Description: use pkg-config to detect gnutls
+Debian: http://bugs.debian.org/529835
+Origin: http://groups.google.com/group/loudmouth-dev/browse_thread/thread/3f78255837048daf#
+
+--- a/configure.ac.orig 2009-08-16 20:29:36.000000000 +0200
++++ b/configure.ac 2009-08-16 20:30:43.000000000 +0200
+@@ -146,10 +146,12 @@ AC_ARG_WITH(openssl-libs,
+ enable_ssl=no
+ if test "x$ac_ssl" = "xgnutls"; then
+ dnl Look for GnuTLS
+- AM_PATH_LM_LIBGNUTLS($GNUTLS_REQUIRED, have_libgnutls=yes, have_libgnutls=no)
+- if test "x$have_libgnutls" = "xyes"; then
+- CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
+- LIBS="$LIBS $LIBGNUTLS_LIBS"
++ PKG_CHECK_MODULES(GNUTLS, gnutls >= $GNUTLS_REQUIRED, have_gnutls=yes, have_gnutls=no)
++ if test "x$have_gnutls" = "xyes"; then
++ AC_SUBST(ASYNCNS_CFLAGS)
++ AC_SUBST(ASYNCNS_LIBS)
++ CFLAGS="$CFLAGS $GNUTLS_CFLAGS"
++ LIBS="$LIBS $GNUTLS_LIBS"
+ AC_DEFINE(HAVE_GNUTLS, 1, [whether to use GnuTSL support.])
+ enable_ssl=GnuTLS
+ else
diff --git a/recipes/loudmouth/loudmouth_1.4.3.bb b/recipes/loudmouth/loudmouth_1.4.3.bb
index d8f519b611..ecd9419069 100644
--- a/recipes/loudmouth/loudmouth_1.4.3.bb
+++ b/recipes/loudmouth/loudmouth_1.4.3.bb
@@ -2,11 +2,9 @@ DESCRIPTION = "Loudmouth is a lightweight and easy-to-use C library for programm
HOMEPAGE = "http://www.loudmouth-project.org/"
LICENSE = "LGPL"
DEPENDS = "glib-2.0 gnutls check"
+PR = "r1"
-SRC_URI = "http://ftp.imendio.com/pub/imendio/${PN}/src/${PN}-${PV}.tar.gz"
+SRC_URI = "http://ftp.imendio.com/pub/imendio/${PN}/src/${PN}-${PV}.tar.gz \
+ file://04-use-pkg-config-for-gnutls.patch;patch=1"
inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/recipes/lsh/lsh_1.5.5.bb b/recipes/lsh/lsh_1.5.5.bb
deleted file mode 100644
index 284a0100eb..0000000000
--- a/recipes/lsh/lsh_1.5.5.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-LICENSE = "GPL"
-SECTION = "console/network"
-DESCRIPTION = "lsh is a GNU GPL-licensed implementation of the SSH \
-(version 2) protocol. It includes a server, a client, and some \
-utility programs."
-DEPENDS = "zlib gmp liboop"
-
-SRC_URI = "http://www.lysator.liu.se/~nisse/archive/lsh-${PV}.tar.gz"
-S = "${WORKDIR}/lsh-${PV}"
-
-inherit autotools
-configopts = " --enable-debug-alloc Enable memory allocation sanity checks \
- --enable-debug-trace Enable tracing support \
- --enable-gcov Instrument for gcov (requires a modern gcc) \
- --without-pty Disable pty support \
- --disable-srp Disable the (experimental) support for SRP \
- --disable-kerberos Don't support kerberos \
- --disable-pam Don't support PAM \
- --disable-datafellows-workarounds \
- --enable-initgroups-workaround \
- --disable-tcp-forward Disable tcp forwarding \
- --disable-x11-forward Disable x11 forwarding (proxy only) \
- --disable-agent-forward Disable auth-agent forwarding (proxy only) \
- --disable-ipv6 Disable IPv6 support \
- --disable-utmp Disable utmp and wtmp support \
- --without-zlib Don't use zlib compression \
- --with-tcpwrappers Use tcp-wrappers for filtering connections \
- --with-sshd1=PROGRAM support fallback to SSH1 daemon \
- --with-scheme=PROGRAM Use a particular scheme implementation \
- --without-system-argp Don't use the system's argp \
- --with-include-path A colon-separated list of directories to search for \
- --with-lib-path A colon-separated list of directories to search for \
- --with-x use the X Window System"
-EXTRA_OECONF = "--disable-srp --disable-kerberos --disable-pam \
- --without-x"
diff --git a/recipes/lsh/lsh_2.0.4.bb b/recipes/lsh/lsh_2.0.4.bb
new file mode 100644
index 0000000000..99d53583a5
--- /dev/null
+++ b/recipes/lsh/lsh_2.0.4.bb
@@ -0,0 +1,37 @@
+LICENSE = "GPL"
+SECTION = "console/network"
+DESCRIPTION = "lsh is a GNU GPL-licensed implementation of the SSH \
+(version 2) protocol. It includes a server, a client, and some \
+utility programs."
+DEPENDS = "zlib gmp liboop"
+
+SRC_URI = "http://www.lysator.liu.se/~nisse/archive/lsh-${PV}.tar.gz;name=src"
+SRC_URI[src.md5sum] = "621f4442332bb772b92d397d17ccaf02"
+SRC_URI[src.sha256sum] = "614b9d63e13ad3e162c82b6405d1f67713fc622a8bc11337e72949d613713091"
+S = "${WORKDIR}/lsh-${PV}"
+
+inherit autotools
+configopts = " --enable-debug-alloc Enable memory allocation sanity checks \
+ --enable-debug-trace Enable tracing support \
+ --enable-gcov Instrument for gcov (requires a modern gcc) \
+ --without-pty Disable pty support \
+ --disable-srp Disable the (experimental) support for SRP \
+ --disable-kerberos Don't support kerberos \
+ --disable-pam Don't support PAM \
+ --disable-datafellows-workarounds \
+ --enable-initgroups-workaround \
+ --disable-tcp-forward Disable tcp forwarding \
+ --disable-x11-forward Disable x11 forwarding (proxy only) \
+ --disable-agent-forward Disable auth-agent forwarding (proxy only) \
+ --disable-ipv6 Disable IPv6 support \
+ --disable-utmp Disable utmp and wtmp support \
+ --without-zlib Don't use zlib compression \
+ --with-tcpwrappers Use tcp-wrappers for filtering connections \
+ --with-sshd1=PROGRAM support fallback to SSH1 daemon \
+ --with-scheme=PROGRAM Use a particular scheme implementation \
+ --without-system-argp Don't use the system's argp \
+ --with-include-path A colon-separated list of directories to search for \
+ --with-lib-path A colon-separated list of directories to search for \
+ --with-x use the X Window System"
+EXTRA_OECONF = "--disable-srp --disable-kerberos --disable-pam \
+ --without-x"
diff --git a/recipes/lsof/lsof_4.78.bb b/recipes/lsof/lsof_4.78.bb
deleted file mode 100644
index 02852a727f..0000000000
--- a/recipes/lsof/lsof_4.78.bb
+++ /dev/null
@@ -1,45 +0,0 @@
-DESCRIPTION = "Lsof is a Unix-specific diagnostic tool. \
-Its name stands for LiSt Open Files, and it does just that."
-SECTION = "devel"
-LICENSE = "BSD"
-
-PR = "r4"
-
-SRC_URI = "ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_${PV}.tar.bz2"
-LOCALSRC = "file://${WORKDIR}/lsof_${PV}/lsof_${PV}_src.tar"
-S = "${WORKDIR}/lsof_${PV}_src"
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- src_uri = bb.data.getVar('SRC_URI', d)
- bb.data.setVar('SRC_URI', '${LOCALSRC}', d)
- bb.build.exec_func('base_do_unpack', d)
- bb.data.setVar('SRC_URI', src_uri, d)
-}
-
-export LSOF_OS = "${TARGET_OS}"
-LSOF_OS_linux-uclibc = "linux"
-LSOF_OS_linux-uclibceabi = "linux"
-LSOF_OS_linux-uclibspe = "linux"
-LSOF_OS_linux-gnueabi = "linux"
-LSOF_OS_linux-gnuspe = "linux"
-export LSOF_INCLUDE = "${STAGING_INCDIR}"
-
-do_configure () {
- yes | ./Configure ${LSOF_OS}
-}
-
-export I = "${STAGING_INCDIR}"
-export L = "${STAGING_INCDIR}"
-export EXTRA_OEMAKE = ""
-
-do_compile () {
- oe_runmake 'CC=${CC}' 'CFGL=${LDFLAGS} -L./lib -llsof' 'DEBUG=' 'INCL=${CFLAGS}' \
- 'RANLIB=${RANLIB} liblsof.a'
-}
-
-do_install () {
- install -d ${D}${sbindir} ${D}${mandir}/man8
- install -m 4755 lsof ${D}${sbindir}/lsof
- install -m 0644 lsof.8 ${D}${mandir}/man8/lsof.8
-}
diff --git a/recipes/lsof/lsof_4.83.bb b/recipes/lsof/lsof_4.83.bb
new file mode 100644
index 0000000000..d74c574a33
--- /dev/null
+++ b/recipes/lsof/lsof_4.83.bb
@@ -0,0 +1,49 @@
+DESCRIPTION = "Lsof is a Unix-specific diagnostic tool. \
+Its name stands for LiSt Open Files, and it does just that."
+SECTION = "devel"
+LICENSE = "BSD"
+
+PR = "r0"
+
+SRC_URI = "ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_${PV}.tar.bz2;name=lsof483tarbz2"
+SRC_URI[lsof483tarbz2.md5sum] = "8f731a6251b8c0143d585df0d5ca779e"
+SRC_URI[lsof483tarbz2.sha256sum] = "b89f930bbe36b970e3cd070b9860ee701d8c7285ffedf2fbcec0e5fa3cb1f544"
+
+LOCALSRC = "file://${WORKDIR}/lsof_${PV}/lsof_${PV}_src.tar"
+S = "${WORKDIR}/lsof_${PV}_src"
+
+# the tar.bz2 file contains another tar, cde below unpacks it
+python do_unpack () {
+ bb.build.exec_func('base_do_unpack', d)
+ src_uri = bb.data.getVar('SRC_URI', d)
+ bb.data.setVar('SRC_URI', '${LOCALSRC}', d)
+ bb.build.exec_func('base_do_unpack', d)
+ bb.data.setVar('SRC_URI', src_uri, d)
+}
+
+export LSOF_OS = "${TARGET_OS}"
+LSOF_OS_linux-uclibc = "linux"
+LSOF_OS_linux-uclibceabi = "linux"
+LSOF_OS_linux-uclibspe = "linux"
+LSOF_OS_linux-gnueabi = "linux"
+LSOF_OS_linux-gnuspe = "linux"
+export LSOF_INCLUDE = "${STAGING_INCDIR}"
+
+do_configure () {
+ yes | ./Configure ${LSOF_OS}
+}
+
+export I = "${STAGING_INCDIR}"
+export L = "${STAGING_INCDIR}"
+export EXTRA_OEMAKE = ""
+
+do_compile () {
+ oe_runmake 'CC=${CC}' 'CFGL=${LDFLAGS} -L./lib -llsof' 'DEBUG=' 'INCL=${CFLAGS}' \
+ 'RANLIB=${RANLIB} liblsof.a'
+}
+
+do_install () {
+ install -d ${D}${sbindir} ${D}${mandir}/man8
+ install -m 4755 lsof ${D}${sbindir}/lsof
+ install -m 0644 lsof.8 ${D}${mandir}/man8/lsof.8
+}
diff --git a/recipes/lttng/lttng-control_0.12.bb b/recipes/lttng/lttng-control_0.12.bb
deleted file mode 100644
index 0cfdc03ab5..0000000000
--- a/recipes/lttng/lttng-control_0.12.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-SECTION = "devel"
-DESCRIPTION = "The Linux trace toolkit is a suite of tools designed to \
-extract program execution details from the Linux operating system and \
-interpret them."
-LICENSE = "GPL"
-
-SRC_URI = "http://ltt.polymtl.ca/lttng/ltt-control-${PV}-21062006.tar.gz"
-
-S = "${WORKDIR}/ltt-control-${PV}-21062006"
-
-inherit autotools
-
-export KERNELDIR="${STAGING_KERNEL_DIR}"
-
-FILES_${PN} += "${datadir}/ltt-control/facilities/*"
diff --git a/recipes/lttng/lttng-control_0.79.bb b/recipes/lttng/lttng-control_0.79.bb
new file mode 100644
index 0000000000..703fccaafe
--- /dev/null
+++ b/recipes/lttng/lttng-control_0.79.bb
@@ -0,0 +1,15 @@
+SECTION = "devel"
+DESCRIPTION = "The Linux trace toolkit is a suite of tools designed to \
+extract program execution details from the Linux operating system and \
+interpret them."
+LICENSE = "GPL"
+
+SRC_URI = "http://lttng.org/files/lttng/ltt-control-${PV}-01022010.tar.gz"
+
+S = "${WORKDIR}/ltt-control-${PV}-01022010"
+
+inherit autotools
+
+export KERNELDIR="${STAGING_KERNEL_DIR}"
+
+FILES_${PN} += "${datadir}/ltt-control/facilities/*"
diff --git a/recipes/m4/m4-native_1.4.11.bb b/recipes/m4/m4-native_1.4.11.bb
index 8beb8748e3..2408013185 100644
--- a/recipes/m4/m4-native_1.4.11.bb
+++ b/recipes/m4/m4-native_1.4.11.bb
@@ -1,19 +1,11 @@
require m4_${PV}.bb
-
inherit native
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/m4"
-
INHIBIT_AUTOTOOLS_DEPS = "1"
DEPENDS += "gnu-config-native"
-do_configure() {
- install -m 0644 ${STAGING_DATADIR}/gnu-config/config.sub .
- install -m 0644 ${STAGING_DATADIR}/gnu-config/config.guess .
+do_configure () {
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub .
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess .
oe_runconf
}
-
-do_stage() {
- install -m 0755 src/m4 ${STAGING_BINDIR}/
-}
-
diff --git a/recipes/m4/m4-native_1.4.12.bb b/recipes/m4/m4-native_1.4.12.bb
index 8beb8748e3..2408013185 100644
--- a/recipes/m4/m4-native_1.4.12.bb
+++ b/recipes/m4/m4-native_1.4.12.bb
@@ -1,19 +1,11 @@
require m4_${PV}.bb
-
inherit native
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/m4"
-
INHIBIT_AUTOTOOLS_DEPS = "1"
DEPENDS += "gnu-config-native"
-do_configure() {
- install -m 0644 ${STAGING_DATADIR}/gnu-config/config.sub .
- install -m 0644 ${STAGING_DATADIR}/gnu-config/config.guess .
+do_configure () {
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub .
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess .
oe_runconf
}
-
-do_stage() {
- install -m 0755 src/m4 ${STAGING_BINDIR}/
-}
-
diff --git a/recipes/m4/m4-native_1.4.14.bb b/recipes/m4/m4-native_1.4.14.bb
new file mode 100644
index 0000000000..2408013185
--- /dev/null
+++ b/recipes/m4/m4-native_1.4.14.bb
@@ -0,0 +1,11 @@
+require m4_${PV}.bb
+inherit native
+
+INHIBIT_AUTOTOOLS_DEPS = "1"
+DEPENDS += "gnu-config-native"
+
+do_configure () {
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub .
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess .
+ oe_runconf
+}
diff --git a/recipes/m4/m4-native_1.4.4.bb b/recipes/m4/m4-native_1.4.4.bb
index 8beb8748e3..2408013185 100644
--- a/recipes/m4/m4-native_1.4.4.bb
+++ b/recipes/m4/m4-native_1.4.4.bb
@@ -1,19 +1,11 @@
require m4_${PV}.bb
-
inherit native
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/m4"
-
INHIBIT_AUTOTOOLS_DEPS = "1"
DEPENDS += "gnu-config-native"
-do_configure() {
- install -m 0644 ${STAGING_DATADIR}/gnu-config/config.sub .
- install -m 0644 ${STAGING_DATADIR}/gnu-config/config.guess .
+do_configure () {
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub .
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess .
oe_runconf
}
-
-do_stage() {
- install -m 0755 src/m4 ${STAGING_BINDIR}/
-}
-
diff --git a/recipes/m4/m4-native_1.4.8.bb b/recipes/m4/m4-native_1.4.8.bb
index 8beb8748e3..2408013185 100644
--- a/recipes/m4/m4-native_1.4.8.bb
+++ b/recipes/m4/m4-native_1.4.8.bb
@@ -1,19 +1,11 @@
require m4_${PV}.bb
-
inherit native
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/m4"
-
INHIBIT_AUTOTOOLS_DEPS = "1"
DEPENDS += "gnu-config-native"
-do_configure() {
- install -m 0644 ${STAGING_DATADIR}/gnu-config/config.sub .
- install -m 0644 ${STAGING_DATADIR}/gnu-config/config.guess .
+do_configure () {
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub .
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess .
oe_runconf
}
-
-do_stage() {
- install -m 0755 src/m4 ${STAGING_BINDIR}/
-}
-
diff --git a/recipes/m4/m4.inc b/recipes/m4/m4.inc
new file mode 100644
index 0000000000..94a5ad5dc3
--- /dev/null
+++ b/recipes/m4/m4.inc
@@ -0,0 +1,9 @@
+DESCRIPTION = "GNU m4 is an implementation of the traditional Unix macro \
+processor."
+HOMEPAGE = "http://www.gnu.org/software/m4/"
+LICENSE = "GPLv3"
+INC_PR = "r0"
+
+SRC_URI = "${GNU_MIRROR}/m4/m4-${PV}.tar.bz2;name=archive"
+
+inherit autotools_stage
diff --git a/recipes/m4/m4_1.4.11.bb b/recipes/m4/m4_1.4.11.bb
index e2676269c1..15992b582a 100644
--- a/recipes/m4/m4_1.4.11.bb
+++ b/recipes/m4/m4_1.4.11.bb
@@ -1,13 +1,6 @@
-DESCRIPTION = "GNU m4 is an implementation of the traditional Unix macro \
-processor."
-LICENSE = "GPLv3"
-SRC_URI = "${GNU_MIRROR}/m4/m4-${PV}.tar.gz"
-S = "${WORKDIR}/m4-${PV}"
+require m4.inc
-inherit autotools
+PR = "${INC_PR}.0"
-EXTRA_OEMAKE += "'infodir=${infodir}'"
-
-do_configure() {
- oe_runconf
-}
+SRC_URI[archive.md5sum] = "96ec473c2a6f203976c028e896a01b28"
+SRC_URI[archive.sha256sum] = "0b7c686525b3f4236670f9329387d2a59e807b6a83d2b5cb9bbeb7d6ab9f8aad"
diff --git a/recipes/m4/m4_1.4.12.bb b/recipes/m4/m4_1.4.12.bb
index e2676269c1..e6e381f635 100644
--- a/recipes/m4/m4_1.4.12.bb
+++ b/recipes/m4/m4_1.4.12.bb
@@ -1,13 +1,6 @@
-DESCRIPTION = "GNU m4 is an implementation of the traditional Unix macro \
-processor."
-LICENSE = "GPLv3"
-SRC_URI = "${GNU_MIRROR}/m4/m4-${PV}.tar.gz"
-S = "${WORKDIR}/m4-${PV}"
+require m4.inc
-inherit autotools
+PR = "${INC_PR}.0"
-EXTRA_OEMAKE += "'infodir=${infodir}'"
-
-do_configure() {
- oe_runconf
-}
+SRC_URI[archive.md5sum] = "b3587c993523dd320c318ec456876839"
+SRC_URI[archive.sha256sum] = "855217de304616931844f54bd00a1e03e92452f85de6caeec47b0e8244881ba3"
diff --git a/recipes/m4/m4_1.4.14.bb b/recipes/m4/m4_1.4.14.bb
new file mode 100644
index 0000000000..441cb365fe
--- /dev/null
+++ b/recipes/m4/m4_1.4.14.bb
@@ -0,0 +1,6 @@
+require m4.inc
+
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "e6fb7d08d50d87e796069cff12a52a93"
+SRC_URI[archive.sha256sum] = "0885ffa93256353a96b1cf0bcbc4d639ed09953b687e6cc412c4048e656f4dd2"
diff --git a/recipes/m4/m4_1.4.4.bb b/recipes/m4/m4_1.4.4.bb
index 0c9f4c38ac..e3b03df5fa 100644
--- a/recipes/m4/m4_1.4.4.bb
+++ b/recipes/m4/m4_1.4.4.bb
@@ -1,10 +1,7 @@
-DESCRIPTION = "GNU m4 is an implementation of the traditional Unix macro \
-processor."
-LICENSE = "GPL"
-SRC_URI = "${GNU_MIRROR}/m4/m4-${PV}.tar.gz"
-S = "${WORKDIR}/m4-${PV}"
+require m4.inc
-inherit autotools
+LICENSE = "GPL"
+PR = "${INC_PR}.0"
-EXTRA_AUTORECONF = "--exclude=autopoint,aclocal"
-EXTRA_OEMAKE += "'infodir=${infodir}'"
+SRC_URI[archive.md5sum] = "eb93bfbcb12cf00165583302bb31a822"
+SRC_URI[archive.sha256sum] = "5a06ae07a7c7b6e9895be14015468947ef3f95182e60400e840efb25feea4b8f"
diff --git a/recipes/m4/m4_1.4.8.bb b/recipes/m4/m4_1.4.8.bb
index 77d8e822b0..83f1006109 100644
--- a/recipes/m4/m4_1.4.8.bb
+++ b/recipes/m4/m4_1.4.8.bb
@@ -1,13 +1,7 @@
-DESCRIPTION = "GNU m4 is an implementation of the traditional Unix macro \
-processor."
-LICENSE = "GPL"
-SRC_URI = "${GNU_MIRROR}/m4/m4-${PV}.tar.gz"
-S = "${WORKDIR}/m4-${PV}"
-
-inherit autotools
+require m4.inc
-EXTRA_OEMAKE += "'infodir=${infodir}'"
+LICENSE = "GPL"
+PR = "${INC_PR}.0"
-do_configure() {
- oe_runconf
-}
+SRC_URI[archive.md5sum] = "6bbf917e5d8fab20b38d43868c3944d3"
+SRC_URI[archive.sha256sum] = "d0e6734743f9eca530ea90c289c0f1770bdf37f846561557f0b0db7f87b7d7cc"
diff --git a/recipes/maemo4/libgpsbt/configure-fix-version.patch b/recipes/maemo4/libgpsbt/configure-fix-version.patch
new file mode 100644
index 0000000000..f628745572
--- /dev/null
+++ b/recipes/maemo4/libgpsbt/configure-fix-version.patch
@@ -0,0 +1,17 @@
+Patch to fix compilation on systems not debian. Taken from
+
+http://wiki.navit-project.org/index.php/Navit_on_OpenEmbedded_for_n810#libgpsmgr_patch
+
+Index: libgpsbt-0.1/configure.ac
+===================================================================
+--- libgpsbt-0.1.orig/configure.ac
++++ libgpsbt-0.1/configure.ac
+@@ -1,6 +1,5 @@
+-AC_INIT(Makefile.am)
+-AM_INIT_AUTOMAKE(libgpsbt, patsubst(esyscmd([dpkg-parsechangelog | sed -n '/^Version: \(.*\)$/ {s//\1/;p}']), [
+-]))
++AC_INIT(Makefile.am, [0.1])
++AM_INIT_AUTOMAKE(libgpsbt, [0.1])
+ AM_CONFIG_HEADER(config.h)
+
+ AC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug],[Debug (default=no)])])
diff --git a/recipes/maemo4/libgpsbt_0.1.bb b/recipes/maemo4/libgpsbt_0.1.bb
index 2b2c0a1ee4..8293f350c5 100644
--- a/recipes/maemo4/libgpsbt_0.1.bb
+++ b/recipes/maemo4/libgpsbt_0.1.bb
@@ -1,19 +1,15 @@
LICENSE = "nokia"
-PR = "r1"
+PR = "r2"
DEPENDS = "libgpsmgr dbus"
# This is proprietary software in Chinook, so we have to stay with the last released
# free version.
-SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}-18.tar.gz"
+SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}-18.tar.gz \
+ file://configure-fix-version.patch;patch=1"
-inherit autotools pkgconfig
+inherit autotools
TARGET_CC_ARCH += "${LDFLAGS}"
-do_stage() {
- autotools_stage_all
-}
-
-
diff --git a/recipes/maemo4/libgpsmgr/configure-fix-version.patch b/recipes/maemo4/libgpsmgr/configure-fix-version.patch
new file mode 100644
index 0000000000..2ab6c40e5f
--- /dev/null
+++ b/recipes/maemo4/libgpsmgr/configure-fix-version.patch
@@ -0,0 +1,17 @@
+Patch to fix compilation on systems not debian. Taken from
+
+http://wiki.navit-project.org/index.php/Navit_on_OpenEmbedded_for_n810#libgpsmgr_patch
+
+Index: libgpsmgr-0.1/configure.ac
+===================================================================
+--- libgpsmgr-0.1.orig/configure.ac
++++ libgpsmgr-0.1/configure.ac
+@@ -1,6 +1,5 @@
+-AC_INIT(Makefile.am)
+-AM_INIT_AUTOMAKE(libgpsmgr, patsubst(esyscmd([dpkg-parsechangelog | sed -n '/^Version: \(.*\)$/ {s//\1/;p}']), [
+-]))
++AC_INIT(Makefile.am, [0.1])
++AM_INIT_AUTOMAKE(libgpsmgr, [0.1])
+ AM_CONFIG_HEADER(config.h)
+
+ AC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug],[Debug (default=no)])])
diff --git a/recipes/maemo4/libgpsmgr_0.1.bb b/recipes/maemo4/libgpsmgr_0.1.bb
index bcbb4cefcb..0a1141e84b 100644
--- a/recipes/maemo4/libgpsmgr_0.1.bb
+++ b/recipes/maemo4/libgpsmgr_0.1.bb
@@ -2,12 +2,10 @@ LICENSE = "nokia"
# This is proprietary software in Chinook, so we have to stay with the last released
# free version.
-SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}-10.tar.gz"
+SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}-10.tar.gz \
+ file://configure-fix-version.patch;patch=1"
-inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
+PR = "r1"
+inherit autotools
diff --git a/recipes/maradns/files/compile-1.4.0.3.patch b/recipes/maradns/files/compile-1.4.0.3.patch
new file mode 100644
index 0000000000..ad7d1f8617
--- /dev/null
+++ b/recipes/maradns/files/compile-1.4.0.3.patch
@@ -0,0 +1,61 @@
+Index: maradns-1.4.03/server/Makefile.recursive
+===================================================================
+--- maradns-1.4.03.orig/server/Makefile.recursive 2010-03-17 13:04:16.831313185 +0800
++++ maradns-1.4.03/server/Makefile.recursive 2010-03-17 13:04:31.304869993 +0800
+@@ -52,8 +52,8 @@
+ $(CC) -c $(FLAGS) -o udpsuccess.o udpsuccess.c
+
+ maradns: MaraDNS.c $(OBJECTS) MaraDNS_locale.h
+- $(CC) $(FLAGS) -DVERSION=\"$(VERSION)\" -DCOMPILED=\"$(COMPILED)\" -o maradns MaraDNS.c $(OBJECTS) -lpthread
++ $(CC) $(FLAGS) -DVERSION=\"$(VERSION)\" -DCOMPILED=\"$(COMPILED)\" -o maradns MaraDNS.c $(OBJECTS) -lpthread $(LDFLAGS)
+
+ simple: simple.c $(XOBJECTS) MaraDNS_locale.h
+- $(CC) $(FLAGS) -DVERSION=\"$(VERSION)\" -DCOMPILED=\"$(COMPILED)\" -o simple $(OBJECTS) simple.c
++ $(CC) $(FLAGS) -DVERSION=\"$(VERSION)\" -DCOMPILED=\"$(COMPILED)\" -o simple $(OBJECTS) simple.c $(LDFLAGS)
+
+Index: maradns-1.4.03/tcp/Makefile.recursive
+===================================================================
+--- maradns-1.4.03.orig/tcp/Makefile.recursive 2010-03-17 13:20:21.270078031 +0800
++++ maradns-1.4.03/tcp/Makefile.recursive 2010-03-17 13:20:37.020069979 +0800
+@@ -26,11 +26,11 @@
+ rm -f core $(EXECS) $(TCPOBJS) *.exe
+
+ getzone: getzone.c $(OBJECTS)
+- $(CC) $(FLAGS) -o getzone getzone.c $(OBJECTS)
++ $(CC) $(FLAGS) -o getzone getzone.c $(OBJECTS) $(LDFLAGS)
+
+ fetchzone: fetchzone.c $(OBJECTS)
+- $(CC) $(FLAGS) -o fetchzone fetchzone.c $(OBJECTS)
++ $(CC) $(FLAGS) -o fetchzone fetchzone.c $(OBJECTS) $(LDFLAGS)
+
+ zoneserver: zoneserver.c zoneserver_en.h $(OBJECTS)
+- $(CC) $(FLAGS) -DVERSION=\"$(VERSION)\" -o zoneserver zoneserver.c $(OBJECTS) $(RNGOBJS)
++ $(CC) $(FLAGS) -DVERSION=\"$(VERSION)\" -o zoneserver zoneserver.c $(OBJECTS) $(RNGOBJS) $(LDFLAGS)
+
+Index: maradns-1.4.03/tools/Makefile.recursive
+===================================================================
+--- maradns-1.4.03.orig/tools/Makefile.recursive 2010-03-17 13:05:46.600079208 +0800
++++ maradns-1.4.03/tools/Makefile.recursive 2010-03-17 13:10:39.090763025 +0800
+@@ -18,17 +18,17 @@
+ rm -f core $(EXECS) *.exe
+
+ askmara: askmara.c askmara_labels_en.h $(OBJECTS) $(Q) $(OUTOBJ)
+- $(CC) $(FLAGS) -o askmara askmara.c $(OBJECTS) $(Q) $(OUTOBJ)
++ $(CC) $(FLAGS) -o askmara askmara.c $(OBJECTS) $(Q) $(OUTOBJ) $(LDFLAGS)
+
+ askmara-tcp: askmara-tcp.c askmara_labels_en.h $(OBJECTS) $(ROBJECTS) $(POBJECTS)
+- $(CC) $(FLAGS) -o askmara-tcp askmara-tcp.c $(OBJECTS) $(ROBJECTS) $(POBJECTS)
++ $(CC) $(FLAGS) -o askmara-tcp askmara-tcp.c $(OBJECTS) $(ROBJECTS) $(POBJECTS) $(LDFLAGS)
+
+ benchmark: benchmark.c askmara_labels_en.h $(OBJECTS) $(POBJECTS)
+- $(CC) $(FLAGS) -o benchmark benchmark.c $(OBJECTS) $(POBJECTS)
++ $(CC) $(FLAGS) -o benchmark benchmark.c $(OBJECTS) $(POBJECTS) $(LDFLAGS)
+
+ duende: duende.c
+- $(CC) $(FLAGS) -o duende duende.c
++ $(CC) $(FLAGS) -o duende duende.c $(LDFLAGS)
+
+ strip.control: strip.control.c
+- $(CC) $(FLAGS) -o strip.control strip.control.c
++ $(CC) $(FLAGS) -o strip.control strip.control.c $(LDFLAGS)
+
diff --git a/recipes/maradns/maradns_1.0.41.bb b/recipes/maradns/maradns_1.0.41.bb
deleted file mode 100644
index a8bed6f05e..0000000000
--- a/recipes/maradns/maradns_1.0.41.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-DESCRIPTION = "A security-aware DNS server"
-SECTION = "console/network"
-HOMEPAGE = "http://www.maradns.org"
-LICENSE = "PD"
-
-SRC_URI = "http://www.maradns.org/download/1.0/maradns-${PV}.tar.bz2 \
- file://init \
- file://rng-makefile-build-cc.patch;patch=1;pnum=0"
-
-do_install() {
- install -d ${D}${bindir}
- install -d ${D}${sbindir}
- install -d ${D}${sysconfdir}
- install -d ${D}${sysconfdir}/mararc
- install -d ${D}${sysconfdir}/init.d
- install -d ${D}${mandir}/man1
- install -d ${D}${mandir}/man5
- install -d ${D}${mandir}/man8
-
- sed -i -e "s:PREFIX/man:PREFIX/share/man:" \
- -e "s:PREFIX/doc/maradns-\$VERSION:PREFIX/share/doc/${PF}:" \
- build/install.locations
-
- oe_runmake \
- TOPLEVEL=${S} \
- BUILDDIR=${S}/build \
- RPM_BUILD_ROOT=${D} \
- PREFIX=${D}/usr \
- MAN1=${D}${mandir}/man1 \
- MAN5=${D}${mandir}/man5 \
- MAN8=${D}${mandir}/man8 \
- install
-
- mv ${D}${sysconfdir}/mararc/example_mararc ${D}${sysconfdir}/maradns/mararc
- rm -r ${D}${sysconfdir}/mararc/
- install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/maradns
-}
-
-PACKAGES =+ "maradns-zone maradns-ask"
-FILES_maradns-zone = "${sbindir}/zoneserver ${bindir}/getzone"
-FILES_maradns-ask = "${bindir}/askmara"
-
-CONFFILES_${PN}_nylon = "/etc/maradns/mararc"
diff --git a/recipes/maradns/maradns_1.4.03.bb b/recipes/maradns/maradns_1.4.03.bb
new file mode 100644
index 0000000000..4d547a2788
--- /dev/null
+++ b/recipes/maradns/maradns_1.4.03.bb
@@ -0,0 +1,46 @@
+DESCRIPTION = "A security-aware DNS server"
+SECTION = "console/network"
+HOMEPAGE = "http://www.maradns.org"
+LICENSE = "PD"
+
+SRC_URI = "http://www.maradns.org/download/1.4/${PV}/maradns-${PV}.tar.bz2;name=src \
+ file://init \
+ file://rng-makefile-build-cc.patch;patch=1;pnum=0 \
+ file://compile-1.4.0.3.patch;patch=1 "
+SRC_URI[src.md5sum] = "071b3a3df07e18855a7edf9a6281641a"
+SRC_URI[src.sha256sum] = "a611b6ac0f3abee62c227b128c1773be4a2a41de75a37ca123d684db33793b23"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -d ${D}${sbindir}
+ install -d ${D}${sysconfdir}
+ install -d ${D}${sysconfdir}/mararc
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${mandir}/man1
+ install -d ${D}${mandir}/man5
+ install -d ${D}${mandir}/man8
+
+ sed -i -e "s:PREFIX/man:PREFIX/share/man:" \
+ -e "s:PREFIX/doc/maradns-\$VERSION:PREFIX/share/doc/${PF}:" \
+ build/install.locations
+
+ oe_runmake \
+ TOPLEVEL=${S} \
+ BUILDDIR=${S}/build \
+ RPM_BUILD_ROOT=${D} \
+ PREFIX=${D}/usr \
+ MAN1=${D}${mandir}/man1 \
+ MAN5=${D}${mandir}/man5 \
+ MAN8=${D}${mandir}/man8 \
+ install
+
+ mv ${D}${sysconfdir}/mararc/example_mararc ${D}${sysconfdir}/maradns/mararc
+ rm -r ${D}${sysconfdir}/mararc/
+ install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/maradns
+}
+
+PACKAGES =+ "maradns-zone maradns-ask"
+FILES_maradns-zone = "${sbindir}/zoneserver ${bindir}/getzone"
+FILES_maradns-ask = "${bindir}/askmara"
+
+CONFFILES_${PN}_nylon = "/etc/maradns/mararc"
diff --git a/recipes/mbuffer/mbuffer_20091227.bb b/recipes/mbuffer/mbuffer_20091227.bb
new file mode 100644
index 0000000000..ab9bfd1ef6
--- /dev/null
+++ b/recipes/mbuffer/mbuffer_20091227.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "mbuffer is a tool for buffering data streams with a large set of unique features."
+HOMEPAGE = "http://www.maier-komor.de/mbuffer.html"
+LICENSE = "GPLv3"
+SECTION = "console/network"
+PR = "r0"
+
+SRC_URI = "http://www.maier-komor.de/software/mbuffer/mbuffer-20091227.tgz;name=mbuffer20091227tgz"
+SRC_URI[mbuffer20091227tgz.md5sum] = "191663396b4b1752d7104803631b9e54"
+SRC_URI[mbuffer20091227tgz.sha256sum] = "e708b66f6cec9ba090877e8eb38e5627ac69aea9ebd9bca1360a29c7398a88ce"
+
+inherit autotools
+
+do_configure() {
+ gnu-configize
+ oe_runconf
+}
+
diff --git a/recipes/mc/mc_4.6.2.bb b/recipes/mc/mc_4.6.2.bb
index 387187dc52..d90b6f9bdd 100644
--- a/recipes/mc/mc_4.6.2.bb
+++ b/recipes/mc/mc_4.6.2.bb
@@ -81,7 +81,7 @@ do_utf8_conversion() {
do_configure_prepend() {
-AUTOFOO="config.guess config.rpath config.sub depcomp install-sh missing mkinstalldirs"
+AUTOFOO="config.guess config.sub depcomp install-sh missing mkinstalldirs"
for i in ${AUTOFOO}; do
rm config/${i}
diff --git a/recipes/mesa/files/fix-progs-makefile.patch b/recipes/mesa/files/fix-progs-makefile.patch
new file mode 100644
index 0000000000..f0a829346b
--- /dev/null
+++ b/recipes/mesa/files/fix-progs-makefile.patch
@@ -0,0 +1,81 @@
+From e03daf13a562414f07230c17998edd39564b5f1b Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 4 Mar 2010 14:16:27 +0100
+Subject: [PATCH] fix libs
+
+---
+ progs/demos/Makefile | 2 +-
+ progs/glsl/Makefile | 2 +-
+ progs/redbook/Makefile | 2 +-
+ progs/samples/Makefile | 2 +-
+ progs/xdemos/Makefile | 2 +-
+ 5 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/progs/demos/Makefile b/progs/demos/Makefile
+index 5b1d2a0..121b862 100644
+--- a/progs/demos/Makefile
++++ b/progs/demos/Makefile
+@@ -8,7 +8,7 @@ INCDIR = $(TOP)/include
+ LIB_DEP = $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME) $(TOP)/$(LIB_DIR)/$(GLU_LIB_NAME) \
+ $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
+
+-LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLEW_LIB) -l$(GLU_LIB) -l$(GL_LIB) \
++LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLEW_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lstdc++ \
+ $(APP_LIB_DEPS)
+
+ PROGS = \
+diff --git a/progs/glsl/Makefile b/progs/glsl/Makefile
+index 3b5a595..836c4ac 100644
+--- a/progs/glsl/Makefile
++++ b/progs/glsl/Makefile
+@@ -10,7 +10,7 @@ LIB_DEP = \
+ $(TOP)/$(LIB_DIR)/$(GLU_LIB_NAME) \
+ $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
+
+-LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLEW_LIB) -l$(GLU_LIB) \
++LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLEW_LIB) -l$(GLU_LIB) -lstdc++ \
+ -l$(GL_LIB) $(APP_LIB_DEPS)
+
+ # using : to avoid APP_CC pointing to CC loop
+diff --git a/progs/redbook/Makefile b/progs/redbook/Makefile
+index b41e488..95ed746 100644
+--- a/progs/redbook/Makefile
++++ b/progs/redbook/Makefile
+@@ -7,7 +7,7 @@ INCDIR = $(TOP)/include
+
+ LIB_DEP = $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME) $(TOP)/$(LIB_DIR)/$(GLU_LIB_NAME) $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
+
+-LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLEW_LIB) -l$(GLU_LIB) -l$(GL_LIB) $(APP_LIB_DEPS)
++LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLEW_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lstdc++ $(APP_LIB_DEPS)
+
+ PROGS = aaindex \
+ aapoly \
+diff --git a/progs/samples/Makefile b/progs/samples/Makefile
+index 64fa47a..9f72c8b 100644
+--- a/progs/samples/Makefile
++++ b/progs/samples/Makefile
+@@ -7,7 +7,7 @@ INCDIR = $(TOP)/include
+
+ LIB_DEP = $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME) $(TOP)/$(LIB_DIR)/$(GLU_LIB_NAME) $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
+
+-LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLEW_LIB) -l$(GLU_LIB) -l$(GL_LIB) $(APP_LIB_DEPS)
++LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLEW_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lstdc++ $(APP_LIB_DEPS)
+
+ PROGS = accum bitmap1 bitmap2 blendeq blendxor copy cursor depth eval fog \
+ font line logo nurb olympic overlay point prim rgbtoppm quad select \
+diff --git a/progs/xdemos/Makefile b/progs/xdemos/Makefile
+index f866a32..c0f4e06 100644
+--- a/progs/xdemos/Makefile
++++ b/progs/xdemos/Makefile
+@@ -11,7 +11,7 @@ LIB_DEP = $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME)
+ # Add X11 and pthread libs to satisfy GNU gold.
+ APP_LIB_DEPS += -lX11 -lpthread
+
+-LIBS = -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) $(APP_LIB_DEPS)
++LIBS = -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) -lstdc++ $(APP_LIB_DEPS)
+
+ PROGS = \
+ corender \
+--
+1.7.0
+
diff --git a/recipes/mesa/mesa-dri-glsl-native.bb b/recipes/mesa/mesa-dri-glsl-native.bb
new file mode 100644
index 0000000000..511cdcf2f8
--- /dev/null
+++ b/recipes/mesa/mesa-dri-glsl-native.bb
@@ -0,0 +1,22 @@
+inherit native
+
+PV = "7.7.999"
+PR = "0"
+PR_append = "+gitr${SRCREV}"
+
+DEPENDS = "makedepend-native"
+
+SRCREV = "f88b43e8d09bf359e7d5770b133cb433b25f9848"
+
+SRC_URI = "git://anongit.freedesktop.org/git/mesa/mesa;protocol=git"
+
+S = "${WORKDIR}/git/src/glsl/"
+
+do_configure_prepend() {
+ ln -s ${S}/../../configs/default ${S}/../../configs/current
+}
+
+do_stage() {
+ install -d ${bindir}
+ install -m 755 ${S}/apps/compile ${bindir}/glsl-compile
+}
diff --git a/recipes/mesa/mesa-dri_git.bb b/recipes/mesa/mesa-dri_git.bb
index ceea1227c1..9be3390b46 100644
--- a/recipes/mesa/mesa-dri_git.bb
+++ b/recipes/mesa/mesa-dri_git.bb
@@ -3,19 +3,24 @@ include mesa-common.inc
PROTO_DEPS = "xf86driproto glproto dri2proto"
LIB_DEPS = "libdrm virtual/libx11 libxext libxxf86vm libxdamage libxfixes expat"
-DEPENDS = "${PROTO_DEPS} ${LIB_DEPS}"
+DEPENDS = "${PROTO_DEPS} ${LIB_DEPS} makedepend-native mesa-dri-glsl-native"
-PV = "7.6.1+gitr${SRCREV}"
-PR = "${INC_PR}.3"
+PV = "7.7.999"
+PR = "${INC_PR}.0"
+PR_append = "+gitr${SRCREV}"
PE = "1"
DEFAULT_PREFERENCE = "-2"
-DEFAULT_PREFERENCE_om-gta02 = "2"
+DEFAULT_PREFERENCE_shr = "2"
-SRCREV_om-gta02 ?= "a8a1c12262998e5fa3a857eebf857c6d3a95f85e"
+SRCREV_pn-mesa-dri ?= "196214bf2b677a83653d49f79d03752f29df44ec"
+SRCREV_pn-mesa-dri_shr ?= "1ac166895fef47806c9e9286d2a6356b4db8398d"
SRC_URI = "git://anongit.freedesktop.org/git/mesa/mesa;protocol=git"
-SRC_URI_om-gta02 = "git://git.bitwiz.org.uk/mesa.git;protocol=git;branch=glamo"
+SRC_URI_shr = "git://git.bitwiz.org.uk/mesa.git;protocol=git;branch=glamo"
+SRC_URI_append = " file://fix-progs-makefile.patch;patch=1"
+SRC_URI_shr_append = " file://fix-progs-makefile.patch;patch=1"
+
S = "${WORKDIR}/git"
PACKAGES =+ " mesa-utils "
@@ -24,4 +29,12 @@ FILES_${PN} += "${libdir}/dri/*.so"
FILES_${PN}-dbg += "${libdir}/dri/.debug/*"
FILES_mesa-utils = "${bindir}/*"
-EXTRA_OECONF += "--with-driver=dri --disable-glx-tls --disable-gallium-intel --with-dri-drivers=swrast,${MACHINE_DRI_MODULES}"
+EXTRA_OECONF += "--with-driver=dri --disable-glx-tls --with-dri-drivers=swrast,${MACHINE_DRI_MODULES}"
+EXTRA_OECONF_om-gta02 += "--with-driver=dri --disable-glx-tls --disable-gallium --disable-gallium-intel --with-dri-drivers=swrast,${MACHINE_DRI_MODULES}"
+EXTRA_OECONF_om-gta01 += "--with-driver=dri --disable-glx-tls --disable-gallium --disable-gallium-intel --with-dri-drivers=swrast,${MACHINE_DRI_MODULES}"
+
+# We need glsl-compile built for buildhost arch instead of target (is provided by mesa-dri-glsl-native)"
+do_configure_prepend() {
+ sed -i "s#glsl_compile\[0\].abspath + '#'${STAGING_BINDIR_NATIVE}/glsl-compile#g" ${S}/src/mesa/shader/slang/library/SConscript
+ sed -i "s#^GLSL_CL = .*\$#GLSL_CL = ${STAGING_BINDIR_NATIVE}/glsl-compile#g" ${S}/src/mesa/shader/slang/library/Makefile
+}
diff --git a/recipes/meta/external-toolchain-csl.bb b/recipes/meta/external-toolchain-csl.bb
index f17cae774f..aa2252efe8 100644
--- a/recipes/meta/external-toolchain-csl.bb
+++ b/recipes/meta/external-toolchain-csl.bb
@@ -1,4 +1,4 @@
-PR = "r1"
+PR = "r3"
INHIBIT_DEFAULT_DEPS = "1"
@@ -7,6 +7,8 @@ INSANE_SKIP_libstdc++ = True
INSANE_SKIP_nscd = True
INSANE_SKIP_glibc-utils = True
+SRC_URI = "file://SUPPORTED"
+
PROVIDES = "\
virtual/${TARGET_PREFIX}gcc \
virtual/${TARGET_PREFIX}g++ \
@@ -22,10 +24,10 @@ PROVIDES = "\
linux-libc-headers \
"
-# virtual/linux-libc-headers \
-
RPROVIDES = "glibc-utils libsegfault glibc-thread-db"
RPROVIDES_glibc-dev += "libc-dev"
+PACKAGES_DYNAMIC += "glibc-gconv-*"
+PACKAGES_DYNAMIC += "glibc-locale-*"
LEAD_SONAME = "libc.so.6"
@@ -44,6 +46,7 @@ PACKAGES = "\
localedef \
glibc-utils \
glibc-dev \
+ glibc-locale \
libsegfault \
glibc-extra-nss \
glibc-thread-db \
@@ -164,30 +167,27 @@ CSL_VER_GCC := "${@csl_get_gcc_version(d)}"
CSL_VER_LIBC := "${@csl_get_libc_version(d)}"
CSL_VER_KERNEL := "${@csl_get_kernel_version(d)}"
-PV = ${CSL_VER_MAIN}
-PV_libgcc = ${CSL_VER_GCC}
-PV_libgcc-dev = ${CSL_VER_GCC}
-PV_libstdc++ = ${CSL_VER_GCC}
-PV_libstdc++-dev = ${CSL_VER_GCC}
-PV_libc = ${CSL_VER_LIBC}
-PV_glibc = ${CSL_VER_LIBC}
-PV_glibc-dev = ${CSL_VER_LIBC}
-PV_glibc-dbg = ${CSL_VER_LIBC}
-PV_glibc-utils = ${CSL_VER_LIBC}
-PV_glibc-extra-nss = ${CSL_VER_LIBC}
-PV_glibc-thread-db = ${CSL_VER_LIBC}
-PV_glibc-pcprofile = ${CSL_VER_LIBC}
-PV_catchsegv = ${CSL_VER_LIBC}
-PV_sln = ${CSL_VER_LIBC}
-PV_nscd = ${CSL_VER_LIBC}
-PV_ldd = ${CSL_VER_LIBC}
-PV_localedef = ${CSL_VER_LIBC}
-PV_libsegfault = ${CSL_VER_LIBC}
-PV_linux-libc-headers = ${CSL_VER_KERNEL}
-
-do_unpack() {
- :
-}
+PKGV = ${CSL_VER_MAIN}
+PKGV_libgcc = ${CSL_VER_GCC}
+PKGV_libgcc-dev = ${CSL_VER_GCC}
+PKGV_libstdc++ = ${CSL_VER_GCC}
+PKGV_libstdc++-dev = ${CSL_VER_GCC}
+PKGV_libc = ${CSL_VER_LIBC}
+PKGV_glibc = ${CSL_VER_LIBC}
+PKGV_glibc-dev = ${CSL_VER_LIBC}
+PKGV_glibc-dbg = ${CSL_VER_LIBC}
+PKGV_glibc-utils = ${CSL_VER_LIBC}
+PKGV_glibc-gconv = ${CSL_VER_LIBC}
+PKGV_glibc-extra-nss = ${CSL_VER_LIBC}
+PKGV_glibc-thread-db = ${CSL_VER_LIBC}
+PKGV_glibc-pcprofile = ${CSL_VER_LIBC}
+PKGV_catchsegv = ${CSL_VER_LIBC}
+PKGV_sln = ${CSL_VER_LIBC}
+PKGV_nscd = ${CSL_VER_LIBC}
+PKGV_ldd = ${CSL_VER_LIBC}
+PKGV_localedef = ${CSL_VER_LIBC}
+PKGV_libsegfault = ${CSL_VER_LIBC}
+PKGV_linux-libc-headers = ${CSL_VER_KERNEL}
do_install() {
install -d ${D}${sysconfdir}
@@ -204,10 +204,6 @@ do_install() {
cp -a ${TOOLCHAIN_PATH}/${TARGET_SYS}/libc/sbin/* ${D}${base_sbindir}
cp -a ${TOOLCHAIN_PATH}/${TARGET_SYS}/libc/usr/* ${D}/usr
cp -a ${TOOLCHAIN_PATH}/${TARGET_SYS}/include/* ${D}/usr/include
- rm -rf ${D}${datadir}/locale
- rm -rf ${D}${datadir}/i18n
- rm -rf ${D}${libdir}/locale
- rm -rf ${D}${libdir}/gconv
rm -rf ${D}${bindir}/gdbserver
rm -rf ${D}${sysconfdir}/rpc
rm -rf ${D}${datadir}/zoneinfo
@@ -230,10 +226,219 @@ do_stage() {
mv ${STAGING_LIBDIR}/temp ${STAGING_LIBDIR}/libpthread.so
}
+TMP_LOCALE="/tmp/locale${libdir}/locale"
+
+locale_base_postinst() {
+#!/bin/sh
+
+if [ "x$D" != "x" ]; then
+ exit 1
+fi
+
+rm -rf ${TMP_LOCALE}
+mkdir -p ${TMP_LOCALE}
+if [ -f ${libdir}/locale/locale-archive ]; then
+ cp ${libdir}/locale/locale-archive ${TMP_LOCALE}/
+fi
+localedef --inputfile=${datadir}/i18n/locales/%s --charmap=%s --prefix=/tmp/locale %s
+mkdir -p ${libdir}/locale/
+mv ${TMP_LOCALE}/locale-archive ${libdir}/locale/
+rm -rf ${TMP_LOCALE}
+}
+
+locale_base_postrm() {
+#!/bin/sh
+
+rm -rf ${TMP_LOCALE}
+mkdir -p ${TMP_LOCALE}
+if [ -f ${libdir}/locale/locale-archive ]; then
+ cp ${libdir}/locale/locale-archive ${TMP_LOCALE}/
+fi
+localedef --delete-from-archive --inputfile=${datadir}/locales/%s --charmap=%s --prefix=/tmp/locale %s
+mv ${TMP_LOCALE}/locale-archive ${libdir}/locale/
+rm -rf ${TMP_LOCALE}
+}
+
+python package_do_split_gconvs () {
+ import os, re
+ if (bb.data.getVar('PACKAGE_NO_GCONV', d, 1) == '1'):
+ bb.note("package requested not splitting gconvs")
+ return
+
+ if not bb.data.getVar('PACKAGES', d, 1):
+ return
+
+ libdir = bb.data.getVar('libdir', d, 1)
+ if not libdir:
+ bb.error("libdir not defined")
+ return
+ datadir = bb.data.getVar('datadir', d, 1)
+ if not datadir:
+ bb.error("datadir not defined")
+ return
+
+ libcver = bb.data.getVar('CSL_VER_LIBC', d, 1)
+ if not libcver:
+ bb.error("CSL_VER_LIBC not defined")
+ return
+
+ gconv_libdir = os.path.join(libdir, "gconv")
+ charmap_dir = os.path.join(datadir, "i18n", "charmaps")
+ locales_dir = os.path.join(datadir, "i18n", "locales")
+ binary_locales_dir = os.path.join(libdir, "locale")
+
+ def set_pkg_ver(fn, pkg, file_regex, output_pattern, group):
+ bb.data.setVar('PKGV_' + pkg, libcver, d)
+
+ do_split_packages(d, gconv_libdir, file_regex='^(.*)\.so$', output_pattern='glibc-gconv-%s', description='gconv module for character set %s', hook=set_pkg_ver, extra_depends='glibc-gconv')
+
+ do_split_packages(d, charmap_dir, file_regex='^(.*)\.gz$', output_pattern='glibc-charmap-%s', description='character map for %s encoding', hook=set_pkg_ver, extra_depends='')
+
+ def calc_locale_deps(fn, pkg, file_regex, output_pattern, group):
+ deps = []
+ f = open(fn, "r")
+ c_re = re.compile('^copy "(.*)"')
+ i_re = re.compile('^include "(\w+)".*')
+ for l in f.readlines():
+ m = c_re.match(l) or i_re.match(l)
+ if m:
+ dp = legitimize_package_name('glibc-localedata-%s' % m.group(1))
+ if not dp in deps:
+ deps.append(dp)
+ f.close()
+ if deps != []:
+ bb.data.setVar('RDEPENDS_%s' % pkg, " ".join(deps), d)
+ bb.data.setVar('PKGV_' + pkg, libcver, d)
+
+ do_split_packages(d, locales_dir, file_regex='(.*)', output_pattern='glibc-localedata-%s', description='locale definition for %s', hook=calc_locale_deps, extra_depends='')
+ bb.data.setVar('PACKAGES', bb.data.getVar('PACKAGES', d) + ' glibc-gconv', d)
+
+ f = open(os.path.join(bb.data.getVar('WORKDIR', d, 1), "SUPPORTED"), "r")
+ supported = f.readlines()
+ f.close()
+
+ dot_re = re.compile("(.*)\.(.*)")
+
+ # Collate the locales by base and encoding
+ encodings = {}
+ for l in supported:
+ l = l[:-1]
+ (locale, charset) = l.split(" ")
+ m = dot_re.match(locale)
+ if m:
+ locale = m.group(1)
+ if not encodings.has_key(locale):
+ encodings[locale] = []
+ encodings[locale].append(charset)
+
+ def output_locale_source(name, locale, encoding):
+ pkgname = 'locale-base-' + legitimize_package_name(name)
+
+ bb.data.setVar('RDEPENDS_%s' % pkgname, 'localedef glibc-localedata-%s glibc-charmap-%s' % (legitimize_package_name(locale), legitimize_package_name(encoding)), d)
+ rprovides = 'virtual-locale-%s' % legitimize_package_name(name)
+ m = re.match("(.*)_(.*)", name)
+ if m:
+ rprovides += ' virtual-locale-%s' % m.group(1)
+ bb.data.setVar('RPROVIDES_%s' % pkgname, rprovides, d)
+ bb.data.setVar('PACKAGES', '%s %s' % (pkgname, bb.data.getVar('PACKAGES', d, 1)), d)
+ bb.data.setVar('ALLOW_EMPTY_%s' % pkgname, '1', d)
+ bb.data.setVar('pkg_postinst_%s' % pkgname, bb.data.getVar('locale_base_postinst', d, 1) % (locale, encoding, locale), d)
+ bb.data.setVar('pkg_postrm_%s' % pkgname, bb.data.getVar('locale_base_postrm', d, 1) % (locale, encoding, locale), d)
+ bb.data.setVar('PKGV_' + pkgname, libcver, d)
+
+ def output_locale_binary(name, locale, encoding):
+ target_arch = bb.data.getVar("TARGET_ARCH", d, 1)
+ qemu = "qemu-%s" % target_arch
+ pkgname = 'locale-base-' + legitimize_package_name(name)
+ m = re.match("(.*)\.(.*)", name)
+ if m:
+ glibc_name = "%s.%s" % (m.group(1), m.group(2).lower().replace("-",""))
+ else:
+ glibc_name = name
+ bb.data.setVar('RDEPENDS_%s' % pkgname, legitimize_package_name('glibc-binary-localedata-%s' % glibc_name), d)
+ rprovides = 'virtual-locale-%s' % legitimize_package_name(name)
+ m = re.match("(.*)_(.*)", name)
+ if m:
+ rprovides += ' virtual-locale-%s' % m.group(1)
+ bb.data.setVar('RPROVIDES_%s' % pkgname, rprovides, d)
+ bb.data.setVar('ALLOW_EMPTY_%s' % pkgname, '1', d)
+ bb.data.setVar('PACKAGES', '%s %s' % (pkgname, bb.data.getVar('PACKAGES', d, 1)), d)
+ bb.data.setVar('PKGV_' + pkgname, libcver, d)
+
+ treedir = os.path.join(bb.data.getVar("WORKDIR", d, 1), "locale-tree")
+ path = bb.data.getVar("PATH", d, 1)
+ i18npath = os.path.join(treedir, datadir, "i18n")
+
+ localedef_opts = "--force --old-style --no-archive --prefix=%s --inputfile=%s/i18n/locales/%s --charmap=%s %s" % (treedir, datadir, locale, encoding, name)
+ cmd = "PATH=\"%s\" I18NPATH=\"%s\" %s -L %s %s/bin/localedef %s" % (path, i18npath, qemu, treedir, treedir, localedef_opts)
+ bb.note("generating locale %s (%s)" % (locale, encoding))
+ if os.system(cmd):
+ raise bb.build.FuncFailed("localedef returned an error (command was %s)." % cmd)
+
+ def output_locale(name, locale, encoding):
+ output_locale_source(name, locale, encoding)
+
+ # Reshuffle names so that UTF-8 is preferred over other encodings
+ non_utf8 = []
+ for l in encodings.keys():
+ if len(encodings[l]) == 1:
+ output_locale(l, l, encodings[l][0])
+ if encodings[l][0] != "UTF-8":
+ non_utf8.append(l)
+ else:
+ if "UTF-8" in encodings[l]:
+ output_locale(l, l, "UTF-8")
+ encodings[l].remove("UTF-8")
+ else:
+ non_utf8.append(l)
+ for e in encodings[l]:
+ output_locale('%s.%s' % (l, e), l, e)
+
+ if non_utf8 != []:
+ bb.note("the following locales are supported only in legacy encodings:")
+ bb.note(" " + " ".join(non_utf8))
+}
+
+python package_do_split_locales() {
+ if (bb.data.getVar('PACKAGE_NO_LOCALE', d, True) == '1'):
+ bb.debug(1, "package requested not splitting locales")
+ return
+
+ packages = (bb.data.getVar('PACKAGES', d, True) or "").split()
+
+ datadir = bb.data.getVar('datadir', d, True)
+ if not datadir:
+ bb.note("datadir not defined")
+ return
+
+ if 'glibc-locale' in packages:
+ packages.remove('glibc-locale')
+
+ localedir = os.path.join(datadir, 'locale')
+
+ if not os.path.isdir(localedir):
+ bb.debug(1, "No locale files in this package")
+ return
+
+ locales = os.listdir(localedir)
+ for l in locales:
+ ln = legitimize_package_name(l)
+ pkg = 'glibc-locale-' + ln
+ packages.append(pkg)
+ bb.data.setVar('FILES_' + pkg, os.path.join(datadir, 'locale', l), d)
+ bb.data.setVar('RDEPENDS_' + pkg, 'glibc virtual-locale-%s' % ln, d)
+ bb.data.setVar('RPROVIDES_' + pkg, 'glibc-locale %s-translation' % ln, d)
+ bb.data.setVar('DESCRIPTION_' + pkg, '%s translation for glibc' % l, d)
+ bb.data.setVar('PKGV_' + pkg, bb.data.getVar('CSL_VER_LIBC', d, 1), d)
+
+ bb.data.setVar('PACKAGES', ' '.join(packages), d)
+}
+
python populate_packages_prepend () {
if bb.data.getVar('DEBIAN_NAMES', d, 1):
bb.data.setVar('PKG_glibc', 'libc6', d)
bb.data.setVar('PKG_glibc-dev', 'libc6-dev', d)
bb.data.setVar('PKG_libgcc', 'libgcc1', d)
bb.data.setVar('PKG_libgcc-dev', 'libgcc1-dev', d)
+ bb.build.exec_func('package_do_split_gconvs', d)
}
diff --git a/recipes/meta/external-toolchain-csl/SUPPORTED b/recipes/meta/external-toolchain-csl/SUPPORTED
new file mode 100644
index 0000000000..fe9406acd1
--- /dev/null
+++ b/recipes/meta/external-toolchain-csl/SUPPORTED
@@ -0,0 +1,4 @@
+en_GB.UTF-8 UTF-8
+en_GB ISO-8859-1
+en_US.UTF-8 UTF-8
+en_US ISO-8859-1
diff --git a/recipes/meta/external-toolchain-generic.bb b/recipes/meta/external-toolchain-generic.bb
index 73f823f192..c840301aac 100644
--- a/recipes/meta/external-toolchain-generic.bb
+++ b/recipes/meta/external-toolchain-generic.bb
@@ -22,8 +22,8 @@ PR = "r2"
inherit sdk
do_stage() {
- if [ ! -e ${prefix}/package-status ]; then
- echo "The external toolchain could not be found in ${prefix}!"
+ if [ ! -e ${prefix}/package-status -a ! -e ${prefix}/usr/lib/opkg/status ]; then
+ echo "The package status file of the external toolchain could not be found in ${prefix}!"
exit 1
fi
diff --git a/recipes/meta/external-toolchain.bb b/recipes/meta/external-toolchain.bb
index 4c70054b0f..352126396f 100644
--- a/recipes/meta/external-toolchain.bb
+++ b/recipes/meta/external-toolchain.bb
@@ -21,8 +21,8 @@ PR = "r2"
inherit sdk
do_stage() {
- if [ ! -e ${prefix}/package-status ]; then
- echo "The external toolchain could not be found in ${prefix}!"
+ if [ ! -e ${prefix}/package-status -a ! -e ${prefix}/usr/lib/opkg/status ]; then
+ echo "The package status file of the external toolchain could not be found in ${prefix}!"
exit 1
fi
diff --git a/recipes/meta/meta-toolchain.bb b/recipes/meta/meta-toolchain.bb
index a8c27ecfda..688995c5e5 100644
--- a/recipes/meta/meta-toolchain.bb
+++ b/recipes/meta/meta-toolchain.bb
@@ -17,7 +17,7 @@ TOOLCHAIN_TARGET_TASK ?= "task-sdk-bare"
TOOLCHAIN_TARGET_EXCLUDE ?= ""
FEED_ARCH ?= "${TARGET_ARCH}"
SDK_SUFFIX = "toolchain"
-TOOLCHAIN_OUTPUTNAME ?= "${DISTRO}-${DISTRO_VERSION}-${FEED_ARCH}-${TARGET_OS}-${SDK_SUFFIX}"
+TOOLCHAIN_OUTPUTNAME ?= "${DISTRO}-${DISTRO_VERSION}-${SDK_SYS}-${FEED_ARCH}-${TARGET_OS}-${SDK_SUFFIX}"
RDEPENDS = "${TOOLCHAIN_TARGET_TASK} ${TOOLCHAIN_HOST_TASK}"
@@ -67,7 +67,7 @@ do_populate_sdk() {
rm -Rf ${SDK_OUTPUT}/usr/lib
# Clean up empty directories from excluded packages
- find ${SDK_OUTPUT} -depth -type d -empty -print0 | xargs -0 /bin/rmdir
+ find ${SDK_OUTPUT} -depth -type d -empty -print0 | xargs -r0 /bin/rmdir
install -d ${SDK_OUTPUT}/${SDKPATH}/${TARGET_SYS}/${sysconfdir}
install -m 0644 ${IPKGCONF_TARGET} ${IPKGCONF_SDK} ${SDK_OUTPUT}/${SDKPATH}/${TARGET_SYS}/${sysconfdir}/
@@ -119,10 +119,10 @@ do_populate_sdk() {
# Fix or remove broken .la files
for i in `find ${SDK_OUTPUT}/${SDKPATH}/${TARGET_SYS} -name \*.la`; do
- sed -i -e "/^dependency_libs=/s,\([[:space:]']\)${base_libdir},\1${SDKPATH}/${TARGET_SYS}${base_libdir},g" \
- -e "/^dependency_libs=/s,\([[:space:]']\)${libdir},\1${SDKPATH}/${TARGET_SYS}${libdir},g" \
- -e "/^dependency_libs=/s,\-\([LR]\)${base_libdir},-\1${SDKPATH}/${TARGET_SYS}${base_libdir},g" \
- -e "/^dependency_libs=/s,\-\([LR]\)${libdir},-\1${SDKPATH}/${TARGET_SYS}${libdir},g" \
+ sed -i -e "/^dependency_libs=/s,\([[:space:]']\)${base_libdir},\1\$SDK_PATH/\$TARGET_SYS${base_libdir},g" \
+ -e "/^dependency_libs=/s,\([[:space:]']\)${libdir},\1\$SDK_PATH/\$TARGET_SYS${libdir},g" \
+ -e "/^dependency_libs=/s,\-\([LR]\)${base_libdir},-\1\$SDK_PATH/\$TARGET_SYS${base_libdir},g" \
+ -e "/^dependency_libs=/s,\-\([LR]\)${libdir},-\1\$SDK_PATH/\$TARGET_SYS${libdir},g" \
-e 's/^installed=yes$/installed=no/' $i
done
rm -f ${SDK_OUTPUT}/${SDKPATH}/lib/*.la
@@ -137,13 +137,16 @@ do_populate_sdk() {
# Create environment setup script
script=${SDK_OUTPUT}/${SDKPATH}/environment-setup
touch $script
- echo 'export PATH=${SDKPATH}/bin:$PATH' >> $script
- echo 'export LIBTOOL_SYSROOT_PATH=${prefix}/${TARGET_SYS}' >> $script
- echo 'export PKG_CONFIG_SYSROOT_DIR=${SDKPATH}/${TARGET_SYS}' >> $script
- echo 'export PKG_CONFIG_PATH=${SDKPATH}/${TARGET_SYS}${libdir}/pkgconfig' >> $script
- echo 'export CONFIG_SITE=${SDKPATH}/site-config' >> $script
- echo "alias opkg='LD_LIBRARY_PATH=${SDKPATH}/lib ${SDKPATH}/bin/opkg-cl -f ${SDKPATH}/${sysconfdir}/opkg-sdk.conf -o ${SDKPATH}'" >> $script
- echo "alias opkg-target='LD_LIBRARY_PATH=${SDKPATH}/lib ${SDKPATH}/bin/opkg-cl -f ${SDKPATH}/${TARGET_SYS}${sysconfdir}/opkg.conf -o ${SDKPATH}/${TARGET_SYS}'" >> $script
+ echo 'export SDK_PATH=${SDKPATH}' >> $script
+ echo 'export TARGET_SYS=${TARGET_SYS}' >> $script
+ echo 'export PATH=$SDK_PATH/bin:$PATH' >> $script
+ echo 'export CPATH=$SDK_PATH/$TARGET_SYS/usr/include:$CPATH' >> $script
+ echo 'export LIBTOOL_SYSROOT_PATH=$SDK_PATH/$TARGET_SYS' >> $script
+ echo 'export PKG_CONFIG_SYSROOT_DIR=$SDK_PATH/$TARGET_SYS' >> $script
+ echo 'export PKG_CONFIG_PATH=$SDK_PATH/$TARGET_SYS${libdir}/pkgconfig' >> $script
+ echo 'export CONFIG_SITE=$SDK_PATH/site-config' >> $script
+ echo "alias opkg='LD_LIBRARY_PATH=$SDK_PATH/lib $SDK_PATH/bin/opkg-cl -f $SDK_PATH/${sysconfdir}/opkg-sdk.conf -o $SDK_PATH'" >> $script
+ echo "alias opkg-target='LD_LIBRARY_PATH=$SDK_PATH/lib $SDK_PATH/bin/opkg-cl -f $SDK_PATH/$TARGET_SYS${sysconfdir}/opkg.conf -o $SDK_PATH/$TARGET_SYS'" >> $script
# Add version information
versionfile=${SDK_OUTPUT}/${SDKPATH}/version
diff --git a/recipes/moblin/bickley_git.bb b/recipes/moblin/bickley_git.bb
index 26bf40d32e..de94a7aba1 100644
--- a/recipes/moblin/bickley_git.bb
+++ b/recipes/moblin/bickley_git.bb
@@ -4,7 +4,7 @@ PV = "0.0"
PR_append = "+git${SRCREV}"
PR = "r3"
-DEPENDS = "redland gtk+ dbus-glib clutter-gst libexif taglib gupnp gupnp-av samba"
+DEPENDS = "redland gtk+ dbus-glib clutter-gst-0.9 libexif taglib gupnp gupnp-av samba"
RDEPENDS = "xdg-user-dirs"
S = "${WORKDIR}/git"
diff --git a/recipes/moblin/hornsey_git.bb b/recipes/moblin/hornsey_git.bb
index 716c18d1a6..fa316311d5 100644
--- a/recipes/moblin/hornsey_git.bb
+++ b/recipes/moblin/hornsey_git.bb
@@ -6,7 +6,7 @@ PV = "0.0"
PR = "r1"
PR_append = "+git${SRCREV}"
-DEPENDS = "clutter clutter-gst-0.9 bickley nbtk bognor-regis libunique startup-notification gtk+"
+DEPENDS = "clutter-0.9 clutter-gst-0.9 bickley nbtk bognor-regis libunique startup-notification gtk+"
SRC_URI = "git://git.moblin.org/${PN}.git;protocol=git \
file://fix-api.patch;patch=1 \
diff --git a/recipes/module-init-tools/module-init-tools.inc b/recipes/module-init-tools/module-init-tools.inc
index 59e93d4533..9ad925f82b 100644
--- a/recipes/module-init-tools/module-init-tools.inc
+++ b/recipes/module-init-tools/module-init-tools.inc
@@ -1,7 +1,7 @@
DESCRIPTION = "This package contains a set of programs for loading, inserting, and \
removing kernel modules for Linux (versions 2.5.48 and above). It serves \
the same function that the modutils package serves for Linux 2.4."
-LICENSE = "GPL"
+LICENSE = "GPLv2"
SECTION = "base"
PR = "r5"
diff --git a/recipes/mokoko/mokoko_svn.bb b/recipes/mokoko/mokoko_svn.bb
index f22d445ae8..3196234b54 100644
--- a/recipes/mokoko/mokoko_svn.bb
+++ b/recipes/mokoko/mokoko_svn.bb
@@ -5,6 +5,7 @@ LICENSE = "GPL"
DEPENDS = "gstreamer"
RDEPENDS = "gstreamer"
+SRCREV = "127"
PV = "0.1+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/mozilla/fennec_hg.bb b/recipes/mozilla/fennec_hg.bb
index ef4cedd70b..ada5fa8e87 100644
--- a/recipes/mozilla/fennec_hg.bb
+++ b/recipes/mozilla/fennec_hg.bb
@@ -19,8 +19,6 @@ require firefox.inc
DEPENDS += "libnotify autoconf213-native cairo alsa-lib sqlite3"
-PARALLEL_MAKE = ""
-
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
export LIBXUL_DIST="${S}/objdir/xulrunner/dist/"
diff --git a/recipes/mozilla/firefox-3.5.2/firefox-plugin.pc b/recipes/mozilla/firefox-3.5.2/firefox-plugin.pc
new file mode 100644
index 0000000000..611acd5944
--- /dev/null
+++ b/recipes/mozilla/firefox-3.5.2/firefox-plugin.pc
@@ -0,0 +1,10 @@
+prefix=/usr
+exec_prefix=/usr
+libdir=/usr/lib
+includedir=/usr/include/firefox-3.5.2
+
+Name: Mozilla Plug-In API
+Description: Mozilla Plug-In API
+Version: 3.5
+Requires: firefox-xpcom = 3.5
+Cflags: -I${includedir}/java -I${includedir}/plugin
diff --git a/recipes/mozilla/firefox-3.5.2/firefox-xpcom.pc b/recipes/mozilla/firefox-3.5.2/firefox-xpcom.pc
new file mode 100644
index 0000000000..935d357d84
--- /dev/null
+++ b/recipes/mozilla/firefox-3.5.2/firefox-xpcom.pc
@@ -0,0 +1,13 @@
+prefix=/usr
+exec_prefix=/usr
+libdir=/usr/lib
+includedir=/usr/include
+mozdir=${includedir}/firefox-3.5.2
+idldir=${includedir}/firefox-3.5.2
+
+Name: XPCOM
+Description: The Mozilla Cross Platform Component Library
+Version: 3.5
+Requires: nspr >= 4.8
+Libs: -L${libdir} -lxpcom -Wl,-R${libdir}
+Cflags: -I${mozdir} -I${mozdir}/xpcom -I${mozdir}/string
diff --git a/recipes/mozilla/firefox-3.5.2/mozconfig b/recipes/mozilla/firefox-3.5.2/mozconfig
index d8d3f3923d..7e2ade0b71 100644
--- a/recipes/mozilla/firefox-3.5.2/mozconfig
+++ b/recipes/mozilla/firefox-3.5.2/mozconfig
@@ -26,6 +26,7 @@ ac_add_options --disable-jsd
ac_add_options --disable-installer
ac_add_options --disable-xprint
ac_add_options --disable-necko-disk-cache
+ac_add_options --disable-necko-wifi
ac_add_options --disable-updater
# configure necko to allocate smaller network buffers
diff --git a/recipes/mozilla/firefox-3.5.2/nspr.pc b/recipes/mozilla/firefox-3.5.2/nspr.pc
new file mode 100644
index 0000000000..ba3d131978
--- /dev/null
+++ b/recipes/mozilla/firefox-3.5.2/nspr.pc
@@ -0,0 +1,10 @@
+prefix=/usr
+exec_prefix=/usr
+libdir=/usr/lib
+includedir=/usr/include/firefox-3.5.2
+
+Name: NSPR
+Description: The Netscape Portable Runtime
+Version: 4.8
+Libs: -L${libdir} -lplds4 -lplc4 -lnspr4 -lpthread -ldl -Wl,-R${libdir}
+Cflags: -I${includedir}
diff --git a/recipes/mozilla/firefox-3.5.4/mozconfig b/recipes/mozilla/firefox-3.5.4/mozconfig
index d8d3f3923d..7e2ade0b71 100644
--- a/recipes/mozilla/firefox-3.5.4/mozconfig
+++ b/recipes/mozilla/firefox-3.5.4/mozconfig
@@ -26,6 +26,7 @@ ac_add_options --disable-jsd
ac_add_options --disable-installer
ac_add_options --disable-xprint
ac_add_options --disable-necko-disk-cache
+ac_add_options --disable-necko-wifi
ac_add_options --disable-updater
# configure necko to allocate smaller network buffers
diff --git a/recipes/mozilla/firefox-3.5.5/mozconfig b/recipes/mozilla/firefox-3.5.5/mozconfig
index d8d3f3923d..7e2ade0b71 100644
--- a/recipes/mozilla/firefox-3.5.5/mozconfig
+++ b/recipes/mozilla/firefox-3.5.5/mozconfig
@@ -26,6 +26,7 @@ ac_add_options --disable-jsd
ac_add_options --disable-installer
ac_add_options --disable-xprint
ac_add_options --disable-necko-disk-cache
+ac_add_options --disable-necko-wifi
ac_add_options --disable-updater
# configure necko to allocate smaller network buffers
diff --git a/recipes/mozilla/firefox-3.6/0001-Remove-Werror-from-build.patch b/recipes/mozilla/firefox-3.6/0001-Remove-Werror-from-build.patch
new file mode 100644
index 0000000000..008dabbe8d
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/0001-Remove-Werror-from-build.patch
@@ -0,0 +1,43 @@
+From 48a378ae647cbd6f8466bd0e8dbb04400bb175a8 Mon Sep 17 00:00:00 2001
+From: Eduardo Valentin <eduardo.valentin@openpossa.org>
+Date: Thu, 24 Jul 2008 16:05:09 -0400
+Subject: [PATCH 1/1] Remove -Werror from build
+
+Remove -Werror from build
+
+Signed-off-by: Eduardo Valentin <eduardo.valentin@openpossa.org>
+---
+ configure | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+Index: mozilla-1.9.1/configure
+===================================================================
+--- mozilla-1.9.1.orig/configure
++++ mozilla-1.9.1/configure
+@@ -5525,7 +5525,7 @@ if test "$GNU_CC"; then
+ # Don't allow undefined symbols in libraries
+ DSO_LDOPTS="$DSO_LDOPTS -Wl,-z,defs"
+ fi
+- WARNINGS_AS_ERRORS='-Werror'
++ WARNINGS_AS_ERRORS=''
+ DSO_CFLAGS=''
+ DSO_PIC_CFLAGS='-fPIC'
+ ASFLAGS="$ASFLAGS -fPIC"
+@@ -7104,7 +7104,7 @@ EOF
+ IMPLIB='emximp -o'
+ FILTER='emxexp -o'
+ LDFLAGS='-Zmap'
+- WARNINGS_AS_ERRORS='-Werror'
++ WARNINGS_AS_ERRORS=''
+ MOZ_DEBUG_FLAGS="-g -fno-inline"
+ MOZ_OPTIMIZE_FLAGS="-O2"
+ MOZ_OPTIMIZE_LDFLAGS="-s -Zlinker /EXEPACK:2 -Zlinker /PACKCODE -Zlinker /PACKDATA"
+@@ -7283,7 +7283,7 @@ else
+ fi
+ rm -f conftest*
+ fi
+- WARNINGS_AS_ERRORS='-Werror'
++ WARNINGS_AS_ERRORS=''
+ MOZ_OPTIMIZE_FLAGS="-xO4"
+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_FLAGS) $(DSO_LDOPTS) -h $@ -o $@'
+ MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_FLAGS) -G -z muldefs -h $@ -o $@'
diff --git a/recipes/mozilla/firefox-3.6/0002-Fix-security-cross-compile-cpu-detection-error.patch b/recipes/mozilla/firefox-3.6/0002-Fix-security-cross-compile-cpu-detection-error.patch
new file mode 100644
index 0000000000..ce8d4d9948
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/0002-Fix-security-cross-compile-cpu-detection-error.patch
@@ -0,0 +1,42 @@
+From 599b26141d493ff19633796ce5e19b00315d3821 Mon Sep 17 00:00:00 2001
+From: Eduardo Valentin <eduardo.valentin@openpossa.org>
+Date: Fri, 25 Jul 2008 11:20:02 -0400
+Subject: [PATCH 1/1] Fix security cross compile cpu detection error
+
+Fix security cross compile cpu detection error.
+Reference to bug 376279.
+
+Signed-off-by: Eduardo Valentin <eduardo.valentin@openpossa.org>
+---
+ security/coreconf/arch.mk | 2 ++
+ security/manager/Makefile.in | 1 +
+ 2 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/security/coreconf/arch.mk b/security/coreconf/arch.mk
+index fba38ff..28da32e 100644
+--- a/security/coreconf/arch.mk
++++ b/security/coreconf/arch.mk
+@@ -66,7 +66,9 @@ OS_ARCH := $(subst /,_,$(shell uname -s))
+ # Attempt to differentiate between sparc and x86 Solaris
+ #
+
++ifndef OE_TEST
+ OS_TEST := $(shell uname -m)
++endif
+ ifeq ($(OS_TEST),i86pc)
+ OS_RELEASE := $(shell uname -r)_$(OS_TEST)
+ else
+diff --git a/security/manager/Makefile.in b/security/manager/Makefile.in
+index 86119f7..86c09ca 100644
+--- a/security/manager/Makefile.in
++++ b/security/manager/Makefile.in
+@@ -240,6 +240,7 @@ DEFAULT_GMAKE_FLAGS += \
+ RC="$(RC) $(RCFLAGS)" \
+ OS_ARCH="$(OS_ARCH)" \
+ CPU_ARCH="$(TARGET_CPU)" \
++ OS_TEST="$(TARGET_CPU)" \
+ $(NULL)
+ SKIP_CHK=1
+ endif
+--
+1.5.4.3
diff --git a/recipes/mozilla/firefox-3.6/010_FPU_IS_ARM_FPA_xslt.diff b/recipes/mozilla/firefox-3.6/010_FPU_IS_ARM_FPA_xslt.diff
new file mode 100644
index 0000000000..854100c4c3
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/010_FPU_IS_ARM_FPA_xslt.diff
@@ -0,0 +1,56 @@
+# Bug 369722 – prdtoa.c jsnum.h txDouble.h not required IEEE_ARM define on Codesourcery EABI gcc3.4.4 compiler
+#
+--- mozilla/content/xslt/public/txDouble.h.orig 2006-07-13 17:21:52.000000000 +0300
++++ mozilla/content/xslt/public/txDouble.h 2007-10-25 15:01:25.000000000 +0300
+@@ -58,46 +58,48 @@ fp_except_t oldmask = fpsetmask(~allmask
+ /**
+ * Stefan Hanske <sh990154@mail.uni-greifswald.de> reports:
+ * ARM is a little endian architecture but 64 bit double words are stored
+ * differently: the 32 bit words are in little endian byte order, the two words
+ * are stored in big endian`s way.
+ */
+
+ #if defined(__arm) || defined(__arm32__) || defined(__arm26__) || defined(__arm__)
+-#define CPU_IS_ARM
++#if !defined(__VFP_FP__)
++#define FPU_IS_ARM_FPA
++#endif
+ #endif
+
+ #if (__GNUC__ == 2 && __GNUC_MINOR__ > 95) || __GNUC__ > 2
+ /**
+ * This version of the macros is safe for the alias optimizations
+ * that gcc does, but uses gcc-specific extensions.
+ */
+
+ typedef union txdpun {
+ PRFloat64 d;
+ struct {
+-#if defined(IS_LITTLE_ENDIAN) && !defined(CPU_IS_ARM)
++#if defined(IS_LITTLE_ENDIAN) && !defined(FPU_IS_ARM_FPA)
+ PRUint32 lo, hi;
+ #else
+ PRUint32 hi, lo;
+ #endif
+ } s;
+ } txdpun;
+
+ #define TX_DOUBLE_HI32(x) (__extension__ ({ txdpun u; u.d = (x); u.s.hi; }))
+ #define TX_DOUBLE_LO32(x) (__extension__ ({ txdpun u; u.d = (x); u.s.lo; }))
+
+ #else // __GNUC__
+
+ /* We don't know of any non-gcc compilers that perform alias optimization,
+ * so this code should work.
+ */
+
+-#if defined(IS_LITTLE_ENDIAN) && !defined(CPU_IS_ARM)
++#if defined(IS_LITTLE_ENDIAN) && !defined(FPU_IS_ARM_FPA)
+ #define TX_DOUBLE_HI32(x) (((PRUint32 *)&(x))[1])
+ #define TX_DOUBLE_LO32(x) (((PRUint32 *)&(x))[0])
+ #else
+ #define TX_DOUBLE_HI32(x) (((PRUint32 *)&(x))[0])
+ #define TX_DOUBLE_LO32(x) (((PRUint32 *)&(x))[1])
+ #endif
+
+ #endif // __GNUC__
diff --git a/recipes/mozilla/firefox-3.6/Bug339782.additional.fix.diff b/recipes/mozilla/firefox-3.6/Bug339782.additional.fix.diff
new file mode 100644
index 0000000000..0848e730d3
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/Bug339782.additional.fix.diff
@@ -0,0 +1,39 @@
+# XPTC_InvokeByIndex crashes
+# Bug 339782 [ARM] XPTC_InvokeByIndex crashes when cross-compiled under GCC 3.4.x with EABI (CodeSourcery)
+Index: mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp
+===================================================================
+--- mozilla.orig/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp
++++ mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp
+@@ -51,22 +51,32 @@
+ #ifdef __ARM_EABI__
+ #define DOUBLEWORD_ALIGN(p) ((PRUint32 *)((((PRUint32)(p)) + 7) & 0xfffffff8))
+ #define VAR_STACK_SIZE_64 3
+ #else
+ #define DOUBLEWORD_ALIGN(p) (p)
+ #define VAR_STACK_SIZE_64 2
+ #endif
+
++#ifdef __ARM_EABI__
++#define DOUBLEWORD_ALIGN(p) ((PRUint32 *)((((PRUint32)(p)) + 7) & 0xfffffff8))
++#else
++#define DOUBLEWORD_ALIGN(p) (p)
++#endif
++
+ // Remember that these 'words' are 32bit DWORDS
+
+ static PRUint32
+ invoke_count_words(PRUint32 paramCount, nsXPTCVariant* s)
+ {
+ PRUint32 result = 0;
++
++ /* Note that we give a "worst case" estimate of how much stack _might_ be
++ * needed, rather than the real count - this should be safe */
++
+ for(PRUint32 i = 0; i < paramCount; i++, s++)
+ {
+ if(s->IsPtrData())
+ {
+ result++;
+ continue;
+ }
+ switch(s->type)
diff --git a/recipes/mozilla/firefox-3.6/Bug385583.nspr.jmp_buf.eabi.diff b/recipes/mozilla/firefox-3.6/Bug385583.nspr.jmp_buf.eabi.diff
new file mode 100644
index 0000000000..486440c30e
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/Bug385583.nspr.jmp_buf.eabi.diff
@@ -0,0 +1,33 @@
+diff -up mozilla/nsprpub/pr/include/md/_linux.h.orig mozilla/nsprpub/pr/include/md/_linux.h
+--- mozilla/nsprpub/pr/include/md/_linux.h.orig 2007-11-28 14:16:03.000000000 -0500
++++ mozilla/nsprpub/pr/include/md/_linux.h 2007-11-28 14:12:09.000000000 -0500
+@@ -346,8 +346,8 @@ extern void _MD_CleanupBeforeExit(void);
+ #error "Linux/MIPS pre-glibc2 not supported yet"
+ #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
+
+-#elif defined(__arm__)
+-/* ARM/Linux */
++#elif defined(__arm__) && !defined(__ARM_EABI__)
++/* ARM/Linux (old-ABI) */
+ #if defined(__GLIBC__) && __GLIBC__ >= 2
+ #define _MD_GET_SP(_t) (_t)->md.context[0].__jmpbuf[20]
+ #define _MD_SET_FP(_t, val) ((_t)->md.context[0].__jmpbuf[19] = (val))
+@@ -358,6 +358,18 @@ extern void _MD_CleanupBeforeExit(void);
+ #error "ARM/Linux pre-glibc2 not supported yet"
+ #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
+
++#elif defined(__arm__) && defined(__ARM_EABI__)
++/* ARM/Linux (EABI) */
++#if defined(__GLIBC__) && __GLIBC__ >= 2
++#define _MD_GET_SP(_t) (_t)->md.context[0].__jmpbuf[8]
++#define _MD_SET_FP(_t, val) ((_t)->md.context[0].__jmpbuf[7] = (val))
++#define _MD_GET_SP_PTR(_t) &(_MD_GET_SP(_t))
++#define _MD_GET_FP_PTR(_t) (&(_t)->md.context[0].__jmpbuf[7])
++#define _MD_SP_TYPE __ptr_t
++#else
++#error "ARM/Linux pre-glibc2 not supported yet"
++#endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
++
+ #else
+
+ #error "Unknown CPU architecture"
diff --git a/recipes/mozilla/firefox-3.6/Bug405992.atomic.nspr.diff b/recipes/mozilla/firefox-3.6/Bug405992.atomic.nspr.diff
new file mode 100644
index 0000000000..f54f916a6a
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/Bug405992.atomic.nspr.diff
@@ -0,0 +1,48 @@
+# Add atomic operations for ARM.
+diff --git a/nsprpub/pr/include/md/_linux.h b/nsprpub/pr/include/md/_linux.h
+index 5b794c5..cb8d58e 100644
+--- a/nsprpub/pr/include/md/_linux.h
++++ b/nsprpub/pr/include/md/_linux.h
+@@ -194,6 +194,42 @@ extern PRInt32 _PR_x86_64_AtomicSet(PRInt32 *val, PRInt32 newval);
+ })
+ #endif
+
++#if defined(__arm__)
++#define _PR_HAVE_ATOMIC_OPS
++#define _MD_INIT_ATOMIC()
++
++typedef int (__kernel_cmpxchg_t)(int oldval, int newval, volatile int *ptr);
++#define __kernel_cmpxchg (*(__kernel_cmpxchg_t *)0xffff0fc0)
++
++#define _MD_ATOMIC_INCREMENT(ptr) _MD_ATOMIC_ADD(ptr, 1)
++#define _MD_ATOMIC_DECREMENT(ptr) _MD_ATOMIC_ADD(ptr, -1)
++#define _MD_ATOMIC_ADD(ptr, n) \
++ ({ \
++ PRInt32 ov, nv; \
++ volatile PRInt32 *vp = (ptr); \
++ \
++ do { \
++ ov = *vp; \
++ nv = ov + (n); \
++ } \
++ while (__kernel_cmpxchg(ov, nv, vp)); \
++ \
++ nv; \
++ })
++#define _MD_ATOMIC_SET(ptr, nv) \
++ ({ \
++ PRInt32 ov; \
++ volatile PRInt32 *vp = (ptr); \
++ \
++ do { \
++ ov = *vp; \
++ } \
++ while (__kernel_cmpxchg(ov, (nv), vp)); \
++ \
++ ov; \
++ })
++#endif
++
+ #define USE_SETJMP
+ #if defined(__GLIBC__) && __GLIBC__ >= 2
+ #define _PR_POLL_AVAILABLE
diff --git a/recipes/mozilla/firefox-3.6/configure-wchart.patch b/recipes/mozilla/firefox-3.6/configure-wchart.patch
new file mode 100644
index 0000000000..36ee2a0ba4
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/configure-wchart.patch
@@ -0,0 +1,11 @@
+--- a/configure.in 2008-04-15 12:56:35.000000000 +0300
++++ b/configure.in.old 2008-03-20 21:17:09.000000000 +0200
+@@ -2743,7 +2743,7 @@
+
+ AC_CACHE_CHECK(for compiler -fshort-wchar option,
+ ac_cv_have_usable_wchar_option_v2,
+- [AC_TRY_LINK([#include <stddef.h>
++ [AC_TRY_COMPILE([#include <stddef.h>
+ $configure_static_assert_macros],
+ [CONFIGURE_STATIC_ASSERT(sizeof(wchar_t) == 2);
+ CONFIGURE_STATIC_ASSERT((wchar_t)-1 > (wchar_t) 0)],
diff --git a/recipes/mozilla/firefox-3.6/firefox-plugin.pc b/recipes/mozilla/firefox-3.6/firefox-plugin.pc
new file mode 100644
index 0000000000..f6ad141f9f
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/firefox-plugin.pc
@@ -0,0 +1,10 @@
+prefix=/usr
+exec_prefix=/usr
+libdir=/usr/lib
+includedir=/usr/include/firefox-3.6
+
+Name: Mozilla Plug-In API
+Description: Mozilla Plug-In API
+Version: 3.5
+Requires: firefox-xpcom = 3.6
+Cflags: -I${includedir}/java -I${includedir}/plugin
diff --git a/recipes/mozilla/firefox-3.6/firefox-xpcom.pc b/recipes/mozilla/firefox-3.6/firefox-xpcom.pc
new file mode 100644
index 0000000000..6eb1289cda
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/firefox-xpcom.pc
@@ -0,0 +1,13 @@
+prefix=/usr
+exec_prefix=/usr
+libdir=/usr/lib
+includedir=/usr/include
+mozdir=${includedir}/firefox-3.6
+idldir=${includedir}/firefox-3.6
+
+Name: XPCOM
+Description: The Mozilla Cross Platform Component Library
+Version: 3.6
+Requires: nspr >= 4.8
+Libs: -L${libdir} -lxpcom -Wl,-R${libdir}
+Cflags: -I${mozdir} -I${mozdir}/xpcom -I${mozdir}/string
diff --git a/recipes/mozilla/firefox-3.6/jemalloc-tls.patch b/recipes/mozilla/firefox-3.6/jemalloc-tls.patch
new file mode 100644
index 0000000000..d1d740989e
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/jemalloc-tls.patch
@@ -0,0 +1,28 @@
+--- /tmp/jemalloc.c 2008-06-23 10:57:36.000000000 +0200
++++ mozilla/memory/jemalloc/jemalloc.c 2008-06-23 11:20:13.000000000 +0200
+@@ -386,7 +386,7 @@
+ #else
+ # define NO_TLS
+ #endif
+-#if 0
++
+ #ifdef __i386__
+ # define QUANTUM_2POW_MIN 4
+ # define SIZEOF_PTR_2POW 2
+@@ -420,7 +420,6 @@
+ # define QUANTUM_2POW_MIN 4
+ # define SIZEOF_PTR_2POW 2
+ #endif
+-#endif
+
+ #define SIZEOF_PTR (1U << SIZEOF_PTR_2POW)
+
+@@ -2582,7 +2581,7 @@
+ * knowledge of how _pthread_self() calculates values, we can't
+ * easily do much better than this.
+ */
+- ind = (unsigned long) _pthread_self() % narenas;
++ ind = 255255 % narenas;
+
+ /*
+ * Optimistially assume that arenas[ind] has been initialized.
diff --git a/recipes/mozilla/firefox-3.6/linkage-problem.patch b/recipes/mozilla/firefox-3.6/linkage-problem.patch
new file mode 100644
index 0000000000..28bffd1e22
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/linkage-problem.patch
@@ -0,0 +1,14 @@
+--- mozilla/layout/build/Makefile.in~ 2007-11-24 00:38:14.000000000 -0200
++++ mozilla/layout/build/Makefile.in 2007-11-24 00:38:14.000000000 -0200
+@@ -229,6 +229,11 @@
+ $(NULL)
+ endif
+
++ifdef MOZ_ENABLE_XFT
++EXTRA_DSO_LDOPTS += $(MOZ_XFT_LIBS) \
++ $(NULL)
++endif
++
+ ifneq (,$(MOZ_ENABLE_CANVAS)$(MOZ_SVG_RENDERER_CAIRO))
+ EXTRA_DSO_LDOPTS += $(MOZ_CAIRO_LIBS) \
+ $(NULL)
diff --git a/recipes/mozilla/firefox-3.6/mozconfig b/recipes/mozilla/firefox-3.6/mozconfig
new file mode 100644
index 0000000000..883a396e53
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/mozconfig
@@ -0,0 +1,73 @@
+. $topsrcdir/browser/config/mozconfig
+
+# use GTK+-2 widget set with XFT font rendering
+#ac_add_options --enable-default-toolkit=gtk2
+ac_add_options --enable-xft
+ac_add_options --disable-freetype2
+
+# enable minimal profile support
+ac_add_options --disable-profilesharing
+ac_add_options --disable-profilelocking
+ac_add_options --enable-single-profile
+
+ac_add_options --with-system-zlib
+ac_add_options --with-system-jpeg
+ac_add_options --with-system-bz2
+#ac_add_options --with-system-png
+
+ac_add_options --disable-accessibility
+ac_add_options --disable-composer
+#ac_add_options --enable-plaintext-editor-only
+ac_add_options --disable-mailnews
+ac_add_options --disable-ldap
+#ac_add_options --disable-postscript
+ac_add_options --disable-mathml
+ac_add_options --disable-jsd
+ac_add_options --disable-installer
+ac_add_options --disable-xprint
+ac_add_options --enable-necko-disk-cache
+ac_add_options --disable-necko-wifi
+ac_add_options --disable-updater
+
+# configure necko to allocate smaller network buffers
+ac_add_options --enable-necko-small-buffers
+
+# disable debug logging and tests
+#ac_add_options --disable-dtd-debug
+ac_add_options --disable-logging
+ac_add_options --disable-gtktest
+ac_add_options --disable-tests
+ac_add_options --disable-printing
+ac_add_options --disable-gnomevfs
+ac_add_options --disable-gnomeui
+ac_add_options --enable-debugger-info-modules
+
+# build crypto module (PSM + NSS)
+ac_add_options --enable-crypto
+
+# build minimal set of protocol handlers
+ac_add_options --enable-necko-protocols=http,file,res,ftp,about,viewsource
+
+# build minimal set of image decoders
+#ac_add_options --enable-image-decoders=png,gif,jpeg
+
+#ac_add_options --enable-reorder
+#ac_add_options --enable-elf-dynstr-gc
+
+# enable static build
+#ac_add_options --disable-shared
+#ac_add_options --enable-static
+ac_add_options --enable-optimize=-O2
+
+# Use cairo from system
+ac_add_options --enable-system-cairo
+
+# Disable jemalloc
+ac_add_options --disable-jemalloc
+
+# enable libxul
+ac_add_options --enable-libxul
+
+# Disable striping
+ac_add_options --disable-strip
+ac_add_options --disable-install-strip
diff --git a/recipes/mozilla/firefox-3.6/nspr.pc b/recipes/mozilla/firefox-3.6/nspr.pc
new file mode 100644
index 0000000000..b73ffc04f7
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/nspr.pc
@@ -0,0 +1,10 @@
+prefix=/usr
+exec_prefix=/usr
+libdir=/usr/lib
+includedir=/usr/include/firefox-3.6
+
+Name: NSPR
+Description: The Netscape Portable Runtime
+Version: 4.8
+Libs: -L${libdir} -lplds4 -lplc4 -lnspr4 -lpthread -ldl -Wl,-R${libdir}
+Cflags: -I${includedir}
diff --git a/recipes/mozilla/firefox-3.6/plugins-dir.patch b/recipes/mozilla/firefox-3.6/plugins-dir.patch
new file mode 100644
index 0000000000..2c8b8e9bd1
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/plugins-dir.patch
@@ -0,0 +1,16 @@
+Index: mozilla-1.9.1/build/unix/mozilla.in
+===================================================================
+--- mozilla-1.9.1.orig/build/unix/mozilla.in
++++ mozilla-1.9.1/build/unix/mozilla.in
+@@ -52,6 +52,11 @@
+
+ moz_libdir=%MOZAPPDIR%
+
++if test -d /usr/lib/mozilla/plugins; then
++ MOZ_PLUGIN_PATH="${MOZ_PLUGIN_PATH:+"$MOZ_PLUGIN_PATH:"}/usr/lib/mozilla/plugins"
++ export MOZ_PLUGIN_PATH
++fi
++
+ # Use run-mozilla.sh in the current dir if it exists
+ # If not, then start resolving symlinks until we find run-mozilla.sh
+ found=0
diff --git a/recipes/mozilla/firefox-3.6/security-cross.patch b/recipes/mozilla/firefox-3.6/security-cross.patch
new file mode 100644
index 0000000000..b6c32fe52f
--- /dev/null
+++ b/recipes/mozilla/firefox-3.6/security-cross.patch
@@ -0,0 +1,64 @@
+--- /tmp/Linux.mk 2009-11-02 10:26:16.000000000 +0100
++++ mozilla-1.9.1/security/coreconf/Linux.mk 2009-11-02 10:27:04.000000000 +0100
+@@ -52,59 +52,8 @@
+
+ DEFAULT_COMPILER = gcc
+
+-ifeq ($(OS_TEST),ppc64)
+- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
+- CPU_ARCH = ppc
+-ifeq ($(USE_64),1)
+- ARCHFLAG = -m64
+-endif
+-else
+-ifeq ($(OS_TEST),alpha)
+- OS_REL_CFLAGS = -D_ALPHA_ -DLINUX1_2 -D_XOPEN_SOURCE
+- CPU_ARCH = alpha
+-else
+-ifeq ($(OS_TEST),x86_64)
+-ifeq ($(USE_64),1)
+- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
+- CPU_ARCH = x86_64
+-else
+- OS_REL_CFLAGS = -DLINUX1_2 -Di386 -D_XOPEN_SOURCE
+- CPU_ARCH = x86
+- ARCHFLAG = -m32
+-endif
+-else
+-ifeq ($(OS_TEST),sparc64)
+- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
+- CPU_ARCH = sparc
+-else
+-ifeq (,$(filter-out arm% sa110,$(OS_TEST)))
+- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
+- CPU_ARCH = arm
+-else
+-ifeq (,$(filter-out parisc%,$(OS_TEST)))
+- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
+- CPU_ARCH = hppa
+-else
+-ifeq (,$(filter-out i%86,$(OS_TEST)))
+- OS_REL_CFLAGS = -DLINUX1_2 -Di386 -D_XOPEN_SOURCE
+- CPU_ARCH = x86
+-else
+-ifeq ($(OS_TEST),sh4a)
+- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
+- CPU_ARCH = sh4
+-else
+-# $(OS_TEST) == m68k, ppc, ia64, sparc, s390, s390x, mips, sh3, sh4
+- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
+- CPU_ARCH = $(OS_TEST)
+-endif
+-endif
+-endif
+-endif
+-endif
+-endif
+-endif
+-endif
+-
++OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
++CPU_ARCH =
+
+ LIBC_TAG = _glibc
+
diff --git a/recipes/mozilla/firefox.inc b/recipes/mozilla/firefox.inc
index b0e79f96c4..024858a64d 100644
--- a/recipes/mozilla/firefox.inc
+++ b/recipes/mozilla/firefox.inc
@@ -2,7 +2,6 @@ DESCRIPTION ?= "Browser made by mozilla"
DEPENDS += "alsa-lib"
SRC_URI += "file://mozilla-${PN}.png file://mozilla-${PN}.desktop"
-PARALLEL_MAKE = ""
ARM_INSTRUCTION_SET = "arm"
MOZPV ?= "${PV}"
@@ -31,13 +30,6 @@ FILES_${PN}-dbg += " ${libdir}/${PN}-*/.debug \
${bindir}/.debug \
"
-export HOST_LIBIDL_CONFIG = "${STAGING_BINDIR_NATIVE}/libIDL-config-2"
-
-# Due to sysroot we need to sed out references to the target staging when building the native version of xpidl
-# Symptons of the failure include "gthread.h:344: error: size of array 'type name' is negative"
-export HOST_LIBIDL_CFLAGS = "`${HOST_LIBIDL_CONFIG} --cflags | sed -e s:${STAGING_DIR_TARGET}:${STAGING_DIR_NATIVE}:g`"
-
-
do_install() {
oe_runmake DESTDIR="${D}" destdir="${D}" install
install -d ${D}${datadir}/applications
@@ -56,6 +48,15 @@ do_install() {
grep -Rl app.update.enabled ${D}${libdir}/${PN}-*/ \
| grep '.js$' \
| xargs -n 1 sed -i 's/\(pref("app.update.enabled",\s*\)true)/\1false)/g'
+
+ for pc in ${WORKDIR}/*.pc ; do
+ sed -i s:3.5.2:${PV}:g $pc
+ done
+
+ install -d ${D}${libdir}/pkgconfig
+ install -m 0644 ${WORKDIR}/firefox-plugin.pc ${D}${libdir}/pkgconfig
+ install -m 0644 ${WORKDIR}/firefox-xpcom.pc ${D}${libdir}/pkgconfig
+ install -m 0644 ${WORKDIR}/nspr.pc ${D}${libdir}/pkgconfig
}
pkg_postinst_${PN}() {
@@ -63,10 +64,6 @@ pkg_postinst_${PN}() {
chmod -R a+w ${libdir}/${PN}* ||true
}
-do_stage() {
- autotools_stage_all
-}
-
# Force feed mozilla our ldflags
TARGET_CC_ARCH += " ${LDFLAGS} "
diff --git a/recipes/mozilla/firefox_3.0.1.bb b/recipes/mozilla/firefox_3.0.1.bb
index ee60fc026e..72c72bd13f 100644
--- a/recipes/mozilla/firefox_3.0.1.bb
+++ b/recipes/mozilla/firefox_3.0.1.bb
@@ -23,7 +23,6 @@ S = "${WORKDIR}/mozilla"
inherit mozilla
require firefox.inc
-export HOST_LIBIDL_CONFIG = "${STAGING_BINDIR_NATIVE}/libIDL-config-2"
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
do_compile_prepend() {
diff --git a/recipes/mozilla/firefox_3.0.4.bb b/recipes/mozilla/firefox_3.0.4.bb
index 7cfebfc554..f783000d24 100644
--- a/recipes/mozilla/firefox_3.0.4.bb
+++ b/recipes/mozilla/firefox_3.0.4.bb
@@ -23,7 +23,6 @@ DEFAULT_PREFERENCE = "-1"
inherit mozilla
require firefox.inc
-export HOST_LIBIDL_CONFIG = "${STAGING_BINDIR_NATIVE}/libIDL-config-2"
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
do_compile_prepend() {
diff --git a/recipes/mozilla/firefox_3.0.8.bb b/recipes/mozilla/firefox_3.0.8.bb
index 541a542c92..5ce6f95340 100644
--- a/recipes/mozilla/firefox_3.0.8.bb
+++ b/recipes/mozilla/firefox_3.0.8.bb
@@ -23,7 +23,6 @@ S = "${WORKDIR}/mozilla"
inherit mozilla
require firefox.inc
-export HOST_LIBIDL_CONFIG = "${STAGING_BINDIR_NATIVE}/libIDL-config-2"
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
do_compile_prepend() {
diff --git a/recipes/mozilla/firefox_3.1b1.bb b/recipes/mozilla/firefox_3.1b1.bb
index 7a41491ea7..54113f4985 100644
--- a/recipes/mozilla/firefox_3.1b1.bb
+++ b/recipes/mozilla/firefox_3.1b1.bb
@@ -17,7 +17,6 @@ DEFAULT_PREFERENCE = "-1"
inherit mozilla
require firefox.inc
-export HOST_LIBIDL_CONFIG = "${STAGING_BINDIR_NATIVE}/libIDL-config-2"
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
do_configure_prepend() {
diff --git a/recipes/mozilla/firefox_3.1b2.bb b/recipes/mozilla/firefox_3.1b2.bb
index 2d661ea5f9..7be8baa32e 100644
--- a/recipes/mozilla/firefox_3.1b2.bb
+++ b/recipes/mozilla/firefox_3.1b2.bb
@@ -16,7 +16,6 @@ DEFAULT_PREFERENCE = "-1"
inherit mozilla
require firefox.inc
-export HOST_LIBIDL_CONFIG = "${STAGING_BINDIR_NATIVE}/libIDL-config-2"
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
do_configure_prepend() {
diff --git a/recipes/mozilla/firefox_3.5.2.bb b/recipes/mozilla/firefox_3.5.2.bb
index 3d940d7af5..b6e265b7d3 100644
--- a/recipes/mozilla/firefox_3.5.2.bb
+++ b/recipes/mozilla/firefox_3.5.2.bb
@@ -1,5 +1,6 @@
-DEPENDS += "cairo sqlite3"
-PR = "r3"
+DEPENDS += "cairo sqlite3 libnotify"
+
+PR = "r4"
SRC_URI = "ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${PV}/source/firefox-${PV}-source.tar.bz2 \
file://jsautocfg.h \
@@ -25,7 +26,6 @@ require firefox.inc
EXTRA_OECONF += " --enable-official-branding "
-export HOST_LIBIDL_CONFIG = "${STAGING_BINDIR_NATIVE}/libIDL-config-2"
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
do_compile_prepend() {
diff --git a/recipes/mozilla/firefox_3.5.4.bb b/recipes/mozilla/firefox_3.5.4.bb
index 8ba6ba15db..b1b2af372a 100644
--- a/recipes/mozilla/firefox_3.5.4.bb
+++ b/recipes/mozilla/firefox_3.5.4.bb
@@ -1,6 +1,6 @@
-DEPENDS += "cairo sqlite3"
+DEPENDS += "cairo sqlite3 libnotify"
-PR = "r2"
+PR = "r3"
SRC_URI = "ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${PV}/source/firefox-${PV}.source.tar.bz2 \
file://jsautocfg.h \
@@ -26,7 +26,6 @@ require firefox.inc
EXTRA_OECONF += " --enable-official-branding "
-export HOST_LIBIDL_CONFIG = "${STAGING_BINDIR_NATIVE}/libIDL-config-2"
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
do_compile_prepend() {
diff --git a/recipes/mozilla/firefox_3.5.5.bb b/recipes/mozilla/firefox_3.5.5.bb
index da54872046..ea3d4fc4b5 100644
--- a/recipes/mozilla/firefox_3.5.5.bb
+++ b/recipes/mozilla/firefox_3.5.5.bb
@@ -1,6 +1,6 @@
-DEPENDS += "cairo sqlite3"
+DEPENDS += "cairo sqlite3 libnotify"
-PR = "r3"
+PR = "r4"
SRC_URI = "ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${PV}/source/firefox-${PV}.source.tar.bz2 \
file://jsautocfg.h \
@@ -26,7 +26,6 @@ require firefox.inc
EXTRA_OECONF += " --enable-official-branding --disable-crashreporter"
-export HOST_LIBIDL_CONFIG = "${STAGING_BINDIR_NATIVE}/libIDL-config-2"
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
do_compile_prepend() {
diff --git a/recipes/mozilla/firefox_3.5b4.bb b/recipes/mozilla/firefox_3.5b4.bb
index 4a12329231..0418c3b257 100644
--- a/recipes/mozilla/firefox_3.5b4.bb
+++ b/recipes/mozilla/firefox_3.5b4.bb
@@ -1,8 +1,8 @@
-DEPENDS += "cairo sqlite"
+DEPENDS += "cairo sqlite libnotify"
PV = "3.0.1+3.5b4"
MOZPV = "3.5b4"
-PR = "r2"
+PR = "r3"
SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/${MOZPV}-candidates/build1/source/firefox-${MOZPV}-source.tar.bz2 \
file://jsautocfg.h \
@@ -16,7 +16,6 @@ DEFAULT_PREFERENCE = "-10"
inherit mozilla
require firefox.inc
-export HOST_LIBIDL_CONFIG = "${STAGING_BINDIR_NATIVE}/libIDL-config-2"
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
do_configure_prepend() {
diff --git a/recipes/mozilla/firefox_3.6.bb b/recipes/mozilla/firefox_3.6.bb
new file mode 100644
index 0000000000..573154f3aa
--- /dev/null
+++ b/recipes/mozilla/firefox_3.6.bb
@@ -0,0 +1,38 @@
+DEPENDS += "cairo sqlite3 libnotify"
+
+PR = "r4"
+
+# The .pc files below have "3.6" hardcoded, fix that before using them in a newer FF version!
+SRC_URI = "ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${PV}/source/firefox-${PV}.source.tar.bz2;name=archive \
+ file://jsautocfg.h \
+ file://security-cross.patch;patch=1 \
+ file://Bug339782.additional.fix.diff;patch=1 \
+ file://Bug385583.nspr.jmp_buf.eabi.diff;patch=1 \
+ file://Bug405992.atomic.nspr.diff;patch=1 \
+ file://jemalloc-tls.patch;patch=1 \
+ file://0001-Remove-Werror-from-build.patch;patch=1 \
+ file://0002-Fix-security-cross-compile-cpu-detection-error.patch;patch=1 \
+ file://plugins-dir.patch;patch=1 \
+ file://firefox-plugin.pc \
+ file://firefox-xpcom.pc \
+ file://nspr.pc \
+"
+
+SRC_URI[archive.md5sum] = "458051557ff49e6a352c1d56eee5782a"
+SRC_URI[archive.sha256sum] = "8d4f12fff7bc361d83e6b486f9ec4264c60114ed86c805e1221b3d30efec0a4b"
+
+S = "${WORKDIR}/mozilla-1.9.2"
+
+inherit mozilla
+require firefox.inc
+
+EXTRA_OECONF += " --enable-official-branding --disable-crashreporter"
+
+
+FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
+
+do_compile_prepend() {
+ cp ${WORKDIR}/jsautocfg.h ${S}/js/src/
+ sed -i "s|CPU_ARCH =|CPU_ARCH = ${TARGET_ARCH}|" security/coreconf/Linux.mk
+}
+
diff --git a/recipes/mozilla/firefox_hg.bb b/recipes/mozilla/firefox_hg.bb
index 17a46ee1c8..37bb2608bd 100644
--- a/recipes/mozilla/firefox_hg.bb
+++ b/recipes/mozilla/firefox_hg.bb
@@ -17,8 +17,6 @@ S = "${WORKDIR}/mozilla-central"
inherit mozilla
require firefox.inc
-PARALLEL_MAKE = ""
-export HOST_LIBIDL_CONFIG = "${STAGING_BINDIR_NATIVE}/libIDL-config-2"
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
export LIBXUL_DIST="${S}/objdir/xulrunner/dist/"
diff --git a/recipes/mplayer/files/yuv.S b/recipes/mplayer/files/yuv.S
index 3eaf284a61..1cd2c1d936 100644
--- a/recipes/mplayer/files/yuv.S
+++ b/recipes/mplayer/files/yuv.S
@@ -22,6 +22,11 @@
DEALINGS IN THE SOFTWARE.
*/
+ .macro mov32 rd, val
+ movw \rd, #:lower16:\val
+ movt \rd, #:upper16:\val
+ .endm
+
.fpu neon
.text
@@ -49,8 +54,9 @@
yuv420_to_yuv422:
push {r4-r11,lr}
add r4, sp, #36
+.Ldo_conv:
ldm r4, {r4-r8}
- dmb
+ push {r4}
1:
mov tu, u
mov tv, v
@@ -102,7 +108,7 @@ yuv420_to_yuv422:
add v, tv, #8
bgt 1b
- ldr w, [sp, #36]
+ ldr w, [sp]
subs h, h, #16
add yuv, yuv, dw, lsl #4
sub yuv, yuv, w, lsl #1
@@ -114,6 +120,51 @@ yuv420_to_yuv422:
sub v, v, w, asr #1
bgt 1b
- pop {r4-r11,pc}
+ pop {r3-r11,pc}
+ .endfunc
+
+ .func neon_open
+neon_open:
+ push {r4-r8,lr}
+ ldrd r4, r5, [r0, #16]
+ ldrd r6, r7, [r0, #24]
+ lsl r8, r4, #1
+ mov32 r0, conv_params
+ stm r0, {r4-r8}
+ mov r0, #0
+ pop {r4-r8,pc}
+ .endfunc
+
+ .func neon_convert
+neon_convert:
+ push {r4-r11,lr}
+ ldr r0, [r0]
+ mov32 r4, conv_params
+ ldm r1, {r1-r3}
+ b .Ldo_conv
+ .endfunc
+
+ .func neon_nop
+neon_nop:
+ bx lr
.endfunc
+ .section .bss
+conv_params:
+ .skip 5*4
+ .size conv_params, . - conv_params
+
+ .section .rodata
+.Lname: .asciz "neon"
+ofb_pixconv_neon:
+ .word .Lname
+ .word 0 @ flags
+ .word neon_open
+ .word neon_convert
+ .word neon_nop @ finish
+ .word neon_nop @ close
+ .size ofb_pixconv_neon, . - ofb_pixconv_neon
+
+ .section .ofb_pixconv, "a"
+ofb_pixconv_neon_p:
+ .word ofb_pixconv_neon
diff --git a/recipes/mplayer/mplayer_git.bb b/recipes/mplayer/mplayer_git.bb
index f3a5a582a7..c7696100d8 100644
--- a/recipes/mplayer/mplayer_git.bb
+++ b/recipes/mplayer/mplayer_git.bb
@@ -7,16 +7,10 @@ DEPENDS = "live555 libdvdread libtheora virtual/libsdl ffmpeg xsp zlib libpng jp
RDEPENDS = "mplayer-common"
LICENSE = "GPL"
-SRC_URI = "git://repo.or.cz/mplayer.git;protocol=git;branch=master"
-SRC_URI_om-gta02 = "git://repo.or.cz/mplayer/glamo.git;protocol=git;branch=master \
+SRC_URI = "git://repo.or.cz/mplayer/glamo.git;protocol=git;branch=master \
file://makefile-nostrip-svn.patch;patch=1 \
"
-SRC_URI_append = " \
- file://pld-onlyarm5-svn.patch;patch=1 \
- file://makefile-nostrip-svn.patch;patch=1 \
- "
-
SRC_URI_append_armv7a = " \
file://omapfb.patch;patch=1 \
file://vo_omapfb.c \
@@ -29,8 +23,7 @@ SRC_URI_append_armv7a = " \
# ie. for all armv4 machines.
SRC_URI_append_collie = "file://disable-executable-stack-test.patch;patch=1"
-SRCREV_om-gta02 = "71807fcbb1eb35c337ef03f4f62d181963173550"
-SRCREV = "e5bcd70bc5b0557635ae51c7093f0e887493d4ba"
+SRCREV = "5b7a3c944e39b8dad17eeae2c3bdc038662f9352"
PACKAGE_ARCH_collie = "collie"
PACKAGE_ARCH_c7x0 = "c7x0"
@@ -41,10 +34,10 @@ ARM_INSTRUCTION_SET = "ARM"
RCONFLICTS_${PN} = "mplayer-atty"
RREPLACES_${PN} = "mplayer-atty"
-PV = "0.0+1.0rc3+gitr${SRCREV}"
+PV = "0.0+1.0rc4+gitr${SRCREV}"
PR = "r0"
DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_om-gta02 = "1"
+DEFAULT_PREFERENCE_shr = "2"
PARALLEL_MAKE = ""
@@ -137,7 +130,6 @@ EXTRA_OECONF = " \
--disable-dxr2 \
--disable-dxr3 \
--disable-dvb \
- --disable-dvbhead \
--disable-mga \
--disable-xmga \
--enable-xv \
diff --git a/recipes/mplayer/mplayer_svn.bb b/recipes/mplayer/mplayer_svn.bb
index 60c9422a1c..dd94767167 100644
--- a/recipes/mplayer/mplayer_svn.bb
+++ b/recipes/mplayer/mplayer_svn.bb
@@ -39,9 +39,10 @@ RCONFLICTS_${PN} = "mplayer-atty"
RREPLACES_${PN} = "mplayer-atty"
PV = "0.0+1.0rc3+svnr${SRCPV}"
-PR = "r17"
+PR = "r19"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_angstrom = "1"
+DEFAULT_PREFERENCE_shr = "1"
PARALLEL_MAKE = ""
diff --git a/recipes/msmtp/msmtp_1.4.10.bb b/recipes/msmtp/msmtp_1.4.10.bb
deleted file mode 100644
index 6fe33c707a..0000000000
--- a/recipes/msmtp/msmtp_1.4.10.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-DESCRIPTION = "A sendmail replacement for use in MTAs like mutt"
-HOMEPAGE = "http://msmtp.sourceforge.net/"
-SECTION = "console/network"
-LICENSE = "GPLv2"
-DEPENDS = "zlib gnutls"
-PR = "r0"
-SRC_URI = "${SOURCEFORGE_MIRROR}/msmtp/msmtp-${PV}.tar.bz2"
-
-inherit autotools
-
diff --git a/recipes/msmtp/msmtp_1.4.19.bb b/recipes/msmtp/msmtp_1.4.19.bb
new file mode 100644
index 0000000000..b45160a3f4
--- /dev/null
+++ b/recipes/msmtp/msmtp_1.4.19.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "A sendmail replacement for use in MTAs like mutt"
+HOMEPAGE = "http://msmtp.sourceforge.net/"
+SECTION = "console/network"
+LICENSE = "GPLv2"
+DEPENDS = "zlib gnutls"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/msmtp/msmtp-${PV}.tar.bz2;name=u1"
+
+inherit autotools
+
+SRC_URI[u1.md5sum] = "f0afdc943bf7c8a3a3bf3fe1a73072c4"
+SRC_URI[u1.sha256sum] = "d6bf3f6f796041fc7d6653c022cc696238fdf8b2d538c4b2cd6c0aae5f056c66"
diff --git a/recipes/mtd/mtd-utils-native.inc b/recipes/mtd/mtd-utils-native.inc
index 28696b46d5..aaef4ac666 100644
--- a/recipes/mtd/mtd-utils-native.inc
+++ b/recipes/mtd/mtd-utils-native.inc
@@ -2,12 +2,4 @@ inherit native
DEPENDS = "zlib-native lzo-native"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/mtd-utils"
-do_stage () {
- install -d ${STAGING_INCDIR}/mtd
- for f in ${S}/include/mtd/*.h; do
- install -m 0644 $f ${STAGING_INCDIR}/mtd/
- done
- for binary in ${mtd_utils}; do
- install -m 0755 $binary ${STAGING_BINDIR}
- done
-}
+NATIVE_INSTALL_WORKS = "1"
diff --git a/recipes/mtd/mtd-utils-native_1.3.1.bb b/recipes/mtd/mtd-utils-native_1.3.1.bb
new file mode 100644
index 0000000000..85692a0e91
--- /dev/null
+++ b/recipes/mtd/mtd-utils-native_1.3.1.bb
@@ -0,0 +1,7 @@
+# Doesn't build for everyone, errors range from missing includes to linking errors
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_angstrom = "1"
+
+require mtd-utils_${PV}.bb
+require mtd-utils-native.inc
+DEPENDS += "e2fsprogs-libs-native"
diff --git a/recipes/mtd/mtd-utils.inc b/recipes/mtd/mtd-utils.inc
index 813a09fb13..319fd9a7bc 100644
--- a/recipes/mtd/mtd-utils.inc
+++ b/recipes/mtd/mtd-utils.inc
@@ -11,18 +11,6 @@ S = "${WORKDIR}/mtd-utils-${PV}"
EXTRA_OEMAKE = "'CC=${CC}' 'CFLAGS=${CFLAGS} -I${S}/include -DWITHOUT_XATTR'"
-do_stage () {
- install -d ${STAGING_INCDIR}/mtd
- for f in ${S}/include/mtd/*.h; do
- install -m 0644 $f ${STAGING_INCDIR}/mtd/
- done
- for binary in ${mtd_utils}; do
- if [ -f $binary ]; then
- install -m 0755 $binary ${STAGING_BINDIR}
- fi
- done
-}
-
do_install () {
install -d ${D}${bindir}
install -d ${D}${includedir}/mtd
@@ -79,7 +67,19 @@ mtd_utils = " docfdisk \
ubi-utils/new-utils/ubinfo \
ubi-utils/new-utils/ubinize \
ubi-utils/new-utils/ubirmvol \
- ubi-utils/new-utils/ubiupdatevol"
+ ubi-utils/new-utils/ubirsvol \
+ ubi-utils/new-utils/ubiupdatevol \
+ ubi-utils/ubiattach \
+ ubi-utils/ubicrc32 \
+ ubi-utils/ubidetach \
+ ubi-utils/ubiformat \
+ ubi-utils/ubimkvol \
+ ubi-utils/ubinfo \
+ ubi-utils/ubinize \
+ ubi-utils/ubirmvol \
+ ubi-utils/ubirsvol \
+ ubi-utils/ubiupdatevol \
+"
PACKAGES =+ "mkfs-jffs mkfs-jffs2 mkfs-ubifs"
FILES_mkfs-jffs = "${bindir}/mkfs.jffs"
diff --git a/recipes/mtd/mtd-utils_1.3.1.bb b/recipes/mtd/mtd-utils_1.3.1.bb
new file mode 100644
index 0000000000..ee7f96298f
--- /dev/null
+++ b/recipes/mtd/mtd-utils_1.3.1.bb
@@ -0,0 +1,27 @@
+require mtd-utils.inc
+
+DEPENDS += "e2fsprogs-libs"
+
+PARALLEL_MAKE = ""
+ARM_INSTRUCTION_SET = "arm"
+
+# This is the default package, thus we lock to a specific git version so
+# upstream changes will not break builds.
+
+TAG = "v${PV}"
+
+SRC_URI = "git://git.infradead.org/mtd-utils.git;protocol=git;tag=${TAG} \
+ file://add-exclusion-to-mkfs-jffs2-git-2.patch;patch=1 \
+ file://fix-ignoreerrors-git.patch;patch=1 \
+ file://lzo_1x-git.patch;patch=1"
+
+S = "${WORKDIR}/git/"
+
+do_configure_prepend() {
+ for i in $(find . -name "Makefile") ; do
+ sed -i -e s:lzo2:lzo:g $i
+ done
+ if [ -e mkfs.ubifs/compr.c ]; then
+ sed -i -e s:lzo/::g mkfs.ubifs/compr.c
+ fi
+}
diff --git a/recipes/musicbrainz/files/libmusicbrainz-3.0.2-gcc-4.4-fix.patch b/recipes/musicbrainz/files/libmusicbrainz-3.0.2-gcc-4.4-fix.patch
new file mode 100644
index 0000000000..9500340479
--- /dev/null
+++ b/recipes/musicbrainz/files/libmusicbrainz-3.0.2-gcc-4.4-fix.patch
@@ -0,0 +1,12 @@
+upstream: http://bugs.musicbrainz.org/ticket/4301
+
+--- libmusicbrainz-3.0.2/src/utils_private.cpp.orig 2008-07-02 08:57:10.000000000 +0200
++++ libmusicbrainz-3.0.2/src/utils_private.cpp 2010-03-14 22:50:02.000000000 +0100
+@@ -20,6 +20,7 @@
+ * $Id: utils_private.cpp 9934 2008-07-02 06:57:10Z luks $
+ */
+
++#include <cstdio>
+ #include <cstdlib>
+ #include <cstring>
+ #include <cstdarg>
diff --git a/recipes/musicbrainz/libmusicbrainz_3.0.2.bb b/recipes/musicbrainz/libmusicbrainz_3.0.2.bb
index bd54419686..f7231a25b7 100644
--- a/recipes/musicbrainz/libmusicbrainz_3.0.2.bb
+++ b/recipes/musicbrainz/libmusicbrainz_3.0.2.bb
@@ -1 +1,6 @@
require ${PN}.inc
+
+PR = "r1"
+
+SRC_URI_append = " file://libmusicbrainz-3.0.2-gcc-4.4-fix.patch;patch=1"
+
diff --git a/recipes/mutt/mutt-1.5.19/529838-gnutls-autoconf.patch b/recipes/mutt/mutt-1.5.19/529838-gnutls-autoconf.patch
new file mode 100644
index 0000000000..75d23b62fa
--- /dev/null
+++ b/recipes/mutt/mutt-1.5.19/529838-gnutls-autoconf.patch
@@ -0,0 +1,20 @@
+More details about this patch are on http://bugs.debian.org/529838
+The bug and the patch were forwarded to upstream, please see
+http://bugs.mutt.org/3239
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -690,10 +690,10 @@
+ then
+ AC_MSG_WARN([SSL support is only useful with POP, IMAP or SMTP support])
+ else
+- MUTT_AM_PATH_GNUTLS([$gnutls_prefix],
++ PKG_CHECK_MODULES(GNUTLS, gnutls,
+ [dnl GNUTLS found
+- CPPFLAGS="$CPPFLAGS $LIBGNUTLS_CFLAGS"
+- MUTTLIBS="$MUTTLIBS $LIBGNUTLS_LIBS"
++ CPPFLAGS="$CPPFLAGS $GNUTLS_CFLAGS"
++ MUTTLIBS="$MUTTLIBS $GNUTLS_LIBS"
+
+ AC_DEFINE(USE_SSL,1,[ Define if you want support for SSL. ])
+ AC_DEFINE(USE_SSL_GNUTLS,1,[ Define if you want support for SSL via GNUTLS. ])
diff --git a/recipes/mutt/mutt_1.5.19.bb b/recipes/mutt/mutt_1.5.19.bb
index 125e41b256..1b17f7ffb3 100644
--- a/recipes/mutt/mutt_1.5.19.bb
+++ b/recipes/mutt/mutt_1.5.19.bb
@@ -7,10 +7,11 @@ bindings, keyboard macros, mail threading, regular expression \
searches, and a powerful pattern matching language for selecting \
groups of messages."
LICENSE = "GPL"
-PR = "r0"
+PR = "r1"
SRC_URI = "ftp://ftp.mutt.org/mutt/devel/mutt-${PV}.tar.gz \
file://patch-1.5.19.sidebar.20090522.txt;patch=1 \
- file://makedoc.patch;patch=1"
+ file://529838-gnutls-autoconf.patch;patch=1 \
+ file://makedoc.patch;patch=1"
S = "${WORKDIR}/mutt-1.5.19"
diff --git a/recipes/mythtv/files/prefix-etc.patch b/recipes/mythtv/files/prefix-etc.patch
deleted file mode 100644
index fd6aaf9179..0000000000
--- a/recipes/mythtv/files/prefix-etc.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- mythtv/libs/libmyth/oldsettings.cpp.old 2004-09-24 22:09:11.000000000 +0100
-+++ mythtv/libs/libmyth/oldsettings.cpp 2004-09-24 22:09:38.000000000 +0100
-@@ -116,7 +116,7 @@
- if (ReadSettings(setname))
- result = true;
-
-- setname = prefix + "/etc/mythtv/" + filename;
-+ setname = "/etc/mythtv/" + filename;
- if (ReadSettings(setname))
- result = true;
-
diff --git a/recipes/mythtv/mythplugins/MythBackend.php.patch b/recipes/mythtv/mythplugins/MythBackend.php.patch
deleted file mode 100644
index 95cf86e49f..0000000000
--- a/recipes/mythtv/mythplugins/MythBackend.php.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: mythplugins-0.22rc1/mythweb/classes/MythBackend.php
-===================================================================
---- mythplugins-0.22rc1.orig/mythweb/classes/MythBackend.php
-+++ mythplugins-0.22rc1/mythweb/classes/MythBackend.php
-@@ -111,7 +111,7 @@ class MythBackend {
- }
-
- public function setTimezone() {
-- if (!is_string($_SESSION['backend']['timezone']['value']) || $_SESSION['backend']['timezone']['last_check_time'] - time() > 60*60*24) {
-+ if (!is_string($_SESSION['backend']['timezone']['value']) || time() - $_SESSION['backend']['timezone']['last_check_time'] () > 60*60*24) {
- $response = $this->sendCommand('QUERY_TIME_ZONE');
- $timezone = str_replace(' ', '_', $response[0]);
- $_SESSION['backend']['timezone']['value'] = $timezone;
diff --git a/recipes/mythtv/mythplugins_0.22+fixes.bb b/recipes/mythtv/mythplugins_0.22+fixes.bb
new file mode 100644
index 0000000000..eaf4fff132
--- /dev/null
+++ b/recipes/mythtv/mythplugins_0.22+fixes.bb
@@ -0,0 +1,330 @@
+DEPENDS = "flac taglib mythtv libvorbis libexif libvisual libsdl-x11 libcdaudio cdparanoia"
+RDEPENDS_${PN} = "mytharchive mythbrowser mythflix mythgallery mythgame \
+ mythmusic mythmovies mythnews mythvideo mythweather mythzoneminder"
+RRECOMMENDS_${PN} = "mythweb_lighttpd"
+
+# the apache variant does not work yet, too many issues with apache+php+mysql"
+DEPENDS_mythweb_apache = "mythweb"
+RDEPENDS_mythweb_apache = "apache2"
+
+DEPENDS_mythweb_lighttpd = "mythweb"
+RDEPENDS_mythweb_lighttpd = "lighttpd lighttpd-module-cgi lighttpd-module-fastcgi \
+ lighttpd-module-rewrite php-cgi lighttpd-module-auth"
+
+PR = "svnr${SRCPV}+r0"
+PV = "0.22"
+
+SRCREV = "23710"
+SRC_URI = "svn://svn.mythtv.org/svn/branches/release-0-22-fixes;module=mythplugins;proto=http \
+ file://sysroot.patch;patch=1 \
+ file://mythplugins_wo_qtopengl.diff;patch=1 \
+ file://configure.patch;patch=1 \
+ file://mytharchive.pro.patch;patch=1 \
+ "
+
+
+QMAKE_PROFILES = "mythplugins.pro"
+
+S = "${WORKDIR}/mythplugins"
+
+inherit qmake2 qt4x11
+
+EXTRA_OECONF = " \
+ --cross-prefix=${TARGET_PREFIX} \
+ --sysroot=${STAGING_DIR_HOST} \
+ --prefix=${prefix} \
+ --with-libdir-name=${STAGING_LIBDIR} \
+ --disable-opengl \
+ \
+ --extra-cflags="${TARGET_CFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \
+ --extra-cxxflags="${TARGET_CXXFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \
+ --extra-ldflags="${TARGET_LDFLAGS}" \
+"
+
+do_configure() {
+ ${S}/configure --qmake=qmake2 ${EXTRA_OECONF}
+}
+
+do_install_mythweb_apache () {
+ oe_runmake install INSTALL_ROOT="${D}"
+ install -d ${D}${datadir}/apache2
+ install -d ${D}${datadir}/apache2/htdocs
+ install -d ${D}/etc/apache2
+ install -d ${D}/etc/apache2/extra
+ cp -r ${S}/mythweb/* ${D}${datadir}/apache2/htdocs/
+ cp -r ${S}/mythweb/mythweb.conf.apache ${D}/etc/apache2/extra/mythweb.conf
+ sed -i -e s:/var/www/html:/usr/share/apache2/htdocs:g ${D}/etc/apache2/extra/mythweb.conf
+}
+
+do_install_mythweb_lighttpd () {
+ oe_runmake install INSTALL_ROOT="${D}"
+ install -d ${D}/www
+ install -d ${D}/www/pages
+ cp -r ${S}/mythweb/* ${D}www/pages/
+ cp -r ${S}/mythweb/mythweb.conf.lighttpd ${D}/etc/mythweb.conf
+ sed -i -e s:/var/www/html:/www/pages:g ${D}/etc/mythweb.conf
+}
+
+pkg_postinst_mythweb_apache () {
+ chgrp -R apache /usr/share/apache2/htdocs/data
+ chmod g+rw /usr/share/apache2/htdocs/data
+ grep mythweb.conf /etc/apache2/httpd.conf || \
+ echo "Include /etc/apache2/extra/mythweb.conf" >>/etc/apache2/httpd.conf
+}
+
+pkg_postinst_mythweb_lighttpd () {
+ chgrp -R www-data /usr/share/apache2/htdocs/data
+ chmod g+rw /var/www/pages
+ grep mythweb.conf /etc/lighttpd.conf || \
+ echo "Include /etc/mythweb.conf" >>/etc/lighttpd.conf
+}
+
+PACKAGES =+ " \
+ mythweb_apache mythweb_lighttpd \
+ mytharchive mytharchive-dbg \
+ mythbrowser mythbrowser-dbg \
+ mythflix mythflix-dbg \
+ mythgallery mythgallery-dbg \
+ mythgame mythgame-dbg \
+ mythmovies mythmovies-dbg \
+ mythmusic mythmusic-dbg \
+ mythnews mythnews-dbg \
+ mythvideo mythvideo-dbg \
+ mythweather mythweather-dbg \
+ mythzoneminder mythzoneminder-dbg"
+
+FILES_mythweb_apache = "${datadir}/apache2/htdocs \
+ /etc/apache2/extra/mythweb.conf"
+
+FILES_mythweb_lighttpd = "${datadir}/www/pages \
+ /etc/mythweb.conf"
+
+FILES_mytharchive = "${libdir}/mythtv/plugins/libmytharchive.so \
+ ${bindir}/mytharchivehelper \
+ ${datadir}/mythtv/i18n/mytharchive* \
+ ${datadir}/mythtv/mytharchive/* \
+ ${datadir}/mythtv/archiveformat.xml \
+ ${datadir}/mythtv/archivemenu.xml \
+ ${datadir}/mythtv/archiveutils.xml \
+ ${datadir}/mythtv/themes/default/mytharchive-ui.xml \
+ ${datadir}/mythtv/themes/default/mythburn-ui.xml \
+ ${datadir}/mythtv/themes/default/mythnative-ui.xml \
+ ${datadir}/mythtv/themes/default/ma_*.png \
+ ${datadir}/mythtv/themes/default/mb_progressbar_background.png \
+ ${datadir}/mythtv/themes/default/mb_progressbar_fill.png \
+ ${datadir}/mythtv/themes/default-wide/mytharchive-ui.xml \
+ ${datadir}/mythtv/themes/default-wide/mythburn-ui.xml \
+ ${datadir}/mythtv/themes/default-wide/mythnative-ui.xml \
+ "
+FILES_mytharchive-dbg = "${bindir}/.debug/mytharchivehelper \
+ ${libdir}/mythtv/plugins/.debug/libmytharchive.so"
+
+FILES_mythbrowser = "${libdir}/mythtv/plugins/libmythbrowser.so \
+ ${bindir}/mythbrowser \
+ ${datadir}/mythtv/i18n/mythbrowser* \
+ ${datadir}/mythtv/themes/default/browser-ui.xml \
+ ${datadir}/mythtv/themes/default-wide/browser-ui.xml \
+ "
+FILES_mythbrowser-dbg = "${libdir}/mythtv/plugins/.debug/libmythbrowser.so"
+
+FILES_mythflix = "${libdir}/mythtv/plugins/libmythflix.so \
+ ${datadir}/mythtv/i18n/mythflix* \
+ ${datadir}/mythtv/mythflix/* \
+ ${datadir}/mythtv/netflix_menu.xml \
+ ${datadir}/mythtv/themes/default/mythflix_background.png \
+ ${datadir}/mythtv/themes/default/netflix-ui.xml \
+ ${datadir}/mythtv/themes/default-wide/netflix-ui.xml \
+ ${datadir}/mythtv/themes/default/title_netflix.png \
+ ${datadir}/mythtv/themes/default-wide/netflix-bg.png \
+ "
+FILES_mythflix-dbg = "${libdir}/mythtv/plugins/.debug/libmythflix.so"
+
+FILES_mythgallery = "${libdir}/mythtv/plugins/libmythgallery.so \
+ ${datadir}/mythtv/i18n/mythgallery* \
+ ${datadir}/mythtv/themes/default/gallery*.png \
+ ${datadir}/mythtv/themes/default/gallery-ui.xml \
+ ${datadir}/mythtv/themes/default-wide/gallery-ui.xml \
+ "
+FILES_mythgallery-dbg = "${libdir}/mythtv/plugins/.debug/libmythgallery.so"
+
+FILES_mythgame = "${libdir}/mythtv/plugins/libmythgame.so \
+ ${datadir}/mythtv/i18n/mythgame* \
+ ${datadir}/mythtv/game_settings.xml \
+ ${datadir}/mythtv/themes/default/game-ui.xml \
+ ${datadir}/mythtv/themes/default-wide/game-ui.xml \
+ "
+FILES_mythgame-dbg = "${libdir}/mythtv/plugins/.debug/libmythgame.so"
+
+FILES_mythmovies = "${libdir}/mythtv/plugins/libmythmovies.so \
+ ${bindir}/ignyte \
+ ${datadir}/mythtv/mythmovies/* \
+ ${datadir}/mythtv/i18n/mythmovies* \
+ ${datadir}/mythtv/themes/default/movies-ui.xml \
+ ${datadir}/mythtv/themes/default-wide/movies-ui.xml \
+ "
+FILES_mythmovies-dbg = "${bindir}/.debug/ignyte \
+ ${libdir}/mythtv/plugins/.debug/libmythmovies.so"
+
+FILES_mythmusic = "${libdir}/mythtv/plugins/libmythmusic.so \
+ ${datadir}/mythtv/mythmusic/* \
+ ${datadir}/mythtv/i18n/mythmusic* \
+ ${datadir}/mythtv/music_settings.xml \
+ ${datadir}/mythtv/musicmenu.xml \
+ ${datadir}/mythtv/themes/default/selectionbar.png \
+ ${datadir}/mythtv/themes/default/mm_browser_back_reg.png \
+ ${datadir}/mythtv/themes/default/music-sel-bg.png \
+ ${datadir}/mythtv/themes/default/mm_rip_banner.png \
+ ${datadir}/mythtv/themes/default/mm_prev_on.png \
+ ${datadir}/mythtv/themes/default/next_button_off.png \
+ ${datadir}/mythtv/themes/default/mm_next_pushed.png \
+ ${datadir}/mythtv/themes/default/stop_button_pushed.png \
+ ${datadir}/mythtv/themes/default/mm_folder.png \
+ ${datadir}/mythtv/themes/default/mm_left_arrow.png \
+ ${datadir}/mythtv/themes/default/rew_button_on.png \
+ ${datadir}/mythtv/themes/default/next_button_pushed.png \
+ ${datadir}/mythtv/themes/default/mm_trans_background.png \
+ ${datadir}/mythtv/themes/default/prev_button_off.png \
+ ${datadir}/mythtv/themes/default/mm_browser_back_sel.png \
+ ${datadir}/mythtv/themes/default/ff_button_off.png \
+ ${datadir}/mythtv/themes/default/mm_volume_tick.png \
+ ${datadir}/mythtv/themes/default/stop_button_off.png \
+ ${datadir}/mythtv/themes/default/mm_progress-fg.png \
+ ${datadir}/mythtv/themes/default/mm_rip_background.png \
+ ${datadir}/mythtv/themes/default/rew_button_pushed.png \
+ ${datadir}/mythtv/themes/default/mm_next_off.png \
+ ${datadir}/mythtv/themes/default/mm_next_on.png \
+ ${datadir}/mythtv/themes/default/pause_button_pushed.png \
+ ${datadir}/mythtv/themes/default/mm_nothumb.png \
+ ${datadir}/mythtv/themes/default/stop_button_on.png \
+ ${datadir}/mythtv/themes/default/mm_blackhole_border.png \
+ ${datadir}/mythtv/themes/default/mm_prev_pushed.png \
+ ${datadir}/mythtv/themes/default/pause_button_on.png \
+ ${datadir}/mythtv/themes/default/play_button_pushed.png \
+ ${datadir}/mythtv/themes/default/mm_progress_foreground.png \
+ ${datadir}/mythtv/themes/default/pause_button_off.png \
+ ${datadir}/mythtv/themes/default/play_button_off.png \
+ ${datadir}/mythtv/themes/default/mm_progress_background.png \
+ ${datadir}/mythtv/themes/default/mm_up_arrow.png \
+ ${datadir}/mythtv/themes/default/prev_button_on.png \
+ ${datadir}/mythtv/themes/default/mm_volume_background.png \
+ ${datadir}/mythtv/themes/default/ff_button_pushed.png \
+ ${datadir}/mythtv/themes/default/mm_prev_off.png \
+ ${datadir}/mythtv/themes/default/miniplayer_background.png \
+ ${datadir}/mythtv/themes/default/mm_progress-bg.png \
+ ${datadir}/mythtv/themes/default/track_info_background.png \
+ ${datadir}/mythtv/themes/default/mm_waiting.png \
+ ${datadir}/mythtv/themes/default/play_button_on.png \
+ ${datadir}/mythtv/themes/default/prev_button_pushed.png \
+ ${datadir}/mythtv/themes/default/mm_right_arrow.png \
+ ${datadir}/mythtv/themes/default/ff_button_on.png \
+ ${datadir}/mythtv/themes/default/mm_down_arrow.png \
+ ${datadir}/mythtv/themes/default/next_button_on.png \
+ ${datadir}/mythtv/themes/default/mm_rating.png \
+ ${datadir}/mythtv/themes/default/rew_button_off.png \
+ ${datadir}/mythtv/themes/default/mm-titlelines.png \
+ ${datadir}/mythtv/themes/default-wide/music-sel-bg.png \
+ ${datadir}/mythtv/themes/default-wide/mm_blackhole_border.png \
+ ${datadir}/mythtv/themes/default-wide/mm_volume_background.png \
+ ${datadir}/mythtv/themes/default-wide/mm_waiting.png \
+ ${datadir}/mythtv/themes/default-wide/mm-titlelines.png \
+ ${datadir}/mythtv/themes/default/music-ui.xml \
+ ${datadir}/mythtv/themes/default-wide/music-ui.xml \
+ "
+FILES_mythmusic-dbg = "${libdir}/mythtv/plugins/.debug/libmythmusic.so"
+
+FILES_mythnews = "${libdir}/mythtv/plugins/libmythnews.so \
+ ${datadir}/mythtv/mythnews/* \
+ ${datadir}/mythtv/i18n/mythnews* \
+ ${datadir}/mythtv/themes/default/enclosures.png \
+ ${datadir}/mythtv/themes/default/need-download.png \
+ ${datadir}/mythtv/themes/default/podcast.png \
+ ${datadir}/mythtv/themes/default/news-info-bg.png \
+ ${datadir}/mythtv/themes/default/news-ui.xml \
+ ${datadir}/mythtv/themes/default-wide/news-ui.xml \
+ "
+FILES_mythnews-dbg = "${libdir}/mythtv/plugins/.debug/libmythnews.so"
+
+FILES_mythvideo = "${libdir}/mythtv/plugins/libmythvideo.so \
+ ${bindir}/mtd \
+ ${datadir}/mythtv/mythvideo/* \
+ ${datadir}/mythtv/i18n/mythvideo* \
+ ${datadir}/mythtv/themes/default/md_progress_background.png \
+ ${datadir}/mythtv/themes/default/md_rip_banner.png \
+ ${datadir}/mythtv/themes/default/mv_level_none.png \
+ ${datadir}/mythtv/themes/default/mv_browse_background.png \
+ ${datadir}/mythtv/themes/default/mv_itemdetail_popup.png \
+ ${datadir}/mythtv/themes/default/mv_filerequest.png \
+ ${datadir}/mythtv/themes/default/mv_level_high.png \
+ ${datadir}/mythtv/themes/default/mv_results_popup.png \
+ ${datadir}/mythtv/themes/default-wide/mv_results_popup.png \
+ ${datadir}/mythtv/themes/default/mv_level_low.png \
+ ${datadir}/mythtv/themes/default/mv_level_lowest.png \
+ ${datadir}/mythtv/themes/default/mv_level_medium.png \
+ ${datadir}/mythtv/themes/default/mv_browse_selector.png \
+ ${datadir}/mythtv/themes/default-wide/mv_results_popup.png \
+ ${datadir}/mythtv/themes/default-wide/mv_browse_selector.png \
+ ${datadir}/mythtv/themes/default-wide/mv_browse_background.png \
+ ${datadir}/mythtv/themes/default-wide/mv_browse_nocover_large.png \
+ ${datadir}/mythtv/themes/default-wide/mv_itemdetail_popup.png \
+ ${datadir}/mythtv/themes/default-wide/movies-ui.xml \
+ ${datadir}/mythtv/themes/default/dvd-ui.xml \
+ ${datadir}/mythtv/themes/default-wide/dvd-ui.xml \
+ ${datadir}/mythtv/themes/default/video-ui.xml \
+ ${datadir}/mythtv/themes/default-wide/video-ui.xml \
+ ${datadir}/mythtv/video_settings.xml \
+ ${datadir}/mythtv/videomenu.xml \
+ "
+FILES_mythvideo-dbg = "${bindir}/.debug/mtd \
+ ${libdir}/mythtv/plugins/.debug/libmythvideo.so"
+
+FILES_mythweather = "${libdir}/mythtv/plugins/libmythweather.so \
+ ${datadir}/mythtv/mythweather/* \
+ ${datadir}/mythtv/i18n/mythweather* \
+ ${datadir}/mythtv/themes/default-wide/mw-background.png \
+ ${datadir}/mythtv/themes/default-wide/mw-lines.png \
+ ${datadir}/mythtv/themes/default-wide/mw-map-sat.png \
+ ${datadir}/mythtv/themes/default-wide/mw-map.png \
+ ${datadir}/mythtv/themes/default-wide/mw-popup.png \
+ ${datadir}/mythtv/themes/default-wide/weather-ui.xml \
+ ${datadir}/mythtv/themes/default/cloudy.png \
+ ${datadir}/mythtv/themes/default/fair.png \
+ ${datadir}/mythtv/themes/default/flurries.png \
+ ${datadir}/mythtv/themes/default/fog.png \
+ ${datadir}/mythtv/themes/default/logo.png \
+ ${datadir}/mythtv/themes/default/lshowers.png \
+ ${datadir}/mythtv/themes/default/mcloudy.png \
+ ${datadir}/mythtv/themes/default/mw_background.png \
+ ${datadir}/mythtv/themes/default/mw_checked.png \
+ ${datadir}/mythtv/themes/default/mw_checked_high.png \
+ ${datadir}/mythtv/themes/default/mw_lines.png \
+ ${datadir}/mythtv/themes/default/mw_map-sat.png \
+ ${datadir}/mythtv/themes/default/mw_map.png \
+ ${datadir}/mythtv/themes/default/mw_popup.png \
+ ${datadir}/mythtv/themes/default/mw_shading.png \
+ ${datadir}/mythtv/themes/default/mw_unchecked.png \
+ ${datadir}/mythtv/themes/default/mw_unchecked_high.png \
+ ${datadir}/mythtv/themes/default/mwmain.png \
+ ${datadir}/mythtv/themes/default/pcloudy.png \
+ ${datadir}/mythtv/themes/default/rainsnow.png \
+ ${datadir}/mythtv/themes/default/showers.png \
+ ${datadir}/mythtv/themes/default/snowshow.png \
+ ${datadir}/mythtv/themes/default/sunny.png \
+ ${datadir}/mythtv/themes/default/thunshowers.png \
+ ${datadir}/mythtv/themes/default/unknown.png \
+ ${datadir}/mythtv/themes/default/weather-ui.xml \
+ ${datadir}/mythtv/weather_settings.xml \
+ "
+FILES_mythweather-dbg = "${libdir}/mythtv/plugins/.debug/libmythweather.so"
+
+FILES_mythzoneminder = "${libdir}/mythtv/plugins/libmythzoneminder.so \
+ ${datadir}/mythtv/zonemindermenu.xml \
+ ${datadir}/mythtv/i18n/mythzoneminder* \
+ ${datadir}/mythtv/themes/default/zoneminder-ui.xml \
+ ${datadir}/mythtv/themes/default/mz_black.png \
+ ${datadir}/mythtv/themes/default/mz_browser_back_sel.png \
+ ${datadir}/mythtv/themes/default/mz_browser_back_reg.png \
+ ${datadir}/mythtv/themes/default/mz_function_popup.png \
+ ${datadir}/mythtv/themes/default/mz_testcard.png \
+ ${datadir}/mythtv/themes/default-wide/zoneminder-ui.xml \
+ "
+FILES_mythzoneminder-dbg = "${libdir}/mythtv/plugins/.debug/libmythzoneminder.so"
diff --git a/recipes/mythtv/mythplugins_0.22.bb b/recipes/mythtv/mythplugins_0.22.bb
deleted file mode 100644
index ebe590cf3b..0000000000
--- a/recipes/mythtv/mythplugins_0.22.bb
+++ /dev/null
@@ -1,330 +0,0 @@
-DEPENDS = "flac taglib mythtv libvorbis libexif libvisual libsdl-x11 libcdaudio cdparanoia"
-RDEPENDS_${PN} = "mytharchive mythbrowser mythflix mythgallery mythgame \
- mythmusic mythmovies mythnews mythvideo mythweather mythzoneminder"
-RRECOMMENDS_${PN} = "mythweb_lighttpd"
-
-# the apache variant does not work yet, too many issues with apache+php+mysql"
-DEPENDS_mythweb_apache = "mythweb"
-RDEPENDS_mythweb_apache = "apache2"
-
-DEPENDS_mythweb_lighttpd = "mythweb"
-RDEPENDS_mythweb_lighttpd = "lighttpd lighttpd-module-cgi lighttpd-module-fastcgi \
- lighttpd-module-rewrite php-cgi lighttpd-module-auth"
-
-PR = "svnr${SRCPV}+r1"
-PV = "0.22"
-
-SRCREV = "23062"
-SRC_URI = "svn://svn.mythtv.org/svn/branches/release-0-22-fixes;module=mythplugins;proto=http \
- file://sysroot.patch;patch=1 \
- file://mythplugins_wo_qtopengl.diff;patch=1 \
- file://configure.patch;patch=1 \
- file://mytharchive.pro.patch;patch=1 \
- "
-
-
-QMAKE_PROFILES = "mythplugins.pro"
-
-S = "${WORKDIR}/mythplugins"
-
-inherit qmake2 qt4x11
-
-EXTRA_OECONF = " \
- --cross-prefix=${TARGET_PREFIX} \
- --sysroot=${STAGING_DIR_HOST} \
- --prefix=${prefix} \
- --with-libdir-name=${STAGING_LIBDIR} \
- --disable-opengl \
- \
- --extra-cflags="${TARGET_CFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \
- --extra-cxxflags="${TARGET_CXXFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \
- --extra-ldflags="${TARGET_LDFLAGS}" \
-"
-
-do_configure() {
- ${S}/configure --qmake=qmake2 ${EXTRA_OECONF}
-}
-
-do_install_mythweb_apache () {
- oe_runmake install INSTALL_ROOT="${D}"
- install -d ${D}${datadir}/apache2
- install -d ${D}${datadir}/apache2/htdocs
- install -d ${D}/etc/apache2
- install -d ${D}/etc/apache2/extra
- cp -r ${S}/mythweb/* ${D}${datadir}/apache2/htdocs/
- cp -r ${S}/mythweb/mythweb.conf.apache ${D}/etc/apache2/extra/mythweb.conf
- sed -i -e s:/var/www/html:/usr/share/apache2/htdocs:g ${D}/etc/apache2/extra/mythweb.conf
-}
-
-do_install_mythweb_lighttpd () {
- oe_runmake install INSTALL_ROOT="${D}"
- install -d ${D}/www
- install -d ${D}/www/pages
- cp -r ${S}/mythweb/* ${D}www/pages/
- cp -r ${S}/mythweb/mythweb.conf.lighttpd ${D}/etc/mythweb.conf
- sed -i -e s:/var/www/html:/www/pages:g ${D}/etc/mythweb.conf
-}
-
-pkg_postinst_mythweb_apache () {
- chgrp -R apache /usr/share/apache2/htdocs/data
- chmod g+rw /usr/share/apache2/htdocs/data
- grep mythweb.conf /etc/apache2/httpd.conf || \
- echo "Include /etc/apache2/extra/mythweb.conf" >>/etc/apache2/httpd.conf
-}
-
-pkg_postinst_mythweb_lighttpd () {
- chgrp -R www-data /usr/share/apache2/htdocs/data
- chmod g+rw /var/www/pages
- grep mythweb.conf /etc/lighttpd.conf || \
- echo "Include /etc/mythweb.conf" >>/etc/lighttpd.conf
-}
-
-PACKAGES =+ " \
- mythweb_apache mythweb_lighttpd \
- mytharchive mytharchive-dbg \
- mythbrowser mythbrowser-dbg \
- mythflix mythflix-dbg \
- mythgallery mythgallery-dbg \
- mythgame mythgame-dbg \
- mythmovies mythmovies-dbg \
- mythmusic mythmusic-dbg \
- mythnews mythnews-dbg \
- mythvideo mythvideo-dbg \
- mythweather mythweather-dbg \
- mythzoneminder mythzoneminder-dbg"
-
-FILES_mythweb_apache = "${datadir}/apache2/htdocs \
- /etc/apache2/extra/mythweb.conf"
-
-FILES_mythweb_lighttpd = "${datadir}/www/pages \
- /etc/mythweb.conf"
-
-FILES_mytharchive = "${libdir}/mythtv/plugins/libmytharchive.so \
- ${bindir}/mytharchivehelper \
- ${datadir}/mythtv/i18n/mytharchive* \
- ${datadir}/mythtv/mytharchive/* \
- ${datadir}/mythtv/archiveformat.xml \
- ${datadir}/mythtv/archivemenu.xml \
- ${datadir}/mythtv/archiveutils.xml \
- ${datadir}/mythtv/themes/default/mytharchive-ui.xml \
- ${datadir}/mythtv/themes/default/mythburn-ui.xml \
- ${datadir}/mythtv/themes/default/mythnative-ui.xml \
- ${datadir}/mythtv/themes/default/ma_*.png \
- ${datadir}/mythtv/themes/default/mb_progressbar_background.png \
- ${datadir}/mythtv/themes/default/mb_progressbar_fill.png \
- ${datadir}/mythtv/themes/default-wide/mytharchive-ui.xml \
- ${datadir}/mythtv/themes/default-wide/mythburn-ui.xml \
- ${datadir}/mythtv/themes/default-wide/mythnative-ui.xml \
- "
-FILES_mytharchive-dbg = "${bindir}/.debug/mytharchivehelper \
- ${libdir}/mythtv/plugins/.debug/libmytharchive.so"
-
-FILES_mythbrowser = "${libdir}/mythtv/plugins/libmythbrowser.so \
- ${bindir}/mythbrowser \
- ${datadir}/mythtv/i18n/mythbrowser* \
- ${datadir}/mythtv/themes/default/browser-ui.xml \
- ${datadir}/mythtv/themes/default-wide/browser-ui.xml \
- "
-FILES_mythbrowser-dbg = "${libdir}/mythtv/plugins/.debug/libmythbrowser.so"
-
-FILES_mythflix = "${libdir}/mythtv/plugins/libmythflix.so \
- ${datadir}/mythtv/i18n/mythflix* \
- ${datadir}/mythtv/mythflix/* \
- ${datadir}/mythtv/netflix_menu.xml \
- ${datadir}/mythtv/themes/default/mythflix_background.png \
- ${datadir}/mythtv/themes/default/netflix-ui.xml \
- ${datadir}/mythtv/themes/default-wide/netflix-ui.xml \
- ${datadir}/mythtv/themes/default/title_netflix.png \
- ${datadir}/mythtv/themes/default-wide/netflix-bg.png \
- "
-FILES_mythflix-dbg = "${libdir}/mythtv/plugins/.debug/libmythflix.so"
-
-FILES_mythgallery = "${libdir}/mythtv/plugins/libmythgallery.so \
- ${datadir}/mythtv/i18n/mythgallery* \
- ${datadir}/mythtv/themes/default/gallery*.png \
- ${datadir}/mythtv/themes/default/gallery-ui.xml \
- ${datadir}/mythtv/themes/default-wide/gallery-ui.xml \
- "
-FILES_mythgallery-dbg = "${libdir}/mythtv/plugins/.debug/libmythgallery.so"
-
-FILES_mythgame = "${libdir}/mythtv/plugins/libmythgame.so \
- ${datadir}/mythtv/i18n/mythgame* \
- ${datadir}/mythtv/game_settings.xml \
- ${datadir}/mythtv/themes/default/game-ui.xml \
- ${datadir}/mythtv/themes/default-wide/game-ui.xml \
- "
-FILES_mythgame-dbg = "${libdir}/mythtv/plugins/.debug/libmythgame.so"
-
-FILES_mythmovies = "${libdir}/mythtv/plugins/libmythmovies.so \
- ${bindir}/ignyte \
- ${datadir}/mythtv/mythmovies/* \
- ${datadir}/mythtv/i18n/mythmovies* \
- ${datadir}/mythtv/themes/default/movies-ui.xml \
- ${datadir}/mythtv/themes/default-wide/movies-ui.xml \
- "
-FILES_mythmovies-dbg = "${bindir}/.debug/ignyte \
- ${libdir}/mythtv/plugins/.debug/libmythmovies.so"
-
-FILES_mythmusic = "${libdir}/mythtv/plugins/libmythmusic.so \
- ${datadir}/mythtv/mythmusic/* \
- ${datadir}/mythtv/i18n/mythmusic* \
- ${datadir}/mythtv/music_settings.xml \
- ${datadir}/mythtv/musicmenu.xml \
- ${datadir}/mythtv/themes/default/selectionbar.png \
- ${datadir}/mythtv/themes/default/mm_browser_back_reg.png \
- ${datadir}/mythtv/themes/default/music-sel-bg.png \
- ${datadir}/mythtv/themes/default/mm_rip_banner.png \
- ${datadir}/mythtv/themes/default/mm_prev_on.png \
- ${datadir}/mythtv/themes/default/next_button_off.png \
- ${datadir}/mythtv/themes/default/mm_next_pushed.png \
- ${datadir}/mythtv/themes/default/stop_button_pushed.png \
- ${datadir}/mythtv/themes/default/mm_folder.png \
- ${datadir}/mythtv/themes/default/mm_left_arrow.png \
- ${datadir}/mythtv/themes/default/rew_button_on.png \
- ${datadir}/mythtv/themes/default/next_button_pushed.png \
- ${datadir}/mythtv/themes/default/mm_trans_background.png \
- ${datadir}/mythtv/themes/default/prev_button_off.png \
- ${datadir}/mythtv/themes/default/mm_browser_back_sel.png \
- ${datadir}/mythtv/themes/default/ff_button_off.png \
- ${datadir}/mythtv/themes/default/mm_volume_tick.png \
- ${datadir}/mythtv/themes/default/stop_button_off.png \
- ${datadir}/mythtv/themes/default/mm_progress-fg.png \
- ${datadir}/mythtv/themes/default/mm_rip_background.png \
- ${datadir}/mythtv/themes/default/rew_button_pushed.png \
- ${datadir}/mythtv/themes/default/mm_next_off.png \
- ${datadir}/mythtv/themes/default/mm_next_on.png \
- ${datadir}/mythtv/themes/default/pause_button_pushed.png \
- ${datadir}/mythtv/themes/default/mm_nothumb.png \
- ${datadir}/mythtv/themes/default/stop_button_on.png \
- ${datadir}/mythtv/themes/default/mm_blackhole_border.png \
- ${datadir}/mythtv/themes/default/mm_prev_pushed.png \
- ${datadir}/mythtv/themes/default/pause_button_on.png \
- ${datadir}/mythtv/themes/default/play_button_pushed.png \
- ${datadir}/mythtv/themes/default/mm_progress_foreground.png \
- ${datadir}/mythtv/themes/default/pause_button_off.png \
- ${datadir}/mythtv/themes/default/play_button_off.png \
- ${datadir}/mythtv/themes/default/mm_progress_background.png \
- ${datadir}/mythtv/themes/default/mm_up_arrow.png \
- ${datadir}/mythtv/themes/default/prev_button_on.png \
- ${datadir}/mythtv/themes/default/mm_volume_background.png \
- ${datadir}/mythtv/themes/default/ff_button_pushed.png \
- ${datadir}/mythtv/themes/default/mm_prev_off.png \
- ${datadir}/mythtv/themes/default/miniplayer_background.png \
- ${datadir}/mythtv/themes/default/mm_progress-bg.png \
- ${datadir}/mythtv/themes/default/track_info_background.png \
- ${datadir}/mythtv/themes/default/mm_waiting.png \
- ${datadir}/mythtv/themes/default/play_button_on.png \
- ${datadir}/mythtv/themes/default/prev_button_pushed.png \
- ${datadir}/mythtv/themes/default/mm_right_arrow.png \
- ${datadir}/mythtv/themes/default/ff_button_on.png \
- ${datadir}/mythtv/themes/default/mm_down_arrow.png \
- ${datadir}/mythtv/themes/default/next_button_on.png \
- ${datadir}/mythtv/themes/default/mm_rating.png \
- ${datadir}/mythtv/themes/default/rew_button_off.png \
- ${datadir}/mythtv/themes/default/mm-titlelines.png \
- ${datadir}/mythtv/themes/default-wide/music-sel-bg.png \
- ${datadir}/mythtv/themes/default-wide/mm_blackhole_border.png \
- ${datadir}/mythtv/themes/default-wide/mm_volume_background.png \
- ${datadir}/mythtv/themes/default-wide/mm_waiting.png \
- ${datadir}/mythtv/themes/default-wide/mm-titlelines.png \
- ${datadir}/mythtv/themes/default/music-ui.xml \
- ${datadir}/mythtv/themes/default-wide/music-ui.xml \
- "
-FILES_mythmusic-dbg = "${libdir}/mythtv/plugins/.debug/libmythmusic.so"
-
-FILES_mythnews = "${libdir}/mythtv/plugins/libmythnews.so \
- ${datadir}/mythtv/mythnews/* \
- ${datadir}/mythtv/i18n/mythnews* \
- ${datadir}/mythtv/themes/default/enclosures.png \
- ${datadir}/mythtv/themes/default/need-download.png \
- ${datadir}/mythtv/themes/default/podcast.png \
- ${datadir}/mythtv/themes/default/news-info-bg.png \
- ${datadir}/mythtv/themes/default/news-ui.xml \
- ${datadir}/mythtv/themes/default-wide/news-ui.xml \
- "
-FILES_mythnews-dbg = "${libdir}/mythtv/plugins/.debug/libmythnews.so"
-
-FILES_mythvideo = "${libdir}/mythtv/plugins/libmythvideo.so \
- ${bindir}/mtd \
- ${datadir}/mythtv/mythvideo/* \
- ${datadir}/mythtv/i18n/mythvideo* \
- ${datadir}/mythtv/themes/default/md_progress_background.png \
- ${datadir}/mythtv/themes/default/md_rip_banner.png \
- ${datadir}/mythtv/themes/default/mv_level_none.png \
- ${datadir}/mythtv/themes/default/mv_browse_background.png \
- ${datadir}/mythtv/themes/default/mv_itemdetail_popup.png \
- ${datadir}/mythtv/themes/default/mv_filerequest.png \
- ${datadir}/mythtv/themes/default/mv_level_high.png \
- ${datadir}/mythtv/themes/default/mv_results_popup.png \
- ${datadir}/mythtv/themes/default-wide/mv_results_popup.png \
- ${datadir}/mythtv/themes/default/mv_level_low.png \
- ${datadir}/mythtv/themes/default/mv_level_lowest.png \
- ${datadir}/mythtv/themes/default/mv_level_medium.png \
- ${datadir}/mythtv/themes/default/mv_browse_selector.png \
- ${datadir}/mythtv/themes/default-wide/mv_results_popup.png \
- ${datadir}/mythtv/themes/default-wide/mv_browse_selector.png \
- ${datadir}/mythtv/themes/default-wide/mv_browse_background.png \
- ${datadir}/mythtv/themes/default-wide/mv_browse_nocover_large.png \
- ${datadir}/mythtv/themes/default-wide/mv_itemdetail_popup.png \
- ${datadir}/mythtv/themes/default-wide/movies-ui.xml \
- ${datadir}/mythtv/themes/default/dvd-ui.xml \
- ${datadir}/mythtv/themes/default-wide/dvd-ui.xml \
- ${datadir}/mythtv/themes/default/video-ui.xml \
- ${datadir}/mythtv/themes/default-wide/video-ui.xml \
- ${datadir}/mythtv/video_settings.xml \
- ${datadir}/mythtv/videomenu.xml \
- "
-FILES_mythvideo-dbg = "${bindir}/.debug/mtd \
- ${libdir}/mythtv/plugins/.debug/libmythvideo.so"
-
-FILES_mythweather = "${libdir}/mythtv/plugins/libmythweather.so \
- ${datadir}/mythtv/mythweather/* \
- ${datadir}/mythtv/i18n/mythweather* \
- ${datadir}/mythtv/themes/default-wide/mw-background.png \
- ${datadir}/mythtv/themes/default-wide/mw-lines.png \
- ${datadir}/mythtv/themes/default-wide/mw-map-sat.png \
- ${datadir}/mythtv/themes/default-wide/mw-map.png \
- ${datadir}/mythtv/themes/default-wide/mw-popup.png \
- ${datadir}/mythtv/themes/default-wide/weather-ui.xml \
- ${datadir}/mythtv/themes/default/cloudy.png \
- ${datadir}/mythtv/themes/default/fair.png \
- ${datadir}/mythtv/themes/default/flurries.png \
- ${datadir}/mythtv/themes/default/fog.png \
- ${datadir}/mythtv/themes/default/logo.png \
- ${datadir}/mythtv/themes/default/lshowers.png \
- ${datadir}/mythtv/themes/default/mcloudy.png \
- ${datadir}/mythtv/themes/default/mw_background.png \
- ${datadir}/mythtv/themes/default/mw_checked.png \
- ${datadir}/mythtv/themes/default/mw_checked_high.png \
- ${datadir}/mythtv/themes/default/mw_lines.png \
- ${datadir}/mythtv/themes/default/mw_map-sat.png \
- ${datadir}/mythtv/themes/default/mw_map.png \
- ${datadir}/mythtv/themes/default/mw_popup.png \
- ${datadir}/mythtv/themes/default/mw_shading.png \
- ${datadir}/mythtv/themes/default/mw_unchecked.png \
- ${datadir}/mythtv/themes/default/mw_unchecked_high.png \
- ${datadir}/mythtv/themes/default/mwmain.png \
- ${datadir}/mythtv/themes/default/pcloudy.png \
- ${datadir}/mythtv/themes/default/rainsnow.png \
- ${datadir}/mythtv/themes/default/showers.png \
- ${datadir}/mythtv/themes/default/snowshow.png \
- ${datadir}/mythtv/themes/default/sunny.png \
- ${datadir}/mythtv/themes/default/thunshowers.png \
- ${datadir}/mythtv/themes/default/unknown.png \
- ${datadir}/mythtv/themes/default/weather-ui.xml \
- ${datadir}/mythtv/weather_settings.xml \
- "
-FILES_mythweather-dbg = "${libdir}/mythtv/plugins/.debug/libmythweather.so"
-
-FILES_mythzoneminder = "${libdir}/mythtv/plugins/libmythzoneminder.so \
- ${datadir}/mythtv/zonemindermenu.xml \
- ${datadir}/mythtv/i18n/mythzoneminder* \
- ${datadir}/mythtv/themes/default/zoneminder-ui.xml \
- ${datadir}/mythtv/themes/default/mz_black.png \
- ${datadir}/mythtv/themes/default/mz_browser_back_sel.png \
- ${datadir}/mythtv/themes/default/mz_browser_back_reg.png \
- ${datadir}/mythtv/themes/default/mz_function_popup.png \
- ${datadir}/mythtv/themes/default/mz_testcard.png \
- ${datadir}/mythtv/themes/default-wide/zoneminder-ui.xml \
- "
-FILES_mythzoneminder-dbg = "${libdir}/mythtv/plugins/.debug/libmythzoneminder.so"
diff --git a/recipes/mythtv/myththemes_0.22+fixes.bb b/recipes/mythtv/myththemes_0.22+fixes.bb
new file mode 100644
index 0000000000..2b4d8de943
--- /dev/null
+++ b/recipes/mythtv/myththemes_0.22+fixes.bb
@@ -0,0 +1,22 @@
+DEPENDS = "mythtv"
+inherit qmake2
+
+PR = "svnr${SRCPV}+r0"
+PV = "0.22"
+
+SRCREV = "23710"
+SRC_URI = \
+"svn://svn.mythtv.org/svn/branches/release-0-22-fixes;module=myththemes;proto=http"
+
+FILES_${PN} =+ "${datadir}"
+
+S = "${WORKDIR}/myththemes"
+
+do_configure() {
+ ${S}/configure --qmake=qmake2 --sysroot=${STAGING_DIR_HOST} --prefix=${prefix}
+}
+
+do_install () {
+ oe_runmake install INSTALL_ROOT=${D}
+}
+
diff --git a/recipes/mythtv/myththemes_0.22.bb b/recipes/mythtv/myththemes_0.22.bb
deleted file mode 100644
index f7fcd64ae1..0000000000
--- a/recipes/mythtv/myththemes_0.22.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-DEPENDS = "mythtv"
-inherit qmake2
-
-PR = "svnr${SRCPV}+r1"
-PV = "0.22"
-
-SRCREV = "23062"
-SRC_URI = \
-"svn://svn.mythtv.org/svn/branches/release-0-22-fixes;module=myththemes;proto=http"
-
-FILES_${PN} =+ "${datadir}"
-
-S = "${WORKDIR}/myththemes"
-
-do_configure() {
- ${S}/configure --qmake=qmake2 --sysroot=${STAGING_DIR_HOST} --prefix=${prefix}
-}
-
-do_install () {
- oe_runmake install INSTALL_ROOT=${D}
-}
-
diff --git a/recipes/mythtv/mythtv-0.18.1/msmpeg-underscore-pic.patch b/recipes/mythtv/mythtv-0.18.1/msmpeg-underscore-pic.patch
deleted file mode 100644
index a73ca9950e..0000000000
--- a/recipes/mythtv/mythtv-0.18.1/msmpeg-underscore-pic.patch
+++ /dev/null
@@ -1,85 +0,0 @@
---- mythtv-0.18.1/libs/libavcodec/msmpeg4.c.old 2005-06-03 21:31:43.000000000 +0100
-+++ mythtv-0.18.1/libs/libavcodec/msmpeg4.c 2005-06-03 21:31:51.000000000 +0100
-@@ -723,7 +723,7 @@
- necessitate to modify mpegvideo.c. The problem comes from the
- fact they decided to store the quantized DC (which would lead
- to problems if Q could vary !) */
--#if (defined(ARCH_X86) || defined(ARCH_X86_64)) && !defined PIC
-+#if (defined(ARCH_X86) || defined(ARCH_X86_64)) && !defined __PIC__
- asm volatile(
- "movl %3, %%eax \n\t"
- "shrl $1, %%eax \n\t"
---- mythtv-0.18.1/libs/libavcodec/i386/dsputil_mmx_avg.h.old 2005-06-03 21:38:57.000000000 +0100
-+++ mythtv-0.18.1/libs/libavcodec/i386/dsputil_mmx_avg.h 2005-06-03 21:39:02.000000000 +0100
-@@ -90,7 +90,7 @@
- "add $16, %2 \n\t"
- "subl $4, %0 \n\t"
- "jnz 1b \n\t"
--#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
-+#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
- :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst)
- #else
- :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst)
-@@ -137,7 +137,7 @@
- "add $32, %2 \n\t"
- "subl $4, %0 \n\t"
- "jnz 1b \n\t"
--#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
-+#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
- :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst)
- #else
- :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst)
-@@ -207,7 +207,7 @@
- "add $32, %2 \n\t"
- "subl $4, %0 \n\t"
- "jnz 1b \n\t"
--#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
-+#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
- :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst)
- #else
- :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst)
-@@ -262,7 +262,7 @@
- "add $16, %2 \n\t"
- "subl $4, %0 \n\t"
- "jnz 1b \n\t"
--#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
-+#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
- :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst)
- #else
- :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst)
-@@ -314,7 +314,7 @@
- "add $32, %2 \n\t"
- "subl $4, %0 \n\t"
- "jnz 1b \n\t"
--#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
-+#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
- :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst)
- #else
- :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst)
-@@ -402,7 +402,7 @@
- "add $32, %2 \n\t"
- "subl $2, %0 \n\t"
- "jnz 1b \n\t"
--#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
-+#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
- :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst)
- #else
- :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst)
-@@ -456,7 +456,7 @@
- "add $32, %2 \n\t"
- "subl $2, %0 \n\t"
- "jnz 1b \n\t"
--#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
-+#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
- :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst)
- #else
- :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst)
-@@ -529,7 +529,7 @@
- "add $32, %2 \n\t"
- "subl $2, %0 \n\t"
- "jnz 1b \n\t"
--#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
-+#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
- :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst)
- #else
- :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst)
diff --git a/recipes/mythtv/mythtv-0.20/configure.patch b/recipes/mythtv/mythtv-0.20/configure.patch
deleted file mode 100644
index 03281eb7e5..0000000000
--- a/recipes/mythtv/mythtv-0.20/configure.patch
+++ /dev/null
@@ -1,90 +0,0 @@
---- mythtv-0.20/configure 2006-08-28 17:18:08.000000000 +0100
-+++ mythtv-0.20/configure 2007-01-16 14:42:18.000000000 +0000
-@@ -1225,49 +1225,50 @@
-
- has_library()
- {
-- if test -f /etc/ld.so.conf ; then
-- LIBPATHS=`cat /etc/ld.so.conf | grep -v "#" | grep -v "include"`
-+ lib=`echo $1 | sed 's/^lib//'`
-+ tmpfile=/tmp/conftest.$$
-+ rm -f $tmpfile $tmpfile.c
-+ cat >$tmpfile.c <<EOF
-+int main() { return 0; }
-+EOF
-+ echo "cc=$cc $LDFLAGS"
-+ echo -n "checking for lib$lib... "
-+ if $cc $LDFLAGS -o $tmpfile $tmpfile.c -l$lib; then
-+ echo "yes"
-+ result=0
- else
-- LIBPATHS=''
-+ echo "no"
-+ result=1
- fi
-- LIBPATHS="$LIBPATHS `echo $LD_LIBRARY_PATH | sed s/':'/' '/g` "
-- # Mac OS X has a different variable for this:
-- LIBPATHS="$LIBPATHS `echo $DYLD_LIBRARY_PATH | sed s/':'/' '/g` "
--
-- # recurse down just one level, should be enough in most cases
-- if test -f /etc/ld.so.conf ; then
-- INCL=`cat /etc/ld.so.conf | grep -v "#" | grep "^include"`
-- SRCH=`echo "$INCL" | sed '{ s/^include \//\//; s/^include /\/etc\//}'`
-- for x in $SRCH ; do
-- LP_APPEND=`cat $x | grep -v "#" | grep -v "^include"`
-- LIBPATHS="$LIBPATHS $LP_APPEND"
-- done
-- fi
--
-- LIBPATHS="`echo $LIBPATHS /$libdir_name /usr/$libdir_name /usr/local/$libdir_name /usr/X11R6/$libdir_name | sed s/'\/ '/' '/g` "
--
-- HAS_IT="no"
-- for LIBPATH in $LIBPATHS ; do
-- if test x`ls $LIBPATH/$1* 2> /dev/null | head -n 1` != x"" ; then
-- HAS_IT="yes"
-- fi
-- done
-- expr $HAS_IT : "yes" > /dev/null
-+ rm -f $tmpfile $tmpfile.c
-+ return $result
- }
-
- has_header()
- {
-- HPATHS="/usr/local/include /usr/include /usr/include/g++-v3 /usr/X11R6/include"
-- INCL=`echo $DYLD_LIBRARY_PATH $LD_LIBRARY_PATH | sed s/':'/' '/g`
-- HPATHS="$HPATHS `echo $INCL | sed s/$libdir_name/include/g` "
--
-- HAS_IT="no"
-- for HPATH in $HPATHS ; do
-- if test x`ls $HPATH/$1* 2> /dev/null | head -n 1` != x"" ; then
-- HAS_IT="yes"
-- fi
-- done
-- expr $HAS_IT : "yes" > /dev/null
-+ header=$1
-+ tmpfile=/tmp/conftest.$$
-+ rm -f $tmpfile.o $tmpfile.c
-+ case $header in
-+ X11/*) extra_incs="#include <X11/Xlib.h>" ;;
-+ *) extra_incs="" ;;
-+ esac
-+ cat >$tmpfile.c <<EOF
-+$extra_incs
-+#include <$header>
-+int main() { return 0; }
-+EOF
-+ echo "cc=$cc $CPPFLAGS $CFLAGS"
-+ echo -n "checking for <$header>... "
-+ if $cc $CPPFLAGS $CFLAGS -c -o $tmpfile.o $tmpfile.c; then
-+ echo "yes"
-+ result=0
-+ else
-+ echo "no"
-+ result=1
-+ fi
-+ rm -f $tmpfile.o $tmpfile.c
-+ return $result
- }
-
- CCONFIG="$CCONFIG $compile_type"
diff --git a/recipes/mythtv/mythtv-0.20/libmyth-libdir.patch b/recipes/mythtv/mythtv-0.20/libmyth-libdir.patch
deleted file mode 100644
index 0ecfddcb53..0000000000
--- a/recipes/mythtv/mythtv-0.20/libmyth-libdir.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- mythtv-0.20/libs/libmyth/libmyth.pro 2006-08-20 07:45:34.000000000 +0100
-+++ mythtv-0.20/libs/libmyth/libmyth.pro 2007-01-16 14:54:59.000000000 +0000
-@@ -33,6 +33,8 @@
- SOURCES += DisplayResScreen.cpp util-x11.cpp qmdcodec.cpp
- SOURCES += virtualkeyboard.cpp mythobservable.cpp mythsocket.cpp
-
-+DEFINES += LIBDIR=\"$${LIBDIR}\"
-+
- INCLUDEPATH += ../libmythsamplerate ../libmythsoundtouch ../.. ../
- DEPENDPATH += ../libmythsamplerate ../libmythsoundtouch ../ ../libmythui
-
diff --git a/recipes/mythtv/mythtv-0.21/configure.patch b/recipes/mythtv/mythtv-0.21/configure.patch
deleted file mode 100644
index 3b0b9a313a..0000000000
--- a/recipes/mythtv/mythtv-0.21/configure.patch
+++ /dev/null
@@ -1,183 +0,0 @@
---- /tmp/configure 2008-06-30 08:40:35.000000000 +0200
-+++ mythtv/configure 2008-07-23 09:51:41.000000000 +0200
-@@ -475,12 +475,13 @@
- }
-
- check_cmd(){
-- log "$@"
-+ echo "Checking $@"
-+ log "$@"
- "$@" >>$logfile 2>&1
- }
-
- check_cc(){
-- log check_cc "$@"
-+ log check_cc "$@"
- cat >$TMPC
- log_file $TMPC
- check_cmd $cc $CFLAGS $ECFLAGS $OPTFLAGS "$@" -c -o $TMPO $TMPC
-@@ -1115,11 +1116,11 @@
- fi
-
- # machine
--arch=`uname -m`
-+disabled cross_compile && arch=`uname -m`
- arch_raw="$arch"
- cpu="generic"
- cpu_override="no"
--processor=`uname -p 2>/dev/null`
-+disabled cross_compile && processor=`uname -p 2>/dev/null`
- processor_flags=""
- tune="generic"
-
-@@ -1183,7 +1184,7 @@
- lamemp3="yes"
- lirc="yes"
- mac_bundle="no"
--opengl="yes"
-+opengl="no"
- v4l="yes"
- x11="yes"
- x11_include_path="/usr/X11R6/include"
-@@ -1212,7 +1213,7 @@
- # build settings
- SHFLAGS='-shared -Wl,-soname,$@'
- VHOOKSHFLAGS='$(SHFLAGS)'
--LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
-+#LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
- FFSERVERLDFLAGS=-Wl,-E
- LDCONFIG="ldconfig"
- LIBPREF="lib"
-@@ -1707,7 +1708,7 @@
-
- has_library()
- {
-- if test -f /etc/ld.so.conf ; then
-+ if test -f /etc/ld.so.conf && disabled cross_compile ; then
- LIBPATHS=`cat /etc/ld.so.conf | grep -v "#" | grep -v "include"`
- else
- LIBPATHS=''
-@@ -1718,7 +1719,7 @@
- LIBPATHS="$LIBPATHS `echo $DYLD_LIBRARY_PATH | sed s/':'/' '/g` "
-
- # recurse down just one level, should be enough in most cases
-- if test -f /etc/ld.so.conf ; then
-+ if test -f /etc/ld.so.conf && disabled cross_compile ; then
- INCL=`cat /etc/ld.so.conf | grep -v "#" | grep "^include"`
- SRCH=`echo "$INCL" | sed '{ s/^include \//\//; s/^include /\/etc\//}'`
- for x in $SRCH ; do
-@@ -1727,9 +1728,9 @@
- done
- fi
-
-- LIBPATHS="`echo $LIBPATHS /$libdir_name /usr/$libdir_name /usr/local/$libdir_name /usr/X11R6/$libdir_name | sed s/'\/ '/' '/g` "
-+ enabled cross_compile || LIBPATHS="`echo $LIBPATHS /$libdir_name /usr/$libdir_name /usr/local/$libdir_name /usr/X11R6/$libdir_name | sed s/'\/ '/' '/g` "
-
-- HAS_IT="no"
-+ HAS_IT="yes"
- for LIBPATH in $LIBPATHS ; do
- if test x`ls $LIBPATH/$1* 2> /dev/null | head -n 1` != x"" ; then
- echo "$1 IS at $LIBPATH"
-@@ -1745,17 +1746,18 @@
-
- has_header()
- {
-- HPATHS="/usr/local/include /usr/include /usr/include/g++-v3 /usr/X11R6/include"
-+ enabled cross_compile || HPATHS="/usr/local/include /usr/include /usr/include/g++-v3 /usr/X11R6/include"
- INCL=`echo $DYLD_LIBRARY_PATH $LD_LIBRARY_PATH | sed s/':'/' '/g`
- HPATHS="$HPATHS "$(echo $INCL | sed "s/$libdir_name/include/g")
-
-- HAS_IT="no"
-+ HAS_IT="yes"
- for HPATH in $HPATHS ; do
- if test x`ls $HPATH/$1* 2> /dev/null | head -n 1` != x"" ; then
- HAS_IT="yes"
- fi
- done
-- expr $HAS_IT : "yes" > /dev/null
-+ echo "$1: $HAS_IT"
-+ expr $HAS_IT : "yes" > /dev/null
- }
-
- append CCONFIG "$compile_type"
-@@ -1861,13 +1863,15 @@
- if test x"$cmov" = x"default"; then
- disable cmov
- if enabled cpu_override; then
-- is_x86_cmov_cpu "$cpu" && enable cmov
-+ disabled cross_compile && is_x86_cmov_cpu "$cpu" && enable cmov
- disabled cmov || is_x86_slow_cmov_cpu "$cpu" || enable fast_cmov
- elif expr "$processor_flags" : ".*cmov" > /dev/null ; then
-- enable cmov
-+ disabled cross_compile && enable cmov
- fi
- fi
-
-+enabled cross_compile && disable cmov
-+
- # use different default ARCHFLAGS for CPU missing cmov (Via C3 ...)
- if test x"$arch" = x"x86_32" && disabled cmov && disabled cpu_override; then
- ARCHFLAGS="-march=i586"
-@@ -2239,7 +2243,7 @@
- EOF
-
- if $cc $CFLAGS $ECFLAGS -o $TMPE $TMPC 2>/dev/null ; then
--$TMPE && cpuclipspositive="yes"
-+enabled cross_compile || $TMPE && cpuclipspositive="yes"
- fi
-
- # test negative wrap
-@@ -2254,7 +2258,7 @@
- EOF
-
- if $cc $CFLAGS $ECFLAGS -o $TMPE $TMPC 2>/dev/null ; then
--$TMPE && cpuclipsnegative="yes"
-+enabled cross_compile || $TMPE && cpuclipsnegative="yes"
- fi
-
- # test for distcc
-@@ -2607,33 +2611,9 @@
- check_ldflags -Wl,--warn-common
- check_ldflags $LDLATEFLAGS
-
--# GCC version
--cat > $TMPC << EOF
--int main(int argc, char **argv)
--{
-- int ret = 0;
-- if (argc == 1)
-- {
-- #if defined(__GNUC__)
-- ret = __GNUC__;
-- #endif
-- }
-- else
-- {
-- #if defined(__GNUC_MINOR__)
-- ret = __GNUC_MINOR__;
-- #endif
-- }
-- return ret;
--}
--EOF
--
--if $cc $CFLAGS $TMPC -o $TMPE ; then
-- $TMPE
-- GCC_MAJOR=$?
-- $TMPE "minor"
-- GCC_MINOR=$?
--fi
-+gcc_version=$($cc -v 2>&1 | grep version | cut -s -d' ' -f 3)
-+GCC_MAJOR=$(echo ${gcc_version} | cut -s -d'.' -f1)
-+GCC_MINOR=$(echo ${gcc_version} | cut -s -d'.' -f2)
-
- if enabled symbol_visibility; then
- if test x"$GCC_MAJOR" = x"4" ; then
-@@ -2727,6 +2707,7 @@
-
- check_header GL/gl.h
- has_library libGL || has_library libopengl32 || disable opengl
-+enabled cross_compile && disable opengl
-
- VENDOR_XVMC_LIBS=""
- check_header X11/extensions/XvMClib.h
diff --git a/recipes/mythtv/mythtv-0.21/ffmpeg-arm-update.diff b/recipes/mythtv/mythtv-0.21/ffmpeg-arm-update.diff
deleted file mode 100644
index d0e32eb512..0000000000
--- a/recipes/mythtv/mythtv-0.21/ffmpeg-arm-update.diff
+++ /dev/null
@@ -1,1669 +0,0 @@
-diff -Nurd mythtv.orig/libs/libavcodec/armv4l/dsputil_arm.c mythtv/libs/libavcodec/armv4l/dsputil_arm.c
---- mythtv.orig/libs/libavcodec/armv4l/dsputil_arm.c 2008-07-23 12:19:05.000000000 +0200
-+++ mythtv/libs/libavcodec/armv4l/dsputil_arm.c 2008-07-24 19:54:00.753198000 +0200
-@@ -19,12 +19,14 @@
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
--#include "dsputil.h"
-+#include "libavcodec/dsputil.h"
- #ifdef HAVE_IPP
--#include "ipp.h"
-+#include <ipp.h>
- #endif
-
- extern void dsputil_init_iwmmxt(DSPContext* c, AVCodecContext *avctx);
-+extern void ff_float_init_arm_vfp(DSPContext* c, AVCodecContext *avctx);
-+extern void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx);
-
- extern void j_rev_dct_ARM(DCTELEM *data);
- extern void simple_idct_ARM(DCTELEM *data);
-@@ -41,6 +43,12 @@
- extern void ff_simple_idct_add_armv6(uint8_t *dest, int line_size,
- DCTELEM *data);
-
-+extern void ff_simple_idct_neon(DCTELEM *data);
-+extern void ff_simple_idct_put_neon(uint8_t *dest, int line_size,
-+ DCTELEM *data);
-+extern void ff_simple_idct_add_neon(uint8_t *dest, int line_size,
-+ DCTELEM *data);
-+
- /* XXX: local hack */
- static void (*ff_put_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size);
- static void (*ff_add_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size);
-@@ -202,6 +210,24 @@
- }
- #endif
-
-+#ifdef HAVE_ARMV5TE
-+static void prefetch_arm(void *mem, int stride, int h)
-+{
-+ asm volatile(
-+ "1: \n\t"
-+ "subs %0, %0, #1 \n\t"
-+ "pld [%1] \n\t"
-+ "add %1, %1, %2 \n\t"
-+ "bgt 1b \n\t"
-+ : "+r"(h), "+r"(mem) : "r"(stride));
-+}
-+#endif
-+
-+int mm_support(void)
-+{
-+ return ENABLE_IWMMXT * MM_IWMMXT;
-+}
-+
- void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx)
- {
- int idct_algo= avctx->idct_algo;
-@@ -209,49 +235,60 @@
- ff_put_pixels_clamped = c->put_pixels_clamped;
- ff_add_pixels_clamped = c->add_pixels_clamped;
-
-- if(idct_algo == FF_IDCT_AUTO){
-+ if (avctx->lowres == 0) {
-+ if(idct_algo == FF_IDCT_AUTO){
- #if defined(HAVE_IPP)
-- idct_algo = FF_IDCT_IPP;
-+ idct_algo = FF_IDCT_IPP;
-+#elif defined(HAVE_NEON)
-+ idct_algo = FF_IDCT_SIMPLENEON;
- #elif defined(HAVE_ARMV6)
-- idct_algo = FF_IDCT_SIMPLEARMV6;
-+ idct_algo = FF_IDCT_SIMPLEARMV6;
- #elif defined(HAVE_ARMV5TE)
-- idct_algo = FF_IDCT_SIMPLEARMV5TE;
-+ idct_algo = FF_IDCT_SIMPLEARMV5TE;
- #else
-- idct_algo = FF_IDCT_ARM;
-+ idct_algo = FF_IDCT_ARM;
- #endif
-- }
-+ }
-
-- if(idct_algo==FF_IDCT_ARM){
-- c->idct_put= j_rev_dct_ARM_put;
-- c->idct_add= j_rev_dct_ARM_add;
-- c->idct = j_rev_dct_ARM;
-- c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM;/* FF_NO_IDCT_PERM */
-- } else if (idct_algo==FF_IDCT_SIMPLEARM){
-- c->idct_put= simple_idct_ARM_put;
-- c->idct_add= simple_idct_ARM_add;
-- c->idct = simple_idct_ARM;
-- c->idct_permutation_type= FF_NO_IDCT_PERM;
-+ if(idct_algo==FF_IDCT_ARM){
-+ c->idct_put= j_rev_dct_ARM_put;
-+ c->idct_add= j_rev_dct_ARM_add;
-+ c->idct = j_rev_dct_ARM;
-+ c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM;/* FF_NO_IDCT_PERM */
-+ } else if (idct_algo==FF_IDCT_SIMPLEARM){
-+ c->idct_put= simple_idct_ARM_put;
-+ c->idct_add= simple_idct_ARM_add;
-+ c->idct = simple_idct_ARM;
-+ c->idct_permutation_type= FF_NO_IDCT_PERM;
- #ifdef HAVE_ARMV6
-- } else if (idct_algo==FF_IDCT_SIMPLEARMV6){
-- c->idct_put= ff_simple_idct_put_armv6;
-- c->idct_add= ff_simple_idct_add_armv6;
-- c->idct = ff_simple_idct_armv6;
-- c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM;
-+ } else if (idct_algo==FF_IDCT_SIMPLEARMV6){
-+ c->idct_put= ff_simple_idct_put_armv6;
-+ c->idct_add= ff_simple_idct_add_armv6;
-+ c->idct = ff_simple_idct_armv6;
-+ c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM;
- #endif
- #ifdef HAVE_ARMV5TE
-- } else if (idct_algo==FF_IDCT_SIMPLEARMV5TE){
-- c->idct_put= simple_idct_put_armv5te;
-- c->idct_add= simple_idct_add_armv5te;
-- c->idct = simple_idct_armv5te;
-- c->idct_permutation_type = FF_NO_IDCT_PERM;
-+ } else if (idct_algo==FF_IDCT_SIMPLEARMV5TE){
-+ c->idct_put= simple_idct_put_armv5te;
-+ c->idct_add= simple_idct_add_armv5te;
-+ c->idct = simple_idct_armv5te;
-+ c->idct_permutation_type = FF_NO_IDCT_PERM;
- #endif
- #ifdef HAVE_IPP
-- } else if (idct_algo==FF_IDCT_IPP){
-- c->idct_put= simple_idct_ipp_put;
-- c->idct_add= simple_idct_ipp_add;
-- c->idct = simple_idct_ipp;
-- c->idct_permutation_type= FF_NO_IDCT_PERM;
-+ } else if (idct_algo==FF_IDCT_IPP){
-+ c->idct_put= simple_idct_ipp_put;
-+ c->idct_add= simple_idct_ipp_add;
-+ c->idct = simple_idct_ipp;
-+ c->idct_permutation_type= FF_NO_IDCT_PERM;
-+#endif
-+#ifdef HAVE_NEON
-+ } else if (idct_algo==FF_IDCT_SIMPLENEON){
-+ c->idct_put= ff_simple_idct_put_neon;
-+ c->idct_add= ff_simple_idct_add_neon;
-+ c->idct = ff_simple_idct_neon;
-+ c->idct_permutation_type = FF_NO_IDCT_PERM;
- #endif
-+ }
- }
-
- c->put_pixels_tab[0][0] = put_pixels16_arm;
-@@ -271,7 +308,17 @@
- c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_arm; //OK
- c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_arm;
-
-+#ifdef HAVE_ARMV5TE
-+ c->prefetch = prefetch_arm;
-+#endif
-+
- #ifdef HAVE_IWMMXT
- dsputil_init_iwmmxt(c, avctx);
- #endif
-+#ifdef HAVE_ARMVFP
-+ ff_float_init_arm_vfp(c, avctx);
-+#endif
-+#ifdef HAVE_NEON
-+ ff_dsputil_init_neon(c, avctx);
-+#endif
- }
-diff -Nurd mythtv.orig/libs/libavcodec/armv4l/dsputil_arm_s.S mythtv/libs/libavcodec/armv4l/dsputil_arm_s.S
---- mythtv.orig/libs/libavcodec/armv4l/dsputil_arm_s.S 2008-07-23 12:19:05.000000000 +0200
-+++ mythtv/libs/libavcodec/armv4l/dsputil_arm_s.S 2008-07-24 19:54:00.753198000 +0200
-@@ -19,6 +19,13 @@
- @ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- @
-
-+#include "config.h"
-+
-+#ifndef HAVE_PLD
-+.macro pld reg
-+.endm
-+#endif
-+
- .macro ADJ_ALIGN_QUADWORD_D shift, Rd0, Rd1, Rd2, Rd3, Rn0, Rn1, Rn2, Rn3, Rn4
- mov \Rd0, \Rn0, lsr #(\shift * 8)
- mov \Rd1, \Rn1, lsr #(\shift * 8)
-diff -Nurd mythtv.orig/libs/libavcodec/armv4l/dsputil_iwmmxt.c mythtv/libs/libavcodec/armv4l/dsputil_iwmmxt.c
---- mythtv.orig/libs/libavcodec/armv4l/dsputil_iwmmxt.c 2008-07-23 12:19:05.000000000 +0200
-+++ mythtv/libs/libavcodec/armv4l/dsputil_iwmmxt.c 2008-07-24 19:54:00.753198000 +0200
-@@ -19,10 +19,10 @@
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
--#include "dsputil.h"
-+#include "libavcodec/dsputil.h"
-
- #define DEF(x, y) x ## _no_rnd_ ## y ##_iwmmxt
--#define SET_RND(regd) __asm__ __volatile__ ("mov r12, #1 \n\t tbcsth " #regd ", r12":::"r12");
-+#define SET_RND(regd) asm volatile ("mov r12, #1 \n\t tbcsth " #regd ", r12":::"r12");
- #define WAVG2B "wavg2b"
- #include "dsputil_iwmmxt_rnd.h"
- #undef DEF
-@@ -30,7 +30,7 @@
- #undef WAVG2B
-
- #define DEF(x, y) x ## _ ## y ##_iwmmxt
--#define SET_RND(regd) __asm__ __volatile__ ("mov r12, #2 \n\t tbcsth " #regd ", r12":::"r12");
-+#define SET_RND(regd) asm volatile ("mov r12, #2 \n\t tbcsth " #regd ", r12":::"r12");
- #define WAVG2B "wavg2br"
- #include "dsputil_iwmmxt_rnd.h"
- #undef DEF
-@@ -89,7 +89,7 @@
- {
- uint8_t *pixels2 = pixels + line_size;
-
-- __asm__ __volatile__ (
-+ asm volatile (
- "mov r12, #4 \n\t"
- "1: \n\t"
- "pld [%[pixels], %[line_size2]] \n\t"
-@@ -125,7 +125,7 @@
-
- static void clear_blocks_iwmmxt(DCTELEM *blocks)
- {
-- __asm __volatile(
-+ asm volatile(
- "wzero wr0 \n\t"
- "mov r1, #(128 * 6 / 32) \n\t"
- "1: \n\t"
-diff -Nurd mythtv.orig/libs/libavcodec/armv4l/dsputil_iwmmxt_rnd.h mythtv/libs/libavcodec/armv4l/dsputil_iwmmxt_rnd.h
---- mythtv.orig/libs/libavcodec/armv4l/dsputil_iwmmxt_rnd.h 2008-07-23 12:19:05.000000000 +0200
-+++ mythtv/libs/libavcodec/armv4l/dsputil_iwmmxt_rnd.h 2008-07-24 19:54:01.023198000 +0200
-@@ -19,13 +19,14 @@
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
--#ifndef FFMPEG_DSPUTIL_IWMMXT_RND_H
--#define FFMPEG_DSPUTIL_IWMMXT_RND_H
-+/* This header intentionally has no multiple inclusion guards. It is meant to
-+ * be included multiple times and generates different code depending on the
-+ * value of certain #defines. */
-
- void DEF(put, pixels8)(uint8_t *block, const uint8_t *pixels, const int line_size, int h)
- {
- int stride = line_size;
-- __asm__ __volatile__ (
-+ asm volatile (
- "and r12, %[pixels], #7 \n\t"
- "bic %[pixels], %[pixels], #7 \n\t"
- "tmcr wcgr1, r12 \n\t"
-@@ -59,7 +60,7 @@
- void DEF(avg, pixels8)(uint8_t *block, const uint8_t *pixels, const int line_size, int h)
- {
- int stride = line_size;
-- __asm__ __volatile__ (
-+ asm volatile (
- "and r12, %[pixels], #7 \n\t"
- "bic %[pixels], %[pixels], #7 \n\t"
- "tmcr wcgr1, r12 \n\t"
-@@ -101,7 +102,7 @@
- void DEF(put, pixels16)(uint8_t *block, const uint8_t *pixels, const int line_size, int h)
- {
- int stride = line_size;
-- __asm__ __volatile__ (
-+ asm volatile (
- "and r12, %[pixels], #7 \n\t"
- "bic %[pixels], %[pixels], #7 \n\t"
- "tmcr wcgr1, r12 \n\t"
-@@ -141,7 +142,7 @@
- void DEF(avg, pixels16)(uint8_t *block, const uint8_t *pixels, const int line_size, int h)
- {
- int stride = line_size;
-- __asm__ __volatile__ (
-+ asm volatile (
- "pld [%[pixels]] \n\t"
- "pld [%[pixels], #32] \n\t"
- "pld [%[block]] \n\t"
-@@ -200,7 +201,7 @@
- // [wr0 wr1 wr2 wr3] for previous line
- // [wr4 wr5 wr6 wr7] for current line
- SET_RND(wr15); // =2 for rnd and =1 for no_rnd version
-- __asm__ __volatile__(
-+ asm volatile(
- "pld [%[pixels]] \n\t"
- "pld [%[pixels], #32] \n\t"
- "and r12, %[pixels], #7 \n\t"
-@@ -249,7 +250,7 @@
- // [wr0 wr1 wr2 wr3] for previous line
- // [wr4 wr5 wr6 wr7] for current line
- SET_RND(wr15); // =2 for rnd and =1 for no_rnd version
-- __asm__ __volatile__(
-+ asm volatile(
- "pld [%[pixels]] \n\t"
- "pld [%[pixels], #32] \n\t"
- "and r12, %[pixels], #7 \n\t"
-@@ -310,7 +311,7 @@
- // [wr0 wr1 wr2 wr3] for previous line
- // [wr4 wr5 wr6 wr7] for current line
- SET_RND(wr15); // =2 for rnd and =1 for no_rnd version
-- __asm__ __volatile__(
-+ asm volatile(
- "pld [%[pixels]] \n\t"
- "pld [%[pixels], #32] \n\t"
- "pld [%[block]] \n\t"
-@@ -371,7 +372,7 @@
- // [wr0 wr1 wr2 wr3] for previous line
- // [wr4 wr5 wr6 wr7] for current line
- SET_RND(wr15); // =2 for rnd and =1 for no_rnd version
-- __asm__ __volatile__(
-+ asm volatile(
- "pld [%[pixels]] \n\t"
- "pld [%[pixels], #32] \n\t"
- "pld [%[block]] \n\t"
-@@ -447,7 +448,7 @@
- int stride = line_size;
- // [wr0 wr1 wr2 wr3] for previous line
- // [wr4 wr5 wr6 wr7] for current line
-- __asm__ __volatile__(
-+ asm volatile(
- "pld [%[pixels]] \n\t"
- "pld [%[pixels], #32] \n\t"
- "and r12, %[pixels], #7 \n\t"
-@@ -501,7 +502,7 @@
- int stride = line_size;
- // [wr0 wr1 wr2 wr3] for previous line
- // [wr4 wr5 wr6 wr7] for current line
-- __asm__ __volatile__(
-+ asm volatile(
- "pld [%[pixels]] \n\t"
- "pld [%[pixels], #32] \n\t"
- "and r12, %[pixels], #7 \n\t"
-@@ -558,7 +559,7 @@
- int stride = line_size;
- // [wr0 wr1 wr2 wr3] for previous line
- // [wr4 wr5 wr6 wr7] for current line
-- __asm__ __volatile__(
-+ asm volatile(
- "pld [%[pixels]] \n\t"
- "pld [%[pixels], #32] \n\t"
- "and r12, %[pixels], #7 \n\t"
-@@ -626,7 +627,7 @@
- // [wr0 wr1 wr2 wr3] for previous line
- // [wr4 wr5 wr6 wr7] for current line
- SET_RND(wr15); // =2 for rnd and =1 for no_rnd version
-- __asm__ __volatile__(
-+ asm volatile(
- "pld [%[pixels]] \n\t"
- "mov r12, #2 \n\t"
- "pld [%[pixels], #32] \n\t"
-@@ -720,7 +721,7 @@
- // [wr0 wr1 wr2 wr3] for previous line
- // [wr4 wr5 wr6 wr7] for current line
- SET_RND(wr15); // =2 for rnd and =1 for no_rnd version
-- __asm__ __volatile__(
-+ asm volatile(
- "pld [%[pixels]] \n\t"
- "mov r12, #2 \n\t"
- "pld [%[pixels], #32] \n\t"
-@@ -862,7 +863,7 @@
- // [wr0 wr1 wr2 wr3] for previous line
- // [wr4 wr5 wr6 wr7] for current line
- SET_RND(wr15); // =2 for rnd and =1 for no_rnd version
-- __asm__ __volatile__(
-+ asm volatile(
- "pld [%[block]] \n\t"
- "pld [%[block], #32] \n\t"
- "pld [%[pixels]] \n\t"
-@@ -966,7 +967,7 @@
- // [wr0 wr1 wr2 wr3] for previous line
- // [wr4 wr5 wr6 wr7] for current line
- SET_RND(wr15); // =2 for rnd and =1 for no_rnd version
-- __asm__ __volatile__(
-+ asm volatile(
- "pld [%[block]] \n\t"
- "pld [%[block], #32] \n\t"
- "pld [%[pixels]] \n\t"
-@@ -1115,5 +1116,3 @@
- : [line_size]"r"(line_size)
- : "r12", "memory");
- }
--
--#endif /* FFMPEG_DSPUTIL_IWMMXT_RND_H */
-diff -Nurd mythtv.orig/libs/libavcodec/armv4l/dsputil_neon.c mythtv/libs/libavcodec/armv4l/dsputil_neon.c
---- mythtv.orig/libs/libavcodec/armv4l/dsputil_neon.c 1970-01-01 01:00:00.000000000 +0100
-+++ mythtv/libs/libavcodec/armv4l/dsputil_neon.c 2008-07-24 19:54:01.023198000 +0200
-@@ -0,0 +1,397 @@
-+/*
-+ * ARM NEON optimised DSP functions
-+ * Copyright (c) 2008 Mans Rullgard <mans@mansr.com>
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg 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.
-+ *
-+ * FFmpeg 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 FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#include <stdint.h>
-+
-+#include "libavcodec/avcodec.h"
-+#include "libavcodec/dsputil.h"
-+
-+extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
-+ int h, int x, int y);
-+
-+#define PUT_PIXELS_16_X2(vhadd) \
-+ "1: \n\t" \
-+ "vld1.64 {d0,d1,d2}, [%[p]], %[line_size] \n\t" \
-+ "vld1.64 {d4,d5,d6}, [%[p]], %[line_size] \n\t" \
-+ "pld [%[p]] \n\t" \
-+ "subs %[h], %[h], #2 \n\t" \
-+ "vext.8 q1, q0, q1, #1 \n\t" \
-+ "vext.8 q3, q2, q3, #1 \n\t" \
-+ vhadd".u8 q0, q0, q1 \n\t" \
-+ vhadd".u8 q2, q2, q3 \n\t" \
-+ "vst1.64 {d0,d1}, [%[b],:64], %[line_size] \n\t" \
-+ "vst1.64 {d4,d5}, [%[b],:64], %[line_size] \n\t" \
-+ "bne 1b \n\t"
-+
-+#define PUT_PIXELS_16_Y2(vhadd) \
-+ "add %[p1], %[p0], %[line_size] \n\t" \
-+ "lsl %[l2], %[line_size], #1 \n\t" \
-+ "vld1.64 {d0,d1}, [%[p0]], %[l2] \n\t" \
-+ "vld1.64 {d2,d3}, [%[p1]], %[l2] \n\t" \
-+ "1: \n\t" \
-+ "subs %[h], %[h], #2 \n\t" \
-+ vhadd".u8 q2, q0, q1 \n\t" \
-+ "vst1.64 {d4,d5}, [%[b],:128], %[line_size] \n\t" \
-+ "vld1.64 {d0,d1}, [%[p0]], %[l2] \n\t" \
-+ vhadd".u8 q2, q0, q1 \n\t" \
-+ "vst1.64 {d4,d5}, [%[b],:128], %[line_size] \n\t" \
-+ "vld1.64 {d2,d3}, [%[p1]], %[l2] \n\t" \
-+ "bne 1b \n\t"
-+
-+#define PUT_PIXELS_16_XY2(vshrn, no_rnd) \
-+ "lsl %[l2], %[line_size], #1 \n\t" \
-+ "add %[p1], %[p0], %[line_size] \n\t" \
-+ "vld1.64 {d0,d1,d2}, [%[p0]], %[l2] \n\t" \
-+ "vld1.64 {d4,d5,d6}, [%[p1]], %[l2] \n\t" \
-+ "pld [%[p0]] \n\t" \
-+ "pld [%[p1]] \n\t" \
-+ "vext.8 q1, q0, q1, #1 \n\t" \
-+ "vext.8 q3, q2, q3, #1 \n\t" \
-+ "vaddl.u8 q8, d0, d2 \n\t" \
-+ "vaddl.u8 q10, d1, d3 \n\t" \
-+ "vaddl.u8 q9, d4, d6 \n\t" \
-+ "vaddl.u8 q11, d5, d7 \n\t" \
-+ "1: \n\t" \
-+ "subs %[h], %[h], #2 \n\t" \
-+ "vld1.64 {d0,d1,d2}, [%[p0]], %[l2] \n\t" \
-+ "vadd.u16 q12, q8, q9 \n\t" \
-+ "pld [%[p0]] \n\t" \
-+ no_rnd "vadd.u16 q12, q12, q13 \n\t" \
-+ "vext.8 q15, q0, q1, #1 \n\t" \
-+ "vadd.u16 q1, q10, q11 \n\t" \
-+ vshrn".u16 d28, q12, #2 \n\t" \
-+ no_rnd "vadd.u16 q1, q1, q13 \n\t" \
-+ vshrn".u16 d29, q1, #2 \n\t" \
-+ "vaddl.u8 q8, d0, d30 \n\t" \
-+ "vld1.64 {d2,d3,d4}, [%[p1]], %[l2] \n\t" \
-+ "vaddl.u8 q10, d1, d31 \n\t" \
-+ "vst1.64 {d28,d29}, [%[b],:128], %[line_size] \n\t" \
-+ "vadd.u16 q12, q8, q9 \n\t" \
-+ "pld [%[p1]] \n\t" \
-+ no_rnd "vadd.u16 q12, q12, q13 \n\t" \
-+ "vext.8 q2, q1, q2, #1 \n\t" \
-+ "vadd.u16 q0, q10, q11 \n\t" \
-+ vshrn".u16 d30, q12, #2 \n\t" \
-+ no_rnd "vadd.u16 q0, q0, q13 \n\t" \
-+ vshrn".u16 d31, q0, #2 \n\t" \
-+ "vaddl.u8 q9, d2, d4 \n\t" \
-+ "vst1.64 {d30,d31}, [%[b],:128], %[line_size] \n\t" \
-+ "vaddl.u8 q11, d3, d5 \n\t" \
-+ "bgt 1b \n\t"
-+
-+#define PUT_PIXELS_8_X2(vhadd) \
-+ "1: \n\t" \
-+ "vld1.64 {d0,d1}, [%[p]], %[line_size] \n\t" \
-+ "vld1.64 {d2,d3}, [%[p]], %[line_size] \n\t" \
-+ "pld [%[p]] \n\t" \
-+ "subs %[h], %[h], #2 \n\t" \
-+ "vext.8 d1, d0, d1, #1 \n\t" \
-+ "vext.8 d3, d2, d3, #1 \n\t" \
-+ "vswp d1, d2 \n\t" \
-+ vhadd".u8 q0, q0, q1 \n\t" \
-+ "vst1.64 {d0}, [%[b],:64], %[line_size] \n\t" \
-+ "vst1.64 {d1}, [%[b],:64], %[line_size] \n\t" \
-+ "bne 1b \n\t"
-+
-+#define PUT_PIXELS_8_Y2(vhadd) \
-+ "add %[p1], %[p0], %[line_size] \n\t" \
-+ "lsl %[l2], %[line_size], #1 \n\t" \
-+ "vld1.64 {d0}, [%[p0]], %[l2] \n\t" \
-+ "vld1.64 {d1}, [%[p1]], %[l2] \n\t" \
-+ "1: \n\t" \
-+ "subs %[h], %[h], #2 \n\t" \
-+ vhadd".u8 d4, d0, d1 \n\t" \
-+ "vst1.64 {d4}, [%[b],:64], %[line_size] \n\t" \
-+ "vld1.64 {d0}, [%[p0]], %[l2] \n\t" \
-+ vhadd".u8 d4, d0, d1 \n\t" \
-+ "vst1.64 {d4}, [%[b],:64], %[line_size] \n\t" \
-+ "vld1.64 {d1}, [%[p1]], %[l2] \n\t" \
-+ "bne 1b \n\t"
-+
-+#define PUT_PIXELS8_XY2(vshrn, no_rnd) \
-+ "lsl %[l2], %[line_size], #1 \n\t" \
-+ "add %[p1], %[p0], %[line_size] \n\t" \
-+ "vld1.64 {d0,d1}, [%[p0]], %[l2] \n\t" \
-+ "vld1.64 {d2,d3}, [%[p1]], %[l2] \n\t" \
-+ "pld [%[p0]] \n\t" \
-+ "pld [%[p1]] \n\t" \
-+ "vext.8 d4, d0, d1, #1 \n\t" \
-+ "vext.8 d6, d2, d3, #1 \n\t" \
-+ "vaddl.u8 q8, d0, d4 \n\t" \
-+ "vaddl.u8 q9, d2, d6 \n\t" \
-+ "1: \n\t" \
-+ "subs %[h], %[h], #2 \n\t" \
-+ "vld1.64 {d0,d1}, [%[p0]], %[l2] \n\t" \
-+ "pld [%[p0]] \n\t" \
-+ "vadd.u16 q10, q8, q9 \n\t" \
-+ "vext.8 d4, d0, d1, #1 \n\t" \
-+ no_rnd "vadd.u16 q10, q10, q11 \n\t" \
-+ "vaddl.u8 q8, d0, d4 \n\t" \
-+ vshrn".u16 d5, q10, #2 \n\t" \
-+ "vld1.64 {d2,d3}, [%[p1]], %[l2] \n\t" \
-+ "vadd.u16 q10, q8, q9 \n\t" \
-+ "pld [%[p1]] \n\t" \
-+ no_rnd "vadd.u16 q10, q10, q11 \n\t" \
-+ "vst1.64 {d5}, [%[b],:64], %[line_size] \n\t" \
-+ vshrn".u16 d7, q10, #2 \n\t" \
-+ "vext.8 d6, d2, d3, #1 \n\t" \
-+ "vaddl.u8 q9, d2, d6 \n\t" \
-+ "vst1.64 {d7}, [%[b],:64], %[line_size] \n\t" \
-+ "bgt 1b \n\t"
-+
-+static void put_pixels16_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ asm volatile(
-+ "1: \n\t"
-+ "vld1.64 {d0,d1}, [%[pixels]], %[line_size] \n\t"
-+ "vld1.64 {d2,d3}, [%[pixels]], %[line_size] \n\t"
-+ "vld1.64 {d4,d5}, [%[pixels]], %[line_size] \n\t"
-+ "vld1.64 {d6,d7}, [%[pixels]], %[line_size] \n\t"
-+ "pld [%[pixels]] \n\t"
-+ "subs %[h], %[h], #4 \n\t"
-+ "vst1.64 {d0,d1}, [%[block],:128], %[line_size] \n\t"
-+ "vst1.64 {d2,d3}, [%[block],:128], %[line_size] \n\t"
-+ "vst1.64 {d4,d5}, [%[block],:128], %[line_size] \n\t"
-+ "vst1.64 {d6,d7}, [%[block],:128], %[line_size] \n\t"
-+ "bne 1b \n\t"
-+ : [block]"+r"(block), [pixels]"+r"(pixels), [h]"+r"(h)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "memory");
-+}
-+
-+static void put_pixels16_x2_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ asm volatile(
-+ PUT_PIXELS_16_X2("vrhadd")
-+ : [b]"+r"(block), [p]"+r"(pixels), [h]"+r"(h)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "memory");
-+}
-+
-+static void put_pixels16_y2_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ const uint8_t *p1;
-+ int l2;
-+
-+ asm volatile(
-+ PUT_PIXELS_16_Y2("vrhadd")
-+ : [b]"+r"(block), [p0]"+r"(pixels), [p1]"=&r"(p1), [h]"+r"(h),
-+ [l2]"=&r"(l2)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d2", "d3", "d4", "d5", "memory");
-+}
-+
-+static void put_pixels16_xy2_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ const uint8_t *p1;
-+ int l2;
-+
-+ asm volatile(
-+ PUT_PIXELS_16_XY2("vrshrn", "@")
-+ : [b]"+r"(block),
-+ [p0]"+r"(pixels),
-+ [p1]"=&r"(p1), [h]"+r"(h),
-+ [l2]"=&r"(l2)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
-+ "d28", "d29", "d30", "d31",
-+ "q8", "q9", "q10", "q11", "q12", "memory");
-+}
-+
-+static void put_pixels8_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ asm volatile(
-+ "1: \n\t"
-+ "vld1.64 {d0}, [%[p]], %[line_size] \n\t"
-+ "vld1.64 {d1}, [%[p]], %[line_size] \n\t"
-+ "vld1.64 {d2}, [%[p]], %[line_size] \n\t"
-+ "vld1.64 {d3}, [%[p]], %[line_size] \n\t"
-+ "subs %[h], %[h], #4 \n\t"
-+ "vst1.64 {d0}, [%[b],:64], %[line_size] \n\t"
-+ "vst1.64 {d1}, [%[b],:64], %[line_size] \n\t"
-+ "vst1.64 {d2}, [%[b],:64], %[line_size] \n\t"
-+ "vst1.64 {d3}, [%[b],:64], %[line_size] \n\t"
-+ "bne 1b \n\t"
-+ : [b]"+r"(block), [p]"+r"(pixels), [h]"+r"(h)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d2", "d3", "memory");
-+}
-+
-+static void put_pixels8_x2_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ asm volatile(
-+ PUT_PIXELS_8_X2("vrhadd")
-+ : [b]"+r"(block), [p]"+r"(pixels), [h]"+r"(h)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d2", "d3", "memory");
-+}
-+
-+static void put_pixels8_y2_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ const uint8_t *p1;
-+ int l2;
-+
-+ asm volatile(
-+ PUT_PIXELS_8_Y2("vrhadd")
-+ : [b]"+r"(block), [p0]"+r"(pixels), [p1]"=&r"(p1), [h]"+r"(h),
-+ [l2]"=&r"(l2)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d4", "memory");
-+}
-+
-+static void put_pixels8_xy2_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ const uint8_t *p1;
-+ int l2;
-+
-+ asm volatile(
-+ PUT_PIXELS8_XY2("vrshrn", "@")
-+ : [b]"+r"(block),
-+ [p0]"+r"(pixels),
-+ [p1]"=&r"(p1), [h]"+r"(h),
-+ [l2]"=&r"(l2)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d2", "d3", "d4", "d6", "d7",
-+ "q8", "q9", "q10", "memory");
-+}
-+
-+static void put_no_rnd_pixels16_x2_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ asm volatile(
-+ PUT_PIXELS_16_X2("vhadd")
-+ : [b]"+r"(block), [p]"+r"(pixels), [h]"+r"(h)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "memory");
-+}
-+
-+static void put_no_rnd_pixels16_y2_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ const uint8_t *p1;
-+ int l2;
-+
-+ asm volatile(
-+ PUT_PIXELS_16_Y2("vhadd")
-+ : [b]"+r"(block), [p0]"+r"(pixels), [p1]"=&r"(p1), [h]"+r"(h),
-+ [l2]"=&r"(l2)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d2", "d3", "d4", "d5", "memory");
-+}
-+
-+static void put_no_rnd_pixels16_xy2_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ const uint8_t *p1;
-+ int l2;
-+
-+ asm volatile(
-+ "vmov.i16 q13, #1 \n\t"
-+ PUT_PIXELS_16_XY2("vshrn", "")
-+ : [b]"+r"(block),
-+ [p0]"+r"(pixels),
-+ [p1]"=&r"(p1), [h]"+r"(h),
-+ [l2]"=&r"(l2)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
-+ "d28", "d29", "d30", "d31",
-+ "q8", "q9", "q10", "q11", "q12", "q13", "memory");
-+}
-+
-+static void put_no_rnd_pixels8_x2_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ asm volatile(
-+ PUT_PIXELS_8_X2("vhadd")
-+ : [b]"+r"(block), [p]"+r"(pixels), [h]"+r"(h)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d2", "d3", "memory");
-+}
-+
-+static void put_no_rnd_pixels8_y2_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ const uint8_t *p1;
-+ int l2;
-+
-+ asm volatile(
-+ PUT_PIXELS_8_Y2("vhadd")
-+ : [b]"+r"(block), [p0]"+r"(pixels), [p1]"=&r"(p1), [h]"+r"(h),
-+ [l2]"=&r"(l2)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d4", "memory");
-+}
-+
-+static void put_no_rnd_pixels8_xy2_neon(uint8_t *block, const uint8_t *pixels,
-+ int line_size, int h)
-+{
-+ const uint8_t *p1;
-+ int l2;
-+
-+ asm volatile(
-+ "vmov.i16 q11, #1 \n\t"
-+ PUT_PIXELS8_XY2("vshrn", "")
-+ : [b]"+r"(block),
-+ [p0]"+r"(pixels),
-+ [p1]"=&r"(p1), [h]"+r"(h),
-+ [l2]"=&r"(l2)
-+ : [line_size]"r"(line_size)
-+ : "d0", "d1", "d2", "d3", "d4", "d6", "d7",
-+ "q8", "q9", "q10", "q11", "memory");
-+}
-+
-+static void put_h264_qpel16_mc00_neon(uint8_t *dst, uint8_t *src, int stride)
-+{
-+ put_pixels16_neon(dst, src, stride, 16);
-+}
-+
-+void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx)
-+{
-+ c->put_pixels_tab[0][0] = put_pixels16_neon;
-+ c->put_pixels_tab[0][1] = put_pixels16_x2_neon;
-+ c->put_pixels_tab[0][2] = put_pixels16_y2_neon;
-+ c->put_pixels_tab[0][3] = put_pixels16_xy2_neon;
-+ c->put_pixels_tab[1][0] = put_pixels8_neon;
-+ c->put_pixels_tab[1][1] = put_pixels8_x2_neon;
-+ c->put_pixels_tab[1][2] = put_pixels8_y2_neon;
-+ c->put_pixels_tab[1][3] = put_pixels8_xy2_neon;
-+
-+ c->put_no_rnd_pixels_tab[0][0] = put_pixels16_neon;
-+ c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_neon;
-+ c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_neon;
-+ c->put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy2_neon;
-+ c->put_no_rnd_pixels_tab[1][0] = put_pixels8_neon;
-+ c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_neon;
-+ c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_neon;
-+ c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_neon;
-+
-+ c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_neon;
-+
-+ c->put_h264_qpel_pixels_tab[0][0] = put_h264_qpel16_mc00_neon;
-+}
-diff -Nurd mythtv.orig/libs/libavcodec/armv4l/float_arm_vfp.c mythtv/libs/libavcodec/armv4l/float_arm_vfp.c
---- mythtv.orig/libs/libavcodec/armv4l/float_arm_vfp.c 1970-01-01 01:00:00.000000000 +0100
-+++ mythtv/libs/libavcodec/armv4l/float_arm_vfp.c 2008-07-24 19:54:01.023198000 +0200
-@@ -0,0 +1,208 @@
-+/*
-+ * Copyright (c) 2008 Siarhei Siamashka <ssvb@users.sourceforge.net>
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg 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.
-+ *
-+ * FFmpeg 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 FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#include "libavcodec/dsputil.h"
-+
-+/*
-+ * VFP is a floating point coprocessor used in some ARM cores. VFP11 has 1 cycle
-+ * throughput for almost all the instructions (except for double precision
-+ * arithmetics), but rather high latency. Latency is 4 cycles for loads and 8 cycles
-+ * for arithmetic operations. Scheduling code to avoid pipeline stalls is very
-+ * important for performance. One more interesting feature is that VFP has
-+ * independent load/store and arithmetics pipelines, so it is possible to make
-+ * them work simultaneously and get more than 1 operation per cycle. Load/store
-+ * pipeline can process 2 single precision floating point values per cycle and
-+ * supports bulk loads and stores for large sets of registers. Arithmetic operations
-+ * can be done on vectors, which allows to keep the arithmetics pipeline busy,
-+ * while the processor may issue and execute other instructions. Detailed
-+ * optimization manuals can be found at http://www.arm.com
-+ */
-+
-+/**
-+ * ARM VFP optimized implementation of 'vector_fmul_c' function.
-+ * Assume that len is a positive number and is multiple of 8
-+ */
-+static void vector_fmul_vfp(float *dst, const float *src, int len)
-+{
-+ int tmp;
-+ asm volatile(
-+ "fmrx %[tmp], fpscr\n\t"
-+ "orr %[tmp], %[tmp], #(3 << 16)\n\t" /* set vector size to 4 */
-+ "fmxr fpscr, %[tmp]\n\t"
-+
-+ "fldmias %[dst_r]!, {s0-s3}\n\t"
-+ "fldmias %[src]!, {s8-s11}\n\t"
-+ "fldmias %[dst_r]!, {s4-s7}\n\t"
-+ "fldmias %[src]!, {s12-s15}\n\t"
-+ "fmuls s8, s0, s8\n\t"
-+ "1:\n\t"
-+ "subs %[len], %[len], #16\n\t"
-+ "fmuls s12, s4, s12\n\t"
-+ "fldmiasge %[dst_r]!, {s16-s19}\n\t"
-+ "fldmiasge %[src]!, {s24-s27}\n\t"
-+ "fldmiasge %[dst_r]!, {s20-s23}\n\t"
-+ "fldmiasge %[src]!, {s28-s31}\n\t"
-+ "fmulsge s24, s16, s24\n\t"
-+ "fstmias %[dst_w]!, {s8-s11}\n\t"
-+ "fstmias %[dst_w]!, {s12-s15}\n\t"
-+ "fmulsge s28, s20, s28\n\t"
-+ "fldmiasgt %[dst_r]!, {s0-s3}\n\t"
-+ "fldmiasgt %[src]!, {s8-s11}\n\t"
-+ "fldmiasgt %[dst_r]!, {s4-s7}\n\t"
-+ "fldmiasgt %[src]!, {s12-s15}\n\t"
-+ "fmulsge s8, s0, s8\n\t"
-+ "fstmiasge %[dst_w]!, {s24-s27}\n\t"
-+ "fstmiasge %[dst_w]!, {s28-s31}\n\t"
-+ "bgt 1b\n\t"
-+
-+ "bic %[tmp], %[tmp], #(7 << 16)\n\t" /* set vector size back to 1 */
-+ "fmxr fpscr, %[tmp]\n\t"
-+ : [dst_w] "+&r" (dst), [dst_r] "+&r" (dst), [src] "+&r" (src), [len] "+&r" (len), [tmp] "=&r" (tmp)
-+ :
-+ : "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
-+ "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
-+ "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
-+ "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
-+ "cc", "memory");
-+}
-+
-+/**
-+ * ARM VFP optimized implementation of 'vector_fmul_reverse_c' function.
-+ * Assume that len is a positive number and is multiple of 8
-+ */
-+static void vector_fmul_reverse_vfp(float *dst, const float *src0, const float *src1, int len)
-+{
-+ src1 += len;
-+ asm volatile(
-+ "fldmdbs %[src1]!, {s0-s3}\n\t"
-+ "fldmias %[src0]!, {s8-s11}\n\t"
-+ "fldmdbs %[src1]!, {s4-s7}\n\t"
-+ "fldmias %[src0]!, {s12-s15}\n\t"
-+ "fmuls s8, s3, s8\n\t"
-+ "fmuls s9, s2, s9\n\t"
-+ "fmuls s10, s1, s10\n\t"
-+ "fmuls s11, s0, s11\n\t"
-+ "1:\n\t"
-+ "subs %[len], %[len], #16\n\t"
-+ "fldmdbsge %[src1]!, {s16-s19}\n\t"
-+ "fmuls s12, s7, s12\n\t"
-+ "fldmiasge %[src0]!, {s24-s27}\n\t"
-+ "fmuls s13, s6, s13\n\t"
-+ "fldmdbsge %[src1]!, {s20-s23}\n\t"
-+ "fmuls s14, s5, s14\n\t"
-+ "fldmiasge %[src0]!, {s28-s31}\n\t"
-+ "fmuls s15, s4, s15\n\t"
-+ "fmulsge s24, s19, s24\n\t"
-+ "fldmdbsgt %[src1]!, {s0-s3}\n\t"
-+ "fmulsge s25, s18, s25\n\t"
-+ "fstmias %[dst]!, {s8-s13}\n\t"
-+ "fmulsge s26, s17, s26\n\t"
-+ "fldmiasgt %[src0]!, {s8-s11}\n\t"
-+ "fmulsge s27, s16, s27\n\t"
-+ "fmulsge s28, s23, s28\n\t"
-+ "fldmdbsgt %[src1]!, {s4-s7}\n\t"
-+ "fmulsge s29, s22, s29\n\t"
-+ "fstmias %[dst]!, {s14-s15}\n\t"
-+ "fmulsge s30, s21, s30\n\t"
-+ "fmulsge s31, s20, s31\n\t"
-+ "fmulsge s8, s3, s8\n\t"
-+ "fldmiasgt %[src0]!, {s12-s15}\n\t"
-+ "fmulsge s9, s2, s9\n\t"
-+ "fmulsge s10, s1, s10\n\t"
-+ "fstmiasge %[dst]!, {s24-s27}\n\t"
-+ "fmulsge s11, s0, s11\n\t"
-+ "fstmiasge %[dst]!, {s28-s31}\n\t"
-+ "bgt 1b\n\t"
-+
-+ : [dst] "+&r" (dst), [src0] "+&r" (src0), [src1] "+&r" (src1), [len] "+&r" (len)
-+ :
-+ : "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
-+ "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
-+ "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
-+ "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
-+ "cc", "memory");
-+}
-+
-+#ifdef HAVE_ARMV6
-+/**
-+ * ARM VFP optimized float to int16 conversion.
-+ * Assume that len is a positive number and is multiple of 8, destination
-+ * buffer is at least 4 bytes aligned (8 bytes alignment is better for
-+ * performance), little endian byte sex
-+ */
-+void float_to_int16_vfp(int16_t *dst, const float *src, int len)
-+{
-+ asm volatile(
-+ "fldmias %[src]!, {s16-s23}\n\t"
-+ "ftosis s0, s16\n\t"
-+ "ftosis s1, s17\n\t"
-+ "ftosis s2, s18\n\t"
-+ "ftosis s3, s19\n\t"
-+ "ftosis s4, s20\n\t"
-+ "ftosis s5, s21\n\t"
-+ "ftosis s6, s22\n\t"
-+ "ftosis s7, s23\n\t"
-+ "1:\n\t"
-+ "subs %[len], %[len], #8\n\t"
-+ "fmrrs r3, r4, {s0, s1}\n\t"
-+ "fmrrs r5, r6, {s2, s3}\n\t"
-+ "fmrrs r7, r8, {s4, s5}\n\t"
-+ "fmrrs ip, lr, {s6, s7}\n\t"
-+ "fldmiasgt %[src]!, {s16-s23}\n\t"
-+ "ssat r4, #16, r4\n\t"
-+ "ssat r3, #16, r3\n\t"
-+ "ssat r6, #16, r6\n\t"
-+ "ssat r5, #16, r5\n\t"
-+ "pkhbt r3, r3, r4, lsl #16\n\t"
-+ "pkhbt r4, r5, r6, lsl #16\n\t"
-+ "ftosisgt s0, s16\n\t"
-+ "ftosisgt s1, s17\n\t"
-+ "ftosisgt s2, s18\n\t"
-+ "ftosisgt s3, s19\n\t"
-+ "ftosisgt s4, s20\n\t"
-+ "ftosisgt s5, s21\n\t"
-+ "ftosisgt s6, s22\n\t"
-+ "ftosisgt s7, s23\n\t"
-+ "ssat r8, #16, r8\n\t"
-+ "ssat r7, #16, r7\n\t"
-+ "ssat lr, #16, lr\n\t"
-+ "ssat ip, #16, ip\n\t"
-+ "pkhbt r5, r7, r8, lsl #16\n\t"
-+ "pkhbt r6, ip, lr, lsl #16\n\t"
-+ "stmia %[dst]!, {r3-r6}\n\t"
-+ "bgt 1b\n\t"
-+
-+ : [dst] "+&r" (dst), [src] "+&r" (src), [len] "+&r" (len)
-+ :
-+ : "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
-+ "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
-+ "r3", "r4", "r5", "r6", "r7", "r8", "ip", "lr",
-+ "cc", "memory");
-+}
-+#endif
-+
-+void ff_float_init_arm_vfp(DSPContext* c, AVCodecContext *avctx)
-+{
-+ c->vector_fmul = vector_fmul_vfp;
-+ c->vector_fmul_reverse = vector_fmul_reverse_vfp;
-+#ifdef HAVE_ARMV6
-+ c->float_to_int16 = float_to_int16_vfp;
-+#endif
-+}
-diff -Nurd mythtv.orig/libs/libavcodec/armv4l/h264dsp_neon.S mythtv/libs/libavcodec/armv4l/h264dsp_neon.S
---- mythtv.orig/libs/libavcodec/armv4l/h264dsp_neon.S 1970-01-01 01:00:00.000000000 +0100
-+++ mythtv/libs/libavcodec/armv4l/h264dsp_neon.S 2008-07-24 19:54:01.033198000 +0200
-@@ -0,0 +1,148 @@
-+/*
-+ * Copyright (c) 2008 Mans Rullgard <mans@mansr.com>
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg 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.
-+ *
-+ * FFmpeg 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 FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+ .fpu neon
-+
-+ .text
-+ .align
-+ .global ff_put_h264_chroma_mc8_neon
-+ .func ff_put_h264_chroma_mc8_neon
-+/* void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
-+ int h, int x, int y) */
-+ff_put_h264_chroma_mc8_neon:
-+ push {r4-r7}
-+ ldrd r4, [sp, #16]
-+
-+ pld [r1]
-+ pld [r1, r2]
-+
-+ muls r7, r4, r5
-+ rsb r6, r7, r5, lsl #3
-+ rsb ip, r7, r4, lsl #3
-+ sub r4, r7, r4, lsl #3
-+ sub r4, r4, r5, lsl #3
-+ add r4, r4, #64
-+
-+ beq 2f
-+
-+ add r5, r1, r2
-+
-+ vdup.8 d0, r4
-+ lsl r4, r2, #1
-+ vdup.8 d1, ip
-+ vld1.64 {d4,d5}, [r1], r4
-+ vdup.8 d2, r6
-+ vld1.64 {d6,d7}, [r5], r4
-+ vdup.8 d3, r7
-+
-+ mov r6, #32
-+ vext.8 d5, d4, d5, #1
-+ vdup.16 q12, r6
-+ vext.8 d7, d6, d7, #1
-+1:
-+ pld [r5]
-+ vmull.u8 q8, d4, d0
-+ vmlal.u8 q8, d5, d1
-+ vld1.64 {d4,d5}, [r1], r4
-+ vmlal.u8 q8, d6, d2
-+ vext.8 d5, d4, d5, #1
-+ vmlal.u8 q8, d7, d3
-+ vmull.u8 q9, d6, d0
-+ vadd.i16 q8, q8, q12
-+ subs r3, r3, #2
-+ vmlal.u8 q9, d7, d1
-+ vshrn.u16 d16, q8, #6
-+ vld1.64 {d6,d7}, [r5], r4
-+ vmlal.u8 q9, d4, d2
-+ vmlal.u8 q9, d5, d3
-+ pld [r1]
-+ vadd.i16 q9, q9, q12
-+ vst1.64 {d16}, [r0,:64], r2
-+ vshrn.u16 d17, q9, #6
-+ vext.8 d7, d6, d7, #1
-+ vst1.64 {d17}, [r0,:64], r2
-+ bgt 1b
-+
-+ pop {r4-r7}
-+ bx lr
-+
-+2:
-+ tst r6, r6
-+ add ip, ip, r6
-+ vdup.8 d0, r4
-+ vdup.8 d1, ip
-+ mov r6, #32
-+ vdup.16 q12, r6
-+
-+ beq 4f
-+
-+ add r5, r1, r2
-+ lsl r4, r2, #1
-+ vld1.64 {d4}, [r1], r4
-+ vld1.64 {d6}, [r5], r4
-+3:
-+ pld [r5]
-+ vmull.u8 q8, d4, d0
-+ vmlal.u8 q8, d6, d1
-+ vld1.64 {d4}, [r1], r4
-+ vmull.u8 q9, d6, d0
-+ vadd.i16 q8, q8, q12
-+ vmlal.u8 q9, d4, d1
-+ vshrn.u16 d16, q8, #6
-+ vadd.i16 q9, q9, q12
-+ vst1.64 {d16}, [r0,:64], r2
-+ vshrn.u16 d17, q9, #6
-+ subs r3, r3, #2
-+ vld1.64 {d6}, [r5], r4
-+ pld [r1]
-+ vst1.64 {d17}, [r0,:64], r2
-+ bgt 3b
-+
-+ pop {r4-r7}
-+ bx lr
-+
-+4:
-+ vld1.64 {d4,d5}, [r1], r2
-+ vld1.64 {d6,d7}, [r1], r2
-+ vext.8 d5, d4, d5, #1
-+ vext.8 d7, d6, d7, #1
-+5:
-+ pld [r1]
-+ subs r3, r3, #2
-+ vmull.u8 q8, d4, d0
-+ vmlal.u8 q8, d5, d1
-+ vld1.64 {d4,d5}, [r1], r2
-+ vmull.u8 q9, d6, d0
-+ vmlal.u8 q9, d7, d1
-+ pld [r1]
-+ vadd.i16 q8, q8, q12
-+ vadd.i16 q9, q9, q12
-+ vext.8 d5, d4, d5, #1
-+ vshrn.u16 d16, q8, #6
-+ vld1.64 {d6,d7}, [r1], r2
-+ vshrn.u16 d17, q9, #6
-+ vst1.64 {d16}, [r0,:64], r2
-+ vext.8 d7, d6, d7, #1
-+ vst1.64 {d17}, [r0,:64], r2
-+ bgt 5b
-+
-+ pop {r4-r7}
-+ bx lr
-+ .endfunc
-diff -Nurd mythtv.orig/libs/libavcodec/armv4l/mpegvideo_arm.c mythtv/libs/libavcodec/armv4l/mpegvideo_arm.c
---- mythtv.orig/libs/libavcodec/armv4l/mpegvideo_arm.c 2008-07-23 12:19:05.000000000 +0200
-+++ mythtv/libs/libavcodec/armv4l/mpegvideo_arm.c 2008-07-24 19:54:01.263198000 +0200
-@@ -18,9 +18,9 @@
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
--#include "dsputil.h"
--#include "mpegvideo.h"
--#include "avcodec.h"
-+#include "libavcodec/avcodec.h"
-+#include "libavcodec/dsputil.h"
-+#include "libavcodec/mpegvideo.h"
-
- extern void MPV_common_init_iwmmxt(MpegEncContext *s);
- extern void MPV_common_init_armv5te(MpegEncContext *s);
-@@ -28,7 +28,7 @@
- void MPV_common_init_armv4l(MpegEncContext *s)
- {
- /* IWMMXT support is a superset of armv5te, so
-- * allow optimised functions for armv5te unless
-+ * allow optimized functions for armv5te unless
- * a better iwmmxt function exists
- */
- #ifdef HAVE_ARMV5TE
-diff -Nurd mythtv.orig/libs/libavcodec/armv4l/mpegvideo_armv5te.c mythtv/libs/libavcodec/armv4l/mpegvideo_armv5te.c
---- mythtv.orig/libs/libavcodec/armv4l/mpegvideo_armv5te.c 2008-07-23 12:19:05.000000000 +0200
-+++ mythtv/libs/libavcodec/armv4l/mpegvideo_armv5te.c 2008-07-24 19:54:01.263198000 +0200
-@@ -19,9 +19,9 @@
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
--#include "dsputil.h"
--#include "mpegvideo.h"
--#include "avcodec.h"
-+#include "libavcodec/avcodec.h"
-+#include "libavcodec/dsputil.h"
-+#include "libavcodec/mpegvideo.h"
-
-
- #ifdef ENABLE_ARM_TESTS
-@@ -65,7 +65,7 @@
- ({ DCTELEM *xblock = xxblock; \
- int xqmul = xxqmul, xqadd = xxqadd, xcount = xxcount, xtmp; \
- int xdata1, xdata2; \
--__asm__ __volatile__( \
-+asm volatile( \
- "subs %[count], %[count], #2 \n\t" \
- "ble 2f \n\t" \
- "ldrd r4, [%[block], #0] \n\t" \
-diff -Nurd mythtv.orig/libs/libavcodec/armv4l/mpegvideo_iwmmxt.c mythtv/libs/libavcodec/armv4l/mpegvideo_iwmmxt.c
---- mythtv.orig/libs/libavcodec/armv4l/mpegvideo_iwmmxt.c 2008-07-23 12:19:05.000000000 +0200
-+++ mythtv/libs/libavcodec/armv4l/mpegvideo_iwmmxt.c 2008-07-24 19:54:01.273198000 +0200
-@@ -18,9 +18,9 @@
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
--#include "dsputil.h"
--#include "mpegvideo.h"
--#include "avcodec.h"
-+#include "libavcodec/avcodec.h"
-+#include "libavcodec/dsputil.h"
-+#include "libavcodec/mpegvideo.h"
-
- static void dct_unquantize_h263_intra_iwmmxt(MpegEncContext *s,
- DCTELEM *block, int n, int qscale)
-@@ -48,7 +48,7 @@
- else
- nCoeffs= s->inter_scantable.raster_end[ s->block_last_index[n] ];
-
-- __asm__ __volatile__ (
-+ asm volatile (
- /* "movd %1, %%mm6 \n\t" //qmul */
- /* "packssdw %%mm6, %%mm6 \n\t" */
- /* "packssdw %%mm6, %%mm6 \n\t" */
-diff -Nurd mythtv.orig/libs/libavcodec/armv4l/simple_idct_arm.S mythtv/libs/libavcodec/armv4l/simple_idct_arm.S
---- mythtv.orig/libs/libavcodec/armv4l/simple_idct_arm.S 2008-07-23 12:19:05.000000000 +0200
-+++ mythtv/libs/libavcodec/armv4l/simple_idct_arm.S 2008-07-24 19:54:01.503198000 +0200
-@@ -79,7 +79,7 @@
-
-
- __row_loop:
-- @@ read the row and check if it is null, almost null, or not, according to strongarm specs, it is not necessary to optimise ldr accesses (i.e. split 32bits in 2 16bits words), at least it gives more usable registers :)
-+ @@ read the row and check if it is null, almost null, or not, according to strongarm specs, it is not necessary to optimize ldr accesses (i.e. split 32bits in 2 16bits words), at least it gives more usable registers :)
- ldr r1, [r14, #0] @ R1=(int32)(R12)[0]=ROWr32[0] (relative row cast to a 32b pointer)
- ldr r2, [r14, #4] @ R2=(int32)(R12)[1]=ROWr32[1]
- ldr r3, [r14, #8] @ R3=ROWr32[2]
-@@ -421,7 +421,7 @@
- @@ col[40] = ((a2 - b2) >> COL_SHIFT);
- @@ col[48] = ((a1 - b1) >> COL_SHIFT);
- @@ col[56] = ((a0 - b0) >> COL_SHIFT);
-- @@@@@ no optimisation here @@@@@
-+ @@@@@ no optimization here @@@@@
- add r8, r6, r0 @ R8=a0+b0
- add r9, r2, r1 @ R9=a1+b1
- mov r8, r8, asr #COL_SHIFT
-diff -Nurd mythtv.orig/libs/libavcodec/armv4l/simple_idct_neon.S mythtv/libs/libavcodec/armv4l/simple_idct_neon.S
---- mythtv.orig/libs/libavcodec/armv4l/simple_idct_neon.S 1970-01-01 01:00:00.000000000 +0100
-+++ mythtv/libs/libavcodec/armv4l/simple_idct_neon.S 2008-07-24 19:54:01.503198000 +0200
-@@ -0,0 +1,388 @@
-+/*
-+ * ARM NEON IDCT
-+ *
-+ * Copyright (c) 2008 Mans Rullgard <mans@mansr.com>
-+ *
-+ * Based on Simple IDCT
-+ * Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at>
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg 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.
-+ *
-+ * FFmpeg 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 FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#define W1 22725 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-+#define W2 21407 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-+#define W3 19266 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-+#define W4 16383 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-+#define W5 12873 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-+#define W6 8867 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-+#define W7 4520 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-+#define W4c ((1<<(COL_SHIFT-1))/W4)
-+#define ROW_SHIFT 11
-+#define COL_SHIFT 20
-+
-+#define w1 d0[0]
-+#define w2 d0[1]
-+#define w3 d0[2]
-+#define w4 d0[3]
-+#define w5 d1[0]
-+#define w6 d1[1]
-+#define w7 d1[2]
-+#define w4c d1[3]
-+
-+ .fpu neon
-+
-+ .macro idct_col4_top
-+ vmull.s16 q7, d6, w2 /* q9 = W2 * col[2] */
-+ vmull.s16 q8, d6, w6 /* q10 = W6 * col[2] */
-+ vmull.s16 q9, d4, w1 /* q9 = W1 * col[1] */
-+ vadd.i32 q11, q15, q7
-+ vmull.s16 q10, d4, w3 /* q10 = W3 * col[1] */
-+ vadd.i32 q12, q15, q8
-+ vmull.s16 q5, d4, w5 /* q5 = W5 * col[1] */
-+ vsub.i32 q13, q15, q8
-+ vmull.s16 q6, d4, w7 /* q6 = W7 * col[1] */
-+ vsub.i32 q14, q15, q7
-+
-+ vmlal.s16 q9, d8, w3 /* q9 += W3 * col[3] */
-+ vmlsl.s16 q10, d8, w7 /* q10 -= W7 * col[3] */
-+ vmlsl.s16 q5, d8, w1 /* q5 -= W1 * col[3] */
-+ vmlsl.s16 q6, d8, w5 /* q6 -= W5 * col[3] */
-+ .endm
-+
-+ .macro idct_col4_mid1
-+ vmull.s16 q7, d3, w4 /* q7 = W4 * col[4] */
-+ vadd.i32 q11, q11, q7
-+ vsub.i32 q12, q12, q7
-+ vsub.i32 q13, q13, q7
-+ vadd.i32 q14, q14, q7
-+ .endm
-+
-+ .macro idct_col4_mid2
-+ vmlal.s16 q9, d5, w5 /* q9 += W5 * col[5] */
-+ vmlsl.s16 q10, d5, w1 /* q10 -= W1 * col[5] */
-+ vmlal.s16 q5, d5, w7 /* q5 += W7 * col[5] */
-+ vmlal.s16 q6, d5, w3 /* q6 += W3 * col[5] */
-+ .endm
-+
-+ .macro idct_col4_mid3
-+ vmull.s16 q7, d7, w6 /* q7 = W6 * col[6] */
-+ vmull.s16 q8, d7, w2 /* q8 = W2 * col[6] */
-+ vadd.i32 q11, q11, q7
-+ vsub.i32 q12, q12, q8
-+ vadd.i32 q13, q13, q8
-+ vsub.i32 q14, q14, q7
-+ .endm
-+
-+ .macro idct_col4_mid4
-+ vmlal.s16 q9, d9, w7
-+ vmlsl.s16 q10, d9, w5
-+ vmlal.s16 q5, d9, w3
-+ vmlsl.s16 q6, d9, w1
-+ .endm
-+
-+ .macro idct_col4_mid
-+ vmull.s16 q7, d3, w4 /* q7 = W4 * col[4] */
-+ vmlal.s16 q9, d5, w5 /* q9 += W5 * col[5] */
-+ vmlsl.s16 q10, d5, w1 /* q10 -= W1 * col[5] */
-+ vadd.i32 q11, q11, q7
-+ vmull.s16 q8, d7, w2 /* q8 = W2 * col[6] */
-+ vsub.i32 q12, q12, q7
-+ vmlal.s16 q5, d5, w7 /* q5 += W7 * col[5] */
-+ vsub.i32 q13, q13, q7
-+ vmlal.s16 q6, d5, w3 /* q6 += W3 * col[5] */
-+ vadd.i32 q14, q14, q7
-+ vmull.s16 q7, d7, w6 /* q7 = W6 * col[6] */
-+ vadd.i32 q11, q11, q7
-+ vmlal.s16 q9, d9, w7
-+ vsub.i32 q12, q12, q8
-+ vmlsl.s16 q10, d9, w5
-+ vadd.i32 q13, q13, q8
-+ vmlal.s16 q5, d9, w3
-+ vsub.i32 q14, q14, q7
-+ vmlsl.s16 q6, d9, w1
-+ .endm
-+
-+ .macro idct_col4_end
-+ vadd.i32 q3, q11, q9
-+ vadd.i32 q4, q12, q10
-+ vadd.i32 q7, q13, q5
-+ vadd.i32 q8, q14, q6
-+ vsub.i32 q11, q11, q9
-+ vsub.i32 q12, q12, q10
-+ vsub.i32 q13, q13, q5
-+ vsub.i32 q14, q14, q6
-+ .endm
-+
-+ .text
-+ .align
-+ .type idct_row4_neon, %function
-+ .func idct_row4_neon
-+idct_row4_neon:
-+ vld1.64 {d2,d3}, [a3,:128]!
-+ vld1.64 {d4,d5}, [a3,:128]!
-+ vld1.64 {d6,d7}, [a3,:128]!
-+ vld1.64 {d8,d9}, [a3,:128]!
-+ add a3, a3, #-64
-+
-+ vmov.i32 q15, #(1<<(ROW_SHIFT-1))
-+ vorr d10, d3, d5
-+ vtrn.16 q1, q2
-+ vorr d11, d7, d9
-+ vtrn.16 q3, q4
-+ vorr d10, d10, d11
-+ vtrn.32 q1, q3
-+ vmlal.s16 q15, d2, w4 /* q15 += W4 * col[0] */
-+ vtrn.32 q2, q4
-+ vmov a4, v1, d10
-+
-+ idct_col4_top
-+
-+ orrs a4, a4, v1
-+ beq 1f
-+ idct_col4_mid
-+1:
-+ vadd.i32 q3, q11, q9
-+ vadd.i32 q4, q12, q10
-+ vshrn.i32 d2, q3, #ROW_SHIFT
-+ vadd.i32 q7, q13, q5
-+ vshrn.i32 d4, q4, #ROW_SHIFT
-+ vadd.i32 q8, q14, q6
-+ vshrn.i32 d6, q7, #ROW_SHIFT
-+ vsub.i32 q11, q11, q9
-+ vshrn.i32 d8, q8, #ROW_SHIFT
-+ vsub.i32 q12, q12, q10
-+ vshrn.i32 d9, q11, #ROW_SHIFT
-+ vsub.i32 q13, q13, q5
-+ vshrn.i32 d7, q12, #ROW_SHIFT
-+ vsub.i32 q14, q14, q6
-+ vshrn.i32 d5, q13, #ROW_SHIFT
-+ vshrn.i32 d3, q14, #ROW_SHIFT
-+
-+ vtrn.16 q1, q2
-+ vtrn.16 q3, q4
-+ vtrn.32 q1, q3
-+ vtrn.32 q2, q4
-+
-+ vst1.64 {d2,d3}, [a3,:128]!
-+ vst1.64 {d4,d5}, [a3,:128]!
-+ vst1.64 {d6,d7}, [a3,:128]!
-+ vst1.64 {d8,d9}, [a3,:128]!
-+
-+ mov pc, lr
-+ .endfunc
-+
-+ .align
-+ .type idct_col4_neon, %function
-+ .func idct_col4_neon
-+idct_col4_neon:
-+ mov ip, #16
-+ vld1.64 {d2}, [a3,:64], ip /* d2 = col[0] */
-+ vld1.64 {d4}, [a3,:64], ip /* d3 = col[1] */
-+ vld1.64 {d6}, [a3,:64], ip /* d4 = col[2] */
-+ vld1.64 {d8}, [a3,:64], ip /* d5 = col[3] */
-+ vld1.64 {d3}, [a3,:64], ip /* d6 = col[4] */
-+ vld1.64 {d5}, [a3,:64], ip /* d7 = col[5] */
-+ vld1.64 {d7}, [a3,:64], ip /* d8 = col[6] */
-+ vld1.64 {d9}, [a3,:64], ip /* d9 = col[7] */
-+
-+ vrev64.32 d11, d3
-+ vrev64.32 d13, d5
-+ vorr d11, d3, d11
-+ vrev64.32 d15, d7
-+ vorr d13, d5, d13
-+ vrev64.32 d17, d9
-+ vorr d15, d7, d15
-+ vmov.32 v1, d11[0]
-+ vmov.32 v2, d13[0]
-+ vorr d17, d9, d17
-+ vmov.32 v3, d15[0]
-+ vmov.32 ip, d17[0]
-+ vdup.16 d30, w4c
-+ vadd.i16 d30, d30, d2
-+ vmull.s16 q15, d30, w4 /* q15 = W4 * (col[0]+(1<<(COL_SHIFT-1))/W4) */
-+
-+ idct_col4_top
-+ tst v1, v1
-+ beq 1f
-+ idct_col4_mid1
-+1: tst v2, v2
-+ beq 2f
-+ idct_col4_mid2
-+2: tst v3, v3
-+ beq 3f
-+ idct_col4_mid3
-+3: tst ip, ip
-+ beq 4f
-+ idct_col4_mid4
-+4:
-+ idct_col4_end
-+
-+ vshr.s32 q2, q3, #COL_SHIFT
-+ vshr.s32 q3, q4, #COL_SHIFT
-+ vmovn.i32 d2, q2
-+ vshr.s32 q4, q7, #COL_SHIFT
-+ vmovn.i32 d3, q3
-+ vshr.s32 q5, q8, #COL_SHIFT
-+ vmovn.i32 d4, q4
-+ vshr.s32 q6, q14, #COL_SHIFT
-+ vmovn.i32 d5, q5
-+ vshr.s32 q7, q13, #COL_SHIFT
-+ vmovn.i32 d6, q6
-+ vshr.s32 q8, q12, #COL_SHIFT
-+ vmovn.i32 d7, q7
-+ vshr.s32 q9, q11, #COL_SHIFT
-+ vmovn.i32 d8, q8
-+ vmovn.i32 d9, q9
-+
-+ mov pc, lr
-+ .endfunc
-+
-+ .macro idct_col4_st16
-+ mov ip, #16
-+ vst1.64 {d2}, [a3,:64], ip
-+ vst1.64 {d3}, [a3,:64], ip
-+ vst1.64 {d4}, [a3,:64], ip
-+ vst1.64 {d5}, [a3,:64], ip
-+ vst1.64 {d6}, [a3,:64], ip
-+ vst1.64 {d7}, [a3,:64], ip
-+ vst1.64 {d8}, [a3,:64], ip
-+ vst1.64 {d9}, [a3,:64], ip
-+ .endm
-+
-+ .align
-+ .type idct_col4_add8, %function
-+ .func idct_col4_add8
-+idct_col4_add8:
-+ vld1.32 {d10[0]}, [a1,:32], a2
-+ vld1.32 {d10[1]}, [a1,:32], a2
-+ vld1.32 {d11[0]}, [a1,:32], a2
-+ vld1.32 {d11[1]}, [a1,:32], a2
-+ vld1.32 {d12[0]}, [a1,:32], a2
-+ vld1.32 {d12[1]}, [a1,:32], a2
-+ vld1.32 {d13[0]}, [a1,:32], a2
-+ vld1.32 {d13[1]}, [a1,:32], a2
-+
-+ vaddw.u8 q1, q1, d10
-+ vaddw.u8 q2, q2, d11
-+ vaddw.u8 q3, q3, d12
-+ vaddw.u8 q4, q4, d13
-+
-+ sub a1, a1, a2, lsl #3
-+ .endfunc
-+
-+ .type idct_col4_st8, %function
-+ .func idct_col4_st8
-+idct_col4_st8:
-+ vqmovun.s16 d2, q1
-+ vqmovun.s16 d3, q2
-+ vqmovun.s16 d4, q3
-+ vqmovun.s16 d5, q4
-+
-+ vst1.32 {d2[0]}, [a1,:32], a2
-+ vst1.32 {d2[1]}, [a1,:32], a2
-+ vst1.32 {d3[0]}, [a1,:32], a2
-+ vst1.32 {d3[1]}, [a1,:32], a2
-+ vst1.32 {d4[0]}, [a1,:32], a2
-+ vst1.32 {d4[1]}, [a1,:32], a2
-+ vst1.32 {d5[0]}, [a1,:32], a2
-+ vst1.32 {d5[1]}, [a1,:32], a2
-+ mov pc, lr
-+ .endfunc
-+
-+ .align 4
-+const: .short W1, W2, W3, W4, W5, W6, W7, W4c
-+
-+ .macro idct_start data
-+ pld [\data]
-+ pld [\data, #64]
-+ push {v1-v3, lr}
-+ vpush {d8-d15}
-+ adr a4, const
-+ vld1.64 {d0,d1}, [a4,:128]
-+ .endm
-+
-+ .macro idct_end
-+ vpop {d8-d15}
-+ pop {v1-v3, pc}
-+ .endm
-+
-+ .align
-+ .global ff_simple_idct_neon
-+ .type ff_simple_idct_neon, %function
-+ .func ff_simple_idct_neon
-+/* void ff_simple_idct_neon(DCTELEM *data); */
-+ff_simple_idct_neon:
-+ idct_start a1
-+
-+ mov a3, a1
-+ bl idct_row4_neon
-+ bl idct_row4_neon
-+ add a3, a3, #-128
-+ bl idct_col4_neon
-+ add a3, a3, #-128
-+ idct_col4_st16
-+ add a3, a3, #-120
-+ bl idct_col4_neon
-+ add a3, a3, #-128
-+ idct_col4_st16
-+
-+ idct_end
-+ .endfunc
-+
-+ .align
-+ .global ff_simple_idct_put_neon
-+ .type ff_simple_idct_put_neon, %function
-+ .func ff_simple_idct_put_neon
-+/* void ff_simple_idct_put_neon(uint8_t *dst, int line_size, DCTELEM *data); */
-+ff_simple_idct_put_neon:
-+ idct_start a3
-+
-+ bl idct_row4_neon
-+ bl idct_row4_neon
-+ add a3, a3, #-128
-+ bl idct_col4_neon
-+ bl idct_col4_st8
-+ sub a1, a1, a2, lsl #3
-+ add a1, a1, #4
-+ add a3, a3, #-120
-+ bl idct_col4_neon
-+ bl idct_col4_st8
-+
-+ idct_end
-+ .endfunc
-+
-+ .align
-+ .global ff_simple_idct_add_neon
-+ .type ff_simple_idct_add_neon, %function
-+ .func ff_simple_idct_add_neon
-+/* void ff_simple_idct_add_neon(uint8_t *dst, int line_size, DCTELEM *data); */
-+ff_simple_idct_add_neon:
-+ idct_start a3
-+
-+ bl idct_row4_neon
-+ bl idct_row4_neon
-+ add a3, a3, #-128
-+ bl idct_col4_neon
-+ bl idct_col4_add8
-+ sub a1, a1, a2, lsl #3
-+ add a1, a1, #4
-+ add a3, a3, #-120
-+ bl idct_col4_neon
-+ bl idct_col4_add8
-+
-+ idct_end
-+ .endfunc
-diff -Nurd mythtv.orig/libs/libavcodec/avcodec.h mythtv/libs/libavcodec/avcodec.h
---- mythtv.orig/libs/libavcodec/avcodec.h 2008-07-23 12:19:11.000000000 +0200
-+++ mythtv/libs/libavcodec/avcodec.h 2008-07-24 19:56:46.953198000 +0200
-@@ -1328,6 +1328,8 @@
- #define FF_IDCT_SIMPLEARMV6 17
- #define FF_IDCT_SIMPLEVIS 18
- #define FF_IDCT_WMV2 19
-+#define FF_IDCT_FAAN 20
-+#define FF_IDCT_SIMPLENEON 21
-
- /**
- * slice count
-diff -Nurd mythtv.orig/libs/libavcodec/libavcodec.pro mythtv/libs/libavcodec/libavcodec.pro
---- mythtv.orig/libs/libavcodec/libavcodec.pro 2008-07-23 12:19:10.000000000 +0200
-+++ mythtv/libs/libavcodec/libavcodec.pro 2008-07-24 19:54:01.503198000 +0200
-@@ -413,6 +413,8 @@
-
- contains( HAVE_ARMV6, yes ) { SOURCES += armv4l/simple_idct_armv6.S }
-
-+contains( HAVE_NEON, yes ) { SOURCES += armv4l/float_arm_vfp.c armv4l/simple_idct_neon.S armv4l/dsputil_neon.c armv4l/h264dsp_neon.S }
-+
- contains( HAVE_VIS, yes ) {
- SOURCES += sparc/dsputil_vis.c
- SOURCES += sparc/simple_idct_vis.c
-diff -Nurd mythtv.orig/libs/libavcodec/utils.c mythtv/libs/libavcodec/utils.c
---- mythtv.orig/libs/libavcodec/utils.c 2008-07-23 12:19:10.000000000 +0200
-+++ mythtv/libs/libavcodec/utils.c 2008-07-24 19:58:12.403198000 +0200
-@@ -594,6 +594,7 @@
- {"sh4", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SH4, INT_MIN, INT_MAX, V|E|D, "idct"},
- {"simplearm", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLEARM, INT_MIN, INT_MAX, V|E|D, "idct"},
- {"simplearmv5te", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLEARMV5TE, INT_MIN, INT_MAX, V|E|D, "idct"},
-+{"simpleneon", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLENEON, INT_MIN, INT_MAX, V|E|D, "idct"},
- {"h264", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_H264, INT_MIN, INT_MAX, V|E|D, "idct"},
- {"vp3", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_VP3, INT_MIN, INT_MAX, V|E|D, "idct"},
- {"ipp", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_IPP, INT_MIN, INT_MAX, V|E|D, "idct"},
diff --git a/recipes/mythtv/mythtv-0.21/no-cortex-deadlock.patch b/recipes/mythtv/mythtv-0.21/no-cortex-deadlock.patch
deleted file mode 100644
index 4e93af196a..0000000000
--- a/recipes/mythtv/mythtv-0.21/no-cortex-deadlock.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From: Mans Rullgard <mans@mansr.com>
-Date: Tue, 29 Jul 2008 21:13:14 +0000 (+0100)
-Subject: ARM: work around Cortex-A8 erratum 451034
-X-Git-Url: http://git.mansr.com/?p=ffmpeg.mru;a=commitdiff_plain;h=c6bbb0c33f6f681b8265a43f8744735de5a9d45e
-
-ARM: work around Cortex-A8 erratum 451034
-
-On Cortex-A8 r1p0 and r1p1, executing a NEON store with an integer
-store in the store buffer, can cause a processor deadlock under
-certain conditions.
-
-A DMB instruction at the start of every NEON function ensures that
-the integer store buffer is always empty before executing any NEON
-store, thus avoiding the deadlock condition.
-
-See ARM Cortex-A8 Errata Notice (PR120-PRDC-008070) for full details.
----
-
-diff --git b/mythtv/libs/libavcodec/armv4l/dsputil_neon.c b/mythtv/libs/libavcodec/armv4l/dsputil_neon.c
-index fa0602d..4fbadfc 100644
---- b/mythtv/libs/libavcodec/armv4l/dsputil_neon.c
-+++ b/mythtv/libs/libavcodec/armv4l/dsputil_neon.c
-@@ -28,6 +28,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
- int h, int x, int y);
-
- #define PUT_PIXELS_16_X2(vhadd) \
-+ "dmb \n\t" \
- "1: \n\t" \
- "vld1.64 {d0,d1,d2}, [%[p]], %[line_size] \n\t" \
- "vld1.64 {d4,d5,d6}, [%[p]], %[line_size] \n\t" \
-@@ -46,6 +47,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
- "lsl %[l2], %[line_size], #1 \n\t" \
- "vld1.64 {d0,d1}, [%[p0]], %[l2] \n\t" \
- "vld1.64 {d2,d3}, [%[p1]], %[l2] \n\t" \
-+ "dmb \n\t" \
- "1: \n\t" \
- "subs %[h], %[h], #2 \n\t" \
- vhadd".u8 q2, q0, q1 \n\t" \
-@@ -69,6 +71,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
- "vaddl.u8 q10, d1, d3 \n\t" \
- "vaddl.u8 q9, d4, d6 \n\t" \
- "vaddl.u8 q11, d5, d7 \n\t" \
-+ "dmb \n\t" \
- "1: \n\t" \
- "subs %[h], %[h], #2 \n\t" \
- "vld1.64 {d0,d1,d2}, [%[p0]], %[l2] \n\t" \
-@@ -98,6 +101,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
- "bgt 1b \n\t"
-
- #define PUT_PIXELS_8_X2(vhadd) \
-+ "dmb \n\t" \
- "1: \n\t" \
- "vld1.64 {d0,d1}, [%[p]], %[line_size] \n\t" \
- "vld1.64 {d2,d3}, [%[p]], %[line_size] \n\t" \
-@@ -116,6 +120,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
- "lsl %[l2], %[line_size], #1 \n\t" \
- "vld1.64 {d0}, [%[p0]], %[l2] \n\t" \
- "vld1.64 {d1}, [%[p1]], %[l2] \n\t" \
-+ "dmb \n\t" \
- "1: \n\t" \
- "subs %[h], %[h], #2 \n\t" \
- vhadd".u8 d4, d0, d1 \n\t" \
-@@ -137,6 +142,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
- "vext.8 d6, d2, d3, #1 \n\t" \
- "vaddl.u8 q8, d0, d4 \n\t" \
- "vaddl.u8 q9, d2, d6 \n\t" \
-+ "dmb \n\t" \
- "1: \n\t" \
- "subs %[h], %[h], #2 \n\t" \
- "vld1.64 {d0,d1}, [%[p0]], %[l2] \n\t" \
-@@ -161,6 +167,7 @@ static void put_pixels16_neon(uint8_t *block, const uint8_t *pixels,
- int line_size, int h)
- {
- asm volatile(
-+ "dmb \n\t"
- "1: \n\t"
- "vld1.64 {d0,d1}, [%[pixels]], %[line_size] \n\t"
- "vld1.64 {d2,d3}, [%[pixels]], %[line_size] \n\t"
-@@ -224,6 +231,7 @@ static void put_pixels8_neon(uint8_t *block, const uint8_t *pixels,
- int line_size, int h)
- {
- asm volatile(
-+ "dmb \n\t"
- "1: \n\t"
- "vld1.64 {d0}, [%[p]], %[line_size] \n\t"
- "vld1.64 {d1}, [%[p]], %[line_size] \n\t"
-diff --git b/mythtv/libs/libavcodec/armv4l/h264dsp_neon.S b/mythtv/libs/libavcodec/armv4l/h264dsp_neon.S
-index a766867..8171ee2 100644
---- b/mythtv/libs/libavcodec/armv4l/h264dsp_neon.S
-+++ b/mythtv/libs/libavcodec/armv4l/h264dsp_neon.S
-@@ -40,6 +40,8 @@ ff_put_h264_chroma_mc8_neon:
- sub r4, r4, r5, lsl #3
- add r4, r4, #64
-
-+ dmb
-+
- beq 2f
-
- add r5, r1, r2
-diff --git b/mythtv/libs/libavcodec/armv4l/simple_idct_neon.S b/mythtv/libs/libavcodec/armv4l/simple_idct_neon.S
-index 943e04f..abda6b2 100644
---- b/mythtv/libs/libavcodec/armv4l/simple_idct_neon.S
-+++ b/mythtv/libs/libavcodec/armv4l/simple_idct_neon.S
-@@ -307,9 +307,10 @@ idct_col4_st8:
- const: .short W1, W2, W3, W4, W5, W6, W7, W4c
-
- .macro idct_start data
-+ push {v1-v3, lr}
- pld [\data]
- pld [\data, #64]
-- push {v1-v3, lr}
-+ dmb
- vpush {d8-d15}
- adr a4, const
- vld1.64 {d0,d1}, [a4,:128]
diff --git a/recipes/mythtv/mythtv-0.22/configure.patch b/recipes/mythtv/mythtv-0.22/configure.patch
deleted file mode 100644
index 748c88d9fc..0000000000
--- a/recipes/mythtv/mythtv-0.22/configure.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-Index: mythtv/configure
-===================================================================
---- mythtv/configure (revision 22430)
-+++ mythtv/configure (working copy)
-@@ -919,27 +919,27 @@
- #deprecated, use check_lib or check_lib2 instead
- has_library()
- {
-- if test -f /etc/ld.so.conf ; then
-- LIBPATHS=`cat /etc/ld.so.conf | grep -v "#" | grep -v "include"`
-- else
-- LIBPATHS=''
-- fi
-+ LIBPATHS=''
-+ if test "x${sysroot}" = "x" ; then
-+ if test -f /etc/ld.so.conf ; then
-+ LIBPATHS=`cat /etc/ld.so.conf | grep -v "#" | grep -v "include"`
-+ fi
-+ LIBPATHS="$LIBPATHS `echo $LD_LIBRARY_PATH | sed s/':'/' '/g` "
-+ # Mac OS X has a different variable for this:
-+ LIBPATHS="$LIBPATHS `echo $DYLD_LIBRARY_PATH | sed s/':'/' '/g` "
-
-- LIBPATHS="$LIBPATHS `echo $LD_LIBRARY_PATH | sed s/':'/' '/g` "
-- # Mac OS X has a different variable for this:
-- LIBPATHS="$LIBPATHS `echo $DYLD_LIBRARY_PATH | sed s/':'/' '/g` "
--
-- # recurse down just one level, should be enough in most cases
-- if test -f /etc/ld.so.conf ; then
-- INCL=`cat /etc/ld.so.conf | grep -v "#" | grep "^include"`
-- SRCH=`echo "$INCL" | sed '{ s/^include \//\//; s/^include /\/etc\//}'`
-- for x in $SRCH ; do
-- LP_APPEND=`cat $x | grep -v "#" | grep -v "^include"`
-- LIBPATHS="$LIBPATHS $LP_APPEND"
-- done
-+ # recurse down just one level, should be enough in most cases
-+ if test -f /etc/ld.so.conf ; then
-+ INCL=`cat /etc/ld.so.conf | grep -v "#" | grep "^include"`
-+ SRCH=`echo "$INCL" | sed '{ s/^include \//\//; s/^include /\/etc\//}'`
-+ for x in $SRCH ; do
-+ LP_APPEND=`cat $x | grep -v "#" | grep -v "^include"`
-+ LIBPATHS="$LIBPATHS $LP_APPEND"
-+ done
-+ fi
- fi
-
-- LIBPATHS="`echo $LIBPATHS /$libdir_name /usr/$libdir_name /usr/local/$libdir_name /usr/X11R6/$libdir_name | sed s/'\/ '/' '/g` "
-+ LIBPATHS="`echo $LIBPATHS $sysroot/$libdir_name $sysroot/usr/$libdir_name $sysroot/usr/local/$libdir_name $sysroot/usr/X11R6/$libdir_name | sed s/'\/ '/' '/g` "
-
- HAS_IT="no"
- for LIBPATH in $LIBPATHS ; do
-@@ -4252,8 +4252,8 @@
- # -L from early in the link line, to ignore any old installed libmyth*
- # Note: Qt uses QMAKE_INCDIR_QT to build an absolute path for include
- # directories, it cannot be modified.
--QMAKE_LIBDIR_QT -= $libdir
--LATE_LIBS += -L$libdir
-+QMAKE_LIBDIR_QT -= ${sysroot}${libdir}
-+LATE_LIBS += -L${sysroot}${libdir}
- EOF
-
- diff $TMPH $MYTH_CONFIG_H >/dev/null 2>&1
diff --git a/recipes/mythtv/mythtv/configure.patch b/recipes/mythtv/mythtv/configure.patch
index c95a785d6c..748c88d9fc 100644
--- a/recipes/mythtv/mythtv/configure.patch
+++ b/recipes/mythtv/mythtv/configure.patch
@@ -1,148 +1,61 @@
---- /tmp/configure 2008-07-22 10:27:56.000000000 +0200
-+++ mythtv/configure 2008-07-22 17:53:20.000000000 +0200
-@@ -476,12 +476,13 @@
- }
-
- check_cmd(){
-- log "$@"
-+ echo "Checking $@"
-+ log "$@"
- "$@" >>$logfile 2>&1
- }
-
- check_cc(){
-- log check_cc "$@"
-+ log check_cc "$@"
- cat >$TMPC
- log_file $TMPC
- check_cmd $cc $CFLAGS $ECFLAGS $OPTFLAGS "$@" -c -o $TMPO $TMPC
-@@ -1117,11 +1118,11 @@
- fi
-
- # machine
--arch=`uname -m`
-+disabled cross_compile && arch=`uname -m`
- arch_raw="$arch"
- cpu="generic"
- cpu_override="no"
--processor=`uname -p 2>/dev/null`
-+disabled cross_compile && processor=`uname -p 2>/dev/null`
- processor_flags=""
- tune="generic"
-
-@@ -1185,7 +1186,7 @@
- lamemp3="yes"
- lirc="yes"
- mac_bundle="no"
--opengl="yes"
-+opengl="no"
- v4l="yes"
- x11="yes"
- x11_include_path="/usr/X11R6/include"
-@@ -1214,7 +1215,7 @@
- # build settings
- SHFLAGS='-shared -Wl,-soname,$@'
- VHOOKSHFLAGS='$(SHFLAGS)'
--LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
-+#LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
- FFSERVERLDFLAGS=-Wl,-E
- LDCONFIG="ldconfig"
- LIBPREF="lib"
-@@ -1714,7 +1715,7 @@
-
+Index: mythtv/configure
+===================================================================
+--- mythtv/configure (revision 22430)
++++ mythtv/configure (working copy)
+@@ -919,27 +919,27 @@
+ #deprecated, use check_lib or check_lib2 instead
has_library()
{
- if test -f /etc/ld.so.conf ; then
-+ if test -f /etc/ld.so.conf && disabled cross_compile ; then
- LIBPATHS=`cat /etc/ld.so.conf | grep -v "#" | grep -v "include"`
- else
- LIBPATHS=''
-@@ -1725,7 +1726,7 @@
- LIBPATHS="$LIBPATHS `echo $DYLD_LIBRARY_PATH | sed s/':'/' '/g` "
-
- # recurse down just one level, should be enough in most cases
+- LIBPATHS=`cat /etc/ld.so.conf | grep -v "#" | grep -v "include"`
+- else
+- LIBPATHS=''
+- fi
++ LIBPATHS=''
++ if test "x${sysroot}" = "x" ; then
++ if test -f /etc/ld.so.conf ; then
++ LIBPATHS=`cat /etc/ld.so.conf | grep -v "#" | grep -v "include"`
++ fi
++ LIBPATHS="$LIBPATHS `echo $LD_LIBRARY_PATH | sed s/':'/' '/g` "
++ # Mac OS X has a different variable for this:
++ LIBPATHS="$LIBPATHS `echo $DYLD_LIBRARY_PATH | sed s/':'/' '/g` "
+
+- LIBPATHS="$LIBPATHS `echo $LD_LIBRARY_PATH | sed s/':'/' '/g` "
+- # Mac OS X has a different variable for this:
+- LIBPATHS="$LIBPATHS `echo $DYLD_LIBRARY_PATH | sed s/':'/' '/g` "
+-
+- # recurse down just one level, should be enough in most cases
- if test -f /etc/ld.so.conf ; then
-+ if test -f /etc/ld.so.conf && disabled cross_compile ; then
- INCL=`cat /etc/ld.so.conf | grep -v "#" | grep "^include"`
- SRCH=`echo "$INCL" | sed '{ s/^include \//\//; s/^include /\/etc\//}'`
- for x in $SRCH ; do
-@@ -1734,29 +1735,31 @@
- done
+- INCL=`cat /etc/ld.so.conf | grep -v "#" | grep "^include"`
+- SRCH=`echo "$INCL" | sed '{ s/^include \//\//; s/^include /\/etc\//}'`
+- for x in $SRCH ; do
+- LP_APPEND=`cat $x | grep -v "#" | grep -v "^include"`
+- LIBPATHS="$LIBPATHS $LP_APPEND"
+- done
++ # recurse down just one level, should be enough in most cases
++ if test -f /etc/ld.so.conf ; then
++ INCL=`cat /etc/ld.so.conf | grep -v "#" | grep "^include"`
++ SRCH=`echo "$INCL" | sed '{ s/^include \//\//; s/^include /\/etc\//}'`
++ for x in $SRCH ; do
++ LP_APPEND=`cat $x | grep -v "#" | grep -v "^include"`
++ LIBPATHS="$LIBPATHS $LP_APPEND"
++ done
++ fi
fi
- LIBPATHS="`echo $LIBPATHS /$libdir_name /usr/$libdir_name /usr/local/$libdir_name /usr/X11R6/$libdir_name | sed s/'\/ '/' '/g` "
-+ enabled cross_compile || LIBPATHS="`echo $LIBPATHS /$libdir_name /usr/$libdir_name /usr/local/$libdir_name /usr/X11R6/$libdir_name | sed s/'\/ '/' '/g` "
++ LIBPATHS="`echo $LIBPATHS $sysroot/$libdir_name $sysroot/usr/$libdir_name $sysroot/usr/local/$libdir_name $sysroot/usr/X11R6/$libdir_name | sed s/'\/ '/' '/g` "
-- HAS_IT="no"
-+ HAS_IT="yes"
+ HAS_IT="no"
for LIBPATH in $LIBPATHS ; do
- if test x`ls $LIBPATH/$1* 2> /dev/null | head -n 1` != x"" ; then
- HAS_IT="yes"
- fi
- done
-+ echo "$1: $HAS_IT"
- expr $HAS_IT : "yes" > /dev/null
- }
-
- has_header()
- {
-- HPATHS="/usr/local/include /usr/include /usr/include/g++-v3 /usr/X11R6/include"
-+ enabled cross_compile || HPATHS="/usr/local/include /usr/include /usr/include/g++-v3 /usr/X11R6/include"
- INCL=`echo $DYLD_LIBRARY_PATH $LD_LIBRARY_PATH | sed s/':'/' '/g`
- HPATHS="$HPATHS "$(echo $INCL | sed "s/$libdir_name/include/g")
-
-- HAS_IT="no"
-+ HAS_IT="yes"
- for HPATH in $HPATHS ; do
- if test x`ls $HPATH/$1* 2> /dev/null | head -n 1` != x"" ; then
- HAS_IT="yes"
- fi
- done
-+ echo "$1: $HAS_IT"
- expr $HAS_IT : "yes" > /dev/null
- }
-
-@@ -1863,13 +1866,15 @@
- if test x"$cmov" = x"default"; then
- disable cmov
- if enabled cpu_override; then
-- is_x86_cmov_cpu "$cpu" && enable cmov
-+ disabled cross_compile && is_x86_cmov_cpu "$cpu" && enable cmov
- disabled cmov || is_x86_slow_cmov_cpu "$cpu" || enable fast_cmov
- elif expr "$processor_flags" : ".*cmov" > /dev/null ; then
-- enable cmov
-+ disabled cross_compile && enable cmov
- fi
- fi
-
-+enabled cross_compile && disable cmov
-+
- # use different default ARCHFLAGS for CPU missing cmov (Via C3 ...)
- if test x"$arch" = x"x86_32" && disabled cmov && disabled cpu_override; then
- ARCHFLAGS="-march=i586"
-@@ -2254,7 +2259,7 @@
+@@ -4252,8 +4252,8 @@
+ # -L from early in the link line, to ignore any old installed libmyth*
+ # Note: Qt uses QMAKE_INCDIR_QT to build an absolute path for include
+ # directories, it cannot be modified.
+-QMAKE_LIBDIR_QT -= $libdir
+-LATE_LIBS += -L$libdir
++QMAKE_LIBDIR_QT -= ${sysroot}${libdir}
++LATE_LIBS += -L${sysroot}${libdir}
EOF
- if $cc $CFLAGS $ECFLAGS -o $TMPE $TMPC 2>/dev/null ; then
--$TMPE && cpuclipspositive="yes"
-+enabled cross_compile || $TMPE && cpuclipspositive="yes"
- fi
-
- # test negative wrap
-@@ -2269,7 +2274,7 @@
- EOF
-
- if $cc $CFLAGS $ECFLAGS -o $TMPE $TMPC 2>/dev/null ; then
--$TMPE && cpuclipsnegative="yes"
-+enabled cross_compile || $TMPE && cpuclipsnegative="yes"
- fi
-
- # test for distcc
-@@ -2718,6 +2723,7 @@
-
- check_header GL/gl.h
- has_library libGL || has_library libopengl32 || disable opengl
-+enabled cross_compile && disable opengl
-
- VENDOR_XVMC_LIBS=""
- check_header X11/extensions/XvMClib.h
+ diff $TMPH $MYTH_CONFIG_H >/dev/null 2>&1
diff --git a/recipes/mythtv/mythtv/ifdef-qt.diff b/recipes/mythtv/mythtv/ifdef-qt.diff
deleted file mode 100644
index bdefee11df..0000000000
--- a/recipes/mythtv/mythtv/ifdef-qt.diff
+++ /dev/null
@@ -1,13 +0,0 @@
---- /tmp/mythmainwindow.cpp 2008-07-22 18:19:06.000000000 +0200
-+++ mythtv/libs/libmythui/mythmainwindow.cpp 2008-07-22 18:19:26.000000000 +0200
-@@ -4,7 +4,10 @@
-
- #include <algorithm>
-
-+#ifdef USE_OPENGL_PAINTER
- #include <QGLWidget>
-+endif
-+
- #include <QApplication>
- #include <QTimer>
- #include <QDesktopWidget>
diff --git a/recipes/mythtv/mythtv_0.18.1.bb b/recipes/mythtv/mythtv_0.18.1.bb
deleted file mode 100644
index 2d3f55c711..0000000000
--- a/recipes/mythtv/mythtv_0.18.1.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-require mythtv.inc
-
-inherit qmake2 qt3x11
-
-PR = "r2"
-
-SRC_URI += "file://msmpeg-underscore-pic.patch;patch=1 \
- file://settings.pro"
-
-
-do_configure_prepend() {
-# it's not autotools anyway, so we call ./configure directly
- find . -name "Makefile"|xargs rm -f
- ./configure --prefix=/usr \
- --mandir=/usr/man \
- --disable-mp3lame \
- --enable-vorbis \
- --disable-faad \
- --disable-faadbin \
- --disable-faac \
- --disable-mingw32 \
- --enable-a52 \
- --disable-a52bin \
- --enable-pp \
- --enable-shared-pp \
- --enable-shared \
- --disable-amr_nb \
- --disable-amr_nb-fixed \
- --disable-sunmlib \
- \
- --cpu=${MYTHTV_ARCH} \
- --enable-mmx \
- --disable-altivec \
- --enable-v4l \
- --enable-audio-oss \
- --disable-audio-beos \
- --enable-dv1394 \
- --enable-network \
- --enable-zlib \
- --enable-simple_idct \
- --disable-vhook \
- --disable-mpegaudio-hp \
- --enable-ffserver \
- --enable-ffplay \
- --enable-risky
-
- install -m 0644 ${WORKDIR}/settings.pro ${S}/
- sed 's!PREFIX =.*!PREFIX = ${prefix}!' < settings.pro > settings.pro.new
- mv settings.pro.new settings.pro
-}
diff --git a/recipes/mythtv/mythtv_0.20.bb b/recipes/mythtv/mythtv_0.20.bb
deleted file mode 100644
index 467ed5112b..0000000000
--- a/recipes/mythtv/mythtv_0.20.bb
+++ /dev/null
@@ -1,73 +0,0 @@
-require mythtv.inc
-
-inherit qmake2 qt3x11
-
-DEPENDS += "openchrome"
-PR = "r1"
-
-SRC_URI += "file://configure.patch;patch=1 \
- file://libmyth-libdir.patch;patch=1"
-
-# Seen on the mythtv web page:
-# http://www.mythtv.org/mc/fix-mythweb-in-0.20.diff;patch=1
-
-QMAKE_PROFILES = "mythtv.pro"
-
-mythlibs = "mythavutil mythavcodec mythavformat myth mythtv mythui mythfreemheg mythupnp mythlivemedia"
-PACKAGES =+ "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-data"
-
-FILES_mythtv-backend = "${bindir}/mythbackend ${bindir}/mythcommflag ${bindir}/mythfilldatabase ${bindir}/mythtranscode"
-FILES_mythtv-frontend = "${bindir}/mythfrontend ${datadir}/mythtv/i18n/mythfrontend_* ${datadir}/mythtv/*.ttf"
-RDEPENDS_mythtv-frontend = "qt-x11-plugins-sqldrivers qt-x11-plugins-imageformats"
-FILES_mythtv-bin = "${bindir}"
-FILES_mythtv-filters = "${libdir}/mythtv/filters"
-FILES_mythtv-data = "${datadir}"
-RDEPENDS_${PN} = "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-data"
-ALLOW_EMPTY_${PN} = "1"
-
-PACKAGES_DYNAMIC = "mythtv-theme-*"
-
-python __anonymous () {
- import bb
-
- mythlibs = bb.data.getVar('mythlibs', d).split()
- pv = bb.data.expand(bb.data.getVar("PV", d), d)
-
- for m in mythlibs:
- bb.data.setVar("FILES_lib%s%s" % (m, pv), "${libdir}/lib%s-%s.so.*" % (m, pv), d)
- bb.data.setVar("FILES_lib%s%s-dev" % (m, pv), "${libdir}/lib%s-%s.*" % (m, pv), d)
-
- packages = " ".join(map(lambda x: "lib%s%s lib%s%s-dev" % (x, pv, x, pv), mythlibs) + bb.data.getVar("PACKAGES", d).split())
-
- bb.data.setVar("PACKAGES", packages, d)
-}
-do_configure_prepend() {
-# it's not autotools anyway, so we call ./configure directly
- find . -name "Makefile"|xargs rm -f
- ./configure --prefix=/usr \
- --mandir=/usr/man \
- --cpu=${MYTHTV_ARCH} \
- --enable-mmx \
- --disable-altivec \
- --enable-v4l \
- --enable-audio-oss \
- --enable-proc-opt \
- --enable-xvmc \
- --enable-xvmc-pro \
- --enable-dvb \
- --dvb-path=${STAGING_INCDIR}
-
- sed 's!PREFIX =.*!PREFIX = ${prefix}!;/INCLUDEPATH += $${PREFIX}\/include/d' < settings.pro > settings.pro.new
- mv settings.pro.new settings.pro
-}
-
-python populate_packages_prepend () {
- new_packages = []
-
- def the_hook(file, pkg, pattern, format, basename):
- new_packages.append(pkg)
-
- do_split_packages(d, root=bb.data.expand('${datadir}/mythtv/themes', d), file_regex='(.*)', output_pattern='mythtv-theme-%s', description='MythTV theme %s', allow_dirs=True, hook=the_hook, prepend=True)
-
- bb.data.setVar("RDEPENDS_${PN}", "%s %s" % (bb.data.getVar("RDEPENDS_${PN}", d), " ".join(new_packages)), d)
-}
diff --git a/recipes/mythtv/mythtv_0.21.bb b/recipes/mythtv/mythtv_0.21.bb
deleted file mode 100644
index 89b9b11e18..0000000000
--- a/recipes/mythtv/mythtv_0.21.bb
+++ /dev/null
@@ -1,108 +0,0 @@
-require mythtv.inc
-
-inherit qmake qt3x11
-
-PR = "${SRCREV}+r5"
-REALPV = "0.21"
-
-SRCREV = "20763"
-SRC_URI = "svn://svn.mythtv.org/svn/branches/release-0-21-fixes;module=mythtv;proto=http"
-
-SRC_URI += " \
- file://ffmpeg-arm-update.diff;patch=1 \
- file://no-cortex-deadlock.patch;patch=1;pnum=2 \
- file://configure.patch;patch=1 \
- file://configh \
- file://configmak \
- "
-
-S = "${WORKDIR}/mythtv"
-
-QMAKE_PROFILES = "mythtv.pro"
-
-mythlibs = "mythavutil mythavcodec mythavformat myth mythtv mythui mythfreemheg mythupnp mythlivemedia"
-PACKAGES =+ "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-data"
-
-FILES_${PN}-dbg += "${libdir}/mythtv/filters/.debug"
-FILES_mythtv-backend = "${bindir}/mythbackend ${bindir}/mythcommflag ${bindir}/mythfilldatabase ${bindir}/mythtranscode"
-FILES_mythtv-frontend = "${bindir}/mythfrontend ${datadir}/mythtv/i18n/mythfrontend_* ${datadir}/mythtv/*.ttf"
-RDEPENDS_mythtv-frontend = "qt-x11-plugins-sqldrivers qt-x11-plugins-imageformats"
-FILES_mythtv-bin = "${bindir}/*"
-FILES_mythtv-filters = "${libdir}/mythtv/filters/*"
-FILES_mythtv-data = "${datadir}"
-RDEPENDS_${PN} = "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-data"
-ALLOW_EMPTY_${PN} = "1"
-
-PACKAGES_DYNAMIC = "mythtv-theme-*"
-
-python __anonymous () {
- import bb
-
- mythlibs = bb.data.getVar('mythlibs', d).split()
- pv = bb.data.expand(bb.data.getVar("REALPV", d), d)
-
- for m in mythlibs:
- bb.data.setVar("FILES_lib%s%s" % (m, pv), "${libdir}/lib%s-%s.so.*" % (m, pv), d)
- bb.data.setVar("FILES_lib%s%s-dev" % (m, pv), "${libdir}/lib%s-%s.*" % (m, pv), d)
-
- packages = " ".join(map(lambda x: "lib%s%s lib%s%s-dev" % (x, pv, x, pv), mythlibs) + bb.data.getVar("PACKAGES", d).split())
-
- bb.data.setVar("PACKAGES", packages, d)
-}
-
-EXTRA_OECONF_armv5te = " --enable-armv5te "
-EXTRA_OECONF_armv6 = " --enable-armv6 "
-EXTRA_OECONF_armv7a = " --enable-armv6"
-
-#build with support for the iwmmxt instruction and pxa270fb overlay support (pxa270 and up)
-#not every iwmmxt machine has the lcd connected to pxafb, but building the module doesn't hurt
-MY_ARCH := "${PACKAGE_ARCH}"
-PACKAGE_ARCH = "${@base_contains('MACHINE_FEATURES', 'iwmmxt', 'iwmmxt', '${MY_ARCH}',d)}"
-
-MY_TARGET_CC_ARCH := "${TARGET_CC_ARCH}"
-TARGET_CC_ARCH = "${@base_contains('MACHINE_FEATURES', 'iwmmxt', '-march=iwmmxt -mtune=iwmmxt', '${MY_TARGET_CC_ARCH}',d)}"
-
-EXTRA_OECONF_append = " ${@base_contains('MACHINE_FEATURES', 'iwmmxt', '--enable-pxa --enable-iwmmxt', '',d)} "
-
-do_configure_prepend() {
-# it's not autotools anyway, so we call ./configure directly
- find . -name "Makefile"|xargs rm -f
-
- ./configure --prefix=/usr \
- --mandir=/usr/man \
- --cpu=${MYTHTV_ARCH} \
- --arch=${MYTHTV_ARCH} \
- --disable-altivec \
- --disable-directfb \
- --disable-opengl-video \
- --disable-strip \
- --enable-v4l \
- --enable-audio-oss \
- --enable-proc-opt \
- --enable-dvb \
- --enable-libmp3lame \
- --cross-compile \
- --dvb-path=${STAGING_INCDIR} \
- --with-bindings= \
- ${EXTRA_OECONF}
-
- sed 's!PREFIX =.*!PREFIX = ${prefix}!;/INCLUDEPATH += $${PREFIX}\/include/d' < settings.pro > settings.pro.new
- mv settings.pro.new settings.pro
- for pro in ${S}/*/*pro ${S}/*/*/*pro ${S}/*/*/*/*pro ; do
- sed -i -e s:opengl::g $pro
- done
- sed -i /.SUBDIR/d ${S}/bindings/*pro
- cat ${WORKDIR}/configh >> ${S}/config.h
- cat ${WORKDIR}/configmak ${OPTSMAK} >> ${S}/config.mak
-}
-
-python populate_packages_prepend () {
- new_packages = []
-
- def the_hook(file, pkg, pattern, format, basename):
- new_packages.append(pkg)
-
- do_split_packages(d, root=bb.data.expand('${datadir}/mythtv/themes', d), file_regex='(.*)', output_pattern='mythtv-theme-%s', description='MythTV theme %s', allow_dirs=True, hook=the_hook, prepend=True)
-
- bb.data.setVar("RDEPENDS_${PN}", "%s %s" % (bb.data.getVar("RDEPENDS_${PN}", d), " ".join(new_packages)), d)
-}
diff --git a/recipes/mythtv/mythtv_0.22+fixes.bb b/recipes/mythtv/mythtv_0.22+fixes.bb
new file mode 100644
index 0000000000..35b884b2b1
--- /dev/null
+++ b/recipes/mythtv/mythtv_0.22+fixes.bb
@@ -0,0 +1,103 @@
+require mythtv.inc
+
+DEPENDS_{PN} += "libmyth"
+DEPENDS_libmyth = "libmythdb libmythavutil libmythavcodec libmythavformat libmythswscale libmythhdhomerun \
+ libmythtv libmythui libmythfreemheg libmythupnp libmythlivemedia"
+
+RDEPENDS_${PN} = "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-database \
+mysql5-server mysql5-client libmysqlclient qt4-plugin-sqldriver-sqlmysql xmltv"
+RDEPENDS_${PN}_append_libc-glibc = " glibc-gconv-utf-16"
+
+PR = "svnr${SRCPV}+r0"
+PV = "0.22"
+
+# REALPV is here to support release candidates
+# OE in that case has as PV something like 0.21+0.22rc1
+# but for packaging the real PV is needed
+REALPV = "0.22"
+
+SRCREV = "23710"
+SRC_URI = "svn://svn.mythtv.org/svn/branches/release-0-22-fixes;module=mythtv;proto=http"
+
+S = "${WORKDIR}/mythtv"
+
+ALLOW_EMPTY_${PN} = "1"
+
+QMAKE_PROFILES = "mythtv.pro"
+
+SRC_URI += " \
+ file://configure.patch;patch=1 \
+ "
+
+inherit qmake2 qt4x11
+
+EXTRA_MYTHTVCONF_armv7a = "--cpu=cortex-a8"
+EXTRA_MYTHTVCONF_armv5te = "--cpu=armv5te"
+EXTRA_MYTHTVCONF ?= ""
+EXTRA_OECONF = " \
+ --cross-prefix=${TARGET_PREFIX} \
+ --sysroot=${STAGING_DIR_HOST} \
+ --prefix=${prefix} \
+ --arch=${TARGET_ARCH} \
+ \
+ --extra-cflags="${TARGET_CFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \
+ --extra-cxxflags="${TARGET_CXXFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \
+ --extra-ldflags="${TARGET_LDFLAGS}" \
+ ${EXTRA_MYTHTVCONF} \
+"
+
+do_configure_prepend() {
+# it's not autotools anyway, so we call ./configure directly
+ find . -name "Makefile"|xargs rm -f
+ ./configure --qmake=qmake2 \
+ --disable-altivec \
+ --disable-opengl \
+ --disable-stripping \
+ --disable-xvmc \
+ --enable-v4l \
+ --enable-audio-oss \
+ --enable-dvb \
+ --enable-libmp3lame \
+ --dvb-path=${STAGING_INCDIR} \
+ --without-bindings=perl,python \
+ ${EXTRA_OECONF}
+}
+
+do_install() {
+ oe_runmake INSTALL_ROOT=${D} install
+ install -d ${D}${datadir}/mythtv
+ install -d ${D}${datadir}/mythtv/sql
+ install -m 0644 ${S}/database/mc.sql ${D}${datadir}/mythtv/sql
+}
+
+PACKAGES =+ "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-database"
+PACKAGES_DYNAMIC = "mythtv-theme-*"
+
+FILES_${PN}-dbg += "${libdir}/mythtv/filters/.debug"
+FILES_mythtv-backend = "${bindir}/mythbackend ${bindir}/mythcommflag ${bindir}/mythfilldatabase ${bindir}/mythtranscode"
+FILES_mythtv-frontend = "${bindir}/mythfrontend ${datadir}/mythtv/i18n/mythfrontend_* ${datadir}/mythtv/*.ttf"
+FILES_mythtv-bin = "${bindir}/*"
+FILES_mythtv-filters = "${libdir}/mythtv/filters/*"
+FILES_mythtv-database = "${datadir}/mythtv/sql/"
+
+RRECOMMENDS_mythtv-frontend += "mythtv-theme-defaultmenu mythtv-theme-terra"
+
+mythlibs = "mythdb mythavutil mythavcodec mythavformat mythswscale mythhdhomerun myth mythtv mythui mythfreemheg mythupnp mythlivemedia"
+
+python __anonymous () {
+ import bb
+ mythlibs = bb.data.getVar('mythlibs', d).split()
+ pv = bb.data.expand(bb.data.getVar("REALPV", d), d)
+ for m in mythlibs:
+ bb.data.setVar("FILES_lib%s%s" % (m, pv), "${libdir}/lib%s-%s.so.*" % (m, pv), d)
+ bb.data.setVar("FILES_lib%s%s-dev" % (m, pv), "${libdir}/lib%s-%s.*" % (m, pv), d)
+ packages = " ".join(map(lambda x: "lib%s%s lib%s%s-dev" % (x, pv, x, pv), mythlibs) + bb.data.getVar("PACKAGES", d).split())
+ bb.data.setVar("PACKAGES", packages, d)
+}
+python populate_packages_prepend () {
+ new_packages = []
+ def the_hook(file, pkg, pattern, format, basename):
+ new_packages.append(pkg)
+ do_split_packages(d, root=bb.data.expand('${datadir}/mythtv/themes', d), file_regex='(.*)', output_pattern='mythtv-theme-%s', description='MythTV theme %s', allow_dirs=True, hook=the_hook, prepend=True)
+ bb.data.setVar("RDEPENDS_${PN}", "%s %s" % (bb.data.getVar("RDEPENDS_${PN}", d), " ".join(new_packages)), d)
+}
diff --git a/recipes/mythtv/mythtv_0.22.bb b/recipes/mythtv/mythtv_0.22.bb
deleted file mode 100644
index 8b7dc6c5b0..0000000000
--- a/recipes/mythtv/mythtv_0.22.bb
+++ /dev/null
@@ -1,103 +0,0 @@
-require mythtv.inc
-
-DEPENDS_{PN} += "libmyth"
-DEPENDS_libmyth = "libmythdb libmythavutil libmythavcodec libmythavformat libmythswscale libmythhdhomerun \
- libmythtv libmythui libmythfreemheg libmythupnp libmythlivemedia"
-
-RDEPENDS_${PN} = "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-database \
-mysql5-server mysql5-client libmysqlclient qt4-plugin-sqldriver-sqlmysql xmltv"
-RDEPENDS_${PN}_append_libc-glibc = " glibc-gconv-utf-16"
-
-PR = "svnr${SRCPV}+r7"
-PV = "0.22"
-
-# REALPV is here to support release candidates
-# OE in that case has as PV something like 0.21+0.22rc1
-# but for packaging the real PV is needed
-REALPV = "0.22"
-
-SRCREV = "23062"
-SRC_URI = "svn://svn.mythtv.org/svn/branches/release-0-22-fixes;module=mythtv;proto=http"
-
-S = "${WORKDIR}/mythtv"
-
-ALLOW_EMPTY_${PN} = "1"
-
-QMAKE_PROFILES = "mythtv.pro"
-
-SRC_URI += " \
- file://configure.patch;patch=1 \
- "
-
-inherit qmake2 qt4x11
-
-EXTRA_MYTHTVCONF_armv7a = "--cpu=cortex-a8"
-EXTRA_MYTHTVCONF_armv5te = "--cpu=armv5te"
-EXTRA_MYTHTVCONF ?= ""
-EXTRA_OECONF = " \
- --cross-prefix=${TARGET_PREFIX} \
- --sysroot=${STAGING_DIR_HOST} \
- --prefix=${prefix} \
- --arch=${TARGET_ARCH} \
- \
- --extra-cflags="${TARGET_CFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \
- --extra-cxxflags="${TARGET_CXXFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \
- --extra-ldflags="${TARGET_LDFLAGS}" \
- ${EXTRA_MYTHTVCONF} \
-"
-
-do_configure_prepend() {
-# it's not autotools anyway, so we call ./configure directly
- find . -name "Makefile"|xargs rm -f
- ./configure --qmake=qmake2 \
- --disable-altivec \
- --disable-opengl \
- --disable-stripping \
- --disable-xvmc \
- --enable-v4l \
- --enable-audio-oss \
- --enable-dvb \
- --enable-libmp3lame \
- --dvb-path=${STAGING_INCDIR} \
- --without-bindings=perl,python \
- ${EXTRA_OECONF}
-}
-
-do_install() {
- oe_runmake INSTALL_ROOT=${D} install
- install -d ${D}${datadir}/mythtv
- install -d ${D}${datadir}/mythtv/sql
- install -m 0644 ${S}/database/mc.sql ${D}${datadir}/mythtv/sql
-}
-
-PACKAGES =+ "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-database"
-PACKAGES_DYNAMIC = "mythtv-theme-*"
-
-FILES_${PN}-dbg += "${libdir}/mythtv/filters/.debug"
-FILES_mythtv-backend = "${bindir}/mythbackend ${bindir}/mythcommflag ${bindir}/mythfilldatabase ${bindir}/mythtranscode"
-FILES_mythtv-frontend = "${bindir}/mythfrontend ${datadir}/mythtv/i18n/mythfrontend_* ${datadir}/mythtv/*.ttf"
-FILES_mythtv-bin = "${bindir}/*"
-FILES_mythtv-filters = "${libdir}/mythtv/filters/*"
-FILES_mythtv-database = "${datadir}/mythtv/sql/"
-
-RRECOMMENDS_mythtv-frontend += "mythtv-theme-defaultmenu mythtv-theme-terra"
-
-mythlibs = "mythdb mythavutil mythavcodec mythavformat mythswscale mythhdhomerun myth mythtv mythui mythfreemheg mythupnp mythlivemedia"
-
-python __anonymous () {
- import bb
- mythlibs = bb.data.getVar('mythlibs', d).split()
- pv = bb.data.expand(bb.data.getVar("REALPV", d), d)
- for m in mythlibs:
- bb.data.setVar("FILES_lib%s%s" % (m, pv), "${libdir}/lib%s-%s.so.*" % (m, pv), d)
- bb.data.setVar("FILES_lib%s%s-dev" % (m, pv), "${libdir}/lib%s-%s.*" % (m, pv), d)
- packages = " ".join(map(lambda x: "lib%s%s lib%s%s-dev" % (x, pv, x, pv), mythlibs) + bb.data.getVar("PACKAGES", d).split())
- bb.data.setVar("PACKAGES", packages, d)
-}
-python populate_packages_prepend () {
- new_packages = []
- def the_hook(file, pkg, pattern, format, basename):
- new_packages.append(pkg)
- do_split_packages(d, root=bb.data.expand('${datadir}/mythtv/themes', d), file_regex='(.*)', output_pattern='mythtv-theme-%s', description='MythTV theme %s', allow_dirs=True, hook=the_hook, prepend=True)
- bb.data.setVar("RDEPENDS_${PN}", "%s %s" % (bb.data.getVar("RDEPENDS_${PN}", d), " ".join(new_packages)), d)
-}
diff --git a/recipes/mythtv/mythtv_svn.bb b/recipes/mythtv/mythtv_svn.bb
deleted file mode 100644
index f0d802a4a2..0000000000
--- a/recipes/mythtv/mythtv_svn.bb
+++ /dev/null
@@ -1,89 +0,0 @@
-require mythtv.inc
-
-inherit qmake2 qt4x11
-
-DEFAULT_PREFERENCE = "-1"
-
-PV = "0.21+0.22rc+svnr${SRCPV}"
-PR = "r0"
-REALPV = "0.22"
-
-SRCREV = "20947"
-SRC_URI = "svn://svn.mythtv.org/svn/trunk;module=mythtv;proto=http"
-
-S = "${WORKDIR}/mythtv"
-
-QMAKE_PROFILES = "mythtv.pro"
-
-mythlibs = "mythdb mythavutil mythavcodec mythavformat mythswscale mythhdhomerun myth mythtv mythui mythfreemheg mythupnp mythlivemedia"
-PACKAGES =+ "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-data"
-
-FILES_${PN}-dbg += "${libdir}/mythtv/filters/.debug"
-FILES_mythtv-backend = "${bindir}/mythbackend ${bindir}/mythcommflag ${bindir}/mythfilldatabase ${bindir}/mythtranscode"
-FILES_mythtv-frontend = "${bindir}/mythfrontend ${datadir}/mythtv/i18n/mythfrontend_* ${datadir}/mythtv/*.ttf"
-FILES_mythtv-bin = "${bindir}/*"
-FILES_mythtv-filters = "${libdir}/mythtv/filters/*"
-FILES_mythtv-data = "${datadir}"
-RDEPENDS_${PN} = "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-data"
-ALLOW_EMPTY_${PN} = "1"
-
-PACKAGES_DYNAMIC = "mythtv-theme-*"
-
-python __anonymous () {
- import bb
-
- mythlibs = bb.data.getVar('mythlibs', d).split()
- pv = bb.data.expand(bb.data.getVar("REALPV", d), d)
-
- for m in mythlibs:
- bb.data.setVar("FILES_lib%s%s" % (m, pv), "${libdir}/lib%s-%s.so.*" % (m, pv), d)
- bb.data.setVar("FILES_lib%s%s-dev" % (m, pv), "${libdir}/lib%s-%s.*" % (m, pv), d)
-
- packages = " ".join(map(lambda x: "lib%s%s lib%s%s-dev" % (x, pv, x, pv), mythlibs) + bb.data.getVar("PACKAGES", d).split())
-
- bb.data.setVar("PACKAGES", packages, d)
-}
-
-EXTRA_MYTHTVCONF_armv7a = "--cpu=cortex-a8"
-EXTRA_MYTHTVCONF ?= ""
-
-EXTRA_OECONF = " \
- --cross-prefix=${TARGET_PREFIX} \
- --sysroot=${STAGING_DIR_HOST} \
- --prefix=${prefix} \
- \
- --arch=${TARGET_ARCH} \
- --extra-cflags="${TARGET_CFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \
- --extra-cxxflags="${TARGET_CXXFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \
- --extra-ldflags="${TARGET_LDFLAGS}" \
- ${EXTRA_MYTHTVCONF} \
-"
-
-do_configure_prepend() {
-# it's not autotools anyway, so we call ./configure directly
- find . -name "Makefile"|xargs rm -f
-
- ./configure --qmake=qmake2 \
- --disable-altivec \
- --disable-opengl \
- --disable-stripping \
- --disable-xvmc \
- --enable-v4l \
- --enable-audio-oss \
- --enable-dvb \
- --enable-libmp3lame \
- --dvb-path=${STAGING_INCDIR} \
- --without-bindings=perl,python \
- ${EXTRA_OECONF}
-}
-
-python populate_packages_prepend () {
- new_packages = []
-
- def the_hook(file, pkg, pattern, format, basename):
- new_packages.append(pkg)
-
- do_split_packages(d, root=bb.data.expand('${datadir}/mythtv/themes', d), file_regex='(.*)', output_pattern='mythtv-theme-%s', description='MythTV theme %s', allow_dirs=True, hook=the_hook, prepend=True)
-
- bb.data.setVar("RDEPENDS_${PN}", "%s %s" % (bb.data.getVar("RDEPENDS_${PN}", d), " ".join(new_packages)), d)
-}
diff --git a/recipes/navit/navit-icons/configure.in b/recipes/navit/navit-icons/configure.in
index 25259007e8..4ffc7b0a21 100644
--- a/recipes/navit/navit-icons/configure.in
+++ b/recipes/navit/navit-icons/configure.in
@@ -60,6 +60,7 @@ AM_CONDITIONAL(USE_SVG2PNG_SCALES_FLAG, test "x${SVG2PNG_SCALES_FLAG}" != "xyes"
AM_CONDITIONAL(USE_SVG2PNG_SCALES_NAV, test "x${SVG2PNG_SCALES_NAV}" != "xyes" -a "x${SVG2PNG_SCALES_NAV}" != "x")
AM_CONDITIONAL(USE_SVG2PNG, test "x${enable_svg2png}" = "xyes")
AM_CONDITIONAL(USE_SVG, test "x${enable_svg}" = "xyes")
+AM_CONDITIONAL(SUPPORT_WIN32, [test "x$win32" = "xyes"])
AC_CONFIG_FILES([
Makefile
diff --git a/recipes/navit/navit-icons_svn.bb b/recipes/navit/navit-icons_svn.bb
index 6649423d2c..ad36b0ead5 100644
--- a/recipes/navit/navit-icons_svn.bb
+++ b/recipes/navit/navit-icons_svn.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Navit is a car navigation system with routing engine."
LICENSE = "GPL"
SECTION = "x11/applications"
-DEPENDS = "glib-2.0 gtk+"
+DEPENDS = "glib-2.0 gtk+ imagemagick-native librsvg-native"
RRECOMMENDS = "gpsd espeak flite"
#only icons present in the package
@@ -10,7 +10,6 @@ PACKAGE_ARCH = "all"
PV = "0.1.0+svnr${SRCPV}"
PR = "r1"
-DEPENDS_shr += " librsvg-native"
EXTRA_OECONF = "--disable-binding-python --disable-gui-sdl --disable-samplemap --enable-avoid-float --enable-avoid-unaligned --enable-svg2png-scaling-flag=32 --disable-speech-speech-dispatcher"
S = "${WORKDIR}/xpm"
@@ -19,7 +18,9 @@ inherit autotools
FILES_${PN} = " /usr/share/navit/xpm/"
-#use different URL than navit_svn doest, to prevent upgrade/downgrade cycle in downloads dir
+SRCREV = "2948"
+
+#use different URL than navit_svn does, to prevent upgrade/downgrade cycle in downloads dir
SRC_URI = "svn://anonymous@navit.svn.sourceforge.net/svnroot/navit/trunk/navit/navit;module=xpm;proto=https \
file://configure.in"
diff --git a/recipes/navit/navit_svn.bb b/recipes/navit/navit_svn.bb
index df42b9838f..a6e3fa3f68 100644
--- a/recipes/navit/navit_svn.bb
+++ b/recipes/navit/navit_svn.bb
@@ -1,10 +1,7 @@
require navit.inc
PV = "0.1.0+svnr${SRCPV}"
-PR = "${INC_PR}.4"
-
-DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_shr = "1"
+PR = "${INC_PR}.5"
S = "${WORKDIR}/navit"
@@ -16,6 +13,7 @@ DEPENDS_shr += " librsvg-native"
RDEPENDS = " navit-icons"
EXTRA_OECONF += " --enable-svg2png-scaling-flag=32 --disable-speech-speech-dispatcher --enable-cache-size=20971520"
+SRCREV = "3012"
SRC_URI = "svn://anonymous@navit.svn.sourceforge.net/svnroot/navit/trunk;module=navit;proto=https"
EXTRA_AUTORECONF = " -I m4"
@@ -35,7 +33,7 @@ SRC_URI += "file://navit.xml \
file://osd.xml \
file://speech.xml \
file://plugins.xml \
- "
+ "
#Second launcher for shr
SRC_URI_append_shr = "file://navitD.desktop \
diff --git a/recipes/net-snmp/net-snmp-5.4.2.1/CVE-2008-6123.patch b/recipes/net-snmp/net-snmp-5.4.2.1/CVE-2008-6123.patch
new file mode 100644
index 0000000000..5d4658cf7d
--- /dev/null
+++ b/recipes/net-snmp/net-snmp-5.4.2.1/CVE-2008-6123.patch
@@ -0,0 +1,21 @@
+http://bugs.gentoo.org/show_bug.cgi?id=250429
+
+diff -Naur a/snmplib.orig/snmpUDPDomain.c b/snmplib/snmpUDPDomain.c
+--- a/snmplib.orig/snmpUDPDomain.c 2007-10-11 22:46:30.000000000 +0200
++++ b/snmplib/snmpUDPDomain.c 2009-07-10 23:41:37.000000000 +0200
+@@ -104,12 +110,12 @@
+ char tmp[64];
+ to = (struct sockaddr_in *) &(addr_pair->remote_addr);
+ if (to == NULL) {
+- sprintf(tmp, "UDP: [%s]->unknown",
++ sprintf(tmp, "UDP: unknown->[%s]",
+ inet_ntoa(addr_pair->local_addr));
+ } else {
+- sprintf(tmp, "UDP: [%s]->", inet_ntoa(addr_pair->local_addr));
+- sprintf(tmp + strlen(tmp), "[%s]:%hd",
++ sprintf(tmp, "UDP: [%s]:%hu->",
+ inet_ntoa(to->sin_addr), ntohs(to->sin_port));
++ sprintf(tmp + strlen(tmp), "[%s]", inet_ntoa(addr_pair->local_addr));
+ }
+ return strdup(tmp);
+ }
diff --git a/recipes/net-snmp/net-snmp.inc b/recipes/net-snmp/net-snmp.inc
index 7ba48c6dec..a96ae70f39 100644
--- a/recipes/net-snmp/net-snmp.inc
+++ b/recipes/net-snmp/net-snmp.inc
@@ -8,7 +8,7 @@ RDEPENDS_${PN}-dev = "net-snmp-client (= ${EXTENDPV}) net-snmp-server (= ${EXTEN
RRECOMMENDS_${PN}-dbg = "net-snmp-client (= ${EXTENDPV}) net-snmp-server (= ${EXTENDPV})"
INC_PR = "r5"
-inherit autotools update-rc.d
+inherit autotools update-rc.d siteinfo
TARGET_CC_ARCH += "${LDFLAGS}"
diff --git a/recipes/net-snmp/net-snmp_5.4.2.1.bb b/recipes/net-snmp/net-snmp_5.4.2.1.bb
index 7e81151c6d..f22120c7dd 100644
--- a/recipes/net-snmp/net-snmp_5.4.2.1.bb
+++ b/recipes/net-snmp/net-snmp_5.4.2.1.bb
@@ -1,8 +1,9 @@
require net-snmp.inc
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
SRC_URI = "${SOURCEFORGE_MIRROR}/net-snmp/net-snmp-${PV}.tar.gz \
file://configure-tail.patch;patch=1 \
+ file://CVE-2008-6123.patch;patch=1 \
file://init \
file://snmpd.conf \
file://snmptrapd.conf"
diff --git a/recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-db43.patch b/recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-db43.patch
deleted file mode 100644
index 93d3e4b9ea..0000000000
--- a/recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-db43.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-Index: netatalk-2.0.3/bin/cnid/cnid_index.c
-===================================================================
---- netatalk-2.0.3.orig/bin/cnid/cnid_index.c
-+++ netatalk-2.0.3/bin/cnid/cnid_index.c
-@@ -274,7 +274,11 @@ static int dbif_count(const int dbi, u_i
- DB_BTREE_STAT *sp;
- DB *db = db_table[dbi].db;
-
-+#if DB_VERSION_MAJOR > 4 || ( DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3 )
-+ ret = db->stat(db, db_txn, &sp, 0);
-+#else
- ret = db->stat(db, &sp, 0);
-+#endif
-
- if (ret) {
- LOG(log_error, logtype_cnid, "error getting stat infotmation on database: %s", db_strerror(errno));
-Index: netatalk-2.0.3/etc/cnid_dbd/dbif.c
-===================================================================
---- netatalk-2.0.3.orig/etc/cnid_dbd/dbif.c
-+++ netatalk-2.0.3/etc/cnid_dbd/dbif.c
-@@ -514,7 +514,11 @@ int dbif_count(const int dbi, u_int32_t
- DB_BTREE_STAT *sp;
- DB *db = db_table[dbi].db;
-
-+#if DB_VERSION_MAJOR > 4 || ( DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3 )
-+ ret = db->stat(db, db_txn, &sp, 0);
-+#else
- ret = db->stat(db, &sp, 0);
-+#endif
-
- if (ret) {
- LOG(log_error, logtype_cnid, "error getting stat infotmation on database: %s", db_strerror(errno));
diff --git a/recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-newerdb.patch b/recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-newerdb.patch
deleted file mode 100644
index f64c8cf5eb..0000000000
--- a/recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-newerdb.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-Index: netatalk-2.0.3/macros/db3-check.m4
-===================================================================
---- netatalk-2.0.3.orig/macros/db3-check.m4
-+++ netatalk-2.0.3/macros/db3-check.m4
-@@ -115,6 +115,14 @@ int main(void) {
- AC_DEFUN([NETATALK_BERKELEY_LINK],
- [
- atalk_cv_lib_db=no
-+NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_4,[-ldb-4.4])
-+NETATALK_BDB_LINK_TRY(atalk_cv_db_db44,[-ldb44])
-+NETATALK_BDB_LINK_TRY(atalk_cv_db_db_44,[-ldb-44])
-+NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_4,[-ldb-4-4])
-+NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_3,[-ldb-4.3])
-+NETATALK_BDB_LINK_TRY(atalk_cv_db_db43,[-ldb43])
-+NETATALK_BDB_LINK_TRY(atalk_cv_db_db_43,[-ldb-43])
-+NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_3,[-ldb-4-3])
- NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_2,[-ldb-4.2])
- NETATALK_BDB_LINK_TRY(atalk_cv_db_db42,[-ldb42])
- NETATALK_BDB_LINK_TRY(atalk_cv_db_db_42,[-ldb-42])
-@@ -134,7 +142,7 @@ AC_DEFUN([AC_PATH_BDB],
- trybdbdir=""
- dobdbsearch=yes
- bdb_search_dirs="/usr/local/include /usr/include"
-- search_subdirs="/db4.2 /db42 /db4.1 /db41 /db4 /"
-+ search_subdirs="/db4.4 /db44 /db4.3 /db43 /db4.2 /db42 /db4.1 /db41 /db4 /"
-
- dnl required BDB version
- DB_MAJOR_REQ=4
diff --git a/recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-setXid.patch b/recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-setXid.patch
deleted file mode 100644
index 70170c134d..0000000000
--- a/recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-setXid.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: netatalk-2.0.3/bin/afppasswd/Makefile.am
-===================================================================
---- netatalk-2.0.3.orig/bin/afppasswd/Makefile.am
-+++ netatalk-2.0.3/bin/afppasswd/Makefile.am
-@@ -12,7 +12,8 @@ afppasswd_SOURCES = afppasswd.c
- afppasswd_LDADD = $(top_builddir)/libatalk/libatalk.la @SSL_LIBS@
-
- CFLAGS = @CFLAGS@ @SSL_CFLAGS@ -I$(top_srcdir)/sys \
-- -D_PATH_AFPDPWFILE=\"$(pkgconfdir)/afppasswd\"
-+ -D_PATH_AFPDPWFILE=\"$(pkgconfdir)/afppasswd\" \
-+ @BINDNOW_FLAGS@
-
- install-exec-hook:
- if USE_DHX
diff --git a/recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-xfs.patch b/recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-xfs.patch
deleted file mode 100644
index e91ebcebd2..0000000000
--- a/recipes/netatalk/netatalk-2.0.3/netatalk-2.0.3-xfs.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Index: netatalk-2.0.3/configure.in
-===================================================================
---- netatalk-2.0.3.orig/configure.in
-+++ netatalk-2.0.3/configure.in
-@@ -694,12 +694,16 @@ fi
- # AC_MSG_RESULT([enabling quotactl wrapper])
- # )
-
-+AC_ARG_WITH([xfs],
-+ AS_HELP_STRING([--without-xfs], [Build without XFS filesystem quota support]))
-+
-+if test "x$with_xfs" != "xno"; then
- # For quotas on Linux XFS filesystems
- AC_CHECK_HEADERS(linux/xqm.h linux/xfs_fs.h)
- AC_CHECK_HEADERS(xfs/libxfs.h xfs/xqm.h xfs/xfs_fs.h)
- # For linux > 2.5.56
- AC_CHECK_HEADERS(linux/dqblk_xfs.h)
--
-+fi
-
- dnl ----- as far as I can tell, dbtob always does the wrong thing
- dnl ----- on every single version of linux I've ever played with.
diff --git a/recipes/netatalk/netatalk-2.0.5/netatalk-dbd.patch b/recipes/netatalk/netatalk-2.0.5/netatalk-dbd.patch
new file mode 100644
index 0000000000..6d6d03e36b
--- /dev/null
+++ b/recipes/netatalk/netatalk-2.0.5/netatalk-dbd.patch
@@ -0,0 +1,35 @@
+Move back to AC_TRY_LINK...
+
+Index: netatalk-2.0.5/macros/db3-check.m4
+===================================================================
+--- netatalk-2.0.5.orig/macros/db3-check.m4 2010-03-05 17:57:14.000000000 +0100
++++ netatalk-2.0.5/macros/db3-check.m4 2010-03-05 18:33:08.000000000 +0100
+@@ -33,25 +33,13 @@
+ for lib in $atalk_cv_bdb_try_libs ; do
+ LIBS="$lib $savedlibs"
+ AC_MSG_CHECKING([Berkeley DB library ($lib)])
+- AC_TRY_RUN([
++ AC_TRY_LINK([
+ #include <stdio.h>
+ #include <db.h>
+- int main(void) {
+- int major, minor, patch;
++ ], [
++ int minor, major, patch;
+ char *version_str;
+ version_str = db_version(&major, &minor, &patch);
+- if (major < DB_MAJOR_REQ || minor < DB_MINOR_REQ || patch < DB_PATCH_REQ) {
+- printf("linking wrong library version (%d.%d.%d), ",major, minor, patch);
+- return (2);
+- }
+- if ( major != DB_VERSION_MAJOR || minor != DB_VERSION_MINOR || patch != DB_VERSION_PATCH) {
+- printf("header/library version mismatch (%d.%d.%d/%d.%d.%d), ",
+- DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, major, minor, patch);
+- return (3);
+- }
+- printf("%d.%d.%d ... ",major, minor, patch);
+- return (0);
+- }
+ ],[
+
+ AC_MSG_RESULT(yes)
diff --git a/recipes/netatalk/netatalk_2.0.3.bb b/recipes/netatalk/netatalk_2.0.3.bb
deleted file mode 100644
index 0ed580d6f1..0000000000
--- a/recipes/netatalk/netatalk_2.0.3.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-SECTION = "net"
-PR = "r1"
-LICENSE = "GPL"
-
-DEPENDS = "cups db openssl"
-
-SRC_URI = "http://ovh.dl.sourceforge.net/sourceforge/netatalk/netatalk-${PV}.tar.gz \
- file://netatalk-2.0.3-db43.patch;patch=1 \
- file://netatalk-2.0.3-newerdb.patch;patch=1 \
- file://netatalk-2.0.3-xfs.patch;patch=1 \
- file://netatalk.conf \
- file://init"
-
-inherit autotools update-rc.d
-
-INITSCRIPT_NAME = "atalk"
-INITSCRIPT_PARAMS = "defaults 65"
-
-PACKAGES = "${PN}-atalkd ${PN}-pap ${PN}-timelord ${PN}-dbg ${PN} ${PN}-doc ${PN}-dev"
-
-RRECOMMENDS_${PN}-atalkd = "kernel-module-appletalk"
-
-FILES_${PN}-atalkd += "${sysconfdir}/netatalk/atalkd.conf \
- /usr/sbin/atalkd"
-FILES_${PN}-pap += "/usr/bin/pap \
- ${sysconfdir}/netatalk/papd.conf \
- /usr/sbin/papd \
- /usr/bin/papstatus"
-FILES_${PN}-timelord += "/usr/sbin/timelord"
-FILES_${PN}-dbg += "${sysconfdir}/netatalk/uams/.debug"
-
-EXTRA_OECONF += "ac_cv_path_KRB5_CONFIG=no \
- ac_cv_header_rpcsvc_rquota_h=no \
- --with-bdb=${STAGING_DIR_TARGET}${layout_exec_prefix} \
- --enable-timelord \
- --without-shadow \
- --enable-static=no \
- --disable-srvloc \
- --without-pam \
- --with-ssl-dir=${STAGING_DIR_TARGET}${layout_exec_prefix}"
-LDFLAGS += "-lpthread -L${STAGING_LIBDIR}"
-
-do_install_append() {
- install -D -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/atalk
- install -D -m 0644 ${WORKDIR}/netatalk.conf ${D}${sysconfdir}/netatalk/netatalk.conf
-}
diff --git a/recipes/netatalk/netatalk_2.0.5.bb b/recipes/netatalk/netatalk_2.0.5.bb
new file mode 100644
index 0000000000..8971f07bed
--- /dev/null
+++ b/recipes/netatalk/netatalk_2.0.5.bb
@@ -0,0 +1,46 @@
+SECTION = "net"
+PR = "r1"
+LICENSE = "GPL"
+
+DEPENDS = "cups db openssl"
+
+SRC_URI = "http://ovh.dl.sourceforge.net/sourceforge/netatalk/netatalk-${PV}.tar.gz;name=src \
+ file://netatalk-dbd.patch;patch=1 \
+ file://netatalk.conf \
+ file://init"
+SRC_URI[src.md5sum] = "f35cd7a4ce26c780de380cd2bcae5ce6"
+SRC_URI[src.sha256sum] = "7e02b0d2849ec83459c65d240809ff95ee4a857a3ba38af2cafbbe3717d0c672"
+
+inherit autotools update-rc.d
+
+INITSCRIPT_NAME = "atalk"
+INITSCRIPT_PARAMS = "defaults 65"
+
+PACKAGES = "${PN}-atalkd ${PN}-pap ${PN}-timelord ${PN}-dbg ${PN} ${PN}-doc ${PN}-dev"
+
+RRECOMMENDS_${PN}-atalkd = "kernel-module-appletalk"
+
+FILES_${PN}-atalkd += "${sysconfdir}/netatalk/atalkd.conf \
+ /usr/sbin/atalkd"
+FILES_${PN}-pap += "/usr/bin/pap \
+ ${sysconfdir}/netatalk/papd.conf \
+ /usr/sbin/papd \
+ /usr/bin/papstatus"
+FILES_${PN}-timelord += "/usr/sbin/timelord"
+FILES_${PN}-dbg += "${sysconfdir}/netatalk/uams/.debug"
+
+EXTRA_OECONF += "ac_cv_path_KRB5_CONFIG=no \
+ ac_cv_header_rpcsvc_rquota_h=no \
+ --with-bdb=${STAGING_DIR_TARGET}${layout_exec_prefix} \
+ --enable-timelord \
+ --without-shadow \
+ --enable-static=no \
+ --disable-srvloc \
+ --without-pam \
+ --with-ssl-dir=${STAGING_DIR_TARGET}${layout_exec_prefix}"
+LDFLAGS += "-lpthread -L${STAGING_LIBDIR}"
+
+do_install_append() {
+ install -D -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/atalk
+ install -D -m 0644 ${WORKDIR}/netatalk.conf ${D}${sysconfdir}/netatalk/netatalk.conf
+}
diff --git a/recipes/netbase/netbase/bug20/hosts b/recipes/netbase/netbase/bug20/hosts
new file mode 100644
index 0000000000..789d660fa7
--- /dev/null
+++ b/recipes/netbase/netbase/bug20/hosts
@@ -0,0 +1,3 @@
+127.0.0.1 localhost.localdomain localhost bug
+10.10.10.1 bughost
+
diff --git a/recipes/netbase/netbase/bug20/interfaces b/recipes/netbase/netbase/bug20/interfaces
new file mode 100644
index 0000000000..6e5f74eb45
--- /dev/null
+++ b/recipes/netbase/netbase/bug20/interfaces
@@ -0,0 +1,29 @@
+# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
+
+# The loopback interface
+auto lo
+iface lo inet loopback
+
+# Ethernet/RNDIS gadget (g_ether)
+# usbnet and static hwaddr for mac users
+auto usb0
+iface usb0 inet static
+ hwaddress ether A2:80:F4:8A:3C:91
+ address 10.10.10.10
+ netmask 255.255.255.0
+ gateway 10.10.10.1
+
+# Wired interface
+# BUGbase Ethernet which is built into kernel
+# It is on USB but we rename it by udev rule
+auto eth0
+iface eth0 inet dhcp
+
+#
+# wireless interface
+auto eth1
+iface eth1 inet dhcp
+ wireless_mode managed
+ wireless_essid any
+ wpa-driver wext
+ wpa-conf /etc/wpa_supplicant.conf
diff --git a/recipes/netbase/netbase/hipox/interfaces b/recipes/netbase/netbase/hipox/interfaces
new file mode 100644
index 0000000000..206c1e9e48
--- /dev/null
+++ b/recipes/netbase/netbase/hipox/interfaces
@@ -0,0 +1,17 @@
+# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
+
+# the loopback interface
+auto lo
+iface lo inet loopback
+
+# interfaces to bring up at boot time
+auto eth0 eth1
+
+# the onboard NIC
+iface eth0 inet dhcp
+
+# interfaces to bring up when hotplugging
+allow-hotplug eth1
+
+# additional USB-NIC's
+iface eth1 inet dhcp
diff --git a/recipes/netbase/netbase_4.21.bb b/recipes/netbase/netbase_4.21.bb
index c8b4d19869..bb94399e86 100644
--- a/recipes/netbase/netbase_4.21.bb
+++ b/recipes/netbase/netbase_4.21.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "This package provides the necessary \
infrastructure for basic TCP/IP based networking."
SECTION = "base"
-LICENSE = "GPL"
-PR = "r40"
+LICENSE = "GPLv2"
+PR = "r41"
inherit update-rc.d
diff --git a/recipes/networkmanager/network-manager-applet_0.8.bb b/recipes/networkmanager/network-manager-applet_0.8.bb
new file mode 100644
index 0000000000..d1be602ef3
--- /dev/null
+++ b/recipes/networkmanager/network-manager-applet_0.8.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "GTK+ applet for NetworkManager"
+LICENSE = "GPL"
+DEPENDS = "policykit-gnome libnotify networkmanager dbus-glib libglade gconf gnome-keyring"
+RDEPENDS = "networkmanager"
+
+inherit gnome
+
+SRC_URI += "file://nm-applet.conf"
+
+do_configure_append() {
+ rm config.log
+ # Sigh... --enable-compile-warnings=no doesn't actually turn off -Werror
+ for i in $(find ${S} -name "Makefile") ; do
+ sed -i -e s:-Werror::g $i
+ done
+}
+
+# Hack around dbus a_console problems
+do_install_append() {
+ install -m 0644 ${WORKDIR}/nm-applet.conf ${D}${sysconfdir}/dbus-1/system.d/
+}
+
+FILES_${PN} += "${datadir}/nm-applet/ \
+ ${datadir}/gnome-vpn-properties/ \
+ ${datadir}/gnome/autostart/ \
+ "
diff --git a/recipes/networkmanager/network-manager-applet_git.bb b/recipes/networkmanager/network-manager-applet_git.bb
index 8b0d6fe9aa..524e73f68d 100644
--- a/recipes/networkmanager/network-manager-applet_git.bb
+++ b/recipes/networkmanager/network-manager-applet_git.bb
@@ -5,8 +5,8 @@ RDEPENDS = "networkmanager"
DEFAULT_PREFERENCE = "-1"
-SRCREV = "efa170820623e7c1d6c161bfc8a37db0d074d09e"
-PV = "0.7.1+git"
+SRCREV = "447befc06fcfcb13322deb66bcdc9067bda0915b"
+PV = "0.7.999+git"
PR_append = ".gitr${SRCREV}"
inherit gnome
@@ -18,7 +18,7 @@ S = "${WORKDIR}/git"
# Hack around dbus a_console problems
do_install_append() {
- install -m 0644 ${WORKDIR}/nm-applet.conf ${D}${sysconfdir}/dbus-1/system.d/
+ install -m 0644 ${WORKDIR}/nm-applet.conf ${D}${sysconfdir}/dbus-1/system.d/
}
FILES_${PN} += "${datadir}/nm-applet/ \
diff --git a/recipes/networkmanager/networkmanager-0.7.inc b/recipes/networkmanager/networkmanager-0.7.inc
index 3494aa7ae3..91c9190a88 100644
--- a/recipes/networkmanager/networkmanager-0.7.inc
+++ b/recipes/networkmanager/networkmanager-0.7.inc
@@ -28,7 +28,7 @@ do_stage () {
# Work around dbus permission problems since we lack a proper at_console
do_install_prepend() {
sed -i -e s:deny:allow:g ${S}/src/NetworkManager.conf
- sed -i -e s:deny:allow:g ${S}/system-settings/src/nm-system-settings.conf
+ sed -i -e s:deny:allow:g ${S}/system-settings/src/nm-system-settings.conf || true
sed -i -e s:deny:allow:g ${S}/callouts/nm-dispatcher.conf
}
@@ -38,7 +38,7 @@ do_install_append () {
# Test binaries
install -d ${D}/usr/bin
install -m 0755 ${S}/test/.libs/nm-tool ${D}/usr/bin
- install -m 0755 ${S}/test/.libs/libnm_glib_test ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/libnm* ${D}/usr/bin
install -m 0755 ${S}/test/.libs/nm-online ${D}/usr/bin
}
diff --git a/recipes/networkmanager/networkmanager-openvpn_0.8.bb b/recipes/networkmanager/networkmanager-openvpn_0.8.bb
new file mode 100644
index 0000000000..7458e4b269
--- /dev/null
+++ b/recipes/networkmanager/networkmanager-openvpn_0.8.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "NetworkManager"
+SECTION = "net/misc"
+LICENSE = "GPL"
+PRIORITY = "optional"
+DEPENDS = "networkmanager libnl dbus dbus-glib hal wireless-tools policykit gnutls e2fsprogs-libs ppp"
+RDEPENDS = "wpa-supplicant dhcp-client \
+ ${@base_contains('COMBINED_FEATURES', '3gmodem', 'ppp', '', d)} \
+ "
+
+EXTRA_OECONF = " \
+ --with-distro=debian \
+ --with-crypto=gnutls \
+ --disable-more-warnings"
+
+inherit autotools pkgconfig
+
+PR = "r1"
+
+SRC_URI += "${GNOME_MIRROR}/NetworkManager-openvpn/${@gnome_verdir("${PV}")}/NetworkManager-openvpn-${PV}.tar.bz2 \
+"
+
+S = "${WORKDIR}/NetworkManager-openvpn-${PV}"
+
+FILES_${PN} += " \
+ ${libdir}/NetworkManager/*.so \
+ ${datadir}/gnome-vpn-properties \
+ ${datadir}/icons "
+
+
diff --git a/recipes/networkmanager/networkmanager_0.7.999.bb b/recipes/networkmanager/networkmanager_0.7.999.bb
new file mode 100644
index 0000000000..96f635a2bb
--- /dev/null
+++ b/recipes/networkmanager/networkmanager_0.7.999.bb
@@ -0,0 +1,35 @@
+require networkmanager-0.7.inc
+
+DEFAULT_PREFERENCE = "-1"
+
+PR = "r3"
+
+SRC_URI += " \
+ file://remove-gtk-doc-make.patch;patch=1 \
+ file://nm-system-settings.conf \
+ file://NetworkManager \
+ file://gtk-doc.make \
+"
+
+
+do_configure_prepend() {
+ cp ${WORKDIR}/gtk-doc.make ${S}/
+ echo "EXTRA_DIST = version.xml" > gnome-doc-utils.make
+ sed -i -e 's:man \\:man:' -e s:docs::g ${S}/Makefile.am
+ sed -i -e /^docs/d ${S}/configure.ac
+}
+
+FILES_${PN} += " ${datadir}/polkit-1/"
+
+S = "${WORKDIR}/NetworkManager-${PV}"
+
+do_install_append () {
+ install -d ${D}/etc/NetworkManager/
+ install -m 0644 ${WORKDIR}/nm-system-settings.conf ${D}/etc/NetworkManager/
+ install -m 0755 ${WORKDIR}/NetworkManager ${D}/etc/init.d
+
+ # Install an empty VPN folder as nm-connection-editor will happily segfault without it :o.
+ # With or without VPN support built in ;).
+ install -d ${D}/etc/NetworkManager/VPN
+}
+
diff --git a/recipes/networkmanager/networkmanager_0.8.bb b/recipes/networkmanager/networkmanager_0.8.bb
new file mode 100644
index 0000000000..96f635a2bb
--- /dev/null
+++ b/recipes/networkmanager/networkmanager_0.8.bb
@@ -0,0 +1,35 @@
+require networkmanager-0.7.inc
+
+DEFAULT_PREFERENCE = "-1"
+
+PR = "r3"
+
+SRC_URI += " \
+ file://remove-gtk-doc-make.patch;patch=1 \
+ file://nm-system-settings.conf \
+ file://NetworkManager \
+ file://gtk-doc.make \
+"
+
+
+do_configure_prepend() {
+ cp ${WORKDIR}/gtk-doc.make ${S}/
+ echo "EXTRA_DIST = version.xml" > gnome-doc-utils.make
+ sed -i -e 's:man \\:man:' -e s:docs::g ${S}/Makefile.am
+ sed -i -e /^docs/d ${S}/configure.ac
+}
+
+FILES_${PN} += " ${datadir}/polkit-1/"
+
+S = "${WORKDIR}/NetworkManager-${PV}"
+
+do_install_append () {
+ install -d ${D}/etc/NetworkManager/
+ install -m 0644 ${WORKDIR}/nm-system-settings.conf ${D}/etc/NetworkManager/
+ install -m 0755 ${WORKDIR}/NetworkManager ${D}/etc/init.d
+
+ # Install an empty VPN folder as nm-connection-editor will happily segfault without it :o.
+ # With or without VPN support built in ;).
+ install -d ${D}/etc/NetworkManager/VPN
+}
+
diff --git a/recipes/nsd/nsd_2.0.0.bb b/recipes/nsd/nsd_2.0.0.bb
deleted file mode 100644
index 0614337d5b..0000000000
--- a/recipes/nsd/nsd_2.0.0.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-DESCRIPTION = "NSD is an authoritative only, high performance, simple and opensource name server"
-SECTION = "console/network"
-PRIORITY = "optional"
-
-SRC_URI = "http://www.nlnetlabs.nl/downloads/nsd/nsd-${PV}.tar.gz"
-LICENSE = "nsd"
-inherit autotools
-
-do_install() {
- oe_runmake configdir=${D}${sysconfdir}/nsd \
- pidfile=${D}${localstatedir}/run/nsd.pid \
- zonesfile=${D}${sysconfdir}/nsd/nsd.zones \
- dbfile=${D}${sysconfdir}/nsd/nsd.db \
- configfile=${D}${sysconfdir}/nsd/nsdc.conf \
- zonesdir=${D}${sysconfdir}/nsd \
- prefix=${D}${prefix} \
- exec_prefix=${D}${exec_prefix} \
- sbindir=${D}${sbindir} \
- mandir=${D}${mandir} \
- install
-}
-
diff --git a/recipes/nsd/nsd_3.2.4.bb b/recipes/nsd/nsd_3.2.4.bb
new file mode 100644
index 0000000000..148ce0dffe
--- /dev/null
+++ b/recipes/nsd/nsd_3.2.4.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "NSD is an authoritative only, high performance, simple and opensource name server"
+SECTION = "console/network"
+PRIORITY = "optional"
+
+DEPENDS = "openssl"
+
+SRC_URI = "http://www.nlnetlabs.nl/downloads/nsd/nsd-${PV}.tar.gz;name=src"
+SRC_URI[src.md5sum] = "0c394fd713d194bde24a1035e56d5a79"
+SRC_URI[src.sha256sum] = "41ed4a3e21d7381379c85d46ee7131937195aa780f120b03e5d4d878d397c769"
+LICENSE = "nsd"
+inherit autotools
+
+EXTRA_OECONF = " --with-ssl=${STAGING_DIR_HOST}${exec_prefix} "
+
diff --git a/recipes/numptyphysics/numptyphysics_svn.bb b/recipes/numptyphysics/numptyphysics_svn.bb
index 7ebde5086b..dec9cf14db 100644
--- a/recipes/numptyphysics/numptyphysics_svn.bb
+++ b/recipes/numptyphysics/numptyphysics_svn.bb
@@ -5,6 +5,7 @@ RDEPENDS += "libpng"
LICENSE = "GPL"
HOMEPAGE = "http://numptyphysics.garage.maemo.org/"
SECTION = "x11/games"
+SRCREV = "109"
PV = "0.2+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/obsolete/efl1/epsilon_svn.bb b/recipes/obsolete/efl1/epsilon_svn.bb
new file mode 100644
index 0000000000..14eb2d27a2
--- /dev/null
+++ b/recipes/obsolete/efl1/epsilon_svn.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "Epsilon is a flexible and powerful image thumbnailing library \
+that is compliant with the freedesktop.org Thumbnail Managing Standard."
+LICENSE = "MIT BSD"
+# can also depend on xine for movie thumbnails
+DEPENDS = "libpng evas ecore edje perl-native"
+PV = "0.3.0.012+svnr${SRCPV}"
+PR = "r4"
+
+inherit efl
+
+SRCREV = "${EFL_SRCREV}"
+SRC_URI = "svn://svn.enlightenment.org/svn/e/OLD;module=${SRCNAME};proto=http"
+
+# a gstreamer thumbnailer would be nice now that we have emotion using gstreamer as well
+EXTRA_OECONF = "--disable-xine"
+
+# package the thumb daemon seperately
+PACKAGES =+ "${PN}-thumbd"
+FILES_${PN}-thumbd = "${bindir}/epsilon ${bindir}/epsilon_thumbd"
+RRECOMMENDS_${PN} = "${PN}-thumbd"
+
+FILES_${PN}-dev += "${libdir}/${PN}/*/*.a ${libdir}/${PN}/*/*.la"
+FILES_${PN}-dbg += "${libdir}/${PN}/plugins/.debug/*.so"
+
diff --git a/recipes/efl1/etk-native_svn.bb b/recipes/obsolete/efl1/etk-native_svn.bb
index 345802d25d..345802d25d 100644
--- a/recipes/efl1/etk-native_svn.bb
+++ b/recipes/obsolete/efl1/etk-native_svn.bb
diff --git a/recipes/efl1/etk/etk_scrolled_view_dragable_combined_bouncy.patch b/recipes/obsolete/efl1/etk/etk_scrolled_view_dragable_combined_bouncy.patch
index 75ef0f95ea..75ef0f95ea 100644
--- a/recipes/efl1/etk/etk_scrolled_view_dragable_combined_bouncy.patch
+++ b/recipes/obsolete/efl1/etk/etk_scrolled_view_dragable_combined_bouncy.patch
diff --git a/recipes/obsolete/efl1/etk_svn.bb b/recipes/obsolete/efl1/etk_svn.bb
new file mode 100644
index 0000000000..b63a7b2ee8
--- /dev/null
+++ b/recipes/obsolete/efl1/etk_svn.bb
@@ -0,0 +1,43 @@
+DESCRIPTION = "Etk is an advanced widget toolkit based on the Enlightenment Foundation Libraries."
+DEPENDS = "evas ecore edje"
+LICENSE = "MIT"
+PV = "0.1.0.042+svnr${SRCPV}"
+PR = "r5"
+
+inherit efl
+
+SRCREV = "${EFL_SRCREV}"
+SRC_URI = "svn://svn.enlightenment.org/svn/e/OLD;module=${SRCNAME};proto=http \
+file://mkinstalldirs"
+
+RRECOMMENDS_${PN} = "\
+ etk-engines-software-x11 \
+ etk-engines-evas \
+ etk-engines-fb \
+ etk-engines-x11 \
+ etk-engines-software-x11-16 \
+"
+
+do_compile_prepend() {
+ touch ${S}/po/etk.pot
+ cp ${WORKDIR}/mkinstalldirs ${S}
+ sed -i -e 's:@MKINSTALLDIRS@:${S}/mkinstalldirs:g' ${S}/po/Makefile
+}
+
+PACKAGES += "etk-engines-software-x11"
+FILES_${PN}-engines-software-x11 = "${libdir}/etk/engines/ecore_evas_software_x11.so"
+
+PACKAGES =+ "etk-engines-gl-x11"
+FILES_${PN}-engines-gl-x11 = "${libdir}/etk/engines/ecore_evas_gl_x11.so"
+
+PACKAGES =+ "etk-engines-evas"
+FILES_${PN}-engines-evas = "${libdir}/etk/engines/ecore_evas.so"
+
+PACKAGES =+ "etk-engines-fb"
+FILES_${PN}-engines-fb = "${libdir}/etk/engines/ecore_fb.so"
+
+PACKAGES =+ "etk-engines-x11"
+FILES_${PN}-engines-x11 = "${libdir}/etk/engines/ecore_evas_x11.so"
+
+PACKAGES =+ "etk-engines-software-x11-16"
+FILES_${PN}-engines-software-x11-16 = "${libdir}/etk/engines/ecore_evas_software_x11_16.so"
diff --git a/recipes/openmoko-3rdparty/babiloo-efl_2.0.9-3.bb b/recipes/obsolete/openmoko-3rdparty/babiloo-efl_2.0.9-3.bb
index 4bff706b6d..4bff706b6d 100644
--- a/recipes/openmoko-3rdparty/babiloo-efl_2.0.9-3.bb
+++ b/recipes/obsolete/openmoko-3rdparty/babiloo-efl_2.0.9-3.bb
diff --git a/recipes/openmoko-3rdparty/babiloo-efl_2.0.9-4.bb b/recipes/obsolete/openmoko-3rdparty/babiloo-efl_2.0.9-4.bb
index 29645845d9..29645845d9 100644
--- a/recipes/openmoko-3rdparty/babiloo-efl_2.0.9-4.bb
+++ b/recipes/obsolete/openmoko-3rdparty/babiloo-efl_2.0.9-4.bb
diff --git a/recipes/obsolete/pixman/pixman-0.17.6/0001-Dropped-delegation-support-for-pixman_blt.patch b/recipes/obsolete/pixman/pixman-0.17.6/0001-Dropped-delegation-support-for-pixman_blt.patch
new file mode 100644
index 0000000000..d52ee354dd
--- /dev/null
+++ b/recipes/obsolete/pixman/pixman-0.17.6/0001-Dropped-delegation-support-for-pixman_blt.patch
@@ -0,0 +1,356 @@
+From c4ce33821e2340ff95e30fce5758013287172d52 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 21 Oct 2009 23:48:43 +0000
+Subject: Dropped delegation support for 'pixman_blt'
+
+Function 'pixman_blt' is too simple and hardly needs any
+delegation. This reduces call overhead somewhat. The saving
+is minor, but every little bit helps.
+---
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index efeabeb..c8c5579 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -470,35 +470,6 @@ arm_neon_composite (pixman_implementation_t *imp,
+ }
+
+ static pixman_bool_t
+-arm_neon_blt (pixman_implementation_t *imp,
+- uint32_t * src_bits,
+- uint32_t * dst_bits,
+- int src_stride,
+- int dst_stride,
+- int src_bpp,
+- int dst_bpp,
+- int src_x,
+- int src_y,
+- int dst_x,
+- int dst_y,
+- int width,
+- int height)
+-{
+- if (!pixman_blt_neon (
+- src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+- src_x, src_y, dst_x, dst_y, width, height))
+-
+- {
+- return _pixman_implementation_blt (
+- imp->delegate,
+- src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+- src_x, src_y, dst_x, dst_y, width, height);
+- }
+-
+- return TRUE;
+-}
+-
+-static pixman_bool_t
+ arm_neon_fill (pixman_implementation_t *imp,
+ uint32_t * bits,
+ int stride,
+@@ -556,7 +527,7 @@ _pixman_implementation_create_arm_neon (void)
+ imp->combine_32[PIXMAN_OP_ADD] = neon_combine_add_u;
+
+ imp->composite = arm_neon_composite;
+- imp->blt = arm_neon_blt;
++ imp->blt = pixman_blt_neon;
+ imp->fill = arm_neon_fill;
+
+ return imp;
+diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
+index 4795246..11c5f1b 100644
+--- a/pixman/pixman-arm-simd.c
++++ b/pixman/pixman-arm-simd.c
+@@ -480,6 +480,7 @@ _pixman_implementation_create_arm_simd (void)
+ pixman_implementation_t *imp = _pixman_implementation_create (general);
+
+ imp->composite = arm_simd_composite;
++ imp->blt = general->blt;
+
+ return imp;
+ }
+diff --git a/pixman/pixman-fast-path.c b/pixman/pixman-fast-path.c
+index 75a0c1e..8da6b1f 100644
+--- a/pixman/pixman-fast-path.c
++++ b/pixman/pixman-fast-path.c
+@@ -1690,6 +1690,7 @@ _pixman_implementation_create_fast_path (void)
+ pixman_implementation_t *imp = _pixman_implementation_create (general);
+
+ imp->composite = fast_path_composite;
++ imp->blt = general->blt;
+ imp->fill = fast_path_fill;
+
+ return imp;
+diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
+index c96a3f9..c3f96f9 100644
+--- a/pixman/pixman-general.c
++++ b/pixman/pixman-general.c
+@@ -286,8 +286,7 @@ general_composite (pixman_implementation_t * imp,
+ }
+
+ static pixman_bool_t
+-general_blt (pixman_implementation_t *imp,
+- uint32_t * src_bits,
++general_blt (uint32_t * src_bits,
+ uint32_t * dst_bits,
+ int src_stride,
+ int dst_stride,
+diff --git a/pixman/pixman-implementation.c b/pixman/pixman-implementation.c
+index 6488332..0520e36 100644
+--- a/pixman/pixman-implementation.c
++++ b/pixman/pixman-implementation.c
+@@ -100,27 +100,6 @@ delegate_combine_64_ca (pixman_implementation_t * imp,
+ }
+
+ static pixman_bool_t
+-delegate_blt (pixman_implementation_t * imp,
+- uint32_t * src_bits,
+- uint32_t * dst_bits,
+- int src_stride,
+- int dst_stride,
+- int src_bpp,
+- int dst_bpp,
+- int src_x,
+- int src_y,
+- int dst_x,
+- int dst_y,
+- int width,
+- int height)
+-{
+- return _pixman_implementation_blt (
+- imp->delegate, src_bits, dst_bits, src_stride, dst_stride,
+- src_bpp, dst_bpp, src_x, src_y, dst_x, dst_y,
+- width, height);
+-}
+-
+-static pixman_bool_t
+ delegate_fill (pixman_implementation_t *imp,
+ uint32_t * bits,
+ int stride,
+@@ -153,7 +132,7 @@ _pixman_implementation_create (pixman_implementation_t *delegate)
+ /* Fill out function pointers with ones that just delegate
+ */
+ imp->composite = delegate_composite;
+- imp->blt = delegate_blt;
++ imp->blt = NULL;
+ imp->fill = delegate_fill;
+
+ for (i = 0; i < PIXMAN_N_OPERATORS; ++i)
+@@ -233,26 +212,6 @@ _pixman_implementation_composite (pixman_implementation_t * imp,
+ }
+
+ pixman_bool_t
+-_pixman_implementation_blt (pixman_implementation_t * imp,
+- uint32_t * src_bits,
+- uint32_t * dst_bits,
+- int src_stride,
+- int dst_stride,
+- int src_bpp,
+- int dst_bpp,
+- int src_x,
+- int src_y,
+- int dst_x,
+- int dst_y,
+- int width,
+- int height)
+-{
+- return (*imp->blt) (imp, src_bits, dst_bits, src_stride, dst_stride,
+- src_bpp, dst_bpp, src_x, src_y, dst_x, dst_y,
+- width, height);
+-}
+-
+-pixman_bool_t
+ _pixman_implementation_fill (pixman_implementation_t *imp,
+ uint32_t * bits,
+ int stride,
+diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
+index b1591d9..a3080b6 100644
+--- a/pixman/pixman-mmx.c
++++ b/pixman/pixman-mmx.c
+@@ -3318,35 +3318,6 @@ mmx_composite (pixman_implementation_t *imp,
+ }
+
+ static pixman_bool_t
+-mmx_blt (pixman_implementation_t *imp,
+- uint32_t * src_bits,
+- uint32_t * dst_bits,
+- int src_stride,
+- int dst_stride,
+- int src_bpp,
+- int dst_bpp,
+- int src_x,
+- int src_y,
+- int dst_x,
+- int dst_y,
+- int width,
+- int height)
+-{
+- if (!pixman_blt_mmx (
+- src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+- src_x, src_y, dst_x, dst_y, width, height))
+-
+- {
+- return _pixman_implementation_blt (
+- imp->delegate,
+- src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+- src_x, src_y, dst_x, dst_y, width, height);
+- }
+-
+- return TRUE;
+-}
+-
+-static pixman_bool_t
+ mmx_fill (pixman_implementation_t *imp,
+ uint32_t * bits,
+ int stride,
+@@ -3397,7 +3368,7 @@ _pixman_implementation_create_mmx (void)
+ imp->combine_32_ca[PIXMAN_OP_ADD] = mmx_combine_add_ca;
+
+ imp->composite = mmx_composite;
+- imp->blt = mmx_blt;
++ imp->blt = pixman_blt_mmx;
+ imp->fill = mmx_fill;
+
+ return imp;
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index c99f2a2..209cba4 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -399,8 +399,7 @@ typedef void (*pixman_composite_func_t) (pixman_implementation_t *imp,
+ int32_t dest_y,
+ int32_t width,
+ int32_t height);
+-typedef pixman_bool_t (*pixman_blt_func_t) (pixman_implementation_t *imp,
+- uint32_t * src_bits,
++typedef pixman_bool_t (*pixman_blt_func_t) (uint32_t * src_bits,
+ uint32_t * dst_bits,
+ int src_stride,
+ int dst_stride,
+diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
+index 1f8aa6e..8c2e114 100644
+--- a/pixman/pixman-sse2.c
++++ b/pixman/pixman-sse2.c
+@@ -5893,8 +5893,7 @@ sse2_composite (pixman_implementation_t *imp,
+ __attribute__((__force_align_arg_pointer__))
+ #endif
+ static pixman_bool_t
+-sse2_blt (pixman_implementation_t *imp,
+- uint32_t * src_bits,
++sse2_blt (uint32_t * src_bits,
+ uint32_t * dst_bits,
+ int src_stride,
+ int dst_stride,
+@@ -5907,18 +5906,9 @@ sse2_blt (pixman_implementation_t *imp,
+ int width,
+ int height)
+ {
+- if (!pixman_blt_sse2 (
++ return pixman_blt_sse2 (
+ src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+- src_x, src_y, dst_x, dst_y, width, height))
+-
+- {
+- return _pixman_implementation_blt (
+- imp->delegate,
+- src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+- src_x, src_y, dst_x, dst_y, width, height);
+- }
+-
+- return TRUE;
++ src_x, src_y, dst_x, dst_y, width, height);
+ }
+
+ #if defined(__GNUC__) && !defined(__x86_64__) && !defined(__amd64__)
+diff --git a/pixman/pixman-vmx.c b/pixman/pixman-vmx.c
+index 06325a7..e31bcb3 100644
+--- a/pixman/pixman-vmx.c
++++ b/pixman/pixman-vmx.c
+@@ -1615,6 +1615,8 @@ _pixman_implementation_create_vmx (void)
+
+ /* Set up function pointers */
+
++ imp->blt = fast->blt;
++
+ imp->combine_32[PIXMAN_OP_OVER] = vmx_combine_over_u;
+ imp->combine_32[PIXMAN_OP_OVER_REVERSE] = vmx_combine_over_reverse_u;
+ imp->combine_32[PIXMAN_OP_IN] = vmx_combine_in_u;
+diff --git a/pixman/pixman.c b/pixman/pixman.c
+index 0edd967..07ad767 100644
+--- a/pixman/pixman.c
++++ b/pixman/pixman.c
+@@ -57,6 +57,22 @@ static const optimized_operator_info_t optimized_operators[] =
+
+ static pixman_implementation_t *imp;
+
++static pixman_bool_t
++pixman_blt_stub (uint32_t *src_bits,
++ uint32_t *dst_bits,
++ int src_stride,
++ int dst_stride,
++ int src_bpp,
++ int dst_bpp,
++ int src_x,
++ int src_y,
++ int dst_x,
++ int dst_y,
++ int width,
++ int height);
++
++static pixman_blt_func_t pixman_blt_imp = pixman_blt_stub;
++
+ /*
+ * Check if the current operator could be optimized
+ */
+@@ -216,6 +232,31 @@ pixman_image_composite (pixman_op_t op,
+ unapply_workaround (dest, dest_bits, dest_dx, dest_dy);
+ }
+
++static pixman_bool_t
++pixman_blt_stub (uint32_t *src_bits,
++ uint32_t *dst_bits,
++ int src_stride,
++ int dst_stride,
++ int src_bpp,
++ int dst_bpp,
++ int src_x,
++ int src_y,
++ int dst_x,
++ int dst_y,
++ int width,
++ int height)
++{
++ if (!imp)
++ imp = _pixman_choose_implementation ();
++
++ pixman_blt_imp = imp->blt;
++ return pixman_blt_imp (src_bits, dst_bits, src_stride, dst_stride,
++ src_bpp, dst_bpp,
++ src_x, src_y,
++ dst_x, dst_y,
++ width, height);
++}
++
+ PIXMAN_EXPORT pixman_bool_t
+ pixman_blt (uint32_t *src_bits,
+ uint32_t *dst_bits,
+@@ -230,14 +271,11 @@ pixman_blt (uint32_t *src_bits,
+ int width,
+ int height)
+ {
+- if (!imp)
+- imp = _pixman_choose_implementation ();
+-
+- return _pixman_implementation_blt (imp, src_bits, dst_bits, src_stride, dst_stride,
+- src_bpp, dst_bpp,
+- src_x, src_y,
+- dst_x, dst_y,
+- width, height);
++ return pixman_blt_imp (src_bits, dst_bits, src_stride, dst_stride,
++ src_bpp, dst_bpp,
++ src_x, src_y,
++ dst_x, dst_y,
++ width, height);
+ }
+
+ PIXMAN_EXPORT pixman_bool_t
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/obsolete/pixman/pixman-0.17.6/0002-Test-program-for-pixman_blt-function.patch b/recipes/obsolete/pixman/pixman-0.17.6/0002-Test-program-for-pixman_blt-function.patch
new file mode 100644
index 0000000000..ba62b88447
--- /dev/null
+++ b/recipes/obsolete/pixman/pixman-0.17.6/0002-Test-program-for-pixman_blt-function.patch
@@ -0,0 +1,178 @@
+From 364406e03f9651aacb1bc684de6c00a27f9df66d Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Mon, 19 Oct 2009 20:32:55 +0300
+Subject: [PATCH 2/6] Test program for pixman_blt function
+
+It can do some basic correctness tests and also check whether
+overlapping of source and destination images is supported.
+---
+ test/Makefile.am | 2 +
+ test/overlapped-blt-test.c | 136 ++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 138 insertions(+), 0 deletions(-)
+ create mode 100644 test/overlapped-blt-test.c
+
+diff --git a/test/Makefile.am b/test/Makefile.am
+index 89d32e9..40c305f 100644
+--- a/test/Makefile.am
++++ b/test/Makefile.am
+@@ -6,6 +6,7 @@
+ fetch-test \
+ oob-test \
+ window-test \
++ overlapped-blt-test \
+ trap-crasher \
+ alphamap \
+ blitters-test \
+@@ -18,6 +19,7 @@
+ trap_crasher_LDADD = $(TEST_LDADD)
+ oob_test_LDADD = $(TEST_LDADD)
+ window_test_LDADD = $(TEST_LDADD)
++overlapped_blt_test_LDADD = $(TEST_LDADD)
+
+ blitters_test_LDADD = $(TEST_LDADD)
+ blitters_test_SOURCES = blitters-test.c utils.c utils.h
+diff --git a/test/overlapped-blt-test.c b/test/overlapped-blt-test.c
+new file mode 100644
+index 0000000..95fbc54
+--- /dev/null
++++ b/test/overlapped-blt-test.c
+@@ -0,0 +1,136 @@
++/*
++ * A small test program which can check whether pixman_blt function
++ * can support overlapping of source and destination images.
++ * Efficient blit with overlapping is useful for scrolling.
++ */
++
++#include <stdint.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include "pixman.h"
++
++/* reference implementation (slow) */
++static void
++trivial_copy8_2d (
++ uint8_t *dst, int dst_stride,
++ uint8_t *src, int src_stride,
++ int dx, int dy, int sx, int sy,
++ int w, int h)
++{
++ int x, y;
++ uint8_t *tmp = malloc (src_stride * (sy + h));
++ memcpy (tmp, src, src_stride * (sy + h));
++ for (y = 0; y < h; y++)
++ {
++ for (x = 0; x < w; x++)
++ {
++ *(dst + (dy + y) * dst_stride + dx + x) =
++ *(tmp + (sy + y) * src_stride + sx + x);
++ }
++ }
++ free (tmp);
++}
++
++static void
++trivial_copy_2d (
++ uint8_t *dst, int dst_stride,
++ uint8_t *src, int src_stride,
++ int dx, int dy, int sx, int sy,
++ int w, int h, int bpp)
++{
++ trivial_copy8_2d (dst, dst_stride, src, src_stride,
++ dx * (bpp / 8), dy, sx * (bpp / 8), sy, w * (bpp / 8), h);
++}
++
++/* now the test itself */
++
++#define ST_UNSUPPORTED 1
++#define ST_NORMAL_BUG 2
++#define ST_OVERLAPPED_BUG 4
++
++#define MAX_SIZE_X 64
++#define MAX_SIZE_Y 64
++
++static void print_result(int bpp, int flags)
++{
++ printf("bpp=%d, supported=%d, normal_ok=%d, overlapped_ok=%d\n",
++ bpp,
++ !(flags & ST_UNSUPPORTED),
++ !(flags & ST_NORMAL_BUG),
++ !(flags & ST_OVERLAPPED_BUG));
++}
++
++int main()
++{
++ int c = 100000, r;
++ int bpp_st[33] = {0};
++ srand(0);
++ while (c-- > 0)
++ {
++ uint8_t *src1, *src2, *src3;
++ int i;
++ int sizex = rand() % MAX_SIZE_X + 1;
++ int sizey = rand() % MAX_SIZE_Y + 1;
++ int sx = rand() % sizex;
++ int sy = rand() % sizey;
++ int dx = rand() % sizex;
++ int dy = rand() % sizey;
++ int w = rand() % sizex;
++ int h = rand() % sizex;
++ int bpp = 8 * (1 << (rand() % 3));
++ int stride_delta = rand() % 8;
++ int bufsize;
++ if ((sizex + stride_delta) % 4)
++ stride_delta += 4 - ((sizex + stride_delta) % 4);
++ bufsize = (sizex + stride_delta) * sizey * bpp / 8;
++ src1 = malloc (bufsize);
++ src2 = malloc (bufsize);
++ src3 = malloc (bufsize);
++ for (i = 0; i < bufsize; i++)
++ src1[i] = rand();
++ memcpy (src2, src1, bufsize);
++ memcpy (src3, src1, bufsize);
++ if (sx + w > sizex)
++ w = sizex - sx;
++ if (dx + w > sizex)
++ w = sizex - dx;
++ if (sy + h > sizey)
++ h = sizey - sy;
++ if (dy + h > sizey)
++ h = sizey - dy;
++ /* get reference result */
++ trivial_copy_2d (src1, (sizex + stride_delta) * bpp / 8,
++ src1, (sizex + stride_delta) * bpp / 8,
++ dx, dy, sx, sy, w, h, bpp);
++ /* check nonoverlapped pixman result */
++ r = pixman_blt ((uint32_t *)src3, (uint32_t *)src2,
++ (sizex + stride_delta) * bpp / 8 / 4,
++ (sizex + stride_delta) * bpp / 8 / 4,
++ bpp, bpp, sx, sy, dx, dy, w, h);
++ if (!r)
++ bpp_st[bpp] |= ST_UNSUPPORTED;
++ if (memcmp (src1, src2, bufsize) != 0)
++ bpp_st[bpp] |= ST_NORMAL_BUG;
++ /* check overlapped pixman result */
++ r = pixman_blt ((uint32_t *)src3, (uint32_t *)src3,
++ (sizex + stride_delta) * bpp / 8 / 4,
++ (sizex + stride_delta) * bpp / 8 / 4,
++ bpp, bpp, sx, sy, dx, dy, w, h);
++ if (!r)
++ bpp_st[bpp] |= ST_UNSUPPORTED;
++ if (memcmp (src1, src3, bufsize) != 0)
++ bpp_st[bpp] |= ST_OVERLAPPED_BUG;
++ /* free buffers */
++ free (src1);
++ free (src2);
++ free (src3);
++ }
++
++ /* report results */
++ print_result (8, bpp_st[8]);
++ print_result (16, bpp_st[16]);
++ print_result (32, bpp_st[32]);
++
++ return 0;
++}
+--
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/obsolete/pixman/pixman-0.17.6/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
index 25ce7ee3b8..25ce7ee3b8 100644
--- a/recipes/xorg-lib/pixman/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
+++ b/recipes/obsolete/pixman/pixman-0.17.6/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
diff --git a/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/obsolete/pixman/pixman-0.17.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
index 74c7b45bc4..74c7b45bc4 100644
--- a/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
+++ b/recipes/obsolete/pixman/pixman-0.17.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
diff --git a/recipes/xorg-lib/pixman/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/obsolete/pixman/pixman-0.17.6/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
index 3704fbf1cf..3704fbf1cf 100644
--- a/recipes/xorg-lib/pixman/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
+++ b/recipes/obsolete/pixman/pixman-0.17.6/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
diff --git a/recipes/obsolete/pixman/pixman-0.17.6/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/obsolete/pixman/pixman-0.17.6/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
new file mode 100644
index 0000000000..7c22483a2e
--- /dev/null
+++ b/recipes/obsolete/pixman/pixman-0.17.6/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
@@ -0,0 +1,94 @@
+From 86870ff530b5e435034bd80207e5758466d96cff Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 18 Nov 2009 06:08:48 +0200
+Subject: [PATCH 6/6] Support of overlapping src/dst for pixman_blt_neon
+
+---
+ pixman/pixman-arm-neon.c | 63 ++++++++++++++++++++++++++++++++++++++-------
+ 1 files changed, 53 insertions(+), 10 deletions(-)
+
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 495fda4..c632ff5 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -357,26 +357,66 @@
+ int width,
+ int height)
+ {
+- if (src_bpp != dst_bpp)
++ uint8_t * src_bytes;
++ uint8_t * dst_bytes;
++ int bpp;
++
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
++ {
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
++ }
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
++ {
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using NEON */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
++ }
++
+ switch (src_bpp)
+ {
+ case 16:
+ pixman_composite_src_0565_0565_asm_neon (
+- width, height,
+- (uint16_t *)(((char *) dst_bits) +
+- dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
+- (uint16_t *)(((char *) src_bits) +
+- src_y * src_stride * 4 + src_x * 2), src_stride * 2);
++ width >> 1,
++ height,
++ (uint16_t *) dst_bytes,
++ dst_stride >> 1,
++ (uint16_t *) src_bytes,
++ src_stride >> 1);
+ return TRUE;
+ case 32:
+ pixman_composite_src_8888_8888_asm_neon (
+- width, height,
+- (uint32_t *)(((char *) dst_bits) +
+- dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
+- (uint32_t *)(((char *) src_bits) +
+- src_y * src_stride * 4 + src_x * 4), src_stride);
++ width >> 2,
++ height,
++ (uint32_t *) dst_bytes,
++ dst_stride >> 2,
++ (uint32_t *) src_bytes,
++ src_stride >> 2);
+ return TRUE;
+ default:
+ return FALSE;
+--
+1.6.2.4
+
diff --git a/recipes/obsolete/pixman/pixman_0.17.6.bb b/recipes/obsolete/pixman/pixman_0.17.6.bb
new file mode 100644
index 0000000000..01febb81dd
--- /dev/null
+++ b/recipes/obsolete/pixman/pixman_0.17.6.bb
@@ -0,0 +1,32 @@
+SECTION = "libs"
+PRIORITY = "optional"
+DESCRIPTION = "Low-level pixel manipulation library."
+LICENSE = "X11"
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_shr = "1"
+
+PR = "r1"
+
+BBCLASSEXTEND="native"
+
+SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz;name=archive \
+ file://0001-Dropped-delegation-support-for-pixman_blt.patch;patch=1 \
+ file://0002-Test-program-for-pixman_blt-function.patch;patch=1 \
+ file://0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
+ file://0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
+ file://0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
+ file://0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
+ "
+SRC_URI[archive.md5sum] = "32cbdf7a1ac1c275ee56230e26701456"
+SRC_URI[archive.sha256sum] = "14ea5a185d8ea6ce3203ff008279e3f3433b6a5bad5853b42a82978527e618cb"
+
+inherit autotools_stage
+
+NEON = " --disable-arm-neon "
+NEON_armv7a = ""
+
+EXTRA_OECONF = "${NEON} --disable-gtk"
+
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
+
diff --git a/recipes/obsolete/python/python-epsilon_svn.bb b/recipes/obsolete/python/python-epsilon_svn.bb
new file mode 100644
index 0000000000..e70d4ec602
--- /dev/null
+++ b/recipes/obsolete/python/python-epsilon_svn.bb
@@ -0,0 +1,6 @@
+require python-efl.inc
+DEPENDS += "epsilon python-ecore"
+RDEPENDS += "python-ecore"
+
+SRCREV = "${EFL_SRCREV}"
+SRC_URI = "svn://svn.enlightenment.org/svn/e/OLD/BINDINGS/python;module=${PN};proto=http"
diff --git a/recipes/obsolete/python/python-etk_svn.bb b/recipes/obsolete/python/python-etk_svn.bb
new file mode 100644
index 0000000000..bc0ad9846e
--- /dev/null
+++ b/recipes/obsolete/python/python-etk_svn.bb
@@ -0,0 +1,13 @@
+require python-efl.inc
+DEPENDS += "etk python-evas python-ecore"
+RDEPENDS += "python-evas python-ecore python-edje python-numeric python-math etk-themes"
+PV = "0.1.1+svnr${SRCPV}"
+PR = "ml1"
+
+SRCREV = "${EFL_SRCREV}"
+
+SRC_URI = "svn://svn.enlightenment.org/svn/e/OLD/BINDINGS/python;module=${PN};proto=http"
+
+do_stage() {
+ distutils_stage_all
+}
diff --git a/recipes/obsolete/shr/etk-theme-neo_git.bb b/recipes/obsolete/shr/etk-theme-neo_git.bb
new file mode 100644
index 0000000000..ab028b1228
--- /dev/null
+++ b/recipes/obsolete/shr/etk-theme-neo_git.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "nEo etk theme - a very fast, high contrast etk theme"
+HOMEPAGE = "http://jmccloud.jm.funpic.de"
+AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
+RSUGGESTS = "elementary-theme-neo e-wm-theme-illume-neo gtk-theme-neo gpe-theme-neo icon-theme-neo"
+LICENSE = "unknown"
+
+SRCREV = "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
+PV = "0.2-${EFL_SRCREV}+gitr${SRCREV}"
+PR = "r4"
+
+SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
+
+require etk-theme.inc
diff --git a/recipes/obsolete/shr/etk-theme-shr_git.bb b/recipes/obsolete/shr/etk-theme-shr_git.bb
new file mode 100644
index 0000000000..764955e48f
--- /dev/null
+++ b/recipes/obsolete/shr/etk-theme-shr_git.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "etk SHR theme"
+LICENSE = "MIT BSD"
+PV = "1.1.1-${EFL_SRCREV}+gitr${SRCREV}"
+PR = "r2"
+
+SRCREV = "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
+SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
+
+require etk-theme.inc
diff --git a/recipes/shr/etk-theme.inc b/recipes/obsolete/shr/etk-theme.inc
index 6e8b33db27..6e8b33db27 100644
--- a/recipes/shr/etk-theme.inc
+++ b/recipes/obsolete/shr/etk-theme.inc
diff --git a/recipes/obsolete/shr/libframeworkd-phonegui-efl-theme-neo_git.bb b/recipes/obsolete/shr/libframeworkd-phonegui-efl-theme-neo_git.bb
new file mode 100644
index 0000000000..15dcc2f9ef
--- /dev/null
+++ b/recipes/obsolete/shr/libframeworkd-phonegui-efl-theme-neo_git.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "nEo libframeworkd-phonegui-efl - a very fast, high contrast etk theme"
+HOMEPAGE = "http://jmccloud.jm.funpic.de"
+AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
+RDEPENDS = "libframeworkd-phonegui-efl"
+RSUGGESTS = "elementary-theme-neo e-wm-theme-illume-neo gtk-theme-neo etk-theme-neo gpe-theme-neo icon-theme-neo"
+LICENSE = "unknown"
+
+SRCREV = "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
+PV = "0.2-${EFL_SRCREV}+gitr${SRCREV}"
+PR = "r3"
+
+require libframeworkd-phonegui-efl-theme.inc
+
+SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
+
+S = "${WORKDIR}/git/libframeworkd-phonegui-efl/theme-neo"
+
+do_compile() {
+ for edc in call contacts dialer dialog elm-resizing-label incoming-message keypad messages sim-auth ussd ; do
+ ${STAGING_BINDIR_NATIVE}/edje_cc -id ${S}/${edc}/. -fd ${S}/${edc}. ${S}/${edc}/${edc}.edc -o ${S}/${edc}.edj
+ done
+}
+
+do_install() {
+ install -d ${D}${datadir}/libframeworkd-phonegui-efl.${PN}/
+ install -m 0644 ${S}/*.edj ${D}${datadir}/libframeworkd-phonegui-efl.${PN}/
+}
diff --git a/recipes/shr/libframeworkd-phonegui-efl-theme.inc b/recipes/obsolete/shr/libframeworkd-phonegui-efl-theme.inc
index eab118f322..eab118f322 100644
--- a/recipes/shr/libframeworkd-phonegui-efl-theme.inc
+++ b/recipes/obsolete/shr/libframeworkd-phonegui-efl-theme.inc
diff --git a/recipes/obsolete/shr/libframeworkd-phonegui-efl2_git.bb b/recipes/obsolete/shr/libframeworkd-phonegui-efl2_git.bb
new file mode 100644
index 0000000000..9d4d74e90f
--- /dev/null
+++ b/recipes/obsolete/shr/libframeworkd-phonegui-efl2_git.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "frameworkd EFL phonegui 2"
+SECTION = "e/apps"
+DEPENDS += " dbus-glib libframeworkd-glib libframeworkd-phonegui etk evas ecore edje edje-native elementary"
+PV = "0.0.1+gitr${SRCREV}"
+PR = "r2"
+
+SRCREV = "917226025c67b75def91e98ea923c2e550474a5b"
+SRC_URI = "git://shr.bearstech.com/repo/libframeworkd-phonegui-efl2.git;protocol=http;branch=master"
+S = "${WORKDIR}/git"
+
+inherit pkgconfig autotools autotools_stage
+
+EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
+
+
+do_configure_prepend() {
+ autopoint --force
+}
+
diff --git a/recipes/obsolete/shr/libframeworkd-phonegui-efl_git.bb b/recipes/obsolete/shr/libframeworkd-phonegui-efl_git.bb
new file mode 100644
index 0000000000..34f96923f5
--- /dev/null
+++ b/recipes/obsolete/shr/libframeworkd-phonegui-efl_git.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "frameworkd EFL phonegui"
+HOMEPAGE = "http://shr-project.org/"
+LICENSE = "GPL"
+SECTION = "e/apps"
+DEPENDS += " dbus-glib libframeworkd-glib libframeworkd-phonegui etk evas ecore edje edje-native elementary"
+PV = "0.0.3+gitr${SRCREV}"
+PR = "r36"
+
+require libframeworkd-phonegui-efl-theme.inc
+
+inherit pkgconfig autotools autotools_stage
+
+SRCREV = "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
+SRC_URI = "git://git.shr-project.org/repo/shr.git;protocol=http;branch=master"
+S = "${WORKDIR}/git/${PN}"
+
+EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
+
+do_configure_prepend() {
+ sed -i "s|^filesdir = \$(datadir)/libframeworkd-phonegui-efl/|filesdir = \$(datadir)/libframeworkd-phonegui-efl.${PN}|g" data/Makefile.am
+ autopoint --force
+}
+
diff --git a/recipes/obsolete/shr/libframeworkd-phonegui_git.bb b/recipes/obsolete/shr/libframeworkd-phonegui_git.bb
new file mode 100644
index 0000000000..b11f0394d3
--- /dev/null
+++ b/recipes/obsolete/shr/libframeworkd-phonegui_git.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Frameworkd phonegui library"
+HOMEPAGE = "http://shr-project.org/"
+LICENSE = "GPL"
+SECTION = "libs"
+PV = "0.0.2+gitr${SRCREV}"
+PR = "r10"
+
+DEPENDS="glib-2.0 dbus-glib libframeworkd-glib libphone-utils"
+
+inherit pkgconfig autotools autotools_stage
+
+SRCREV = "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
+SRC_URI = "git://git.shr-project.org/repo/shr.git;protocol=http;branch=master"
+S = "${WORKDIR}/git/${PN}"
+
+CONFFILES_${PN} = "${sysconfdir}/frameworkd-phonegui.conf"
diff --git a/recipes/obsolete/shr/shr-contacts_git.bb b/recipes/obsolete/shr/shr-contacts_git.bb
new file mode 100644
index 0000000000..6a2283117b
--- /dev/null
+++ b/recipes/obsolete/shr/shr-contacts_git.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "The SHR Contacts application"
+HOMEPAGE = "http://shr-project.org/"
+LICENSE = "GPL"
+SECTION = "x11/applications"
+DEPENDS += "dbus-glib libframeworkd-glib libframeworkd-phonegui"
+PV = "0.0.2+gitr${SRCREV}"
+PR = "r6"
+
+inherit pkgconfig autotools
+
+SRCREV = "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
+SRC_URI = "git://git.shr-project.org/repo/shr.git;protocol=http;branch=master"
+S = "${WORKDIR}/git/${PN}"
+
diff --git a/recipes/obsolete/shr/shr-dialer_git.bb b/recipes/obsolete/shr/shr-dialer_git.bb
new file mode 100644
index 0000000000..816f9d856c
--- /dev/null
+++ b/recipes/obsolete/shr/shr-dialer_git.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "The SHR Dialer"
+HOMEPAGE = "http://shr-project.org/"
+LICENSE = "GPL"
+SECTION = "x11/applications"
+DEPENDS += "dbus-glib libframeworkd-glib libframeworkd-phonegui"
+PV = "0.0.2+gitr${SRCREV}"
+PR = "r9"
+
+inherit pkgconfig autotools
+
+SRCREV = "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
+SRC_URI = "git://git.shr-project.org/repo/shr.git;protocol=http;branch=master"
+S = "${WORKDIR}/git/${PN}"
+
diff --git a/recipes/obsolete/shr/shr-messages_git.bb b/recipes/obsolete/shr/shr-messages_git.bb
new file mode 100644
index 0000000000..cb8fc810d3
--- /dev/null
+++ b/recipes/obsolete/shr/shr-messages_git.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "The SHR Messages"
+HOMEPAGE = "http://shr-project.org/"
+LICENSE = "GPL"
+SECTION = "x11/applications"
+DEPENDS += "dbus-glib libframeworkd-glib libframeworkd-phonegui"
+PV = "0.0.2+gitr${SRCREV}"
+PR = "r8"
+
+inherit pkgconfig autotools
+
+SRCREV = "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
+SRC_URI = "git://git.shr-project.org/repo/shr.git;protocol=http;branch=master"
+S = "${WORKDIR}/git/${PN}"
+
diff --git a/recipes/xorg-xserver/xserver-xorg-1.6.1/drmfix.patch b/recipes/obsolete/xorg-xserver/xserver-xorg-1.6.1/drmfix.patch
index 8ebda98975..8ebda98975 100644
--- a/recipes/xorg-xserver/xserver-xorg-1.6.1/drmfix.patch
+++ b/recipes/obsolete/xorg-xserver/xserver-xorg-1.6.1/drmfix.patch
diff --git a/recipes/xorg-xserver/xserver-xorg-1.6.1/hack-assume-pixman-supports-overlapped-blt.patch b/recipes/obsolete/xorg-xserver/xserver-xorg-1.6.1/hack-assume-pixman-supports-overlapped-blt.patch
index a947582f15..a947582f15 100644
--- a/recipes/xorg-xserver/xserver-xorg-1.6.1/hack-assume-pixman-supports-overlapped-blt.patch
+++ b/recipes/obsolete/xorg-xserver/xserver-xorg-1.6.1/hack-assume-pixman-supports-overlapped-blt.patch
diff --git a/recipes/xorg-xserver/xserver-xorg-1.7.3/hack-assume-pixman-supports-overlapped-blt.patch b/recipes/obsolete/xorg-xserver/xserver-xorg-1.7.3/hack-assume-pixman-supports-overlapped-blt.patch
index a947582f15..a947582f15 100644
--- a/recipes/xorg-xserver/xserver-xorg-1.7.3/hack-assume-pixman-supports-overlapped-blt.patch
+++ b/recipes/obsolete/xorg-xserver/xserver-xorg-1.7.3/hack-assume-pixman-supports-overlapped-blt.patch
diff --git a/recipes/xorg-xserver/xserver-xorg_1.6.1.bb b/recipes/obsolete/xorg-xserver/xserver-xorg_1.6.1.bb
index ff8e1cfa03..ff8e1cfa03 100644
--- a/recipes/xorg-xserver/xserver-xorg_1.6.1.bb
+++ b/recipes/obsolete/xorg-xserver/xserver-xorg_1.6.1.bb
diff --git a/recipes/obsolete/xorg-xserver/xserver-xorg_1.7.2.bb b/recipes/obsolete/xorg-xserver/xserver-xorg_1.7.2.bb
new file mode 100644
index 0000000000..08908b784f
--- /dev/null
+++ b/recipes/obsolete/xorg-xserver/xserver-xorg_1.7.2.bb
@@ -0,0 +1,19 @@
+require xorg-xserver-common.inc
+
+DESCRIPTION = "the X.Org X server"
+DEPENDS += "pixman libpciaccess openssl dri2proto glproto xorg-minimal-fonts"
+PE = "2"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://sysroot_fix.patch;patch=1 \
+ file://dolt-fix-1.7.0.patch;patch=1 \
+ file://randr-support-1.7.0.patch;patch=1 \
+ "
+do_install_prepend() {
+ mkdir -p ${D}/${libdir}/X11/fonts
+}
+
+EXTRA_OECONF += "--disable-xephyr --disable-config-hal --disable-xinerama --disable-kdrive --disable-xephyr --disable-xsdl --disable-xfake --disable-xfbdev --disable-dmx"
+EXTRA_OECONF += " --disable-glx-tls --enable-dri2 --disable-unit-tests "
+
+export LDFLAGS += " -ldl "
diff --git a/recipes/obsolete/xorg-xserver/xserver-xorg_1.7.3.bb b/recipes/obsolete/xorg-xserver/xserver-xorg_1.7.3.bb
new file mode 100644
index 0000000000..33aafb5fe3
--- /dev/null
+++ b/recipes/obsolete/xorg-xserver/xserver-xorg_1.7.3.bb
@@ -0,0 +1,27 @@
+require xorg-xserver-common.inc
+
+DESCRIPTION = "the X.Org X server"
+DEPENDS += "pixman libpciaccess openssl dri2proto glproto xorg-minimal-fonts"
+PE = "2"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://sysroot_fix.patch;patch=1 \
+ file://dolt-fix-1.7.0.patch;patch=1 \
+ file://randr-support-1.7.0.patch;patch=1 \
+ file://hack-fbdev-ignore-return-mode.patch;patch=1 \
+ "
+
+SRC_URI_append_angstrom = " file://hack-assume-pixman-supports-overlapped-blt.patch;patch=1"
+SRC_URI_append_shr = " file://hack-assume-pixman-supports-overlapped-blt.patch;patch=1"
+
+do_install_prepend() {
+ mkdir -p ${D}/${libdir}/X11/fonts
+}
+
+# The NVidia driver requires Xinerama support in the X server. Ion uses it.
+XINERAMA = "${@['--disable-xinerama','--enable-xinerama'][bb.data.getVar('MACHINE',d) in ['ion']]}"
+
+EXTRA_OECONF += " --enable-config-hal ${XINERAMA} --disable-kdrive --disable-xephyr --disable-xsdl --disable-xfake --disable-xfbdev --disable-dmx"
+EXTRA_OECONF += " --disable-glx-tls --enable-dri2 --disable-unit-tests "
+
+export LDFLAGS += " -ldl "
diff --git a/recipes/ogre/ogre-egl_svn.bb b/recipes/ogre/ogre-egl_svn.bb
index 82c7862013..abebf9d159 100644
--- a/recipes/ogre/ogre-egl_svn.bb
+++ b/recipes/ogre/ogre-egl_svn.bb
@@ -11,7 +11,7 @@ SRC_URI = "svn://ogre.svn.sourceforge.net/svnroot/ogre;module=trunk;proto=https
file://ogre-egl-update.diff;patch=1;pnum=0 \
"
-inherit autotools_stage
+inherit autotools_stage siteinfo
# This is the EGL version
EXTRA_OECONF = " --with-gui=gtk --disable-freetypetest --enable-ogre-demos --with-allocator=std --enable-threading=no --disable-cg --enable-gles "
diff --git a/recipes/omgps/omgps_svn.bb b/recipes/omgps/omgps_svn.bb
index d73ade1934..0745c18fbc 100644
--- a/recipes/omgps/omgps_svn.bb
+++ b/recipes/omgps/omgps_svn.bb
@@ -4,6 +4,7 @@ SECTION = "openmoko/applications"
LICENSE = "GPLv2"
DEPENDS = "gtk+ python-pygobject dbus-glib"
#PACKAGES = "${PN}-dbg ${PN}"
+SRCREV = "109"
PV = "0.1+svnr${SRCPV}"
PR = "r0"
S = "${WORKDIR}/${PN}"
diff --git a/recipes/omniorb/files/omniorb_4.1.4.patch b/recipes/omniorb/files/omniorb_4.1.4.patch
new file mode 100644
index 0000000000..352119873e
--- /dev/null
+++ b/recipes/omniorb/files/omniorb_4.1.4.patch
@@ -0,0 +1,13 @@
+diff -aur --recursive omniorb_native_org/configure.ac omniorb_native_cop/configure.ac
+--- omniorb_native_org/configure.ac 2010-02-19 14:00:06.905777529 +0100
++++ omniorb_native_cop/configure.ac 2010-02-19 13:38:20.000000000 +0100
+@@ -10,6 +10,7 @@
+
+ AC_CONFIG_HEADERS(include/omniORB4/acconfig.h)
+
++m4_pattern_allow(PKG_CONFIG_LIBDIR)
+ dnl ** CFLAGS / CXXFLAGS
+
+ if test "${CFLAGS+set}" != set; then
+ #############################################################################
+ # \ No newline at end of file
diff --git a/recipes/omniorb/omniorb-native_4.1.4.bb b/recipes/omniorb/omniorb-native_4.1.4.bb
new file mode 100644
index 0000000000..c06a74a676
--- /dev/null
+++ b/recipes/omniorb/omniorb-native_4.1.4.bb
@@ -0,0 +1,23 @@
+SECTION = "devel"
+DEPENDS += "python-native"
+PR = "r0"
+
+SRC_URI = "http://downloads.sourceforge.net/omniorb/omniORB-4.1.4.tar.gz;name=omniORB414targz \
+ file://omniorb_4.1.4.patch;patch=1 \
+"
+
+SRC_URI[omniORB414targz.md5sum] = "1f6070ff9b6339876976d61981eeaa6a"
+SRC_URI[omniORB414targz.sha256sum] = "84fb9790c25d6e46248c9773747e393b429573190da2150850d4a49debda4e8e"
+
+S = "${WORKDIR}/omniORB-${PV}"
+
+inherit native autotools
+
+do_compile () {
+ oe_runmake
+}
+# Ugly hack so libtool does not find native libs when building cross packages
+# We really only build this package for omniidl anyway
+do_stage_append() {
+ rm -f ${STAGING_LIBDIR_NATIVE}/libomni*
+}
diff --git a/recipes/omniorb/omniorb_4.1.4.bb b/recipes/omniorb/omniorb_4.1.4.bb
new file mode 100644
index 0000000000..3d0c43ce17
--- /dev/null
+++ b/recipes/omniorb/omniorb_4.1.4.bb
@@ -0,0 +1,45 @@
+DESCRIPTION = "OmniORB High Performance ORB"
+SECTION = "devel"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+DEPENDS = "omniorb-native"
+PR = "r0"
+
+SRC_URI = "http://downloads.sourceforge.net/omniorb/omniORB-4.1.4.tar.gz;name=omniORB414targz \
+file://omniorb_4.1.4.patch;patch=1 \
+file://omniORB.cfg \
+file://omniORB-cross.patch;patch=1 \
+file://omniORB_embedded_appl.patch;patch=1 \
+file://rm_LongDouble.patch;patch=1 \
+"
+
+SRC_URI[omniORB414targz.md5sum] = "1f6070ff9b6339876976d61981eeaa6a"
+SRC_URI[omniORB414targz.sha256sum] = "84fb9790c25d6e46248c9773747e393b429573190da2150850d4a49debda4e8e"
+
+S = "${WORKDIR}/omniORB-${PV}"
+
+FILES_${PN}-dev += "${datadir}/idl/omniORB/* ${datadir}/idl/omniORB/cos/*
+TARGET_CC_ARCH += ${LDFLAGS}
+
+inherit autotools pkgconfig
+
+do_compile () {
+ export EmbeddedSystem=1
+ export TOOLBINDIR=${STAGING_BINDIR_NATIVE}
+ oe_runmake
+
+}
+do_install () {
+ export EmbeddedSystem=1
+ make DESTDIR=${D} install
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/omniORB.cfg ${D}${sysconfdir}
+ install -d ${D}${localstatedir}/omninames
+
+ #only executable libraries are stripped by the stripper
+ chmod +x ${WORKDIR}/image/usr/lib/lib*
+}
+do_stage () {
+ export EmbeddedSystem=1
+ autotools_stage_all
+}
diff --git a/recipes/omoney/omoney_svn.bb b/recipes/omoney/omoney_svn.bb
index f566c92ada..9c3a3c6826 100644
--- a/recipes/omoney/omoney_svn.bb
+++ b/recipes/omoney/omoney_svn.bb
@@ -3,6 +3,7 @@ HOMEPAGE = "http://omoney.googlecode.com"
AUTHOR = "Bumbl"
LICENSE = "GPLv2"
SECTION = "openmoko/money"
+SRCREV = "29"
PV = "milestone1+svnr${SRCPV}"
PR = "r0"
SRC_URI = "svn://omoney.googlecode.com/svn/trunk;module=.;proto=http;rev=29"
diff --git a/recipes/omview/omview_svn.bb b/recipes/omview/omview_svn.bb
index 8ce0a78160..81578205e3 100644
--- a/recipes/omview/omview_svn.bb
+++ b/recipes/omview/omview_svn.bb
@@ -3,6 +3,7 @@ SECTION = "x11/graphics"
PKG_TAGS_${PN} = "group::communication"
DEPENDS += " evas ewl epsilon"
RDEPENDS += " epsilon-thumbd"
+SRCREV = "34"
PV = "0.0.1+svnr${SRCPV}"
PR = "r2"
diff --git a/recipes/openldap/openldap-2.4.17/openldap-m4-pthread.patch b/recipes/openldap/openldap-2.4.21/openldap-m4-pthread.patch
index b669b7254d..b669b7254d 100644
--- a/recipes/openldap/openldap-2.4.17/openldap-m4-pthread.patch
+++ b/recipes/openldap/openldap-2.4.21/openldap-m4-pthread.patch
diff --git a/recipes/openldap/openldap_2.4.17.bb b/recipes/openldap/openldap_2.4.17.bb
deleted file mode 100644
index 2ca40eacb9..0000000000
--- a/recipes/openldap/openldap_2.4.17.bb
+++ /dev/null
@@ -1,290 +0,0 @@
-# OpenLDAP, a license free (see http://www.OpenLDAP.org/license.html)
-#
-DESCRIPTION = "OpenLDAP Software is an open source implementation of the Lightweight Directory Access Protocol."
-HOMEPAGE = "http://www.OpenLDAP.org/license.html"
-PRIORITY = "optional"
-# The OpenLDAP Public License - see the HOMEPAGE - defines
-# the license. www.openldap.org claims this is Open Source
-# (see http://www.openldap.org), the license appears to be
-# basically BSD. opensource.org does not record this license
-# at present (so it is apparently not OSI certified).
-LICENSE = "OpenLDAP"
-SECTION = "libs"
-
-LDAP_VER = "${@'.'.join(bb.data.getVar('PV',d,1).split('.')[0:2])}"
-
-SRC_URI = "ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/${P}.tgz"
-SRC_URI += "file://openldap-m4-pthread.patch;patch=1"
-SRC_URI += "file://initscript"
-# The build tries to run a host executable, this fails. The patch
-# causes the executable and its data to be installed instead of
-# the output - ucgendat must be run after the ipkg install!
-#SRC_URI += "file://ucgendat.patch;patch=1"
-# The original top.mk used INSTALL, not INSTALL_STRIP_PROGRAM when
-# installing .so and executables, this fails in cross compilation
-# environments
-SRC_URI += "file://install-strip.patch;patch=1"
-
-inherit autotools
-
-# OPTIONS
-# The following two variables can be set in a distro or local.conf
-# to switch features on. Each feature foo defines OPENLDAP_OPTION_foo
-# and OPENLDAP_DEPENDS_foo in this file - to include feature foo add
-# the two variables into the setting of the options below (please use
-# += because that means this can be done in *both* distro.conf and
-# local.conf!
-OPENLDAP_OPTIONS ?= ""
-OPENLDAP_DEPENDS ?= ""
-
-# CV SETTINGS
-# Required to work round AC_FUNC_MEMCMP which gets the wrong answer
-# when cross compiling (should be in site?)
-EXTRA_OECONF += "ac_cv_func_memcmp_working=yes"
-
-# CONFIG DEFINITIONS
-# The following is necessary because it cannot be determined for a
-# cross compile automagically. Select should yield fine on all OE
-# systems...
-EXTRA_OECONF += "--with-yielding-select=yes"
-# Shared libraries are nice...
-EXTRA_OECONF += "--enable-dynamic"
-#
-# Disable TLS to remove the need for openssl/libcrypto
-OPENLDAP_OPTION_tls ?= "--with-tls"
-# set the following to "openssl" to build tls support
-OPENLDAP_DEPENDS_tls ?= "gnutls"
-EXTRA_OECONF += "${OPENLDAP_OPTION_tls}"
-DEPENDS += "${OPENLDAP_DEPENDS_tls}"
-#
-# Disable Cyrus SASL, which may or may not be working at present...
-OPENLDAP_OPTION_sasl ?= "--without-cyrus-sasl"
-# set the following to "cyrus-sasl" to build SASL support
-OPENLDAP_DEPENDS_sasl ?= ""
-EXTRA_OECONF += "${OPENLDAP_OPTION_sasl}"
-DEPENDS += "${OPENLDAP_DEPENDS_sasl}"
-
-# SLAPD options
-#
-# UNIX crypt(3) passwd support:
-EXTRA_OECONF += "--enable-crypt"
-#
-# Enable dynamic module loading. If this is *disabled* the
-# dependency on libtool is removed (to disable set the following
-# to variables to "" in a .conf file).
-OPENLDAP_OPTION_modules += "lt_cv_dlopen_self=yes --enable-modules"
-OPENLDAP_DEPENDS_modules += "libtool"
-EXTRA_OECONF += " ${OPENLDAP_OPTION_modules}"
-DEPENDS += "${OPENLDAP_DEPENDS_modules}"
-
-# SLAPD BACKEND
-#
-# The backend must be set by the configuration. This controls the
-# required database, the default database, bdb, is turned off but
-# can be turned back on again and it *is* below! The monitor backend
-# is also disabled. If you try to change the backends but fail to
-# enable a single one the build will fail in an obvious way.
-#
-EXTRA_OECONF += "--disable-bdb --disable-hdb --disable-monitor"
-#
-# Backends="bdb dnssrv hdb ldap ldbm meta monitor null passwd perl shell sql"
-#
-# Note that multiple backends can be built. The ldbm backend requires a
-# build-time choice of database API. The bdb backend forces this to be
-# DB4. To use the gdbm (or other) API the Berkely database module must
-# be removed from the build.
-md = "${libexecdir}/openldap"
-#
-#--enable-bdb enable Berkeley DB backend no|yes|mod yes
-# The Berkely DB is the standard choice. This version of OpenLDAP requires
-# the version 4 implementation or better.
-# To disable this set all three of the following variables to <empty> in
-# a .conf file (this will allow ldbm to be build with gdbm).
-#OPENLDAP_OPTION_bdb ?= "--enable-bdb=mod"
-OPENLDAP_DEPENDS_bdb ?= "db"
-OPENLDAP_PACKAGE_bdb ?= "${PN}-backend-bdb"
-FILES_${PN}-backend-bdb = "${md}/back_bdb.so ${md}/back_bdb.la ${md}/back_bdb-*.so.*"
-EXTRA_OECONF += "${OPENLDAP_OPTION_bdb}"
-DEPENDS += "${OPENLDAP_DEPENDS_bdb}"
-PACKAGES += "${OPENLDAP_PACKAGE_bdb}"
-#
-#--enable-dnssrv enable dnssrv backend no|yes|mod no
-# This has no dependencies.
-FILES_${PN}-backend-dnssrv = "${md}/back_dnssrv.so ${md}/back_dnssrv.la ${md}/back_dnssrv-*.so.*"
-EXTRA_OECONF += "--enable-dnssrv=mod"
-PACKAGES += "${PN}-backend-dnssrv"
-#
-#--enable-hdb enable Hierarchical DB backend no|yes|mod no
-# This forces ldbm to use Berkeley too, remove to use gdbm
-#OPENLDAP_OPTION_hdb ?= "--enable-hdb=mod"
-OPENLDAP_DEPENDS_hdb ?= "db"
-OPENLDAP_PACKAGE_hdb ?= "${PN}-backend-hdb"
-FILES_${PN}-backend-hdb = "${md}/back_hdb.so ${md}/back_hdb.la ${md}/back_hdb-*.so.*"
-EXTRA_OECONF += "${OPENLDAP_OPTION_hdb}"
-DEPENDS += "${OPENLDAP_DEPENDS_hdb}"
-PACKAGES += "${OPENLDAP_PACKAGE_hdb}"
-#
-#--enable-ldap enable ldap backend no|yes|mod no
-# This has no dependencies
-EXTRA_OECONF += "--enable-ldap=mod"
-FILES_${PN}-backend-ldap = "${md}/back_ldap.so ${md}/back_ldap.la ${md}/back_ldap-*.so.*"
-PACKAGES += "${PN}-backend-ldap"
-#
-#--enable-ldbm enable ldbm backend no|yes|mod no
-# ldbm requires further specification of the underlying database API, because
-# bdb is enabled above this must be set to berkeley, however the config
-# defaults this correctly so --with-ldbm-api is *not* set. The build will
-# fail if bdb is removed (above) but not database is built to provide the
-# support for ldbm (because the 'DEPENDS_ldbm' is empty below.)
-#
-# So to use gdbm set:
-OPENLDAP_OPTION_ldbm = "--enable-ldbm=mod --with-ldbm-api=gdbm"
-OPENLDAP_DEPENDS_ldbm = gdbm
-# And clear the bdb and hdb settings.
-OPENLDAP_OPTION_ldbm ?= "--enable-ldbm=mod"
-OPENLDAP_DEPENDS_ldbm ?= ""
-OPENLDAP_PACKAGES_ldbm ?= "${PN}-backend-ldbm"
-FILES_${PN}-backend-ldbm = "${md}/back_ldbm.so ${md}/back_ldbm.la ${md}/back_ldbm-*.so.*"
-EXTRA_OECONF += "${OPENLDAP_OPTION_ldbm}"
-DEPENDS += "${OPENLDAP_DEPENDS_ldbm}"
-PACKAGES += "${PN}-backend-ldbm"
-#
-#--enable-meta enable metadirectory backend no|yes|mod no
-# No dependencies
-EXTRA_OECONF += "--enable-meta=mod"
-FILES_${PN}-backend-meta = "${md}/back_meta.so ${md}/back_meta.la ${md}/back_meta-*.so.*"
-PACKAGES += "${PN}-backend-meta"
-#
-#--enable-monitor enable monitor backend no|yes|mod yes
-EXTRA_OECONF += "--enable-monitor=mod"
-FILES_${PN}-backend-monitor = "${md}/back_monitor.so ${md}/back_monitor.la ${md}/back_monitor-*.so.*"
-PACKAGES += "${PN}-backend-monitor"
-#
-#--enable-null enable null backend no|yes|mod no
-EXTRA_OECONF += "--enable-null=mod"
-FILES_${PN}-backend-null = "${md}/back_null.so ${md}/back_null.la ${md}/back_null-*.so.*"
-PACKAGES += "${PN}-backend-null"
-#
-#--enable-passwd enable passwd backend no|yes|mod no
-EXTRA_OECONF += " --enable-passwd=mod"
-FILES_${PN}-backend-passwd = "${md}/back_passwd.so ${md}/back_passwd.la ${md}/back_passwd-*.so.*"
-PACKAGES += "${PN}-backend-passwd"
-#
-#--enable-perl enable perl backend no|yes|mod no
-# This requires a loadable perl dynamic library, if enabled without
-# doing something appropriate (building perl?) the build will pick
-# up the build machine perl - not good.
-OPENLDAP_OPTION_perl ?= "--enable-perl=mod"
-OPENLDAP_DEPENDS_perl ?= "perl"
-OPENLDAP_PACKAGES_perl ?= "${PN}-backend-perl"
-FILES_${PN}-backend-perl = "${md}/back_perl.so ${md}/back_perl.la ${md}/back_perl-*.so.*"
-#EXTRA_OECONF += "${OPENLDAP_OPTION_perl}"
-#DEPENDS += "${OPENLDAP_DEPENDS_perl}"
-#PACKAGES += "${PN}-backend-perl"
-#
-#--enable-shell enable shell backend no|yes|mod no
-EXTRA_OECONF += "--enable-shell=mod"
-FILES_${PN}-backend-shell = "${md}/back_shell.so ${md}/back_shell.la ${md}/back_shell-*.so.*"
-PACKAGES += "${PN}-backend-shell"
-#
-#--enable-sql enable sql backend no|yes|mod no
-# sql requires some sql backend which provides sql.h, sqlite* provides
-# sqlite.h (which may be compatible but hasn't been tried.)
-OPENLDAP_OPTION_sql ?= "--enable-sql=mod"
-OPENLDAP_DEPENDS_sql ?= "sql"
-OPENLDAP_PACKAGES_sql ?= "${PN}-backend-sql"
-FILES_${PN}-backend-sql = "${md}/back_sql.so ${md}/back_sql.la ${md}/back_sql-*.so.*"
-#EXTRA_OECONF += "${OPENLDAP_OPTION_sql}"
-#DEPENDS += "${OPENLDAP_DEPENDS_sql}"
-#PACKAGES += "${PN}-backend-sql"
-#
-#--enable-dyngroup Dynamic Group overlay no|yes|mod no
-# This is a demo, Proxy Cache defines init_module which conflicts with the
-# same symbol in dyngroup
-#EXTRA_OECONF += "--enable-dyngroup=mod"
-#FILES_${PN}-overlay-dyngroup = "${md}/back_dyngroup.so ${md}/back_dyngroup.la ${md}/back_dyngroup-*.so.*"
-#PACKAGES += "${PN}-overlay-dyngroup"
-#
-#--enable-proxycache Proxy Cache overlay no|yes|mod no
-EXTRA_OECONF += "--enable-proxycache=mod"
-FILES_${PN}-overlay-proxycache = "${md}/pcache.so ${md}/pcache.la ${md}/pcache-*.so.*"
-PACKAGES += "${PN}-overlay-proxycache"
-#
-# LOCAL OPTION OVERRIDES
-# The distro/lcoal options must be added in *last*
-EXTRA_OECONF += "${OPENLDAP_OPTIONS}"
-DEPENDS += "${OPENLDAP_DEPENDS}"
-
-CPPFLAGS_append = " -D_GNU_SOURCE"
-
-do_configure() {
- gnu-configize
- oe_runconf
-}
-
-#FIXME: this is a hack, at present an openldap build will pick up the header
-# files from staging rather than the local ones (bad -I order), so remove
-# the headers (from openldap-old.x) before compiling...
-do_compile_prepend() {
- ( cd ${STAGING_INCDIR}
- rm -f ldap.h ldap_*.h
- )
- ( cd ${STAGING_LIBDIR}
- rm -f libldap* liblber*
- )
-}
-
-do_stage() {
- echo "staging libldap-${LDAP_VER}" >&2
- #
- autotools_stage_includes
- # Install the -${LDAP_VER} versions, but link foo.so to foo-x.y.so ONLY
- # if they do not exist!
- oe_libinstall -so -C libraries/libldap/.libs libldap-${LDAP_VER} ${STAGING_LIBDIR}
- test -e ${STAGING_LIBDIR}/libldap.so ||
- ln -s $(basename ${STAGING_LIBDIR}/libldap-${LDAP_VER}.so.*.*.*) ${STAGING_LIBDIR}/libldap.so
- oe_libinstall -so -C libraries/libldap_r/.libs libldap_r-${LDAP_VER} ${STAGING_LIBDIR}
- test -e ${STAGING_LIBDIR}/libldap_r.so ||
- ln -s $(basename ${STAGING_LIBDIR}/libldap_r-${LDAP_VER}.so.*.*.*) ${STAGING_LIBDIR}/libldap_r.so
- oe_libinstall -so -C libraries/liblber/.libs liblber-${LDAP_VER} ${STAGING_LIBDIR}
- test -e ${STAGING_LIBDIR}/liblber.so ||
- ln -s $(basename ${STAGING_LIBDIR}/liblber-${LDAP_VER}.so.*.*.*) ${STAGING_LIBDIR}/liblber.so
-}
-
-LEAD_SONAME = "libldap-${LDAP_VER}.so.*"
-
-# The executables go in a separate package. This allows the
-# installation of the libraries with no daemon support.
-# Each module also has its own package - see above.
-PACKAGES += "${PN}-slapd ${PN}-slurpd ${PN}-bin"
-
-# Package contents - shift most standard contents to -bin
-FILES_${PN} = "${libdir}/lib*.so.* ${sysconfdir}/openldap/ldap.* ${localstatedir}/openldap-data"
-FILES_${PN}-slapd = "${sysconfdir}/init.d ${libexecdir}/slapd ${sbindir} ${localstatedir}/run \
- ${sysconfdir}/openldap/slapd.* ${sysconfdir}/openldap/schema \
- ${sysconfdir}/openldap/DB_CONFIG.example"
-FILES_${PN}-slurpd = "${libexecdir}/slurpd ${localstatedir}/openldap-slurp ${localstatedir}/run"
-FILES_${PN}-bin = "${bindir}"
-FILES_${PN}-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la ${libdir}/*.a ${libexecdir}/openldap/*.a"
-
-do_install_append() {
- install -d ${D}${sysconfdir}/init.d
- cat ${WORKDIR}/initscript > ${D}${sysconfdir}/init.d/openldap
- chmod 755 ${D}${sysconfdir}/init.d/openldap
- # This is duplicated in /etc/openldap and is for slapd
- rm -f ${D}${localstatedir}/openldap-data/DB_CONFIG.example
-}
-
-pkg_postinst_${PN}-slapd () {
- if test -n "${D}"; then
- D="-r $D"
- fi
- update-rc.d $D openldap defaults
-}
-
-pkg_prerm_${PN}-slapd () {
- if test -n "${D}"; then
- D="-r $D"
- fi
- update-rc.d $D openldap remove
-}
diff --git a/recipes/openldap/openldap_2.4.21.bb b/recipes/openldap/openldap_2.4.21.bb
new file mode 100644
index 0000000000..939dabca5d
--- /dev/null
+++ b/recipes/openldap/openldap_2.4.21.bb
@@ -0,0 +1,292 @@
+# OpenLDAP, a license free (see http://www.OpenLDAP.org/license.html)
+#
+DESCRIPTION = "OpenLDAP Software is an open source implementation of the Lightweight Directory Access Protocol."
+HOMEPAGE = "http://www.OpenLDAP.org/license.html"
+PRIORITY = "optional"
+# The OpenLDAP Public License - see the HOMEPAGE - defines
+# the license. www.openldap.org claims this is Open Source
+# (see http://www.openldap.org), the license appears to be
+# basically BSD. opensource.org does not record this license
+# at present (so it is apparently not OSI certified).
+LICENSE = "OpenLDAP"
+SECTION = "libs"
+
+LDAP_VER = "${@'.'.join(bb.data.getVar('PV',d,1).split('.')[0:2])}"
+
+SRC_URI = "ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/${P}.tgz;name=openldap-${PV}"
+SRC_URI += "file://openldap-m4-pthread.patch;patch=1"
+SRC_URI += "file://initscript"
+SRC_URI[openldap-2.4.21.md5sum] = "e7128c57b2bacd940e8906057c94ff26"
+SRC_URI[openldap-2.4.21.sha256sum] = "22eca357137c135b5561e2fa0e3336b280702acf2e5c4f40bc7aed1d1e8e9324"
+# The build tries to run a host executable, this fails. The patch
+# causes the executable and its data to be installed instead of
+# the output - ucgendat must be run after the ipkg install!
+#SRC_URI += "file://ucgendat.patch;patch=1"
+# The original top.mk used INSTALL, not INSTALL_STRIP_PROGRAM when
+# installing .so and executables, this fails in cross compilation
+# environments
+SRC_URI += "file://install-strip.patch;patch=1"
+
+inherit autotools
+
+# OPTIONS
+# The following two variables can be set in a distro or local.conf
+# to switch features on. Each feature foo defines OPENLDAP_OPTION_foo
+# and OPENLDAP_DEPENDS_foo in this file - to include feature foo add
+# the two variables into the setting of the options below (please use
+# += because that means this can be done in *both* distro.conf and
+# local.conf!
+OPENLDAP_OPTIONS ?= ""
+OPENLDAP_DEPENDS ?= ""
+
+# CV SETTINGS
+# Required to work round AC_FUNC_MEMCMP which gets the wrong answer
+# when cross compiling (should be in site?)
+EXTRA_OECONF += "ac_cv_func_memcmp_working=yes"
+
+# CONFIG DEFINITIONS
+# The following is necessary because it cannot be determined for a
+# cross compile automagically. Select should yield fine on all OE
+# systems...
+EXTRA_OECONF += "--with-yielding-select=yes"
+# Shared libraries are nice...
+EXTRA_OECONF += "--enable-dynamic"
+#
+# Disable TLS to remove the need for openssl/libcrypto
+OPENLDAP_OPTION_tls ?= "--with-tls"
+# set the following to "openssl" to build tls support
+OPENLDAP_DEPENDS_tls ?= "gnutls"
+EXTRA_OECONF += "${OPENLDAP_OPTION_tls}"
+DEPENDS += "${OPENLDAP_DEPENDS_tls}"
+#
+# Disable Cyrus SASL, which may or may not be working at present...
+OPENLDAP_OPTION_sasl ?= "--without-cyrus-sasl"
+# set the following to "cyrus-sasl" to build SASL support
+OPENLDAP_DEPENDS_sasl ?= ""
+EXTRA_OECONF += "${OPENLDAP_OPTION_sasl}"
+DEPENDS += "${OPENLDAP_DEPENDS_sasl}"
+
+# SLAPD options
+#
+# UNIX crypt(3) passwd support:
+EXTRA_OECONF += "--enable-crypt"
+#
+# Enable dynamic module loading. If this is *disabled* the
+# dependency on libtool is removed (to disable set the following
+# to variables to "" in a .conf file).
+OPENLDAP_OPTION_modules += "lt_cv_dlopen_self=yes --enable-modules"
+OPENLDAP_DEPENDS_modules += "libtool"
+EXTRA_OECONF += " ${OPENLDAP_OPTION_modules}"
+DEPENDS += "${OPENLDAP_DEPENDS_modules}"
+
+# SLAPD BACKEND
+#
+# The backend must be set by the configuration. This controls the
+# required database, the default database, bdb, is turned off but
+# can be turned back on again and it *is* below! The monitor backend
+# is also disabled. If you try to change the backends but fail to
+# enable a single one the build will fail in an obvious way.
+#
+EXTRA_OECONF += "--disable-bdb --disable-hdb --disable-monitor"
+#
+# Backends="bdb dnssrv hdb ldap ldbm meta monitor null passwd perl shell sql"
+#
+# Note that multiple backends can be built. The ldbm backend requires a
+# build-time choice of database API. The bdb backend forces this to be
+# DB4. To use the gdbm (or other) API the Berkely database module must
+# be removed from the build.
+md = "${libexecdir}/openldap"
+#
+#--enable-bdb enable Berkeley DB backend no|yes|mod yes
+# The Berkely DB is the standard choice. This version of OpenLDAP requires
+# the version 4 implementation or better.
+# To disable this set all three of the following variables to <empty> in
+# a .conf file (this will allow ldbm to be build with gdbm).
+#OPENLDAP_OPTION_bdb ?= "--enable-bdb=mod"
+OPENLDAP_DEPENDS_bdb ?= "db"
+OPENLDAP_PACKAGE_bdb ?= "${PN}-backend-bdb"
+FILES_${PN}-backend-bdb = "${md}/back_bdb.so ${md}/back_bdb.la ${md}/back_bdb-*.so.*"
+EXTRA_OECONF += "${OPENLDAP_OPTION_bdb}"
+DEPENDS += "${OPENLDAP_DEPENDS_bdb}"
+PACKAGES += "${OPENLDAP_PACKAGE_bdb}"
+#
+#--enable-dnssrv enable dnssrv backend no|yes|mod no
+# This has no dependencies.
+FILES_${PN}-backend-dnssrv = "${md}/back_dnssrv.so ${md}/back_dnssrv.la ${md}/back_dnssrv-*.so.*"
+EXTRA_OECONF += "--enable-dnssrv=mod"
+PACKAGES += "${PN}-backend-dnssrv"
+#
+#--enable-hdb enable Hierarchical DB backend no|yes|mod no
+# This forces ldbm to use Berkeley too, remove to use gdbm
+#OPENLDAP_OPTION_hdb ?= "--enable-hdb=mod"
+OPENLDAP_DEPENDS_hdb ?= "db"
+OPENLDAP_PACKAGE_hdb ?= "${PN}-backend-hdb"
+FILES_${PN}-backend-hdb = "${md}/back_hdb.so ${md}/back_hdb.la ${md}/back_hdb-*.so.*"
+EXTRA_OECONF += "${OPENLDAP_OPTION_hdb}"
+DEPENDS += "${OPENLDAP_DEPENDS_hdb}"
+PACKAGES += "${OPENLDAP_PACKAGE_hdb}"
+#
+#--enable-ldap enable ldap backend no|yes|mod no
+# This has no dependencies
+EXTRA_OECONF += "--enable-ldap=mod"
+FILES_${PN}-backend-ldap = "${md}/back_ldap.so ${md}/back_ldap.la ${md}/back_ldap-*.so.*"
+PACKAGES += "${PN}-backend-ldap"
+#
+#--enable-ldbm enable ldbm backend no|yes|mod no
+# ldbm requires further specification of the underlying database API, because
+# bdb is enabled above this must be set to berkeley, however the config
+# defaults this correctly so --with-ldbm-api is *not* set. The build will
+# fail if bdb is removed (above) but not database is built to provide the
+# support for ldbm (because the 'DEPENDS_ldbm' is empty below.)
+#
+# So to use gdbm set:
+OPENLDAP_OPTION_ldbm = "--enable-ldbm=mod --with-ldbm-api=gdbm"
+OPENLDAP_DEPENDS_ldbm = gdbm
+# And clear the bdb and hdb settings.
+OPENLDAP_OPTION_ldbm ?= "--enable-ldbm=mod"
+OPENLDAP_DEPENDS_ldbm ?= ""
+OPENLDAP_PACKAGES_ldbm ?= "${PN}-backend-ldbm"
+FILES_${PN}-backend-ldbm = "${md}/back_ldbm.so ${md}/back_ldbm.la ${md}/back_ldbm-*.so.*"
+EXTRA_OECONF += "${OPENLDAP_OPTION_ldbm}"
+DEPENDS += "${OPENLDAP_DEPENDS_ldbm}"
+PACKAGES += "${PN}-backend-ldbm"
+#
+#--enable-meta enable metadirectory backend no|yes|mod no
+# No dependencies
+EXTRA_OECONF += "--enable-meta=mod"
+FILES_${PN}-backend-meta = "${md}/back_meta.so ${md}/back_meta.la ${md}/back_meta-*.so.*"
+PACKAGES += "${PN}-backend-meta"
+#
+#--enable-monitor enable monitor backend no|yes|mod yes
+EXTRA_OECONF += "--enable-monitor=mod"
+FILES_${PN}-backend-monitor = "${md}/back_monitor.so ${md}/back_monitor.la ${md}/back_monitor-*.so.*"
+PACKAGES += "${PN}-backend-monitor"
+#
+#--enable-null enable null backend no|yes|mod no
+EXTRA_OECONF += "--enable-null=mod"
+FILES_${PN}-backend-null = "${md}/back_null.so ${md}/back_null.la ${md}/back_null-*.so.*"
+PACKAGES += "${PN}-backend-null"
+#
+#--enable-passwd enable passwd backend no|yes|mod no
+EXTRA_OECONF += " --enable-passwd=mod"
+FILES_${PN}-backend-passwd = "${md}/back_passwd.so ${md}/back_passwd.la ${md}/back_passwd-*.so.*"
+PACKAGES += "${PN}-backend-passwd"
+#
+#--enable-perl enable perl backend no|yes|mod no
+# This requires a loadable perl dynamic library, if enabled without
+# doing something appropriate (building perl?) the build will pick
+# up the build machine perl - not good.
+OPENLDAP_OPTION_perl ?= "--enable-perl=mod"
+OPENLDAP_DEPENDS_perl ?= "perl"
+OPENLDAP_PACKAGES_perl ?= "${PN}-backend-perl"
+FILES_${PN}-backend-perl = "${md}/back_perl.so ${md}/back_perl.la ${md}/back_perl-*.so.*"
+#EXTRA_OECONF += "${OPENLDAP_OPTION_perl}"
+#DEPENDS += "${OPENLDAP_DEPENDS_perl}"
+#PACKAGES += "${PN}-backend-perl"
+#
+#--enable-shell enable shell backend no|yes|mod no
+EXTRA_OECONF += "--enable-shell=mod"
+FILES_${PN}-backend-shell = "${md}/back_shell.so ${md}/back_shell.la ${md}/back_shell-*.so.*"
+PACKAGES += "${PN}-backend-shell"
+#
+#--enable-sql enable sql backend no|yes|mod no
+# sql requires some sql backend which provides sql.h, sqlite* provides
+# sqlite.h (which may be compatible but hasn't been tried.)
+OPENLDAP_OPTION_sql ?= "--enable-sql=mod"
+OPENLDAP_DEPENDS_sql ?= "sql"
+OPENLDAP_PACKAGES_sql ?= "${PN}-backend-sql"
+FILES_${PN}-backend-sql = "${md}/back_sql.so ${md}/back_sql.la ${md}/back_sql-*.so.*"
+#EXTRA_OECONF += "${OPENLDAP_OPTION_sql}"
+#DEPENDS += "${OPENLDAP_DEPENDS_sql}"
+#PACKAGES += "${PN}-backend-sql"
+#
+#--enable-dyngroup Dynamic Group overlay no|yes|mod no
+# This is a demo, Proxy Cache defines init_module which conflicts with the
+# same symbol in dyngroup
+#EXTRA_OECONF += "--enable-dyngroup=mod"
+#FILES_${PN}-overlay-dyngroup = "${md}/back_dyngroup.so ${md}/back_dyngroup.la ${md}/back_dyngroup-*.so.*"
+#PACKAGES += "${PN}-overlay-dyngroup"
+#
+#--enable-proxycache Proxy Cache overlay no|yes|mod no
+EXTRA_OECONF += "--enable-proxycache=mod"
+FILES_${PN}-overlay-proxycache = "${md}/pcache.so ${md}/pcache.la ${md}/pcache-*.so.*"
+PACKAGES += "${PN}-overlay-proxycache"
+#
+# LOCAL OPTION OVERRIDES
+# The distro/lcoal options must be added in *last*
+EXTRA_OECONF += "${OPENLDAP_OPTIONS}"
+DEPENDS += "${OPENLDAP_DEPENDS}"
+
+CPPFLAGS_append = " -D_GNU_SOURCE"
+
+do_configure() {
+ gnu-configize
+ oe_runconf
+}
+
+#FIXME: this is a hack, at present an openldap build will pick up the header
+# files from staging rather than the local ones (bad -I order), so remove
+# the headers (from openldap-old.x) before compiling...
+do_compile_prepend() {
+ ( cd ${STAGING_INCDIR}
+ rm -f ldap.h ldap_*.h
+ )
+ ( cd ${STAGING_LIBDIR}
+ rm -f libldap* liblber*
+ )
+}
+
+do_stage() {
+ echo "staging libldap-${LDAP_VER}" >&2
+ #
+ autotools_stage_includes
+ # Install the -${LDAP_VER} versions, but link foo.so to foo-x.y.so ONLY
+ # if they do not exist!
+ oe_libinstall -so -C libraries/libldap/.libs libldap-${LDAP_VER} ${STAGING_LIBDIR}
+ test -e ${STAGING_LIBDIR}/libldap.so ||
+ ln -s $(basename ${STAGING_LIBDIR}/libldap-${LDAP_VER}.so.*.*.*) ${STAGING_LIBDIR}/libldap.so
+ oe_libinstall -so -C libraries/libldap_r/.libs libldap_r-${LDAP_VER} ${STAGING_LIBDIR}
+ test -e ${STAGING_LIBDIR}/libldap_r.so ||
+ ln -s $(basename ${STAGING_LIBDIR}/libldap_r-${LDAP_VER}.so.*.*.*) ${STAGING_LIBDIR}/libldap_r.so
+ oe_libinstall -so -C libraries/liblber/.libs liblber-${LDAP_VER} ${STAGING_LIBDIR}
+ test -e ${STAGING_LIBDIR}/liblber.so ||
+ ln -s $(basename ${STAGING_LIBDIR}/liblber-${LDAP_VER}.so.*.*.*) ${STAGING_LIBDIR}/liblber.so
+}
+
+LEAD_SONAME = "libldap-${LDAP_VER}.so.*"
+
+# The executables go in a separate package. This allows the
+# installation of the libraries with no daemon support.
+# Each module also has its own package - see above.
+PACKAGES += "${PN}-slapd ${PN}-slurpd ${PN}-bin"
+
+# Package contents - shift most standard contents to -bin
+FILES_${PN} = "${libdir}/lib*.so.* ${sysconfdir}/openldap/ldap.* ${localstatedir}/openldap-data"
+FILES_${PN}-slapd = "${sysconfdir}/init.d ${libexecdir}/slapd ${sbindir} ${localstatedir}/run \
+ ${sysconfdir}/openldap/slapd.* ${sysconfdir}/openldap/schema \
+ ${sysconfdir}/openldap/DB_CONFIG.example"
+FILES_${PN}-slurpd = "${libexecdir}/slurpd ${localstatedir}/openldap-slurp ${localstatedir}/run"
+FILES_${PN}-bin = "${bindir}"
+FILES_${PN}-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la ${libdir}/*.a ${libexecdir}/openldap/*.a"
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d
+ cat ${WORKDIR}/initscript > ${D}${sysconfdir}/init.d/openldap
+ chmod 755 ${D}${sysconfdir}/init.d/openldap
+ # This is duplicated in /etc/openldap and is for slapd
+ rm -f ${D}${localstatedir}/openldap-data/DB_CONFIG.example
+}
+
+pkg_postinst_${PN}-slapd () {
+ if test -n "${D}"; then
+ D="-r $D"
+ fi
+ update-rc.d $D openldap defaults
+}
+
+pkg_prerm_${PN}-slapd () {
+ if test -n "${D}"; then
+ D="-r $D"
+ fi
+ update-rc.d $D openldap remove
+}
diff --git a/recipes/openmoko-3rdparty/babiloo-efl_2.0.9-10.bb b/recipes/openmoko-3rdparty/babiloo-efl_2.0.9-10.bb
new file mode 100644
index 0000000000..76f3b60ab0
--- /dev/null
+++ b/recipes/openmoko-3rdparty/babiloo-efl_2.0.9-10.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "EFL Dictionary Viewer. It supports dictionaries in SDictionary and StarDict format."
+SECTION = "devel/python"
+PRIORITY = "optional"
+LICENSE = "GPL"
+AUTHOR = "Luca Vaudano <vaudano@gmail.com>"
+HOMEPAGE = "http://babiloo-project.org"
+RDEPENDS = "python-elementary python-compression python-misc python-netclient"
+
+PACKAGE_ARCH = "all"
+
+PV = "2.0.9-10"
+PR = "r1"
+
+SRC_URI = "http://www.vaudano.eu/projects/babiloo/babiloo_2.0.9-10.tar.gz;name=tarball"
+SRC_URI[tarball.md5sum] = "2a66cc5863aca83c4b3120b8ca974676"
+SRC_URI[tarball.sha256sum] = "42bba5f09875c8d3a8d4579a79ade86207a095b6d4741cc3a72bee071c22bb46"
+
+S = "${WORKDIR}/babiloo"
+
+do_install() {
+ install -d "${D}${datadir}/babiloo"
+ install -d "${D}${datadir}/babiloo/dicts"
+
+ cp -a "${S}/core" "${D}${datadir}/babiloo/"
+ cp -a "${S}/efl" "${D}${datadir}/babiloo/"
+ cp -a "${S}/images" "${D}${datadir}/babiloo/"
+ install -m 0755 "${S}/run.py" "${D}${datadir}/babiloo/"
+ install -d "${D}${bindir}"
+ ln -s "${datadir}/babiloo/run.py" "${D}${bindir}/babiloo"
+ install -d "${D}${datadir}/pixmaps"
+ install -m 0644 "${S}/images/babiloo.png" "${D}${datadir}/pixmaps"
+ install -d "${D}${datadir}/applications"
+ install -m 0644 "${S}/babiloo.desktop" "${D}${datadir}/applications"
+
+ cp -a "${S}/locale" "${D}${datadir}/"
+ find ${D}${datadir}/locale -name *.po -exec rm {} \;
+ rm -f ${D}${datadir}/locale/babiloo.pot
+}
+
+FILES_${PN} += "${datadir}/babiloo"
diff --git a/recipes/openmoko-3rdparty/babiloo-efl_bzr.bb b/recipes/openmoko-3rdparty/babiloo-efl_bzr.bb
index 614c095b8b..ce0e591e00 100644
--- a/recipes/openmoko-3rdparty/babiloo-efl_bzr.bb
+++ b/recipes/openmoko-3rdparty/babiloo-efl_bzr.bb
@@ -9,6 +9,7 @@ RDEPENDS = "python-elementary python-compression python-misc python-netclient"
PACKAGE_ARCH = "all"
DEFAULT_PREFERENCE = "-1"
+SRCREV = "296"
PV = "2.0.9-bzrr${SRCPV}"
SRC_URI = "bzr://bazaar.launchpad.net/~vaudano/babiloo/efl"
diff --git a/recipes/openmoko-3rdparty/guitartune_svn.bb b/recipes/openmoko-3rdparty/guitartune_svn.bb
index 37fbd5ffa3..dc468dc77f 100644
--- a/recipes/openmoko-3rdparty/guitartune_svn.bb
+++ b/recipes/openmoko-3rdparty/guitartune_svn.bb
@@ -5,6 +5,7 @@ LICENSE = "GPLv2"
SECTION = "e/apps"
DEPENDS = "gtk+ libglade fftw sqlite3"
+SRCREV = "11"
PV = "0.36+svnr${SRCPV}"
SRC_URI = "svn://guitartune.googlecode.com/svn;module=trunk;proto=http"
diff --git a/recipes/openmoko-3rdparty/jefliks_git.bb b/recipes/openmoko-3rdparty/jefliks_git.bb
new file mode 100644
index 0000000000..87f0b34a9a
--- /dev/null
+++ b/recipes/openmoko-3rdparty/jefliks_git.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "This project is a try to write real tiny and fast XMPP/Jabber \
+ client for handheld devices, supported by Enlightment Foundation Library.\
+ It use Elementary widget toolkit and Iksemel library to make it possible."
+LICENSE = "GPL"
+DEPENDS = "edje-native elementary iksemel gnutls eet evas ecore eina"
+HOMEPAGE = "http://jefliks.sourceforge.net/"
+AUTHOR = "Phoenix Kayo <kayo.k11.4@gmail.com>"
+PV = "0.0.2b+gitr${SRCREV}"
+PR = "r0"
+
+inherit autotools pkgconfig
+
+SRCREV = "c4d035f4696bf8a233a54c74dd148173fdef43c2"
+
+SRC_URI = "git://jefliks.git.sourceforge.net/gitroot/jefliks/jefliks;protocol=git;branch=master"
+S = "${WORKDIR}/git"
diff --git a/recipes/openmoko-3rdparty/mcnavi_0.2.5.bb b/recipes/openmoko-3rdparty/mcnavi_0.2.5.bb
new file mode 100644
index 0000000000..283b4b4dc9
--- /dev/null
+++ b/recipes/openmoko-3rdparty/mcnavi_0.2.5.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Free GPS navigation for car and outdoor with OpenStreetMap maps"
+HOMEPAGE = "http://www.gps-routes.info/index.php?name=Content&pa=showpage&pid=1"
+LICENSE = "GPL"
+DEPENDS = "ecore evas imlib2 gpsd edje-native"
+
+SRC_URI = "http://www.gps-routes.info/debian/pool/main/m/mcnavi/mcnavi_${PV}.tar.gz;name=archive"
+SRC_URI[archive.md5sum] = "b572c3691f05e22b37efd6cd53da203e"
+SRC_URI[archive.sha256sum] = "ee6792bef93070319141ee2020b7ae376527e3b8043f0f540bcd58d418576d44"
+
+S = "${WORKDIR}/${PN}"
+
+inherit autotools
diff --git a/recipes/openmoko-3rdparty/neolight_svn.bb b/recipes/openmoko-3rdparty/neolight_svn.bb
new file mode 100644
index 0000000000..8568072d85
--- /dev/null
+++ b/recipes/openmoko-3rdparty/neolight_svn.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "An application to turn your mobile device into a flashlight"
+HOMEPAGE = "http://code.google.com/p/neolight/"
+LICENSE = "GPLv3"
+AUTHOR = "Valéry Febvre <vfebvre@easter-eggs.com>"
+SECTION = "x11/applications"
+PRIORITY = "optional"
+
+SRCREV = "16"
+PV = "1.4.0+svnr${SRCPV}"
+
+PACKAGE_ARCH = "all"
+
+SRC_URI = "svn://neolight.googlecode.com/svn;module=trunk;proto=http"
+S = "${WORKDIR}/trunk"
+
+inherit distutils
+
+FILES_${PN} += "${datadir}/neolight ${datadir}/applications/neolight.desktop ${datadir}/pixmaps/neolight.png"
+
+RDEPENDS += "python-edbus python-elementary"
+
+do_compile_prepend() {
+ ${STAGING_BINDIR_NATIVE}/edje_cc -id ${S}/data ${S}/data/neolight.edc
+}
diff --git a/recipes/openmoko-3rdparty/neomis_svn.bb b/recipes/openmoko-3rdparty/neomis_svn.bb
index 1ea20a2d58..1af7619c6d 100644
--- a/recipes/openmoko-3rdparty/neomis_svn.bb
+++ b/recipes/openmoko-3rdparty/neomis_svn.bb
@@ -6,6 +6,7 @@ SECTION = "x11/applications"
PRIORITY = "optional"
DEPENDS = "python-native"
+SRCREV = "6"
PV = "1.1.0+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/openmoko-3rdparty/numberx_svn.bb b/recipes/openmoko-3rdparty/numberx_svn.bb
index 446ed37b52..3deaf6a4eb 100644
--- a/recipes/openmoko-3rdparty/numberx_svn.bb
+++ b/recipes/openmoko-3rdparty/numberx_svn.bb
@@ -6,6 +6,7 @@ SECTION = "x11/applications"
PRIORITY = "optional"
DEPENDS = "python-native"
+SRCREV = "4"
PV = "1.0.0+svnr${SRCPV}"
S = "${WORKDIR}/trunk"
diff --git a/recipes/openmoko-3rdparty/om-neon_svn.bb b/recipes/openmoko-3rdparty/om-neon_svn.bb
index 5ecaf14123..7e1f24ee4c 100644
--- a/recipes/openmoko-3rdparty/om-neon_svn.bb
+++ b/recipes/openmoko-3rdparty/om-neon_svn.bb
@@ -6,7 +6,7 @@ SECTION = "x11/applications"
PRIORITY = "optional"
DEPENDS = "edje-native python-native"
-SRCREV = ${AUTOREV}
+SRCREV = "68"
PV = "1.0.0+svnr${SRCPV}"
PR = "r2"
diff --git a/recipes/openmoko-3rdparty/podboy_svn.bb b/recipes/openmoko-3rdparty/podboy_svn.bb
index d8b4d3aad2..6dcabdbb22 100644
--- a/recipes/openmoko-3rdparty/podboy_svn.bb
+++ b/recipes/openmoko-3rdparty/podboy_svn.bb
@@ -5,8 +5,8 @@ AUTHOR = "Valéry Febvre <vfebvre@easter-eggs.com>"
SECTION = "x11/applications"
PRIORITY = "optional"
-SRCREV = "105"
-PV = "1.3.3+svnr${SRCPV}"
+SRCREV = "123"
+PV = "1.5.0+svnr${SRCPV}"
PACKAGE_ARCH = "all"
diff --git a/recipes/openmoko-3rdparty/ventura_svn.bb b/recipes/openmoko-3rdparty/ventura_svn.bb
index 97b8d2d940..e312da57d9 100644
--- a/recipes/openmoko-3rdparty/ventura_svn.bb
+++ b/recipes/openmoko-3rdparty/ventura_svn.bb
@@ -1,13 +1,16 @@
DESCRIPTION = "ventura is a web browser for openmoko phones"
-HOMEPAGE = "http://code.google.com/p/elm-browser/"
AUTHOR = "cchandel"
-LICENSE = "GPLv2"
+HOMEPAGE = "http://code.google.com/p/elm-browser/"
SECTION = "e/apps"
+LICENSE = "GPLv2"
DEPENDS = "elementary webkit-efl sqlite3"
-SRCREV = "11"
+RRECOMMENDS = "ca-certificates"
PV = "0.2+svnr${SRCPV}"
+PR = "1"
SRC_URI = "svn://elm-browser.googlecode.com/svn;module=trunk;proto=http"
+
+SRCREV = "13"
S = "${WORKDIR}/trunk"
inherit autotools
diff --git a/recipes/openmoko-examples/openmoko-panel-demo-simple_svn.bb b/recipes/openmoko-examples/openmoko-panel-demo-simple_svn.bb
index ff336be4de..82e5c6182c 100644
--- a/recipes/openmoko-examples/openmoko-panel-demo-simple_svn.bb
+++ b/recipes/openmoko-examples/openmoko-panel-demo-simple_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "A simple example panel plugin for Openmoko"
SECTION = "openmoko/examples"
DEPENDS += "libmatchbox"
+SRCREV = "1328"
PV = "0.0.1+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/openmoko-examples/openmoko-panel-demo_svn.bb b/recipes/openmoko-examples/openmoko-panel-demo_svn.bb
index c44dc114e5..8e9a501c6d 100644
--- a/recipes/openmoko-examples/openmoko-panel-demo_svn.bb
+++ b/recipes/openmoko-examples/openmoko-panel-demo_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "An example panel plugin for Openmoko"
SECTION = "openmoko/examples"
DEPENDS += "libmatchbox"
+SRCREV = "1622"
PV = "0.0.1+svnr${SRCPV}"
inherit openmoko
diff --git a/recipes/openmoko-panel-plugins/openmoko-panel-battery_svn.bb b/recipes/openmoko-panel-plugins/openmoko-panel-battery_svn.bb
index f8ff8a3a93..b4926affd6 100644
--- a/recipes/openmoko-panel-plugins/openmoko-panel-battery_svn.bb
+++ b/recipes/openmoko-panel-plugins/openmoko-panel-battery_svn.bb
@@ -1,5 +1,6 @@
DESCRIPTION = "Shows the battery/AC status in the Openmoko panel"
DEPENDS = "apmd libnotify"
+SRCREV = "3360"
PV = "0.1.1+svnr${SRCPV}"
inherit openmoko-panel-plugin
diff --git a/recipes/openmoko-panel-plugins/openmoko-panel-bt_svn.bb b/recipes/openmoko-panel-plugins/openmoko-panel-bt_svn.bb
index e823694f10..b9015a37da 100644
--- a/recipes/openmoko-panel-plugins/openmoko-panel-bt_svn.bb
+++ b/recipes/openmoko-panel-plugins/openmoko-panel-bt_svn.bb
@@ -1,5 +1,6 @@
DESCRIPTION = "Shows the bluetooth status in the Openmoko panel"
DEPENDS = "bluez-libs libnotify"
+SRCREV = "4331"
PV = "0.1.0+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/openmoko-panel-plugins/openmoko-panel-clock_svn.bb b/recipes/openmoko-panel-plugins/openmoko-panel-clock_svn.bb
index 91316b8066..90e5e92a73 100644
--- a/recipes/openmoko-panel-plugins/openmoko-panel-clock_svn.bb
+++ b/recipes/openmoko-panel-plugins/openmoko-panel-clock_svn.bb
@@ -1,4 +1,5 @@
DESCRIPTION = "Shows the current time in the Openmoko panel"
+SRCREV = "2567"
PV = "0.1.0+svnr${SRCPV}"
inherit openmoko-panel-plugin
diff --git a/recipes/openmoko-panel-plugins/openmoko-panel-gps_svn.bb b/recipes/openmoko-panel-plugins/openmoko-panel-gps_svn.bb
index b28b670453..928a99379f 100644
--- a/recipes/openmoko-panel-plugins/openmoko-panel-gps_svn.bb
+++ b/recipes/openmoko-panel-plugins/openmoko-panel-gps_svn.bb
@@ -1,5 +1,6 @@
DESCRIPTION = "Shows the GPS status in the Openmoko panel"
DEPENDS = "gpsd"
+SRCREV = "4330"
PV = "0.1.0+svnr${SRCPV}"
inherit openmoko-panel-plugin
diff --git a/recipes/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb b/recipes/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb
index 00529ea360..1ce27a6a1f 100644
--- a/recipes/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb
+++ b/recipes/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb
@@ -1,5 +1,6 @@
DESCRIPTION = "Shows the GSM / GPRS status in the Openmoko panel"
DEPENDS = "libmokogsmd2 libnotify"
+SRCREV = "4335"
PV = "0.1.0+svnr${SRCPV}"
PR = "r2"
diff --git a/recipes/openmoko-panel-plugins/openmoko-panel-mainmenu_svn.bb b/recipes/openmoko-panel-plugins/openmoko-panel-mainmenu_svn.bb
index 7c0659ef51..ebc041640b 100644
--- a/recipes/openmoko-panel-plugins/openmoko-panel-mainmenu_svn.bb
+++ b/recipes/openmoko-panel-plugins/openmoko-panel-mainmenu_svn.bb
@@ -1,5 +1,6 @@
DESCRIPTION = "Main menu applet for the Openmoko panel"
DEPENDS += "pulseaudio startup-notification"
+SRCREV = "2567"
PV = "0.1.0+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/openmoko-panel-plugins/openmoko-panel-memory_svn.bb b/recipes/openmoko-panel-plugins/openmoko-panel-memory_svn.bb
index 0f0ca828d2..413f14e31e 100644
--- a/recipes/openmoko-panel-plugins/openmoko-panel-memory_svn.bb
+++ b/recipes/openmoko-panel-plugins/openmoko-panel-memory_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "Shows an out-of-memory warning in the Openmoko panel"
DEPENDS = "libnotify"
RDEPENDS = "openmoko-dialer2"
+SRCREV = "3903"
PV = "0.0.0+svnr${SRCPV}"
PR = "r0"
diff --git a/recipes/openmoko-panel-plugins/openmoko-panel-usb_svn.bb b/recipes/openmoko-panel-plugins/openmoko-panel-usb_svn.bb
index 6af1b8c3f9..272df4c644 100644
--- a/recipes/openmoko-panel-plugins/openmoko-panel-usb_svn.bb
+++ b/recipes/openmoko-panel-plugins/openmoko-panel-usb_svn.bb
@@ -1,4 +1,5 @@
DESCRIPTION = "USB applet for the Openmoko panel"
+SRCREV = "3360"
PV = "0.1.0+svnr${SRCPV}"
inherit openmoko-panel-plugin
diff --git a/recipes/openmoko-panel-plugins/openmoko-panel-wifi_svn.bb b/recipes/openmoko-panel-plugins/openmoko-panel-wifi_svn.bb
index 4b8000adb0..ae8a6977ea 100644
--- a/recipes/openmoko-panel-plugins/openmoko-panel-wifi_svn.bb
+++ b/recipes/openmoko-panel-plugins/openmoko-panel-wifi_svn.bb
@@ -1,5 +1,6 @@
DESCRIPTION = "Shows the wifi status in the Openmoko panel"
DEPENDS = "libmokopanelui2"
+SRCREV = "4344"
PV = "0.0.0+svnr${SRCPV}"
inherit openmoko-panel-plugin
diff --git a/recipes/openmoko-projects/assassin-thumbnail.bb b/recipes/openmoko-projects/assassin-thumbnail.bb
deleted file mode 100644
index 2e9afeb2d6..0000000000
--- a/recipes/openmoko-projects/assassin-thumbnail.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "Assassin Packages Thumbnails"
-HOMEPAGE = "http://assassin.projects.openmoko.org/"
-LICENSE = "GPL"
-RDEPENDS = "assassin"
-PV = "0.1+svnr${SRCPV}"
-PR = "r1"
-
-SRC_URI = "svn://svn.openmoko.org/trunk/src/target/thumbnails/;module=result;proto=https"
-
-do_install() {
- install -d ${D}${THUMBNAIL_DIR}
- cp -f ${WORKDIR}/result/${THUMBNAIL_FN} ${D}${THUMBNAIL_DIR}
-}
-
-FILES_${PN} = "${THUMBNAIL_DIR}/${THUMBNAIL_FN}"
-
-THUMBNAIL_DIR = "${datadir}/assassin/"
-THUMBNAIL_FN = "thumbnail.eet"
diff --git a/recipes/openmoko-projects/assassin-thumbnail_svn.bb b/recipes/openmoko-projects/assassin-thumbnail_svn.bb
new file mode 100644
index 0000000000..ccf55799c3
--- /dev/null
+++ b/recipes/openmoko-projects/assassin-thumbnail_svn.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Assassin Packages Thumbnails"
+HOMEPAGE = "http://assassin.projects.openmoko.org/"
+LICENSE = "GPL"
+RDEPENDS = "assassin"
+SRCREV = "4690"
+PV = "0.1+svnr${SRCPV}"
+PR = "r1"
+
+SRC_URI = "svn://svn.openmoko.org/trunk/src/target/thumbnails/;module=result;proto=https"
+
+do_install() {
+ install -d ${D}${THUMBNAIL_DIR}
+ cp -f ${WORKDIR}/result/${THUMBNAIL_FN} ${D}${THUMBNAIL_DIR}
+}
+
+FILES_${PN} = "${THUMBNAIL_DIR}/${THUMBNAIL_FN}"
+
+THUMBNAIL_DIR = "${datadir}/assassin/"
+THUMBNAIL_FN = "thumbnail.eet"
diff --git a/recipes/openmoko-projects/assassin_svn.bb b/recipes/openmoko-projects/assassin_svn.bb
index 505a1dacb9..96189dc152 100644
--- a/recipes/openmoko-projects/assassin_svn.bb
+++ b/recipes/openmoko-projects/assassin_svn.bb
@@ -3,6 +3,7 @@ HOMEPAGE = "http://assassin.projects.openmoko.org/"
LICENSE = "GPL"
DEPENDS = "dbus (>= 1.1.1) glib-2.0 e-wm packagekit etk edbus eet"
RDEPENDS = "etk-theme-ninja"
+SRCREV = "268"
PV = "0.2+svnr${SRCPV}"
PR = "r6.04"
diff --git a/recipes/openmoko-projects/diversity-daemon_svn.bb b/recipes/openmoko-projects/diversity-daemon_svn.bb
index d78bde23a0..286e475639 100644
--- a/recipes/openmoko-projects/diversity-daemon_svn.bb
+++ b/recipes/openmoko-projects/diversity-daemon_svn.bb
@@ -4,6 +4,7 @@ SECTION = "network/misc"
LICENSE = "GPL"
DEPENDS = "glib-2.0 dbus dbus-glib eds-dbus libjana curl"
RDEPENDS_${PN} = "eds-dbus"
+SRCREV = "571"
PV = "0.0+svnr${SRCPV}"
PR = "r3"
diff --git a/recipes/openmoko-projects/diversity-radar_svn.bb b/recipes/openmoko-projects/diversity-radar_svn.bb
index 2a334a5021..e7edb1ac42 100644
--- a/recipes/openmoko-projects/diversity-radar_svn.bb
+++ b/recipes/openmoko-projects/diversity-radar_svn.bb
@@ -4,6 +4,7 @@ SECTION = "openmoko/applications"
LICENSE = "GPL"
DEPENDS = "python-evas python-edje python-ecore python-edbus python-dbus python-etk"
RDEPENDS_${PN} = "diversity-daemon"
+SRCREV = "453"
PV = "0.0.4+svnr${SRCPV}"
PR = "r0.02"
diff --git a/recipes/openmoko-projects/enlazar_svn.bb b/recipes/openmoko-projects/enlazar_svn.bb
index 925f6d98d5..1c16d531e5 100644
--- a/recipes/openmoko-projects/enlazar_svn.bb
+++ b/recipes/openmoko-projects/enlazar_svn.bb
@@ -3,6 +3,7 @@ HOMEPAGE = "http://enlazar.projects.openmoko.org/"
LICENSE = "GPL"
DEPENDS = "evas edje ecore edbus"
RDEPENDS = "networkmanager"
+SRCREV = "37"
PV = "0.1+svnr${SRCPV}"
PR = "r4"
PE = "2"
diff --git a/recipes/openmoko-projects/etk-theme-ninja_svn.bb b/recipes/openmoko-projects/etk-theme-ninja_svn.bb
index 38468f5457..24c2ddf42f 100644
--- a/recipes/openmoko-projects/etk-theme-ninja_svn.bb
+++ b/recipes/openmoko-projects/etk-theme-ninja_svn.bb
@@ -3,6 +3,7 @@ HOMEPAGE = "http://ninja.projects.openmoko.org/"
SECTION = "openmoko/misc"
LICENSE = "GPL"
DEPENDS = "edje"
+SRCREV = "5"
PV = "0.0.1+svnr${SRCPV}"
PR = "r1"
SRC_URI = "svn://svn.projects.openmoko.org/svnroot/ninja;module=trunk;proto=http"
diff --git a/recipes/openmoko-projects/illume-theme-asu_svn.bb b/recipes/openmoko-projects/illume-theme-asu_svn.bb
index bc4a649c0f..1798b80221 100644
--- a/recipes/openmoko-projects/illume-theme-asu_svn.bb
+++ b/recipes/openmoko-projects/illume-theme-asu_svn.bb
@@ -4,6 +4,7 @@ LICENSE = "MIT/BSD"
DEPENDS = "edje-native eet-native"
RPROVIDES_${PN} = "illume-theme"
RCONFLICTS = "illume-config"
+SRCREV = "4881"
PV = "0.0+svnr${SRCPV}"
PR = "r9"
diff --git a/recipes/openmoko-projects/om-settings_svn.bb b/recipes/openmoko-projects/om-settings_svn.bb
index 19ff7cf830..13132c6bd1 100644
--- a/recipes/openmoko-projects/om-settings_svn.bb
+++ b/recipes/openmoko-projects/om-settings_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "Exposure all devices on neo1973"
DEPENDS = "python-etk python-edbus"
RDEPENDS = "python-etk python-re python-codecs python-edbus python-pyxdg"
+SRCREV = "74"
PV = "0.0.1+svnr${SRCPV}"
PR = "r3"
PE = "1"
diff --git a/recipes/openmoko-projects/openmoko-agpsui_svn.bb b/recipes/openmoko-projects/openmoko-agpsui_svn.bb
index b341d1b544..043a0dea69 100644
--- a/recipes/openmoko-projects/openmoko-agpsui_svn.bb
+++ b/recipes/openmoko-projects/openmoko-agpsui_svn.bb
@@ -3,6 +3,7 @@ HOMEPAGE = "http://openmoko-agpsui.projects.openmoko.org/"
SECTION = "openmoko/apps"
LICENSE = "GPL"
DEPENDS = "gtk+"
+SRCREV = "7"
PV = "0.1+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/openmoko-projects/pyefl-sudoku_svn.bb b/recipes/openmoko-projects/pyefl-sudoku_svn.bb
index c22220437e..0cb9191dae 100644
--- a/recipes/openmoko-projects/pyefl-sudoku_svn.bb
+++ b/recipes/openmoko-projects/pyefl-sudoku_svn.bb
@@ -4,6 +4,7 @@ SECTION = "openmoko/applications"
LICENSE = "GPL"
DEPENDS = "python-evas python-edje python-ecore"
RDEPENDS = "python-evas python-edje python-ecore"
+SRCREV = "49"
PV = "0.0.2+svnr${SRCPV}"
PR = "r3"
diff --git a/recipes/openmoko-system/ompower_svn.bb b/recipes/openmoko-system/ompower_svn.bb
index 28381741c3..8ff55f8f1a 100644
--- a/recipes/openmoko-system/ompower_svn.bb
+++ b/recipes/openmoko-system/ompower_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "Openmoko Power State handling daemon via DBUS"
LICENSE = "MIT BSD"
DEPENDS = "ecore edbus"
+SRCREV = "4727"
PV = "0.0.0+svnr${SRCPV}"
PR = "r4"
RDEPENDS = "initscripts"
diff --git a/recipes/openmoko-tools/app-restarter_svn.bb b/recipes/openmoko-tools/app-restarter_svn.bb
index 9809d5f88d..2ccec3e61c 100644
--- a/recipes/openmoko-tools/app-restarter_svn.bb
+++ b/recipes/openmoko-tools/app-restarter_svn.bb
@@ -4,6 +4,7 @@ DEPENDS = "virtual/libx11"
SRC_URI="svn://svn.openmoko.org/developers/zecke/;module=app_restarter;proto=http"
S = "${WORKDIR}/app_restarter"
+SRCREV = "4552"
PV = "1.0+svnr${SRCPV}"
PE = "2"
diff --git a/recipes/openmoko-tools/openmoko-set-root-password.bb b/recipes/openmoko-tools/openmoko-set-root-password.bb
deleted file mode 100644
index 7ea0de55ce..0000000000
--- a/recipes/openmoko-tools/openmoko-set-root-password.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-DESCRIPTION = "Set a root password for your Neo."
-SUMMARY = "On installation you will be prompted to set a root password. With \
-this password you can then log into the machine."
-LICENSE = "GPL"
-DEPENDS = "gtk+"
-
-SRC_URI = "svn://svn.openmoko.org/developers/zecke/;module=root-password;proto=http"
-S = "${WORKDIR}/root-password"
-PV = "1.0+svnr${SRCPV}"
-PE = "1"
-PR = "r1"
-
-do_compile () {
- cd ${S}
- oe_runmake
-}
-
-do_install() {
- install -d ${D}/${sbindir}
- install -m 0755 ${S}/root-password ${D}/${sbindir}/${PN}
-}
-
-pkg_postinst_${PN} () {
- # assume we use display 0
- DISPLAY=:0 ${sbindir}/${PN}
-}
diff --git a/recipes/openmoko-tools/openmoko-set-root-password_svn.bb b/recipes/openmoko-tools/openmoko-set-root-password_svn.bb
new file mode 100644
index 0000000000..fd5dc10484
--- /dev/null
+++ b/recipes/openmoko-tools/openmoko-set-root-password_svn.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "Set a root password for your Neo."
+SUMMARY = "On installation you will be prompted to set a root password. With \
+this password you can then log into the machine."
+LICENSE = "GPL"
+DEPENDS = "gtk+"
+
+SRC_URI = "svn://svn.openmoko.org/developers/zecke/;module=root-password;proto=http"
+S = "${WORKDIR}/root-password"
+SRCREV = "4590"
+PV = "1.0+svnr${SRCPV}"
+PE = "1"
+PR = "r1"
+
+do_compile () {
+ cd ${S}
+ oe_runmake
+}
+
+do_install() {
+ install -d ${D}/${sbindir}
+ install -m 0755 ${S}/root-password ${D}/${sbindir}/${PN}
+}
+
+pkg_postinst_${PN} () {
+ # assume we use display 0
+ DISPLAY=:0 ${sbindir}/${PN}
+}
diff --git a/recipes/openmoko-tools/openmoko-toolchain-scripts_svn.bb b/recipes/openmoko-tools/openmoko-toolchain-scripts_svn.bb
index 7762e61271..321a7d828f 100644
--- a/recipes/openmoko-tools/openmoko-toolchain-scripts_svn.bb
+++ b/recipes/openmoko-tools/openmoko-toolchain-scripts_svn.bb
@@ -1,5 +1,6 @@
DESCRIPTION = "Convenient scripts to be used with openmoko toolchain."
+SRCREV = "4913"
PV = "0.0+svnr${SRCPV}"
PE = "1"
PR = "r1"
diff --git a/recipes/openmoko2/libjana_svn.bb b/recipes/openmoko2/libjana_svn.bb
index a0b1b9557c..6ba17601c1 100644
--- a/recipes/openmoko2/libjana_svn.bb
+++ b/recipes/openmoko2/libjana_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "O-Hand Jana Library"
DEPENDS = "libmokojournal2"
DEPENDS = "gtk+ eds-dbus gconf"
+SRCREV = "749"
PV = "0.1.0+svnr${SRCPV}"
PR = "r5"
diff --git a/recipes/openmoko2/libmokogsmd2_svn.bb b/recipes/openmoko2/libmokogsmd2_svn.bb
index fec4d1a3f2..f25c9a0426 100644
--- a/recipes/openmoko2/libmokogsmd2_svn.bb
+++ b/recipes/openmoko2/libmokogsmd2_svn.bb
@@ -1,5 +1,6 @@
SECTION = "openmoko/libs"
DEPENDS = "libgsmd glib-2.0"
+SRCREV = "4334"
PV = "0.1.0+svnr${SRCPV}"
PR = "r2"
diff --git a/recipes/openmoko2/libmokojournal2_svn.bb b/recipes/openmoko2/libmokojournal2_svn.bb
index 32da95bf93..91e0bda6df 100644
--- a/recipes/openmoko2/libmokojournal2_svn.bb
+++ b/recipes/openmoko2/libmokojournal2_svn.bb
@@ -1,5 +1,6 @@
SECTION = "openmoko/libs"
DEPENDS = "eds-dbus"
+SRCREV = "3473"
PV = "0.1.0+svnr${SRCPV}"
PR = "r2"
diff --git a/recipes/openmoko2/libmokopanelui2_svn.bb b/recipes/openmoko2/libmokopanelui2_svn.bb
index 21a74053d3..39ba690712 100644
--- a/recipes/openmoko2/libmokopanelui2_svn.bb
+++ b/recipes/openmoko2/libmokopanelui2_svn.bb
@@ -1,5 +1,6 @@
SECTION = "openmoko/libs"
DEPENDS = "gtk+ matchbox-panel-2"
+SRCREV = "4568"
PV = "0.3.0+svnr${SRCPV}"
PR = "r0"
diff --git a/recipes/openmoko2/libmokoui2_svn.bb b/recipes/openmoko2/libmokoui2_svn.bb
index 176f775c8b..97f7eb16f0 100644
--- a/recipes/openmoko2/libmokoui2_svn.bb
+++ b/recipes/openmoko2/libmokoui2_svn.bb
@@ -1,6 +1,7 @@
SECTION = "openmoko/libs"
DEPENDS = "gtk+ python-pygtk"
+SRCREV = "4695"
PV = "0.1.0+svnr${SRCPV}"
PR = "r5"
diff --git a/recipes/openmoko2/moko-gtk-engine_svn.bb b/recipes/openmoko2/moko-gtk-engine_svn.bb
index 0ac4864f19..72c0c2350c 100644
--- a/recipes/openmoko2/moko-gtk-engine_svn.bb
+++ b/recipes/openmoko2/moko-gtk-engine_svn.bb
@@ -1,5 +1,6 @@
DESCRIPTION = "Moko GTK+ theme engine"
SECTION = "openmoko/libs"
+SRCREV = "4734"
PV = "0.1.0+svnr${SRCPV}"
PR = "r0"
diff --git a/recipes/openmoko2/neod_svn.bb b/recipes/openmoko2/neod_svn.bb
index e57bf08068..13fd9f0df9 100644
--- a/recipes/openmoko2/neod_svn.bb
+++ b/recipes/openmoko2/neod_svn.bb
@@ -4,6 +4,7 @@ SECTION = "openmoko/daemons"
DISTRO_APM ?= "apm"
DEPENDS = "gtk+ pulseaudio apmd"
RDEPENDS = "gpe-scap xrandr alsa-utils-amixer ${DISTRO_APM} dbus"
+SRCREV = "4617"
PV = "0.1.0+svnr${SRCPV}"
PR = "r7"
diff --git a/recipes/openmoko2/openmoko-alsa-scenarios.bb b/recipes/openmoko2/openmoko-alsa-scenarios.bb
deleted file mode 100644
index 72edfef1d1..0000000000
--- a/recipes/openmoko2/openmoko-alsa-scenarios.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-DESCRIPTION = "Package for the different scenarios used by Openmoko"
-SECTION = "openmoko/base"
-PV = "1.0+svnr${SRCPV}"
-PR = "r2"
-
-PROVIDES = "virtual/alsa-scenarios"
-
-COMPATIBLE_MACHINE = "(om-gta01|om-gta02)"
-
-SRC_URI = "svn://svn.openmoko.org/trunk/src/target/audio/;module=om-gta01;proto=http"
-SRC_URI_${MACHINE_ARCH} = "svn://svn.openmoko.org/trunk/src/target/audio/;module=${MACHINE_ARCH};proto=http"
-
-S = "${WORKDIR}/${MACHINE_ARCH}"
-
-do_install() {
- install -d ${D}${datadir}/openmoko/scenarios/
- install -m 644 ${S}/*.state ${D}${datadir}/openmoko/scenarios/
- install -d ${D}${sysconfdir}/
- install -m 644 ${S}/stereoout.state ${D}${sysconfdir}/asound.state
-}
-
-PACKAGE_ARCH_${PN} = "${MACHINE_ARCH}"
-
-FILES_${PN} += "${datadir}/openmoko"
diff --git a/recipes/openmoko2/openmoko-alsa-scenarios_svn.bb b/recipes/openmoko2/openmoko-alsa-scenarios_svn.bb
new file mode 100644
index 0000000000..315ea4d1b9
--- /dev/null
+++ b/recipes/openmoko2/openmoko-alsa-scenarios_svn.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Package for the different scenarios used by Openmoko"
+SECTION = "openmoko/base"
+SRCREV = "4732"
+PV = "1.0+svnr${SRCPV}"
+PR = "r2"
+
+PROVIDES = "virtual/alsa-scenarios"
+
+COMPATIBLE_MACHINE = "(om-gta01|om-gta02)"
+
+SRC_URI = "svn://svn.openmoko.org/trunk/src/target/audio/;module=om-gta01;proto=http"
+SRC_URI_${MACHINE_ARCH} = "svn://svn.openmoko.org/trunk/src/target/audio/;module=${MACHINE_ARCH};proto=http"
+
+S = "${WORKDIR}/${MACHINE_ARCH}"
+
+do_install() {
+ install -d ${D}${datadir}/openmoko/scenarios/
+ install -m 644 ${S}/*.state ${D}${datadir}/openmoko/scenarios/
+ install -d ${D}${sysconfdir}/
+ install -m 644 ${S}/stereoout.state ${D}${sysconfdir}/asound.state
+}
+
+PACKAGE_ARCH_${PN} = "${MACHINE_ARCH}"
+
+FILES_${PN} += "${datadir}/openmoko"
diff --git a/recipes/openmoko2/openmoko-appearance_svn.bb b/recipes/openmoko2/openmoko-appearance_svn.bb
index e277839f0a..850305b091 100644
--- a/recipes/openmoko2/openmoko-appearance_svn.bb
+++ b/recipes/openmoko2/openmoko-appearance_svn.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "The Openmoko Appearance Editor"
SECTION = "openmoko/pim"
DEPENDS = "libmokoui2 gconf gtk+"
RDEPENDS = "libedata-cal openmoko-today2-folders"
+SRCREV = "3262"
PV = "0.1.0+svnr${SRCPV}"
PR = "r0"
diff --git a/recipes/openmoko2/openmoko-appmanager2_svn.bb b/recipes/openmoko2/openmoko-appmanager2_svn.bb
index 6ea79a2476..86d00adee6 100644
--- a/recipes/openmoko2/openmoko-appmanager2_svn.bb
+++ b/recipes/openmoko2/openmoko-appmanager2_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "The Openmoko Application Manager"
SECTION = "openmoko/applications"
DEPENDS = "libmokoui2 libmokojournal2 startup-notification dbus-glib libice libsm opkg"
+SRCREV = "4530"
PV = "0.1.0+svnr${SRCPV}"
PR = "r2"
diff --git a/recipes/openmoko2/openmoko-browser2_svn.bb b/recipes/openmoko2/openmoko-browser2_svn.bb
index c1085a0167..6a0f5987d5 100644
--- a/recipes/openmoko2/openmoko-browser2_svn.bb
+++ b/recipes/openmoko2/openmoko-browser2_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "Om Webbrowser using webkit."
SECTION = "openmoko/apps"
DEPENDS += "intltool libmokoui2 check webkit-gtk"
+SRCREV = "4172"
PV = "0.0.1+svnr${SRCPV}"
PR = "r2"
diff --git a/recipes/openmoko2/openmoko-calculator2_svn.bb b/recipes/openmoko2/openmoko-calculator2_svn.bb
index 1719ac5138..f52bbe337c 100644
--- a/recipes/openmoko2/openmoko-calculator2_svn.bb
+++ b/recipes/openmoko2/openmoko-calculator2_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "Legacy Om calculator application."
SECTION = "openmoko/tools"
DEPENDS = "libmokoui2"
+SRCREV = "3655"
PV = "0.1.0+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/openmoko2/openmoko-common2_svn.bb b/recipes/openmoko2/openmoko-common2_svn.bb
index 63ec9825ad..5558e4f0a7 100644
--- a/recipes/openmoko2/openmoko-common2_svn.bb
+++ b/recipes/openmoko2/openmoko-common2_svn.bb
@@ -1,5 +1,6 @@
DESCRIPTION = "Common files for the Openmoko framework"
SECTION = "openmoko/base"
+SRCREV = "3259"
PV = "0.1.0+svnr${SRCPV}"
PR = "r0"
diff --git a/recipes/openmoko2/openmoko-contacts2_svn.bb b/recipes/openmoko2/openmoko-contacts2_svn.bb
index 407b59b5c2..82d3d85436 100644
--- a/recipes/openmoko2/openmoko-contacts2_svn.bb
+++ b/recipes/openmoko2/openmoko-contacts2_svn.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "Legacy Om address book application."
SECTION = "openmoko/pim"
DEPENDS = "libmokoui2 libmokojournal2 dbus-glib"
RDEPENDS = "libedata-book"
+SRCREV = "419"
PV = "0.1.0+svnr${SRCPV}"
PR = "r6"
diff --git a/recipes/openmoko2/openmoko-dates2_svn.bb b/recipes/openmoko2/openmoko-dates2_svn.bb
index 5953460a9c..6f6ce93483 100644
--- a/recipes/openmoko2/openmoko-dates2_svn.bb
+++ b/recipes/openmoko2/openmoko-dates2_svn.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "Legacy Om calendar application."
SECTION = "openmoko/pim"
DEPENDS = "libmokoui2 libmokojournal2 gtk+ libglade eds-dbus libjana"
RDEPENDS = "libedata-cal"
+SRCREV = "703"
PV = "0.1.0+svnr${SRCPV}"
PR = "r3"
diff --git a/recipes/openmoko2/openmoko-dialer2_svn.bb b/recipes/openmoko2/openmoko-dialer2_svn.bb
index 3aad78e2ef..49712a7f7c 100644
--- a/recipes/openmoko2/openmoko-dialer2_svn.bb
+++ b/recipes/openmoko2/openmoko-dialer2_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "Legacy Om dialer."
SECTION = "openmoko/pim"
DEPENDS = "libgsmd libjana libmokoui2 libmokojournal2 pulseaudio libnotify"
+SRCREV = "4364"
PV = "0.1.0+svnr${SRCPV}"
PR = "r9"
PE = "1"
diff --git a/recipes/openmoko2/openmoko-feedreader2_svn.bb b/recipes/openmoko2/openmoko-feedreader2_svn.bb
index 23ada3d255..550832ea14 100644
--- a/recipes/openmoko2/openmoko-feedreader2_svn.bb
+++ b/recipes/openmoko2/openmoko-feedreader2_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "The Openmoko Feed Reader"
SECTION = "openmoko/apps"
DEPENDS += "libmokoui2 libmrss check webkit-gtk"
+SRCREV = "3645"
PV = "0.0.1+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/openmoko2/openmoko-firststart2_svn.bb b/recipes/openmoko2/openmoko-firststart2_svn.bb
index a00bd9ed13..68c211070c 100644
--- a/recipes/openmoko2/openmoko-firststart2_svn.bb
+++ b/recipes/openmoko2/openmoko-firststart2_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "The Openmoko First Start Wizard"
SECTION = "openmoko/apps"
DEPENDS += "libmokoui2 libglade"
+SRCREV = "3158"
PV = "0.1.0+svnr${SRCPV}"
PR = "r0"
diff --git a/recipes/openmoko2/openmoko-icon-theme-standard2-qvga_svn.bb b/recipes/openmoko2/openmoko-icon-theme-standard2-qvga_svn.bb
index 1f75ce905b..4f37324252 100644
--- a/recipes/openmoko2/openmoko-icon-theme-standard2-qvga_svn.bb
+++ b/recipes/openmoko2/openmoko-icon-theme-standard2-qvga_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "Standard Gtk+ icon theme for the Openmoko framework, QVGA edition"
SECTION = "openmoko/base"
DEPENDS = "imagemagick-native librsvg-native"
+SRCREV = "4232"
PV = "0.1.0+svnr${SRCPV}"
PR = "r2"
diff --git a/recipes/openmoko2/openmoko-icon-theme-standard2_svn.bb b/recipes/openmoko2/openmoko-icon-theme-standard2_svn.bb
index 1066474278..c1844455b0 100644
--- a/recipes/openmoko2/openmoko-icon-theme-standard2_svn.bb
+++ b/recipes/openmoko2/openmoko-icon-theme-standard2_svn.bb
@@ -3,6 +3,7 @@ HOMEPAGE = "http://www.openmoko.org"
SECTION = "openmoko/base"
LICENSE = "GPL"
+SRCREV = "4232"
PV = "0.1.0+svnr${SRCPV}"
PR = "r3"
diff --git a/recipes/openmoko2/openmoko-mediaplayer2_svn.bb b/recipes/openmoko2/openmoko-mediaplayer2_svn.bb
index fa81c1c446..2fabcc926a 100644
--- a/recipes/openmoko2/openmoko-mediaplayer2_svn.bb
+++ b/recipes/openmoko2/openmoko-mediaplayer2_svn.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "Om application for playing media files."
SECTION = "openmoko/tools"
DEPENDS = "libmokoui2 expat gstreamer libspiff curl"
RDEPENDS = "gst-meta-audio gconf gst-plugin-alsa"
+SRCREV = "4750"
PV = "0.1.0+svnr${SRCPV}"
PR = "r6"
diff --git a/recipes/openmoko2/openmoko-messages2_svn.bb b/recipes/openmoko2/openmoko-messages2_svn.bb
index b996b88648..81a0d8ddf9 100644
--- a/recipes/openmoko2/openmoko-messages2_svn.bb
+++ b/recipes/openmoko2/openmoko-messages2_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "Legacy Om application for sms."
SECTION = "openmoko/pim"
DEPENDS = "libmokogsmd2 libmokoui2 libmokojournal2 libjana"
+SRCREV = "4340"
PV = "0.1.0+svnr${SRCPV}"
PR = "r2"
diff --git a/recipes/openmoko2/openmoko-sample2_svn.bb b/recipes/openmoko2/openmoko-sample2_svn.bb
index e2104fd086..d5eb61de58 100644
--- a/recipes/openmoko2/openmoko-sample2_svn.bb
+++ b/recipes/openmoko2/openmoko-sample2_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "The Openmoko Sample Project"
SECTION = "openmoko/applications"
DEPENDS = "libmokoui2 intltool gconf"
+SRCREV = "3537"
PV = "0.0.1+svnr${SRCPV}"
PR = "r0"
diff --git a/recipes/openmoko2/openmoko-sound-theme-standard2_svn.bb b/recipes/openmoko2/openmoko-sound-theme-standard2_svn.bb
index 4a3d8c600f..01385f56fe 100644
--- a/recipes/openmoko2/openmoko-sound-theme-standard2_svn.bb
+++ b/recipes/openmoko2/openmoko-sound-theme-standard2_svn.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "Standard sound theme for the Openmoko framework"
SECTION = "openmoko/base"
RREPLACES = "openmoko-sound-theme-standard"
RPROVIDES = "openmoko-sound-theme-standard"
+SRCREV = "4271"
PV = "0.1+svnr${SRCPV}"
PR = "r3"
diff --git a/recipes/openmoko2/openmoko-tasks2_svn.bb b/recipes/openmoko2/openmoko-tasks2_svn.bb
index 0ad5b601e7..934c8d88bd 100644
--- a/recipes/openmoko2/openmoko-tasks2_svn.bb
+++ b/recipes/openmoko2/openmoko-tasks2_svn.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "The Openmoko Agenda"
SECTION = "openmoko/pim"
DEPENDS = "dbus-glib eds-dbus libmokoui2"
RDEPENDS = "libedata-cal"
+SRCREV = "404"
PV = "0.1.0+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/openmoko2/openmoko-theme-standard2-qvga_svn.bb b/recipes/openmoko2/openmoko-theme-standard2-qvga_svn.bb
index 39ced428ea..a85ad61a3f 100644
--- a/recipes/openmoko2/openmoko-theme-standard2-qvga_svn.bb
+++ b/recipes/openmoko2/openmoko-theme-standard2-qvga_svn.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "Standard Gtk+ theme for the Openmoko framework, QVGA edition"
SECTION = "openmoko/base"
RCONFLICTS = "openmoko-theme-standard"
RPROVIDES = "openmoko-theme-standard-2"
+SRCREV = "3425"
PV = "0.1.1+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/openmoko2/openmoko-theme-standard2_svn.bb b/recipes/openmoko2/openmoko-theme-standard2_svn.bb
index 091391474d..cc73cc5934 100644
--- a/recipes/openmoko2/openmoko-theme-standard2_svn.bb
+++ b/recipes/openmoko2/openmoko-theme-standard2_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "Standard Gtk+ theme for the Openmoko framework"
SECTION = "openmoko/base"
RCONFLICTS = "openmoko-theme-standard"
+SRCREV = "4338"
PV = "0.1.1+svnr${SRCPV}"
PR = "r5"
diff --git a/recipes/openmoko2/openmoko-today2-folders_svn.bb b/recipes/openmoko2/openmoko-today2-folders_svn.bb
index 3137012a97..d2badfb560 100644
--- a/recipes/openmoko2/openmoko-today2-folders_svn.bb
+++ b/recipes/openmoko2/openmoko-today2-folders_svn.bb
@@ -1,5 +1,6 @@
DESCRIPTION = "The Openmoko Today2 vfolder files"
SECTION = "openmoko/misc"
+SRCREV = "3704"
PV = "0.1.0+svnr${SRCPV}"
PR = "r3"
RCONFLICTS_${PN} = "matchbox-common"
diff --git a/recipes/openmoko2/openmoko-today2_svn.bb b/recipes/openmoko2/openmoko-today2_svn.bb
index 3466659540..2ff5b90e3c 100644
--- a/recipes/openmoko2/openmoko-today2_svn.bb
+++ b/recipes/openmoko2/openmoko-today2_svn.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "The Openmoko Application Launcher"
SECTION = "openmoko/pim"
DEPENDS = "libmokoui2 libmokojournal2 libjana startup-notification dbus-glib libice libsm"
RDEPENDS = "libedata-cal openmoko-today2-folders"
+SRCREV = "4168"
PV = "0.1.0+svnr${SRCPV}"
PR = "r2"
diff --git a/recipes/openmoko2/openmoko-worldclock2_svn.bb b/recipes/openmoko2/openmoko-worldclock2_svn.bb
index 186dce72fa..fad55a97c4 100644
--- a/recipes/openmoko2/openmoko-worldclock2_svn.bb
+++ b/recipes/openmoko2/openmoko-worldclock2_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "A World-Clock for Openmoko"
SECTION = "openmoko/tools"
DEPENDS = "libmokoui2 libjana"
+SRCREV = "3365"
PV = "0.1.0+svnr${SRCPV}"
inherit openmoko2
diff --git a/recipes/openssh/openssh-5.2p1/shr/sshd_config b/recipes/openssh/openssh-5.2p1/shr/sshd_config
index a6ae07b5c8..3d36cdf601 100644
--- a/recipes/openssh/openssh-5.2p1/shr/sshd_config
+++ b/recipes/openssh/openssh-5.2p1/shr/sshd_config
@@ -59,7 +59,7 @@ Protocol 2
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
-#PermitEmptyPasswords no
+PermitEmptyPasswords yes
# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
diff --git a/recipes/openssl/openssl-0.9.8j/debian.patch b/recipes/openssl/openssl-0.9.8j/debian.patch
deleted file mode 100644
index 54eec41cc1..0000000000
--- a/recipes/openssl/openssl-0.9.8j/debian.patch
+++ /dev/null
@@ -1,561 +0,0 @@
-Index: openssl-0.9.8j/Makefile
-===================================================================
---- openssl-0.9.8j.orig/Makefile 2009-01-07 12:57:01.000000000 +0100
-+++ openssl-0.9.8j/Makefile 2009-01-12 14:59:15.000000000 +0100
-@@ -26,10 +26,10 @@
- # for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
- # Normally it is left empty.
- INSTALL_PREFIX=
--INSTALLTOP=/usr/local/ssl
-+INSTALLTOP=/usr
-
- # Do not edit this manually. Use Configure --openssldir=DIR do change this!
--OPENSSLDIR=/usr/local/ssl
-+OPENSSLDIR=/usr/lib/ssl
-
- # NO_IDEA - Define to build without the IDEA algorithm
- # NO_RC4 - Define to build without the RC4 algorithm
-@@ -154,10 +154,11 @@
-
- MAKEFILE= Makefile
-
--MANDIR=$(OPENSSLDIR)/man
-+MANDIR=/usr/share/man
- MAN1=1
- MAN3=3
--MANSUFFIX=
-+MANSUFFIX=ssl
-+MANSECTION=SSL
- SHELL=/bin/sh
-
- TOP= .
-@@ -169,8 +170,8 @@
- SHARED_SSL=libssl$(SHLIB_EXT)
- SHARED_FIPS=
- SHARED_LIBS=
--SHARED_LIBS_LINK_EXTS=
--SHARED_LDFLAGS=
-+SHARED_LIBS_LINK_EXTS=.so
-+SHARED_LDFLAGS=-m64 -Wl,--version-script=openssl.ld
-
- GENERAL= Makefile
- BASENAME= openssl
-@@ -445,7 +446,8 @@
- echo 'Description: OpenSSL cryptography library'; \
- echo 'Version: '$(VERSION); \
- echo 'Requires: '; \
-- echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
-+ echo 'Libs: -L$${libdir} -lcrypto'; \
-+ echo 'Libs.private: $(EX_LIBS)'; \
- echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
-
- libssl.pc: Makefile
-@@ -458,7 +460,8 @@
- echo 'Description: Secure Sockets Layer and cryptography libraries'; \
- echo 'Version: '$(VERSION); \
- echo 'Requires: '; \
-- echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
-+ echo 'Libs: -L$${libdir} -lssl'; \
-+ echo 'Libs.private: -lcrypto $(EX_LIBS)'; \
- echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
-
- openssl.pc: Makefile
-@@ -471,7 +474,8 @@
- echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
- echo 'Version: '$(VERSION); \
- echo 'Requires: '; \
-- echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
-+ echo 'Libs: -L$${libdir} -lssl -lcrypto'; \
-+ echo 'Libs.private: $(EX_LIBS)'; \
- echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
-
- Makefile: Makefile.org Configure config
-@@ -615,7 +619,7 @@
- install_sw:
- @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
- $(INSTALL_PREFIX)$(INSTALLTOP)/lib \
-- $(INSTALL_PREFIX)$(INSTALLTOP)/lib/engines \
-+ $(INSTALL_PREFIX)$(INSTALLTOP)/lib/ssl/engines \
- $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig \
- $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
- $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
-@@ -693,7 +697,7 @@
- echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
- (cd `$(PERL) util/dirname.pl $$i`; \
- sh -c "$$pod2man \
-- --section=$$sec --center=OpenSSL \
-+ --section=$${sec}$(MANSECTION) --center=OpenSSL \
- --release=$(VERSION) `basename $$i`") \
- > $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
- $(PERL) util/extract-names.pl < $$i | \
-@@ -710,7 +714,7 @@
- echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
- (cd `$(PERL) util/dirname.pl $$i`; \
- sh -c "$$pod2man \
-- --section=$$sec --center=OpenSSL \
-+ --section=$${sec}$(MANSECTION) --center=OpenSSL \
- --release=$(VERSION) `basename $$i`") \
- > $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
- $(PERL) util/extract-names.pl < $$i | \
-Index: openssl-0.9.8j/Configure
-===================================================================
---- openssl-0.9.8j.orig/Configure 2009-01-12 14:57:20.000000000 +0100
-+++ openssl-0.9.8j/Configure 2009-01-12 14:59:15.000000000 +0100
-@@ -1,4 +1,4 @@
--:
-+#!/usr/local/bin/perl
- eval 'exec perl -S $0 ${1+"$@"}'
- if $running_under_some_shell;
- ##
-@@ -315,6 +315,47 @@
- "osf1-alpha-cc", "cc:-std1 -tune host -O4 -readonly_strings::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${no_asm}:dlfcn:alpha-osf1-shared:::.so",
- "tru64-alpha-cc", "cc:-std1 -tune host -fast -readonly_strings::-pthread:::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${no_asm}:dlfcn:alpha-osf1-shared::-msym:.so",
-
-+# Debian GNU/* (various architectures)
-+"debian-alpha","gcc:-DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-alpha-ev4","gcc:-DTERMIO -O3 -Wa,--noexecstack -mcpu=ev4 -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-alpha-ev5","gcc:-DTERMIO -O3 -Wa,--noexecstack -mcpu=ev5 -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-arm","gcc:-DL_ENDIAN -DTERMIO -O2 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG DES_RISC1::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-armeb","gcc:-DB_ENDIAN -DTERMIO -O2 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG DES_RISC1::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-armel","gcc:-DL_ENDIAN -DTERMIO -O2 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG DES_RISC1::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+#"debian-amd64","gcc:-DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-amd64", "gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-kfreebsd-amd64","gcc:-m64 -DL_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+#"debian-freebsd-alpha","gcc:-DTERMIOS -O -Wa,--noexecstack -fomit-frame-pointer::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC2::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-kfreebsd-i386","gcc:-DL_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -m486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-hppa","gcc:-DB_ENDIAN -DTERMIO -O2 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG MD2_CHAR RC4_INDEX::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-hurd-i386","gcc:-DL_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -m486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-ia64","gcc:-DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+#"debian-i386","gcc:-DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -fomit-frame-pointer -m486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC",
-+"debian-i386","gcc:-DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-i386-i486","gcc:-DL_ENDIAN -DTERMIO -O3 -march=i486 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-i386-i586","gcc:-DL_ENDIAN -DTERMIO -O3 -march=i586 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-i386-i686/cmov","gcc:-DL_ENDIAN -DTERMIO -O3 -march=i686 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-m68k","gcc:-DB_ENDIAN -DTERMIO -O2 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG MD2_CHAR RC4_INDEX::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-mips", "gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-mipsel", "gcc:-DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-netbsd-i386", "gcc:-DL_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -m486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-netbsd-m68k", "gcc:-DB_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -Wall::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL::::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-netbsd-sparc", "gcc:-DB_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -mv8 -Wall::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL::::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-openbsd-alpha","gcc:-DTERMIOS -O3 -Wa,--noexecstack -g::(unknown):::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2::::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-openbsd-i386", "gcc:-DL_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -m486::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-openbsd-mips","gcc:-O2 -Wa,--noexecstack -g -DL_ENDIAN::(unknown)::BN_LLONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC2 DES_PTR BF_PTR:::::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-powerpc","gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG DES_UNROLL DES_RISC2 DES_PTR MD2_CHAR RC4_INDEX::linux_ppc32.o::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-ppc64","gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL::linux_ppc64.o::::::::::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-s390","gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-sh3", "gcc:-DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-sh4", "gcc:-DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-sh3eb", "gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-sh4eb", "gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-m32r","gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-sparc","gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-sparc-v8","gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -mcpu=v8 -g -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-sparc-v9","gcc:-DB_ENDIAN -DTERMIO -O3 -mcpu=v9 -Wa,--noexecstack -Wa,-Av8plus -g -Wall -DULTRASPARC -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::sparcv8plus.o:des_enc-sparc.o fcrypt_b.o:::md5-sparcv8plus.o::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+
- ####
- #### Variety of LINUX:-)
- ####
-@@ -493,7 +534,7 @@
- # Cygwin
- "Cygwin-pre1.3", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown):CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",
- "Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall:::CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_coff_asm}:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
--"debug-Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:::CYGWIN32:::${no_asm}:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
-+-"debug-Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:::CYGWIN32:::${no_asm}:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
-
- # NetWare from David Ward (dsward@novell.com)
- # requires either MetroWerks NLM development tools, or gcc / nlmconv
-@@ -1436,6 +1477,8 @@
- $shlib_minor=$2;
- }
-
-+$shared_ldflag .= " -Wl,--version-script=openssl.ld";
-+
- open(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n";
- unlink("$Makefile.new") || die "unable to remove old $Makefile.new:$!\n" if -e "$Makefile.new";
- open(OUT,">$Makefile.new") || die "unable to create $Makefile.new:$!\n";
-@@ -1523,7 +1566,8 @@
- elsif ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*\.[^\.]*$/)
- {
- my $sotmp = $1;
-- s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp.\$(SHLIB_MAJOR) .s$sotmp/;
-+# s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp.\$(SHLIB_MAJOR) .s$sotmp/;
-+ s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp/;
- }
- elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.[^\.]*\.dylib$/)
- {
-@@ -1645,7 +1689,7 @@
- if (/^#define\s+OPENSSLDIR/)
- { print OUT "#define OPENSSLDIR \"$openssldir\"\n"; }
- elsif (/^#define\s+ENGINESDIR/)
-- { print OUT "#define ENGINESDIR \"$prefix/lib/engines\"\n"; }
-+ { print OUT "#define ENGINESDIR \"$prefix/lib/ssl/engines\"\n"; }
- elsif (/^#((define)|(undef))\s+OPENSSL_EXPORT_VAR_AS_FUNCTION/)
- { printf OUT "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION\n"
- if $export_var_as_fn;
-Index: openssl-0.9.8j/config
-===================================================================
---- openssl-0.9.8j.orig/config 2007-08-01 13:21:35.000000000 +0200
-+++ openssl-0.9.8j/config 2009-01-12 14:59:15.000000000 +0100
-@@ -162,8 +162,8 @@
- echo "${MACHINE}-whatever-linux1"; exit 0
- ;;
-
-- GNU*)
-- echo "hurd-x86"; exit 0;
-+ GNU:*|GNU/*:*)
-+ echo "${MACHINE}-gnuish"; exit 0;
- ;;
-
- LynxOS:*)
-Index: openssl-0.9.8j/Makefile.org
-===================================================================
---- openssl-0.9.8j.orig/Makefile.org 2009-01-12 14:56:55.000000000 +0100
-+++ openssl-0.9.8j/Makefile.org 2009-01-12 14:59:15.000000000 +0100
-@@ -152,10 +152,11 @@
-
- MAKEFILE= Makefile
-
--MANDIR=$(OPENSSLDIR)/man
-+MANDIR=/usr/share/man
- MAN1=1
- MAN3=3
--MANSUFFIX=
-+MANSUFFIX=ssl
-+MANSECTION=SSL
- SHELL=/bin/sh
-
- TOP= .
-@@ -443,7 +444,8 @@
- echo 'Description: OpenSSL cryptography library'; \
- echo 'Version: '$(VERSION); \
- echo 'Requires: '; \
-- echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
-+ echo 'Libs: -L$${libdir} -lcrypto'; \
-+ echo 'Libs.private: $(EX_LIBS)'; \
- echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
-
- libssl.pc: Makefile
-@@ -456,7 +458,8 @@
- echo 'Description: Secure Sockets Layer and cryptography libraries'; \
- echo 'Version: '$(VERSION); \
- echo 'Requires: '; \
-- echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
-+ echo 'Libs: -L$${libdir} -lssl'; \
-+ echo 'Libs.private: -lcrypto $(EX_LIBS)'; \
- echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
-
- openssl.pc: Makefile
-@@ -469,7 +472,8 @@
- echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
- echo 'Version: '$(VERSION); \
- echo 'Requires: '; \
-- echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
-+ echo 'Libs: -L$${libdir} -lssl -lcrypto'; \
-+ echo 'Libs.private: $(EX_LIBS)'; \
- echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
-
- Makefile: Makefile.org Configure config
-@@ -613,7 +617,7 @@
- install_sw:
- @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
- $(INSTALL_PREFIX)$(INSTALLTOP)/lib \
-- $(INSTALL_PREFIX)$(INSTALLTOP)/lib/engines \
-+ $(INSTALL_PREFIX)$(INSTALLTOP)/lib/ssl/engines \
- $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig \
- $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
- $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
-@@ -691,7 +695,7 @@
- echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
- (cd `$(PERL) util/dirname.pl $$i`; \
- sh -c "$$pod2man \
-- --section=$$sec --center=OpenSSL \
-+ --section=$${sec}$(MANSECTION) --center=OpenSSL \
- --release=$(VERSION) `basename $$i`") \
- > $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
- $(PERL) util/extract-names.pl < $$i | \
-@@ -708,7 +712,7 @@
- echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
- (cd `$(PERL) util/dirname.pl $$i`; \
- sh -c "$$pod2man \
-- --section=$$sec --center=OpenSSL \
-+ --section=$${sec}$(MANSECTION) --center=OpenSSL \
- --release=$(VERSION) `basename $$i`") \
- > $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
- $(PERL) util/extract-names.pl < $$i | \
-Index: openssl-0.9.8j/openssl.ld
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ openssl-0.9.8j/openssl.ld 2009-01-12 14:59:15.000000000 +0100
-@@ -0,0 +1,5 @@
-+OPENSSL_0.9.8 {
-+ global:
-+ *;
-+};
-+
-Index: openssl-0.9.8j/apps/s_time.c
-===================================================================
---- openssl-0.9.8j.orig/apps/s_time.c 2003-12-27 15:40:17.000000000 +0100
-+++ openssl-0.9.8j/apps/s_time.c 2009-01-12 14:59:15.000000000 +0100
-@@ -117,6 +117,7 @@
-
- /* The following if from times(3) man page. It may need to be changed
- */
-+#undef HZ
- #ifndef HZ
- # ifdef _SC_CLK_TCK
- # define HZ ((double)sysconf(_SC_CLK_TCK))
-Index: openssl-0.9.8j/engines/openssl.ld
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ openssl-0.9.8j/engines/openssl.ld 2009-01-12 14:59:15.000000000 +0100
-@@ -0,0 +1,5 @@
-+OPENSSL_0.9.8 {
-+ global:
-+ *;
-+};
-+
-Index: openssl-0.9.8j/doc/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ openssl-0.9.8j/doc/Makefile 2009-01-12 14:59:15.000000000 +0100
-@@ -0,0 +1,40 @@
-+VERSION =
-+
-+#PODS = $(wildcard *.pod)
-+#MANS = $(addsuffix .man, $(basename $(PODS)))
-+
-+MANS = openssl.1 ssl.3 crypto.3
-+
-+P2M = pod2man --center='OpenSSL Documentation' --release="OpenSSL $(VERSION)"
-+
-+all: manpages
-+
-+.PHONY: manpages
-+
-+manpages: openssl.1 crypto.3 ssl.3
-+
-+openssl.1:
-+ $(P2M) --section=1 openssl.pod > openssl.1
-+
-+crypto.3:
-+ $(P2M) --section=3 crypto.pod > crypto.3
-+
-+ssl.3:
-+ $(P2M) --section=3 ssl.pod > ssl.3
-+
-+.PHONY: install
-+install:
-+ mkdir -p $(INSTALL_PREFIX)$(INSTALLTOP)/share/man/man1
-+ mkdir -p $(INSTALL_PREFIX)$(INSTALLTOP)/share/man/man3
-+ install -m 644 -p openssl.1 $(INSTALL_PREFIX)$(INSTALLTOP)/share/man/man1
-+ install -m 644 -p crypto.3 $(INSTALL_PREFIX)$(INSTALLTOP)/share/man/man3
-+ install -m 644 -p ssl.3 $(INSTALL_PREFIX)$(INSTALLTOP)/share/man/man3
-+ rm -f $(MANS)
-+
-+.PHONY: clean
-+clean:
-+ rm -f $(MANS)
-+
-+.PHONY: realclean
-+realclean:
-+ -$(MAKE) clean
-Index: openssl-0.9.8j/doc/apps/c_rehash.pod
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ openssl-0.9.8j/doc/apps/c_rehash.pod 2009-01-12 14:59:15.000000000 +0100
-@@ -0,0 +1,55 @@
-+
-+=pod
-+
-+=head1 NAME
-+
-+c_rehash - Create symbolic links to files named by the hash values
-+
-+=head1 SYNOPSIS
-+
-+B<c_rehash>
-+[directory] ...
-+
-+=head1 DESCRIPTION
-+
-+c_rehash scans directories and takes a hash value of each .pem and .crt file in the directory. It then creates symbolic links for each of the files named by the hash value. This is useful as many programs require directories to be set up like this in order to find the certificates they require.
-+
-+If any directories are named on the command line then these directories are processed in turn. If not then and the environment variable SSL_CERT_DIR is defined then that is consulted. This variable should be a colon (:) separated list of directories, all of which will be processed. If neither of these conditions are true then /usr/lib/ssl/certs is processed.
-+
-+For each directory that is to be processed he user must have write permissions on the directory, if they do not then nothing will be printed for that directory.
-+
-+Note that this program deletes all the symbolic links that look like ones that it creates before processing a directory. Beware that if you run the program on a directory that contains symbolic links for other purposes that are named in the same format as those created by this program they will be lost.
-+
-+The hashes for certificate files are of the form <hash>.<n> where n is an integer. If the hash value already exists then n will be incremented, unless the file is a duplicate. Duplicates are detected using the fingerprint of the certificate. A warning will be printed if a duplicate is detected. The hashes for CRL files are of the form <hash>.r<n> and have the same behavior.
-+
-+The program will also warn if there are files with extension .pem which are not certificate or CRL files.
-+
-+The program uses the openssl program to compute the hashes and fingerprints. It expects the executable to be named openssl and be on the PATH, or in the /usr/lib/ssl/bin directory. If the OPENSSL environment variable is defined then this is used instead as the executable that provides the hashes and fingerprints. When called as $OPENSSL x509 -hash -fingerprint -noout -in $file it must output the hash of $file on the first line followed by the fingerprint on the second line, optionally prefixed with some text and an equals sign (=).
-+
-+=head1 OPTIONS
-+
-+None
-+
-+=head1 ENVIRONMENT
-+
-+=over 4
-+
-+=item B<OPENSSL>
-+
-+The name (and path) of an executable to use to generate hashes and fingerprints (see above).
-+
-+=item B<SSL_CERT_DIR>
-+
-+Colon separated list of directories to operate on. Ignored if directories are listed on the command line.
-+
-+=head1 SEE ALSO
-+
-+L<openssl(1)|openssl(1)>, L<x509(1)|x509(1)>
-+
-+=back
-+
-+=head1 BUGS
-+
-+No known bugs
-+
-+=cut
-Index: openssl-0.9.8j/crypto/Makefile
-===================================================================
---- openssl-0.9.8j.orig/crypto/Makefile 2009-01-12 14:56:55.000000000 +0100
-+++ openssl-0.9.8j/crypto/Makefile 2009-01-12 14:59:15.000000000 +0100
-@@ -57,7 +57,7 @@
- echo " #define DATE \"`LC_ALL=C LC_TIME=C date`\""; \
- echo '#endif' ) >buildinf.h
-
--x86cpuid-elf.s: x86cpuid.pl perlasm/x86asm.pl
-+x86cpuid-elf.S: x86cpuid.pl perlasm/x86asm.pl
- $(PERL) x86cpuid.pl elf $(CFLAGS) $(PROCESSOR) > $@
- x86cpuid-cof.s: x86cpuid.pl perlasm/x86asm.pl
- $(PERL) x86cpuid.pl coff $(CFLAGS) $(PROCESSOR) > $@
-@@ -70,7 +70,7 @@
- uplink-cof.s: ../ms/uplink.pl
- $(PERL) ../ms/uplink.pl coff > $@
-
--x86_64cpuid.s: x86_64cpuid.pl
-+x86_64cpuid.S: x86_64cpuid.pl
- $(PERL) x86_64cpuid.pl $@
- ia64cpuid.s: ia64cpuid.S
- $(CC) $(CFLAGS) -E ia64cpuid.S > $@
-Index: openssl-0.9.8j/crypto/opensslconf.h
-===================================================================
---- openssl-0.9.8j.orig/crypto/opensslconf.h 2009-01-07 12:57:01.000000000 +0100
-+++ openssl-0.9.8j/crypto/opensslconf.h 2009-01-12 14:59:15.000000000 +0100
-@@ -20,6 +20,9 @@
- #ifndef OPENSSL_NO_JPAKE
- # define OPENSSL_NO_JPAKE
- #endif
-+#ifndef OPENSSL_NO_IDEA
-+# define OPENSSL_NO_IDEA
-+#endif
- #ifndef OPENSSL_NO_KRB5
- # define OPENSSL_NO_KRB5
- #endif
-@@ -62,6 +65,9 @@
- # if defined(OPENSSL_NO_JPAKE) && !defined(NO_JPAKE)
- # define NO_JPAKE
- # endif
-+# if defined(OPENSSL_NO_IDEA) && !defined(NO_IDEA)
-+# define NO_IDEA
-+# endif
- # if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)
- # define NO_KRB5
- # endif
-@@ -101,8 +107,8 @@
-
- #if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
- #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
--#define ENGINESDIR "/usr/local/ssl/lib/engines"
--#define OPENSSLDIR "/usr/local/ssl"
-+#define ENGINESDIR "/usr/lib/ssl/engines"
-+#define OPENSSLDIR "/usr/lib/ssl"
- #endif
- #endif
-
-@@ -133,14 +139,14 @@
- * - Intel P6 because partial register stalls are very expensive;
- * - elder Alpha because it lacks byte load/store instructions;
- */
--#define RC4_INT unsigned int
-+#define RC4_INT unsigned char
- #endif
- #if !defined(RC4_CHUNK)
- /*
- * This enables code handling data aligned at natural CPU word
- * boundary. See crypto/rc4/rc4_enc.c for further details.
- */
--#undef RC4_CHUNK
-+#define RC4_CHUNK unsigned long
- #endif
- #endif
-
-@@ -148,7 +154,7 @@
- /* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
- * %20 speed up (longs are 8 bytes, int's are 4). */
- #ifndef DES_LONG
--#define DES_LONG unsigned long
-+#define DES_LONG unsigned int
- #endif
- #endif
-
-@@ -162,9 +168,9 @@
- /* The prime number generation stuff may not work when
- * EIGHT_BIT but I don't care since I've only used this mode
- * for debuging the bignum libraries */
--#undef SIXTY_FOUR_BIT_LONG
-+#define SIXTY_FOUR_BIT_LONG
- #undef SIXTY_FOUR_BIT
--#define THIRTY_TWO_BIT
-+#undef THIRTY_TWO_BIT
- #undef SIXTEEN_BIT
- #undef EIGHT_BIT
- #endif
-@@ -178,7 +184,7 @@
-
- #if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
- #define CONFIG_HEADER_BF_LOCL_H
--#undef BF_PTR
-+#define BF_PTR2
- #endif /* HEADER_BF_LOCL_H */
-
- #if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
-@@ -208,7 +214,7 @@
- /* Unroll the inner loop, this sometimes helps, sometimes hinders.
- * Very mucy CPU dependant */
- #ifndef DES_UNROLL
--#undef DES_UNROLL
-+#define DES_UNROLL
- #endif
-
- /* These default values were supplied by
-Index: openssl-0.9.8j/crypto/sha/sha.h
-===================================================================
---- openssl-0.9.8j.orig/crypto/sha/sha.h 2008-09-16 12:47:28.000000000 +0200
-+++ openssl-0.9.8j/crypto/sha/sha.h 2009-01-12 14:59:15.000000000 +0100
-@@ -59,6 +59,7 @@
- #ifndef HEADER_SHA_H
- #define HEADER_SHA_H
-
-+#include <stddef.h>
- #include <openssl/e_os2.h>
- #include <stddef.h>
-
-Index: openssl-0.9.8j/crypto/pkcs7/pk7_mime.c
-===================================================================
---- openssl-0.9.8j.orig/crypto/pkcs7/pk7_mime.c 2008-11-05 19:36:48.000000000 +0100
-+++ openssl-0.9.8j/crypto/pkcs7/pk7_mime.c 2009-01-12 14:59:15.000000000 +0100
-@@ -335,9 +335,9 @@
-
- if(strcmp(hdr->value, "application/x-pkcs7-signature") &&
- strcmp(hdr->value, "application/pkcs7-signature")) {
-- sk_MIME_HEADER_pop_free(headers, mime_hdr_free);
- PKCS7err(PKCS7_F_SMIME_READ_PKCS7,PKCS7_R_SIG_INVALID_MIME_TYPE);
- ERR_add_error_data(2, "type: ", hdr->value);
-+ sk_MIME_HEADER_pop_free(headers, mime_hdr_free);
- sk_BIO_pop_free(parts, BIO_vfree);
- return NULL;
- }
diff --git a/recipes/openssl/openssl-0.9.8j/shared-libs.patch b/recipes/openssl/openssl-0.9.8j/shared-libs.patch
deleted file mode 100644
index 08b0c7594b..0000000000
--- a/recipes/openssl/openssl-0.9.8j/shared-libs.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-Index: openssl-0.9.8j/crypto/Makefile
-===================================================================
---- openssl-0.9.8j.orig/crypto/Makefile 2008-09-17 19:10:55.000000000 +0200
-+++ openssl-0.9.8j/crypto/Makefile 2009-01-12 18:25:23.000000000 +0100
-@@ -103,7 +103,7 @@
-
- shared: buildinf.h lib subdirs
- if [ -n "$(SHARED_LIBS)" ]; then \
-- (cd ..; $(MAKE) $(SHARED_LIB)); \
-+ (cd ..; $(MAKE) -e $(SHARED_LIB)); \
- fi
-
- libs:
-Index: openssl-0.9.8j/Makefile.org
-===================================================================
---- openssl-0.9.8j.orig/Makefile.org 2008-12-30 14:26:26.000000000 +0100
-+++ openssl-0.9.8j/Makefile.org 2009-01-12 18:25:55.000000000 +0100
-@@ -353,11 +353,11 @@
- @if [ "$(SHLIB_TARGET)" != "" ]; then \
- if [ "$(FIPSCANLIB)" = "libfips" ]; then \
- $(ARD) libcrypto.a fipscanister.o ; \
-- $(MAKE) SHLIBDIRS='crypto' SHLIBDEPS='-lfips' build-shared; \
-+ $(MAKE) -e SHLIBDIRS='crypto' SHLIBDEPS='-lfips' build-shared; \
- $(AR) libcrypto.a fips/fipscanister.o ; \
- else \
- if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
-- FIPSLD_CC=$(CC); CC=fips/fipsld; \
-+ FIPSLD_CC="$(CC)"; CC=fips/fipsld; \
- export CC FIPSLD_CC; \
- fi; \
- $(MAKE) -e SHLIBDIRS='crypto' build-shared; \
-@@ -371,7 +371,7 @@
- @if [ "$(SHLIB_TARGET)" != "" ]; then \
- shlibdeps=-lcrypto; \
- [ "$(FIPSCANLIB)" = "libfips" ] && shlibdeps="$$shlibdeps -lfips"; \
-- $(MAKE) SHLIBDIRS=ssl SHLIBDEPS="$$shlibdeps" build-shared; \
-+ $(MAKE) -e SHLIBDIRS=ssl SHLIBDEPS="$$shlibdeps" build-shared; \
- else \
- echo "There's no support for shared libraries on this platform" >&2 ; \
- exit 1; \
-@@ -380,7 +380,7 @@
- fips/fipscanister.o: build_fips
- libfips$(SHLIB_EXT): fips/fipscanister.o
- @if [ "$(SHLIB_TARGET)" != "" ]; then \
-- FIPSLD_CC=$(CC); CC=fips/fipsld; export CC FIPSLD_CC; \
-+ FIPSLD_CC="$(CC)"; CC=fips/fipsld; export CC FIPSLD_CC; \
- $(MAKE) -f Makefile.shared -e $(BUILDENV) \
- CC=$${CC} LIBNAME=fips THIS=$@ \
- LIBEXTRAS=fips/fipscanister.o \
-Index: openssl-0.9.8j/ssl/Makefile
-===================================================================
---- openssl-0.9.8j.orig/ssl/Makefile 2008-09-17 19:11:09.000000000 +0200
-+++ openssl-0.9.8j/ssl/Makefile 2009-01-12 18:25:02.000000000 +0100
-@@ -62,7 +62,7 @@
-
- shared: lib
- if [ -n "$(SHARED_LIBS)" ]; then \
-- (cd ..; $(MAKE) $(SHARED_LIB)); \
-+ (cd ..; $(MAKE) -e $(SHARED_LIB)); \
- fi
-
- files:
-Index: openssl-0.9.8j/apps/Makefile
-===================================================================
---- openssl-0.9.8j.orig/apps/Makefile 2008-11-19 17:03:48.000000000 +0100
-+++ openssl-0.9.8j/apps/Makefile 2009-01-12 18:26:33.000000000 +0100
-@@ -153,12 +153,12 @@
- shlib_target=; if [ -n "$(SHARED_LIBS)" ]; then \
- shlib_target="$(SHLIB_TARGET)"; \
- elif [ -n "$(FIPSCANLIB)" ]; then \
-- FIPSLD_CC=$(CC); CC=$(TOP)/fips/fipsld; export CC FIPSLD_CC; \
-+ FIPSLD_CC="$(CC)"; CC=$(TOP)/fips/fipsld; export CC FIPSLD_CC; \
- fi; \
- LIBRARIES="$(LIBSSL) $(LIBKRB5) $(LIBCRYPTO)" ; \
- [ "x$(FIPSCANLIB)" = "xlibfips" ] && LIBRARIES="$$LIBRARIES -lfips"; \
- $(MAKE) -f $(TOP)/Makefile.shared -e \
-- CC=$${CC} APPNAME=$(EXE) OBJECTS="$(PROGRAM).o $(E_OBJ)" \
-+ CC="$${CC}" APPNAME=$(EXE) OBJECTS="$(PROGRAM).o $(E_OBJ)" \
- LIBDEPS="$(PEX_LIBS) $$LIBRARIES $(EX_LIBS)" \
- link_app.$${shlib_target}
- -(cd ..; \
diff --git a/recipes/openssl/openssl-0.9.8j/configure-targets.patch b/recipes/openssl/openssl-0.9.8m/configure-targets.patch
index b68123a233..b68123a233 100644
--- a/recipes/openssl/openssl-0.9.8j/configure-targets.patch
+++ b/recipes/openssl/openssl-0.9.8m/configure-targets.patch
diff --git a/recipes/openssl/openssl-0.9.8m/debian.patch b/recipes/openssl/openssl-0.9.8m/debian.patch
new file mode 100644
index 0000000000..60e338816d
--- /dev/null
+++ b/recipes/openssl/openssl-0.9.8m/debian.patch
@@ -0,0 +1,546 @@
+Index: openssl-0.9.8m/Makefile
+===================================================================
+--- openssl-0.9.8m.orig/Makefile 2010-02-26 01:21:14.000000000 +0800
++++ openssl-0.9.8m/Makefile 2010-03-09 20:17:26.515664333 +0800
+@@ -26,10 +26,10 @@
+ # for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
+ # Normally it is left empty.
+ INSTALL_PREFIX=
+-INSTALLTOP=/usr/local/ssl
++INSTALLTOP=/usr
+
+ # Do not edit this manually. Use Configure --openssldir=DIR do change this!
+-OPENSSLDIR=/usr/local/ssl
++OPENSSLDIR=/usr/lib/ssl
+
+ # NO_IDEA - Define to build without the IDEA algorithm
+ # NO_RC4 - Define to build without the RC4 algorithm
+@@ -155,10 +155,11 @@
+
+ MAKEFILE= Makefile
+
+-MANDIR=$(OPENSSLDIR)/man
++MANDIR=/usr/share/man
+ MAN1=1
+ MAN3=3
+-MANSUFFIX=
++MANSUFFIX=ssl
++MANSECTION=SSL
+ SHELL=/bin/sh
+
+ TOP= .
+@@ -170,8 +171,8 @@
+ SHARED_SSL=libssl$(SHLIB_EXT)
+ SHARED_FIPS=
+ SHARED_LIBS=
+-SHARED_LIBS_LINK_EXTS=
+-SHARED_LDFLAGS=
++SHARED_LIBS_LINK_EXTS=.so
++SHARED_LDFLAGS=-m64 -Wl,--version-script=openssl.ld
+
+ GENERAL= Makefile
+ BASENAME= openssl
+@@ -447,7 +448,8 @@
+ echo 'Description: OpenSSL cryptography library'; \
+ echo 'Version: '$(VERSION); \
+ echo 'Requires: '; \
+- echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
++ echo 'Libs: -L$${libdir} -lcrypto'; \
++ echo 'Libs.private: $(EX_LIBS)'; \
+ echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
+
+ libssl.pc: Makefile
+@@ -460,7 +462,8 @@
+ echo 'Description: Secure Sockets Layer and cryptography libraries'; \
+ echo 'Version: '$(VERSION); \
+ echo 'Requires: '; \
+- echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
++ echo 'Libs: -L$${libdir} -lssl'; \
++ echo 'Libs.private: -lcrypto $(EX_LIBS)'; \
+ echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
+
+ openssl.pc: Makefile
+@@ -473,7 +476,8 @@
+ echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
+ echo 'Version: '$(VERSION); \
+ echo 'Requires: '; \
+- echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
++ echo 'Libs: -L$${libdir} -lssl -lcrypto'; \
++ echo 'Libs.private: $(EX_LIBS)'; \
+ echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
+
+ Makefile: Makefile.org Configure config
+@@ -622,7 +626,7 @@
+ install_sw:
+ @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
+- $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \
++ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/ssl/engines \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
+ $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
+@@ -700,7 +704,7 @@
+ echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
+ (cd `$(PERL) util/dirname.pl $$i`; \
+ sh -c "$$pod2man \
+- --section=$$sec --center=OpenSSL \
++ --section=$${sec}$(MANSECTION) --center=OpenSSL \
+ --release=$(VERSION) `basename $$i`") \
+ > $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
+ $(PERL) util/extract-names.pl < $$i | \
+@@ -717,7 +721,7 @@
+ echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
+ (cd `$(PERL) util/dirname.pl $$i`; \
+ sh -c "$$pod2man \
+- --section=$$sec --center=OpenSSL \
++ --section=$${sec}$(MANSECTION) --center=OpenSSL \
+ --release=$(VERSION) `basename $$i`") \
+ > $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
+ $(PERL) util/extract-names.pl < $$i | \
+Index: openssl-0.9.8m/Configure
+===================================================================
+--- openssl-0.9.8m.orig/Configure 2010-03-09 16:15:42.000000000 +0800
++++ openssl-0.9.8m/Configure 2010-03-09 20:18:16.566914027 +0800
+@@ -1,4 +1,4 @@
+-:
++#!/usr/local/bin/perl
+ eval 'exec perl -S $0 ${1+"$@"}'
+ if $running_under_some_shell;
+ ##
+@@ -326,6 +326,47 @@
+ "osf1-alpha-cc", "cc:-std1 -tune host -O4 -readonly_strings::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${no_asm}:dlfcn:alpha-osf1-shared:::.so",
+ "tru64-alpha-cc", "cc:-std1 -tune host -fast -readonly_strings::-pthread:::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${no_asm}:dlfcn:alpha-osf1-shared::-msym:.so",
+
++# Debian GNU/* (various architectures)
++"debian-alpha","gcc:-DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-alpha-ev4","gcc:-DTERMIO -O3 -Wa,--noexecstack -mcpu=ev4 -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-alpha-ev5","gcc:-DTERMIO -O3 -Wa,--noexecstack -mcpu=ev5 -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-arm","gcc:-DL_ENDIAN -DTERMIO -O2 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG DES_RISC1::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-armeb","gcc:-DB_ENDIAN -DTERMIO -O2 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG DES_RISC1::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-armel","gcc:-DL_ENDIAN -DTERMIO -O2 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG DES_RISC1::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++#"debian-amd64","gcc:-DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-amd64", "gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-kfreebsd-amd64","gcc:-m64 -DL_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++#"debian-freebsd-alpha","gcc:-DTERMIOS -O -Wa,--noexecstack -fomit-frame-pointer::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC2::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-kfreebsd-i386","gcc:-DL_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -m486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-hppa","gcc:-DB_ENDIAN -DTERMIO -O2 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG MD2_CHAR RC4_INDEX::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-hurd-i386","gcc:-DL_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -m486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-ia64","gcc:-DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++#"debian-i386","gcc:-DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -fomit-frame-pointer -m486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC",
++"debian-i386","gcc:-DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-i386-i486","gcc:-DL_ENDIAN -DTERMIO -O3 -march=i486 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-i386-i586","gcc:-DL_ENDIAN -DTERMIO -O3 -march=i586 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-i386-i686/cmov","gcc:-DL_ENDIAN -DTERMIO -O3 -march=i686 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-m68k","gcc:-DB_ENDIAN -DTERMIO -O2 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG MD2_CHAR RC4_INDEX::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-mips", "gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-mipsel", "gcc:-DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-netbsd-i386", "gcc:-DL_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -m486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-netbsd-m68k", "gcc:-DB_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -Wall::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL::::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-netbsd-sparc", "gcc:-DB_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -mv8 -Wall::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL::::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-openbsd-alpha","gcc:-DTERMIOS -O3 -Wa,--noexecstack -g::(unknown):::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2::::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-openbsd-i386", "gcc:-DL_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -m486::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-openbsd-mips","gcc:-O2 -Wa,--noexecstack -g -DL_ENDIAN::(unknown)::BN_LLONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC2 DES_PTR BF_PTR:::::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-powerpc","gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG DES_UNROLL DES_RISC2 DES_PTR MD2_CHAR RC4_INDEX::linux_ppc32.o::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-ppc64","gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL::linux_ppc64.o::::::::::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-s390","gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-sh3", "gcc:-DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-sh4", "gcc:-DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-sh3eb", "gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-sh4eb", "gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-m32r","gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-sparc","gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-sparc-v8","gcc:-DB_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -mcpu=v8 -g -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"debian-sparc-v9","gcc:-DB_ENDIAN -DTERMIO -O3 -mcpu=v9 -Wa,--noexecstack -Wa,-Av8plus -g -Wall -DULTRASPARC -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::sparcv8plus.o:des_enc-sparc.o fcrypt_b.o:::md5-sparcv8plus.o::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++
+ ####
+ #### Variety of LINUX:-)
+ ####
+@@ -505,7 +546,7 @@
+ # Cygwin
+ "Cygwin-pre1.3", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown):CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",
+ "Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall:::CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_coff_asm}:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
+-"debug-Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:::CYGWIN32:::${no_asm}:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
++-"debug-Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:::CYGWIN32:::${no_asm}:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
+
+ # NetWare from David Ward (dsward@novell.com)
+ # requires either MetroWerks NLM development tools, or gcc / nlmconv
+@@ -1477,6 +1518,8 @@
+ }
+ }
+
++$shared_ldflag .= " -Wl,--version-script=openssl.ld";
++
+ open(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n";
+ unlink("$Makefile.new") || die "unable to remove old $Makefile.new:$!\n" if -e "$Makefile.new";
+ open(OUT,">$Makefile.new") || die "unable to create $Makefile.new:$!\n";
+@@ -1576,7 +1619,8 @@
+ elsif ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*\.[^\.]*$/)
+ {
+ my $sotmp = $1;
+- s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp.\$(SHLIB_MAJOR) .s$sotmp/;
++# s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp.\$(SHLIB_MAJOR) .s$sotmp/;
++ s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp/;
+ }
+ elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.[^\.]*\.dylib$/)
+ {
+@@ -1706,7 +1750,7 @@
+ # $foo is to become "$prefix/lib$multilib/engines";
+ # as Makefile.org and engines/Makefile are adapted for
+ # $multilib suffix.
+- my $foo = "$prefix/lib/engines";
++ my $foo = "$prefix/lib/ssl/engines";
+ $foo =~ s/\\/\\\\/g;
+ print OUT "#define ENGINESDIR \"$foo\"\n";
+ }
+Index: openssl-0.9.8m/config
+===================================================================
+--- openssl-0.9.8m.orig/config 2009-10-15 20:58:00.000000000 +0800
++++ openssl-0.9.8m/config 2010-03-09 20:16:50.506902007 +0800
+@@ -162,8 +162,8 @@
+ echo "${MACHINE}-whatever-linux1"; exit 0
+ ;;
+
+- GNU*)
+- echo "hurd-x86"; exit 0;
++ GNU:*|GNU/*:*)
++ echo "${MACHINE}-gnuish"; exit 0;
+ ;;
+
+ LynxOS:*)
+Index: openssl-0.9.8m/Makefile.org
+===================================================================
+--- openssl-0.9.8m.orig/Makefile.org 2010-03-09 16:15:42.000000000 +0800
++++ openssl-0.9.8m/Makefile.org 2010-03-09 20:18:44.095663922 +0800
+@@ -153,10 +153,11 @@
+
+ MAKEFILE= Makefile
+
+-MANDIR=$(OPENSSLDIR)/man
++MANDIR=/usr/share/man
+ MAN1=1
+ MAN3=3
+-MANSUFFIX=
++MANSUFFIX=ssl
++MANSECTION=SSL
+ SHELL=/bin/sh
+
+ TOP= .
+@@ -445,7 +446,8 @@
+ echo 'Description: OpenSSL cryptography library'; \
+ echo 'Version: '$(VERSION); \
+ echo 'Requires: '; \
+- echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
++ echo 'Libs: -L$${libdir} -lcrypto'; \
++ echo 'Libs.private: $(EX_LIBS)'; \
+ echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
+
+ libssl.pc: Makefile
+@@ -458,7 +460,8 @@
+ echo 'Description: Secure Sockets Layer and cryptography libraries'; \
+ echo 'Version: '$(VERSION); \
+ echo 'Requires: '; \
+- echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
++ echo 'Libs: -L$${libdir} -lssl'; \
++ echo 'Libs.private: -lcrypto $(EX_LIBS)'; \
+ echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
+
+ openssl.pc: Makefile
+@@ -471,7 +474,8 @@
+ echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
+ echo 'Version: '$(VERSION); \
+ echo 'Requires: '; \
+- echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
++ echo 'Libs: -L$${libdir} -lssl -lcrypto'; \
++ echo 'Libs.private: $(EX_LIBS)'; \
+ echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
+
+ Makefile: Makefile.org Configure config
+@@ -620,7 +624,7 @@
+ install_sw:
+ @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
+- $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \
++ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/ssl/engines \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
+ $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
+@@ -698,7 +702,7 @@
+ echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
+ (cd `$(PERL) util/dirname.pl $$i`; \
+ sh -c "$$pod2man \
+- --section=$$sec --center=OpenSSL \
++ --section=$${sec}$(MANSECTION) --center=OpenSSL \
+ --release=$(VERSION) `basename $$i`") \
+ > $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
+ $(PERL) util/extract-names.pl < $$i | \
+@@ -715,7 +719,7 @@
+ echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
+ (cd `$(PERL) util/dirname.pl $$i`; \
+ sh -c "$$pod2man \
+- --section=$$sec --center=OpenSSL \
++ --section=$${sec}$(MANSECTION) --center=OpenSSL \
+ --release=$(VERSION) `basename $$i`") \
+ > $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
+ $(PERL) util/extract-names.pl < $$i | \
+Index: openssl-0.9.8m/openssl.ld
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ openssl-0.9.8m/openssl.ld 2010-03-09 20:16:50.506902007 +0800
+@@ -0,0 +1,5 @@
++OPENSSL_0.9.8 {
++ global:
++ *;
++};
++
+Index: openssl-0.9.8m/apps/s_time.c
+===================================================================
+--- openssl-0.9.8m.orig/apps/s_time.c 2003-12-27 22:40:17.000000000 +0800
++++ openssl-0.9.8m/apps/s_time.c 2010-03-09 20:16:50.516901237 +0800
+@@ -117,6 +117,7 @@
+
+ /* The following if from times(3) man page. It may need to be changed
+ */
++#undef HZ
+ #ifndef HZ
+ # ifdef _SC_CLK_TCK
+ # define HZ ((double)sysconf(_SC_CLK_TCK))
+Index: openssl-0.9.8m/engines/openssl.ld
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ openssl-0.9.8m/engines/openssl.ld 2010-03-09 20:16:50.516901237 +0800
+@@ -0,0 +1,5 @@
++OPENSSL_0.9.8 {
++ global:
++ *;
++};
++
+Index: openssl-0.9.8m/doc/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ openssl-0.9.8m/doc/Makefile 2010-03-09 20:16:50.516901237 +0800
+@@ -0,0 +1,40 @@
++VERSION =
++
++#PODS = $(wildcard *.pod)
++#MANS = $(addsuffix .man, $(basename $(PODS)))
++
++MANS = openssl.1 ssl.3 crypto.3
++
++P2M = pod2man --center='OpenSSL Documentation' --release="OpenSSL $(VERSION)"
++
++all: manpages
++
++.PHONY: manpages
++
++manpages: openssl.1 crypto.3 ssl.3
++
++openssl.1:
++ $(P2M) --section=1 openssl.pod > openssl.1
++
++crypto.3:
++ $(P2M) --section=3 crypto.pod > crypto.3
++
++ssl.3:
++ $(P2M) --section=3 ssl.pod > ssl.3
++
++.PHONY: install
++install:
++ mkdir -p $(INSTALL_PREFIX)$(INSTALLTOP)/share/man/man1
++ mkdir -p $(INSTALL_PREFIX)$(INSTALLTOP)/share/man/man3
++ install -m 644 -p openssl.1 $(INSTALL_PREFIX)$(INSTALLTOP)/share/man/man1
++ install -m 644 -p crypto.3 $(INSTALL_PREFIX)$(INSTALLTOP)/share/man/man3
++ install -m 644 -p ssl.3 $(INSTALL_PREFIX)$(INSTALLTOP)/share/man/man3
++ rm -f $(MANS)
++
++.PHONY: clean
++clean:
++ rm -f $(MANS)
++
++.PHONY: realclean
++realclean:
++ -$(MAKE) clean
+Index: openssl-0.9.8m/doc/apps/c_rehash.pod
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ openssl-0.9.8m/doc/apps/c_rehash.pod 2010-03-09 20:16:50.516901237 +0800
+@@ -0,0 +1,55 @@
++
++=pod
++
++=head1 NAME
++
++c_rehash - Create symbolic links to files named by the hash values
++
++=head1 SYNOPSIS
++
++B<c_rehash>
++[directory] ...
++
++=head1 DESCRIPTION
++
++c_rehash scans directories and takes a hash value of each .pem and .crt file in the directory. It then creates symbolic links for each of the files named by the hash value. This is useful as many programs require directories to be set up like this in order to find the certificates they require.
++
++If any directories are named on the command line then these directories are processed in turn. If not then and the environment variable SSL_CERT_DIR is defined then that is consulted. This variable should be a colon (:) separated list of directories, all of which will be processed. If neither of these conditions are true then /usr/lib/ssl/certs is processed.
++
++For each directory that is to be processed he user must have write permissions on the directory, if they do not then nothing will be printed for that directory.
++
++Note that this program deletes all the symbolic links that look like ones that it creates before processing a directory. Beware that if you run the program on a directory that contains symbolic links for other purposes that are named in the same format as those created by this program they will be lost.
++
++The hashes for certificate files are of the form <hash>.<n> where n is an integer. If the hash value already exists then n will be incremented, unless the file is a duplicate. Duplicates are detected using the fingerprint of the certificate. A warning will be printed if a duplicate is detected. The hashes for CRL files are of the form <hash>.r<n> and have the same behavior.
++
++The program will also warn if there are files with extension .pem which are not certificate or CRL files.
++
++The program uses the openssl program to compute the hashes and fingerprints. It expects the executable to be named openssl and be on the PATH, or in the /usr/lib/ssl/bin directory. If the OPENSSL environment variable is defined then this is used instead as the executable that provides the hashes and fingerprints. When called as $OPENSSL x509 -hash -fingerprint -noout -in $file it must output the hash of $file on the first line followed by the fingerprint on the second line, optionally prefixed with some text and an equals sign (=).
++
++=head1 OPTIONS
++
++None
++
++=head1 ENVIRONMENT
++
++=over 4
++
++=item B<OPENSSL>
++
++The name (and path) of an executable to use to generate hashes and fingerprints (see above).
++
++=item B<SSL_CERT_DIR>
++
++Colon separated list of directories to operate on. Ignored if directories are listed on the command line.
++
++=head1 SEE ALSO
++
++L<openssl(1)|openssl(1)>, L<x509(1)|x509(1)>
++
++=back
++
++=head1 BUGS
++
++No known bugs
++
++=cut
+Index: openssl-0.9.8m/crypto/Makefile
+===================================================================
+--- openssl-0.9.8m.orig/crypto/Makefile 2010-03-09 16:15:42.000000000 +0800
++++ openssl-0.9.8m/crypto/Makefile 2010-03-09 20:16:50.516901237 +0800
+@@ -57,7 +57,7 @@
+ echo " #define DATE \"`LC_ALL=C LC_TIME=C date`\""; \
+ echo '#endif' ) >buildinf.h
+
+-x86cpuid-elf.s: x86cpuid.pl perlasm/x86asm.pl
++x86cpuid-elf.S: x86cpuid.pl perlasm/x86asm.pl
+ $(PERL) x86cpuid.pl elf $(CFLAGS) $(PROCESSOR) > $@
+ x86cpuid-cof.s: x86cpuid.pl perlasm/x86asm.pl
+ $(PERL) x86cpuid.pl coff $(CFLAGS) $(PROCESSOR) > $@
+@@ -70,7 +70,7 @@
+ uplink-cof.s: ../ms/uplink.pl
+ $(PERL) ../ms/uplink.pl coff > $@
+
+-x86_64cpuid.s: x86_64cpuid.pl
++x86_64cpuid.S: x86_64cpuid.pl
+ $(PERL) x86_64cpuid.pl $@
+ ia64cpuid.s: ia64cpuid.S
+ $(CC) $(CFLAGS) -E ia64cpuid.S > $@
+Index: openssl-0.9.8m/crypto/opensslconf.h
+===================================================================
+--- openssl-0.9.8m.orig/crypto/opensslconf.h 2010-02-26 01:21:14.000000000 +0800
++++ openssl-0.9.8m/crypto/opensslconf.h 2010-03-09 20:16:50.516901237 +0800
+@@ -20,6 +20,9 @@
+ #ifndef OPENSSL_NO_JPAKE
+ # define OPENSSL_NO_JPAKE
+ #endif
++#ifndef OPENSSL_NO_IDEA
++# define OPENSSL_NO_IDEA
++#endif
+ #ifndef OPENSSL_NO_KRB5
+ # define OPENSSL_NO_KRB5
+ #endif
+@@ -62,6 +65,9 @@
+ # if defined(OPENSSL_NO_JPAKE) && !defined(NO_JPAKE)
+ # define NO_JPAKE
+ # endif
++# if defined(OPENSSL_NO_IDEA) && !defined(NO_IDEA)
++# define NO_IDEA
++# endif
+ # if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)
+ # define NO_KRB5
+ # endif
+@@ -101,8 +107,8 @@
+
+ #if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
+ #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
+-#define ENGINESDIR "/usr/local/ssl/lib/engines"
+-#define OPENSSLDIR "/usr/local/ssl"
++#define ENGINESDIR "/usr/lib/ssl/engines"
++#define OPENSSLDIR "/usr/lib/ssl"
+ #endif
+ #endif
+
+@@ -133,14 +139,14 @@
+ * - Intel P6 because partial register stalls are very expensive;
+ * - elder Alpha because it lacks byte load/store instructions;
+ */
+-#define RC4_INT unsigned int
++#define RC4_INT unsigned char
+ #endif
+ #if !defined(RC4_CHUNK)
+ /*
+ * This enables code handling data aligned at natural CPU word
+ * boundary. See crypto/rc4/rc4_enc.c for further details.
+ */
+-#undef RC4_CHUNK
++#define RC4_CHUNK unsigned long
+ #endif
+ #endif
+
+@@ -148,7 +154,7 @@
+ /* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
+ * %20 speed up (longs are 8 bytes, int's are 4). */
+ #ifndef DES_LONG
+-#define DES_LONG unsigned long
++#define DES_LONG unsigned int
+ #endif
+ #endif
+
+@@ -162,9 +168,9 @@
+ /* The prime number generation stuff may not work when
+ * EIGHT_BIT but I don't care since I've only used this mode
+ * for debuging the bignum libraries */
+-#undef SIXTY_FOUR_BIT_LONG
++#define SIXTY_FOUR_BIT_LONG
+ #undef SIXTY_FOUR_BIT
+-#define THIRTY_TWO_BIT
++#undef THIRTY_TWO_BIT
+ #undef SIXTEEN_BIT
+ #undef EIGHT_BIT
+ #endif
+@@ -178,7 +184,7 @@
+
+ #if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
+ #define CONFIG_HEADER_BF_LOCL_H
+-#undef BF_PTR
++#define BF_PTR2
+ #endif /* HEADER_BF_LOCL_H */
+
+ #if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
+@@ -208,7 +214,7 @@
+ /* Unroll the inner loop, this sometimes helps, sometimes hinders.
+ * Very mucy CPU dependant */
+ #ifndef DES_UNROLL
+-#undef DES_UNROLL
++#define DES_UNROLL
+ #endif
+
+ /* These default values were supplied by
+Index: openssl-0.9.8m/crypto/sha/sha.h
+===================================================================
+--- openssl-0.9.8m.orig/crypto/sha/sha.h 2008-09-16 18:47:28.000000000 +0800
++++ openssl-0.9.8m/crypto/sha/sha.h 2010-03-09 20:16:50.516901237 +0800
+@@ -59,6 +59,7 @@
+ #ifndef HEADER_SHA_H
+ #define HEADER_SHA_H
+
++#include <stddef.h>
+ #include <openssl/e_os2.h>
+ #include <stddef.h>
+
diff --git a/recipes/openssl/openssl-0.9.8j/oe-ldflags.patch b/recipes/openssl/openssl-0.9.8m/oe-ldflags.patch
index 3a2fae64d3..3a2fae64d3 100644
--- a/recipes/openssl/openssl-0.9.8j/oe-ldflags.patch
+++ b/recipes/openssl/openssl-0.9.8m/oe-ldflags.patch
diff --git a/recipes/openssl/openssl-0.9.8m/shared-libs.patch b/recipes/openssl/openssl-0.9.8m/shared-libs.patch
new file mode 100644
index 0000000000..0aaef169c6
--- /dev/null
+++ b/recipes/openssl/openssl-0.9.8m/shared-libs.patch
@@ -0,0 +1,48 @@
+Index: openssl-0.9.8m/crypto/Makefile
+===================================================================
+--- openssl-0.9.8m.orig/crypto/Makefile 2008-09-18 01:10:55.000000000 +0800
++++ openssl-0.9.8m/crypto/Makefile 2010-03-09 16:13:16.055652727 +0800
+@@ -103,7 +103,7 @@
+
+ shared: buildinf.h lib subdirs
+ if [ -n "$(SHARED_LIBS)" ]; then \
+- (cd ..; $(MAKE) $(SHARED_LIB)); \
++ (cd ..; $(MAKE) -e $(SHARED_LIB)); \
+ fi
+
+ libs:
+Index: openssl-0.9.8m/Makefile.org
+===================================================================
+--- openssl-0.9.8m.orig/Makefile.org 2010-01-28 00:06:36.000000000 +0800
++++ openssl-0.9.8m/Makefile.org 2010-03-09 16:14:22.065664019 +0800
+@@ -355,7 +355,7 @@
+ @if [ "$(SHLIB_TARGET)" != "" ]; then \
+ if [ "$(FIPSCANLIB)" = "libfips" ]; then \
+ $(ARD) libcrypto.a fipscanister.o ; \
+- $(MAKE) SHLIBDIRS='crypto' SHLIBDEPS='-lfips' build-shared; \
++ $(MAKE) -e SHLIBDIRS='crypto' SHLIBDEPS='-lfips' build-shared; \
+ $(AR) libcrypto.a fips/fipscanister.o ; \
+ else \
+ if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
+@@ -373,7 +373,7 @@
+ @if [ "$(SHLIB_TARGET)" != "" ]; then \
+ shlibdeps=-lcrypto; \
+ [ "$(FIPSCANLIB)" = "libfips" ] && shlibdeps="$$shlibdeps -lfips"; \
+- $(MAKE) SHLIBDIRS=ssl SHLIBDEPS="$$shlibdeps" build-shared; \
++ $(MAKE) -e SHLIBDIRS=ssl SHLIBDEPS="$$shlibdeps" build-shared; \
+ else \
+ echo "There's no support for shared libraries on this platform" >&2 ; \
+ exit 1; \
+Index: openssl-0.9.8m/ssl/Makefile
+===================================================================
+--- openssl-0.9.8m.orig/ssl/Makefile 2010-01-21 00:35:30.000000000 +0800
++++ openssl-0.9.8m/ssl/Makefile 2010-03-09 16:13:16.065664772 +0800
+@@ -62,7 +62,7 @@
+
+ shared: lib
+ if [ -n "$(SHARED_LIBS)" ]; then \
+- (cd ..; $(MAKE) $(SHARED_LIB)); \
++ (cd ..; $(MAKE) -e $(SHARED_LIB)); \
+ fi
+
+ files:
diff --git a/recipes/openssl/openssl-native_0.9.8j.bb b/recipes/openssl/openssl-native_0.9.8j.bb
deleted file mode 100644
index eba3ba9903..0000000000
--- a/recipes/openssl/openssl-native_0.9.8j.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-inherit pkgconfig native
-
-require openssl.inc
-
-PR = "${INC_PR}.1"
-
-# This flag can contain target options (e.g -mfpu=neon for armv7-a systems)
-export FULL_OPTIMIZATION = " "
-export BUILD_OPTIMIZATION = " "
-
-SRC_URI += "file://configure-targets.patch;patch=1 \
- file://shared-libs.patch;patch=1 \
- file://debian.patch;patch=1"
-
-PARALLEL_MAKE = ""
-
-CFLAG += " -Wa,--noexecstack "
-
-do_install() {
- :
-}
-
diff --git a/recipes/openssl/openssl-native_0.9.8m.bb b/recipes/openssl/openssl-native_0.9.8m.bb
new file mode 100644
index 0000000000..b17bb553b4
--- /dev/null
+++ b/recipes/openssl/openssl-native_0.9.8m.bb
@@ -0,0 +1,24 @@
+inherit pkgconfig native
+
+require openssl.inc
+
+SRC_URI[src.md5sum] = "898bf125370926d5f692a2201124f8ec"
+SRC_URI[src.sha256sum] = "36037160281cf4977d964e403d2bc0680fbca0a7ff9f65e33136d75fae12cb5b"
+PR = "${INC_PR}.1"
+
+# This flag can contain target options (e.g -mfpu=neon for armv7-a systems)
+export FULL_OPTIMIZATION = " "
+export BUILD_OPTIMIZATION = " "
+
+SRC_URI += "file://configure-targets.patch;patch=1 \
+ file://shared-libs.patch;patch=1 \
+ file://debian.patch;patch=1"
+
+PARALLEL_MAKE = ""
+
+CFLAG += " -Wa,--noexecstack "
+
+do_install() {
+ :
+}
+
diff --git a/recipes/openssl/openssl.inc b/recipes/openssl/openssl.inc
index 00f97824be..28e0c921a8 100644
--- a/recipes/openssl/openssl.inc
+++ b/recipes/openssl/openssl.inc
@@ -3,9 +3,11 @@ HOMEPAGE = "http://www.openssl.org/"
LICENSE = "openssl"
SECTION = "libs/network"
-SRC_URI = "http://www.openssl.org/source/openssl-${PV}.tar.gz"
+SRC_URI = "http://www.openssl.org/source/openssl-${PV}.tar.gz;name=src"
S = "${WORKDIR}/openssl-${PV}"
+inherit siteinfo
+
INC_PR = "r11"
AR_append = " r"
diff --git a/recipes/openssl/openssl_0.9.8j.bb b/recipes/openssl/openssl_0.9.8j.bb
deleted file mode 100644
index bb9694f618..0000000000
--- a/recipes/openssl/openssl_0.9.8j.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-inherit pkgconfig
-
-require openssl.inc
-
-PR = "${INC_PR}.0"
-
-export OE_LDFLAGS="${LDFLAGS}"
-
-SRC_URI += "file://configure-targets.patch;patch=1 \
- file://shared-libs.patch;patch=1 \
- file://debian.patch;patch=1 \
- file://oe-ldflags.patch;patch=1"
-
-PARALLEL_MAKE = ""
diff --git a/recipes/openssl/openssl_0.9.8m.bb b/recipes/openssl/openssl_0.9.8m.bb
new file mode 100644
index 0000000000..db3c48a1e0
--- /dev/null
+++ b/recipes/openssl/openssl_0.9.8m.bb
@@ -0,0 +1,16 @@
+inherit pkgconfig
+
+require openssl.inc
+SRC_URI[src.md5sum] = "898bf125370926d5f692a2201124f8ec"
+SRC_URI[src.sha256sum] = "36037160281cf4977d964e403d2bc0680fbca0a7ff9f65e33136d75fae12cb5b"
+
+PR = "${INC_PR}.0"
+
+export OE_LDFLAGS="${LDFLAGS}"
+
+SRC_URI += "file://configure-targets.patch;patch=1 \
+ file://shared-libs.patch;patch=1 \
+ file://debian.patch;patch=1 \
+ file://oe-ldflags.patch;patch=1"
+
+PARALLEL_MAKE = ""
diff --git a/recipes/openswan/openswan_2.2.0.bb b/recipes/openswan/openswan_2.2.0.bb
index bcf5a28756..9d3bf19bb8 100644
--- a/recipes/openswan/openswan_2.2.0.bb
+++ b/recipes/openswan/openswan_2.2.0.bb
@@ -6,7 +6,7 @@ LICENSE = "GPLv2"
DEPENDS = "gmp flex-native"
RRECOMMENDS = "kernel-module-ipsec"
RDEPENDS_append_nylon = "perl"
-PR = "r5"
+PR = "r6"
SRC_URI = "http://www.openswan.org/download/old/openswan-${PV}.tar.gz \
file://openswan-2.2.0-gentoo.patch;patch=1 \
@@ -19,6 +19,7 @@ S = "${WORKDIR}/openswan-${PV}"
PARALLEL_MAKE = ""
EXTRA_OEMAKE = "DESTDIR=${D} \
USERCOMPILE="${CFLAGS}" \
+ USERLINK="${LDFLAGS}" \
FINALCONFDIR=${sysconfdir}/ipsec \
INC_RCDEFAULT=${sysconfdir}/init.d \
INC_USRLOCAL=${prefix} \
diff --git a/recipes/openswan/openswan_2.4.7.bb b/recipes/openswan/openswan_2.4.7.bb
index 28e599b282..a9cd2b3f7b 100644
--- a/recipes/openswan/openswan_2.4.7.bb
+++ b/recipes/openswan/openswan_2.4.7.bb
@@ -6,7 +6,7 @@ LICENSE = "GPLv2"
DEPENDS = "gmp flex-native"
RRECOMMENDS = "kernel-module-ipsec"
RDEPENDS_append_nylon = "perl"
-PR = "r0"
+PR = "r1"
SRC_URI = "http://www.openswan.org/download/openswan-${PV}.tar.gz \
file://openswan-2.4.7-gentoo.patch;patch=1 \
@@ -17,6 +17,7 @@ S = "${WORKDIR}/openswan-${PV}"
PARALLEL_MAKE = ""
EXTRA_OEMAKE = "DESTDIR=${D} \
USERCOMPILE="${CFLAGS}" \
+ USERLINK="${LDFLAGS}" \
FINALCONFDIR=${sysconfdir}/ipsec \
INC_RCDEFAULT=${sysconfdir}/init.d \
INC_USRLOCAL=${prefix} \
diff --git a/recipes/opensync/libsyncml_0.5.4.bb b/recipes/opensync/libsyncml_0.5.4.bb
index cf5c5b9135..8f73a69f03 100644
--- a/recipes/opensync/libsyncml_0.5.4.bb
+++ b/recipes/opensync/libsyncml_0.5.4.bb
@@ -7,7 +7,7 @@ LICENSE = "LGPL"
DEPENDS = "libxml2 glib-2.0"
RRECOMMENDS = "wbxml2 openobex libsoup"
-PR = "r0"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/libsyncml/libsyncml-${PV}.tar.gz \
"
diff --git a/recipes/opie-packagemanager/files/opkg_update.patch b/recipes/opie-packagemanager/files/opkg_update.patch
new file mode 100644
index 0000000000..8da0a847c9
--- /dev/null
+++ b/recipes/opie-packagemanager/files/opkg_update.patch
@@ -0,0 +1,469 @@
+--- packagemanager/oipkg.cpp 2010-03-17 21:43:48.000000000 +0000
++++ packagemanager/oipkg.cpp 2010-03-17 22:48:03.000000000 +0000
+@@ -39,26 +39,45 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+
++#ifdef USE_LIBOPKG
++
+ const QString IPKG_CONF = "/etc/opkg.conf"; // Fully-qualified name of Ipkg primary configuration file
+ const QString IPKG_CONF_DIR = "/etc/opkg"; // Directory of secondary Ipkg configuration files
+ const QString IPKG_PKG_PATH = "/usr/lib/opkg/lists"; // Directory containing server package lists
+ const QString IPKG_STATUS_PATH = "usr/lib/opkg/status"; // Destination status file location
+ const QString IPKG_INFO_PATH = "usr/lib/opkg/info"; // Package file lists location
++#define OPKG_NO_ERROR 0
++
++#else
++
++extern "C" {
++#include <libipkg.h>
++};
++args_t m_ipkgArgs; // libipkg configuration arguments
++
++const QString IPKG_CONF = "/etc/ipkg.conf"; // Fully-qualified name of Ipkg primary configuration file
++const QString IPKG_CONF_DIR = "/etc/ipkg"; // Directory of secondary Ipkg configuration files
++const QString IPKG_PKG_PATH = "/usr/lib/ipkg/lists"; // Directory containing server package lists
++const QString IPKG_STATUS_PATH = "usr/lib/ipkg/status"; // Destination status file location
++const QString IPKG_INFO_PATH = "usr/lib/ipkg/info"; // Package file lists location
++
++#endif
+
+ OIpkg *oipkg;
+
+ // Ipkg callback functions
+
+
+-void fsignalOpkgProgress (opkg_t *opkg, const opkg_progress_data_t *progress, void *user_data)
++#ifdef USE_LIBOPKG
++void fsignalOpkgProgress (const opkg_progress_data_t *progress, void *user_data)
+ {
+ QString msg;
+
+ QString pkginfo;
+- if( progress->package ) {
+- pkginfo = progress->package->name;
++ if( progress->pkg ) {
++ pkginfo = progress->pkg->name;
+ pkginfo += " ";
+- pkginfo += progress->package->version;
++ pkginfo += progress->pkg->version;
+ }
+ switch( progress->action ) {
+ case OPKG_INSTALL:
+@@ -86,13 +105,21 @@
+ oipkg->progress( (const char *)msg, progress->percentage );
+ }
+
+-void fsignalOpkgPackage (opkg_t *opkg, opkg_package_t *package, void *user_data)
++void fsignalOpkgPackage (pkg_t *package, void *user_data)
+ {
+
+ }
+
++void fsignalOpkgMessage (int, const char *fmt, va_list ap)
++{
++ QString msg;
++ msg.sprintf(fmt, ap);
++ oipkg->ipkgMessage( msg );
++}
++#endif
+
+-/*X
++
++#ifndef USE_LIBOPKG
+ int fsignalIpkgMessage( ipkg_conf_t *conf, message_level_t level, char *msg )
+ {
+ // Display message only if it is below the message level threshold
+@@ -103,7 +130,8 @@
+
+ return 0;
+ }
+-*/
++#endif
++
+
+ char *fIpkgResponse( char */*question*/ )
+ {
+@@ -116,40 +144,14 @@
+ return 0;
+ }
+
+-QString opkg_error_message( int err )
++#ifndef USE_LIBOPKG
++int fIpkgFiles( char */*name*/, char *desc, char */*version*/, pkg_state_status_t /*status*/,
++ void */*userdata*/ )
+ {
+- switch(err) {
+- case OPKG_NO_ERROR:
+- return "Success";
+- case OPKG_UNKNOWN_ERROR:
+- return "Unknown error";
+- case OPKG_DOWNLOAD_FAILED:
+- return "Download failed";
+- case OPKG_DEPENDENCIES_FAILED:
+- return "Unable to complete operation due to dependencies";
+- case OPKG_PACKAGE_ALREADY_INSTALLED:
+- return "Specified package is already installed";
+- case OPKG_PACKAGE_NOT_AVAILABLE:
+- return "Specified package is not available";
+- case OPKG_PACKAGE_NOT_FOUND:
+- return "Specified package could not be found";
+- case OPKG_PACKAGE_NOT_INSTALLED:
+- return "Specified package is not installed";
+- case OPKG_GPG_ERROR:
+- return "GPG verification failed";
+- case OPKG_MD5_ERROR:
+- return "MD5 verification failed";
+- default:
+- return "Unrecognised error code";
+- }
++ oipkg->ipkgList( desc );
++ return 0;
+ }
+-
+-//Xint fIpkgFiles( char */*name*/, char *desc, char */*version*/, pkg_state_status_t /*status*/,
+-//X void */*userdata*/ )
+-//X{
+-//X oipkg->ipkgList( desc );
+-//X return 0;
+-//X}
++#endif
+
+ OIpkg::OIpkg( Config *config, QObject *parent, const char *name )
+ : QObject( parent, name )
+@@ -162,7 +164,17 @@
+ oipkg = this;
+
+ // Initialize libipkg
+- m_opkg = opkg_new();
++#ifdef USE_LIBOPKG
++ opkg_new();
++ opkg_conf_init();
++ conf->opkg_vmessage = fsignalOpkgMessage;
++#else
++ ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs );
++
++ // Default ipkg run-time arguments
++ m_ipkgArgs.noaction = false;
++ m_ipkgArgs.force_defaults = true;
++#endif
+ }
+
+ OIpkg::~OIpkg()
+@@ -172,7 +184,12 @@
+ m_confInfo->setAutoDelete( true );
+
+ // Free up libipkg resources
+- opkg_free( m_opkg );
++#ifdef USE_LIBOPKG
++ opkg_conf_deinit();
++ opkg_free();
++#else
++ ipkg_deinit( &m_ipkgArgs );
++#endif
+ }
+
+ OConfItemList *OIpkg::configItems()
+@@ -206,13 +223,13 @@
+ switch ( item->type() )
+ {
+ case OConfItem::Source :
+- case OConfItem::Destination :
++ case OConfItem::Destination :
+ item->setFile( IPKG_CONF_DIR + "/" + item->name() + ".conf" );
+ break;
+- case OConfItem::Arch :
++ case OConfItem::Arch :
+ item->setFile( IPKG_CONF_DIR + "/arch.conf" );
+ break;
+- default :
++ default :
+ item->setFile( IPKG_CONF );
+ break;
+ };
+@@ -253,7 +270,7 @@
+ break;
+ }
+ lastFile = item->file();
+-
++
+ confStream = new QTextStream( confFile );
+ // (*confStream) << "# Generated by Opie Package Manager\n\n";
+ }
+@@ -301,7 +318,14 @@
+ }
+
+ // Reinitialize libipkg to pick up new configuration
+- opkg_re_read_config_files( m_opkg );
++#ifdef USE_LIBOPKG
++ opkg_re_read_config_files();
++#else
++ ipkg_deinit( &m_ipkgArgs );
++ ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs );
++ m_ipkgArgs.noaction = false;
++ m_ipkgArgs.force_defaults = true;
++#endif
+ }
+
+ void OIpkg::saveSettings()
+@@ -497,23 +521,30 @@
+ return false;
+
+ // Set ipkg run-time options/arguments
++#ifdef USE_LIBOPKG
+ optvalue = ( m_ipkgExecOptions & FORCE_DEPENDS ) ? 1 : 0;
+- opkg_set_option( m_opkg, "force_depends", &optvalue );
++ opkg_set_option( "force_depends", &optvalue );
+
+ optvalue = ( m_ipkgExecOptions & FORCE_REINSTALL ) ? 1 : 0;
+- opkg_set_option( m_opkg, "force_reinstall", &optvalue );
++ opkg_set_option( "force_reinstall", &optvalue );
+
+ optvalue = ( m_ipkgExecOptions & FORCE_OVERWRITE ) ? 1 : 0;
+- opkg_set_option( m_opkg, "force_overwrite", &optvalue );
++ opkg_set_option( "force_overwrite", &optvalue );
+
+ optvalue = ( m_ipkgExecOptions & FORCE_RECURSIVE ) ? 1 : 0;
+- opkg_set_option( m_opkg, "force_removal_of_dependent_packages", &optvalue );
++ opkg_set_option( "force_removal_of_dependent_packages", &optvalue );
+
++
+ optvalue = m_ipkgExecVerbosity;
+- opkg_set_option( m_opkg, "verbosity", &optvalue );
+-
+-/*X // TODO m_ipkgArgs.force_remove = ( m_ipkgExecOptions & FORCE_REMOVE );
++ opkg_set_option( "verbosity", &optvalue );
++#else
++ m_ipkgArgs.force_depends = ( m_ipkgExecOptions & FORCE_DEPENDS );
++ m_ipkgArgs.force_reinstall = ( m_ipkgExecOptions & FORCE_REINSTALL );
++ // TODO m_ipkgArgs.force_remove = ( m_ipkgExecOptions & FORCE_REMOVE );
++ m_ipkgArgs.force_overwrite = ( m_ipkgExecOptions & FORCE_OVERWRITE );
++ m_ipkgArgs.force_removal_of_dependent_packages = ( m_ipkgExecOptions & FORCE_RECURSIVE );
+ m_ipkgArgs.verbose_wget = ( m_ipkgExecOptions & FORCE_VERBOSE_WGET );
++ m_ipkgArgs.verbosity = m_ipkgExecVerbosity;
+ if ( m_ipkgArgs.dest )
+ free( m_ipkgArgs.dest );
+ if ( !destination.isNull() )
+@@ -525,7 +556,8 @@
+ }
+ else
+ m_ipkgArgs.dest = 0l;
+-*/
++#endif
++
+ // Connect output signal to widget
+
+ if ( !rawOutput )
+@@ -539,23 +571,33 @@
+ {
+ case OPackage::Update : {
+ connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput );
+- ret = opkg_update_package_lists( m_opkg, &fsignalOpkgProgress, NULL );
++#ifdef USE_LIBOPKG
++ ret = opkg_update_package_lists( &fsignalOpkgProgress, NULL );
++#else
++ ipkg_lists_update( &m_ipkgArgs );
++#endif
+ disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 );
+
++#ifdef USE_LIBOPKG
+ if( ret != OPKG_NO_ERROR ) {
+- emit signalIpkgMessage( tr("Update failed: ") + opkg_error_message( ret ) );
++ emit signalIpkgMessage( tr("Update failed") );
+ return false;
+ }
++#endif
+ };
+ break;
+ case OPackage::Upgrade : {
+ connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput );
+- ret = opkg_upgrade_all( m_opkg, &fsignalOpkgProgress, NULL );
++#ifdef USE_LIBOPKG
++ ret = opkg_upgrade_all( &fsignalOpkgProgress, NULL );
+ if( ret != OPKG_NO_ERROR ) {
+- emit signalIpkgMessage( tr("Upgrade failed: ") + opkg_error_message( ret ) );
++ emit signalIpkgMessage( tr("Upgrade failed") );
+ disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 );
+ return false;
+ }
++#else
++ ipkg_packages_upgrade( &m_ipkgArgs );
++#endif
+
+ // Re-link non-root destinations to make sure everything is in sync
+ OConfItemList *destList = destinations();
+@@ -574,12 +616,16 @@
+ connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput );
+ for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it )
+ {
+- ret = opkg_install_package( m_opkg, (*it), &fsignalOpkgProgress, NULL );
++#ifdef USE_LIBOPKG
++ ret = opkg_install_package( (*it), &fsignalOpkgProgress, NULL );
+ if( ret != OPKG_NO_ERROR ) {
+- emit signalIpkgMessage( tr("Install failed: ") + opkg_error_message( ret ) );
++ emit signalIpkgMessage( tr("Install failed") );
+ disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 );
+ return false;
+ }
++#else
++ ipkg_packages_install( &m_ipkgArgs, (*it) );
++#endif
+ }
+ if ( destination != "root" )
+ linkPackageDir( destination );
+@@ -595,18 +641,17 @@
+ for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it )
+ {
+ unlinkPackage( (*it), destList );
+- ret = opkg_remove_package( m_opkg, (*it), &fsignalOpkgProgress, NULL );
++#ifdef USE_LIBOPKG
++ ret = opkg_remove_package( (*it), &fsignalOpkgProgress, NULL );
+ if( ret != OPKG_NO_ERROR ) {
+- if ( ret == OPKG_DEPENDENCIES_FAILED || ret == OPKG_UNKNOWN_ERROR ) {
+- emit signalIpkgMessage( tr("Remove failed: other package(s) depend on the specified package") );
+- }
+- else {
+- emit signalIpkgMessage( tr("Remove failed: ") + opkg_error_message( ret ) );
+- }
++ emit signalIpkgMessage( tr("Remove failed") );
+ delete destList;
+ disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 );
+ return false;
+ }
++#else
++ ipkg_packages_remove( &m_ipkgArgs, (*it), true );
++#endif
+ }
+
+ delete destList;
+@@ -614,42 +659,74 @@
+ };
+ break;
+ case OPackage::Download : {
++#ifndef USE_LIBOPKG
+ connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput );
+ for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it )
+ {
+-//X ipkg_packages_download( &m_ipkgArgs, (*it) );
++ ipkg_packages_download( &m_ipkgArgs, (*it) );
+ }
+ disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 );
++#endif
+ };
+ break;
+ case OPackage::Info : {
+ connect( this, SIGNAL(signalIpkgStatus(const QString &)), receiver, slotOutput );
+-//X ipkg_packages_info( &m_ipkgArgs, (*parameters.begin()), &fIpkgStatus, 0l );
+- opkg_package_t *pkginfo = opkg_find_package( m_opkg, (*parameters.begin()), NULL, NULL, NULL );
++#ifdef USE_LIBOPKG
++ pkg_t *pkginfo = opkg_find_package( (*parameters.begin()), NULL, NULL, NULL );
+ if(pkginfo) {
+ QString msg = tr("Package: %1\n").arg( pkginfo->name );
+ msg += tr("Version: %1\n").arg( pkginfo->version );
+ msg += tr("Architecture: %1\n").arg( pkginfo->architecture );
+- if( pkginfo->repository )
+- msg += tr("Repository: %1\n").arg( pkginfo->repository );
++ if( pkginfo->source )
++ msg += tr("Source: %1\n").arg( pkginfo->source );
+ if( pkginfo->description )
+ msg += tr("Description: %1\n\n").arg( pkginfo->description );
+ if( pkginfo->tags )
+ msg += tr("Tags: %1\n").arg( pkginfo->tags );
+- if( pkginfo->url )
+- msg += tr("URL: %1\n").arg( pkginfo->url );
+ if( pkginfo->size > 0 )
+ msg += tr("Size: %1\n").arg( pkginfo->size );
+- msg += tr("Status: %1").arg( pkginfo->installed ? tr("installed") : "" );
++ QString status;
++ switch( pkginfo->state_status ) {
++ case SS_NOT_INSTALLED:
++ status = tr( "Not installed" );
++ break;
++ case SS_UNPACKED:
++ status = tr( "Unpacked" );
++ break;
++ case SS_HALF_CONFIGURED:
++ status = tr( "Partially configured" );
++ break;
++ case SS_INSTALLED:
++ status = tr( "Installed" );
++ break;
++ case SS_HALF_INSTALLED:
++ status = tr( "Partially installed" );
++ break;
++// case SS_CONFIG_FILES:
++ case SS_POST_INST_FAILED:
++ status = tr( "Postinst failed" );
++ break;
++ case SS_REMOVAL_FAILED:
++ status = tr( "Removal failed" );
++ break;
++ default:
++ status = tr( "Unknown" );
++ }
++ msg += tr("Status: %1").arg( status );
+ emit signalIpkgStatus( msg );
+ }
++#else
++ ipkg_packages_info( &m_ipkgArgs, (*parameters.begin()), &fIpkgStatus, 0l );
++#endif
+ disconnect( this, SIGNAL(signalIpkgStatus(const QString &)), 0, 0 );
+ };
+ break;
+ case OPackage::Files : {
++#ifndef USE_LIBOPKG
+ connect( this, SIGNAL(signalIpkgList(const QString &)), receiver, slotOutput );
+-//X ipkg_package_files( &m_ipkgArgs, (*parameters.begin()), &fIpkgFiles, 0l );
++ ipkg_package_files( &m_ipkgArgs, (*parameters.begin()), &fIpkgFiles, 0l );
+ disconnect( this, SIGNAL(signalIpkgList(const QString &)), 0, 0 );
++#endif
+ };
+ break;
+ default : break;
+--- packagemanager/oipkg.h 2010-03-17 21:43:48.000000000 +0000
++++ packagemanager/oipkg.h 2010-03-17 22:50:24.000000000 +0000
+@@ -31,6 +31,8 @@
+ #ifndef OIPKG_H
+ #define OIPKG_H
+
++#include <cstdio>
++
+ #include "oconfitem.h"
+ #include "opackage.h"
+
+@@ -38,10 +40,27 @@
+
+ #include <qobject.h>
+
++// Hack for 1.2.4 patch
++#define USE_LIBOPKG
++
++#ifdef USE_LIBOPKG
++// Some hacks are required due to poor naming in opkg headers
++#ifdef DEBUG
++ #define DEBUG_FIX
++ #undef DEBUG
++#endif
++
+ extern "C" {
+ #include <opkg.h>
+ };
+
++#ifdef DEBUG_FIX
++ #define DEBUG
++ #undef DEBUG_FIX
++#endif
++
++#endif
++
+ // Ipkg execution options (m_ipkgExecOptions)
+ #define FORCE_DEPENDS 0x0001
+ #define FORCE_REMOVE 0x0002
+@@ -102,7 +121,6 @@
+ int m_ipkgExecOptions; // Bit-mapped flags for Ipkg execution options
+ int m_ipkgExecVerbosity; // Ipkg execution verbosity level
+ QString m_rootPath; // Directory path where the 'root' destination is located
+- opkg_t *m_opkg;
+
+ void loadConfiguration();
+ OConfItemList *filterConfItems( OConfItem::Type typefilter = OConfItem::NotDefined );
diff --git a/recipes/opie-packagemanager/opie-packagemanager_1.2.4.bb b/recipes/opie-packagemanager/opie-packagemanager_1.2.4.bb
index 57c6ab5cfa..28fc5b873b 100644
--- a/recipes/opie-packagemanager/opie-packagemanager_1.2.4.bb
+++ b/recipes/opie-packagemanager/opie-packagemanager_1.2.4.bb
@@ -1,6 +1,6 @@
require ${PN}.inc
-PR = "r1"
+PR = "r2"
DEPENDS = "opkg"
@@ -10,4 +10,5 @@ SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/${APPNAME};c
${HANDHELDS_CVS};tag=${TAG};module=opie/pics;cvsdate=${SRCDATE} \
${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
file://split-config.patch;patch=1 \
- file://opkg.patch;patch=1"
+ file://opkg.patch;patch=1 \
+ file://opkg_update.patch;patch=1"
diff --git a/recipes/opkg/opkg-collateral.bb b/recipes/opkg/opkg-collateral.bb
index 401e76e8be..a7ec321c6f 100644
--- a/recipes/opkg/opkg-collateral.bb
+++ b/recipes/opkg/opkg-collateral.bb
@@ -1,11 +1,12 @@
DESCRIPTION = "opkg configuration files"
SECTION = "base"
LICENSE = "MIT"
-PR = "r1"
+PR = "r2"
SRC_URI = "file://opkg.conf.comments \
file://lists \
file://dest \
+ file://tmp_dir \
file://src "
do_compile () {
@@ -15,9 +16,17 @@ do_compile () {
cat ${WORKDIR}/lists >>${WORKDIR}/opkg.conf
}
+do_compile_append_shr () {
+ cat ${WORKDIR}/tmp_dir >>${WORKDIR}/opkg.conf
+}
+
do_install () {
install -d ${D}${sysconfdir}/opkg
install -m 0644 ${WORKDIR}/opkg.conf ${D}${sysconfdir}/opkg/opkg.conf
}
+do_install_append_shr () {
+ install -d ${D}/var/lib/opkg/tmp
+}
+
CONFFILES_${PN} = "${sysconfdir}/opkg/opkg.conf"
diff --git a/recipes/opkg/opkg-collateral/tmp_dir b/recipes/opkg/opkg-collateral/tmp_dir
new file mode 100644
index 0000000000..7ba6abf6cf
--- /dev/null
+++ b/recipes/opkg/opkg-collateral/tmp_dir
@@ -0,0 +1,4 @@
+# We have whole /tmp in volatile tmpfs which is better than wear leveling NAND or uSD
+# But also bad for big upgrades where tmpfs eats whole memory,
+# device starts swapping (possibly using more NAND/uSD than temporary unpack) and then segfaults because of lack of space
+option tmp_dir /var/lib/opkg/tmp
diff --git a/recipes/opkg/opkg.inc b/recipes/opkg/opkg.inc
index 20f415e3de..9a3d3dc71b 100644
--- a/recipes/opkg/opkg.inc
+++ b/recipes/opkg/opkg.inc
@@ -1,10 +1,10 @@
DESCRIPTION = "Opkg Package Manager"
DESCRIPTION_libopkg = "Opkg Package Manager Library"
SECTION = "base"
-LICENSE = "GPL"
-DEPENDS = "curl gpgme"
+LICENSE = "GPLv2"
+DEPENDS = "curl gpgme openssl"
PV = "0.1.6+svnr${SRCPV}"
-INC_PR = "r19"
+INC_PR = "r21"
FILESPATHPKG =. "opkg:"
diff --git a/recipes/opkg/opkg_svn.bb b/recipes/opkg/opkg_svn.bb
index 4945260065..5138458498 100644
--- a/recipes/opkg/opkg_svn.bb
+++ b/recipes/opkg/opkg_svn.bb
@@ -1,7 +1,5 @@
require opkg.inc
-DEPENDS_append = " openssl"
-
PR = "${INC_PR}"
PROVIDES =+ "virtual/update-alternatives"
diff --git a/recipes/opkg/update-alternatives-merge.inc b/recipes/opkg/update-alternatives-merge.inc
index a07275d038..f129fdbe84 100644
--- a/recipes/opkg/update-alternatives-merge.inc
+++ b/recipes/opkg/update-alternatives-merge.inc
@@ -4,7 +4,8 @@
pkg_postinst_${PN}_append () {
alternatives_dir_old="${prefix}/lib/ipkg/alternatives"
alternatives_dir_new="${prefix}/lib/opkg/alternatives"
- if [ -e "${alternatives_dir_old}" ] ; then
+ # if ${prefix}/lib/ipkg is already link (probably to ${prefix}/lib/opkg), then nothing needs to be merged and definitely we don't want "rm -rf ${alternatives_dir_old}" to happen
+ if [ ! -h ${prefix}/lib/ipkg -a -e "${alternatives_dir_old}" ] ; then
if [ ! -e "${alternatives_dir_new}" ] ; then
mkdir -p "${alternatives_dir_new}";
fi
diff --git a/recipes/orc/files/03_orcutils.patch b/recipes/orc/files/03_orcutils.patch
new file mode 100644
index 0000000000..9d298a9578
--- /dev/null
+++ b/recipes/orc/files/03_orcutils.patch
@@ -0,0 +1,185 @@
+--- /dev/null 2010-02-01 20:37:03.729168572 +0100
++++ b/orc/orcutils.c 2010-02-02 12:12:07.071430049 +0100
+@@ -0,0 +1,172 @@
++/*
++ * ORC - Library of Optimized Inner Loops
++ * Copyright (c) 2003,2004 David A. Schleef <ds@schleef.org>
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
++ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
++ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
++ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
++ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
++ * POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++#include <orc/orcdebug.h>
++#include <orc/orcutils.h>
++
++#include <fcntl.h>
++#include <stdlib.h>
++#include <string.h>
++
++/**
++ * SECTION:orcutils
++ * @title: Utility functions
++ * @short_description: Orc utility functions
++ */
++
++int
++get_file_int (const char *file, int *value)
++{
++ char buffer[20];
++ char *endptr;
++ int fd;
++ int n;
++
++ fd = open (file, O_RDONLY);
++ if (fd < 0) return 0;
++
++ n = read(fd, buffer, 19);
++ close(fd);
++ if (n < 0) {
++ return 0;
++ }
++ buffer[n] = 0;
++
++ *value = strtol (buffer, &endptr, 0);
++
++ if (endptr[0] == 0 || endptr[0] == '\n') return 1;
++ return 0;
++}
++
++char *
++get_file (const char *filename)
++{
++ char *cpuinfo;
++ int fd;
++ int n;
++
++ cpuinfo = malloc(4096);
++ if (cpuinfo == NULL) return NULL;
++
++ fd = open(filename, O_RDONLY);
++ if (fd < 0) {
++ free (cpuinfo);
++ return NULL;
++ }
++
++ n = read(fd, cpuinfo, 4095);
++ if (n < 0) {
++ free (cpuinfo);
++ close (fd);
++ return NULL;
++ }
++ cpuinfo[n] = 0;
++
++ close (fd);
++
++ return cpuinfo;
++}
++
++char *
++get_cpuinfo_line (char *cpuinfo, const char *tag)
++{
++ char *flags;
++ char *end;
++ char *colon;
++
++ flags = strstr(cpuinfo,tag);
++ if (flags == NULL) return NULL;
++
++ end = strchr(flags, '\n');
++ if (end == NULL) return NULL;
++ colon = strchr (flags, ':');
++ if (colon == NULL) return NULL;
++ colon++;
++ if(colon >= end) return NULL;
++
++ return _strndup (colon, end-colon);
++}
++
++char *
++_strndup (const char *s, int n)
++{
++ char *r;
++ r = malloc (n+1);
++ memcpy(r,s,n);
++ r[n]=0;
++
++ return r;
++}
++
++char **
++strsplit (char *s)
++{
++ char **list = NULL;
++ char *tok;
++ int n = 0;
++
++ while (*s == ' ') s++;
++
++ list = malloc (1 * sizeof(char *));
++ while (*s) {
++ tok = s;
++ while (*s && *s != ' ') s++;
++
++ list[n] = _strndup (tok, s - tok);
++ while (*s && *s == ' ') s++;
++ list = realloc (list, (n + 2) * sizeof(char *));
++ n++;
++ }
++
++ list[n] = NULL;
++ return list;
++}
++
++char *
++get_tag_value (char *s, const char *tag)
++{
++ char *flags;
++ char *end;
++ char *colon;
++
++ flags = strstr(s,tag);
++ if (flags == NULL) return NULL;
++
++ end = strchr(flags, '\n');
++ if (end == NULL) return NULL;
++ colon = strchr (flags, ':');
++ if (colon == NULL) return NULL;
++ colon++;
++ if(colon >= end) return NULL;
++
++ return _strndup (colon, end-colon);
++}
++
++
+--- a/orc/Makefile.am 2010-02-02 12:13:47.091383078 +0100
++++ b/orc/Makefile.am 2010-02-02 12:13:53.087383965 +0100
+@@ -13,6 +13,7 @@
+ orc.c \
+ orcexecutor.c \
+ orcfunctions.c \
++ orcutils.c \
+ orcrule.c \
+ orccodemem.c \
+ orcprogram.c \
diff --git a/recipes/orc/files/99_autoreconf.patch b/recipes/orc/files/99_autoreconf.patch
new file mode 100644
index 0000000000..7a2de2033c
--- /dev/null
+++ b/recipes/orc/files/99_autoreconf.patch
@@ -0,0 +1,20549 @@
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/aclocal.m4 orc-0.4.3/aclocal.m4
+--- orc-0.4.3.old/aclocal.m4 2009-12-14 02:20:07.000000000 +0100
++++ orc-0.4.3/aclocal.m4 2010-02-02 12:18:12.191382009 +0100
+@@ -1,7 +1,7 @@
+-# generated automatically by aclocal 1.10.2 -*- Autoconf -*-
++# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+-# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -13,8 +13,8 @@
+
+ m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],,
+-[m4_warning([this file was generated for autoconf 2.63.
++m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
++[m4_warning([this file was generated for autoconf 2.65.
+ You have another version of autoconf. It may work, but is not guaranteed to.
+ If you have problems, you may need to regenerate the build system entirely.
+ To do so, use the procedure documented by the package, typically `autoreconf'.])])
+@@ -31,10 +31,10 @@
+ # generated from the m4 files accompanying Automake X.Y.
+ # (This private macro should not be called outside this file.)
+ AC_DEFUN([AM_AUTOMAKE_VERSION],
+-[am__api_version='1.10'
++[am__api_version='1.11'
+ dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+ dnl require some minimum version. Point them to the right macro.
+-m4_if([$1], [1.10.2], [],
++m4_if([$1], [1.11.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+ ])
+
+@@ -50,7 +50,7 @@
+ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+ # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+ AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+-[AM_AUTOMAKE_VERSION([1.10.2])dnl
++[AM_AUTOMAKE_VERSION([1.11.1])dnl
+ m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+@@ -132,14 +132,14 @@
+
+ # AM_CONDITIONAL -*- Autoconf -*-
+
+-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
++# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+ # Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+
+-# serial 8
++# serial 9
+
+ # AM_CONDITIONAL(NAME, SHELL-CONDITION)
+ # -------------------------------------
+@@ -152,6 +152,7 @@
+ AC_SUBST([$1_FALSE])dnl
+ _AM_SUBST_NOTMAKE([$1_TRUE])dnl
+ _AM_SUBST_NOTMAKE([$1_FALSE])dnl
++m4_define([_AM_COND_VALUE_$1], [$2])dnl
+ if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+@@ -165,14 +166,14 @@
+ Usually this means the macro was only invoked conditionally.]])
+ fi])])
+
+-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+ # Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+
+-# serial 9
++# serial 10
+
+ # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+ # written in clear, in which case automake, when reading aclocal.m4,
+@@ -229,6 +230,16 @@
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
++ am__universal=false
++ m4_case([$1], [CC],
++ [case " $depcc " in #(
++ *\ -arch\ *\ -arch\ *) am__universal=true ;;
++ esac],
++ [CXX],
++ [case " $depcc " in #(
++ *\ -arch\ *\ -arch\ *) am__universal=true ;;
++ esac])
++
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+@@ -246,7 +257,17 @@
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
++ # We check with `-c' and `-o' for the sake of the "dashmstdout"
++ # mode. It turns out that the SunPro C++ compiler does not properly
++ # handle `-M -o', and we need to detect this. Also, some Intel
++ # versions had trouble with output in subdirs
++ am__obj=sub/conftest.${OBJEXT-o}
++ am__minus_obj="-o $am__obj"
+ case $depmode in
++ gcc)
++ # This depmode causes a compiler race in universal mode.
++ test "$am__universal" = false || continue
++ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+@@ -256,19 +277,23 @@
+ break
+ fi
+ ;;
++ msvisualcpp | msvcmsys)
++ # This compiler won't grok `-c -o', but also, the minuso test has
++ # not run yet. These depmodes are late enough in the game, and
++ # so weak that their functioning should not be impacted.
++ am__obj=conftest.${OBJEXT-o}
++ am__minus_obj=
++ ;;
+ none) break ;;
+ esac
+- # We check with `-c' and `-o' for the sake of the "dashmstdout"
+- # mode. It turns out that the SunPro C++ compiler does not properly
+- # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
++ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
++ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
++ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+@@ -418,13 +443,13 @@
+ # Do all the work for Automake. -*- Autoconf -*-
+
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+-# 2005, 2006, 2008 Free Software Foundation, Inc.
++# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+
+-# serial 13
++# serial 16
+
+ # This macro actually does too much. Some checks are only needed if
+ # your package does certain things. But this isn't really a big deal.
+@@ -441,7 +466,7 @@
+ # arguments mandatory, and then we can depend on a new Autoconf
+ # release and drop the old call support.
+ AC_DEFUN([AM_INIT_AUTOMAKE],
+-[AC_PREREQ([2.60])dnl
++[AC_PREREQ([2.62])dnl
+ dnl Autoconf wants to disallow AM_ names. We explicitly allow
+ dnl the ones we care about.
+ m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+@@ -492,8 +517,8 @@
+ AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+ AM_MISSING_PROG(AUTOHEADER, autoheader)
+ AM_MISSING_PROG(MAKEINFO, makeinfo)
+-AM_PROG_INSTALL_SH
+-AM_PROG_INSTALL_STRIP
++AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
++AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+ AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+ # We need awk for the "check" target. The system "awk" is bad on
+ # some platforms.
+@@ -501,24 +526,37 @@
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+- [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+- [_AM_PROG_TAR([v7])])])
++ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
++ [_AM_PROG_TAR([v7])])])
+ _AM_IF_OPTION([no-dependencies],,
+ [AC_PROVIDE_IFELSE([AC_PROG_CC],
+- [_AM_DEPENDENCIES(CC)],
+- [define([AC_PROG_CC],
+- defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
++ [_AM_DEPENDENCIES(CC)],
++ [define([AC_PROG_CC],
++ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
+- [_AM_DEPENDENCIES(CXX)],
+- [define([AC_PROG_CXX],
+- defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
++ [_AM_DEPENDENCIES(CXX)],
++ [define([AC_PROG_CXX],
++ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+ AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+- [_AM_DEPENDENCIES(OBJC)],
+- [define([AC_PROG_OBJC],
+- defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
++ [_AM_DEPENDENCIES(OBJC)],
++ [define([AC_PROG_OBJC],
++ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+ ])
++_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
++dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
++dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
++dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
++AC_CONFIG_COMMANDS_PRE(dnl
++[m4_provide_if([_AM_COMPILER_EXEEXT],
++ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+ ])
+
++dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
++dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
++dnl mangled by Autoconf and run in a shell conditional statement.
++m4_define([_AC_COMPILER_EXEEXT],
++m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
++
+
+ # When config.status generates a header, we must update the stamp-h file.
+ # This file resides in the same directory as the config header
+@@ -541,7 +579,7 @@
+ done
+ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
++# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -552,7 +590,14 @@
+ # Define $install_sh.
+ AC_DEFUN([AM_PROG_INSTALL_SH],
+ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+-install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
++if test x"${install_sh}" != xset; then
++ case $am_aux_dir in
++ *\ * | *\ *)
++ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
++ *)
++ install_sh="\${SHELL} $am_aux_dir/install-sh"
++ esac
++fi
+ AC_SUBST(install_sh)])
+
+ # Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+@@ -579,27 +624,38 @@
+ # Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+ # From Jim Meyering
+
+-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
++# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+ # Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+
+-# serial 4
++# serial 5
+
++# AM_MAINTAINER_MODE([DEFAULT-MODE])
++# ----------------------------------
++# Control maintainer-specific portions of Makefiles.
++# Default is to disable them, unless `enable' is passed literally.
++# For symmetry, `disable' may be passed as well. Anyway, the user
++# can override the default with the --enable/--disable switch.
+ AC_DEFUN([AM_MAINTAINER_MODE],
+-[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+- dnl maintainer-mode is disabled by default
+- AC_ARG_ENABLE(maintainer-mode,
+-[ --enable-maintainer-mode enable make rules and dependencies not useful
++[m4_case(m4_default([$1], [disable]),
++ [enable], [m4_define([am_maintainer_other], [disable])],
++ [disable], [m4_define([am_maintainer_other], [enable])],
++ [m4_define([am_maintainer_other], [enable])
++ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
++AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
++ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
++ AC_ARG_ENABLE([maintainer-mode],
++[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+- USE_MAINTAINER_MODE=$enableval,
+- USE_MAINTAINER_MODE=no)
++ [USE_MAINTAINER_MODE=$enableval],
++ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+- AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
++ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+- AC_SUBST(MAINT)dnl
++ AC_SUBST([MAINT])dnl
+ ]
+ )
+
+@@ -607,13 +663,13 @@
+
+ # Check to see how 'make' treats includes. -*- Autoconf -*-
+
+-# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
++# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+
+-# serial 3
++# serial 4
+
+ # AM_MAKE_INCLUDE()
+ # -----------------
+@@ -622,7 +678,7 @@
+ [am_make=${MAKE-make}
+ cat > confinc << 'END'
+ am__doit:
+- @echo done
++ @echo this is the am__doit target
+ .PHONY: am__doit
+ END
+ # If we don't find an include directive, just comment out the code.
+@@ -632,24 +688,24 @@
+ _am_result=none
+ # First try GNU make style include.
+ echo "include confinc" > confmf
+-# We grep out `Entering directory' and `Leaving directory'
+-# messages which can occur if `w' ends up in MAKEFLAGS.
+-# In particular we don't look at `^make:' because GNU make might
+-# be invoked under some other name (usually "gmake"), in which
+-# case it prints its new name instead of `make'.
+-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+- am__include=include
+- am__quote=
+- _am_result=GNU
+-fi
++# Ignore all kinds of additional output from `make'.
++case `$am_make -s -f confmf 2> /dev/null` in #(
++*the\ am__doit\ target*)
++ am__include=include
++ am__quote=
++ _am_result=GNU
++ ;;
++esac
+ # Now try BSD make style include.
+ if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+- am__include=.include
+- am__quote="\""
+- _am_result=BSD
+- fi
++ case `$am_make -s -f confmf 2> /dev/null` in #(
++ *the\ am__doit\ target*)
++ am__include=.include
++ am__quote="\""
++ _am_result=BSD
++ ;;
++ esac
+ fi
+ AC_SUBST([am__include])
+ AC_SUBST([am__quote])
+@@ -659,14 +715,14 @@
+
+ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
++# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+ # Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+
+-# serial 5
++# serial 6
+
+ # AM_MISSING_PROG(NAME, PROGRAM)
+ # ------------------------------
+@@ -683,7 +739,14 @@
+ AC_DEFUN([AM_MISSING_HAS_RUN],
+ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+ AC_REQUIRE_AUX_FILE([missing])dnl
+-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
++if test x"${MISSING+set}" != xset; then
++ case $am_aux_dir in
++ *\ * | *\ *)
++ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
++ *)
++ MISSING="\${SHELL} $am_aux_dir/missing" ;;
++ esac
++fi
+ # Use eval to expand $SHELL
+ if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+@@ -754,14 +817,14 @@
+
+ # Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
++# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+ # Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+
+-# serial 4
++# serial 5
+
+ # AM_SANITY_CHECK
+ # ---------------
+@@ -770,16 +833,29 @@
+ # Just in case
+ sleep 1
+ echo timestamp > conftest.file
++# Reject unsafe characters in $srcdir or the absolute working directory
++# name. Accept space and tab only in the latter.
++am_lf='
++'
++case `pwd` in
++ *[[\\\"\#\$\&\'\`$am_lf]]*)
++ AC_MSG_ERROR([unsafe absolute working directory name]);;
++esac
++case $srcdir in
++ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
++ AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
++esac
++
+ # Do `set' in a subshell so we don't clobber the current shell's
+ # arguments. Must try -L first in case configure is actually a
+ # symlink; some systems play weird games with the mod time of symlinks
+ # (eg FreeBSD returns the mod time of the symlink's containing
+ # directory).
+ if (
+- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
++ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+- set X `ls -t $srcdir/configure conftest.file`
++ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+@@ -832,18 +908,25 @@
+ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+ AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+-# Copyright (C) 2006 Free Software Foundation, Inc.
++# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+
++# serial 2
++
+ # _AM_SUBST_NOTMAKE(VARIABLE)
+ # ---------------------------
+ # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+ # This macro is traced by Automake.
+ AC_DEFUN([_AM_SUBST_NOTMAKE])
+
++# AM_SUBST_NOTMAKE(VARIABLE)
++# ---------------------------
++# Public sister of _AM_SUBST_NOTMAKE.
++AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
++
+ # Check how to create a tarball. -*- Autoconf -*-
+
+ # Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/config.h.in orc-0.4.3/config.h.in
+--- orc-0.4.3.old/config.h.in 2009-12-14 02:20:10.000000000 +0100
++++ orc-0.4.3/config.h.in 2010-02-02 12:18:13.000000000 +0100
+@@ -69,6 +69,9 @@
+ /* Define to 1 if you have the <string.h> header file. */
+ #undef HAVE_STRING_H
+
++/* Define to 1 if you have the <sys/param.h> header file. */
++#undef HAVE_SYS_PARAM_H
++
+ /* Define to 1 if you have the <sys/stat.h> header file. */
+ #undef HAVE_SYS_STAT_H
+
+@@ -109,6 +112,9 @@
+ /* Define to the one symbol short name of this package. */
+ #undef PACKAGE_TARNAME
+
++/* Define to the home page for this package. */
++#undef PACKAGE_URL
++
+ /* Define to the version of this package. */
+ #undef PACKAGE_VERSION
+
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/configure orc-0.4.3/configure
+--- orc-0.4.3.old/configure 2009-12-14 02:20:09.000000000 +0100
++++ orc-0.4.3/configure 2010-02-02 12:18:13.131377589 +0100
+@@ -1,18 +1,22 @@
+ #! /bin/sh
+ # Guess values for system-dependent variables and create Makefiles.
+-# Generated by GNU Autoconf 2.63 for orc 0.4.3.
++# Generated by GNU Autoconf 2.65 for orc 0.4.3.
++#
+ #
+ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+-# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
++#
++#
+ # This configure script is free software; the Free Software Foundation
+ # gives unlimited permission to copy, distribute and modify it.
+-## --------------------- ##
+-## M4sh Initialization. ##
+-## --------------------- ##
++## -------------------- ##
++## M4sh Initialization. ##
++## -------------------- ##
+
+ # Be more Bourne compatible
+ DUALCASE=1; export DUALCASE # for MKS sh
+-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+@@ -20,23 +24,15 @@
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+ else
+- case `(set -o) 2>/dev/null` in
+- *posix*) set -o posix ;;
++ case `(set -o) 2>/dev/null` in #(
++ *posix*) :
++ set -o posix ;; #(
++ *) :
++ ;;
+ esac
+-
+ fi
+
+
+-
+-
+-# PATH needs CR
+-# Avoid depending upon Character Ranges.
+-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+-as_cr_digits='0123456789'
+-as_cr_alnum=$as_cr_Letters$as_cr_digits
+-
+ as_nl='
+ '
+ export as_nl
+@@ -44,7 +40,13 @@
+ as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+ as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
++# Prefer a ksh shell builtin over an external printf program on Solaris,
++# but without wasting forks for bash or zsh.
++if test -z "$BASH_VERSION$ZSH_VERSION" \
++ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
++ as_echo='print -r --'
++ as_echo_n='print -rn --'
++elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+ else
+@@ -55,7 +57,7 @@
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+- case $arg in
++ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+@@ -78,13 +80,6 @@
+ }
+ fi
+
+-# Support unset when possible.
+-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+- as_unset=unset
+-else
+- as_unset=false
+-fi
+-
+
+ # IFS
+ # We need space, tab and new line, in precisely that order. Quoting is
+@@ -94,15 +89,15 @@
+ IFS=" "" $as_nl"
+
+ # Find who we are. Look in the path if we contain no directory separator.
+-case $0 in
++case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+-done
++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
++ done
+ IFS=$as_save_IFS
+
+ ;;
+@@ -114,12 +109,16 @@
+ fi
+ if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+- { (exit 1); exit 1; }
++ exit 1
+ fi
+
+-# Work around bugs in pre-3.0 UWIN ksh.
+-for as_var in ENV MAIL MAILPATH
+-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
++# Unset variables that we do not need and which cause bugs (e.g. in
++# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
++# suppresses any "Segmentation fault" message there. '((' could
++# trigger a bug in pdksh 5.2.14.
++for as_var in BASH_ENV ENV MAIL MAILPATH
++do eval test x\${$as_var+set} = xset \
++ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+ done
+ PS1='$ '
+ PS2='> '
+@@ -131,330 +130,299 @@
+ LANGUAGE=C
+ export LANGUAGE
+
+-# Required to use basename.
+-if expr a : '\(a\)' >/dev/null 2>&1 &&
+- test "X`expr 00001 : '.*\(...\)'`" = X001; then
+- as_expr=expr
+-else
+- as_expr=false
+-fi
+-
+-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+- as_basename=basename
+-else
+- as_basename=false
+-fi
+-
+-
+-# Name of the executable.
+-as_me=`$as_basename -- "$0" ||
+-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+- X"$0" : 'X\(//\)$' \| \
+- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+-$as_echo X/"$0" |
+- sed '/^.*\/\([^/][^/]*\)\/*$/{
+- s//\1/
+- q
+- }
+- /^X\/\(\/\/\)$/{
+- s//\1/
+- q
+- }
+- /^X\/\(\/\).*/{
+- s//\1/
+- q
+- }
+- s/.*/./; q'`
+-
+ # CDPATH.
+-$as_unset CDPATH
+-
++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+ if test "x$CONFIG_SHELL" = x; then
+- if (eval ":") 2>/dev/null; then
+- as_have_required=yes
++ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
++ emulate sh
++ NULLCMD=:
++ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
++ # is contrary to our usage. Disable this feature.
++ alias -g '\${1+\"\$@\"}'='\"\$@\"'
++ setopt NO_GLOB_SUBST
+ else
+- as_have_required=no
++ case \`(set -o) 2>/dev/null\` in #(
++ *posix*) :
++ set -o posix ;; #(
++ *) :
++ ;;
++esac
+ fi
+-
+- if test $as_have_required = yes && (eval ":
+-(as_func_return () {
+- (exit \$1)
+-}
+-as_func_success () {
+- as_func_return 0
+-}
+-as_func_failure () {
+- as_func_return 1
+-}
+-as_func_ret_success () {
+- return 0
+-}
+-as_func_ret_failure () {
+- return 1
+-}
++"
++ as_required="as_fn_return () { (exit \$1); }
++as_fn_success () { as_fn_return 0; }
++as_fn_failure () { as_fn_return 1; }
++as_fn_ret_success () { return 0; }
++as_fn_ret_failure () { return 1; }
+
+ exitcode=0
+-if as_func_success; then
+- :
+-else
+- exitcode=1
+- echo as_func_success failed.
+-fi
+-
+-if as_func_failure; then
+- exitcode=1
+- echo as_func_failure succeeded.
+-fi
+-
+-if as_func_ret_success; then
+- :
+-else
+- exitcode=1
+- echo as_func_ret_success failed.
+-fi
+-
+-if as_func_ret_failure; then
+- exitcode=1
+- echo as_func_ret_failure succeeded.
+-fi
+-
+-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+- :
++as_fn_success || { exitcode=1; echo as_fn_success failed.; }
++as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
++as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
++as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
++if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
++
++else
++ exitcode=1; echo positional parameters were not saved.
++fi
++test x\$exitcode = x0 || exit 1"
++ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
++ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
++ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
++ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
++test \$(( 1 + 1 )) = 2 || exit 1"
++ if (eval "$as_required") 2>/dev/null; then :
++ as_have_required=yes
+ else
+- exitcode=1
+- echo positional parameters were not saved.
++ as_have_required=no
+ fi
++ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+-test \$exitcode = 0) || { (exit 1); exit 1; }
+-
+-(
+- as_lineno_1=\$LINENO
+- as_lineno_2=\$LINENO
+- test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+- test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+-") 2> /dev/null; then
+- :
+ else
+- as_candidate_shells=
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++as_found=false
+ for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- case $as_dir in
++ as_found=:
++ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+- as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
++ # Try only shells that exist, to save several forks.
++ as_shell=$as_dir/$as_base
++ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
++ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
++ CONFIG_SHELL=$as_shell as_have_required=yes
++ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
++ break 2
++fi
++fi
+ done;;
+ esac
++ as_found=false
+ done
++$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
++ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
++ CONFIG_SHELL=$SHELL as_have_required=yes
++fi; }
+ IFS=$as_save_IFS
+
+
+- for as_shell in $as_candidate_shells $SHELL; do
+- # Try only shells that exist, to save several forks.
+- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+- { ("$as_shell") 2> /dev/null <<\_ASEOF
+-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+- emulate sh
+- NULLCMD=:
+- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+- # is contrary to our usage. Disable this feature.
+- alias -g '${1+"$@"}'='"$@"'
+- setopt NO_GLOB_SUBST
+-else
+- case `(set -o) 2>/dev/null` in
+- *posix*) set -o posix ;;
+-esac
+-
+-fi
+-
+-
+-:
+-_ASEOF
+-}; then
+- CONFIG_SHELL=$as_shell
+- as_have_required=yes
+- if { "$as_shell" 2> /dev/null <<\_ASEOF
+-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+- emulate sh
+- NULLCMD=:
+- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+- # is contrary to our usage. Disable this feature.
+- alias -g '${1+"$@"}'='"$@"'
+- setopt NO_GLOB_SUBST
+-else
+- case `(set -o) 2>/dev/null` in
+- *posix*) set -o posix ;;
+-esac
+-
+-fi
+-
+-
+-:
+-(as_func_return () {
+- (exit $1)
+-}
+-as_func_success () {
+- as_func_return 0
+-}
+-as_func_failure () {
+- as_func_return 1
+-}
+-as_func_ret_success () {
+- return 0
+-}
+-as_func_ret_failure () {
+- return 1
+-}
+-
+-exitcode=0
+-if as_func_success; then
+- :
+-else
+- exitcode=1
+- echo as_func_success failed.
+-fi
+-
+-if as_func_failure; then
+- exitcode=1
+- echo as_func_failure succeeded.
+-fi
+-
+-if as_func_ret_success; then
+- :
+-else
+- exitcode=1
+- echo as_func_ret_success failed.
+-fi
+-
+-if as_func_ret_failure; then
+- exitcode=1
+- echo as_func_ret_failure succeeded.
+-fi
+-
+-if ( set x; as_func_ret_success y && test x = "$1" ); then
+- :
+-else
+- exitcode=1
+- echo positional parameters were not saved.
+-fi
+-
+-test $exitcode = 0) || { (exit 1); exit 1; }
+-
+-(
+- as_lineno_1=$LINENO
+- as_lineno_2=$LINENO
+- test "x$as_lineno_1" != "x$as_lineno_2" &&
+- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+-
+-_ASEOF
+-}; then
+- break
+-fi
+-
+-fi
+-
+- done
+-
+- if test "x$CONFIG_SHELL" != x; then
+- for as_var in BASH_ENV ENV
+- do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+- done
++ if test "x$CONFIG_SHELL" != x; then :
++ # We cannot yet assume a decent shell, so we have to provide a
++ # neutralization value for shells without unset; and this also
++ # works around shells that cannot unset nonexistent variables.
++ BASH_ENV=/dev/null
++ ENV=/dev/null
++ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+ fi
+
+-
+- if test $as_have_required = no; then
+- echo This script requires a shell more modern than all the
+- echo shells that I found on your system. Please install a
+- echo modern shell, or manually run the script under such a
+- echo shell if you do have one.
+- { (exit 1); exit 1; }
++ if test x$as_have_required = xno; then :
++ $as_echo "$0: This script requires a shell more modern than all"
++ $as_echo "$0: the shells that I found on your system."
++ if test x${ZSH_VERSION+set} = xset ; then
++ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
++ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
++ else
++ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
++$0: including any error possibly output before this
++$0: message. Then install a modern shell, or manually run
++$0: the script under such a shell if you do have one."
++ fi
++ exit 1
+ fi
+-
+-
+ fi
+-
+ fi
++SHELL=${CONFIG_SHELL-/bin/sh}
++export SHELL
++# Unset more variables known to interfere with behavior of common tools.
++CLICOLOR_FORCE= GREP_OPTIONS=
++unset CLICOLOR_FORCE GREP_OPTIONS
++
++## --------------------- ##
++## M4sh Shell Functions. ##
++## --------------------- ##
++# as_fn_unset VAR
++# ---------------
++# Portably unset VAR.
++as_fn_unset ()
++{
++ { eval $1=; unset $1;}
++}
++as_unset=as_fn_unset
++
++# as_fn_set_status STATUS
++# -----------------------
++# Set $? to STATUS, without forking.
++as_fn_set_status ()
++{
++ return $1
++} # as_fn_set_status
++
++# as_fn_exit STATUS
++# -----------------
++# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
++as_fn_exit ()
++{
++ set +e
++ as_fn_set_status $1
++ exit $1
++} # as_fn_exit
++
++# as_fn_mkdir_p
++# -------------
++# Create "$as_dir" as a directory, including parents if necessary.
++as_fn_mkdir_p ()
++{
+
++ case $as_dir in #(
++ -*) as_dir=./$as_dir;;
++ esac
++ test -d "$as_dir" || eval $as_mkdir_p || {
++ as_dirs=
++ while :; do
++ case $as_dir in #(
++ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
++ *) as_qdir=$as_dir;;
++ esac
++ as_dirs="'$as_qdir' $as_dirs"
++ as_dir=`$as_dirname -- "$as_dir" ||
++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$as_dir" : 'X\(//\)[^/]' \| \
++ X"$as_dir" : 'X\(//\)$' \| \
++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$as_dir" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
++ test -d "$as_dir" && break
++ done
++ test -z "$as_dirs" || eval "mkdir $as_dirs"
++ } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+
+
+-(eval "as_func_return () {
+- (exit \$1)
+-}
+-as_func_success () {
+- as_func_return 0
+-}
+-as_func_failure () {
+- as_func_return 1
+-}
+-as_func_ret_success () {
+- return 0
+-}
+-as_func_ret_failure () {
+- return 1
+-}
++} # as_fn_mkdir_p
++# as_fn_append VAR VALUE
++# ----------------------
++# Append the text in VALUE to the end of the definition contained in VAR. Take
++# advantage of any shell optimizations that allow amortized linear growth over
++# repeated appends, instead of the typical quadratic growth present in naive
++# implementations.
++if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
++ eval 'as_fn_append ()
++ {
++ eval $1+=\$2
++ }'
++else
++ as_fn_append ()
++ {
++ eval $1=\$$1\$2
++ }
++fi # as_fn_append
+
+-exitcode=0
+-if as_func_success; then
+- :
++# as_fn_arith ARG...
++# ------------------
++# Perform arithmetic evaluation on the ARGs, and store the result in the
++# global $as_val. Take advantage of shells that can avoid forks. The arguments
++# must be portable across $(()) and expr.
++if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
++ eval 'as_fn_arith ()
++ {
++ as_val=$(( $* ))
++ }'
+ else
+- exitcode=1
+- echo as_func_success failed.
+-fi
++ as_fn_arith ()
++ {
++ as_val=`expr "$@" || test $? -eq 1`
++ }
++fi # as_fn_arith
+
+-if as_func_failure; then
+- exitcode=1
+- echo as_func_failure succeeded.
+-fi
+
+-if as_func_ret_success; then
+- :
++# as_fn_error ERROR [LINENO LOG_FD]
++# ---------------------------------
++# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
++# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
++# script with status $?, using 1 if that was 0.
++as_fn_error ()
++{
++ as_status=$?; test $as_status -eq 0 && as_status=1
++ if test "$3"; then
++ as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
++ fi
++ $as_echo "$as_me: error: $1" >&2
++ as_fn_exit $as_status
++} # as_fn_error
++
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++ test "X`expr 00001 : '.*\(...\)'`" = X001; then
++ as_expr=expr
+ else
+- exitcode=1
+- echo as_func_ret_success failed.
++ as_expr=false
+ fi
+
+-if as_func_ret_failure; then
+- exitcode=1
+- echo as_func_ret_failure succeeded.
++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
++ as_basename=basename
++else
++ as_basename=false
+ fi
+
+-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+- :
++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
++ as_dirname=dirname
+ else
+- exitcode=1
+- echo positional parameters were not saved.
++ as_dirname=false
+ fi
+
+-test \$exitcode = 0") || {
+- echo No shell found that supports shell functions.
+- echo Please tell bug-autoconf@gnu.org about your system,
+- echo including any error possibly output before this message.
+- echo This can help us improve future autoconf versions.
+- echo Configuration will now proceed without shell functions.
+-}
++as_me=`$as_basename -- "$0" ||
++$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
++ X"$0" : 'X\(//\)$' \| \
++ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X/"$0" |
++ sed '/^.*\/\([^/][^/]*\)\/*$/{
++ s//\1/
++ q
++ }
++ /^X\/\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\/\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
+
++# Avoid depending upon Character Ranges.
++as_cr_letters='abcdefghijklmnopqrstuvwxyz'
++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
++as_cr_Letters=$as_cr_letters$as_cr_LETTERS
++as_cr_digits='0123456789'
++as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+- as_lineno_1=$LINENO
+- as_lineno_2=$LINENO
+- test "x$as_lineno_1" != "x$as_lineno_2" &&
+- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+-
+- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+- # uniformly replaced by the line number. The first 'sed' inserts a
+- # line-number line after each line using $LINENO; the second 'sed'
+- # does the real work. The second script uses 'N' to pair each
+- # line-number line with the line containing $LINENO, and appends
+- # trailing '-' during substitution so that $LINENO is not a special
+- # case at line end.
+- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+- # scripts with optimization help from Paolo Bonzini. Blame Lee
+- # E. McMahon (1931-1989) for sed's syntax. :-)
++ as_lineno_1=$LINENO as_lineno_1a=$LINENO
++ as_lineno_2=$LINENO as_lineno_2a=$LINENO
++ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
++ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
++ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+@@ -471,8 +439,7 @@
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+- { (exit 1); exit 1; }; }
++ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+@@ -482,29 +449,18 @@
+ exit
+ }
+
+-
+-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+- as_dirname=dirname
+-else
+- as_dirname=false
+-fi
+-
+ ECHO_C= ECHO_N= ECHO_T=
+-case `echo -n x` in
++case `echo -n x` in #(((((
+ -n*)
+- case `echo 'x\c'` in
++ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+- *) ECHO_C='\c';;
++ xy) ECHO_C='\c';;
++ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
++ ECHO_T=' ';;
+ esac;;
+ *)
+ ECHO_N='-n';;
+ esac
+-if expr a : '\(a\)' >/dev/null 2>&1 &&
+- test "X`expr 00001 : '.*\(...\)'`" = X001; then
+- as_expr=expr
+-else
+- as_expr=false
+-fi
+
+ rm -f conf$$ conf$$.exe conf$$.file
+ if test -d conf$$.dir; then
+@@ -534,7 +490,7 @@
+ rmdir conf$$.dir 2>/dev/null
+
+ if mkdir -p . 2>/dev/null; then
+- as_mkdir_p=:
++ as_mkdir_p='mkdir -p "$as_dir"'
+ else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+@@ -553,10 +509,10 @@
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+- case $1 in
++ case $1 in #(
+ -*)set "./$1";;
+ esac;
+- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+@@ -571,7 +527,6 @@
+
+
+
+-
+ # Check that we are running under the correct shell.
+ SHELL=${CONFIG_SHELL-/bin/sh}
+
+@@ -720,7 +675,8 @@
+
+
+
+-exec 7<&0 </dev/null 6>&1
++test -n "$DJDIR" || exec 7<&0 </dev/null
++exec 6>&1
+
+ # Name of the host.
+ # hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+@@ -738,7 +694,6 @@
+ subdirs=
+ MFLAGS=
+ MAKEFLAGS=
+-SHELL=${CONFIG_SHELL-/bin/sh}
+
+ # Identity of this package.
+ PACKAGE_NAME='orc'
+@@ -746,6 +701,7 @@
+ PACKAGE_VERSION='0.4.3'
+ PACKAGE_STRING='orc 0.4.3'
+ PACKAGE_BUGREPORT=''
++PACKAGE_URL=''
+
+ # Factoring default headers for most tests.
+ ac_includes_default="\
+@@ -784,7 +740,10 @@
+ #endif"
+
+ ac_unique_file="orc/orc.h"
+-ac_subst_vars='LTLIBOBJS
++ac_header_list=
++ac_subst_vars='am__EXEEXT_FALSE
++am__EXEEXT_TRUE
++LTLIBOBJS
+ LIBOBJS
+ orcbindir
+ pkgconfigdir
+@@ -922,6 +881,7 @@
+ program_transform_name
+ prefix
+ exec_prefix
++PACKAGE_URL
+ PACKAGE_BUGREPORT
+ PACKAGE_STRING
+ PACKAGE_VERSION
+@@ -1063,8 +1023,7 @@
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+- { (exit 1); exit 1; }; }
++ as_fn_error "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+@@ -1090,8 +1049,7 @@
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+- { (exit 1); exit 1; }; }
++ as_fn_error "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+@@ -1295,8 +1253,7 @@
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+- { (exit 1); exit 1; }; }
++ as_fn_error "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+@@ -1312,8 +1269,7 @@
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+- { (exit 1); exit 1; }; }
++ as_fn_error "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+@@ -1343,17 +1299,17 @@
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+- -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
+-Try \`$0 --help' for more information." >&2
+- { (exit 1); exit 1; }; }
++ -*) as_fn_error "unrecognized option: \`$ac_option'
++Try \`$0 --help' for more information."
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+- { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+- { (exit 1); exit 1; }; }
++ case $ac_envvar in #(
++ '' | [0-9]* | *[!_$as_cr_alnum]* )
++ as_fn_error "invalid variable name: \`$ac_envvar'" ;;
++ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+@@ -1370,15 +1326,13 @@
+
+ if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+- { $as_echo "$as_me: error: missing argument to $ac_option" >&2
+- { (exit 1); exit 1; }; }
++ as_fn_error "missing argument to $ac_option"
+ fi
+
+ if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+- fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
+- { (exit 1); exit 1; }; } ;;
++ fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+ fi
+@@ -1401,8 +1355,7 @@
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+- { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+- { (exit 1); exit 1; }; }
++ as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+ done
+
+ # There might be people who depend on the old broken behavior: `$host'
+@@ -1432,11 +1385,9 @@
+ ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ ac_ls_di=`ls -di .` &&
+ ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+- { $as_echo "$as_me: error: working directory cannot be determined" >&2
+- { (exit 1); exit 1; }; }
++ as_fn_error "working directory cannot be determined"
+ test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+- { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
+- { (exit 1); exit 1; }; }
++ as_fn_error "pwd does not report name of working directory"
+
+
+ # Find the source files, if location was not specified.
+@@ -1475,13 +1426,11 @@
+ fi
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+- { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+- { (exit 1); exit 1; }; }
++ as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
+ fi
+ ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ ac_abs_confdir=`(
+- cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
+- { (exit 1); exit 1; }; }
++ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
+ pwd)`
+ # When building in place, set srcdir=.
+ if test "$ac_abs_confdir" = "$ac_pwd"; then
+@@ -1594,7 +1543,7 @@
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --disable-libtool-lock avoid locking (might break parallel builds)
+- --enable-gtk-doc use gtk-doc to build documentation [default=no]
++ --enable-gtk-doc use gtk-doc to build documentation [[default=no]]
+
+ Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+@@ -1610,7 +1559,7 @@
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
++ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+ CCAS assembler compiler command (defaults to CC)
+@@ -1620,6 +1569,7 @@
+ Use these variables to override the choices made by `configure' or to help
+ it to find libraries and programs with nonstandard names/locations.
+
++Report bugs to the package provider.
+ _ACEOF
+ ac_status=$?
+ fi
+@@ -1683,427 +1633,984 @@
+ if $ac_init_version; then
+ cat <<\_ACEOF
+ orc configure 0.4.3
+-generated by GNU Autoconf 2.63
++generated by GNU Autoconf 2.65
+
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++Copyright (C) 2009 Free Software Foundation, Inc.
+ This configure script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it.
+ _ACEOF
+ exit
+ fi
+-cat >config.log <<_ACEOF
+-This file contains any messages produced by compilers while
+-running configure, to aid debugging if configure makes a mistake.
+
+-It was created by orc $as_me 0.4.3, which was
+-generated by GNU Autoconf 2.63. Invocation command line was
++## ------------------------ ##
++## Autoconf initialization. ##
++## ------------------------ ##
++
++# ac_fn_c_try_compile LINENO
++# --------------------------
++# Try to compile conftest.$ac_ext, and return whether this succeeded.
++ac_fn_c_try_compile ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ rm -f conftest.$ac_objext
++ if { { ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_compile") 2>conftest.err
++ ac_status=$?
++ if test -s conftest.err; then
++ grep -v '^ *+' conftest.err >conftest.er1
++ cat conftest.er1 >&5
++ mv -f conftest.er1 conftest.err
++ fi
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then :
++ ac_retval=0
++else
++ $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
+
+- $ $0 $@
++ ac_retval=1
++fi
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ as_fn_set_status $ac_retval
+
+-_ACEOF
+-exec 5>>config.log
++} # ac_fn_c_try_compile
++
++# ac_fn_c_try_link LINENO
++# -----------------------
++# Try to link conftest.$ac_ext, and return whether this succeeded.
++ac_fn_c_try_link ()
+ {
+-cat <<_ASUNAME
+-## --------- ##
+-## Platform. ##
+-## --------- ##
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ rm -f conftest.$ac_objext conftest$ac_exeext
++ if { { ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_link") 2>conftest.err
++ ac_status=$?
++ if test -s conftest.err; then
++ grep -v '^ *+' conftest.err >conftest.er1
++ cat conftest.er1 >&5
++ mv -f conftest.er1 conftest.err
++ fi
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext && {
++ test "$cross_compiling" = yes ||
++ $as_test_x conftest$ac_exeext
++ }; then :
++ ac_retval=0
++else
++ $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
+
+-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+-uname -m = `(uname -m) 2>/dev/null || echo unknown`
+-uname -r = `(uname -r) 2>/dev/null || echo unknown`
+-uname -s = `(uname -s) 2>/dev/null || echo unknown`
+-uname -v = `(uname -v) 2>/dev/null || echo unknown`
++ ac_retval=1
++fi
++ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
++ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
++ # interfere with the next link command; also delete a directory that is
++ # left behind by Apple's compiler. We do this before executing the actions.
++ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ as_fn_set_status $ac_retval
+
+-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
++} # ac_fn_c_try_link
+
+-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
++# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
++# -------------------------------------------------------
++# Tests whether HEADER exists and can be compiled using the include files in
++# INCLUDES, setting the cache variable VAR accordingly.
++ac_fn_c_check_header_compile ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++$as_echo_n "checking for $2... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++#include <$2>
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ eval "$3=yes"
++else
++ eval "$3=no"
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++eval ac_res=\$$3
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+-_ASUNAME
++} # ac_fn_c_check_header_compile
+
+-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- $as_echo "PATH: $as_dir"
+-done
+-IFS=$as_save_IFS
++# ac_fn_c_try_cpp LINENO
++# ----------------------
++# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
++ac_fn_c_try_cpp ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ if { { ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
++ ac_status=$?
++ if test -s conftest.err; then
++ grep -v '^ *+' conftest.err >conftest.er1
++ cat conftest.er1 >&5
++ mv -f conftest.er1 conftest.err
++ fi
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } >/dev/null && {
++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ }; then :
++ ac_retval=0
++else
++ $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
+
+-} >&5
++ ac_retval=1
++fi
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ as_fn_set_status $ac_retval
+
+-cat >&5 <<_ACEOF
++} # ac_fn_c_try_cpp
+
++# ac_fn_c_try_run LINENO
++# ----------------------
++# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
++# that executables *can* be run.
++ac_fn_c_try_run ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ if { { ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_link") 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
++ { { case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_try") 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; }; then :
++ ac_retval=0
++else
++ $as_echo "$as_me: program exited with status $ac_status" >&5
++ $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
+
+-## ----------- ##
+-## Core tests. ##
+-## ----------- ##
++ ac_retval=$ac_status
++fi
++ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ as_fn_set_status $ac_retval
+
+-_ACEOF
++} # ac_fn_c_try_run
+
++# ac_fn_c_check_func LINENO FUNC VAR
++# ----------------------------------
++# Tests whether FUNC exists, setting the cache variable VAR accordingly
++ac_fn_c_check_func ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++$as_echo_n "checking for $2... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
++ For example, HP-UX 11i <limits.h> declares gettimeofday. */
++#define $2 innocuous_$2
+
+-# Keep a trace of the command line.
+-# Strip out --no-create and --no-recursion so they do not pile up.
+-# Strip out --silent because we don't want to record it for future runs.
+-# Also quote any args containing shell meta-characters.
+-# Make two passes to allow for proper duplicate-argument suppression.
+-ac_configure_args=
+-ac_configure_args0=
+-ac_configure_args1=
+-ac_must_keep_next=false
+-for ac_pass in 1 2
+-do
+- for ac_arg
+- do
+- case $ac_arg in
+- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+- | -silent | --silent | --silen | --sile | --sil)
+- continue ;;
+- *\'*)
+- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+- esac
+- case $ac_pass in
+- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+- 2)
+- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+- if test $ac_must_keep_next = true; then
+- ac_must_keep_next=false # Got value, back to normal.
+- else
+- case $ac_arg in
+- *=* | --config-cache | -C | -disable-* | --disable-* \
+- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+- | -with-* | --with-* | -without-* | --without-* | --x)
+- case "$ac_configure_args0 " in
+- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+- esac
+- ;;
+- -* ) ac_must_keep_next=true ;;
+- esac
+- fi
+- ac_configure_args="$ac_configure_args '$ac_arg'"
+- ;;
+- esac
+- done
+-done
+-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
++/* System header to define __stub macros and hopefully few prototypes,
++ which can conflict with char $2 (); below.
++ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++ <limits.h> exists even on freestanding compilers. */
+
+-# When interrupted or exit'd, cleanup temporary files, and complete
+-# config.log. We remove comments because anyway the quotes in there
+-# would cause problems or look ugly.
+-# WARNING: Use '\'' to represent an apostrophe within the trap.
+-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+-trap 'exit_status=$?
+- # Save into config.log some information that might help in debugging.
+- {
+- echo
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
+
+- cat <<\_ASBOX
+-## ---------------- ##
+-## Cache variables. ##
+-## ---------------- ##
+-_ASBOX
+- echo
+- # The following way of writing the cache mishandles newlines in values,
+-(
+- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+- eval ac_val=\$$ac_var
+- case $ac_val in #(
+- *${as_nl}*)
+- case $ac_var in #(
+- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
+-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+- esac
+- case $ac_var in #(
+- _ | IFS | as_nl) ;; #(
+- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+- *) $as_unset $ac_var ;;
+- esac ;;
+- esac
+- done
+- (set) 2>&1 |
+- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+- *${as_nl}ac_space=\ *)
+- sed -n \
+- "s/'\''/'\''\\\\'\'''\''/g;
+- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+- ;; #(
+- *)
+- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+- ;;
+- esac |
+- sort
+-)
+- echo
++#undef $2
+
+- cat <<\_ASBOX
+-## ----------------- ##
+-## Output variables. ##
+-## ----------------- ##
+-_ASBOX
+- echo
+- for ac_var in $ac_subst_vars
+- do
+- eval ac_val=\$$ac_var
+- case $ac_val in
+- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+- esac
+- $as_echo "$ac_var='\''$ac_val'\''"
+- done | sort
+- echo
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
++#ifdef __cplusplus
++extern "C"
++#endif
++char $2 ();
++/* The GNU C library defines this for functions which it implements
++ to always fail with ENOSYS. Some functions are actually named
++ something starting with __ and the normal name is an alias. */
++#if defined __stub_$2 || defined __stub___$2
++choke me
++#endif
+
+- if test -n "$ac_subst_files"; then
+- cat <<\_ASBOX
+-## ------------------- ##
+-## File substitutions. ##
+-## ------------------- ##
+-_ASBOX
+- echo
+- for ac_var in $ac_subst_files
+- do
+- eval ac_val=\$$ac_var
+- case $ac_val in
+- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+- esac
+- $as_echo "$ac_var='\''$ac_val'\''"
+- done | sort
+- echo
+- fi
++int
++main ()
++{
++return $2 ();
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ eval "$3=yes"
++else
++ eval "$3=no"
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++fi
++eval ac_res=\$$3
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+- if test -s confdefs.h; then
+- cat <<\_ASBOX
+-## ----------- ##
+-## confdefs.h. ##
+-## ----------- ##
+-_ASBOX
+- echo
+- cat confdefs.h
+- echo
+- fi
+- test "$ac_signal" != 0 &&
+- $as_echo "$as_me: caught signal $ac_signal"
+- $as_echo "$as_me: exit $exit_status"
+- } >&5
+- rm -f core *.core core.conftest.* &&
+- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+- exit $exit_status
+-' 0
+-for ac_signal in 1 2 13 15; do
+- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+-done
+-ac_signal=0
++} # ac_fn_c_check_func
+
+-# confdefs.h avoids OS command line length limits that DEFS can exceed.
+-rm -f -r conftest* confdefs.h
++# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
++# -------------------------------------------
++# Tests whether TYPE exists after having included INCLUDES, setting cache
++# variable VAR accordingly.
++ac_fn_c_check_type ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++$as_echo_n "checking for $2... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++else
++ eval "$3=no"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++int
++main ()
++{
++if (sizeof ($2))
++ return 0;
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++int
++main ()
++{
++if (sizeof (($2)))
++ return 0;
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
+
+-# Predefined preprocessor variables.
++else
++ eval "$3=yes"
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++eval ac_res=\$$3
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+-cat >>confdefs.h <<_ACEOF
+-#define PACKAGE_NAME "$PACKAGE_NAME"
+-_ACEOF
++} # ac_fn_c_check_type
+
++# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
++# --------------------------------------------
++# Tries to find the compile-time value of EXPR in a program that includes
++# INCLUDES, setting VAR accordingly. Returns whether the value could be
++# computed
++ac_fn_c_compute_int ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ if test "$cross_compiling" = yes; then
++ # Depending upon the size, compute the lo and hi bounds.
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++int
++main ()
++{
++static int test_array [1 - 2 * !(($2) >= 0)];
++test_array [0] = 0
+
+-cat >>confdefs.h <<_ACEOF
+-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
++ ;
++ return 0;
++}
+ _ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_lo=0 ac_mid=0
++ while :; do
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++int
++main ()
++{
++static int test_array [1 - 2 * !(($2) <= $ac_mid)];
++test_array [0] = 0
+
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_hi=$ac_mid; break
++else
++ as_fn_arith $ac_mid + 1 && ac_lo=$as_val
++ if test $ac_lo -le $ac_mid; then
++ ac_lo= ac_hi=
++ break
++ fi
++ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ done
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++int
++main ()
++{
++static int test_array [1 - 2 * !(($2) < 0)];
++test_array [0] = 0
+
+-cat >>confdefs.h <<_ACEOF
+-#define PACKAGE_VERSION "$PACKAGE_VERSION"
++ ;
++ return 0;
++}
+ _ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_hi=-1 ac_mid=-1
++ while :; do
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++int
++main ()
++{
++static int test_array [1 - 2 * !(($2) >= $ac_mid)];
++test_array [0] = 0
+
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_lo=$ac_mid; break
++else
++ as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
++ if test $ac_mid -le $ac_hi; then
++ ac_lo= ac_hi=
++ break
++ fi
++ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ done
++else
++ ac_lo= ac_hi=
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++# Binary search between lo and hi bounds.
++while test "x$ac_lo" != "x$ac_hi"; do
++ as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++int
++main ()
++{
++static int test_array [1 - 2 * !(($2) <= $ac_mid)];
++test_array [0] = 0
+
+-cat >>confdefs.h <<_ACEOF
+-#define PACKAGE_STRING "$PACKAGE_STRING"
++ ;
++ return 0;
++}
+ _ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_hi=$ac_mid
++else
++ as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++done
++case $ac_lo in #((
++?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
++'') ac_retval=1 ;;
++esac
++ else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++static long int longval () { return $2; }
++static unsigned long int ulongval () { return $2; }
++#include <stdio.h>
++#include <stdlib.h>
++int
++main ()
++{
+
++ FILE *f = fopen ("conftest.val", "w");
++ if (! f)
++ return 1;
++ if (($2) < 0)
++ {
++ long int i = longval ();
++ if (i != ($2))
++ return 1;
++ fprintf (f, "%ld", i);
++ }
++ else
++ {
++ unsigned long int i = ulongval ();
++ if (i != ($2))
++ return 1;
++ fprintf (f, "%lu", i);
++ }
++ /* Do not output a trailing newline, as this causes \r\n confusion
++ on some platforms. */
++ return ferror (f) || fclose (f) != 0;
+
+-cat >>confdefs.h <<_ACEOF
+-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
++ ;
++ return 0;
++}
+ _ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++ echo >>conftest.val; read $3 <conftest.val; ac_retval=0
++else
++ ac_retval=1
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++ conftest.$ac_objext conftest.beam conftest.$ac_ext
++rm -f conftest.val
++
++ fi
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ as_fn_set_status $ac_retval
+
++} # ac_fn_c_compute_int
+
+-# Let the site file select an alternate cache file if it wants to.
+-# Prefer an explicitly selected file to automatically selected ones.
+-ac_site_file1=NONE
+-ac_site_file2=NONE
+-if test -n "$CONFIG_SITE"; then
+- ac_site_file1=$CONFIG_SITE
+-elif test "x$prefix" != xNONE; then
+- ac_site_file1=$prefix/share/config.site
+- ac_site_file2=$prefix/etc/config.site
++# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
++# -------------------------------------------------------
++# Tests whether HEADER exists, giving a warning if it cannot be compiled using
++# the include files in INCLUDES and setting the cache variable VAR
++# accordingly.
++ac_fn_c_check_header_mongrel ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++$as_echo_n "checking for $2... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++fi
++eval ac_res=\$$3
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
+ else
+- ac_site_file1=$ac_default_prefix/share/config.site
+- ac_site_file2=$ac_default_prefix/etc/config.site
++ # Is the header compilable?
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
++$as_echo_n "checking $2 usability... " >&6; }
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++#include <$2>
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_header_compiler=yes
++else
++ ac_header_compiler=no
+ fi
+-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+-do
+- test "x$ac_site_file" = xNONE && continue
+- if test -r "$ac_site_file"; then
+- { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+- sed 's/^/| /' "$ac_site_file" >&5
+- . "$ac_site_file"
+- fi
+-done
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
++$as_echo "$ac_header_compiler" >&6; }
+
+-if test -r "$cache_file"; then
+- # Some versions of bash will fail to source /dev/null (special
+- # files actually), so we avoid doing that.
+- if test -f "$cache_file"; then
+- { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
+-$as_echo "$as_me: loading cache $cache_file" >&6;}
+- case $cache_file in
+- [\\/]* | ?:[\\/]* ) . "$cache_file";;
+- *) . "./$cache_file";;
+- esac
+- fi
++# Is the header present?
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
++$as_echo_n "checking $2 presence... " >&6; }
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <$2>
++_ACEOF
++if ac_fn_c_try_cpp "$LINENO"; then :
++ ac_header_preproc=yes
+ else
+- { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
+-$as_echo "$as_me: creating cache $cache_file" >&6;}
+- >$cache_file
++ ac_header_preproc=no
+ fi
++rm -f conftest.err conftest.$ac_ext
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
++$as_echo "$ac_header_preproc" >&6; }
+
+-# Check that the precious variables saved in the cache have kept the same
+-# value.
+-ac_cache_corrupted=false
+-for ac_var in $ac_precious_vars; do
+- eval ac_old_set=\$ac_cv_env_${ac_var}_set
+- eval ac_new_set=\$ac_env_${ac_var}_set
+- eval ac_old_val=\$ac_cv_env_${ac_var}_value
+- eval ac_new_val=\$ac_env_${ac_var}_value
+- case $ac_old_set,$ac_new_set in
+- set,)
+- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+- ac_cache_corrupted=: ;;
+- ,set)
+- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+- ac_cache_corrupted=: ;;
+- ,);;
+- *)
+- if test "x$ac_old_val" != "x$ac_new_val"; then
+- # differences in whitespace do not lead to failure.
+- ac_old_val_w=`echo x $ac_old_val`
+- ac_new_val_w=`echo x $ac_new_val`
+- if test "$ac_old_val_w" != "$ac_new_val_w"; then
+- { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+- ac_cache_corrupted=:
+- else
+- { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+- eval $ac_var=\$ac_old_val
+- fi
+- { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5
+-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+- { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5
+-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+- fi;;
+- esac
+- # Pass precious variables to config.status.
+- if test "$ac_new_set" = set; then
+- case $ac_new_val in
+- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+- *) ac_arg=$ac_var=$ac_new_val ;;
+- esac
+- case " $ac_configure_args " in
+- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+- esac
+- fi
+-done
+-if $ac_cache_corrupted; then
+- { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+- { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+- { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+-$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+- { (exit 1); exit 1; }; }
++# So? What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
++ yes:no: )
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
++$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
++$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
++ ;;
++ no:yes:* )
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
++$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
++$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
++$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
++$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
++$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
++ ;;
++esac
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++$as_echo_n "checking for $2... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++else
++ eval "$3=\$ac_header_compiler"
+ fi
++eval ac_res=\$$3
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++fi
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
++} # ac_fn_c_check_header_mongrel
++cat >config.log <<_ACEOF
++This file contains any messages produced by compilers while
++running configure, to aid debugging if configure makes a mistake.
+
++It was created by orc $as_me 0.4.3, which was
++generated by GNU Autoconf 2.65. Invocation command line was
+
++ $ $0 $@
+
++_ACEOF
++exec 5>>config.log
++{
++cat <<_ASUNAME
++## --------- ##
++## Platform. ##
++## --------- ##
+
++hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
++uname -m = `(uname -m) 2>/dev/null || echo unknown`
++uname -r = `(uname -r) 2>/dev/null || echo unknown`
++uname -s = `(uname -s) 2>/dev/null || echo unknown`
++uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
++/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
++/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
++/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
++/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
++/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
++/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
++/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
++/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
++/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
++_ASUNAME
+
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ $as_echo "PATH: $as_dir"
++ done
++IFS=$as_save_IFS
+
++} >&5
+
++cat >&5 <<_ACEOF
+
+
++## ----------- ##
++## Core tests. ##
++## ----------- ##
+
++_ACEOF
+
+
++# Keep a trace of the command line.
++# Strip out --no-create and --no-recursion so they do not pile up.
++# Strip out --silent because we don't want to record it for future runs.
++# Also quote any args containing shell meta-characters.
++# Make two passes to allow for proper duplicate-argument suppression.
++ac_configure_args=
++ac_configure_args0=
++ac_configure_args1=
++ac_must_keep_next=false
++for ac_pass in 1 2
++do
++ for ac_arg
++ do
++ case $ac_arg in
++ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
++ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
++ | -silent | --silent | --silen | --sile | --sil)
++ continue ;;
++ *\'*)
++ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
++ esac
++ case $ac_pass in
++ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
++ 2)
++ as_fn_append ac_configure_args1 " '$ac_arg'"
++ if test $ac_must_keep_next = true; then
++ ac_must_keep_next=false # Got value, back to normal.
++ else
++ case $ac_arg in
++ *=* | --config-cache | -C | -disable-* | --disable-* \
++ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
++ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
++ | -with-* | --with-* | -without-* | --without-* | --x)
++ case "$ac_configure_args0 " in
++ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
++ esac
++ ;;
++ -* ) ac_must_keep_next=true ;;
++ esac
++ fi
++ as_fn_append ac_configure_args " '$ac_arg'"
++ ;;
++ esac
++ done
++done
++{ ac_configure_args0=; unset ac_configure_args0;}
++{ ac_configure_args1=; unset ac_configure_args1;}
+
++# When interrupted or exit'd, cleanup temporary files, and complete
++# config.log. We remove comments because anyway the quotes in there
++# would cause problems or look ugly.
++# WARNING: Use '\'' to represent an apostrophe within the trap.
++# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
++trap 'exit_status=$?
++ # Save into config.log some information that might help in debugging.
++ {
++ echo
+
++ cat <<\_ASBOX
++## ---------------- ##
++## Cache variables. ##
++## ---------------- ##
++_ASBOX
++ echo
++ # The following way of writing the cache mishandles newlines in values,
++(
++ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
++ eval ac_val=\$$ac_var
++ case $ac_val in #(
++ *${as_nl}*)
++ case $ac_var in #(
++ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
++$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
++ esac
++ case $ac_var in #(
++ _ | IFS | as_nl) ;; #(
++ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
++ *) { eval $ac_var=; unset $ac_var;} ;;
++ esac ;;
++ esac
++ done
++ (set) 2>&1 |
++ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
++ *${as_nl}ac_space=\ *)
++ sed -n \
++ "s/'\''/'\''\\\\'\'''\''/g;
++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
++ ;; #(
++ *)
++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
++ ;;
++ esac |
++ sort
++)
++ echo
+
++ cat <<\_ASBOX
++## ----------------- ##
++## Output variables. ##
++## ----------------- ##
++_ASBOX
++ echo
++ for ac_var in $ac_subst_vars
++ do
++ eval ac_val=\$$ac_var
++ case $ac_val in
++ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
++ esac
++ $as_echo "$ac_var='\''$ac_val'\''"
++ done | sort
++ echo
+
++ if test -n "$ac_subst_files"; then
++ cat <<\_ASBOX
++## ------------------- ##
++## File substitutions. ##
++## ------------------- ##
++_ASBOX
++ echo
++ for ac_var in $ac_subst_files
++ do
++ eval ac_val=\$$ac_var
++ case $ac_val in
++ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
++ esac
++ $as_echo "$ac_var='\''$ac_val'\''"
++ done | sort
++ echo
++ fi
+
++ if test -s confdefs.h; then
++ cat <<\_ASBOX
++## ----------- ##
++## confdefs.h. ##
++## ----------- ##
++_ASBOX
++ echo
++ cat confdefs.h
++ echo
++ fi
++ test "$ac_signal" != 0 &&
++ $as_echo "$as_me: caught signal $ac_signal"
++ $as_echo "$as_me: exit $exit_status"
++ } >&5
++ rm -f core *.core core.conftest.* &&
++ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
++ exit $exit_status
++' 0
++for ac_signal in 1 2 13 15; do
++ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
++done
++ac_signal=0
+
++# confdefs.h avoids OS command line length limits that DEFS can exceed.
++rm -f -r conftest* confdefs.h
+
++$as_echo "/* confdefs.h */" > confdefs.h
+
++# Predefined preprocessor variables.
+
+-ac_ext=c
+-ac_cpp='$CPP $CPPFLAGS'
+-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+-
+-
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_NAME "$PACKAGE_NAME"
++_ACEOF
+
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
++_ACEOF
+
+- { $as_echo "$as_me:$LINENO: checking nano version" >&5
+-$as_echo_n "checking nano version... " >&6; }
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_VERSION "$PACKAGE_VERSION"
++_ACEOF
+
+- NANO=$(echo 0.4.3 | sed 's/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.*//')
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_STRING "$PACKAGE_STRING"
++_ACEOF
+
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
++_ACEOF
+
+- if test x"$NANO" = x || test "x$NANO" = "x0" ; then
+- { $as_echo "$as_me:$LINENO: result: 0 (release)" >&5
+-$as_echo "0 (release)" >&6; }
+- NANO=0
+- ORC_CVS=no
+- else
+- { $as_echo "$as_me:$LINENO: result: $NANO" >&5
+-$as_echo "$NANO" >&6; }
+- ORC_CVS=yes
+- fi
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_URL "$PACKAGE_URL"
++_ACEOF
+
+
+-ac_aux_dir=
+-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+- if test -f "$ac_dir/install-sh"; then
+- ac_aux_dir=$ac_dir
+- ac_install_sh="$ac_aux_dir/install-sh -c"
+- break
+- elif test -f "$ac_dir/install.sh"; then
+- ac_aux_dir=$ac_dir
+- ac_install_sh="$ac_aux_dir/install.sh -c"
+- break
+- elif test -f "$ac_dir/shtool"; then
+- ac_aux_dir=$ac_dir
+- ac_install_sh="$ac_aux_dir/shtool install -c"
+- break
++# Let the site file select an alternate cache file if it wants to.
++# Prefer an explicitly selected file to automatically selected ones.
++ac_site_file1=NONE
++ac_site_file2=NONE
++if test -n "$CONFIG_SITE"; then
++ ac_site_file1=$CONFIG_SITE
++elif test "x$prefix" != xNONE; then
++ ac_site_file1=$prefix/share/config.site
++ ac_site_file2=$prefix/etc/config.site
++else
++ ac_site_file1=$ac_default_prefix/share/config.site
++ ac_site_file2=$ac_default_prefix/etc/config.site
++fi
++for ac_site_file in "$ac_site_file1" "$ac_site_file2"
++do
++ test "x$ac_site_file" = xNONE && continue
++ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
++$as_echo "$as_me: loading site script $ac_site_file" >&6;}
++ sed 's/^/| /' "$ac_site_file" >&5
++ . "$ac_site_file"
++ fi
++done
++
++if test -r "$cache_file"; then
++ # Some versions of bash will fail to source /dev/null (special files
++ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
++ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
++$as_echo "$as_me: loading cache $cache_file" >&6;}
++ case $cache_file in
++ [\\/]* | ?:[\\/]* ) . "$cache_file";;
++ *) . "./$cache_file";;
++ esac
++ fi
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
++$as_echo "$as_me: creating cache $cache_file" >&6;}
++ >$cache_file
++fi
++
++as_fn_append ac_header_list " stdlib.h"
++as_fn_append ac_header_list " unistd.h"
++as_fn_append ac_header_list " sys/param.h"
++# Check that the precious variables saved in the cache have kept the same
++# value.
++ac_cache_corrupted=false
++for ac_var in $ac_precious_vars; do
++ eval ac_old_set=\$ac_cv_env_${ac_var}_set
++ eval ac_new_set=\$ac_env_${ac_var}_set
++ eval ac_old_val=\$ac_cv_env_${ac_var}_value
++ eval ac_new_val=\$ac_env_${ac_var}_value
++ case $ac_old_set,$ac_new_set in
++ set,)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
++$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
++ ac_cache_corrupted=: ;;
++ ,set)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
++$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
++ ac_cache_corrupted=: ;;
++ ,);;
++ *)
++ if test "x$ac_old_val" != "x$ac_new_val"; then
++ # differences in whitespace do not lead to failure.
++ ac_old_val_w=`echo x $ac_old_val`
++ ac_new_val_w=`echo x $ac_new_val`
++ if test "$ac_old_val_w" != "$ac_new_val_w"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
++$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
++ ac_cache_corrupted=:
++ else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
++$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
++ eval $ac_var=\$ac_old_val
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
++$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
++$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
++ fi;;
++ esac
++ # Pass precious variables to config.status.
++ if test "$ac_new_set" = set; then
++ case $ac_new_val in
++ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
++ *) ac_arg=$ac_var=$ac_new_val ;;
++ esac
++ case " $ac_configure_args " in
++ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
++ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
++ esac
++ fi
++done
++if $ac_cache_corrupted; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
++$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
++ as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
++fi
++## -------------------- ##
++## Main body of script. ##
++## -------------------- ##
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
++$as_echo_n "checking nano version... " >&6; }
++
++ NANO=$(echo 0.4.3 | sed 's/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.*//')
++
++
++ if test x"$NANO" = x || test "x$NANO" = "x0" ; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
++$as_echo "0 (release)" >&6; }
++ NANO=0
++ ORC_CVS=no
++ else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NANO" >&5
++$as_echo "$NANO" >&6; }
++ ORC_CVS=yes
+ fi
++
++
++ac_aux_dir=
++for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
++ for ac_t in install-sh install.sh shtool; do
++ if test -f "$ac_dir/$ac_t"; then
++ ac_aux_dir=$ac_dir
++ ac_install_sh="$ac_aux_dir/$ac_t -c"
++ break 2
++ fi
++ done
+ done
+ if test -z "$ac_aux_dir"; then
+- { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+-$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+ fi
+
+ # These three variables are undocumented and unsupported,
+@@ -2117,35 +2624,27 @@
+
+ # Make sure we can run config.sub.
+ $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+- { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+-$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+-{ $as_echo "$as_me:$LINENO: checking build system type" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+ $as_echo_n "checking build system type... " >&6; }
+-if test "${ac_cv_build+set}" = set; then
++if test "${ac_cv_build+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_build_alias=$build_alias
+ test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+ test "x$ac_build_alias" = x &&
+- { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+-$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+ ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+ $as_echo "$ac_cv_build" >&6; }
+ case $ac_cv_build in
+ *-*-*) ;;
+-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+-$as_echo "$as_me: error: invalid value of canonical build" >&2;}
+- { (exit 1); exit 1; }; };;
++*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+ esac
+ build=$ac_cv_build
+ ac_save_IFS=$IFS; IFS='-'
+@@ -2161,28 +2660,24 @@
+ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+-{ $as_echo "$as_me:$LINENO: checking host system type" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+ $as_echo_n "checking host system type... " >&6; }
+-if test "${ac_cv_host+set}" = set; then
++if test "${ac_cv_host+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+ else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+ fi
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+ $as_echo "$ac_cv_host" >&6; }
+ case $ac_cv_host in
+ *-*-*) ;;
+-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+-$as_echo "$as_me: error: invalid value of canonical host" >&2;}
+- { (exit 1); exit 1; }; };;
++*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+ esac
+ host=$ac_cv_host
+ ac_save_IFS=$IFS; IFS='-'
+@@ -2198,7 +2693,7 @@
+ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+-am__api_version='1.10'
++am__api_version='1.11'
+
+ # Find a good install program. We prefer a C program (faster),
+ # so one script is as good as another. But avoid the broken or
+@@ -2214,10 +2709,10 @@
+ # OS/2's system install, which has a completely different semantic
+ # ./install, which can be erroneously created by make from ./install.sh.
+ # Reject install programs that cannot install multiple files.
+-{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+ $as_echo_n "checking for a BSD-compatible install... " >&6; }
+ if test -z "$INSTALL"; then
+-if test "${ac_cv_path_install+set}" = set; then
++if test "${ac_cv_path_install+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+@@ -2225,11 +2720,11 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- # Account for people who put trailing slashes in PATH elements.
+-case $as_dir/ in
+- ./ | .// | /cC/* | \
++ # Account for people who put trailing slashes in PATH elements.
++case $as_dir/ in #((
++ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
++ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+@@ -2266,7 +2761,7 @@
+ ;;
+ esac
+
+-done
++ done
+ IFS=$as_save_IFS
+
+ rm -rf conftest.one conftest.two conftest.dir
+@@ -2282,7 +2777,7 @@
+ INSTALL=$ac_install_sh
+ fi
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+ $as_echo "$INSTALL" >&6; }
+
+ # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+@@ -2293,21 +2788,34 @@
+
+ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+-{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+ $as_echo_n "checking whether build environment is sane... " >&6; }
+ # Just in case
+ sleep 1
+ echo timestamp > conftest.file
++# Reject unsafe characters in $srcdir or the absolute working directory
++# name. Accept space and tab only in the latter.
++am_lf='
++'
++case `pwd` in
++ *[\\\"\#\$\&\'\`$am_lf]*)
++ as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
++esac
++case $srcdir in
++ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
++ as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
++esac
++
+ # Do `set' in a subshell so we don't clobber the current shell's
+ # arguments. Must try -L first in case configure is actually a
+ # symlink; some systems play weird games with the mod time of symlinks
+ # (eg FreeBSD returns the mod time of the symlink's containing
+ # directory).
+ if (
+- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
++ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+- set X `ls -t $srcdir/configure conftest.file`
++ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+@@ -2317,11 +2825,8 @@
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+- { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
+-alias in your environment" >&5
+-$as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
+-alias in your environment" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "ls -t appears to fail. Make sure there is not a broken
++alias in your environment" "$LINENO" 5
+ fi
+
+ test "$2" = conftest.file
+@@ -2330,13 +2835,10 @@
+ # Ok.
+ :
+ else
+- { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+-Check your system clock" >&5
+-$as_echo "$as_me: error: newly created file is older than distributed files!
+-Check your system clock" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "newly created file is older than distributed files!
++Check your system clock" "$LINENO" 5
+ fi
+-{ $as_echo "$as_me:$LINENO: result: yes" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+@@ -2351,20 +2853,136 @@
+ # expand $ac_aux_dir to an absolute path
+ am_aux_dir=`cd $ac_aux_dir && pwd`
+
+-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
++if test x"${MISSING+set}" != xset; then
++ case $am_aux_dir in
++ *\ * | *\ *)
++ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
++ *)
++ MISSING="\${SHELL} $am_aux_dir/missing" ;;
++ esac
++fi
+ # Use eval to expand $SHELL
+ if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+ else
+ am_missing_run=
+- { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+ $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+ fi
+
+-{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
++if test x"${install_sh}" != xset; then
++ case $am_aux_dir in
++ *\ * | *\ *)
++ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
++ *)
++ install_sh="\${SHELL} $am_aux_dir/install-sh"
++ esac
++fi
++
++# Installed binaries are usually stripped using `strip' when the user
++# run `make install-strip'. However `strip' might not be the right
++# tool to use in cross-compilation environments, therefore Automake
++# will honor the `STRIP' environment variable to overrule this program.
++if test "$cross_compiling" != no; then
++ if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
++set dummy ${ac_tool_prefix}strip; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_STRIP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$STRIP"; then
++ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++STRIP=$ac_cv_prog_STRIP
++if test -n "$STRIP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
++$as_echo "$STRIP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_STRIP"; then
++ ac_ct_STRIP=$STRIP
++ # Extract the first word of "strip", so it can be a program name with args.
++set dummy strip; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_STRIP"; then
++ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_STRIP="strip"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
++if test -n "$ac_ct_STRIP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
++$as_echo "$ac_ct_STRIP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_STRIP" = x; then
++ STRIP=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ STRIP=$ac_ct_STRIP
++ fi
++else
++ STRIP="$ac_cv_prog_STRIP"
++fi
++
++fi
++INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+ $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+ if test -z "$MKDIR_P"; then
+- if test "${ac_cv_path_mkdir+set}" = set; then
++ if test "${ac_cv_path_mkdir+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+@@ -2372,7 +2990,7 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_prog in mkdir gmkdir; do
++ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+@@ -2384,11 +3002,12 @@
+ esac
+ done
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+
++ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+@@ -2396,11 +3015,10 @@
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+- test -d ./--version && rmdir ./--version
+ MKDIR_P="$ac_install_sh -d"
+ fi
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+ $as_echo "$MKDIR_P" >&6; }
+
+ mkdir_p="$MKDIR_P"
+@@ -2413,9 +3031,9 @@
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_AWK+set}" = set; then
++if test "${ac_cv_prog_AWK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$AWK"; then
+@@ -2426,24 +3044,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AWK="$ac_prog"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ AWK=$ac_cv_prog_AWK
+ if test -n "$AWK"; then
+- { $as_echo "$as_me:$LINENO: result: $AWK" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+ $as_echo "$AWK" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -2451,11 +3069,11 @@
+ test -n "$AWK" && break
+ done
+
+-{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+ $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+ set x ${MAKE-make}
+ ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
++if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+ $as_echo_n "(cached) " >&6
+ else
+ cat >conftest.make <<\_ACEOF
+@@ -2473,11 +3091,11 @@
+ rm -f conftest.make
+ fi
+ if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+- { $as_echo "$as_me:$LINENO: result: yes" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ SET_MAKE=
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+ fi
+@@ -2497,9 +3115,7 @@
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+- { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+-$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+ fi
+
+@@ -2543,113 +3159,11 @@
+
+ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+-install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
++# We need awk for the "check" target. The system "awk" is bad on
++# some platforms.
++# Always define AMTAR for backward compatibility.
+
+-# Installed binaries are usually stripped using `strip' when the user
+-# run `make install-strip'. However `strip' might not be the right
+-# tool to use in cross-compilation environments, therefore Automake
+-# will honor the `STRIP' environment variable to overrule this program.
+-if test "$cross_compiling" != no; then
+- if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}strip; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+-$as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_STRIP+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- if test -n "$STRIP"; then
+- ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+-else
+-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+- ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+- break 2
+- fi
+-done
+-done
+-IFS=$as_save_IFS
+-
+-fi
+-fi
+-STRIP=$ac_cv_prog_STRIP
+-if test -n "$STRIP"; then
+- { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+-$as_echo "$STRIP" >&6; }
+-else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
+-
+-
+-fi
+-if test -z "$ac_cv_prog_STRIP"; then
+- ac_ct_STRIP=$STRIP
+- # Extract the first word of "strip", so it can be a program name with args.
+-set dummy strip; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+-$as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- if test -n "$ac_ct_STRIP"; then
+- ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+-else
+-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+- ac_cv_prog_ac_ct_STRIP="strip"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+- break 2
+- fi
+-done
+-done
+-IFS=$as_save_IFS
+-
+-fi
+-fi
+-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+-if test -n "$ac_ct_STRIP"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+-$as_echo "$ac_ct_STRIP" >&6; }
+-else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
+-
+- if test "x$ac_ct_STRIP" = x; then
+- STRIP=":"
+- else
+- case $cross_compiling:$ac_tool_warned in
+-yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+-ac_tool_warned=yes ;;
+-esac
+- STRIP=$ac_ct_STRIP
+- fi
+-else
+- STRIP="$ac_cv_prog_STRIP"
+-fi
+-
+-fi
+-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+-
+-# We need awk for the "check" target. The system "awk" is bad on
+-# some platforms.
+-# Always define AMTAR for backward compatibility.
+-
+-AMTAR=${AMTAR-"${am_missing_run}tar"}
++AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+@@ -2658,16 +3172,17 @@
+
+
+
+-{ $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+ $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+-if test "${enable_maintainer_mode+set}" = set; then
++if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+ else
+ USE_MAINTAINER_MODE=no
+ fi
+
+- { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+ $as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+@@ -2696,9 +3211,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}as; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_AS+set}" = set; then
++if test "${ac_cv_prog_AS+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$AS"; then
+@@ -2709,24 +3224,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AS="${ac_tool_prefix}as"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ AS=$ac_cv_prog_AS
+ if test -n "$AS"; then
+- { $as_echo "$as_me:$LINENO: result: $AS" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
+ $as_echo "$AS" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -2736,9 +3251,9 @@
+ ac_ct_AS=$AS
+ # Extract the first word of "as", so it can be a program name with args.
+ set dummy as; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_AS+set}" = set; then
++if test "${ac_cv_prog_ac_ct_AS+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_AS"; then
+@@ -2749,24 +3264,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_AS="as"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_AS=$ac_cv_prog_ac_ct_AS
+ if test -n "$ac_ct_AS"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_AS" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
+ $as_echo "$ac_ct_AS" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -2775,7 +3290,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -2788,9 +3303,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_DLLTOOL+set}" = set; then
++if test "${ac_cv_prog_DLLTOOL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$DLLTOOL"; then
+@@ -2801,24 +3316,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ DLLTOOL=$ac_cv_prog_DLLTOOL
+ if test -n "$DLLTOOL"; then
+- { $as_echo "$as_me:$LINENO: result: $DLLTOOL" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+ $as_echo "$DLLTOOL" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -2828,9 +3343,9 @@
+ ac_ct_DLLTOOL=$DLLTOOL
+ # Extract the first word of "dlltool", so it can be a program name with args.
+ set dummy dlltool; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then
++if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_DLLTOOL"; then
+@@ -2841,24 +3356,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+ if test -n "$ac_ct_DLLTOOL"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+ $as_echo "$ac_ct_DLLTOOL" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -2867,7 +3382,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -2880,9 +3395,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}objdump; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_OBJDUMP+set}" = set; then
++if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$OBJDUMP"; then
+@@ -2893,24 +3408,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ OBJDUMP=$ac_cv_prog_OBJDUMP
+ if test -n "$OBJDUMP"; then
+- { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+ $as_echo "$OBJDUMP" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -2920,9 +3435,9 @@
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+ set dummy objdump; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then
++if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_OBJDUMP"; then
+@@ -2933,24 +3448,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+ if test -n "$ac_ct_OBJDUMP"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+ $as_echo "$ac_ct_OBJDUMP" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -2959,7 +3474,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -2996,7 +3511,7 @@
+
+ case `pwd` in
+ *\ * | *\ *)
+- { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+ $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+ esac
+
+@@ -3027,44 +3542,44 @@
+ am_make=${MAKE-make}
+ cat > confinc << 'END'
+ am__doit:
+- @echo done
++ @echo this is the am__doit target
+ .PHONY: am__doit
+ END
+ # If we don't find an include directive, just comment out the code.
+-{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+ $as_echo_n "checking for style of include used by $am_make... " >&6; }
+ am__include="#"
+ am__quote=
+ _am_result=none
+ # First try GNU make style include.
+ echo "include confinc" > confmf
+-# We grep out `Entering directory' and `Leaving directory'
+-# messages which can occur if `w' ends up in MAKEFLAGS.
+-# In particular we don't look at `^make:' because GNU make might
+-# be invoked under some other name (usually "gmake"), in which
+-# case it prints its new name instead of `make'.
+-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+- am__include=include
+- am__quote=
+- _am_result=GNU
+-fi
++# Ignore all kinds of additional output from `make'.
++case `$am_make -s -f confmf 2> /dev/null` in #(
++*the\ am__doit\ target*)
++ am__include=include
++ am__quote=
++ _am_result=GNU
++ ;;
++esac
+ # Now try BSD make style include.
+ if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+- am__include=.include
+- am__quote="\""
+- _am_result=BSD
+- fi
++ case `$am_make -s -f confmf 2> /dev/null` in #(
++ *the\ am__doit\ target*)
++ am__include=.include
++ am__quote="\""
++ _am_result=BSD
++ ;;
++ esac
+ fi
+
+
+-{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+ $as_echo "$_am_result" >&6; }
+ rm -f confinc confmf
+
+ # Check whether --enable-dependency-tracking was given.
+-if test "${enable_dependency_tracking+set}" = set; then
++if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+ fi
+
+@@ -3089,9 +3604,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}gcc; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then
++if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$CC"; then
+@@ -3102,24 +3617,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+- { $as_echo "$as_me:$LINENO: result: $CC" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+ $as_echo "$CC" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -3129,9 +3644,9 @@
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+ set dummy gcc; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
++if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_CC"; then
+@@ -3142,24 +3657,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+ $as_echo "$ac_ct_CC" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -3168,7 +3683,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -3182,9 +3697,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}cc; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then
++if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$CC"; then
+@@ -3195,24 +3710,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+- { $as_echo "$as_me:$LINENO: result: $CC" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+ $as_echo "$CC" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -3222,9 +3737,9 @@
+ if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then
++if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$CC"; then
+@@ -3236,18 +3751,18 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ if test $ac_prog_rejected = yes; then
+@@ -3266,10 +3781,10 @@
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+- { $as_echo "$as_me:$LINENO: result: $CC" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+ $as_echo "$CC" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -3281,9 +3796,9 @@
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then
++if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$CC"; then
+@@ -3294,24 +3809,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+- { $as_echo "$as_me:$LINENO: result: $CC" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+ $as_echo "$CC" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -3325,9 +3840,9 @@
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
++if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_CC"; then
+@@ -3338,24 +3853,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+ $as_echo "$ac_ct_CC" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -3368,7 +3883,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -3379,57 +3894,37 @@
+ fi
+
+
+-test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
++test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
+-See \`config.log' for more details." >&2;}
+- { (exit 1); exit 1; }; }; }
++as_fn_error "no acceptable C compiler found in \$PATH
++See \`config.log' for more details." "$LINENO" 5; }
+
+ # Provide some information about the compiler.
+-$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
++$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+ set X $ac_compile
+ ac_compiler=$2
+-{ (ac_try="$ac_compiler --version >&5"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compiler --version >&5") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }
+-{ (ac_try="$ac_compiler -v >&5"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compiler -v >&5") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }
+-{ (ac_try="$ac_compiler -V >&5"
++for ac_option in --version -v -V -qversion; do
++ { { ac_try="$ac_compiler $ac_option >&5"
+ case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+ esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compiler -V >&5") 2>&5
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }
++ if test -s conftest.err; then
++ sed '10a\
++... rest of stderr output deleted ...
++ 10q' conftest.err >conftest.er1
++ cat conftest.er1 >&5
++ fi
++ rm -f conftest.er1 conftest.err
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++done
+
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -3445,8 +3940,8 @@
+ # Try to create an executable without -o first, disregard a.out.
+ # It will help us diagnose broken compilers, and finding out an intuition
+ # of exeext.
+-{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+-$as_echo_n "checking for C compiler default output file name... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
++$as_echo_n "checking whether the C compiler works... " >&6; }
+ ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+ # The possible output files:
+@@ -3462,17 +3957,17 @@
+ done
+ rm -f $ac_rmfiles
+
+-if { (ac_try="$ac_link_default"
++if { { ac_try="$ac_link_default"
+ case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+ esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+ # So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+ # in a Makefile. We should not override ac_cv_exeext if it was cached,
+@@ -3489,7 +3984,7 @@
+ # certainly right.
+ break;;
+ *.* )
+- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
++ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+@@ -3508,84 +4003,42 @@
+ else
+ ac_file=''
+ fi
+-
+-{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
+-$as_echo "$ac_file" >&6; }
+-if test -z "$ac_file"; then
+- $as_echo "$as_me: failed program was:" >&5
++if test -z "$ac_file"; then :
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++$as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
++{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: C compiler cannot create executables
+-See \`config.log' for more details." >&2;}
+- { (exit 77); exit 77; }; }; }
++{ as_fn_set_status 77
++as_fn_error "C compiler cannot create executables
++See \`config.log' for more details." "$LINENO" 5; }; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
+ fi
+-
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
++$as_echo_n "checking for C compiler default output file name... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
++$as_echo "$ac_file" >&6; }
+ ac_exeext=$ac_cv_exeext
+
+-# Check that the compiler produces executables we can run. If not, either
+-# the compiler is broken, or we cross compile.
+-{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+-$as_echo_n "checking whether the C compiler works... " >&6; }
+-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+-# If not cross compiling, check that we can run a simple program.
+-if test "$cross_compiling" != yes; then
+- if { ac_try='./$ac_file'
+- { (case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_try") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- cross_compiling=no
+- else
+- if test "$cross_compiling" = maybe; then
+- cross_compiling=yes
+- else
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
+-If you meant to cross compile, use \`--host'.
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot run C compiled programs.
+-If you meant to cross compile, use \`--host'.
+-See \`config.log' for more details." >&2;}
+- { (exit 1); exit 1; }; }; }
+- fi
+- fi
+-fi
+-{ $as_echo "$as_me:$LINENO: result: yes" >&5
+-$as_echo "yes" >&6; }
+-
+ rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ ac_clean_files=$ac_clean_files_save
+-# Check that the compiler produces executables we can run. If not, either
+-# the compiler is broken, or we cross compile.
+-{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+-$as_echo_n "checking whether we are cross compiling... " >&6; }
+-{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
+-$as_echo "$cross_compiling" >&6; }
+-
+-{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+ $as_echo_n "checking for suffix of executables... " >&6; }
+-if { (ac_try="$ac_link"
++if { { ac_try="$ac_link"
+ case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+ esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+ # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+ # work properly (i.e., refer to `conftest.exe'), while it won't with
+@@ -3600,32 +4053,83 @@
+ esac
+ done
+ else
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+-See \`config.log' for more details." >&2;}
+- { (exit 1); exit 1; }; }; }
++as_fn_error "cannot compute suffix of executables: cannot compile and link
++See \`config.log' for more details." "$LINENO" 5; }
+ fi
+-
+-rm -f conftest$ac_cv_exeext
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
++rm -f conftest conftest$ac_cv_exeext
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+ $as_echo "$ac_cv_exeext" >&6; }
+
+ rm -f conftest.$ac_ext
+ EXEEXT=$ac_cv_exeext
+ ac_exeext=$EXEEXT
+-{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <stdio.h>
++int
++main ()
++{
++FILE *f = fopen ("conftest.out", "w");
++ return ferror (f) || fclose (f) != 0;
++
++ ;
++ return 0;
++}
++_ACEOF
++ac_clean_files="$ac_clean_files conftest.out"
++# Check that the compiler produces executables we can run. If not, either
++# the compiler is broken, or we cross compile.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
++$as_echo_n "checking whether we are cross compiling... " >&6; }
++if test "$cross_compiling" != yes; then
++ { { ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_link") 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if { ac_try='./conftest$ac_cv_exeext'
++ { { case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_try") 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; }; then
++ cross_compiling=no
++ else
++ if test "$cross_compiling" = maybe; then
++ cross_compiling=yes
++ else
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error "cannot run C compiled programs.
++If you meant to cross compile, use \`--host'.
++See \`config.log' for more details." "$LINENO" 5; }
++ fi
++ fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
++$as_echo "$cross_compiling" >&6; }
++
++rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
++ac_clean_files=$ac_clean_files_save
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+ $as_echo_n "checking for suffix of object files... " >&6; }
+-if test "${ac_cv_objext+set}" = set; then
++if test "${ac_cv_objext+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -3637,17 +4141,17 @@
+ }
+ _ACEOF
+ rm -f conftest.o conftest.obj
+-if { (ac_try="$ac_compile"
++if { { ac_try="$ac_compile"
+ case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+ esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+@@ -3660,31 +4164,23 @@
+ $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
++{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
+-See \`config.log' for more details." >&2;}
+- { (exit 1); exit 1; }; }; }
++as_fn_error "cannot compute suffix of object files: cannot compile
++See \`config.log' for more details." "$LINENO" 5; }
+ fi
+-
+ rm -f conftest.$ac_cv_objext conftest.$ac_ext
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+ $as_echo "$ac_cv_objext" >&6; }
+ OBJEXT=$ac_cv_objext
+ ac_objext=$OBJEXT
+-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+ $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+-if test "${ac_cv_c_compiler_gnu+set}" = set; then
++if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -3698,37 +4194,16 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
++if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_compiler_gnu=no
++ ac_compiler_gnu=no
+ fi
+-
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+ $as_echo "$ac_cv_c_compiler_gnu" >&6; }
+ if test $ac_compiler_gnu = yes; then
+ GCC=yes
+@@ -3737,20 +4212,16 @@
+ fi
+ ac_test_CFLAGS=${CFLAGS+set}
+ ac_save_CFLAGS=$CFLAGS
+-{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+ $as_echo_n "checking whether $CC accepts -g... " >&6; }
+-if test "${ac_cv_prog_cc_g+set}" = set; then
++if test "${ac_cv_prog_cc_g+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -3761,35 +4232,11 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
++if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- CFLAGS=""
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ CFLAGS=""
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -3800,36 +4247,12 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- :
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++if ac_fn_c_try_compile "$LINENO"; then :
+
+- ac_c_werror_flag=$ac_save_c_werror_flag
++else
++ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -3840,42 +4263,17 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
++if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+ fi
+-
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+ $as_echo "$ac_cv_prog_cc_g" >&6; }
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+@@ -3892,18 +4290,14 @@
+ CFLAGS=
+ fi
+ fi
+-{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+ $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+-if test "${ac_cv_prog_cc_c89+set}" = set; then
++if test "${ac_cv_prog_cc_c89+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_cv_prog_cc_c89=no
+ ac_save_CC=$CC
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #include <stdarg.h>
+ #include <stdio.h>
+@@ -3960,32 +4354,9 @@
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+ do
+ CC="$ac_save_CC $ac_arg"
+- rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
++ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+ fi
+-
+ rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+ done
+@@ -3996,17 +4367,19 @@
+ # AC_CACHE_VAL
+ case "x$ac_cv_prog_cc_c89" in
+ x)
+- { $as_echo "$as_me:$LINENO: result: none needed" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+ $as_echo "none needed" >&6; } ;;
+ xno)
+- { $as_echo "$as_me:$LINENO: result: unsupported" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+ $as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+- { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+ $as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+ esac
++if test "x$ac_cv_prog_cc_c89" != xno; then :
+
++fi
+
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+@@ -4016,9 +4389,9 @@
+
+ depcc="$CC" am_compiler_list=
+
+-{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+ $as_echo_n "checking dependency style of $depcc... " >&6; }
+-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
++if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+@@ -4044,6 +4417,11 @@
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
++ am__universal=false
++ case " $depcc " in #(
++ *\ -arch\ *\ -arch\ *) am__universal=true ;;
++ esac
++
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+@@ -4061,7 +4439,17 @@
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
++ # We check with `-c' and `-o' for the sake of the "dashmstdout"
++ # mode. It turns out that the SunPro C++ compiler does not properly
++ # handle `-M -o', and we need to detect this. Also, some Intel
++ # versions had trouble with output in subdirs
++ am__obj=sub/conftest.${OBJEXT-o}
++ am__minus_obj="-o $am__obj"
+ case $depmode in
++ gcc)
++ # This depmode causes a compiler race in universal mode.
++ test "$am__universal" = false || continue
++ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+@@ -4071,19 +4459,23 @@
+ break
+ fi
+ ;;
++ msvisualcpp | msvcmsys)
++ # This compiler won't grok `-c -o', but also, the minuso test has
++ # not run yet. These depmodes are late enough in the game, and
++ # so weak that their functioning should not be impacted.
++ am__obj=conftest.${OBJEXT-o}
++ am__minus_obj=
++ ;;
+ none) break ;;
+ esac
+- # We check with `-c' and `-o' for the sake of the "dashmstdout"
+- # mode. It turns out that the SunPro C++ compiler does not properly
+- # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
++ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
++ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
++ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+@@ -4107,7 +4499,7 @@
+ fi
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+ $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+ CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+@@ -4122,9 +4514,9 @@
+ fi
+
+
+-{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+ $as_echo_n "checking for a sed that does not truncate output... " >&6; }
+-if test "${ac_cv_path_SED+set}" = set; then
++if test "${ac_cv_path_SED+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+@@ -4132,7 +4524,7 @@
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+- $as_unset ac_script || ac_script=
++ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+@@ -4141,7 +4533,7 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_prog in sed gsed; do
++ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+@@ -4161,7 +4553,7 @@
+ $as_echo '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+- ac_count=`expr $ac_count + 1`
++ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+@@ -4176,19 +4568,17 @@
+ $ac_path_SED_found && break 3
+ done
+ done
+-done
++ done
+ IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+- { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5
+-$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+ else
+ ac_cv_path_SED=$SED
+ fi
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+ $as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+@@ -4206,9 +4596,9 @@
+
+
+
+-{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+ $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+-if test "${ac_cv_path_GREP+set}" = set; then
++if test "${ac_cv_path_GREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -z "$GREP"; then
+@@ -4219,7 +4609,7 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_prog in grep ggrep; do
++ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+@@ -4239,7 +4629,7 @@
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+- ac_count=`expr $ac_count + 1`
++ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+@@ -4254,26 +4644,24 @@
+ $ac_path_GREP_found && break 3
+ done
+ done
+-done
++ done
+ IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+- { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+-$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+ else
+ ac_cv_path_GREP=$GREP
+ fi
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+ $as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+-{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+ $as_echo_n "checking for egrep... " >&6; }
+-if test "${ac_cv_path_EGREP+set}" = set; then
++if test "${ac_cv_path_EGREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+@@ -4287,7 +4675,7 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_prog in egrep; do
++ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+@@ -4307,7 +4695,7 @@
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+- ac_count=`expr $ac_count + 1`
++ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+@@ -4322,12 +4710,10 @@
+ $ac_path_EGREP_found && break 3
+ done
+ done
+-done
++ done
+ IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+- { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+-$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+ else
+ ac_cv_path_EGREP=$EGREP
+@@ -4335,14 +4721,14 @@
+
+ fi
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+ $as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+-{ $as_echo "$as_me:$LINENO: checking for fgrep" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+ $as_echo_n "checking for fgrep... " >&6; }
+-if test "${ac_cv_path_FGREP+set}" = set; then
++if test "${ac_cv_path_FGREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+@@ -4356,7 +4742,7 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_prog in fgrep; do
++ for ac_prog in fgrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+@@ -4376,7 +4762,7 @@
+ $as_echo 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+- ac_count=`expr $ac_count + 1`
++ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+@@ -4391,12 +4777,10 @@
+ $ac_path_FGREP_found && break 3
+ done
+ done
+-done
++ done
+ IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+- { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+-$as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+ else
+ ac_cv_path_FGREP=$FGREP
+@@ -4404,7 +4788,7 @@
+
+ fi
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+ $as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+@@ -4430,7 +4814,7 @@
+
+
+ # Check whether --with-gnu-ld was given.
+-if test "${with_gnu_ld+set}" = set; then
++if test "${with_gnu_ld+set}" = set; then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+ else
+ with_gnu_ld=no
+@@ -4439,7 +4823,7 @@
+ ac_prog=ld
+ if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+- { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+ $as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+@@ -4469,13 +4853,13 @@
+ ;;
+ esac
+ elif test "$with_gnu_ld" = yes; then
+- { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+ $as_echo_n "checking for GNU ld... " >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+ $as_echo_n "checking for non-GNU ld... " >&6; }
+ fi
+-if test "${lt_cv_path_LD+set}" = set; then
++if test "${lt_cv_path_LD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -z "$LD"; then
+@@ -4506,18 +4890,16 @@
+
+ LD="$lt_cv_path_LD"
+ if test -n "$LD"; then
+- { $as_echo "$as_me:$LINENO: result: $LD" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+ $as_echo "$LD" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+-test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+-$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+- { (exit 1); exit 1; }; }
+-{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
++test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+ $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+-if test "${lt_cv_prog_gnu_ld+set}" = set; then
++if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+@@ -4530,7 +4912,7 @@
+ ;;
+ esac
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+ $as_echo "$lt_cv_prog_gnu_ld" >&6; }
+ with_gnu_ld=$lt_cv_prog_gnu_ld
+
+@@ -4542,9 +4924,9 @@
+
+
+
+-{ $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+ $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+-if test "${lt_cv_path_NM+set}" = set; then
++if test "${lt_cv_path_NM+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$NM"; then
+@@ -4591,7 +4973,7 @@
+ : ${lt_cv_path_NM=no}
+ fi
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+ $as_echo "$lt_cv_path_NM" >&6; }
+ if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+@@ -4602,9 +4984,9 @@
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_DUMPBIN+set}" = set; then
++if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$DUMPBIN"; then
+@@ -4615,24 +4997,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ DUMPBIN=$ac_cv_prog_DUMPBIN
+ if test -n "$DUMPBIN"; then
+- { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+ $as_echo "$DUMPBIN" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -4646,9 +5028,9 @@
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then
++if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_DUMPBIN"; then
+@@ -4659,24 +5041,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+ if test -n "$ac_ct_DUMPBIN"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+ $as_echo "$ac_ct_DUMPBIN" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -4689,7 +5071,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -4709,44 +5091,44 @@
+
+
+
+-{ $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+ $as_echo_n "checking the name lister ($NM) interface... " >&6; }
+-if test "${lt_cv_nm_interface+set}" = set; then
++if test "${lt_cv_nm_interface+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+- (eval echo "\"\$as_me:4719: $ac_compile\"" >&5)
++ (eval echo "\"\$as_me:5101: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+- (eval echo "\"\$as_me:4722: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
++ (eval echo "\"\$as_me:5104: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+- (eval echo "\"\$as_me:4725: output\"" >&5)
++ (eval echo "\"\$as_me:5107: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+ $as_echo "$lt_cv_nm_interface" >&6; }
+
+-{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+ $as_echo_n "checking whether ln -s works... " >&6; }
+ LN_S=$as_ln_s
+ if test "$LN_S" = "ln -s"; then
+- { $as_echo "$as_me:$LINENO: result: yes" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+ $as_echo "no, using $LN_S" >&6; }
+ fi
+
+ # find the maximum length of command line arguments
+-{ $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+ $as_echo_n "checking the maximum length of command line arguments... " >&6; }
+-if test "${lt_cv_sys_max_cmd_len+set}" = set; then
++if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ i=0
+@@ -4864,10 +5246,10 @@
+ fi
+
+ if test -n $lt_cv_sys_max_cmd_len ; then
+- { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+ $as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: none" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+ $as_echo "none" >&6; }
+ fi
+ max_cmd_len=$lt_cv_sys_max_cmd_len
+@@ -4881,7 +5263,7 @@
+ : ${MV="mv -f"}
+ : ${RM="rm -f"}
+
+-{ $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+ # Try some XSI features
+ xsi_shell=no
+@@ -4891,17 +5273,17 @@
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+-{ $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+ $as_echo "$xsi_shell" >&6; }
+
+
+-{ $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+ $as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+ lt_shell_append=no
+ ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+-{ $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+ $as_echo "$lt_shell_append" >&6; }
+
+
+@@ -4936,14 +5318,14 @@
+
+
+
+-{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+ $as_echo_n "checking for $LD option to reload object files... " >&6; }
+-if test "${lt_cv_ld_reload_flag+set}" = set; then
++if test "${lt_cv_ld_reload_flag+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ lt_cv_ld_reload_flag='-r'
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+ $as_echo "$lt_cv_ld_reload_flag" >&6; }
+ reload_flag=$lt_cv_ld_reload_flag
+ case $reload_flag in
+@@ -4972,9 +5354,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}objdump; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_OBJDUMP+set}" = set; then
++if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$OBJDUMP"; then
+@@ -4985,24 +5367,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ OBJDUMP=$ac_cv_prog_OBJDUMP
+ if test -n "$OBJDUMP"; then
+- { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+ $as_echo "$OBJDUMP" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -5012,9 +5394,9 @@
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+ set dummy objdump; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then
++if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_OBJDUMP"; then
+@@ -5025,24 +5407,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+ if test -n "$ac_ct_OBJDUMP"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+ $as_echo "$ac_ct_OBJDUMP" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -5051,7 +5433,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -5068,9 +5450,9 @@
+
+
+
+-{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+ $as_echo_n "checking how to recognize dependent libraries... " >&6; }
+-if test "${lt_cv_deplibs_check_method+set}" = set; then
++if test "${lt_cv_deplibs_check_method+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+@@ -5185,11 +5567,11 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux* | k*bsd*-gnu)
++linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+-netbsd*)
++netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+@@ -5264,7 +5646,7 @@
+ esac
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+ $as_echo "$lt_cv_deplibs_check_method" >&6; }
+ file_magic_cmd=$lt_cv_file_magic_cmd
+ deplibs_check_method=$lt_cv_deplibs_check_method
+@@ -5284,9 +5666,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}ar; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_AR+set}" = set; then
++if test "${ac_cv_prog_AR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$AR"; then
+@@ -5297,24 +5679,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ AR=$ac_cv_prog_AR
+ if test -n "$AR"; then
+- { $as_echo "$as_me:$LINENO: result: $AR" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+ $as_echo "$AR" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -5324,9 +5706,9 @@
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+ set dummy ar; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
++if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_AR"; then
+@@ -5337,24 +5719,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_AR="ar"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_AR=$ac_cv_prog_ac_ct_AR
+ if test -n "$ac_ct_AR"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+ $as_echo "$ac_ct_AR" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -5363,7 +5745,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -5389,9 +5771,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}strip; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_STRIP+set}" = set; then
++if test "${ac_cv_prog_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$STRIP"; then
+@@ -5402,24 +5784,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ STRIP=$ac_cv_prog_STRIP
+ if test -n "$STRIP"; then
+- { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+ $as_echo "$STRIP" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -5429,9 +5811,9 @@
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+ set dummy strip; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
++if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_STRIP"; then
+@@ -5442,24 +5824,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+ if test -n "$ac_ct_STRIP"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+ $as_echo "$ac_ct_STRIP" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -5468,7 +5850,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -5488,9 +5870,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_RANLIB+set}" = set; then
++if test "${ac_cv_prog_RANLIB+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$RANLIB"; then
+@@ -5501,24 +5883,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ RANLIB=$ac_cv_prog_RANLIB
+ if test -n "$RANLIB"; then
+- { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+ $as_echo "$RANLIB" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -5528,9 +5910,9 @@
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+ set dummy ranlib; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
++if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_RANLIB"; then
+@@ -5541,24 +5923,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+ if test -n "$ac_ct_RANLIB"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+ $as_echo "$ac_ct_RANLIB" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -5567,7 +5949,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -5645,9 +6027,9 @@
+
+
+ # Check for command to grab the raw symbol name followed by C symbol from nm.
+-{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+ $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
++if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+
+@@ -5763,18 +6145,18 @@
+ int main(){nm_test_var='a';nm_test_func();return(0);}
+ _LT_EOF
+
+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+- if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && test -s "$nlist"; then
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+@@ -5827,11 +6209,11 @@
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && test -s conftest${ac_exeext}; then
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+@@ -5865,10 +6247,10 @@
+ lt_cv_sys_global_symbol_to_cdecl=
+ fi
+ if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+- { $as_echo "$as_me:$LINENO: result: failed" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+ $as_echo "failed" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: ok" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+ $as_echo "ok" >&6; }
+ fi
+
+@@ -5895,7 +6277,7 @@
+
+
+ # Check whether --enable-libtool-lock was given.
+-if test "${enable_libtool_lock+set}" = set; then
++if test "${enable_libtool_lock+set}" = set; then :
+ enableval=$enable_libtool_lock;
+ fi
+
+@@ -5907,11 +6289,11 @@
+ ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+@@ -5925,12 +6307,12 @@
+ ;;
+ *-*-irix6*)
+ # Find out which ABI we are using.
+- echo '#line 5928 "configure"' > conftest.$ac_ext
+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ echo '#line 6310 "configure"' > conftest.$ac_ext
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+@@ -5964,11 +6346,11 @@
+ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+@@ -6017,9 +6399,9 @@
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+- { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+ $as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+-if test "${lt_cv_cc_needs_belf+set}" = set; then
++if test "${lt_cv_cc_needs_belf+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_ext=c
+@@ -6028,11 +6410,7 @@
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -6043,38 +6421,13 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
++if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_cc_needs_belf=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- lt_cv_cc_needs_belf=no
++ lt_cv_cc_needs_belf=no
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+@@ -6082,7 +6435,7 @@
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+ $as_echo "$lt_cv_cc_needs_belf" >&6; }
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+@@ -6092,11 +6445,11 @@
+ sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+@@ -6122,9 +6475,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_DSYMUTIL+set}" = set; then
++if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$DSYMUTIL"; then
+@@ -6135,24 +6488,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ DSYMUTIL=$ac_cv_prog_DSYMUTIL
+ if test -n "$DSYMUTIL"; then
+- { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+ $as_echo "$DSYMUTIL" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -6162,9 +6515,9 @@
+ ac_ct_DSYMUTIL=$DSYMUTIL
+ # Extract the first word of "dsymutil", so it can be a program name with args.
+ set dummy dsymutil; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then
++if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_DSYMUTIL"; then
+@@ -6175,24 +6528,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+ if test -n "$ac_ct_DSYMUTIL"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+ $as_echo "$ac_ct_DSYMUTIL" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -6201,7 +6554,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -6214,9 +6567,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_NMEDIT+set}" = set; then
++if test "${ac_cv_prog_NMEDIT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$NMEDIT"; then
+@@ -6227,24 +6580,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ NMEDIT=$ac_cv_prog_NMEDIT
+ if test -n "$NMEDIT"; then
+- { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+ $as_echo "$NMEDIT" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -6254,9 +6607,9 @@
+ ac_ct_NMEDIT=$NMEDIT
+ # Extract the first word of "nmedit", so it can be a program name with args.
+ set dummy nmedit; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then
++if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_NMEDIT"; then
+@@ -6267,24 +6620,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_NMEDIT="nmedit"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+ if test -n "$ac_ct_NMEDIT"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+ $as_echo "$ac_ct_NMEDIT" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -6293,7 +6646,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -6306,9 +6659,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}lipo; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_LIPO+set}" = set; then
++if test "${ac_cv_prog_LIPO+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$LIPO"; then
+@@ -6319,24 +6672,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ LIPO=$ac_cv_prog_LIPO
+ if test -n "$LIPO"; then
+- { $as_echo "$as_me:$LINENO: result: $LIPO" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+ $as_echo "$LIPO" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -6346,9 +6699,9 @@
+ ac_ct_LIPO=$LIPO
+ # Extract the first word of "lipo", so it can be a program name with args.
+ set dummy lipo; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then
++if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_LIPO"; then
+@@ -6359,24 +6712,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_LIPO="lipo"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+ if test -n "$ac_ct_LIPO"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+ $as_echo "$ac_ct_LIPO" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -6385,7 +6738,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -6398,9 +6751,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}otool; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_OTOOL+set}" = set; then
++if test "${ac_cv_prog_OTOOL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$OTOOL"; then
+@@ -6411,24 +6764,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ OTOOL=$ac_cv_prog_OTOOL
+ if test -n "$OTOOL"; then
+- { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+ $as_echo "$OTOOL" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -6438,9 +6791,9 @@
+ ac_ct_OTOOL=$OTOOL
+ # Extract the first word of "otool", so it can be a program name with args.
+ set dummy otool; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then
++if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_OTOOL"; then
+@@ -6451,24 +6804,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OTOOL="otool"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+ if test -n "$ac_ct_OTOOL"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+ $as_echo "$ac_ct_OTOOL" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -6477,7 +6830,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -6490,9 +6843,9 @@
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}otool64; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_OTOOL64+set}" = set; then
++if test "${ac_cv_prog_OTOOL64+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$OTOOL64"; then
+@@ -6503,24 +6856,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ OTOOL64=$ac_cv_prog_OTOOL64
+ if test -n "$OTOOL64"; then
+- { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+ $as_echo "$OTOOL64" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -6530,9 +6883,9 @@
+ ac_ct_OTOOL64=$OTOOL64
+ # Extract the first word of "otool64", so it can be a program name with args.
+ set dummy otool64; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then
++if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -n "$ac_ct_OTOOL64"; then
+@@ -6543,24 +6896,24 @@
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OTOOL64="otool64"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+-done
++ done
+ IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+ if test -n "$ac_ct_OTOOL64"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+ $as_echo "$ac_ct_OTOOL64" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -6569,7 +6922,7 @@
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+@@ -6605,9 +6958,9 @@
+
+
+
+- { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+ $as_echo_n "checking for -single_module linker flag... " >&6; }
+-if test "${lt_cv_apple_cc_single_mod+set}" = set; then
++if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ lt_cv_apple_cc_single_mod=no
+@@ -6632,22 +6985,18 @@
+ rm -f conftest.*
+ fi
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+ $as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+- { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+ $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then
++if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -6658,42 +7007,17 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
++if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_ld_exported_symbols_list=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- lt_cv_ld_exported_symbols_list=no
++ lt_cv_ld_exported_symbols_list=no
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+ $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+ case $host_os in
+ rhapsody* | darwin1.[012])
+@@ -6735,14 +7059,14 @@
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+-{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+ $as_echo_n "checking how to run the C preprocessor... " >&6; }
+ # On Suns, sometimes $CPP names a directory.
+ if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+ fi
+ if test -z "$CPP"; then
+- if test "${ac_cv_prog_CPP+set}" = set; then
++ if test "${ac_cv_prog_CPP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ # Double quotes because CPP needs to be expanded
+@@ -6757,11 +7081,7 @@
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #ifdef __STDC__
+ # include <limits.h>
+@@ -6770,78 +7090,34 @@
+ #endif
+ Syntax error
+ _ACEOF
+-if { (ac_try="$ac_cpp conftest.$ac_ext"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null && {
+- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- }; then
+- :
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++if ac_fn_c_try_cpp "$LINENO"; then :
+
++else
+ # Broken: fails on valid input.
+ continue
+ fi
+-
+ rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #include <ac_nonexistent.h>
+ _ACEOF
+-if { (ac_try="$ac_cpp conftest.$ac_ext"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null && {
+- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- }; then
++if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+ continue
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+ # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+-
+ rm -f conftest.err conftest.$ac_ext
+
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+ rm -f conftest.err conftest.$ac_ext
+-if $ac_preproc_ok; then
++if $ac_preproc_ok; then :
+ break
+ fi
+
+@@ -6853,7 +7129,7 @@
+ else
+ ac_cv_prog_CPP=$CPP
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+ $as_echo "$CPP" >&6; }
+ ac_preproc_ok=false
+ for ac_c_preproc_warn_flag in '' yes
+@@ -6864,11 +7140,7 @@
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #ifdef __STDC__
+ # include <limits.h>
+@@ -6877,87 +7149,40 @@
+ #endif
+ Syntax error
+ _ACEOF
+-if { (ac_try="$ac_cpp conftest.$ac_ext"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null && {
+- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- }; then
+- :
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++if ac_fn_c_try_cpp "$LINENO"; then :
+
++else
+ # Broken: fails on valid input.
+ continue
+ fi
+-
+ rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #include <ac_nonexistent.h>
+ _ACEOF
+-if { (ac_try="$ac_cpp conftest.$ac_ext"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null && {
+- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- }; then
++if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+ continue
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+ # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+-
+ rm -f conftest.err conftest.$ac_ext
+
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+ rm -f conftest.err conftest.$ac_ext
+-if $ac_preproc_ok; then
+- :
++if $ac_preproc_ok; then :
++
+ else
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+-See \`config.log' for more details." >&2;}
+- { (exit 1); exit 1; }; }; }
++as_fn_error "C preprocessor \"$CPP\" fails sanity check
++See \`config.log' for more details." "$LINENO" 5; }
+ fi
+
+ ac_ext=c
+@@ -6967,16 +7192,12 @@
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+-{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+ $as_echo_n "checking for ANSI C header files... " >&6; }
+-if test "${ac_cv_header_stdc+set}" = set; then
++if test "${ac_cv_header_stdc+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #include <stdlib.h>
+ #include <stdarg.h>
+@@ -6991,48 +7212,23 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
++if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_header_stdc=no
++ ac_cv_header_stdc=no
+ fi
+-
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+ if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #include <string.h>
+
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "memchr" >/dev/null 2>&1; then
+- :
++ $EGREP "memchr" >/dev/null 2>&1; then :
++
+ else
+ ac_cv_header_stdc=no
+ fi
+@@ -7042,18 +7238,14 @@
+
+ if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #include <stdlib.h>
+
+ _ACEOF
+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "free" >/dev/null 2>&1; then
+- :
++ $EGREP "free" >/dev/null 2>&1; then :
++
+ else
+ ac_cv_header_stdc=no
+ fi
+@@ -7063,14 +7255,10 @@
+
+ if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+- if test "$cross_compiling" = yes; then
++ if test "$cross_compiling" = yes; then :
+ :
+ else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #include <ctype.h>
+ #include <stdlib.h>
+@@ -7097,192 +7285,59 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+- { (case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_try") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- :
+-else
+- $as_echo "$as_me: program exited with status $ac_status" >&5
+-$as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++if ac_fn_c_try_run "$LINENO"; then :
+
+-( exit $ac_status )
+-ac_cv_header_stdc=no
++else
++ ac_cv_header_stdc=no
+ fi
+-rm -rf conftest.dSYM
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++ conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+
+-
+ fi
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+ $as_echo "$ac_cv_header_stdc" >&6; }
+ if test $ac_cv_header_stdc = yes; then
+
+-cat >>confdefs.h <<\_ACEOF
+-#define STDC_HEADERS 1
+-_ACEOF
++$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+ fi
+
+ # On IRIX 5.3, sys/types and inttypes.h are conflicting.
++for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
++ inttypes.h stdint.h unistd.h
++do :
++ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
++ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
++"
++eval as_val=\$$as_ac_Header
++ if test "x$as_val" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
+
++fi
+
++done
+
+
++for ac_header in dlfcn.h
++do :
++ ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
++"
++if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_DLFCN_H 1
++_ACEOF
+
++fi
+
++done
+
+
+
+-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+- inttypes.h stdint.h unistd.h
+-do
+-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+-$as_echo_n "checking for $ac_header... " >&6; }
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+- $as_echo_n "(cached) " >&6
+-else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-
+-#include <$ac_header>
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- eval "$as_ac_Header=yes"
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- eval "$as_ac_Header=no"
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-ac_res=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-as_val=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- if test "x$as_val" = x""yes; then
+- cat >>confdefs.h <<_ACEOF
+-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+-_ACEOF
+-
+-fi
+-
+-done
+-
+-
+-
+-for ac_header in dlfcn.h
+-do
+-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+-$as_echo_n "checking for $ac_header... " >&6; }
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+- $as_echo_n "(cached) " >&6
+-else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-
+-#include <$ac_header>
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- eval "$as_ac_Header=yes"
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- eval "$as_ac_Header=no"
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-ac_res=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-as_val=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- if test "x$as_val" = x""yes; then
+- cat >>confdefs.h <<_ACEOF
+-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+-_ACEOF
+-
+-fi
+-
+-done
+-
+-
+-
+-# Set options
++# Set options
+
+
+
+@@ -7291,7 +7346,7 @@
+
+
+ # Check whether --enable-shared was given.
+-if test "${enable_shared+set}" = set; then
++if test "${enable_shared+set}" = set; then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+@@ -7322,7 +7377,7 @@
+
+
+ # Check whether --enable-static was given.
+-if test "${enable_static+set}" = set; then
++if test "${enable_static+set}" = set; then :
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+@@ -7354,7 +7409,7 @@
+
+
+ # Check whether --with-pic was given.
+-if test "${with_pic+set}" = set; then
++if test "${with_pic+set}" = set; then :
+ withval=$with_pic; pic_mode="$withval"
+ else
+ pic_mode=default
+@@ -7370,7 +7425,7 @@
+
+
+ # Check whether --enable-fast-install was given.
+-if test "${enable_fast_install+set}" = set; then
++if test "${enable_fast_install+set}" = set; then :
+ enableval=$enable_fast_install; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+@@ -7451,9 +7506,9 @@
+ setopt NO_GLOB_SUBST
+ fi
+
+-{ $as_echo "$as_me:$LINENO: checking for objdir" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+ $as_echo_n "checking for objdir... " >&6; }
+-if test "${lt_cv_objdir+set}" = set; then
++if test "${lt_cv_objdir+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ rm -f .libs 2>/dev/null
+@@ -7466,7 +7521,7 @@
+ fi
+ rmdir .libs 2>/dev/null
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+ $as_echo "$lt_cv_objdir" >&6; }
+ objdir=$lt_cv_objdir
+
+@@ -7559,9 +7614,9 @@
+ case $deplibs_check_method in
+ file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+- { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+ $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
++if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ case $MAGIC_CMD in
+@@ -7612,10 +7667,10 @@
+
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if test -n "$MAGIC_CMD"; then
+- { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+ $as_echo "$MAGIC_CMD" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -7625,9 +7680,9 @@
+
+ if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+- { $as_echo "$as_me:$LINENO: checking for file" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+ $as_echo_n "checking for file... " >&6; }
+-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
++if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ case $MAGIC_CMD in
+@@ -7678,10 +7733,10 @@
+
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if test -n "$MAGIC_CMD"; then
+- { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+ $as_echo "$MAGIC_CMD" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+
+@@ -7762,9 +7817,9 @@
+ if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+- { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+ $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
++if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ lt_cv_prog_compiler_rtti_exceptions=no
+@@ -7780,11 +7835,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:7783: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:7838: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:7787: \$? = $ac_status" >&5
++ echo "$as_me:7842: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -7797,7 +7852,7 @@
+ $RM conftest*
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+ $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+ if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+@@ -7817,7 +7872,7 @@
+ lt_prog_compiler_pic=
+ lt_prog_compiler_static=
+
+-{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+@@ -7949,7 +8004,7 @@
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+- linux* | k*bsd*-gnu)
++ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+@@ -8089,7 +8144,7 @@
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+ esac
+-{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+ $as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+@@ -8101,9 +8156,9 @@
+ # Check to make sure the PIC flag actually works.
+ #
+ if test -n "$lt_prog_compiler_pic"; then
+- { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+ $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then
++if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ lt_cv_prog_compiler_pic_works=no
+@@ -8119,11 +8174,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:8122: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:8177: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:8126: \$? = $ac_status" >&5
++ echo "$as_me:8181: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -8136,7 +8191,7 @@
+ $RM conftest*
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+ $as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+ if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+@@ -8160,9 +8215,9 @@
+ # Check to make sure the static flag actually works.
+ #
+ wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+-{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+ $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+-if test "${lt_cv_prog_compiler_static_works+set}" = set; then
++if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ lt_cv_prog_compiler_static_works=no
+@@ -8188,7 +8243,7 @@
+ LDFLAGS="$save_LDFLAGS"
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+ $as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+ if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+@@ -8203,9 +8258,9 @@
+
+
+
+- { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+ $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+-if test "${lt_cv_prog_compiler_c_o+set}" = set; then
++if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ lt_cv_prog_compiler_c_o=no
+@@ -8224,11 +8279,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:8227: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:8282: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:8231: \$? = $ac_status" >&5
++ echo "$as_me:8286: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -8250,7 +8305,7 @@
+ $RM conftest*
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+@@ -8258,9 +8313,9 @@
+
+
+
+- { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+ $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+-if test "${lt_cv_prog_compiler_c_o+set}" = set; then
++if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ lt_cv_prog_compiler_c_o=no
+@@ -8279,11 +8334,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:8282: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:8337: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:8286: \$? = $ac_status" >&5
++ echo "$as_me:8341: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -8305,7 +8360,7 @@
+ $RM conftest*
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+@@ -8314,7 +8369,7 @@
+ hard_links="nottested"
+ if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+- { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+ $as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+@@ -8322,10 +8377,10 @@
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+- { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+ $as_echo "$hard_links" >&6; }
+ if test "$hard_links" = no; then
+- { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+ $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+@@ -8338,7 +8393,7 @@
+
+
+
+- { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+ $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+@@ -8398,6 +8453,9 @@
+ openbsd*)
+ with_gnu_ld=no
+ ;;
++ linux* | k*bsd*-gnu)
++ link_all_deplibs=no
++ ;;
+ esac
+
+ ld_shlibs=yes
+@@ -8419,6 +8477,7 @@
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
++ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+@@ -8510,7 +8569,7 @@
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+- gnu* | linux* | tpf* | k*bsd*-gnu)
++ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+@@ -8580,7 +8639,7 @@
+ fi
+ ;;
+
+- netbsd*)
++ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+@@ -8755,6 +8814,7 @@
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
++ link_all_deplibs=no
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+@@ -8780,11 +8840,7 @@
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -8795,27 +8851,7 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
++if ac_fn_c_try_link "$LINENO"; then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+@@ -8829,16 +8865,9 @@
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+@@ -8851,11 +8880,7 @@
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -8866,27 +8891,7 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
++if ac_fn_c_try_link "$LINENO"; then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+@@ -8900,16 +8905,9 @@
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+@@ -8961,7 +8959,8 @@
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+- fix_srcfile_path=
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+@@ -9120,42 +9119,16 @@
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+- cat >conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
+ int foo(void) {}
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
++if ac_fn_c_try_link "$LINENO"; then :
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+@@ -9168,7 +9141,7 @@
+ link_all_deplibs=yes
+ ;;
+
+- netbsd*)
++ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+@@ -9411,7 +9384,7 @@
+ fi
+ fi
+
+-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+ $as_echo "$ld_shlibs" >&6; }
+ test "$ld_shlibs" = no && can_build_shared=no
+
+@@ -9448,16 +9421,16 @@
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+- { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } 2>conftest.err; then
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+@@ -9471,11 +9444,11 @@
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+- if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
+ then
+ archive_cmds_need_lc=no
+ else
+@@ -9486,7 +9459,7 @@
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+- { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
+ $as_echo "$archive_cmds_need_lc" >&6; }
+ ;;
+ esac
+@@ -9650,7 +9623,7 @@
+
+
+
+- { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+ $as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+ if test "$GCC" = yes; then
+@@ -9867,7 +9840,7 @@
+ ;;
+
+ *)
+- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} ${libname}${versuffix}.lib'
++ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+@@ -10058,7 +10031,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux* | k*bsd*-gnu)
++linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+@@ -10072,11 +10045,7 @@
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -10087,41 +10056,13 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
+- if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then
++if ac_fn_c_try_link "$LINENO"; then :
++ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+ shlibpath_overrides_runpath=yes
+ fi
+-
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+@@ -10145,6 +10086,18 @@
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
++netbsdelf*-gnu)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ hardcode_into_libs=yes
++ dynamic_linker='NetBSD ld.elf_so'
++ ;;
++
+ netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+@@ -10333,7 +10286,7 @@
+ dynamic_linker=no
+ ;;
+ esac
+-{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+ $as_echo "$dynamic_linker" >&6; }
+ test "$dynamic_linker" = no && can_build_shared=no
+
+@@ -10435,7 +10388,7 @@
+
+
+
+- { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+ $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+ hardcode_action=
+ if test -n "$hardcode_libdir_flag_spec" ||
+@@ -10460,7 +10413,7 @@
+ # directories.
+ hardcode_action=unsupported
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+ $as_echo "$hardcode_action" >&6; }
+
+ if test "$hardcode_action" = relink ||
+@@ -10505,18 +10458,14 @@
+
+ darwin*)
+ # if libdl is installed we need to link against it
+- { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+ $as_echo_n "checking for dlopen in -ldl... " >&6; }
+-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
++if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_check_lib_save_LIBS=$LIBS
+ LIBS="-ldl $LIBS"
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ /* Override any GCC internal prototype to avoid an error.
+@@ -10534,43 +10483,18 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
++if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_lib_dl_dlopen=no
++ ac_cv_lib_dl_dlopen=no
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+ $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then
++if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+ else
+
+@@ -10583,33 +10507,19 @@
+ ;;
+
+ *)
+- { $as_echo "$as_me:$LINENO: checking for shl_load" >&5
+-$as_echo_n "checking for shl_load... " >&6; }
+-if test "${ac_cv_func_shl_load+set}" = set; then
++ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
++if test "x$ac_cv_func_shl_load" = x""yes; then :
++ lt_cv_dlopen="shl_load"
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
++$as_echo_n "checking for shl_load in -ldld... " >&6; }
++if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ ac_check_lib_save_LIBS=$LIBS
++LIBS="-ldld $LIBS"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+- For example, HP-UX 11i <limits.h> declares gettimeofday. */
+-#define shl_load innocuous_shl_load
+-
+-/* System header to define __stub macros and hopefully few prototypes,
+- which can conflict with char shl_load (); below.
+- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+- <limits.h> exists even on freestanding compilers. */
+-
+-#ifdef __STDC__
+-# include <limits.h>
+-#else
+-# include <assert.h>
+-#endif
+-
+-#undef shl_load
+
+ /* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+@@ -10618,13 +10528,6 @@
+ extern "C"
+ #endif
+ char shl_load ();
+-/* The GNU C library defines this for functions which it implements
+- to always fail with ENOSYS. Some functions are actually named
+- something starting with __ and the normal name is an alias. */
+-#if defined __stub_shl_load || defined __stub___shl_load
+-choke me
+-#endif
+-
+ int
+ main ()
+ {
+@@ -10633,56 +10536,32 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
+- ac_cv_func_shl_load=yes
++if ac_fn_c_try_link "$LINENO"; then :
++ ac_cv_lib_dld_shl_load=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_func_shl_load=no
++ ac_cv_lib_dld_shl_load=no
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+-$as_echo "$ac_cv_func_shl_load" >&6; }
+-if test "x$ac_cv_func_shl_load" = x""yes; then
+- lt_cv_dlopen="shl_load"
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
++$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
++if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
++ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+ else
+- { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+-$as_echo_n "checking for shl_load in -ldld... " >&6; }
+-if test "${ac_cv_lib_dld_shl_load+set}" = set; then
++ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
++if test "x$ac_cv_func_dlopen" = x""yes; then :
++ lt_cv_dlopen="dlopen"
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
++$as_echo_n "checking for dlopen in -ldl... " >&6; }
++if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_check_lib_save_LIBS=$LIBS
+-LIBS="-ldld $LIBS"
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++LIBS="-ldl $LIBS"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ /* Override any GCC internal prototype to avoid an error.
+@@ -10691,222 +10570,37 @@
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+-char shl_load ();
++char dlopen ();
+ int
+ main ()
+ {
+-return shl_load ();
++return dlopen ();
+ ;
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
+- ac_cv_lib_dld_shl_load=yes
++if ac_fn_c_try_link "$LINENO"; then :
++ ac_cv_lib_dl_dlopen=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_lib_dld_shl_load=no
++ ac_cv_lib_dl_dlopen=no
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+-if test "x$ac_cv_lib_dld_shl_load" = x""yes; then
+- lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
++$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
++if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
++ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+ else
+- { $as_echo "$as_me:$LINENO: checking for dlopen" >&5
+-$as_echo_n "checking for dlopen... " >&6; }
+-if test "${ac_cv_func_dlopen+set}" = set; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
++$as_echo_n "checking for dlopen in -lsvld... " >&6; }
++if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+- For example, HP-UX 11i <limits.h> declares gettimeofday. */
+-#define dlopen innocuous_dlopen
+-
+-/* System header to define __stub macros and hopefully few prototypes,
+- which can conflict with char dlopen (); below.
+- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+- <limits.h> exists even on freestanding compilers. */
+-
+-#ifdef __STDC__
+-# include <limits.h>
+-#else
+-# include <assert.h>
+-#endif
+-
+-#undef dlopen
+-
+-/* Override any GCC internal prototype to avoid an error.
+- Use char because int might match the return type of a GCC
+- builtin and then its argument prototype would still apply. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char dlopen ();
+-/* The GNU C library defines this for functions which it implements
+- to always fail with ENOSYS. Some functions are actually named
+- something starting with __ and the normal name is an alias. */
+-#if defined __stub_dlopen || defined __stub___dlopen
+-choke me
+-#endif
+-
+-int
+-main ()
+-{
+-return dlopen ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
+- ac_cv_func_dlopen=yes
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_func_dlopen=no
+-fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+-$as_echo "$ac_cv_func_dlopen" >&6; }
+-if test "x$ac_cv_func_dlopen" = x""yes; then
+- lt_cv_dlopen="dlopen"
+-else
+- { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+-$as_echo_n "checking for dlopen in -ldl... " >&6; }
+-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- ac_check_lib_save_LIBS=$LIBS
+-LIBS="-ldl $LIBS"
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-
+-/* Override any GCC internal prototype to avoid an error.
+- Use char because int might match the return type of a GCC
+- builtin and then its argument prototype would still apply. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char dlopen ();
+-int
+-main ()
+-{
+-return dlopen ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
+- ac_cv_lib_dl_dlopen=yes
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_lib_dl_dlopen=no
+-fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
+-LIBS=$ac_check_lib_save_LIBS
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then
+- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+-else
+- { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+-$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+-if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- ac_check_lib_save_LIBS=$LIBS
+-LIBS="-lsvld $LIBS"
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ ac_check_lib_save_LIBS=$LIBS
++LIBS="-lsvld $LIBS"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ /* Override any GCC internal prototype to avoid an error.
+@@ -10924,57 +10618,28 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
++if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_svld_dlopen=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_lib_svld_dlopen=no
++ ac_cv_lib_svld_dlopen=no
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+ $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+-if test "x$ac_cv_lib_svld_dlopen" = x""yes; then
++if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+ else
+- { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+ $as_echo_n "checking for dld_link in -ldld... " >&6; }
+-if test "${ac_cv_lib_dld_dld_link+set}" = set; then
++if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_check_lib_save_LIBS=$LIBS
+ LIBS="-ldld $LIBS"
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ /* Override any GCC internal prototype to avoid an error.
+@@ -10992,43 +10657,18 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
++if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_dld_link=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_lib_dld_dld_link=no
++ ac_cv_lib_dld_dld_link=no
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+ $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+-if test "x$ac_cv_lib_dld_dld_link" = x""yes; then
++if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+ fi
+
+@@ -11067,9 +10707,9 @@
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+- { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+ $as_echo_n "checking whether a program can dlopen itself... " >&6; }
+-if test "${lt_cv_dlopen_self+set}" = set; then
++if test "${lt_cv_dlopen_self+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test "$cross_compiling" = yes; then :
+@@ -11078,7 +10718,7 @@
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11081 "configure"
++#line 10721 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11137,11 +10777,11 @@
+ return status;
+ }
+ _LT_EOF
+- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+@@ -11158,14 +10798,14 @@
+
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+ $as_echo "$lt_cv_dlopen_self" >&6; }
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+- { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+ $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+-if test "${lt_cv_dlopen_self_static+set}" = set; then
++if test "${lt_cv_dlopen_self_static+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test "$cross_compiling" = yes; then :
+@@ -11174,7 +10814,7 @@
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11177 "configure"
++#line 10817 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11233,11 +10873,11 @@
+ return status;
+ }
+ _LT_EOF
+- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+@@ -11254,7 +10894,7 @@
+
+
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+ $as_echo "$lt_cv_dlopen_self_static" >&6; }
+ fi
+
+@@ -11293,12 +10933,12 @@
+
+ striplib=
+ old_striplib=
+-{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+ $as_echo_n "checking whether stripping libraries is possible... " >&6; }
+ if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+- { $as_echo "$as_me:$LINENO: result: yes" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+ # FIXME - insert some real tests, host_os isn't really good enough
+@@ -11307,15 +10947,15 @@
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+- { $as_echo "$as_me:$LINENO: result: yes" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+ ;;
+ *)
+- { $as_echo "$as_me:$LINENO: result: no" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ ;;
+ esac
+@@ -11333,12 +10973,12 @@
+
+
+ # Report which library types will actually be built
+- { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+ $as_echo_n "checking if libtool supports shared libraries... " >&6; }
+- { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+ $as_echo "$can_build_shared" >&6; }
+
+- { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+ $as_echo_n "checking whether to build shared libraries... " >&6; }
+ test "$can_build_shared" = "no" && enable_shared=no
+
+@@ -11359,14 +10999,14 @@
+ fi
+ ;;
+ esac
+- { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+ $as_echo "$enable_shared" >&6; }
+
+- { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+ $as_echo_n "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+- { $as_echo "$as_me:$LINENO: result: $enable_static" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+ $as_echo "$enable_static" >&6; }
+
+
+@@ -11410,9 +11050,9 @@
+
+ depcc="$CCAS" am_compiler_list=
+
+-{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+ $as_echo_n "checking dependency style of $depcc... " >&6; }
+-if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then
++if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+@@ -11438,6 +11078,9 @@
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
++ am__universal=false
++
++
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+@@ -11455,7 +11098,17 @@
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
++ # We check with `-c' and `-o' for the sake of the "dashmstdout"
++ # mode. It turns out that the SunPro C++ compiler does not properly
++ # handle `-M -o', and we need to detect this. Also, some Intel
++ # versions had trouble with output in subdirs
++ am__obj=sub/conftest.${OBJEXT-o}
++ am__minus_obj="-o $am__obj"
+ case $depmode in
++ gcc)
++ # This depmode causes a compiler race in universal mode.
++ test "$am__universal" = false || continue
++ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+@@ -11465,4509 +11118,1091 @@
+ break
+ fi
+ ;;
++ msvisualcpp | msvcmsys)
++ # This compiler won't grok `-c -o', but also, the minuso test has
++ # not run yet. These depmodes are late enough in the game, and
++ # so weak that their functioning should not be impacted.
++ am__obj=conftest.${OBJEXT-o}
++ am__minus_obj=
++ ;;
+ none) break ;;
+ esac
+- # We check with `-c' and `-o' for the sake of the "dashmstdout"
+- # mode. It turns out that the SunPro C++ compiler does not properly
+- # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
++ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
++ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
++ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+- # The diagnosis changed in icc 8.0:
+- # icc: Command line remark: option '-MP' not supported
+- if (grep 'ignoring option' conftest.err ||
+- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+- am_cv_CCAS_dependencies_compiler_type=$depmode
+- break
+- fi
+- fi
+- done
+-
+- cd ..
+- rm -rf conftest.dir
+-else
+- am_cv_CCAS_dependencies_compiler_type=none
+-fi
+-
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $am_cv_CCAS_dependencies_compiler_type" >&5
+-$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; }
+-CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type
+-
+- if
+- test "x$enable_dependency_tracking" != xno \
+- && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then
+- am__fastdepCCAS_TRUE=
+- am__fastdepCCAS_FALSE='#'
+-else
+- am__fastdepCCAS_TRUE='#'
+- am__fastdepCCAS_FALSE=
+-fi
+-
+-
+-
+-
+-
+-ACLOCAL_AMFLAGS="-I m4 $ACLOCAL_AMFLAGS"
+-
+-
+-##################################################
+-# Check for gtk-doc.
+-##################################################
+-
+-if test "x$cross_compiling" = "xyes" ; then
+- enable_gtk_doc=no
+-fi
+-
+-
+-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+- if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+-set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+-$as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- case $PKG_CONFIG in
+- [\\/]* | ?:[\\/]*)
+- ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+- ;;
+- *)
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+- ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+- break 2
+- fi
+-done
+-done
+-IFS=$as_save_IFS
+-
+- ;;
+-esac
+-fi
+-PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+-if test -n "$PKG_CONFIG"; then
+- { $as_echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+-$as_echo "$PKG_CONFIG" >&6; }
+-else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
+-
+-
+-fi
+-if test -z "$ac_cv_path_PKG_CONFIG"; then
+- ac_pt_PKG_CONFIG=$PKG_CONFIG
+- # Extract the first word of "pkg-config", so it can be a program name with args.
+-set dummy pkg-config; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+-$as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- case $ac_pt_PKG_CONFIG in
+- [\\/]* | ?:[\\/]*)
+- ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+- ;;
+- *)
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+- ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+- break 2
+- fi
+-done
+-done
+-IFS=$as_save_IFS
+-
+- ;;
+-esac
+-fi
+-ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+-if test -n "$ac_pt_PKG_CONFIG"; then
+- { $as_echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
+-$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+-else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
+-
+- if test "x$ac_pt_PKG_CONFIG" = x; then
+- PKG_CONFIG=""
+- else
+- case $cross_compiling:$ac_tool_warned in
+-yes:)
+-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+-ac_tool_warned=yes ;;
+-esac
+- PKG_CONFIG=$ac_pt_PKG_CONFIG
+- fi
+-else
+- PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+-fi
+-
+-fi
+-if test -n "$PKG_CONFIG"; then
+- _pkg_min_version=0.9.0
+- { $as_echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
+-$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+- if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+- { $as_echo "$as_me:$LINENO: result: yes" >&5
+-$as_echo "yes" >&6; }
+- else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
+-$as_echo "no" >&6; }
+- PKG_CONFIG=""
+- fi
+-
+-fi
+-
+-
+-# Check whether --with-html-dir was given.
+-if test "${with_html_dir+set}" = set; then
+- withval=$with_html_dir;
+-else
+- with_html_dir='${datadir}/gtk-doc/html'
+-fi
+-
+- HTML_DIR="$with_html_dir"
+-
+-
+- # Check whether --enable-gtk-doc was given.
+-if test "${enable_gtk_doc+set}" = set; then
+- enableval=$enable_gtk_doc;
+-else
+- enable_gtk_doc=no
+-fi
+-
+-
+- if test x$enable_gtk_doc = xyes; then
+- if test -n "$PKG_CONFIG" && \
+- { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.0\"") >&5
+- ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.0") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then
+- :
+-else
+- { { $as_echo "$as_me:$LINENO: error: You need to have gtk-doc >= 1.0 installed to build gtk-doc" >&5
+-$as_echo "$as_me: error: You need to have gtk-doc >= 1.0 installed to build gtk-doc" >&2;}
+- { (exit 1); exit 1; }; }
+-fi
+- fi
+-
+- { $as_echo "$as_me:$LINENO: checking whether to build gtk-doc documentation" >&5
+-$as_echo_n "checking whether to build gtk-doc documentation... " >&6; }
+- { $as_echo "$as_me:$LINENO: result: $enable_gtk_doc" >&5
+-$as_echo "$enable_gtk_doc" >&6; }
+-
+- for ac_prog in gtkdoc-check
+-do
+- # Extract the first word of "$ac_prog", so it can be a program name with args.
+-set dummy $ac_prog; ac_word=$2
+-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+-$as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_path_GTKDOC_CHECK+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- case $GTKDOC_CHECK in
+- [\\/]* | ?:[\\/]*)
+- ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path.
+- ;;
+- *)
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+- ac_cv_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext"
+- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+- break 2
+- fi
+-done
+-done
+-IFS=$as_save_IFS
+-
+- ;;
+-esac
+-fi
+-GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK
+-if test -n "$GTKDOC_CHECK"; then
+- { $as_echo "$as_me:$LINENO: result: $GTKDOC_CHECK" >&5
+-$as_echo "$GTKDOC_CHECK" >&6; }
+-else
+- { $as_echo "$as_me:$LINENO: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
+-
+-
+- test -n "$GTKDOC_CHECK" && break
+-done
+-
+-
+- if test x$enable_gtk_doc = xyes; then
+- ENABLE_GTK_DOC_TRUE=
+- ENABLE_GTK_DOC_FALSE='#'
+-else
+- ENABLE_GTK_DOC_TRUE='#'
+- ENABLE_GTK_DOC_FALSE=
+-fi
+-
+- if test -n "$LIBTOOL"; then
+- GTK_DOC_USE_LIBTOOL_TRUE=
+- GTK_DOC_USE_LIBTOOL_FALSE='#'
+-else
+- GTK_DOC_USE_LIBTOOL_TRUE='#'
+- GTK_DOC_USE_LIBTOOL_FALSE=
+-fi
+-
+-
+-
+-
+-
+- case "x${host_cpu}" in
+- xi?86 | k?)
+- HAVE_I386=yes
+-
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_I386 1
+-_ACEOF
+-
+- ;;
+- xx86_64|xamd64)
+- HAVE_AMD64=yes
+-
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_AMD64 1
+-_ACEOF
+-
+- ;;
+- xpowerpc|xppc|xpowerpc64|xppc64)
+- HAVE_POWERPC=yes
+-
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_POWERPC 1
+-_ACEOF
+-
+- ;;
+- xarm)
+- HAVE_ARM=yes
+-
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_ARM 1
+-_ACEOF
+-
+- ;;
+- esac
+-
+- if test "x$HAVE_I386" = "xyes"; then
+- HAVE_I386_TRUE=
+- HAVE_I386_FALSE='#'
+-else
+- HAVE_I386_TRUE='#'
+- HAVE_I386_FALSE=
+-fi
+-
+- if test "x$HAVE_AMD64" = "xyes"; then
+- HAVE_AMD64_TRUE=
+- HAVE_AMD64_FALSE='#'
+-else
+- HAVE_AMD64_TRUE='#'
+- HAVE_AMD64_FALSE=
+-fi
+-
+- if test "x$HAVE_POWERPC" = "xyes"; then
+- HAVE_POWERPC_TRUE=
+- HAVE_POWERPC_FALSE='#'
+-else
+- HAVE_POWERPC_TRUE='#'
+- HAVE_POWERPC_FALSE=
+-fi
+-
+- if test "x$HAVE_ARM" = "xyes"; then
+- HAVE_ARM_TRUE=
+- HAVE_ARM_FALSE='#'
+-else
+- HAVE_ARM_TRUE='#'
+- HAVE_ARM_FALSE=
+-fi
+-
+-
+- case "${host_os}" in
+- mingw*)
+- HAVE_OS_WIN32=yes
+-
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_OS_WIN32 1
+-_ACEOF
+-
+- ;;
+- linux*)
+- HAVE_OS_LINUX=yes
+-
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_OS_LINUX 1
+-_ACEOF
+-
+- ;;
+- esac
+-
+- if test "$HAVE_OS_WIN32" = "yes"; then
+- HAVE_OS_WIN32_TRUE=
+- HAVE_OS_WIN32_FALSE='#'
+-else
+- HAVE_OS_WIN32_TRUE='#'
+- HAVE_OS_WIN32_FALSE=
+-fi
+-
+- if test "$HAVE_OS_LINUX" = "yes"; then
+- HAVE_OS_LINUX_TRUE=
+- HAVE_OS_LINUX_FALSE='#'
+-else
+- HAVE_OS_LINUX_TRUE='#'
+- HAVE_OS_LINUX_FALSE=
+-fi
+-
+-
+-
+-
+-
+- { $as_echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
+-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+-if test "${ac_cv_c_bigendian+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- ac_cv_c_bigendian=unknown
+- # See if we're dealing with a universal compiler.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#ifndef __APPLE_CC__
+- not a universal capable compiler
+- #endif
+- typedef int dummy;
+-
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+-
+- # Check for potential -arch flags. It is not universal unless
+- # there are some -arch flags. Note that *ppc* also matches
+- # ppc64. This check is also rather less than ideal.
+- case "${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}" in #(
+- *-arch*ppc*|*-arch*i386*|*-arch*x86_64*) ac_cv_c_bigendian=universal;;
+- esac
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+- if test $ac_cv_c_bigendian = unknown; then
+- # See if sys/param.h defines the BYTE_ORDER macro.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <sys/types.h>
+- #include <sys/param.h>
+-
+-int
+-main ()
+-{
+-#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+- && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+- && LITTLE_ENDIAN)
+- bogus endian macros
+- #endif
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- # It does; now see whether it defined to BIG_ENDIAN or not.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <sys/types.h>
+- #include <sys/param.h>
+-
+-int
+-main ()
+-{
+-#if BYTE_ORDER != BIG_ENDIAN
+- not big endian
+- #endif
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_cv_c_bigendian=yes
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_c_bigendian=no
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+- fi
+- if test $ac_cv_c_bigendian = unknown; then
+- # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <limits.h>
+-
+-int
+-main ()
+-{
+-#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+- bogus endian macros
+- #endif
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- # It does; now see whether it defined to _BIG_ENDIAN or not.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <limits.h>
+-
+-int
+-main ()
+-{
+-#ifndef _BIG_ENDIAN
+- not big endian
+- #endif
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_cv_c_bigendian=yes
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_c_bigendian=no
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+- fi
+- if test $ac_cv_c_bigendian = unknown; then
+- # Compile a test program.
+- if test "$cross_compiling" = yes; then
+- # Try to guess by grepping values from an object file.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-short int ascii_mm[] =
+- { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+- short int ascii_ii[] =
+- { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+- int use_ascii (int i) {
+- return ascii_mm[i] + ascii_ii[i];
+- }
+- short int ebcdic_ii[] =
+- { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+- short int ebcdic_mm[] =
+- { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+- int use_ebcdic (int i) {
+- return ebcdic_mm[i] + ebcdic_ii[i];
+- }
+- extern int foo;
+-
+-int
+-main ()
+-{
+-return use_ascii (foo) == use_ebcdic (foo);
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+- ac_cv_c_bigendian=yes
+- fi
+- if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+- if test "$ac_cv_c_bigendian" = unknown; then
+- ac_cv_c_bigendian=no
+- else
+- # finding both strings is unlikely to happen, but who knows?
+- ac_cv_c_bigendian=unknown
+- fi
+- fi
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-
+- /* Are we little or big endian? From Harbison&Steele. */
+- union
+- {
+- long int l;
+- char c[sizeof (long int)];
+- } u;
+- u.l = 1;
+- return u.c[sizeof (long int) - 1] == 1;
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+- { (case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_try") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_c_bigendian=no
+-else
+- $as_echo "$as_me: program exited with status $ac_status" >&5
+-$as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-( exit $ac_status )
+-ac_cv_c_bigendian=yes
+-fi
+-rm -rf conftest.dSYM
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+-fi
+-
+-
+- fi
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+-$as_echo "$ac_cv_c_bigendian" >&6; }
+- case $ac_cv_c_bigendian in #(
+- yes)
+- cat >>confdefs.h <<\_ACEOF
+-#define WORDS_BIGENDIAN 1
+-_ACEOF
+-;; #(
+- no)
+- ;; #(
+- universal)
+-
+-cat >>confdefs.h <<\_ACEOF
+-#define AC_APPLE_UNIVERSAL_BUILD 1
+-_ACEOF
+-
+- ;; #(
+- *)
+- { { $as_echo "$as_me:$LINENO: error: unknown endianness
+- presetting ac_cv_c_bigendian=no (or yes) will help" >&5
+-$as_echo "$as_me: error: unknown endianness
+- presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
+- { (exit 1); exit 1; }; } ;;
+- esac
+-
+-
+-# ------ AX CREATE STDINT H -------------------------------------
+-{ $as_echo "$as_me:$LINENO: checking for stdint types" >&5
+-$as_echo_n "checking for stdint types... " >&6; }
+-ac_stdint_h=`echo orc/orc-stdint.h`
+-# try to shortcircuit - if the default include path of the compiler
+-# can find a "stdint.h" header then we assume that all compilers can.
+-if test "${ac_cv_header_stdint_t+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+-
+-old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS=""
+-old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS=""
+-old_CFLAGS="$CFLAGS" ; CFLAGS=""
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <stdint.h>
+-int
+-main ()
+-{
+-int_least32_t v = 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_cv_stdint_result="(assuming C99 compatible system)"
+- ac_cv_header_stdint_t="stdint.h";
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_header_stdint_t=""
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then
+-CFLAGS="-std=c99"
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <stdint.h>
+-int
+-main ()
+-{
+-int_least32_t v = 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- { $as_echo "$as_me:$LINENO: WARNING: your GCC compiler has a defunct stdint.h for its default-mode" >&5
+-$as_echo "$as_me: WARNING: your GCC compiler has a defunct stdint.h for its default-mode" >&2;}
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-CXXFLAGS="$old_CXXFLAGS"
+-CPPFLAGS="$old_CPPFLAGS"
+-CFLAGS="$old_CFLAGS"
+-fi
+-
+-
+-v="... $ac_cv_header_stdint_h"
+-if test "$ac_stdint_h" = "stdint.h" ; then
+- { $as_echo "$as_me:$LINENO: result: (are you sure you want them in ./stdint.h?)" >&5
+-$as_echo "(are you sure you want them in ./stdint.h?)" >&6; }
+-elif test "$ac_stdint_h" = "inttypes.h" ; then
+- { $as_echo "$as_me:$LINENO: result: (are you sure you want them in ./inttypes.h?)" >&5
+-$as_echo "(are you sure you want them in ./inttypes.h?)" >&6; }
+-elif test "_$ac_cv_header_stdint_t" = "_" ; then
+- { $as_echo "$as_me:$LINENO: result: (putting them into $ac_stdint_h)$v" >&5
+-$as_echo "(putting them into $ac_stdint_h)$v" >&6; }
+-else
+- ac_cv_header_stdint="$ac_cv_header_stdint_t"
+- { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdint (shortcircuit)" >&5
+-$as_echo "$ac_cv_header_stdint (shortcircuit)" >&6; }
+-fi
+-
+-if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit..
+-
+-
+-inttype_headers=`echo | sed -e 's/,/ /g'`
+-
+-ac_cv_stdint_result="(no helpful system typedefs seen)"
+-
+-{ $as_echo "$as_me:$LINENO: checking for stdint uintptr_t" >&5
+-$as_echo_n "checking for stdint uintptr_t... " >&6; }
+-if test "${ac_cv_header_stdint_x+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+-
+- ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h)
+- { $as_echo "$as_me:$LINENO: result: (..)" >&5
+-$as_echo "(..)" >&6; }
+- for i in stdint.h inttypes.h sys/inttypes.h $inttype_headers
+- do
+- unset ac_cv_type_uintptr_t
+- unset ac_cv_type_uint64_t
+- { $as_echo "$as_me:$LINENO: checking for uintptr_t" >&5
+-$as_echo_n "checking for uintptr_t... " >&6; }
+-if test "${ac_cv_type_uintptr_t+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- ac_cv_type_uintptr_t=no
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <$i>
+-
+-int
+-main ()
+-{
+-if (sizeof (uintptr_t))
+- return 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <$i>
+-
+-int
+-main ()
+-{
+-if (sizeof ((uintptr_t)))
+- return 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- :
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_type_uintptr_t=yes
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5
+-$as_echo "$ac_cv_type_uintptr_t" >&6; }
+-if test "x$ac_cv_type_uintptr_t" = x""yes; then
+- ac_cv_header_stdint_x=$i
+-else
+- continue
+-fi
+-
+- { $as_echo "$as_me:$LINENO: checking for uint64_t" >&5
+-$as_echo_n "checking for uint64_t... " >&6; }
+-if test "${ac_cv_type_uint64_t+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- ac_cv_type_uint64_t=no
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include<$i>
+-
+-int
+-main ()
+-{
+-if (sizeof (uint64_t))
+- return 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include<$i>
+-
+-int
+-main ()
+-{
+-if (sizeof ((uint64_t)))
+- return 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- :
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_type_uint64_t=yes
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5
+-$as_echo "$ac_cv_type_uint64_t" >&6; }
+-if test "x$ac_cv_type_uint64_t" = x""yes; then
+- and64="/uint64_t"
+-else
+- and64=""
+-fi
+-
+- ac_cv_stdint_result="(seen uintptr_t$and64 in $i)"
+- break
+- done
+- { $as_echo "$as_me:$LINENO: checking for stdint uintptr_t" >&5
+-$as_echo_n "checking for stdint uintptr_t... " >&6; }
+-
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdint_x" >&5
+-$as_echo "$ac_cv_header_stdint_x" >&6; }
+-
+-
+-if test "_$ac_cv_header_stdint_x" = "_" ; then
+-
+-{ $as_echo "$as_me:$LINENO: checking for stdint uint32_t" >&5
+-$as_echo_n "checking for stdint uint32_t... " >&6; }
+-if test "${ac_cv_header_stdint_o+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+-
+- ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h)
+- { $as_echo "$as_me:$LINENO: result: (..)" >&5
+-$as_echo "(..)" >&6; }
+- for i in inttypes.h sys/inttypes.h stdint.h $inttype_headers
+- do
+- unset ac_cv_type_uint32_t
+- unset ac_cv_type_uint64_t
+- { $as_echo "$as_me:$LINENO: checking for uint32_t" >&5
+-$as_echo_n "checking for uint32_t... " >&6; }
+-if test "${ac_cv_type_uint32_t+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- ac_cv_type_uint32_t=no
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <$i>
+-
+-int
+-main ()
+-{
+-if (sizeof (uint32_t))
+- return 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <$i>
+-
+-int
+-main ()
+-{
+-if (sizeof ((uint32_t)))
+- return 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- :
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_type_uint32_t=yes
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5
+-$as_echo "$ac_cv_type_uint32_t" >&6; }
+-if test "x$ac_cv_type_uint32_t" = x""yes; then
+- ac_cv_header_stdint_o=$i
+-else
+- continue
+-fi
+-
+- { $as_echo "$as_me:$LINENO: checking for uint64_t" >&5
+-$as_echo_n "checking for uint64_t... " >&6; }
+-if test "${ac_cv_type_uint64_t+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- ac_cv_type_uint64_t=no
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include<$i>
+-
+-int
+-main ()
+-{
+-if (sizeof (uint64_t))
+- return 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include<$i>
+-
+-int
+-main ()
+-{
+-if (sizeof ((uint64_t)))
+- return 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- :
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_type_uint64_t=yes
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5
+-$as_echo "$ac_cv_type_uint64_t" >&6; }
+-if test "x$ac_cv_type_uint64_t" = x""yes; then
+- and64="/uint64_t"
+-else
+- and64=""
+-fi
+-
+- ac_cv_stdint_result="(seen uint32_t$and64 in $i)"
+- break
+- break;
+- done
+- { $as_echo "$as_me:$LINENO: checking for stdint uint32_t" >&5
+-$as_echo_n "checking for stdint uint32_t... " >&6; }
+-
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdint_o" >&5
+-$as_echo "$ac_cv_header_stdint_o" >&6; }
+-
+-fi
+-
+-if test "_$ac_cv_header_stdint_x" = "_" ; then
+-if test "_$ac_cv_header_stdint_o" = "_" ; then
+-
+-{ $as_echo "$as_me:$LINENO: checking for stdint u_int32_t" >&5
+-$as_echo_n "checking for stdint u_int32_t... " >&6; }
+-if test "${ac_cv_header_stdint_u+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+-
+- ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h)
+- { $as_echo "$as_me:$LINENO: result: (..)" >&5
+-$as_echo "(..)" >&6; }
+- for i in sys/types.h inttypes.h sys/inttypes.h $inttype_headers ; do
+- unset ac_cv_type_u_int32_t
+- unset ac_cv_type_u_int64_t
+- { $as_echo "$as_me:$LINENO: checking for u_int32_t" >&5
+-$as_echo_n "checking for u_int32_t... " >&6; }
+-if test "${ac_cv_type_u_int32_t+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- ac_cv_type_u_int32_t=no
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <$i>
+-
+-int
+-main ()
+-{
+-if (sizeof (u_int32_t))
+- return 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <$i>
+-
+-int
+-main ()
+-{
+-if (sizeof ((u_int32_t)))
+- return 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- :
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_type_u_int32_t=yes
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_u_int32_t" >&5
+-$as_echo "$ac_cv_type_u_int32_t" >&6; }
+-if test "x$ac_cv_type_u_int32_t" = x""yes; then
+- ac_cv_header_stdint_u=$i
+-else
+- continue
+-fi
+-
+- { $as_echo "$as_me:$LINENO: checking for u_int64_t" >&5
+-$as_echo_n "checking for u_int64_t... " >&6; }
+-if test "${ac_cv_type_u_int64_t+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- ac_cv_type_u_int64_t=no
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include<$i>
+-
+-int
+-main ()
+-{
+-if (sizeof (u_int64_t))
+- return 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include<$i>
+-
+-int
+-main ()
+-{
+-if (sizeof ((u_int64_t)))
+- return 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- :
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_type_u_int64_t=yes
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_u_int64_t" >&5
+-$as_echo "$ac_cv_type_u_int64_t" >&6; }
+-if test "x$ac_cv_type_u_int64_t" = x""yes; then
+- and64="/u_int64_t"
+-else
+- and64=""
+-fi
+-
+- ac_cv_stdint_result="(seen u_int32_t$and64 in $i)"
+- break
+- break;
+- done
+- { $as_echo "$as_me:$LINENO: checking for stdint u_int32_t" >&5
+-$as_echo_n "checking for stdint u_int32_t... " >&6; }
+-
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdint_u" >&5
+-$as_echo "$ac_cv_header_stdint_u" >&6; }
+-
+-fi fi
+-
+-if test "_$ac_cv_header_stdint_x" = "_" ; then
+- { $as_echo "$as_me:$LINENO: checking for stdint datatype model" >&5
+-$as_echo_n "checking for stdint datatype model... " >&6; }
+- { $as_echo "$as_me:$LINENO: result: (..)" >&5
+-$as_echo "(..)" >&6; }
+-
+- # The cast to long int works around a bug in the HP C Compiler
+-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+-# This bug is HP SR number 8606223364.
+-{ $as_echo "$as_me:$LINENO: checking size of char" >&5
+-$as_echo_n "checking size of char... " >&6; }
+-if test "${ac_cv_sizeof_char+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- if test "$cross_compiling" = yes; then
+- # Depending upon the size, compute the lo and hi bounds.
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (char))) >= 0)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_lo=0 ac_mid=0
+- while :; do
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (char))) <= $ac_mid)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=$ac_mid; break
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_lo=`expr $ac_mid + 1`
+- if test $ac_lo -le $ac_mid; then
+- ac_lo= ac_hi=
+- break
+- fi
+- ac_mid=`expr 2 '*' $ac_mid + 1`
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+- done
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (char))) < 0)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=-1 ac_mid=-1
+- while :; do
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (char))) >= $ac_mid)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_lo=$ac_mid; break
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_hi=`expr '(' $ac_mid ')' - 1`
+- if test $ac_mid -le $ac_hi; then
+- ac_lo= ac_hi=
+- break
+- fi
+- ac_mid=`expr 2 '*' $ac_mid`
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+- done
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_lo= ac_hi=
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-# Binary search between lo and hi bounds.
+-while test "x$ac_lo" != "x$ac_hi"; do
+- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (char))) <= $ac_mid)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=$ac_mid
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_lo=`expr '(' $ac_mid ')' + 1`
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-done
+-case $ac_lo in
+-?*) ac_cv_sizeof_char=$ac_lo;;
+-'') if test "$ac_cv_type_char" = yes; then
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (char)
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot compute sizeof (char)
+-See \`config.log' for more details." >&2;}
+- { (exit 77); exit 77; }; }; }
+- else
+- ac_cv_sizeof_char=0
+- fi ;;
+-esac
+-else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-static long int longval () { return (long int) (sizeof (char)); }
+-static unsigned long int ulongval () { return (long int) (sizeof (char)); }
+-#include <stdio.h>
+-#include <stdlib.h>
+-int
+-main ()
+-{
+-
+- FILE *f = fopen ("conftest.val", "w");
+- if (! f)
+- return 1;
+- if (((long int) (sizeof (char))) < 0)
+- {
+- long int i = longval ();
+- if (i != ((long int) (sizeof (char))))
+- return 1;
+- fprintf (f, "%ld", i);
+- }
+- else
+- {
+- unsigned long int i = ulongval ();
+- if (i != ((long int) (sizeof (char))))
+- return 1;
+- fprintf (f, "%lu", i);
+- }
+- /* Do not output a trailing newline, as this causes \r\n confusion
+- on some platforms. */
+- return ferror (f) || fclose (f) != 0;
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+- { (case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_try") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_sizeof_char=`cat conftest.val`
+-else
+- $as_echo "$as_me: program exited with status $ac_status" >&5
+-$as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-( exit $ac_status )
+-if test "$ac_cv_type_char" = yes; then
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (char)
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot compute sizeof (char)
+-See \`config.log' for more details." >&2;}
+- { (exit 77); exit 77; }; }; }
+- else
+- ac_cv_sizeof_char=0
+- fi
+-fi
+-rm -rf conftest.dSYM
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+-fi
+-rm -f conftest.val
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5
+-$as_echo "$ac_cv_sizeof_char" >&6; }
+-
+-
+-
+-cat >>confdefs.h <<_ACEOF
+-#define SIZEOF_CHAR $ac_cv_sizeof_char
+-_ACEOF
+-
+-
+- # The cast to long int works around a bug in the HP C Compiler
+-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+-# This bug is HP SR number 8606223364.
+-{ $as_echo "$as_me:$LINENO: checking size of short" >&5
+-$as_echo_n "checking size of short... " >&6; }
+-if test "${ac_cv_sizeof_short+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- if test "$cross_compiling" = yes; then
+- # Depending upon the size, compute the lo and hi bounds.
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (short))) >= 0)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_lo=0 ac_mid=0
+- while :; do
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (short))) <= $ac_mid)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=$ac_mid; break
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_lo=`expr $ac_mid + 1`
+- if test $ac_lo -le $ac_mid; then
+- ac_lo= ac_hi=
+- break
+- fi
+- ac_mid=`expr 2 '*' $ac_mid + 1`
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+- done
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (short))) < 0)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=-1 ac_mid=-1
+- while :; do
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (short))) >= $ac_mid)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_lo=$ac_mid; break
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_hi=`expr '(' $ac_mid ')' - 1`
+- if test $ac_mid -le $ac_hi; then
+- ac_lo= ac_hi=
+- break
+- fi
+- ac_mid=`expr 2 '*' $ac_mid`
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+- done
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_lo= ac_hi=
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-# Binary search between lo and hi bounds.
+-while test "x$ac_lo" != "x$ac_hi"; do
+- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (short))) <= $ac_mid)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=$ac_mid
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_lo=`expr '(' $ac_mid ')' + 1`
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-done
+-case $ac_lo in
+-?*) ac_cv_sizeof_short=$ac_lo;;
+-'') if test "$ac_cv_type_short" = yes; then
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (short)
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot compute sizeof (short)
+-See \`config.log' for more details." >&2;}
+- { (exit 77); exit 77; }; }; }
+- else
+- ac_cv_sizeof_short=0
+- fi ;;
+-esac
+-else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-static long int longval () { return (long int) (sizeof (short)); }
+-static unsigned long int ulongval () { return (long int) (sizeof (short)); }
+-#include <stdio.h>
+-#include <stdlib.h>
+-int
+-main ()
+-{
+-
+- FILE *f = fopen ("conftest.val", "w");
+- if (! f)
+- return 1;
+- if (((long int) (sizeof (short))) < 0)
+- {
+- long int i = longval ();
+- if (i != ((long int) (sizeof (short))))
+- return 1;
+- fprintf (f, "%ld", i);
+- }
+- else
+- {
+- unsigned long int i = ulongval ();
+- if (i != ((long int) (sizeof (short))))
+- return 1;
+- fprintf (f, "%lu", i);
+- }
+- /* Do not output a trailing newline, as this causes \r\n confusion
+- on some platforms. */
+- return ferror (f) || fclose (f) != 0;
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+- { (case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_try") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_sizeof_short=`cat conftest.val`
+-else
+- $as_echo "$as_me: program exited with status $ac_status" >&5
+-$as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-( exit $ac_status )
+-if test "$ac_cv_type_short" = yes; then
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (short)
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot compute sizeof (short)
+-See \`config.log' for more details." >&2;}
+- { (exit 77); exit 77; }; }; }
+- else
+- ac_cv_sizeof_short=0
+- fi
+-fi
+-rm -rf conftest.dSYM
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+-fi
+-rm -f conftest.val
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
+-$as_echo "$ac_cv_sizeof_short" >&6; }
+-
+-
+-
+-cat >>confdefs.h <<_ACEOF
+-#define SIZEOF_SHORT $ac_cv_sizeof_short
+-_ACEOF
+-
+-
+- # The cast to long int works around a bug in the HP C Compiler
+-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+-# This bug is HP SR number 8606223364.
+-{ $as_echo "$as_me:$LINENO: checking size of int" >&5
+-$as_echo_n "checking size of int... " >&6; }
+-if test "${ac_cv_sizeof_int+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- if test "$cross_compiling" = yes; then
+- # Depending upon the size, compute the lo and hi bounds.
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (int))) >= 0)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_lo=0 ac_mid=0
+- while :; do
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (int))) <= $ac_mid)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=$ac_mid; break
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_lo=`expr $ac_mid + 1`
+- if test $ac_lo -le $ac_mid; then
+- ac_lo= ac_hi=
+- break
+- fi
+- ac_mid=`expr 2 '*' $ac_mid + 1`
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+- done
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (int))) < 0)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=-1 ac_mid=-1
+- while :; do
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (int))) >= $ac_mid)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_lo=$ac_mid; break
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_hi=`expr '(' $ac_mid ')' - 1`
+- if test $ac_mid -le $ac_hi; then
+- ac_lo= ac_hi=
+- break
+- fi
+- ac_mid=`expr 2 '*' $ac_mid`
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ # The diagnosis changed in icc 8.0:
++ # icc: Command line remark: option '-MP' not supported
++ if (grep 'ignoring option' conftest.err ||
++ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
++ am_cv_CCAS_dependencies_compiler_type=$depmode
++ break
++ fi
++ fi
+ done
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+
+- ac_lo= ac_hi=
++ cd ..
++ rm -rf conftest.dir
++else
++ am_cv_CCAS_dependencies_compiler_type=none
+ fi
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5
++$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; }
++CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-# Binary search between lo and hi bounds.
+-while test "x$ac_lo" != "x$ac_hi"; do
+- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (int))) <= $ac_mid)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=$ac_mid
++ if
++ test "x$enable_dependency_tracking" != xno \
++ && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then
++ am__fastdepCCAS_TRUE=
++ am__fastdepCCAS_FALSE='#'
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_lo=`expr '(' $ac_mid ')' + 1`
++ am__fastdepCCAS_TRUE='#'
++ am__fastdepCCAS_FALSE=
+ fi
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-done
+-case $ac_lo in
+-?*) ac_cv_sizeof_int=$ac_lo;;
+-'') if test "$ac_cv_type_int" = yes; then
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (int)
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot compute sizeof (int)
+-See \`config.log' for more details." >&2;}
+- { (exit 77); exit 77; }; }; }
+- else
+- ac_cv_sizeof_int=0
+- fi ;;
+-esac
+-else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-static long int longval () { return (long int) (sizeof (int)); }
+-static unsigned long int ulongval () { return (long int) (sizeof (int)); }
+-#include <stdio.h>
+-#include <stdlib.h>
+-int
+-main ()
+-{
+
+- FILE *f = fopen ("conftest.val", "w");
+- if (! f)
+- return 1;
+- if (((long int) (sizeof (int))) < 0)
+- {
+- long int i = longval ();
+- if (i != ((long int) (sizeof (int))))
+- return 1;
+- fprintf (f, "%ld", i);
+- }
+- else
+- {
+- unsigned long int i = ulongval ();
+- if (i != ((long int) (sizeof (int))))
+- return 1;
+- fprintf (f, "%lu", i);
+- }
+- /* Do not output a trailing newline, as this causes \r\n confusion
+- on some platforms. */
+- return ferror (f) || fclose (f) != 0;
+
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+- { (case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_try") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_sizeof_int=`cat conftest.val`
+-else
+- $as_echo "$as_me: program exited with status $ac_status" >&5
+-$as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+
+-( exit $ac_status )
+-if test "$ac_cv_type_int" = yes; then
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (int)
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot compute sizeof (int)
+-See \`config.log' for more details." >&2;}
+- { (exit 77); exit 77; }; }; }
+- else
+- ac_cv_sizeof_int=0
+- fi
+-fi
+-rm -rf conftest.dSYM
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+-fi
+-rm -f conftest.val
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
+-$as_echo "$ac_cv_sizeof_int" >&6; }
+
++ACLOCAL_AMFLAGS="-I m4 $ACLOCAL_AMFLAGS"
+
+
+-cat >>confdefs.h <<_ACEOF
+-#define SIZEOF_INT $ac_cv_sizeof_int
+-_ACEOF
++##################################################
++# Check for gtk-doc.
++##################################################
++
++if test "x$cross_compiling" = "xyes" ; then
++ enable_gtk_doc=no
++fi
+
+
+- # The cast to long int works around a bug in the HP C Compiler
+-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+-# This bug is HP SR number 8606223364.
+-{ $as_echo "$as_me:$LINENO: checking size of long" >&5
+-$as_echo_n "checking size of long... " >&6; }
+-if test "${ac_cv_sizeof_long+set}" = set; then
++if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
++ if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
++set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+- if test "$cross_compiling" = yes; then
+- # Depending upon the size, compute the lo and hi bounds.
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (long))) >= 0)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_lo=0 ac_mid=0
+- while :; do
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (long))) <= $ac_mid)];
+-test_array [0] = 0
++ case $PKG_CONFIG in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
+
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
++ ;;
+ esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=$ac_mid; break
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_lo=`expr $ac_mid + 1`
+- if test $ac_lo -le $ac_mid; then
+- ac_lo= ac_hi=
+- break
+- fi
+- ac_mid=`expr 2 '*' $ac_mid + 1`
+ fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+- done
++PKG_CONFIG=$ac_cv_path_PKG_CONFIG
++if test -n "$PKG_CONFIG"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
++$as_echo "$PKG_CONFIG" >&6; }
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
+
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (long))) < 0)];
+-test_array [0] = 0
+
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=-1 ac_mid=-1
+- while :; do
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (long))) >= $ac_mid)];
+-test_array [0] = 0
++fi
++if test -z "$ac_cv_path_PKG_CONFIG"; then
++ ac_pt_PKG_CONFIG=$PKG_CONFIG
++ # Extract the first word of "pkg-config", so it can be a program name with args.
++set dummy pkg-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_PKG_CONFIG in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
+
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
++ ;;
+ esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_lo=$ac_mid; break
++fi
++ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
++if test -n "$ac_pt_PKG_CONFIG"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
++$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_hi=`expr '(' $ac_mid ')' - 1`
+- if test $ac_mid -le $ac_hi; then
+- ac_lo= ac_hi=
+- break
+- fi
+- ac_mid=`expr 2 '*' $ac_mid`
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
+ fi
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+- done
++ if test "x$ac_pt_PKG_CONFIG" = x; then
++ PKG_CONFIG=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ PKG_CONFIG=$ac_pt_PKG_CONFIG
++ fi
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
++fi
+
+- ac_lo= ac_hi=
+ fi
++if test -n "$PKG_CONFIG"; then
++ _pkg_min_version=0.9.0
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
++$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
++ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++ else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++ PKG_CONFIG=""
++ fi
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-# Binary search between lo and hi bounds.
+-while test "x$ac_lo" != "x$ac_hi"; do
+- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (long))) <= $ac_mid)];
+-test_array [0] = 0
+
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=$ac_mid
++# Check whether --with-html-dir was given.
++if test "${with_html_dir+set}" = set; then :
++ withval=$with_html_dir;
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_lo=`expr '(' $ac_mid ')' + 1`
++ with_html_dir='${datadir}/gtk-doc/html'
+ fi
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-done
+-case $ac_lo in
+-?*) ac_cv_sizeof_long=$ac_lo;;
+-'') if test "$ac_cv_type_long" = yes; then
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long)
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot compute sizeof (long)
+-See \`config.log' for more details." >&2;}
+- { (exit 77); exit 77; }; }; }
+- else
+- ac_cv_sizeof_long=0
+- fi ;;
+-esac
+-else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-static long int longval () { return (long int) (sizeof (long)); }
+-static unsigned long int ulongval () { return (long int) (sizeof (long)); }
+-#include <stdio.h>
+-#include <stdlib.h>
+-int
+-main ()
+-{
++ HTML_DIR="$with_html_dir"
+
+- FILE *f = fopen ("conftest.val", "w");
+- if (! f)
+- return 1;
+- if (((long int) (sizeof (long))) < 0)
+- {
+- long int i = longval ();
+- if (i != ((long int) (sizeof (long))))
+- return 1;
+- fprintf (f, "%ld", i);
+- }
+- else
+- {
+- unsigned long int i = ulongval ();
+- if (i != ((long int) (sizeof (long))))
+- return 1;
+- fprintf (f, "%lu", i);
+- }
+- /* Do not output a trailing newline, as this causes \r\n confusion
+- on some platforms. */
+- return ferror (f) || fclose (f) != 0;
+
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+- { (case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_try") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_sizeof_long=`cat conftest.val`
++ # Check whether --enable-gtk-doc was given.
++if test "${enable_gtk_doc+set}" = set; then :
++ enableval=$enable_gtk_doc;
+ else
+- $as_echo "$as_me: program exited with status $ac_status" >&5
+-$as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-( exit $ac_status )
+-if test "$ac_cv_type_long" = yes; then
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long)
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot compute sizeof (long)
+-See \`config.log' for more details." >&2;}
+- { (exit 77); exit 77; }; }; }
+- else
+- ac_cv_sizeof_long=0
+- fi
+-fi
+-rm -rf conftest.dSYM
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+-fi
+-rm -f conftest.val
++ enable_gtk_doc=no
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
+-$as_echo "$ac_cv_sizeof_long" >&6; }
+-
+
+
+-cat >>confdefs.h <<_ACEOF
+-#define SIZEOF_LONG $ac_cv_sizeof_long
+-_ACEOF
++ if test x$enable_gtk_doc = xyes; then
++ if test -n "$PKG_CONFIG" && \
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.0\""; } >&5
++ ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.0") 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then
++ :
++else
++ as_fn_error "You need to have gtk-doc >= 1.0 installed to build gtk-doc" "$LINENO" 5
++fi
++ fi
+
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5
++$as_echo_n "checking whether to build gtk-doc documentation... " >&6; }
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5
++$as_echo "$enable_gtk_doc" >&6; }
+
+- # The cast to long int works around a bug in the HP C Compiler
+-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+-# This bug is HP SR number 8606223364.
+-{ $as_echo "$as_me:$LINENO: checking size of void*" >&5
+-$as_echo_n "checking size of void*... " >&6; }
+-if test "${ac_cv_sizeof_voidp+set}" = set; then
++ for ac_prog in gtkdoc-check
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_GTKDOC_CHECK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+- if test "$cross_compiling" = yes; then
+- # Depending upon the size, compute the lo and hi bounds.
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (void*))) >= 0)];
+-test_array [0] = 0
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_lo=0 ac_mid=0
+- while :; do
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (void*))) <= $ac_mid)];
+-test_array [0] = 0
++ case $GTKDOC_CHECK in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
+
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
++ ;;
+ esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=$ac_mid; break
++fi
++GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK
++if test -n "$GTKDOC_CHECK"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5
++$as_echo "$GTKDOC_CHECK" >&6; }
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
+
+- ac_lo=`expr $ac_mid + 1`
+- if test $ac_lo -le $ac_mid; then
+- ac_lo= ac_hi=
+- break
+- fi
+- ac_mid=`expr 2 '*' $ac_mid + 1`
++
++ test -n "$GTKDOC_CHECK" && break
++done
++
++
++ if test x$enable_gtk_doc = xyes; then
++ ENABLE_GTK_DOC_TRUE=
++ ENABLE_GTK_DOC_FALSE='#'
++else
++ ENABLE_GTK_DOC_TRUE='#'
++ ENABLE_GTK_DOC_FALSE=
+ fi
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+- done
++ if test -n "$LIBTOOL"; then
++ GTK_DOC_USE_LIBTOOL_TRUE=
++ GTK_DOC_USE_LIBTOOL_FALSE='#'
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++ GTK_DOC_USE_LIBTOOL_TRUE='#'
++ GTK_DOC_USE_LIBTOOL_FALSE=
++fi
+
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (void*))) < 0)];
+-test_array [0] = 0
+
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=-1 ac_mid=-1
+- while :; do
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (void*))) >= $ac_mid)];
+-test_array [0] = 0
+
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_lo=$ac_mid; break
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+
+- ac_hi=`expr '(' $ac_mid ')' - 1`
+- if test $ac_mid -le $ac_hi; then
+- ac_lo= ac_hi=
+- break
+- fi
+- ac_mid=`expr 2 '*' $ac_mid`
+-fi
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+- done
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++ case "x${host_cpu}" in
++ xi?86 | k?)
++ HAVE_I386=yes
+
+- ac_lo= ac_hi=
+-fi
++$as_echo "#define HAVE_I386 1" >>confdefs.h
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
++ ;;
++ xx86_64|xamd64)
++ HAVE_AMD64=yes
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-# Binary search between lo and hi bounds.
+-while test "x$ac_lo" != "x$ac_hi"; do
+- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-int
+-main ()
+-{
+-static int test_array [1 - 2 * !(((long int) (sizeof (void*))) <= $ac_mid)];
+-test_array [0] = 0
++$as_echo "#define HAVE_AMD64 1" >>confdefs.h
+
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_hi=$ac_mid
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++ ;;
++ xpowerpc|xppc|xpowerpc64|xppc64)
++ HAVE_POWERPC=yes
+
+- ac_lo=`expr '(' $ac_mid ')' + 1`
+-fi
++$as_echo "#define HAVE_POWERPC 1" >>confdefs.h
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-done
+-case $ac_lo in
+-?*) ac_cv_sizeof_voidp=$ac_lo;;
+-'') if test "$ac_cv_type_voidp" = yes; then
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (void*)
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot compute sizeof (void*)
+-See \`config.log' for more details." >&2;}
+- { (exit 77); exit 77; }; }; }
+- else
+- ac_cv_sizeof_voidp=0
+- fi ;;
+-esac
+-else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-static long int longval () { return (long int) (sizeof (void*)); }
+-static unsigned long int ulongval () { return (long int) (sizeof (void*)); }
+-#include <stdio.h>
+-#include <stdlib.h>
+-int
+-main ()
+-{
++ ;;
++ xarm)
++ HAVE_ARM=yes
+
+- FILE *f = fopen ("conftest.val", "w");
+- if (! f)
+- return 1;
+- if (((long int) (sizeof (void*))) < 0)
+- {
+- long int i = longval ();
+- if (i != ((long int) (sizeof (void*))))
+- return 1;
+- fprintf (f, "%ld", i);
+- }
+- else
+- {
+- unsigned long int i = ulongval ();
+- if (i != ((long int) (sizeof (void*))))
+- return 1;
+- fprintf (f, "%lu", i);
+- }
+- /* Do not output a trailing newline, as this causes \r\n confusion
+- on some platforms. */
+- return ferror (f) || fclose (f) != 0;
++$as_echo "#define HAVE_ARM 1" >>confdefs.h
+
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+- { (case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_try") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_sizeof_voidp=`cat conftest.val`
++ ;;
++ esac
++
++ if test "x$HAVE_I386" = "xyes"; then
++ HAVE_I386_TRUE=
++ HAVE_I386_FALSE='#'
+ else
+- $as_echo "$as_me: program exited with status $ac_status" >&5
+-$as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++ HAVE_I386_TRUE='#'
++ HAVE_I386_FALSE=
++fi
+
+-( exit $ac_status )
+-if test "$ac_cv_type_voidp" = yes; then
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (void*)
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot compute sizeof (void*)
+-See \`config.log' for more details." >&2;}
+- { (exit 77); exit 77; }; }; }
+- else
+- ac_cv_sizeof_voidp=0
+- fi
++ if test "x$HAVE_AMD64" = "xyes"; then
++ HAVE_AMD64_TRUE=
++ HAVE_AMD64_FALSE='#'
++else
++ HAVE_AMD64_TRUE='#'
++ HAVE_AMD64_FALSE=
+ fi
+-rm -rf conftest.dSYM
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++
++ if test "x$HAVE_POWERPC" = "xyes"; then
++ HAVE_POWERPC_TRUE=
++ HAVE_POWERPC_FALSE='#'
++else
++ HAVE_POWERPC_TRUE='#'
++ HAVE_POWERPC_FALSE=
+ fi
+-rm -f conftest.val
++
++ if test "x$HAVE_ARM" = "xyes"; then
++ HAVE_ARM_TRUE=
++ HAVE_ARM_FALSE='#'
++else
++ HAVE_ARM_TRUE='#'
++ HAVE_ARM_FALSE=
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_voidp" >&5
+-$as_echo "$ac_cv_sizeof_voidp" >&6; }
+
+
++ case "${host_os}" in
++ mingw*)
++ HAVE_OS_WIN32=yes
+
+-cat >>confdefs.h <<_ACEOF
+-#define SIZEOF_VOIDP $ac_cv_sizeof_voidp
+-_ACEOF
++$as_echo "#define HAVE_OS_WIN32 1" >>confdefs.h
+
++ ;;
++ linux*)
++ HAVE_OS_LINUX=yes
+
+- ac_cv_char_data_model=""
+- ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char"
+- ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short"
+- ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int"
+- ac_cv_long_data_model=""
+- ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int"
+- ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long"
+- ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp"
+- { $as_echo "$as_me:$LINENO: checking data model" >&5
+-$as_echo_n "checking data model... " >&6; }
+- case "$ac_cv_char_data_model/$ac_cv_long_data_model" in
+- 122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;;
+- 122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;;
+- 122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;;
+- 124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;;
+- 124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;;
+- 124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;;
+- 124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;;
+- 128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;;
+- 128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;;
+- 222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;;
+- 333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;;
+- 444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;;
+- 666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;;
+- 888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;;
+- 222/*|333/*|444/*|666/*|888/*) :
+- ac_cv_data_model="iDSP" ; n="unusual dsptype" ;;
+- *) ac_cv_data_model="none" ; n="very unusual model" ;;
+- esac
+- { $as_echo "$as_me:$LINENO: result: $ac_cv_data_model ($ac_cv_long_data_model, $n)" >&5
+-$as_echo "$ac_cv_data_model ($ac_cv_long_data_model, $n)" >&6; }
++$as_echo "#define HAVE_OS_LINUX 1" >>confdefs.h
++
++ ;;
++ esac
+
++ if test "$HAVE_OS_WIN32" = "yes"; then
++ HAVE_OS_WIN32_TRUE=
++ HAVE_OS_WIN32_FALSE='#'
++else
++ HAVE_OS_WIN32_TRUE='#'
++ HAVE_OS_WIN32_FALSE=
+ fi
+
+-if test "_$ac_cv_header_stdint_x" != "_" ; then
+- ac_cv_header_stdint="$ac_cv_header_stdint_x"
+-elif test "_$ac_cv_header_stdint_o" != "_" ; then
+- ac_cv_header_stdint="$ac_cv_header_stdint_o"
+-elif test "_$ac_cv_header_stdint_u" != "_" ; then
+- ac_cv_header_stdint="$ac_cv_header_stdint_u"
++ if test "$HAVE_OS_LINUX" = "yes"; then
++ HAVE_OS_LINUX_TRUE=
++ HAVE_OS_LINUX_FALSE='#'
+ else
+- ac_cv_header_stdint="stddef.h"
++ HAVE_OS_LINUX_TRUE='#'
++ HAVE_OS_LINUX_FALSE=
+ fi
+
+-{ $as_echo "$as_me:$LINENO: checking for extra inttypes in chosen header" >&5
+-$as_echo_n "checking for extra inttypes in chosen header... " >&6; }
+-{ $as_echo "$as_me:$LINENO: result: ($ac_cv_header_stdint)" >&5
+-$as_echo "($ac_cv_header_stdint)" >&6; }
+-unset ac_cv_type_int_least32_t
+-unset ac_cv_type_int_fast32_t
+-{ $as_echo "$as_me:$LINENO: checking for int_least32_t" >&5
+-$as_echo_n "checking for int_least32_t... " >&6; }
+-if test "${ac_cv_type_int_least32_t+set}" = set; then
++
++
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
++$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
++if test "${ac_cv_c_bigendian+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+- ac_cv_type_int_least32_t=no
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
++ ac_cv_c_bigendian=unknown
++ # See if we're dealing with a universal compiler.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#ifndef __APPLE_CC__
++ not a universal capable compiler
++ #endif
++ typedef int dummy;
++
+ _ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++
++ # Check for potential -arch flags. It is not universal unless
++ # there are at least two -arch flags with different values.
++ ac_arch=
++ ac_prev=
++ for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
++ if test -n "$ac_prev"; then
++ case $ac_word in
++ i?86 | x86_64 | ppc | ppc64)
++ if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
++ ac_arch=$ac_word
++ else
++ ac_cv_c_bigendian=universal
++ break
++ fi
++ ;;
++ esac
++ ac_prev=
++ elif test "x$ac_word" = "x-arch"; then
++ ac_prev=arch
++ fi
++ done
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ if test $ac_cv_c_bigendian = unknown; then
++ # See if sys/param.h defines the BYTE_ORDER macro.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-#include <$ac_cv_header_stdint>
++#include <sys/types.h>
++ #include <sys/param.h>
+
+ int
+ main ()
+ {
+-if (sizeof (int_least32_t))
+- return 0;
++#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
++ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
++ && LITTLE_ENDIAN)
++ bogus endian macros
++ #endif
++
+ ;
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ # It does; now see whether it defined to BIG_ENDIAN or not.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-#include <$ac_cv_header_stdint>
++#include <sys/types.h>
++ #include <sys/param.h>
+
+ int
+ main ()
+ {
+-if (sizeof ((int_least32_t)))
+- return 0;
++#if BYTE_ORDER != BIG_ENDIAN
++ not big endian
++ #endif
++
+ ;
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- :
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_c_bigendian=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_type_int_least32_t=yes
++ ac_cv_c_bigendian=no
+ fi
+-
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+ fi
+-
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_int_least32_t" >&5
+-$as_echo "$ac_cv_type_int_least32_t" >&6; }
+-
+-{ $as_echo "$as_me:$LINENO: checking for int_fast32_t" >&5
+-$as_echo_n "checking for int_fast32_t... " >&6; }
+-if test "${ac_cv_type_int_fast32_t+set}" = set; then
+- $as_echo_n "(cached) " >&6
+-else
+- ac_cv_type_int_fast32_t=no
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ fi
++ if test $ac_cv_c_bigendian = unknown; then
++ # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-#include<$ac_cv_header_stdint>
++#include <limits.h>
+
+ int
+ main ()
+ {
+-if (sizeof (int_fast32_t))
+- return 0;
++#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
++ bogus endian macros
++ #endif
++
+ ;
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ # It does; now see whether it defined to _BIG_ENDIAN or not.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-#include<$ac_cv_header_stdint>
++#include <limits.h>
+
+ int
+ main ()
+ {
+-if (sizeof ((int_fast32_t)))
+- return 0;
++#ifndef _BIG_ENDIAN
++ not big endian
++ #endif
++
+ ;
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- :
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_c_bigendian=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_type_int_fast32_t=yes
++ ac_cv_c_bigendian=no
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ fi
++ if test $ac_cv_c_bigendian = unknown; then
++ # Compile a test program.
++ if test "$cross_compiling" = yes; then :
++ # Try to guess by grepping values from an object file.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++short int ascii_mm[] =
++ { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
++ short int ascii_ii[] =
++ { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
++ int use_ascii (int i) {
++ return ascii_mm[i] + ascii_ii[i];
++ }
++ short int ebcdic_ii[] =
++ { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
++ short int ebcdic_mm[] =
++ { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
++ int use_ebcdic (int i) {
++ return ebcdic_mm[i] + ebcdic_ii[i];
++ }
++ extern int foo;
+
++int
++main ()
++{
++return use_ascii (foo) == use_ebcdic (foo);
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
++ ac_cv_c_bigendian=yes
++ fi
++ if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
++ if test "$ac_cv_c_bigendian" = unknown; then
++ ac_cv_c_bigendian=no
++ else
++ # finding both strings is unlikely to happen, but who knows?
++ ac_cv_c_bigendian=unknown
++ fi
++ fi
++fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$ac_includes_default
++int
++main ()
++{
+
++ /* Are we little or big endian? From Harbison&Steele. */
++ union
++ {
++ long int l;
++ char c[sizeof (long int)];
++ } u;
++ u.l = 1;
++ return u.c[sizeof (long int) - 1] == 1;
+
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++ ac_cv_c_bigendian=no
++else
++ ac_cv_c_bigendian=yes
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++ conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ fi
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_int_fast32_t" >&5
+-$as_echo "$ac_cv_type_int_fast32_t" >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
++$as_echo "$ac_cv_c_bigendian" >&6; }
++ case $ac_cv_c_bigendian in #(
++ yes)
++ $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
++;; #(
++ no)
++ ;; #(
++ universal)
++
++$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
++
++ ;; #(
++ *)
++ as_fn_error "unknown endianness
++ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
++ esac
+
+-{ $as_echo "$as_me:$LINENO: checking for intmax_t" >&5
+-$as_echo_n "checking for intmax_t... " >&6; }
+-if test "${ac_cv_type_intmax_t+set}" = set; then
++
++# ------ AX CREATE STDINT H -------------------------------------
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint types" >&5
++$as_echo_n "checking for stdint types... " >&6; }
++ac_stdint_h=`echo orc/orc-stdint.h`
++# try to shortcircuit - if the default include path of the compiler
++# can find a "stdint.h" header then we assume that all compilers can.
++if test "${ac_cv_header_stdint_t+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+- ac_cv_type_intmax_t=no
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <$ac_cv_header_stdint>
+
++old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS=""
++old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS=""
++old_CFLAGS="$CFLAGS" ; CFLAGS=""
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <stdint.h>
+ int
+ main ()
+ {
+-if (sizeof (intmax_t))
+- return 0;
++int_least32_t v = 0;
+ ;
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_stdint_result="(assuming C99 compatible system)"
++ ac_cv_header_stdint_t="stdint.h";
++else
++ ac_cv_header_stdint_t=""
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then
++CFLAGS="-std=c99"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-#include <$ac_cv_header_stdint>
+-
++#include <stdint.h>
+ int
+ main ()
+ {
+-if (sizeof ((intmax_t)))
+- return 0;
++int_least32_t v = 0;
+ ;
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- :
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_type_intmax_t=yes
++if ac_fn_c_try_compile "$LINENO"; then :
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: your GCC compiler has a defunct stdint.h for its default-mode" >&5
++$as_echo "$as_me: WARNING: your GCC compiler has a defunct stdint.h for its default-mode" >&2;}
+ fi
+-
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+ fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++CXXFLAGS="$old_CXXFLAGS"
++CPPFLAGS="$old_CPPFLAGS"
++CFLAGS="$old_CFLAGS"
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_intmax_t" >&5
+-$as_echo "$ac_cv_type_intmax_t" >&6; }
+
+
+-fi # shortcircut to system "stdint.h"
+-# ------------------ PREPARE VARIABLES ------------------------------
+-if test "$GCC" = "yes" ; then
+-ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1`
++v="... $ac_cv_header_stdint_h"
++if test "$ac_stdint_h" = "stdint.h" ; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: (are you sure you want them in ./stdint.h?)" >&5
++$as_echo "(are you sure you want them in ./stdint.h?)" >&6; }
++elif test "$ac_stdint_h" = "inttypes.h" ; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: (are you sure you want them in ./inttypes.h?)" >&5
++$as_echo "(are you sure you want them in ./inttypes.h?)" >&6; }
++elif test "_$ac_cv_header_stdint_t" = "_" ; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: (putting them into $ac_stdint_h)$v" >&5
++$as_echo "(putting them into $ac_stdint_h)$v" >&6; }
+ else
+-ac_cv_stdint_message="using $CC"
++ ac_cv_header_stdint="$ac_cv_header_stdint_t"
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint (shortcircuit)" >&5
++$as_echo "$ac_cv_header_stdint (shortcircuit)" >&6; }
+ fi
+
+-{ $as_echo "$as_me:$LINENO: result: make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&5
+-$as_echo "make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&6; }
+-
+-# ----------------- DONE inttypes.h checks START header -------------
+-ac_config_commands="$ac_config_commands $ac_stdint_h"
+-
++if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit..
+
+
++inttype_headers=`echo | sed -e 's/,/ /g'`
+
++ac_cv_stdint_result="(no helpful system typedefs seen)"
+
+-for ac_header in stdlib.h unistd.h
+-do
+-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+- { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+-$as_echo_n "checking for $ac_header... " >&6; }
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uintptr_t" >&5
++$as_echo_n "checking for stdint uintptr_t... " >&6; }
++if test "${ac_cv_header_stdint_x+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+-fi
+-ac_res=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-else
+- # Is the header compilable?
+-{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+-$as_echo_n "checking $ac_header usability... " >&6; }
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-#include <$ac_header>
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_header_compiler=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_header_compiler=no
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+-$as_echo "$ac_header_compiler" >&6; }
+
+-# Is the header present?
+-{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+-$as_echo_n "checking $ac_header presence... " >&6; }
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <$ac_header>
+-_ACEOF
+-if { (ac_try="$ac_cpp conftest.$ac_ext"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null && {
+- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- }; then
+- ac_header_preproc=yes
++ ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5
++$as_echo "(..)" >&6; }
++ for i in stdint.h inttypes.h sys/inttypes.h $inttype_headers
++ do
++ unset ac_cv_type_uintptr_t
++ unset ac_cv_type_uint64_t
++ ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include <$i>
++"
++if test "x$ac_cv_type_uintptr_t" = x""yes; then :
++ ac_cv_header_stdint_x=$i
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_header_preproc=no
++ continue
+ fi
+
+-rm -f conftest.err conftest.$ac_ext
+-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+-$as_echo "$ac_header_preproc" >&6; }
+-
+-# So? What about this header?
+-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+- yes:no: )
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+-$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+-$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+- ac_header_preproc=yes
+- ;;
+- no:yes:* )
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+-$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+-$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+-$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+-$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+-$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+-$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+-
+- ;;
+-esac
+-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+-$as_echo_n "checking for $ac_header... " >&6; }
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+- $as_echo_n "(cached) " >&6
++ ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i>
++"
++if test "x$ac_cv_type_uint64_t" = x""yes; then :
++ and64="/uint64_t"
+ else
+- eval "$as_ac_Header=\$ac_header_preproc"
++ and64=""
+ fi
+-ac_res=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+
+-fi
+-as_val=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- if test "x$as_val" = x""yes; then
+- cat >>confdefs.h <<_ACEOF
+-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+-_ACEOF
++ ac_cv_stdint_result="(seen uintptr_t$and64 in $i)"
++ break
++ done
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uintptr_t" >&5
++$as_echo_n "checking for stdint uintptr_t... " >&6; }
+
+ fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_x" >&5
++$as_echo "$ac_cv_header_stdint_x" >&6; }
+
+-done
+
++if test "_$ac_cv_header_stdint_x" = "_" ; then
+
+-for ac_func in getpagesize
+-do
+-as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+-{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+-$as_echo_n "checking for $ac_func... " >&6; }
+-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uint32_t" >&5
++$as_echo_n "checking for stdint uint32_t... " >&6; }
++if test "${ac_cv_header_stdint_o+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+- For example, HP-UX 11i <limits.h> declares gettimeofday. */
+-#define $ac_func innocuous_$ac_func
+-
+-/* System header to define __stub macros and hopefully few prototypes,
+- which can conflict with char $ac_func (); below.
+- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+- <limits.h> exists even on freestanding compilers. */
+-
+-#ifdef __STDC__
+-# include <limits.h>
+-#else
+-# include <assert.h>
+-#endif
+-
+-#undef $ac_func
+-
+-/* Override any GCC internal prototype to avoid an error.
+- Use char because int might match the return type of a GCC
+- builtin and then its argument prototype would still apply. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char $ac_func ();
+-/* The GNU C library defines this for functions which it implements
+- to always fail with ENOSYS. Some functions are actually named
+- something starting with __ and the normal name is an alias. */
+-#if defined __stub_$ac_func || defined __stub___$ac_func
+-choke me
+-#endif
+
+-int
+-main ()
+-{
+-return $ac_func ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
+- eval "$as_ac_var=yes"
++ ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5
++$as_echo "(..)" >&6; }
++ for i in inttypes.h sys/inttypes.h stdint.h $inttype_headers
++ do
++ unset ac_cv_type_uint32_t
++ unset ac_cv_type_uint64_t
++ ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "#include <$i>
++"
++if test "x$ac_cv_type_uint32_t" = x""yes; then :
++ ac_cv_header_stdint_o=$i
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++ continue
++fi
+
+- eval "$as_ac_var=no"
++ ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i>
++"
++if test "x$ac_cv_type_uint64_t" = x""yes; then :
++ and64="/uint64_t"
++else
++ and64=""
+ fi
+
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++ ac_cv_stdint_result="(seen uint32_t$and64 in $i)"
++ break
++ break;
++ done
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uint32_t" >&5
++$as_echo_n "checking for stdint uint32_t... " >&6; }
++
+ fi
+-ac_res=`eval 'as_val=${'$as_ac_var'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-as_val=`eval 'as_val=${'$as_ac_var'}
+- $as_echo "$as_val"'`
+- if test "x$as_val" = x""yes; then
+- cat >>confdefs.h <<_ACEOF
+-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+-_ACEOF
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_o" >&5
++$as_echo "$ac_cv_header_stdint_o" >&6; }
+
+ fi
+-done
+
+-{ $as_echo "$as_me:$LINENO: checking for working mmap" >&5
+-$as_echo_n "checking for working mmap... " >&6; }
+-if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
++if test "_$ac_cv_header_stdint_x" = "_" ; then
++if test "_$ac_cv_header_stdint_o" = "_" ; then
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint u_int32_t" >&5
++$as_echo_n "checking for stdint u_int32_t... " >&6; }
++if test "${ac_cv_header_stdint_u+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+- if test "$cross_compiling" = yes; then
+- ac_cv_func_mmap_fixed_mapped=no
+-else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-/* malloc might have been renamed as rpl_malloc. */
+-#undef malloc
+-
+-/* Thanks to Mike Haertel and Jim Avera for this test.
+- Here is a matrix of mmap possibilities:
+- mmap private not fixed
+- mmap private fixed at somewhere currently unmapped
+- mmap private fixed at somewhere already mapped
+- mmap shared not fixed
+- mmap shared fixed at somewhere currently unmapped
+- mmap shared fixed at somewhere already mapped
+- For private mappings, we should verify that changes cannot be read()
+- back from the file, nor mmap's back from the file at a different
+- address. (There have been systems where private was not correctly
+- implemented like the infamous i386 svr4.0, and systems where the
+- VM page cache was not coherent with the file system buffer cache
+- like early versions of FreeBSD and possibly contemporary NetBSD.)
+- For shared mappings, we should conversely verify that changes get
+- propagated back to all the places they're supposed to be.
+-
+- Grep wants private fixed already mapped.
+- The main things grep needs to know about mmap are:
+- * does it exist and is it safe to write into the mmap'd area
+- * how to use it (BSD variants) */
+-
+-#include <fcntl.h>
+-#include <sys/mman.h>
+
+-#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
+-char *malloc ();
+-#endif
++ ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5
++$as_echo "(..)" >&6; }
++ for i in sys/types.h inttypes.h sys/inttypes.h $inttype_headers ; do
++ unset ac_cv_type_u_int32_t
++ unset ac_cv_type_u_int64_t
++ ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" "#include <$i>
++"
++if test "x$ac_cv_type_u_int32_t" = x""yes; then :
++ ac_cv_header_stdint_u=$i
++else
++ continue
++fi
+
+-/* This mess was copied from the GNU getpagesize.h. */
+-#ifndef HAVE_GETPAGESIZE
+-/* Assume that all systems that can run configure have sys/param.h. */
+-# ifndef HAVE_SYS_PARAM_H
+-# define HAVE_SYS_PARAM_H 1
+-# endif
++ ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "#include<$i>
++"
++if test "x$ac_cv_type_u_int64_t" = x""yes; then :
++ and64="/u_int64_t"
++else
++ and64=""
++fi
+
+-# ifdef _SC_PAGESIZE
+-# define getpagesize() sysconf(_SC_PAGESIZE)
+-# else /* no _SC_PAGESIZE */
+-# ifdef HAVE_SYS_PARAM_H
+-# include <sys/param.h>
+-# ifdef EXEC_PAGESIZE
+-# define getpagesize() EXEC_PAGESIZE
+-# else /* no EXEC_PAGESIZE */
+-# ifdef NBPG
+-# define getpagesize() NBPG * CLSIZE
+-# ifndef CLSIZE
+-# define CLSIZE 1
+-# endif /* no CLSIZE */
+-# else /* no NBPG */
+-# ifdef NBPC
+-# define getpagesize() NBPC
+-# else /* no NBPC */
+-# ifdef PAGESIZE
+-# define getpagesize() PAGESIZE
+-# endif /* PAGESIZE */
+-# endif /* no NBPC */
+-# endif /* no NBPG */
+-# endif /* no EXEC_PAGESIZE */
+-# else /* no HAVE_SYS_PARAM_H */
+-# define getpagesize() 8192 /* punt totally */
+-# endif /* no HAVE_SYS_PARAM_H */
+-# endif /* no _SC_PAGESIZE */
++ ac_cv_stdint_result="(seen u_int32_t$and64 in $i)"
++ break
++ break;
++ done
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint u_int32_t" >&5
++$as_echo_n "checking for stdint u_int32_t... " >&6; }
+
+-#endif /* no HAVE_GETPAGESIZE */
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_u" >&5
++$as_echo "$ac_cv_header_stdint_u" >&6; }
+
+-int
+-main ()
+-{
+- char *data, *data2, *data3;
+- int i, pagesize;
+- int fd;
++fi fi
+
+- pagesize = getpagesize ();
++if test "_$ac_cv_header_stdint_x" = "_" ; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint datatype model" >&5
++$as_echo_n "checking for stdint datatype model... " >&6; }
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5
++$as_echo "(..)" >&6; }
+
+- /* First, make a file with some known garbage in it. */
+- data = (char *) malloc (pagesize);
+- if (!data)
+- return 1;
+- for (i = 0; i < pagesize; ++i)
+- *(data + i) = rand ();
+- umask (0);
+- fd = creat ("conftest.mmap", 0600);
+- if (fd < 0)
+- return 1;
+- if (write (fd, data, pagesize) != pagesize)
+- return 1;
+- close (fd);
++ # The cast to long int works around a bug in the HP C Compiler
++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++# This bug is HP SR number 8606223364.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5
++$as_echo_n "checking size of char... " >&6; }
++if test "${ac_cv_sizeof_char+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then :
+
+- /* Next, try to mmap the file at a fixed address which already has
+- something else allocated at it. If we can, also make sure that
+- we see the same garbage. */
+- fd = open ("conftest.mmap", O_RDWR);
+- if (fd < 0)
+- return 1;
+- data2 = (char *) malloc (2 * pagesize);
+- if (!data2)
+- return 1;
+- data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1);
+- if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
+- MAP_PRIVATE | MAP_FIXED, fd, 0L))
+- return 1;
+- for (i = 0; i < pagesize; ++i)
+- if (*(data + i) != *(data2 + i))
+- return 1;
++else
++ if test "$ac_cv_type_char" = yes; then
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++{ as_fn_set_status 77
++as_fn_error "cannot compute sizeof (char)
++See \`config.log' for more details." "$LINENO" 5; }; }
++ else
++ ac_cv_sizeof_char=0
++ fi
++fi
+
+- /* Finally, make sure that changes to the mapped area do not
+- percolate back to the file as seen by read(). (This is a bug on
+- some variants of i386 svr4.0.) */
+- for (i = 0; i < pagesize; ++i)
+- *(data2 + i) = *(data2 + i) + 1;
+- data3 = (char *) malloc (pagesize);
+- if (!data3)
+- return 1;
+- if (read (fd, data3, pagesize) != pagesize)
+- return 1;
+- for (i = 0; i < pagesize; ++i)
+- if (*(data + i) != *(data3 + i))
+- return 1;
+- close (fd);
+- return 0;
+-}
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5
++$as_echo "$ac_cv_sizeof_char" >&6; }
++
++
++
++cat >>confdefs.h <<_ACEOF
++#define SIZEOF_CHAR $ac_cv_sizeof_char
+ _ACEOF
+-rm -f conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+- { (case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_try") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_func_mmap_fixed_mapped=yes
++
++
++ # The cast to long int works around a bug in the HP C Compiler
++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++# This bug is HP SR number 8606223364.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
++$as_echo_n "checking size of short... " >&6; }
++if test "${ac_cv_sizeof_short+set}" = set; then :
++ $as_echo_n "(cached) " >&6
+ else
+- $as_echo "$as_me: program exited with status $ac_status" >&5
+-$as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then :
+
+-( exit $ac_status )
+-ac_cv_func_mmap_fixed_mapped=no
++else
++ if test "$ac_cv_type_short" = yes; then
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++{ as_fn_set_status 77
++as_fn_error "cannot compute sizeof (short)
++See \`config.log' for more details." "$LINENO" 5; }; }
++ else
++ ac_cv_sizeof_short=0
++ fi
+ fi
+-rm -rf conftest.dSYM
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++
+ fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
++$as_echo "$ac_cv_sizeof_short" >&6; }
+
+
+-fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
+-$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; }
+-if test $ac_cv_func_mmap_fixed_mapped = yes; then
+
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_MMAP 1
++cat >>confdefs.h <<_ACEOF
++#define SIZEOF_SHORT $ac_cv_sizeof_short
+ _ACEOF
+
++
++ # The cast to long int works around a bug in the HP C Compiler
++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++# This bug is HP SR number 8606223364.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
++$as_echo_n "checking size of int... " >&6; }
++if test "${ac_cv_sizeof_int+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then :
++
++else
++ if test "$ac_cv_type_int" = yes; then
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++{ as_fn_set_status 77
++as_fn_error "cannot compute sizeof (int)
++See \`config.log' for more details." "$LINENO" 5; }; }
++ else
++ ac_cv_sizeof_int=0
++ fi
++fi
++
+ fi
+-rm -f conftest.mmap
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
++$as_echo "$ac_cv_sizeof_int" >&6; }
+
+
+
+-for ac_header in inttypes.h
+-do
+-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+- { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+-$as_echo_n "checking for $ac_header... " >&6; }
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++cat >>confdefs.h <<_ACEOF
++#define SIZEOF_INT $ac_cv_sizeof_int
++_ACEOF
++
++
++ # The cast to long int works around a bug in the HP C Compiler
++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++# This bug is HP SR number 8606223364.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
++$as_echo_n "checking size of long... " >&6; }
++if test "${ac_cv_sizeof_long+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+-fi
+-ac_res=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+ else
+- # Is the header compilable?
+-{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+-$as_echo_n "checking $ac_header usability... " >&6; }
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-#include <$ac_header>
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_header_compiler=yes
++ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
++
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++ if test "$ac_cv_type_long" = yes; then
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++{ as_fn_set_status 77
++as_fn_error "cannot compute sizeof (long)
++See \`config.log' for more details." "$LINENO" 5; }; }
++ else
++ ac_cv_sizeof_long=0
++ fi
++fi
+
+- ac_header_compiler=no
+ fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
++$as_echo "$ac_cv_sizeof_long" >&6; }
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+-$as_echo "$ac_header_compiler" >&6; }
+
+-# Is the header present?
+-{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+-$as_echo_n "checking $ac_header presence... " >&6; }
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <$ac_header>
++
++cat >>confdefs.h <<_ACEOF
++#define SIZEOF_LONG $ac_cv_sizeof_long
+ _ACEOF
+-if { (ac_try="$ac_cpp conftest.$ac_ext"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null && {
+- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- }; then
+- ac_header_preproc=yes
++
++
++ # The cast to long int works around a bug in the HP C Compiler
++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++# This bug is HP SR number 8606223364.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5
++$as_echo_n "checking size of void*... " >&6; }
++if test "${ac_cv_sizeof_voidp+set}" = set; then :
++ $as_echo_n "(cached) " >&6
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then :
+
+- ac_header_preproc=no
++else
++ if test "$ac_cv_type_voidp" = yes; then
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++{ as_fn_set_status 77
++as_fn_error "cannot compute sizeof (void*)
++See \`config.log' for more details." "$LINENO" 5; }; }
++ else
++ ac_cv_sizeof_voidp=0
++ fi
+ fi
+
+-rm -f conftest.err conftest.$ac_ext
+-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+-$as_echo "$ac_header_preproc" >&6; }
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5
++$as_echo "$ac_cv_sizeof_voidp" >&6; }
+
+-# So? What about this header?
+-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+- yes:no: )
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+-$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+-$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+- ac_header_preproc=yes
+- ;;
+- no:yes:* )
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+-$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+-$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+-$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+-$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+-$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+-$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+- ;;
+-esac
+-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+-$as_echo_n "checking for $ac_header... " >&6; }
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+- $as_echo_n "(cached) " >&6
++
++cat >>confdefs.h <<_ACEOF
++#define SIZEOF_VOIDP $ac_cv_sizeof_voidp
++_ACEOF
++
++
++ ac_cv_char_data_model=""
++ ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char"
++ ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short"
++ ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int"
++ ac_cv_long_data_model=""
++ ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int"
++ ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long"
++ ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp"
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking data model" >&5
++$as_echo_n "checking data model... " >&6; }
++ case "$ac_cv_char_data_model/$ac_cv_long_data_model" in
++ 122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;;
++ 122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;;
++ 122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;;
++ 124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;;
++ 124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;;
++ 124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;;
++ 124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;;
++ 128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;;
++ 128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;;
++ 222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;;
++ 333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;;
++ 444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;;
++ 666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;;
++ 888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;;
++ 222/*|333/*|444/*|666/*|888/*) :
++ ac_cv_data_model="iDSP" ; n="unusual dsptype" ;;
++ *) ac_cv_data_model="none" ; n="very unusual model" ;;
++ esac
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_data_model ($ac_cv_long_data_model, $n)" >&5
++$as_echo "$ac_cv_data_model ($ac_cv_long_data_model, $n)" >&6; }
++
++fi
++
++if test "_$ac_cv_header_stdint_x" != "_" ; then
++ ac_cv_header_stdint="$ac_cv_header_stdint_x"
++elif test "_$ac_cv_header_stdint_o" != "_" ; then
++ ac_cv_header_stdint="$ac_cv_header_stdint_o"
++elif test "_$ac_cv_header_stdint_u" != "_" ; then
++ ac_cv_header_stdint="$ac_cv_header_stdint_u"
+ else
+- eval "$as_ac_Header=\$ac_header_preproc"
++ ac_cv_header_stdint="stddef.h"
+ fi
+-ac_res=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for extra inttypes in chosen header" >&5
++$as_echo_n "checking for extra inttypes in chosen header... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ($ac_cv_header_stdint)" >&5
++$as_echo "($ac_cv_header_stdint)" >&6; }
++unset ac_cv_type_int_least32_t
++unset ac_cv_type_int_fast32_t
++ac_fn_c_check_type "$LINENO" "int_least32_t" "ac_cv_type_int_least32_t" "#include <$ac_cv_header_stdint>
++"
++if test "x$ac_cv_type_int_least32_t" = x""yes; then :
+
+ fi
+-as_val=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- if test "x$as_val" = x""yes; then
+- cat >>confdefs.h <<_ACEOF
+-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+-_ACEOF
+
+-fi
++ac_fn_c_check_type "$LINENO" "int_fast32_t" "ac_cv_type_int_fast32_t" "#include<$ac_cv_header_stdint>
++"
++if test "x$ac_cv_type_int_fast32_t" = x""yes; then :
+
+-done
++fi
+
++ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "#include <$ac_cv_header_stdint>
++"
++if test "x$ac_cv_type_intmax_t" = x""yes; then :
+
+-for ac_header in sys/time.h
+-do
+-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+- { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+-$as_echo_n "checking for $ac_header... " >&6; }
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+- $as_echo_n "(cached) " >&6
+ fi
+-ac_res=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-else
+- # Is the header compilable?
+-{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+-$as_echo_n "checking $ac_header usability... " >&6; }
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-#include <$ac_header>
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_header_compiler=yes
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+
+- ac_header_compiler=no
++
++fi # shortcircut to system "stdint.h"
++# ------------------ PREPARE VARIABLES ------------------------------
++if test "$GCC" = "yes" ; then
++ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1`
++else
++ac_cv_stdint_message="using $CC"
+ fi
+
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+-$as_echo "$ac_header_compiler" >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&5
++$as_echo "make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&6; }
+
+-# Is the header present?
+-{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+-$as_echo_n "checking $ac_header presence... " >&6; }
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <$ac_header>
+-_ACEOF
+-if { (ac_try="$ac_cpp conftest.$ac_ext"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null && {
+- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- }; then
+- ac_header_preproc=yes
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++# ----------------- DONE inttypes.h checks START header -------------
++ac_config_commands="$ac_config_commands $ac_stdint_h"
+
+- ac_header_preproc=no
+-fi
+
+-rm -f conftest.err conftest.$ac_ext
+-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+-$as_echo "$ac_header_preproc" >&6; }
+
+-# So? What about this header?
+-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+- yes:no: )
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+-$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+-$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+- ac_header_preproc=yes
+- ;;
+- no:yes:* )
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+-$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+-$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+-$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+-$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+-$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+-$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+- ;;
+-esac
+-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+-$as_echo_n "checking for $ac_header... " >&6; }
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+- $as_echo_n "(cached) " >&6
+-else
+- eval "$as_ac_Header=\$ac_header_preproc"
+-fi
+-ac_res=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+
+-fi
+-as_val=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- if test "x$as_val" = x""yes; then
++
++ for ac_header in $ac_header_list
++do :
++ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
++ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
++"
++eval as_val=\$$as_ac_Header
++ if test "x$as_val" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+ #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+ _ACEOF
+@@ -15977,450 +12212,255 @@
+ done
+
+
+-for ac_header in unistd.h
+-do
+-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+- { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+-$as_echo_n "checking for $ac_header... " >&6; }
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+- $as_echo_n "(cached) " >&6
+-fi
+-ac_res=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-else
+- # Is the header compilable?
+-{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+-$as_echo_n "checking $ac_header usability... " >&6; }
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_includes_default
+-#include <$ac_header>
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
+- ac_header_compiler=yes
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_header_compiler=no
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+-$as_echo "$ac_header_compiler" >&6; }
+
+-# Is the header present?
+-{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+-$as_echo_n "checking $ac_header presence... " >&6; }
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <$ac_header>
+-_ACEOF
+-if { (ac_try="$ac_cpp conftest.$ac_ext"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null && {
+- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- }; then
+- ac_header_preproc=yes
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+
+- ac_header_preproc=no
+-fi
+
+-rm -f conftest.err conftest.$ac_ext
+-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+-$as_echo "$ac_header_preproc" >&6; }
+
+-# So? What about this header?
+-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+- yes:no: )
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+-$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+-$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+- ac_header_preproc=yes
+- ;;
+- no:yes:* )
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+-$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+-$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+-$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+-$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+-$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+-$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+- ;;
+-esac
+-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+-$as_echo_n "checking for $ac_header... " >&6; }
+-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+- $as_echo_n "(cached) " >&6
+-else
+- eval "$as_ac_Header=\$ac_header_preproc"
+-fi
+-ac_res=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+
+-fi
+-as_val=`eval 'as_val=${'$as_ac_Header'}
+- $as_echo "$as_val"'`
+- if test "x$as_val" = x""yes; then
++for ac_func in getpagesize
++do :
++ ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
++if test "x$ac_cv_func_getpagesize" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
++#define HAVE_GETPAGESIZE 1
+ _ACEOF
+
+ fi
+-
+ done
+
+-
+-
+-for ac_func in gettimeofday
+-do
+-as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+-{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+-$as_echo_n "checking for $ac_func... " >&6; }
+-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
++$as_echo_n "checking for working mmap... " >&6; }
++if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ if test "$cross_compiling" = yes; then :
++ ac_cv_func_mmap_fixed_mapped=no
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+- For example, HP-UX 11i <limits.h> declares gettimeofday. */
+-#define $ac_func innocuous_$ac_func
++$ac_includes_default
++/* malloc might have been renamed as rpl_malloc. */
++#undef malloc
+
+-/* System header to define __stub macros and hopefully few prototypes,
+- which can conflict with char $ac_func (); below.
+- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+- <limits.h> exists even on freestanding compilers. */
++/* Thanks to Mike Haertel and Jim Avera for this test.
++ Here is a matrix of mmap possibilities:
++ mmap private not fixed
++ mmap private fixed at somewhere currently unmapped
++ mmap private fixed at somewhere already mapped
++ mmap shared not fixed
++ mmap shared fixed at somewhere currently unmapped
++ mmap shared fixed at somewhere already mapped
++ For private mappings, we should verify that changes cannot be read()
++ back from the file, nor mmap's back from the file at a different
++ address. (There have been systems where private was not correctly
++ implemented like the infamous i386 svr4.0, and systems where the
++ VM page cache was not coherent with the file system buffer cache
++ like early versions of FreeBSD and possibly contemporary NetBSD.)
++ For shared mappings, we should conversely verify that changes get
++ propagated back to all the places they're supposed to be.
+
+-#ifdef __STDC__
+-# include <limits.h>
+-#else
+-# include <assert.h>
+-#endif
++ Grep wants private fixed already mapped.
++ The main things grep needs to know about mmap are:
++ * does it exist and is it safe to write into the mmap'd area
++ * how to use it (BSD variants) */
+
+-#undef $ac_func
++#include <fcntl.h>
++#include <sys/mman.h>
+
+-/* Override any GCC internal prototype to avoid an error.
+- Use char because int might match the return type of a GCC
+- builtin and then its argument prototype would still apply. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char $ac_func ();
+-/* The GNU C library defines this for functions which it implements
+- to always fail with ENOSYS. Some functions are actually named
+- something starting with __ and the normal name is an alias. */
+-#if defined __stub_$ac_func || defined __stub___$ac_func
+-choke me
++#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
++char *malloc ();
+ #endif
+
++/* This mess was copied from the GNU getpagesize.h. */
++#ifndef HAVE_GETPAGESIZE
++# ifdef _SC_PAGESIZE
++# define getpagesize() sysconf(_SC_PAGESIZE)
++# else /* no _SC_PAGESIZE */
++# ifdef HAVE_SYS_PARAM_H
++# include <sys/param.h>
++# ifdef EXEC_PAGESIZE
++# define getpagesize() EXEC_PAGESIZE
++# else /* no EXEC_PAGESIZE */
++# ifdef NBPG
++# define getpagesize() NBPG * CLSIZE
++# ifndef CLSIZE
++# define CLSIZE 1
++# endif /* no CLSIZE */
++# else /* no NBPG */
++# ifdef NBPC
++# define getpagesize() NBPC
++# else /* no NBPC */
++# ifdef PAGESIZE
++# define getpagesize() PAGESIZE
++# endif /* PAGESIZE */
++# endif /* no NBPC */
++# endif /* no NBPG */
++# endif /* no EXEC_PAGESIZE */
++# else /* no HAVE_SYS_PARAM_H */
++# define getpagesize() 8192 /* punt totally */
++# endif /* no HAVE_SYS_PARAM_H */
++# endif /* no _SC_PAGESIZE */
++
++#endif /* no HAVE_GETPAGESIZE */
++
+ int
+ main ()
+ {
+-return $ac_func ();
+- ;
++ char *data, *data2, *data3;
++ const char *cdata2;
++ int i, pagesize;
++ int fd, fd2;
++
++ pagesize = getpagesize ();
++
++ /* First, make a file with some known garbage in it. */
++ data = (char *) malloc (pagesize);
++ if (!data)
++ return 1;
++ for (i = 0; i < pagesize; ++i)
++ *(data + i) = rand ();
++ umask (0);
++ fd = creat ("conftest.mmap", 0600);
++ if (fd < 0)
++ return 2;
++ if (write (fd, data, pagesize) != pagesize)
++ return 3;
++ close (fd);
++
++ /* Next, check that the tail of a page is zero-filled. File must have
++ non-zero length, otherwise we risk SIGBUS for entire page. */
++ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600);
++ if (fd2 < 0)
++ return 4;
++ cdata2 = "";
++ if (write (fd2, cdata2, 1) != 1)
++ return 5;
++ data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L);
++ if (data2 == MAP_FAILED)
++ return 6;
++ for (i = 0; i < pagesize; ++i)
++ if (*(data2 + i))
++ return 7;
++ close (fd2);
++ if (munmap (data2, pagesize))
++ return 8;
++
++ /* Next, try to mmap the file at a fixed address which already has
++ something else allocated at it. If we can, also make sure that
++ we see the same garbage. */
++ fd = open ("conftest.mmap", O_RDWR);
++ if (fd < 0)
++ return 9;
++ if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
++ MAP_PRIVATE | MAP_FIXED, fd, 0L))
++ return 10;
++ for (i = 0; i < pagesize; ++i)
++ if (*(data + i) != *(data2 + i))
++ return 11;
++
++ /* Finally, make sure that changes to the mapped area do not
++ percolate back to the file as seen by read(). (This is a bug on
++ some variants of i386 svr4.0.) */
++ for (i = 0; i < pagesize; ++i)
++ *(data2 + i) = *(data2 + i) + 1;
++ data3 = (char *) malloc (pagesize);
++ if (!data3)
++ return 12;
++ if (read (fd, data3, pagesize) != pagesize)
++ return 13;
++ for (i = 0; i < pagesize; ++i)
++ if (*(data + i) != *(data3 + i))
++ return 14;
++ close (fd);
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
+- eval "$as_ac_var=yes"
++if ac_fn_c_try_run "$LINENO"; then :
++ ac_cv_func_mmap_fixed_mapped=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- eval "$as_ac_var=no"
++ ac_cv_func_mmap_fixed_mapped=no
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++ conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+-ac_res=`eval 'as_val=${'$as_ac_var'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-as_val=`eval 'as_val=${'$as_ac_var'}
+- $as_echo "$as_val"'`
+- if test "x$as_val" = x""yes; then
+- cat >>confdefs.h <<_ACEOF
+-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+-_ACEOF
+
+ fi
+-done
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5
++$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; }
++if test $ac_cv_func_mmap_fixed_mapped = yes; then
+
++$as_echo "#define HAVE_MMAP 1" >>confdefs.h
+
+-for ac_func in sigaction
+-do
+-as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+-{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+-$as_echo_n "checking for $ac_func... " >&6; }
+-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+- $as_echo_n "(cached) " >&6
+-else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+- For example, HP-UX 11i <limits.h> declares gettimeofday. */
+-#define $ac_func innocuous_$ac_func
++fi
++rm -f conftest.mmap conftest.txt
+
+-/* System header to define __stub macros and hopefully few prototypes,
+- which can conflict with char $ac_func (); below.
+- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+- <limits.h> exists even on freestanding compilers. */
+
+-#ifdef __STDC__
+-# include <limits.h>
+-#else
+-# include <assert.h>
+-#endif
++for ac_header in inttypes.h
++do :
++ ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
++if test "x$ac_cv_header_inttypes_h" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_INTTYPES_H 1
++_ACEOF
+
+-#undef $ac_func
++fi
+
+-/* Override any GCC internal prototype to avoid an error.
+- Use char because int might match the return type of a GCC
+- builtin and then its argument prototype would still apply. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char $ac_func ();
+-/* The GNU C library defines this for functions which it implements
+- to always fail with ENOSYS. Some functions are actually named
+- something starting with __ and the normal name is an alias. */
+-#if defined __stub_$ac_func || defined __stub___$ac_func
+-choke me
+-#endif
++done
+
+-int
+-main ()
+-{
+-return $ac_func ();
+- ;
+- return 0;
+-}
++for ac_header in sys/time.h
++do :
++ ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
++if test "x$ac_cv_header_sys_time_h" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_SYS_TIME_H 1
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
+- eval "$as_ac_var=yes"
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+
+- eval "$as_ac_var=no"
+ fi
+
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
+-fi
+-ac_res=`eval 'as_val=${'$as_ac_var'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-as_val=`eval 'as_val=${'$as_ac_var'}
+- $as_echo "$as_val"'`
+- if test "x$as_val" = x""yes; then
++done
++
++for ac_header in unistd.h
++do :
++ ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
++if test "x$ac_cv_header_unistd_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
++#define HAVE_UNISTD_H 1
+ _ACEOF
+
+ fi
++
+ done
+
+
+-for ac_func in sigsetjmp
+-do
+-as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+-{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+-$as_echo_n "checking for $ac_func... " >&6; }
+-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+- $as_echo_n "(cached) " >&6
+-else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
++for ac_func in gettimeofday
++do :
++ ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
++if test "x$ac_cv_func_gettimeofday" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_GETTIMEOFDAY 1
+ _ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+- For example, HP-UX 11i <limits.h> declares gettimeofday. */
+-#define $ac_func innocuous_$ac_func
+-
+-/* System header to define __stub macros and hopefully few prototypes,
+- which can conflict with char $ac_func (); below.
+- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+- <limits.h> exists even on freestanding compilers. */
+-
+-#ifdef __STDC__
+-# include <limits.h>
+-#else
+-# include <assert.h>
+-#endif
+
+-#undef $ac_func
+-
+-/* Override any GCC internal prototype to avoid an error.
+- Use char because int might match the return type of a GCC
+- builtin and then its argument prototype would still apply. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char $ac_func ();
+-/* The GNU C library defines this for functions which it implements
+- to always fail with ENOSYS. Some functions are actually named
+- something starting with __ and the normal name is an alias. */
+-#if defined __stub_$ac_func || defined __stub___$ac_func
+-choke me
+-#endif
++fi
++done
+
+-int
+-main ()
+-{
+-return $ac_func ();
+- ;
+- return 0;
+-}
++for ac_func in sigaction
++do :
++ ac_fn_c_check_func "$LINENO" "sigaction" "ac_cv_func_sigaction"
++if test "x$ac_cv_func_sigaction" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_SIGACTION 1
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
+- eval "$as_ac_var=yes"
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+
+- eval "$as_ac_var=no"
+ fi
++done
+
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
+-fi
+-ac_res=`eval 'as_val=${'$as_ac_var'}
+- $as_echo "$as_val"'`
+- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-as_val=`eval 'as_val=${'$as_ac_var'}
+- $as_echo "$as_val"'`
+- if test "x$as_val" = x""yes; then
++for ac_func in sigsetjmp
++do :
++ ac_fn_c_check_func "$LINENO" "sigsetjmp" "ac_cv_func_sigsetjmp"
++if test "x$ac_cv_func_sigsetjmp" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
++#define HAVE_SIGSETJMP 1
+ _ACEOF
+
+ fi
+@@ -16433,18 +12473,14 @@
+ # These system don't have libm, or don't need it
+ ;;
+ *-ncr-sysv4.3*)
+- { $as_echo "$as_me:$LINENO: checking for _mwvalidcheckl in -lmw" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _mwvalidcheckl in -lmw" >&5
+ $as_echo_n "checking for _mwvalidcheckl in -lmw... " >&6; }
+-if test "${ac_cv_lib_mw__mwvalidcheckl+set}" = set; then
++if test "${ac_cv_lib_mw__mwvalidcheckl+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lmw $LIBS"
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ /* Override any GCC internal prototype to avoid an error.
+@@ -16462,58 +12498,29 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
++if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_mw__mwvalidcheckl=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_lib_mw__mwvalidcheckl=no
++ ac_cv_lib_mw__mwvalidcheckl=no
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mw__mwvalidcheckl" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mw__mwvalidcheckl" >&5
+ $as_echo "$ac_cv_lib_mw__mwvalidcheckl" >&6; }
+-if test "x$ac_cv_lib_mw__mwvalidcheckl" = x""yes; then
++if test "x$ac_cv_lib_mw__mwvalidcheckl" = x""yes; then :
+ LIBM="-lmw"
+ fi
+
+- { $as_echo "$as_me:$LINENO: checking for cos in -lm" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5
+ $as_echo_n "checking for cos in -lm... " >&6; }
+-if test "${ac_cv_lib_m_cos+set}" = set; then
++if test "${ac_cv_lib_m_cos+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lm $LIBS"
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ /* Override any GCC internal prototype to avoid an error.
+@@ -16531,60 +12538,31 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
++if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_m_cos=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_lib_m_cos=no
++ ac_cv_lib_m_cos=no
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_cos" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5
+ $as_echo "$ac_cv_lib_m_cos" >&6; }
+-if test "x$ac_cv_lib_m_cos" = x""yes; then
++if test "x$ac_cv_lib_m_cos" = x""yes; then :
+ LIBM="$LIBM -lm"
+ fi
+
+ ;;
+ *)
+- { $as_echo "$as_me:$LINENO: checking for cos in -lm" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5
+ $as_echo_n "checking for cos in -lm... " >&6; }
+-if test "${ac_cv_lib_m_cos+set}" = set; then
++if test "${ac_cv_lib_m_cos+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lm $LIBS"
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ /* Override any GCC internal prototype to avoid an error.
+@@ -16602,43 +12580,18 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
++if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_m_cos=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_lib_m_cos=no
++ ac_cv_lib_m_cos=no
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_cos" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5
+ $as_echo "$ac_cv_lib_m_cos" >&6; }
+-if test "x$ac_cv_lib_m_cos" = x""yes; then
++if test "x$ac_cv_lib_m_cos" = x""yes; then :
+ LIBM="-lm"
+ fi
+
+@@ -16648,18 +12601,14 @@
+
+
+
+-{ $as_echo "$as_me:$LINENO: checking for clock_gettime in -lrt" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
+ $as_echo_n "checking for clock_gettime in -lrt... " >&6; }
+-if test "${ac_cv_lib_rt_clock_gettime+set}" = set; then
++if test "${ac_cv_lib_rt_clock_gettime+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+ ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lrt $LIBS"
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ /* Override any GCC internal prototype to avoid an error.
+@@ -16677,47 +12626,20 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_link") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest$ac_exeext && {
+- test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
+- }; then
++if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_rt_clock_gettime=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_cv_lib_rt_clock_gettime=no
++ ac_cv_lib_rt_clock_gettime=no
+ fi
+-
+-rm -rf conftest.dSYM
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_rt_clock_gettime" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5
+ $as_echo "$ac_cv_lib_rt_clock_gettime" >&6; }
+-if test "x$ac_cv_lib_rt_clock_gettime" = x""yes; then
++if test "x$ac_cv_lib_rt_clock_gettime" = x""yes; then :
+
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_CLOCK_GETTIME 1
+-_ACEOF
++$as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h
+
+ LIBRT=-lrt
+
+@@ -16725,16 +12647,12 @@
+
+
+
+-{ $as_echo "$as_me:$LINENO: checking for monotonic clocks" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for monotonic clocks" >&5
+ $as_echo_n "checking for monotonic clocks... " >&6; }
+-if test "${orc_cv_monotonic_clock+set}" = set; then
++if test "${orc_cv_monotonic_clock+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+ else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ #include <time.h>
+@@ -16747,56 +12665,29 @@
+ }
+
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
++if ac_fn_c_try_compile "$LINENO"; then :
+ orc_cv_monotonic_clock=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- orc_cv_monotonic_clock=no
++ orc_cv_monotonic_clock=no
+ fi
+-
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $orc_cv_monotonic_clock" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $orc_cv_monotonic_clock" >&5
+ $as_echo "$orc_cv_monotonic_clock" >&6; }
+ if test "$orc_cv_monotonic_clock" = "yes"; then
+
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_MONOTONIC_CLOCK 1
+-_ACEOF
++$as_echo "#define HAVE_MONOTONIC_CLOCK 1" >>confdefs.h
+
+ fi
+
+
+- { $as_echo "$as_me:$LINENO: checking to see if compiler understands -Wall" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wall" >&5
+ $as_echo_n "checking to see if compiler understands -Wall... " >&6; }
+
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wall"
+
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -16807,32 +12698,11 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
++if ac_fn_c_try_compile "$LINENO"; then :
+ flag_ok=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- flag_ok=no
++ flag_ok=no
+ fi
+-
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS="$save_CFLAGS"
+
+@@ -16843,23 +12713,19 @@
+
+ true
+ fi
+- { $as_echo "$as_me:$LINENO: result: $flag_ok" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+ $as_echo "$flag_ok" >&6; }
+
+ if test "x$ORC_CVS" = "xyes"
+ then
+
+- { $as_echo "$as_me:$LINENO: checking to see if compiler understands -Werror" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Werror" >&5
+ $as_echo_n "checking to see if compiler understands -Werror... " >&6; }
+
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror"
+
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+@@ -16870,32 +12736,11 @@
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (ac_try="$ac_compile"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+-$as_echo "$ac_try_echo") >&5
+- (eval "$ac_compile") 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } && {
+- test -z "$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- } && test -s conftest.$ac_objext; then
++if ac_fn_c_try_compile "$LINENO"; then :
+ flag_ok=yes
+ else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- flag_ok=no
++ flag_ok=no
+ fi
+-
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS="$save_CFLAGS"
+
+@@ -16906,7 +12751,7 @@
+
+ true
+ fi
+- { $as_echo "$as_me:$LINENO: result: $flag_ok" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+ $as_echo "$flag_ok" >&6; }
+
+ fi
+@@ -16914,47 +12759,35 @@
+ case "${host_os}" in
+ mingw*|pw32*|cygwin*)
+
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_CODEMEM_MALLOC 1
+-_ACEOF
++$as_echo "#define HAVE_CODEMEM_MALLOC 1" >>confdefs.h
+
+ ;;
+- linux*|darwin*|solaris*|netbsd*|freebsd*|openbsd*)
++ linux*|darwin*|solaris*|netbsd*|freebsd*|openbsd*|kfreebsd*|gnu*)
+
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_CODEMEM_MMAP 1
+-_ACEOF
++$as_echo "#define HAVE_CODEMEM_MMAP 1" >>confdefs.h
+
+ ;;
+ *)
+- { { $as_echo "$as_me:$LINENO: error: no code allocation backend" >&5
+-$as_echo "$as_me: error: no code allocation backend" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "no code allocation backend" "$LINENO" 5
+ ;;
+ esac
+
+ case "${host_os}" in
+ mingw*|pw32*|cygwin*)
+
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_THREAD_WIN32 1
+-_ACEOF
++$as_echo "#define HAVE_THREAD_WIN32 1" >>confdefs.h
+
+ ;;
+ *)
+
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_THREAD_PTHREAD 1
+-_ACEOF
++$as_echo "#define HAVE_THREAD_PTHREAD 1" >>confdefs.h
+
+ ;;
+ esac
+
+
+
+-cat >>confdefs.h <<\_ACEOF
+-#define ORC_EXPORTS 1
+-_ACEOF
++$as_echo "#define ORC_EXPORTS 1" >>confdefs.h
+
+
+ ORC_CFLAGS="$ORC_CFLAGS -I\$(top_srcdir)"
+@@ -17000,13 +12833,13 @@
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
++ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+- *) $as_unset $ac_var ;;
++ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+@@ -17014,8 +12847,8 @@
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+- # `set' does not quote correctly, so add quotes (double-quote
+- # substitution turns \\\\ into \\, and sed turns \\ into \).
++ # `set' does not quote correctly, so add quotes: double-quote
++ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+@@ -17038,11 +12871,11 @@
+ if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ test "x$cache_file" != "x/dev/null" &&
+- { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+ $as_echo "$as_me: updating cache $cache_file" >&6;}
+ cat confcache >$cache_file
+ else
+- { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+ $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+ fi
+@@ -17062,97 +12895,69 @@
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+- ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+- ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
++ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
++ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+ done
+ LIBOBJS=$ac_libobjs
+
+ LTLIBOBJS=$ac_ltlibobjs
+
+
++ if test -n "$EXEEXT"; then
++ am__EXEEXT_TRUE=
++ am__EXEEXT_FALSE='#'
++else
++ am__EXEEXT_TRUE='#'
++ am__EXEEXT_FALSE=
++fi
++
+ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+- { { $as_echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&5
+-$as_echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "conditional \"MAINTAINER_MODE\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+- { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&5
+-$as_echo "$as_me: error: conditional \"AMDEP\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "conditional \"AMDEP\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+- { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&5
+-$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "conditional \"am__fastdepCC\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
+- { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCCAS\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&5
+-$as_echo "$as_me: error: conditional \"am__fastdepCCAS\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "conditional \"am__fastdepCCAS\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then
+- { { $as_echo "$as_me:$LINENO: error: conditional \"ENABLE_GTK_DOC\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&5
+-$as_echo "$as_me: error: conditional \"ENABLE_GTK_DOC\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "conditional \"ENABLE_GTK_DOC\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then
+- { { $as_echo "$as_me:$LINENO: error: conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&5
+-$as_echo "$as_me: error: conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${HAVE_I386_TRUE}" && test -z "${HAVE_I386_FALSE}"; then
+- { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_I386\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&5
+-$as_echo "$as_me: error: conditional \"HAVE_I386\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "conditional \"HAVE_I386\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${HAVE_AMD64_TRUE}" && test -z "${HAVE_AMD64_FALSE}"; then
+- { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_AMD64\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&5
+-$as_echo "$as_me: error: conditional \"HAVE_AMD64\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "conditional \"HAVE_AMD64\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${HAVE_POWERPC_TRUE}" && test -z "${HAVE_POWERPC_FALSE}"; then
+- { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_POWERPC\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&5
+-$as_echo "$as_me: error: conditional \"HAVE_POWERPC\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "conditional \"HAVE_POWERPC\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${HAVE_ARM_TRUE}" && test -z "${HAVE_ARM_FALSE}"; then
+- { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_ARM\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&5
+-$as_echo "$as_me: error: conditional \"HAVE_ARM\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "conditional \"HAVE_ARM\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${HAVE_OS_WIN32_TRUE}" && test -z "${HAVE_OS_WIN32_FALSE}"; then
+- { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_OS_WIN32\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&5
+-$as_echo "$as_me: error: conditional \"HAVE_OS_WIN32\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "conditional \"HAVE_OS_WIN32\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${HAVE_OS_LINUX_TRUE}" && test -z "${HAVE_OS_LINUX_FALSE}"; then
+- { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_OS_LINUX\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&5
+-$as_echo "$as_me: error: conditional \"HAVE_OS_LINUX\" was never defined.
+-Usually this means the macro was only invoked conditionally." >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "conditional \"HAVE_OS_LINUX\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+
+
+@@ -17160,9 +12965,10 @@
+ ac_write_fail=0
+ ac_clean_files_save=$ac_clean_files
+ ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+-{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+ $as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+-cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++as_write_fail=0
++cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+ #! $SHELL
+ # Generated by $as_me.
+ # Run this file to recreate the current configuration.
+@@ -17172,17 +12978,18 @@
+ debug=false
+ ac_cs_recheck=false
+ ac_cs_silent=false
+-SHELL=\${CONFIG_SHELL-$SHELL}
+-_ACEOF
+
+-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+-## --------------------- ##
+-## M4sh Initialization. ##
+-## --------------------- ##
++SHELL=\${CONFIG_SHELL-$SHELL}
++export SHELL
++_ASEOF
++cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
++## -------------------- ##
++## M4sh Initialization. ##
++## -------------------- ##
+
+ # Be more Bourne compatible
+ DUALCASE=1; export DUALCASE # for MKS sh
+-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+@@ -17190,23 +12997,15 @@
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+ else
+- case `(set -o) 2>/dev/null` in
+- *posix*) set -o posix ;;
++ case `(set -o) 2>/dev/null` in #(
++ *posix*) :
++ set -o posix ;; #(
++ *) :
++ ;;
+ esac
+-
+ fi
+
+
+-
+-
+-# PATH needs CR
+-# Avoid depending upon Character Ranges.
+-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+-as_cr_digits='0123456789'
+-as_cr_alnum=$as_cr_Letters$as_cr_digits
+-
+ as_nl='
+ '
+ export as_nl
+@@ -17214,7 +13013,13 @@
+ as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+ as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
++# Prefer a ksh shell builtin over an external printf program on Solaris,
++# but without wasting forks for bash or zsh.
++if test -z "$BASH_VERSION$ZSH_VERSION" \
++ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
++ as_echo='print -r --'
++ as_echo_n='print -rn --'
++elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+ else
+@@ -17225,7 +13030,7 @@
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+- case $arg in
++ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+@@ -17248,13 +13053,6 @@
+ }
+ fi
+
+-# Support unset when possible.
+-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+- as_unset=unset
+-else
+- as_unset=false
+-fi
+-
+
+ # IFS
+ # We need space, tab and new line, in precisely that order. Quoting is
+@@ -17264,15 +13062,15 @@
+ IFS=" "" $as_nl"
+
+ # Find who we are. Look in the path if we contain no directory separator.
+-case $0 in
++case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+-done
++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
++ done
+ IFS=$as_save_IFS
+
+ ;;
+@@ -17284,12 +13082,16 @@
+ fi
+ if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+- { (exit 1); exit 1; }
++ exit 1
+ fi
+
+-# Work around bugs in pre-3.0 UWIN ksh.
+-for as_var in ENV MAIL MAILPATH
+-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
++# Unset variables that we do not need and which cause bugs (e.g. in
++# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
++# suppresses any "Segmentation fault" message there. '((' could
++# trigger a bug in pdksh 5.2.14.
++for as_var in BASH_ENV ENV MAIL MAILPATH
++do eval test x\${$as_var+set} = xset \
++ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+ done
+ PS1='$ '
+ PS2='> '
+@@ -17301,7 +13103,89 @@
+ LANGUAGE=C
+ export LANGUAGE
+
+-# Required to use basename.
++# CDPATH.
++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++
++
++# as_fn_error ERROR [LINENO LOG_FD]
++# ---------------------------------
++# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
++# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
++# script with status $?, using 1 if that was 0.
++as_fn_error ()
++{
++ as_status=$?; test $as_status -eq 0 && as_status=1
++ if test "$3"; then
++ as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
++ fi
++ $as_echo "$as_me: error: $1" >&2
++ as_fn_exit $as_status
++} # as_fn_error
++
++
++# as_fn_set_status STATUS
++# -----------------------
++# Set $? to STATUS, without forking.
++as_fn_set_status ()
++{
++ return $1
++} # as_fn_set_status
++
++# as_fn_exit STATUS
++# -----------------
++# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
++as_fn_exit ()
++{
++ set +e
++ as_fn_set_status $1
++ exit $1
++} # as_fn_exit
++
++# as_fn_unset VAR
++# ---------------
++# Portably unset VAR.
++as_fn_unset ()
++{
++ { eval $1=; unset $1;}
++}
++as_unset=as_fn_unset
++# as_fn_append VAR VALUE
++# ----------------------
++# Append the text in VALUE to the end of the definition contained in VAR. Take
++# advantage of any shell optimizations that allow amortized linear growth over
++# repeated appends, instead of the typical quadratic growth present in naive
++# implementations.
++if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
++ eval 'as_fn_append ()
++ {
++ eval $1+=\$2
++ }'
++else
++ as_fn_append ()
++ {
++ eval $1=\$$1\$2
++ }
++fi # as_fn_append
++
++# as_fn_arith ARG...
++# ------------------
++# Perform arithmetic evaluation on the ARGs, and store the result in the
++# global $as_val. Take advantage of shells that can avoid forks. The arguments
++# must be portable across $(()) and expr.
++if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
++ eval 'as_fn_arith ()
++ {
++ as_val=$(( $* ))
++ }'
++else
++ as_fn_arith ()
++ {
++ as_val=`expr "$@" || test $? -eq 1`
++ }
++fi # as_fn_arith
++
++
+ if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+@@ -17315,8 +13199,12 @@
+ as_basename=false
+ fi
+
++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
++ as_dirname=dirname
++else
++ as_dirname=false
++fi
+
+-# Name of the executable.
+ as_me=`$as_basename -- "$0" ||
+ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+@@ -17336,76 +13224,25 @@
+ }
+ s/.*/./; q'`
+
+-# CDPATH.
+-$as_unset CDPATH
+-
+-
+-
+- as_lineno_1=$LINENO
+- as_lineno_2=$LINENO
+- test "x$as_lineno_1" != "x$as_lineno_2" &&
+- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+-
+- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+- # uniformly replaced by the line number. The first 'sed' inserts a
+- # line-number line after each line using $LINENO; the second 'sed'
+- # does the real work. The second script uses 'N' to pair each
+- # line-number line with the line containing $LINENO, and appends
+- # trailing '-' during substitution so that $LINENO is not a special
+- # case at line end.
+- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+- # scripts with optimization help from Paolo Bonzini. Blame Lee
+- # E. McMahon (1931-1989) for sed's syntax. :-)
+- sed -n '
+- p
+- /[$]LINENO/=
+- ' <$as_myself |
+- sed '
+- s/[$]LINENO.*/&-/
+- t lineno
+- b
+- :lineno
+- N
+- :loop
+- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+- t loop
+- s/-\n.*//
+- ' >$as_me.lineno &&
+- chmod +x "$as_me.lineno" ||
+- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+- { (exit 1); exit 1; }; }
+-
+- # Don't try to exec as it changes $[0], causing all sort of problems
+- # (the dirname of $[0] is not the place where we might find the
+- # original and so on. Autoconf is especially sensitive to this).
+- . "./$as_me.lineno"
+- # Exit status is that of the last command.
+- exit
+-}
+-
+-
+-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+- as_dirname=dirname
+-else
+- as_dirname=false
+-fi
++# Avoid depending upon Character Ranges.
++as_cr_letters='abcdefghijklmnopqrstuvwxyz'
++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
++as_cr_Letters=$as_cr_letters$as_cr_LETTERS
++as_cr_digits='0123456789'
++as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ ECHO_C= ECHO_N= ECHO_T=
+-case `echo -n x` in
++case `echo -n x` in #(((((
+ -n*)
+- case `echo 'x\c'` in
++ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+- *) ECHO_C='\c';;
++ xy) ECHO_C='\c';;
++ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
++ ECHO_T=' ';;
+ esac;;
+ *)
+ ECHO_N='-n';;
+ esac
+-if expr a : '\(a\)' >/dev/null 2>&1 &&
+- test "X`expr 00001 : '.*\(...\)'`" = X001; then
+- as_expr=expr
+-else
+- as_expr=false
+-fi
+
+ rm -f conf$$ conf$$.exe conf$$.file
+ if test -d conf$$.dir; then
+@@ -17434,8 +13271,56 @@
+ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+ rmdir conf$$.dir 2>/dev/null
+
++
++# as_fn_mkdir_p
++# -------------
++# Create "$as_dir" as a directory, including parents if necessary.
++as_fn_mkdir_p ()
++{
++
++ case $as_dir in #(
++ -*) as_dir=./$as_dir;;
++ esac
++ test -d "$as_dir" || eval $as_mkdir_p || {
++ as_dirs=
++ while :; do
++ case $as_dir in #(
++ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
++ *) as_qdir=$as_dir;;
++ esac
++ as_dirs="'$as_qdir' $as_dirs"
++ as_dir=`$as_dirname -- "$as_dir" ||
++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$as_dir" : 'X\(//\)[^/]' \| \
++ X"$as_dir" : 'X\(//\)$' \| \
++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$as_dir" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
++ test -d "$as_dir" && break
++ done
++ test -z "$as_dirs" || eval "mkdir $as_dirs"
++ } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
++
++
++} # as_fn_mkdir_p
+ if mkdir -p . 2>/dev/null; then
+- as_mkdir_p=:
++ as_mkdir_p='mkdir -p "$as_dir"'
+ else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+@@ -17454,10 +13339,10 @@
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+- case $1 in
++ case $1 in #(
+ -*)set "./$1";;
+ esac;
+- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+@@ -17472,13 +13357,19 @@
+
+
+ exec 6>&1
++## ----------------------------------- ##
++## Main body of $CONFIG_STATUS script. ##
++## ----------------------------------- ##
++_ASEOF
++test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+-# Save the log message, to keep $[0] and so on meaningful, and to
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++# Save the log message, to keep $0 and so on meaningful, and to
+ # report actual input values of CONFIG_FILES etc. instead of their
+ # values after options handling.
+ ac_log="
+ This file was extended by orc $as_me 0.4.3, which was
+-generated by GNU Autoconf 2.63. Invocation command line was
++generated by GNU Autoconf 2.65. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+@@ -17510,13 +13401,15 @@
+
+ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ ac_cs_usage="\
+-\`$as_me' instantiates files from templates according to the
+-current configuration.
++\`$as_me' instantiates files and other configuration actions
++from templates according to the current configuration. Unless the files
++and actions are specified as TAGs, all are instantiated by default.
+
+-Usage: $0 [OPTION]... [FILE]...
++Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
++ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+@@ -17535,16 +13428,17 @@
+ Configuration commands:
+ $config_commands
+
+-Report bugs to <bug-autoconf@gnu.org>."
++Report bugs to the package provider."
+
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ ac_cs_version="\\
+ orc config.status 0.4.3
+-configured by $0, generated by GNU Autoconf 2.63,
+- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
++configured by $0, generated by GNU Autoconf 2.65,
++ with options \\"\$ac_cs_config\\"
+
+-Copyright (C) 2008 Free Software Foundation, Inc.
++Copyright (C) 2009 Free Software Foundation, Inc.
+ This config.status script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it."
+
+@@ -17580,6 +13474,8 @@
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
++ --config | --confi | --conf | --con | --co | --c )
++ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+@@ -17587,20 +13483,19 @@
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+- CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
++ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+- CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
++ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+- { $as_echo "$as_me: error: ambiguous option: $1
+-Try \`$0 --help' for more information." >&2
+- { (exit 1); exit 1; }; };;
++ as_fn_error "ambiguous option: \`$1'
++Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+@@ -17608,11 +13503,10 @@
+ ac_cs_silent=: ;;
+
+ # This is an error.
+- -*) { $as_echo "$as_me: error: unrecognized option: $1
+-Try \`$0 --help' for more information." >&2
+- { (exit 1); exit 1; }; } ;;
++ -*) as_fn_error "unrecognized option: \`$1'
++Try \`$0 --help' for more information." ;;
+
+- *) ac_config_targets="$ac_config_targets $1"
++ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+@@ -17955,9 +13849,7 @@
+ "orc-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES orc-uninstalled.pc" ;;
+ "orc.pc") CONFIG_FILES="$CONFIG_FILES orc.pc" ;;
+
+- *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+-$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+- { (exit 1); exit 1; }; };;
++ *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+ done
+
+@@ -17984,7 +13876,7 @@
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+ ' 0
+- trap '{ (exit 1); exit 1; }' 1 2 13 15
++ trap 'as_fn_exit 1' 1 2 13 15
+ }
+ # Create a (secure) tmp directory for tmp files.
+
+@@ -17995,11 +13887,7 @@
+ {
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+-} ||
+-{
+- $as_echo "$as_me: cannot create a temporary directory in ." >&2
+- { (exit 1); exit 1; }
+-}
++} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+
+ # Set up the scripts for CONFIG_FILES section.
+ # No need to generate them if there are no CONFIG_FILES.
+@@ -18007,10 +13895,16 @@
+ if test -n "$CONFIG_FILES"; then
+
+
+-ac_cr=' '
++ac_cr=`echo X | tr X '\015'`
++# On cygwin, bash can eat \r inside `` if the user requested igncr.
++# But we know of no other shell where ac_cr would be empty at this
++# point, so we can use a bashism as a fallback.
++if test "x$ac_cr" = x; then
++ eval ac_cr=\$\'\\r\'
++fi
+ ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+ if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+- ac_cs_awk_cr='\\r'
++ ac_cs_awk_cr='\r'
+ else
+ ac_cs_awk_cr=$ac_cr
+ fi
+@@ -18024,24 +13918,18 @@
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+ } >conf$$subs.sh ||
+- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+ ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+ ac_delim='%!_!# '
+ for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+@@ -18063,7 +13951,7 @@
+ t delim
+ :nl
+ h
+-s/\(.\{148\}\).*/\1/
++s/\(.\{148\}\)..*/\1/
+ t more1
+ s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+ p
+@@ -18077,7 +13965,7 @@
+ t nl
+ :delim
+ h
+-s/\(.\{148\}\).*/\1/
++s/\(.\{148\}\)..*/\1/
+ t more2
+ s/["\\]/\\&/g; s/^/"/; s/$/"/
+ p
+@@ -18130,9 +14018,7 @@
+ else
+ cat
+ fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+- || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
+-$as_echo "$as_me: error: could not setup config files machinery" >&2;}
+- { (exit 1); exit 1; }; }
++ || as_fn_error "could not setup config files machinery" "$LINENO" 5
+ _ACEOF
+
+ # VPATH may cause trouble with some makes, so we remove $(srcdir),
+@@ -18173,9 +14059,7 @@
+ if test -z "$ac_t"; then
+ break
+ elif $ac_last_try; then
+- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
+-$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+@@ -18260,9 +14144,7 @@
+ _ACAWK
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+- { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
+-$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "could not setup config headers machinery" "$LINENO" 5
+ fi # test -n "$CONFIG_HEADERS"
+
+
+@@ -18275,9 +14157,7 @@
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+- :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
+-$as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
+- { (exit 1); exit 1; }; };;
++ :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+@@ -18305,12 +14185,10 @@
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+- { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+-$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+- { (exit 1); exit 1; }; };;
++ as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+- ac_file_inputs="$ac_file_inputs '$ac_f'"
++ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+@@ -18321,7 +14199,7 @@
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+- { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+ $as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+@@ -18334,9 +14212,7 @@
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin" \
+- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+-$as_echo "$as_me: error: could not create $ac_file" >&2;}
+- { (exit 1); exit 1; }; } ;;
++ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+@@ -18364,47 +14240,7 @@
+ q
+ }
+ s/.*/./; q'`
+- { as_dir="$ac_dir"
+- case $as_dir in #(
+- -*) as_dir=./$as_dir;;
+- esac
+- test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+- as_dirs=
+- while :; do
+- case $as_dir in #(
+- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+- *) as_qdir=$as_dir;;
+- esac
+- as_dirs="'$as_qdir' $as_dirs"
+- as_dir=`$as_dirname -- "$as_dir" ||
+-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$as_dir" : 'X\(//\)[^/]' \| \
+- X"$as_dir" : 'X\(//\)$' \| \
+- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+-$as_echo X"$as_dir" |
+- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+- s//\1/
+- q
+- }
+- /^X\(\/\/\)[^/].*/{
+- s//\1/
+- q
+- }
+- /^X\(\/\/\)$/{
+- s//\1/
+- q
+- }
+- /^X\(\/\).*/{
+- s//\1/
+- q
+- }
+- s/.*/./; q'`
+- test -d "$as_dir" && break
+- done
+- test -z "$as_dirs" || eval "mkdir $as_dirs"
+- } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+- { (exit 1); exit 1; }; }; }
++ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+ case "$ac_dir" in
+@@ -18461,7 +14297,6 @@
+ # If the template does not know about datarootdir, expand it.
+ # FIXME: This hack should be removed a few years after 2.60.
+ ac_datarootdir_hack=; ac_datarootdir_seen=
+-
+ ac_sed_dataroot='
+ /datarootdir/ {
+ p
+@@ -18471,12 +14306,11 @@
+ /@docdir@/p
+ /@infodir@/p
+ /@localedir@/p
+-/@mandir@/p
+-'
++/@mandir@/p'
+ case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+ *datarootdir*) ac_datarootdir_seen=yes;;
+ *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+ $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+@@ -18486,7 +14320,7 @@
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+- s&\\\${datarootdir}&$datarootdir&g' ;;
++ s&\\\${datarootdir}&$datarootdir&g' ;;
+ esac
+ _ACEOF
+
+@@ -18515,14 +14349,12 @@
+ $ac_datarootdir_hack
+ "
+ eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+-$as_echo "$as_me: error: could not create $ac_file" >&2;}
+- { (exit 1); exit 1; }; }
++ || as_fn_error "could not create $ac_file" "$LINENO" 5
+
+ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+- { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ which seems to be undefined. Please make sure it is defined." >&5
+ $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ which seems to be undefined. Please make sure it is defined." >&2;}
+@@ -18532,9 +14364,7 @@
+ -) cat "$tmp/out" && rm -f "$tmp/out";;
+ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+ esac \
+- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+-$as_echo "$as_me: error: could not create $ac_file" >&2;}
+- { (exit 1); exit 1; }; }
++ || as_fn_error "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+@@ -18545,25 +14375,19 @@
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+ } >"$tmp/config.h" \
+- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+-$as_echo "$as_me: error: could not create $ac_file" >&2;}
+- { (exit 1); exit 1; }; }
++ || as_fn_error "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+- { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+ $as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$tmp/config.h" "$ac_file" \
+- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+-$as_echo "$as_me: error: could not create $ac_file" >&2;}
+- { (exit 1); exit 1; }; }
++ || as_fn_error "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+- || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
+-$as_echo "$as_me: error: could not create -" >&2;}
+- { (exit 1); exit 1; }; }
++ || as_fn_error "could not create -" "$LINENO" 5
+ fi
+ # Compute "$ac_file"'s index in $config_headers.
+ _am_arg="$ac_file"
+@@ -18601,7 +14425,7 @@
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+- :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
++ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+ $as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+@@ -18696,47 +14520,7 @@
+ q
+ }
+ s/.*/./; q'`
+- { as_dir=$dirpart/$fdir
+- case $as_dir in #(
+- -*) as_dir=./$as_dir;;
+- esac
+- test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+- as_dirs=
+- while :; do
+- case $as_dir in #(
+- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+- *) as_qdir=$as_dir;;
+- esac
+- as_dirs="'$as_qdir' $as_dirs"
+- as_dir=`$as_dirname -- "$as_dir" ||
+-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$as_dir" : 'X\(//\)[^/]' \| \
+- X"$as_dir" : 'X\(//\)$' \| \
+- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+-$as_echo X"$as_dir" |
+- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+- s//\1/
+- q
+- }
+- /^X\(\/\/\)[^/].*/{
+- s//\1/
+- q
+- }
+- /^X\(\/\/\)$/{
+- s//\1/
+- q
+- }
+- /^X\(\/\).*/{
+- s//\1/
+- q
+- }
+- s/.*/./; q'`
+- test -d "$as_dir" && break
+- done
+- test -z "$as_dirs" || eval "mkdir $as_dirs"
+- } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+- { (exit 1); exit 1; }; }; }
++ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+@@ -19385,7 +15169,7 @@
+
+ ;;
+ "$ac_stdint_h":C)
+-{ $as_echo "$as_me:$LINENO: creating $ac_stdint_h : $_ac_stdint_h" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_stdint_h : $_ac_stdint_h" >&5
+ $as_echo "$as_me: creating $ac_stdint_h : $_ac_stdint_h" >&6;}
+ ac_stdint=$tmp/_stdint.h
+
+@@ -19817,7 +15601,7 @@
+ STDINT_EOF
+ fi
+ if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then
+- { $as_echo "$as_me:$LINENO: $ac_stdint_h is unchanged" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_stdint_h is unchanged" >&5
+ $as_echo "$as_me: $ac_stdint_h is unchanged" >&6;}
+ else
+ ac_dir=`$as_dirname -- "$ac_stdint_h" ||
+@@ -19843,47 +15627,7 @@
+ q
+ }
+ s/.*/./; q'`
+- { as_dir="$ac_dir"
+- case $as_dir in #(
+- -*) as_dir=./$as_dir;;
+- esac
+- test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+- as_dirs=
+- while :; do
+- case $as_dir in #(
+- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+- *) as_qdir=$as_dir;;
+- esac
+- as_dirs="'$as_qdir' $as_dirs"
+- as_dir=`$as_dirname -- "$as_dir" ||
+-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$as_dir" : 'X\(//\)[^/]' \| \
+- X"$as_dir" : 'X\(//\)$' \| \
+- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+-$as_echo X"$as_dir" |
+- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+- s//\1/
+- q
+- }
+- /^X\(\/\/\)[^/].*/{
+- s//\1/
+- q
+- }
+- /^X\(\/\/\)$/{
+- s//\1/
+- q
+- }
+- /^X\(\/\).*/{
+- s//\1/
+- q
+- }
+- s/.*/./; q'`
+- test -d "$as_dir" && break
+- done
+- test -z "$as_dirs" || eval "mkdir $as_dirs"
+- } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+- { (exit 1); exit 1; }; }; }
++ as_dir="$ac_dir"; as_fn_mkdir_p
+ rm -f $ac_stdint_h
+ mv $ac_stdint $ac_stdint_h
+ fi
+@@ -19893,15 +15637,12 @@
+ done # for ac_tag
+
+
+-{ (exit 0); exit 0; }
++as_fn_exit 0
+ _ACEOF
+-chmod +x $CONFIG_STATUS
+ ac_clean_files=$ac_clean_files_save
+
+ test $ac_write_fail = 0 ||
+- { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
+-$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
+- { (exit 1); exit 1; }; }
++ as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+ # configure is writing to config.log, and then calls config.status.
+@@ -19922,10 +15663,10 @@
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+- $ac_cs_success || { (exit 1); exit 1; }
++ $ac_cs_success || as_fn_exit $?
+ fi
+ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+- { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ fi
+
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/depcomp orc-0.4.3/depcomp
+--- orc-0.4.3.old/depcomp 2009-12-14 02:20:11.000000000 +0100
++++ orc-0.4.3/depcomp 2010-02-02 12:18:15.047398687 +0100
+@@ -1,10 +1,10 @@
+ #! /bin/sh
+ # depcomp - compile a program generating dependencies as side-effects
+
+-scriptversion=2007-03-29.01
++scriptversion=2009-04-28.21; # UTC
+
+-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
+-# Foundation, Inc.
++# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
++# Software Foundation, Inc.
+
+ # 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
+@@ -17,9 +17,7 @@
+ # 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., 51 Franklin Street, Fifth Floor, Boston, MA
+-# 02110-1301, USA.
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+@@ -87,6 +85,15 @@
+ depmode=dashmstdout
+ fi
+
++cygpath_u="cygpath -u -f -"
++if test "$depmode" = msvcmsys; then
++ # This is just like msvisualcpp but w/o cygpath translation.
++ # Just convert the backslash-escaped backslashes to single forward
++ # slashes to satisfy depend.m4
++ cygpath_u="sed s,\\\\\\\\,/,g"
++ depmode=msvisualcpp
++fi
++
+ case "$depmode" in
+ gcc3)
+ ## gcc 3 implements dependency tracking that does exactly what
+@@ -192,14 +199,14 @@
+ ' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr '
+-' ' ' >> $depfile
+- echo >> $depfile
++' ' ' >> "$depfile"
++ echo >> "$depfile"
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' '
+ ' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+- >> $depfile
++ >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+@@ -328,7 +335,12 @@
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add `dependent.h:' lines.
+- sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
++ sed -ne '2,${
++ s/^ *//
++ s/ \\*$//
++ s/$/:/
++ p
++ }' "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+@@ -404,7 +416,7 @@
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+- while test $1 != '--mode=compile'; do
++ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+@@ -455,32 +467,39 @@
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+- while test $1 != '--mode=compile'; do
++ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+- cleared=no
+- for arg in "$@"; do
++ cleared=no eat=no
++ for arg
++ do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
++ if test $eat = yes; then
++ eat=no
++ continue
++ fi
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
++ -arch)
++ eat=yes ;;
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+- obj_suffix="`echo $object | sed 's/^.*\././'`"
++ obj_suffix=`echo "$object" | sed 's/^.*\././'`
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+@@ -500,7 +519,7 @@
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+- while test $1 != '--mode=compile'; do
++ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+@@ -538,13 +557,27 @@
+
+ msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+- # always write the preprocessed file to stdout, regardless of -o,
+- # because we must use -o when running libtool.
++ # always write the preprocessed file to stdout.
+ "$@" || exit $?
++
++ # Remove the call to Libtool.
++ if test "$libtool" = yes; then
++ while test "X$1" != 'X--mode=compile'; do
++ shift
++ done
++ shift
++ fi
++
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
++ -o)
++ shift
++ ;;
++ $object)
++ shift
++ ;;
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+@@ -557,16 +590,23 @@
+ ;;
+ esac
+ done
+- "$@" -E |
+- sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
++ "$@" -E 2>/dev/null |
++ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+- . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
++ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
+ echo " " >> "$depfile"
+- . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
++ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
++msvcmsys)
++ # This case exists only to let depend.m4 do its work. It works by
++ # looking at the text of this script. This case will never be run,
++ # since it is checked for above.
++ exit 1
++ ;;
++
+ none)
+ exec "$@"
+ ;;
+@@ -585,5 +625,6 @@
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+ # time-stamp-start: "scriptversion="
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
+-# time-stamp-end: "$"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
+ # End:
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/doc/Makefile.in orc-0.4.3/doc/Makefile.in
+--- orc-0.4.3.old/doc/Makefile.in 2009-12-14 02:20:10.000000000 +0100
++++ orc-0.4.3/doc/Makefile.in 2010-02-02 12:18:14.463377390 +0100
+@@ -1,8 +1,9 @@
+-# Makefile.in generated by automake 1.10.2 from Makefile.am.
++# Makefile.in generated by automake 1.11.1 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -21,8 +22,9 @@
+ ####################################
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+-pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+@@ -55,6 +57,7 @@
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = $(top_builddir)/config.h
+ CONFIG_CLEAN_FILES = version.entities
++CONFIG_CLEAN_VPATH_FILES =
+ SOURCES =
+ DIST_SOURCES =
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+@@ -124,6 +127,7 @@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+@@ -295,9 +299,9 @@
+ exit 1;; \
+ esac; \
+ done; \
+- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+- cd $(top_srcdir) && \
+- $(AUTOMAKE) --gnu doc/Makefile
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu doc/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+@@ -315,6 +319,7 @@
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
+ version.entities: $(top_builddir)/config.status $(srcdir)/version.entities.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+@@ -346,13 +351,17 @@
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+- test -f $(distdir)/$$file \
+- || cp -p $$d/$$file $(distdir)/$$file \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+@@ -384,6 +393,7 @@
+
+ distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+ maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+@@ -402,6 +412,8 @@
+
+ html: html-am
+
++html-am:
++
+ info: info-am
+
+ info-am:
+@@ -410,18 +422,28 @@
+
+ install-dvi: install-dvi-am
+
++install-dvi-am:
++
+ install-exec-am:
+
+ install-html: install-html-am
+
++install-html-am:
++
+ install-info: install-info-am
+
++install-info-am:
++
+ install-man:
+
+ install-pdf: install-pdf-am
+
++install-pdf-am:
++
+ install-ps: install-ps-am
+
++install-ps-am:
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -581,6 +603,7 @@
+
+ sync:
+ cd html && rsync -a . home.schleef.org:/srv/schleef.org/www/orc/documentation/
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/examples/Makefile.in orc-0.4.3/examples/Makefile.in
+--- orc-0.4.3.old/examples/Makefile.in 2009-12-14 02:20:10.000000000 +0100
++++ orc-0.4.3/examples/Makefile.in 2010-02-02 12:18:14.519377667 +0100
+@@ -1,8 +1,9 @@
+-# Makefile.in generated by automake 1.10.2 from Makefile.am.
++# Makefile.in generated by automake 1.11.1 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -16,8 +17,9 @@
+
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+-pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+@@ -51,8 +53,8 @@
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = $(top_builddir)/config.h
+ CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
+ am__installdirs = "$(DESTDIR)$(orcbindir)"
+-orcbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+ PROGRAMS = $(orcbin_PROGRAMS)
+ example1_SOURCES = example1.c
+ example1_OBJECTS = example1.$(OBJEXT)
+@@ -66,6 +68,7 @@
+ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
++am__mv = mv -f
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+@@ -146,6 +149,7 @@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+@@ -224,9 +228,9 @@
+ exit 1;; \
+ esac; \
+ done; \
+- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \
+- cd $(top_srcdir) && \
+- $(AUTOMAKE) --gnu examples/Makefile
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu examples/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+@@ -244,34 +248,50 @@
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
+ install-orcbinPROGRAMS: $(orcbin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(orcbindir)" || $(MKDIR_P) "$(DESTDIR)$(orcbindir)"
+- @list='$(orcbin_PROGRAMS)'; for p in $$list; do \
+- p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+- if test -f $$p \
+- || test -f $$p1 \
+- ; then \
+- f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(orcbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(orcbindir)/$$f'"; \
+- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(orcbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(orcbindir)/$$f" || exit 1; \
+- else :; fi; \
+- done
++ @list='$(orcbin_PROGRAMS)'; test -n "$(orcbindir)" || list=; \
++ for p in $$list; do echo "$$p $$p"; done | \
++ sed 's/$(EXEEXT)$$//' | \
++ while read p p1; do if test -f $$p || test -f $$p1; \
++ then echo "$$p"; echo "$$p"; else :; fi; \
++ done | \
++ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
++ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
++ sed 'N;N;N;s,\n, ,g' | \
++ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
++ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
++ if ($$2 == $$4) files[d] = files[d] " " $$1; \
++ else { print "f", $$3 "/" $$4, $$1; } } \
++ END { for (d in files) print "f", d, files[d] }' | \
++ while read type dir files; do \
++ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
++ test -z "$$files" || { \
++ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(orcbindir)$$dir'"; \
++ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(orcbindir)$$dir" || exit $$?; \
++ } \
++ ; done
+
+ uninstall-orcbinPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+- @list='$(orcbin_PROGRAMS)'; for p in $$list; do \
+- f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+- echo " rm -f '$(DESTDIR)$(orcbindir)/$$f'"; \
+- rm -f "$(DESTDIR)$(orcbindir)/$$f"; \
+- done
++ @list='$(orcbin_PROGRAMS)'; test -n "$(orcbindir)" || list=; \
++ files=`for p in $$list; do echo "$$p"; done | \
++ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
++ -e 's/$$/$(EXEEXT)/' `; \
++ test -n "$$list" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(orcbindir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(orcbindir)" && rm -f $$files
+
+ clean-orcbinPROGRAMS:
+- @list='$(orcbin_PROGRAMS)'; for p in $$list; do \
+- f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+- echo " rm -f $$p $$f"; \
+- rm -f $$p $$f ; \
+- done
++ @list='$(orcbin_PROGRAMS)'; test -n "$$list" || exit 0; \
++ echo " rm -f" $$list; \
++ rm -f $$list || exit $$?; \
++ test -n "$(EXEEXT)" || exit 0; \
++ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
++ echo " rm -f" $$list; \
++ rm -f $$list
+ example1$(EXEEXT): $(example1_OBJECTS) $(example1_DEPENDENCIES)
+ @rm -f example1$(EXEEXT)
+ $(LINK) $(example1_OBJECTS) $(example1_LDADD) $(LIBS)
+@@ -294,21 +314,21 @@
+
+ .c.o:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+ .c.obj:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ .c.lo:
+ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@@ -331,7 +351,7 @@
+
+ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
++ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+@@ -339,29 +359,34 @@
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+- $$tags $$unique; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
+ fi
+ ctags: CTAGS
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- test -z "$(CTAGS_ARGS)$$tags$$unique" \
++ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+- $$tags $$unique
++ $$unique
+
+ GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+- && cd $(top_srcdir) \
+- && gtags -i $(GTAGS_ARGS) $$here
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
+
+ distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+@@ -382,13 +407,17 @@
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+- test -f $(distdir)/$$file \
+- || cp -p $$d/$$file $(distdir)/$$file \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+@@ -419,6 +448,7 @@
+
+ distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+ maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+@@ -440,6 +470,8 @@
+
+ html: html-am
+
++html-am:
++
+ info: info-am
+
+ info-am:
+@@ -448,18 +480,28 @@
+
+ install-dvi: install-dvi-am
+
++install-dvi-am:
++
+ install-exec-am:
+
+ install-html: install-html-am
+
++install-html-am:
++
+ install-info: install-info-am
+
++install-info-am:
++
+ install-man:
+
+ install-pdf: install-pdf-am
+
++install-pdf-am:
++
+ install-ps: install-ps-am
+
++install-ps-am:
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -498,6 +540,7 @@
+ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am uninstall-orcbinPROGRAMS
+
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/install-sh orc-0.4.3/install-sh
+--- orc-0.4.3.old/install-sh 2009-12-14 02:20:10.000000000 +0100
++++ orc-0.4.3/install-sh 2010-02-02 12:18:14.391412590 +0100
+@@ -1,7 +1,7 @@
+ #!/bin/sh
+ # install - install a program, script, or datafile
+
+-scriptversion=2006-12-25.00
++scriptversion=2009-04-28.21; # UTC
+
+ # This originates from X11R5 (mit/util/scripts/install.sh), which was
+ # later released in X11R6 (xc/config/util/install.sh) with the
+@@ -515,5 +515,6 @@
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+ # time-stamp-start: "scriptversion="
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
+-# time-stamp-end: "$"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
+ # End:
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/ltmain.sh orc-0.4.3/ltmain.sh
+--- orc-0.4.3.old/ltmain.sh 2009-12-14 02:20:03.000000000 +0100
++++ orc-0.4.3/ltmain.sh 2010-02-02 12:18:08.828405777 +0100
+@@ -65,7 +65,7 @@
+ # compiler: $LTCC
+ # compiler flags: $LTCFLAGS
+ # linker: $LD (gnu? $with_gnu_ld)
+-# $progname: (GNU libtool) 2.2.6b
++# $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2
+ # automake: $automake_version
+ # autoconf: $autoconf_version
+ #
+@@ -73,7 +73,7 @@
+
+ PROGRAM=ltmain.sh
+ PACKAGE=libtool
+-VERSION=2.2.6b
++VERSION="2.2.6b Debian-2.2.6b-2"
+ TIMESTAMP=""
+ package_revision=1.3017
+
+@@ -5033,7 +5033,10 @@
+ case $pass in
+ dlopen) libs="$dlfiles" ;;
+ dlpreopen) libs="$dlprefiles" ;;
+- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
++ link)
++ libs="$deplibs %DEPLIBS%"
++ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
++ ;;
+ esac
+ fi
+ if test "$linkmode,$pass" = "lib,dlpreopen"; then
+@@ -5344,19 +5347,19 @@
+ # It is a libtool convenience library, so add in its objects.
+ convenience="$convenience $ladir/$objdir/$old_library"
+ old_convenience="$old_convenience $ladir/$objdir/$old_library"
++ tmp_libs=
++ for deplib in $dependency_libs; do
++ deplibs="$deplib $deplibs"
++ if $opt_duplicate_deps ; then
++ case "$tmp_libs " in
++ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++ esac
++ fi
++ tmp_libs="$tmp_libs $deplib"
++ done
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ func_fatal_error "\`$lib' is not a convenience library"
+ fi
+- tmp_libs=
+- for deplib in $dependency_libs; do
+- deplibs="$deplib $deplibs"
+- if $opt_duplicate_deps ; then
+- case "$tmp_libs " in
+- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+- esac
+- fi
+- tmp_libs="$tmp_libs $deplib"
+- done
+ continue
+ fi # $pass = conv
+
+@@ -5893,6 +5896,7 @@
+ if test "$link_all_deplibs" != no; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
++ path=
+ case $deplib in
+ -L*) path="$deplib" ;;
+ *.la)
+@@ -6206,6 +6210,9 @@
+ revision="$number_minor"
+ lt_irix_increment=no
+ ;;
++ *)
++ func_fatal_configuration "$modename: unknown library version type \`$version_type'"
++ ;;
+ esac
+ ;;
+ no)
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/m4/libtool.m4 orc-0.4.3/m4/libtool.m4
+--- orc-0.4.3.old/m4/libtool.m4 2009-12-14 02:20:03.000000000 +0100
++++ orc-0.4.3/m4/libtool.m4 2010-02-02 12:18:08.928379157 +0100
+@@ -2254,7 +2254,7 @@
+ ;;
+
+ *)
+- library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} ${libname}${versuffix}.lib'
++ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+@@ -2445,7 +2445,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux* | k*bsd*-gnu)
++linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+@@ -2485,6 +2485,18 @@
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
++netbsdelf*-gnu)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ hardcode_into_libs=yes
++ dynamic_linker='NetBSD ld.elf_so'
++ ;;
++
+ netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+@@ -3072,11 +3084,11 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux* | k*bsd*-gnu)
++linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+-netbsd*)
++netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+@@ -3693,7 +3705,7 @@
+ ;;
+ esac
+ ;;
+- linux* | k*bsd*-gnu)
++ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+@@ -3757,7 +3769,7 @@
+ ;;
+ esac
+ ;;
+- netbsd*)
++ netbsd* | netbsdelf*-gnu)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+@@ -3977,7 +3989,7 @@
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+- linux* | k*bsd*-gnu)
++ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+@@ -4182,6 +4194,9 @@
+ cygwin* | mingw* | cegcc*)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
++ linux* | k*bsd*-gnu)
++ _LT_TAGVAR(link_all_deplibs, $1)=no
++ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+@@ -4246,6 +4261,9 @@
+ openbsd*)
+ with_gnu_ld=no
+ ;;
++ linux* | k*bsd*-gnu)
++ _LT_TAGVAR(link_all_deplibs, $1)=no
++ ;;
+ esac
+
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+@@ -4267,6 +4285,7 @@
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
++ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+@@ -4358,7 +4377,7 @@
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+- gnu* | linux* | tpf* | k*bsd*-gnu)
++ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+@@ -4428,7 +4447,7 @@
+ fi
+ ;;
+
+- netbsd*)
++ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+@@ -4603,6 +4622,7 @@
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
++ _LT_TAGVAR(link_all_deplibs, $1)=no
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+@@ -4689,7 +4709,8 @@
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+- _LT_TAGVAR(fix_srcfile_path, $1)=
++ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+@@ -4840,7 +4861,7 @@
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+- netbsd*)
++ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+@@ -5840,7 +5861,7 @@
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ ;;
+
+- linux* | k*bsd*-gnu)
++ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/Makefile.in orc-0.4.3/Makefile.in
+--- orc-0.4.3.old/Makefile.in 2009-12-14 02:20:11.000000000 +0100
++++ orc-0.4.3/Makefile.in 2010-02-02 12:18:15.131377659 +0100
+@@ -1,8 +1,9 @@
+-# Makefile.in generated by automake 1.10.2 from Makefile.am.
++# Makefile.in generated by automake 1.11.1 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -16,8 +17,9 @@
+
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+-pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+@@ -55,6 +57,7 @@
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = config.h
+ CONFIG_CLEAN_FILES = orc-uninstalled.pc orc.pc
++CONFIG_CLEAN_VPATH_FILES =
+ SOURCES =
+ DIST_SOURCES =
+ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+@@ -69,12 +72,29 @@
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
++am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
++am__install_max = 40
++am__nobase_strip_setup = \
++ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
++am__nobase_strip = \
++ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
++am__nobase_list = $(am__nobase_strip_setup); \
++ for p in $$list; do echo "$$p $$p"; done | \
++ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
++ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
++ if (++n[$$2] == $(am__install_max)) \
++ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
++ END { for (dir in files) print dir, files[dir] }'
++am__base_list = \
++ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
++ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+ am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
+-pkgconfigDATA_INSTALL = $(INSTALL_DATA)
+ DATA = $(pkgconfig_DATA)
+ RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
++AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
++ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
++ distdir dist dist-all distcheck
+ ETAGS = etags
+ CTAGS = ctags
+ DIST_SUBDIRS = $(SUBDIRS)
+@@ -82,9 +102,34 @@
+ distdir = $(PACKAGE)-$(VERSION)
+ top_distdir = $(distdir)
+ am__remove_distdir = \
+- { test ! -d $(distdir) \
+- || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+- && rm -fr $(distdir); }; }
++ { test ! -d "$(distdir)" \
++ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
++ && rm -fr "$(distdir)"; }; }
++am__relativize = \
++ dir0=`pwd`; \
++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
++ sed_rest='s,^[^/]*/*,,'; \
++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
++ sed_butlast='s,/*[^/]*$$,,'; \
++ while test -n "$$dir1"; do \
++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
++ if test "$$first" != "."; then \
++ if test "$$first" = ".."; then \
++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
++ else \
++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
++ if test "$$first2" = "$$first"; then \
++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
++ else \
++ dir2="../$$dir2"; \
++ fi; \
++ dir0="$$dir0"/"$$first"; \
++ fi; \
++ fi; \
++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
++ done; \
++ reldir="$$dir2"
+ DIST_ARCHIVES = $(distdir).tar.gz
+ GZIP_ENV = --best
+ distuninstallcheck_listfiles = find . -type f -print
+@@ -155,6 +200,7 @@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+@@ -236,15 +282,15 @@
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+- echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
+- cd $(srcdir) && $(AUTOMAKE) --foreign \
++ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
++ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+- cd $(top_srcdir) && \
+- $(AUTOMAKE) --foreign Makefile
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --foreign Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+@@ -260,9 +306,10 @@
+ $(SHELL) ./config.status --recheck
+
+ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+- cd $(srcdir) && $(AUTOCONF)
++ $(am__cd) $(srcdir) && $(AUTOCONF)
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+- cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
++ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
++$(am__aclocal_m4_deps):
+
+ config.h: stamp-h1
+ @if test ! -f $@; then \
+@@ -274,7 +321,7 @@
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+ $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+- cd $(top_srcdir) && $(AUTOHEADER)
++ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+@@ -296,20 +343,23 @@
+ install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+- @list='$(pkgconfig_DATA)'; for p in $$list; do \
++ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
++ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+- f=$(am__strip_dir) \
+- echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+- $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
++ echo "$$d$$p"; \
++ done | $(am__base_list) | \
++ while read files; do \
++ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
++ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+ done
+
+ uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+- @list='$(pkgconfig_DATA)'; for p in $$list; do \
+- f=$(am__strip_dir) \
+- echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+- rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
+- done
++ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
++ test -n "$$files" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+
+ # This directory's subdirectories are mostly independent; you can cd
+ # into them and run `make' without going through this Makefile.
+@@ -318,7 +368,7 @@
+ # (which will cause the Makefiles to be regenerated when you run `make');
+ # (2) otherwise, pass the desired values on the `make' command line.
+ $(RECURSIVE_TARGETS):
+- @failcom='exit 1'; \
++ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+@@ -335,7 +385,7 @@
+ else \
+ local_target="$$target"; \
+ fi; \
+- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+@@ -343,7 +393,7 @@
+ fi; test -z "$$fail"
+
+ $(RECURSIVE_CLEAN_TARGETS):
+- @failcom='exit 1'; \
++ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+@@ -369,16 +419,16 @@
+ else \
+ local_target="$$target"; \
+ fi; \
+- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+ tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
++ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
++ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+@@ -393,7 +443,7 @@
+
+ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
++ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+@@ -405,7 +455,7 @@
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+- tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+@@ -414,36 +464,41 @@
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+- $$tags $$unique; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
+ fi
+ ctags: CTAGS
+ CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- test -z "$(CTAGS_ARGS)$$tags$$unique" \
++ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+- $$tags $$unique
++ $$unique
+
+ GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+- && cd $(top_srcdir) \
+- && gtags -i $(GTAGS_ARGS) $$here
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
+
+ distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+ distdir: $(DISTFILES)
+ $(am__remove_distdir)
+- test -d $(distdir) || mkdir $(distdir)
++ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+@@ -459,38 +514,55 @@
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+- test -f $(distdir)/$$file \
+- || cp -p $$d/$$file $(distdir)/$$file \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+- list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+- distdir=`$(am__cd) $(distdir) && pwd`; \
+- top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+- (cd $$subdir && \
++ fi; \
++ done
++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
++ $(am__relativize); \
++ new_distdir=$$reldir; \
++ dir1=$$subdir; dir2="$(top_distdir)"; \
++ $(am__relativize); \
++ new_top_distdir=$$reldir; \
++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
++ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+- top_distdir="$$top_distdir" \
+- distdir="$$distdir/$$subdir" \
++ top_distdir="$$new_top_distdir" \
++ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
++ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+- -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
++ -test -n "$(am__skip_mode_fix)" \
++ || find "$(distdir)" -type d ! -perm -755 \
++ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+- || chmod -R a+r $(distdir)
++ || chmod -R a+r "$(distdir)"
+ dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+@@ -503,6 +575,10 @@
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__remove_distdir)
+
++dist-xz: distdir
++ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
++ $(am__remove_distdir)
++
+ dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+@@ -526,15 +602,17 @@
+ distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+- GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
++ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+- bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
++ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lzma*) \
+- unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
++ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
++ *.tar.xz*) \
++ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+- GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
++ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+@@ -542,9 +620,11 @@
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
++ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+- && cd $(distdir)/_build \
++ && am__cwd=`pwd` \
++ && $(am__cd) $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+@@ -566,13 +646,15 @@
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+- && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
++ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
++ && cd "$$am__cwd" \
++ || exit 1
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+ distuninstallcheck:
+- @cd $(distuninstallcheck_dir) \
++ @$(am__cd) '$(distuninstallcheck_dir)' \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+@@ -620,6 +702,7 @@
+
+ distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+ maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+@@ -641,6 +724,8 @@
+
+ html: html-recursive
+
++html-am:
++
+ info: info-recursive
+
+ info-am:
+@@ -649,18 +734,28 @@
+
+ install-dvi: install-dvi-recursive
+
++install-dvi-am:
++
+ install-exec-am:
+
+ install-html: install-html-recursive
+
++install-html-am:
++
+ install-info: install-info-recursive
+
++install-info-am:
++
+ install-man:
+
+ install-pdf: install-pdf-recursive
+
++install-pdf-am:
++
+ install-ps: install-ps-recursive
+
++install-ps-am:
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-recursive
+@@ -683,25 +778,26 @@
+
+ uninstall-am: uninstall-pkgconfigDATA
+
+-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+- install-strip
++.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
++ ctags-recursive install install-am install-strip \
++ tags-recursive
+
+ .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-generic \
+ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
+- dist-gzip dist-lzma dist-shar dist-tarZ dist-zip distcheck \
+- distclean distclean-generic distclean-hdr distclean-libtool \
+- distclean-tags distcleancheck distdir distuninstallcheck dvi \
+- dvi-am html html-am info info-am install install-am \
+- install-data install-data-am install-dvi install-dvi-am \
+- install-exec install-exec-am install-html install-html-am \
+- install-info install-info-am install-man install-pdf \
+- install-pdf-am install-pkgconfigDATA install-ps install-ps-am \
+- install-strip installcheck installcheck-am installdirs \
+- installdirs-am maintainer-clean maintainer-clean-generic \
+- mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+- ps ps-am tags tags-recursive uninstall uninstall-am \
+- uninstall-pkgconfigDATA
++ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
++ distcheck distclean distclean-generic distclean-hdr \
++ distclean-libtool distclean-tags distcleancheck distdir \
++ distuninstallcheck dvi dvi-am html html-am info info-am \
++ install install-am install-data install-data-am install-dvi \
++ install-dvi-am install-exec install-exec-am install-html \
++ install-html-am install-info install-info-am install-man \
++ install-pdf install-pdf-am install-pkgconfigDATA install-ps \
++ install-ps-am install-strip installcheck installcheck-am \
++ installdirs installdirs-am maintainer-clean \
++ maintainer-clean-generic mostlyclean mostlyclean-generic \
++ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
++ uninstall uninstall-am uninstall-pkgconfigDATA
+
+
+ orc-$(ORC_MAJORMINOR).pc: orc.pc
+@@ -709,6 +805,7 @@
+
+ orc-$(ORC_MAJORMINOR)-uninstalled.pc: orc-uninstalled.pc
+ cp orc-uninstalled.pc orc-$(ORC_MAJORMINOR)-uninstalled.pc
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/missing orc-0.4.3/missing
+--- orc-0.4.3.old/missing 2009-12-14 02:20:10.000000000 +0100
++++ orc-0.4.3/missing 2010-02-02 12:18:14.395380273 +0100
+@@ -1,10 +1,10 @@
+ #! /bin/sh
+ # Common stub for a few missing GNU programs while installing.
+
+-scriptversion=2006-05-10.23
++scriptversion=2009-04-28.21; # UTC
+
+-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
+-# Free Software Foundation, Inc.
++# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
++# 2008, 2009 Free Software Foundation, Inc.
+ # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+ # This program is free software; you can redistribute it and/or modify
+@@ -18,9 +18,7 @@
+ # 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., 51 Franklin Street, Fifth Floor, Boston, MA
+-# 02110-1301, USA.
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+@@ -89,6 +87,9 @@
+ tar try tar, gnutar, gtar, then tar without non-portable flags
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
+
++Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
++\`g' are ignored when checking the name.
++
+ Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+@@ -106,15 +107,22 @@
+
+ esac
+
++# normalize program name to check for.
++program=`echo "$1" | sed '
++ s/^gnu-//; t
++ s/^gnu//; t
++ s/^g//; t'`
++
+ # Now exit if we have it, but it failed. Also exit now if we
+ # don't have it and --version was passed (most likely to detect
+-# the program).
++# the program). This is about non-GNU programs, so use $1 not
++# $program.
+ case $1 in
+- lex|yacc)
++ lex*|yacc*)
+ # Not GNU programs, they don't have --version.
+ ;;
+
+- tar)
++ tar*)
+ if test -n "$run"; then
+ echo 1>&2 "ERROR: \`tar' requires --run"
+ exit 1
+@@ -138,7 +146,7 @@
+
+ # If it does not exist, or fails to run (possibly an outdated version),
+ # try to emulate it.
+-case $1 in
++case $program in
+ aclocal*)
+ echo 1>&2 "\
+ WARNING: \`$1' is $msg. You should only need it if
+@@ -148,7 +156,7 @@
+ touch aclocal.m4
+ ;;
+
+- autoconf)
++ autoconf*)
+ echo 1>&2 "\
+ WARNING: \`$1' is $msg. You should only need it if
+ you modified \`${configure_ac}'. You might want to install the
+@@ -157,7 +165,7 @@
+ touch configure
+ ;;
+
+- autoheader)
++ autoheader*)
+ echo 1>&2 "\
+ WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
+@@ -187,7 +195,7 @@
+ while read f; do touch "$f"; done
+ ;;
+
+- autom4te)
++ autom4te*)
+ echo 1>&2 "\
+ WARNING: \`$1' is needed, but is $msg.
+ You might have modified some files without having the
+@@ -210,7 +218,7 @@
+ fi
+ ;;
+
+- bison|yacc)
++ bison*|yacc*)
+ echo 1>&2 "\
+ WARNING: \`$1' $msg. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+@@ -240,7 +248,7 @@
+ fi
+ ;;
+
+- lex|flex)
++ lex*|flex*)
+ echo 1>&2 "\
+ WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+@@ -263,7 +271,7 @@
+ fi
+ ;;
+
+- help2man)
++ help2man*)
+ echo 1>&2 "\
+ WARNING: \`$1' is $msg. You should only need it if
+ you modified a dependency of a manual page. You may need the
+@@ -277,11 +285,11 @@
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+- exit 1
++ exit $?
+ fi
+ ;;
+
+- makeinfo)
++ makeinfo*)
+ echo 1>&2 "\
+ WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+@@ -310,7 +318,7 @@
+ touch $file
+ ;;
+
+- tar)
++ tar*)
+ shift
+
+ # We have already tried tar in the generic part.
+@@ -363,5 +371,6 @@
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+ # time-stamp-start: "scriptversion="
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
+-# time-stamp-end: "$"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
+ # End:
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/orc/Makefile.in orc-0.4.3/orc/Makefile.in
+--- orc-0.4.3.old/orc/Makefile.in 2009-12-14 02:20:11.000000000 +0100
++++ orc-0.4.3/orc/Makefile.in 2010-02-02 12:18:14.891377460 +0100
+@@ -1,8 +1,9 @@
+-# Makefile.in generated by automake 1.10.2 from Makefile.am.
++# Makefile.in generated by automake 1.11.1 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -18,6 +19,7 @@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+@@ -54,19 +56,34 @@
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = $(top_builddir)/config.h
+ CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
+ am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+ am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
++am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
++am__install_max = 40
++am__nobase_strip_setup = \
++ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
++am__nobase_strip = \
++ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
++am__nobase_list = $(am__nobase_strip_setup); \
++ for p in $$list; do echo "$$p $$p"; done | \
++ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
++ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
++ if (++n[$$2] == $(am__install_max)) \
++ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
++ END { for (dir in files) print dir, files[dir] }'
++am__base_list = \
++ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
++ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)" \
+ "$(DESTDIR)$(pkgincludedir)"
+-libLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(lib_LTLIBRARIES)
+ liborc_@ORC_MAJORMINOR@_la_LIBADD =
+ am__liborc_@ORC_MAJORMINOR@_la_SOURCES_DIST = orc.c orcexecutor.c \
+- orcfunctions.c orcrule.c orccodemem.c orcprogram.c \
++ orcfunctions.c orcutils.c orcrule.c orccodemem.c orcprogram.c \
+ orccompiler.c orcprogram-arm.c orcprogram-c.c \
+ orcprogram-c64x-c.c orcprogram-altivec.c orcprogram-mmx.c \
+ orcprogram-sse.c orcprogram.h orcopcodes.c orcparse.c \
+@@ -84,6 +101,7 @@
+ liborc_@ORC_MAJORMINOR@_la-orc.lo \
+ liborc_@ORC_MAJORMINOR@_la-orcexecutor.lo \
+ liborc_@ORC_MAJORMINOR@_la-orcfunctions.lo \
++ liborc_@ORC_MAJORMINOR@_la-orcutils.lo \
+ liborc_@ORC_MAJORMINOR@_la-orcrule.lo \
+ liborc_@ORC_MAJORMINOR@_la-orccodemem.lo \
+ liborc_@ORC_MAJORMINOR@_la-orcprogram.lo \
+@@ -117,6 +135,7 @@
+ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
++am__mv = mv -f
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+@@ -128,8 +147,6 @@
+ $(LDFLAGS) -o $@
+ SOURCES = $(liborc_@ORC_MAJORMINOR@_la_SOURCES)
+ DIST_SOURCES = $(am__liborc_@ORC_MAJORMINOR@_la_SOURCES_DIST)
+-nodist_pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+-pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+ HEADERS = $(nodist_pkginclude_HEADERS) $(pkginclude_HEADERS)
+ ETAGS = etags
+ CTAGS = ctags
+@@ -201,6 +218,7 @@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+@@ -273,7 +291,7 @@
+ -DORC_ENABLE_UNSTABLE_API
+
+ liborc_@ORC_MAJORMINOR@_la_SOURCES = orc.c orcexecutor.c \
+- orcfunctions.c orcrule.c orccodemem.c orcprogram.c \
++ orcfunctions.c orcutils.c orcrule.c orccodemem.c orcprogram.c \
+ orccompiler.c orcprogram-arm.c orcprogram-c.c \
+ orcprogram-c64x-c.c orcprogram-altivec.c orcprogram-mmx.c \
+ orcprogram-sse.c orcprogram.h orcopcodes.c orcparse.c \
+@@ -311,9 +329,9 @@
+ exit 1;; \
+ esac; \
+ done; \
+- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu orc/Makefile'; \
+- cd $(top_srcdir) && \
+- $(AUTOMAKE) --gnu orc/Makefile
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu orc/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu orc/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+@@ -331,23 +349,28 @@
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
+ install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
++ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
++ list2=; for p in $$list; do \
+ if test -f $$p; then \
+- f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
++ list2="$$list2 $$p"; \
+ else :; fi; \
+- done
++ done; \
++ test -z "$$list2" || { \
++ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
++ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
++ }
+
+ uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+- p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
++ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
++ for p in $$list; do \
++ $(am__strip_dir) \
++ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
++ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+ clean-libLTLIBRARIES:
+@@ -395,231 +418,239 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-sse.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcsse.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcutils.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcx86.Plo@am__quote@
+
+ .c.o:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+ .c.obj:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ .c.lo:
+ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+ liborc_@ORC_MAJORMINOR@_la-orc.lo: orc.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orc.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orc.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orc.lo `test -f 'orc.c' || echo '$(srcdir)/'`orc.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orc.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orc.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orc.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orc.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orc.lo `test -f 'orc.c' || echo '$(srcdir)/'`orc.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orc.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orc.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orc.c' object='liborc_@ORC_MAJORMINOR@_la-orc.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orc.lo `test -f 'orc.c' || echo '$(srcdir)/'`orc.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orc.lo `test -f 'orc.c' || echo '$(srcdir)/'`orc.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcexecutor.lo: orcexecutor.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcexecutor.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcexecutor.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcexecutor.lo `test -f 'orcexecutor.c' || echo '$(srcdir)/'`orcexecutor.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcexecutor.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcexecutor.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcexecutor.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcexecutor.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcexecutor.lo `test -f 'orcexecutor.c' || echo '$(srcdir)/'`orcexecutor.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcexecutor.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcexecutor.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcexecutor.c' object='liborc_@ORC_MAJORMINOR@_la-orcexecutor.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcexecutor.lo `test -f 'orcexecutor.c' || echo '$(srcdir)/'`orcexecutor.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcexecutor.lo `test -f 'orcexecutor.c' || echo '$(srcdir)/'`orcexecutor.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcfunctions.lo: orcfunctions.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcfunctions.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcfunctions.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcfunctions.lo `test -f 'orcfunctions.c' || echo '$(srcdir)/'`orcfunctions.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcfunctions.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcfunctions.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcfunctions.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcfunctions.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcfunctions.lo `test -f 'orcfunctions.c' || echo '$(srcdir)/'`orcfunctions.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcfunctions.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcfunctions.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcfunctions.c' object='liborc_@ORC_MAJORMINOR@_la-orcfunctions.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcfunctions.lo `test -f 'orcfunctions.c' || echo '$(srcdir)/'`orcfunctions.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcfunctions.lo `test -f 'orcfunctions.c' || echo '$(srcdir)/'`orcfunctions.c
++
++liborc_@ORC_MAJORMINOR@_la-orcutils.lo: orcutils.c
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcutils.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcutils.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcutils.lo `test -f 'orcutils.c' || echo '$(srcdir)/'`orcutils.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcutils.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcutils.Plo
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcutils.c' object='liborc_@ORC_MAJORMINOR@_la-orcutils.lo' libtool=yes @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcutils.lo `test -f 'orcutils.c' || echo '$(srcdir)/'`orcutils.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcrule.lo: orcrule.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcrule.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrule.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcrule.lo `test -f 'orcrule.c' || echo '$(srcdir)/'`orcrule.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrule.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrule.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcrule.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrule.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcrule.lo `test -f 'orcrule.c' || echo '$(srcdir)/'`orcrule.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrule.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrule.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcrule.c' object='liborc_@ORC_MAJORMINOR@_la-orcrule.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcrule.lo `test -f 'orcrule.c' || echo '$(srcdir)/'`orcrule.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcrule.lo `test -f 'orcrule.c' || echo '$(srcdir)/'`orcrule.c
+
+ liborc_@ORC_MAJORMINOR@_la-orccodemem.lo: orccodemem.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orccodemem.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccodemem.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orccodemem.lo `test -f 'orccodemem.c' || echo '$(srcdir)/'`orccodemem.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccodemem.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccodemem.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orccodemem.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccodemem.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orccodemem.lo `test -f 'orccodemem.c' || echo '$(srcdir)/'`orccodemem.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccodemem.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccodemem.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orccodemem.c' object='liborc_@ORC_MAJORMINOR@_la-orccodemem.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orccodemem.lo `test -f 'orccodemem.c' || echo '$(srcdir)/'`orccodemem.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orccodemem.lo `test -f 'orccodemem.c' || echo '$(srcdir)/'`orccodemem.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcprogram.lo: orcprogram.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram.lo `test -f 'orcprogram.c' || echo '$(srcdir)/'`orcprogram.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram.lo `test -f 'orcprogram.c' || echo '$(srcdir)/'`orcprogram.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcprogram.c' object='liborc_@ORC_MAJORMINOR@_la-orcprogram.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram.lo `test -f 'orcprogram.c' || echo '$(srcdir)/'`orcprogram.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram.lo `test -f 'orcprogram.c' || echo '$(srcdir)/'`orcprogram.c
+
+ liborc_@ORC_MAJORMINOR@_la-orccompiler.lo: orccompiler.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orccompiler.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccompiler.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orccompiler.lo `test -f 'orccompiler.c' || echo '$(srcdir)/'`orccompiler.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccompiler.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccompiler.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orccompiler.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccompiler.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orccompiler.lo `test -f 'orccompiler.c' || echo '$(srcdir)/'`orccompiler.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccompiler.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccompiler.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orccompiler.c' object='liborc_@ORC_MAJORMINOR@_la-orccompiler.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orccompiler.lo `test -f 'orccompiler.c' || echo '$(srcdir)/'`orccompiler.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orccompiler.lo `test -f 'orccompiler.c' || echo '$(srcdir)/'`orccompiler.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.lo: orcprogram-arm.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.lo `test -f 'orcprogram-arm.c' || echo '$(srcdir)/'`orcprogram-arm.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.lo `test -f 'orcprogram-arm.c' || echo '$(srcdir)/'`orcprogram-arm.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcprogram-arm.c' object='liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.lo `test -f 'orcprogram-arm.c' || echo '$(srcdir)/'`orcprogram-arm.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-arm.lo `test -f 'orcprogram-arm.c' || echo '$(srcdir)/'`orcprogram-arm.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcprogram-c.lo: orcprogram-c.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram-c.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-c.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-c.lo `test -f 'orcprogram-c.c' || echo '$(srcdir)/'`orcprogram-c.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-c.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-c.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram-c.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-c.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-c.lo `test -f 'orcprogram-c.c' || echo '$(srcdir)/'`orcprogram-c.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-c.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-c.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcprogram-c.c' object='liborc_@ORC_MAJORMINOR@_la-orcprogram-c.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-c.lo `test -f 'orcprogram-c.c' || echo '$(srcdir)/'`orcprogram-c.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-c.lo `test -f 'orcprogram-c.c' || echo '$(srcdir)/'`orcprogram-c.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.lo: orcprogram-c64x-c.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.lo `test -f 'orcprogram-c64x-c.c' || echo '$(srcdir)/'`orcprogram-c64x-c.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.lo `test -f 'orcprogram-c64x-c.c' || echo '$(srcdir)/'`orcprogram-c64x-c.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcprogram-c64x-c.c' object='liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.lo `test -f 'orcprogram-c64x-c.c' || echo '$(srcdir)/'`orcprogram-c64x-c.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-c64x-c.lo `test -f 'orcprogram-c64x-c.c' || echo '$(srcdir)/'`orcprogram-c64x-c.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.lo: orcprogram-altivec.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.lo `test -f 'orcprogram-altivec.c' || echo '$(srcdir)/'`orcprogram-altivec.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.lo `test -f 'orcprogram-altivec.c' || echo '$(srcdir)/'`orcprogram-altivec.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcprogram-altivec.c' object='liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.lo `test -f 'orcprogram-altivec.c' || echo '$(srcdir)/'`orcprogram-altivec.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-altivec.lo `test -f 'orcprogram-altivec.c' || echo '$(srcdir)/'`orcprogram-altivec.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.lo: orcprogram-mmx.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.lo `test -f 'orcprogram-mmx.c' || echo '$(srcdir)/'`orcprogram-mmx.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.lo `test -f 'orcprogram-mmx.c' || echo '$(srcdir)/'`orcprogram-mmx.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcprogram-mmx.c' object='liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.lo `test -f 'orcprogram-mmx.c' || echo '$(srcdir)/'`orcprogram-mmx.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-mmx.lo `test -f 'orcprogram-mmx.c' || echo '$(srcdir)/'`orcprogram-mmx.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.lo: orcprogram-sse.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.lo `test -f 'orcprogram-sse.c' || echo '$(srcdir)/'`orcprogram-sse.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.lo `test -f 'orcprogram-sse.c' || echo '$(srcdir)/'`orcprogram-sse.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcprogram-sse.c' object='liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.lo `test -f 'orcprogram-sse.c' || echo '$(srcdir)/'`orcprogram-sse.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcprogram-sse.lo `test -f 'orcprogram-sse.c' || echo '$(srcdir)/'`orcprogram-sse.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcopcodes.lo: orcopcodes.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcopcodes.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcopcodes.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcopcodes.lo `test -f 'orcopcodes.c' || echo '$(srcdir)/'`orcopcodes.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcopcodes.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcopcodes.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcopcodes.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcopcodes.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcopcodes.lo `test -f 'orcopcodes.c' || echo '$(srcdir)/'`orcopcodes.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcopcodes.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcopcodes.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcopcodes.c' object='liborc_@ORC_MAJORMINOR@_la-orcopcodes.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcopcodes.lo `test -f 'orcopcodes.c' || echo '$(srcdir)/'`orcopcodes.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcopcodes.lo `test -f 'orcopcodes.c' || echo '$(srcdir)/'`orcopcodes.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcparse.lo: orcparse.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcparse.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcparse.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcparse.lo `test -f 'orcparse.c' || echo '$(srcdir)/'`orcparse.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcparse.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcparse.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcparse.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcparse.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcparse.lo `test -f 'orcparse.c' || echo '$(srcdir)/'`orcparse.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcparse.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcparse.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcparse.c' object='liborc_@ORC_MAJORMINOR@_la-orcparse.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcparse.lo `test -f 'orcparse.c' || echo '$(srcdir)/'`orcparse.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcparse.lo `test -f 'orcparse.c' || echo '$(srcdir)/'`orcparse.c
+
+ liborc_@ORC_MAJORMINOR@_la-orconce.lo: orconce.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orconce.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orconce.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orconce.lo `test -f 'orconce.c' || echo '$(srcdir)/'`orconce.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orconce.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orconce.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orconce.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orconce.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orconce.lo `test -f 'orconce.c' || echo '$(srcdir)/'`orconce.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orconce.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orconce.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orconce.c' object='liborc_@ORC_MAJORMINOR@_la-orconce.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orconce.lo `test -f 'orconce.c' || echo '$(srcdir)/'`orconce.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orconce.lo `test -f 'orconce.c' || echo '$(srcdir)/'`orconce.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.lo: orcrules-altivec.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.lo `test -f 'orcrules-altivec.c' || echo '$(srcdir)/'`orcrules-altivec.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.lo `test -f 'orcrules-altivec.c' || echo '$(srcdir)/'`orcrules-altivec.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcrules-altivec.c' object='liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.lo `test -f 'orcrules-altivec.c' || echo '$(srcdir)/'`orcrules-altivec.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-altivec.lo `test -f 'orcrules-altivec.c' || echo '$(srcdir)/'`orcrules-altivec.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.lo: orcrules-mmx.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.lo `test -f 'orcrules-mmx.c' || echo '$(srcdir)/'`orcrules-mmx.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.lo `test -f 'orcrules-mmx.c' || echo '$(srcdir)/'`orcrules-mmx.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcrules-mmx.c' object='liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.lo `test -f 'orcrules-mmx.c' || echo '$(srcdir)/'`orcrules-mmx.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-mmx.lo `test -f 'orcrules-mmx.c' || echo '$(srcdir)/'`orcrules-mmx.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcrules-sse.lo: orcrules-sse.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcrules-sse.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-sse.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-sse.lo `test -f 'orcrules-sse.c' || echo '$(srcdir)/'`orcrules-sse.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-sse.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-sse.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcrules-sse.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-sse.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-sse.lo `test -f 'orcrules-sse.c' || echo '$(srcdir)/'`orcrules-sse.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-sse.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-sse.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcrules-sse.c' object='liborc_@ORC_MAJORMINOR@_la-orcrules-sse.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-sse.lo `test -f 'orcrules-sse.c' || echo '$(srcdir)/'`orcrules-sse.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-sse.lo `test -f 'orcrules-sse.c' || echo '$(srcdir)/'`orcrules-sse.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcrules-arm.lo: orcrules-arm.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcrules-arm.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-arm.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-arm.lo `test -f 'orcrules-arm.c' || echo '$(srcdir)/'`orcrules-arm.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-arm.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-arm.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcrules-arm.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-arm.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-arm.lo `test -f 'orcrules-arm.c' || echo '$(srcdir)/'`orcrules-arm.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-arm.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcrules-arm.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcrules-arm.c' object='liborc_@ORC_MAJORMINOR@_la-orcrules-arm.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-arm.lo `test -f 'orcrules-arm.c' || echo '$(srcdir)/'`orcrules-arm.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcrules-arm.lo `test -f 'orcrules-arm.c' || echo '$(srcdir)/'`orcrules-arm.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcdebug.lo: orcdebug.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcdebug.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcdebug.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcdebug.lo `test -f 'orcdebug.c' || echo '$(srcdir)/'`orcdebug.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcdebug.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcdebug.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcdebug.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcdebug.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcdebug.lo `test -f 'orcdebug.c' || echo '$(srcdir)/'`orcdebug.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcdebug.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcdebug.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcdebug.c' object='liborc_@ORC_MAJORMINOR@_la-orcdebug.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcdebug.lo `test -f 'orcdebug.c' || echo '$(srcdir)/'`orcdebug.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcdebug.lo `test -f 'orcdebug.c' || echo '$(srcdir)/'`orcdebug.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcpowerpc.lo: orcpowerpc.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcpowerpc.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcpowerpc.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcpowerpc.lo `test -f 'orcpowerpc.c' || echo '$(srcdir)/'`orcpowerpc.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcpowerpc.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcpowerpc.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcpowerpc.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcpowerpc.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcpowerpc.lo `test -f 'orcpowerpc.c' || echo '$(srcdir)/'`orcpowerpc.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcpowerpc.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcpowerpc.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcpowerpc.c' object='liborc_@ORC_MAJORMINOR@_la-orcpowerpc.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcpowerpc.lo `test -f 'orcpowerpc.c' || echo '$(srcdir)/'`orcpowerpc.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcpowerpc.lo `test -f 'orcpowerpc.c' || echo '$(srcdir)/'`orcpowerpc.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcsse.lo: orcsse.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcsse.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcsse.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcsse.lo `test -f 'orcsse.c' || echo '$(srcdir)/'`orcsse.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcsse.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcsse.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcsse.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcsse.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcsse.lo `test -f 'orcsse.c' || echo '$(srcdir)/'`orcsse.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcsse.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcsse.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcsse.c' object='liborc_@ORC_MAJORMINOR@_la-orcsse.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcsse.lo `test -f 'orcsse.c' || echo '$(srcdir)/'`orcsse.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcsse.lo `test -f 'orcsse.c' || echo '$(srcdir)/'`orcsse.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcmmx.lo: orcmmx.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcmmx.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcmmx.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcmmx.lo `test -f 'orcmmx.c' || echo '$(srcdir)/'`orcmmx.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcmmx.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcmmx.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcmmx.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcmmx.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcmmx.lo `test -f 'orcmmx.c' || echo '$(srcdir)/'`orcmmx.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcmmx.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcmmx.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcmmx.c' object='liborc_@ORC_MAJORMINOR@_la-orcmmx.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcmmx.lo `test -f 'orcmmx.c' || echo '$(srcdir)/'`orcmmx.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcmmx.lo `test -f 'orcmmx.c' || echo '$(srcdir)/'`orcmmx.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcx86.lo: orcx86.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcx86.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcx86.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcx86.lo `test -f 'orcx86.c' || echo '$(srcdir)/'`orcx86.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcx86.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcx86.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcx86.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcx86.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcx86.lo `test -f 'orcx86.c' || echo '$(srcdir)/'`orcx86.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcx86.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcx86.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcx86.c' object='liborc_@ORC_MAJORMINOR@_la-orcx86.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcx86.lo `test -f 'orcx86.c' || echo '$(srcdir)/'`orcx86.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcx86.lo `test -f 'orcx86.c' || echo '$(srcdir)/'`orcx86.c
+
+ liborc_@ORC_MAJORMINOR@_la-orcarm.lo: orcarm.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcarm.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcarm.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcarm.lo `test -f 'orcarm.c' || echo '$(srcdir)/'`orcarm.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcarm.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcarm.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orcarm.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcarm.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orcarm.lo `test -f 'orcarm.c' || echo '$(srcdir)/'`orcarm.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcarm.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orcarm.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcarm.c' object='liborc_@ORC_MAJORMINOR@_la-orcarm.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcarm.lo `test -f 'orcarm.c' || echo '$(srcdir)/'`orcarm.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orcarm.lo `test -f 'orcarm.c' || echo '$(srcdir)/'`orcarm.c
+
+ liborc_@ORC_MAJORMINOR@_la-orccpu-x86.lo: orccpu-x86.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orccpu-x86.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-x86.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orccpu-x86.lo `test -f 'orccpu-x86.c' || echo '$(srcdir)/'`orccpu-x86.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-x86.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-x86.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orccpu-x86.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-x86.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orccpu-x86.lo `test -f 'orccpu-x86.c' || echo '$(srcdir)/'`orccpu-x86.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-x86.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-x86.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orccpu-x86.c' object='liborc_@ORC_MAJORMINOR@_la-orccpu-x86.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orccpu-x86.lo `test -f 'orccpu-x86.c' || echo '$(srcdir)/'`orccpu-x86.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orccpu-x86.lo `test -f 'orccpu-x86.c' || echo '$(srcdir)/'`orccpu-x86.c
+
+ liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.lo: orccpu-powerpc.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.lo `test -f 'orccpu-powerpc.c' || echo '$(srcdir)/'`orccpu-powerpc.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.lo `test -f 'orccpu-powerpc.c' || echo '$(srcdir)/'`orccpu-powerpc.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orccpu-powerpc.c' object='liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.lo `test -f 'orccpu-powerpc.c' || echo '$(srcdir)/'`orccpu-powerpc.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orccpu-powerpc.lo `test -f 'orccpu-powerpc.c' || echo '$(srcdir)/'`orccpu-powerpc.c
+
+ liborc_@ORC_MAJORMINOR@_la-orccpu-arm.lo: orccpu-arm.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orccpu-arm.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-arm.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orccpu-arm.lo `test -f 'orccpu-arm.c' || echo '$(srcdir)/'`orccpu-arm.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-arm.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-arm.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_@ORC_MAJORMINOR@_la-orccpu-arm.lo -MD -MP -MF $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-arm.Tpo -c -o liborc_@ORC_MAJORMINOR@_la-orccpu-arm.lo `test -f 'orccpu-arm.c' || echo '$(srcdir)/'`orccpu-arm.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-arm.Tpo $(DEPDIR)/liborc_@ORC_MAJORMINOR@_la-orccpu-arm.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orccpu-arm.c' object='liborc_@ORC_MAJORMINOR@_la-orccpu-arm.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orccpu-arm.lo `test -f 'orccpu-arm.c' || echo '$(srcdir)/'`orccpu-arm.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_@ORC_MAJORMINOR@_la-orccpu-arm.lo `test -f 'orccpu-arm.c' || echo '$(srcdir)/'`orccpu-arm.c
+
+ mostlyclean-libtool:
+ -rm -f *.lo
+@@ -629,37 +660,43 @@
+ install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+- @list='$(nodist_pkginclude_HEADERS)'; for p in $$list; do \
++ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
++ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+- f=$(am__strip_dir) \
+- echo " $(nodist_pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+- $(nodist_pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
++ echo "$$d$$p"; \
++ done | $(am__base_list) | \
++ while read files; do \
++ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
++ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+ uninstall-nodist_pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+- @list='$(nodist_pkginclude_HEADERS)'; for p in $$list; do \
+- f=$(am__strip_dir) \
+- echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+- rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
+- done
++ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
++ test -n "$$files" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+ install-pkgincludeHEADERS: $(pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
++ @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
++ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+- f=$(am__strip_dir) \
+- echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+- $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
++ echo "$$d$$p"; \
++ done | $(am__base_list) | \
++ while read files; do \
++ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
++ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+ uninstall-pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
+- f=$(am__strip_dir) \
+- echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+- rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
+- done
++ @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
++ test -n "$$files" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+@@ -673,7 +710,7 @@
+
+ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
++ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+@@ -681,29 +718,34 @@
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+- $$tags $$unique; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
+ fi
+ ctags: CTAGS
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- test -z "$(CTAGS_ARGS)$$tags$$unique" \
++ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+- $$tags $$unique
++ $$unique
+
+ GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+- && cd $(top_srcdir) \
+- && gtags -i $(GTAGS_ARGS) $$here
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
+
+ distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+@@ -724,13 +766,17 @@
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+- test -f $(distdir)/$$file \
+- || cp -p $$d/$$file $(distdir)/$$file \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+@@ -761,6 +807,7 @@
+
+ distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+ maintainer-clean-generic:
+@@ -783,6 +830,8 @@
+
+ html: html-am
+
++html-am:
++
+ info: info-am
+
+ info-am:
+@@ -792,18 +841,28 @@
+
+ install-dvi: install-dvi-am
+
++install-dvi-am:
++
+ install-exec-am: install-libLTLIBRARIES
+
+ install-html: install-html-am
+
++install-html-am:
++
+ install-info: install-info-am
+
++install-info-am:
++
+ install-man:
+
+ install-pdf: install-pdf-am
+
++install-pdf-am:
++
+ install-ps: install-ps-am
+
++install-ps-am:
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -850,6 +909,7 @@
+ orcfunctions:
+ $(top_builddir)/tools/orcc$(EXEEXT) --implementation -o orcfunctions.c orcfunctions.orc
+ $(top_builddir)/tools/orcc$(EXEEXT) --header -o orcfunctions.h orcfunctions.orc
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/orc-float/Makefile.in orc-0.4.3/orc-float/Makefile.in
+--- orc-0.4.3.old/orc-float/Makefile.in 2009-12-14 02:20:11.000000000 +0100
++++ orc-0.4.3/orc-float/Makefile.in 2010-02-02 12:18:14.587377512 +0100
+@@ -1,8 +1,9 @@
+-# Makefile.in generated by automake 1.10.2 from Makefile.am.
++# Makefile.in generated by automake 1.11.1 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -18,6 +19,7 @@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+@@ -50,14 +52,29 @@
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = $(top_builddir)/config.h
+ CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
+ am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+ am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
++am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
++am__install_max = 40
++am__nobase_strip_setup = \
++ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
++am__nobase_strip = \
++ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
++am__nobase_list = $(am__nobase_strip_setup); \
++ for p in $$list; do echo "$$p $$p"; done | \
++ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
++ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
++ if (++n[$$2] == $(am__install_max)) \
++ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
++ END { for (dir in files) print dir, files[dir] }'
++am__base_list = \
++ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
++ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)"
+-libLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(lib_LTLIBRARIES)
+ am__DEPENDENCIES_1 =
+ liborc_float_@ORC_MAJORMINOR@_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+@@ -73,6 +90,7 @@
+ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
++am__mv = mv -f
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+@@ -84,7 +102,6 @@
+ $(LDFLAGS) -o $@
+ SOURCES = $(liborc_float_@ORC_MAJORMINOR@_la_SOURCES)
+ DIST_SOURCES = $(liborc_float_@ORC_MAJORMINOR@_la_SOURCES)
+-pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+ HEADERS = $(pkginclude_HEADERS)
+ ETAGS = etags
+ CTAGS = ctags
+@@ -156,6 +173,7 @@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+@@ -244,9 +262,9 @@
+ exit 1;; \
+ esac; \
+ done; \
+- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu orc-float/Makefile'; \
+- cd $(top_srcdir) && \
+- $(AUTOMAKE) --gnu orc-float/Makefile
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu orc-float/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu orc-float/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+@@ -264,23 +282,28 @@
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
+ install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
++ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
++ list2=; for p in $$list; do \
+ if test -f $$p; then \
+- f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
++ list2="$$list2 $$p"; \
+ else :; fi; \
+- done
++ done; \
++ test -z "$$list2" || { \
++ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
++ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
++ }
+
+ uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+- p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
++ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
++ for p in $$list; do \
++ $(am__strip_dir) \
++ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
++ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+ clean-libLTLIBRARIES:
+@@ -305,38 +328,38 @@
+
+ .c.o:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+ .c.obj:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ .c.lo:
+ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+ liborc_float_@ORC_MAJORMINOR@_la-orcfloat.lo: orcfloat.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_float_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_float_@ORC_MAJORMINOR@_la-orcfloat.lo -MD -MP -MF $(DEPDIR)/liborc_float_@ORC_MAJORMINOR@_la-orcfloat.Tpo -c -o liborc_float_@ORC_MAJORMINOR@_la-orcfloat.lo `test -f 'orcfloat.c' || echo '$(srcdir)/'`orcfloat.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_float_@ORC_MAJORMINOR@_la-orcfloat.Tpo $(DEPDIR)/liborc_float_@ORC_MAJORMINOR@_la-orcfloat.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_float_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_float_@ORC_MAJORMINOR@_la-orcfloat.lo -MD -MP -MF $(DEPDIR)/liborc_float_@ORC_MAJORMINOR@_la-orcfloat.Tpo -c -o liborc_float_@ORC_MAJORMINOR@_la-orcfloat.lo `test -f 'orcfloat.c' || echo '$(srcdir)/'`orcfloat.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_float_@ORC_MAJORMINOR@_la-orcfloat.Tpo $(DEPDIR)/liborc_float_@ORC_MAJORMINOR@_la-orcfloat.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcfloat.c' object='liborc_float_@ORC_MAJORMINOR@_la-orcfloat.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_float_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_float_@ORC_MAJORMINOR@_la-orcfloat.lo `test -f 'orcfloat.c' || echo '$(srcdir)/'`orcfloat.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_float_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_float_@ORC_MAJORMINOR@_la-orcfloat.lo `test -f 'orcfloat.c' || echo '$(srcdir)/'`orcfloat.c
+
+ liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.lo: orcfloat-sse.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_float_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.lo -MD -MP -MF $(DEPDIR)/liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.Tpo -c -o liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.lo `test -f 'orcfloat-sse.c' || echo '$(srcdir)/'`orcfloat-sse.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.Tpo $(DEPDIR)/liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_float_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.lo -MD -MP -MF $(DEPDIR)/liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.Tpo -c -o liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.lo `test -f 'orcfloat-sse.c' || echo '$(srcdir)/'`orcfloat-sse.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.Tpo $(DEPDIR)/liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcfloat-sse.c' object='liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_float_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.lo `test -f 'orcfloat-sse.c' || echo '$(srcdir)/'`orcfloat-sse.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_float_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_float_@ORC_MAJORMINOR@_la-orcfloat-sse.lo `test -f 'orcfloat-sse.c' || echo '$(srcdir)/'`orcfloat-sse.c
+
+ mostlyclean-libtool:
+ -rm -f *.lo
+@@ -346,20 +369,23 @@
+ install-pkgincludeHEADERS: $(pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
++ @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
++ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+- f=$(am__strip_dir) \
+- echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+- $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
++ echo "$$d$$p"; \
++ done | $(am__base_list) | \
++ while read files; do \
++ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
++ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+ uninstall-pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
+- f=$(am__strip_dir) \
+- echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+- rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
+- done
++ @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
++ test -n "$$files" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+@@ -373,7 +399,7 @@
+
+ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
++ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+@@ -381,29 +407,34 @@
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+- $$tags $$unique; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
+ fi
+ ctags: CTAGS
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- test -z "$(CTAGS_ARGS)$$tags$$unique" \
++ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+- $$tags $$unique
++ $$unique
+
+ GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+- && cd $(top_srcdir) \
+- && gtags -i $(GTAGS_ARGS) $$here
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
+
+ distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+@@ -424,13 +455,17 @@
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+- test -f $(distdir)/$$file \
+- || cp -p $$d/$$file $(distdir)/$$file \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+@@ -461,6 +496,7 @@
+
+ distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+ maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+@@ -482,6 +518,8 @@
+
+ html: html-am
+
++html-am:
++
+ info: info-am
+
+ info-am:
+@@ -490,18 +528,28 @@
+
+ install-dvi: install-dvi-am
+
++install-dvi-am:
++
+ install-exec-am: install-libLTLIBRARIES
+
+ install-html: install-html-am
+
++install-html-am:
++
+ install-info: install-info-am
+
++install-info-am:
++
+ install-man:
+
+ install-pdf: install-pdf-am
+
++install-pdf-am:
++
+ install-ps: install-ps-am
+
++install-ps-am:
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -541,6 +589,7 @@
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS
+
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/orc-pixel/Makefile.in orc-0.4.3/orc-pixel/Makefile.in
+--- orc-0.4.3.old/orc-pixel/Makefile.in 2009-12-14 02:20:11.000000000 +0100
++++ orc-0.4.3/orc-pixel/Makefile.in 2010-02-02 12:18:14.651377550 +0100
+@@ -1,8 +1,9 @@
+-# Makefile.in generated by automake 1.10.2 from Makefile.am.
++# Makefile.in generated by automake 1.11.1 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -18,6 +19,7 @@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+@@ -50,14 +52,29 @@
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = $(top_builddir)/config.h
+ CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
+ am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+ am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
++am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
++am__install_max = 40
++am__nobase_strip_setup = \
++ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
++am__nobase_strip = \
++ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
++am__nobase_list = $(am__nobase_strip_setup); \
++ for p in $$list; do echo "$$p $$p"; done | \
++ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
++ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
++ if (++n[$$2] == $(am__install_max)) \
++ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
++ END { for (dir in files) print dir, files[dir] }'
++am__base_list = \
++ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
++ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)"
+-libLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(lib_LTLIBRARIES)
+ am__DEPENDENCIES_1 =
+ liborc_pixel_@ORC_MAJORMINOR@_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+@@ -73,6 +90,7 @@
+ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
++am__mv = mv -f
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+@@ -84,7 +102,6 @@
+ $(LDFLAGS) -o $@
+ SOURCES = $(liborc_pixel_@ORC_MAJORMINOR@_la_SOURCES)
+ DIST_SOURCES = $(liborc_pixel_@ORC_MAJORMINOR@_la_SOURCES)
+-pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+ HEADERS = $(pkginclude_HEADERS)
+ ETAGS = etags
+ CTAGS = ctags
+@@ -156,6 +173,7 @@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+@@ -244,9 +262,9 @@
+ exit 1;; \
+ esac; \
+ done; \
+- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu orc-pixel/Makefile'; \
+- cd $(top_srcdir) && \
+- $(AUTOMAKE) --gnu orc-pixel/Makefile
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu orc-pixel/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu orc-pixel/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+@@ -264,23 +282,28 @@
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
+ install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
++ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
++ list2=; for p in $$list; do \
+ if test -f $$p; then \
+- f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
++ list2="$$list2 $$p"; \
+ else :; fi; \
+- done
++ done; \
++ test -z "$$list2" || { \
++ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
++ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
++ }
+
+ uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+- p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
++ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
++ for p in $$list; do \
++ $(am__strip_dir) \
++ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
++ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+ clean-libLTLIBRARIES:
+@@ -305,38 +328,38 @@
+
+ .c.o:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+ .c.obj:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ .c.lo:
+ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+ liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.lo: orcpixel.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_pixel_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.lo -MD -MP -MF $(DEPDIR)/liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.Tpo -c -o liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.lo `test -f 'orcpixel.c' || echo '$(srcdir)/'`orcpixel.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.Tpo $(DEPDIR)/liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_pixel_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.lo -MD -MP -MF $(DEPDIR)/liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.Tpo -c -o liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.lo `test -f 'orcpixel.c' || echo '$(srcdir)/'`orcpixel.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.Tpo $(DEPDIR)/liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcpixel.c' object='liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_pixel_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.lo `test -f 'orcpixel.c' || echo '$(srcdir)/'`orcpixel.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_pixel_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel.lo `test -f 'orcpixel.c' || echo '$(srcdir)/'`orcpixel.c
+
+ liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.lo: orcpixel-sse.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_pixel_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.lo -MD -MP -MF $(DEPDIR)/liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.Tpo -c -o liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.lo `test -f 'orcpixel-sse.c' || echo '$(srcdir)/'`orcpixel-sse.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.Tpo $(DEPDIR)/liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_pixel_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.lo -MD -MP -MF $(DEPDIR)/liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.Tpo -c -o liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.lo `test -f 'orcpixel-sse.c' || echo '$(srcdir)/'`orcpixel-sse.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.Tpo $(DEPDIR)/liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcpixel-sse.c' object='liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_pixel_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.lo `test -f 'orcpixel-sse.c' || echo '$(srcdir)/'`orcpixel-sse.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_pixel_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_pixel_@ORC_MAJORMINOR@_la-orcpixel-sse.lo `test -f 'orcpixel-sse.c' || echo '$(srcdir)/'`orcpixel-sse.c
+
+ mostlyclean-libtool:
+ -rm -f *.lo
+@@ -346,20 +369,23 @@
+ install-pkgincludeHEADERS: $(pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
++ @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
++ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+- f=$(am__strip_dir) \
+- echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+- $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
++ echo "$$d$$p"; \
++ done | $(am__base_list) | \
++ while read files; do \
++ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
++ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+ uninstall-pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
+- f=$(am__strip_dir) \
+- echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+- rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
+- done
++ @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
++ test -n "$$files" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+@@ -373,7 +399,7 @@
+
+ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
++ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+@@ -381,29 +407,34 @@
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+- $$tags $$unique; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
+ fi
+ ctags: CTAGS
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- test -z "$(CTAGS_ARGS)$$tags$$unique" \
++ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+- $$tags $$unique
++ $$unique
+
+ GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+- && cd $(top_srcdir) \
+- && gtags -i $(GTAGS_ARGS) $$here
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
+
+ distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+@@ -424,13 +455,17 @@
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+- test -f $(distdir)/$$file \
+- || cp -p $$d/$$file $(distdir)/$$file \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+@@ -461,6 +496,7 @@
+
+ distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+ maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+@@ -482,6 +518,8 @@
+
+ html: html-am
+
++html-am:
++
+ info: info-am
+
+ info-am:
+@@ -490,18 +528,28 @@
+
+ install-dvi: install-dvi-am
+
++install-dvi-am:
++
+ install-exec-am: install-libLTLIBRARIES
+
+ install-html: install-html-am
+
++install-html-am:
++
+ install-info: install-info-am
+
++install-info-am:
++
+ install-man:
+
+ install-pdf: install-pdf-am
+
++install-pdf-am:
++
+ install-ps: install-ps-am
+
++install-ps-am:
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -541,6 +589,7 @@
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS
+
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/orc-test/Makefile.in orc-0.4.3/orc-test/Makefile.in
+--- orc-0.4.3.old/orc-test/Makefile.in 2009-12-14 02:20:11.000000000 +0100
++++ orc-0.4.3/orc-test/Makefile.in 2010-02-02 12:18:14.723377766 +0100
+@@ -1,8 +1,9 @@
+-# Makefile.in generated by automake 1.10.2 from Makefile.am.
++# Makefile.in generated by automake 1.11.1 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -18,6 +19,7 @@
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+@@ -50,14 +52,29 @@
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = $(top_builddir)/config.h
+ CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
+ am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+ am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
++am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
++am__install_max = 40
++am__nobase_strip_setup = \
++ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
++am__nobase_strip = \
++ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
++am__nobase_list = $(am__nobase_strip_setup); \
++ for p in $$list; do echo "$$p $$p"; done | \
++ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
++ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
++ if (++n[$$2] == $(am__install_max)) \
++ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
++ END { for (dir in files) print dir, files[dir] }'
++am__base_list = \
++ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
++ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)"
+-libLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(lib_LTLIBRARIES)
+ am__DEPENDENCIES_1 =
+ liborc_test_@ORC_MAJORMINOR@_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+@@ -75,6 +92,7 @@
+ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
++am__mv = mv -f
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+@@ -86,7 +104,6 @@
+ $(LDFLAGS) -o $@
+ SOURCES = $(liborc_test_@ORC_MAJORMINOR@_la_SOURCES)
+ DIST_SOURCES = $(liborc_test_@ORC_MAJORMINOR@_la_SOURCES)
+-pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+ HEADERS = $(pkginclude_HEADERS)
+ ETAGS = etags
+ CTAGS = ctags
+@@ -158,6 +175,7 @@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+@@ -254,9 +272,9 @@
+ exit 1;; \
+ esac; \
+ done; \
+- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu orc-test/Makefile'; \
+- cd $(top_srcdir) && \
+- $(AUTOMAKE) --gnu orc-test/Makefile
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu orc-test/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu orc-test/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+@@ -274,23 +292,28 @@
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
+ install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
++ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
++ list2=; for p in $$list; do \
+ if test -f $$p; then \
+- f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
++ list2="$$list2 $$p"; \
+ else :; fi; \
+- done
++ done; \
++ test -z "$$list2" || { \
++ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
++ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
++ }
+
+ uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+- p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
++ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
++ for p in $$list; do \
++ $(am__strip_dir) \
++ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
++ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+ clean-libLTLIBRARIES:
+@@ -317,52 +340,52 @@
+
+ .c.o:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+ .c.obj:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ .c.lo:
+ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+ liborc_test_@ORC_MAJORMINOR@_la-orctest.lo: orctest.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_test_@ORC_MAJORMINOR@_la-orctest.lo -MD -MP -MF $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orctest.Tpo -c -o liborc_test_@ORC_MAJORMINOR@_la-orctest.lo `test -f 'orctest.c' || echo '$(srcdir)/'`orctest.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orctest.Tpo $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orctest.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_test_@ORC_MAJORMINOR@_la-orctest.lo -MD -MP -MF $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orctest.Tpo -c -o liborc_test_@ORC_MAJORMINOR@_la-orctest.lo `test -f 'orctest.c' || echo '$(srcdir)/'`orctest.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orctest.Tpo $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orctest.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orctest.c' object='liborc_test_@ORC_MAJORMINOR@_la-orctest.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_test_@ORC_MAJORMINOR@_la-orctest.lo `test -f 'orctest.c' || echo '$(srcdir)/'`orctest.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_test_@ORC_MAJORMINOR@_la-orctest.lo `test -f 'orctest.c' || echo '$(srcdir)/'`orctest.c
+
+ liborc_test_@ORC_MAJORMINOR@_la-orcarray.lo: orcarray.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_test_@ORC_MAJORMINOR@_la-orcarray.lo -MD -MP -MF $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcarray.Tpo -c -o liborc_test_@ORC_MAJORMINOR@_la-orcarray.lo `test -f 'orcarray.c' || echo '$(srcdir)/'`orcarray.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcarray.Tpo $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcarray.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_test_@ORC_MAJORMINOR@_la-orcarray.lo -MD -MP -MF $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcarray.Tpo -c -o liborc_test_@ORC_MAJORMINOR@_la-orcarray.lo `test -f 'orcarray.c' || echo '$(srcdir)/'`orcarray.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcarray.Tpo $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcarray.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcarray.c' object='liborc_test_@ORC_MAJORMINOR@_la-orcarray.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_test_@ORC_MAJORMINOR@_la-orcarray.lo `test -f 'orcarray.c' || echo '$(srcdir)/'`orcarray.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_test_@ORC_MAJORMINOR@_la-orcarray.lo `test -f 'orcarray.c' || echo '$(srcdir)/'`orcarray.c
+
+ liborc_test_@ORC_MAJORMINOR@_la-orcrandom.lo: orcrandom.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_test_@ORC_MAJORMINOR@_la-orcrandom.lo -MD -MP -MF $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcrandom.Tpo -c -o liborc_test_@ORC_MAJORMINOR@_la-orcrandom.lo `test -f 'orcrandom.c' || echo '$(srcdir)/'`orcrandom.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcrandom.Tpo $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcrandom.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_test_@ORC_MAJORMINOR@_la-orcrandom.lo -MD -MP -MF $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcrandom.Tpo -c -o liborc_test_@ORC_MAJORMINOR@_la-orcrandom.lo `test -f 'orcrandom.c' || echo '$(srcdir)/'`orcrandom.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcrandom.Tpo $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcrandom.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcrandom.c' object='liborc_test_@ORC_MAJORMINOR@_la-orcrandom.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_test_@ORC_MAJORMINOR@_la-orcrandom.lo `test -f 'orcrandom.c' || echo '$(srcdir)/'`orcrandom.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_test_@ORC_MAJORMINOR@_la-orcrandom.lo `test -f 'orcrandom.c' || echo '$(srcdir)/'`orcrandom.c
+
+ liborc_test_@ORC_MAJORMINOR@_la-orcprofile.lo: orcprofile.c
+-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_test_@ORC_MAJORMINOR@_la-orcprofile.lo -MD -MP -MF $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcprofile.Tpo -c -o liborc_test_@ORC_MAJORMINOR@_la-orcprofile.lo `test -f 'orcprofile.c' || echo '$(srcdir)/'`orcprofile.c
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcprofile.Tpo $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcprofile.Plo
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT liborc_test_@ORC_MAJORMINOR@_la-orcprofile.lo -MD -MP -MF $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcprofile.Tpo -c -o liborc_test_@ORC_MAJORMINOR@_la-orcprofile.lo `test -f 'orcprofile.c' || echo '$(srcdir)/'`orcprofile.c
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcprofile.Tpo $(DEPDIR)/liborc_test_@ORC_MAJORMINOR@_la-orcprofile.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='orcprofile.c' object='liborc_test_@ORC_MAJORMINOR@_la-orcprofile.lo' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_test_@ORC_MAJORMINOR@_la-orcprofile.lo `test -f 'orcprofile.c' || echo '$(srcdir)/'`orcprofile.c
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborc_test_@ORC_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o liborc_test_@ORC_MAJORMINOR@_la-orcprofile.lo `test -f 'orcprofile.c' || echo '$(srcdir)/'`orcprofile.c
+
+ mostlyclean-libtool:
+ -rm -f *.lo
+@@ -372,20 +395,23 @@
+ install-pkgincludeHEADERS: $(pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
++ @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
++ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+- f=$(am__strip_dir) \
+- echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+- $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
++ echo "$$d$$p"; \
++ done | $(am__base_list) | \
++ while read files; do \
++ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
++ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+ uninstall-pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
+- f=$(am__strip_dir) \
+- echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+- rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
+- done
++ @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
++ test -n "$$files" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+@@ -399,7 +425,7 @@
+
+ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
++ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+@@ -407,29 +433,34 @@
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+- $$tags $$unique; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
+ fi
+ ctags: CTAGS
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- test -z "$(CTAGS_ARGS)$$tags$$unique" \
++ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+- $$tags $$unique
++ $$unique
+
+ GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+- && cd $(top_srcdir) \
+- && gtags -i $(GTAGS_ARGS) $$here
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
+
+ distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+@@ -450,13 +481,17 @@
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+- test -f $(distdir)/$$file \
+- || cp -p $$d/$$file $(distdir)/$$file \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+@@ -487,6 +522,7 @@
+
+ distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+ maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+@@ -508,6 +544,8 @@
+
+ html: html-am
+
++html-am:
++
+ info: info-am
+
+ info-am:
+@@ -516,18 +554,28 @@
+
+ install-dvi: install-dvi-am
+
++install-dvi-am:
++
+ install-exec-am: install-libLTLIBRARIES
+
+ install-html: install-html-am
+
++install-html-am:
++
+ install-info: install-info-am
+
++install-info-am:
++
+ install-man:
+
+ install-pdf: install-pdf-am
+
++install-pdf-am:
++
+ install-ps: install-ps-am
+
++install-ps-am:
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -567,6 +615,7 @@
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS
+
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/testsuite/Makefile.in orc-0.4.3/testsuite/Makefile.in
+--- orc-0.4.3.old/testsuite/Makefile.in 2009-12-14 02:41:53.000000000 +0100
++++ orc-0.4.3/testsuite/Makefile.in 2010-02-02 12:18:14.971377639 +0100
+@@ -1,8 +1,9 @@
+-# Makefile.in generated by automake 1.10.2 from Makefile.am.
++# Makefile.in generated by automake 1.11.1 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -16,8 +17,9 @@
+
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+-pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+@@ -63,6 +65,7 @@
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = $(top_builddir)/config.h
+ CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
+ am__EXEEXT_1 = compile_opcodes_sys_c$(EXEEXT) \
+ compile_opcodes_float_c$(EXEEXT) \
+ compile_opcodes_pixel_c$(EXEEXT) test_accsadubl$(EXEEXT) \
+@@ -125,6 +128,7 @@
+ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
++am__mv = mv -f
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+@@ -155,9 +159,39 @@
+ ps-recursive uninstall-recursive
+ RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
++AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
++ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
++ distdir
+ ETAGS = etags
+ CTAGS = ctags
++am__tty_colors = \
++red=; grn=; lgn=; blu=; std=
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
++am__relativize = \
++ dir0=`pwd`; \
++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
++ sed_rest='s,^[^/]*/*,,'; \
++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
++ sed_butlast='s,/*[^/]*$$,,'; \
++ while test -n "$$dir1"; do \
++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
++ if test "$$first" != "."; then \
++ if test "$$first" = ".."; then \
++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
++ else \
++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
++ if test "$$first2" = "$$first"; then \
++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
++ else \
++ dir2="../$$dir2"; \
++ fi; \
++ dir0="$$dir0"/"$$first"; \
++ fi; \
++ fi; \
++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
++ done; \
++ reldir="$$dir2"
+ ACLOCAL = @ACLOCAL@
+ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ AMTAR = @AMTAR@
+@@ -224,6 +258,7 @@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+@@ -322,9 +357,9 @@
+ exit 1;; \
+ esac; \
+ done; \
+- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu testsuite/Makefile'; \
+- cd $(top_srcdir) && \
+- $(AUTOMAKE) --gnu testsuite/Makefile
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu testsuite/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu testsuite/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+@@ -342,13 +377,16 @@
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
+
+ clean-noinstPROGRAMS:
+- @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+- f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+- echo " rm -f $$p $$f"; \
+- rm -f $$p $$f ; \
+- done
++ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
++ echo " rm -f" $$list; \
++ rm -f $$list || exit $$?; \
++ test -n "$(EXEEXT)" || exit 0; \
++ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
++ echo " rm -f" $$list; \
++ rm -f $$list
+ compile_opcodes_float$(EXEEXT): $(compile_opcodes_float_OBJECTS) $(compile_opcodes_float_DEPENDENCIES)
+ @rm -f compile_opcodes_float$(EXEEXT)
+ $(LINK) $(compile_opcodes_float_OBJECTS) $(compile_opcodes_float_LDADD) $(LIBS)
+@@ -419,21 +457,21 @@
+
+ .c.o:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+ .c.obj:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ .c.lo:
+ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@@ -451,7 +489,7 @@
+ # (which will cause the Makefiles to be regenerated when you run `make');
+ # (2) otherwise, pass the desired values on the `make' command line.
+ $(RECURSIVE_TARGETS):
+- @failcom='exit 1'; \
++ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+@@ -468,7 +506,7 @@
+ else \
+ local_target="$$target"; \
+ fi; \
+- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+@@ -476,7 +514,7 @@
+ fi; test -z "$$fail"
+
+ $(RECURSIVE_CLEAN_TARGETS):
+- @failcom='exit 1'; \
++ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+@@ -502,16 +540,16 @@
+ else \
+ local_target="$$target"; \
+ fi; \
+- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+ tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
++ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
++ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+@@ -526,7 +564,7 @@
+
+ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
++ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+@@ -538,7 +576,7 @@
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+- tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+@@ -547,29 +585,34 @@
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+- $$tags $$unique; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
+ fi
+ ctags: CTAGS
+ CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- test -z "$(CTAGS_ARGS)$$tags$$unique" \
++ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+- $$tags $$unique
++ $$unique
+
+ GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+- && cd $(top_srcdir) \
+- && gtags -i $(GTAGS_ARGS) $$here
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
+
+ distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+@@ -578,6 +621,7 @@
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
++ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+@@ -589,10 +633,10 @@
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+- echo "XPASS: $$tst"; \
++ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+- echo "PASS: $$tst"; \
++ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+@@ -600,17 +644,18 @@
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+- echo "XFAIL: $$tst"; \
++ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+- echo "FAIL: $$tst"; \
++ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+- echo "SKIP: $$tst"; \
++ col=$$blu; res=SKIP; \
+ fi; \
++ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+@@ -652,11 +697,15 @@
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+- echo "$$dashes"; \
++ if test "$$failed" -eq 0; then \
++ echo "$$grn$$dashes"; \
++ else \
++ echo "$$red$$dashes"; \
++ fi; \
+ echo "$$banner"; \
+ test -z "$$skipped" || echo "$$skipped"; \
+ test -z "$$report" || echo "$$report"; \
+- echo "$$dashes"; \
++ echo "$$dashes$$std"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+@@ -676,29 +725,44 @@
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+- test -f $(distdir)/$$file \
+- || cp -p $$d/$$file $(distdir)/$$file \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+- list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+- distdir=`$(am__cd) $(distdir) && pwd`; \
+- top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+- (cd $$subdir && \
++ fi; \
++ done
++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
++ $(am__relativize); \
++ new_distdir=$$reldir; \
++ dir1=$$subdir; dir2="$(top_distdir)"; \
++ $(am__relativize); \
++ new_top_distdir=$$reldir; \
++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
++ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+- top_distdir="$$top_distdir" \
+- distdir="$$distdir/$$subdir" \
++ top_distdir="$$new_top_distdir" \
++ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
++ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+@@ -730,6 +794,7 @@
+
+ distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+ maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+@@ -751,6 +816,8 @@
+
+ html: html-recursive
+
++html-am:
++
+ info: info-recursive
+
+ info-am:
+@@ -759,18 +826,28 @@
+
+ install-dvi: install-dvi-recursive
+
++install-dvi-am:
++
+ install-exec-am:
+
+ install-html: install-html-recursive
+
++install-html-am:
++
+ install-info: install-info-recursive
+
++install-info-am:
++
+ install-man:
+
+ install-pdf: install-pdf-recursive
+
++install-pdf-am:
++
+ install-ps: install-ps-recursive
+
++install-ps-am:
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-recursive
+@@ -793,8 +870,8 @@
+
+ uninstall-am:
+
+-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+- install-strip
++.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \
++ ctags-recursive install-am install-strip tags-recursive
+
+ .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-TESTS check-am clean clean-generic \
+@@ -811,6 +888,7 @@
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am
+
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/testsuite/orcc/Makefile.in orc-0.4.3/testsuite/orcc/Makefile.in
+--- orc-0.4.3.old/testsuite/orcc/Makefile.in 2009-12-14 02:20:11.000000000 +0100
++++ orc-0.4.3/testsuite/orcc/Makefile.in 2010-02-02 12:18:15.027377566 +0100
+@@ -1,8 +1,9 @@
+-# Makefile.in generated by automake 1.10.2 from Makefile.am.
++# Makefile.in generated by automake 1.11.1 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -16,8 +17,9 @@
+
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+-pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+@@ -51,6 +53,7 @@
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = $(top_builddir)/config.h
+ CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
+ PROGRAMS = $(noinst_PROGRAMS)
+ orc_test_SOURCES = orc_test.c
+ orc_test_OBJECTS = orc_test.$(OBJEXT)
+@@ -58,6 +61,7 @@
+ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
++am__mv = mv -f
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+@@ -71,6 +75,8 @@
+ DIST_SOURCES = orc_test.c
+ ETAGS = etags
+ CTAGS = ctags
++am__tty_colors = \
++red=; grn=; lgn=; blu=; std=
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ACLOCAL = @ACLOCAL@
+ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+@@ -138,6 +144,7 @@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+@@ -218,9 +225,9 @@
+ exit 1;; \
+ esac; \
+ done; \
+- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu testsuite/orcc/Makefile'; \
+- cd $(top_srcdir) && \
+- $(AUTOMAKE) --gnu testsuite/orcc/Makefile
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu testsuite/orcc/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu testsuite/orcc/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+@@ -238,13 +245,16 @@
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
+
+ clean-noinstPROGRAMS:
+- @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+- f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+- echo " rm -f $$p $$f"; \
+- rm -f $$p $$f ; \
+- done
++ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
++ echo " rm -f" $$list; \
++ rm -f $$list || exit $$?; \
++ test -n "$(EXEEXT)" || exit 0; \
++ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
++ echo " rm -f" $$list; \
++ rm -f $$list
+ orc_test$(EXEEXT): $(orc_test_OBJECTS) $(orc_test_DEPENDENCIES)
+ @rm -f orc_test$(EXEEXT)
+ $(LINK) $(orc_test_OBJECTS) $(orc_test_LDADD) $(LIBS)
+@@ -259,21 +269,21 @@
+
+ .c.o:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+ .c.obj:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ .c.lo:
+ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@@ -296,7 +306,7 @@
+
+ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
++ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+@@ -304,29 +314,34 @@
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+- $$tags $$unique; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
+ fi
+ ctags: CTAGS
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- test -z "$(CTAGS_ARGS)$$tags$$unique" \
++ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+- $$tags $$unique
++ $$unique
+
+ GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+- && cd $(top_srcdir) \
+- && gtags -i $(GTAGS_ARGS) $$here
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
+
+ distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+@@ -335,6 +350,7 @@
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
++ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+@@ -346,10 +362,10 @@
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+- echo "XPASS: $$tst"; \
++ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+- echo "PASS: $$tst"; \
++ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+@@ -357,17 +373,18 @@
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+- echo "XFAIL: $$tst"; \
++ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+- echo "FAIL: $$tst"; \
++ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+- echo "SKIP: $$tst"; \
++ col=$$blu; res=SKIP; \
+ fi; \
++ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+@@ -409,11 +426,15 @@
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+- echo "$$dashes"; \
++ if test "$$failed" -eq 0; then \
++ echo "$$grn$$dashes"; \
++ else \
++ echo "$$red$$dashes"; \
++ fi; \
+ echo "$$banner"; \
+ test -z "$$skipped" || echo "$$skipped"; \
+ test -z "$$report" || echo "$$report"; \
+- echo "$$dashes"; \
++ echo "$$dashes$$std"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+@@ -433,13 +454,17 @@
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+- test -f $(distdir)/$$file \
+- || cp -p $$d/$$file $(distdir)/$$file \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+@@ -471,6 +496,7 @@
+
+ distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+ maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+@@ -493,6 +519,8 @@
+
+ html: html-am
+
++html-am:
++
+ info: info-am
+
+ info-am:
+@@ -501,18 +529,28 @@
+
+ install-dvi: install-dvi-am
+
++install-dvi-am:
++
+ install-exec-am:
+
+ install-html: install-html-am
+
++install-html-am:
++
+ install-info: install-info-am
+
++install-info-am:
++
+ install-man:
+
+ install-pdf: install-pdf-am
+
++install-pdf-am:
++
+ install-ps: install-ps-am
+
++install-ps-am:
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -535,7 +573,7 @@
+
+ uninstall-am:
+
+-.MAKE: install-am install-strip
++.MAKE: all check check-am install install-am install-strip
+
+ .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+ clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+@@ -556,6 +594,7 @@
+ $(top_builddir)/tools/orcc$(EXEEXT) --header -o testorc.h test.orc
+ $(top_builddir)/tools/orcc$(EXEEXT) --implementation -o testorc.c test.orc
+ $(top_builddir)/tools/orcc$(EXEEXT) --test -o orc_test.c test.orc
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff -x'*config.sub' -x'*config.guess' -Naur orc-0.4.3.old/tools/Makefile.in orc-0.4.3/tools/Makefile.in
+--- orc-0.4.3.old/tools/Makefile.in 2009-12-14 02:20:11.000000000 +0100
++++ orc-0.4.3/tools/Makefile.in 2010-02-02 12:18:15.079377682 +0100
+@@ -1,8 +1,9 @@
+-# Makefile.in generated by automake 1.10.2 from Makefile.am.
++# Makefile.in generated by automake 1.11.1 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -16,8 +17,9 @@
+
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+-pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+@@ -50,8 +52,8 @@
+ mkinstalldirs = $(install_sh) -d
+ CONFIG_HEADER = $(top_builddir)/config.h
+ CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
+ am__installdirs = "$(DESTDIR)$(bindir)"
+-binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+ PROGRAMS = $(bin_PROGRAMS)
+ orcc_SOURCES = orcc.c
+ orcc_OBJECTS = orcc.$(OBJEXT)
+@@ -62,6 +64,7 @@
+ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
++am__mv = mv -f
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+@@ -142,6 +145,7 @@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PKG_CONFIG = @PKG_CONFIG@
+@@ -221,9 +225,9 @@
+ exit 1;; \
+ esac; \
+ done; \
+- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \
+- cd $(top_srcdir) && \
+- $(AUTOMAKE) --gnu tools/Makefile
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu tools/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+@@ -241,34 +245,50 @@
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
+ install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+- @list='$(bin_PROGRAMS)'; for p in $$list; do \
+- p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+- if test -f $$p \
+- || test -f $$p1 \
+- ; then \
+- f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+- else :; fi; \
+- done
++ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
++ for p in $$list; do echo "$$p $$p"; done | \
++ sed 's/$(EXEEXT)$$//' | \
++ while read p p1; do if test -f $$p || test -f $$p1; \
++ then echo "$$p"; echo "$$p"; else :; fi; \
++ done | \
++ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
++ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
++ sed 'N;N;N;s,\n, ,g' | \
++ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
++ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
++ if ($$2 == $$4) files[d] = files[d] " " $$1; \
++ else { print "f", $$3 "/" $$4, $$1; } } \
++ END { for (d in files) print "f", d, files[d] }' | \
++ while read type dir files; do \
++ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
++ test -z "$$files" || { \
++ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
++ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
++ } \
++ ; done
+
+ uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+- @list='$(bin_PROGRAMS)'; for p in $$list; do \
+- f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+- echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+- rm -f "$(DESTDIR)$(bindir)/$$f"; \
+- done
++ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
++ files=`for p in $$list; do echo "$$p"; done | \
++ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
++ -e 's/$$/$(EXEEXT)/' `; \
++ test -n "$$list" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+ clean-binPROGRAMS:
+- @list='$(bin_PROGRAMS)'; for p in $$list; do \
+- f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+- echo " rm -f $$p $$f"; \
+- rm -f $$p $$f ; \
+- done
++ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
++ echo " rm -f" $$list; \
++ rm -f $$list || exit $$?; \
++ test -n "$(EXEEXT)" || exit 0; \
++ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
++ echo " rm -f" $$list; \
++ rm -f $$list
+ orcc$(EXEEXT): $(orcc_OBJECTS) $(orcc_DEPENDENCIES)
+ @rm -f orcc$(EXEEXT)
+ $(LINK) $(orcc_OBJECTS) $(orcc_LDADD) $(LIBS)
+@@ -283,21 +303,21 @@
+
+ .c.o:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+ .c.obj:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ .c.lo:
+ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@@ -320,7 +340,7 @@
+
+ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
++ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+@@ -328,29 +348,34 @@
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+- $$tags $$unique; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
+ fi
+ ctags: CTAGS
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+- tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+- test -z "$(CTAGS_ARGS)$$tags$$unique" \
++ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+- $$tags $$unique
++ $$unique
+
+ GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+- && cd $(top_srcdir) \
+- && gtags -i $(GTAGS_ARGS) $$here
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
+
+ distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+@@ -371,13 +396,17 @@
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+- test -f $(distdir)/$$file \
+- || cp -p $$d/$$file $(distdir)/$$file \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+@@ -408,6 +437,7 @@
+
+ distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+ maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+@@ -428,6 +458,8 @@
+
+ html: html-am
+
++html-am:
++
+ info: info-am
+
+ info-am:
+@@ -436,18 +468,28 @@
+
+ install-dvi: install-dvi-am
+
++install-dvi-am:
++
+ install-exec-am: install-binPROGRAMS
+
+ install-html: install-html-am
+
++install-html-am:
++
+ install-info: install-info-am
+
++install-info-am:
++
+ install-man:
+
+ install-pdf: install-pdf-am
+
++install-pdf-am:
++
+ install-ps: install-ps-am
+
++install-ps-am:
++
+ installcheck-am:
+
+ maintainer-clean: maintainer-clean-am
+@@ -486,6 +528,7 @@
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-binPROGRAMS
+
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff --git a/recipes/orc/orc.inc b/recipes/orc/orc.inc
new file mode 100644
index 0000000000..b2c227689d
--- /dev/null
+++ b/recipes/orc/orc.inc
@@ -0,0 +1,19 @@
+DESCRIPTION = "orc - The Oil Runtime Compiler"
+HOMEPAGE = "http://code.entropywave.com/projects/orc/"
+LICENSE = "orc"
+
+SRC_URI = "http://code.entropywave.com/download/orc/orc-${PV}.tar.gz;name=orc"
+
+inherit autotools pkgconfig
+
+BBCLASSEXTEND = "native"
+
+PACKAGES =+ "orc-examples"
+FILES_orc-examples = "${libdir}/orc/*"
+FILES_${PN} = "${bindir}/*"
+
+python populate_packages_prepend () {
+ libdir = bb.data.expand('${libdir}', d)
+ do_split_packages(d, libdir, '^lib(.*)\.so\.*', 'lib%s', 'ORC %s library', extra_depends='', allow_links=True)
+}
+
diff --git a/recipes/orc/orc_0.4.3.bb b/recipes/orc/orc_0.4.3.bb
new file mode 100644
index 0000000000..6da5789e5e
--- /dev/null
+++ b/recipes/orc/orc_0.4.3.bb
@@ -0,0 +1,11 @@
+require orc.inc
+
+PR = "r1"
+
+SRC_URI[orc.md5sum] = "9b2e7030c8df8a0d371115869fe5685a"
+SRC_URI[orc.sha256sum] = "4c0266d81da67fef0b2abd5e624a9ab0db5de04eb23c3ab24e22f5f9ceeefbfe"
+
+SRC_URI += "file://03_orcutils.patch;patch=1 \
+ file://99_autoreconf.patch;patch=1"
+
+
diff --git a/recipes/orinoco/spectrum-fw.bb b/recipes/orinoco/spectrum-fw.bb
index cedb0e35fe..66ec16ed83 100644
--- a/recipes/orinoco/spectrum-fw.bb
+++ b/recipes/orinoco/spectrum-fw.bb
@@ -1,9 +1,10 @@
DESCRIPTION = "Firmware for Spectrum Wireless LAN cards"
-do_unpack[depends] += "unzip-native:do_populate_staging"
+DEPENDS += " unzip-native "
LICENSE = "unknown"
-PR = "r1"
+PR = "r2"
-SRC_URI = "file://get_symbol_fw \
+SRC_URI = "ftp://symstore.longisland.com/Symstore/services_download/wirless_prod/MC&DriverOnlyInstallers.zip;name=zip \
+ file://get_symbol_fw \
file://parse_symbol_fw"
S = "${WORKDIR}"
@@ -19,3 +20,6 @@ do_install() {
PACKAGE_ARCH = "all"
FILES_${PN} += "${base_libdir}/firmware/symbol*"
+
+SRC_URI[zip.md5sum] = "48ad5e824af83d4d7a38ef0a3eab0c3b"
+SRC_URI[zip.sha256sum] = "c4a960651f91e4485bb74770ab8611fc6b03a677c69d7256422bc56604624982"
diff --git a/recipes/orinoco/spectrum-fw/get_symbol_fw b/recipes/orinoco/spectrum-fw/get_symbol_fw
index e7b0bf2d44..80420b01a8 100755
--- a/recipes/orinoco/spectrum-fw/get_symbol_fw
+++ b/recipes/orinoco/spectrum-fw/get_symbol_fw
@@ -15,29 +15,15 @@
set -e
-URL_BASE='ftp://symstore.longisland.com/Symstore/services_download/wirless_prod/'
-DL_FILE='MC&DriverOnlyInstallers.zip'
DL_INT1='S24DRVR392B67-01.exe'
DL_INT2='Driver Only Installer/NetWLan5.sys'
DRIVER1=symbol1.drv
DRIVER2=symbol2.drv
-get_file() {
- curl --remote-name "$1" || \
- wget --passive-ftp "$1" || \
- wget "$1" || \
- ftp "$1" </dev/null || \
- exit 1
-}
-
-if ! test -f $DL_FILE; then
- get_file $URL_BASE/$DL_FILE
-fi
-
-unzip -p $DL_FILE "$DL_INT1" >$DRIVER1
-unzip -p $DRIVER1 "$DL_INT2" >$DRIVER2
-
+unzip -p $DL_INT1 "$DL_INT2" >$DRIVER2
+
perl parse_symbol_fw $DRIVER2 spectrum_fw.h symbol_sp24t_prim_fw \
symbol_sp24t_sec_fw
-rm -f $DRIVER1 $DRIVER2 \ No newline at end of file
+rm -f $DRIVER1 $DRIVER2
+
diff --git a/recipes/pam/libpam-base-files.bb b/recipes/pam/libpam-base-files.bb
index 70c357c244..9ba57a764a 100644
--- a/recipes/pam/libpam-base-files.bb
+++ b/recipes/pam/libpam-base-files.bb
@@ -7,7 +7,7 @@ DEPENDS = ""
RDEPENDS = "libpam"
RRECOMMENDS = "libpam-meta"
-PR = "r3"
+PR = "r5"
SRC_URI = " \
file://pam.d/* \
diff --git a/recipes/pam/libpam-base-files/pam.d/polkit-1 b/recipes/pam/libpam-base-files/pam.d/polkit-1
deleted file mode 100644
index 836b53d61a..0000000000
--- a/recipes/pam/libpam-base-files/pam.d/polkit-1
+++ /dev/null
@@ -1,6 +0,0 @@
-#%PAM-1.0
-
-auth include common-auth
-account include common-account
-password include common-password
-session include common-session
diff --git a/recipes/pango/pango-1.24.4/CVE-2010-0421.patch b/recipes/pango/pango-1.24.4/CVE-2010-0421.patch
new file mode 100644
index 0000000000..b3656d7b61
--- /dev/null
+++ b/recipes/pango/pango-1.24.4/CVE-2010-0421.patch
@@ -0,0 +1,32 @@
+CVE-2010-0421
+--- a/pango/opentype/harfbuzz-gdef.c
++++ b/pango/opentype/harfbuzz-gdef.c
+@@ -923,7 +923,7 @@ HB_Error HB_GDEF_Build_ClassDefinition(
+ goto Fail1;
+ }
+
+- if ( gcrr[count - 1].End != num_glyphs - 1 )
++ if ( gcrr[count - 1].End + 1 < num_glyphs )
+ {
+ if ( ALLOC_ARRAY( ngc[count],
+ ( num_glyphs - gcrr[count - 1].End + 2 ) / 4,
+@@ -938,7 +938,9 @@ HB_Error HB_GDEF_Build_ClassDefinition(
+ HB_UShort ) )
+ goto Fail2;
+ }
+-
++ else
++ num_glyphs = 1;
++
+ gdef->LastGlyph = num_glyphs - 1;
+
+ gdef->MarkAttachClassDef_offset = 0L;
+@@ -996,6 +998,8 @@ _HB_GDEF_Add_Glyph_Property( HB_GDEFHead
+ HB_ClassRangeRecord* gcrr;
+ HB_UShort** ngc;
+
++ if ( glyphID >= gdef->LastGlyph )
++ return 0;
+
+ error = _HB_OPEN_Get_Class( &gdef->GlyphClassDef, glyphID, &class, &index );
+ if ( error && error != HB_Err_Not_Covered )
diff --git a/recipes/pango/pango-native-1.22.0/no-tests.patch b/recipes/pango/pango-native-1.22.0/no-tests.patch
deleted file mode 100644
index dafcb20c3b..0000000000
--- a/recipes/pango/pango-native-1.22.0/no-tests.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- /tmp/Makefile.am 2007-03-01 13:29:37.000000000 +0100
-+++ pango-1.16.0/Makefile.am 2007-03-01 13:29:52.545251000 +0100
-@@ -1,6 +1,6 @@
- ## Process this file with automake to create Makefile.in.
-
--SUBDIRS= pango modules pango-view examples docs tools tests
-+SUBDIRS= pango modules pango-view examples docs tools
-
- EXTRA_DIST = \
- autogen.sh \
diff --git a/recipes/pango/pango-native_1.22.0.bb b/recipes/pango/pango-native_1.22.0.bb
deleted file mode 100644
index ba2cf4ca3b..0000000000
--- a/recipes/pango/pango-native_1.22.0.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-
-require pango_1.22.0.bb
-
-inherit native
-
-DEPENDS += "glib-2.0-native cairo-native"
-PROVIDES = "pango-native"
-
-SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.6/pango-${PV}.tar.bz2"
-
-PR = "r0"
-
diff --git a/recipes/pango/pango.inc b/recipes/pango/pango.inc
index 5189d950c1..d0b18755b9 100644
--- a/recipes/pango/pango.inc
+++ b/recipes/pango/pango.inc
@@ -10,10 +10,15 @@ SECTION = "x11/libs"
DEPENDS = "glib-2.0 fontconfig freetype zlib virtual/libiconv virtual/libx11 libxft gtk-doc cairo"
+DEPENDS_virtclass-native = "glib-2.0-native cairo-native"
+BBCLASSEXTEND = "native"
+
PACKAGES_DYNAMIC = "pango-module-*"
RRECOMMENDS_${PN} = "pango-module-basic-x pango-module-basic-fc"
+INC_PR = "r0"
+
# seems to go wrong with default cflags
FULL_OPTIMIZATION_arm = "-O2"
diff --git a/recipes/pango/pango_1.24.4.bb b/recipes/pango/pango_1.24.4.bb
index ce81d89263..7211534593 100644
--- a/recipes/pango/pango_1.24.4.bb
+++ b/recipes/pango/pango_1.24.4.bb
@@ -1,2 +1,6 @@
require pango.inc
+PR = "${INC_PR}.1"
+
+SRC_URI += "file://CVE-2010-0421.patch;patch=1"
+
diff --git a/recipes/perl/libdbd-sqlite-perl_1.29.bb b/recipes/perl/libdbd-sqlite-perl_1.29.bb
new file mode 100644
index 0000000000..1f0c5d2f92
--- /dev/null
+++ b/recipes/perl/libdbd-sqlite-perl_1.29.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "PERL database interface driver for the SQLite database."
+SECTION = "libs"
+LICENSE = "Artistic GPL"
+DEPENDS_${PN} += "libdbi-perl-native"
+RDEPENDS_${PN} += "libdbi-perl \
+ perl-module-file-spec \
+ perl-module-file-path \
+ perl-module-scalar-util \
+ perl-module-list-util \
+ perl-module-test \
+ perl-module-test-more \
+ perl-module-test-harness \
+ perl-module-file-basename \
+ perl-module-storable \
+ perl-module-extutils-makemaker \
+ perl-module-locale \
+ perl-module-tie-hash \
+"
+PR = "r0"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/DBD-SQLite-${PV}.tar.gz;name=dbdsqlite"
+SRC_URI[dbdsqlite.md5sum] = "2a47cea6ecff62508775d90151a8030f"
+SRC_URI[dbdsqlite.sha256sum] = "51d0d529e453ada1ce85772deb5cc4c86a2ebe9da2dd2fb0b40b77b555720867"
+
+S = "${WORKDIR}/DBD-SQLite-${PV}"
+
+inherit cpan
diff --git a/recipes/perl/libxml-parser-perl_2.34.bb b/recipes/perl/libxml-parser-perl_2.34.bb
index a7ee4f3a4b..0b423ab2c6 100644
--- a/recipes/perl/libxml-parser-perl_2.34.bb
+++ b/recipes/perl/libxml-parser-perl_2.34.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "XML::Parser - A perl module for parsing XML documents"
SECTION = "libs"
LICENSE = "Artistic"
DEPENDS += "expat expat-native"
-PR = "r12"
+PR = "r13"
SRC_URI = "http://www.cpan.org/modules/by-module/XML/XML-Parser-${PV}.tar.gz"
diff --git a/recipes/perl/libxml-parser-perl_2.36.bb b/recipes/perl/libxml-parser-perl_2.36.bb
index 7431ef7a7c..63938992ff 100644
--- a/recipes/perl/libxml-parser-perl_2.36.bb
+++ b/recipes/perl/libxml-parser-perl_2.36.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "XML::Parser - A perl module for parsing XML documents"
SECTION = "libs"
LICENSE = "Artistic"
DEPENDS += "expat expat-native"
-PR= "r1"
+PR= "r2"
SRC_URI = "http://www.cpan.org/modules/by-module/XML/XML-Parser-${PV}.tar.gz"
diff --git a/recipes/perl/perl-5.8.4/Makefile.SH.patch b/recipes/perl/perl-5.8.4/Makefile.SH.patch
deleted file mode 100644
index 35a4e6dfde..0000000000
--- a/recipes/perl/perl-5.8.4/Makefile.SH.patch
+++ /dev/null
@@ -1,298 +0,0 @@
-*** ./Makefile.SH Wed Aug 4 12:16:15 2004
---- ./Makefile.SH.patch Wed Aug 4 14:03:42 2004
-***************
-*** 110,127 ****
- # INSTALL file, under "Building a shared perl library".
- # If there is no pre-existing $libperl, we don't need
- # to do anything further.
-! if test -f $archlib/CORE/$libperl; then
-! rm -f preload
-! cat <<'EOT' > preload
-! #! /bin/sh
-! lib=$1
-! shift
-! test -r $lib && export LD_PRELOAD="$lib $LD_PRELOAD"
-! exec "$@"
-! EOT
-! chmod 755 preload
-! ldlibpth="$ldlibpth `pwd`/preload `pwd`/$libperl"
-! fi
- ;;
- os390) test -f /bin/env && ldlibpth="/bin/env $ldlibpth"
- ;;
---- 110,116 ----
- # INSTALL file, under "Building a shared perl library".
- # If there is no pre-existing $libperl, we don't need
- # to do anything further.
-! echo linux libraries overwritten by cross-compile patches
- ;;
- os390) test -f /bin/env && ldlibpth="/bin/env $ldlibpth"
- ;;
-***************
-*** 349,357 ****
- .c.s:
- $(CCCMDSRC) -S $*.c
-
-! all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT) extra.pods $(private) $(public) $(dynamic_ext) $(nonxs_ext) extras.make
-! @echo " ";
-! @echo " Everything is up to date. Type '$(MAKE) test' to run test suite."
-
- .PHONY: all compile translators utilities
-
---- 338,358 ----
- .c.s:
- $(CCCMDSRC) -S $*.c
-
-! #all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT) extra.pods $(private) $(public) $(dynamic_ext) $(nonxs_ext) extras.make
-! # @echo " ";
-! # @echo " Everything is up to date. Type '$(MAKE) test' to run test suite."
-!
-! all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT)
-! mv miniperl miniperl-cross
-! ln -s hostperl miniperl
-!
-! more: extra.pods $(private) $(public)
-!
-! more2: $(dynamic_ext)
-!
-! more3: $(nonxs_ext)
-!
-! more4: extras.make
-
- .PHONY: all compile translators utilities
-
-***************
-*** 361,370 ****
- cd x2p; $(MAKE) compile;
- cd pod; $(MAKE) compile;
-
-! translators: miniperl$(EXE_EXT) lib/Config.pm FORCE
- @echo " "; echo " Making x2p stuff"; cd x2p; $(LDLIBPTH) $(MAKE) all
-
-! utilities: miniperl$(EXE_EXT) lib/Config.pm $(plextract) lib/lib.pm FORCE
- @echo " "; echo " Making utilities"; cd utils; $(LDLIBPTH) $(MAKE) all
-
-
---- 362,371 ----
- cd x2p; $(MAKE) compile;
- cd pod; $(MAKE) compile;
-
-! translators: lib/Config.pm FORCE
- @echo " "; echo " Making x2p stuff"; cd x2p; $(LDLIBPTH) $(MAKE) all
-
-! utilities: lib/Config.pm $(plextract) lib/lib.pm FORCE
- @echo " "; echo " Making utilities"; cd utils; $(LDLIBPTH) $(MAKE) all
-
-
-***************
-*** 541,547 ****
- $(CC) -o miniperl $(CLDFLAGS) \
- `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
- miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
-! $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
- !NO!SUBS!
- ;;
- beos*|next4*)
---- 542,548 ----
- $(CC) -o miniperl $(CLDFLAGS) \
- `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
- miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
-! # $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
- !NO!SUBS!
- ;;
- beos*|next4*)
-***************
-*** 549,555 ****
- miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT)
- $(CC) -o miniperl `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
- miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
-! $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
- !NO!SUBS!
- ;;
- darwin*)
---- 550,556 ----
- miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT)
- $(CC) -o miniperl `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
- miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
-! # $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
- !NO!SUBS!
- ;;
- darwin*)
-***************
-*** 716,722 ****
- # We need to autosplit in two steps because VOS can't handle so many args
- #
- .PHONY: preplibrary
-! preplibrary: miniperl$(EXE_EXT) lib/Config.pm lib/lib.pm $(PREPLIBRARY_LIBPERL)
- @sh ./makedir lib/auto
- @echo " AutoSplitting perl library"
- $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \
---- 717,723 ----
- # We need to autosplit in two steps because VOS can't handle so many args
- #
- .PHONY: preplibrary
-! preplibrary: lib/Config.pm lib/lib.pm $(PREPLIBRARY_LIBPERL)
- @sh ./makedir lib/auto
- @echo " AutoSplitting perl library"
- $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \
-***************
-*** 728,738 ****
- # Take care to avoid modifying lib/Config.pm without reason
- # (If trying to create a new port and having problems with the configpm script,
- # try 'make minitest' and/or commenting out the tests at the end of configpm.)
-! lib/Config.pm: config.sh miniperl$(EXE_EXT) configpm Porting/Glossary
- $(LDLIBPTH) ./miniperl -Ilib configpm configpm.tmp
- sh mv-if-diff configpm.tmp $@
-
-! lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl$(EXE_EXT) minimod.pl lib/Config.pm
- $(LDLIBPTH) ./miniperl minimod.pl > minimod.tmp
- sh mv-if-diff minimod.tmp $@
- -touch lib/ExtUtils/Miniperl.pm
---- 729,739 ----
- # Take care to avoid modifying lib/Config.pm without reason
- # (If trying to create a new port and having problems with the configpm script,
- # try 'make minitest' and/or commenting out the tests at the end of configpm.)
-! lib/Config.pm: config.sh configpm Porting/Glossary
- $(LDLIBPTH) ./miniperl -Ilib configpm configpm.tmp
- sh mv-if-diff configpm.tmp $@
-
-! lib/ExtUtils/Miniperl.pm: miniperlmain.c minimod.pl lib/Config.pm
- $(LDLIBPTH) ./miniperl minimod.pl > minimod.tmp
- sh mv-if-diff minimod.tmp $@
- -touch lib/ExtUtils/Miniperl.pm
-***************
-*** 740,757 ****
- lib/re.pm: ext/re/re.pm
- cp ext/re/re.pm ext/re/re.tmp && sh mv-if-diff ext/re/re.tmp lib/re.pm
-
-! $(plextract): miniperl$(EXE_EXT) lib/Config.pm x2p/s2p
- @-rm -f $@
- $(LDLIBPTH) ./miniperl -Ilib $@.PL
-
-! x2p/s2p: miniperl$(EXE_EXT) lib/Config.pm x2p/s2p.PL
- cd x2p; $(LDLIBPTH) $(MAKE) s2p
-
-! lib/lib.pm: miniperl$(EXE_EXT) lib/Config.pm
- @-rm -f $@
- $(LDLIBPTH) ./miniperl -Ilib lib/lib_pm.PL
-
-! extra.pods: miniperl$(EXE_EXT)
- -@test -f extra.pods && rm -f `cat extra.pods`
- -@rm -f extra.pods
- -@for x in `grep -l '^=[a-z]' README.* | grep -v README.vms` ; do \
---- 741,758 ----
- lib/re.pm: ext/re/re.pm
- cp ext/re/re.pm ext/re/re.tmp && sh mv-if-diff ext/re/re.tmp lib/re.pm
-
-! $(plextract): lib/Config.pm x2p/s2p
- @-rm -f $@
- $(LDLIBPTH) ./miniperl -Ilib $@.PL
-
-! x2p/s2p: lib/Config.pm x2p/s2p.PL
- cd x2p; $(LDLIBPTH) $(MAKE) s2p
-
-! lib/lib.pm: lib/Config.pm
- @-rm -f $@
- $(LDLIBPTH) ./miniperl -Ilib lib/lib_pm.PL
-
-! extra.pods:
- -@test -f extra.pods && rm -f `cat extra.pods`
- -@rm -f extra.pods
- -@for x in `grep -l '^=[a-z]' README.* | grep -v README.vms` ; do \
-***************
-*** 798,815 ****
- INSTALL_DEPENDENCE = all
-
- install.perl: $(INSTALL_DEPENDENCE) installperl
-! if [ -n "$(COMPILE)" ]; \
-! then \
-! cd utils; $(MAKE) compile; \
-! cd ../x2p; $(MAKE) compile; \
-! cd ../pod; $(MAKE) compile; \
-! else :; \
-! fi
-! $(LDLIBPTH) ./perl installperl --destdir=$(DESTDIR) $(INSTALLFLAGS) $(STRIPFLAGS)
-! $(MAKE) extras.install
-!
-! install.man: all installman
-! $(LDLIBPTH) ./perl installman --destdir=$(DESTDIR) $(INSTALLFLAGS)
-
- # XXX Experimental. Hardwired values, but useful for testing.
- # Eventually Configure could ask for some of these values.
---- 799,805 ----
- INSTALL_DEPENDENCE = all
-
- install.perl: $(INSTALL_DEPENDENCE) installperl
-! hostperl -Ifake_config_library -MConfig installperl $(INSTALLFLAGS) $(STRIPFLAGS)
-
- # XXX Experimental. Hardwired values, but useful for testing.
- # Eventually Configure could ask for some of these values.
-***************
-*** 925,940 ****
- #
- # DynaLoader may be needed for extensions that use Makefile.PL.
-
-! $(DYNALOADER): miniperl$(EXE_EXT) preplibrary FORCE
- @$(LDLIBPTH) sh ext/util/make_ext $(STATIC) $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
-! d_dummy $(dynamic_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE
- @$(LDLIBPTH) sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
-! s_dummy $(static_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE
- @$(LDLIBPTH) sh ext/util/make_ext $(STATIC) $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
-! n_dummy $(nonxs_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE
- @$(LDLIBPTH) sh ext/util/make_ext nonxs $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
- .PHONY: clean _tidy _mopup _cleaner1 _cleaner2 \
---- 915,930 ----
- #
- # DynaLoader may be needed for extensions that use Makefile.PL.
-
-! $(DYNALOADER): preplibrary FORCE
- @$(LDLIBPTH) sh ext/util/make_ext $(STATIC) $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
-! d_dummy $(dynamic_ext): preplibrary $(DYNALOADER) FORCE
- @$(LDLIBPTH) sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
-! s_dummy $(static_ext): preplibrary $(DYNALOADER) FORCE
- @$(LDLIBPTH) sh ext/util/make_ext $(STATIC) $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
-! n_dummy $(nonxs_ext): preplibrary $(DYNALOADER) FORCE
- @$(LDLIBPTH) sh ext/util/make_ext nonxs $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
- .PHONY: clean _tidy _mopup _cleaner1 _cleaner2 \
-***************
-*** 1074,1080 ****
-
- test_prep_pre: preplibrary utilities $(nonxs_ext)
-
-! test_prep: test_prep_pre miniperl$(EXE_EXT) perl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL)
- PERL=./perl $(MAKE) _test_prep
-
- _test_tty:
---- 1064,1070 ----
-
- test_prep_pre: preplibrary utilities $(nonxs_ext)
-
-! test_prep: test_prep_pre perl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL)
- PERL=./perl $(MAKE) _test_prep
-
- _test_tty:
-***************
-*** 1167,1173 ****
-
- # Can't depend on lib/Config.pm because that might be where miniperl
- # is crashing.
-! minitest: miniperl$(EXE_EXT) lib/re.pm
- -@test -f lib/lib.pm && test -f lib/Config.pm || \
- $(MAKE) lib/Config.pm lib/lib.pm
- @echo " "
---- 1157,1163 ----
-
- # Can't depend on lib/Config.pm because that might be where miniperl
- # is crashing.
-! minitest: lib/re.pm
- -@test -f lib/lib.pm && test -f lib/Config.pm || \
- $(MAKE) lib/Config.pm lib/lib.pm
- @echo " "
diff --git a/recipes/perl/perl-5.8.4/Makefile.patch b/recipes/perl/perl-5.8.4/Makefile.patch
deleted file mode 100644
index eec127643b..0000000000
--- a/recipes/perl/perl-5.8.4/Makefile.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-*** ./Cross/Makefile 2004-01-12 13:44:01.000000000 -0700
---- ./Cross/Makefile.patch 2004-08-03 16:34:18.000000000 -0700
-***************
-*** 58,66 ****
- $(TOPDIR)/generate_config_sh config.sh-$(SYS) > $(TOPDIR)/../config.sh
- cd $(TOPDIR)/.. ; ./Configure -S ; make depend ; make ; make more
- cd $(TOPDIR)/.. ; mkdir -p fake_config_library ; cp lib/Config.pm fake_config_library
-! cd $(TOPDIR)/.. ; $(MAKE) more2 "PERLRUN=/usr/bin/perl -I$(TOPDIR)/../fake_config_library -MConfig"
-! cd $(TOPDIR)/.. ; $(MAKE) more3 "PERLRUN=/usr/bin/perl -I$(TOPDIR)/../fake_config_library -MConfig"
-! cd $(TOPDIR)/.. ; $(MAKE) more4 "PERLRUN=/usr/bin/perl -I$(TOPDIR)/../fake_config_library -MConfig"
- cd $(TOPDIR)/.. ; rm -rf install_me_here
- cd $(TOPDIR)/.. ; make install-strip
- cd $(TOPDIR)/.. ; sh -x Cross/warp
---- 58,66 ----
- $(TOPDIR)/generate_config_sh config.sh-$(SYS) > $(TOPDIR)/../config.sh
- cd $(TOPDIR)/.. ; ./Configure -S ; make depend ; make ; make more
- cd $(TOPDIR)/.. ; mkdir -p fake_config_library ; cp lib/Config.pm fake_config_library
-! cd $(TOPDIR)/.. ; $(MAKE) more2 "PERLRUN=hostperl -I$(TOPDIR)/../fake_config_library -MConfig"
-! cd $(TOPDIR)/.. ; $(MAKE) more3 "PERLRUN=hostperl -I$(TOPDIR)/../fake_config_library -MConfig"
-! cd $(TOPDIR)/.. ; $(MAKE) more4 "PERLRUN=hostperl -I$(TOPDIR)/../fake_config_library -MConfig"
- cd $(TOPDIR)/.. ; rm -rf install_me_here
- cd $(TOPDIR)/.. ; make install-strip
- cd $(TOPDIR)/.. ; sh -x Cross/warp
diff --git a/recipes/perl/perl-5.8.4/config.sh-arm-linux.patch b/recipes/perl/perl-5.8.4/config.sh-arm-linux.patch
deleted file mode 100644
index 44d8b1a89d..0000000000
--- a/recipes/perl/perl-5.8.4/config.sh-arm-linux.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-*** ./Cross/config.sh-arm-linux Mon Dec 22 06:00:37 2003
---- ./Cross/config.sh-arm-linux.patch Tue Aug 3 17:57:08 2004
-***************
-*** 794,805 ****
- passcat='cat /etc/passwd'
- patchlevel='8'
- path_sep=':'
-! perl5='/usr/bin/perl'
- perl=''
- perl_patchlevel=''
- perladmin='red@criticalintegration.com'
- perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-! perlpath='/usr/bin/perl'
- pg='pg'
- phostname='hostname'
- pidtype='pid_t'
---- 794,805 ----
- passcat='cat /etc/passwd'
- patchlevel='8'
- path_sep=':'
-! perl5='hostperl'
- perl=''
- perl_patchlevel=''
- perladmin='red@criticalintegration.com'
- perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-! perlpath='hostperl'
- pg='pg'
- phostname='hostname'
- pidtype='pid_t'
-***************
-*** 905,911 ****
- srandom_r_proto='0'
- src='.'
- ssizetype='ssize_t'
-! startperl='#!/usr/bin/perl'
- startsh='#!/bin/sh'
- static_ext=' '
- stdchar='char'
---- 905,911 ----
- srandom_r_proto='0'
- src='.'
- ssizetype='ssize_t'
-! startperl='#!hostperl'
- startsh='#!/bin/sh'
- static_ext=' '
- stdchar='char'
diff --git a/recipes/perl/perl-5.8.4/config.sh-i686-linux b/recipes/perl/perl-5.8.4/config.sh-i686-linux
deleted file mode 100644
index 0978100abc..0000000000
--- a/recipes/perl/perl-5.8.4/config.sh-i686-linux
+++ /dev/null
@@ -1,1024 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Wed Mar 9 04:09:49 CST 2005
-# Configured by : kergoth
-# Target system : linux hyperion 2.6.11-ck1 #1 wed mar 2 23:48:21 cst 2005 i686 gnulinux
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='4'
-ansi2knr=''
-aphostname='/bin/hostname'
-api_revision='5'
-api_subversion='0'
-api_version='8'
-api_versionstring='5.8.0'
-ar='ar'
-archlib='/usr/lib/perl5/5.8.4/i686-linux'
-archlibexp='/usr/lib/perl5/5.8.4/i686-linux'
-archname64=''
-archname='i686-linux'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/bin'
-binexp='/usr/bin'
-bison='bison'
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='cat'
-cc='cc'
-cccdlflags='-fpic'
-ccdlflags='-Wl,-E -Wl,-rpath,./install_me_here/usr/lib/perl5/5.8.4/i686-linux/CORE'
-ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccname='gcc'
-ccsymbols='__GNUC_PATCHLEVEL__=5'
-ccversion=''
-cf_by='kergoth'
-cf_email='kergoth@hyperion.kergoth.com'
-cf_time='Wed Mar 9 04:09:49 CST 2005'
-charsize='1'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols='__GNUC__=3 __GNUC_MINOR__=3'
-cppflags='-fno-strict-aliasing -I/usr/local/include'
-cpplast='-'
-cppminus='-'
-cpprun='cc -E'
-cppstdin='cc -E'
-cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=3 __GNU_LIBRARY__=6 i386=1 __i386=1 __i386__=1 __i486=1 __i486__=1 _LARGEFILE_SOURCE=1 linux=1 __linux=1 __linux__=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 __STDC__=1 unix=1 __unix=1 __unix__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribut='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='undef'
-d_castneg='define'
-d_charvspr='define'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid_r='undef'
-d_ctime_r='undef'
-d_cuserid='define'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dirfd='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='undef'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='undef'
-d_fgetpos='define'
-d_finite='define'
-d_finitel='define'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='define'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='define'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='define'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime_r='undef'
-d_gnulibc='define'
-d_grpasswd='define'
-d_hasmntopt='define'
-d_htonl='define'
-d_ilogbl='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_link='define'
-d_localtime_r='undef'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='define'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_procselfexe='define'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='define'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='define'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='define'
-d_setresuid='define'
-d_setreuid='define'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sockatmark='define'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='define'
-d_statfs_f_flags='undef'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='undef'
-d_truncate='define'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='undef'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_unordered='undef'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='define'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major=''
-db_version_minor=''
-db_version_patch=''
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='attrs B ByteLoader Cwd Data/Dumper Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='attrs B ByteLoader Cwd Data/Dumper Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared Errno'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='16'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='3.3.5 (Debian 1:3.3.5-6)'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version='2.3.2'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='cat /etc/hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='define'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='define'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='define'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='define'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='define'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs='y'
-inc_version_list=' '
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.4/i686-linux'
-installbin='./install_me_here/usr/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir='./install_me_here/usr/share/man/man1'
-installman3dir='./install_me_here/usr/share/man/man3'
-installprefix='./install_me_here/usr'
-installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.8.4'
-installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.4/i686-linux'
-installsitebin='./install_me_here/usr/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.4'
-installsiteman1dir='./install_me_here/usr/share/man/man1'
-installsiteman3dir='./install_me_here/usr/share/man/man3'
-installsitescript='./install_me_here/usr/bin'
-installstyle='./install_me_herelib/perl5'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='/usr/bin/test -h'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='attrs B ByteLoader Cwd Data/Dumper DB_File Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared'
-ksh=''
-ld='cc'
-lddlflags='-shared -L/usr/local/lib'
-ldflags=' -L/usr/local/lib'
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/lib/libc-2.3.2.so'
-libperl='libperl.so'
-libpth='/usr/local/lib /lib /usr/lib'
-libs='-ldl -lm -lc -lcrypt'
-libsdirs=' /usr/lib'
-libsfiles=' libdl.so libm.so libc.so libcrypt.so'
-libsfound=' /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libc.so /usr/lib/libcrypt.so'
-libspath=' /usr/local/lib /lib /usr/lib'
-libswanted='gdbm gdbm_compat db dl m c crypt'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='12'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/usr/share/man/man1'
-man1direxp='/usr/share/man/man1'
-man1ext='1'
-man3dir='/usr/share/man/man3'
-man3direxp='/usr/share/man/man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='i686-linux'
-mydomain='.kergoth.com'
-myhostname='hyperion'
-myuname='linux hyperion 2.6.11-ck1 #1 wed mar 2 23:48:21 cst 2005 i686 gnulinux '
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='size_t'
-netdb_host_type='const void *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt=''
-nm_so_opt='--dynamic'
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='linux'
-osvers='2.6.11-ck1'
-otherlibdirs=' '
-package='perl5'
-pager='/usr/bin/less'
-passcat='cat /etc/passwd'
-patchlevel='8'
-path_sep=':'
-perl5='hostperl'
-perl=''
-perl_patchlevel=''
-perladmin=''
-perllibs='-ldl -lm -lc -lcrypt'
-perlpath='hostperl'
-pg='pg'
-phostname='hostname'
-pidtype='pid_t'
-plibpth=''
-pmake=''
-pr=''
-prefix='/usr'
-prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.4'
-privlibexp='/usr/lib/perl5/5.8.4'
-procselfexe='"/proc/self/exe"'
-prototype='define'
-ptrsize='4'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rmail=''
-run=''
-runnm='false'
-sPRIEUldbl='"LE"'
-sPRIFUldbl='"LF"'
-sPRIGUldbl='"LG"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl='"Le"'
-sPRIfldbl='"Lf"'
-sPRIgldbl='"Lg"'
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl='"Lf"'
-sched_yield='sched_yield()'
-scriptdir='/usr/bin'
-scriptdirexp='/usr/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='65'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 RTMIN NUM34 NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "RTMIN", "NUM34", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
-sig_size='69'
-signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.4/i686-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.4/i686-linux'
-sitebin='/usr/bin'
-sitebinexp='/usr/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.8.4'
-sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.8.4'
-siteman1dir='/usr/share/man/man1'
-siteman1direxp='/usr/share/man/man1'
-siteman3dir='/usr/share/man/man3'
-siteman3direxp='/usr/share/man/man3'
-siteprefix='/usr'
-siteprefixexp='/usr'
-sitescript='/usr/bin'
-sitescriptexp='/usr/bin'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!hostperl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='4'
-sysman='/usr/share/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h /usr/include/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='define'
-useithreads='undef'
-uselargefiles='define'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-usesfio='false'
-useshrplib='true'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='5.8.4'
-version_patchlevel_string='version 8 subversion 4'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='./Configure'
-config_args=''
-config_argc=0
-PERL_REVISION=5
-PERL_VERSION=8
-PERL_SUBVERSION=4
-PERL_API_REVISION=5
-PERL_API_VERSION=8
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=
-PERL_CONFIG_SH=true
diff --git a/recipes/perl/perl-5.8.4/config.sh-mipsel-linux b/recipes/perl/perl-5.8.4/config.sh-mipsel-linux
deleted file mode 100644
index eedf443f04..0000000000
--- a/recipes/perl/perl-5.8.4/config.sh-mipsel-linux
+++ /dev/null
@@ -1,1026 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Mon Sep 20 18:18:52 CEST 2004
-# Configured by : root
-# Target system : linux mtx-nfs 2.4.24mtx #59 mon jul 12 15:19:41 cest 2004 mips gnulinux
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='8'
-ansi2knr=''
-aphostname='/bin/hostname'
-api_revision='5'
-api_subversion='0'
-api_version='8'
-api_versionstring='5.8.0'
-ar='ar'
-archlib='/usr/lib/perl5/5.8.4/mipsel-linux'
-archlibexp='/usr/lib/perl5/5.8.4/mipsel-linux'
-archname64=''
-archname='mips-linux'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/bin'
-binexp='/usr/bin'
-bison='bison'
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='cat'
-cc='cc'
-cccdlflags='-fpic'
-ccdlflags='-rdynamic'
-ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccname='gcc'
-ccsymbols='__GNUC_MINOR__=3 __GNUC_PATCHLEVEL__=4'
-ccversion=''
-cf_by='root'
-cf_email='root@mtx-nfs.nonet'
-cf_time='Mon Sep 20 18:18:52 CEST 2004'
-charsize='1'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols='__GNUC__=3'
-cppflags='-fno-strict-aliasing -I/usr/local/include'
-cpplast='-'
-cppminus='-'
-cpprun='cc -E'
-cppstdin='cc -E'
-cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=3 __GNUC_MINOR__=3 __GNU_LIBRARY__=6 LANGUAGE_C=1 _LANGUAGE_C=1 __LANGUAGE_C=1 __LANGUAGE_C__=1 _LARGEFILE_SOURCE=1 MIPSEL=1 _MIPSEL=1 __MIPSEL=1 __MIPSEL__=1 _MIPS_FPSET=16 _MIPS_ISA=1 _MIPS_SIM=1 _MIPS_SZINT=32 _MIPS_SZLONG=32 _MIPS_SZPTR=32 __PIC__=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 R3000=1 _R3000=1 __R3000=1 __R3000__=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 mips=1 _mips=1 __mips=1 __mips__=1 __pic__=1 unix=1 __unix=1 __unix__=1'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribut='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='define'
-d_castneg='define'
-d_charvspr='define'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='define'
-d_ctermid_r='undef'
-d_ctime_r='undef'
-d_cuserid='define'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dirfd='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='undef'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='undef'
-d_fgetpos='define'
-d_finite='define'
-d_finitel='define'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='define'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='define'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='define'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime_r='undef'
-d_gnulibc='define'
-d_grpasswd='define'
-d_hasmntopt='define'
-d_htonl='define'
-d_ilogbl='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_link='define'
-d_localtime_r='undef'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='define'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_procselfexe='define'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='define'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='define'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='define'
-d_setresuid='define'
-d_setreuid='define'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sockatmark='define'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='define'
-d_statfs_f_flags='undef'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='undef'
-d_truncate='define'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='undef'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_unordered='undef'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='define'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major=''
-db_version_minor=''
-db_version_patch=''
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared Errno'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='16'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='/bin/csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='3.3.4 (Debian 1:3.3.4-3)'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version='2.3.2'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat=''
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='define'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='define'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='define'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='define'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='define'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs='y'
-inc_version_list=' '
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.4/mipsel-linux'
-installbin='./install_me_here/usr/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir='./install_me_here/usr/share/man/man1'
-installman3dir='./install_me_here/usr/share/man/man3'
-installprefix='./install_me_here/usr'
-installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.8.4'
-installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.4/mipsel-linux'
-installsitebin='./install_me_here/usr/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.4'
-installsiteman1dir='./install_me_here/usr/share/man/man1'
-installsiteman3dir='./install_me_here/usr/share/man/man3'
-installsitescript='./install_me_here/usr/bin'
-installstyle='./install_me_herelib/perl5'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='/usr/bin/test -h'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-ksh=''
-ld='cc'
-lddlflags='-shared -L/usr/local/lib'
-ldflags=' -L/usr/local/lib'
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/lib/libc-2.3.2.so'
-libperl='libperl.so'
-libpth='/usr/local/lib /lib /usr/lib'
-libs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-libsdirs=' /usr/lib'
-libsfiles=' libnsl.so libdl.so libm.so libcrypt.so libutil.so libc.so'
-libsfound=' /usr/lib/libnsl.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libcrypt.so /usr/lib/libutil.so /usr/lib/libc.so'
-libspath=' /usr/local/lib /lib /usr/lib'
-libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util c cposix posix ucb BSD'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='8'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/usr/share/man/man1'
-man1direxp='/usr/share/man/man1'
-man1ext='1'
-man3dir='/usr/share/man/man3'
-man3direxp='/usr/share/man/man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='mips-linux'
-mydomain='.nonet'
-myhostname='mtx-nfs'
-myuname='linux mtx-nfs 2.4.24mtx #59 mon jul 12 15:19:41 cest 2004 mips gnulinux '
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='size_t'
-netdb_host_type='const void *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt=''
-nm_so_opt='--dynamic'
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='linux'
-osvers='2.4.24mtx'
-otherlibdirs=' '
-package='perl5'
-pager='/usr/bin/less'
-passcat='cat /etc/passwd'
-patchlevel='8'
-path_sep=':'
-perl5='/usr/bin/perl'
-perl=''
-perl_patchlevel=''
-perladmin='root@mtx-nfs.nonet'
-perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-perlpath='/usr/bin/perl'
-pg='pg'
-phostname='hostname'
-pidtype='pid_t'
-plibpth=''
-pm_apiversion='5.005'
-pmake=''
-pr=''
-prefix='/usr'
-prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.4'
-privlibexp='/usr/lib/perl5/5.8.4'
-procselfexe='"/proc/self/exe"'
-prototype='define'
-ptrsize='4'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rmail=''
-run=''
-runnm='false'
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl='"f"'
-sched_yield='sched_yield()'
-scriptdir='/usr/bin'
-scriptdirexp='/usr/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='128'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM USR1 USR2 CHLD PWR WINCH URG IO STOP TSTP CONT TTIN TTOU VTALRM PROF XCPU XFSZ NUM32 NUM33 NUM34 RTMIN NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 NUM64 NUM65 NUM66 NUM67 NUM68 NUM69 NUM70 NUM71 NUM72 NUM73 NUM74 NUM75 NUM76 NUM77 NUM78 NUM79 NUM80 NUM81 NUM82 NUM83 NUM84 NUM85 NUM86 NUM87 NUM88 NUM89 NUM90 NUM91 NUM92 NUM93 NUM94 NUM95 NUM96 NUM97 NUM98 NUM99 NUM100 NUM101 NUM102 NUM103 NUM104 NUM105 NUM106 NUM107 NUM108 NUM109 NUM110 NUM111 NUM112 NUM113 NUM114 NUM115 NUM116 NUM117 NUM118 NUM119 NUM120 NUM121 NUM122 NUM123 NUM124 NUM125 NUM126 RTMAX IOT CLD POLL '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", "USR1", "USR2", "CHLD", "PWR", "WINCH", "URG", "IO", "STOP", "TSTP", "CONT", "TTIN", "TTOU", "VTALRM", "PROF", "XCPU", "XFSZ", "NUM32", "NUM33", "NUM34", "RTMIN", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "NUM64", "NUM65", "NUM66", "NUM67", "NUM68", "NUM69", "NUM70", "NUM71", "NUM72", "NUM73", "NUM74", "NUM75", "NUM76", "NUM77", "NUM78", "NUM79", "NUM80", "NUM81", "NUM82", "NUM83", "NUM84", "NUM85", "NUM86", "NUM87", "NUM88", "NUM89", "NUM90", "NUM91", "NUM92", "NUM93", "NUM94", "NUM95", "NUM96", "NUM97", "NUM98", "NUM99", "NUM100", "NUM101", "NUM102", "NUM103", "NUM104", "NUM105", "NUM106", "NUM107", "NUM108", "NUM109", "NUM110", "NUM111", "NUM112", "NUM113", "NUM114", "NUM115", "NUM116", "NUM117", "NUM118", "NUM119", "NUM120", "NUM121", "NUM122", "NUM123", "NUM124", "NUM125", "NUM126", "RTMAX", "IOT", "CLD", "POLL", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 6 18 22 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 6, 18, 22, 0'
-sig_size='131'
-signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.4/mipsel-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.4/mipsel-linux'
-sitebin='/usr/bin'
-sitebinexp='/usr/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/lib/perl5'
-sitelib_stem='/usr/lib/perl5'
-sitelibexp='/usr/lib/perl5'
-siteman1dir='/usr/share/man/man1'
-siteman1direxp='/usr/share/man/man1'
-siteman3dir='/usr/share/man/man3'
-siteman3direxp='/usr/share/man/man3'
-siteprefix='/usr'
-siteprefixexp='/usr'
-sitescript='/usr/bin'
-sitescriptexp='/usr/bin'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!/usr/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='3'
-sysman='/usr/share/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h /usr/include/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='define'
-useithreads='undef'
-uselargefiles='define'
-uselongdouble='undef'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usemallocwrap='define'
-usenm='false'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-usesfio='false'
-useshrplib='true'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='5.8.4'
-version_patchlevel_string='version 8 subversion 3'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-xs_apiversion='5.8.4'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='./Configure'
-config_args='-des'
-config_argc=1
-config_arg1='-des'
-PERL_REVISION=5
-PERL_VERSION=8
-PERL_SUBVERSION=3
-PERL_API_REVISION=5
-PERL_API_VERSION=8
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVELPERL_CONFIG_SH=true
diff --git a/recipes/perl/perl-5.8.4/uclibc.patch b/recipes/perl/perl-5.8.4/uclibc.patch
deleted file mode 100644
index ce8fe80ff2..0000000000
--- a/recipes/perl/perl-5.8.4/uclibc.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-As seen at http://codepoet.org/lists/uclibc/2004-March/008512.html:
-
-Try the following (untested). In .26, the field member was filedes.
-Current cvs uses __filedes (double underscore prefix).
-
-Manuel
-
---- perl-5.8.4.orig/perlio.c 2004-03-22 14:54:03.000000000 -0500
-+++ perl-5.8.4/perlio.c 2005-03-09 04:33:49.386767312 -0500
-@@ -2824,7 +2824,15 @@
- /* XXX this could use PerlIO_canset_fileno() and
- * PerlIO_set_fileno() support from Configure
- */
--# if defined(__GLIBC__)
-+# if defined(__UCLIBC__)
-+ /* uClibc must come before glibc because it defines __GLIBC__ as well. */
-+# if defined(__MASK_READING)
-+ f->__filedes = -1;
-+# else
-+ f->filedes = -1;
-+# endif
-+ return 1;
-+# elif defined(__GLIBC__)
- /* There may be a better way for GLIBC:
- - libio.h defines a flag to not close() on cleanup
- */
diff --git a/recipes/perl/perl-5.8.7/Makefile.SH.patch b/recipes/perl/perl-5.8.7/Makefile.SH.patch
deleted file mode 100644
index add2952d7e..0000000000
--- a/recipes/perl/perl-5.8.7/Makefile.SH.patch
+++ /dev/null
@@ -1,206 +0,0 @@
---- perl-5.8.7/Makefile.SH.orig 2005-07-25 17:20:35.000000000 +0000
-+++ perl-5.8.7/Makefile.SH 2005-07-25 17:38:09.000000000 +0000
-@@ -129,18 +129,7 @@
- # INSTALL file, under "Building a shared perl library".
- # If there is no pre-existing $libperl, we don't need
- # to do anything further.
-- if test -f $archlib/CORE/$libperl; then
-- rm -f preload
-- cat <<'EOT' > preload
--#! /bin/sh
--lib=$1
--shift
--test -r $lib && export LD_PRELOAD="$lib $LD_PRELOAD"
--exec "$@"
--EOT
-- chmod 755 preload
-- ldlibpth="$ldlibpth `pwd`/preload `pwd`/$libperl"
-- fi
-+ echo linux libraries overwritten by cross-compile patches
- ;;
- os390) test -f /bin/env && ldlibpth="/bin/env $ldlibpth"
- ;;
-@@ -377,9 +366,21 @@
- .c.s:
- $(CCCMDSRC) -S $*.c
-
--all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT) extra.pods $(private) $(unidatafiles) $(public) $(dynamic_ext) $(nonxs_ext) extras.make
-- @echo " ";
-- @echo " Everything is up to date. Type '$(MAKE) test' to run test suite."
-+#all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT) extra.pods $(private) $(unidatafiles) $(public) $(dynamic_ext) $(nonxs_ext) extras.make
-+# @echo " ";
-+# @echo " Everything is up to date. Type '$(MAKE) test' to run test suite."
-+
-+all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT)
-+ mv miniperl miniperl-arm
-+ ln -s hostperl miniperl
-+
-+more: extra.pods $(private) $(unidatafiles) $(public)
-+
-+more2: $(dynamic_ext)
-+
-+more3: $(nonxs_ext)
-+
-+more4: extras.make
-
- .PHONY: all compile translators utilities
-
-@@ -389,10 +390,10 @@
- cd x2p; $(MAKE) compile;
- cd pod; $(MAKE) compile;
-
--translators: miniperl$(EXE_EXT) $(CONFIGPM) FORCE
-+translators: $(CONFIGPM) FORCE
- @echo " "; echo " Making x2p stuff"; cd x2p; $(LDLIBPTH) $(MAKE) all
-
--utilities: miniperl$(EXE_EXT) $(CONFIGPM) $(plextract) lib/lib.pm FORCE
-+utilities: $(CONFIGPM) $(plextract) lib/lib.pm FORCE
- @echo " "; echo " Making utilities"; cd utils; $(LDLIBPTH) $(MAKE) all
-
-
-@@ -570,7 +571,7 @@
- $(CC) -o miniperl $(CLDFLAGS) \
- `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
- miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
-- $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
-+# $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
- !NO!SUBS!
- ;;
- next4*)
-@@ -578,7 +579,7 @@
- miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT)
- $(CC) -o miniperl `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
- miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
-- $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
-+# $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
- !NO!SUBS!
- ;;
- darwin*)
-@@ -599,7 +600,7 @@
- -@rm -f miniperl.xok
- $(CC) $(CLDFLAGS) $(NAMESPACEFLAGS) -o miniperl \
- miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) $(LLIBPERL) $(libs)
-- $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
-+# $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
- !NO!SUBS!
- ;;
- *)
-@@ -608,7 +609,7 @@
- -@rm -f miniperl.xok
- $(LDLIBPTH) $(CC) $(CLDFLAGS) -o miniperl \
- miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) $(LLIBPERL) $(libs)
-- $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
-+# $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
- !NO!SUBS!
- ;;
- esac
-@@ -745,7 +746,7 @@
- # We need to autosplit in two steps because VOS can't handle so many args
- #
- .PHONY: preplibrary
--preplibrary: miniperl$(EXE_EXT) $(CONFIGPM) lib/lib.pm $(PREPLIBRARY_LIBPERL)
-+preplibrary: $(CONFIGPM) lib/lib.pm $(PREPLIBRARY_LIBPERL)
- @sh ./makedir lib/auto
- @echo " AutoSplitting perl library"
- $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \
-@@ -757,11 +758,11 @@
- # Take care to avoid modifying lib/Config.pm without reason
- # (If trying to create a new port and having problems with the configpm script,
- # try 'make minitest' and/or commenting out the tests at the end of configpm.)
--$(CONFIGPM): config.sh miniperl$(EXE_EXT) configpm Porting/Glossary
-+$(CONFIGPM): config.sh configpm Porting/Glossary
- $(LDLIBPTH) ./miniperl -Ilib configpm --heavy=lib/Config_heavy.pl configpm.tmp
- sh mv-if-diff configpm.tmp lib/Config.pm
-
--lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl$(EXE_EXT) minimod.pl $(CONFIGPM)
-+lib/ExtUtils/Miniperl.pm: miniperlmain.c minimod.pl $(CONFIGPM)
- $(LDLIBPTH) ./miniperl minimod.pl > minimod.tmp
- sh mv-if-diff minimod.tmp $@
- -touch lib/ExtUtils/Miniperl.pm
-@@ -769,21 +770,21 @@
- lib/re.pm: ext/re/re.pm
- cp ext/re/re.pm ext/re/re.tmp && sh mv-if-diff ext/re/re.tmp lib/re.pm
-
--$(plextract): miniperl$(EXE_EXT) $(CONFIGPM) x2p/s2p
-+$(plextract): $(CONFIGPM) x2p/s2p
- @-rm -f $@
- $(LDLIBPTH) ./miniperl -I`pwd`/lib $@.PL
-
--x2p/s2p: miniperl$(EXE_EXT) $(CONFIGPM) x2p/s2p.PL
-+x2p/s2p: $(CONFIGPM) x2p/s2p.PL
- cd x2p; $(LDLIBPTH) $(MAKE) s2p
-
--lib/lib.pm: miniperl$(EXE_EXT) $(CONFIGPM)
-+lib/lib.pm: $(CONFIGPM)
- @-rm -f $@
- $(LDLIBPTH) ./miniperl -Ilib lib/lib_pm.PL
-
--$(unidatafiles): miniperl$(EXE_EXT) $(CONFIGPM) lib/unicore/mktables
-+$(unidatafiles): $(CONFIGPM) lib/unicore/mktables
- cd lib/unicore && $(LDLIBPTH) ../../miniperl -I../../lib mktables -w
-
--extra.pods: miniperl$(EXE_EXT)
-+extra.pods:
- -@test -f extra.pods && rm -f `cat extra.pods`
- -@rm -f extra.pods
- -@for x in `grep -l '^=[a-z]' README.* | grep -v README.vms` ; do \
-@@ -830,18 +831,8 @@
- INSTALL_DEPENDENCE = all
-
- install.perl: $(INSTALL_DEPENDENCE) installperl
-- if [ -n "$(COMPILE)" ]; \
-- then \
-- cd utils; $(MAKE) compile; \
-- cd ../x2p; $(MAKE) compile; \
-- cd ../pod; $(MAKE) compile; \
-- else :; \
-- fi
-- $(LDLIBPTH) ./perl installperl --destdir=$(DESTDIR) $(INSTALLFLAGS) $(STRIPFLAGS)
-- $(MAKE) extras.install
--
--install.man: all installman
-- $(LDLIBPTH) ./perl installman --destdir=$(DESTDIR) $(INSTALLFLAGS)
-+ cp lib/Config.pm lib/Config_heavy.pl .
-+ ./hostperl -I. installperl $(INSTALLFLAGS) $(STRIPFLAGS)
-
- # XXX Experimental. Hardwired values, but useful for testing.
- # Eventually Configure could ask for some of these values.
-@@ -957,16 +947,16 @@
- #
- # DynaLoader may be needed for extensions that use Makefile.PL.
-
--$(DYNALOADER): miniperl$(EXE_EXT) preplibrary FORCE
-+$(DYNALOADER): preplibrary FORCE
- @$(LDLIBPTH) sh ext/util/make_ext $(STATIC) $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
--d_dummy $(dynamic_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE
-+d_dummy $(dynamic_ext): preplibrary $(DYNALOADER) FORCE
- @$(LDLIBPTH) sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
--s_dummy $(static_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE
-+s_dummy $(static_ext): preplibrary $(DYNALOADER) FORCE
- @$(LDLIBPTH) sh ext/util/make_ext $(STATIC) $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
--n_dummy $(nonxs_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE
-+n_dummy $(nonxs_ext): preplibrary $(DYNALOADER) FORCE
- @$(LDLIBPTH) sh ext/util/make_ext nonxs $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
- .PHONY: clean _tidy _mopup _cleaner1 _cleaner2 \
-@@ -1108,7 +1098,7 @@
-
- test_prep_pre: preplibrary utilities $(nonxs_ext)
-
--test_prep: test_prep_pre miniperl$(EXE_EXT) $(unidatafiles) perl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL)
-+test_prep: test_prep_pre $(unidatafiles) perl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL)
- PERL=./perl $(MAKE) _test_prep
-
- _test_tty:
-@@ -1221,7 +1211,7 @@
-
- # Can't depend on lib/Config.pm because that might be where miniperl
- # is crashing.
--minitest: miniperl$(EXE_EXT) lib/re.pm minitest.prep
-+minitest: lib/re.pm minitest.prep
- - cd t && (rm -f perl$(EXE_EXT); $(LNS) ../miniperl$(EXE_EXT) perl$(EXE_EXT)) \
- && $(LDLIBPTH) ./perl TEST -minitest base/*.t comp/*.t cmd/*.t run/*.t io/*.t op/*.t uni/*.t </dev/tty
-
diff --git a/recipes/perl/perl-5.8.7/Makefile.patch b/recipes/perl/perl-5.8.7/Makefile.patch
deleted file mode 100644
index 36cc1f942d..0000000000
--- a/recipes/perl/perl-5.8.7/Makefile.patch
+++ /dev/null
@@ -1,18 +0,0 @@
---- perl-5.8.7/Cross/Makefile.orig 2005-07-25 19:45:16.000000000 +0000
-+++ perl-5.8.7/Cross/Makefile 2005-07-25 19:46:09.000000000 +0000
-@@ -58,11 +58,11 @@
- $(TOPDIR)/generate_config_sh config.sh-$(SYS) > $(TOPDIR)/../config.sh
- cd $(TOPDIR)/.. ; ./Configure -S ; make depend ; make ; make more
- cd $(TOPDIR)/.. ; mkdir -p fake_config_library ; cp lib/Config.pm fake_config_library
-- cd $(TOPDIR)/.. ; $(MAKE) more2 "PERLRUN=/usr/bin/perl -I$(TOPDIR)/../fake_config_library -MConfig"
-- cd $(TOPDIR)/.. ; $(MAKE) more3 "PERLRUN=/usr/bin/perl -I$(TOPDIR)/../fake_config_library -MConfig"
-- cd $(TOPDIR)/.. ; $(MAKE) more4 "PERLRUN=/usr/bin/perl -I$(TOPDIR)/../fake_config_library -MConfig"
-+ cd $(TOPDIR)/.. ; $(MAKE) more2 "PERLRUN=hostperl -I$(TOPDIR)/../fake_config_library -MConfig"
-+ cd $(TOPDIR)/.. ; $(MAKE) more3 "PERLRUN=hostperl -I$(TOPDIR)/../fake_config_library -MConfig"
-+ cd $(TOPDIR)/.. ; $(MAKE) more4 "PERLRUN=hostperl -I$(TOPDIR)/../fake_config_library -MConfig"
- cd $(TOPDIR)/.. ; rm -rf install_me_here
-- cd $(TOPDIR)/.. ; make install-strip
-+# cd $(TOPDIR)/.. ; make install-strip
- cd $(TOPDIR)/.. ; sh -x Cross/warp
-
-
diff --git a/recipes/perl/perl-5.8.7/config.sh-arm-linux b/recipes/perl/perl-5.8.7/config.sh-arm-linux
deleted file mode 100644
index 0e021b26db..0000000000
--- a/recipes/perl/perl-5.8.7/config.sh-arm-linux
+++ /dev/null
@@ -1,1029 +0,0 @@
-#!/bin/sh
-#NOTE: derived from the armeb script
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Mon Jul 25 15:21:53 UTC 2005
-# Configured by : slug
-# Target system : linux thg-slug1 2.6.12.2 #1 wed jul 20 01:50:24 cest 2005 armv5teb unknown unknown gnulinux
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='4'
-ansi2knr=''
-aphostname='/bin/hostname'
-api_revision='5'
-api_subversion='0'
-api_version='8'
-api_versionstring='5.8.0'
-ar='ar'
-archlib='/usr/lib/perl5/5.8.7/arm-linux'
-archlibexp='/usr/lib/perl5/5.8.7/arm-linux'
-archname64=''
-archname='arm-linux'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/bin'
-binexp='/usr/bin'
-bison='bison'
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='1'
-cat='cat'
-cc='cc'
-cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.8.7/arm-linux/CORE'
-ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccname='gcc'
-ccsymbols='__APCS_32__=1 __ARM_ARCH_3__=1 __CHAR_UNSIGNED__=1 __GNUC_MINOR__=95 __arm__=1 __linux=1 __linux__=1 __unix=1 __unix__=1 cpu=arm machine=arm system=posix system=unix'
-ccversion=''
-cf_by='slug'
-cf_email='slug@thg-slug1.thg.se'
-cf_time='Mon Jul 25 15:21:53 UTC 2005'
-charsize='1'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols='__ELF__=1 __GNUC__=2 linux=1 unix=1'
-cppflags='-fno-strict-aliasing -I/usr/local/include -pipe -fno-strict-aliasing -pipe -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-cpplast='-'
-cppminus='-'
-cpprun='cc -E'
-cppstdin='cc -E'
-cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=4 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 unix=1 __unix=1 __unix__=1'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribut='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='define'
-d_castneg='undef'
-d_charvspr='define'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid_r='undef'
-d_ctime_r='undef'
-d_cuserid='define'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dirfd='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='undef'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='undef'
-d_fgetpos='define'
-d_finite='define'
-d_finitel='define'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='define'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='define'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='define'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime_r='undef'
-d_gnulibc='define'
-d_grpasswd='define'
-d_hasmntopt='define'
-d_htonl='define'
-d_ilogbl='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_libm_lib_version='define'
-d_link='define'
-d_localtime_r='undef'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='define'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_procselfexe='define'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='define'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='define'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='define'
-d_setresuid='define'
-d_setreuid='define'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sockatmark='define'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='define'
-d_statfs_f_flags='undef'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='undef'
-d_truncate='define'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='define'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_unordered='undef'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='define'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major=''
-db_version_minor=''
-db_version_patch=''
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared Errno'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='16'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='3.4.4'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version='2.3.90'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='previous'
-hostcat='cat /etc/hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='define'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='define'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='define'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='define'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='define'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs='y'
-inc_version_list=' '
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.7/arm-linux'
-installbin='./install_me_here/usr/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir='./install_me_here/usr/share/man/man1'
-installman3dir='./install_me_here/usr/share/man/man3'
-installprefix='./install_me_here/usr'
-installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.8.7'
-installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.7/arm-linux'
-installsitebin='./install_me_here/usr/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.7'
-installsiteman1dir='./install_me_here/usr/share/man/man1'
-installsiteman3dir='./install_me_here/usr/share/man/man3'
-installsitescript='./install_me_here/usr/bin'
-installstyle='./install_me_herelib/perl5'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='/usr/bin/test -h'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-ksh=''
-ld='cc'
-lddlflags='-shared'
-ldflags=''
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/lib/libc-2.3.90.so'
-libperl='libperl.so'
-libpth='/lib /usr/lib'
-libs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-libsdirs=''
-libsfiles=''
-libsfound=''
-libspath=' /lib /usr/lib'
-libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util c cposix posix ucb BSD'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='8'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/usr/share/man/man1'
-man1direxp='/usr/share/man/man1'
-man1ext='1'
-man3dir='/usr/share/man/man3'
-man3direxp='/usr/share/man/man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='arm-linux'
-mydomain='.thg.se'
-myhostname='thg-slug1'
-myuname='linux thg-slug1 2.6.12.2 #1 wed jul 20 01:50:24 cest 2005 armv5teb unknown unknown gnulinux '
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='size_t'
-netdb_host_type='const void *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt=''
-nm_so_opt='--dynamic'
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='linux'
-osvers='2.6.12.2'
-otherlibdirs=' '
-package='perl5'
-pager='/bin/more'
-passcat='cat /etc/passwd'
-patchlevel='8'
-path_sep=':'
-perl5='hostperl'
-perl=''
-perl_patchlevel=''
-perladmin='slug@thg-slug1.thg.se'
-perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc -lgcc_s $$($(CC) -print-libgcc-file-name)'
-perlpath='hostperl'
-pg='pg'
-phostname='hostname'
-pidtype='pid_t'
-plibpth=''
-pmake=''
-pr=''
-prefix='/usr'
-prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.7'
-privlibexp='/usr/lib/perl5/5.8.7'
-procselfexe='"/proc/self/exe"'
-prototype='define'
-ptrsize='4'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rmail=''
-run=''
-runnm='false'
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl='"f"'
-sched_yield='sched_yield()'
-scriptdir='/usr/bin'
-scriptdirexp='/usr/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='65'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 NUM34 RTMIN NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "NUM34", "RTMIN", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
-sig_size='69'
-signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.7/arm-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.7/arm-linux'
-sitebin='/usr/bin'
-sitebinexp='/usr/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.8.7'
-sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.8.7'
-siteman1dir='/usr/share/man/man1'
-siteman1direxp='/usr/share/man/man1'
-siteman3dir='/usr/share/man/man3'
-siteman3direxp='/usr/share/man/man3'
-siteprefix='/usr'
-siteprefixexp='/usr'
-sitescript='/usr/bin'
-sitescriptexp='/usr/bin'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!/usr/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='7'
-sysman='/usr/share/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h /usr/include/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='define'
-useithreads='undef'
-uselargefiles='define'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='5.8.7'
-version_patchlevel_string='version 8 subversion 7'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='Configure'
-config_args=''
-config_argc=0
-PERL_REVISION=5
-PERL_VERSION=8
-PERL_SUBVERSION=7
-PERL_API_REVISION=5
-PERL_API_VERSION=8
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=
-PERL_CONFIG_SH=true
diff --git a/recipes/perl/perl-5.8.7/config.sh-arm-linux.patch b/recipes/perl/perl-5.8.7/config.sh-arm-linux.patch
deleted file mode 100644
index 0181e37c95..0000000000
--- a/recipes/perl/perl-5.8.7/config.sh-arm-linux.patch
+++ /dev/null
@@ -1,34 +0,0 @@
---- ./Cross/config.sh-arm-linux.orig.old 2005-07-29 12:07:16.000000000 +0200
-+++ ./Cross/config.sh-arm-linux 2005-07-29 12:09:27.000000000 +0200
-@@ -266,6 +266,7 @@
- d_killpg='define'
- d_lchown='define'
- d_ldbl_dig='define'
-+d_libm_lib_version='define'
- d_link='define'
- d_localtime_r='undef'
- d_locconv='define'
-@@ -796,12 +797,12 @@
- passcat='cat /etc/passwd'
- patchlevel='8'
- path_sep=':'
--perl5='/usr/bin/perl'
-+perl5='hostperl'
- perl=''
- perl_patchlevel=''
- perladmin='red@criticalintegration.com'
--perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-+perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc -lgcc_s'
--perlpath='/usr/bin/perl'
-+perlpath='hostperl'
- pg='pg'
- phostname='hostname'
- pidtype='pid_t'
-@@ -971,6 +972,7 @@
- usereentrant='undef'
- usesfio='false'
- useshrplib='true'
-+usesitecustomize='undef'
- usesocks='undef'
- usethreads='undef'
- usevendorprefix='undef'
diff --git a/recipes/perl/perl-5.8.7/config.sh-armeb-linux b/recipes/perl/perl-5.8.7/config.sh-armeb-linux
deleted file mode 100644
index de17bbf28f..0000000000
--- a/recipes/perl/perl-5.8.7/config.sh-armeb-linux
+++ /dev/null
@@ -1,1028 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Mon Jul 25 15:21:53 UTC 2005
-# Configured by : slug
-# Target system : linux thg-slug1 2.6.12.2 #1 wed jul 20 01:50:24 cest 2005 armv5teb unknown unknown gnulinux
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='4'
-ansi2knr=''
-aphostname='/bin/hostname'
-api_revision='5'
-api_subversion='0'
-api_version='8'
-api_versionstring='5.8.0'
-ar='ar'
-archlib='/usr/lib/perl5/5.8.7/armeb-linux'
-archlibexp='/usr/lib/perl5/5.8.7/armeb-linux'
-archname64=''
-archname='armeb-linux'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/bin'
-binexp='/usr/bin'
-bison='bison'
-byacc='byacc'
-byteorder='4321'
-c=''
-castflags='1'
-cat='cat'
-cc='cc'
-cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.8.7/armeb-linux/CORE'
-ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccname='gcc'
-ccsymbols='__APCS_32__=1 __ARM_ARCH_3__=1 __CHAR_UNSIGNED__=1 __GNUC_MINOR__=95 __arm__=1 __linux=1 __linux__=1 __unix=1 __unix__=1 cpu=arm machine=arm system=posix system=unix'
-ccversion=''
-cf_by='slug'
-cf_email='slug@thg-slug1.thg.se'
-cf_time='Mon Jul 25 15:21:53 UTC 2005'
-charsize='1'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols='__ELF__=1 __GNUC__=2 linux=1 unix=1'
-cppflags='-fno-strict-aliasing -I/usr/local/include -pipe -fno-strict-aliasing -pipe -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-cpplast='-'
-cppminus='-'
-cpprun='cc -E'
-cppstdin='cc -E'
-cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=4 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 unix=1 __unix=1 __unix__=1'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribut='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='define'
-d_castneg='undef'
-d_charvspr='define'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid_r='undef'
-d_ctime_r='undef'
-d_cuserid='define'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dirfd='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='undef'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='undef'
-d_fgetpos='define'
-d_finite='define'
-d_finitel='define'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='define'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='define'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='define'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime_r='undef'
-d_gnulibc='define'
-d_grpasswd='define'
-d_hasmntopt='define'
-d_htonl='define'
-d_ilogbl='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_libm_lib_version='define'
-d_link='define'
-d_localtime_r='undef'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='define'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_procselfexe='define'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='define'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='define'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='define'
-d_setresuid='define'
-d_setreuid='define'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sockatmark='define'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='define'
-d_statfs_f_flags='undef'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='undef'
-d_truncate='define'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='define'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_unordered='undef'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='define'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major=''
-db_version_minor=''
-db_version_patch=''
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared Errno'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='16'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='3.4.4'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version='2.3.90'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='previous'
-hostcat='cat /etc/hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='define'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='define'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='define'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='define'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='define'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs='y'
-inc_version_list=' '
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.7/armeb-linux'
-installbin='./install_me_here/usr/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir='./install_me_here/usr/share/man/man1'
-installman3dir='./install_me_here/usr/share/man/man3'
-installprefix='./install_me_here/usr'
-installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.8.7'
-installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.7/armeb-linux'
-installsitebin='./install_me_here/usr/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.7'
-installsiteman1dir='./install_me_here/usr/share/man/man1'
-installsiteman3dir='./install_me_here/usr/share/man/man3'
-installsitescript='./install_me_here/usr/bin'
-installstyle='./install_me_herelib/perl5'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='/usr/bin/test -h'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-ksh=''
-ld='cc'
-lddlflags='-shared'
-ldflags=''
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/lib/libc-2.3.90.so'
-libperl='libperl.so'
-libpth='/lib /usr/lib'
-libs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-libsdirs=''
-libsfiles=''
-libsfound=''
-libspath=' /lib /usr/lib'
-libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util c cposix posix ucb BSD'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='8'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/usr/share/man/man1'
-man1direxp='/usr/share/man/man1'
-man1ext='1'
-man3dir='/usr/share/man/man3'
-man3direxp='/usr/share/man/man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='armeb-linux'
-mydomain='.thg.se'
-myhostname='thg-slug1'
-myuname='linux thg-slug1 2.6.12.2 #1 wed jul 20 01:50:24 cest 2005 armv5teb unknown unknown gnulinux '
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='size_t'
-netdb_host_type='const void *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt=''
-nm_so_opt='--dynamic'
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='linux'
-osvers='2.6.12.2'
-otherlibdirs=' '
-package='perl5'
-pager='/bin/more'
-passcat='cat /etc/passwd'
-patchlevel='8'
-path_sep=':'
-perl5='hostperl'
-perl=''
-perl_patchlevel=''
-perladmin='slug@thg-slug1.thg.se'
-perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc -lgcc_s $$($(CC) -print-libgcc-file-name)'
-perlpath='hostperl'
-pg='pg'
-phostname='hostname'
-pidtype='pid_t'
-plibpth=''
-pmake=''
-pr=''
-prefix='/usr'
-prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.7'
-privlibexp='/usr/lib/perl5/5.8.7'
-procselfexe='"/proc/self/exe"'
-prototype='define'
-ptrsize='4'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rmail=''
-run=''
-runnm='false'
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl='"f"'
-sched_yield='sched_yield()'
-scriptdir='/usr/bin'
-scriptdirexp='/usr/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='65'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 NUM34 RTMIN NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "NUM34", "RTMIN", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
-sig_size='69'
-signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.7/armeb-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.7/armeb-linux'
-sitebin='/usr/bin'
-sitebinexp='/usr/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.8.7'
-sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.8.7'
-siteman1dir='/usr/share/man/man1'
-siteman1direxp='/usr/share/man/man1'
-siteman3dir='/usr/share/man/man3'
-siteman3direxp='/usr/share/man/man3'
-siteprefix='/usr'
-siteprefixexp='/usr'
-sitescript='/usr/bin'
-sitescriptexp='/usr/bin'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!/usr/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='7'
-sysman='/usr/share/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h /usr/include/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='define'
-useithreads='undef'
-uselargefiles='define'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='5.8.7'
-version_patchlevel_string='version 8 subversion 7'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='Configure'
-config_args=''
-config_argc=0
-PERL_REVISION=5
-PERL_VERSION=8
-PERL_SUBVERSION=7
-PERL_API_REVISION=5
-PERL_API_VERSION=8
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=
-PERL_CONFIG_SH=true
diff --git a/recipes/perl/perl-5.8.7/config.sh-i386-linux b/recipes/perl/perl-5.8.7/config.sh-i386-linux
deleted file mode 100644
index ee989f66bb..0000000000
--- a/recipes/perl/perl-5.8.7/config.sh-i386-linux
+++ /dev/null
@@ -1,1028 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Wed Mar 9 04:09:49 CST 2005
-# Configured by : kergoth
-# Target system : linux hyperion 2.6.11-ck1 #1 wed mar 2 23:48:21 cst 2005 i386 gnulinux
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='4'
-ansi2knr=''
-aphostname='/bin/hostname'
-api_revision='5'
-api_subversion='0'
-api_version='8'
-api_versionstring='5.8.0'
-ar='ar'
-archlib='/usr/lib/perl5/5.8.7/i386-linux'
-archlibexp='/usr/lib/perl5/5.8.7/i386-linux'
-archname64=''
-archname='i386-linux'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/bin'
-binexp='/usr/bin'
-bison='bison'
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='cat'
-cc='cc'
-cccdlflags='-fpic'
-ccdlflags='-Wl,-E -Wl,-rpath,./install_me_here/usr/lib/perl5/5.8.7/i386-linux/CORE'
-ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccname='gcc'
-ccsymbols='__GNUC_PATCHLEVEL__=5'
-ccversion=''
-cf_by='kergoth'
-cf_email='kergoth@hyperion.kergoth.com'
-cf_time='Wed Mar 9 04:09:49 CST 2005'
-charsize='1'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols='__GNUC__=3 __GNUC_MINOR__=3'
-cppflags='-fno-strict-aliasing -I/usr/local/include'
-cpplast='-'
-cppminus='-'
-cpprun='cc -E'
-cppstdin='cc -E'
-cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=3 __GNU_LIBRARY__=6 i386=1 __i386=1 __i386__=1 __i486=1 __i486__=1 _LARGEFILE_SOURCE=1 linux=1 __linux=1 __linux__=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 __STDC__=1 unix=1 __unix=1 __unix__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribut='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='undef'
-d_castneg='define'
-d_charvspr='define'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid_r='undef'
-d_ctime_r='undef'
-d_cuserid='define'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dirfd='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='undef'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='undef'
-d_fgetpos='define'
-d_finite='define'
-d_finitel='define'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='define'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='define'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='define'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime_r='undef'
-d_gnulibc='define'
-d_grpasswd='define'
-d_hasmntopt='define'
-d_htonl='define'
-d_ilogbl='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_libm_lib_version='define'
-d_link='define'
-d_localtime_r='undef'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='define'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_procselfexe='define'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='define'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='define'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='define'
-d_setresuid='define'
-d_setreuid='define'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sockatmark='define'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='define'
-d_statfs_f_flags='undef'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='undef'
-d_truncate='define'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='undef'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_unordered='undef'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='define'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major=''
-db_version_minor=''
-db_version_patch=''
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='attrs B ByteLoader Cwd Data/Dumper Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='attrs B ByteLoader Cwd Data/Dumper Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared Errno'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='16'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='3.3.5 (Debian 1:3.3.5-6)'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version='2.3.2'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='cat /etc/hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='define'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='define'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='define'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='define'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='define'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs='y'
-inc_version_list=' '
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.7/i386-linux'
-installbin='./install_me_here/usr/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir='./install_me_here/usr/share/man/man1'
-installman3dir='./install_me_here/usr/share/man/man3'
-installprefix='./install_me_here/usr'
-installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.8.7'
-installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.7/i386-linux'
-installsitebin='./install_me_here/usr/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.7'
-installsiteman1dir='./install_me_here/usr/share/man/man1'
-installsiteman3dir='./install_me_here/usr/share/man/man3'
-installsitescript='./install_me_here/usr/bin'
-installstyle='./install_me_herelib/perl5'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='/usr/bin/test -h'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='attrs B ByteLoader Cwd Data/Dumper DB_File Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared'
-ksh=''
-ld='cc'
-lddlflags='-shared -L/usr/local/lib'
-ldflags=' -L/usr/local/lib'
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/lib/libc-2.3.2.so'
-libperl='libperl.so'
-libpth='/usr/local/lib /lib /usr/lib'
-libs='-ldl -lm -lc -lcrypt'
-libsdirs=' /usr/lib'
-libsfiles=' libdl.so libm.so libc.so libcrypt.so'
-libsfound=' /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libc.so /usr/lib/libcrypt.so'
-libspath=' /usr/local/lib /lib /usr/lib'
-libswanted='gdbm gdbm_compat db dl m c crypt'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='12'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/usr/share/man/man1'
-man1direxp='/usr/share/man/man1'
-man1ext='1'
-man3dir='/usr/share/man/man3'
-man3direxp='/usr/share/man/man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='i386-linux'
-mydomain='.kergoth.com'
-myhostname='hyperion'
-myuname='linux hyperion 2.6.11-ck1 #1 wed mar 2 23:48:21 cst 2005 i386 gnulinux '
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='size_t'
-netdb_host_type='const void *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt=''
-nm_so_opt='--dynamic'
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='linux'
-osvers='2.6.11-ck1'
-otherlibdirs=' '
-package='perl5'
-pager='/usr/bin/less'
-passcat='cat /etc/passwd'
-patchlevel='8'
-path_sep=':'
-perl5='hostperl'
-perl=''
-perl_patchlevel=''
-perladmin=''
-perllibs='-ldl -lm -lc -lcrypt'
-perlpath='hostperl'
-pg='pg'
-phostname='hostname'
-pidtype='pid_t'
-plibpth=''
-pmake=''
-pr=''
-prefix='/usr'
-prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.7'
-privlibexp='/usr/lib/perl5/5.8.7'
-procselfexe='"/proc/self/exe"'
-prototype='define'
-ptrsize='4'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rmail=''
-run=''
-runnm='false'
-sPRIEUldbl='"LE"'
-sPRIFUldbl='"LF"'
-sPRIGUldbl='"LG"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl='"Le"'
-sPRIfldbl='"Lf"'
-sPRIgldbl='"Lg"'
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl='"Lf"'
-sched_yield='sched_yield()'
-scriptdir='/usr/bin'
-scriptdirexp='/usr/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='65'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 RTMIN NUM34 NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "RTMIN", "NUM34", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
-sig_size='69'
-signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.7/i386-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.7/i386-linux'
-sitebin='/usr/bin'
-sitebinexp='/usr/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.8.7'
-sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.8.7'
-siteman1dir='/usr/share/man/man1'
-siteman1direxp='/usr/share/man/man1'
-siteman3dir='/usr/share/man/man3'
-siteman3direxp='/usr/share/man/man3'
-siteprefix='/usr'
-siteprefixexp='/usr'
-sitescript='/usr/bin'
-sitescriptexp='/usr/bin'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!/usr/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='4'
-sysman='/usr/share/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h /usr/include/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='define'
-useithreads='undef'
-uselargefiles='define'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='5.8.7'
-version_patchlevel_string='version 8 subversion 4'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='./Configure'
-config_args=''
-config_argc=0
-PERL_REVISION=5
-PERL_VERSION=8
-PERL_SUBVERSION=4
-PERL_API_REVISION=5
-PERL_API_VERSION=8
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=
-PERL_CONFIG_SH=true
diff --git a/recipes/perl/perl-5.8.7/config.sh-i486-linux b/recipes/perl/perl-5.8.7/config.sh-i486-linux
deleted file mode 100644
index 423822a7a3..0000000000
--- a/recipes/perl/perl-5.8.7/config.sh-i486-linux
+++ /dev/null
@@ -1,1028 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Wed Mar 9 04:09:49 CST 2005
-# Configured by : kergoth
-# Target system : linux hyperion 2.6.11-ck1 #1 wed mar 2 23:48:21 cst 2005 i486 gnulinux
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='4'
-ansi2knr=''
-aphostname='/bin/hostname'
-api_revision='5'
-api_subversion='0'
-api_version='8'
-api_versionstring='5.8.0'
-ar='ar'
-archlib='/usr/lib/perl5/5.8.7/i486-linux'
-archlibexp='/usr/lib/perl5/5.8.7/i486-linux'
-archname64=''
-archname='i486-linux'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/bin'
-binexp='/usr/bin'
-bison='bison'
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='cat'
-cc='cc'
-cccdlflags='-fpic'
-ccdlflags='-Wl,-E -Wl,-rpath,./install_me_here/usr/lib/perl5/5.8.7/i486-linux/CORE'
-ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccname='gcc'
-ccsymbols='__GNUC_PATCHLEVEL__=5'
-ccversion=''
-cf_by='kergoth'
-cf_email='kergoth@hyperion.kergoth.com'
-cf_time='Wed Mar 9 04:09:49 CST 2005'
-charsize='1'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols='__GNUC__=3 __GNUC_MINOR__=3'
-cppflags='-fno-strict-aliasing -I/usr/local/include'
-cpplast='-'
-cppminus='-'
-cpprun='cc -E'
-cppstdin='cc -E'
-cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=3 __GNU_LIBRARY__=6 i486=1 __i486=1 __i486__=1 __i486=1 __i486__=1 _LARGEFILE_SOURCE=1 linux=1 __linux=1 __linux__=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 __STDC__=1 unix=1 __unix=1 __unix__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribut='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='undef'
-d_castneg='define'
-d_charvspr='define'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid_r='undef'
-d_ctime_r='undef'
-d_cuserid='define'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dirfd='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='undef'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='undef'
-d_fgetpos='define'
-d_finite='define'
-d_finitel='define'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='define'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='define'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='define'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime_r='undef'
-d_gnulibc='define'
-d_grpasswd='define'
-d_hasmntopt='define'
-d_htonl='define'
-d_ilogbl='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_libm_lib_version='define'
-d_link='define'
-d_localtime_r='undef'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='define'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_procselfexe='define'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='define'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='define'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='define'
-d_setresuid='define'
-d_setreuid='define'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sockatmark='define'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='define'
-d_statfs_f_flags='undef'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='undef'
-d_truncate='define'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='undef'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_unordered='undef'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='define'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major=''
-db_version_minor=''
-db_version_patch=''
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='attrs B ByteLoader Cwd Data/Dumper Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='attrs B ByteLoader Cwd Data/Dumper Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared Errno'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='16'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='3.3.5 (Debian 1:3.3.5-6)'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version='2.3.2'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='cat /etc/hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='define'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='define'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='define'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='define'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='define'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs='y'
-inc_version_list=' '
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.7/i486-linux'
-installbin='./install_me_here/usr/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir='./install_me_here/usr/share/man/man1'
-installman3dir='./install_me_here/usr/share/man/man3'
-installprefix='./install_me_here/usr'
-installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.8.7'
-installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.7/i486-linux'
-installsitebin='./install_me_here/usr/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.7'
-installsiteman1dir='./install_me_here/usr/share/man/man1'
-installsiteman3dir='./install_me_here/usr/share/man/man3'
-installsitescript='./install_me_here/usr/bin'
-installstyle='./install_me_herelib/perl5'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='/usr/bin/test -h'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='attrs B ByteLoader Cwd Data/Dumper DB_File Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared'
-ksh=''
-ld='cc'
-lddlflags='-shared -L/usr/local/lib'
-ldflags=' -L/usr/local/lib'
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/lib/libc-2.3.2.so'
-libperl='libperl.so'
-libpth='/usr/local/lib /lib /usr/lib'
-libs='-ldl -lm -lc -lcrypt'
-libsdirs=' /usr/lib'
-libsfiles=' libdl.so libm.so libc.so libcrypt.so'
-libsfound=' /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libc.so /usr/lib/libcrypt.so'
-libspath=' /usr/local/lib /lib /usr/lib'
-libswanted='gdbm gdbm_compat db dl m c crypt'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='12'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/usr/share/man/man1'
-man1direxp='/usr/share/man/man1'
-man1ext='1'
-man3dir='/usr/share/man/man3'
-man3direxp='/usr/share/man/man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='i486-linux'
-mydomain='.kergoth.com'
-myhostname='hyperion'
-myuname='linux hyperion 2.6.11-ck1 #1 wed mar 2 23:48:21 cst 2005 i486 gnulinux '
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='size_t'
-netdb_host_type='const void *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt=''
-nm_so_opt='--dynamic'
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='linux'
-osvers='2.6.11-ck1'
-otherlibdirs=' '
-package='perl5'
-pager='/usr/bin/less'
-passcat='cat /etc/passwd'
-patchlevel='8'
-path_sep=':'
-perl5='hostperl'
-perl=''
-perl_patchlevel=''
-perladmin=''
-perllibs='-ldl -lm -lc -lcrypt'
-perlpath='hostperl'
-pg='pg'
-phostname='hostname'
-pidtype='pid_t'
-plibpth=''
-pmake=''
-pr=''
-prefix='/usr'
-prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.7'
-privlibexp='/usr/lib/perl5/5.8.7'
-procselfexe='"/proc/self/exe"'
-prototype='define'
-ptrsize='4'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rmail=''
-run=''
-runnm='false'
-sPRIEUldbl='"LE"'
-sPRIFUldbl='"LF"'
-sPRIGUldbl='"LG"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl='"Le"'
-sPRIfldbl='"Lf"'
-sPRIgldbl='"Lg"'
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl='"Lf"'
-sched_yield='sched_yield()'
-scriptdir='/usr/bin'
-scriptdirexp='/usr/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='65'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 RTMIN NUM34 NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "RTMIN", "NUM34", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
-sig_size='69'
-signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.7/i486-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.7/i486-linux'
-sitebin='/usr/bin'
-sitebinexp='/usr/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.8.7'
-sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.8.7'
-siteman1dir='/usr/share/man/man1'
-siteman1direxp='/usr/share/man/man1'
-siteman3dir='/usr/share/man/man3'
-siteman3direxp='/usr/share/man/man3'
-siteprefix='/usr'
-siteprefixexp='/usr'
-sitescript='/usr/bin'
-sitescriptexp='/usr/bin'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!/usr/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='4'
-sysman='/usr/share/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h /usr/include/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='define'
-useithreads='undef'
-uselargefiles='define'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='5.8.7'
-version_patchlevel_string='version 8 subversion 4'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='./Configure'
-config_args=''
-config_argc=0
-PERL_REVISION=5
-PERL_VERSION=8
-PERL_SUBVERSION=4
-PERL_API_REVISION=5
-PERL_API_VERSION=8
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=
-PERL_CONFIG_SH=true
diff --git a/recipes/perl/perl-5.8.7/config.sh-i586-linux b/recipes/perl/perl-5.8.7/config.sh-i586-linux
deleted file mode 100644
index 734b17af36..0000000000
--- a/recipes/perl/perl-5.8.7/config.sh-i586-linux
+++ /dev/null
@@ -1,1028 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Wed Mar 9 04:09:49 CST 2005
-# Configured by : kergoth
-# Target system : linux hyperion 2.6.11-ck1 #1 wed mar 2 23:48:21 cst 2005 i586 gnulinux
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='4'
-ansi2knr=''
-aphostname='/bin/hostname'
-api_revision='5'
-api_subversion='0'
-api_version='8'
-api_versionstring='5.8.0'
-ar='ar'
-archlib='/usr/lib/perl5/5.8.7/i586-linux'
-archlibexp='/usr/lib/perl5/5.8.7/i586-linux'
-archname64=''
-archname='i586-linux'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/bin'
-binexp='/usr/bin'
-bison='bison'
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='cat'
-cc='cc'
-cccdlflags='-fpic'
-ccdlflags='-Wl,-E -Wl,-rpath,./install_me_here/usr/lib/perl5/5.8.7/i586-linux/CORE'
-ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccname='gcc'
-ccsymbols='__GNUC_PATCHLEVEL__=5'
-ccversion=''
-cf_by='kergoth'
-cf_email='kergoth@hyperion.kergoth.com'
-cf_time='Wed Mar 9 04:09:49 CST 2005'
-charsize='1'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols='__GNUC__=3 __GNUC_MINOR__=3'
-cppflags='-fno-strict-aliasing -I/usr/local/include'
-cpplast='-'
-cppminus='-'
-cpprun='cc -E'
-cppstdin='cc -E'
-cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=3 __GNU_LIBRARY__=6 i586=1 __i586=1 __i586__=1 __i586=1 __i586__=1 _LARGEFILE_SOURCE=1 linux=1 __linux=1 __linux__=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 __STDC__=1 unix=1 __unix=1 __unix__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribut='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='undef'
-d_castneg='define'
-d_charvspr='define'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid_r='undef'
-d_ctime_r='undef'
-d_cuserid='define'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dirfd='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='undef'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='undef'
-d_fgetpos='define'
-d_finite='define'
-d_finitel='define'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='define'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='define'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='define'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime_r='undef'
-d_gnulibc='define'
-d_grpasswd='define'
-d_hasmntopt='define'
-d_htonl='define'
-d_ilogbl='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_libm_lib_version='define'
-d_link='define'
-d_localtime_r='undef'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='define'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_procselfexe='define'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='define'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='define'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='define'
-d_setresuid='define'
-d_setreuid='define'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sockatmark='define'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='define'
-d_statfs_f_flags='undef'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='undef'
-d_truncate='define'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='undef'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_unordered='undef'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='define'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major=''
-db_version_minor=''
-db_version_patch=''
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='attrs B ByteLoader Cwd Data/Dumper Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='attrs B ByteLoader Cwd Data/Dumper Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared Errno'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='16'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='3.3.5 (Debian 1:3.3.5-6)'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version='2.3.2'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='cat /etc/hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='define'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='define'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='define'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='define'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='define'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs='y'
-inc_version_list=' '
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.7/i586-linux'
-installbin='./install_me_here/usr/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir='./install_me_here/usr/share/man/man1'
-installman3dir='./install_me_here/usr/share/man/man3'
-installprefix='./install_me_here/usr'
-installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.8.7'
-installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.7/i586-linux'
-installsitebin='./install_me_here/usr/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.7'
-installsiteman1dir='./install_me_here/usr/share/man/man1'
-installsiteman3dir='./install_me_here/usr/share/man/man3'
-installsitescript='./install_me_here/usr/bin'
-installstyle='./install_me_herelib/perl5'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='/usr/bin/test -h'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='attrs B ByteLoader Cwd Data/Dumper DB_File Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared'
-ksh=''
-ld='cc'
-lddlflags='-shared -L/usr/local/lib'
-ldflags=' -L/usr/local/lib'
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/lib/libc-2.3.2.so'
-libperl='libperl.so'
-libpth='/usr/local/lib /lib /usr/lib'
-libs='-ldl -lm -lc -lcrypt'
-libsdirs=' /usr/lib'
-libsfiles=' libdl.so libm.so libc.so libcrypt.so'
-libsfound=' /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libc.so /usr/lib/libcrypt.so'
-libspath=' /usr/local/lib /lib /usr/lib'
-libswanted='gdbm gdbm_compat db dl m c crypt'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='12'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/usr/share/man/man1'
-man1direxp='/usr/share/man/man1'
-man1ext='1'
-man3dir='/usr/share/man/man3'
-man3direxp='/usr/share/man/man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='i586-linux'
-mydomain='.kergoth.com'
-myhostname='hyperion'
-myuname='linux hyperion 2.6.11-ck1 #1 wed mar 2 23:48:21 cst 2005 i586 gnulinux '
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='size_t'
-netdb_host_type='const void *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt=''
-nm_so_opt='--dynamic'
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='linux'
-osvers='2.6.11-ck1'
-otherlibdirs=' '
-package='perl5'
-pager='/usr/bin/less'
-passcat='cat /etc/passwd'
-patchlevel='8'
-path_sep=':'
-perl5='hostperl'
-perl=''
-perl_patchlevel=''
-perladmin=''
-perllibs='-ldl -lm -lc -lcrypt'
-perlpath='hostperl'
-pg='pg'
-phostname='hostname'
-pidtype='pid_t'
-plibpth=''
-pmake=''
-pr=''
-prefix='/usr'
-prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.7'
-privlibexp='/usr/lib/perl5/5.8.7'
-procselfexe='"/proc/self/exe"'
-prototype='define'
-ptrsize='4'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rmail=''
-run=''
-runnm='false'
-sPRIEUldbl='"LE"'
-sPRIFUldbl='"LF"'
-sPRIGUldbl='"LG"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl='"Le"'
-sPRIfldbl='"Lf"'
-sPRIgldbl='"Lg"'
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl='"Lf"'
-sched_yield='sched_yield()'
-scriptdir='/usr/bin'
-scriptdirexp='/usr/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='65'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 RTMIN NUM34 NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "RTMIN", "NUM34", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
-sig_size='69'
-signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.7/i586-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.7/i586-linux'
-sitebin='/usr/bin'
-sitebinexp='/usr/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.8.7'
-sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.8.7'
-siteman1dir='/usr/share/man/man1'
-siteman1direxp='/usr/share/man/man1'
-siteman3dir='/usr/share/man/man3'
-siteman3direxp='/usr/share/man/man3'
-siteprefix='/usr'
-siteprefixexp='/usr'
-sitescript='/usr/bin'
-sitescriptexp='/usr/bin'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!/usr/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='4'
-sysman='/usr/share/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h /usr/include/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='define'
-useithreads='undef'
-uselargefiles='define'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='5.8.7'
-version_patchlevel_string='version 8 subversion 4'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='./Configure'
-config_args=''
-config_argc=0
-PERL_REVISION=5
-PERL_VERSION=8
-PERL_SUBVERSION=4
-PERL_API_REVISION=5
-PERL_API_VERSION=8
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=
-PERL_CONFIG_SH=true
diff --git a/recipes/perl/perl-5.8.7/config.sh-i686-linux b/recipes/perl/perl-5.8.7/config.sh-i686-linux
deleted file mode 100644
index 7d5a531266..0000000000
--- a/recipes/perl/perl-5.8.7/config.sh-i686-linux
+++ /dev/null
@@ -1,1028 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Wed Mar 9 04:09:49 CST 2005
-# Configured by : kergoth
-# Target system : linux hyperion 2.6.11-ck1 #1 wed mar 2 23:48:21 cst 2005 i686 gnulinux
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='4'
-ansi2knr=''
-aphostname='/bin/hostname'
-api_revision='5'
-api_subversion='0'
-api_version='8'
-api_versionstring='5.8.0'
-ar='ar'
-archlib='/usr/lib/perl5/5.8.7/i686-linux'
-archlibexp='/usr/lib/perl5/5.8.7/i686-linux'
-archname64=''
-archname='i686-linux'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/bin'
-binexp='/usr/bin'
-bison='bison'
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='cat'
-cc='cc'
-cccdlflags='-fpic'
-ccdlflags='-Wl,-E -Wl,-rpath,./install_me_here/usr/lib/perl5/5.8.7/i686-linux/CORE'
-ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccname='gcc'
-ccsymbols='__GNUC_PATCHLEVEL__=5'
-ccversion=''
-cf_by='kergoth'
-cf_email='kergoth@hyperion.kergoth.com'
-cf_time='Wed Mar 9 04:09:49 CST 2005'
-charsize='1'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols='__GNUC__=3 __GNUC_MINOR__=3'
-cppflags='-fno-strict-aliasing -I/usr/local/include'
-cpplast='-'
-cppminus='-'
-cpprun='cc -E'
-cppstdin='cc -E'
-cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=3 __GNU_LIBRARY__=6 i386=1 __i386=1 __i386__=1 __i486=1 __i486__=1 _LARGEFILE_SOURCE=1 linux=1 __linux=1 __linux__=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 __STDC__=1 unix=1 __unix=1 __unix__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribut='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='undef'
-d_castneg='define'
-d_charvspr='define'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid_r='undef'
-d_ctime_r='undef'
-d_cuserid='define'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dirfd='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='undef'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='undef'
-d_fgetpos='define'
-d_finite='define'
-d_finitel='define'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='define'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='define'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='define'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime_r='undef'
-d_gnulibc='define'
-d_grpasswd='define'
-d_hasmntopt='define'
-d_htonl='define'
-d_ilogbl='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_libm_lib_version='define'
-d_link='define'
-d_localtime_r='undef'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='define'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_procselfexe='define'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='define'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='define'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='define'
-d_setresuid='define'
-d_setreuid='define'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sockatmark='define'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='define'
-d_statfs_f_flags='undef'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='undef'
-d_truncate='define'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='undef'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_unordered='undef'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='define'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major=''
-db_version_minor=''
-db_version_patch=''
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='attrs B ByteLoader Cwd Data/Dumper Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='attrs B ByteLoader Cwd Data/Dumper Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared Errno'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='16'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='3.3.5 (Debian 1:3.3.5-6)'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version='2.3.2'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='cat /etc/hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='define'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='define'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='define'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='define'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='define'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs='y'
-inc_version_list=' '
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.7/i686-linux'
-installbin='./install_me_here/usr/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir='./install_me_here/usr/share/man/man1'
-installman3dir='./install_me_here/usr/share/man/man3'
-installprefix='./install_me_here/usr'
-installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.8.7'
-installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.7/i686-linux'
-installsitebin='./install_me_here/usr/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.7'
-installsiteman1dir='./install_me_here/usr/share/man/man1'
-installsiteman3dir='./install_me_here/usr/share/man/man3'
-installsitescript='./install_me_here/usr/bin'
-installstyle='./install_me_herelib/perl5'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='/usr/bin/test -h'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='attrs B ByteLoader Cwd Data/Dumper DB_File Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared'
-ksh=''
-ld='cc'
-lddlflags='-shared -L/usr/local/lib'
-ldflags=' -L/usr/local/lib'
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/lib/libc-2.3.2.so'
-libperl='libperl.so'
-libpth='/usr/local/lib /lib /usr/lib'
-libs='-ldl -lm -lc -lcrypt'
-libsdirs=' /usr/lib'
-libsfiles=' libdl.so libm.so libc.so libcrypt.so'
-libsfound=' /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libc.so /usr/lib/libcrypt.so'
-libspath=' /usr/local/lib /lib /usr/lib'
-libswanted='gdbm gdbm_compat db dl m c crypt'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='12'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/usr/share/man/man1'
-man1direxp='/usr/share/man/man1'
-man1ext='1'
-man3dir='/usr/share/man/man3'
-man3direxp='/usr/share/man/man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='i686-linux'
-mydomain='.kergoth.com'
-myhostname='hyperion'
-myuname='linux hyperion 2.6.11-ck1 #1 wed mar 2 23:48:21 cst 2005 i686 gnulinux '
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='size_t'
-netdb_host_type='const void *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt=''
-nm_so_opt='--dynamic'
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='linux'
-osvers='2.6.11-ck1'
-otherlibdirs=' '
-package='perl5'
-pager='/usr/bin/less'
-passcat='cat /etc/passwd'
-patchlevel='8'
-path_sep=':'
-perl5='hostperl'
-perl=''
-perl_patchlevel=''
-perladmin=''
-perllibs='-ldl -lm -lc -lcrypt'
-perlpath='hostperl'
-pg='pg'
-phostname='hostname'
-pidtype='pid_t'
-plibpth=''
-pmake=''
-pr=''
-prefix='/usr'
-prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.7'
-privlibexp='/usr/lib/perl5/5.8.7'
-procselfexe='"/proc/self/exe"'
-prototype='define'
-ptrsize='4'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rmail=''
-run=''
-runnm='false'
-sPRIEUldbl='"LE"'
-sPRIFUldbl='"LF"'
-sPRIGUldbl='"LG"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl='"Le"'
-sPRIfldbl='"Lf"'
-sPRIgldbl='"Lg"'
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl='"Lf"'
-sched_yield='sched_yield()'
-scriptdir='/usr/bin'
-scriptdirexp='/usr/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='65'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 RTMIN NUM34 NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "RTMIN", "NUM34", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
-sig_size='69'
-signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.7/i686-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.7/i686-linux'
-sitebin='/usr/bin'
-sitebinexp='/usr/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.8.7'
-sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.8.7'
-siteman1dir='/usr/share/man/man1'
-siteman1direxp='/usr/share/man/man1'
-siteman3dir='/usr/share/man/man3'
-siteman3direxp='/usr/share/man/man3'
-siteprefix='/usr'
-siteprefixexp='/usr'
-sitescript='/usr/bin'
-sitescriptexp='/usr/bin'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!/usr/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='4'
-sysman='/usr/share/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h /usr/include/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='define'
-useithreads='undef'
-uselargefiles='define'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='5.8.7'
-version_patchlevel_string='version 8 subversion 4'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='./Configure'
-config_args=''
-config_argc=0
-PERL_REVISION=5
-PERL_VERSION=8
-PERL_SUBVERSION=4
-PERL_API_REVISION=5
-PERL_API_VERSION=8
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=
-PERL_CONFIG_SH=true
diff --git a/recipes/perl/perl-5.8.7/config.sh-mipsel-linux b/recipes/perl/perl-5.8.7/config.sh-mipsel-linux
deleted file mode 100644
index 7696a3dff0..0000000000
--- a/recipes/perl/perl-5.8.7/config.sh-mipsel-linux
+++ /dev/null
@@ -1,1031 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Mon Sep 20 18:18:52 CEST 2004
-# Configured by : root
-# Target system : linux mtx-nfs 2.4.24mtx #59 mon jul 12 15:19:41 cest 2004 mips gnulinux
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='8'
-ansi2knr=''
-aphostname='/bin/hostname'
-api_revision='5'
-api_subversion='0'
-api_version='8'
-api_versionstring='5.8.0'
-ar='ar'
-archlib='/usr/lib/perl5/5.8.7/mipsel-linux'
-archlibexp='/usr/lib/perl5/5.8.7/mipsel-linux'
-archname64=''
-archname='mips-linux'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/bin'
-binexp='/usr/bin'
-bison='bison'
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='cat'
-cc='cc'
-cccdlflags='-fpic'
-ccdlflags='-rdynamic'
-ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccname='gcc'
-ccsymbols='__GNUC_MINOR__=3 __GNUC_PATCHLEVEL__=4'
-ccversion=''
-cf_by='root'
-cf_email='root@mtx-nfs.nonet'
-cf_time='Mon Sep 20 18:18:52 CEST 2004'
-charsize='1'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols='__GNUC__=3'
-cppflags='-fno-strict-aliasing -I/usr/local/include'
-cpplast='-'
-cppminus='-'
-cpprun='cc -E'
-cppstdin='cc -E'
-cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=3 __GNUC_MINOR__=3 __GNU_LIBRARY__=6 LANGUAGE_C=1 _LANGUAGE_C=1 __LANGUAGE_C=1 __LANGUAGE_C__=1 _LARGEFILE_SOURCE=1 MIPSEL=1 _MIPSEL=1 __MIPSEL=1 __MIPSEL__=1 _MIPS_FPSET=16 _MIPS_ISA=1 _MIPS_SIM=1 _MIPS_SZINT=32 _MIPS_SZLONG=32 _MIPS_SZPTR=32 __PIC__=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 R3000=1 _R3000=1 __R3000=1 __R3000__=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 mips=1 _mips=1 __mips=1 __mips__=1 __pic__=1 unix=1 __unix=1 __unix__=1'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribut='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='define'
-d_castneg='define'
-d_charvspr='define'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='define'
-d_ctermid_r='undef'
-d_ctime_r='undef'
-d_cuserid='define'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dirfd='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='undef'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='undef'
-d_fgetpos='define'
-d_finite='define'
-d_finitel='define'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='define'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='define'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='define'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime_r='undef'
-d_gnulibc='define'
-d_grpasswd='define'
-d_hasmntopt='define'
-d_htonl='define'
-d_ilogbl='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_libm_lib_version='define'
-d_link='define'
-d_localtime_r='undef'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='define'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_procselfexe='define'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='define'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='define'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='define'
-d_setresuid='define'
-d_setreuid='define'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sockatmark='define'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='define'
-d_statfs_f_flags='undef'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='undef'
-d_truncate='define'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='undef'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_unordered='undef'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='define'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major=''
-db_version_minor=''
-db_version_patch=''
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared Errno'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='16'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='/bin/csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='3.3.4 (Debian 1:3.3.4-3)'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version='2.3.2'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat=''
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='define'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='define'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='define'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='define'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='define'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs='y'
-inc_version_list=' '
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.7/mipsel-linux'
-installbin='./install_me_here/usr/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir='./install_me_here/usr/share/man/man1'
-installman3dir='./install_me_here/usr/share/man/man3'
-installprefix='./install_me_here/usr'
-installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.8.7'
-installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.7/mipsel-linux'
-installsitebin='./install_me_here/usr/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.7'
-installsiteman1dir='./install_me_here/usr/share/man/man1'
-installsiteman3dir='./install_me_here/usr/share/man/man3'
-installsitescript='./install_me_here/usr/bin'
-installstyle='./install_me_herelib/perl5'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='/usr/bin/test -h'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-ksh=''
-ld='cc'
-lddlflags='-shared -L/usr/local/lib'
-ldflags=' -L/usr/local/lib'
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/lib/libc-2.3.2.so'
-libperl='libperl.so'
-libpth='/usr/local/lib /lib /usr/lib'
-libs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-libsdirs=' /usr/lib'
-libsfiles=' libnsl.so libdl.so libm.so libcrypt.so libutil.so libc.so'
-libsfound=' /usr/lib/libnsl.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libcrypt.so /usr/lib/libutil.so /usr/lib/libc.so'
-libspath=' /usr/local/lib /lib /usr/lib'
-libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util c cposix posix ucb BSD'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='8'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/usr/share/man/man1'
-man1direxp='/usr/share/man/man1'
-man1ext='1'
-man3dir='/usr/share/man/man3'
-man3direxp='/usr/share/man/man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='mips-linux'
-mydomain='.nonet'
-myhostname='mtx-nfs'
-myuname='linux mtx-nfs 2.4.24mtx #59 mon jul 12 15:19:41 cest 2004 mips gnulinux '
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='size_t'
-netdb_host_type='const void *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt=''
-nm_so_opt='--dynamic'
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='linux'
-osvers='2.4.24mtx'
-otherlibdirs=' '
-package='perl5'
-pager='/usr/bin/less'
-passcat='cat /etc/passwd'
-patchlevel='8'
-path_sep=':'
-perl5='/usr/bin/perl'
-perl=''
-perl_patchlevel=''
-perladmin='root@mtx-nfs.nonet'
-perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-perlpath='/usr/bin/perl'
-pg='pg'
-phostname='hostname'
-pidtype='pid_t'
-plibpth=''
-pm_apiversion='5.005'
-pmake=''
-pr=''
-prefix='/usr'
-prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.7'
-privlibexp='/usr/lib/perl5/5.8.7'
-procselfexe='"/proc/self/exe"'
-prototype='define'
-ptrsize='4'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rmail=''
-run=''
-runnm='false'
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl='"f"'
-sched_yield='sched_yield()'
-scriptdir='/usr/bin'
-scriptdirexp='/usr/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='128'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM USR1 USR2 CHLD PWR WINCH URG IO STOP TSTP CONT TTIN TTOU VTALRM PROF XCPU XFSZ NUM32 NUM33 NUM34 RTMIN NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 NUM64 NUM65 NUM66 NUM67 NUM68 NUM69 NUM70 NUM71 NUM72 NUM73 NUM74 NUM75 NUM76 NUM77 NUM78 NUM79 NUM80 NUM81 NUM82 NUM83 NUM84 NUM85 NUM86 NUM87 NUM88 NUM89 NUM90 NUM91 NUM92 NUM93 NUM94 NUM95 NUM96 NUM97 NUM98 NUM99 NUM100 NUM101 NUM102 NUM103 NUM104 NUM105 NUM106 NUM107 NUM108 NUM109 NUM110 NUM111 NUM112 NUM113 NUM114 NUM115 NUM116 NUM117 NUM118 NUM119 NUM120 NUM121 NUM122 NUM123 NUM124 NUM125 NUM126 RTMAX IOT CLD POLL '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", "USR1", "USR2", "CHLD", "PWR", "WINCH", "URG", "IO", "STOP", "TSTP", "CONT", "TTIN", "TTOU", "VTALRM", "PROF", "XCPU", "XFSZ", "NUM32", "NUM33", "NUM34", "RTMIN", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "NUM64", "NUM65", "NUM66", "NUM67", "NUM68", "NUM69", "NUM70", "NUM71", "NUM72", "NUM73", "NUM74", "NUM75", "NUM76", "NUM77", "NUM78", "NUM79", "NUM80", "NUM81", "NUM82", "NUM83", "NUM84", "NUM85", "NUM86", "NUM87", "NUM88", "NUM89", "NUM90", "NUM91", "NUM92", "NUM93", "NUM94", "NUM95", "NUM96", "NUM97", "NUM98", "NUM99", "NUM100", "NUM101", "NUM102", "NUM103", "NUM104", "NUM105", "NUM106", "NUM107", "NUM108", "NUM109", "NUM110", "NUM111", "NUM112", "NUM113", "NUM114", "NUM115", "NUM116", "NUM117", "NUM118", "NUM119", "NUM120", "NUM121", "NUM122", "NUM123", "NUM124", "NUM125", "NUM126", "RTMAX", "IOT", "CLD", "POLL", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 6 18 22 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 6, 18, 22, 0'
-sig_size='131'
-signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.7/mipsel-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.7/mipsel-linux'
-sitebin='/usr/bin'
-sitebinexp='/usr/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/lib/perl5'
-sitelib_stem='/usr/lib/perl5'
-sitelibexp='/usr/lib/perl5'
-siteman1dir='/usr/share/man/man1'
-siteman1direxp='/usr/share/man/man1'
-siteman3dir='/usr/share/man/man3'
-siteman3direxp='/usr/share/man/man3'
-siteprefix='/usr'
-siteprefixexp='/usr'
-sitescript='/usr/bin'
-sitescriptexp='/usr/bin'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!/usr/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='3'
-sysman='/usr/share/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h /usr/include/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='define'
-useithreads='undef'
-uselargefiles='define'
-uselongdouble='undef'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usemallocwrap='define'
-usenm='false'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='5.8.7'
-version_patchlevel_string='version 8 subversion 7'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-xs_apiversion='5.8.7'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='./Configure'
-config_args='-des'
-config_argc=1
-config_arg1='-des'
-PERL_REVISION=5
-PERL_VERSION=8
-PERL_SUBVERSION=3
-PERL_API_REVISION=5
-PERL_API_VERSION=8
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=
-PERL_CONFIG_SH=true
diff --git a/recipes/perl/perl-5.8.7/config.sh-powerpc-linux b/recipes/perl/perl-5.8.7/config.sh-powerpc-linux
deleted file mode 100644
index 67f7aa3166..0000000000
--- a/recipes/perl/perl-5.8.7/config.sh-powerpc-linux
+++ /dev/null
@@ -1,1029 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Fri Feb 15 02:38:14 UTC 2036
-# Configured by : root
-# Target system : linux brokenslug 2.6.12.6 #1 tue oct 24 01:06:22 pdt 2006 ppc unknown unknown gnulinux
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='8'
-ansi2knr=''
-aphostname='/bin/hostname'
-api_revision='5'
-api_subversion='0'
-api_version='8'
-api_versionstring='5.8.0'
-ar='ar'
-archlib='/usr/lib/perl5/5.8.7/powerpc-linux'
-archlibexp='/usr/lib/perl5/5.8.7/powerpc-linux'
-archname64=''
-archname='powerpc-linux'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/bin'
-binexp='/usr/bin'
-bison='bison'
-byacc='byacc'
-byteorder='4321'
-c='\c'
-castflags='0'
-cat='cat'
-cc='gcc'
-cccdlflags='-fpic'
-ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.7/powerpc-linux/CORE'
-ccflags=''-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccname='gcc'
-ccsymbols='__gnu_linux__=1 __linux=1 __linux__=1 __unix=1 __unix__=1 system=linux system=posix system=unix'
-ccversion=''
-cf_by='root'
-cf_email='root@brokenslug.nonet'
-cf_time='Fri Feb 15 02:38:14 UTC 2036'
-charsize='1'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols='linux=1 unix=1'
-cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe'
-cpplast='-'
-cppminus='-'
-cpprun='gcc -E'
-cppstdin='gcc -E'
-cppsymbols='_BIG_ENDIAN=1 __BIG_ENDIAN__=1 __ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=5 __GNUC__=4 __GNUC_MINOR__=1 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=200112 _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 __linux=1 __linux__=1 __unix=1 __unix__=1'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribut='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='define'
-d_castneg='define'
-d_charvspr='define'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='define'
-d_ctermid_r='undef'
-d_ctime_r='undef'
-d_cuserid='define'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dirfd='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='define'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='define'
-d_fgetpos='define'
-d_finite='define'
-d_finitel='define'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='define'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='define'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='define'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime_r='undef'
-d_gnulibc='define'
-d_grpasswd='define'
-d_hasmntopt='define'
-d_htonl='define'
-d_ilogbl='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_libm_lib_version='define'
-d_link='define'
-d_localtime_r='undef'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='define'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='define'
-d_off64_t='define'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_procselfexe='define'
-d_pthread_atfork='define'
-d_pthread_attr_setscope='define'
-d_pthread_yield='define'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='define'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='define'
-d_setresuid='define'
-d_setreuid='define'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sockatmark='define'
-d_sockatmarkproto='define'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='define'
-d_statfs_f_flags='undef'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='define'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='define'
-d_stdio_stream_array='undef'
-d_stdiobase='define'
-d_stdstdio='define'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='undef'
-d_truncate='define'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='undef'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_unordered='undef'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='define'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major=''
-db_version_minor=''
-db_version_patch=''
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared Errno'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='16'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='4.1.1'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version='2.5'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='cat /etc/hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='define'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='define'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='define'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='define'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='define'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs='y'
-inc_version_list=''
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.7/powerpc-linux'
-installbin='./install_me_here/usr/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir='./install_me_here/usr/share/man/man1'
-installman3dir='./install_me_here/usr/share/man/man3'
-installprefix='./install_me_here/usr'
-installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.8.7'
-installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.7/powerpc-linux'
-installsitebin='./install_me_here/usr/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.7'
-installsiteman1dir='./install_me_here/usr/share/man/man1'
-installsiteman3dir='./install_me_here/usr/share/man/man3'
-installsitescript='./install_me_here/usr/bin'
-installstyle='./install_me_herelib/perl5'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='/usr/bin/test -h'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-ksh=''
-ld='gcc'
-lddlflags='-shared'
-ldflags=''
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/lib/libc-2.5.so'
-libperl='libperl.so'
-libpth='/lib /usr/lib'
-libs='-lresolv -lnsl -ldl -lm -lpthread -lcrypt -lutil -lc'
-libsdirs=''
-libsfiles=' libresolv.so libnsl.so libdl.so libm.so libpthread.so libcrypt.so libutil.so libc.so'
-libsfound=''
-libspath=' /lib /usr/lib'
-libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util c cposix posix ucb BSD'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='8'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/usr/share/man/man1'
-man1direxp='/usr/share/man/man1'
-man1ext='1'
-man3dir='/usr/share/man/man3'
-man3direxp='/usr/share/man/man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='powerpc-linux'
-mydomain='.nonet'
-myhostname='brokenslug'
-myuname='linux brokenslug 2.6.12.6 #1 tue oct 24 01:06:22 pdt 2006 ppc unknown unknown gnulinux '
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='size_t'
-netdb_host_type='const void *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt=''
-nm_so_opt='--dynamic'
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='linux'
-osvers='2.6.12.6'
-otherlibdirs=' '
-package='perl5'
-pager='/usr/bin/less'
-passcat='cat /etc/passwd'
-patchlevel='8'
-path_sep=':'
-perl5='hostperl'
-perl=''
-perl_patchlevel=''
-perladmin='root@brokenslug.nonet'
-perllibs='-lresolv -lnsl -ldl -lm -lpthread -lcrypt -lutil -lc'
-perlpath='/usr/bin/perl'
-pg='pg'
-phostname='hostname'
-pidtype='pid_t'
-plibpth=''
-pmake=''
-pr=''
-prefix='/usr'
-prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.7'
-privlibexp='/usr/lib/perl5/5.8.7'
-procselfexe='"/proc/self/exe"'
-prototype='define'
-ptrsize='4'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rmail=''
-run=''
-runnm='false'
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl='"f"'
-sched_yield='sched_yield()'
-scriptdir='/usr/bin'
-scriptdirexp='/usr/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='65'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 RTMIN NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "RTMIN", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
-sig_size='69'
-signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.7/powerpc-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.7/powerpc-linux'
-sitebin='/usr/bin'
-sitebinexp='/usr/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.8.7'
-sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.8.7'
-siteman1dir='/usr/share/man/man1'
-siteman1direxp='/usr/share/man/man1'
-siteman3dir='/usr/share/man/man3'
-siteman3direxp='/usr/share/man/man3'
-siteprefix='/usr'
-siteprefixexp='/usr'
-sitescript='/usr/bin'
-sitescriptexp='/usr/bin'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!/usr/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='7'
-sysman='/usr/share/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h /usr/include/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='define'
-useithreads='define'
-uselargefiles='define'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='define'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='5.8.7'
-version_patchlevel_string='version 8 subversion 7'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='./Configure'
-config_args='-de'
-config_argc=1
-config_arg1='-de'
-PERL_REVISION=5
-PERL_VERSION=8
-PERL_SUBVERSION=7
-PERL_API_REVISION=5
-PERL_API_VERSION=8
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=
-PERL_CONFIG_SH=true
diff --git a/recipes/perl/perl-5.8.7/config.sh-sh3-linux b/recipes/perl/perl-5.8.7/config.sh-sh3-linux
deleted file mode 100644
index fbdff37045..0000000000
--- a/recipes/perl/perl-5.8.7/config.sh-sh3-linux
+++ /dev/null
@@ -1,1028 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Sun Jun 18 10:28:03 EDT 2006
-# Configured by : Red Hat, Inc.
-# Target system : linux np51r 2.6.4 #175 fri nov 5 16:49:36 est 2004 sh4 unknown
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='4'
-ansi2knr=''
-aphostname=''
-api_revision='5'
-api_subversion='0'
-api_version='8'
-api_versionstring='5.8.0'
-ar='ar'
-archlib='/usr/lib/perl5/5.8.7/sh3-linux'
-archlibexp='/usr/lib/perl5/5.8.7/sh3-linux'
-archname64=''
-archname='sh3-linux'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/bin'
-binexp='/usr/bin'
-bison='bison'
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='cat'
-cc='gcc'
-cccdlflags='-fPIC'
-ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.7/sh3-linux/CORE'
-ccflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccname='gcc'
-ccsymbols='__GNUC_MINOR__=2 __GNUC_PATCHLEVEL__=3 __GXX_ABI_VERSION=102 __NO_INLINE__=1 __PTRDIFF_TYPE__=int __SH3__=1 __SIZE_TYPE__=unsigned __STDC_HOSTED__=1 __gnu_linux__=1 __linux=1 __linux__=1 __sh__=1 __unix=1 __unix__=1 system=posix'
-ccversion=''
-cf_by='Red Hat, Inc.'
-cf_email='Red Hat, Inc.@localhost.localdomain'
-cf_time='Sun Jun 18 10:28:03 EDT 2006'
-charsize='1'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols='__ELF__=1 __GNUC__=3 __LITTLE_ENDIAN__=1 linux=1 unix=1'
-cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -I/usr/local/include'
-cpplast='-'
-cppminus='-'
-cpprun='gcc -E'
-cppstdin='gcc -E'
-cppsymbols='_FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC_MINOR__=2 __GNU_LIBRARY__=6 _GNU_SOURCE=1 _LARGEFILE64_SOURCE=1 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 _REENTRANT=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_GNU=1 __USE_LARGEFILE=1 __USE_LARGEFILE64=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_REENTRANT=1 __USE_SVID=1 __USE_UNIX98=1 __USE_XOPEN=1 __USE_XOPEN_EXTENDED=1 _XOPEN_SOURCE=600 _XOPEN_SOURCE_EXTENDED=1 __linux=1 __linux__=1 __unix=1 __unix__=1'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribut='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='define'
-d_castneg='define'
-d_charvspr='define'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='define'
-d_ctermid_r='undef'
-d_ctime_r='undef'
-d_cuserid='define'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dirfd='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='define'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='define'
-d_fgetpos='define'
-d_finite='define'
-d_finitel='define'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='define'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='define'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='define'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime_r='undef'
-d_gnulibc='define'
-d_grpasswd='define'
-d_hasmntopt='define'
-d_htonl='define'
-d_ilogbl='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_libm_lib_version='define'
-d_link='define'
-d_localtime_r='undef'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='define'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='define'
-d_off64_t='define'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_procselfexe='define'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='define'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='define'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='define'
-d_setresuid='define'
-d_setreuid='define'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sockatmark='define'
-d_sockatmarkproto='define'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='define'
-d_statfs_f_flags='undef'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='define'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='define'
-d_stdio_stream_array='undef'
-d_stdiobase='define'
-d_stdstdio='define'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='undef'
-d_truncate='define'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='undef'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_unordered='undef'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='define'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major=''
-db_version_minor=''
-db_version_patch=''
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared Errno'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='16'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='/bin/csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='3.2.3'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version='2.2.5'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='cat /etc/hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='define'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='define'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='define'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='define'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='define'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs='y'
-inc_version_list=''
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.7/sh3-linux'
-installbin='./install_me_here/usr/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir='./install_me_here/usr/share/man/man1'
-installman3dir='./install_me_here/usr/share/man/man3'
-installprefix='./install_me_here/usr'
-installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.8.7'
-installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.7/sh3-linux'
-installsitebin='./install_me_here/usr/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.7'
-installsiteman1dir='./install_me_here/usr/share/man/man1'
-installsiteman3dir='./install_me_here/usr/share/man/man3'
-installsitescript='./install_me_here/usr/bin'
-installstyle='./install_me_herelib/perl5'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='/usr/bin/test -h'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-ksh=''
-ld='gcc'
-lddlflags='-shared -L/usr/local/lib'
-ldflags=' -L/usr/local/lib'
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/lib/libc-2.2.5.so'
-libperl='libperl.so'
-libpth='/usr/local/lib /lib /usr/lib'
-libs='-lresolv -lnsl -ldl -lm -lcrypt -lutil -lc'
-libsdirs=' /usr/lib'
-libsfiles=' libresolv.so libnsl.so libdl.so libm.so libcrypt.so libutil.so libc.so'
-libsfound=' /usr/lib/libresolv.so /usr/lib/libnsl.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libcrypt.so /usr/lib/libutil.so /usr/lib/libc.so'
-libspath=' /usr/local/lib /lib /usr/lib'
-libswanted='sfio socket resolv inet nsl nm gdbm dbm db malloc dl dld ld sun m crypt sec util c cposix posix ucb BSD'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='8'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/usr/share/man/man1'
-man1direxp='/usr/share/man/man1'
-man1ext='1'
-man3dir='/usr/share/man/man3'
-man3direxp='/usr/share/man/man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='sh3-linux'
-mydomain='.localdomain'
-myhostname='localhost'
-myuname='linux np51r 2.6.4 #175 fri nov 5 16:49:36 est 2004 sh3 unknown '
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='size_t'
-netdb_host_type='const void *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt=''
-nm_so_opt='--dynamic'
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='linux'
-osvers='2.6.4'
-otherlibdirs=' '
-package='perl5'
-pager='/usr/bin/less -isr'
-passcat='cat /etc/passwd'
-patchlevel='8'
-path_sep=':'
-perl5='hostperl'
-perl=''
-perl_patchlevel=''
-perladmin='root@localhost'
-perllibs='-lresolv -lnsl -ldl -lm -lcrypt -lutil -lc'
-perlpath='hostperl'
-pg='pg'
-phostname=''
-pidtype='pid_t'
-plibpth=''
-pmake=''
-pr=''
-prefix='/usr'
-prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.7'
-privlibexp='/usr/lib/perl5/5.8.7'
-procselfexe='"/proc/self/exe"'
-prototype='define'
-ptrsize='4'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rmail=''
-run=''
-runnm='false'
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl='"f"'
-sched_yield='sched_yield()'
-scriptdir='/usr/bin'
-scriptdirexp='/usr/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='64'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 NUM34 RTMIN NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 RTMAX IOT CLD POLL UNUSED '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "NUM34", "RTMIN", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 6 17 29 31 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
-sig_size='68'
-signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.7/sh3-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.7/sh3-linux'
-sitebin='/usr/bin'
-sitebinexp='/usr/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.8.7'
-sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.8.7'
-siteman1dir='/usr/share/man/man1'
-siteman1direxp='/usr/share/man/man1'
-siteman3dir='/usr/share/man/man3'
-siteman3direxp='/usr/share/man/man3'
-siteprefix='/usr'
-siteprefixexp='/usr'
-sitescript='/usr/bin'
-sitescriptexp='/usr/bin'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!/usr/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='6'
-sysman='/usr/share/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h /usr/include/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='define'
-useithreads='undef'
-uselargefiles='define'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='5.8.7'
-version_patchlevel_string='version 8 subversion 6'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='Configure'
-config_args=''
-config_argc=0
-PERL_REVISION=5
-PERL_VERSION=8
-PERL_SUBVERSION=6
-PERL_API_REVISION=5
-PERL_API_VERSION=8
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=
-PERL_CONFIG_SH=true
diff --git a/recipes/perl/perl-5.8.7/config.sh-sh4-linux b/recipes/perl/perl-5.8.7/config.sh-sh4-linux
deleted file mode 100644
index e861b60ef7..0000000000
--- a/recipes/perl/perl-5.8.7/config.sh-sh4-linux
+++ /dev/null
@@ -1,1028 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Sun Jun 18 10:28:03 EDT 2006
-# Configured by : Red Hat, Inc.
-# Target system : linux np51r 2.6.4 #175 fri nov 5 16:49:36 est 2004 sh4 unknown
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='4'
-ansi2knr=''
-aphostname=''
-api_revision='5'
-api_subversion='0'
-api_version='8'
-api_versionstring='5.8.0'
-ar='ar'
-archlib='/usr/lib/perl5/5.8.7/sh4-linux'
-archlibexp='/usr/lib/perl5/5.8.7/sh4-linux'
-archname64=''
-archname='sh4-linux'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/bin'
-binexp='/usr/bin'
-bison='bison'
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='cat'
-cc='gcc'
-cccdlflags='-fPIC'
-ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.7/sh4-linux/CORE'
-ccflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccname='gcc'
-ccsymbols='__GNUC_MINOR__=2 __GNUC_PATCHLEVEL__=3 __GXX_ABI_VERSION=102 __NO_INLINE__=1 __PTRDIFF_TYPE__=int __SH4__=1 __SIZE_TYPE__=unsigned __STDC_HOSTED__=1 __gnu_linux__=1 __linux=1 __linux__=1 __sh__=1 __unix=1 __unix__=1 system=posix'
-ccversion=''
-cf_by='Red Hat, Inc.'
-cf_email='Red Hat, Inc.@localhost.localdomain'
-cf_time='Sun Jun 18 10:28:03 EDT 2006'
-charsize='1'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols='__ELF__=1 __GNUC__=3 __LITTLE_ENDIAN__=1 linux=1 unix=1'
-cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -I/usr/local/include'
-cpplast='-'
-cppminus='-'
-cpprun='gcc -E'
-cppstdin='gcc -E'
-cppsymbols='_FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC_MINOR__=2 __GNU_LIBRARY__=6 _GNU_SOURCE=1 _LARGEFILE64_SOURCE=1 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 _REENTRANT=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_GNU=1 __USE_LARGEFILE=1 __USE_LARGEFILE64=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_REENTRANT=1 __USE_SVID=1 __USE_UNIX98=1 __USE_XOPEN=1 __USE_XOPEN_EXTENDED=1 _XOPEN_SOURCE=600 _XOPEN_SOURCE_EXTENDED=1 __linux=1 __linux__=1 __unix=1 __unix__=1'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribut='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='define'
-d_castneg='define'
-d_charvspr='define'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='define'
-d_ctermid_r='undef'
-d_ctime_r='undef'
-d_cuserid='define'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dirfd='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='define'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='define'
-d_fgetpos='define'
-d_finite='define'
-d_finitel='define'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='define'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='define'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='define'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime_r='undef'
-d_gnulibc='define'
-d_grpasswd='define'
-d_hasmntopt='define'
-d_htonl='define'
-d_ilogbl='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_libm_lib_version='define'
-d_link='define'
-d_localtime_r='undef'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='define'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='define'
-d_off64_t='define'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_procselfexe='define'
-d_pthread_atfork='define'
-d_pthread_attr_setscope='define'
-d_pthread_yield='define'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='define'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='define'
-d_setresuid='define'
-d_setreuid='define'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sockatmark='define'
-d_sockatmarkproto='define'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='define'
-d_statfs_f_flags='undef'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='define'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='define'
-d_stdio_stream_array='undef'
-d_stdiobase='define'
-d_stdstdio='define'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='undef'
-d_truncate='define'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='undef'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_unordered='undef'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='define'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major=''
-db_version_minor=''
-db_version_patch=''
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared Errno'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='16'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='/bin/csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='3.2.3'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version='2.2.5'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='cat /etc/hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='define'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='define'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='define'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='define'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='define'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs='y'
-inc_version_list=''
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.7/sh4-linux'
-installbin='./install_me_here/usr/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir='./install_me_here/usr/share/man/man1'
-installman3dir='./install_me_here/usr/share/man/man3'
-installprefix='./install_me_here/usr'
-installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.8.7'
-installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.7/sh4-linux'
-installsitebin='./install_me_here/usr/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.7'
-installsiteman1dir='./install_me_here/usr/share/man/man1'
-installsiteman3dir='./install_me_here/usr/share/man/man3'
-installsitescript='./install_me_here/usr/bin'
-installstyle='./install_me_herelib/perl5'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='/usr/bin/test -h'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-ksh=''
-ld='gcc'
-lddlflags='-shared -L/usr/local/lib'
-ldflags=' -L/usr/local/lib'
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/lib/libc-2.2.5.so'
-libperl='libperl.so'
-libpth='/usr/local/lib /lib /usr/lib'
-libs='-lresolv -lnsl -ldl -lm -lpthread -lcrypt -lutil -lc'
-libsdirs=' /usr/lib'
-libsfiles=' libresolv.so libnsl.so libdl.so libm.so libpthread.so libcrypt.so libutil.so libc.so'
-libsfound=' /usr/lib/libresolv.so /usr/lib/libnsl.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libpthread.so /usr/lib/libcrypt.so /usr/lib/libutil.so /usr/lib/libc.so'
-libspath=' /usr/local/lib /lib /usr/lib'
-libswanted='sfio socket resolv inet nsl nm gdbm dbm db malloc dl dld ld sun m pthread crypt sec util c cposix posix ucb BSD'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='8'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/usr/share/man/man1'
-man1direxp='/usr/share/man/man1'
-man1ext='1'
-man3dir='/usr/share/man/man3'
-man3direxp='/usr/share/man/man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='sh4-linux'
-mydomain='.localdomain'
-myhostname='localhost'
-myuname='linux np51r 2.6.4 #175 fri nov 5 16:49:36 est 2004 sh4 unknown '
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='size_t'
-netdb_host_type='const void *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt=''
-nm_so_opt='--dynamic'
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='linux'
-osvers='2.6.4'
-otherlibdirs=' '
-package='perl5'
-pager='/usr/bin/less -isr'
-passcat='cat /etc/passwd'
-patchlevel='8'
-path_sep=':'
-perl5='hostperl'
-perl=''
-perl_patchlevel=''
-perladmin='root@localhost'
-perllibs='-lresolv -lnsl -ldl -lm -lpthread -lcrypt -lutil -lc'
-perlpath='hostperl'
-pg='pg'
-phostname=''
-pidtype='pid_t'
-plibpth=''
-pmake=''
-pr=''
-prefix='/usr'
-prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.7'
-privlibexp='/usr/lib/perl5/5.8.7'
-procselfexe='"/proc/self/exe"'
-prototype='define'
-ptrsize='4'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rmail=''
-run=''
-runnm='false'
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl='"f"'
-sched_yield='sched_yield()'
-scriptdir='/usr/bin'
-scriptdirexp='/usr/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='64'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 NUM34 RTMIN NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 RTMAX IOT CLD POLL UNUSED '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "NUM34", "RTMIN", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 6 17 29 31 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
-sig_size='68'
-signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.7/sh4-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.7/sh4-linux'
-sitebin='/usr/bin'
-sitebinexp='/usr/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.8.7'
-sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.8.7'
-siteman1dir='/usr/share/man/man1'
-siteman1direxp='/usr/share/man/man1'
-siteman3dir='/usr/share/man/man3'
-siteman3direxp='/usr/share/man/man3'
-siteprefix='/usr'
-siteprefixexp='/usr'
-sitescript='/usr/bin'
-sitescriptexp='/usr/bin'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!/usr/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='6'
-sysman='/usr/share/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h /usr/include/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='define'
-useithreads='define'
-uselargefiles='define'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='define'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='5.8.7'
-version_patchlevel_string='version 8 subversion 6'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='Configure'
-config_args=''
-config_argc=0
-PERL_REVISION=5
-PERL_VERSION=8
-PERL_SUBVERSION=6
-PERL_API_REVISION=5
-PERL_API_VERSION=8
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=
-PERL_CONFIG_SH=true
diff --git a/recipes/perl/perl-5.8.7/config.sh-x86_64-linux b/recipes/perl/perl-5.8.7/config.sh-x86_64-linux
deleted file mode 100644
index 06a5f0f621..0000000000
--- a/recipes/perl/perl-5.8.7/config.sh-x86_64-linux
+++ /dev/null
@@ -1,1026 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Wed Nov 15 14:03:44 CET 2006
-# Configured by : hrw
-# Target system : linux home 2.6.19-rc5 #21 preempt thu nov 9 09:47:50 cet 2006 x86_64 unknown unknown gnulinux
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='8'
-ansi2knr=''
-aphostname='/bin/hostname'
-api_revision='5'
-api_subversion='0'
-api_version='8'
-api_versionstring='5.8.0'
-ar='ar'
-archlib='/usr/lib/perl5/5.8.7/x86_64-linux-thread-multi'
-archlibexp='/usr/lib/perl5/5.8.7/x86_64-linux-thread-multi'
-archname64=''
-archname='x86_64-linux-thread-multi'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/bin'
-binexp='/usr/bin'
-bison='bison'
-byacc='byacc'
-byteorder='12345678'
-c=''
-castflags='0'
-cat='cat'
-cc='cc'
-cccdlflags='-fpic'
-ccdlflags='-Wl,-E'
-ccflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccname='gcc'
-ccsymbols=''
-ccversion=''
-cf_by='hrw'
-cf_email='hrw@home.lan'
-cf_time='Wed Nov 15 14:03:44 CET 2006'
-charsize='1'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols=''
-cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -I/usr/local/include'
-cpplast='-'
-cppminus='-'
-cpprun='ccache gcc -E'
-cppstdin='ccache gcc -E'
-cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=3 __GNUC__=4 __GNUC_MINOR__=1 __GNU_LIBRARY__=6 _GNU_SOURCE=1 _LARGEFILE64_SOURCE=1 _LARGEFILE_SOURCE=1 _LP64=1 __LP64__=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 _REENTRANT=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_GNU=1 __USE_LARGEFILE=1 __USE_LARGEFILE64=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_REENTRANT=1 __USE_SVID=1 __USE_UNIX98=1 __USE_XOPEN=1 __USE_XOPEN_EXTENDED=1 _XOPEN_SOURCE=600 _XOPEN_SOURCE_EXTENDED=1 __amd64=1 __amd64__=1 linux=1 __linux=1 __linux__=1 unix=1 __unix=1 __unix__=1'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='define'
-d_atolf='undef'
-d_atoll='define'
-d_attribut='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='undef'
-d_castneg='define'
-d_charvspr='define'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_crypt='define'
-d_crypt_r='define'
-d_csh='undef'
-d_ctermid_r='undef'
-d_ctime_r='define'
-d_cuserid='define'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dirfd='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='define'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='undef'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='define'
-d_fgetpos='define'
-d_finite='define'
-d_finitel='define'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='define'
-d_getgrent_r='define'
-d_getgrgid_r='define'
-d_getgrnam_r='define'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='define'
-d_gethostbyname_r='define'
-d_gethostent_r='define'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='define'
-d_getmnt='undef'
-d_getmntent='define'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='define'
-d_getnetbyname_r='define'
-d_getnetent_r='define'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='define'
-d_getprotobynumber_r='define'
-d_getprotoent_r='define'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='define'
-d_getpwnam_r='define'
-d_getpwuid_r='define'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='define'
-d_getservbyport_r='define'
-d_getservent_r='define'
-d_getservprotos='define'
-d_getspnam='define'
-d_getspnam_r='define'
-d_gettimeod='define'
-d_gmtime_r='define'
-d_gnulibc='define'
-d_grpasswd='define'
-d_hasmntopt='define'
-d_htonl='define'
-d_ilogbl='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_libm_lib_version='define'
-d_link='define'
-d_localtime_r='define'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='define'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='define'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='undef'
-d_off64_t='define'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_procselfexe='define'
-d_pthread_atfork='define'
-d_pthread_attr_setscope='define'
-d_pthread_yield='define'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='define'
-d_quad='define'
-d_random_r='define'
-d_readdir64_r='define'
-d_readdir='define'
-d_readdir_r='define'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='define'
-d_setresuid='define'
-d_setreuid='define'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sockatmark='define'
-d_sockatmarkproto='define'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_srand48_r='define'
-d_srandom_r='define'
-d_sresgproto='define'
-d_sresuproto='define'
-d_statblks='define'
-d_statfs_f_flags='undef'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='define'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='define'
-d_truncate='define'
-d_ttyname_r='define'
-d_tzname='define'
-d_u32align='define'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_unordered='undef'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='define'
-d_vendorarch='define'
-d_vendorbin='define'
-d_vendorlib='define'
-d_vendorscript='define'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major=''
-db_version_minor=''
-db_version_patch=''
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared Errno'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='16'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='/bin/csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='4.1.2 20061028 (prerelease) (Debian 4.1.1-19)'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"u"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /lib64 /usr/lib64 /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version='2.3.6'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='cat /etc/hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='int'
-i64size='8'
-i64type='long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='define'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='define'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='define'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='define'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='define'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs='y'
-inc_version_list=' '
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.7/x86_64-linux-thread-multi'
-installbin='./install_me_here/usr/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir='./install_me_here/usr/share/man/man1'
-installman3dir='./install_me_here/usr/share/man/man3'
-installprefix='./install_me_here/usr'
-installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.8.7'
-installscript='./install_me_here/usr/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.7'
-installsiteman1dir='./install_me_here/usr/share/man/man1'
-installsiteman3dir='./install_me_here/usr/share/man/man3'
-installsitescript='./install_me_here/usr/bin'
-installstyle='lib/perl5'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='/bin/test -h'
-ivdformat='"ld"'
-ivsize='8'
-ivtype='long'
-known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
-ksh=''
-ld='cc'
-lddlflags='-shared'
-ldflags=''
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/lib/libc-2.3.6.so'
-libperl='libperl.a'
-libpth='/lib /usr/lib /lib64 /usr/lib64'
-libs='-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc'
-libsdirs=' /usr/lib'
-libsfiles=' libnsl.so libdl.so libm.so libcrypt.so libutil.so libpthread.so libc.so'
-libsfound=''
-libspath=' /lib /usr/lib /lib64 /usr/lib64'
-libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util pthread c cposix posix ucb BSD'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='16'
-longlongsize='8'
-longsize='8'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/usr/share/man/man1'
-man1direxp='/usr/share/man/man1'
-man1ext='1'
-man3dir='/usr/share/man/man3'
-man3direxp='/usr/share/man/man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='x86_64-linux'
-mydomain='.lan'
-myhostname='home'
-myuname='linux home 2.6.19-rc5 #21 preempt thu nov 9 09:47:50 cet 2006 x86_64 unknown unknown gnulinux '
-n='-n'
-need_va_copy='define'
-netdb_hlen_type='size_t'
-netdb_host_type='char *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt=''
-nm_so_opt='--dynamic'
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='53'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='linux'
-osvers='2.6.19-rc5'
-otherlibdirs=' '
-package='perl5'
-pager='/usr/bin/less'
-passcat='cat /etc/passwd'
-patchlevel='8'
-path_sep=':'
-perl5='/usr/bin/perl'
-perl=''
-perl_patchlevel=''
-perladmin='hrw@home.lan'
-perllibs='-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc'
-perlpath='/usr/bin/perl'
-pg='pg'
-phostname='hostname'
-pidtype='pid_t'
-plibpth=''
-pmake=''
-pr=''
-prefix='/usr'
-prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.7'
-privlibexp='/usr/lib/perl5/5.8.7'
-procselfexe='"/proc/self/exe"'
-prototype='define'
-ptrsize='8'
-quadkind='2'
-quadtype='long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rmail=''
-run=''
-runnm='false'
-sPRIEUldbl='"LE"'
-sPRIFUldbl='"LF"'
-sPRIGUldbl='"LG"'
-sPRIXU64='"lX"'
-sPRId64='"ld"'
-sPRIeldbl='"Le"'
-sPRIfldbl='"Lf"'
-sPRIgldbl='"Lg"'
-sPRIi64='"li"'
-sPRIo64='"lo"'
-sPRIu64='"lu"'
-sPRIx64='"lx"'
-sSCNfldbl='"Lf"'
-sched_yield='sched_yield()'
-scriptdir='/usr/bin'
-scriptdirexp='/usr/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='64'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='65'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 RTMIN NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "RTMIN", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
-sig_size='69'
-signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.7/x86_64-linux-thread-multi'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.7/x86_64-linux-thread-multi'
-sitebin='/usr/bin'
-sitebinexp='/usr/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.8.7'
-sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.8.7'
-siteman1dir='/usr/share/man/man1'
-siteman1direxp='/usr/share/man/man1'
-siteman3dir='/usr/share/man/man3'
-siteman3direxp='/usr/share/man/man3'
-siteprefix='/usr'
-siteprefixexp='/usr'
-sitescript='/usr/bin'
-sitescriptexp='/usr/bin'
-sizesize='8'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!/usr/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='7'
-sysman='/usr/share/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h /usr/include/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned int'
-u64size='8'
-u64type='unsigned long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"u"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long'
-use5005threads='undef'
-use64bitall='define'
-use64bitint='define'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='define'
-useithreads='define'
-uselargefiles='define'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='define'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-usesfio='false'
-useshrplib='false'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='define'
-usevendorprefix='define'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='8'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib='/usr/lib/perl5/vendor_perl/5.8.7'
-vendorlib_stem='/usr/lib/perl5/vendor_perl'
-vendorlibexp='/usr/lib/perl5/vendor_perl/5.8.7'
-vendorman1dir='/usr/share/man/man1'
-vendorman1direxp='/usr/share/man/man1'
-vendorman3dir='/usr/share/man/man3'
-vendorman3direxp='/usr/share/man/man3'
-vendorprefix=''
-vendorprefixexp=''
-vendorscript='/usr/bin'
-vendorscriptexp='/usr/bin'
-version='5.8.7'
-version_patchlevel_string='version 8 subversion 7'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='Configure'
-config_args=''
-config_argc=0
-PERL_REVISION=5
-PERL_VERSION=8
-PERL_SUBVERSION=7
-PERL_API_REVISION=5
-PERL_API_VERSION=8
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=
-PERL_CONFIG_SH=true
diff --git a/recipes/perl/perl-5.8.7/libperl-5.8.3-create-libperl-soname.patch b/recipes/perl/perl-5.8.7/libperl-5.8.3-create-libperl-soname.patch
deleted file mode 100644
index 6b34ec2318..0000000000
--- a/recipes/perl/perl-5.8.7/libperl-5.8.3-create-libperl-soname.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- Makefile.SH.orig 2003-07-10 14:59:04.000000000 -0700
-+++ Makefile.SH 2003-07-10 15:14:08.000000000 -0700
-@@ -494,7 +494,7 @@
- case "$useshrplib" in
- true)
- $spitshell >>Makefile <<'!NO!SUBS!'
-- $(LD) -o $@ $(SHRPLDFLAGS) perl$(OBJ_EXT) $(obj) $(libs)
-+ $(LD) -o $@ $(SHRPLDFLAGS) perl$(OBJ_EXT) $(obj) $(libs) -soname libperl.so.5
- !NO!SUBS!
- case "$osname" in
- aix)
diff --git a/recipes/perl/perl-5.8.7/makefile-usegcc-to-link.patch b/recipes/perl/perl-5.8.7/makefile-usegcc-to-link.patch
deleted file mode 100644
index d6be0be153..0000000000
--- a/recipes/perl/perl-5.8.7/makefile-usegcc-to-link.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-You cannot use LD to link on sh, you must use gcc otherwise shared
-libraries will not work since ld doesn't know about the hidden gcc
-shared libary requirements.
-
---- perl-5.8.7/Cross/Makefile 2006/09/25 05:52:56 1.1
-+++ perl-5.8.7/Cross/Makefile 2006/09/25 05:57:34
-@@ -12,7 +12,7 @@
-
- export CC = $(CROSS)gcc
- export CXX = $(CROSS)g++
--export LD = $(CROSS)ld
-+export LD = $(CC)
- export STRIP = $(CROSS)strip
- export AR = $(CROSS)ar
- export RANLIB = $(CROSS)ranlib
-
---- perl-5.8.7/Makefile.SH.orig 2003-07-10 14:59:04.000000000 -0700
-+++ perl-5.8.7/Makefile.SH 2003-07-10 15:14:08.000000000 -0700
-@@ -494,7 +494,7 @@
- case "$useshrplib" in
- true)
- $spitshell >>Makefile <<'!NO!SUBS!'
-- $(LD) -o $@ $(SHRPLDFLAGS) perl$(OBJ_EXT) $(obj) $(libs) -soname libperl.so.5
-+ $(CC) -o $@ $(SHRPLDFLAGS) perl$(OBJ_EXT) $(obj) $(libs) -Wl,-soname,libperl.so.5
- !NO!SUBS!
- case "$osname" in
- aix)
diff --git a/recipes/perl/perl-5.8.7/override-generate-sh.patch b/recipes/perl/perl-5.8.7/override-generate-sh.patch
deleted file mode 100644
index 4c2b0bd752..0000000000
--- a/recipes/perl/perl-5.8.7/override-generate-sh.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Use the ld flags from the supplied configuration file. For sh we need the
-flags that specify to build PIC code so that the shared libraries work.
-
---- perl-5.8.7/Cross/generate_config_sh~ 2006-09-25 16:34:09.000000000 +1000
-+++ perl-5.8.7/Cross/generate_config_sh 2006-09-25 16:34:09.000000000 +1000
-@@ -19,8 +19,8 @@
- $callbacks->{'ar'} = [\&simple_process, ["AR", "arm-linux-ar"]];
- $callbacks->{'archname'} = [\&simple_process, ["SYS", "armv4l-linux"]];
- $callbacks->{'cc'} = [\&simple_process, ["CC", "arm-linux-gcc"]];
--$callbacks->{'cccdlflags'} = [\&simple_process, ["CFLAGS", ""]];
--$callbacks->{'ccdlflags'} = [\&simple_process, ["CFLAGS", ""]];
-+#$callbacks->{'cccdlflags'} = [\&simple_process, ["CFLAGS", ""]];
-+#$callbacks->{'ccdlflags'} = [\&simple_process, ["CFLAGS", ""]];
- $callbacks->{'ccflags'} = [\&simple_process, ["CFLAGS", "-fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"]];
- $callbacks->{'ccflags_uselargefiles'} = [\&simple_process, ["CFLAGS", "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"]];
- $callbacks->{'ccname'} = [\&simple_process, ["CC", "arm-linux-gcc"]];
diff --git a/recipes/perl/perl-native_5.8.4.bb b/recipes/perl/perl-native_5.8.4.bb
deleted file mode 100644
index d3ecb67863..0000000000
--- a/recipes/perl/perl-native_5.8.4.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-DESCRIPTION = "Perl is a popular scripting language."
-HOMEPAGE = "http://www.perl.org/"
-LICENSE = "Artistic|GPL"
-PR = "r4"
-
-SECTION = "libs"
-inherit native
-
-DEPENDS = "virtual/db-native gdbm-native"
-
-SRC_URI = "http://ftp.funet.fi/pub/CPAN/src/perl-${PV}.tar.gz"
-S = "${WORKDIR}/perl-${PV}"
-
-do_configure () {
- ./Configure \
- -Dcc="${CC}" \
- -Dcflags="${CFLAGS}" \
- -Dldflags="${LDFLAGS}" \
- -Dusethreads \
- -Duselargefiles \
- -Dprefix=${prefix} \
- -Dvendorprefix=${prefix} \
- -Dsiteprefix=${prefix}/local \
- -Dman1ext=1 \
- -Dman3ext=3perl \
- -Uafs \
- -Ud_csh \
- -Uusesfio \
- -Uusenm -des
- sed 's!${STAGING_DIR}/bin!${STAGING_BINDIR}!;
- s!${STAGING_DIR}/lib!${STAGING_LIBDIR}!' < config.sh > config.sh.new
- mv config.sh.new config.sh
-}
diff --git a/recipes/perl/perl-native_5.8.7.bb b/recipes/perl/perl-native_5.8.7.bb
deleted file mode 100644
index d8ccd0c33d..0000000000
--- a/recipes/perl/perl-native_5.8.7.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-DESCRIPTION = "Perl is a popular scripting language."
-HOMEPAGE = "http://www.perl.org/"
-LICENSE = "Artistic|GPL"
-PR = "r6"
-
-SECTION = "libs"
-inherit native
-
-DEPENDS = "virtual/db-native gdbm-native"
-
-SRC_URI = "http://ftp.funet.fi/pub/CPAN/src/perl-${PV}.tar.gz \
- file://perl-5.8.8-gcc-4.2.patch;patch=1 \
- file://Configure-multilib.patch;patch=1"
-S = "${WORKDIR}/perl-${PV}"
-
-#perl is not parallel_make safe
-PARALLEL_MAKE = ""
-
-do_configure () {
- ./Configure \
- -Dcc="${CC}" \
- -Dcflags="${CFLAGS}" \
- -Dldflags="$LDFLAGS}" \
- -Dusethreads \
- -Duselargefiles \
- -Dprefix=${prefix} \
- -Dvendorprefix=${prefix} \
- -Dsiteprefix=${prefix}/local \
- -Dman1ext=1 \
- -Dman3ext=3perl \
- -Uafs \
- -Ud_csh \
- -Uusesfio \
- -Uusenm -des
- sed 's!${STAGING_DIR}/bin!${STAGING_BINDIR}!;
- s!${STAGING_DIR}/lib!${STAGING_LIBDIR}!' < config.sh > config.sh.new
- mv config.sh.new config.sh
-}
diff --git a/recipes/perl/perl-native_5.8.8.bb b/recipes/perl/perl-native_5.8.8.bb
index 60a5cf5b0f..632ff161d9 100644
--- a/recipes/perl/perl-native_5.8.8.bb
+++ b/recipes/perl/perl-native_5.8.8.bb
@@ -7,7 +7,7 @@ PR = "r15"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/perl-${PV}"
-SRC_URI = "http://ftp.funet.fi/pub/CPAN/src/perl-${PV}.tar.gz \
+SRC_URI = "http://ftp.funet.fi/pub/CPAN/src/5.0/perl-${PV}.tar.gz \
file://perl-5.8.8-gcc-4.2.patch;patch=1 \
file://Configure-multilib.patch;patch=1 \
file://perl-configpm-switch.patch;patch=1 \
diff --git a/recipes/perl/perl-rdepends_5.8.7.inc b/recipes/perl/perl-rdepends_5.8.7.inc
deleted file mode 100644
index 905edbdaaf..0000000000
--- a/recipes/perl/perl-rdepends_5.8.7.inc
+++ /dev/null
@@ -1,1137 +0,0 @@
-RDEPENDS_perl-misc += "perl-module-exporter "
-RDEPENDS_perl-misc += "perl-module-strict "
-RDEPENDS_perl-misc += "perl-module-warnings "
-RDEPENDS_perl-module-attribute-handlers-demo-demo += "perl-module-attribute-handlers "
-RDEPENDS_perl-module-attribute-handlers-demo-descriptions += "perl-module-attribute-handlers "
-RDEPENDS_perl-module-attribute-handlers-demo-myclass += "perl-module-base "
-RDEPENDS_perl-module-attribute-handlers += "perl-module-carp "
-RDEPENDS_perl-module-attribute-handlers += "perl-module-warnings "
-RDEPENDS_perl-module-attributes += "perl-module-strict "
-RDEPENDS_perl-module-attrs += "perl-module-xsloader "
-RDEPENDS_perl-module-autoloader += "perl-module-strict "
-RDEPENDS_perl-module-autosplit += "perl-module-carp "
-RDEPENDS_perl-module-autosplit += "perl-module-config "
-RDEPENDS_perl-module-autosplit += "perl-module-exporter "
-RDEPENDS_perl-module-autosplit += "perl-module-file-basename "
-RDEPENDS_perl-module-autosplit += "perl-module-file-path "
-RDEPENDS_perl-module-autosplit += "perl-module-file-spec-functions "
-RDEPENDS_perl-module-autosplit += "perl-module-strict "
-RDEPENDS_perl-module-base += "perl-module-strict "
-RDEPENDS_perl-module-base += "perl-module-vars "
-RDEPENDS_perl-module-b-asmdata += "perl-module-exporter "
-RDEPENDS_perl-module-b-assembler += "perl-module-b "
-RDEPENDS_perl-module-b-assembler += "perl-module-b-asmdata "
-RDEPENDS_perl-module-b-assembler += "perl-module-config "
-RDEPENDS_perl-module-b-assembler += "perl-module-exporter "
-RDEPENDS_perl-module-b-assembler += "perl-module-strict "
-RDEPENDS_perl-module-b-bblock += "perl-module-b-concise "
-RDEPENDS_perl-module-b-bblock += "perl-module-exporter "
-RDEPENDS_perl-module-b-bblock += "perl-module-strict "
-RDEPENDS_perl-module-b-bytecode += "perl-module-b-asmdata "
-RDEPENDS_perl-module-b-bytecode += "perl-module-b-assembler "
-RDEPENDS_perl-module-b-bytecode += "perl-module-config "
-RDEPENDS_perl-module-b-bytecode += "perl-module-strict "
-RDEPENDS_perl-module-b-cc += "perl-module-b-bblock "
-RDEPENDS_perl-module-b-cc += "perl-module-b-stackobj "
-RDEPENDS_perl-module-b-cc += "perl-module-config "
-RDEPENDS_perl-module-b-cc += "perl-module-strict "
-RDEPENDS_perl-module-b-c += "perl-module-b "
-RDEPENDS_perl-module-b-c += "perl-module-base "
-RDEPENDS_perl-module-b-c += "perl-module-b-asmdata "
-RDEPENDS_perl-module-b-c += "perl-module-carp "
-RDEPENDS_perl-module-b-c += "perl-module-config "
-RDEPENDS_perl-module-b-c += "perl-module-exporter "
-RDEPENDS_perl-module-b-c += "perl-module-filehandle "
-RDEPENDS_perl-module-b-c += "perl-module-strict "
-RDEPENDS_perl-module-b-debug += "perl-module-b-asmdata "
-RDEPENDS_perl-module-b-debug += "perl-module-strict "
-RDEPENDS_perl-module-b-deparse += "perl-module-bytes "
-RDEPENDS_perl-module-b-deparse += "perl-module-carp "
-RDEPENDS_perl-module-b-deparse += "perl-module-integer "
-RDEPENDS_perl-module-b-deparse += "perl-module-re "
-RDEPENDS_perl-module-b-deparse += "perl-module-strict "
-RDEPENDS_perl-module-b-deparse += "perl-module-utf8 "
-RDEPENDS_perl-module-b-deparse += "perl-module-warnings "
-RDEPENDS_perl-module-b-deparse += "perl-module-warnings "
-RDEPENDS_perl-module-b-deparse += "perl-module-vars "
-RDEPENDS_perl-module-b-disassembler += "perl-module-b "
-RDEPENDS_perl-module-b-disassembler += "perl-module-b-asmdata "
-RDEPENDS_perl-module-b-disassembler += "perl-module-carp "
-RDEPENDS_perl-module-b-disassembler += "perl-module-config "
-RDEPENDS_perl-module-b-disassembler += "perl-module-exporter "
-RDEPENDS_perl-module-b-disassembler += "perl-module-filehandle "
-RDEPENDS_perl-module-b-disassembler += "perl-module-strict "
-RDEPENDS_perl-module-benchmark += "perl-module-carp "
-RDEPENDS_perl-module-benchmark += "perl-module-exporter "
-RDEPENDS_perl-module-benchmark += "perl-module-strict "
-RDEPENDS_perl-module-bigint += "perl-module-exporter "
-RDEPENDS_perl-module-bigint += "perl-module-overload "
-RDEPENDS_perl-module-bigint += "perl-module-strict "
-RDEPENDS_perl-module-bignum += "perl-module-exporter "
-RDEPENDS_perl-module-bignum += "perl-module-strict "
-RDEPENDS_perl-module-bigrat += "perl-module-exporter "
-RDEPENDS_perl-module-bigrat += "perl-module-strict "
-RDEPENDS_perl-module-blib += "perl-module-cwd "
-RDEPENDS_perl-module-blib += "perl-module-file-spec "
-RDEPENDS_perl-module-blib += "perl-module-vars "
-RDEPENDS_perl-module-b-lint += "perl-module-strict "
-RDEPENDS_perl-module-b-showlex += "perl-module-b "
-RDEPENDS_perl-module-b-showlex += "perl-module-b-concise "
-RDEPENDS_perl-module-b-showlex += "perl-module-b-terse "
-RDEPENDS_perl-module-b-showlex += "perl-module-strict "
-RDEPENDS_perl-module-b-stackobj += "perl-module-b "
-RDEPENDS_perl-module-b-stackobj += "perl-module-carp "
-RDEPENDS_perl-module-b-stackobj += "perl-module-exporter "
-RDEPENDS_perl-module-b-stackobj += "perl-module-strict "
-RDEPENDS_perl-module-b-terse += "perl-module-b "
-RDEPENDS_perl-module-b-terse += "perl-module-b-asmdata "
-RDEPENDS_perl-module-b-terse += "perl-module-b-concise "
-RDEPENDS_perl-module-b-terse += "perl-module-carp "
-RDEPENDS_perl-module-b-terse += "perl-module-strict "
-RDEPENDS_perl-module-b += "perl-module-exporter "
-RDEPENDS_perl-module-b += "perl-module-strict "
-RDEPENDS_perl-module-b += "perl-module-xsloader "
-RDEPENDS_perl-module-b-xref += "perl-module-config "
-RDEPENDS_perl-module-b-xref += "perl-module-strict "
-RDEPENDS_perl-module-byteloader += "perl-module-xsloader "
-RDEPENDS_perl-module-carp-heavy += "perl-module-carp "
-RDEPENDS_perl-module-carp += "perl-module-exporter "
-RDEPENDS_perl-module-cgi-apache += "perl-module-cgi "
-RDEPENDS_perl-module-cgi-carp += "perl-module-exporter "
-RDEPENDS_perl-module-cgi-carp += "perl-module-file-spec "
-RDEPENDS_perl-module-cgi-cookie += "perl-module-cgi-util "
-RDEPENDS_perl-module-cgi-fast += "perl-module-cgi "
-RDEPENDS_perl-module-cgi-fast += "perl-module-vars "
-RDEPENDS_perl-module-cgi-pretty += "perl-module-cgi "
-RDEPENDS_perl-module-cgi-pretty += "perl-module-strict "
-RDEPENDS_perl-module-cgi-push += "perl-module-cgi "
-RDEPENDS_perl-module-cgi-push += "perl-module-cgi-util "
-RDEPENDS_perl-module-cgi-switch += "perl-module-cgi "
-RDEPENDS_perl-module-cgi += "perl-module-carp "
-RDEPENDS_perl-module-cgi += "perl-module-cgi-util "
-RDEPENDS_perl-module-cgi += "perl-module-constant "
-RDEPENDS_perl-module-cgi-util += "perl-module-exporter "
-RDEPENDS_perl-module-cgi-util += "perl-module-strict "
-RDEPENDS_perl-module-cgi-util += "perl-module-vars "
-RDEPENDS_perl-module-charnames += "perl-module-carp "
-RDEPENDS_perl-module-charnames += "perl-module-file-spec "
-RDEPENDS_perl-module-charnames += "perl-module-strict "
-RDEPENDS_perl-module-charnames += "perl-module-warnings "
-RDEPENDS_perl-module-class-isa += "perl-module-strict "
-RDEPENDS_perl-module-class-isa += "perl-module-vars "
-RDEPENDS_perl-module-class-struct += "perl-module-exporter "
-RDEPENDS_perl-module-class-struct += "perl-module-carp "
-RDEPENDS_perl-module-class-struct += "perl-module-strict "
-RDEPENDS_perl-module-class-struct += "perl-module-warnings-register "
-RDEPENDS_perl-module-config += "perl-module-strict "
-RDEPENDS_perl-module-constant += "perl-module-strict "
-RDEPENDS_perl-module-constant += "perl-module-warnings-register "
-RDEPENDS_perl-module-cpan-firsttime += "perl-module-extutils-makemaker "
-RDEPENDS_perl-module-cpan-firsttime += "perl-module-file-basename "
-RDEPENDS_perl-module-cpan-firsttime += "perl-module-filehandle "
-RDEPENDS_perl-module-cpan-firsttime += "perl-module-file-path "
-RDEPENDS_perl-module-cpan-firsttime += "perl-module-file-spec "
-RDEPENDS_perl-module-cpan-firsttime += "perl-module-strict "
-RDEPENDS_perl-module-cpan-firsttime += "perl-module-vars "
-RDEPENDS_perl-module-cpan-nox += "perl-module-base "
-RDEPENDS_perl-module-cpan-nox += "perl-module-cpan "
-RDEPENDS_perl-module-cpan-nox += "perl-module-strict "
-RDEPENDS_perl-module-cpan-nox += "perl-module-vars "
-RDEPENDS_perl-module-cpan += "perl-module-carp "
-RDEPENDS_perl-module-cpan += "perl-module-config "
-RDEPENDS_perl-module-cpan += "perl-module-cwd "
-RDEPENDS_perl-module-cpan += "perl-module-dirhandle "
-RDEPENDS_perl-module-cpan += "perl-module-exporter "
-RDEPENDS_perl-module-cpan += "perl-module-extutils-makemaker "
-RDEPENDS_perl-module-cpan += "perl-module-extutils-makemaker "
-RDEPENDS_perl-module-cpan += "perl-module-file-basename "
-RDEPENDS_perl-module-cpan += "perl-module-file-copy "
-RDEPENDS_perl-module-cpan += "perl-module-file-find "
-RDEPENDS_perl-module-cpan += "perl-module-filehandle "
-RDEPENDS_perl-module-cpan += "perl-module-file-path "
-RDEPENDS_perl-module-cpan += "perl-module-file-spec "
-RDEPENDS_perl-module-cpan += "perl-module-overload "
-RDEPENDS_perl-module-cpan += "perl-module-safe "
-RDEPENDS_perl-module-cpan += "perl-module-strict "
-RDEPENDS_perl-module-cpan += "perl-module-sys-hostname "
-RDEPENDS_perl-module-cpan += "perl-module-text-parsewords "
-RDEPENDS_perl-module-cpan += "perl-module-text-wrap "
-RDEPENDS_perl-module-cpan += "perl-module-vars "
-RDEPENDS_perl-module-cwd += "perl-module-exporter "
-RDEPENDS_perl-module-cwd += "perl-module-strict "
-RDEPENDS_perl-module-cwd += "perl-module-vars "
-RDEPENDS_perl-module-data-dumper += "perl-module-exporter "
-RDEPENDS_perl-module-data-dumper += "perl-module-overload "
-RDEPENDS_perl-module-data-dumper += "perl-module-carp "
-RDEPENDS_perl-module-dbm-filter-compress += "perl-module-carp "
-RDEPENDS_perl-module-dbm-filter-compress += "perl-module-strict "
-RDEPENDS_perl-module-dbm-filter-compress += "perl-module-warnings "
-RDEPENDS_perl-module-dbm-filter-encode += "perl-module-carp "
-RDEPENDS_perl-module-dbm-filter-encode += "perl-module-strict "
-RDEPENDS_perl-module-dbm-filter-encode += "perl-module-warnings "
-RDEPENDS_perl-module-dbm-filter-int32 += "perl-module-strict "
-RDEPENDS_perl-module-dbm-filter-int32 += "perl-module-warnings "
-RDEPENDS_perl-module-dbm-filter-null += "perl-module-strict "
-RDEPENDS_perl-module-dbm-filter-null += "perl-module-warnings "
-RDEPENDS_perl-module-dbm-filter += "perl-module-carp "
-RDEPENDS_perl-module-dbm-filter += "perl-module-strict "
-RDEPENDS_perl-module-dbm-filter += "perl-module-warnings "
-RDEPENDS_perl-module-dbm-filter-utf8 += "perl-module-carp "
-RDEPENDS_perl-module-dbm-filter-utf8 += "perl-module-strict "
-RDEPENDS_perl-module-dbm-filter-utf8 += "perl-module-warnings "
-RDEPENDS_perl-module-devel-dprof += "perl-module-xsloader "
-RDEPENDS_perl-module-devel-peek += "perl-module-exporter "
-RDEPENDS_perl-module-devel-peek += "perl-module-xsloader "
-RDEPENDS_perl-module-devel-ppport += "perl-module-dynaloader "
-RDEPENDS_perl-module-devel-ppport += "perl-module-strict "
-RDEPENDS_perl-module-devel-ppport += "perl-module-vars "
-RDEPENDS_perl-module-devel-selfstubber += "perl-module-selfloader "
-RDEPENDS_perl-module-devel-selfstubber += "perl-module-file-spec "
-RDEPENDS_perl-module-diagnostics += "perl-module-carp "
-RDEPENDS_perl-module-diagnostics += "perl-module-config "
-RDEPENDS_perl-module-diagnostics += "perl-module-strict "
-RDEPENDS_perl-module-digest-base += "perl-module-strict "
-RDEPENDS_perl-module-digest-base += "perl-module-vars "
-RDEPENDS_perl-module-digest-file += "perl-module-carp "
-RDEPENDS_perl-module-digest-file += "perl-module-digest "
-RDEPENDS_perl-module-digest-file += "perl-module-exporter "
-RDEPENDS_perl-module-digest-file += "perl-module-strict "
-RDEPENDS_perl-module-digest-file += "perl-module-vars "
-RDEPENDS_perl-module-digest-md5 += "perl-module-dynaloader "
-RDEPENDS_perl-module-digest-md5 += "perl-module-exporter "
-RDEPENDS_perl-module-digest-md5 += "perl-module-strict "
-RDEPENDS_perl-module-digest-md5 += "perl-module-vars "
-RDEPENDS_perl-module-digest += "perl-module-strict "
-RDEPENDS_perl-module-digest += "perl-module-vars "
-RDEPENDS_perl-module-dirhandle += "perl-module-carp "
-RDEPENDS_perl-module-dirhandle += "perl-module-symbol "
-RDEPENDS_perl-module-dumpvalue += "perl-module-strict "
-RDEPENDS_perl-module-dynaloader += "perl-module-autoloader "
-RDEPENDS_perl-module-dynaloader += "perl-module-config "
-RDEPENDS_perl-module-dynaloader += "perl-module-vars "
-RDEPENDS_perl-module-encode-alias += "perl-module-base "
-RDEPENDS_perl-module-encode-alias += "perl-module-encode "
-RDEPENDS_perl-module-encode-alias += "perl-module-strict "
-RDEPENDS_perl-module-encode-byte += "perl-module-encode "
-RDEPENDS_perl-module-encode-byte += "perl-module-xsloader "
-RDEPENDS_perl-module-encode-cjkconstants += "perl-module-exporter "
-RDEPENDS_perl-module-encode-cjkconstants += "perl-module-carp "
-RDEPENDS_perl-module-encode-cjkconstants += "perl-module-strict "
-RDEPENDS_perl-module-encode-cn-hz += "perl-module-base "
-RDEPENDS_perl-module-encode-cn-hz += "perl-module-encode "
-RDEPENDS_perl-module-encode-cn-hz += "perl-module-strict "
-RDEPENDS_perl-module-encode-cn-hz += "perl-module-vars "
-RDEPENDS_perl-module-encode-cn += "perl-module-encode "
-RDEPENDS_perl-module-encode-cn += "perl-module-encode-cn-hz "
-RDEPENDS_perl-module-encode-cn += "perl-module-xsloader "
-RDEPENDS_perl-module-encode-config += "perl-module-strict "
-RDEPENDS_perl-module-encode-ebcdic += "perl-module-encode "
-RDEPENDS_perl-module-encode-ebcdic += "perl-module-xsloader "
-RDEPENDS_perl-module-encode-encoder += "perl-module-exporter "
-RDEPENDS_perl-module-encode-encoder += "perl-module-carp "
-RDEPENDS_perl-module-encode-encoder += "perl-module-encode "
-RDEPENDS_perl-module-encode-encoder += "perl-module-strict "
-RDEPENDS_perl-module-encode-encoder += "perl-module-warnings "
-RDEPENDS_perl-module-encode-encoding += "perl-module-encode "
-RDEPENDS_perl-module-encode-encoding += "perl-module-strict "
-RDEPENDS_perl-module-encode-guess += "perl-module-base "
-RDEPENDS_perl-module-encode-guess += "perl-module-encode "
-RDEPENDS_perl-module-encode-guess += "perl-module-strict "
-RDEPENDS_perl-module-encode-jp-h2z += "perl-module-encode-cjkconstants "
-RDEPENDS_perl-module-encode-jp-h2z += "perl-module-strict "
-RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-base "
-RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-encode "
-RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-encode-cjkconstants "
-RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-strict "
-RDEPENDS_perl-module-encode-jp += "perl-module-encode "
-RDEPENDS_perl-module-encode-jp += "perl-module-encode-jp-jis7 "
-RDEPENDS_perl-module-encode-jp += "perl-module-xsloader "
-RDEPENDS_perl-module-encode-kr-2022-kr += "perl-module-base "
-RDEPENDS_perl-module-encode-kr-2022-kr += "perl-module-encode "
-RDEPENDS_perl-module-encode-kr-2022-kr += "perl-module-encode-cjkconstants "
-RDEPENDS_perl-module-encode-kr-2022-kr += "perl-module-strict "
-RDEPENDS_perl-module-encode-kr += "perl-module-encode "
-RDEPENDS_perl-module-encode-kr += "perl-module-encode-kr-2022-kr "
-RDEPENDS_perl-module-encode-kr += "perl-module-xsloader "
-RDEPENDS_perl-module-encode-mime-header += "perl-module-base "
-RDEPENDS_perl-module-encode-mime-header += "perl-module-carp "
-RDEPENDS_perl-module-encode-mime-header += "perl-module-constant "
-RDEPENDS_perl-module-encode-mime-header += "perl-module-encode "
-RDEPENDS_perl-module-encode-mime-header += "perl-module-mime-base64 "
-RDEPENDS_perl-module-encode-mime-header += "perl-module-strict "
-RDEPENDS_perl-module-encode-symbol += "perl-module-encode "
-RDEPENDS_perl-module-encode-symbol += "perl-module-xsloader "
-RDEPENDS_perl-module-encode-tw += "perl-module-encode "
-RDEPENDS_perl-module-encode-tw += "perl-module-xsloader "
-RDEPENDS_perl-module-encode-unicode += "perl-module-encode "
-RDEPENDS_perl-module-encode-unicode += "perl-module-base "
-RDEPENDS_perl-module-encode-unicode += "perl-module-strict "
-RDEPENDS_perl-module-encode-unicode += "perl-module-warnings "
-RDEPENDS_perl-module-encode-unicode += "perl-module-xsloader "
-RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-base "
-RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-encode "
-RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-mime-base64 "
-RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-strict "
-RDEPENDS_perl-module-encode += "perl-module-encode-config "
-RDEPENDS_perl-module-encode += "perl-module-exporter "
-RDEPENDS_perl-module-encode += "perl-module-base "
-RDEPENDS_perl-module-encode += "perl-module-encode-alias "
-RDEPENDS_perl-module-encode += "perl-module-strict "
-RDEPENDS_perl-module-encode += "perl-module-xsloader "
-RDEPENDS_perl-module-encoding += "perl-module-encode "
-RDEPENDS_perl-module-encoding += "perl-module-strict "
-RDEPENDS_perl-module-english += "perl-module-exporter "
-RDEPENDS_perl-module-env += "perl-module-config "
-RDEPENDS_perl-module-env += "perl-module-tie-array "
-RDEPENDS_perl-module-errno += "perl-module-config "
-RDEPENDS_perl-module-errno += "perl-module-exporter "
-RDEPENDS_perl-module-errno += "perl-module-strict "
-RDEPENDS_perl-module-exporter-heavy += "perl-module-exporter "
-RDEPENDS_perl-module-exporter-heavy += "perl-module-strict "
-RDEPENDS_perl-module-extutils-command-mm += "perl-module-exporter "
-RDEPENDS_perl-module-extutils-command-mm += "perl-module-strict "
-RDEPENDS_perl-module-extutils-command-mm += "perl-module-vars "
-RDEPENDS_perl-module-extutils-command += "perl-module-exporter "
-RDEPENDS_perl-module-extutils-command += "perl-module-carp "
-RDEPENDS_perl-module-extutils-command += "perl-module-file-basename "
-RDEPENDS_perl-module-extutils-command += "perl-module-file-compare "
-RDEPENDS_perl-module-extutils-command += "perl-module-file-copy "
-RDEPENDS_perl-module-extutils-command += "perl-module-file-path "
-RDEPENDS_perl-module-extutils-command += "perl-module-strict "
-RDEPENDS_perl-module-extutils-command += "perl-module-vars "
-RDEPENDS_perl-module-extutils-constant-base += "perl-module-carp "
-RDEPENDS_perl-module-extutils-constant-base += "perl-module-extutils-constant-utils "
-RDEPENDS_perl-module-extutils-constant-base += "perl-module-strict "
-RDEPENDS_perl-module-extutils-constant-base += "perl-module-text-wrap "
-RDEPENDS_perl-module-extutils-constant-base += "perl-module-vars "
-RDEPENDS_perl-module-extutils-constant += "perl-module-carp "
-RDEPENDS_perl-module-extutils-constant += "perl-module-exporter "
-RDEPENDS_perl-module-extutils-constant += "perl-module-extutils-constant-utils "
-RDEPENDS_perl-module-extutils-constant += "perl-module-extutils-constant-xs "
-RDEPENDS_perl-module-extutils-constant += "perl-module-strict "
-RDEPENDS_perl-module-extutils-constant += "perl-module-vars "
-RDEPENDS_perl-module-extutils-constant-utils += "perl-module-carp "
-RDEPENDS_perl-module-extutils-constant-utils += "perl-module-strict "
-RDEPENDS_perl-module-extutils-constant-utils += "perl-module-vars "
-RDEPENDS_perl-module-extutils-constant-xs += "perl-module-extutils-constant-base "
-RDEPENDS_perl-module-extutils-constant-xs += "perl-module-carp "
-RDEPENDS_perl-module-extutils-constant-xs += "perl-module-extutils-constant "
-RDEPENDS_perl-module-extutils-constant-xs += "perl-module-extutils-constant-utils "
-RDEPENDS_perl-module-extutils-constant-xs += "perl-module-strict "
-RDEPENDS_perl-module-extutils-constant-xs += "perl-module-vars "
-RDEPENDS_perl-module-extutils-embed += "perl-module-exporter "
-RDEPENDS_perl-module-extutils-embed += "perl-module-filehandle "
-RDEPENDS_perl-module-extutils-embed += "perl-module-config "
-RDEPENDS_perl-module-extutils-embed += "perl-module-file-spec "
-RDEPENDS_perl-module-extutils-embed += "perl-module-getopt-std "
-RDEPENDS_perl-module-extutils-embed += "perl-module-strict "
-RDEPENDS_perl-module-extutils-installed += "perl-module-carp "
-RDEPENDS_perl-module-extutils-installed += "perl-module-config "
-RDEPENDS_perl-module-extutils-installed += "perl-module-extutils-makemaker "
-RDEPENDS_perl-module-extutils-installed += "perl-module-extutils-packlist "
-RDEPENDS_perl-module-extutils-installed += "perl-module-file-basename "
-RDEPENDS_perl-module-extutils-installed += "perl-module-file-find "
-RDEPENDS_perl-module-extutils-installed += "perl-module-file-spec "
-RDEPENDS_perl-module-extutils-installed += "perl-module-strict "
-RDEPENDS_perl-module-extutils-installed += "perl-module-vars "
-RDEPENDS_perl-module-extutils-install += "perl-module-carp "
-RDEPENDS_perl-module-extutils-install += "perl-module-config "
-RDEPENDS_perl-module-extutils-install += "perl-module-exporter "
-RDEPENDS_perl-module-extutils-install += "perl-module-file-spec "
-RDEPENDS_perl-module-extutils-install += "perl-module-vars "
-RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-config "
-RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-cwd "
-RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-file-basename "
-RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-file-spec "
-RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-strict "
-RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-vars "
-RDEPENDS_perl-module-extutils-liblist += "perl-module-extutils-liblist-kid "
-RDEPENDS_perl-module-extutils-liblist += "perl-module-file-spec "
-RDEPENDS_perl-module-extutils-liblist += "perl-module-vars "
-RDEPENDS_perl-module-extutils-makemaker-bytes += "perl-module-vars "
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-exporter "
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-carp "
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-config "
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-file-path "
-RDEPENDS_perl-module-extutils-makemaker += "perl-module-strict "
-RDEPENDS_perl-module-extutils-makemaker-vmsish += "perl-module-vmsish "
-RDEPENDS_perl-module-extutils-makemaker-vmsish += "perl-module-vars "
-RDEPENDS_perl-module-extutils-manifest += "perl-module-exporter "
-RDEPENDS_perl-module-extutils-manifest += "perl-module-carp "
-RDEPENDS_perl-module-extutils-manifest += "perl-module-config "
-RDEPENDS_perl-module-extutils-manifest += "perl-module-file-copy "
-RDEPENDS_perl-module-extutils-manifest += "perl-module-file-find "
-RDEPENDS_perl-module-extutils-manifest += "perl-module-file-spec "
-RDEPENDS_perl-module-extutils-manifest += "perl-module-strict "
-RDEPENDS_perl-module-extutils-miniperl += "perl-module-exporter "
-RDEPENDS_perl-module-extutils-mkbootstrap += "perl-module-config "
-RDEPENDS_perl-module-extutils-mkbootstrap += "perl-module-exporter "
-RDEPENDS_perl-module-extutils-mksymlists += "perl-module-carp "
-RDEPENDS_perl-module-extutils-mksymlists += "perl-module-config "
-RDEPENDS_perl-module-extutils-mksymlists += "perl-module-exporter "
-RDEPENDS_perl-module-extutils-mksymlists += "perl-module-strict "
-RDEPENDS_perl-module-extutils-mksymlists += "perl-module-vars "
-RDEPENDS_perl-module-extutils-mm-any += "perl-module-config "
-RDEPENDS_perl-module-extutils-mm-any += "perl-module-file-spec "
-RDEPENDS_perl-module-extutils-mm-any += "perl-module-strict "
-RDEPENDS_perl-module-extutils-mm-any += "perl-module-vars "
-RDEPENDS_perl-module-extutils-mm-beos += "perl-module-extutils-mm-any "
-RDEPENDS_perl-module-extutils-mm-beos += "perl-module-extutils-mm-unix "
-RDEPENDS_perl-module-extutils-mm-beos += "perl-module-config "
-RDEPENDS_perl-module-extutils-mm-beos += "perl-module-file-spec "
-RDEPENDS_perl-module-extutils-mm-beos += "perl-module-vars "
-RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-extutils-mm-any "
-RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-extutils-mm-unix "
-RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-config "
-RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-file-spec "
-RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-strict "
-RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-vars "
-RDEPENDS_perl-module-extutils-mm-dos += "perl-module-extutils-mm-any "
-RDEPENDS_perl-module-extutils-mm-dos += "perl-module-extutils-mm-unix "
-RDEPENDS_perl-module-extutils-mm-dos += "perl-module-strict "
-RDEPENDS_perl-module-extutils-mm-dos += "perl-module-vars "
-RDEPENDS_perl-module-extutils-mm-macos += "perl-module-exporter "
-RDEPENDS_perl-module-extutils-mm-macos += "perl-module-extutils-mm-any "
-RDEPENDS_perl-module-extutils-mm-macos += "perl-module-extutils-mm-unix "
-RDEPENDS_perl-module-extutils-mm-macos += "perl-module-config "
-RDEPENDS_perl-module-extutils-mm-macos += "perl-module-cwd "
-RDEPENDS_perl-module-extutils-mm-macos += "perl-module-extutils-makemaker "
-RDEPENDS_perl-module-extutils-mm-macos += "perl-module-file-basename "
-RDEPENDS_perl-module-extutils-mm-macos += "perl-module-vars "
-RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-extutils-mm-win32 "
-RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-config "
-RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-extutils-makemaker "
-RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-file-basename "
-RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-strict "
-RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-vars "
-RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-extutils-mm-any "
-RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-extutils-mm-unix "
-RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-extutils-makemaker "
-RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-file-spec "
-RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-strict "
-RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-vars "
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-extutils-mm-any "
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-carp "
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-config "
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-dirhandle "
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-exporter "
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-extutils-makemaker "
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-file-basename "
-RDEPENDS_perl-module-extutils-mm-unix += "perl-module-strict "
-RDEPENDS_perl-module-extutils-mm += "perl-module-extutils-liblist "
-RDEPENDS_perl-module-extutils-mm += "perl-module-extutils-makemaker "
-RDEPENDS_perl-module-extutils-mm += "perl-module-config "
-RDEPENDS_perl-module-extutils-mm += "perl-module-strict "
-RDEPENDS_perl-module-extutils-mm += "perl-module-vars "
-RDEPENDS_perl-module-extutils-mm-uwin += "perl-module-extutils-mm-unix "
-RDEPENDS_perl-module-extutils-mm-uwin += "perl-module-strict "
-RDEPENDS_perl-module-extutils-mm-uwin += "perl-module-vars "
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-extutils-mm-any "
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-extutils-mm-unix "
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-config "
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-extutils-makemaker "
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-file-basename "
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-file-spec "
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-strict "
-RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-vars "
-RDEPENDS_perl-module-extutils-mm-win95 += "perl-module-extutils-mm-win32 "
-RDEPENDS_perl-module-extutils-mm-win95 += "perl-module-config "
-RDEPENDS_perl-module-extutils-mm-win95 += "perl-module-vars "
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-exporter "
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-extutils-mm-any "
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-extutils-mm-unix "
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-config "
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-extutils-makemaker "
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-file-basename "
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-strict "
-RDEPENDS_perl-module-extutils-mm-vms += "perl-module-vars "
-RDEPENDS_perl-module-extutils-my += "perl-module-extutils-mm "
-RDEPENDS_perl-module-extutils-my += "perl-module-strict "
-RDEPENDS_perl-module-extutils-my += "perl-module-vars "
-RDEPENDS_perl-module-extutils-packlist += "perl-module-carp "
-RDEPENDS_perl-module-extutils-packlist += "perl-module-strict "
-RDEPENDS_perl-module-extutils-packlist += "perl-module-vars "
-RDEPENDS_perl-module-extutils-testlib += "perl-module-cwd "
-RDEPENDS_perl-module-extutils-testlib += "perl-module-file-spec "
-RDEPENDS_perl-module-extutils-testlib += "perl-module-lib "
-RDEPENDS_perl-module-fatal += "perl-module-carp "
-RDEPENDS_perl-module-fatal += "perl-module-strict "
-RDEPENDS_perl-module-fcntl += "perl-module-exporter "
-RDEPENDS_perl-module-fcntl += "perl-module-xsloader "
-RDEPENDS_perl-module-fields += "perl-module-strict "
-RDEPENDS_perl-module-fields += "perl-module-vars "
-RDEPENDS_perl-module-file-basename += "perl-module-exporter "
-RDEPENDS_perl-module-file-basename += "perl-module-warnings "
-RDEPENDS_perl-module-filecache += "perl-module-base "
-RDEPENDS_perl-module-filecache += "perl-module-carp "
-RDEPENDS_perl-module-filecache += "perl-module-config "
-RDEPENDS_perl-module-filecache += "perl-module-strict "
-RDEPENDS_perl-module-filecache += "perl-module-vars "
-RDEPENDS_perl-module-file-checktree += "perl-module-cwd "
-RDEPENDS_perl-module-file-checktree += "perl-module-exporter "
-RDEPENDS_perl-module-file-checktree += "perl-module-file-spec "
-RDEPENDS_perl-module-file-checktree += "perl-module-strict "
-RDEPENDS_perl-module-file-checktree += "perl-module-warnings "
-RDEPENDS_perl-module-file-compare += "perl-module-exporter "
-RDEPENDS_perl-module-file-compare += "perl-module-carp "
-RDEPENDS_perl-module-file-compare += "perl-module-strict "
-RDEPENDS_perl-module-file-compare += "perl-module-warnings "
-RDEPENDS_perl-module-file-copy += "perl-module-exporter "
-RDEPENDS_perl-module-file-copy += "perl-module-carp "
-RDEPENDS_perl-module-file-copy += "perl-module-config "
-RDEPENDS_perl-module-file-copy += "perl-module-file-spec "
-RDEPENDS_perl-module-file-copy += "perl-module-strict "
-RDEPENDS_perl-module-file-copy += "perl-module-warnings "
-RDEPENDS_perl-module-file-dosglob += "perl-module-strict "
-RDEPENDS_perl-module-file-dosglob += "perl-module-warnings "
-RDEPENDS_perl-module-file-find += "perl-module-cwd "
-RDEPENDS_perl-module-file-find += "perl-module-exporter "
-RDEPENDS_perl-module-file-find += "perl-module-file-basename "
-RDEPENDS_perl-module-file-find += "perl-module-file-spec "
-RDEPENDS_perl-module-file-find += "perl-module-strict "
-RDEPENDS_perl-module-file-find += "perl-module-warnings "
-RDEPENDS_perl-module-file-find += "perl-module-warnings-register "
-RDEPENDS_perl-module-file-glob += "perl-module-strict "
-RDEPENDS_perl-module-file-glob += "perl-module-xsloader "
-RDEPENDS_perl-module-filehandle += "perl-module-io-file "
-RDEPENDS_perl-module-filehandle += "perl-module-strict "
-RDEPENDS_perl-module-file-path += "perl-module-carp "
-RDEPENDS_perl-module-file-path += "perl-module-exporter "
-RDEPENDS_perl-module-file-path += "perl-module-file-basename "
-RDEPENDS_perl-module-file-path += "perl-module-strict "
-RDEPENDS_perl-module-file-path += "perl-module-warnings "
-RDEPENDS_perl-module-file-spec-cygwin += "perl-module-file-spec-unix "
-RDEPENDS_perl-module-file-spec-cygwin += "perl-module-strict "
-RDEPENDS_perl-module-file-spec-cygwin += "perl-module-vars "
-RDEPENDS_perl-module-file-spec-epoc += "perl-module-file-spec-unix "
-RDEPENDS_perl-module-file-spec-epoc += "perl-module-strict "
-RDEPENDS_perl-module-file-spec-epoc += "perl-module-vars "
-RDEPENDS_perl-module-file-spec-functions += "perl-module-exporter "
-RDEPENDS_perl-module-file-spec-functions += "perl-module-file-spec "
-RDEPENDS_perl-module-file-spec-functions += "perl-module-strict "
-RDEPENDS_perl-module-file-spec-functions += "perl-module-vars "
-RDEPENDS_perl-module-file-spec-mac += "perl-module-file-spec-unix "
-RDEPENDS_perl-module-file-spec-mac += "perl-module-strict "
-RDEPENDS_perl-module-file-spec-mac += "perl-module-vars "
-RDEPENDS_perl-module-file-spec-os2 += "perl-module-file-spec-unix "
-RDEPENDS_perl-module-file-spec-os2 += "perl-module-strict "
-RDEPENDS_perl-module-file-spec-os2 += "perl-module-vars "
-RDEPENDS_perl-module-file-spec-unix += "perl-module-strict "
-RDEPENDS_perl-module-file-spec-unix += "perl-module-vars "
-RDEPENDS_perl-module-file-spec += "perl-module-strict "
-RDEPENDS_perl-module-file-spec += "perl-module-vars "
-RDEPENDS_perl-module-file-spec-win32 += "perl-module-file-spec-unix "
-RDEPENDS_perl-module-file-spec-win32 += "perl-module-strict "
-RDEPENDS_perl-module-file-spec-win32 += "perl-module-vars "
-RDEPENDS_perl-module-file-spec-vms += "perl-module-file-spec-unix "
-RDEPENDS_perl-module-file-spec-vms += "perl-module-file-basename "
-RDEPENDS_perl-module-file-spec-vms += "perl-module-strict "
-RDEPENDS_perl-module-file-spec-vms += "perl-module-vars "
-RDEPENDS_perl-module-file-stat += "perl-module-class-struct "
-RDEPENDS_perl-module-file-stat += "perl-module-strict "
-RDEPENDS_perl-module-file-stat += "perl-module-warnings "
-RDEPENDS_perl-module-file-stat += "perl-module-vars "
-RDEPENDS_perl-module-file-temp += "perl-module-base "
-RDEPENDS_perl-module-file-temp += "perl-module-carp "
-RDEPENDS_perl-module-file-temp += "perl-module-constant "
-RDEPENDS_perl-module-file-temp += "perl-module-errno "
-RDEPENDS_perl-module-file-temp += "perl-module-fcntl "
-RDEPENDS_perl-module-file-temp += "perl-module-file-path "
-RDEPENDS_perl-module-file-temp += "perl-module-file-spec "
-RDEPENDS_perl-module-file-temp += "perl-module-overload "
-RDEPENDS_perl-module-file-temp += "perl-module-strict "
-RDEPENDS_perl-module-file-temp += "perl-module-vars "
-RDEPENDS_perl-module-filter-simple += "perl-module-carp "
-RDEPENDS_perl-module-filter-simple += "perl-module-filter-util-call "
-RDEPENDS_perl-module-filter-simple += "perl-module-text-balanced "
-RDEPENDS_perl-module-filter-simple += "perl-module-vars "
-RDEPENDS_perl-module-filter-util-call += "perl-module-dynaloader "
-RDEPENDS_perl-module-filter-util-call += "perl-module-exporter "
-RDEPENDS_perl-module-filter-util-call += "perl-module-carp "
-RDEPENDS_perl-module-filter-util-call += "perl-module-strict "
-RDEPENDS_perl-module-filter-util-call += "perl-module-warnings "
-RDEPENDS_perl-module-filter-util-call += "perl-module-vars "
-RDEPENDS_perl-module-findbin += "perl-module-exporter "
-RDEPENDS_perl-module-findbin += "perl-module-carp "
-RDEPENDS_perl-module-findbin += "perl-module-config "
-RDEPENDS_perl-module-findbin += "perl-module-cwd "
-RDEPENDS_perl-module-findbin += "perl-module-file-basename "
-RDEPENDS_perl-module-findbin += "perl-module-file-spec "
-RDEPENDS_perl-module-getopt-long += "perl-module-constant "
-RDEPENDS_perl-module-getopt-long += "perl-module-exporter "
-RDEPENDS_perl-module-getopt-long += "perl-module-strict "
-RDEPENDS_perl-module-getopt-long += "perl-module-vars "
-RDEPENDS_perl-module-getopt-std += "perl-module-exporter "
-RDEPENDS_perl-module-hash-util += "perl-module-exporter "
-RDEPENDS_perl-module-hash-util += "perl-module-carp "
-RDEPENDS_perl-module-hash-util += "perl-module-strict "
-RDEPENDS_perl-module-i18n-collate += "perl-module-exporter "
-RDEPENDS_perl-module-i18n-collate += "perl-module-posix "
-RDEPENDS_perl-module-i18n-collate += "perl-module-strict "
-RDEPENDS_perl-module-i18n-collate += "perl-module-warnings-register "
-RDEPENDS_perl-module-i18n-langinfo += "perl-module-dynaloader "
-RDEPENDS_perl-module-i18n-langinfo += "perl-module-exporter "
-RDEPENDS_perl-module-i18n-langinfo += "perl-module-autoloader "
-RDEPENDS_perl-module-i18n-langinfo += "perl-module-carp "
-RDEPENDS_perl-module-i18n-langinfo += "perl-module-strict "
-RDEPENDS_perl-module-i18n-langinfo += "perl-module-warnings "
-RDEPENDS_perl-module-i18n-langtags-detect += "perl-module-i18n-langtags "
-RDEPENDS_perl-module-i18n-langtags-detect += "perl-module-strict "
-RDEPENDS_perl-module-i18n-langtags-list += "perl-module-strict "
-RDEPENDS_perl-module-i18n-langtags-list += "perl-module-vars "
-RDEPENDS_perl-module-i18n-langtags += "perl-module-exporter "
-RDEPENDS_perl-module-i18n-langtags += "perl-module-strict "
-RDEPENDS_perl-module-i18n-langtags += "perl-module-vars "
-RDEPENDS_perl-module-io-dir += "perl-module-carp "
-RDEPENDS_perl-module-io-dir += "perl-module-exporter "
-RDEPENDS_perl-module-io-dir += "perl-module-file-spec "
-RDEPENDS_perl-module-io-dir += "perl-module-file-stat "
-RDEPENDS_perl-module-io-dir += "perl-module-io-file "
-RDEPENDS_perl-module-io-dir += "perl-module-strict "
-RDEPENDS_perl-module-io-dir += "perl-module-symbol "
-RDEPENDS_perl-module-io-dir += "perl-module-tie-hash "
-RDEPENDS_perl-module-io-file += "perl-module-exporter "
-RDEPENDS_perl-module-io-file += "perl-module-carp "
-RDEPENDS_perl-module-io-file += "perl-module-file-spec "
-RDEPENDS_perl-module-io-file += "perl-module-io-seekable "
-RDEPENDS_perl-module-io-file += "perl-module-selectsaver "
-RDEPENDS_perl-module-io-file += "perl-module-strict "
-RDEPENDS_perl-module-io-file += "perl-module-symbol "
-RDEPENDS_perl-module-io-handle += "perl-module-exporter "
-RDEPENDS_perl-module-io-handle += "perl-module-carp "
-RDEPENDS_perl-module-io-handle += "perl-module-selectsaver "
-RDEPENDS_perl-module-io-handle += "perl-module-strict "
-RDEPENDS_perl-module-io-handle += "perl-module-symbol "
-RDEPENDS_perl-module-io-pipe += "perl-module-carp "
-RDEPENDS_perl-module-io-pipe += "perl-module-io-handle "
-RDEPENDS_perl-module-io-pipe += "perl-module-strict "
-RDEPENDS_perl-module-io-pipe += "perl-module-symbol "
-RDEPENDS_perl-module-io-poll += "perl-module-exporter "
-RDEPENDS_perl-module-io-poll += "perl-module-io-handle "
-RDEPENDS_perl-module-io-poll += "perl-module-strict "
-RDEPENDS_perl-module-io-seekable += "perl-module-exporter "
-RDEPENDS_perl-module-io-seekable += "perl-module-carp "
-RDEPENDS_perl-module-io-seekable += "perl-module-fcntl "
-RDEPENDS_perl-module-io-seekable += "perl-module-io-handle "
-RDEPENDS_perl-module-io-seekable += "perl-module-strict "
-RDEPENDS_perl-module-io-select += "perl-module-exporter "
-RDEPENDS_perl-module-io-select += "perl-module-strict "
-RDEPENDS_perl-module-io-select += "perl-module-warnings-register "
-RDEPENDS_perl-module-io-select += "perl-module-vars "
-RDEPENDS_perl-module-io-socket-inet += "perl-module-carp "
-RDEPENDS_perl-module-io-socket-inet += "perl-module-errno "
-RDEPENDS_perl-module-io-socket-inet += "perl-module-exporter "
-RDEPENDS_perl-module-io-socket-inet += "perl-module-io-socket "
-RDEPENDS_perl-module-io-socket-inet += "perl-module-socket "
-RDEPENDS_perl-module-io-socket-inet += "perl-module-strict "
-RDEPENDS_perl-module-io-socket-unix += "perl-module-carp "
-RDEPENDS_perl-module-io-socket-unix += "perl-module-io-socket "
-RDEPENDS_perl-module-io-socket-unix += "perl-module-socket "
-RDEPENDS_perl-module-io-socket-unix += "perl-module-strict "
-RDEPENDS_perl-module-io-socket += "perl-module-io-socket-inet "
-RDEPENDS_perl-module-io-socket += "perl-module-io-socket-unix "
-RDEPENDS_perl-module-io-socket += "perl-module-carp "
-RDEPENDS_perl-module-io-socket += "perl-module-errno "
-RDEPENDS_perl-module-io-socket += "perl-module-exporter "
-RDEPENDS_perl-module-io-socket += "perl-module-io-handle "
-RDEPENDS_perl-module-io-socket += "perl-module-socket "
-RDEPENDS_perl-module-io-socket += "perl-module-strict "
-RDEPENDS_perl-module-io += "perl-module-carp "
-RDEPENDS_perl-module-io += "perl-module-strict "
-RDEPENDS_perl-module-io += "perl-module-warnings "
-RDEPENDS_perl-module-io += "perl-module-xsloader "
-RDEPENDS_perl-module-ipc-msg += "perl-module-carp "
-RDEPENDS_perl-module-ipc-msg += "perl-module-ipc-sysv "
-RDEPENDS_perl-module-ipc-msg += "perl-module-strict "
-RDEPENDS_perl-module-ipc-msg += "perl-module-vars "
-RDEPENDS_perl-module-ipc-open2 += "perl-module-exporter "
-RDEPENDS_perl-module-ipc-open2 += "perl-module-ipc-open3 "
-RDEPENDS_perl-module-ipc-open2 += "perl-module-strict "
-RDEPENDS_perl-module-ipc-open3 += "perl-module-exporter "
-RDEPENDS_perl-module-ipc-open3 += "perl-module-carp "
-RDEPENDS_perl-module-ipc-open3 += "perl-module-strict "
-RDEPENDS_perl-module-ipc-open3 += "perl-module-symbol "
-RDEPENDS_perl-module-ipc-semaphore += "perl-module-carp "
-RDEPENDS_perl-module-ipc-semaphore += "perl-module-strict "
-RDEPENDS_perl-module-ipc-semaphore += "perl-module-vars "
-RDEPENDS_perl-module-ipc-sysv += "perl-module-exporter "
-RDEPENDS_perl-module-ipc-sysv += "perl-module-carp "
-RDEPENDS_perl-module-ipc-sysv += "perl-module-config "
-RDEPENDS_perl-module-ipc-sysv += "perl-module-strict "
-RDEPENDS_perl-module-ipc-sysv += "perl-module-vars "
-RDEPENDS_perl-module-lib += "perl-module-config "
-RDEPENDS_perl-module-lib += "perl-module-strict "
-RDEPENDS_perl-module-list-util += "perl-module-exporter "
-RDEPENDS_perl-module-list-util += "perl-module-vars "
-RDEPENDS_perl-module-locale-constants += "perl-module-exporter "
-RDEPENDS_perl-module-locale-constants += "perl-module-constant "
-RDEPENDS_perl-module-locale-constants += "perl-module-strict "
-RDEPENDS_perl-module-locale-constants += "perl-module-vars "
-RDEPENDS_perl-module-locale-country += "perl-module-exporter "
-RDEPENDS_perl-module-locale-country += "perl-module-carp "
-RDEPENDS_perl-module-locale-country += "perl-module-locale-constants "
-RDEPENDS_perl-module-locale-country += "perl-module-strict "
-RDEPENDS_perl-module-locale-country += "perl-module-vars "
-RDEPENDS_perl-module-locale-currency += "perl-module-exporter "
-RDEPENDS_perl-module-locale-currency += "perl-module-strict "
-RDEPENDS_perl-module-locale-currency += "perl-module-vars "
-RDEPENDS_perl-module-locale-language += "perl-module-exporter "
-RDEPENDS_perl-module-locale-language += "perl-module-strict "
-RDEPENDS_perl-module-locale-language += "perl-module-vars "
-RDEPENDS_perl-module-locale-maketext-gutsloader += "perl-module-strict "
-RDEPENDS_perl-module-locale-maketext-guts += "perl-module-strict "
-RDEPENDS_perl-module-locale-maketext-guts += "perl-module-utf8 "
-RDEPENDS_perl-module-locale-maketext-guts += "perl-module-vars "
-RDEPENDS_perl-module-locale-maketext += "perl-module-carp "
-RDEPENDS_perl-module-locale-maketext += "perl-module-i18n-langtags "
-RDEPENDS_perl-module-locale-maketext += "perl-module-locale-maketext-gutsloader "
-RDEPENDS_perl-module-locale-maketext += "perl-module-strict "
-RDEPENDS_perl-module-locale-script += "perl-module-exporter "
-RDEPENDS_perl-module-locale-script += "perl-module-carp "
-RDEPENDS_perl-module-locale-script += "perl-module-locale-constants "
-RDEPENDS_perl-module-locale-script += "perl-module-strict "
-RDEPENDS_perl-module-locale-script += "perl-module-vars "
-RDEPENDS_perl-module-math-bigfloat-trace += "perl-module-exporter "
-RDEPENDS_perl-module-math-bigfloat-trace += "perl-module-math-bigfloat "
-RDEPENDS_perl-module-math-bigfloat-trace += "perl-module-strict "
-RDEPENDS_perl-module-math-bigfloat += "perl-module-exporter "
-RDEPENDS_perl-module-math-bigfloat += "perl-module-strict "
-RDEPENDS_perl-module-math-bigint-calcemu += "perl-module-strict "
-RDEPENDS_perl-module-math-bigint-calcemu += "perl-module-vars "
-RDEPENDS_perl-module-math-bigint-calc += "perl-module-strict "
-RDEPENDS_perl-module-math-bigint-calc += "perl-module-vars "
-RDEPENDS_perl-module-math-bigint-trace += "perl-module-exporter "
-RDEPENDS_perl-module-math-bigint-trace += "perl-module-math-bigint "
-RDEPENDS_perl-module-math-bigint-trace += "perl-module-strict "
-RDEPENDS_perl-module-math-bigint += "perl-module-strict "
-RDEPENDS_perl-module-math-bigrat += "perl-module-math-bigfloat "
-RDEPENDS_perl-module-math-bigrat += "perl-module-strict "
-RDEPENDS_perl-module-math-complex += "perl-module-exporter "
-RDEPENDS_perl-module-math-complex += "perl-module-strict "
-RDEPENDS_perl-module-math-trig += "perl-module-exporter "
-RDEPENDS_perl-module-math-trig += "perl-module-math-complex "
-RDEPENDS_perl-module-math-trig += "perl-module-strict "
-RDEPENDS_perl-module-memoize-anydbm-file += "perl-module-vars "
-RDEPENDS_perl-module-memoize-expirefile += "perl-module-carp "
-RDEPENDS_perl-module-memoize-expire += "perl-module-carp "
-RDEPENDS_perl-module-memoize-sdbm-file += "perl-module-sdbm-file "
-RDEPENDS_perl-module-memoize-storable += "perl-module-storable "
-RDEPENDS_perl-module-memoize += "perl-module-carp "
-RDEPENDS_perl-module-memoize += "perl-module-exporter "
-RDEPENDS_perl-module-memoize += "perl-module-strict "
-RDEPENDS_perl-module-memoize += "perl-module-vars "
-RDEPENDS_perl-module-mime-base64 += "perl-module-dynaloader "
-RDEPENDS_perl-module-mime-base64 += "perl-module-exporter "
-RDEPENDS_perl-module-mime-base64 += "perl-module-strict "
-RDEPENDS_perl-module-mime-base64 += "perl-module-vars "
-RDEPENDS_perl-module-mime-quotedprint += "perl-module-exporter "
-RDEPENDS_perl-module-mime-quotedprint += "perl-module-strict "
-RDEPENDS_perl-module-mime-quotedprint += "perl-module-vars "
-RDEPENDS_perl-module-net-cmd += "perl-module-exporter "
-RDEPENDS_perl-module-net-cmd += "perl-module-carp "
-RDEPENDS_perl-module-net-cmd += "perl-module-strict "
-RDEPENDS_perl-module-net-cmd += "perl-module-symbol "
-RDEPENDS_perl-module-net-cmd += "perl-module-vars "
-RDEPENDS_perl-module-net-config += "perl-module-exporter "
-RDEPENDS_perl-module-net-config += "perl-module-socket "
-RDEPENDS_perl-module-net-config += "perl-module-strict "
-RDEPENDS_perl-module-net-config += "perl-module-vars "
-RDEPENDS_perl-module-net-domain += "perl-module-exporter "
-RDEPENDS_perl-module-net-domain += "perl-module-carp "
-RDEPENDS_perl-module-net-domain += "perl-module-net-config "
-RDEPENDS_perl-module-net-domain += "perl-module-strict "
-RDEPENDS_perl-module-net-domain += "perl-module-vars "
-RDEPENDS_perl-module-net-ftp-a += "perl-module-net-ftp-dataconn "
-RDEPENDS_perl-module-net-ftp-a += "perl-module-carp "
-RDEPENDS_perl-module-net-ftp-a += "perl-module-strict "
-RDEPENDS_perl-module-net-ftp-a += "perl-module-vars "
-RDEPENDS_perl-module-net-ftp-dataconn += "perl-module-carp "
-RDEPENDS_perl-module-net-ftp-dataconn += "perl-module-errno "
-RDEPENDS_perl-module-net-ftp-dataconn += "perl-module-net-cmd "
-RDEPENDS_perl-module-net-ftp-dataconn += "perl-module-vars "
-RDEPENDS_perl-module-net-ftp-e += "perl-module-net-ftp-i "
-RDEPENDS_perl-module-net-ftp-i += "perl-module-net-ftp-dataconn "
-RDEPENDS_perl-module-net-ftp-i += "perl-module-carp "
-RDEPENDS_perl-module-net-ftp-i += "perl-module-vars "
-RDEPENDS_perl-module-net-ftp-l += "perl-module-net-ftp-i "
-RDEPENDS_perl-module-net-ftp += "perl-module-carp "
-RDEPENDS_perl-module-net-ftp += "perl-module-fcntl "
-RDEPENDS_perl-module-net-ftp += "perl-module-io-socket "
-RDEPENDS_perl-module-net-ftp += "perl-module-net-cmd "
-RDEPENDS_perl-module-net-ftp += "perl-module-net-config "
-RDEPENDS_perl-module-net-ftp += "perl-module-socket "
-RDEPENDS_perl-module-net-ftp += "perl-module-strict "
-RDEPENDS_perl-module-net-ftp += "perl-module-time-local "
-RDEPENDS_perl-module-net-ftp += "perl-module-vars "
-RDEPENDS_perl-module-net-hostent += "perl-module-class-struct "
-RDEPENDS_perl-module-net-hostent += "perl-module-strict "
-RDEPENDS_perl-module-net-hostent += "perl-module-vars "
-RDEPENDS_perl-module-net-netent += "perl-module-class-struct "
-RDEPENDS_perl-module-net-netent += "perl-module-strict "
-RDEPENDS_perl-module-net-netent += "perl-module-vars "
-RDEPENDS_perl-module-net-netrc += "perl-module-carp "
-RDEPENDS_perl-module-net-netrc += "perl-module-filehandle "
-RDEPENDS_perl-module-net-netrc += "perl-module-strict "
-RDEPENDS_perl-module-net-netrc += "perl-module-vars "
-RDEPENDS_perl-module-net-nntp += "perl-module-carp "
-RDEPENDS_perl-module-net-nntp += "perl-module-io-socket "
-RDEPENDS_perl-module-net-nntp += "perl-module-net-cmd "
-RDEPENDS_perl-module-net-nntp += "perl-module-net-config "
-RDEPENDS_perl-module-net-nntp += "perl-module-strict "
-RDEPENDS_perl-module-net-nntp += "perl-module-time-local "
-RDEPENDS_perl-module-net-nntp += "perl-module-vars "
-RDEPENDS_perl-module-net-ping += "perl-module-exporter "
-RDEPENDS_perl-module-net-ping += "perl-module-carp "
-RDEPENDS_perl-module-net-ping += "perl-module-constant "
-RDEPENDS_perl-module-net-ping += "perl-module-fcntl "
-RDEPENDS_perl-module-net-ping += "perl-module-filehandle "
-RDEPENDS_perl-module-net-ping += "perl-module-posix "
-RDEPENDS_perl-module-net-ping += "perl-module-strict "
-RDEPENDS_perl-module-net-pop3 += "perl-module-carp "
-RDEPENDS_perl-module-net-pop3 += "perl-module-io-socket "
-RDEPENDS_perl-module-net-pop3 += "perl-module-net-cmd "
-RDEPENDS_perl-module-net-pop3 += "perl-module-net-config "
-RDEPENDS_perl-module-net-pop3 += "perl-module-strict "
-RDEPENDS_perl-module-net-pop3 += "perl-module-vars "
-RDEPENDS_perl-module-net-protoent += "perl-module-class-struct "
-RDEPENDS_perl-module-net-protoent += "perl-module-strict "
-RDEPENDS_perl-module-net-protoent += "perl-module-vars "
-RDEPENDS_perl-module-net-servent += "perl-module-class-struct "
-RDEPENDS_perl-module-net-servent += "perl-module-strict "
-RDEPENDS_perl-module-net-servent += "perl-module-vars "
-RDEPENDS_perl-module-net-smtp += "perl-module-carp "
-RDEPENDS_perl-module-net-smtp += "perl-module-io-socket "
-RDEPENDS_perl-module-net-smtp += "perl-module-net-cmd "
-RDEPENDS_perl-module-net-smtp += "perl-module-net-config "
-RDEPENDS_perl-module-net-smtp += "perl-module-socket "
-RDEPENDS_perl-module-net-smtp += "perl-module-strict "
-RDEPENDS_perl-module-net-smtp += "perl-module-vars "
-RDEPENDS_perl-module-net-time += "perl-module-exporter "
-RDEPENDS_perl-module-net-time += "perl-module-carp "
-RDEPENDS_perl-module-net-time += "perl-module-io-select "
-RDEPENDS_perl-module-net-time += "perl-module-io-socket "
-RDEPENDS_perl-module-net-time += "perl-module-net-config "
-RDEPENDS_perl-module-net-time += "perl-module-strict "
-RDEPENDS_perl-module-net-time += "perl-module-vars "
-RDEPENDS_perl-module-next += "perl-module-carp "
-RDEPENDS_perl-module-next += "perl-module-strict "
-RDEPENDS_perl-module-opcode += "perl-module-carp "
-RDEPENDS_perl-module-opcode += "perl-module-exporter "
-RDEPENDS_perl-module-opcode += "perl-module-strict "
-RDEPENDS_perl-module-opcode += "perl-module-subs "
-RDEPENDS_perl-module-opcode += "perl-module-xsloader "
-RDEPENDS_perl-module-open += "perl-module-carp "
-RDEPENDS_perl-module-open += "perl-module-warnings "
-RDEPENDS_perl-module-ops += "perl-module-opcode "
-RDEPENDS_perl-module-o += "perl-module-b "
-RDEPENDS_perl-module-o += "perl-module-carp "
-RDEPENDS_perl-module-overload += "perl-module-warnings-register "
-RDEPENDS_perl-module-perlio-encoding += "perl-module-strict "
-RDEPENDS_perl-module-perlio-encoding += "perl-module-xsloader "
-RDEPENDS_perl-module-perlio-scalar += "perl-module-xsloader "
-RDEPENDS_perl-module-perlio-via-quotedprint += "perl-module-strict "
-RDEPENDS_perl-module-perlio-via += "perl-module-xsloader "
-RDEPENDS_perl-module-pod-checker += "perl-module-carp "
-RDEPENDS_perl-module-pod-checker += "perl-module-exporter "
-RDEPENDS_perl-module-pod-checker += "perl-module-pod-parser "
-RDEPENDS_perl-module-pod-checker += "perl-module-strict "
-RDEPENDS_perl-module-pod-checker += "perl-module-vars "
-RDEPENDS_perl-module-pod-find += "perl-module-carp "
-RDEPENDS_perl-module-pod-find += "perl-module-cwd "
-RDEPENDS_perl-module-pod-find += "perl-module-exporter "
-RDEPENDS_perl-module-pod-find += "perl-module-file-find "
-RDEPENDS_perl-module-pod-find += "perl-module-file-spec "
-RDEPENDS_perl-module-pod-find += "perl-module-strict "
-RDEPENDS_perl-module-pod-find += "perl-module-vars "
-RDEPENDS_perl-module-pod-functions += "perl-module-exporter "
-RDEPENDS_perl-module-pod-functions += "perl-module-strict "
-RDEPENDS_perl-module-pod-html += "perl-module-exporter "
-RDEPENDS_perl-module-pod-html += "perl-module-carp "
-RDEPENDS_perl-module-pod-html += "perl-module-config "
-RDEPENDS_perl-module-pod-html += "perl-module-cwd "
-RDEPENDS_perl-module-pod-html += "perl-module-file-spec "
-RDEPENDS_perl-module-pod-html += "perl-module-file-spec-unix "
-RDEPENDS_perl-module-pod-html += "perl-module-getopt-long "
-RDEPENDS_perl-module-pod-html += "perl-module-strict "
-RDEPENDS_perl-module-pod-html += "perl-module-vars "
-RDEPENDS_perl-module-pod-inputobjects += "perl-module-strict "
-RDEPENDS_perl-module-pod-inputobjects += "perl-module-vars "
-RDEPENDS_perl-module-pod-latex += "perl-module-pod-parseutils "
-RDEPENDS_perl-module-pod-latex += "perl-module-base "
-RDEPENDS_perl-module-pod-latex += "perl-module-carp "
-RDEPENDS_perl-module-pod-latex += "perl-module-strict "
-RDEPENDS_perl-module-pod-latex += "perl-module-vars "
-RDEPENDS_perl-module-pod-man += "perl-module-carp "
-RDEPENDS_perl-module-pod-man += "perl-module-pod-parselink "
-RDEPENDS_perl-module-pod-man += "perl-module-pod-parser "
-RDEPENDS_perl-module-pod-man += "perl-module-strict "
-RDEPENDS_perl-module-pod-man += "perl-module-subs "
-RDEPENDS_perl-module-pod-man += "perl-module-vars "
-RDEPENDS_perl-module-pod-parselink += "perl-module-exporter "
-RDEPENDS_perl-module-pod-parselink += "perl-module-strict "
-RDEPENDS_perl-module-pod-parselink += "perl-module-vars "
-RDEPENDS_perl-module-pod-parser += "perl-module-carp "
-RDEPENDS_perl-module-pod-parser += "perl-module-exporter "
-RDEPENDS_perl-module-pod-parser += "perl-module-pod-inputobjects "
-RDEPENDS_perl-module-pod-parser += "perl-module-strict "
-RDEPENDS_perl-module-pod-parser += "perl-module-vars "
-RDEPENDS_perl-module-pod-parseutils += "perl-module-carp "
-RDEPENDS_perl-module-pod-parseutils += "perl-module-vars "
-RDEPENDS_perl-module-pod-perldoc-baseto += "perl-module-strict "
-RDEPENDS_perl-module-pod-perldoc-baseto += "perl-module-warnings "
-RDEPENDS_perl-module-pod-perldoc-getoptsoo += "perl-module-strict "
-RDEPENDS_perl-module-pod-perldoc-tochecker += "perl-module-strict "
-RDEPENDS_perl-module-pod-perldoc-tochecker += "perl-module-warnings "
-RDEPENDS_perl-module-pod-perldoc-tochecker += "perl-module-vars "
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-base "
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-file-spec-functions "
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-strict "
-RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-warnings "
-RDEPENDS_perl-module-pod-perldoc-tonroff += "perl-module-base "
-RDEPENDS_perl-module-pod-perldoc-tonroff += "perl-module-pod-man "
-RDEPENDS_perl-module-pod-perldoc-tonroff += "perl-module-strict "
-RDEPENDS_perl-module-pod-perldoc-tonroff += "perl-module-warnings "
-RDEPENDS_perl-module-pod-perldoc-topod += "perl-module-base "
-RDEPENDS_perl-module-pod-perldoc-topod += "perl-module-strict "
-RDEPENDS_perl-module-pod-perldoc-topod += "perl-module-warnings "
-RDEPENDS_perl-module-pod-perldoc-tortf += "perl-module-base "
-RDEPENDS_perl-module-pod-perldoc-tortf += "perl-module-strict "
-RDEPENDS_perl-module-pod-perldoc-tortf += "perl-module-warnings "
-RDEPENDS_perl-module-pod-perldoc-tortf += "perl-module-vars "
-RDEPENDS_perl-module-pod-perldoc-totext += "perl-module-base "
-RDEPENDS_perl-module-pod-perldoc-totext += "perl-module-pod-text "
-RDEPENDS_perl-module-pod-perldoc-totext += "perl-module-strict "
-RDEPENDS_perl-module-pod-perldoc-totext += "perl-module-warnings "
-RDEPENDS_perl-module-pod-perldoc-totk += "perl-module-base "
-RDEPENDS_perl-module-pod-perldoc-totk += "perl-module-file-spec-functions "
-RDEPENDS_perl-module-pod-perldoc-totk += "perl-module-pod-perldoc "
-RDEPENDS_perl-module-pod-perldoc-totk += "perl-module-strict "
-RDEPENDS_perl-module-pod-perldoc-totk += "perl-module-warnings "
-RDEPENDS_perl-module-pod-perldoc-toxml += "perl-module-base "
-RDEPENDS_perl-module-pod-perldoc-toxml += "perl-module-strict "
-RDEPENDS_perl-module-pod-perldoc-toxml += "perl-module-warnings "
-RDEPENDS_perl-module-pod-perldoc-toxml += "perl-module-vars "
-RDEPENDS_perl-module-pod-perldoc += "perl-module-config "
-RDEPENDS_perl-module-pod-perldoc += "perl-module-file-spec-functions "
-RDEPENDS_perl-module-pod-perldoc += "perl-module-strict "
-RDEPENDS_perl-module-pod-perldoc += "perl-module-warnings "
-RDEPENDS_perl-module-pod-plainer += "perl-module-pod-parser "
-RDEPENDS_perl-module-pod-plainer += "perl-module-strict "
-RDEPENDS_perl-module-pod-plaintext += "perl-module-carp "
-RDEPENDS_perl-module-pod-plaintext += "perl-module-pod-select "
-RDEPENDS_perl-module-pod-plaintext += "perl-module-strict "
-RDEPENDS_perl-module-pod-plaintext += "perl-module-vars "
-RDEPENDS_perl-module-pod-select += "perl-module-carp "
-RDEPENDS_perl-module-pod-select += "perl-module-pod-parser "
-RDEPENDS_perl-module-pod-select += "perl-module-strict "
-RDEPENDS_perl-module-pod-select += "perl-module-vars "
-RDEPENDS_perl-module-pod-text-color += "perl-module-pod-text "
-RDEPENDS_perl-module-pod-text-color += "perl-module-strict "
-RDEPENDS_perl-module-pod-text-color += "perl-module-term-ansicolor "
-RDEPENDS_perl-module-pod-text-color += "perl-module-vars "
-RDEPENDS_perl-module-pod-text-overstrike += "perl-module-pod-text "
-RDEPENDS_perl-module-pod-text-overstrike += "perl-module-strict "
-RDEPENDS_perl-module-pod-text-overstrike += "perl-module-vars "
-RDEPENDS_perl-module-pod-text-termcap += "perl-module-pod-text "
-RDEPENDS_perl-module-pod-text-termcap += "perl-module-posix "
-RDEPENDS_perl-module-pod-text-termcap += "perl-module-strict "
-RDEPENDS_perl-module-pod-text-termcap += "perl-module-term-cap "
-RDEPENDS_perl-module-pod-text-termcap += "perl-module-vars "
-RDEPENDS_perl-module-pod-text += "perl-module-carp "
-RDEPENDS_perl-module-pod-text += "perl-module-exporter "
-RDEPENDS_perl-module-pod-text += "perl-module-pod-parselink "
-RDEPENDS_perl-module-pod-text += "perl-module-pod-select "
-RDEPENDS_perl-module-pod-text += "perl-module-strict "
-RDEPENDS_perl-module-pod-text += "perl-module-vars "
-RDEPENDS_perl-module-pod-usage += "perl-module-carp "
-RDEPENDS_perl-module-pod-usage += "perl-module-config "
-RDEPENDS_perl-module-pod-usage += "perl-module-exporter "
-RDEPENDS_perl-module-pod-usage += "perl-module-file-spec "
-RDEPENDS_perl-module-pod-usage += "perl-module-strict "
-RDEPENDS_perl-module-pod-usage += "perl-module-vars "
-RDEPENDS_perl-module-posix += "perl-module-exporter "
-RDEPENDS_perl-module-posix += "perl-module-autoloader "
-RDEPENDS_perl-module-posix += "perl-module-autoloader "
-RDEPENDS_perl-module-posix += "perl-module-xsloader "
-RDEPENDS_perl-module-safe += "perl-module-carp "
-RDEPENDS_perl-module-safe += "perl-module-carp-heavy "
-RDEPENDS_perl-module-safe += "perl-module-strict "
-RDEPENDS_perl-module-scalar-util += "perl-module-exporter "
-RDEPENDS_perl-module-sdbm-file += "perl-module-tie-hash "
-RDEPENDS_perl-module-sdbm-file += "perl-module-strict "
-RDEPENDS_perl-module-sdbm-file += "perl-module-warnings "
-RDEPENDS_perl-module-sdbm-file += "perl-module-xsloader "
-RDEPENDS_perl-module-search-dict += "perl-module-exporter "
-RDEPENDS_perl-module-search-dict += "perl-module-strict "
-RDEPENDS_perl-module-selectsaver += "perl-module-carp "
-RDEPENDS_perl-module-selectsaver += "perl-module-symbol "
-RDEPENDS_perl-module-selfloader += "perl-module-exporter "
-RDEPENDS_perl-module-shell += "perl-module-file-spec-functions "
-RDEPENDS_perl-module-shell += "perl-module-strict "
-RDEPENDS_perl-module-shell += "perl-module-warnings "
-RDEPENDS_perl-module-sigtrap += "perl-module-carp "
-RDEPENDS_perl-module-socket += "perl-module-exporter "
-RDEPENDS_perl-module-socket += "perl-module-carp "
-RDEPENDS_perl-module-socket += "perl-module-warnings-register "
-RDEPENDS_perl-module-socket += "perl-module-xsloader "
-RDEPENDS_perl-module-sort += "perl-module-strict "
-RDEPENDS_perl-module-storable += "perl-module-carp "
-RDEPENDS_perl-module-storable += "perl-module-dynaloader "
-RDEPENDS_perl-module-storable += "perl-module-exporter "
-RDEPENDS_perl-module-storable += "perl-module-autoloader "
-RDEPENDS_perl-module-storable += "perl-module-vars "
-RDEPENDS_perl-module-switch += "perl-module-carp "
-RDEPENDS_perl-module-switch += "perl-module-filter-util-call "
-RDEPENDS_perl-module-switch += "perl-module-strict "
-RDEPENDS_perl-module-switch += "perl-module-text-balanced "
-RDEPENDS_perl-module-switch += "perl-module-vars "
-RDEPENDS_perl-module-symbol += "perl-module-exporter "
-RDEPENDS_perl-module-sys-hostname += "perl-module-autoloader "
-RDEPENDS_perl-module-sys-hostname += "perl-module-exporter "
-RDEPENDS_perl-module-sys-hostname += "perl-module-carp "
-RDEPENDS_perl-module-sys-hostname += "perl-module-strict "
-RDEPENDS_perl-module-sys-syslog += "perl-module-dynaloader "
-RDEPENDS_perl-module-sys-syslog += "perl-module-exporter "
-RDEPENDS_perl-module-sys-syslog += "perl-module-carp "
-RDEPENDS_perl-module-sys-syslog += "perl-module-socket "
-RDEPENDS_perl-module-sys-syslog += "perl-module-strict "
-RDEPENDS_perl-module-sys-syslog += "perl-module-sys-hostname "
-RDEPENDS_perl-module-term-ansicolor += "perl-module-exporter "
-RDEPENDS_perl-module-term-ansicolor += "perl-module-strict "
-RDEPENDS_perl-module-term-cap += "perl-module-strict "
-RDEPENDS_perl-module-term-cap += "perl-module-vars "
-RDEPENDS_perl-module-term-complete += "perl-module-exporter "
-RDEPENDS_perl-module-term-complete += "perl-module-strict "
-RDEPENDS_perl-module-term-readline += "perl-module-strict "
-RDEPENDS_perl-module-test-builder += "perl-module-strict "
-RDEPENDS_perl-module-test-builder += "perl-module-vars "
-RDEPENDS_perl-module-test-harness-assert += "perl-module-exporter "
-RDEPENDS_perl-module-test-harness-assert += "perl-module-strict "
-RDEPENDS_perl-module-test-harness-assert += "perl-module-vars "
-RDEPENDS_perl-module-test-harness-iterator += "perl-module-strict "
-RDEPENDS_perl-module-test-harness-iterator += "perl-module-vars "
-RDEPENDS_perl-module-test-harness-point += "perl-module-strict "
-RDEPENDS_perl-module-test-harness-point += "perl-module-vars "
-RDEPENDS_perl-module-test-harness-straps += "perl-module-config "
-RDEPENDS_perl-module-test-harness-straps += "perl-module-strict "
-RDEPENDS_perl-module-test-harness-straps += "perl-module-test-harness-assert "
-RDEPENDS_perl-module-test-harness-straps += "perl-module-test-harness-iterator "
-RDEPENDS_perl-module-test-harness-straps += "perl-module-test-harness-point "
-RDEPENDS_perl-module-test-harness-straps += "perl-module-vars "
-RDEPENDS_perl-module-test-harness += "perl-module-benchmark "
-RDEPENDS_perl-module-test-harness += "perl-module-config "
-RDEPENDS_perl-module-test-harness += "perl-module-exporter "
-RDEPENDS_perl-module-test-harness += "perl-module-strict "
-RDEPENDS_perl-module-test-harness += "perl-module-test-harness-assert "
-RDEPENDS_perl-module-test-harness += "perl-module-test-harness-straps "
-RDEPENDS_perl-module-test-more += "perl-module-exporter "
-RDEPENDS_perl-module-test-more += "perl-module-strict "
-RDEPENDS_perl-module-test-more += "perl-module-test-builder "
-RDEPENDS_perl-module-test-more += "perl-module-vars "
-RDEPENDS_perl-module-test-simple += "perl-module-strict "
-RDEPENDS_perl-module-test-simple += "perl-module-test-builder "
-RDEPENDS_perl-module-test-simple += "perl-module-vars "
-RDEPENDS_perl-module-test += "perl-module-exporter "
-RDEPENDS_perl-module-test += "perl-module-carp "
-RDEPENDS_perl-module-test += "perl-module-strict "
-RDEPENDS_perl-module-text-abbrev += "perl-module-exporter "
-RDEPENDS_perl-module-text-balanced += "perl-module-exporter "
-RDEPENDS_perl-module-text-balanced += "perl-module-overload "
-RDEPENDS_perl-module-text-balanced += "perl-module-selfloader "
-RDEPENDS_perl-module-text-balanced += "perl-module-strict "
-RDEPENDS_perl-module-text-balanced += "perl-module-vars "
-RDEPENDS_perl-module-text-parsewords += "perl-module-exporter "
-RDEPENDS_perl-module-text-parsewords += "perl-module-vars "
-RDEPENDS_perl-module-text-soundex += "perl-module-exporter "
-RDEPENDS_perl-module-text-tabs += "perl-module-exporter "
-RDEPENDS_perl-module-text-tabs += "perl-module-strict "
-RDEPENDS_perl-module-text-tabs += "perl-module-vars "
-RDEPENDS_perl-module-text-wrap += "perl-module-exporter "
-RDEPENDS_perl-module-text-wrap += "perl-module-strict "
-RDEPENDS_perl-module-text-wrap += "perl-module-text-tabs "
-RDEPENDS_perl-module-thread-queue += "perl-module-strict "
-RDEPENDS_perl-module-thread-queue += "perl-module-threads-shared "
-RDEPENDS_perl-module-thread-semaphore += "perl-module-threads-shared "
-RDEPENDS_perl-module-threads-shared += "perl-module-strict "
-RDEPENDS_perl-module-threads-shared += "perl-module-warnings "
-RDEPENDS_perl-module-threads += "perl-module-dynaloader "
-RDEPENDS_perl-module-threads += "perl-module-exporter "
-RDEPENDS_perl-module-threads += "perl-module-config "
-RDEPENDS_perl-module-threads += "perl-module-strict "
-RDEPENDS_perl-module-threads += "perl-module-warnings "
-RDEPENDS_perl-module-thread += "perl-module-exporter "
-RDEPENDS_perl-module-thread += "perl-module-strict "
-RDEPENDS_perl-module-thread += "perl-module-xsloader "
-RDEPENDS_perl-module-tie-array += "perl-module-carp "
-RDEPENDS_perl-module-tie-array += "perl-module-strict "
-RDEPENDS_perl-module-tie-array += "perl-module-vars "
-RDEPENDS_perl-module-tie-file += "perl-module-carp "
-RDEPENDS_perl-module-tie-file += "perl-module-fcntl "
-RDEPENDS_perl-module-tie-file += "perl-module-posix "
-RDEPENDS_perl-module-tie-file += "perl-module-strict "
-RDEPENDS_perl-module-tie-handle += "perl-module-carp "
-RDEPENDS_perl-module-tie-handle += "perl-module-warnings-register "
-RDEPENDS_perl-module-tie-hash += "perl-module-carp "
-RDEPENDS_perl-module-tie-hash += "perl-module-warnings-register "
-RDEPENDS_perl-module-tie-memoize += "perl-module-strict "
-RDEPENDS_perl-module-tie-memoize += "perl-module-tie-hash "
-RDEPENDS_perl-module-tie-refhash += "perl-module-strict "
-RDEPENDS_perl-module-tie-refhash += "perl-module-tie-hash "
-RDEPENDS_perl-module-tie-refhash += "perl-module-vars "
-RDEPENDS_perl-module-tie-scalar += "perl-module-carp "
-RDEPENDS_perl-module-tie-scalar += "perl-module-warnings-register "
-RDEPENDS_perl-module-tie-substrhash += "perl-module-carp "
-RDEPENDS_perl-module-time-gmtime += "perl-module-strict "
-RDEPENDS_perl-module-time-gmtime += "perl-module-time-tm "
-RDEPENDS_perl-module-time-gmtime += "perl-module-vars "
-RDEPENDS_perl-module-time-hires += "perl-module-dynaloader "
-RDEPENDS_perl-module-time-hires += "perl-module-exporter "
-RDEPENDS_perl-module-time-hires += "perl-module-strict "
-RDEPENDS_perl-module-time-hires += "perl-module-vars "
-RDEPENDS_perl-module-time-localtime += "perl-module-strict "
-RDEPENDS_perl-module-time-localtime += "perl-module-time-tm "
-RDEPENDS_perl-module-time-localtime += "perl-module-vars "
-RDEPENDS_perl-module-time-local += "perl-module-exporter "
-RDEPENDS_perl-module-time-local += "perl-module-carp "
-RDEPENDS_perl-module-time-local += "perl-module-config "
-RDEPENDS_perl-module-time-local += "perl-module-integer "
-RDEPENDS_perl-module-time-local += "perl-module-strict "
-RDEPENDS_perl-module-time-local += "perl-module-vars "
-RDEPENDS_perl-module-time-tm += "perl-module-class-struct "
-RDEPENDS_perl-module-time-tm += "perl-module-strict "
-RDEPENDS_perl-module-unicode-collate += "perl-module-carp "
-RDEPENDS_perl-module-unicode-collate += "perl-module-constant "
-RDEPENDS_perl-module-unicode-collate += "perl-module-file-spec "
-RDEPENDS_perl-module-unicode-collate += "perl-module-strict "
-RDEPENDS_perl-module-unicode-collate += "perl-module-warnings "
-RDEPENDS_perl-module-unicode-normalize += "perl-module-dynaloader "
-RDEPENDS_perl-module-unicode-normalize += "perl-module-exporter "
-RDEPENDS_perl-module-unicode-normalize += "perl-module-carp "
-RDEPENDS_perl-module-unicode-normalize += "perl-module-constant "
-RDEPENDS_perl-module-unicode-normalize += "perl-module-strict "
-RDEPENDS_perl-module-unicode-normalize += "perl-module-warnings "
-RDEPENDS_perl-module-unicode-ucd += "perl-module-exporter "
-RDEPENDS_perl-module-unicode-ucd += "perl-module-carp "
-RDEPENDS_perl-module-unicode-ucd += "perl-module-storable "
-RDEPENDS_perl-module-unicode-ucd += "perl-module-strict "
-RDEPENDS_perl-module-unicode-ucd += "perl-module-warnings "
-RDEPENDS_perl-module-universal += "perl-module-exporter "
-RDEPENDS_perl-module-user-grent += "perl-module-class-struct "
-RDEPENDS_perl-module-user-grent += "perl-module-strict "
-RDEPENDS_perl-module-user-grent += "perl-module-vars "
-RDEPENDS_perl-module-user-pwent += "perl-module-carp "
-RDEPENDS_perl-module-user-pwent += "perl-module-class-struct "
-RDEPENDS_perl-module-user-pwent += "perl-module-config "
-RDEPENDS_perl-module-user-pwent += "perl-module-strict "
-RDEPENDS_perl-module-user-pwent += "perl-module-warnings "
-RDEPENDS_perl-module-user-pwent += "perl-module-vars "
-RDEPENDS_perl-module-warnings-register += "perl-module-warnings "
-RDEPENDS_perl-module-warnings += "perl-module-carp "
-RDEPENDS_perl-module-vars += "perl-module-strict "
-RDEPENDS_perl-module-vars += "perl-module-warnings-register "
-RDEPENDS_perl-module-xs-apitest += "perl-module-base "
-RDEPENDS_perl-module-xs-apitest += "perl-module-carp "
-RDEPENDS_perl-module-xs-apitest += "perl-module-strict "
-RDEPENDS_perl-module-xs-apitest += "perl-module-warnings "
-RDEPENDS_perl-module-xs-typemap += "perl-module-base "
-RDEPENDS_perl-module-xs-typemap += "perl-module-vars "
diff --git a/recipes/perl/perl.inc b/recipes/perl/perl.inc
deleted file mode 100644
index 15ae55cf17..0000000000
--- a/recipes/perl/perl.inc
+++ /dev/null
@@ -1,63 +0,0 @@
-DESCRIPTION = "Perl is a popular scripting language."
-HOMEPAGE = "http://www.perl.org/"
-LICENSE = "Artistic|GPL"
-SECTION = "devel"
-PRIORITY = "optional"
-DEPENDS = "virtual/db perl-native"
-
-SRC_URI = "ftp://ftp.funet.fi/pub/CPAN/src/perl-${PV}.tar.gz \
- file://Makefile.patch;patch=1 \
- file://config.sh-arm-linux.patch;patch=1 \
- file://libperl-5.8.3-create-libperl-soname.patch;patch=1;pnum=0 \
- file://Makefile.SH.patch"
-
-HOSTPERL="${STAGING_BINDIR_NATIVE}/perl${PV}"
-
-do_compile() {
- sed -i -e 's|/usr/include|${STAGING_INCDIR}|g' ext/Errno/Errno_pm.PL
- cd Cross
- # You must use gcc to link on sh
- OPTIONS=""
- if test ${TARGET_ARCH} = "sh3" -o ${TARGET_ARCH} = "sh4"; then
- OPTIONS="LD=${TARGET_SYS}-gcc"
- fi
- # You must use gcc to link on powerpc also
- if test ${TARGET_ARCH} = "powerpc" ; then
- OPTIONS="LD=${TARGET_SYS}-gcc"
- fi
-
- oe_runmake perl $OPTIONS
-}
-
-do_install() {
- oe_runmake install
- mv ${D}/${libdir}/perl5/${PV}/${TARGET_ARCH}-${TARGET_OS}/CORE/libperl.so ${D}/${libdir}/libperl.so.${PV}
- ( cd ${D}/usr/bin/; rm -f perl; ln -s perl${PV} perl )
-}
-
-do_stage() {
- install -d ${STAGING_LIBDIR}/perl/
- install config.sh ${STAGING_LIBDIR}/perl/
-}
-
-PACKAGES_DYNAMIC = "perl-module-*"
-
-python populate_packages_prepend () {
- libdir = bb.data.expand('${libdir}/perl5/${PV}', d)
- archlibdir = bb.data.expand('${libdir}/perl5/${PV}/${TARGET_ARCH}-${TARGET_OS}', d)
- do_split_packages(d, archlibdir, 'auto/(.*)(?!\.debug)/', 'perl-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True)
- do_split_packages(d, archlibdir, '(.*)\.(pm|pl)', 'perl-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True)
- do_split_packages(d, libdir, '(.*)\.(pm|pl)', 'perl-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True)
-}
-
-PACKAGES = "perl-dbg perl perl-misc perl-lib perl-dev perl-pod"
-FILES_${PN} = "/usr/bin/perl /usr/bin/perl${PV}"
-FILES_${PN}-lib = "/usr/lib/libperl.so*"
-FILES_${PN}-dev = "/usr/lib/perl5/${PV}/${TARGET_ARCH}-${TARGET_OS}/CORE/"
-FILES_${PN}-pod = "/usr/lib/perl5/${PV}/pod"
-FILES_perl-misc = "/usr/bin/*"
-FILES_${PN}-dbg += " \
- ${libdir}/perl5/${PV}/${TARGET_ARCH}-${TARGET_OS}/auto/*/.debug \
- ${libdir}/perl5/${PV}/${TARGET_ARCH}-${TARGET_OS}/auto/*/*/.debug \
- ${libdir}/perl5/${PV}/${TARGET_ARCH}-${TARGET_OS}/auto/*/*/*/.debug"
-
diff --git a/recipes/perl/perl_5.8.4.bb b/recipes/perl/perl_5.8.4.bb
deleted file mode 100644
index 881a2acee5..0000000000
--- a/recipes/perl/perl_5.8.4.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-require perl.inc
-
-PR = "r6"
-
-SRC_URI += "file://uclibc.patch;patch=1 \
- file://config.sh-mipsel-linux \
- file://config.sh-i686-linux"
-
-do_configure() {
- ln -sf ${HOSTPERL} ${STAGING_BINDIR_NATIVE}/hostperl
- cp ${HOSTPERL} hostperl
- cd Cross
- rm -f Makefile.SH.patch
- cp ${WORKDIR}/Makefile.SH.patch .
- cp ${WORKDIR}/config.sh-mipsel-linux .
- cp ${WORKDIR}/config.sh-i686-linux .
- cat config.sh-arm-linux | sed -e "s,arm-linux,armeb-linux,g" > config.sh-armeb-linux
- for i in config.sh-*-linux; do
- a="`echo $i|sed -e 's,^config.sh-,,; s,-linux$,,'`"
- newfile="`echo $i|sed -e 's,-linux$,-linux-uclibc,g'`"
- cat $i | sed -e "s,${a}-linux,${a}-linux-uclibc,g; \
- s,d_sockatmark='define',d_sockatmark='undef',g;" > $newfile
- done
- sed -i -e 's,./install_me_here,${D},g' config.sh-${TARGET_ARCH}-${TARGET_OS}
- rm -f config
- echo "ARCH = ${TARGET_ARCH}" > config
- echo "OS = ${TARGET_OS}" >> config
- oe_runmake patch
-}
diff --git a/recipes/perl/perl_5.8.7.bb b/recipes/perl/perl_5.8.7.bb
deleted file mode 100644
index 5891670394..0000000000
--- a/recipes/perl/perl_5.8.7.bb
+++ /dev/null
@@ -1,98 +0,0 @@
-
-# We need gnugrep (for -I)
-DEPENDS_append += " grep-native"
-
-require perl.inc
-
-SRC_URI += "file://config.sh-armeb-linux \
- file://config.sh-arm-linux \
- file://config.sh-powerpc-linux \
- file://config.sh-mipsel-linux \
- file://config.sh-i386-linux \
- file://config.sh-i486-linux \
- file://config.sh-i586-linux \
- file://config.sh-i686-linux \
- file://config.sh-x86_64-linux \
- file://config.sh-sh3-linux \
- file://config.sh-sh4-linux"
-
-# Use gcc to link and use PIC mode for compiling shared libs
-GCCLINK_SRC = "file://override-generate-sh.patch;patch=1 \
- file://makefile-usegcc-to-link.patch;patch=1"
-
-SRC_URI_append_sh4 += " ${GCCLINK_SRC}"
-SRC_URI_append_sh3 += " ${GCCLINK_SRC}"
-SRC_URI_append_powerpc += " ${GCCLINK_SRC}"
-
-PARALLEL_MAKE = ""
-
-PR = "r23"
-
-do_configure() {
- ln -sf ${HOSTPERL} ${STAGING_BINDIR_NATIVE}/hostperl
- cp ${HOSTPERL} hostperl
- cd Cross
- rm -f Makefile.SH.patch
- cp ${WORKDIR}/Makefile.SH.patch .
- cp ${WORKDIR}/config.sh-mipsel-linux .
- cp ${WORKDIR}/config.sh-i386-linux .
- cp ${WORKDIR}/config.sh-i486-linux .
- cp ${WORKDIR}/config.sh-i586-linux .
- cp ${WORKDIR}/config.sh-i686-linux .
- cp ${WORKDIR}/config.sh-x86_64-linux .
- cp ${WORKDIR}/config.sh-armeb-linux .
- cp ${WORKDIR}/config.sh-powerpc-linux .
- cp ${WORKDIR}/config.sh-sh3-linux .
- cp ${WORKDIR}/config.sh-sh4-linux .
- #perl insists on an extra config.sh for arm EABI
- cp config.sh-arm-linux config.sh-arm-linux-gnueabi
- cp config.sh-armeb-linux config.sh-armeb-linux-gnueabi
- # nslu2 LE uclibc builds do not work with the default config.sh
- if test "${MACHINE}" = nslu2
- then
- rm -f ./config.sh-arm-linux
- cp ${WORKDIR}/config.sh-arm-linux .
- fi
- for i in config.sh-*-linux; do
- a="`echo $i|sed -e 's,^config.sh-,,; s,-linux$,,'`"
- newfile="`echo $i|sed -e 's,-linux$,-linux-uclibc,g'`"
- cat $i | sed -e "s,${a}-linux,${a}-linux-uclibc,g; \
- s,d_sockatmark='define',d_sockatmark='undef',g;" > $newfile
- done
- sed -i -e 's,./install_me_here,${D},g' config.sh-${TARGET_ARCH}-${TARGET_OS}
- sed -i -e "s%/usr/include/%${STAGING_INCDIR}/%g" config.sh-${TARGET_ARCH}-${TARGET_OS}
-
- #These are strewn all over the source tree
- for foo in `grep -I -m1 \/usr\/include\/.*\\.h ${WORKDIR}/* -r | cut -f 1 -d ":"` ; do
- echo Fixing: $foo
- sed -e "s%/usr/include/%${STAGING_INCDIR}/%g" -i $foo
- done
- rm -f config
- echo "ARCH = ${TARGET_ARCH}" > config
- echo "OS = ${TARGET_OS}" >> config
- oe_runmake patch
-}
-
-do_install_append() {
- ln -s libperl.so.${PV} ${D}/${libdir}/libperl.so.5
- sed -i -e "s,${D},,g" ${D}/${libdir}/perl5/${PV}/${TARGET_ARCH}-${TARGET_OS}/Config_heavy.pl
-}
-
-# Create a perl-modules package recommending all the other perl
-# packages (actually the non modules packages and not created too)
-ALLOW_EMPTY_perl-modules = "1"
-PACKAGES_append = " perl-modules"
-RRECOMMENDS_perl-modules = "${PACKAGES}"
-RPROVIDES_perl-lib = "perl-lib"
-
-
-require perl-rdepends_${PV}.inc
-
-# To create/update the perl-rdepends_${PV}.inc use this piece of ugly script (modified for your arch/paths etc):
-# daka@DaKa2:/home/slug/slugos/tmp/work/perl-5.8.7-r14/install$ egrep -r "use|require" * | grep ";$" | egrep ".pm:use |.pm:require " | grep -v v5.6.0 | grep -v 5.00 | grep -v \$module | sed -e "s, \+, ,g" | cut -f1,2 -d" " | sed -e "s,;, ,g" | sed -e "s,(), ,g" | sed -e "s,::,-,g" | sort | uniq | tr [:upper:] [:lower:] | sed -e "s,/[^ ]\+ , += \"perl-module-,g" | sed -e "s, \?$, \",g" | sed -e "s,_,-,g" | sed -e "s,^,RDEPENDS_,g" | sed -e "s,armeb-linux,\$\{TARGET_ARCH\}-\$\{TARGET_OS\},g" | egrep -v "perl-module-5|perl-module-tk|perl-module-mac-internetconfig|perl-module-ndbm-file|perl-module-html-treebuilder|perl-module-lwp-simple|perl-module-vms-filespec|perl-module-fcgi|perl-module-vms-stdio|perl-module-mac-buildtools" > /home/slug/openembedded/packages/perl/perl-rdepends_5.8.7.inc
-
-# Some additional dependencies that the above doesn't manage to figure out
-DEPENDS_perl-module-math-bigint += "perl-module-math-bigint-calc "
-DEPENDS_perl-module-math-bigint-calc += "perl-module-integer "
-
-require perl-rprovides.inc
diff --git a/recipes/perl/perl_5.8.8.bb b/recipes/perl/perl_5.8.8.bb
index edd3a83bfb..2019ea6e03 100644
--- a/recipes/perl/perl_5.8.8.bb
+++ b/recipes/perl/perl_5.8.8.bb
@@ -10,7 +10,10 @@ PR = "r31"
# Major part of version
PVM = "5.8"
-SRC_URI = "ftp://ftp.funet.fi/pub/CPAN/src/perl-${PV}.tar.gz \
+SRC_URI[perl588targz.md5sum] = "b8c118d4360846829beb30b02a6b91a7"
+SRC_URI[perl588targz.sha256sum] = "e15d499321e003d12ed183601e37ee7ba5f64b278d1de30149ce01bd4a3f234d"
+
+SRC_URI = "http://ftp.funet.fi/pub/CPAN/src/5.0/perl-5.8.8.tar.gz;name=perl588targz \
file://Makefile.patch;patch=1 \
file://Makefile.SH.patch;patch=1 \
file://makedepend-dash.patch;patch=1 \
@@ -38,6 +41,8 @@ SRC_URI = "ftp://ftp.funet.fi/pub/CPAN/src/perl-${PV}.tar.gz \
file://config.sh-64-le \
file://config.sh-64-be"
+inherit siteinfo
+
# Where to find the native perl
HOSTPERL = "${STAGING_BINDIR_NATIVE}/perl${PV}"
diff --git a/recipes/php/php-5.2.13/CVE-2010-0397.patch b/recipes/php/php-5.2.13/CVE-2010-0397.patch
new file mode 100644
index 0000000000..8f70d40a46
--- /dev/null
+++ b/recipes/php/php-5.2.13/CVE-2010-0397.patch
@@ -0,0 +1,58 @@
+Description: Fix a null pointer dereference when processing invalid
+ XML-RPC requests.
+Origin: vendor
+Forwarded: http://bugs.php.net/51288
+Last-Update: 2010-03-12
+
+Index: php/ext/xmlrpc/tests/bug51288.phpt
+===================================================================
+--- /dev/null
++++ php/ext/xmlrpc/tests/bug51288.phpt
+@@ -0,0 +1,14 @@
++--TEST--
++Bug #51288 (CVE-2010-0397, NULL pointer deref when no <methodName> in request)
++--FILE--
++<?php
++$method = NULL;
++$req = '<?xml version="1.0"?><methodCall></methodCall>';
++var_dump(xmlrpc_decode_request($req, $method));
++var_dump($method);
++echo "Done\n";
++?>
++--EXPECT--
++NULL
++NULL
++Done
+Index: php/ext/xmlrpc/xmlrpc-epi-php.c
+===================================================================
+--- php.orig/ext/xmlrpc/xmlrpc-epi-php.c
++++ php/ext/xmlrpc/xmlrpc-epi-php.c
+@@ -701,6 +701,7 @@ zval* decode_request_worker (zval* xml_i
+ zval* retval = NULL;
+ XMLRPC_REQUEST response;
+ STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS opts = {{0}};
++ const char *method_name;
+ opts.xml_elem_opts.encoding = encoding_in ? utf8_get_encoding_id_from_string(Z_STRVAL_P(encoding_in)) : ENCODING_DEFAULT;
+
+ /* generate XMLRPC_REQUEST from raw xml */
+@@ -711,10 +712,16 @@ zval* decode_request_worker (zval* xml_i
+
+ if(XMLRPC_RequestGetRequestType(response) == xmlrpc_request_call) {
+ if(method_name_out) {
+- zval_dtor(method_name_out);
+- Z_TYPE_P(method_name_out) = IS_STRING;
+- Z_STRVAL_P(method_name_out) = estrdup(XMLRPC_RequestGetMethodName(response));
+- Z_STRLEN_P(method_name_out) = strlen(Z_STRVAL_P(method_name_out));
++ method_name = XMLRPC_RequestGetMethodName(response);
++ if (method_name) {
++ zval_dtor(method_name_out);
++ Z_TYPE_P(method_name_out) = IS_STRING;
++ Z_STRVAL_P(method_name_out) = estrdup(method_name);
++ Z_STRLEN_P(method_name_out) = strlen(Z_STRVAL_P(method_name_out));
++ } else if (retval) {
++ zval_ptr_dtor(&retval);
++ retval = NULL;
++ }
+ }
+ }
+
diff --git a/recipes/php/php-5.2.11/acinclude-xml2-config.patch b/recipes/php/php-5.2.13/acinclude-xml2-config.patch
index bf519d2934..bf519d2934 100644
--- a/recipes/php/php-5.2.11/acinclude-xml2-config.patch
+++ b/recipes/php/php-5.2.13/acinclude-xml2-config.patch
diff --git a/recipes/php/php-5.2.11/imap-fix-autofoo.patch b/recipes/php/php-5.2.13/imap-fix-autofoo.patch
index 3695b7bc42..3695b7bc42 100644
--- a/recipes/php/php-5.2.11/imap-fix-autofoo.patch
+++ b/recipes/php/php-5.2.13/imap-fix-autofoo.patch
diff --git a/recipes/php/php-5.2.11/pear-makefile.patch b/recipes/php/php-5.2.13/pear-makefile.patch
index 487f507a02..487f507a02 100644
--- a/recipes/php/php-5.2.11/pear-makefile.patch
+++ b/recipes/php/php-5.2.13/pear-makefile.patch
diff --git a/recipes/php/php-5.2.13/php-m4-divert.patch b/recipes/php/php-5.2.13/php-m4-divert.patch
new file mode 100644
index 0000000000..dfc7b643e2
--- /dev/null
+++ b/recipes/php/php-5.2.13/php-m4-divert.patch
@@ -0,0 +1,83 @@
+Patch taken from
+
+http://cvs.pld-linux.org/cgi-bin/cvsweb/packages/php/php-m4-divert.patch?rev=1.1
+
+diff -ur php-5.2.10.org/configure.in php-5.2.10/configure.in
+--- php-5.2.10.org/configure.in 2009-06-17 14:22:41.000000000 +0200
++++ php-5.2.10/configure.in 2009-08-18 12:16:25.317640253 +0200
+@@ -1,7 +1,7 @@
+ ## $Id: configure.in,v 1.579.2.52.2.139 2009/06/17 12:22:41 iliaa Exp $ -*- autoconf -*-
+ dnl ## Process this file with autoconf to produce a configure script.
+
+-divert(1)
++divert(1001)
+
+ dnl ## Diversion 1 is the autoconf + automake setup phase. We also
+ dnl ## set the PHP version, deal with platform-specific compile
+@@ -263,7 +263,7 @@
+ sinclude(TSRM/tsrm.m4)
+
+
+-divert(2)
++divert(1002)
+
+ dnl ## Diversion 2 is where we set PHP-specific options and come up
+ dnl ## with reasonable default values for them. We check for pthreads here
+@@ -302,7 +302,7 @@
+ PTHREADS_FLAGS
+ fi
+
+-divert(3)
++divert(1003)
+
+ dnl ## In diversion 3 we check for compile-time options to the PHP
+ dnl ## core and how to deal with different system dependencies.
+@@ -661,7 +661,7 @@
+ PHP_CRYPT_R_STYLE
+ fi
+
+-divert(4)
++divert(1004)
+
+ dnl ## In diversion 4 we check user-configurable general settings.
+
+@@ -902,7 +902,7 @@
+ AC_MSG_RESULT([using system default])
+ fi
+
+-divert(5)
++divert(1005)
+
+ dnl ## In diversion 5 we check which extensions should be compiled.
+ dnl ## All of these are normally in the extension directories.
+diff -ur php-5.2.10.org/ext/standard/config.m4 php-5.2.10/ext/standard/config.m4
+--- php-5.2.10.org/ext/standard/config.m4 2007-07-11 13:56:03.000000000 +0200
++++ php-5.2.10/ext/standard/config.m4 2009-08-18 12:16:25.317640253 +0200
+@@ -1,6 +1,6 @@
+ dnl $Id: config.m4,v 1.80.2.3.2.3 2007/07/11 11:56:03 jani Exp $ -*- autoconf -*-
+
+-divert(3)dnl
++divert(1003)dnl
+
+ dnl
+ dnl Check if flush should be called explicitly after buffered io
+@@ -205,7 +205,7 @@
+ AC_CHECK_FUNCS(getcwd getwd asinh acosh atanh log1p hypot glob strfmon nice fpclass isinf isnan)
+ AC_FUNC_FNMATCH
+
+-divert(5)dnl
++divert(1005)dnl
+
+ dnl
+ dnl Check for regex library type
+diff -ur php-5.2.10.org/scripts/phpize.m4 php-5.2.10/scripts/phpize.m4
+--- php-5.2.10.org/scripts/phpize.m4 2009-06-02 21:54:22.000000000 +0200
++++ php-5.2.10/scripts/phpize.m4 2009-08-18 12:16:25.317640253 +0200
+@@ -1,6 +1,6 @@
+ dnl This file becomes configure.in for self-contained extensions.
+
+-divert(1)
++divert(1001)
+
+ AC_PREREQ(2.13)
+ AC_INIT(config.m4)
diff --git a/recipes/php/php-5.2.6/php-m4-divert.patch b/recipes/php/php-5.2.6/php-m4-divert.patch
new file mode 100644
index 0000000000..dfc7b643e2
--- /dev/null
+++ b/recipes/php/php-5.2.6/php-m4-divert.patch
@@ -0,0 +1,83 @@
+Patch taken from
+
+http://cvs.pld-linux.org/cgi-bin/cvsweb/packages/php/php-m4-divert.patch?rev=1.1
+
+diff -ur php-5.2.10.org/configure.in php-5.2.10/configure.in
+--- php-5.2.10.org/configure.in 2009-06-17 14:22:41.000000000 +0200
++++ php-5.2.10/configure.in 2009-08-18 12:16:25.317640253 +0200
+@@ -1,7 +1,7 @@
+ ## $Id: configure.in,v 1.579.2.52.2.139 2009/06/17 12:22:41 iliaa Exp $ -*- autoconf -*-
+ dnl ## Process this file with autoconf to produce a configure script.
+
+-divert(1)
++divert(1001)
+
+ dnl ## Diversion 1 is the autoconf + automake setup phase. We also
+ dnl ## set the PHP version, deal with platform-specific compile
+@@ -263,7 +263,7 @@
+ sinclude(TSRM/tsrm.m4)
+
+
+-divert(2)
++divert(1002)
+
+ dnl ## Diversion 2 is where we set PHP-specific options and come up
+ dnl ## with reasonable default values for them. We check for pthreads here
+@@ -302,7 +302,7 @@
+ PTHREADS_FLAGS
+ fi
+
+-divert(3)
++divert(1003)
+
+ dnl ## In diversion 3 we check for compile-time options to the PHP
+ dnl ## core and how to deal with different system dependencies.
+@@ -661,7 +661,7 @@
+ PHP_CRYPT_R_STYLE
+ fi
+
+-divert(4)
++divert(1004)
+
+ dnl ## In diversion 4 we check user-configurable general settings.
+
+@@ -902,7 +902,7 @@
+ AC_MSG_RESULT([using system default])
+ fi
+
+-divert(5)
++divert(1005)
+
+ dnl ## In diversion 5 we check which extensions should be compiled.
+ dnl ## All of these are normally in the extension directories.
+diff -ur php-5.2.10.org/ext/standard/config.m4 php-5.2.10/ext/standard/config.m4
+--- php-5.2.10.org/ext/standard/config.m4 2007-07-11 13:56:03.000000000 +0200
++++ php-5.2.10/ext/standard/config.m4 2009-08-18 12:16:25.317640253 +0200
+@@ -1,6 +1,6 @@
+ dnl $Id: config.m4,v 1.80.2.3.2.3 2007/07/11 11:56:03 jani Exp $ -*- autoconf -*-
+
+-divert(3)dnl
++divert(1003)dnl
+
+ dnl
+ dnl Check if flush should be called explicitly after buffered io
+@@ -205,7 +205,7 @@
+ AC_CHECK_FUNCS(getcwd getwd asinh acosh atanh log1p hypot glob strfmon nice fpclass isinf isnan)
+ AC_FUNC_FNMATCH
+
+-divert(5)dnl
++divert(1005)dnl
+
+ dnl
+ dnl Check for regex library type
+diff -ur php-5.2.10.org/scripts/phpize.m4 php-5.2.10/scripts/phpize.m4
+--- php-5.2.10.org/scripts/phpize.m4 2009-06-02 21:54:22.000000000 +0200
++++ php-5.2.10/scripts/phpize.m4 2009-08-18 12:16:25.317640253 +0200
+@@ -1,6 +1,6 @@
+ dnl This file becomes configure.in for self-contained extensions.
+
+-divert(1)
++divert(1001)
+
+ AC_PREREQ(2.13)
+ AC_INIT(config.m4)
diff --git a/recipes/php/php-5.3.0/php-m4-divert.patch b/recipes/php/php-5.3.0/php-m4-divert.patch
new file mode 100644
index 0000000000..dfc7b643e2
--- /dev/null
+++ b/recipes/php/php-5.3.0/php-m4-divert.patch
@@ -0,0 +1,83 @@
+Patch taken from
+
+http://cvs.pld-linux.org/cgi-bin/cvsweb/packages/php/php-m4-divert.patch?rev=1.1
+
+diff -ur php-5.2.10.org/configure.in php-5.2.10/configure.in
+--- php-5.2.10.org/configure.in 2009-06-17 14:22:41.000000000 +0200
++++ php-5.2.10/configure.in 2009-08-18 12:16:25.317640253 +0200
+@@ -1,7 +1,7 @@
+ ## $Id: configure.in,v 1.579.2.52.2.139 2009/06/17 12:22:41 iliaa Exp $ -*- autoconf -*-
+ dnl ## Process this file with autoconf to produce a configure script.
+
+-divert(1)
++divert(1001)
+
+ dnl ## Diversion 1 is the autoconf + automake setup phase. We also
+ dnl ## set the PHP version, deal with platform-specific compile
+@@ -263,7 +263,7 @@
+ sinclude(TSRM/tsrm.m4)
+
+
+-divert(2)
++divert(1002)
+
+ dnl ## Diversion 2 is where we set PHP-specific options and come up
+ dnl ## with reasonable default values for them. We check for pthreads here
+@@ -302,7 +302,7 @@
+ PTHREADS_FLAGS
+ fi
+
+-divert(3)
++divert(1003)
+
+ dnl ## In diversion 3 we check for compile-time options to the PHP
+ dnl ## core and how to deal with different system dependencies.
+@@ -661,7 +661,7 @@
+ PHP_CRYPT_R_STYLE
+ fi
+
+-divert(4)
++divert(1004)
+
+ dnl ## In diversion 4 we check user-configurable general settings.
+
+@@ -902,7 +902,7 @@
+ AC_MSG_RESULT([using system default])
+ fi
+
+-divert(5)
++divert(1005)
+
+ dnl ## In diversion 5 we check which extensions should be compiled.
+ dnl ## All of these are normally in the extension directories.
+diff -ur php-5.2.10.org/ext/standard/config.m4 php-5.2.10/ext/standard/config.m4
+--- php-5.2.10.org/ext/standard/config.m4 2007-07-11 13:56:03.000000000 +0200
++++ php-5.2.10/ext/standard/config.m4 2009-08-18 12:16:25.317640253 +0200
+@@ -1,6 +1,6 @@
+ dnl $Id: config.m4,v 1.80.2.3.2.3 2007/07/11 11:56:03 jani Exp $ -*- autoconf -*-
+
+-divert(3)dnl
++divert(1003)dnl
+
+ dnl
+ dnl Check if flush should be called explicitly after buffered io
+@@ -205,7 +205,7 @@
+ AC_CHECK_FUNCS(getcwd getwd asinh acosh atanh log1p hypot glob strfmon nice fpclass isinf isnan)
+ AC_FUNC_FNMATCH
+
+-divert(5)dnl
++divert(1005)dnl
+
+ dnl
+ dnl Check for regex library type
+diff -ur php-5.2.10.org/scripts/phpize.m4 php-5.2.10/scripts/phpize.m4
+--- php-5.2.10.org/scripts/phpize.m4 2009-06-02 21:54:22.000000000 +0200
++++ php-5.2.10/scripts/phpize.m4 2009-08-18 12:16:25.317640253 +0200
+@@ -1,6 +1,6 @@
+ dnl This file becomes configure.in for self-contained extensions.
+
+-divert(1)
++divert(1001)
+
+ AC_PREREQ(2.13)
+ AC_INIT(config.m4)
diff --git a/recipes/php/php-5.3.2/CVE-2010-0397.patch b/recipes/php/php-5.3.2/CVE-2010-0397.patch
new file mode 100644
index 0000000000..0d9c23d049
--- /dev/null
+++ b/recipes/php/php-5.3.2/CVE-2010-0397.patch
@@ -0,0 +1,57 @@
+Description: Fix a null pointer dereference when processing invalid
+ XML-RPC requests.
+Origin: vendor
+Forwarded: http://bugs.php.net/51288
+Last-Update: 2010-03-12
+
+Index: php/ext/xmlrpc/tests/bug51288.phpt
+===================================================================
+--- /dev/null
++++ php/ext/xmlrpc/tests/bug51288.phpt
+@@ -0,0 +1,14 @@
++--TEST--
++Bug #51288 (CVE-2010-0397, NULL pointer deref when no <methodName> in request)
++--FILE--
++<?php
++$method = NULL;
++$req = '<?xml version="1.0"?><methodCall></methodCall>';
++var_dump(xmlrpc_decode_request($req, $method));
++var_dump($method);
++echo "Done\n";
++?>
++--EXPECT--
++NULL
++NULL
++Done
+Index: php/ext/xmlrpc/xmlrpc-epi-php.c
+===================================================================
+--- php.orig/ext/xmlrpc/xmlrpc-epi-php.c
++++ php/ext/xmlrpc/xmlrpc-epi-php.c
+@@ -778,6 +778,7 @@
+ zval* retval = NULL;
+ XMLRPC_REQUEST response;
+ STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS opts = {{0}};
++ const char *method_name;
+ opts.xml_elem_opts.encoding = encoding_in ? utf8_get_encoding_id_from_string(encoding_in) : ENCODING_DEFAULT;
+
+ /* generate XMLRPC_REQUEST from raw xml */
+@@ -788,10 +789,15 @@
+
+ if (XMLRPC_RequestGetRequestType(response) == xmlrpc_request_call) {
+ if (method_name_out) {
+- zval_dtor(method_name_out);
+- Z_TYPE_P(method_name_out) = IS_STRING;
+- Z_STRVAL_P(method_name_out) = estrdup(XMLRPC_RequestGetMethodName(response));
+- Z_STRLEN_P(method_name_out) = strlen(Z_STRVAL_P(method_name_out));
++ method_name = XMLRPC_RequestGetMethodName(response);
++ if (method_name) {
++ zval_dtor(method_name_out);
++ Z_TYPE_P(method_name_out) = IS_STRING;
++ Z_STRVAL_P(method_name_out) = estrdup(method_name);
++ Z_STRLEN_P(method_name_out) = strlen(Z_STRVAL_P(method_name_out));
++ } else {
++ retval = NULL;
++ }
+ }
+ }
+
diff --git a/recipes/php/php-5.3.2/acinclude-xml2-config.patch b/recipes/php/php-5.3.2/acinclude-xml2-config.patch
new file mode 100644
index 0000000000..bf519d2934
--- /dev/null
+++ b/recipes/php/php-5.3.2/acinclude-xml2-config.patch
@@ -0,0 +1,18 @@
+--- /orig-acinclude.m4 2007-02-20 15:03:25.000000000 +0200
++++ /acinclude.m4 2007-02-20 15:03:24.000000000 +0200
+@@ -2359,12 +2359,9 @@
+ AC_DEFUN([PHP_SETUP_LIBXML], [
+ AC_CACHE_CHECK([for xml2-config path], ac_cv_php_xml2_config_path,
+ [
+- for i in $PHP_LIBXML_DIR /usr/local /usr; do
+- if test -x "$i/bin/xml2-config"; then
+- ac_cv_php_xml2_config_path="$i/bin/xml2-config"
+- break
+- fi
+- done
++
++ ac_cv_php_xml2_config_path="$PHP_LIBXML_DIR/xml2-config"
++
+ ])
+
+ if test -x "$ac_cv_php_xml2_config_path"; then
diff --git a/recipes/php/php-5.3.2/pear-makefile.patch b/recipes/php/php-5.3.2/pear-makefile.patch
new file mode 100644
index 0000000000..26de98a48f
--- /dev/null
+++ b/recipes/php/php-5.3.2/pear-makefile.patch
@@ -0,0 +1,11 @@
+--- /pear/orig-Makefile.frag 2007-03-16 12:18:33.000000000 +0200
++++ /pear/Makefile.frag 2007-03-16 12:35:48.000000000 +0200
+@@ -6,7 +6,7 @@
+ PEAR_INSTALL_FLAGS = -n -dshort_open_tag=0 -dsafe_mode=0 -dopen_basedir= -derror_reporting=E_ALL -dmemory_limit=-1 -ddetect_unicode=0
+
+ install-pear-installer: $(SAPI_CLI_PATH)
+- @$(top_builddir)/sapi/cli/php $(PEAR_INSTALL_FLAGS) $(builddir)/install-pear-nozlib.phar -d "$(peardir)" -b "$(bindir)"
++ @$(PHP_NATIVE_DIR)/php $(PEAR_INSTALL_FLAGS) $(builddir)/install-pear-nozlib.phar -d "$(peardir)" -b "$(bindir)"
+
+ install-pear:
+ @echo "Installing PEAR environment: $(INSTALL_ROOT)$(peardir)/"
diff --git a/recipes/php/php-5.3.2/php-m4-divert.patch b/recipes/php/php-5.3.2/php-m4-divert.patch
new file mode 100644
index 0000000000..dfc7b643e2
--- /dev/null
+++ b/recipes/php/php-5.3.2/php-m4-divert.patch
@@ -0,0 +1,83 @@
+Patch taken from
+
+http://cvs.pld-linux.org/cgi-bin/cvsweb/packages/php/php-m4-divert.patch?rev=1.1
+
+diff -ur php-5.2.10.org/configure.in php-5.2.10/configure.in
+--- php-5.2.10.org/configure.in 2009-06-17 14:22:41.000000000 +0200
++++ php-5.2.10/configure.in 2009-08-18 12:16:25.317640253 +0200
+@@ -1,7 +1,7 @@
+ ## $Id: configure.in,v 1.579.2.52.2.139 2009/06/17 12:22:41 iliaa Exp $ -*- autoconf -*-
+ dnl ## Process this file with autoconf to produce a configure script.
+
+-divert(1)
++divert(1001)
+
+ dnl ## Diversion 1 is the autoconf + automake setup phase. We also
+ dnl ## set the PHP version, deal with platform-specific compile
+@@ -263,7 +263,7 @@
+ sinclude(TSRM/tsrm.m4)
+
+
+-divert(2)
++divert(1002)
+
+ dnl ## Diversion 2 is where we set PHP-specific options and come up
+ dnl ## with reasonable default values for them. We check for pthreads here
+@@ -302,7 +302,7 @@
+ PTHREADS_FLAGS
+ fi
+
+-divert(3)
++divert(1003)
+
+ dnl ## In diversion 3 we check for compile-time options to the PHP
+ dnl ## core and how to deal with different system dependencies.
+@@ -661,7 +661,7 @@
+ PHP_CRYPT_R_STYLE
+ fi
+
+-divert(4)
++divert(1004)
+
+ dnl ## In diversion 4 we check user-configurable general settings.
+
+@@ -902,7 +902,7 @@
+ AC_MSG_RESULT([using system default])
+ fi
+
+-divert(5)
++divert(1005)
+
+ dnl ## In diversion 5 we check which extensions should be compiled.
+ dnl ## All of these are normally in the extension directories.
+diff -ur php-5.2.10.org/ext/standard/config.m4 php-5.2.10/ext/standard/config.m4
+--- php-5.2.10.org/ext/standard/config.m4 2007-07-11 13:56:03.000000000 +0200
++++ php-5.2.10/ext/standard/config.m4 2009-08-18 12:16:25.317640253 +0200
+@@ -1,6 +1,6 @@
+ dnl $Id: config.m4,v 1.80.2.3.2.3 2007/07/11 11:56:03 jani Exp $ -*- autoconf -*-
+
+-divert(3)dnl
++divert(1003)dnl
+
+ dnl
+ dnl Check if flush should be called explicitly after buffered io
+@@ -205,7 +205,7 @@
+ AC_CHECK_FUNCS(getcwd getwd asinh acosh atanh log1p hypot glob strfmon nice fpclass isinf isnan)
+ AC_FUNC_FNMATCH
+
+-divert(5)dnl
++divert(1005)dnl
+
+ dnl
+ dnl Check for regex library type
+diff -ur php-5.2.10.org/scripts/phpize.m4 php-5.2.10/scripts/phpize.m4
+--- php-5.2.10.org/scripts/phpize.m4 2009-06-02 21:54:22.000000000 +0200
++++ php-5.2.10/scripts/phpize.m4 2009-08-18 12:16:25.317640253 +0200
+@@ -1,6 +1,6 @@
+ dnl This file becomes configure.in for self-contained extensions.
+
+-divert(1)
++divert(1001)
+
+ AC_PREREQ(2.13)
+ AC_INIT(config.m4)
diff --git a/recipes/php/php-native_5.3.2.bb b/recipes/php/php-native_5.3.2.bb
new file mode 100644
index 0000000000..9920088648
--- /dev/null
+++ b/recipes/php/php-native_5.3.2.bb
@@ -0,0 +1,9 @@
+require php-native.inc
+
+PR = "r1"
+
+SRC_URI += "file://CVE-2010-0397.patch;patch=1"
+
+SRC_URI[src.md5sum] = "46f500816125202c48a458d0133254a4"
+SRC_URI[src.sha256sum] = "9a380a574adcb3a9abe3226e7c3a9bae619e8a1b90842ec2a7edf0ad92afdeda"
+
diff --git a/recipes/php/php.inc b/recipes/php/php.inc
index 0f9a42077a..cbec13d72d 100644
--- a/recipes/php/php.inc
+++ b/recipes/php/php.inc
@@ -3,8 +3,9 @@ HOMEPAGE = "http://www.php.net"
SECTION = "console/network"
LICENSE = "PHP"
-SRC_URI = "http://us2.php.net/distributions/php-${PV}.tar.bz2\
- file://acinclude-xml2-config.patch;patch=1"
+SRC_URI = "http://us2.php.net/distributions/php-${PV}.tar.bz2;name=src \
+ file://acinclude-xml2-config.patch;patch=1 \
+ file://php-m4-divert.patch;patch=1"
S = "${WORKDIR}/php-${PV}"
diff --git a/recipes/php/php_5.2.11.bb b/recipes/php/php_5.2.11.bb
deleted file mode 100644
index 5b4871cbc7..0000000000
--- a/recipes/php/php_5.2.11.bb
+++ /dev/null
@@ -1,94 +0,0 @@
-require php.inc
-
-DEPENDS = "zlib libxml2 virtual/libiconv php-native lemon-native mysql5 \
- libc-client openssl"
-
-PR = "r4"
-
-SRC_URI += "file://pear-makefile.patch;patch=1 \
- file://imap-fix-autofoo.patch;patch=1 \
- "
-export THREADS="pthread"
-export LIBS=" -lpthread "
-
-EXTRA_OECONF = " --without-iconv \
- --enable-mbstring \
- --enable-discard-path \
- --enable-sockets \
- --enable-shared \
- --enable-pcntl \
- --enable-memory-limit \
- --enable-wddx \
- --disable-embedded-mysqli \
- --enable-magic-quotes \
- --enable-fastcgi \
- --with-imap=${STAGING_DIR_HOST} \
- --with-imap-ssl=${STAGING_DIR_HOST} \
- --with-zlib --with-zlib-dir=${STAGING_LIBDIR}/.. \
- --with-libxml-dir=${STAGING_BINDIR_CROSS} \
- --with-mysql="${STAGING_DIR_TARGET}${layout_exec_prefix}" \
- --with-mysqli="${STAGING_BINDIR_CROSS}/mysql_config" \
- --with-pdo-mysql="${STAGING_BINDIR_CROSS}/mysql_config" \
- --without-pdo-sqlite \
- "
-
-export LD_LIBRARY_PATH = "${STAGING_LIBDIR}"
-export PHP_NATIVE_DIR = "${STAGING_BINDIR_NATIVE}"
-export PHP_PEAR_PHP_BIN = "${bindir}/php"
-
-#LDFLAGS += "-lstdc++"
-
-do_configure_append() {
- find ${S} -type f | xargs sed -i 's:I/usr/include:I${STAGING_INCDIR}:g'
-}
-
-# fixme
-do_install_append() {
- mv ${D}/${STAGING_DIR_NATIVE}/${sysconfdir} ${D}/${sysconfdir}
- rm -rf ${D}/${STAGING_DIR_NATIVE}
- rm -rf ${D}/.registry
- rm -rf ${D}/.channels
- rm -rf ${D}/.[a-z]*
-}
-
-PACKAGES = "${PN}-dbg \
- ${PN}-cli \
- ${PN}-cgi \
- ${PN}-pear \
- ${PN}-dev \
- ${PN}-doc \
- ${PN} \
-"
-
-
-FILES_${PN}-dbg =+ "${bindir}/.debug"
-
-FILES_${PN}-doc += "${libdir}/php/doc"
-
-FILES_${PN}-cli = "${bindir}/php"
-FILES_${PN}-cgi = "${bindir}/php-cgi"
-
-FILES_${PN}-pear = "${bindir}/pear* ${bindir}/pecl \
- ${libdir}/php/PEAR \
- ${libdir}/php/PEAR.php \
- ${libdir}/php/System.php ${libdir}php/peclcmd.php ${libdir}/php/pearcmd.php \
- ${libdir}/php/.channels ${libdir}/php/.channels/.alias \
- ${libdir}/php/.channels\__uri.reg \
- ${libdir}/php/.channels\pear.php.net.reg ${libdir}/php/.channels/pecl.php.net.reg \
- ${libdir}/php/.registry \
- ${libdir}/php/Archive/Tar.php \
- ${libdir}/php/Console/Getopt.php ${libdir}/php/OS/Guess.php \
- ${sysconfdir}/pear.conf"
-
-
-FILES_${PN}-dev = "${includedir}/php ${libdir}/build \
- ${bindir}/phpize ${bindir}/php-config \
- ${libdir}/php/.depdb ${libdir}/php/.depdblock ${libdir}/php/.filemap ${libdir}/php/.lock \
- ${libdir}/php/test "
-
-FILES_${PN} = "${libdir}/php"
-FILES_${PN} += "${bindir}"
-
-RDEPENDS_${PN}-pear = ${PN}
-RDEPENDS_${PN}-cli = ${PN}
-RDEPENDS_${PN}-dev = ${PN}
diff --git a/recipes/php/php_5.2.13.bb b/recipes/php/php_5.2.13.bb
new file mode 100644
index 0000000000..dad6bcd44e
--- /dev/null
+++ b/recipes/php/php_5.2.13.bb
@@ -0,0 +1,98 @@
+require php.inc
+
+DEPENDS = "zlib libxml2 virtual/libiconv php-native lemon-native mysql5 \
+ libc-client openssl"
+
+PR = "r6"
+
+SRC_URI += "file://pear-makefile.patch;patch=1 \
+ file://imap-fix-autofoo.patch;patch=1 \
+ file://CVE-2010-0397.patch;patch=1 \
+ "
+SRC_URI[src.md5sum] = "eb4d0766dc4fb9667f05a68b6041e7d1"
+SRC_URI[src.sha256sum] = "2b50a2535e3bb9a98cd4d1633f9452d877276c40b385915261f040d535c7eadb"
+
+export THREADS="pthread"
+export LIBS=" -lpthread "
+
+EXTRA_OECONF = " --without-iconv \
+ --enable-mbstring \
+ --enable-discard-path \
+ --enable-sockets \
+ --enable-shared \
+ --enable-pcntl \
+ --enable-memory-limit \
+ --enable-wddx \
+ --disable-embedded-mysqli \
+ --enable-magic-quotes \
+ --enable-fastcgi \
+ --with-imap=${STAGING_DIR_HOST} \
+ --with-imap-ssl=${STAGING_DIR_HOST} \
+ --with-zlib --with-zlib-dir=${STAGING_LIBDIR}/.. \
+ --with-libxml-dir=${STAGING_BINDIR_CROSS} \
+ --with-mysql="${STAGING_DIR_TARGET}${layout_exec_prefix}" \
+ --with-mysqli="${STAGING_BINDIR_CROSS}/mysql_config" \
+ --with-pdo-mysql="${STAGING_BINDIR_CROSS}/mysql_config" \
+ --without-pdo-sqlite \
+ "
+
+export LD_LIBRARY_PATH = "${STAGING_LIBDIR}"
+export PHP_NATIVE_DIR = "${STAGING_BINDIR_NATIVE}"
+export PHP_PEAR_PHP_BIN = "${bindir}/php"
+
+#LDFLAGS += "-lstdc++"
+
+do_configure_append() {
+ find ${S} -type f | xargs sed -i 's:I/usr/include:I${STAGING_INCDIR}:g'
+}
+
+# fixme
+do_install_append() {
+ mv ${D}/${STAGING_DIR_NATIVE}/${sysconfdir} ${D}/${sysconfdir}
+ rm -rf ${D}/${STAGING_DIR_NATIVE}
+ rm -rf ${D}/.registry
+ rm -rf ${D}/.channels
+ rm -rf ${D}/.[a-z]*
+}
+
+PACKAGES = "${PN}-dbg \
+ ${PN}-cli \
+ ${PN}-cgi \
+ ${PN}-pear \
+ ${PN}-dev \
+ ${PN}-doc \
+ ${PN} \
+"
+
+
+FILES_${PN}-dbg =+ "${bindir}/.debug"
+
+FILES_${PN}-doc += "${libdir}/php/doc"
+
+FILES_${PN}-cli = "${bindir}/php"
+FILES_${PN}-cgi = "${bindir}/php-cgi"
+
+FILES_${PN}-pear = "${bindir}/pear* ${bindir}/pecl \
+ ${libdir}/php/PEAR \
+ ${libdir}/php/PEAR.php \
+ ${libdir}/php/System.php ${libdir}php/peclcmd.php ${libdir}/php/pearcmd.php \
+ ${libdir}/php/.channels ${libdir}/php/.channels/.alias \
+ ${libdir}/php/.channels\__uri.reg \
+ ${libdir}/php/.channels\pear.php.net.reg ${libdir}/php/.channels/pecl.php.net.reg \
+ ${libdir}/php/.registry \
+ ${libdir}/php/Archive/Tar.php \
+ ${libdir}/php/Console/Getopt.php ${libdir}/php/OS/Guess.php \
+ ${sysconfdir}/pear.conf"
+
+
+FILES_${PN}-dev = "${includedir}/php ${libdir}/build \
+ ${bindir}/phpize ${bindir}/php-config \
+ ${libdir}/php/.depdb ${libdir}/php/.depdblock ${libdir}/php/.filemap ${libdir}/php/.lock \
+ ${libdir}/php/test "
+
+FILES_${PN} = "${libdir}/php"
+FILES_${PN} += "${bindir}"
+
+RDEPENDS_${PN}-pear = ${PN}
+RDEPENDS_${PN}-cli = ${PN}
+RDEPENDS_${PN}-dev = ${PN}
diff --git a/recipes/pidgin/pidgin_2.6.6.bb b/recipes/pidgin/pidgin_2.6.6.bb
new file mode 100644
index 0000000000..fdf2bdd5ac
--- /dev/null
+++ b/recipes/pidgin/pidgin_2.6.6.bb
@@ -0,0 +1,22 @@
+require pidgin.inc
+PR = "${INC_PR}.0"
+
+DEPENDS += "farsight2 libidn"
+
+SRC_URI = "\
+ ${SOURCEFORGE_MIRROR}/pidgin/pidgin-${PV}.tar.bz2;name=pidgin \
+ file://sanitize-configure.ac.patch;patch=1 \
+ file://pidgin.desktop-set-icon.patch;patch=1 \
+ file://purple-OE-branding-25.patch;patch=1 \
+ file://pidgin-cross-python-265.patch;patch=1 \
+"
+
+SRC_URI[pidgin.md5sum] = "b37ab6c52db8355e8c70c044c2ba17c1"
+SRC_URI[pidgin.sha256sum] = "6ebbe9d339246dfebb244e4c855c4feb678f120d1024ef2ee269e2fde77b2ad9"
+
+EXTRA_OECONF += "\
+ --disable-gtkspell \
+ --disable-meanwhile \
+ --disable-nm \
+ --disable-screensaver \
+"
diff --git a/recipes/pingus/files/pingus-gta012.sh b/recipes/pingus/files/pingus-gta012.sh
index 70346c5646..4edcdc9060 100644
--- a/recipes/pingus/files/pingus-gta012.sh
+++ b/recipes/pingus/files/pingus-gta012.sh
@@ -1,4 +1,4 @@
#!/bin/sh
-xrandr -o 3
-pingus.bin --fast-mode -g 640x480 --disable-music --disable-sound --fullscreen
+xrandr -o 1
+pingus.bin -w -g 640x434 --disable-music --disable-sound
xrandr -o 0
diff --git a/recipes/pingus/pingus_0.7.2.bb b/recipes/pingus/pingus_0.7.2.bb
index 10f99bae0e..6c1725f260 100644
--- a/recipes/pingus/pingus_0.7.2.bb
+++ b/recipes/pingus/pingus_0.7.2.bb
@@ -3,7 +3,7 @@ DEPENDS = "virtual/libiconv virtual/libsdl libsdl-image libsdl-mixer boost libpn
LICENSE = "GPL"
HOMEPAGE = "http://pingus.seul.org/"
SECTION = "x11/games"
-PR = "r2"
+PR = "r3"
ARM_INSTRUCTION_SET = "arm"
diff --git a/recipes/pngcrush/pngcrush-native_1.6.4.bb b/recipes/pngcrush/pngcrush-native_1.7.9.bb
index 4e119a167b..4e119a167b 100644
--- a/recipes/pngcrush/pngcrush-native_1.6.4.bb
+++ b/recipes/pngcrush/pngcrush-native_1.7.9.bb
diff --git a/recipes/pngcrush/pngcrush_1.6.4.bb b/recipes/pngcrush/pngcrush_1.6.4.bb
deleted file mode 100644
index 8d3781161e..0000000000
--- a/recipes/pngcrush/pngcrush_1.6.4.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-DESCRIPTION = "Tool to optimize PNG images"
-SECTION = "console/graphics"
-HOMEPAGE = "http://pmt.sourceforge.net/pngcrush"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/pmt/pngcrush-${PV}.tar.gz"
-
-#DEPENDS += "libsdl-net smpeg"
-
-EXTRA_OEMAKE = "CC='${CC}' CFLAGS='${CFLAGS}' LD='${CC}'"
-
-do_install () {
- install -d ${D}${bindir}
- install -m 755 ${BPN} ${D}${bindir}
-}
diff --git a/recipes/pngcrush/pngcrush_1.7.9.bb b/recipes/pngcrush/pngcrush_1.7.9.bb
new file mode 100644
index 0000000000..fc284f23d4
--- /dev/null
+++ b/recipes/pngcrush/pngcrush_1.7.9.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Tool to optimize PNG images"
+SECTION = "console/graphics"
+HOMEPAGE = "http://pmt.sourceforge.net/pngcrush"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/pmt/pngcrush-${PV}.tar.gz;name=src"
+
+SRC_URI[src.md5sum] = "6e843bdaa1291ca072ae9afb4d6a09cc"
+SRC_URI[src.sha256sum] = "644f0e11b9c60f00943063f93f1813d814466c3516a7924db4c90d64eb70af66"
+
+
+#DEPENDS += "libsdl-net smpeg"
+
+EXTRA_OEMAKE = "CC='${CC}' CFLAGS='${CFLAGS}' LD='${CC} ${LDFLAGS}'"
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 755 ${BPN} ${D}${bindir}
+}
diff --git a/recipes/pointercal/files/archos5it/pointercal b/recipes/pointercal/files/archos5it/pointercal
new file mode 100644
index 0000000000..37362820de
--- /dev/null
+++ b/recipes/pointercal/files/archos5it/pointercal
@@ -0,0 +1 @@
+796 0 -95501 0 508 -116804 3830
diff --git a/recipes/pointercal/files/htc-msm7/pointercal b/recipes/pointercal/files/htc-msm7/pointercal
new file mode 100644
index 0000000000..1eaf01013a
--- /dev/null
+++ b/recipes/pointercal/files/htc-msm7/pointercal
@@ -0,0 +1 @@
+5881 -59 243084 -214 5990 -70204 65536
diff --git a/recipes/pointercal/pointercal_0.0.bb b/recipes/pointercal/pointercal_0.0.bb
index dfe5863726..d98a78f66e 100644
--- a/recipes/pointercal/pointercal_0.0.bb
+++ b/recipes/pointercal/pointercal_0.0.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Touchscreen calibration data"
SECTION = "base"
-PR = "r19"
+PR = "r20"
SRC_URI = "file://pointercal"
S = "${WORKDIR}"
diff --git a/recipes/policykit/policykit-gnome_0.96.bb b/recipes/policykit/policykit-gnome_0.96.bb
new file mode 100644
index 0000000000..1a4c1ffad3
--- /dev/null
+++ b/recipes/policykit/policykit-gnome_0.96.bb
@@ -0,0 +1,24 @@
+HOMEPAGE = "http://www.packagekit.org/"
+DEPENDS = "policykit libgnome"
+
+PR = "r1"
+
+SRC_URI = "http://hal.freedesktop.org/releases/polkit-gnome-${PV}.tar.bz2;name=polkitgnome"
+SRC_URI[polkitgnome.md5sum] = "611cf39fba2945320fc7a9ec49087e69"
+SRC_URI[polkitgnome.sha256sum] = "0d96c8032d658a2e1eef8adfbeafff0f569ef0cf68b35915423acc00873c8a92"
+
+EXTRA_OECONF = " --disable-scrollkeeper \
+ --disable-man-pages \
+ --disable-examples \
+ --disable-gtk-doc \
+ --enable-introspection=no \
+"
+
+S = "${WORKDIR}/polkit-gnome-${PV}"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += " ${datadir}/dbus-1 \
+ ${datadir}/PolicyKit \
+ "
+
diff --git a/recipes/policykit/policykit_0.96.bb b/recipes/policykit/policykit_0.96.bb
new file mode 100644
index 0000000000..e94e90886b
--- /dev/null
+++ b/recipes/policykit/policykit_0.96.bb
@@ -0,0 +1,64 @@
+HOMEPAGE = "http://www.packagekit.org/"
+DEPENDS = "eggdbus libpam expat dbus-glib intltool-native"
+
+PR = "r1"
+
+SRC_URI = "http://hal.freedesktop.org/releases/polkit-${PV}.tar.gz;name=polkit \
+ "
+
+SRC_URI[polkit.md5sum] = "e0a06da501b04ed3bab986a9df5b5aa2"
+SRC_URI[polkit.sha256sum] = "3426ca917210b2a5525732559368c18f983a4c39a6a55c5dddba26071bd8054a"
+
+EXTRA_OECONF = "--with-authfw=pam \
+ --with-os-type=${DISTRO} \
+ --disable-man-pages \
+ --disable-gtk-doc \
+ --enable-introspection=no \
+"
+
+S = "${WORKDIR}/polkit-${PV}"
+
+inherit autotools pkgconfig
+
+do_install_append () {
+ install -d ${D}${localstatedir}/run/PolicyKit
+}
+
+FILES_${PN} += " ${datadir}/dbus-1 \
+ ${datadir}/PolicyKit ${datadir}/polkit-1\
+ ${localstatedir}/run/PolicyKit \
+ ${libdir}/polkit-1/extensions/*.so \
+"
+
+FILES_${PN}-dev += " ${libdir}/polkit-1/extensions/*a"
+
+pkg_postinst_${PN} () {
+ # can't do this offline
+ if [ "x$D" != "x" ]; then
+ exit 1
+ fi
+ grep "^polkituser:" /etc/group > /dev/null || addgroup polkituser
+ grep "^polkituser:" /etc/passwd > /dev/null || adduser --disabled-password --system --home /var/run/polkit polkituser --ingroup polkituser -g polkituser
+
+ # Fix owners
+ for i in /etc/polkit-1/localauthority /var/lib/polkit-1 ; do
+ mkdir -p $i
+ chown root $i
+ chmod 700 $i
+ done
+
+ for i in /usr/libexec/polkit-agent-helper-1 /usr/bin/pkexec ; do
+ chown root $i
+ chmod 4755 $i
+ done
+
+ DBUSPID=`pidof dbus-daemon`
+ if [ "x$DBUSPID" != "x" ]; then
+ /etc/init.d/dbus-1 force-reload
+ fi
+}
+
+pkg_postrm_${PN} () {
+ deluser polkituser || true
+ delgroup polkituser || true
+}
diff --git a/recipes/powervr-drivers/bc-cat-omap3-module/rc.bccat b/recipes/powervr-drivers/bc-cat-omap3-module/rc.bccat
deleted file mode 100644
index eeb3fdc141..0000000000
--- a/recipes/powervr-drivers/bc-cat-omap3-module/rc.bccat
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-#
-# install bc-cat module and create device nodes
-#
-PATH=/sbin:/bin:/usr/sbin:/usr/bin
-
-case "$1" in
- start) echo -n "install bc-cat kernel module... "
- modprobe -f bc-cat
- rm -rf /dev/bc_cat
- mknod /dev/bc_cat c `awk "\\$2==\"bc_cat\" {print \\$1}" /proc/devices` 0
- echo "done"
- ;;
- stop) echo -n "removing bc-cat kernel module... "
- rmmod bc-cat
- echo "done"
- rm -rf /dev/bc_cat
- ;;
- *) echo "$0 <start/stop>"
- ;;
-esac
-
diff --git a/recipes/powervr-drivers/bc-cat-omap3-module_0.1.0.bb b/recipes/powervr-drivers/bc-cat-omap3-module_0.1.0.bb
deleted file mode 100644
index 7f5cc70b5d..0000000000
--- a/recipes/powervr-drivers/bc-cat-omap3-module_0.1.0.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require bc-cat.inc
-
diff --git a/recipes/powervr-drivers/bc-cat.inc b/recipes/powervr-drivers/bc-cat.inc
deleted file mode 100644
index 4213113393..0000000000
--- a/recipes/powervr-drivers/bc-cat.inc
+++ /dev/null
@@ -1,51 +0,0 @@
-DESCRIPTION = "Video texture streaming via IMG 3rdparty bufferclass (bc-cat) module"
-DEPENDS = "libgles-omap3"
-inherit module
-
-SRC_URI="http://software-dl.ti.com/dsps/dsps_public_sw/apps_processors/OMAP35x_AM35x_Video_Texture_Streaming/1_0/exports/bc-cat-${PV}.tar.gz \
- file://rc.bccat \
-"
-
-S=${WORKDIR}/bc-cat-${PV}
-
-PACKAGES += " ${PN}-tests"
-INSANE_SKIP_${PN}-tests = True
-INSANE_SKIP_${PN} = True
-FILES_${PN} = "${sysconfdir} /lib/modules/${KERNEL_VERSION}/drivers/gpu/bc-cat/bc_cat.ko"
-FILES_${PN}-tests = "/usr/demos/bc-cat/*"
-RDEPENDS_${PN}-tests += "${PN}"
-
-inherit update-rc.d
-
-INITSCRIPT_NAME = "bccat-init"
-INITSCRIPT_PARAMS = "start 30 5 2 . stop 40 0 1 6 ."
-
-do_compile () {
- # build kernel module
- cd ${S}/module
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
- make GSDK_KM_DIR=${STAGING_INCDIR} \
- KERNEL_DIR=${STAGING_KERNEL_DIR} \
- CROSS_COMPILE=${TARGET_PREFIX}
-
- # build test application
- cd ${S}/test
- make GSDK_KM_DIR=${STAGING_INCDIR} \
- KERNEL_DIR=${STAGING_KERNEL_DIR} \
- CROSS_COMPILE=${TARGET_PREFIX} \
- X11BUILD=1
-}
-
-do_install () {
- # install kernel module
- install -d ${D}/lib/modules/${KERNEL_VERSION}/drivers/gpu/bc-cat
- cp ${S}/module/bc_cat.ko ${D}/lib/modules/${KERNEL_VERSION}/drivers/gpu/bc-cat
- install -d ${D}${sysconfdir}/init.d/
- install -m 0755 ${WORKDIR}/rc.bccat ${D}${sysconfdir}/init.d/bccat-init
-
- # install test app
- install -d ${D}/usr/demos/bc-cat
- cp ${S}/test/gles1_bc_mmap ${D}/usr/demos/bc-cat/
- cp ${S}/test/gles1_bc_webcam ${D}/usr/demos/bc-cat/
-}
-
diff --git a/recipes/powervr-drivers/kernel-module-bc_git.bb b/recipes/powervr-drivers/kernel-module-bc_git.bb
new file mode 100644
index 0000000000..27d3684853
--- /dev/null
+++ b/recipes/powervr-drivers/kernel-module-bc_git.bb
@@ -0,0 +1,41 @@
+DESCRIPTION = "Kernelmodule for IMG BufferClass API"
+LICENSE = "GPLv2"
+
+DEPENDS = "virtual/egl"
+
+PV = "0.10.1.1"
+MACHINE_KERNEL_PR_append = "+gitr${SRCREV}"
+
+inherit module autotools
+
+SRC_URI = "git://gitorious.org/gst-plugin-bc/gst-plugin-bc.git;protocol=git \
+ http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-0.10.25.tar.bz2 \
+"
+
+SRCREV = "e14e249ef6cb67e91be9198b71efc61eb84c11b5"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECONF = " --with-kpath=${STAGING_KERNEL_DIR} --enable-module-only --with-gsdk=${STAGING_DIR_TARGET}"
+
+# bitbake git fetcher doesn't handle git submodules currently
+do_configure_prepend () {
+ sed -i s:cp:echo:g ${S}/module/Makefile.in
+ cp -rf ${WORKDIR}/gstreamer-0.10.25/common/* ${S}/common/
+ autopoint
+ mkdir -p ${S}/win32
+ touch ${S}/win32/MANIFEST
+}
+
+EXTRA_OEMAKE = " CROSS_COMPILE=${TARGET_PREFIX} GSDK_KM_DIR=${STAGING_INCDIR} "
+
+do_install() {
+ cd ${S}/module
+ oe_runmake -C ${STAGING_KERNEL_DIR} M=${PWD} DEPMOD=echo INSTALL_MOD_PATH="${D}" ${MODULE_MAKE_FLAGS} modules_install
+ cp ${S}/module/*.ko ${D}${base_libdir}/modules/*/extra/
+}
+
+
+ALLOW_EMPTY = "1"
+
+
diff --git a/recipes/powervr-drivers/libgles-omap3-3.00.00.09/rc.pvr b/recipes/powervr-drivers/libgles-omap3-3.00.00.09/rc.pvr
deleted file mode 100755
index 1b3c274593..0000000000
--- a/recipes/powervr-drivers/libgles-omap3-3.00.00.09/rc.pvr
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/bin/sh
-
-CPUTYPE="$(cputype)"
-
-if [ "$1" = "" ]; then
- echo PVR-INIT: Please use start, stop, or restart.
- exit 1
-fi
-
-if [ "$1" = "stop" -o "$1" = "restart" ]; then
- echo Stopping PVR
- #rmmod bc_example
- rmmod omaplfb 2>/dev/null
- rmmod pvrsrvkm 2>/dev/null
-fi
-
-if [ "$1" = "stop" ]; then
- exit 0
-fi
-
-if [ $CPUTYPE = "OMAP3530" ]; then
- echo Starting PVR
- insmod $(busybox find /lib/modules/$(uname -r) -name "pvrsrvkm.ko")
- #modprobe bc_example
- modprobe omaplfb
-
- pvr_maj=`grep "pvrsrvkm$" /proc/devices | cut -b1,2,3`
-
- if [ -e /dev/pvrsrvkm ] ; then
- rm -f /dev/pvrsrvkm
- fi
-
- mknod /dev/pvrsrvkm c $pvr_maj 0
- chmod 666 /dev/pvrsrvkm
-
- touch /etc/powervr-esrev
-
- SAVED_ESREVISION="$(cat /etc/powervr-esrev)"
- ES_REVISION="$(cat /proc/cpuinfo | grep "CPU revision" | awk -F: '{print $2}')"
-
- if [ "${ES_REVISION}" != "${SAVED_ESREVISION}" ] ; then
- echo -n "Starting SGX fixup for"
- if [ "${ES_REVISION}" = " 3" ] ; then
- echo " ES3.x"
- cp -a /usr/lib/ES3.0/* /usr/lib
- cp -a /usr/bin/ES3.0/* /usr/bin
- else
- echo "ES 2.x"
- cp -a /usr/lib/ES2.0/* /usr/lib
- cp -a /usr/bin/ES2.0/* /usr/bin
- fi
- echo "${ES_REVISION}" > /etc/powervr-esrev
- fi
- /usr/bin/pvrsrvinit
-else
- echo No SGX hardware, not starting PVR
-fi
-
diff --git a/recipes/powervr-drivers/libgles-omap3-3.01.00.02/rc.pvr b/recipes/powervr-drivers/libgles-omap3-3.01.00.02/rc.pvr
deleted file mode 100755
index 1b3c274593..0000000000
--- a/recipes/powervr-drivers/libgles-omap3-3.01.00.02/rc.pvr
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/bin/sh
-
-CPUTYPE="$(cputype)"
-
-if [ "$1" = "" ]; then
- echo PVR-INIT: Please use start, stop, or restart.
- exit 1
-fi
-
-if [ "$1" = "stop" -o "$1" = "restart" ]; then
- echo Stopping PVR
- #rmmod bc_example
- rmmod omaplfb 2>/dev/null
- rmmod pvrsrvkm 2>/dev/null
-fi
-
-if [ "$1" = "stop" ]; then
- exit 0
-fi
-
-if [ $CPUTYPE = "OMAP3530" ]; then
- echo Starting PVR
- insmod $(busybox find /lib/modules/$(uname -r) -name "pvrsrvkm.ko")
- #modprobe bc_example
- modprobe omaplfb
-
- pvr_maj=`grep "pvrsrvkm$" /proc/devices | cut -b1,2,3`
-
- if [ -e /dev/pvrsrvkm ] ; then
- rm -f /dev/pvrsrvkm
- fi
-
- mknod /dev/pvrsrvkm c $pvr_maj 0
- chmod 666 /dev/pvrsrvkm
-
- touch /etc/powervr-esrev
-
- SAVED_ESREVISION="$(cat /etc/powervr-esrev)"
- ES_REVISION="$(cat /proc/cpuinfo | grep "CPU revision" | awk -F: '{print $2}')"
-
- if [ "${ES_REVISION}" != "${SAVED_ESREVISION}" ] ; then
- echo -n "Starting SGX fixup for"
- if [ "${ES_REVISION}" = " 3" ] ; then
- echo " ES3.x"
- cp -a /usr/lib/ES3.0/* /usr/lib
- cp -a /usr/bin/ES3.0/* /usr/bin
- else
- echo "ES 2.x"
- cp -a /usr/lib/ES2.0/* /usr/lib
- cp -a /usr/bin/ES2.0/* /usr/bin
- fi
- echo "${ES_REVISION}" > /etc/powervr-esrev
- fi
- /usr/bin/pvrsrvinit
-else
- echo No SGX hardware, not starting PVR
-fi
-
diff --git a/recipes/powervr-drivers/libgles-omap3.inc b/recipes/powervr-drivers/libgles-omap3.inc
index bf7adaaa2f..2562ed6234 100644
--- a/recipes/powervr-drivers/libgles-omap3.inc
+++ b/recipes/powervr-drivers/libgles-omap3.inc
@@ -2,13 +2,8 @@ DESCRIPTION = "libGLES for the omap3"
LICENCE = "proprietary-binary"
COMPATIBLE_MACHINE = "(am3517-evm|beagleboard|cm-t35|igep0020|omap3-pandora|omap3-touchbook|omap3evm|omapzoom|omapzoom2|overo|palmpre)"
-RDEPENDS_${PN} += "devmem2"
-#HACK! These are binaries, so we can't guarantee that LDFLAGS match :(
-INSANE_SKIP_${PN} = True
-INSANE_SKIP_${PN}-tests = True
-INSANE_SKIP_${PN}-demos = True
-INSANE_SKIP_xserver-kdrive-powervrsgx = True
+DEPENDS = "virtual/libx11 libxau libxdmcp"
PROVIDES += "virtual/egl"
@@ -22,87 +17,129 @@ PROVIDES += "virtual/egl"
# (replace version in .bin file as appropriate)
# 3. put the OMAP35x_*.bin file in libgles-omap3/
# mv OMAP35x_Graphics_SDK_setuplinux_3_00_00_06.bin ./libgles-omap3/
-# 4. make it executable:
-# chmod a+x ./libgles-omap3/OMAP35x_Graphics_SDK_setuplinux_3_00_00_06.bin
#
# voila!
SRC_URI = "file://OMAP35x_Graphics_SDK_setuplinux_${SGXPV}.bin \
- file://cputype \
- file://rc.pvr \
- file://chameleonman.desktop \
- file://evilskull.desktop \
- file://fivespheres.desktop \
- file://lighting.desktop \
- file://mouse.desktop \
- file://optimizemesh.desktop \
- file://particles.desktop \
- file://polybump.desktop \
- file://shadowtechniques.desktop \
- file://skybox.desktop \
- file://trilinear.desktop \
- file://userclipplanes.desktop \
- file://vase.desktop \
- file://shaders.desktop \
- file://skybox2.desktop \
- "
+ file://cputype \
+ file://rc.pvr \
+ file://sample.desktop \
+ "
S = "${WORKDIR}/OMAP35x_Graphics_SDK_${SGXPV}"
+# Logic to unpack installjammer file
TI_BIN_UNPK_CMDS="Y: qY:workdir:Y"
require ../ti/ti-eula-unpack.inc
BINLOCATION ?= "${S}/gfx_rel"
-PACKAGES += " xserver-kdrive-powervrsgx ${PN}-tests ${PN}-demos"
-
-FILES_${PN} = "${sysconfdir} ${libdir}/lib*.so.* ${libdir}/ES*/* ${bindir}/pvrsrvinit ${bindir}/cputype ${bindir}/*/*"
-FILES_xserver-kdrive-powervrsgx = "${bindir}/Xsgx"
-FILES_${PN}-tests = "${bindir}"
-FILES_${PN}-demos = "${prefix}/demos ${prefix}/share/applications "
-FILES_${PN}-dbg = "${libdir}/.debug/* ${bindir}/.debug/* ${libdir}/ES*/.debug ${bindir}/*/.debug\
- ${prefix}/demos/OGLES/*/.debug/* \
- ${prefix}/demos/OGLES2/*/.debug/* \
- "
-
-RRECOMMENDS_${PN} = "${PN}-tests \
- omap3-sgx-modules"
-
-inherit update-rc.d
-
-INITSCRIPT_NAME = "pvr-init"
-INITSCRIPT_PARAMS = "start 30 5 2 . stop 40 0 1 6 ."
+do_configure() {
+ # Attempt to fix up the worst offenders for file permissions
+ for i in $(find ${S} -name "*.h") $(find ${S} -name "*.c") $(find ${S} -name "Make*") ; do
+ chmod 0644 $i
+ done
+
+ # Attempt to create proper library softlinks
+ for sofile in $(find ${S} -name "lib*Open*.so") $(find ${S} -name "lib*srv*.so") $(find ${S} -name "lib*gl*.so") $(find ${S} -name "libpvr*.so") $(find ${S} -name "lib*GL*.so"); do
+ if [ "$(readlink -n ${sofile})" = "" ] ; then
+ mv $sofile ${sofile}.${IMGPV}
+ ln -sf $(basename ${sofile}.${IMGPV}) ${sofile}
+ ln -sf $(basename ${sofile}.${IMGPV}) ${sofile}$(echo ${IMGPV} | awk -F. '{print "." $1}')
+ ln -sf $(basename ${sofile}.${IMGPV}) ${sofile}$(echo ${IMGPV} | awk -F. '{print "." $1 "." $2}')
+ fi
+ done
+
+ # Due to recursive make PLAT_* isn't always passed down correctly, so use sed to fix those
+ for mak in $(find ${S} -name "*.mak") ; do
+ sed -i -e s:arm-none-linux-gnueabi-:${TARGET_PREFIX}:g $mak
+ done
+
+ # clear out old stuff
+ find Binaries/ | xargs rm -f || true
+}
+# Force in GNU_HASH and paths to libs
+TARGET_CC_ARCH += " ${TARGET_LINK_HASH_STYLE} -Wl,-rpath-link,${BINLOCATION} -L${BINLOCATION}"
+PARALLEL_MAKE = ""
do_compile() {
- for i in $(find ${S} -name "*.h") $(find ${S} -name "*.c") $(find ${S} -name "Make*") ; do
- chmod 0644 $i
- done
-
- for sofile in $(find ${S} -name "lib*Open*.so") $(find ${S} -name "lib*srv*.so") $(find ${S} -name "lib*gl*.so") $(find ${S} -name "libpvr*.so") $(find ${S} -name "lib*GL*.so"); do
- if [ "$(readlink -n ${sofile})" = "" ] ; then
- mv $sofile ${sofile}.${IMGPV}
- ln -sf $(basename ${sofile}.${IMGPV}) ${sofile}
- fi
- done
+ export X11ROOT="${STAGING_INCDIR}"
+ export PLATFORM="LinuxOMAP3"
+
+ export PLAT_CC="${CC}"
+ export PLAT_CPP="${CXX}"
+ export PLAR_AR="${AR}"
+
+ mkdir -p ${S}/demos/raw
+ mkdir -p ${S}/demos/x11
+
+ # Rebuild demos for both Raw and X11
+ for X11BUILD in 0 1 ; do
+ for demo in ${S}/GFX_Linux_SDK/OGLES/SDKPackage/Demos/* ; do
+ cd $demo/OGLES/Build/LinuxGeneric
+ oe_runmake Common=1 PLATFORM=$PLATFORM X11BUILD=$X11BUILD
+ rm $demo/OGLES/Build/LinuxOMAP3/Release*/*.o
+ install -m 0755 $demo/OGLES/Build/LinuxOMAP3/ReleaseX11/* ${S}/demos/x11 || true
+ sed -e s:NAME:$(basename $demo): \
+ -e s:EXEC:${bindir}/SGX/demos/X11/$(basename $demo/OGLES/Build/LinuxOMAP3/ReleaseX11/*): \
+ ${WORKDIR}/sample.desktop > ${WORKDIR}/$(basename $demo).desktop
+ install -m 0755 $demo/OGLES/Build/LinuxOMAP3/ReleaseRaw/* ${S}/demos/raw || true
+ done
+ for demo in ${S}/GFX_Linux_SDK/OGLES2/SDKPackage/Demos/* ; do
+ cd $demo/OGLES2/Build/LinuxGeneric
+ oe_runmake Common=1 PLATFORM=$PLATFORM X11BUILD=$X11BUILD
+ rm $demo/OGLES2/Build/LinuxOMAP3/Release*/*.o
+ install -m 0755 $demo/OGLES2/Build/LinuxOMAP3/ReleaseX11/* ${S}/demos/x11 || true
+ sed -e s:NAME:$(basename $demo): \
+ -e s:EXEC:${bindir}/SGX/demos/X11/$(basename $demo/OGLES2/Build/LinuxOMAP3/ReleaseX11/*): \
+ ${WORKDIR}/sample.desktop > ${WORKDIR}/$(basename $demo).desktop
+ install -m 0755 $demo/OGLES2/Build/LinuxOMAP3/ReleaseRaw/* ${S}/demos/raw || true
+ done
+ done
+
+ mkdir -p ${S}/trainingcourses/raw
+ mkdir -p ${S}/trainingcourses/x11
+
+ # Build OGLES2 Trainingcourses for both Raw and X11
+ for X11BUILD in 0 1 ; do
+ for training in ${S}/GFX_Linux_SDK/OGLES2/SDKPackage/TrainingCourse/* ; do
+ if [ -e $training/OGLES2/Build/LinuxGeneric/Makefile ] ; then
+ cd $training/OGLES2/Build/LinuxGeneric
+ fi
+
+ if [ -e $training/OGLES2/Build/LinuxOMAP3/Makefile ] ; then
+ cd $training/OGLES2/Build/LinuxOMAP3
+ fi
+
+ oe_runmake Common=1 PLATFORM=$PLATFORM X11BUILD=$X11BUILD
+ rm $training/OGLES2/Build/LinuxOMAP3/Release*/*.o
+ install -m 0755 $training/OGLES2/Build/LinuxOMAP3/ReleaseX11/* ${S}/trainingcourses/x11 || true
+ install -m 0755 $training/OGLES2/Build/LinuxOMAP3/ReleaseRaw/* ${S}/trainingcourses/raw || true
+ done
+ done
+
}
do_install () {
-
install -d ${D}${libdir}
- cp -pP ${BINLOCATION}/*.so* ${D}${libdir}
+ cp -pPR ${BINLOCATION}/*.so* ${D}${libdir}
+ install -m 0644 ${BINLOCATION}/*.a ${D}${libdir}
install -d ${D}${bindir}/
install -m 0755 ${WORKDIR}/cputype ${D}${bindir}/
- cp -pP ${BINLOCATION}/*_test ${D}${bindir}/
- cp -pP ${BINLOCATION}/gl* ${D}${bindir}/
- cp -pP ${BINLOCATION}/p[dv]* ${D}${bindir}/
- cp -pP ${BINLOCATION}/xgles1test1 ${D}${bindir}/
+ install -m 0755 ${BINLOCATION}/*_test ${D}${bindir}/
+ install -m 0755 ${BINLOCATION}/gl* ${D}${bindir}/
+ install -m 0755 ${BINLOCATION}/p[dv]* ${D}${bindir}/
+ install -m 0755 ${BINLOCATION}/xgles1test1 ${D}${bindir}/
- cp -pP ${BINLOCATION}/freedesktop/kdrive/usr/X11R6_SGX/bin/Xsgx ${D}${bindir}/|| true
+ install -m 0755 ${BINLOCATION}/freedesktop/kdrive/usr/X11R6_SGX/bin/Xsgx ${D}${bindir}/|| true
install -d ${D}${includedir}
+ cp -pPR ${S}/GFX_Linux_KM/include4 ${D}${includedir}/
+ cp -pPR ${S}/GFX_Linux_KM/services4 ${D}${includedir}/
+
cp -pPR ${S}/GFX_Linux_SDK/OGLES2/SDKPackage/Builds/OGLES2/Include/* ${D}${includedir}/
cp -pPR ${S}/GFX_Linux_SDK/OGLES/SDKPackage/Builds/OGLES/Include/* ${D}${includedir}/
cp -pPR ${S}/GFX_Linux_SDK/OGLES/SDKPackage/Builds/OGLES/LinuxOMAP3/Include/GLES/* ${D}${includedir}/GLES/ || true
@@ -118,36 +155,84 @@ do_install () {
echo "[default]" > ${D}${sysconfdir}/powervr.ini
echo "WindowSystem=libpvrPVR2D_FRONTWSEGL.so" >> ${D}${sysconfdir}/powervr.ini
- install -d ${D}${prefix}/demos/OGLES/
- cp -pPR ${S}/GFX_Linux_SDK/OGLES/SDKPackage/Binaries/CommonX11/Demos/* ${D}${prefix}/demos/OGLES/
+ # The ES2.x and ES3.x CPUs have different SGX hardware, so we need to install 2 sets of userspace
+
+ install -d ${D}${libdir}/ES3.0
+ install -d ${D}${libdir}/ES2.0
+ install -d ${D}${bindir}/ES3.0
+ install -d ${D}${bindir}/ES2.0
- install -d ${D}${prefix}/demos/OGLES2
- cp -pPR ${S}/GFX_Linux_SDK/OGLES2/SDKPackage/Binaries/X11/Demos/* ${D}${prefix}/demos/OGLES2
+ cp -pPR ${S}/gfx_rel_es2.x/lib* ${D}${libdir}/ES2.0/
+ cp ${S}/gfx_rel_es2.x//p[dv]* ${D}${bindir}/ES2.0/
+
+ cp -pPR ${D}${libdir}/lib*${IMGPV} ${D}${libdir}/ES3.0/
+ cp ${D}${bindir}/p[dv]* ${D}${bindir}/ES3.0
install -d ${D}${prefix}/share/applications
- cp -pPR ${WORKDIR}/*.desktop ${D}${prefix}/share/applications
+ cp ${WORKDIR}/*.desktop ${D}${prefix}/share/applications
+ rm ${D}${prefix}/share/applications/sample.desktop
+
+ install -d ${D}${bindir}/SGX/demos/X11/
+ install -d ${D}${bindir}/SGX/demos/Raw/
+ install -m 0755 ${S}/demos/x11/* ${D}${bindir}/SGX/demos/X11/
+ install -m 0755 ${S}/demos/raw/* ${D}${bindir}/SGX/demos/Raw/
+
+ install -d ${D}${bindir}/SGX/trainingcourses/Raw
+ install -d ${D}${bindir}/SGX/trainingcourses/X11
+ install -m 0755 ${S}/trainingcourses/x11/* ${D}${bindir}/SGX/trainingcourses/X11/
+ install -m 0755 ${S}/trainingcourses/raw/* ${D}${bindir}/SGX/trainingcourses/Raw/
+
+ # Delete objects and linker scripts hidden between the headers
+ find ${D} -name "*.o" -delete
+ find ${D} -name "*.o.cmd" -delete
}
-do_stage () {
- install -d ${STAGING_LIBDIR}/
- cp -pP ${BINLOCATION}/*.so* ${STAGING_LIBDIR}
- cp -pP ${BINLOCATION}/*.a ${STAGING_LIBDIR}
-
- install -d ${STAGING_INCDIR}
- cp -pPR ${S}/GFX_Linux_KM/include4 ${STAGING_INCDIR}/
- cp -pPR ${S}/GFX_Linux_KM/services4 ${STAGING_INCDIR}/
-
- cp -pPR ${S}/GFX_Linux_SDK/OGLES2/SDKPackage/Builds/OGLES2/Include/* ${STAGING_INCDIR}/
- cp -pPR ${S}/GFX_Linux_SDK/OGLES/SDKPackage/Builds/OGLES/Include/* ${STAGING_INCDIR}/
- cp -pPR ${S}/GFX_Linux_SDK/OGLES/SDKPackage/Builds/OGLES/LinuxOMAP3/Include/GLES/* ${STAGING_INCDIR}/GLES/ || true
- cp -pPr ${S}/GFX_Linux_SDK/OGLES2/SDKPackage/Builds/OGLES2/LinuxOMAP3/Include/GLES/* ${STAGING_INCDIR}/GLES2/ || true
- cp -pPr ${S}/include/*.h ${STAGING_INCDIR} || true
- cp -pPr ${S}/GFX_Linux_SDK/OVG/SDKPackage/Builds/OVG/Include/v* ${STAGING_INCDIR}/ || true
- cp -pPr ${S}/GFX_Linux_SDK/OVG/SDKPackage/Builds/OVG/Include/V* ${STAGING_INCDIR}/ || true
-}
+PACKAGES =+ "${PN}-rawdemos \
+ ${PN}-x11demos \
+ ${PN}-rawtrainingcourses \
+ ${PN}-x11trainingcourses \
+"
+
+PACKAGES += "xserver-kdrive-powervrsgx \
+ ${PN}-tests "
+
+FILES_${PN} = "${sysconfdir} ${libdir}/lib*.so.* ${libdir}/ES*/* ${bindir}/pvrsrvinit ${bindir}/cputype ${bindir}/*/*"
+FILES_xserver-kdrive-powervrsgx = "${bindir}/Xsgx"
+FILES_${PN}-tests = "${bindir}/*"
+FILES_${PN}-dbg = "${libdir}/.debug/* ${bindir}/.debug/* \
+ ${libdir}/ES*/.debug ${bindir}/*/.debug\
+ ${bindir}/SGX/demos/*/.debug/* \
+ ${bindir}/SGX/trainingcourses/*/.debug/* \
+ "
+
+FILES_${PN}-rawdemos = "${bindir}/SGX/demos/Raw/*"
+FILES_${PN}-x11demos = "${bindir}/SGX/demos/X11/* ${prefix}/share/applications "
+
+FILES_${PN}-rawtrainingcourses = "${bindir}/SGX/trainingcourses/Raw/*"
+FILES_${PN}-x11trainingcourses = "${bindir}/SGX/trainingcourses/X11/*"
+
+# The libs need the kernel-modules
+RRECOMMENDS_${PN} = "omap3-sgx-modules"
+
+# The initscript calls fbset, cputype calls devmem2
+RDEPENDS_${PN} += "fbset devmem2"
+
+#HACK! These are binaries, so we can't guarantee that LDFLAGS match :(
+INSANE_SKIP_${PN} = True
+INSANE_SKIP_${PN}-tests = True
+INSANE_SKIP_xserver-kdrive-powervrsgx = True
+
+# Quality control is really poor on these SDKs, so hack around the latest madness:
+FILES_${PN} += "${libdir}/*.so "
+FILES_${PN}-dev = "${includedir}"
+
+inherit update-rc.d
+
+INITSCRIPT_NAME = "pvr-init"
+INITSCRIPT_PARAMS = "start 30 5 2 . stop 40 0 1 6 ."
-pkg_postinst() {
-#!/bin/sh
+# Append to update-rc.d postinst
+pkg_postinst_${PN}_append() {
ln -sf /usr/lib/libXdmcp.so.6.0.0 /usr/lib/libXdmcp.so.0
ln -sf /usr/lib/libXau.so.6.0.0 /usr/lib/libXau.so.0
}
diff --git a/recipes/powervr-drivers/libgles-omap3/chameleonman.desktop b/recipes/powervr-drivers/libgles-omap3/chameleonman.desktop
deleted file mode 100644
index 23d4fc0b7d..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/chameleonman.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=ChameleonMan Demo
-Comment=OGLES Demo
-Exec=/usr/demos/OGLES/ChameleonMan/OGLESChameleonMan
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/evilskull.desktop b/recipes/powervr-drivers/libgles-omap3/evilskull.desktop
deleted file mode 100644
index 0590f7f7ff..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/evilskull.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=EvilSkull Demo
-Comment=OGLES Demo
-Exec=/usr/demos/OGLES/EvilSkull/OGLESEvilSkull
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/fivespheres.desktop b/recipes/powervr-drivers/libgles-omap3/fivespheres.desktop
deleted file mode 100644
index 569cad693c..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/fivespheres.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=FiveSpheres Demo
-Comment=OGLES Demo
-Exec=/usr/demos/OGLES/FiveSpheres/OGLESFiveSpheres
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/lighting.desktop b/recipes/powervr-drivers/libgles-omap3/lighting.desktop
deleted file mode 100644
index 39179b2408..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/lighting.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=Lighting Demo
-Comment=OGLES Demo
-Exec=/usr/demos/OGLES/Lighting/OGLESLighting
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/mouse.desktop b/recipes/powervr-drivers/libgles-omap3/mouse.desktop
deleted file mode 100644
index a56531014c..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/mouse.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=Mouse Demo
-Comment=OGLES Demo
-Exec=/usr/demos/OGLES/Mouse/OGLESMouse
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/optimizemesh.desktop b/recipes/powervr-drivers/libgles-omap3/optimizemesh.desktop
deleted file mode 100644
index 9d7194a586..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/optimizemesh.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=OptimizeMesh Demo
-Comment=OGLES Demo
-Exec=/usr/demos/OGLES/OptimizeMesh/OGLESOptimizeMesh
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/particles.desktop b/recipes/powervr-drivers/libgles-omap3/particles.desktop
deleted file mode 100644
index 1d71b9d25c..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/particles.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=Particles Demo
-Comment=OGLES Demo
-Exec=/usr/demos/OGLES/Particles/OGLESParticles
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/polybump.desktop b/recipes/powervr-drivers/libgles-omap3/polybump.desktop
deleted file mode 100644
index d7cf1af8bd..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/polybump.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=PolyBump Demo
-Comment=OGLES Demo
-Exec=/usr/demos/OGLES/PolyBump/OGLESPolyBump
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/rc.pvr b/recipes/powervr-drivers/libgles-omap3/rc.pvr
index 4a698da60d..b0b9043b82 100755
--- a/recipes/powervr-drivers/libgles-omap3/rc.pvr
+++ b/recipes/powervr-drivers/libgles-omap3/rc.pvr
@@ -1,17 +1,44 @@
#!/bin/sh
+PATH=$PATH:/usr/sbin
+
+BITSPERPIXEL="$(fbset | grep geom | awk '{print $6}')"
+YRES="$(fbset | grep geom | awk '{print $3}')"
CPUTYPE="$(cputype)"
-if [ $CPUTYPE = "OMAP3530" ]; then
+if [ "$1" = "" ]; then
+ echo PVR-INIT: Please use start, stop, or restart.
+ exit 1
+fi
- rmmod omaplfb
- rmmod pvrsrvkm
+if [ "$1" = "stop" -o "$1" = "restart" ]; then
+ echo Stopping PVR
+ #rmmod bc_example
+ rmmod omaplfb 2>/dev/null
+ rmmod pvrsrvkm 2>/dev/null
+fi
- insmod $(busybox find /lib/modules/$(uname -r) -name "pvrsrvkm.ko")
+if [ "$1" = "stop" ]; then
+ exit 0
+fi
+
+# Set RGBA ordering to something the drivers like
+if [ "$BITSPERPIXEL" = "32" ] ; then
+ fbset -rgba 8/16,8/8,8/0,8/24
+fi
+
+# Try to enable triple buffering when there's enough VRAM
+fbset -vyres $(expr $YRES \* 3)
+if [ $CPUTYPE = "OMAP3530" ]; then
+ echo Starting PVR
+ insmod $(busybox find /lib/modules/$(uname -r) -name "pvrsrvkm.ko")
+ #modprobe bc_example
modprobe omaplfb
+ modprobe bufferclass_ti
pvr_maj=`grep "pvrsrvkm$" /proc/devices | cut -b1,2,3`
+ bc_maj=`grep "bc" /proc/devices | cut -b1,2,3`
if [ -e /dev/pvrsrvkm ] ; then
rm -f /dev/pvrsrvkm
@@ -20,11 +47,28 @@ if [ $CPUTYPE = "OMAP3530" ]; then
mknod /dev/pvrsrvkm c $pvr_maj 0
chmod 666 /dev/pvrsrvkm
- /usr/bin/pvrsrvinit
+ mknod /dev/bc_cat c $bc_maj 0
+ chmod 666 /dev/bc_cat
+
+ touch /etc/powervr-esrev
+
+ SAVED_ESREVISION="$(cat /etc/powervr-esrev)"
- # Set SGX to full speed
- devmem2 0x48004b40 w 0
+ devmem2 0x48004B48 w 0x2 > /dev/null
+ devmem2 0x48004B10 w 0x1 > /dev/null
+ devmem2 0x48004B00 w 0x2 > /dev/null
+
+ ES_REVISION="$(devmem2 0x50000014 | sed -e s:0x10205:5: -e s:0x10201:3: -e s:0x10003:2: | tail -n1 | awk -F': ' '{print $2}')"
+
+ if [ "${ES_REVISION}" != "${SAVED_ESREVISION}" ] ; then
+ echo -n "Starting SGX fixup for"
+ echo " ES${ES_REVISION}.x"
+ cp -a /usr/lib/ES${ES_REVISION}.0/* /usr/lib
+ cp -a /usr/bin/ES${ES_REVISION}.0/* /usr/bin
+ echo "${ES_REVISION}" > /etc/powervr-esrev
+ fi
+ /usr/bin/pvrsrvinit
else
- echo No SGX hardware, not starting pvrsinit
+ echo No SGX hardware, not starting PVR
fi
diff --git a/recipes/powervr-drivers/libgles-omap3/sample.desktop b/recipes/powervr-drivers/libgles-omap3/sample.desktop
new file mode 100644
index 0000000000..6bacac9277
--- /dev/null
+++ b/recipes/powervr-drivers/libgles-omap3/sample.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=NAME Demo
+Comment=OGLES Demo
+Exec=EXEC
+Icon=star
+Type=Application
+Categories=Graphics;
+
diff --git a/recipes/powervr-drivers/libgles-omap3/shaders.desktop b/recipes/powervr-drivers/libgles-omap3/shaders.desktop
deleted file mode 100644
index bee8c92fb9..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/shaders.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=Shaders Demo
-Comment=OGLES2 Demo
-Exec=/usr/demos/OGLES2/Shaders/OGLES2Shaders
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/shadowtechniques.desktop b/recipes/powervr-drivers/libgles-omap3/shadowtechniques.desktop
deleted file mode 100644
index 0f228d5d27..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/shadowtechniques.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=ShadowTechniques Demo
-Comment=OGLES Demo
-Exec=/usr/demos/OGLES/ShadowTechniques/OGLESShadowTechniques
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/skybox.desktop b/recipes/powervr-drivers/libgles-omap3/skybox.desktop
deleted file mode 100644
index 69a7f9418b..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/skybox.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=Skybox Demo
-Comment=OGLES Demo
-Exec=/usr/demos/OGLES/Skybox/OGLESSkybox
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/skybox2.desktop b/recipes/powervr-drivers/libgles-omap3/skybox2.desktop
deleted file mode 100644
index a2b02f72f6..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/skybox2.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=Skybox2 Demo
-Comment=OGLES2 Demo
-Exec=/usr/demos/OGLES2/Skybox2/OGLES2Skybox2
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/trilinear.desktop b/recipes/powervr-drivers/libgles-omap3/trilinear.desktop
deleted file mode 100644
index 3e105ac182..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/trilinear.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=Trilinear Demo
-Comment=OGLES Demo
-Exec=/usr/demos/OGLES/Trilinear/OGLESTrilinear
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/userclipplanes.desktop b/recipes/powervr-drivers/libgles-omap3/userclipplanes.desktop
deleted file mode 100644
index 9bad690555..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/userclipplanes.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=UserClipPlanes Demo
-Comment=OGLES Demo
-Exec=/usr/demos/OGLES/UserClipPlanes/OGLESUserClipPlanes
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3/vase.desktop b/recipes/powervr-drivers/libgles-omap3/vase.desktop
deleted file mode 100644
index 06064349d6..0000000000
--- a/recipes/powervr-drivers/libgles-omap3/vase.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Name=Vase Demo
-Comment=OGLES Demo
-Exec=/usr/demos/OGLES/Vase/OGLESVase
-Icon=star
-Type=Application
-Categories=Demos;
-
diff --git a/recipes/powervr-drivers/libgles-omap3_3.00.00.01.bb b/recipes/powervr-drivers/libgles-omap3_3.00.00.01.bb
deleted file mode 100644
index 1f7adfe980..0000000000
--- a/recipes/powervr-drivers/libgles-omap3_3.00.00.01.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require libgles-omap3.inc
-
-SGXPV = "3_00_00_01"
-
-PR = "r7"
-
-# Quality control is really poor on these SDKs, so hack around the latest madness:
-FILES_${PN} += "${libdir}/*.so"
-FILES_${PN}-dev = "${includedir}"
-
diff --git a/recipes/powervr-drivers/libgles-omap3_3.00.00.05.bb b/recipes/powervr-drivers/libgles-omap3_3.00.00.05.bb
deleted file mode 100644
index 814ca04637..0000000000
--- a/recipes/powervr-drivers/libgles-omap3_3.00.00.05.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require libgles-omap3.inc
-
-# Not released yet
-DEFAULT_PREFERENCE = "-1"
-PR = "r3"
-
-SGXPV = "3_00_00_05"
-IMGPV = "1.2.12.838"
-
-# Quality control is really poor on these SDKs, so hack around the latest madness:
-FILES_${PN} += "${libdir}/*.so"
-FILES_${PN}-dev = "${includedir}"
diff --git a/recipes/powervr-drivers/libgles-omap3_3.00.00.06.bb b/recipes/powervr-drivers/libgles-omap3_3.00.00.06.bb
deleted file mode 100644
index cc8ddca0f5..0000000000
--- a/recipes/powervr-drivers/libgles-omap3_3.00.00.06.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-require libgles-omap3.inc
-
-# Not released yet
-#DEFAULT_PREFERENCE = "-1"
-PR = "r7"
-
-SGXPV = "3_00_00_06"
-IMGPV = "1.3.13.1397"
-
-do_accept_license() {
- export HOME="${WORKDIR}"
- echo "Y
-q
-Y
-${S}" | ${WORKDIR}/OMAP35x_Graphics_SDK_setuplinux_${SGXPV}.bin
-}
-
-# Quality control is really poor on these SDKs, so hack around the latest madness:
-FILES_${PN} += "${libdir}/*.so"
-FILES_${PN}-dev = "${includedir}"
-
diff --git a/recipes/powervr-drivers/libgles-omap3_3.00.00.08.bb b/recipes/powervr-drivers/libgles-omap3_3.00.00.08.bb
deleted file mode 100644
index 2256c5b032..0000000000
--- a/recipes/powervr-drivers/libgles-omap3_3.00.00.08.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require libgles-omap3.inc
-
-DEFAULT_PREFERENCE = "1"
-
-SGXPV = "3_00_00_08"
-IMGPV = "1.3.13.1607"
-BINFILE := "OMAP35x_Graphics_SDK_setuplinux_${SGXPV}.bin"
-
-# Quality control is really poor on these SDKs, so hack around the latest madness:
-FILES_${PN} += "${libdir}/*.so"
-FILES_${PN}-dev = "${includedir}"
-
diff --git a/recipes/powervr-drivers/libgles-omap3_3.00.00.09.bb b/recipes/powervr-drivers/libgles-omap3_3.00.00.09.bb
deleted file mode 100644
index 8b51813389..0000000000
--- a/recipes/powervr-drivers/libgles-omap3_3.00.00.09.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-require libgles-omap3.inc
-
-DEFAULT_PREFERENCE = "1"
-# download required binary distribution from:
-# http://software-dl.ti.com/dsps/forms/export.html?prod_no=/OMAP35x_Graphics_SDK_setuplinux_3_00_00_09.bin
-
-PR = "r2"
-
-SGXPV = "3_00_00_09"
-IMGPV = "1.3.13.1832"
-BINFILE := "OMAP35x_Graphics_SDK_setuplinux_${SGXPV}.bin"
-
-# The ES2.x and ES3.x CPUs have different SGX hardware, so we need to install 2 sets of userspace
-do_install_append() {
- install -d ${D}${libdir}/ES3.0
- install -d ${D}${libdir}/ES2.0
- install -d ${D}${bindir}/ES3.0
- install -d ${D}${bindir}/ES2.0
-
- cp ${S}/gfx_rel_es2.x/lib* ${D}${libdir}/ES2.0/
- cp ${S}/gfx_rel_es2.x/p[dv]* ${D}${bindir}/ES2.0/
-
- cp ${D}${libdir}/lib*${IMGPV} ${D}${libdir}/ES3.0/
- cp ${D}${bindir}/p[dv]* ${D}${bindir}/ES3.0
-}
-
-# Quality control is really poor on these SDKs, so hack around the latest madness:
-FILES_${PN} += "${libdir}/*.so"
-FILES_${PN}-dev = "${includedir}"
-
diff --git a/recipes/powervr-drivers/libgles-omap3_3.01.00.02.bb b/recipes/powervr-drivers/libgles-omap3_3.01.00.02.bb
index 532f7bb40c..725e8bb5b9 100644
--- a/recipes/powervr-drivers/libgles-omap3_3.01.00.02.bb
+++ b/recipes/powervr-drivers/libgles-omap3_3.01.00.02.bb
@@ -1,9 +1,9 @@
BINLOCATION = "${S}/gfx_rel_es3.x"
-DEFAULT_PREFERENCE = "2"
-
require libgles-omap3.inc
+PR = "r6"
+
# download required binary distribution from:
# http://software-dl.ti.com/dsps/forms/export.html?prod_no=/OMAP35x_Graphics_SDK_setuplinux_3_01_00_02.bin
@@ -11,21 +11,8 @@ SGXPV = "3_01_00_02"
IMGPV = "1.4.14.2514"
BINFILE := "OMAP35x_Graphics_SDK_setuplinux_${SGXPV}.bin"
-# The ES2.x and ES3.x CPUs have different SGX hardware, so we need to install 2 sets of userspace
-do_install_append() {
- install -d ${D}${libdir}/ES3.0
- install -d ${D}${libdir}/ES2.0
- install -d ${D}${bindir}/ES3.0
- install -d ${D}${bindir}/ES2.0
- cp ${S}/gfx_rel_es2.x/lib* ${D}${libdir}/ES2.0/
- cp ${S}/gfx_rel_es2.x//p[dv]* ${D}${bindir}/ES2.0/
- cp ${D}${libdir}/lib*${IMGPV} ${D}${libdir}/ES3.0/
- cp ${D}${bindir}/p[dv]* ${D}${bindir}/ES3.0
-}
-# Quality control is really poor on these SDKs, so hack around the latest madness:
-FILES_${PN} += "${libdir}/*.so "
-FILES_${PN}-dev = "${includedir}"
+
diff --git a/recipes/powervr-drivers/omap3-sgx-modules/0001-Compile-fixes-for-DSS2.patch b/recipes/powervr-drivers/omap3-sgx-modules/0001-Compile-fixes-for-DSS2.patch
deleted file mode 100644
index 7dbf4d9e6e..0000000000
--- a/recipes/powervr-drivers/omap3-sgx-modules/0001-Compile-fixes-for-DSS2.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-From 8b6a6bb6702ab796ab56dbbd6caa1b271ed4485b Mon Sep 17 00:00:00 2001
-From: Tomi Valkeinen <tomi.valkeinen@nokia.com>
-Date: Fri, 9 Jan 2009 12:40:28 +0200
-Subject: [PATCH] Compile fixes for DSS2
-
----
- .../dc_omap3430_linux/omaplfb_displayclass.c | 6 ++++--
- .../3rdparty/dc_omap3430_linux/omaplfb_linux.c | 14 ++++----------
- 2 files changed, 8 insertions(+), 12 deletions(-)
-
-diff --git a/services4/3rdparty/dc_omap3430_linux/omaplfb_displayclass.c b/services4/3rdparty/dc_omap3430_linux/omaplfb_displayclass.c
-index 7b8ec37..6fde397 100755
---- a/services4/3rdparty/dc_omap3430_linux/omaplfb_displayclass.c
-+++ b/services4/3rdparty/dc_omap3430_linux/omaplfb_displayclass.c
-@@ -57,8 +57,6 @@ PVRSRV_ERROR OMAPLFBPostPower (IMG_HANDLE hDevHandle,
- PVR_POWER_STATE eCurrentPowerState);
- #endif
-
--extern void omap_dispc_set_plane_base(int plane, IMG_UINT32 phys_addr);
--
- static PFN_DC_GET_PVRJTABLE pfnGetPVRJTable = IMG_NULL;
-
- static OMAPLFB_DEVINFO * GetAnchorPtr(IMG_VOID)
-@@ -124,6 +122,9 @@ static void WorkHandler(
- static PVRSRV_ERROR Flip(OMAPLFB_SWAPCHAIN *psSwapChain,
- IMG_UINT32 aPhyAddr)
- {
-+ printk("no flipping\n");
-+ return PVRSRV_OK;
-+#if 0
- if (1 /* omap2_disp_get_output_dev(OMAP2_GRAPHICS) == OMAP2_OUTPUT_LCD */)
- {
- omap_dispc_set_plane_base(0, aPhyAddr);
-@@ -137,6 +138,7 @@ static PVRSRV_ERROR Flip(OMAPLFB_SWAPCHAIN *psSwapChain,
- }
-
- return PVRSRV_ERROR_INVALID_PARAMS;
-+#endif
- }
-
- static IMG_VOID EnableVSyncInterrupt(OMAPLFB_SWAPCHAIN *psSwapChain)
-diff --git a/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c b/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c
-index acf1631..12f3e32 100755
---- a/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c
-+++ b/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c
-@@ -37,6 +37,7 @@
- #include <linux/slab.h>
- #include <linux/errno.h>
- #include <linux/interrupt.h>
-+#include <mach/display.h>
-
- #include <asm/io.h>
-
-@@ -52,10 +53,6 @@ MODULE_LICENSE("GPL");
- MODULE_SUPPORTED_DEVICE(DRVNAME);
-
-
--extern int omap_dispc_request_irq(unsigned long, void (*)(void *), void *);
--extern void omap_dispc_free_irq(unsigned long, void (*)(void *), void *);
--
--
- #define unref__ __attribute__ ((unused))
-
-
-@@ -101,17 +98,14 @@ PVRSRV_ERROR OMAPLFBGetLibFuncAddr (IMG_CHAR *szFunctionName, PFN_DC_GET_PVRJTAB
- }
-
- static void
--OMAPLFBVSyncISR(void *arg)
-+OMAPLFBVSyncISR(void *arg, u32 mask)
- {
- (void) OMAPLFBVSyncIHandler((OMAPLFB_SWAPCHAIN *)arg);
- }
-
--#define DISPC_IRQ_VSYNC 0x0002
--
- PVRSRV_ERROR OMAPLFBInstallVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain)
- {
--
-- if (omap_dispc_request_irq(DISPC_IRQ_VSYNC, OMAPLFBVSyncISR, psSwapChain) != 0)
-+ if (omap_dispc_register_isr(OMAPLFBVSyncISR, psSwapChain, DISPC_IRQ_VSYNC) != 0)
- return PVRSRV_ERROR_OUT_OF_MEMORY; /* not worth a proper mapping */
-
- return PVRSRV_OK;
-@@ -120,7 +114,7 @@ PVRSRV_ERROR OMAPLFBInstallVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain)
-
- PVRSRV_ERROR OMAPLFBUninstallVSyncISR (OMAPLFB_SWAPCHAIN *psSwapChain)
- {
-- omap_dispc_free_irq(DISPC_IRQ_VSYNC, OMAPLFBVSyncISR, psSwapChain);
-+ omap_dispc_unregister_isr(OMAPLFBVSyncISR);
-
- return PVRSRV_OK;
- }
---
-1.5.6.3
-
diff --git a/recipes/powervr-drivers/omap3-sgx-modules/0001-New-build-system-for-SGX.patch b/recipes/powervr-drivers/omap3-sgx-modules/0001-New-build-system-for-SGX.patch
deleted file mode 100644
index 9751bcd88d..0000000000
--- a/recipes/powervr-drivers/omap3-sgx-modules/0001-New-build-system-for-SGX.patch
+++ /dev/null
@@ -1,247 +0,0 @@
-From 36065340e13e6888e7399a1e5b5b11045e8474c6 Mon Sep 17 00:00:00 2001
-From: Tomba <tomba@bat.org>
-Date: Sun, 1 Feb 2009 15:39:15 +0200
-Subject: [PATCH] New build system for SGX
-
----
- Kbuild | 53 ++++++++++
- Makefile | 151 +++++++++++++++++++++++++++
- services4/3rdparty/dc_omap3430_linux/Kbuild | 8 ++
- 3 files changed, 212 insertions(+), 0 deletions(-)
- create mode 100644 Kbuild
- create mode 100644 Makefile
- create mode 100644 services4/3rdparty/dc_omap3430_linux/Kbuild
-
-diff --git a/Kbuild b/Kbuild
-new file mode 100644
-index 0000000..19f9a24
---- /dev/null
-+++ b/Kbuild
-@@ -0,0 +1,53 @@
-+obj-m := pvrsrvkm.o
-+
-+FILES := \
-+services4/srvkm/common/queue.c \
-+services4/srvkm/common/hash.c \
-+services4/srvkm/common/perproc.c \
-+services4/srvkm/common/mem.c \
-+services4/srvkm/common/power.c \
-+services4/srvkm/common/deviceclass.c \
-+services4/srvkm/common/metrics.c \
-+services4/srvkm/common/resman.c \
-+services4/srvkm/common/buffer_manager.c \
-+services4/srvkm/common/pvrsrv.c \
-+services4/srvkm/common/handle.c \
-+services4/srvkm/common/ra.c \
-+services4/srvkm/common/devicemem.c \
-+services4/srvkm/env/linux/pvr_debug.c \
-+services4/srvkm/env/linux/mm.c \
-+services4/srvkm/env/linux/mutex.c \
-+services4/srvkm/env/linux/mmap.c \
-+services4/srvkm/env/linux/module.c \
-+services4/srvkm/env/linux/proc.c \
-+services4/srvkm/env/linux/event.c \
-+services4/srvkm/env/linux/osfunc.c \
-+services4/srvkm/env/linux/pvr_bridge_k.c \
-+services4/srvkm/env/linux/pdump.c \
-+services4/srvkm/devices/sgx/sgxtransfer.c \
-+services4/srvkm/devices/sgx/sgxinit.c \
-+services4/srvkm/devices/sgx/sgxutils.c \
-+services4/srvkm/devices/sgx/pb.c \
-+services4/srvkm/devices/sgx/sgxkick.c \
-+services4/srvkm/devices/sgx/mmu.c \
-+services4/srvkm/devices/sgx/sgxreset.c \
-+services4/srvkm/bridged/bridged_pvr_bridge.c \
-+services4/system/omap3430/sysutils_linux.c \
-+services4/system/omap3430/sysconfig.c
-+
-+EXTRA_CFLAGS += -I$(src)/include4
-+EXTRA_CFLAGS += -I$(src)/services4/include
-+EXTRA_CFLAGS += -I$(src)/services4/srvkm/include
-+EXTRA_CFLAGS += -I$(src)/services4/srvkm/hwdefs
-+EXTRA_CFLAGS += -I$(src)/services4/srvkm/bridged
-+EXTRA_CFLAGS += -I$(src)/services4/srvkm/devices/sgx
-+EXTRA_CFLAGS += -I$(src)/services4/srvkm/env/linux
-+EXTRA_CFLAGS += -I$(src)/services4/system/include
-+EXTRA_CFLAGS += -I$(src)/services4/system/omap3430
-+
-+EXTRA_CFLAGS += $(ALL_CFLAGS)
-+
-+pvrsrvkm-y := $(FILES:.c=.o)
-+
-+obj-y := services4/3rdparty/dc_omap3430_linux/
-+
-diff --git a/Makefile b/Makefile
-new file mode 100644
-index 0000000..74e9761
---- /dev/null
-+++ b/Makefile
-@@ -0,0 +1,151 @@
-+export DISCIMAGE = /tmp/asdada
-+export KERNELDIR = /home/tomba/work/linux
-+
-+export BUILD = debug
-+
-+export KERNELDIR = /home/tomba/work/linux
-+export KBUILD_EXTRA_SYMBOLS = `pwd`/services4/srvkm/env/linux/kbuild/Module.symvers
-+
-+SGXCORE = 530
-+CORE = -DSGX530 -DSUPPORT_SGX530 -DSGX_CORE_REV=103
-+
-+SUPPORT_SGX = 1
-+SUPPORT_HW_RECOVERY = 1
-+SUPPORT_SGX_HWPERF = 1
-+SYS_USING_INTERRUPTS = 1
-+
-+PVR2D_ALT_2DHW = 1
-+
-+LDM_PLATFORM ?= 1
-+
-+# Only enable active power management if passive power management is
-+# enabled, as indicated by LDM_PLATFORM being set to 1. On OMAP,
-+# the system can suspend in the case where active power management is
-+# enabled in the SGX driver, but passive power management isn't. As
-+# passive power management isn't enabled, the driver won't see the
-+# system suspend/resume events, and so won't take appropriate action.
-+ifeq ($(LDM_PLATFORM),1)
-+SUPPORT_ACTIVE_POWER_MANAGEMENT ?= 1
-+else
-+SUPPORT_ACTIVE_POWER_MANAGEMENT = 0
-+endif
-+
-+export PVR_BUILD_DIR := $(shell pwd)
-+
-+DATE := $(shell date "+%a %B %d %Z %Y" )
-+
-+CBUILD = -DPVR_BUILD_DIR="\"$(PVR_BUILD_DIR)\"" \
-+ -DPVR_BUILD_DATE="\"$(DATE)\"" \
-+ -DPVR_BUILD_TYPE="\"$(BUILD)\""
-+
-+# Don't support HW recovery on debug builds
-+CBUILD.debug = -DDEBUG
-+CBUILD.timing = -DTIMING
-+CBUILD.release = -DRELEASE
-+CFLAGS.debug = -g -O0 -DDLL_METRIC=1
-+CFLAGS.timing = $(OPTIM) -g -DDLL_METRIC=1 -DTIMING
-+CFLAGS.release = $(OPTIM) -g
-+CFLAGS = $(CFLAGS.$(BUILD))
-+
-+
-+ifeq ("$(BUILD)", "debug")
-+DEBUG_LINUX_MEMORY_ALLOCATIONS ?= 1
-+DEBUG_LINUX_MEM_AREAS ?= 1
-+DEBUG_LINUX_MMAP_AREAS ?= 1
-+DEBUG_LINUX_XML_PROC_FILES ?= 0
-+DEBUG_LINUX_SLAB_ALLOCATIONS ?= 0
-+DEBUG_BRIDGE_KM ?= 1
-+DEBUG_TRACE_BRIDGE_KM ?= 0
-+DEBUG_BRIDGE_KM_DISPATCH_TABLE ?= 0
-+endif
-+
-+TRANSFER_QUEUE ?= 1
-+SUPPORT_SGX_EVENT_OBJECT ?= 1
-+SUPPORT_SECURE_HANDLES ?= 1
-+SUPPORT_SRVINIT = 1
-+SUPPORT_PERCONTEXT_PB = 1
-+
-+SYS_CFLAGS += -DSERVICES4 -D_XOPEN_SOURCE=600 -DPVR2D_VALIDATE_INPUT_PARAMS
-+
-+# Thread support
-+USE_PTHREADS ?= 1
-+USE_GCC__thread_KEYWORD ?= 0
-+OPTIMISE_NON_NPTL_SINGLE_THREAD_TLS_LOOKUP ?= 0
-+DISABLE_THREADS ?= 0
-+
-+# Automatically define C compiler macros for features possible (or not) in use.
-+
-+SYS_CFLAGS.$(SUPPORT_SRVINIT) += -DSUPPORT_SRVINIT
-+
-+SYS_CFLAGS.$(SUPPORT_SGX) += -DSUPPORT_SGX
-+SYS_CFLAGS.$(SUPPORT_XWS) += -DSUPPORT_XWS
-+SYS_CFLAGS.$(PDUMP) += -DPDUMP
-+SYS_CFLAGS.$(SUPPORT_POWER_MANAGEMENT) += -DSUPPORT_POWER_MANAGEMENT
-+SYS_CFLAGS.$(SUPPORT_BUFFER_CLASS) += -DSUPPORT_BUFFER_CLASS
-+
-+SYS_CFLAGS.$(SUPPORT_PERCONTEXT_PB) += -DSUPPORT_PERCONTEXT_PB
-+SYS_CFLAGS.$(SUPPORT_DYNAMIC_PBRESIZE) += -DSUPPORT_DYNAMIC_PBRESIZE
-+
-+SYS_CFLAGS.$(USE_FBDEV) += -DUSE_FBDEV
-+SYS_CFLAGS.$(USE_FBDEV) += -DFBDEV_NAME="\"$(FBDEV_NAME)\""
-+SYS_CFLAGS.$(SUPPORT_DYNAMIC_3DCLOCKGATING) += -DSUPPORT_DYNAMIC_3DCLOCKGATING
-+SYS_CFLAGS.$(REENTRANCY_PROTECTION) += -DREENTRANCY_PROTECTION
-+SYS_CFLAGS.$(SCHEDULER_CONTROL_SUPPORT) += -DSCHEDULER_CONTROL_SUPPORT
-+SYS_CFLAGS.$(USE_IMG_POWER_DOMAIN_FUNCTION) += -DUSE_IMG_POWER_DOMAIN_FUNCTION
-+
-+SYS_CFLAGS.$(USE_DMALLOC) += -DDMALLOC
-+
-+SYS_CFLAGS.$(DEBUG_LINUX_MEMORY_ALLOCATIONS) += -DDEBUG_LINUX_MEMORY_ALLOCATIONS
-+SYS_CFLAGS.$(DEBUG_LINUX_MEM_AREAS) += -DDEBUG_LINUX_MEM_AREAS
-+SYS_CFLAGS.$(DEBUG_LINUX_MMAP_AREAS) += -DDEBUG_LINUX_MMAP_AREAS
-+SYS_CFLAGS.$(DEBUG_LINUX_XML_PROC_FILES) += -DDEBUG_LINUX_XML_PROC_FILES
-+SYS_CFLAGS.$(DEBUG_LINUX_SLAB_ALLOCATIONS) += -DDEBUG_LINUX_SLAB_ALLOCATIONS
-+SYS_CFLAGS.$(DEBUG_BRIDGE_KM) += -DDEBUG_BRIDGE_KM
-+SYS_CFLAGS.$(DEBUG_TRACE_BRIDGE_KM) += -DDEBUG_TRACE_BRIDGE_KM
-+SYS_CFLAGS.$(DEBUG_BRIDGE_KM_DISPATCH_TABLE) += -DDEBUG_BRIDGE_KM_DISPATCH_TABLE
-+
-+SYS_CFLAGS.$(SUPPORT_LINUX_X86_WRITECOMBINE) += -DSUPPORT_LINUX_X86_WRITECOMBINE
-+
-+SYS_CFLAGS.$(SGX_PDS_EVENTS_DISABLED) += -DSGX_PDS_EVENTS_DISABLED
-+SYS_CFLAGS.$(USE_SUPPORT_NO_TA3D_OVERLAP) += -DUSE_SUPPORT_NO_TA3D_OVERLAP
-+SYS_CFLAGS.$(SUPPORT_SGX_TILING) += -DSUPPORT_SGX_TILING
-+SYS_CFLAGS.$(TRANSFER_QUEUE) += -DTRANSFER_QUEUE
-+
-+SYS_CFLAGS.$(SUPPORT_SGX_MMU_DUMMY_PAGE) += -DSUPPORT_SGX_MMU_DUMMY_PAGE
-+
-+SYS_CFLAGS.$(PVRSRV_USSE_EDM_STATUS_DEBUG) += -DPVRSRV_USSE_EDM_STATUS_DEBUG
-+
-+SYS_CFLAGS.$(SUPPORT_DRI_DRM) += -DSUPPORT_DRI_DRM
-+
-+SYS_CFLAGS.$(SYS_USING_INTERRUPTS) += -DSYS_USING_INTERRUPTS
-+SYS_CFLAGS.$(SUPPORT_HW_RECOVERY) += -DSUPPORT_HW_RECOVERY
-+SYS_CFLAGS.$(SUPPORT_ACTIVE_POWER_MANAGEMENT) += -DSUPPORT_ACTIVE_POWER_MANAGEMENT
-+
-+SYS_CFLAGS.$(SUPPORT_SECURE_HANDLES) += -DPVR_SECURE_HANDLES
-+
-+SYS_CFLAGS.$(USE_PTHREADS) += -DUSE_PTHREADS
-+SYS_CFLAGS.$(USE_GCC__thread_KEYWORD) += -DUSE_GCC__thread_KEYWORD
-+SYS_CFLAGS.$(OPTIMISE_NON_NPTL_SINGLE_THREAD_TLS_LOOKUP) += -DOPTIMISE_NON_NPTL_SINGLE_THREAD_TLS_LOOKUP
-+SYS_CFLAGS.$(DISABLE_THREADS) += -DDISABLE_THREADS
-+SYS_CFLAGS.$(SUPPORT_SGX_EVENT_OBJECT) += -DSUPPORT_SGX_EVENT_OBJECT
-+SYS_CFLAGS.$(LDM_PLATFORM) += -DLDM_PLATFORM
-+SYS_CFLAGS.$(LDM_PCI) += -DLDM_PCI
-+SYS_CFLAGS.$(PVR_MANUAL_POWER_CONTROL) += -DPVR_MANUAL_POWER_CONTROL
-+
-+SYS_CFLAGS.$(PVR2D_ALT_2DHW) += -DPVR2D_ALT_2DHW
-+
-+SYS_CFLAGS.$(SUPPORT_SGX_HWPERF) += -DSUPPORT_SGX_HWPERF
-+
-+export ALL_CFLAGS = -DLINUX \
-+ $(CBUILD) $(CBUILD.$(BUILD)) \
-+ $(SYS_CFLAGS) $(SYS_CFLAGS.1) \
-+ $(MODULE_CFLAGS) $(MODULE_CFLAGS.$(BUILD)) \
-+ $(CORE) \
-+ $(CFLAGS)
-+
-+all:
-+ $(MAKE) -C $(KERNELDIR) M=`pwd` $*
-+
-+clean:
-+ $(MAKE) -C $(KERNELDIR) M=`pwd` clean
-+
-diff --git a/services4/3rdparty/dc_omap3430_linux/Kbuild b/services4/3rdparty/dc_omap3430_linux/Kbuild
-new file mode 100644
-index 0000000..c08b240
---- /dev/null
-+++ b/services4/3rdparty/dc_omap3430_linux/Kbuild
-@@ -0,0 +1,8 @@
-+EXTRA_CFLAGS = -DLINUX \
-+ -I$(PVR_BUILD_DIR)/include4 \
-+ -I$(PVR_BUILD_DIR)/services4/include \
-+ -I$(PVR_BUILD_DIR)/services4/system/$(PVR_SYSTEM) \
-+ -I$(PVR_BUILD_DIR)/services4/system/include \
-+
-+obj-m := omaplfb.o
-+omaplfb-y := omaplfb_displayclass.o omaplfb_linux.o
---
-1.5.6.3
-
diff --git a/recipes/powervr-drivers/omap3-sgx-modules/0002-Compile-fixes-for-DSS2.patch b/recipes/powervr-drivers/omap3-sgx-modules/0002-Compile-fixes-for-DSS2.patch
deleted file mode 100644
index c319ac57a9..0000000000
--- a/recipes/powervr-drivers/omap3-sgx-modules/0002-Compile-fixes-for-DSS2.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c
-+++ b/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c
-@@ -171,7 +171,7 @@
- #if !defined (CONFIG_OMAP2_DSS)
- omap_dispc_free_irq(DISPC_IRQ_VSYNC, OMAPLFBVSyncISR, psSwapChain);
- #else
-- omap_dispc_unregister_isr(OMAPLFBVSyncISR);
-+ omap_dispc_unregister_isr(OMAPLFBVSyncISR, psSwapChain, DISPC_IRQ_VSYNC);
- #endif
- return PVRSRV_OK;
- }
diff --git a/recipes/powervr-drivers/omap3-sgx-modules/build_es3.x_sgx.patch b/recipes/powervr-drivers/omap3-sgx-modules/build_es3.x_sgx.patch
deleted file mode 100644
index 93df6b3da5..0000000000
--- a/recipes/powervr-drivers/omap3-sgx-modules/build_es3.x_sgx.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- /tmp/Makefile 2009-05-04 01:14:25.000000000 +0530
-+++ omap3-sgx-modules-1.3.13.1607/Makefile 2009-05-04 01:14:36.000000000 +0530
-@@ -10,7 +10,7 @@ export BUILD = debug
- export KBUILD_EXTRA_SYMBOLS = `pwd`/services4/srvkm/env/linux/kbuild/Module.symvers
-
- SGXCORE = 530
--CORE = -DSGX530 -DSUPPORT_SGX530 -DSGX_CORE_REV=103
-+CORE = -DSGX530 -DSUPPORT_SGX530 -DSGX_CORE_REV=121
-
- SUPPORT_SGX = 1
- SUPPORT_HW_RECOVERY = 1
diff --git a/recipes/powervr-drivers/omap3-sgx-modules/omap3-sgx-modules-1.3.13.1607.tar.bz2 b/recipes/powervr-drivers/omap3-sgx-modules/omap3-sgx-modules-1.3.13.1607.tar.bz2
deleted file mode 100644
index 5c2fd6a0ab..0000000000
--- a/recipes/powervr-drivers/omap3-sgx-modules/omap3-sgx-modules-1.3.13.1607.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/recipes/powervr-drivers/omap3-sgx-modules/proc-interface.patch b/recipes/powervr-drivers/omap3-sgx-modules/proc-interface.patch
deleted file mode 100755
index 185191f4d8..0000000000
--- a/recipes/powervr-drivers/omap3-sgx-modules/proc-interface.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- ./services4/srvkm/env/linux/proc.c.orig 2009-10-09 13:46:40.000000000 -0500
-+++ ./services4/srvkm/env/linux/proc.c 2009-10-09 13:48:36.000000000 -0500
-@@ -134,7 +134,9 @@
-
- if (file)
- {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)
- file->owner = THIS_MODULE;
-+#endif
- file->read_proc = rhandler;
- file->write_proc = whandler;
- file->data = data;
-@@ -165,7 +167,9 @@
-
- if (file)
- {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)
- file->owner = THIS_MODULE;
-+#endif
-
- return 0;
- }
diff --git a/recipes/powervr-drivers/omap3-sgx-modules/rotation-dss2.patch b/recipes/powervr-drivers/omap3-sgx-modules/rotation-dss2.patch
deleted file mode 100644
index ea4a6a10c6..0000000000
--- a/recipes/powervr-drivers/omap3-sgx-modules/rotation-dss2.patch
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/services4/3rdparty/dc_omap3430_linux/omaplfb_displayclass.c 2009-01-22 17:08:25.000000000 +0530
-+++ b/services4/3rdparty/dc_omap3430_linux/omaplfb_displayclass.c 2009-04-25 16:43:22.000000000 +0530
-@@ -1014,8 +1014,16 @@
- psPVRFBInfo->sSysAddr.uiAddr = psLINFBInfo->fix.smem_start;
- psPVRFBInfo->sCPUVAddr = psLINFBInfo->screen_base;
-
-- psPVRFBInfo->ui32Width = psLINFBInfo->var.xres;
-- psPVRFBInfo->ui32Height = psLINFBInfo->var.yres;
-+ if ((psLINFBInfo->var.rotate == FB_ROTATE_CW)
-+ || (psLINFBInfo->var.rotate == FB_ROTATE_CCW) ) {
-+
-+ psPVRFBInfo->ui32Width = psLINFBInfo->var.yres;
-+ psPVRFBInfo->ui32Height = psLINFBInfo->var.xres;
-+
-+ } else {
-+ psPVRFBInfo->ui32Width = psLINFBInfo->var.xres;
-+ psPVRFBInfo->ui32Height = psLINFBInfo->var.yres;
-+ }
- psPVRFBInfo->ui32ByteStride = psLINFBInfo->fix.line_length;
- psPVRFBInfo->ui32FBSize = FBSize;
- psPVRFBInfo->ui32BufferSize = psPVRFBInfo->ui32Height * psPVRFBInfo->ui32ByteStride;
diff --git a/recipes/powervr-drivers/omap3-sgx-modules/spurious-irq-fix.diff b/recipes/powervr-drivers/omap3-sgx-modules/spurious-irq-fix.diff
deleted file mode 100644
index c857fe713f..0000000000
--- a/recipes/powervr-drivers/omap3-sgx-modules/spurious-irq-fix.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- /tmp/sgxinit.c 2009-02-20 21:24:01.000000000 +0100
-+++ omap3-sgx-modules-1.3.13.1397/services4/srvkm/devices/sgx/sgxinit.c 2009-02-20 21:25:17.000000000 +0100
-@@ -1139,6 +1139,8 @@
-
-
- OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_HOST_CLEAR, ui32EventClear);
-+ //Read back to flush posted write to fix spurious IRQ
-+ OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_HOST_CLEAR);
- }
- }
-
diff --git a/recipes/powervr-drivers/omap3-sgx-modules_1.2.12.838.bb b/recipes/powervr-drivers/omap3-sgx-modules_1.2.12.838.bb
deleted file mode 100644
index 6f57e532f0..0000000000
--- a/recipes/powervr-drivers/omap3-sgx-modules_1.2.12.838.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-DESCRIPTION = "Kernel drivers for the PowerVR SGX chipset found in the omap3 SoCs"
-LICENSE = "GPLv2"
-
-inherit module
-
-SRC_URI = "http://dominion.thruhere.net/koen/OE/omap3-sgx-modules-${PV}.tar.bz2 \
-"
-
-MAKE_TARGETS = "BUILD=debug"
-
-do_compile_prepend() {
- cd ${S}/eurasiacon/build/linux/omap3430_linux/kbuild/
-}
-
-do_install() {
- cd ${S}/eurasiacon/build/linux/omap3430_linux/kbuild/
- mkdir -p ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/gpu/pvr
- cp ${WORKDIR}/${PN}-${PV}/eurasiacon/binary_omap3430_linux_debug/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/gpu/pvr
-}
diff --git a/recipes/powervr-drivers/omap3-sgx-modules_1.3.13.1397.bb b/recipes/powervr-drivers/omap3-sgx-modules_1.3.13.1397.bb
deleted file mode 100644
index 3f9a3cdc75..0000000000
--- a/recipes/powervr-drivers/omap3-sgx-modules_1.3.13.1397.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-DESCRIPTION = "Kernel drivers for the PowerVR SGX chipset found in the omap3 SoCs"
-LICENSE = "GPLv2"
-
-inherit module
-
-SRC_URI = "http://dominion.thruhere.net/koen/OE/omap3-sgx-modules-${PV}.tar.bz2 \
- file://0001-Compile-fixes-for-DSS2.patch;patch=1 \
- file://0001-New-build-system-for-SGX.patch;patch=1 \
- file://spurious-irq-fix.diff;patch=1 \
-"
-
-PVRBUILD = "release"
-
-MAKE_TARGETS = " BUILD=${PVRBUILD}"
-
-do_compile_prepend() {
- find ${S} -name "*.*o" | xargs rm || true
- if [ $(echo ${KERNEL_VERSION} | cut -c5,6) -gt 28 ] ; then
- sed -i -e 's:omap_dispc_unregister_isr(OMAPLFBVSyncISR):omap_dispc_unregister_isr(OMAPLFBVSyncISR, psSwapChain, DISPC_IRQ_VSYNC):g' services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c
- fi
-}
-
-do_install() {
- mkdir -p ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/gpu/pvr
- cp ${S}/pvrsrvkm.ko ${S}/services4/3rdparty/dc_omap3430_linux/omaplfb.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/gpu/pvr
-}
diff --git a/recipes/powervr-drivers/omap3-sgx-modules_1.3.13.1607.bb b/recipes/powervr-drivers/omap3-sgx-modules_1.3.13.1607.bb
deleted file mode 100644
index 603c81f9a4..0000000000
--- a/recipes/powervr-drivers/omap3-sgx-modules_1.3.13.1607.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-DESCRIPTION = "Kernel drivers for the PowerVR SGX chipset found in the omap3 SoCs"
-LICENSE = "GPLv2"
-
-inherit module
-
-SRC_URI = "file://omap3-sgx-modules-${PV}.tar.bz2 \
- file://0002-Compile-fixes-for-DSS2.patch;patch=1 \
- file://rotation-dss2.patch;patch=1 \
- file://build_es3.x_sgx.patch;patch=1 \
- file://proc-interface.patch;patch=1 \
- file://0001-Compile-fixes-for-recent-kernels.patch;patch=1 \
-"
-
-PVRBUILD = "release"
-
-INHIBIT_PACKAGE_STRIP = "1"
-
-MAKE_TARGETS = " BUILD=${PVRBUILD}"
-
-do_install() {
- mkdir -p ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/gpu/pvr
- cp ${S}/pvrsrvkm.ko ${S}/services4/3rdparty/dc_omap3430_linux/omaplfb.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/gpu/pvr
-}
diff --git a/recipes/preboot/linux-preboot.inc b/recipes/preboot/linux-preboot.inc
index 56a90a9723..d8771f8cca 100644
--- a/recipes/preboot/linux-preboot.inc
+++ b/recipes/preboot/linux-preboot.inc
@@ -5,7 +5,6 @@ LOGO_SIZE = '${@base_conditional("GUI_MACHINE_CLASS", "bigscreen", "vga", "qvga"
require ../linux/linux.inc
-DONT_CHECK_KERNELSIZE = ""
INITRAMFS_IMAGE = "initramfs-preboot-image"
# here we set master console on serial
diff --git a/recipes/procps/procps-3.1.15/install.patch b/recipes/procps/procps-3.1.15/install.patch
deleted file mode 100644
index 2d16c26f17..0000000000
--- a/recipes/procps/procps-3.1.15/install.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- procps-3.1.15/Makefile~install 2003-12-24 03:01:55.000000000 +0100
-+++ procps-3.1.15/Makefile 2004-02-11 00:45:59.000000000 +0100
-@@ -147,7 +147,7 @@
- ###### install
-
- $(BINFILES) : all
-- $(install) --mode a=rx --strip $(notdir $@) $@
-+ $(install) --mode a=rx $(notdir $@) $@
-
- $(MANFILES) : all
- $(install) --mode a=r $(notdir $@) $@
diff --git a/recipes/procps/procps-3.1.15/procps_3.1.15-2.diff b/recipes/procps/procps-3.1.15/procps_3.1.15-2.diff
deleted file mode 100644
index 438fd0f664..0000000000
--- a/recipes/procps/procps-3.1.15/procps_3.1.15-2.diff
+++ /dev/null
@@ -1,5133 +0,0 @@
---- procps-3.1.15.orig/proc/library.map
-+++ procps-3.1.15/proc/library.map
-@@ -4,7 +4,7 @@
-
- readproc; readtask; readproctab; readproctab2; look_up_our_self; escape_command;
- escape_str; escape_strlist;
-- openproc; closeproc;
-+ openproc; closeproc; freeproc;
- tty_to_dev; dev_to_tty; open_psdb_message; open_psdb; wchan;
- display_version; procps_version; linux_version_code;
- Hertz; smp_num_cpus;
---- procps-3.1.15.orig/proc/readproc.c
-+++ procps-3.1.15/proc/readproc.c
-@@ -162,7 +162,7 @@
- // examine a field name (hash and compare)
- base:
- if(unlikely(!*S)) break;
-- entry = table[63 & (asso[S[3]] + asso[S[2]] + asso[S[0]])];
-+ entry = table[63 & (asso[(int)S[3]] + asso[(int)S[2]] + asso[(int)S[0]])];
- colon = strchr(S, ':');
- if(unlikely(!colon)) break;
- if(unlikely(colon[1]!='\t')) break;
-@@ -888,6 +888,8 @@
- else
- PT = openproc(flags);
- va_end(ap);
-+ if (!PT)
-+ return 0;
- do { /* read table: */
- tab = xrealloc(tab, (n+1)*sizeof(proc_t*));/* realloc as we go, using */
- tab[n] = readproc_direct(PT, NULL); /* final null to terminate */
---- procps-3.1.15.orig/proc/module.mk
-+++ procps-3.1.15/proc/module.mk
-@@ -3,7 +3,7 @@
- # for lib$(NAME).so and /usr/include/($NAME) and such
- NAME := proc
-
--SHARED := 1
-+SHARED ?= 1
-
- SONAME := lib$(NAME).so.$(LIBVERSION)
-
---- procps-3.1.15.orig/debian/README.Debian
-+++ procps-3.1.15/debian/README.Debian
-@@ -0,0 +1,22 @@
-+README for Debian package of procps
-+===================================
-+
-+XConsole gone
-+-------------
-+ XConsole and other X-based programs have been finally removed. Look in
-+ the x packages for their equivalents.
-+
-+pgrep
-+-----
-+pgrep is a new program, using the Unix standard name for something that
-+greps for processes. If you are looking for Perl compatible regular
-+expression grep, it is called pcregrep.
-+
-+forks
-+-----
-+Procps upstream is forked. This one comes from procps.sf.net I'm really
-+not interested when the others have new versions so please don't bug me about
-+it. However if you see something neat in the others and would like it in
-+the Debian one, report a *wishlist* level bug about it.
-+
-+ Craig Small <csmall@debian.org>
---- procps-3.1.15.orig/debian/copyright
-+++ procps-3.1.15/debian/copyright
-@@ -0,0 +1,27 @@
-+This is the Debian Linux prepackaged version of the /proc file
-+system utilities.
-+
-+This package was downloaded from:
-+ http://procps.sourceforge.net/
-+
-+
-+Upstream Authors:
-+Werner Almesberger <almesber@di.epfl.ch>, Roger Binns, Charles
-+Blake <cblake@ucsd.edu>, Brian Edmonds, David Engel <david@ods.com>,
-+Larry Greenfield <greenfie@gauss.rutgers.edu>, Michael K. Johnson
-+<johnsonm@sunsite.unc.edu>, Branko Lankester <lankeste@fwi.uva.nl>,
-+Robert Nation <nation@rocket.sanders.lockheed.com>, Michael Shields
-+<mjshield@nyx.cs.du.edu>, Henry Ware <al172@yfn.ysu.edu>, Matt
-+Welsh <mdw@sunsite.unc.edu>, Albert D. Cahalan and Jim C. Warner
-+<warnerjc@worldnet.att.net>
-+
-+All programs except ps, skill and snice are copyright by their
-+authors and redistributable under the terms of the GNU General
-+Public License. On Debian Linux systems, the complete text of
-+the GNU General Public License can be found in
-+`/usr/share/common-licenses/GPL'.
-+
-+ps, skill and snice are copyright by their authors and redistributable under
-+the terms of the GNU Library General Public License. On Debian Linux
-+systems, the complete text of the GNU Library General Public License can
-+be found in `/usr/share/common/licenses/LGPL'.
---- procps-3.1.15.orig/debian/dirs
-+++ procps-3.1.15/debian/dirs
-@@ -0,0 +1,12 @@
-+etc
-+lib
-+sbin
-+bin
-+usr/bin
-+usr/sbin
-+usr/lib
-+usr/include/proc
-+usr/share/man/man1
-+usr/share/man/man5
-+usr/share/man/man8
-+
---- procps-3.1.15.orig/debian/docs
-+++ procps-3.1.15/debian/docs
-@@ -0,0 +1,4 @@
-+BUGS
-+TODO
-+README.top
-+
---- procps-3.1.15.orig/debian/examples
-+++ procps-3.1.15/debian/examples
-@@ -0,0 +1,2 @@
-+debian/sysctl.conf
-+
---- procps-3.1.15.orig/debian/libproc-dev.dirs
-+++ procps-3.1.15/debian/libproc-dev.dirs
-@@ -0,0 +1,2 @@
-+usr/lib
-+usr/include/proc
---- procps-3.1.15.orig/debian/menu
-+++ procps-3.1.15/debian/menu
-@@ -0,0 +1 @@
-+?package(procps):needs=text section="Apps/System" title="Top" command="/usr/bin/top" hints="Monitoring"
---- procps-3.1.15.orig/debian/postinst
-+++ procps-3.1.15/debian/postinst
-@@ -0,0 +1,74 @@
-+#!/bin/sh
-+# postinst script for procps
-+#
-+# see: dh_installdeb(1)
-+
-+set -e
-+
-+# summary of how this script can be called:
-+# * <postinst> `configure' <most-recently-configured-version>
-+# * <old-postinst> `abort-upgrade' <new version>
-+# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
-+# <new-version>
-+# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
-+# <failed-install-package> <version> `removing'
-+# <conflicting-package> <version>
-+# for details, see http://www.debian.org/doc/debian-policy/ or
-+# the debian-policy package
-+#
-+# quoting from the policy:
-+# Any necessary prompting should almost always be confined to the
-+# post-installation script, and should be protected with a conditional
-+# so that unnecessary prompting doesn't happen if a package's
-+# installation fails and the `postinst' is called with `abort-upgrade',
-+# `abort-remove' or `abort-deconfigure'.
-+
-+case "$1" in
-+ configure)
-+ if [ -e /etc/psdevtab ] ; then
-+ rm -f /etc/psdevtab
-+ fi
-+ if [ -e /etc/psdatabase ]
-+ then
-+ rm -f /etc/psdatabase
-+ fi
-+ # Remove old /etc/init.d/procps file, Bug #53818
-+ if [ -e /etc/init.d/procps ]
-+ then
-+ rm -f /etc/init.d/procps
-+ fi
-+ # Remove old procps init.d script, if it exists Closes: #55137
-+ if [ -e /etc/rcS.d/S30procps ]
-+ then
-+ update-rc.d procps remove >/dev/null
-+ fi
-+ # and if that didn't work Closes: #92184
-+ if [ -e /etc/rcS.d/S30procps ]
-+ then
-+ rm -f /etc/rcS.d/S30procps
-+ fi
-+ #
-+ # Now to do the alternatives for w and ps
-+ update-alternatives --install /usr/bin/w w /usr/bin/w.procps 50 \
-+ --slave /usr/share/man/man1/w.1.gz w.1.gz /usr/share/man/man1/w.procps.1.gz
-+
-+ ;;
-+
-+ abort-upgrade|abort-remove|abort-deconfigure)
-+
-+ ;;
-+
-+ *)
-+ echo "postinst called with unknown argument \`$1'" >&2
-+ exit 1
-+ ;;
-+esac
-+
-+# dh_installdeb will replace this with shell code automatically
-+# generated by other debhelper scripts.
-+
-+#DEBHELPER#
-+
-+exit 0
-+
-+
---- procps-3.1.15.orig/debian/prerm
-+++ procps-3.1.15/debian/prerm
-@@ -0,0 +1,11 @@
-+#!/bin/sh
-+
-+if [ "$1" != "upgrade" ]
-+then
-+ update-alternatives --remove w /usr/bin/w.procps
-+fi
-+
-+#DEBHELPER#
-+
-+exit 0
-+
---- procps-3.1.15.orig/debian/sysctl.conf
-+++ procps-3.1.15/debian/sysctl.conf
-@@ -0,0 +1,6 @@
-+#
-+# /etc/sysctl.conf - Configuration file for setting system variables
-+# See sysctl.conf (5) for information.
-+#
-+#kernel.domainname = example.com
-+#net/ipv4/icmp_echo_ignore_broadcasts=1
---- procps-3.1.15.orig/debian/watch
-+++ procps-3.1.15/debian/watch
-@@ -0,0 +1,6 @@
-+# Example watch control file for uscan
-+# Rename this file to "watch" and then you can run the "uscan" command
-+# to check for upstream updates and more.
-+# Site Directory Pattern Version Script
-+sunsite.unc.edu /pub/Linux/Incoming procps-*.tar.gz debian uupdate
-+
---- procps-3.1.15.orig/debian/procps.sh
-+++ procps-3.1.15/debian/procps.sh
-@@ -0,0 +1,40 @@
-+#! /bin/sh
-+# /etc/init.d/procps: Set kernel variables from /etc/sysctl.conf
-+#
-+# written by Elrond <Elrond@Wunder-Nett.org>
-+
-+# Check for existance of the default file and exit if not there,
-+# Closes #52839 for the boot-floppy people
-+[ -r /etc/default/rcS ] || exit 0
-+. /etc/default/rcS
-+
-+[ -x /sbin/sysctl ] || exit 0
-+
-+
-+case "$1" in
-+ start|reload|restart|force-reload)
-+ if [ ! -r /etc/sysctl.conf ]
-+ then
-+ exit 0
-+ fi
-+ if [ "$VERBOSE" = "no" ]
-+ then
-+ n="-n"
-+ redir=">/dev/null"
-+ else
-+ echo -n "Setting kernel variables."
-+ n=""
-+ redir=""
-+ fi
-+ eval "/sbin/sysctl $n -p $redir"
-+ echo "."
-+ ;;
-+ stop|show)
-+ ;;
-+ *)
-+ echo "Usage: /etc/init.d/procps.sh {start|stop|reload|restart}" >&2
-+ exit 1
-+ ;;
-+esac
-+
-+
---- procps-3.1.15.orig/debian/procps.manpages
-+++ procps-3.1.15/debian/procps.manpages
-@@ -0,0 +1 @@
-+ps/ps.1
---- procps-3.1.15.orig/debian/compat
-+++ procps-3.1.15/debian/compat
-@@ -0,0 +1 @@
-+4
---- procps-3.1.15.orig/debian/libproc-dev.files
-+++ procps-3.1.15/debian/libproc-dev.files
-@@ -0,0 +1,2 @@
-+usr/include/proc/*.h
-+lib/libproc.so
---- procps-3.1.15.orig/debian/libproc-dev.README
-+++ procps-3.1.15/debian/libproc-dev.README
-@@ -0,0 +1,12 @@
-+README for libproc-dev
-+======================
-+
-+This README is for people who want to use the libraries for their own
-+programs. If you just want to use procps tools you don't need to use this
-+and you can probably remove libproc-dev too.
-+
-+It is generally a bad idea to dynamically link to libproc. The API changes
-+a fair bit and I cannot guarantee that it will stay the same between minor
-+versions (though it will stay the same between Debian versions). I've now
-+re-included the libproc.a file so use that.
-+
---- procps-3.1.15.orig/debian/patches/20_procps-fix+attr.dpatch
-+++ procps-3.1.15/debian/patches/20_procps-fix+attr.dpatch
-@@ -0,0 +1,55 @@
-+#! /bin/sh -e
-+## 20_procps-fix++attr by someone
-+##
-+## All lines beginning with `## DP:' are a description of the patch.
-+## DP: SELINUX Attr value in /proc
-+
-+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
-+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
-+
-+if [ $# -ne 1 ]; then
-+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
-+ exit 1
-+fi
-+case "$1" in
-+ -patch) patch $patch_opts -p1 < $0;;
-+ -unpatch) patch $patch_opts -p1 -R < $0;;
-+ *)
-+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argum
-+ent"
-+ exit 1;;
-+esac
-+
-+exit 0
-+@DPATCH@
-+diff -urN procps-3.1.15/ps/output.c procps-3.1.15.new/ps/output.c
-+--- procps-3.1.15/ps/output.c 2003-12-23 19:46:32.000000000 -0600
-++++ procps-3.1.15.new/ps/output.c 2003-12-24 13:31:16.000000000 -0600
-+@@ -944,7 +944,7 @@
-+
-+ // wchan file is suitable for testing
-+ //snprintf(filename, sizeof filename, "/proc/%d/task/%d/wchan", pp->tgid, pp->tid);
-+- snprintf(filename, sizeof filename, "/proc/%d/task/%d/attr/current", pp->tgid, pp->tid);
-++ snprintf(filename, sizeof filename, "/proc/%d/attr/current", pp->tgid);
-+
-+ fd = open(filename, O_RDONLY, 0);
-+ if(likely(fd==-1)) goto fail;
-+diff -urN procps-3.1.15/ps/parser.c procps-3.1.15.new/ps/parser.c
-+--- procps-3.1.15/ps/parser.c 2003-12-23 17:58:06.000000000 -0600
-++++ procps-3.1.15.new/ps/parser.c 2003-12-24 13:45:08.000000000 -0600
-+@@ -315,12 +315,10 @@
-+ exclusive("-V");
-+ display_version();
-+ exit(0);
-+-#if 0
-+- case 'Z': /* full Mandatory Access Control level info */
-+- trace("-Z shows full MAC info\n");
-+- return "Don't understand MAC on Linux.";
-++ case 'Z':
-++ trace("-Z shows SELinux contexts\n");
-++ format_flags |= FF_Fc;
-+ break;
-+-#endif
-+ case 'a':
-+ trace("-a select all with a tty, but omit session leaders.\n");
-+ simple_select |= SS_U_a;
---- procps-3.1.15.orig/debian/patches/20_ps.1.dpatch
-+++ procps-3.1.15/debian/patches/20_ps.1.dpatch
-@@ -0,0 +1,376 @@
-+#! /bin/sh -e
-+## 20_ps.1.dpatch by Craig Small <csmall@debian.org>
-+##
-+## All lines beginning with `## DP:' are a description of the patch.
-+## DP: Fix ps manual page
-+
-+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
-+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
-+
-+if [ $# -ne 1 ]; then
-+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
-+ exit 1
-+fi
-+case "$1" in
-+ -patch) patch $patch_opts -p1 < $0;;
-+ -unpatch) patch $patch_opts -p1 -R < $0;;
-+ *)
-+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argum
-+ent"
-+ exit 1;;
-+esac
-+
-+exit 0
-+@DPATCH@
-+--- procps-3.1.15/ps/ps.1 2003-12-24 12:59:47.000000000 +1100
-++++ procps-3.1.15.newps/ps.1 2003-12-26 18:05:01.000000000 +1100
-+@@ -1,3 +1,5 @@
-++'\" t
-++.\" (The preceding line is a note to broken versions of man to tell
-+ .\" Man page for ps.
-+ .\" Quick hack conversion by Albert Cahalan, 1998.
-+ .\" Licensed under version 2 of the Gnu General Public License.
-+@@ -10,8 +12,8 @@
-+ .\" invented this crap in 1973. Oh yeah, they did. Sorry.
-+ .\"
-+ .TH PS 1 "July 5, 1998" "Linux" "Linux User's Manual"
-+-.SH \fRNAME\fR
-+-ps \- report process status
-++.SH NAME
-++ps \- report a snapshot of the current processes.
-+ .ad r
-+ .na
-+ .ss 12 0
-+@@ -19,17 +21,17 @@
-+ .nh
-+ .nf
-+
-+-SYNOPSIS
-++.SH SYNOPSIS
-+ ps [options]
-+
-+
-+-DESCRIPTION
-++.SH DESCRIPTION
-+ ps gives a snapshot of the current processes. If you want
-+ a repetitive update of this status, use top. This man
-+ page documents the /proc-based version of ps, or tries to.
-+
-+
-+-COMMAND-LINE OPTIONS
-++.SH "COMMAND-LINE OPTIONS"
-+
-+ This version of ps accepts several kinds of options.
-+
-+@@ -43,7 +45,9 @@
-+ when options are preceeded by a dash. The PS_PERSONALITY environment
-+ variable (described below) provides more detailed control of ps behavior.
-+
-+-SIMPLE PROCESS SELECTION
-++.SH "SIMPLE PROCESS SELECTION"
-++.TS
-++l l.
-+ -A select all processes
-+ -N negate selection
-+ -a select all with a tty except session leaders
-+@@ -55,8 +59,11 @@
-+ r restrict output to running processes
-+ x select processes without controlling ttys
-+ --deselect negate selection
-++.TE
-+
-+-PROCESS SELECTION BY LIST
-++.SH "PROCESS SELECTION BY LIST"
-++.TS
-++l l.
-+ -C select by command name
-+ -G select by RGID (supports names)
-+ -U select by RUID (supports names)
-+@@ -78,8 +85,10 @@
-+ --user select by effective user name or ID
-+ -123 implied --sid
-+ 123 implied --pid
-+-
-+-OUTPUT FORMAT CONTROL
-++.TE
-++.SH "OUTPUT FORMAT CONTROL"
-++.TS
-++l l.
-+ -O is preloaded "-o"
-+ -F extra full format
-+ -c different scheduler info for -l option
-+@@ -98,8 +107,10 @@
-+ v display virtual memory format
-+ --format user-defined format
-+ --context display security context format (NSA SELinux, etc.)
-+-
-+-OUTPUT MODIFIERS
-++.TE
-++.SH "OUTPUT MODIFIERS"
-++.TS
-++l l.
-+ -H show process hierarchy (forest)
-+ -n set namelist file
-+ -w wide output
-+@@ -123,31 +134,40 @@
-+ --rows set screen height
-+ --sort specify sorting order
-+ --width set screen width
-+-
-+-THREAD DISPLAY
-++.TE
-++.SH "THREAD DISPLAY"
-++.TS
-++l l.
-+ -L show threads, possibly with LWP and NLWP columns
-+ -T show threads, possibly with SPID column
-+ -m show threads after processes
-+ H show threads as if they were processes
-+ m show threads after processes
-++.TE
-+
-+-INFORMATION
-++.SH INFORMATION
-++
-++.TS
-++l l.
-+ -V print version
-+ L list all format specifiers
-+ V show version info
-+ --help print help message
-+ --info print debugging info
-+ --version print version
-++.TE
-++
-++.SH OBSOLETE
-+
-+-OBSOLETE
-++.TS
-++l l.
-+ A increases the argument space (DecUnix)
-+ M use alternate core (try -n or N instead)
-+ W get swap info from ... not /dev/drum (try -n or N instead)
-+ k use /vmcore as c-dumpfile (try -n or N instead)
-+-
-+-
-+-
-+-NOTES
-++.TE
-++
-++.SH NOTES
-+
-+ User-defined format options ("o", "-o", "O", and "-O") offer
-+ a way to specify individual output columns. Headers may be
-+@@ -249,14 +269,17 @@
-+ will be destroyed by init(8) if the parent process exits.
-+
-+
-+-PROCESS FLAGS
-+-
-++.SH "PROCESS FLAGS"
-++.TS
-++l l l.
-+ FORKNOEXEC 1 forked but didn't exec
-+ SUPERPRIV 4 used super-user privileges
-++.TE
-+
-++.SH "PROCESS STATE CODES"
-+
-+-PROCESS STATE CODES
-+-
-++.TS
-++l l.
-+ D uninterruptible sleep (usually IO)
-+ R runnable (on run queue)
-+ S sleeping
-+@@ -264,23 +287,30 @@
-+ W paging
-+ X dead
-+ Z a defunct ("zombie") process
-++.TE
-+
-+ For BSD formats and when the "stat" keyword is used, additional
-+ letters may be displayed:
-+
-+-W has no resident pages
-+-< high-priority process
-+-N low-priority task
-+-L has pages locked into memory (for real-time and custom IO)
-++.IP W
-++has no resident pages
-++.IP <
-++high-priority process
-++.IP N
-++low-priority task
-++.IP L
-++has pages locked into memory (for real-time and custom IO)
-+
-+
-+-SORT KEYS
-++.SH "SORT KEYS"
-+
-+ Note that the values used in sorting are the internal values ps uses and not
-+ the `cooked' values used in some of the output format fields. Pipe ps
-+ output into the sort(1) command if you want to sort the cooked values.
-+
-+-KEY LONG DESCRIPTION
-++.TS
-++l l l.
-++\fBKEY LONG DESCRIPTION\fR
-+ c cmd simple name of executable
-+ C cmdline full command line
-+ f flags flags as in long format F field
-+@@ -307,14 +337,15 @@
-+ u user user name
-+ v vsize total VM size in kB
-+ y priority kernel scheduling priority
-++.TE
-+
-+-
-+-AIX FORMAT DESCRIPTORS
-++.SH "AIX FORMAT DESCRIPTORS"
-+
-+ This ps supports AIX format descriptors, which work somewhat like the
-+ formatting codes of printf(1) and printf(3). For example, the normal
-+ default output can be produced with this: ps -eo "%p %y %x %c"
-+-
-++.TS
-++l l l.
-+ CODE NORMAL HEADER
-+ %C pcpu %CPU
-+ %G group GROUP
-+@@ -331,14 +362,16 @@
-+ %x time TIME
-+ %y tty TTY
-+ %z vsz VSZ
-++.TE
-+
-+-
-+-STANDARD FORMAT SPECIFIERS
-++.SH "STANDARD FORMAT SPECIFIERS"
-+
-+ These may be used to control both output format and sorting.
-+ For example: ps -eo pid,user,args --sort user
-+
-+-CODE HEADER
-++.TS
-++l l.
-++\fBCODE HEADER\fR
-+ %cpu %CPU
-+ %mem %MEM
-+ alarm ALARM
-+@@ -459,25 +492,51 @@
-+ vsize VSZ
-+ vsz VSZ
-+ wchan WCHAN
-++.TE
-+
-++.SH "ENVIRONMENT VARIABLES"
-+
-+-
-+-
-+-ENVIRONMENT VARIABLES
-+ The following environment variables could affect ps:
-+- COLUMNS Override default display width.
-+- LINES Override default display height.
-+- PS_PERSONALITY Set to one of posix,old,linux,bsd,sun,digital...
-+- CMD_ENV Set to one of posix,old,linux,bsd,sun,digital...
-+- I_WANT_A_BROKEN_PS Force obsolete command line interpretation.
-+- LC_TIME Date format.
-+- PS_COLORS Not currently supported.
-+- PS_FORMAT Default output format override.
-+- PS_SYSMAP Default namelist (System.map) location.
-+- PS_SYSTEM_MAP Default namelist (System.map) location.
-+- POSIXLY_CORRECT Don't find excuses to ignore bad "features".
-+- UNIX95 Don't find excuses to ignore bad "features".
-+- _XPG Cancel CMD_ENV=irix non-standard behavior.
-++
-++.TP
-++.B COLUMNS
-++Override default display width.
-++.TP
-++.B LINES
-++Override default display height.
-++.TP
-++.B PS_PERSONALITY
-++Set to one of posix,old,linux,bsd,sun,digital...
-++.TP
-++.B CMD_ENV
-++Set to one of posix,old,linux,bsd,sun,digital...
-++.TP
-++.B I_WANT_A_BROKEN_PS
-++Force obsolete command line interpretation.
-++.TP
-++.B LC_TIME
-++Date format.
-++.TP
-++.B PS_COLORS
-++Not currently supported.
-++.TP
-++.B PS_FORMAT
-++Default output format override.
-++.TP
-++.B PS_SYSMAP
-++Default namelist (System.map) location.
-++.TP
-++.B PS_SYSTEM_MAP
-++Default namelist (System.map) location.
-++.TP
-++.B POSIXLY_CORRECT
-++Don't find excuses to ignore bad "features".
-++.TP
-++.B UNIX95
-++Don't find excuses to ignore bad "features".
-++.TP
-++.B _XPG
-++Cancel CMD_ENV=irix non-standard behavior.
-+
-+ In general, it is a bad idea to set these variables. The one exception
-+ is CMD_ENV or PS_PERSONALITY, which could be set to Linux for normal
-+@@ -485,7 +544,9 @@
-+ of the Unix98 standard.
-+
-+
-+-PERSONALITY
-++.SH "PERSONALITY"
-++.TS
-++l l.
-+ 390 like the S/390 OpenEdition ps
-+ aix like AIX ps
-+ bsd like FreeBSD ps (totally non-standard)
-+@@ -507,9 +568,9 @@
-+ unix standard
-+ unix95 standard
-+ unix98 standard
-++.TE
-+
-+-
-+-EXAMPLES
-++.SH "EXAMPLES"
-+ To see every process on the system using standard syntax:
-+ ps -e
-+ To see every process on the system using BSD syntax:
-+@@ -523,13 +584,13 @@
-+ Print only the process IDs of syslogd:
-+ ps -C syslogd -o pid=
-+
-+-SEE ALSO
-+-top(1) pgrep(1) pstree(1) proc(5)
-++.SH "SEE ALSO"
-++.BR top (1), pgrep (1), pstree (1), proc (5).
-+
-+-STANDARDS
-++.SH STANDARDS
-+ This ps conforms to version 2 of the Single Unix Specification.
-+
-+-AUTHOR
-++.SH AUTHOR
-+ ps was originally written by Branko Lankester <lankeste@fwi.uva.nl>. Michael
-+ K. Johnson <johnsonm@redhat.com> re-wrote it significantly to use the proc
-+ filesystem, changing a few things in the process. Michael Shields
-+@@ -541,4 +602,4 @@
-+ <acahalan@cs.uml.edu> rewrote ps for full Unix98 and BSD support, along with
-+ some ugly hacks for obsolete and foreign syntax.
-+
-+-Please send bug reports to <acahalan@cs.uml.edu>
-++Please send bug reports to <procps-feedback@lists.sf.net>.
---- procps-3.1.15.orig/debian/patches/20_top_manpage.dpatch
-+++ procps-3.1.15/debian/patches/20_top_manpage.dpatch
-@@ -0,0 +1,384 @@
-+#! /bin/sh -e
-+## 20_top_manpage by Randy Hron
-+##
-+## All lines beginning with `## DP:' are a description of the patch.
-+## DP: Fix bold in top manual page
-+
-+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
-+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
-+
-+if [ $# -ne 1 ]; then
-+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
-+ exit 1
-+fi
-+case "$1" in
-+ -patch) patch $patch_opts -p1 < $0;;
-+ -unpatch) patch $patch_opts -p1 -R < $0;;
-+ *)
-+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argum
-+ent"
-+ exit 1;;
-+esac
-+
-+exit 0
-+@DPATCH@
-+--- procps/top.1.orig 2003-12-24 15:51:35.000000000 -0500
-++++ procps/top.1 2003-12-24 18:57:14.564156176 -0500
-+@@ -52,7 +52,7 @@
-+ .ds CF configuration file
-+ .ds CI interactive command
-+ .ds CO command\-line option
-+-.ds CW \'current' window
-++.ds CW 'current' window
-+ .ds FM full\-screen mode
-+ .ds MP \fBphysical\fR memory
-+ .ds MS \fBshared\fR memory
-+@@ -370,7 +370,7 @@
-+ The task's share of the elapsed \*(PU time since the last screen update, expressed
-+ as a percentage of total \*(PU time.
-+ In a true SMP environment, if 'Irix mode' is \*F, \*(Me will operate in
-+-\'Solaris mode' where a task's \*(Pu usage will be divided by the total
-++'Solaris mode' where a task's \*(Pu usage will be divided by the total
-+ number of \*(PUs.
-+ You toggle 'Irix/Solaris' modes with the 'I' \*(CI.
-+
-+@@ -498,7 +498,7 @@
-+ .\" ......................................................................
-+ .SS 2b. SELECTING and ORDERING Columns
-+ .\" ----------------------------------------------------------------------
-+-After pressing the \*(CIs 'f' (Fields select) or \'o' (Order fields) you will
-++After pressing the \*(CIs 'f' (Fields select) or 'o' (Order fields) you will
-+ be shown a screen containing the current \fBfields string\fR followed by names
-+ and descriptions for all fields.
-+
-+@@ -574,7 +574,7 @@
-+ see current status,
-+
-+ .TP 7
-+-\ \ \'\fB?\fR\' or \'\fBh\fR\' :\fIHelp\fR
-++\ \ \<\fB?\fR\> or \<\fBh\fR\> :\fIHelp\fR
-+ There are two help levels available.
-+ The first will provide a reminder of all the basic \*(CIs.
-+ If \*(Me is\fI secured\fR, that screen will be abbreviated.
-+@@ -583,7 +583,7 @@
-+ applicable to \*(AM.
-+
-+ .TP 7
-+-\ \ \'\fB=\fR\' :\fIExit_Task_Limits\fR
-++\ \ \<\fB=\fR\> :\fIExit_Task_Limits\fR
-+ Removes restrictions on which tasks are shown.
-+ This command will reverse any 'i' (idle tasks) and 'n' (max tasks) commands
-+ that might be active.
-+@@ -593,13 +593,13 @@
-+ When operating in \*(AM this command has a slightly broader meaning.
-+
-+ .TP 7
-+-\ \ \'\fBA\fR\' :\fIAlternate_Display_Mode_toggle\fR
-++\ \ \<\fBA\fR\> :\fIAlternate_Display_Mode_toggle\fR
-+ This command will switch between \*(FM and \*(AM.
-+-\*(XT 4. ALTERNATE\-DISPLAY Mode and the 'G' \*(CI for insight into
-+-\*(CWs and field groups.
-++\*(XT 4. ALTERNATE\-DISPLAY Mode and the 'G' \*(CI for insight
-++into \*(CWs and field groups.
-+
-+ .TP 7
-+-\ \ \'\fBB\fR\' :\fIBold_Disable/Enable_toggle\fR
-++\ \ \<\fBB\fR\> :\fIBold_Disable/Enable_toggle\fR
-+ This command will influence use of the 'bold' terminfo capability and
-+ alters\fB both\fR the \*(SA and \*(TA for the \*(CW.
-+ While it is intended primarily for use with dumb terminals, it can be
-+@@ -611,7 +611,7 @@
-+ there will be no visual confirmation that they are even on.
-+
-+ .TP 7
-+-*\ \'\fBd\fR\' or \'\fBs\fR\' :\fIChange_Delay_Time_interval\fR
-++*\ \<\fBd\fR\> or \<\fBs\fR\> :\fIChange_Delay_Time_interval\fR
-+ You will be prompted to enter the delay time, in seconds, between
-+ display updates.
-+
-+@@ -625,32 +625,32 @@
-+ and view the system summary on the second line.
-+
-+ .TP 7
-+-\ \ \'\fBG\fR\' :\fIChoose_Another_Window/Field_Group\fR
-++\ \ \<\fBG\fR\> :\fIChoose_Another_Window/Field_Group\fR
-+ You will be prompted to enter a number between 1 and 4 designating the
-+ window/field group which should be made the \*(CW.
-+ You will soon grow comfortable with these 4 windows, especially after
-+ experimenting with \*(AM.
-+
-+ .TP 7
-+-\ \ \'\fBI\fR\' :\fIIrix/Solaris_Mode_toggle\fR
-++\ \ \<\fBI\fR\> :\fIIrix/Solaris_Mode_toggle\fR
-+ When operating in 'Solaris mode' ('I' toggled \*F), a task's \*(Pu usage
-+ will be divided by the total number of \*(PUs.
-+ After issuing this command, you'll be informed of the new state of this toggle.
-+
-+ .TP 7
-+-\ \ \'\fBu\fR\' :\fIselect a user\fR
-++\ \ \<\fBu\fR\> :\fIselect a user\fR
-+ You will be prompted for a UID or username. Only processes
-+ belonging to the selected user will be displayed. This option
-+ matches on the effective UID.
-+
-+ .TP 7
-+-\ \ \'\fBU\fR\' :\fIselect a user\fR
-++\ \ \<\fBU\fR\> :\fIselect a user\fR
-+ You will be prompted for a UID or username. Only processes
-+ belonging to the selected user will be displayed. This option
-+ matches on the real, effective, saved, and filesystem UID.
-+
-+ .TP 7
-+-*\ \'\fBk\fR\' :\fIKill_a_task\fR
-++*\ \<\fBk\fR\> :\fIKill_a_task\fR
-+ You will be prompted for a PID and then the signal to send.
-+ The default signal, as reflected in the prompt, is SIGTERM.
-+ However, you can send any signal, via number or name.
-+@@ -661,24 +661,24 @@
-+ 2) at the signal prompt, type 0
-+
-+ .TP 7
-+-\ \ \'\fBq\fR\' :\fIQuit\fR
-++\ \ \<\fBq\fR\> :\fIQuit\fR
-+
-+ .TP 7
-+-*\ \'\fBr\fR\' :\fIRenice_a_Task\fR
-++*\ \<\fBr\fR\> :\fIRenice_a_Task\fR
-+ You will be prompted for a PID and then the value to nice it to.
-+ Entering a positive value will cause a process to lose priority.
-+ Conversely, a negative value will cause a process to be viewed more
-+ favorably by the kernel.
-+
-+ .TP 7
-+-\ \ \'\fBW\fR\' :\fIWrite_the_Configuration_File\fR
-++\ \ \<\fBW\fR\> :\fIWrite_the_Configuration_File\fR
-+ This will save all of your options and toggles plus the current
-+ display mode and delay time.
-+ By issuing this command just before quitting \*(Me, you will be able restart
-+ later in exactly that same state.
-+
-+ .TP 7
-+-\ \ \'\fBZ\fR\' :\fIChange_Color_Mapping
-++\ \ \<\fBZ\fR\> :\fIChange_Color_Mapping
-+ This key will take you to a separate screen where you can change the
-+ colors for the \*(CW, or for all windows.
-+ For details regarding this \*(CI \*(Xt 3d. COLOR Mapping.
-+@@ -694,25 +694,25 @@
-+ of messages and prompts.
-+
-+ These commands always impact just the \*(CW/field group.
-+-\*(XT 4. ALTERNATE\-DISPLAY Mode and the 'G' \*(CI for insight into
-+-\*(CWs and field groups.
-++\*(XT 4. ALTERNATE\-DISPLAY Mode and the 'G' \*(CI for insight
-++into \*(CWs and field groups.
-+
-+ .TP 7
-+-\ \ \'\fBl\fR\' :\fIToggle_Load_Average/Uptime\fR \*(EM On/Off
-++\ \ \<\fBl\fR\> :\fIToggle_Load_Average/Uptime\fR \*(EM On/Off
-+ This is also the line containing the program name (possibly an alias) when
-+ operating in \*(FM or the \*(CW name when operating in \*(AM.
-+
-+ .TP 7
-+-\ \ \'\fBm\fR\' :\fIToggle_Memory/Swap_Usage\fR \*(EM On/Off
-++\ \ \<\fBm\fR\> :\fIToggle_Memory/Swap_Usage\fR \*(EM On/Off
-+ This command affects two \*(SA lines.
-+
-+ .TP 7
-+-\ \ \'\fBt\fR\' :\fIToggle_Task/Cpu_States\fR \*(EM On/Off
-++\ \ \<\fBt\fR\> :\fIToggle_Task/Cpu_States\fR \*(EM On/Off
-+ This command affects from 2 to many \*(SA lines, depending on the state
-+ of the '1' toggle and whether or not \*(Me is running under true SMP.
-+
-+ .TP 7
-+-\ \ \'\fB1\fR\' :\fIToggle_Single/Separate_Cpu_States\fR \*(EM On/Off
-++\ \ \<\fB1\fR\> :\fIToggle_Single/Separate_Cpu_States\fR \*(EM On/Off
-+ This command affects how the 't' command's Cpu States portion is shown.
-+ Although this toggle exists primarily to serve massively-parallel SMP machines,
-+ it is not restricted to solely SMP environments.
-+@@ -744,12 +744,12 @@
-+ .in
-+
-+ .TP 7
-+-\ \ \'\fBb\fR\' :\fIBold/Reverse_toggle\fR
-++\ \ \<\fBb\fR\> :\fIBold/Reverse_toggle\fR
-+ This command will impact how the 'x' and 'y' toggles are displayed.
-+ Further, it will only be available when at least one of those toggles is \*O.
-+
-+ .TP 7
-+-\ \ \'\fBx\fR\' :\fIColumn_Highlight_toggle\fR
-++\ \ \<\fBx\fR\> :\fIColumn_Highlight_toggle\fR
-+ Changes highlighting for the current sort field.
-+ You probably don't need a constant visual reminder of the sort field and
-+ \*(Me hopes that you always run with 'column highlight' \*F, due to the cost
-+@@ -759,7 +759,7 @@
-+ visual reminder.
-+
-+ .TP 7
-+-\ \ \'\fBy\fR\' :\fIRow_Highlight_toggle\fR
-++\ \ \<\fBy\fR\> :\fIRow_Highlight_toggle\fR
-+ Changes highlighting for "running" tasks.
-+ For additional insight into this task state, \*(Xt 2a. DESCRIPTIONS of Fields,
-+ Process Status.
-+@@ -768,7 +768,7 @@
-+ The only costs will be a few additional tty escape sequences.
-+
-+ .TP 7
-+-\ \ \'\fBz\fR\' :\fIColor/Monochrome_toggle\fR
-++\ \ \<\fBz\fR\> :\fIColor/Monochrome_toggle\fR
-+ Switches the \*(CW between your last used color scheme and the older form
-+ of black-on-white or white-on-black.
-+ This command will alter\fB both\fR the \*(SA and \*(TA but does not affect the
-+@@ -779,20 +779,20 @@
-+ .B CONTENT\fR of \*(TW
-+ .PD 0
-+ .TP 7
-+-\ \ \'\fBc\fR\' :\fICommand_Line/Program_Name_toggle\fR
-++\ \ \<\fBc\fR\> :\fICommand_Line/Program_Name_toggle\fR
-+ This command will be honored whether or not the 'Command' column
-+ is currently visible.
-+ Later, should that field come into view, the change you applied will be seen.
-+
-+ .TP 7
-+-\ \ \'\fBf\fR\' and \'\fBo\fR\' :\fIFields_select\fR or \fIOrder_fields\fR
-++\ \ \<\fBf\fR\> and \<\fBo\fR\> :\fIFields_select\fR or \fIOrder_fields\fR
-+ These keys display separate screens where you can change which
-+ fields are displayed and their order.
-+ For additional information on these \*(CIs
-+ \*(Xt 2b. SELECTING and ORDERING Columns.
-+
-+ .TP 7
-+-\ \ \'\fBS\fR\' :\fICumulative_Time_Mode_toggle\fR
-++\ \ \<\fBS\fR\> :\fICumulative_Time_Mode_toggle\fR
-+ When 'Cumulative mode' is \*O, each process is listed with the \*(Pu
-+ time that it and its dead children have used.
-+
-+@@ -808,7 +808,7 @@
-+ effect, simply ask for help and view the window summary on the second line.
-+
-+ .TP 7
-+-\ \ \'\fBu\fR\' :\fIShow_Specific_User_Only\fR
-++\ \ \<\fBu\fR\> :\fIShow_Specific_User_Only\fR
-+ You will be prompted to enter the name of the user to display.
-+ Thereafter, in that \*(TW only matching User ID's will be shown, or possibly
-+ no tasks will be shown.
-+@@ -821,7 +821,7 @@
-+ .B SIZE\fR of \*(TW
-+ .PD 0
-+ .TP 7
-+-\ \ \'\fBi\fR\' :\fIIdle_Processes_toggle\fR
-++\ \ \<\fBi\fR\> :\fIIdle_Processes_toggle\fR
-+ Displays all tasks or just active tasks.
-+ When this toggle is \*F, idled or zombied processes will not be displayed.
-+
-+@@ -829,7 +829,7 @@
-+ affect the window's size, as all prior \*(TDs will have already been painted.
-+
-+ .TP 7
-+-\ \ \'\fBn\fR\' or \'#\' :\fISet_Maximum_Tasks\fR
-++\ \ \<\fBn\fR\> or \<\fB#\fR\> :\fISet_Maximum_Tasks\fR
-+ You will be prompted to enter the number of tasks to display.
-+ The lessor of your number and available screen rows will be used.
-+
-+@@ -868,12 +868,12 @@
-+ .in
-+
-+ .TP 7
-+-\ \ \'\fB<\fR\' :\fIMove_Sort_Field_Left\fR
-++\ \ \<\fB<\fR\> :\fIMove_Sort_Field_Left\fR
-+ Moves the sort column to the left unless the current sort field is
-+ the first field being displayed.
-+
-+ .TP 7
-+-\ \ \'\fB>\fR\' :\fIMove_Sort_Field_Right\fR
-++\ \ \<\fB>\fR\> :\fIMove_Sort_Field_Right\fR
-+ Moves the sort column to the right unless the current sort field is
-+ the last field being displayed.
-+
-+@@ -884,7 +884,7 @@
-+ .in
-+
-+ .TP 7
-+-\ \ \'\fBF\fR\' or \'\fBO\fR\' :\fISelect_Sort_Field\fR
-++\ \ \<\fBF\fR\> or \<\fBO\fR\> :\fISelect_Sort_Field\fR
-+ These keys display a separate screen where you can change which field
-+ is used as the sort column.
-+
-+@@ -897,7 +897,7 @@
-+ when running \*(Me with column highlighting turned \*F.
-+
-+ .TP 7
-+-\ \ \'\fBR\fR\' :\fIReverse/Normal_Sort_Field_toggle\fR
-++\ \ \<\fBR\fR\> :\fIReverse/Normal_Sort_Field_toggle\fR
-+ Using this \*(CI you can alternate between high-to-low and low-to-high sorts.
-+
-+ .PP
-+@@ -974,7 +974,7 @@
-+ .\" ......................................................................
-+ .SS 4b. COMMANDS for Windows
-+ .TP 7
-+-\ \ \'\fB-\fR\' and \'\fB_\fR\' :\fIShow/Hide_Window(s)_toggles\fR
-++\ \ \<\fB-\fR\> and \<\fB_\fR\> :\fIShow/Hide_Window(s)_toggles\fR
-+ The '-' key turns the \*(CW's \*(TD \*O and \*F.
-+ When \*O, that \*(TA will show a minimum of the columns header you've
-+ established with the 'f' and 'o' commands.
-+@@ -988,7 +988,7 @@
-+ as the only display element.
-+
-+ .TP 7
-+-*\ \'\fB=\fR\' and \'\fB+\fR\' :\fIEqualize_(re-balance)_Window(s)\fR
-++*\ \<\fB=\fR\> and \<\fB+\fR\> :\fIEqualize_(re-balance)_Window(s)\fR
-+ The '=' key forces the \*(CW's \*(TD to be visible.
-+ It also reverses any 'i' (idle tasks) and 'n' (max tasks) commands that might
-+ be active.
-+@@ -999,7 +999,7 @@
-+ except for the 'i' (idle tasks) and 'n' (max tasks) commands.
-+
-+ .TP 7
-+-*\ \'\fBA\fR\' :\fIAlternate_Display_Mode_toggle\fR
-++*\ \<\fBA\fR\> :\fIAlternate_Display_Mode_toggle\fR
-+ This command will switch between \*(FM and \*(AM.
-+
-+ The first time you issue this command, all four \*(TDs will be shown.
-+@@ -1007,7 +1007,7 @@
-+ chosen to make visible.
-+
-+ .TP 7
-+-*\ \'\fBa\fR\' and \'\fBw\fR\' :\fINext_Window_Forward/Backward\fR
-++*\ \<\fBa\fR\> and \<\fBw\fR\> :\fINext_Window_Forward/Backward\fR
-+ This will change the \*(CW, which in turn changes the window to which
-+ commands are directed.
-+ These keys act in a circular fashion so you can reach any desired \*(CW
-+@@ -1018,7 +1018,7 @@
-+ the \*(TD is \*F and many commands will be restricted.
-+
-+ .TP 7
-+-*\ \'\fBG\fR\' :\fIChoose_Another_Window/Field_Group\fR
-++*\ \<\fBG\fR\> :\fIChoose_Another_Window/Field_Group\fR
-+ You will be prompted to enter a number between 1 and 4 designating the
-+ window/field group which should be made the \*(CW.
-+
-+@@ -1027,15 +1027,15 @@
-+ commands.
-+
-+ .TP 7
-+-\ \ \'\fBg\fR\' :\fIChange_Window/Field_Group_Name\fR
-++\ \ \<\fBg\fR\> :\fIChange_Window/Field_Group_Name\fR
-+ You will be prompted for a new name to be applied to the \*(CW.
-+ It does not require that the window name be visible
-+ (the 'l' toggle to be \*O).
-+
-+ .IP "*" 3
-+ The \*(CIs shown with an \*(AS have use beyond \*(AM.
-+- \'=', 'A', 'G' are always available
-+- \'a', 'w' act the same when color mapping
-++ '=', 'A', 'G' are always available
-++ 'a', 'w' act the same when color mapping
-+
-+
-+ .\" ----------------------------------------------------------------------
-+
-+
-+
-+
-+
-+
---- procps-3.1.15.orig/debian/patches/10_sysctl_quiet.dpatch
-+++ procps-3.1.15/debian/patches/10_sysctl_quiet.dpatch
-@@ -0,0 +1,119 @@
-+#! /bin/sh -e
-+## 10_sysctl_quiet by Simon Horman
-+##
-+## All lines beginning with `## DP:' are a description of the patch.
-+## DP: Adds quiet -q flag to sysctl
-+
-+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
-+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
-+
-+if [ $# -ne 1 ]; then
-+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
-+ exit 1
-+fi
-+case "$1" in
-+ -patch) patch $patch_opts -p1 < $0;;
-+ -unpatch) patch $patch_opts -p1 -R < $0;;
-+ *)
-+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argum
-+ent"
-+ exit 1;;
-+esac
-+
-+exit 0
-+@DPATCH@
-+diff -ru procps-3.1.8/sysctl.8 procps-3.1.8.new/sysctl.8
-+--- procps-3.1.8/sysctl.8 2002-12-12 07:51:32.000000000 +0900
-++++ procps-3.1.8.new/sysctl.8 2003-04-15 20:30:46.000000000 +0900
-+@@ -12,9 +12,9 @@
-+ .SH SYNOPSIS
-+ .B "sysctl [-n] [-e] variable ..."
-+ .br
-+-.B "sysctl [-n] [-e] -w variable=value ..."
-++.B "sysctl [-n] [-e] [-q] -w variable=value ..."
-+ .br
-+-.B "sysctl [-n] [-e] -p <filename>"
-++.B "sysctl [-n] [-e] [-q] -p <filename>"
-+ .br
-+ .B "sysctl [-n] [-e] -a"
-+ .br
-+@@ -45,6 +45,9 @@
-+ .B "-e"
-+ Use this option to ignore errors about unknown keys.
-+ .TP
-++.B "-q"
-++Use this option to not display the values set to stdout.
-++.TP
-+ .B "-w"
-+ Use this option when you want to change a sysctl setting.
-+ .TP
-+diff -ru procps-3.1.8/sysctl.c procps-3.1.8.new/sysctl.c
-+--- procps-3.1.8/sysctl.c 2002-12-29 08:26:50.000000000 +0900
-++++ procps-3.1.8.new/sysctl.c 2003-04-15 20:35:08.000000000 +0900
-+@@ -15,6 +15,8 @@
-+ * Changelog:
-+ * v1.01:
-+ * - added -p <preload> to preload values from a file
-++ * Horms:
-++ * - added -q to be quiet when modifying values
-+ *
-+ * Changes by Albert Cahalan, 2002.
-+ */
-+@@ -46,6 +48,7 @@
-+ static bool PrintName;
-+ static bool PrintNewline;
-+ static bool IgnoreError;
-++static bool Quiet;
-+
-+ /* error messages */
-+ static const char ERR_UNKNOWN_PARAMETER[] = "error: Unknown parameter '%s'\n";
-+@@ -80,9 +83,9 @@
-+ */
-+ static int Usage(const char *restrict const name) {
-+ printf("usage: %s [-n] [-e] variable ... \n"
-+- " %s [-n] [-e] -w variable=value ... \n"
-++ " %s [-n] [-e] [-q] -w variable=value ... \n"
-+ " %s [-n] [-e] -a \n"
-+- " %s [-n] [-e] -p <file> (default /etc/sysctl.conf) \n"
-++ " %s [-n] [-e] [-q] -p <file> (default /etc/sysctl.conf) \n"
-+ " %s [-n] [-e] -A\n", name, name, name, name, name);
-+ return -1;
-+ }
-+@@ -290,13 +293,14 @@
-+ fprintf(fp, "%s\n", value);
-+ fclose(fp);
-+
-+- if (PrintName) {
-++ if(Quiet) {
-++ ;
-++ } else if (PrintName) {
-+ fprintf(stdout, "%s = %s\n", outname, value);
-++ } else if (PrintNewline) {
-++ fprintf(stdout, "%s\n", value);
-+ } else {
-+- if (PrintNewline)
-+- fprintf(stdout, "%s\n", value);
-+- else
-+- fprintf(stdout, "%s", value);
-++ fprintf(stdout, "%s", value);
-+ }
-+ }
-+
-+@@ -377,6 +381,7 @@
-+ PrintName = true;
-+ PrintNewline = true;
-+ IgnoreError = false;
-++ Quiet = false;
-+
-+ if (argc < 2) {
-+ return Usage(me);
-+@@ -419,6 +424,9 @@
-+ preloadfile = *argv;
-+ }
-+ return Preload(preloadfile);
-++ case 'q':
-++ Quiet = true;
-++ break;
-+ case 'a': /* string and integer values (for Linux, all of them) */
-+ case 'A': /* the above, including "opaques" (would be unprintable) */
-+ case 'X': /* the above, with opaques completly printed in hex */
---- procps-3.1.15.orig/debian/patches/00list
-+++ procps-3.1.15/debian/patches/00list
-@@ -0,0 +1,5 @@
-+10_sysctl_quiet
-+20_procps-fix+attr
-+20_ps.1
-+20_top_manpage
-+30_remove_test_dir
---- procps-3.1.15.orig/debian/patches/30_remove_test_dir.dpatch
-+++ procps-3.1.15/debian/patches/30_remove_test_dir.dpatch
-@@ -0,0 +1,2911 @@
-+#! /bin/sh -e
-+## 30_remove_test-dir by Craif Small
-+##
-+## All lines beginning with `## DP:' are a description of the patch.
-+## DP: Removing test directory
-+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
-+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
-+
-+if [ $# -ne 1 ]; then
-+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
-+ exit 1
-+fi
-+case "$1" in
-+ -patch) patch $patch_opts -p1 < $0;;
-+ -unpatch) patch $patch_opts -p1 -R < $0;;
-+ *)
-+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argum
-+ent"
-+ exit 1;;
-+esac
-+
-+exit 0
-+@DPATCH@
-+diff -ruN procps-3.1.15.old/test/clone-army.c procps-3.1.15/test/clone-army.c
-+--- procps-3.1.15.old/test/clone-army.c 2003-10-05 04:46:34.000000000 +1000
-++++ procps-3.1.15/test/clone-army.c 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,127 +0,0 @@
-+-// ps fTo sess,pgid,pid,tty,ppid,tpgid,args -C a.out
-+-
-+-#include <sys/types.h>
-+-#include <unistd.h>
-+-#include <signal.h>
-+-//#include <sys/stat.h>
-+-//#include <fcntl.h>
-+-//#include <stdlib.h>
-+-#include <stdio.h>
-+-#include <sched.h>
-+-
-+-#if 0
-+-#define CLONE_VM 0x00000100 // set if VM shared between processes
-+-#define CLONE_FS 0x00000200 // set if fs info shared between processes
-+-#define CLONE_FILES 0x00000400 // set if open files shared between processes
-+-#define CLONE_SIGHAND 0x00000800 // set if signal handlers and blocked signals shared
-+-#define CLONE_IDLETASK 0x00001000 // set if new pid should be 0 (kernel only)*/
-+-#define CLONE_PTRACE 0x00002000 // set if we want to let tracing continue on the child too
-+-#define CLONE_VFORK 0x00004000 // set if the parent wants the child to wake it up on mm_release
-+-#define CLONE_PARENT 0x00008000 // set if we want to have the same parent as the cloner
-+-#define CLONE_THREAD 0x00010000 // Same thread group?
-+-#define CLONE_NEWNS 0x00020000 // New namespace group?
-+-#define CLONE_SYSVSEM 0x00040000 // share system V SEM_UNDO semantics
-+-#define CLONE_SETTLS 0x00080000 // create a new TLS for the child
-+-#define CLONE_PARENT_SETTID 0x00100000 // set the TID in the parent
-+-#define CLONE_CHILD_CLEARTID 0x00200000 // clear the TID in the child
-+-#define CLONE_DETACHED 0x00400000 // parent wants no child-exit signal
-+-#define CLONE_UNTRACED 0x00800000 // set if the tracing process can't force CLONE_PTRACE on this clone
-+-#define CLONE_CHILD_SETTID 0x01000000 // set the TID in the child
-+-#define CLONE_STOPPED 0x02000000 // Start in stopped state
-+-#endif
-+-
-+-#ifndef CLONE_THREAD
-+-#define CLONE_THREAD 0x00010000
-+-#endif
-+-#ifndef CLONE_DETACHED
-+-#define CLONE_DETACHED 0x00400000
-+-#endif
-+-
-+-
-+-// interesting: VM FS FILES SIGHAND PARENT THREAD SYSVSEM DETACHED
-+-
-+-//#define FLAGS (CLONE_PARENT|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_VM|CLONE_THREAD|CLONE_SYSVSEM)
-+-#define FLAGS (CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_VM|CLONE_THREAD|CLONE_DETACHED)
-+-
-+-// Don't cause rejection: FS FILES SYSVSEM PARENT
-+-// Do cause rejection:
-+-
-+-static void printflags(int pass, unsigned flags){
-+- printf(
-+- "%s %08x %s %s %s %s\n",
-+- pass?"pass":"FAIL",
-+- flags,
-+- (flags&CLONE_THREAD) ? "THREAD" : "______",
-+- (flags&CLONE_DETACHED) ? "DETACHED" : "________",
-+- (flags&CLONE_SIGHAND) ? "SIGHAND" : "_______",
-+- (flags&CLONE_SIGHAND) ? "VM" : "__"
-+- );
-+-}
-+-
-+-static unsigned genflags(unsigned flags){
-+- return (
-+- (flags&0x08) ? 0 : CLONE_THREAD
-+- )|(
-+- (flags&0x04) ? 0 : CLONE_DETACHED
-+- )|(
-+- (flags&0x02) ? 0 : CLONE_SIGHAND
-+- )|(
-+- (flags&0x01) ? 0 : CLONE_VM
-+- );
-+-}
-+-
-+-//static pid_t one;
-+-
-+-//static void die(int signo){
-+-// (void)signo;
-+-// _exit(0);
-+-//}
-+-
-+-//static void sigchld_handler(int signo){
-+-// (void)signo;
-+-// kill(one,SIGHUP); // kill parent
-+-//}
-+-
-+-static int clone_fn(void *vp){
-+- for(;;) pause();
-+-}
-+-
-+-static long clone_stack_data[2048];
-+-#ifdef __hppa__
-+-static long *clone_stack = &clone_stack_data[0];
-+-#else
-+-static long *clone_stack = &clone_stack_data[2048];
-+-#endif
-+-
-+-int main(int argc, char *argv[]){
-+- unsigned u;
-+- pid_t minime;
-+- (void)argc;
-+- (void)argv;
-+-
-+-// one = getpid();
-+-// signal(SIGHUP,die);
-+-// if(fork()) hang(); // parent later killed as readyness signal
-+-
-+- u = 16;
-+-
-+- while(u--){
-+- unsigned f = genflags(u);
-+- minime = clone(clone_fn, clone_stack, f, "arg");
-+-
-+- printflags(minime!=-1, f);
-+-// if(minime==-1){
-+-// perror("no clone");
-+-// _exit(8);
-+-// }
-+-
-+-// printf("%d begat %d\n",getpid(),minime);
-+- }
-+-
-+-
-+-// kill(one,SIGHUP); // let the shell know we're ready
-+-
-+-// clone_fn();
-+-
-+- return 0;
-+-}
-+diff -ruN procps-3.1.15.old/test/clone-once.c procps-3.1.15/test/clone-once.c
-+--- procps-3.1.15.old/test/clone-once.c 2003-10-20 10:56:12.000000000 +1000
-++++ procps-3.1.15/test/clone-once.c 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,97 +0,0 @@
-+-#include <sys/types.h>
-+-#include <unistd.h>
-+-#include <signal.h>
-+-//#include <sys/stat.h>
-+-//#include <fcntl.h>
-+-//#include <stdlib.h>
-+-#include <stdio.h>
-+-#include <sched.h>
-+-
-+-#if 0
-+-#define CLONE_VM 0x00000100 // set if VM shared between processes
-+-#define CLONE_FS 0x00000200 // set if fs info shared between processes
-+-#define CLONE_FILES 0x00000400 // set if open files shared between processes
-+-#define CLONE_SIGHAND 0x00000800 // set if signal handlers and blocked signals shared
-+-#define CLONE_IDLETASK 0x00001000 // set if new pid should be 0 (kernel only)*/
-+-#define CLONE_PTRACE 0x00002000 // set if we want to let tracing continue on the child too
-+-#define CLONE_VFORK 0x00004000 // set if the parent wants the child to wake it up on mm_release
-+-#define CLONE_PARENT 0x00008000 // set if we want to have the same parent as the cloner
-+-#define CLONE_THREAD 0x00010000 // Same thread group?
-+-#define CLONE_NEWNS 0x00020000 // New namespace group?
-+-#define CLONE_SYSVSEM 0x00040000 // share system V SEM_UNDO semantics
-+-#define CLONE_SETTLS 0x00080000 // create a new TLS for the child
-+-#define CLONE_PARENT_SETTID 0x00100000 // set the TID in the parent
-+-#define CLONE_CHILD_CLEARTID 0x00200000 // clear the TID in the child
-+-#define CLONE_DETACHED 0x00400000 // parent wants no child-exit signal
-+-#define CLONE_UNTRACED 0x00800000 // set if the tracing process can't force CLONE_PTRACE on this clone
-+-#define CLONE_CHILD_SETTID 0x01000000 // set the TID in the child
-+-#define CLONE_STOPPED 0x02000000 // Start in stopped state
-+-#endif
-+-
-+-#ifndef CLONE_THREAD
-+-#define CLONE_THREAD 0x00010000
-+-#endif
-+-#ifndef CLONE_DETACHED
-+-#define CLONE_DETACHED 0x00400000
-+-#endif
-+-
-+-//#define FLAGS (CLONE_PARENT|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_VM|CLONE_THREAD|CLONE_SYSVSEM)
-+-#define FLAGS (CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_VM|CLONE_THREAD|CLONE_DETACHED)
-+-
-+-static pid_t one;
-+-
-+-static void die(int signo){
-+- (void)signo;
-+- _exit(0);
-+-}
-+-
-+-//static void sigchld_handler(int signo){
-+-// (void)signo;
-+-// kill(one,SIGHUP); // kill parent
-+-//}
-+-
-+-static void hang(void){
-+- for(;;) pause();
-+-}
-+-
-+-static int clone_fn(void *vp){
-+-// const char msg[] = "I think I'm a clone now!\n";
-+- (void)vp;
-+-// write(STDOUT_FILENO, msg, sizeof(msg)-1);
-+- hang();
-+- return 0; // keep gcc happy
-+-}
-+-
-+-static long clone_stack_data[2048];
-+-#ifdef __hppa__
-+-static long *clone_stack = &clone_stack_data[0];
-+-#else
-+-static long *clone_stack = &clone_stack_data[2048];
-+-#endif
-+-
-+-int main(int argc, char *argv[]){
-+- pid_t minime;
-+- (void)argc;
-+- (void)argv;
-+-
-+- one = getpid();
-+- signal(SIGHUP,die);
-+- if(fork()) hang(); // parent later killed as readyness signal
-+-
-+-
-+- minime = clone(clone_fn, clone_stack, FLAGS, "arg");
-+-
-+- if(minime==-1){
-+- perror("no clone");
-+- kill(one,SIGKILL);
-+- _exit(8);
-+- }
-+-
-+-// printf("%d begat %d\n",getpid(),minime);
-+-
-+- kill(one,SIGHUP); // let the shell know we're ready
-+-
-+- hang();
-+-
-+- return 0;
-+-}
-+diff -ruN procps-3.1.15.old/test/fork-you.c procps-3.1.15/test/fork-you.c
-+--- procps-3.1.15.old/test/fork-you.c 2003-09-05 14:18:30.000000000 +1000
-++++ procps-3.1.15/test/fork-you.c 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,27 +0,0 @@
-+-#include <sys/types.h>
-+-#include <unistd.h>
-+-#include <signal.h>
-+-
-+-static void die(int signo){
-+- (void)signo;
-+- _exit(0);
-+-}
-+-
-+-static void hang(void){
-+- for(;;) pause();
-+-}
-+-
-+-int main(int argc, char *argv[]){
-+- pid_t pid;
-+-
-+- (void)argv;
-+-
-+- pid = getpid();
-+- signal(SIGHUP,die);
-+- if(fork()) hang(); // parent later killed as readyness signal
-+- kill(1,9); // "kill" unkillable init to touch lib pages
-+- while(argc--) if(!fork()) hang();
-+- kill(pid,SIGHUP); // kill parent
-+- hang();
-+- return 0;
-+-}
-+diff -ruN procps-3.1.15.old/test/funny-thing.c procps-3.1.15/test/funny-thing.c
-+--- procps-3.1.15.old/test/funny-thing.c 2003-09-08 13:55:57.000000000 +1000
-++++ procps-3.1.15/test/funny-thing.c 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,38 +0,0 @@
-+-#include <sys/types.h>
-+-#include <unistd.h>
-+-#include <signal.h>
-+-
-+-static pid_t one;
-+-
-+-static void die(int signo){
-+- (void)signo;
-+- _exit(0);
-+-}
-+-
-+-static void hang(void){
-+- for(;;) pause();
-+-}
-+-
-+-int main(int argc, char *argv[]){
-+- (void)argc;
-+- (void)argv;
-+-
-+- one = getpid();
-+- signal(SIGHUP,die);
-+- if(fork()) hang(); // parent later killed as readyness signal
-+-
-+- // second one exits, to enable setsid(), and the resulting
-+- // zombie will be reaped by init after 1st process killed
-+- if(!fork()) _exit(0);
-+-
-+- if(setsid()==-1){
-+- kill(one,SIGKILL); // hopefully the shell will complain
-+- _exit(42); // kind of tough to report errors
-+- }
-+-
-+- kill(one,SIGHUP); // let the shell know we're ready
-+-
-+- hang();
-+-
-+- return 0;
-+-}
-+diff -ruN procps-3.1.15.old/test/gigabyte.c procps-3.1.15/test/gigabyte.c
-+--- procps-3.1.15.old/test/gigabyte.c 2003-09-11 10:23:56.000000000 +1000
-++++ procps-3.1.15/test/gigabyte.c 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,74 +0,0 @@
-+-#include <sys/types.h>
-+-#include <unistd.h>
-+-#include <signal.h>
-+-//#include <sys/ioctl.h>
-+-//#include <sys/stat.h>
-+-//#include <fcntl.h>
-+-#include <stdio.h>
-+-#include <sys/mman.h>
-+-
-+-static void die(int signo){
-+- (void)signo;
-+- _exit(0);
-+-}
-+-
-+-static void hang(void){
-+- for(;;) pause();
-+-}
-+-
-+-#ifndef MAP_NORESERVE
-+-#define MAP_NORESERVE 0
-+-#endif
-+-
-+-int main(int argc, char *argv[]){
-+- void *vp;
-+- pid_t pid;
-+- size_t length = 1024*1024*1024;
-+- unsigned maps; // how many mappings to do
-+-
-+- (void)argc;
-+- (void)argv;
-+-
-+- if(sizeof(void*)==8){
-+- maps = 10;
-+- puts("64bit");
-+- }else{
-+- maps = 1;
-+- puts("32bit");
-+- }
-+- fflush(stdout);
-+-
-+- pid = getpid();
-+- signal(SIGHUP,die);
-+- if(fork()) hang(); // parent later killed as readyness signal
-+-
-+-
-+- while(maps){
-+- vp = mmap(
-+- 0, // start
-+- length,
-+- PROT_READ|PROT_WRITE,
-+- MAP_PRIVATE|MAP_NORESERVE|MAP_ANONYMOUS,
-+- 0, // fd
-+- 0 // offset
-+- );
-+- if(vp==MAP_FAILED){
-+- // try a smaller size; maybe fragmentation stopped us
-+- length /= 2;
-+- maps *= 2;
-+- }else{
-+- maps--;
-+- }
-+- if(maps>200 || length<2*1024*1024){
-+- kill(pid,SIGKILL); // hopefully the shell will complain
-+- _exit(88);
-+- }
-+- }
-+-
-+- close(0);
-+- close(1);
-+- close(2);
-+- kill(pid,SIGHUP); // kill parent
-+- hang();
-+- return 0;
-+-}
-+diff -ruN procps-3.1.15.old/test/got-no-tty.c procps-3.1.15/test/got-no-tty.c
-+--- procps-3.1.15.old/test/got-no-tty.c 2003-09-05 14:17:57.000000000 +1000
-++++ procps-3.1.15/test/got-no-tty.c 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,46 +0,0 @@
-+-#include <sys/types.h>
-+-#include <unistd.h>
-+-#include <signal.h>
-+-#include <sys/ioctl.h>
-+-#include <sys/stat.h>
-+-#include <fcntl.h>
-+-#include <stdio.h>
-+-
-+-static void die(int signo){
-+- (void)signo;
-+- _exit(0);
-+-}
-+-
-+-static void hang(void){
-+- for(;;) pause();
-+-}
-+-
-+-int main(int argc, char *argv[]){
-+- int fd;
-+- pid_t pid;
-+-
-+- (void)argc;
-+- (void)argv;
-+-
-+- pid = getpid();
-+- signal(SIGHUP,die);
-+- if(fork()) hang(); // parent later killed as readyness signal
-+-
-+-
-+- // Use the TIOCNOTTY ioctl to detach from the tty
-+- // and, supposedly, set the process group ID to zero.
-+- // Reality: PGRP unchanged, TPGID becomes -1, TTY lost.
-+- fd = open("/dev/tty", O_RDONLY);
-+- if(!fd){
-+- perror("open /dev/tty");
-+- _exit(1);
-+- }
-+- if(ioctl(fd, TIOCNOTTY)==-1){
-+- perror("open /dev/tty");
-+- _exit(1);
-+- }
-+-
-+- kill(pid,SIGHUP); // kill parent
-+- hang();
-+- return 0;
-+-}
-+diff -ruN procps-3.1.15.old/test/mini-me.c procps-3.1.15/test/mini-me.c
-+--- procps-3.1.15.old/test/mini-me.c 2003-09-22 05:50:38.000000000 +1000
-++++ procps-3.1.15/test/mini-me.c 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,97 +0,0 @@
-+-// ps fTo sess,pgid,pid,tty,ppid,tpgid,args -C a.out
-+-
-+-#include <sys/types.h>
-+-#include <unistd.h>
-+-#include <signal.h>
-+-//#include <sys/stat.h>
-+-//#include <fcntl.h>
-+-//#include <stdlib.h>
-+-#include <stdio.h>
-+-#include <sched.h>
-+-
-+-#if 0
-+-#define CLONE_VM 0x00000100 // set if VM shared between processes
-+-#define CLONE_FS 0x00000200 // set if fs info shared between processes
-+-#define CLONE_FILES 0x00000400 // set if open files shared between processes
-+-#define CLONE_SIGHAND 0x00000800 // set if signal handlers and blocked signals shared
-+-#define CLONE_IDLETASK 0x00001000 // set if new pid should be 0 (kernel only)*/
-+-#define CLONE_PTRACE 0x00002000 // set if we want to let tracing continue on the child too
-+-#define CLONE_VFORK 0x00004000 // set if the parent wants the child to wake it up on mm_release
-+-#define CLONE_PARENT 0x00008000 // set if we want to have the same parent as the cloner
-+-#define CLONE_THREAD 0x00010000 // Same thread group?
-+-#define CLONE_NEWNS 0x00020000 // New namespace group?
-+-#define CLONE_SYSVSEM 0x00040000 // share system V SEM_UNDO semantics
-+-#define CLONE_SETTLS 0x00080000 // create a new TLS for the child
-+-#define CLONE_PARENT_SETTID 0x00100000 // set the TID in the parent
-+-#define CLONE_CHILD_CLEARTID 0x00200000 // clear the TID in the child
-+-#define CLONE_DETACHED 0x00400000 // parent wants no child-exit signal
-+-#define CLONE_UNTRACED 0x00800000 // set if the tracing process can't force CLONE_PTRACE on this clone
-+-#define CLONE_CHILD_SETTID 0x01000000 // set the TID in the child
-+-#define CLONE_STOPPED 0x02000000 // Start in stopped state
-+-#endif
-+-
-+-#ifndef CLONE_THREAD
-+-#define CLONE_THREAD 0x00010000
-+-#endif
-+-#ifndef CLONE_DETACHED
-+-#define CLONE_DETACHED 0x00400000
-+-#endif
-+-
-+-//#define FLAGS (CLONE_PARENT|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_VM|CLONE_THREAD|CLONE_SYSVSEM)
-+-#define FLAGS (CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_VM|CLONE_THREAD|CLONE_DETACHED)
-+-
-+-//static pid_t one;
-+-
-+-//static void die(int signo){
-+-// (void)signo;
-+-// _exit(0);
-+-//}
-+-
-+-//static void sigchld_handler(int signo){
-+-// (void)signo;
-+-// kill(one,SIGHUP); // kill parent
-+-//}
-+-
-+-static void hang(void){
-+- for(;;) pause();
-+-}
-+-
-+-static int clone_fn(void *vp){
-+- const char msg[] = "I think I'm a clone now!\n";
-+- write(STDOUT_FILENO, msg, sizeof(msg)-1);
-+- hang();
-+-}
-+-
-+-static long clone_stack_data[2048];
-+-#ifdef __hppa__
-+-static long *clone_stack = &clone_stack_data[0];
-+-#else
-+-static long *clone_stack = &clone_stack_data[2048];
-+-#endif
-+-
-+-int main(int argc, char *argv[]){
-+- pid_t minime;
-+- (void)argc;
-+- (void)argv;
-+-
-+-// one = getpid();
-+-// signal(SIGHUP,die);
-+-// if(fork()) hang(); // parent later killed as readyness signal
-+-
-+-
-+- minime = clone(clone_fn, clone_stack, FLAGS, "arg");
-+-
-+- if(minime==-1){
-+-// kill(one,SIGKILL);
-+- perror("no clone");
-+- _exit(8);
-+- }
-+-
-+- printf("%d begat %d\n",getpid(),minime);
-+-
-+-// kill(one,SIGHUP); // let the shell know we're ready
-+-
-+- hang();
-+-
-+- return 0;
-+-}
-+diff -ruN procps-3.1.15.old/test/module.mk procps-3.1.15/test/module.mk
-+--- procps-3.1.15.old/test/module.mk 2003-12-25 02:02:52.000000000 +1100
-++++ procps-3.1.15/test/module.mk 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,36 +0,0 @@
-+-# This file gets included into the main Makefile, in the top directory.
-+-
-+-#INSTALL += $(bin)test $(man1)test.1 -- some data dump thing maybe?
-+-
-+-# directories for cleaning
-+-DIRS += test/ $(wildcard test/*/*/)
-+-
-+-TEST_C := fork-you the_living_dead got-no-tty sidious sid-breaks-ttys \
-+- gigabyte mini-me funny-thing clone-army clone-once
-+-TESTNAMES := $(addprefix test/,$(TEST_C))
-+-TESTOBJ := $(addsuffix .o,$(TESTNAMES))
-+-TESTSRC := $(addsuffix .c,$(TESTNAMES)) test/th.c
-+-
-+-# files to create
-+-ALL += $(TESTNAMES)
-+-
-+-# files to remove
-+-TEST_JUNK := stderr stdout header stderr.test stderr.good
-+-CLEAN += $(addprefix test/,$(TEST_JUNK)) $(TESTNAMES) test/th $(wildcard test/*.tmp)
-+-
-+-TEST_X := module.mk script-child onetest runtests
-+-TARFILES += $(TESTSRC) $(addprefix test/,$(TEST_X)) $(wildcard test/*/*)
-+-
-+-$(TESTNAMES): %: %.o
-+- $(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) -o $@ $^
-+-
-+-# add proc/$(SONAME) on the end later if needed
-+-$(TESTOBJ): %.o: %.c
-+- $(CC) -c $(ALL_CPPFLAGS) $(ALL_CFLAGS) $< -o $@
-+-
-+-test/th: test/th.o
-+- $(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) -o $@ $^ -lpthread
-+-
-+-test/th.o: test/th.c
-+- $(CC) -c $(ALL_CPPFLAGS) $(ALL_CFLAGS) $< -o $@
-+-
-+diff -ruN procps-3.1.15.old/test/onetest procps-3.1.15/test/onetest
-+--- procps-3.1.15.old/test/onetest 2003-12-25 02:02:08.000000000 +1100
-++++ procps-3.1.15/test/onetest 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,70 +0,0 @@
-+-#!/bin/bash
-+-
-+-unset I_WANT_A_BROKEN_PS
-+-unset PS_PERSONALITY
-+-unset CMD_ENV
-+-unset PS_FORMAT
-+-
-+-export LANG=C
-+-export LC_ALL=C
-+-export TZ=GMT
-+-
-+-TESTNAME=$1
-+-
-+-# enlarge as needed in setup to avoid COMMAND becoming COMMA, etc.
-+-export COLUMNS=111
-+-
-+-: ${LD_LIBRARY_PATH:=../proc}
-+-: ${TESTME:=../ps/ps}
-+-export LD_LIBRARY_PATH
-+-export DYLD_LIBRARY_PATH=$LD_LIBRARY_PATH # if ever a darwin port
-+-
-+-
-+-
-+-. $TESTNAME/setup
-+-$TESTME $ARGS > stdout 2> stderr
-+-RESULT=$?
-+-if [ x$KILLFN == x1 ] ; then
-+- killfn
-+-fi
-+-
-+-
-+-
-+-if [ x$RESULT != x$GOOD ] ; then
-+- echo FAIL $TESTNAME err-$RESULT
-+- exit 1
-+-fi
-+-
-+-rm -f stderr.test ; touch stderr.test
-+-if [ -f stderr ] ; then
-+- head -3 < stderr > stderr.test
-+-fi
-+-rm -f stderr.good ; touch stderr.good
-+-if [ -f $TESTNAME/stderr ] ; then
-+- head -3 < $TESTNAME/stderr > stderr.good
-+-fi
-+-diff -Naurd stderr.test stderr.good >> /dev/null
-+-if [ x$? != x0 ] ; then
-+- echo FAIL $TESTNAME wrong-stderr
-+- exit 1
-+-fi
-+-
-+-if [ -f $TESTNAME/header ] ; then
-+- (printf ' ' ; head -1 stdout) | tr -s ' ' > header
-+- diff -Naurd header $TESTNAME/header >> /dev/null
-+- if [ x$? != x0 ] ; then
-+- echo FAIL $TESTNAME wrong-header
-+- exit 1
-+- fi
-+-fi
-+-
-+-if [ x$EVALFN == x1 ] ; then
-+- evalfn
-+- if [ x$? != x0 ] ; then
-+- echo FAIL $TESTNAME eval-fn
-+- exit 1
-+- fi
-+-fi
-+-
-+-echo pass $TESTNAME a-ok
-+-exit 0
-+diff -ruN procps-3.1.15.old/test/ps/LT-mix/header procps-3.1.15/test/ps/LT-mix/header
-+--- procps-3.1.15.old/test/ps/LT-mix/header 2003-10-02 12:38:29.000000000 +1000
-++++ procps-3.1.15/test/ps/LT-mix/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/LT-mix/setup procps-3.1.15/test/ps/LT-mix/setup
-+--- procps-3.1.15.old/test/ps/LT-mix/setup 2003-10-02 12:39:40.000000000 +1000
-++++ procps-3.1.15/test/ps/LT-mix/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-L -T"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/LT-mix/stderr procps-3.1.15/test/ps/LT-mix/stderr
-+--- procps-3.1.15.old/test/ps/LT-mix/stderr 2003-10-02 12:40:03.000000000 +1000
-++++ procps-3.1.15/test/ps/LT-mix/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Thread flags conflict; can't use both -L and -T.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/O-O/header procps-3.1.15/test/ps/O-O/header
-+--- procps-3.1.15.old/test/ps/O-O/header 2003-10-02 12:01:36.000000000 +1000
-++++ procps-3.1.15/test/ps/O-O/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/O-O/setup procps-3.1.15/test/ps/O-O/setup
-+--- procps-3.1.15.old/test/ps/O-O/setup 2003-10-02 12:02:01.000000000 +1000
-++++ procps-3.1.15/test/ps/O-O/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-O wchan -O sess"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/O-O/stderr procps-3.1.15/test/ps/O-O/stderr
-+--- procps-3.1.15.old/test/ps/O-O/stderr 2003-10-02 12:05:19.000000000 +1000
-++++ procps-3.1.15/test/ps/O-O/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: option -O can not follow other format options.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/O-o/header procps-3.1.15/test/ps/O-o/header
-+--- procps-3.1.15.old/test/ps/O-o/header 2003-10-02 12:06:18.000000000 +1000
-++++ procps-3.1.15/test/ps/O-o/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID WCHAN S TTY TIME COMMAND SESS
-+diff -ruN procps-3.1.15.old/test/ps/O-o/setup procps-3.1.15/test/ps/O-o/setup
-+--- procps-3.1.15.old/test/ps/O-o/setup 2003-10-02 12:05:41.000000000 +1000
-++++ procps-3.1.15/test/ps/O-o/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-O wchan -o sess"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/aix-pcpu-header/header procps-3.1.15/test/ps/aix-pcpu-header/header
-+--- procps-3.1.15.old/test/ps/aix-pcpu-header/header 2003-09-03 07:26:05.000000000 +1000
-++++ procps-3.1.15/test/ps/aix-pcpu-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- %CPU
-+diff -ruN procps-3.1.15.old/test/ps/aix-pcpu-header/setup procps-3.1.15/test/ps/aix-pcpu-header/setup
-+--- procps-3.1.15.old/test/ps/aix-pcpu-header/setup 2003-09-03 07:24:28.000000000 +1000
-++++ procps-3.1.15/test/ps/aix-pcpu-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o %cpu"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/aix-pcpu-header2/header procps-3.1.15/test/ps/aix-pcpu-header2/header
-+--- procps-3.1.15.old/test/ps/aix-pcpu-header2/header 2003-09-03 07:26:30.000000000 +1000
-++++ procps-3.1.15/test/ps/aix-pcpu-header2/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- COMMAND px
-+diff -ruN procps-3.1.15.old/test/ps/aix-pcpu-header2/setup procps-3.1.15/test/ps/aix-pcpu-header2/setup
-+--- procps-3.1.15.old/test/ps/aix-pcpu-header2/setup 2003-09-03 07:25:22.000000000 +1000
-++++ procps-3.1.15/test/ps/aix-pcpu-header2/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o %cpx"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/bad-format-env/header procps-3.1.15/test/ps/bad-format-env/header
-+--- procps-3.1.15.old/test/ps/bad-format-env/header 2003-10-02 12:16:37.000000000 +1000
-++++ procps-3.1.15/test/ps/bad-format-env/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/bad-format-env/setup procps-3.1.15/test/ps/bad-format-env/setup
-+--- procps-3.1.15.old/test/ps/bad-format-env/setup 2003-10-02 12:16:22.000000000 +1000
-++++ procps-3.1.15/test/ps/bad-format-env/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,3 +0,0 @@
-+-ARGS=
-+-GOOD=0
-+-export PS_FORMAT=booger
-+diff -ruN procps-3.1.15.old/test/ps/bad-format-env/stderr procps-3.1.15/test/ps/bad-format-env/stderr
-+--- procps-3.1.15.old/test/ps/bad-format-env/stderr 2003-10-02 12:16:13.000000000 +1000
-++++ procps-3.1.15/test/ps/bad-format-env/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-Warning: $PS_FORMAT ignored. (Unknown user-defined format specifier "booger".)
-+diff -ruN procps-3.1.15.old/test/ps/bogus-n-header/header procps-3.1.15/test/ps/bogus-n-header/header
-+--- procps-3.1.15.old/test/ps/bogus-n-header/header 2003-09-02 09:37:07.000000000 +1000
-++++ procps-3.1.15/test/ps/bogus-n-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY STAT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bogus-n-header/setup procps-3.1.15/test/ps/bogus-n-header/setup
-+--- procps-3.1.15.old/test/ps/bogus-n-header/setup 2003-09-02 09:34:40.000000000 +1000
-++++ procps-3.1.15/test/ps/bogus-n-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-n"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/bogus-n-header/stderr procps-3.1.15/test/ps/bogus-n-header/stderr
-+--- procps-3.1.15.old/test/ps/bogus-n-header/stderr 2003-09-02 09:35:37.000000000 +1000
-++++ procps-3.1.15/test/ps/bogus-n-header/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-Warning: bad syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
-+diff -ruN procps-3.1.15.old/test/ps/bsd-T/header procps-3.1.15/test/ps/bsd-T/header
-+--- procps-3.1.15.old/test/ps/bsd-T/header 2003-09-02 11:54:41.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-T/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY STAT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-T/setup procps-3.1.15/test/ps/bsd-T/setup
-+--- procps-3.1.15.old/test/ps/bsd-T/setup 2003-09-02 11:53:24.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-T/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,11 +0,0 @@
-+-ARGS=T
-+-GOOD=0
-+-EVALFN=1
-+-
-+-# default output is restricted to this tty
-+-MYTTY=`tty`
-+-
-+-evalfn () {
-+- PSTTY=`awk '!/TTY/{print $2}' < stdout | uniq`
-+- [ /dev/$PSTTY == $MYTTY ]
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/bsd-j-header/header procps-3.1.15/test/ps/bsd-j-header/header
-+--- procps-3.1.15.old/test/ps/bsd-j-header/header 2003-09-02 22:33:49.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-j-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-j-header/setup procps-3.1.15/test/ps/bsd-j-header/setup
-+--- procps-3.1.15.old/test/ps/bsd-j-header/setup 2003-09-02 22:32:53.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-j-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="j"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/bsd-j-header2/header procps-3.1.15/test/ps/bsd-j-header2/header
-+--- procps-3.1.15.old/test/ps/bsd-j-header2/header 2003-09-02 23:16:25.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-j-header2/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- USER PID PPID PGID SESS JOBC STAT TT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-j-header2/setup procps-3.1.15/test/ps/bsd-j-header2/setup
-+--- procps-3.1.15.old/test/ps/bsd-j-header2/setup 2003-09-02 23:15:16.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-j-header2/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,3 +0,0 @@
-+-export CMD_ENV=bsd
-+-ARGS="-j"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/bsd-l-header/header procps-3.1.15/test/ps/bsd-l-header/header
-+--- procps-3.1.15.old/test/ps/bsd-l-header/header 2003-09-02 22:54:09.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-l-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-l-header/setup procps-3.1.15/test/ps/bsd-l-header/setup
-+--- procps-3.1.15.old/test/ps/bsd-l-header/setup 2003-09-02 22:53:45.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-l-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="l"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/bsd-l-header2/header procps-3.1.15/test/ps/bsd-l-header2/header
-+--- procps-3.1.15.old/test/ps/bsd-l-header2/header 2003-09-03 07:26:56.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-l-header2/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- UID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-l-header2/setup procps-3.1.15/test/ps/bsd-l-header2/setup
-+--- procps-3.1.15.old/test/ps/bsd-l-header2/setup 2003-09-03 07:21:19.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-l-header2/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,3 +0,0 @@
-+-export CMD_ENV=bsd
-+-ARGS="-l"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/bsd-s-header/header procps-3.1.15/test/ps/bsd-s-header/header
-+--- procps-3.1.15.old/test/ps/bsd-s-header/header 2003-09-02 22:55:32.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-s-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- UID PID PENDING BLOCKED IGNORED CAUGHT STAT TTY TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-s-header/setup procps-3.1.15/test/ps/bsd-s-header/setup
-+--- procps-3.1.15.old/test/ps/bsd-s-header/setup 2003-09-02 22:55:06.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-s-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="s"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/bsd-s-header2/header procps-3.1.15/test/ps/bsd-s-header2/header
-+--- procps-3.1.15.old/test/ps/bsd-s-header2/header 2003-09-03 07:21:33.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-s-header2/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- UID PID PENDING BLOCKED IGNORED CAUGHT STAT TTY TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-s-header2/setup procps-3.1.15/test/ps/bsd-s-header2/setup
-+--- procps-3.1.15.old/test/ps/bsd-s-header2/setup 2003-09-03 07:21:40.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-s-header2/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,3 +0,0 @@
-+-export CMD_ENV=bsd
-+-ARGS="-s"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/bsd-selection/header procps-3.1.15/test/ps/bsd-selection/header
-+--- procps-3.1.15.old/test/ps/bsd-selection/header 2003-09-04 16:04:27.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-selection/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY STAT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-selection/setup procps-3.1.15/test/ps/bsd-selection/setup
-+--- procps-3.1.15.old/test/ps/bsd-selection/setup 2003-09-13 13:47:22.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-selection/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,25 +0,0 @@
-+-ARGS="m"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-rm -f misc.tmp ready.tmp typescript.tmp
-+-
-+-./got-no-tty
-+-# this'll do but... WHERE ARE THE MAN PAGES FOR PTY STUFF???
-+-(SHELL=`pwd`/script-child script typescript.tmp &>/dev/null) &
-+-while [ ! -f ready.tmp ] ; do sleep 0.01 ; done
-+-. ready.tmp
-+-
-+-evalfn () {
-+- THIS_TTY=`tty | colrm 1 5`
-+- lines2=`awk '{print $2}' < stdout | sort -u | egrep "^($SHELL_TTY|$THIS_TTY)$" | wc -l`
-+- lines3=`awk '{print $2}' < stdout | sort -u | egrep "^($SHELL_TTY|$THIS_TTY|\?)$" | wc -l`
-+- [ $lines2 == 2 ] && [ $lines3 == 2 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 got-no-tty
-+- kill -9 $SHELL_PID # the others should freely die
-+- rm -f misc.tmp ready.tmp typescript.tmp
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/bsd-t-1/header procps-3.1.15/test/ps/bsd-t-1/header
-+--- procps-3.1.15.old/test/ps/bsd-t-1/header 2003-09-02 11:55:23.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-t-1/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY STAT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-t-1/setup procps-3.1.15/test/ps/bsd-t-1/setup
-+--- procps-3.1.15.old/test/ps/bsd-t-1/setup 2003-09-02 11:56:11.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-t-1/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,11 +0,0 @@
-+-# default output is restricted to this tty
-+-MYTTY=`tty`
-+-
-+-ARGS=t$MYTTY
-+-GOOD=0
-+-EVALFN=1
-+-
-+-evalfn () {
-+- PSTTY=`awk '!/TTY/{print $2}' < stdout | uniq`
-+- [ /dev/$PSTTY == $MYTTY ]
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/bsd-t-2/header procps-3.1.15/test/ps/bsd-t-2/header
-+--- procps-3.1.15.old/test/ps/bsd-t-2/header 2003-09-02 11:55:26.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-t-2/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY STAT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-t-2/setup procps-3.1.15/test/ps/bsd-t-2/setup
-+--- procps-3.1.15.old/test/ps/bsd-t-2/setup 2003-09-02 11:56:54.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-t-2/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,12 +0,0 @@
-+-# Ancient usage: t w/o arg is current tty
-+-ARGS=t
-+-GOOD=0
-+-EVALFN=1
-+-
-+-# default output is restricted to this tty
-+-MYTTY=`tty`
-+-
-+-evalfn () {
-+- PSTTY=`awk '!/TTY/{print $2}' < stdout | uniq`
-+- [ /dev/$PSTTY == $MYTTY ]
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/bsd-t-3/header procps-3.1.15/test/ps/bsd-t-3/header
-+--- procps-3.1.15.old/test/ps/bsd-t-3/header 2003-09-02 11:55:27.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-t-3/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY STAT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-t-3/setup procps-3.1.15/test/ps/bsd-t-3/setup
-+--- procps-3.1.15.old/test/ps/bsd-t-3/setup 2003-09-02 12:25:44.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-t-3/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,19 +0,0 @@
-+-MYTTY=`tty`
-+-
-+-# two ways to interpret "ps t 42"
-+-#
-+-# 1. as "ps t" with "ps 42" (PID 42)
-+-# 2. as "ps t42" (tty /dev/tty42)
-+-#
-+-# The command doesn't seem to be legal BSD syntax, but we try...
-+-# We use interpretation #2, since BSD isn't known for ORing.
-+-# We'll assume PID 1 is "init" and not on /dev/tty1, and that
-+-# nothing on tty1 is named "init".
-+-
-+-ARGS="t 1"
-+-GOOD=0
-+-EVALFN=1
-+-
-+-evalfn () {
-+- ! egrep ' init' stdout >> /dev/null
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/bsd-t-4/header procps-3.1.15/test/ps/bsd-t-4/header
-+--- procps-3.1.15.old/test/ps/bsd-t-4/header 2003-09-02 11:55:29.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-t-4/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY STAT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-t-4/setup procps-3.1.15/test/ps/bsd-t-4/setup
-+--- procps-3.1.15.old/test/ps/bsd-t-4/setup 2003-09-02 12:15:34.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-t-4/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,10 +0,0 @@
-+-ARGS=t-
-+-GOOD=0
-+-EVALFN=1
-+-
-+-# Use 'Y' to avoid shell wildcard problems.
-+-
-+-evalfn () {
-+- PSTTY=`awk '!/TTY/{print $2}' < stdout | uniq | tr '?' 'Y'`
-+- [ $PSTTY == 'Y' ]
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/bsd-u-header/header procps-3.1.15/test/ps/bsd-u-header/header
-+--- procps-3.1.15.old/test/ps/bsd-u-header/header 2003-09-02 22:57:35.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-u-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-u-header/setup procps-3.1.15/test/ps/bsd-u-header/setup
-+--- procps-3.1.15.old/test/ps/bsd-u-header/setup 2003-09-02 22:57:20.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-u-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="u"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/bsd-u-header2/header procps-3.1.15/test/ps/bsd-u-header2/header
-+--- procps-3.1.15.old/test/ps/bsd-u-header2/header 2003-09-03 07:27:09.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-u-header2/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-u-header2/setup procps-3.1.15/test/ps/bsd-u-header2/setup
-+--- procps-3.1.15.old/test/ps/bsd-u-header2/setup 2003-09-03 07:22:00.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-u-header2/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,3 +0,0 @@
-+-export CMD_ENV=bsd
-+-ARGS="-u"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/bsd-v-header/header procps-3.1.15/test/ps/bsd-v-header/header
-+--- procps-3.1.15.old/test/ps/bsd-v-header/header 2003-09-02 22:56:43.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-v-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-v-header/setup procps-3.1.15/test/ps/bsd-v-header/setup
-+--- procps-3.1.15.old/test/ps/bsd-v-header/setup 2003-09-02 22:56:10.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-v-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="v"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/bsd-v-header2/header procps-3.1.15/test/ps/bsd-v-header2/header
-+--- procps-3.1.15.old/test/ps/bsd-v-header2/header 2003-09-03 07:27:16.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-v-header2/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID STAT TIME SL RE PAGEIN VSZ RSS LIM TSIZ %CPU %MEM COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/bsd-v-header2/setup procps-3.1.15/test/ps/bsd-v-header2/setup
-+--- procps-3.1.15.old/test/ps/bsd-v-header2/setup 2003-09-03 07:22:17.000000000 +1000
-++++ procps-3.1.15/test/ps/bsd-v-header2/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,3 +0,0 @@
-+-export CMD_ENV=bsd
-+-ARGS="-v"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/dynix-F-header/header procps-3.1.15/test/ps/dynix-F-header/header
-+--- procps-3.1.15.old/test/ps/dynix-F-header/header 2003-09-02 22:31:23.000000000 +1000
-++++ procps-3.1.15/test/ps/dynix-F-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/dynix-F-header/setup procps-3.1.15/test/ps/dynix-F-header/setup
-+--- procps-3.1.15.old/test/ps/dynix-F-header/setup 2003-09-02 22:30:43.000000000 +1000
-++++ procps-3.1.15/test/ps/dynix-F-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-F"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/fail-aix-Q/header procps-3.1.15/test/ps/fail-aix-Q/header
-+--- procps-3.1.15.old/test/ps/fail-aix-Q/header 2003-10-02 11:31:34.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-aix-Q/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/fail-aix-Q/setup procps-3.1.15/test/ps/fail-aix-Q/setup
-+--- procps-3.1.15.old/test/ps/fail-aix-Q/setup 2003-10-02 11:32:11.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-aix-Q/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o %Q"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/fail-aix-Q/stderr procps-3.1.15/test/ps/fail-aix-Q/stderr
-+--- procps-3.1.15.old/test/ps/fail-aix-Q/stderr 2003-10-02 11:33:07.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-aix-Q/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Unknown AIX field descriptor.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/fail-aix-improper/header procps-3.1.15/test/ps/fail-aix-improper/header
-+--- procps-3.1.15.old/test/ps/fail-aix-improper/header 2003-10-02 11:34:09.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-aix-improper/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/fail-aix-improper/setup procps-3.1.15/test/ps/fail-aix-improper/setup
-+--- procps-3.1.15.old/test/ps/fail-aix-improper/setup 2003-10-02 11:34:22.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-aix-improper/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o %"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/fail-aix-improper/stderr procps-3.1.15/test/ps/fail-aix-improper/stderr
-+--- procps-3.1.15.old/test/ps/fail-aix-improper/stderr 2003-10-02 11:34:40.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-aix-improper/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Improper AIX field descriptor.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/fail-improper-sort/header procps-3.1.15/test/ps/fail-improper-sort/header
-+--- procps-3.1.15.old/test/ps/fail-improper-sort/header 2003-10-02 11:47:57.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-improper-sort/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/fail-improper-sort/setup procps-3.1.15/test/ps/fail-improper-sort/setup
-+--- procps-3.1.15.old/test/ps/fail-improper-sort/setup 2003-10-02 11:48:15.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-improper-sort/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="--sort ,,"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/fail-improper-sort/stderr procps-3.1.15/test/ps/fail-improper-sort/stderr
-+--- procps-3.1.15.old/test/ps/fail-improper-sort/stderr 2003-10-02 12:22:31.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-improper-sort/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Improper sort list
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/fail-improper-spec/header procps-3.1.15/test/ps/fail-improper-spec/header
-+--- procps-3.1.15.old/test/ps/fail-improper-spec/header 2003-10-02 11:37:17.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-improper-spec/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/fail-improper-spec/setup procps-3.1.15/test/ps/fail-improper-spec/setup
-+--- procps-3.1.15.old/test/ps/fail-improper-spec/setup 2003-10-02 11:37:34.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-improper-spec/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o ,"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/fail-improper-spec/stderr procps-3.1.15/test/ps/fail-improper-spec/stderr
-+--- procps-3.1.15.old/test/ps/fail-improper-spec/stderr 2003-10-02 11:37:52.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-improper-spec/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Improper format list.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/fail-macro-width/header procps-3.1.15/test/ps/fail-macro-width/header
-+--- procps-3.1.15.old/test/ps/fail-macro-width/header 2003-10-02 11:42:15.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-macro-width/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/fail-macro-width/setup procps-3.1.15/test/ps/fail-macro-width/setup
-+--- procps-3.1.15.old/test/ps/fail-macro-width/setup 2003-10-02 11:42:30.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-macro-width/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o DefBSD:6"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/fail-macro-width/stderr procps-3.1.15/test/ps/fail-macro-width/stderr
-+--- procps-3.1.15.old/test/ps/fail-macro-width/stderr 2003-10-02 11:42:46.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-macro-width/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Can't set width for a macro (multi-column) format specifier.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/fail-no-sort-key/header procps-3.1.15/test/ps/fail-no-sort-key/header
-+--- procps-3.1.15.old/test/ps/fail-no-sort-key/header 2003-10-02 11:50:26.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-no-sort-key/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/fail-no-sort-key/setup procps-3.1.15/test/ps/fail-no-sort-key/setup
-+--- procps-3.1.15.old/test/ps/fail-no-sort-key/setup 2003-10-02 11:50:39.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-no-sort-key/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="--sort"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/fail-no-sort-key/stderr procps-3.1.15/test/ps/fail-no-sort-key/stderr
-+--- procps-3.1.15.old/test/ps/fail-no-sort-key/stderr 2003-10-02 11:51:05.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-no-sort-key/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Long sort specification must follow --sort.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/fail-no-width/header procps-3.1.15/test/ps/fail-no-width/header
-+--- procps-3.1.15.old/test/ps/fail-no-width/header 2003-10-02 11:40:56.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-no-width/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/fail-no-width/setup procps-3.1.15/test/ps/fail-no-width/setup
-+--- procps-3.1.15.old/test/ps/fail-no-width/setup 2003-10-02 11:41:22.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-no-width/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o pid:,f,comm"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/fail-no-width/stderr procps-3.1.15/test/ps/fail-no-width/stderr
-+--- procps-3.1.15.old/test/ps/fail-no-width/stderr 2003-10-02 11:40:56.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-no-width/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Column widths must be unsigned decimal numbers.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/fail-nondecimal/header procps-3.1.15/test/ps/fail-nondecimal/header
-+--- procps-3.1.15.old/test/ps/fail-nondecimal/header 2003-10-02 11:39:38.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-nondecimal/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/fail-nondecimal/setup procps-3.1.15/test/ps/fail-nondecimal/setup
-+--- procps-3.1.15.old/test/ps/fail-nondecimal/setup 2003-10-02 11:40:07.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-nondecimal/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o pid:f,comm"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/fail-nondecimal/stderr procps-3.1.15/test/ps/fail-nondecimal/stderr
-+--- procps-3.1.15.old/test/ps/fail-nondecimal/stderr 2003-10-02 11:40:30.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-nondecimal/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Column widths must be unsigned decimal numbers.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/fail-oj/header procps-3.1.15/test/ps/fail-oj/header
-+--- procps-3.1.15.old/test/ps/fail-oj/header 2003-09-02 13:47:18.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-oj/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/fail-oj/setup procps-3.1.15/test/ps/fail-oj/setup
-+--- procps-3.1.15.old/test/ps/fail-oj/setup 2003-09-02 13:47:54.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-oj/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o pid -j"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/fail-oj/stderr procps-3.1.15/test/ps/fail-oj/stderr
-+--- procps-3.1.15.old/test/ps/fail-oj/stderr 2003-09-02 13:49:02.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-oj/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Can't use output modifiers with user-defined output
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/fail-unknown-sort/header procps-3.1.15/test/ps/fail-unknown-sort/header
-+--- procps-3.1.15.old/test/ps/fail-unknown-sort/header 2003-10-02 11:49:27.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-unknown-sort/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/fail-unknown-sort/setup procps-3.1.15/test/ps/fail-unknown-sort/setup
-+--- procps-3.1.15.old/test/ps/fail-unknown-sort/setup 2003-10-02 11:49:41.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-unknown-sort/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="--sort booger"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/fail-unknown-sort/stderr procps-3.1.15/test/ps/fail-unknown-sort/stderr
-+--- procps-3.1.15.old/test/ps/fail-unknown-sort/stderr 2003-10-02 11:50:09.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-unknown-sort/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Unknown sort specifier.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/fail-unknown-spec/header procps-3.1.15/test/ps/fail-unknown-spec/header
-+--- procps-3.1.15.old/test/ps/fail-unknown-spec/header 2003-10-02 11:35:33.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-unknown-spec/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/fail-unknown-spec/setup procps-3.1.15/test/ps/fail-unknown-spec/setup
-+--- procps-3.1.15.old/test/ps/fail-unknown-spec/setup 2003-10-02 11:35:52.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-unknown-spec/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o boogers"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/fail-unknown-spec/stderr procps-3.1.15/test/ps/fail-unknown-spec/stderr
-+--- procps-3.1.15.old/test/ps/fail-unknown-spec/stderr 2003-10-02 11:36:05.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-unknown-spec/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Unknown user-defined format specifier "boogers".
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/fail-xx/header procps-3.1.15/test/ps/fail-xx/header
-+--- procps-3.1.15.old/test/ps/fail-xx/header 2003-09-02 09:43:13.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-xx/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/fail-xx/setup procps-3.1.15/test/ps/fail-xx/setup
-+--- procps-3.1.15.old/test/ps/fail-xx/setup 2003-09-02 09:41:38.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-xx/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="x -x"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/fail-xx/stderr procps-3.1.15/test/ps/fail-xx/stderr
-+--- procps-3.1.15.old/test/ps/fail-xx/stderr 2003-09-02 09:42:04.000000000 +1000
-++++ procps-3.1.15/test/ps/fail-xx/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Unsupported SysV option.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/hpux-H-simple/setup procps-3.1.15/test/ps/hpux-H-simple/setup
-+--- procps-3.1.15.old/test/ps/hpux-H-simple/setup 2003-09-03 10:15:28.000000000 +1000
-++++ procps-3.1.15/test/ps/hpux-H-simple/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-HC fork-you -o comm="
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./fork-you 3 4 5 6 7 8 9
-+-
-+-evalfn () {
-+- diff -Naurd stdout $TESTNAME/stdout >> /dev/null
-+-}
-+-
-+-killfn () {
-+- killall -9 fork-you
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/hpux-H-simple/stdout procps-3.1.15/test/ps/hpux-H-simple/stdout
-+--- procps-3.1.15.old/test/ps/hpux-H-simple/stdout 2003-09-03 09:51:00.000000000 +1000
-++++ procps-3.1.15/test/ps/hpux-H-simple/stdout 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,9 +0,0 @@
-+-fork-you
-+- fork-you
-+- fork-you
-+- fork-you
-+- fork-you
-+- fork-you
-+- fork-you
-+- fork-you
-+- fork-you
-+diff -ruN procps-3.1.15.old/test/ps/jyclf-header/header procps-3.1.15/test/ps/jyclf-header/header
-+--- procps-3.1.15.old/test/ps/jyclf-header/header 2003-09-02 13:57:34.000000000 +1000
-++++ procps-3.1.15/test/ps/jyclf-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- S UID PID PPID PGID SID CLS PRI RSS SZ WCHAN STIME TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/jyclf-header/setup procps-3.1.15/test/ps/jyclf-header/setup
-+--- procps-3.1.15.old/test/ps/jyclf-header/setup 2003-09-02 13:55:34.000000000 +1000
-++++ procps-3.1.15/test/ps/jyclf-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-jyclf"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/linux-lf-header/header procps-3.1.15/test/ps/linux-lf-header/header
-+--- procps-3.1.15.old/test/ps/linux-lf-header/header 2003-09-02 14:03:14.000000000 +1000
-++++ procps-3.1.15/test/ps/linux-lf-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- F S USER PID PPID C PRI NI P SZ WCHAN STIME TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/linux-lf-header/setup procps-3.1.15/test/ps/linux-lf-header/setup
-+--- procps-3.1.15.old/test/ps/linux-lf-header/setup 2003-09-02 14:04:14.000000000 +1000
-++++ procps-3.1.15/test/ps/linux-lf-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,3 +0,0 @@
-+-export CMD_ENV=linux
-+-ARGS="-lf"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/mH-mix/header procps-3.1.15/test/ps/mH-mix/header
-+--- procps-3.1.15.old/test/ps/mH-mix/header 2003-10-02 12:38:52.000000000 +1000
-++++ procps-3.1.15/test/ps/mH-mix/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/mH-mix/setup procps-3.1.15/test/ps/mH-mix/setup
-+--- procps-3.1.15.old/test/ps/mH-mix/setup 2003-10-02 12:39:25.000000000 +1000
-++++ procps-3.1.15/test/ps/mH-mix/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="mH"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/mH-mix/stderr procps-3.1.15/test/ps/mH-mix/stderr
-+--- procps-3.1.15.old/test/ps/mH-mix/stderr 2003-10-02 12:40:18.000000000 +1000
-++++ procps-3.1.15/test/ps/mH-mix/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Thread flags conflict; can't use H with m or -m.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/mH-mix2/header procps-3.1.15/test/ps/mH-mix2/header
-+--- procps-3.1.15.old/test/ps/mH-mix2/header 2003-10-02 12:38:58.000000000 +1000
-++++ procps-3.1.15/test/ps/mH-mix2/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/mH-mix2/setup procps-3.1.15/test/ps/mH-mix2/setup
-+--- procps-3.1.15.old/test/ps/mH-mix2/setup 2003-10-02 12:39:15.000000000 +1000
-++++ procps-3.1.15/test/ps/mH-mix2/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-m H"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/mH-mix2/stderr procps-3.1.15/test/ps/mH-mix2/stderr
-+--- procps-3.1.15.old/test/ps/mH-mix2/stderr 2003-10-02 12:40:20.000000000 +1000
-++++ procps-3.1.15/test/ps/mH-mix2/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Thread flags conflict; can't use H with m or -m.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/mm-mix/header procps-3.1.15/test/ps/mm-mix/header
-+--- procps-3.1.15.old/test/ps/mm-mix/header 2003-10-02 12:37:41.000000000 +1000
-++++ procps-3.1.15/test/ps/mm-mix/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/mm-mix/setup procps-3.1.15/test/ps/mm-mix/setup
-+--- procps-3.1.15.old/test/ps/mm-mix/setup 2003-10-02 12:37:57.000000000 +1000
-++++ procps-3.1.15/test/ps/mm-mix/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-m m"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/mm-mix/stderr procps-3.1.15/test/ps/mm-mix/stderr
-+--- procps-3.1.15.old/test/ps/mm-mix/stderr 2003-10-02 12:38:11.000000000 +1000
-++++ procps-3.1.15/test/ps/mm-mix/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Thread flags conflict; can't use both m and -m.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/multi-sort/header procps-3.1.15/test/ps/multi-sort/header
-+--- procps-3.1.15.old/test/ps/multi-sort/header 2003-10-02 12:08:50.000000000 +1000
-++++ procps-3.1.15/test/ps/multi-sort/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/multi-sort/setup procps-3.1.15/test/ps/multi-sort/setup
-+--- procps-3.1.15.old/test/ps/multi-sort/setup 2003-10-02 12:09:10.000000000 +1000
-++++ procps-3.1.15/test/ps/multi-sort/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="--sort wchan --sort sess"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/multi-sort/stderr procps-3.1.15/test/ps/multi-sort/stderr
-+--- procps-3.1.15.old/test/ps/multi-sort/stderr 2003-10-02 12:09:23.000000000 +1000
-++++ procps-3.1.15/test/ps/multi-sort/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Multiple sort options.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/o-O/header procps-3.1.15/test/ps/o-O/header
-+--- procps-3.1.15.old/test/ps/o-O/header 2003-10-02 12:03:27.000000000 +1000
-++++ procps-3.1.15/test/ps/o-O/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/o-O/setup procps-3.1.15/test/ps/o-O/setup
-+--- procps-3.1.15.old/test/ps/o-O/setup 2003-10-02 12:04:40.000000000 +1000
-++++ procps-3.1.15/test/ps/o-O/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o wchan -O sess"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/o-O/stderr procps-3.1.15/test/ps/o-O/stderr
-+--- procps-3.1.15.old/test/ps/o-O/stderr 2003-10-02 12:06:35.000000000 +1000
-++++ procps-3.1.15/test/ps/o-O/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: option -O can not follow other format options.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/o-o/header procps-3.1.15/test/ps/o-o/header
-+--- procps-3.1.15.old/test/ps/o-o/header 2003-10-02 12:07:18.000000000 +1000
-++++ procps-3.1.15/test/ps/o-o/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- WCHAN SESS
-+diff -ruN procps-3.1.15.old/test/ps/o-o/setup procps-3.1.15/test/ps/o-o/setup
-+--- procps-3.1.15.old/test/ps/o-o/setup 2003-10-02 12:07:08.000000000 +1000
-++++ procps-3.1.15/test/ps/o-o/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o wchan -o sess"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/old-m-1/header procps-3.1.15/test/ps/old-m-1/header
-+--- procps-3.1.15.old/test/ps/old-m-1/header 2003-09-02 09:46:21.000000000 +1000
-++++ procps-3.1.15/test/ps/old-m-1/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY MAJFLT MINFLT TRS DRS SIZE SWAP RSS SHRD LIB DT COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/old-m-1/setup procps-3.1.15/test/ps/old-m-1/setup
-+--- procps-3.1.15.old/test/ps/old-m-1/setup 2003-09-02 09:46:06.000000000 +1000
-++++ procps-3.1.15/test/ps/old-m-1/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,3 +0,0 @@
-+-export CMD_ENV=old
-+-ARGS="-m"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/old-m-2/header procps-3.1.15/test/ps/old-m-2/header
-+--- procps-3.1.15.old/test/ps/old-m-2/header 2003-09-02 09:47:13.000000000 +1000
-++++ procps-3.1.15/test/ps/old-m-2/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY MAJFLT MINFLT TRS DRS SIZE SWAP RSS SHRD LIB DT COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/old-m-2/setup procps-3.1.15/test/ps/old-m-2/setup
-+--- procps-3.1.15.old/test/ps/old-m-2/setup 2003-09-02 09:47:47.000000000 +1000
-++++ procps-3.1.15/test/ps/old-m-2/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,4 +0,0 @@
-+-export CMD_ENV=unix
-+-export PS_PERSONALITY=old
-+-ARGS="-m"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/old-m-3/header procps-3.1.15/test/ps/old-m-3/header
-+--- procps-3.1.15.old/test/ps/old-m-3/header 2003-09-02 09:47:15.000000000 +1000
-++++ procps-3.1.15/test/ps/old-m-3/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY MAJFLT MINFLT TRS DRS SIZE SWAP RSS SHRD LIB DT COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/old-m-3/setup procps-3.1.15/test/ps/old-m-3/setup
-+--- procps-3.1.15.old/test/ps/old-m-3/setup 2003-09-02 09:47:58.000000000 +1000
-++++ procps-3.1.15/test/ps/old-m-3/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,3 +0,0 @@
-+-export CMD_ENV=old
-+-ARGS="m"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/old-m-4/header procps-3.1.15/test/ps/old-m-4/header
-+--- procps-3.1.15.old/test/ps/old-m-4/header 2003-09-02 09:47:16.000000000 +1000
-++++ procps-3.1.15/test/ps/old-m-4/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY MAJFLT MINFLT TRS DRS SIZE SWAP RSS SHRD LIB DT COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/old-m-4/setup procps-3.1.15/test/ps/old-m-4/setup
-+--- procps-3.1.15.old/test/ps/old-m-4/setup 2003-09-02 09:50:11.000000000 +1000
-++++ procps-3.1.15/test/ps/old-m-4/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,3 +0,0 @@
-+-export I_WANT_A_BROKEN_PS=
-+-ARGS="-m"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/pcpu-sort-threaded/setup procps-3.1.15/test/ps/pcpu-sort-threaded/setup
-+--- procps-3.1.15.old/test/ps/pcpu-sort-threaded/setup 2003-10-19 13:48:43.000000000 +1000
-++++ procps-3.1.15/test/ps/pcpu-sort-threaded/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,8 +0,0 @@
-+-ARGS="-e --sort=pcpu -o cp="
-+-GOOD=0
-+-EVALFN=1
-+-
-+-evalfn () {
-+- sort -n < stdout > sorted.tmp
-+- diff -Naurd stdout sorted.tmp >> /dev/null
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/suv-conflicts/header procps-3.1.15/test/ps/suv-conflicts/header
-+--- procps-3.1.15.old/test/ps/suv-conflicts/header 2003-10-02 12:12:30.000000000 +1000
-++++ procps-3.1.15/test/ps/suv-conflicts/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/suv-conflicts/setup procps-3.1.15/test/ps/suv-conflicts/setup
-+--- procps-3.1.15.old/test/ps/suv-conflicts/setup 2003-10-02 12:13:26.000000000 +1000
-++++ procps-3.1.15/test/ps/suv-conflicts/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="suv"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/suv-conflicts/stderr procps-3.1.15/test/ps/suv-conflicts/stderr
-+--- procps-3.1.15.old/test/ps/suv-conflicts/stderr 2003-10-02 12:13:41.000000000 +1000
-++++ procps-3.1.15/test/ps/suv-conflicts/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Conflicting format options.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/sysv-selection/header procps-3.1.15/test/ps/sysv-selection/header
-+--- procps-3.1.15.old/test/ps/sysv-selection/header 2003-09-04 16:13:34.000000000 +1000
-++++ procps-3.1.15/test/ps/sysv-selection/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/sysv-selection/setup procps-3.1.15/test/ps/sysv-selection/setup
-+--- procps-3.1.15.old/test/ps/sysv-selection/setup 2003-09-13 13:59:04.000000000 +1000
-++++ procps-3.1.15/test/ps/sysv-selection/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,25 +0,0 @@
-+-ARGS="-m"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-rm -f misc.tmp ready.tmp typescript.tmp
-+-
-+-./got-no-tty
-+-# this'll do but... WHERE ARE THE MAN PAGES FOR PTY STUFF???
-+-(SHELL=`pwd`/script-child script typescript.tmp &>/dev/null) &
-+-while [ ! -f ready.tmp ] ; do sleep 0.01 ; done
-+-. ready.tmp
-+-
-+-evalfn () {
-+- THIS_TTY=`tty | colrm 1 5`
-+- lines1=`awk '{print $2}' < stdout | sort -u | egrep "^($THIS_TTY)$" | wc -l`
-+- lines3=`awk '{print $2}' < stdout | sort -u | egrep "^($SHELL_TTY|$THIS_TTY|\?)$" | wc -l`
-+- [ $lines1 == 1 ] && [ $lines3 == 1 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 got-no-tty
-+- kill -9 $SHELL_PID # the others should freely die
-+- rm -f misc.tmp ready.tmp typescript.tmp
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-H/header procps-3.1.15/test/ps/thread-nosort-H/header
-+--- procps-3.1.15.old/test/ps/thread-nosort-H/header 2003-10-20 10:57:52.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-H/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY STAT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-H/setup procps-3.1.15/test/ps/thread-nosort-H/setup
-+--- procps-3.1.15.old/test/ps/thread-nosort-H/setup 2003-10-20 10:50:16.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-H/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-C clone-once H"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./clone-once
-+-
-+-evalfn () {
-+- [ `wc -l < stdout` == 3 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 clone-once
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-HL/header procps-3.1.15/test/ps/thread-nosort-HL/header
-+--- procps-3.1.15.old/test/ps/thread-nosort-HL/header 2003-10-20 10:57:52.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-HL/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID LWP TTY STAT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-HL/setup procps-3.1.15/test/ps/thread-nosort-HL/setup
-+--- procps-3.1.15.old/test/ps/thread-nosort-HL/setup 2003-10-20 10:50:16.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-HL/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-C clone-once H -L"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./clone-once
-+-
-+-evalfn () {
-+- [ `wc -l < stdout` == 3 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 clone-once
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-Hm/setup procps-3.1.15/test/ps/thread-nosort-Hm/setup
-+--- procps-3.1.15.old/test/ps/thread-nosort-Hm/setup 2003-10-20 10:50:16.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-Hm/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-C clone-once Hm"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-Hm/stderr procps-3.1.15/test/ps/thread-nosort-Hm/stderr
-+--- procps-3.1.15.old/test/ps/thread-nosort-Hm/stderr 2003-10-20 10:58:35.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-Hm/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Thread flags conflict; can't use H with m or -m.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-L/header procps-3.1.15/test/ps/thread-nosort-L/header
-+--- procps-3.1.15.old/test/ps/thread-nosort-L/header 2003-10-20 10:57:52.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-L/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID LWP TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-L/setup procps-3.1.15/test/ps/thread-nosort-L/setup
-+--- procps-3.1.15.old/test/ps/thread-nosort-L/setup 2003-10-20 10:50:16.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-L/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-C clone-once -L"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./clone-once
-+-
-+-evalfn () {
-+- [ `wc -l < stdout` == 3 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 clone-once
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-default/header procps-3.1.15/test/ps/thread-nosort-default/header
-+--- procps-3.1.15.old/test/ps/thread-nosort-default/header 2003-10-20 10:57:53.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-default/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-default/setup procps-3.1.15/test/ps/thread-nosort-default/setup
-+--- procps-3.1.15.old/test/ps/thread-nosort-default/setup 2003-10-20 10:50:16.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-default/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-C clone-once"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./clone-once
-+-
-+-evalfn () {
-+- [ `wc -l < stdout` == 2 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 clone-once
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-m/header procps-3.1.15/test/ps/thread-nosort-m/header
-+--- procps-3.1.15.old/test/ps/thread-nosort-m/header 2003-10-20 10:57:53.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-m/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY STAT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-m/setup procps-3.1.15/test/ps/thread-nosort-m/setup
-+--- procps-3.1.15.old/test/ps/thread-nosort-m/setup 2003-10-20 10:50:16.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-m/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-C clone-once m"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./clone-once
-+-
-+-evalfn () {
-+- [ `wc -l < stdout` == 4 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 clone-once
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-mL/header procps-3.1.15/test/ps/thread-nosort-mL/header
-+--- procps-3.1.15.old/test/ps/thread-nosort-mL/header 2003-10-20 10:57:53.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-mL/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID LWP TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/thread-nosort-mL/setup procps-3.1.15/test/ps/thread-nosort-mL/setup
-+--- procps-3.1.15.old/test/ps/thread-nosort-mL/setup 2003-10-20 10:50:16.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-nosort-mL/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-C clone-once -mL"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./clone-once
-+-
-+-evalfn () {
-+- [ `wc -l < stdout` == 4 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 clone-once
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-H/header procps-3.1.15/test/ps/thread-sorted-H/header
-+--- procps-3.1.15.old/test/ps/thread-sorted-H/header 2003-10-20 10:57:53.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-H/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY STAT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-H/setup procps-3.1.15/test/ps/thread-sorted-H/setup
-+--- procps-3.1.15.old/test/ps/thread-sorted-H/setup 2003-10-20 10:45:59.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-H/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-C clone-once --sort=pid H"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./clone-once
-+-
-+-evalfn () {
-+- [ `wc -l < stdout` == 3 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 clone-once
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-HL/header procps-3.1.15/test/ps/thread-sorted-HL/header
-+--- procps-3.1.15.old/test/ps/thread-sorted-HL/header 2003-10-20 10:57:53.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-HL/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID LWP TTY STAT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-HL/setup procps-3.1.15/test/ps/thread-sorted-HL/setup
-+--- procps-3.1.15.old/test/ps/thread-sorted-HL/setup 2003-10-20 10:45:16.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-HL/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-C clone-once --sort=pid H -L"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./clone-once
-+-
-+-evalfn () {
-+- [ `wc -l < stdout` == 3 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 clone-once
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-Hm/setup procps-3.1.15/test/ps/thread-sorted-Hm/setup
-+--- procps-3.1.15.old/test/ps/thread-sorted-Hm/setup 2003-10-20 10:47:00.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-Hm/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-C clone-once --sort=pid Hm"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-Hm/stderr procps-3.1.15/test/ps/thread-sorted-Hm/stderr
-+--- procps-3.1.15.old/test/ps/thread-sorted-Hm/stderr 2003-10-20 10:58:47.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-Hm/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Thread flags conflict; can't use H with m or -m.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-L/header procps-3.1.15/test/ps/thread-sorted-L/header
-+--- procps-3.1.15.old/test/ps/thread-sorted-L/header 2003-10-20 10:57:53.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-L/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID LWP TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-L/setup procps-3.1.15/test/ps/thread-sorted-L/setup
-+--- procps-3.1.15.old/test/ps/thread-sorted-L/setup 2003-10-20 10:45:35.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-L/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-C clone-once --sort=pid -L"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./clone-once
-+-
-+-evalfn () {
-+- [ `wc -l < stdout` == 3 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 clone-once
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-default/header procps-3.1.15/test/ps/thread-sorted-default/header
-+--- procps-3.1.15.old/test/ps/thread-sorted-default/header 2003-10-20 10:57:53.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-default/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-default/setup procps-3.1.15/test/ps/thread-sorted-default/setup
-+--- procps-3.1.15.old/test/ps/thread-sorted-default/setup 2003-10-20 10:47:53.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-default/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-C clone-once --sort=pid"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./clone-once
-+-
-+-evalfn () {
-+- [ `wc -l < stdout` == 2 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 clone-once
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-m/header procps-3.1.15/test/ps/thread-sorted-m/header
-+--- procps-3.1.15.old/test/ps/thread-sorted-m/header 2003-10-20 10:57:53.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-m/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY STAT TIME COMMAND
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-m/setup procps-3.1.15/test/ps/thread-sorted-m/setup
-+--- procps-3.1.15.old/test/ps/thread-sorted-m/setup 2003-10-20 10:42:59.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-m/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-C clone-once --sort=pid m"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./clone-once
-+-
-+-evalfn () {
-+- [ `wc -l < stdout` == 4 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 clone-once
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-mL/header procps-3.1.15/test/ps/thread-sorted-mL/header
-+--- procps-3.1.15.old/test/ps/thread-sorted-mL/header 2003-10-20 10:57:54.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-mL/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID LWP TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/thread-sorted-mL/setup procps-3.1.15/test/ps/thread-sorted-mL/setup
-+--- procps-3.1.15.old/test/ps/thread-sorted-mL/setup 2003-10-20 10:44:46.000000000 +1000
-++++ procps-3.1.15/test/ps/thread-sorted-mL/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-C clone-once --sort=pid -mL"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./clone-once
-+-
-+-evalfn () {
-+- [ `wc -l < stdout` == 4 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 clone-once
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/unix-comm/setup procps-3.1.15/test/ps/unix-comm/setup
-+--- procps-3.1.15.old/test/ps/unix-comm/setup 2003-09-02 10:33:46.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-comm/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,7 +0,0 @@
-+-ARGS=
-+-GOOD=0
-+-EVALFN=1
-+-
-+-evalfn () {
-+- grep "ps$" stdout >> /dev/null
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/unix-doc/setup procps-3.1.15/test/ps/unix-doc/setup
-+--- procps-3.1.15.old/test/ps/unix-doc/setup 2003-09-03 13:38:37.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-doc/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,37 +0,0 @@
-+-# The UNIX+POSIX standard requires that, except for "args" and "comm",
-+-# the documentation must warn about any implementation-defined
-+-# format specifiers that may contain blanks.
-+-#
-+-# Using "ps L" to grab the list isn't proper, but it's needed.
-+-#
-+-# This is our list for the man page:
-+-#
-+-#args COMMAND
-+-#cmd CMD
-+-#comm COMMAND
-+-#command COMMAND
-+-#fname COMMAND
-+-#ucmd CMD
-+-#ucomm COMMAND
-+-#lstart STARTED
-+-#bsdstart START
-+-#start STARTED
-+-
-+-# It gets to 819 last I checked
-+-export COLUMNS=1111
-+-
-+-biglist=`$TESTME L \
-+- | egrep -v '^(comm|args|cmd|comm|command|fname|ucmd|ucomm|lstart|bsdstart|start) ' \
-+- | awk '{printf("%s,",$1);}'`
-+-numcols=`echo $biglist | tr -dc , | wc -c`
-+-
-+-ARGS=-eo$biglist
-+-GOOD=0
-+-EVALFN=1
-+-
-+-evalfn () {
-+- while read -a myarray; do
-+- [ ${#myarray[*]} == $numcols ] || return 1
-+- done < stdout
-+- return 0
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/unix-f-args/setup procps-3.1.15/test/ps/unix-f-args/setup
-+--- procps-3.1.15.old/test/ps/unix-f-args/setup 2003-09-02 10:33:18.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-f-args/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,7 +0,0 @@
-+-ARGS="-f"
-+-GOOD=0
-+-EVALFN=1
-+-
-+-evalfn () {
-+- grep "ps -f$" stdout >> /dev/null
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/unix-f-header/header procps-3.1.15/test/ps/unix-f-header/header
-+--- procps-3.1.15.old/test/ps/unix-f-header/header 2003-09-02 08:40:35.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-f-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- UID PID PPID C STIME TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/unix-f-header/setup procps-3.1.15/test/ps/unix-f-header/setup
-+--- procps-3.1.15.old/test/ps/unix-f-header/setup 2003-09-02 08:37:18.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-f-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-f"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/unix-fl-header/header procps-3.1.15/test/ps/unix-fl-header/header
-+--- procps-3.1.15.old/test/ps/unix-fl-header/header 2003-09-02 08:53:56.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-fl-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/unix-fl-header/setup procps-3.1.15/test/ps/unix-fl-header/setup
-+--- procps-3.1.15.old/test/ps/unix-fl-header/setup 2003-09-02 08:55:32.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-fl-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-fl"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/unix-header/header procps-3.1.15/test/ps/unix-header/header
-+--- procps-3.1.15.old/test/ps/unix-header/header 2003-09-02 08:53:56.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/unix-header/setup procps-3.1.15/test/ps/unix-header/setup
-+--- procps-3.1.15.old/test/ps/unix-header/setup 2003-09-02 08:55:09.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS=
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/unix-l-header/header procps-3.1.15/test/ps/unix-l-header/header
-+--- procps-3.1.15.old/test/ps/unix-l-header/header 2003-09-02 08:53:56.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-l-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/unix-l-header/setup procps-3.1.15/test/ps/unix-l-header/setup
-+--- procps-3.1.15.old/test/ps/unix-l-header/setup 2003-09-02 08:55:49.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-l-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-l"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/unix-lf-header/header procps-3.1.15/test/ps/unix-lf-header/header
-+--- procps-3.1.15.old/test/ps/unix-lf-header/header 2003-09-02 08:53:56.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-lf-header/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/unix-lf-header/setup procps-3.1.15/test/ps/unix-lf-header/setup
-+--- procps-3.1.15.old/test/ps/unix-lf-header/setup 2003-09-02 08:55:39.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-lf-header/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-lf"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/unix-o-header-all/header procps-3.1.15/test/ps/unix-o-header-all/header
-+--- procps-3.1.15.old/test/ps/unix-o-header-all/header 2003-09-02 09:23:24.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-o-header-all/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- COMMAND COMMAND ELAPSED GROUP NI %CPU PGID PID PPID RGROUP RUSER TIME TT USER VSZ
-+diff -ruN procps-3.1.15.old/test/ps/unix-o-header-all/setup procps-3.1.15/test/ps/unix-o-header-all/setup
-+--- procps-3.1.15.old/test/ps/unix-o-header-all/setup 2003-09-02 09:23:11.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-o-header-all/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o args,comm,etime,group,nice,pcpu,pgid,pid,ppid,rgroup,ruser,time,tty,user,vsz"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/unix-o-header-dup/header procps-3.1.15/test/ps/unix-o-header-dup/header
-+--- procps-3.1.15.old/test/ps/unix-o-header-dup/header 2003-09-02 09:16:50.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-o-header-dup/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TT PID PPID
-+diff -ruN procps-3.1.15.old/test/ps/unix-o-header-dup/setup procps-3.1.15/test/ps/unix-o-header-dup/setup
-+--- procps-3.1.15.old/test/ps/unix-o-header-dup/setup 2003-09-02 09:16:22.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-o-header-dup/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o pid,tty -o pid,ppid"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/unix-o-header-evil/header procps-3.1.15/test/ps/unix-o-header-evil/header
-+--- procps-3.1.15.old/test/ps/unix-o-header-evil/header 2003-09-02 12:39:36.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-o-header-evil/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PPID PID FOO,tty PPID
-+diff -ruN procps-3.1.15.old/test/ps/unix-o-header-evil/setup procps-3.1.15/test/ps/unix-o-header-evil/setup
-+--- procps-3.1.15.old/test/ps/unix-o-header-evil/setup 2003-09-02 12:39:19.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-o-header-evil/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-o ppid -o pid,ppid=FOO,tty -o ppid"
-+-GOOD=0
-+diff -ruN procps-3.1.15.old/test/ps/unix-o-header-nil/setup procps-3.1.15/test/ps/unix-o-header-nil/setup
-+--- procps-3.1.15.old/test/ps/unix-o-header-nil/setup 2003-09-02 10:08:33.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-o-header-nil/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,7 +0,0 @@
-+-ARGS="-o pid="
-+-GOOD=0
-+-EVALFN=1
-+-
-+-evalfn () {
-+- ! grep PID stdout >> /dev/null
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/unix-selection/header procps-3.1.15/test/ps/unix-selection/header
-+--- procps-3.1.15.old/test/ps/unix-selection/header 2003-09-04 16:13:48.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-selection/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+- PID TTY TIME CMD
-+diff -ruN procps-3.1.15.old/test/ps/unix-selection/setup procps-3.1.15/test/ps/unix-selection/setup
-+--- procps-3.1.15.old/test/ps/unix-selection/setup 2003-09-13 14:00:48.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-selection/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,25 +0,0 @@
-+-ARGS=
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-rm -f misc.tmp ready.tmp typescript.tmp
-+-
-+-./got-no-tty
-+-# this'll do but... WHERE ARE THE MAN PAGES FOR PTY STUFF???
-+-(SHELL=`pwd`/script-child script typescript.tmp &>/dev/null) &
-+-while [ ! -f ready.tmp ] ; do sleep 0.01 ; done
-+-. ready.tmp
-+-
-+-evalfn () {
-+- THIS_TTY=`tty | colrm 1 5`
-+- lines1=`awk '{print $2}' < stdout | sort -u | egrep "^($THIS_TTY)$" | wc -l`
-+- lines3=`awk '{print $2}' < stdout | sort -u | egrep "^($SHELL_TTY|$THIS_TTY|\?)$" | wc -l`
-+- [ $lines1 == 1 ] && [ $lines3 == 1 ]
-+-}
-+-
-+-killfn () {
-+- killall -9 got-no-tty
-+- kill -9 $SHELL_PID # the others should freely die
-+- rm -f misc.tmp ready.tmp typescript.tmp
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/unix-tty-default/setup procps-3.1.15/test/ps/unix-tty-default/setup
-+--- procps-3.1.15.old/test/ps/unix-tty-default/setup 2003-09-02 11:36:37.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-tty-default/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS=
-+-GOOD=0
-+-EVALFN=1
-+-
-+-# default output is restricted to this tty
-+-MYTTY=`tty`
-+-
-+-evalfn () {
-+- PSTTY=`awk '!/TTY/{print $2}' < stdout | uniq`
-+- if [ /dev/$PSTTY != $MYTTY ] ; then
-+- return 1
-+- fi
-+- return 0
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/unix-tty-name/setup procps-3.1.15/test/ps/unix-tty-name/setup
-+--- procps-3.1.15.old/test/ps/unix-tty-name/setup 2003-09-02 10:42:55.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-tty-name/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,9 +0,0 @@
-+-ARGS="-otty= -p$$"
-+-GOOD=0
-+-EVALFN=1
-+-
-+-evalfn () {
-+- MYTTY=`tty`
-+- PSTTY=`printf /dev/ ; cat stdout`
-+- [ $MYTTY == $PSTTY ]
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/unix-tty-names/setup procps-3.1.15/test/ps/unix-tty-names/setup
-+--- procps-3.1.15.old/test/ps/unix-tty-names/setup 2003-09-02 11:17:09.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-tty-names/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,26 +0,0 @@
-+-ARGS="-eotty="
-+-GOOD=0
-+-EVALFN=1
-+-
-+-# the UNIX spec allows:
-+-#
-+-# /dev/ttyS0 as ttyS0
-+-# /dev/ttyS0 as S0 (OK to chop a leading "tty")
-+-# /dev/console as console
-+-# /foo/bar as bar or /foo/bar (poorly unspecified)
-+-# -nothing- as ? or - (poorly unspecified, we use '?')
-+-#
-+-# Also, the format must agree with what "who" uses.
-+-# Linux "who" doesn't strip "tty" off of /dev/ttyS0, etc.,
-+-# so that's illegal in a Linux environment.
-+-#
-+-# junk the '?' to avoid shell wildcard expansion
-+-
-+-evalfn () {
-+- for i in `tr -d '?' < stdout | sort -u` ; do
-+- if [ ! -c /dev/$i -a ! -c /$i ] ; then
-+- return 1
-+- fi
-+- done
-+- return 0
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/unix-vsz/setup procps-3.1.15/test/ps/unix-vsz/setup
-+--- procps-3.1.15.old/test/ps/unix-vsz/setup 2003-09-11 10:24:38.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-vsz/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,27 +0,0 @@
-+-# The standard describes the "vsz" format as:
-+-# The size of the process in (virtual) memory
-+-# in 1024 byte units as a decimal integer.
-+-#
-+-# It's hard to tell 1000-byte from 1024-byte units,
-+-# but easy to tell 1024-byte from 512-byte or 2 kB.
-+-# On a 64-bit system, watch for 4 GB troubles as well.
-+-
-+-# throw in the PID to ensure whitespace on the left
-+-ARGS="-C gigabyte -o pid= -o vsz="
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-BITSIZE=`./gigabyte`
-+-
-+-evalfn () {
-+- if [ $BITSIZE == 32bit ] ; then
-+- egrep ' 1......$' stdout >> /dev/null
-+- else
-+- egrep ' 1.......$' stdout >> /dev/null
-+- fi
-+-}
-+-
-+-killfn () {
-+- killall -9 gigabyte
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/unix-wchan/setup procps-3.1.15/test/ps/unix-wchan/setup
-+--- procps-3.1.15.old/test/ps/unix-wchan/setup 2003-09-02 12:25:15.000000000 +1000
-++++ procps-3.1.15/test/ps/unix-wchan/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,11 +0,0 @@
-+-ARGS="-eowchan="
-+-GOOD=0
-+-EVALFN=1
-+-
-+-# Make sure we're getting back real wchan data,
-+-# not just "WCHAN", "-", "0", "*", and hex digits.
-+-# Assumes usage of letters [g-z].
-+-
-+-evalfn () {
-+- egrep '[g-z]' stdout >> /dev/null
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/y-needs-l/header procps-3.1.15/test/ps/y-needs-l/header
-+--- procps-3.1.15.old/test/ps/y-needs-l/header 2003-10-02 12:10:34.000000000 +1000
-++++ procps-3.1.15/test/ps/y-needs-l/header 1970-01-01 10:00:00.000000000 +1000
-+@@ -1 +0,0 @@
-+-
-+\ No newline at end of file
-+diff -ruN procps-3.1.15.old/test/ps/y-needs-l/setup procps-3.1.15/test/ps/y-needs-l/setup
-+--- procps-3.1.15.old/test/ps/y-needs-l/setup 2003-10-02 12:10:45.000000000 +1000
-++++ procps-3.1.15/test/ps/y-needs-l/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,2 +0,0 @@
-+-ARGS="-y"
-+-GOOD=1
-+diff -ruN procps-3.1.15.old/test/ps/y-needs-l/stderr procps-3.1.15/test/ps/y-needs-l/stderr
-+--- procps-3.1.15.old/test/ps/y-needs-l/stderr 2003-10-02 12:10:56.000000000 +1000
-++++ procps-3.1.15/test/ps/y-needs-l/stderr 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,23 +0,0 @@
-+-ERROR: Modifier -y without format -l makes no sense.
-+-********* simple selection ********* ********* selection by list *********
-+--A all processes -C by command name
-+--N negate selection -G by real group ID (supports names)
-+--a all w/ tty except session leaders -U by real user ID (supports names)
-+--d all except session leaders -g by session leader OR by group name
-+--e all processes -p by process ID
-+-T all processes on this terminal -s processes in the sessions given
-+-a all w/ tty, including other users -t by tty
-+-g all, even group leaders! -u by effective user ID (supports names)
-+-r only running processes U processes for specified users
-+-x processes w/o controlling ttys t by tty
-+-*********** output format ********** *********** long options ***********
-+--o,o user-defined -f full --Group --User --pid --cols --ppid
-+--j,j job control s signal --group --user --sid --rows
-+--O,O preloaded -o v virtual memory --cumulative --format --deselect
-+--l,l long u user-oriented --sort --tty --forest --version
-+--F extra full X registers --heading --no-heading
-+- ********* misc options *********
-+--V,V show version L list format codes f ASCII art forest
-+--m,m show threads S children in sum -y change -l format
-+--n,N set namelist file c true command name n numeric WCHAN,UID
-+--w,w wide output e show environment -H process hierarchy
-+diff -ruN procps-3.1.15.old/test/ps/zombie-args/setup procps-3.1.15/test/ps/zombie-args/setup
-+--- procps-3.1.15.old/test/ps/zombie-args/setup 2003-09-04 13:43:31.000000000 +1000
-++++ procps-3.1.15/test/ps/zombie-args/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,18 +0,0 @@
-+-ARGS="-H -C the_living_dead -o args"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-# the -H is just to ensure predictable output ordering
-+-
-+-# assumes that the processes won't get swapped out before ps runs
-+-
-+-./the_living_dead
-+-
-+-evalfn () {
-+- diff -Naurd stdout $TESTNAME/stdout >> /dev/null
-+-}
-+-
-+-killfn () {
-+- killall -9 the_living_dead
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/zombie-args/stdout procps-3.1.15/test/ps/zombie-args/stdout
-+--- procps-3.1.15.old/test/ps/zombie-args/stdout 2003-09-04 13:44:01.000000000 +1000
-++++ procps-3.1.15/test/ps/zombie-args/stdout 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,3 +0,0 @@
-+-COMMAND
-+-./the_living_dead
-+- [the_living_dead] <defunct>
-+diff -ruN procps-3.1.15.old/test/ps/zombie-comm/setup procps-3.1.15/test/ps/zombie-comm/setup
-+--- procps-3.1.15.old/test/ps/zombie-comm/setup 2003-09-04 13:43:44.000000000 +1000
-++++ procps-3.1.15/test/ps/zombie-comm/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,16 +0,0 @@
-+-ARGS="-H -C the_living_dead -o comm"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-# the -H is just to ensure predictable output ordering
-+-
-+-./the_living_dead
-+-
-+-evalfn () {
-+- diff -Naurd stdout $TESTNAME/stdout >> /dev/null
-+-}
-+-
-+-killfn () {
-+- killall -9 the_living_dead
-+-}
-+diff -ruN procps-3.1.15.old/test/ps/zombie-comm/stdout procps-3.1.15/test/ps/zombie-comm/stdout
-+--- procps-3.1.15.old/test/ps/zombie-comm/stdout 2003-09-04 13:44:12.000000000 +1000
-++++ procps-3.1.15/test/ps/zombie-comm/stdout 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,3 +0,0 @@
-+-COMMAND
-+-the_living_dead
-+- the_living_dead <defunct>
-+diff -ruN procps-3.1.15.old/test/ps/zombie-wchan/setup procps-3.1.15/test/ps/zombie-wchan/setup
-+--- procps-3.1.15.old/test/ps/zombie-wchan/setup 2003-09-04 13:52:41.000000000 +1000
-++++ procps-3.1.15/test/ps/zombie-wchan/setup 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,14 +0,0 @@
-+-ARGS="-C the_living_dead -o wchan,stat,comm"
-+-GOOD=0
-+-EVALFN=1
-+-KILLFN=1
-+-
-+-./the_living_dead
-+-
-+-evalfn () {
-+- egrep 'exit.*Z.*defunct' stdout >> /dev/null
-+-}
-+-
-+-killfn () {
-+- killall -9 the_living_dead
-+-}
-+diff -ruN procps-3.1.15.old/test/runtests procps-3.1.15/test/runtests
-+--- procps-3.1.15.old/test/runtests 2003-09-03 12:09:08.000000000 +1000
-++++ procps-3.1.15/test/runtests 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,4 +0,0 @@
-+-#!/bin/bash
-+-
-+-export TESTME=${PSPROG:-../ps/ps}
-+-for i in ps/*-* ; do ./onetest $i ; done
-+diff -ruN procps-3.1.15.old/test/script-child procps-3.1.15/test/script-child
-+--- procps-3.1.15.old/test/script-child 2003-09-04 14:43:28.000000000 +1000
-++++ procps-3.1.15/test/script-child 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,10 +0,0 @@
-+-#!/bin/bash
-+-#
-+-# usage:
-+-# SHELL=/path/to/this/script script trashfile
-+-
-+-echo SCRIPT_PID=$PPID > misc.tmp
-+-echo SHELL_PID=$$ >> misc.tmp
-+-echo SHELL_TTY=`/usr/bin/tty | colrm 1 5` >> misc.tmp
-+-mv misc.tmp ready.tmp # atomic op
-+-while /bin/true ; do sleep 42 ; done
-+diff -ruN procps-3.1.15.old/test/sid-breaks-ttys.c procps-3.1.15/test/sid-breaks-ttys.c
-+--- procps-3.1.15.old/test/sid-breaks-ttys.c 2003-09-08 13:28:24.000000000 +1000
-++++ procps-3.1.15/test/sid-breaks-ttys.c 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,38 +0,0 @@
-+-#include <sys/types.h>
-+-#include <unistd.h>
-+-#include <signal.h>
-+-
-+-static pid_t one;
-+-
-+-static void die(int signo){
-+- (void)signo;
-+- _exit(0);
-+-}
-+-
-+-static void hang(void){
-+- for(;;) pause();
-+-}
-+-
-+-int main(int argc, char *argv[]){
-+- (void)argc;
-+- (void)argv;
-+-
-+- one = getpid();
-+- signal(SIGHUP,die);
-+- if(fork()) hang(); // parent later killed as readyness signal
-+-
-+- // second one exits, to enable setsid(), and the resulting
-+- // zombie will be reaped by init after 1st process killed
-+- if(fork()) _exit(0);
-+-
-+- if(setsid()==-1){
-+- kill(one,SIGKILL); // hopefully the shell will complain
-+- _exit(42); // kind of tough to report errors
-+- }
-+-
-+- kill(one,SIGHUP); // let the shell know we're ready
-+-
-+- hang();
-+-
-+- return 0;
-+-}
-+diff -ruN procps-3.1.15.old/test/sidious.c procps-3.1.15/test/sidious.c
-+--- procps-3.1.15.old/test/sidious.c 2003-09-08 13:58:20.000000000 +1000
-++++ procps-3.1.15/test/sidious.c 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,77 +0,0 @@
-+-// ps fTo sess,pgid,pid,tty,ppid,tpgid,args -C a.out
-+-
-+-#include <sys/types.h>
-+-#include <unistd.h>
-+-#include <signal.h>
-+-#include <sys/stat.h>
-+-#include <fcntl.h>
-+-#include <stdlib.h> // undocumented grantpt,unlockpt,ptsname,openpt,posix_openpt
-+-//#include <pty.h> // undocumented openpty,forkpty
-+-
-+-static pid_t one;
-+-
-+-static void die(int signo){
-+- (void)signo;
-+- _exit(0);
-+-}
-+-
-+-//static void sigchld_handler(int signo){
-+-// (void)signo;
-+-// kill(one,SIGHUP); // kill parent
-+-//}
-+-
-+-static void hang(void){
-+- for(;;) pause();
-+-}
-+-
-+-int main(int argc, char *argv[]){
-+- int master;
-+- int slave;
-+-
-+- (void)argc;
-+- (void)argv;
-+-
-+- one = getpid();
-+- signal(SIGHUP,die);
-+- if(fork()) hang(); // parent later killed as readyness signal
-+-
-+- // second one exits, to enable setsid(), and the resulting
-+- // zombie will be reaped by init after 1st process killed
-+- if(fork()) _exit(0);
-+-
-+-
-+- master = open("/dev/ptmx", O_RDWR|O_NOCTTY);
-+-
-+- // could fork, but don't bother
-+- // (won't be doing anything with the master side)
-+-
-+- // could change child's UID, but don't bother
-+- // (would make the tests require running as root)
-+-
-+- // not in the man pages!!!
-+- grantpt(master);
-+- unlockpt(master);
-+-
-+- if(setsid()==-1){
-+- kill(one,SIGKILL); // hopefully the shell will complain
-+- _exit(42); // kind of tough to report errors
-+- }
-+-
-+- slave = open(ptsname(master), O_RDWR);
-+-#ifdef I_PUSH
-+- // push STREAMS tty stuff, just to have an example of it
-+- ioctl(slave, I_PUSH, "ptem");
-+- ioctl(slave, I_PUSH, "ldterm");
-+-#endif
-+-#ifdef TIOCSCTTY
-+- // On SysV, slave open got us a TTY. On BSD, we must do this:
-+- ioctl(fd, TIOCSCTTY, NULL);
-+-#endif
-+-
-+-
-+- kill(one,SIGHUP); // let the shell know we're ready
-+-
-+- hang();
-+-
-+- return 0;
-+-}
-+diff -ruN procps-3.1.15.old/test/th.c procps-3.1.15/test/th.c
-+--- procps-3.1.15.old/test/th.c 2003-09-14 01:35:42.000000000 +1000
-++++ procps-3.1.15/test/th.c 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,16 +0,0 @@
-+-#include <unistd.h>
-+-#include <pthread.h>
-+-
-+-void *hanger(void *vp){
-+- (void)vp;
-+- for(;;) pause();
-+-}
-+-
-+-int main(int argc, char *argv[]){
-+- pthread_t thread;
-+- (void)argc;
-+- (void)argv;
-+- pthread_create(&thread, NULL, hanger, NULL);
-+- hanger(NULL);
-+- return 0; // keep gcc happy
-+-}
-+diff -ruN procps-3.1.15.old/test/the_living_dead.c procps-3.1.15/test/the_living_dead.c
-+--- procps-3.1.15.old/test/the_living_dead.c 2003-09-04 13:36:54.000000000 +1000
-++++ procps-3.1.15/test/the_living_dead.c 1970-01-01 10:00:00.000000000 +1000
-+@@ -1,39 +0,0 @@
-+-#include <sys/types.h>
-+-#include <unistd.h>
-+-#include <signal.h>
-+-
-+-static pid_t one;
-+-
-+-static void die(int signo){
-+- (void)signo;
-+- _exit(0);
-+-}
-+-
-+-static void sigchld_handler(int signo){
-+- (void)signo;
-+- kill(one,SIGHUP); // kill parent
-+-}
-+-
-+-static void hang(void){
-+- for(;;) pause();
-+-}
-+-
-+-int main(int argc, char *argv[]){
-+- pid_t three;
-+-
-+- (void)argc;
-+- (void)argv;
-+-
-+- one = getpid();
-+- signal(SIGHUP,die);
-+- if(fork()) hang(); // parent later killed as readyness signal
-+-
-+- three = fork();
-+- if(three){
-+- signal(SIGCHLD,sigchld_handler);
-+- kill(three,SIGHUP); // create the zombie
-+- }
-+-
-+- hang();
-+- return 0;
-+-}
---- procps-3.1.15.orig/debian/control
-+++ procps-3.1.15/debian/control
-@@ -0,0 +1,31 @@
-+Source: procps
-+Section: base
-+Priority: required
-+Maintainer: Craig Small <csmall@debian.org>
-+Build-Depends: debhelper (>> 4.1.1), libncurses5-dev, make (>= 3.78.1-8), dpatch
-+Standards-Version: 3.6.0
-+
-+Package: procps
-+Architecture: any
-+Provides: watch
-+Depends: ${shlibs:Depends}
-+Conflicts: watch, libproc-dev (<< 1:1.2.6-2), w-bassman (<< 1.0-3), procps-nonfree, pgrep (<< 3.3-5)
-+Replaces: watch, bsdutils (<< 2.9x-1)
-+Recommends: psmisc
-+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. More information can be found at procps
-+ website http://procps.sf.net/
-+
-+Package: libproc-dev
-+Architecture: any
-+Section: libdevel
-+Priority: optional
-+Depends: libc6-dev, procps (= ${Source-Version})
-+Description: library for accessing process information from /proc
-+ These are the header files for libproc. Some packages using libproc
-+ to access process information from /proc need these to compile.
-+
---- procps-3.1.15.orig/debian/rules
-+++ procps-3.1.15/debian/rules
-@@ -0,0 +1,99 @@
-+#!/usr/bin/make -f
-+# Sample debian/rules that uses debhelper.
-+# GNU copyright 1997 to 1999 by Joey Hess.
-+
-+# Uncomment this to turn on verbose mode.
-+#export DH_VERBOSE=1
-+
-+# Include dpatch stuff
-+include /usr/share/dpatch/dpatch.make
-+
-+PACKAGE="procps"
-+
-+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
-+ INSTALL_PROGRAM += -s
-+endif
-+
-+
-+build: build-stamp
-+
-+build-stamp: patch-stamp
-+ dh_testdir
-+
-+ # Add here commands to compile the package.
-+ mkdir static
-+ SHARED=0 $(MAKE) proc/libproc.a
-+ mv proc/libproc.a static
-+ $(MAKE) clean
-+ $(MAKE) W_SHOWFROM=\-DW_SHOWFROM
-+
-+ touch build-stamp
-+
-+clean: clean1 unpatch
-+clean1:
-+ dh_testdir
-+ dh_testroot
-+ rm -f build-stamp
-+
-+ # Add here commands to clean up after the build process.
-+ -$(MAKE) clean
-+ -rm -rf static
-+
-+ dh_clean
-+
-+install: build
-+ dh_testdir
-+ dh_testroot
-+ dh_clean -k
-+ dh_installdirs
-+
-+ # Add here commands to install the package into debian/procps.
-+ $(MAKE) ln_f="ln -sf" ldconfig=echo DESTDIR=$(CURDIR)/debian/procps install
-+ install --mode 644 -o root -g root debian/sysctl.conf $(CURDIR)/debian/procps/etc
-+ # Rename w as there are two of them
-+ (cd $(CURDIR)/debian/procps/usr/bin && mv w w.procps )
-+ (cd $(CURDIR)/debian/procps/usr/share/man/man1 && mv w.1 w.procps.1 )
-+
-+ # Work-around until proc includes fixed
-+ (cp proc/*.h $(CURDIR)/debian/procps/usr/include/proc)
-+ cp static/libproc.a $(CURDIR)/debian/libproc-dev/usr/lib
-+
-+ dh_movefiles --sourcedir=debian/procps
-+ rmdir $(CURDIR)/debian/procps/usr/include/proc
-+
-+# Build architecture-independent files here.
-+binary-indep: build install
-+# We have nothing to do by default.
-+
-+# Build architecture-dependent files here.
-+binary-arch: build install
-+ dh_testdir
-+ dh_testroot
-+# dh_installdebconf
-+ dh_installdocs
-+ dh_installexamples
-+ dh_installmenu
-+# dh_installlogrotate
-+# dh_installemacsen
-+# dh_installpam
-+# dh_installmime
-+ dh_installinit --update-rcd-params='start 30 S .' --init-script='procps.sh'
-+# dh_installcron
-+ dh_installman
-+ dh_installinfo
-+# dh_undocumented
-+ dh_installchangelogs NEWS
-+ dh_link
-+ dh_strip
-+ dh_compress
-+ dh_fixperms
-+ dh_makeshlibs -V "procps (>= 3.1.14), procps (<< 3.1.15)"
-+ dh_installdeb
-+# dh_perl
-+ dh_shlibdeps -Lprocps -ldebian/procps/lib
-+ dh_gencontrol
-+ dh_md5sums
-+ dh_builddeb
-+
-+binary: binary-indep binary-arch
-+.PHONY: build clean binary-indep binary-arch binary install patch unpatch clean1
---- procps-3.1.15.orig/debian/changelog
-+++ procps-3.1.15/debian/changelog
-@@ -0,0 +1,743 @@
-+procps (1:3.1.15-2) unstable; urgency=low
-+
-+ * Removed offending test directory Closes: #227933
-+
-+ -- Craig Small <csmall@debian.org> Tue, 20 Jan 2004 10:20:44 +1100
-+
-+procps (1:3.1.15-1) unstable; urgency=low
-+
-+ * Now uses dpatch to handle the various patches
-+ * New upstream release
-+ - Supports SELINUX flags for kernel v2.6 Closes: #193648
-+ - Hide kernel PID bug Closes: #217278, #219730, #217525, #224470
-+ - Fixed top auto-margins problem Closes: #217559
-+ * Fix top manual page Closes: #225089
-+ * Patch so SELINUX flags work in v2.4 kernels
-+ * Extra +s in ps.1 removed Closes: #218220
-+ * Added patch so sysctl has quiet -q flag Closes: #189100
-+
-+ -- Craig Small <csmall@debian.org> Fri, 26 Dec 2003 18:02:59 +1100
-+
-+procps (1:3.1.14-1) unstable; urgency=low
-+
-+ * New upstream release
-+
-+ -- Craig Small <csmall@debian.org> Wed, 22 Oct 2003 11:59:53 +1000
-+
-+procps (1:3.1.13-1) unstable; urgency=low
-+
-+ * New upstream release
-+
-+ -- Craig Small <csmall@debian.org> Wed, 24 Sep 2003 16:10:42 +1000
-+
-+procps (1:3.1.12-1) unstable; urgency=low
-+
-+ * New upstream release
-+ ps: $PS_FORMAT works properly Closes: #201575
-+ man page: /var/run/utmp, not /etc/utmp Closes: #206583
-+ required flags moved out of CFLAGS Closes: #205429
-+
-+
-+ -- Craig Small <csmall@debian.org> Sat, 13 Sep 2003 21:11:09 +1000
-+
-+procps (1:3.1.11-2) unstable; urgency=low
-+
-+ * Made shlibs have a specific version Closes: #199118
-+ * libproc.a is back in libproc-dev, use it
-+ * Added README to libproc-dev for people who use the library
-+
-+ -- Craig Small <csmall@debian.org> Wed, 20 Aug 2003 15:31:59 +1000
-+
-+procps (1:3.1.11-1) unstable; urgency=low
-+
-+ * 3.1.11 New upstream version
-+ - handle GPLONLY_ symbols Closes: #143549, #188374
-+ * freeproc now defined Closes: #189047
-+ * warning in readproc.c fixed Closes: #197346
-+ * Removed optarg and optind defines Closes: #197343
-+ * Fixed saved_start_time warning Closes: #197342
-+
-+ -- Craig Small <csmall@debian.org> Thu, 24 Jul 2003 17:02:36 +1000
-+
-+procps (1:3.1.9-1) unstable; urgency=low
-+
-+ * New upstream source
-+ * memory sizes fixed for 64-bit w/ gcc 3.x Closes: #194376, #191933
-+ * Doesn't segfault if /proc not mounted Closes: #172735
-+ * No warning in top about memory key Closes: #188271
-+ * More info in kill man page Closes: #182414
-+ * Document the different oO options Closes: #169301
-+ * Updated stabndards version to 3.5.9
-+ * Changed disk to backing storage Closes: #175925
-+
-+ -- Craig Small <csmall@debian.org> Mon, 2 Jun 2003 02:31:03 +1000
-+
-+procps (1:3.1.8-1) unstable; urgency=low
-+
-+ * New upstream release
-+ watch man page fixed, Closes #182246
-+ * Changed section for libproc-dev
-+
-+ -- Craig Small <csmall@debian.org> Tue, 1 Apr 2003 10:19:05 +1000
-+
-+procps (1:3.1.6-1) unstable; urgency=low
-+
-+ * New upstream release
-+ - watch has --no-title option Closes: #179862
-+ - ps -C can compare very long names Closes: #178127
-+ * Fixed descriptions in manual pages Closes: #179046
-+ * w wont crash if /proc unreadable Closes: #169398
-+
-+ -- Craig Small <csmall@debian.org> Sat, 22 Feb 2003 21:33:45 +1100
-+
-+procps (1:3.1.5-1) unstable; urgency=low
-+
-+ * New upstream version
-+ - watch don't drop empty lines Closes: #171005
-+ - top has old sort keys Closes: #167249
-+ - now count Inact_laundry as needed Closes: #172163
-+
-+ -- Craig Small <csmall@debian.org> Mon, 6 Jan 2003 13:49:32 +1100
-+
-+procps (1:3.1.3-1) unstable; urgency=low
-+
-+ * New upstream source
-+
-+ -- Craig Small <csmall@debian.org> Fri, 13 Dec 2002 16:16:36 +1100
-+
-+procps (1:3.1.1-1) unstable; urgency=low
-+
-+ * New upstream source
-+ - vmstats reports memort counts Closes: #169774
-+
-+ -- Craig Small <csmall@debian.org> Wed, 4 Dec 2002 15:57:13 +1100
-+
-+procps (1:3.1.0-1) unstable; urgency=low
-+
-+ * New upstream version
-+ - vmstat displays IO-wait time instead of bogus "w"
-+ - when IO-wait hidden, count as idle, not as sys
-+ - pmap command added (like Sun has)
-+ * Manual pages cleaned up Closes: #165970, #164481
-+
-+ -- Craig Small <csmall@debian.org> Mon, 11 Nov 2002 12:03:46 +1100
-+
-+procps (1:3.0.5-1) unstable; urgency=low
-+
-+ * New upstream version
-+ - top tolerates super-wide displays Closes: #165497
-+ - ELF note warning gone for some kernels Closes: #165900
-+ - Fix ps and top man pages a bit, dropped bugs severity.
-+
-+ -- Craig Small <csmall@debian.org> Tue, 29 Oct 2002 22:04:36 +1100
-+
-+procps (1:3.0.4-1) unstable; urgency=low
-+
-+ * New upstream version
-+ - ELF note warning removed Closes: #165093, #165343
-+ - top works for most TERM= settings Closes: #164864, #164956
-+ * w has FROM column again by default Closes: #165252
-+ * debhelper dependency version fixed Closes: #165083
-+ * ps.1 looks a bit better now Closes: #16448
-+
-+ -- Craig Small <csmall@debian.org> Mon, 21 Oct 2002 08:30:04 +1000
-+
-+procps (1:3.0.3-1) unstable; urgency=low
-+
-+ * New upstream version
-+ - w works with KOI8 locale Closes: #153043
-+ - fix top for non-SMP 2.2.xx and 2.0.xx Closes: #164231
-+ - negative idle time fixed Closes: #126260
-+ - sysctl handles new vlan interface Closes: #140386
-+ - vmstat documentation update Closes: #157935, #155684
-+ - "skill -n blah blah blah" lets you test options Closes: #158630
-+ - fixed ps --sort crash Closes: #164226
-+ - vmstat compiles with latest gcc-3.x Closes: #164348
-+ - bad (int*) cast in top removed Closes: #164468
-+ - Support new/improved statistics interfaces in 2.5 /proc Closes: #164013
-+ - top defaults to old layout and sort by pid Closes: #164277
-+ - rant moved out of top.1 man page Closes: #164520
-+ - top runs much faster Closes: #87779
-+
-+ -- Craig Small <csmall@debian.org> Sat, 12 Oct 2002 21:44:23 +1000
-+
-+procps (1:3.0.0-2) unstable; urgency=low
-+
-+ * Fixed pkill and skill, auto* is so broken. Closes: #163940, #163944
-+ * Moved libproc.so.3 into /lib as it's needed early Closes: #163981,#163899
-+
-+ -- Craig Small <csmall@debian.org> Thu, 10 Oct 2002 07:19:45 +1000
-+
-+procps (1:3.0.0-1) unstable; urgency=low
-+
-+ * New upstream source Closes: #163698
-+ - top has SMP Closes: #162316, #62282, #94896, #98277, #117040, #117735
-+ - SELINUX support Closes: #142892
-+ - top defaults to signal 15 to kill pids with Closes: #72158
-+ - 64-bit time reduces the overflow problem Closes: #82382, #155908
-+ - "w" program better at determining what a user is doing
-+ Closes: #88758, 115529
-+ - oldps is gone Closes: #101917
-+ - Handles /proc/tty/drivers Closes: #108654, #154046
-+ - Supports scanf where locale uses , for decimal point Closes: #126873
-+ - uptime --help now calls itself uptime Closes: #128880
-+ - ps faster Closes: #147731
-+ - top calculates screen better Closes: #162296
-+ - top allows sorts by pid or swapped memory Closes: #79868, #159446
-+ - support for s/390 Closes: #126295
-+ - statm buffer size increased Closes: #145085
-+ - new top has no typos Closes: #148918
-+ - new top can handle lots of tasks Closes: #70900
-+ * Fixed init.d file so it follows policy Closes: #121945
-+
-+ -- Craig Small <csmall@debian.org> Tue, 8 Oct 2002 12:29:45 +1000
-+
-+procps (1:2.0.7-10) unstable; urgency=low
-+
-+ * Fixes ps crash when system.map is exact multiple of 1024
-+ Thankyou Colin for the patch! Closes: #109237, #142292
-+
-+ -- Craig Small <csmall@eye-net.com.au> Fri, 12 Apr 2002 21:02:04 +1000
-+
-+procps (1:2.0.7-9) unstable; urgency=low
-+
-+ * Sanity checking for Number of CPU Closes: #127561, #122617
-+ This will keep the m68k and ARM boys happy.
-+ * uptime usage fixed Closes: #138351
-+ * kill man page NAME updated Closes: #119400
-+ * Better explanation for load average in uptime(1) Closes: #140902
-+ * utmp in correct location in w(1) Closes: #115725
-+
-+ -- Craig Small <csmall@eye-net.com.au> Mon, 8 Apr 2002 14:18:20 +1000
-+
-+procps (1:2.0.7-8) unstable; urgency=low
-+
-+ * Removed -ggdb Closes: #117203
-+
-+ -- Craig Small <csmall@eye-net.com.au> Sat, 27 Oct 2001 07:02:38 +1000
-+
-+procps (1:2.0.7-7) unstable; urgency=low
-+
-+ * Added os/390 patches Closes: #113494
-+ * w manpage now gives correct location for utmp Closes: #110723
-+ * watch wrap-around problem fixed Closes: #111759
-+ * Programs are compilied -O2 Closes: #108652
-+
-+ -- Craig Small <csmall@eye-net.com.au> Wed, 26 Sep 2001 08:08:43 +1000
-+
-+procps (1:2.0.7-6) unstable; urgency=low
-+
-+ * Re-fixed command line interpretation Closes: #103101
-+
-+ -- Craig Small <csmall@eye-net.com.au> Tue, 10 Jul 2001 17:32:02 +1000
-+
-+procps (1:2.0.7-5) unstable; urgency=low
-+
-+ * watch now copys strings better. Closes: #95404, #97948, #99780
-+ * skill.1 loads tbl Closes: #92242, #67899
-+ * long usernames are shown Closes: #86205, #94957
-+ * Remove /etc/rcS.d/S30procps with good ole rm Closes: #92184
-+ * /etc/init.d/procps.sh calls itself that Closes: #93302
-+ * Cannot write config in secure mode Closes: #93948
-+
-+ -- Craig Small <csmall@debian.org> Sun, 29 Apr 2001 14:55:20 +1000
-+
-+procps (1:2.0.7-4) unstable; urgency=low
-+
-+ * watch doesnt crash with long command lines Closes: #88592, #87693
-+ * bumped up a buffer in a proc read Closes: #85775
-+ * Now we use 24 hour time Closes: #85640
-+ * pgrep calls itself pgrep Closes: #86630
-+ * Corrected symlink in libproc-dev Closes: #87865
-+
-+ -- Craig Small <csmall@debian.org> Mon, 19 Mar 2001 10:13:27 +1100
-+
-+procps (1:2.0.7-3) unstable; urgency=low
-+
-+ * Conflicts with pgrep, so no more conflicts Closes: #82835
-+ * Minor fixes to ps.1 manpage Closes: #81921
-+ * watch highlighs correctly Closes: #77737
-+ * top wont die with evil HOMEs, Closes: #81452
-+ * removed reference to suidregister
-+ * Remore -L reference in kill.1 Closes: #85913
-+
-+ -- Craig Small <csmall@debian.org> Thu, 8 Feb 2001 12:44:58 +1100
-+
-+procps (1:2.0.7-2) unstable; urgency=medium
-+
-+ * Moved kill back again, dammit why is the makefile so broken
-+ Closes: #82747
-+ * Watch uses locale Closes: #82739
-+ * top's scanf is protected from evil locale problems Closes: #82671, #69128
-+ (Big thankyou to Guillaume for lending a test account)
-+
-+ -- Craig Small <csmall@debian.org> Fri, 19 Jan 2001 09:15:36 +1100
-+
-+procps (1:2.0.7-1) unstable; urgency=medium
-+
-+ * New upstream version (010114)
-+ - Merges 2.0.7 code from RedHat Closes: #80832
-+ - Made note that Shared memory report will be junk due to kernel
-+ Closes: #77818
-+ - Remove html and null stuff from man page Closes: #81920
-+ - vsize is kB in man page Closes: #82210
-+ - man pages look better Closes: #70055, #70941
-+ - vmstat increase Closes: #77886
-+ - w tries harder to find things Closes: #24531
-+ - 15 char user names Closes: #71211
-+ * No HOME overflow in top Closes: 81452
-+ * Added menu Hints Closes: #80051, #82324
-+
-+
-+ -- Craig Small <csmall@debian.org> Wed, 17 Jan 2001 08:57:24 +1100
-+
-+procps (1:2.0.6-9) unstable; urgency=medium
-+
-+ * added libncurses5-dev to build-depends, Closes: #67533
-+ * Put kill back into /bin Closes #67580, #67582
-+ * Put 2.0.6-7 ps.1 back in Closes: #67451
-+
-+ -- Craig Small <csmall@debian.org> Tue, 25 Jul 2000 08:13:21 +1000
-+
-+procps (1:2.0.6-8) unstable; urgency=low
-+
-+ * New upstream source:
-+ * - sysctl EOF bug fixed Closes: #62877
-+ * - stop crashes with unmounted /proc Closes: #63512, #55177
-+ * - Versions checking tolerates RH /proc/ksyms Closes: #59798
-+ * - Top works better with SMP Closes: #34734, #56547, #59703
-+
-+ -- Craig Small <csmall@debian.org> Fri, 14 Jul 2000 22:33:44 +1000
-+
-+procps (1:2.0.6-7) unstable; urgency=low
-+
-+ * Fixed missing version Closes: #62207, #62484, #59112
-+ * Stop crashes with umounted /proc Closes: #63512, #55177
-+ * Nicer man pages Closes: #63495, #59406
-+ * Fixed sysctl eof bug Closes: #62877
-+ * watch wraps properly Closes: #60913
-+ * watch handles tabs Closes: #46213
-+ * watch honors locale settings Closes: #63762
-+ * now versioned replaces line for bsdutils
-+
-+ -- Craig Small <csmall@debian.org> Mon, 29 May 2000 13:31:54 +1000
-+
-+procps (1:2.0.6-6) unstable; urgency=low
-+
-+ * New patchlevel (000221)
-+ * ps 'f' ASCII art forest fixed. Closes: #57134, #58644
-+ * let insane people run ps setuid. Closes: #56701
-+ * note that kernel 2.3 is now faster. Closes: #49130
-+ * top with WCHAN was leaking memory. Closes: #58172, #52257, #56889
-+ * can show current CPU. Closes: #37023
-+ * w looks better now. Closes: #55952
-+ * init.d/procps removed if exists. Closes: #55137, #55852
-+ * Fixed skill/snice man page (thanks man-db maint!) Closes: #53736, #46743
-+ * Fixed ps man page Closes: #58365
-+
-+ -- Craig Small <csmall@debian.org> Wed, 23 Feb 2000 10:31:37 +1100
-+
-+procps (1:2.0.6-5) unstable; urgency=low
-+
-+ * New upstream source
-+ * kill "_R(smp_|smp2gig_|2gig_)?[0-9a-fA-F]{8,}" Closes: #54394, #53208
-+ * added type 'S' and scan past machine types Closes: #54396
-+ * Fixed w(1) manpage Closes: #54709
-+ * top now agrees with ps for RSS Closes: #52679
-+
-+ -- Craig Small <csmall@debian.org> Tue, 11 Jan 2000 08:23:56 +1100
-+
-+procps (1:2.0.6-4) unstable; urgency=low
-+
-+ * procps init.d script quietly dies if not /etc/default/rcS Closes:
-+ #52839
-+ * Put the NEWS changelog back in Closes: #52678
-+ * Fixed that damn Rsmp annoying message bug Closes: #48686
-+ * Remove /etc/init.d/procps Closes: #53818
-+
-+ -- Craig Small <csmall@debian.org> Mon, 20 Dec 1999 11:14:53 +1100
-+
-+procps (1:2.0.6-3) unstable; urgency=low
-+
-+ * Patched ps so it complains if you chmod 711 /proc Closes: #52481
-+ * Did the same for top.
-+ * Ditto for oldps.
-+ * Changed and int to a char* Closes: #52482
-+ * sysctl.conf file references sysctl.conf (5) not 8 Closes: #52385
-+ * props init.d script changed to procps.sh Closes: #52228
-+
-+ -- Craig Small <csmall@debian.org> Mon, 13 Dec 1999 11:57:01 +1100
-+
-+procps (1:2.0.6-2) unstable; urgency=low
-+
-+ * Changed psmisc from reccomends to suggests
-+ * %MEM now works, Closes: #50010 #50055 #50148 #50356
-+ * top doesn't crash with > 204 processes Closes: #50055
-+ * Another libproc fd leak fixed Closes: #45398
-+ * ps silently ignores m and -m for future compatibility Closes: #48308
-+ * Added a sysctl.conf and other files as suggested Closes: #51098
-+ * Fix start field instability
-+ * ps.1 fixed Closes: #35137
-+
-+ -- Craig Small <csmall@debian.org> Tue, 7 Dec 1999 14:42:51 +1100
-+
-+procps (1:2.0.6-1) unstable; urgency=low
-+
-+ * New upstream
-+ * sysctl crash fixed, Closes: #49015
-+ * libproc file descriptor leak fixed, Closes: #45398
-+ * False positive System.map mismatches killed, Closes: #49047
-+ * Supports 64 Hz for StrongARM/Shark Closes: #47461
-+ * pr_time fixed, Closes: #46223
-+ * libc num cpu workaround back in, Closes: #49039
-+ * Fixed kill manpage, Closes: #47018
-+ * This version definitely, absolutely has kill, Closes: #46762
-+
-+
-+ -- Craig Small <csmall@debian.org> Fri, 5 Nov 1999 12:46:05 +1100
-+
-+procps (1:2.0.3-5) unstable; urgency=low
-+
-+ * Changed conflicts with replaces
-+
-+ -- Craig Small <csmall@debian.org> Wed, 6 Oct 1999 14:36:48 +1000
-+
-+procps (1:2.0.3-4) unstable; urgency=low
-+
-+ * support SMP systems with versioned kernel modules Closes: #45621, #46465
-+ * Added kill to this (it is removed from bsdutils).
-+ * We now need kill manpage, Closes: #46004
-+
-+ -- Craig Small <csmall@debian.org> Tue, 5 Oct 1999 10:28:01 +1000
-+
-+procps (1:2.0.3-3) unstable; urgency=low
-+
-+ * System.map support for non-i386 Closes: #45592, #45250
-+ * Do not require /proc/ksyms Closes: #45128, #45132, #45619
-+ * Alternative w.1 points to the right spot, Closes: #45331
-+ * Copyright for skill and snice and ps fixed, Closes: #45119
-+
-+ -- Craig Small <csmall@debian.org> Tue, 21 Sep 1999 16:31:59 +1000
-+
-+procps (1:2.0.3-2) unstable; urgency=medium
-+
-+ * Now with top! Closes: #45106
-+
-+ -- Craig Small <csmall@debian.org> Wed, 15 Sep 1999 11:12:34 +1000
-+
-+procps (1:2.0.3-1) unstable; urgency=low
-+
-+ * New upstream source
-+ * Debian personality does m flag Closes: #44832
-+ * Corrected typo in top.1 Closes: #44836
-+ * New improved watch Closes: #29970
-+
-+ -- Craig Small <csmall@debian.org> Mon, 13 Sep 1999 16:59:16 +1000
-+
-+procps (1:2.0.2-4) unstable; urgency=high
-+
-+ * Fixed the nasty ps formatting problem (Bug #40859 #40856 #40839 )
-+
-+ -- Craig Small <csmall@debian.org> Wed, 7 Jul 1999 08:41:54 +1000
-+
-+procps (1:2.0.2-3) unstable; urgency=low
-+
-+ * New upstream patches/source
-+ * SMB Hz wierdness fixed (Bug #33023 #33284)
-+ * non-tty output does not get chopped at 80 columns (bug #36688)
-+ * BSD personalities set the default selection and output format (bug #36698)
-+ * Fixed collumn spacing problem (Bug #35309)
-+ * Work around for borken libs that return 0 processors (Bug #36902)
-+ * skill now uses process name not command line (Bug #19208)
-+
-+ -- Craig Small <csmall@debian.org> Mon, 5 Jul 1999 07:29:47 +1000
-+
-+procps (1:2.0.2-2) unstable; urgency=low
-+
-+ * Removed kill and manual page (Bug #36421 #36551 #36375)
-+ * Put in patch for bogus sysconf return (Bug #36494 #36532 #36581)
-+
-+ -- Craig Small <csmall@debian.org> Wed, 28 Apr 1999 09:04:59 +1000
-+
-+procps (1:2.0.2-1) unstable; urgency=low
-+
-+ * New upstream version (Bug #34394 #27291 #34250 #34956 #35240 #35247
-+ #35520 #35756 #34580 )
-+
-+ -- Craig Small <csmall@debian.org> Mon, 19 Apr 1999 13:26:48 +1000
-+
-+procps (1:2.0.0-1) unstable; urgency=low
-+
-+ * New upstream version (Bug #33083 23347 33462 10556 33266 33371 )
-+
-+
-+ -- Craig Small <csmall@debian.org> Mon, 15 Mar 1999 14:21:57 +1100
-+
-+procps (1:1.9.0-2) unstable; urgency=low
-+
-+ * top now resumes (Bug #32106 )
-+ * debhelper text problem fixed in postinst (Bug #32963 #33122 #33003 33117 )
-+ * oldps and ps now use alternatives (Bug #33083 )
-+ * ps s format now not ugly (Bug #28266 )
-+ * watch command line help and man page correct (Bug #31702 )
-+ * sessreg removed from package (Bug #32294 )
-+ * ps doesn't display extra spaces (Bug #27799 )
-+ * top has spaces in command lines again (Bug #33060 )
-+ * ps now has personality (Bug #22923 #18429 )
-+ * moved non-free skill and snice to non-free package.
-+
-+ -- Craig Small <csmall@debian.org> Tue, 9 Feb 1999 15:10:58 +1100
-+
-+procps (1:1.9.0-1) unstable; urgency=low
-+
-+ * New Upstream source
-+
-+ -- Craig Small <csmall@debian.org> Thu, 4 Feb 1999 14:48:37 +1100
-+
-+procps (1:1.2.9-3) unstable; urgency=low
-+
-+ * Linked to ncurses4
-+
-+ -- Craig Small <csmall@debian.org> Fri, 30 Oct 1998 14:13:02 +1100
-+
-+procps (1:1.2.9-2) unstable; urgency=low
-+
-+ * top now has spaces in between command lines (Bug #28178 )
-+ * --version or -V now shows proper version.
-+
-+ -- Craig Small <csmall@debian.org> Mon, 26 Oct 1998 08:55:59 +1100
-+
-+procps (1:1.2.9-1) unstable; urgency=low
-+
-+ * New upstream version (Bug #27573 )
-+ * Menu entry changed from System to Menu/System (Bug #27438 )
-+ * Char variables changed to int for powerpc (Bug #26624 )
-+ * libproc now nulls allocated structure (Bug #26225 )
-+ * No longer uses psdevtab (yay!) (Bug #25388 )
-+ * ps doesn't double space command line parameters (Bug #25306 #24293 )
-+ * ps now silently ignores g flag for those BSD heads (Bug #24075 )
-+
-+ -- Craig Small <csmall@debian.org> Fri, 9 Oct 1998 09:15:11 +1000
-+
-+procps (1:1.2.7-2) unstable; urgency=low
-+
-+ * Top can suspend twice (or three times even) (Bug #22997 )
-+ * Libraries properly built (Bug #20010 )
-+
-+ -- Craig Small <csmall@debian.org> Mon, 1 Jun 1998 09:16:09 +1000
-+
-+procps (1:1.2.7-1) frozen unstable; urgency=high
-+
-+ * New upstream source, fixes security bug (Bug #21475)
-+
-+ -- Craig Small <csmall@debian.org> Thu, 23 Apr 1998 08:04:54 +1000
-+
-+procps (1:1.2.6-2) unstable; urgency=low
-+
-+ * Fixed Shared library dependencies (bugs #18388 #18394 18392 )
-+ * Conflicts with earlier versions of w-bassman (bug #18389 )
-+
-+ -- Craig Small <csmall@debian.org> Mon, 23 Feb 1998 09:05:54 +1100
-+
-+procps (1:1.2.6-1) unstable; urgency=low
-+
-+ * New upstream source.
-+ * xload is undiverted (Bug #17102 )
-+ * ps_fields.7.gz removed (Bug #18090 )
-+ * Colour patches removed, color-related bugs gone (Bug #18008 #17217 #18090 )
-+ * POSIX patches removed, cmd line bugs gone (Bug #15537 )
-+ * w is now an alternative w.procps (Bug #17960 )
-+ * skill now works with process names (Bug #17087 )
-+ * ps and top man pages have their field descriptions (Bug #17360 )
-+ * ps u fixed (Bug #17313 )
-+ * Source code is no longer FUBAR (Bug #17892 )
-+ * top now redraws screen after config screen (Bug #11896 )
-+ * Circular dependency removed (Bug #16966 )
-+ * top does mess up screens with wrong cmd line (Bug #17230 )
-+ * top suspends with ctrl-Z (Bug #16703 )
-+
-+ -- Craig Small <csmall@debian.org> Tue, 17 Feb 1998 08:31:21 +1100
-+
-+procps (1:1.2.5-2) unstable; urgency=low
-+
-+ * Moved /bin into /bin/ps (Bug #17001 )
-+
-+ -- Craig Small <csmall@debian.org> Tue, 13 Jan 1998 07:50:43 +1100
-+
-+procps (1:1.2.5-1) unstable; urgency=low
-+
-+ * TTY selection works ( #16724 )
-+ * top and ps now accept --colour and *_COLOURS
-+ * xproc copyright file not compressed ( #14491 )
-+ * All #include <proc/*.h> now #include "proc/*.h" ( #13482 )
-+ * Copyright doesn't mention psmisc now ( #16704 )
-+ * Moved ps back into /bin ( #16737 #16705 )
-+ * New upstream source ( #16795 )
-+
-+ -- Craig Small <csmall@debian.org> Mon, 12 Jan 1998 08:35:10 +1100
-+
-+procps (1:1.2.2-1) unstable; urgency=low
-+
-+ * New maintainer
-+ * Updated upstream source to 1.2.2 (instead of 1.2)
-+ * Merged Helmut's color/command line patches into upstream.
-+ * Copyright file is not compressed ( #14493 #14415 )
-+ * psdatabase refreshed when installing ( #10693 )
-+ * Fixed +/- line in free ( #10785 #10870 #11566 #12027 #12245 #12374 )
-+ * w collumns corrected ( #10898 #13117 )
-+ * top saves sort type ( #11553 )
-+ * Linked to libc6 ( #11725 )
-+ * top doesn't coredump with S option ( #11855 )
-+ * skill works with given patch ( #12023 )
-+ * libproc-dev has proper sym link ( #12697 )
-+ * top -h doesn't change terminal settings ( #13513 )
-+ * ps -s has "CAUGHT" not "CATCHED" ( #14342 )
-+ * ps_colors.7 and ps_fields.7 reformatted ( #14109 #14544 #14545 )
-+ * ps checks for tty before using colors ( #14596 )
-+ * top sets stop signal handler later, stopping race ( #14769 )
-+ * When using POSIX personality, processes show up ( #14780 )
-+ * top checks for valid term type ( #15807 )
-+ * xproc now Depends on procps-1.2.*-* ( #10762 #13347 )
-+ * xproc dependencies fixed ( #12698 )
-+
-+ -- Craig Small <csmall@debian.org> Tue, 30 Dec 1997 11:33:54 +1100
-+
-+procps (1.12.2.1) unstable; urgency=low
-+
-+ * Non-maintainer release, built for libc6.
-+ * Added in free.c from new procps version 1.2.3 (from sunsite), seems to
-+ fix all the problems with free reporting bogus valus.
-+
-+ -- Joey Hess <joeyh@master.debian.org> Fri, 24 Oct 1997 13:34:35 -0400
-+
-+procps (1.12.2) stable unstable; urgency=low
-+
-+ * fixed meminfo handling again, as the fix wouldn't work on pre-2.1.x
-+ kernels.
-+ * fixed free to use the meminfo routines from libproc.
-+
-+ -- Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de> Fri, 13 Jun 1997 22:42:14 +0200
-+
-+procps (1.12.1) stable unstable; urgency=low
-+
-+ * fixed several bugs
-+ * replaced utmp handling to support wrappers.
-+ * added /proc/meminfo support for 2.1.x kernels.
-+
-+ -- Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de> Tue, 10 Jun 1997 23:59:41 +0200
-+
-+procps (1.11.6) frozen unstable; urgency=medium
-+
-+ * psmisc 1.14 : new upstream version (mainly bugfixes)
-+ * added a lot of new serial device major numbers to the device lookup
-+ code. Somehow it seems there are new serial devices every other week.
-+ * fixed a bug in top: broken .toprc may cause a segmentation fault.
-+
-+ -- Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de> Sun, 4 May 1997 09:50:30 +0200
-+
-+procps (1.11.5) frozen unstable; urgency=medium
-+
-+ * minor changes to make it compile with libc6
-+ * fix top behaviour on machines having nonstandard NR_TASKS up to 4k
-+ tasks
-+
-+ -- Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de> Fri, 18 Apr 1997 02:07:46 +0200
-+
-+procps (1.11.4) unstable; urgency=medium
-+
-+ * strip libproc.so from unneeded symbols (Bug# 8311)
-+ * fixed watch.1 example (Bug# 8169)
-+ * partly fixed fuser sigsegv core dump (Bug# 8004)
-+ * menu entries for xproc and procps (Bug# 8325)
-+ * divertions for xmem and xload. (Bug# 7565)
-+
-+ -- Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de> Sun, 13 Apr 1997 20:55:05 +0200
-+
-+procps (1.11.3) unstable; urgency=low
-+
-+ * fixed uptime again, minor Makefile changes
-+
-+ -- Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de> Fri, 21 Feb 1997 16:22:04 +0100
-+
-+procps (1.11.2) unstable; urgency=medium
-+
-+ * fixed typo in ps_fields.7 (Bug#5457)
-+ * fixed typo in debian/rules (Bug #5585)
-+ * fixed bug in w introduced in 1.11.1 (Bugs #5489, #5694, #5695, #5705).
-+ * added support for non-standard serial devices (long overdue - Bug
-+ #5771).
-+ * fixed uptime option handling (Bug #6099).
-+ * fixed top problems with missing/corrupted utmp (Bug #5819).
-+ * fixed manpage problems (Bug #5936).
-+
-+ -- Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de> Wed, 19 Feb 1997 18:49:26 +0100
-+
-+procps (1.11.1) unstable; urgency=low
-+
-+ * fixed bug in w <username>
-+ * automatic resize if field length is exceeded. This changed the shared
-+ library, so popping the major number.
-+ * fixed numeric WCHAN output on Alphas and stupid bug in ps (again,
-+ thanks to H. Koenig).
-+ * fixed top memory statistics for systems with more than 100M memory or
-+ swap.
-+
-+ -- Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de> Tue, 12 Nov 1996 02:57:18 +0100
-+
-+procps (1.10.1) unstable; urgency=low
-+
-+ * merged in ALPHA & Sparc patches
-+ (from ftp.azstarnet.com:/pub/linux/axp/glibc)
-+ * fixed ps --deselect/-N for pid lists
-+ * use shared libs from now on, install shlibs again
-+ * manpages for libproc
-+ * static lib compiled without -fPIC
-+ * added libproc package for development installing libproc headers,
-+ manpages and static library.
-+ * fixed PROC_REAL bug when PROC_FILLSTATUS isn't set.
-+ * fixed color bug in ps --forest
-+ * added xproc package for xload, xmem, xidle, xcpustate
-+ (XConsole left out as we use xconsole & klogd on debian)
-+ * adapted xload manpage for xidle and xmem
-+ * fixed xmem to cope with newer kernels (where shared pages are counted
-+ once for each additional reference)
-+ * fixed top change_fields bug (a field needs 24, not 21 spaces)
-+ * fixed several Alpha bugs (thanks to Harald Koenig)
-+ * due to popular demand, the old format for time intervals is back.
-+ for all program using this, a toggle command line option has been
-+ provided. The default behaviour depends on the compile time option
-+ NEW_TIME_DEFAULT (see main Makefile)
-+
-+ -- Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de> Wed, 23 Oct 1996 21:30:54 +0200
-+
-+procps (1.09.2) unstable; urgency=low
-+
-+ * fixed cpu nice % in summary
-+ * fixed topsetup initialisation in top.h I messed up in last revision
-+ * fixed pipe output bug
-+ * fixed --deselect bug in SVR4/POSIX mode
-+
-+ -- Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de> Sun, 20 Oct 1996 13:57:11 +0200
-+
-+procps (1.09.1) unstable; urgency=low
-+
-+ * fixed ps -w bug displaying too many empty lines
-+ * fixed SIGSEGV bug in ps -www
-+ * fixed bug in top not calculating length of the command/args/env fields
-+ at the field selection screen in some circumstances.
-+ * fixed SIGSEGV bug when using environ field
-+
-+ -- Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de> Sat, 12 Oct 1996 07:59:29 +0200
-+
-+procps (1.09) experimental; urgency=low
-+
-+ * This is an experimental release of the procps suite. A lot of features have
-+ been added since the 1.01(a) release:
-+ - support for both BSD and POSIX (SVR4) style command line options.
-+ - completely configurable display of information.
-+ - colour markup of processes exceeding limits or belonging to a user.
-+ Please take a look at /usr/doc/procps/NEWS and the manpages for a concise
-+ list. This is how the next upstream release of procps may look
-+ (i.e. it will look like this if there is not too much resistance).
-+
-+ -- Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de> Sat, 5 Oct 1996 14:26:57 +0200
---- procps-3.1.15.orig/kill.1
-+++ procps-3.1.15/kill.1
-@@ -10,16 +10,11 @@
- kill \- send a signal to a process
-
- .SH SYNOPSIS
--.TS
--l l.
--kill pid ... Send SIGTERM to every process listed.
--kill -signal pid ... Send a signal to every process listed.
--kill -s signal pid ... Send a signal to every process listed.
--kill -l List all signal names.
--kill -L List all signal names in a nice table.
--kill -l signal Convert a signal number into a name.
--kill -V,--version Show version of program
--.TE
-+\fBkill\fR [ -\fBsignal\fR | -s \fBsignal\fR ] \fBpid\fR ...
-+.br
-+\fBkill\fR [ -L | -V, --version ]
-+.br
-+\fBkill\fR -l [ \fBsignal\fR ]
-
- .SH DESCRIPTION
- The default signal for kill is TERM. Use -l or -L to list available signals.
-@@ -105,7 +100,7 @@
- .fi
- .PP
- .SH "SEE ALSO"
--pkill(1) skill(1) kill(2) renice(1) nice(1) signal(7) killall(1)
-+.BR pkill (1), skill (1), kill (2), renice (1), nice (1), signal (7), killall (1).
-
- .SH STANDARDS
- This command meets appropriate standards. The -L flag is Linux-specific.
---- procps-3.1.15.orig/tload.c
-+++ procps-3.1.15/tload.c
-@@ -30,9 +30,6 @@
- static int dly=5;
- static jmp_buf jb;
-
--extern int optind;
--extern char *optarg;
--
- static void alrm(int signo)
- {
- (void)signo;
---- procps-3.1.15.orig/pgrep.c
-+++ procps-3.1.15/pgrep.c
-@@ -367,7 +367,8 @@
- preg = do_regcomp ();
-
- if (opt_newest) saved_start_time = 0ULL;
-- if (opt_oldest) saved_start_time = ~0ULL;
-+ else
-+ saved_start_time = ~0ULL;
- if (opt_newest) saved_pid = 0;
- if (opt_oldest) saved_pid = INT_MAX;
-
---- procps-3.1.15.orig/top.1
-+++ procps-3.1.15/top.1
-@@ -430,8 +430,8 @@
- The number of\fB major\fR page faults that have occurred for a task.
- A page fault occurs when a process attempts to read from or write to a virtual
- page that is not currently present in its address space.
--A major page fault is when disk access is involved in making that
--page available.
-+A major page fault is when backing storage access (such as a disk) is involved
-+in making that page available.
-
- .TP 3
- v:\fB nDRT\fR \*(EM Dirty Pages count
diff --git a/recipes/procps/procps-3.2.1/install.patch b/recipes/procps/procps-3.2.1/install.patch
deleted file mode 100644
index 2d16c26f17..0000000000
--- a/recipes/procps/procps-3.2.1/install.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- procps-3.1.15/Makefile~install 2003-12-24 03:01:55.000000000 +0100
-+++ procps-3.1.15/Makefile 2004-02-11 00:45:59.000000000 +0100
-@@ -147,7 +147,7 @@
- ###### install
-
- $(BINFILES) : all
-- $(install) --mode a=rx --strip $(notdir $@) $@
-+ $(install) --mode a=rx $(notdir $@) $@
-
- $(MANFILES) : all
- $(install) --mode a=r $(notdir $@) $@
diff --git a/recipes/procps/procps-3.2.5/pagesz-not-constant.patch b/recipes/procps/procps-3.2.5/pagesz-not-constant.patch
deleted file mode 100644
index 8e9e1ebfe1..0000000000
--- a/recipes/procps/procps-3.2.5/pagesz-not-constant.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Index: procps-3.2.1/proc/devname.c
-===================================================================
---- procps-3.2.1.orig/proc/devname.c 2004-03-18 05:43:50.000000000 +1100
-+++ procps-3.2.1/proc/devname.c 2005-04-02 10:40:17.462138000 +1000
-@@ -227,7 +227,7 @@
-
- /* number --> name */
- unsigned dev_to_tty(char *restrict ret, unsigned chop, dev_t dev_t_dev, int pid, unsigned int flags) {
-- static char buf[PAGE_SIZE];
-+ static char buf[4096];
- char *restrict tmp = buf;
- unsigned dev = dev_t_dev;
- unsigned i = 0;
-@@ -249,7 +249,7 @@
- if((flags&ABBREV_TTY) && !strncmp(tmp,"tty", 3) && tmp[3]) tmp += 3;
- if((flags&ABBREV_PTS) && !strncmp(tmp,"pts/", 4) && tmp[4]) tmp += 4;
- /* gotta check before we chop or we may chop someone else's memory */
-- if(chop + (unsigned long)(tmp-buf) <= sizeof buf)
-+ if(chop + (unsigned long)(tmp-buf) < sizeof buf)
- tmp[chop] = '\0';
- /* replace non-ASCII characters with '?' and return the number of chars */
- for(;;){
diff --git a/recipes/procps/procps-3.2.7/install.patch b/recipes/procps/procps-3.2.7/install.patch
deleted file mode 100644
index 9f1ef6915d..0000000000
--- a/recipes/procps/procps-3.2.7/install.patch
+++ /dev/null
@@ -1,27 +0,0 @@
---- procps-3.2.5.virgin/Makefile 2005-01-26 05:55:26.000000000 +0100
-+++ procps-3.2.5/Makefile 2005-08-03 04:55:26.346984488 +0200
-@@ -30,7 +30,10 @@
- install := install -D --owner 0 --group 0
-
- # Lame x86-64 /lib64 and /usr/lib64 abomination:
--lib64 := lib$(shell [ -d /lib64 ] && echo 64)
-+# lib64 := lib$(shell [ -d /lib64 ] && echo 64)
-+
-+# Equally lame hack to work around makefile lameness when the host arch is 64bit, but the target is not.
-+lib64 := lib
-
- usr/bin := $(DESTDIR)/usr/bin/
- bin := $(DESTDIR)/bin/
-@@ -211,10 +214,10 @@
- ###### install
-
- $(BINFILES) : all
-- $(install) --mode a=rx $(notdir $@) $@
-+ $(install) -m 555 $(notdir $@) $@
-
- $(MANFILES) : all
-- $(install) --mode a=r $(notdir $@) $@
-+ $(install) -m 444 $(notdir $@) $@
-
- install: $(filter-out $(SKIP) $(addprefix $(DESTDIR),$(SKIP)),$(INSTALL))
- cd $(usr/bin) && $(ln_f) skill snice
diff --git a/recipes/procps/procps-3.2.7/pagesz-not-constant.patch b/recipes/procps/procps-3.2.7/pagesz-not-constant.patch
deleted file mode 100644
index 8e9e1ebfe1..0000000000
--- a/recipes/procps/procps-3.2.7/pagesz-not-constant.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Index: procps-3.2.1/proc/devname.c
-===================================================================
---- procps-3.2.1.orig/proc/devname.c 2004-03-18 05:43:50.000000000 +1100
-+++ procps-3.2.1/proc/devname.c 2005-04-02 10:40:17.462138000 +1000
-@@ -227,7 +227,7 @@
-
- /* number --> name */
- unsigned dev_to_tty(char *restrict ret, unsigned chop, dev_t dev_t_dev, int pid, unsigned int flags) {
-- static char buf[PAGE_SIZE];
-+ static char buf[4096];
- char *restrict tmp = buf;
- unsigned dev = dev_t_dev;
- unsigned i = 0;
-@@ -249,7 +249,7 @@
- if((flags&ABBREV_TTY) && !strncmp(tmp,"tty", 3) && tmp[3]) tmp += 3;
- if((flags&ABBREV_PTS) && !strncmp(tmp,"pts/", 4) && tmp[4]) tmp += 4;
- /* gotta check before we chop or we may chop someone else's memory */
-- if(chop + (unsigned long)(tmp-buf) <= sizeof buf)
-+ if(chop + (unsigned long)(tmp-buf) < sizeof buf)
- tmp[chop] = '\0';
- /* replace non-ASCII characters with '?' and return the number of chars */
- for(;;){
diff --git a/recipes/procps/procps-3.2.7/procmodule.patch b/recipes/procps/procps-3.2.7/procmodule.patch
deleted file mode 100644
index fabfabaa59..0000000000
--- a/recipes/procps/procps-3.2.7/procmodule.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-*** procps-3.2.5/proc/module.mk.orig Sun Jul 24 11:53:49 2005
---- procps-3.2.5/proc/module.mk Sun Jul 24 11:54:32 2005
-***************
-*** 96,102 ****
- #################### install rules ###########################
-
- $(lib)$(SOFILE) : proc/$(SONAME)
-! $(install) --mode a=rx $< $@
-
- ifneq ($(SOLINK),$(SOFILE))
- .PHONY: $(lib)$(SOLINK)
---- 96,102 ----
- #################### install rules ###########################
-
- $(lib)$(SOFILE) : proc/$(SONAME)
-! $(install) -m 555 $< $@
-
- ifneq ($(SOLINK),$(SOFILE))
- .PHONY: $(lib)$(SOLINK)
-***************
-*** 115,121 ****
- $(ldconfig)
-
- $(usr/lib)$(ANAME) : proc/$(ANAME)
-! $(install) --mode a=r $< $@
-
- # Junk anyway... supposed to go in /usr/include/$(NAME)
- #INSTALL += $(addprefix $(include),$(HDRFILES))
---- 115,121 ----
- $(ldconfig)
-
- $(usr/lib)$(ANAME) : proc/$(ANAME)
-! $(install) -m 444 $< $@
-
- # Junk anyway... supposed to go in /usr/include/$(NAME)
- #INSTALL += $(addprefix $(include),$(HDRFILES))
diff --git a/recipes/procps/procps-3.2.7/psmodule.patch b/recipes/procps/procps-3.2.7/psmodule.patch
deleted file mode 100644
index f298c1c1c4..0000000000
--- a/recipes/procps/procps-3.2.7/psmodule.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-*** procps-3.2.5/ps/module.mk.orig Sun Jul 24 11:54:40 2005
---- procps-3.2.5/ps/module.mk Sun Jul 24 11:55:02 2005
-***************
-*** 33,40 ****
-
-
- $(bin)ps: ps/ps
-! $(install) --mode a=rx $< $@
-
- $(man1)ps.1 : ps/ps.1
-! $(install) --mode a=r $< $@
- -rm -f $(DESTDIR)/var/catman/cat1/ps.1.gz $(DESTDIR)/var/man/cat1/ps.1.gz
---- 33,40 ----
-
-
- $(bin)ps: ps/ps
-! $(install) -m 555 $< $@
-
- $(man1)ps.1 : ps/ps.1
-! $(install) -m 444 $< $@
- -rm -f $(DESTDIR)/var/catman/cat1/ps.1.gz $(DESTDIR)/var/man/cat1/ps.1.gz
diff --git a/recipes/procps/procps-3.2.8/60_linux_version_init.dpatch b/recipes/procps/procps-3.2.8/60_linux_version_init.dpatch
new file mode 100644
index 0000000000..d99456a6e8
--- /dev/null
+++ b/recipes/procps/procps-3.2.8/60_linux_version_init.dpatch
@@ -0,0 +1,61 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 60_linux_init.dpatch by <david.sugar@canonical.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Fix Linux version detection which relied on elf loader side-effect.
+## DP: This patch also depends on 40_gnu-kbsd-version, which modified
+## DP: init_Linux_version().
+
+@DPATCH@
+---
+ proc/sysinfo.c | 1 +
+ proc/version.c | 5 +++--
+ proc/version.h | 1 +
+ 3 files changed, 5 insertions(+), 2 deletions(-)
+
+--- procps-3.2.8.orig/proc/sysinfo.c
++++ procps-3.2.8/proc/sysinfo.c
+@@ -210,10 +210,11 @@ static int check_for_privs(void){
+ }
+
+ static void init_libproc(void) __attribute__((constructor));
+ static void init_libproc(void){
+ have_privs = check_for_privs();
++ init_Linux_version(); // make sure we have version before continuing...
+ // ought to count CPUs in /proc/stat instead of relying
+ // on glibc, which foolishly tries to parse /proc/cpuinfo
+ //
+ // SourceForge has an old Alpha running Linux 2.2.20 that
+ // appears to have a non-SMP kernel on a 2-way SMP box.
+--- procps-3.2.8.orig/proc/version.c
++++ procps-3.2.8/proc/version.c
+@@ -31,12 +31,13 @@ void display_version(void) {
+
+ #define LINUX_VERSION(x,y,z) (0x10000*(x) + 0x100*(y) + z)
+
+ int linux_version_code;
+
+-static void init_Linux_version(void) __attribute__((constructor));
+-static void init_Linux_version(void) {
++// cannot depend on this auto-running before libproc init...
++//static void init_Linux_version(void) __attribute__((constructor));
++void init_Linux_version(void) {
+ static struct utsname uts;
+ int x = 0, y = 0, z = 0; /* cleared in case sscanf() < 3 */
+
+ if (uname(&uts) == -1) /* failure implies impending death */
+ exit(1);
+--- procps-3.2.8.orig/proc/version.h
++++ procps-3.2.8/proc/version.h
+@@ -12,10 +12,11 @@
+ * Copyright 2002 Albert Cahalan
+ */
+
+ EXTERN_C_BEGIN
+
++extern void init_Linux_version(void); /* initialize linux version */
+ extern void display_version(void); /* display suite version */
+ extern const char procps_version[]; /* global buf for suite version */
+
+ extern int linux_version_code; /* runtime version of LINUX_VERSION_CODE
+ in /usr/include/linux/version.h */
diff --git a/recipes/procps/procps-3.2.5/install.patch b/recipes/procps/procps-3.2.8/install.patch
index 9f1ef6915d..9f1ef6915d 100644
--- a/recipes/procps/procps-3.2.5/install.patch
+++ b/recipes/procps/procps-3.2.8/install.patch
diff --git a/recipes/procps/procps-3.2.7/linux-limits.patch b/recipes/procps/procps-3.2.8/linux-limits.patch
index dcd66163ad..dcd66163ad 100644
--- a/recipes/procps/procps-3.2.7/linux-limits.patch
+++ b/recipes/procps/procps-3.2.8/linux-limits.patch
diff --git a/recipes/procps/procps-3.2.1/pagesz-not-constant.patch b/recipes/procps/procps-3.2.8/pagesz-not-constant.patch
index 8e9e1ebfe1..8e9e1ebfe1 100644
--- a/recipes/procps/procps-3.2.1/pagesz-not-constant.patch
+++ b/recipes/procps/procps-3.2.8/pagesz-not-constant.patch
diff --git a/recipes/procps/procps-3.2.5/procmodule.patch b/recipes/procps/procps-3.2.8/procmodule.patch
index fabfabaa59..fabfabaa59 100644
--- a/recipes/procps/procps-3.2.5/procmodule.patch
+++ b/recipes/procps/procps-3.2.8/procmodule.patch
diff --git a/recipes/procps/procps-3.2.7/procps.init b/recipes/procps/procps-3.2.8/procps.init
index 739dcf4be7..739dcf4be7 100644
--- a/recipes/procps/procps-3.2.7/procps.init
+++ b/recipes/procps/procps-3.2.8/procps.init
diff --git a/recipes/procps/procps-3.2.5/psmodule.patch b/recipes/procps/procps-3.2.8/psmodule.patch
index f298c1c1c4..f298c1c1c4 100644
--- a/recipes/procps/procps-3.2.5/psmodule.patch
+++ b/recipes/procps/procps-3.2.8/psmodule.patch
diff --git a/recipes/procps/procps-3.2.7/sysctl.conf b/recipes/procps/procps-3.2.8/sysctl.conf
index 34e7488bf7..34e7488bf7 100644
--- a/recipes/procps/procps-3.2.7/sysctl.conf
+++ b/recipes/procps/procps-3.2.8/sysctl.conf
diff --git a/recipes/procps/procps.inc b/recipes/procps/procps.inc
index 2de32d2c83..1db030d752 100644
--- a/recipes/procps/procps.inc
+++ b/recipes/procps/procps.inc
@@ -8,9 +8,64 @@ PRIORITY = "optional"
LICENSE = "GPL"
DEPENDS = "ncurses"
-FILES_${PN} += "${base_libdir}/libproc-*.so"
+INC_PR = "r9"
-SRC_URI = "http://procps.sourceforge.net/procps-${PV}.tar.gz \
+SRC_URI = "http://procps.sourceforge.net/procps-${PV}.tar.gz;name=tarball \
+ file://sysctl.conf \
+ file://procps.init \
file://install.patch;patch=1"
-inherit autotools
+inherit autotools update-rc.d
+
+INITSCRIPT_NAME = "procps.sh"
+INITSCRIPT_PARAMS = "start 30 S ."
+
+FILES_${PN} += "${base_libdir}/libproc-*.so"
+
+FILES = "${bindir}/top.${PN} ${base_bindir}/ps.${PN} ${bindir}/uptime.${PN} ${base_bindir}/kill.${PN} \
+ ${bindir}/free.${PN} ${bindir}/w ${bindir}/watch ${bindir}/pgrep ${bindir}/pmap ${bindir}/pwdx \
+ ${bindir}/snice ${bindir}/vmstat ${bindir}/slabtop ${bindir}/pkill ${bindir}/skill ${bindir}/tload \
+ ${base_sbindir}/sysctl.${PN}"
+
+CONFFILES_${PN} = "${sysconfdir}/sysctl.conf"
+
+EXTRA_OEMAKE = "CFLAGS=-I${STAGING_INCDIR} \
+ CPPFLAGS=-I${STAGING_INCDIR} \
+ LDFLAGS="${LDFLAGS}" \
+ CURSES=-lncurses \
+ install='install -D' \
+ ldconfig=echo"
+
+do_install_append () {
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0644 ${WORKDIR}/sysctl.conf ${D}${sysconfdir}/sysctl.conf
+ install -m 0755 ${WORKDIR}/procps.init ${D}${sysconfdir}/init.d/procps.sh
+
+ mv ${D}${bindir}/uptime ${D}${bindir}/uptime.${PN}
+ mv ${D}${bindir}/top ${D}${bindir}/top.${PN}
+ mv ${D}${base_bindir}/kill ${D}${base_bindir}/kill.${PN}
+ mv ${D}${base_bindir}/ps ${D}${base_bindir}/ps.${PN}
+ mv ${D}${bindir}/free ${D}${bindir}/free.${PN}
+ mv ${D}${base_sbindir}/sysctl ${D}${base_sbindir}/sysctl.${PN}
+ mv ${D}${bindir}/pkill ${D}${bindir}/pkill.${PN}
+}
+
+pkg_postinst() {
+ update-alternatives --install ${bindir}/top top top.${PN} 90
+ update-alternatives --install ${bindir}/uptime uptime uptime.${PN} 90
+ update-alternatives --install ${base_bindir}/ps ps ps.${PN} 90
+ update-alternatives --install ${base_bindir}/kill kill kill.${PN} 90
+ update-alternatives --install ${bindir}/free free free.${PN} 90
+ update-alternatives --install ${base_sbindir}/sysctl sysctl sysctl.${PN} 90
+ update-alternatives --install ${bindir}/pkill pkill pkill.${PN} 90
+}
+
+pkg_postrm() {
+ update-alternatives --remove top top.${PN}
+ update-alternatives --remove ps ps.${PN}
+ update-alternatives --remove uptime uptime.${PN}
+ update-alternatives --remove kill kill.${PN}
+ update-alternatives --remove free free.${PN}
+ update-alternatives --remove sysctl sysctl.${PN}
+ update-alternatives --remove pkill pkill.${PN}
+}
diff --git a/recipes/procps/procps_3.1.15.bb b/recipes/procps/procps_3.1.15.bb
deleted file mode 100644
index 01114e80dc..0000000000
--- a/recipes/procps/procps_3.1.15.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require procps.inc
-
-SRC_URI += "file://procps_${PV}-2.diff;patch=1"
-
-EXTRA_OEMAKE = "CFLAGS=-I${STAGING_INCDIR} \
- LDFLAGS=-L${STAGING_LIBDIR} -Wl,--rpath-link,${STAGING_LIBDIR} \
- CURSES=-lncurses \
- install='install -D' \
- ldconfig=echo"
diff --git a/recipes/procps/procps_3.2.1.bb b/recipes/procps/procps_3.2.1.bb
deleted file mode 100644
index 33df399c5f..0000000000
--- a/recipes/procps/procps_3.2.1.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require procps.inc
-
-PR = "r1"
-
-SRC_URI += "file://pagesz-not-constant.patch;patch=1"
-
-EXTRA_OEMAKE = "CFLAGS=-I${STAGING_INCDIR} \
- LDFLAGS=-L${STAGING_LIBDIR} -Wl,--rpath-link,${STAGING_LIBDIR} \
- CURSES=-lncurses \
- install='install -D' \
- ldconfig=echo"
diff --git a/recipes/procps/procps_3.2.5.bb b/recipes/procps/procps_3.2.5.bb
deleted file mode 100644
index de7524b2cb..0000000000
--- a/recipes/procps/procps_3.2.5.bb
+++ /dev/null
@@ -1,45 +0,0 @@
-require procps.inc
-
-PR = "r5"
-
-SRC_URI += "file://procmodule.patch;patch=1 \
- file://psmodule.patch;patch=1"
-
-FILES = "${bindir}/top.${PN} ${base_bindir}/ps.${PN} ${bindir}/uptime.${PN} ${base_bindir}/kill.${PN} \
- ${bindir}/free.${PN} ${bindir}/w ${bindir}/watch ${bindir}/pgrep ${bindir}/pmap ${bindir}/pwdx \
- ${bindir}/snice ${bindir}/vmstat ${bindir}/slabtop ${bindir}/pkill ${bindir}/skill ${bindir}/tload \
- ${base_sbindir}/sysctl.${PN}"
-
-EXTRA_OEMAKE = "CFLAGS=-I${STAGING_INCDIR} \
- CPPFLAGS=-I${STAGING_INCDIR} \
- LDFLAGS=-L${STAGING_LIBDIR} -Wl,--rpath-link,${STAGING_LIBDIR} \
- CURSES=-lncurses \
- install='install -D' \
- ldconfig=echo"
-
-do_install_append () {
- mv ${D}${bindir}/uptime ${D}${bindir}/uptime.${PN}
- mv ${D}${bindir}/top ${D}${bindir}/top.${PN}
- mv ${D}${base_bindir}/kill ${D}${base_bindir}/kill.${PN}
- mv ${D}${base_bindir}/ps ${D}${base_bindir}/ps.${PN}
- mv ${D}${bindir}/free ${D}${bindir}/free.${PN}
- mv ${D}${base_sbindir}/sysctl ${D}${base_sbindir}/sysctl.${PN}
-}
-
-pkg_postinst() {
- update-alternatives --install ${bindir}/top top top.${PN} 90
- update-alternatives --install ${bindir}/uptime uptime uptime.${PN} 90
- update-alternatives --install ${base_bindir}/ps ps ps.${PN} 90
- update-alternatives --install ${base_bindir}/kill kill kill.${PN} 90
- update-alternatives --install ${bindir}/free free free.${PN} 90
- update-alternatives --install ${base_sbindir}/sysctl sysctl sysctl.${PN} 90
-}
-
-pkg_postrm() {
- update-alternatives --remove top top.${PN}
- update-alternatives --remove ps ps.${PN}
- update-alternatives --remove uptime uptime.${PN}
- update-alternatives --remove kill kill.${PN}
- update-alternatives --remove free free.${PN}
- update-alternatives --remove sysctl sysctl.${PN}
-}
diff --git a/recipes/procps/procps_3.2.7.bb b/recipes/procps/procps_3.2.7.bb
deleted file mode 100644
index b31b683708..0000000000
--- a/recipes/procps/procps_3.2.7.bb
+++ /dev/null
@@ -1,67 +0,0 @@
-require procps.inc
-
-PR = "r9"
-
-inherit update-rc.d
-
-INITSCRIPT_NAME = "procps.sh"
-INITSCRIPT_PARAMS = "start 30 S ."
-
-SRC_URI += "file://procmodule.patch;patch=1 \
- file://psmodule.patch;patch=1 \
- file://linux-limits.patch;patch=1 \
- file://sysctl.conf \
- file://procps.init \
- "
-
-FILES = "${bindir}/top.${PN} ${base_bindir}/ps.${PN} ${bindir}/uptime.${PN} ${base_bindir}/kill.${PN} \
- ${bindir}/free.${PN} ${bindir}/w ${bindir}/watch ${bindir}/pgrep ${bindir}/pmap ${bindir}/pwdx \
- ${bindir}/snice ${bindir}/vmstat ${bindir}/slabtop ${bindir}/pkill ${bindir}/skill ${bindir}/tload \
- ${base_sbindir}/sysctl.${PN}"
-
-CONFFILES_${PN} = "${sysconfdir}/sysctl.conf"
-
-EXTRA_OEMAKE = "CFLAGS=-I${STAGING_INCDIR} \
- CPPFLAGS=-I${STAGING_INCDIR} \
- usr/bin=${D}${bindir}/ \
- bin=${D}${base_bindir}/ \
- usr/proc/bin=${D}${bindir}/ \
- LDFLAGS="${LDFLAGS}" \
- CURSES=-lncurses \
- install='install -D' \
- ldconfig=echo"
-
-do_install_append () {
- install -d ${D}${sysconfdir}
- install -m 0644 ${WORKDIR}/sysctl.conf ${D}${sysconfdir}/sysctl.conf
- install -d ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/procps.init ${D}${sysconfdir}/init.d/procps.sh
-
- mv ${D}${bindir}/uptime ${D}${bindir}/uptime.${PN}
- mv ${D}${bindir}/top ${D}${bindir}/top.${PN}
- mv ${D}${base_bindir}/kill ${D}${base_bindir}/kill.${PN}
- mv ${D}${base_bindir}/ps ${D}${base_bindir}/ps.${PN}
- mv ${D}${bindir}/free ${D}${bindir}/free.${PN}
- mv ${D}${base_sbindir}/sysctl ${D}${base_sbindir}/sysctl.${PN}
- mv ${D}${bindir}/pkill ${D}${bindir}/pkill.${PN}
-}
-
-pkg_postinst() {
- update-alternatives --install ${bindir}/top top top.${PN} 90
- update-alternatives --install ${bindir}/uptime uptime uptime.${PN} 90
- update-alternatives --install ${base_bindir}/ps ps ps.${PN} 90
- update-alternatives --install ${base_bindir}/kill kill kill.${PN} 90
- update-alternatives --install ${bindir}/free free free.${PN} 90
- update-alternatives --install ${base_sbindir}/sysctl sysctl sysctl.${PN} 90
- update-alternatives --install ${bindir}/pkill pkill pkill.${PN} 90
-}
-
-pkg_postrm() {
- update-alternatives --remove top top.${PN}
- update-alternatives --remove ps ps.${PN}
- update-alternatives --remove uptime uptime.${PN}
- update-alternatives --remove kill kill.${PN}
- update-alternatives --remove free free.${PN}
- update-alternatives --remove sysctl sysctl.${PN}
- update-alternatives --remove pkill pkill.${PN}
-}
diff --git a/recipes/procps/procps_3.2.8.bb b/recipes/procps/procps_3.2.8.bb
new file mode 100644
index 0000000000..f98b8493ca
--- /dev/null
+++ b/recipes/procps/procps_3.2.8.bb
@@ -0,0 +1,12 @@
+require procps.inc
+
+PR = "${INC_PR}.1"
+
+SRC_URI += "file://procmodule.patch;patch=1 \
+ file://psmodule.patch;patch=1 \
+ file://linux-limits.patch;patch=1 \
+ file://60_linux_version_init.dpatch;patch=1 \
+ "
+
+SRC_URI[tarball.md5sum] = "9532714b6846013ca9898984ba4cd7e0"
+SRC_URI[tarball.sha256sum] = "11ed68d8a4433b91cd833deb714a3aa849c02aea738c42e6b4557982419c1535"
diff --git a/recipes/proftpd/proftpd_1.3.2b.bb b/recipes/proftpd/proftpd_1.3.2b.bb
deleted file mode 100644
index a50cc08b08..0000000000
--- a/recipes/proftpd/proftpd_1.3.2b.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-DESCRIPTION = "Secure ftp daemon"
-SECTION = "console/network"
-LICENSE = "GPL"
-PR = "r0"
-
-SRC_URI = "ftp://ftp.nl.uu.net/pub/unix/ftp/proftpd/ftp/distrib/source/${PN}-${PV}.tar.gz \
- file://make.patch;patch=1 \
- "
-
-
-EXTRA_OECONF = "ac_cv_func_setpgrp_void=yes ac_cv_func_setgrent_void=yes"
-LDFLAGS += "-Llib"
-PARALLEL_MAKE = ""
-
-do_configure () {
- ./configure \
- --disable-auth-pam \
- --build=${BUILD_SYS} \
- --host=${HOST_SYS} \
- --target=${TARGET_SYS} \
- --prefix=/usr \
- --sysconfdir=/etc \
- --sharedstatedir=/com \
- --localstatedir=/var \
- ${EXTRA_OECONF} \
- $@;
-}
-
-do_install () {
- oe_runmake DESTDIR=${D} install
-}
-
-pkg_postinst () {
- # more chown's might be needed
- chown root:root /usr/sbin/proftpd
-}
diff --git a/recipes/proftpd/proftpd_1.3.2e.bb b/recipes/proftpd/proftpd_1.3.2e.bb
new file mode 100644
index 0000000000..b6cec1b707
--- /dev/null
+++ b/recipes/proftpd/proftpd_1.3.2e.bb
@@ -0,0 +1,39 @@
+DESCRIPTION = "Secure ftp daemon"
+SECTION = "console/network"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "ftp://ftp.nl.uu.net/pub/unix/ftp/proftpd/ftp/distrib/source/${PN}-${PV}.tar.gz;name=src \
+ file://make.patch;patch=1 \
+ "
+SRC_URI[src.md5sum] = "4ecb82cb1050c0e897d5343f6d2cc1ed"
+SRC_URI[src.sha256sum] = "7c7f295944e8e7c85060829deeaed74f3f0b36c8f1d3936277d59bbea5d60093"
+
+
+
+EXTRA_OECONF = "ac_cv_func_setpgrp_void=yes ac_cv_func_setgrent_void=yes"
+LDFLAGS += "-Llib"
+PARALLEL_MAKE = ""
+
+do_configure () {
+ ./configure \
+ --disable-auth-pam \
+ --build=${BUILD_SYS} \
+ --host=${HOST_SYS} \
+ --target=${TARGET_SYS} \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --sharedstatedir=/com \
+ --localstatedir=/var \
+ ${EXTRA_OECONF} \
+ $@;
+}
+
+do_install () {
+ oe_runmake DESTDIR=${D} install
+}
+
+pkg_postinst () {
+ # more chown's might be needed
+ chown root:root /usr/sbin/proftpd
+}
diff --git a/recipes/pulseaudio/files/CVE-2009-1299.patch b/recipes/pulseaudio/files/CVE-2009-1299.patch
new file mode 100644
index 0000000000..63314b8280
--- /dev/null
+++ b/recipes/pulseaudio/files/CVE-2009-1299.patch
@@ -0,0 +1,86 @@
+From d3efa43d85ac132c6a5a416a2b6f2115f5d577ee Mon Sep 17 00:00:00 2001
+From: Kees Cook <kees@ubuntu.com>
+Date: Tue, 2 Mar 2010 21:33:34 -0800
+Subject: [PATCH] core-util: ensure that we chmod only the dir we ourselves created
+
+---
+ configure.ac | 2 +-
+ src/pulsecore/core-util.c | 39 ++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 35 insertions(+), 6 deletions(-)
+
+Index: pulseaudio-0.9.15/configure.ac
+===================================================================
+--- pulseaudio-0.9.15.orig/configure.ac 2010-03-17 14:50:02.000000000 +0800
++++ pulseaudio-0.9.15/configure.ac 2010-03-17 14:52:27.250075828 +0800
+@@ -403,7 +403,7 @@
+ AC_FUNC_FORK
+ AC_FUNC_GETGROUPS
+ AC_FUNC_SELECT_ARGTYPES
+-AC_CHECK_FUNCS([chmod chown clock_gettime getaddrinfo getgrgid_r getgrnam_r \
++AC_CHECK_FUNCS([chmod chown fstat fchown fchmod clock_gettime getaddrinfo getgrgid_r getgrnam_r \
+ getpwnam_r getpwuid_r gettimeofday getuid inet_ntop inet_pton mlock nanosleep \
+ pipe posix_fadvise posix_madvise posix_memalign setpgid setsid shm_open \
+ sigaction sleep sysconf pthread_setaffinity_np])
+Index: pulseaudio-0.9.15/src/pulsecore/core-util.c
+===================================================================
+--- pulseaudio-0.9.15.orig/src/pulsecore/core-util.c 2010-03-17 14:49:59.000000000 +0800
++++ pulseaudio-0.9.15/src/pulsecore/core-util.c 2010-03-17 14:51:37.680079062 +0800
+@@ -178,7 +178,7 @@
+ /** Creates a directory securely */
+ int pa_make_secure_dir(const char* dir, mode_t m, uid_t uid, gid_t gid) {
+ struct stat st;
+- int r, saved_errno;
++ int r, saved_errno, fd;
+
+ pa_assert(dir);
+
+@@ -196,16 +196,45 @@
+ if (r < 0 && errno != EEXIST)
+ return -1;
+
+-#ifdef HAVE_CHOWN
++#ifdef HAVE_FSTAT
++ if ((fd = open(dir,
++#ifdef O_CLOEXEC
++ O_CLOEXEC|
++#endif
++#ifdef O_NOCTTY
++ O_NOCTTY|
++#endif
++#ifdef O_NOFOLLOW
++ O_NOFOLLOW|
++#endif
++ O_RDONLY)) < 0)
++ goto fail;
++
++ if (fstat(fd, &st) < 0) {
++ pa_assert_se(pa_close(fd) >= 0);
++ goto fail;
++ }
++
++ if (!S_ISDIR(st.st_mode)) {
++ pa_assert_se(pa_close(fd) >= 0);
++ errno = EEXIST;
++ goto fail;
++ }
++
++#ifdef HAVE_FCHOWN
+ if (uid == (uid_t)-1)
+ uid = getuid();
+ if (gid == (gid_t)-1)
+ gid = getgid();
+- (void) chown(dir, uid, gid);
++ (void) fchown(fd, uid, gid);
++#endif
++
++#ifdef HAVE_FCHMOD
++ (void) fchmod(fd, m);
+ #endif
+
+-#ifdef HAVE_CHMOD
+- chmod(dir, m);
++ pa_assert_se(pa_close(fd) >= 0);
++
+ #endif
+
+ #ifdef HAVE_LSTAT
diff --git a/recipes/pulseaudio/files/CVE-2009-1894.patch b/recipes/pulseaudio/files/CVE-2009-1894.patch
new file mode 100644
index 0000000000..729ed91782
--- /dev/null
+++ b/recipes/pulseaudio/files/CVE-2009-1894.patch
@@ -0,0 +1,49 @@
+Index: pulseaudio-0.9.15/src/daemon/main.c
+===================================================================
+--- pulseaudio-0.9.15.orig/src/daemon/main.c
++++ pulseaudio-0.9.15/src/daemon/main.c
+@@ -399,28 +399,6 @@ int main(int argc, char *argv[]) {
+ pa_log_set_level(PA_LOG_NOTICE);
+ pa_log_set_flags(PA_LOG_COLORS|PA_LOG_PRINT_FILE|PA_LOG_PRINT_LEVEL, PA_LOG_RESET);
+
+-#if defined(__linux__) && defined(__OPTIMIZE__)
+- /*
+- Disable lazy relocations to make usage of external libraries
+- more deterministic for our RT threads. We abuse __OPTIMIZE__ as
+- a check whether we are a debug build or not.
+- */
+-
+- if (!getenv("LD_BIND_NOW")) {
+- char *rp;
+-
+- /* We have to execute ourselves, because the libc caches the
+- * value of $LD_BIND_NOW on initialization. */
+-
+- pa_set_env("LD_BIND_NOW", "1");
+-
+- if ((rp = pa_readlink("/proc/self/exe")))
+- pa_assert_se(execv(rp, argv) == 0);
+- else
+- pa_log_warn("Couldn't read /proc/self/exe, cannot self execute. Running in a chroot()?");
+- }
+-#endif
+-
+ #ifdef HAVE_GETUID
+ real_root = getuid() == 0;
+ suid_root = !real_root && geteuid() == 0;
+Index: pulseaudio-0.9.15/src/Makefile.am
+===================================================================
+--- pulseaudio-0.9.15.orig/src/Makefile.am
++++ pulseaudio-0.9.15/src/Makefile.am
+@@ -153,9 +153,9 @@ PREOPEN_LIBS = $(modlibexec_LTLIBRARIES)
+ endif
+
+ if FORCE_PREOPEN
+-pulseaudio_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) -dlpreopen force $(foreach f,$(PREOPEN_LIBS),-dlpreopen $(f))
++pulseaudio_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) -Wl,-z,now -dlpreopen force $(foreach f,$(PREOPEN_LIBS),-dlpreopen $(f))
+ else
+-pulseaudio_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) -dlopen force $(foreach f,$(PREOPEN_LIBS),-dlopen $(f))
++pulseaudio_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) -Wl,-z,now -dlopen force $(foreach f,$(PREOPEN_LIBS),-dlopen $(f))
+ endif
+
+ if HAVE_POLKIT
diff --git a/recipes/pulseaudio/pulseaudio_0.9.15.bb b/recipes/pulseaudio/pulseaudio_0.9.15.bb
index 64ca916659..d71d077ab6 100644
--- a/recipes/pulseaudio/pulseaudio_0.9.15.bb
+++ b/recipes/pulseaudio/pulseaudio_0.9.15.bb
@@ -1,7 +1,7 @@
require pulseaudio.inc
DEPENDS += "gdbm speex"
-PR = "${INC_PR}.4"
+PR = "${INC_PR}.6"
inherit gettext
@@ -15,6 +15,8 @@ SRC_URI += "\
file://fixbluezbuild.patch;patch=1 \
file://tls_m4.patch;patch=1 \
file://sbc-thumb.patch;patch=1 \
+ file://CVE-2009-1299.patch;patch=1 \
+ file://CVE-2009-1894.patch;patch=1 \
"
do_compile_prepend() {
diff --git a/recipes/pulseaudio/pulseaudio_0.9.19.bb b/recipes/pulseaudio/pulseaudio_0.9.19.bb
index 272f16b6e3..4c51328a95 100644
--- a/recipes/pulseaudio/pulseaudio_0.9.19.bb
+++ b/recipes/pulseaudio/pulseaudio_0.9.19.bb
@@ -2,6 +2,10 @@ require pulseaudio.inc
DEPENDS += "gdbm speex"
+DEFAULT_PREFERENCE_om-gta01 = "-1"
+DEFAULT_PREFERENCE_om-gta02 = "-1"
+DEFAULT_PREFERENCE_motorola-ezx = "-1"
+
PR = "${INC_PR}.0"
inherit gettext
diff --git a/recipes/pulseaudio/pulseaudio_0.9.21.bb b/recipes/pulseaudio/pulseaudio_0.9.21.bb
index 6ec8565a0d..c6aef2aa7c 100644
--- a/recipes/pulseaudio/pulseaudio_0.9.21.bb
+++ b/recipes/pulseaudio/pulseaudio_0.9.21.bb
@@ -4,6 +4,7 @@ DEPENDS += "gdbm speex"
DEFAULT_PREFERENCE_om-gta01 = "-1"
DEFAULT_PREFERENCE_om-gta02 = "-1"
+DEFAULT_PREFERENCE_motorola-ezx = "-1"
inherit gettext
diff --git a/recipes/python/python-epsilon_svn.bb b/recipes/python/python-epsilon_svn.bb
deleted file mode 100644
index 9f535e5fd7..0000000000
--- a/recipes/python/python-epsilon_svn.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require python-efl.inc
-DEPENDS += "epsilon python-ecore"
-RDEPENDS += "python-ecore"
-
-SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk/OLD/BINDINGS/python;module=${PN};proto=http"
diff --git a/recipes/python/python-etk_svn.bb b/recipes/python/python-etk_svn.bb
deleted file mode 100644
index ba082d873b..0000000000
--- a/recipes/python/python-etk_svn.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require python-efl.inc
-DEPENDS += "etk python-evas python-ecore"
-RDEPENDS += "python-evas python-ecore python-edje python-numeric python-math etk-themes"
-PV = "0.1.1+svnr${SRCPV}"
-PR = "ml1"
-
-SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk/OLD/BINDINGS/python;module=${PN};proto=http"
-
-do_stage() {
- distutils_stage_all
-}
diff --git a/recipes/python/python-gst/python-path.patch b/recipes/python/python-gst/python-path.patch
index 6cbad8cc5f..5256ddd0ec 100644
--- a/recipes/python/python-gst/python-path.patch
+++ b/recipes/python/python-gst/python-path.patch
@@ -2,7 +2,7 @@ Index: gst-python-0.10.10/acinclude.m4
===================================================================
--- gst-python-0.10.10.orig/acinclude.m4
+++ gst-python-0.10.10/acinclude.m4
-@@ -43,16 +43,20 @@ AC_DEFUN([AM_CHECK_PYTHON_HEADERS],
+@@ -43,16 +43,21 @@ AC_DEFUN([AM_CHECK_PYTHON_HEADERS],
[AC_REQUIRE([AM_PATH_PYTHON])
AC_MSG_CHECKING(for headers required to compile python extensions)
dnl deduce PYTHON_INCLUDES
@@ -15,6 +15,7 @@ Index: gst-python-0.10.10/acinclude.m4
+ [ --with-python-includes=DIR path to Python includes], py_exec_prefix=$withval)
+if test x$py_exec_prefix != x; then
+ PYTHON_INCLUDES="-I${py_exec_prefix}/include/python${PYTHON_VERSION}"
++ py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
else
- PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
- if test "$py_prefix" != "$py_exec_prefix"; then
@@ -23,7 +24,7 @@ Index: gst-python-0.10.10/acinclude.m4
+ py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
+ py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
+ PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
-+if test "$py_prefix" != "$py_exec_prefix"; then
++ if test "$py_prefix" != "$py_exec_prefix"; then
+ PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
+ fi
fi
diff --git a/recipes/python/python-gst_0.10.17.bb b/recipes/python/python-gst_0.10.17.bb
index 6b3a147f14..b0b552b7e1 100644
--- a/recipes/python/python-gst_0.10.17.bb
+++ b/recipes/python/python-gst_0.10.17.bb
@@ -3,6 +3,8 @@ SECTION = "devel/python"
LICENSE = "LGPL"
DEPENDS = "gstreamer gst-plugins-base python-pygobject"
+PR = "r1"
+
SRC_URI = "\
http://gstreamer.freedesktop.org/src/gst-python/gst-python-${PV}.tar.bz2 \
file://python-path.patch;patch=1 \
diff --git a/recipes/python/python-paste_1.7.2.bb b/recipes/python/python-paste_1.7.2.bb
new file mode 100644
index 0000000000..28c59fb39d
--- /dev/null
+++ b/recipes/python/python-paste_1.7.2.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Tools for using a Web Server Gateway Interface stack"
+HOMEPAGE = "http://pythonpaste.org/"
+SECTION = "devel/python"
+PRIORITY = "optional"
+LICENSE = "MIT"
+SRCNAME = "Paste"
+PR = "r0"
+
+SRC_URI = "http://pypi.python.org/packages/source/P/${SRCNAME}/${SRCNAME}-${PV}.tar.gz;name=paste"
+SRC_URI[paste.md5sum] = "a6a58d08dc4bff91d5d1c519d2277f8a"
+SRC_URI[paste.sha256sum] = "67dde086f0aa84c3ec2452cd65d05d19a050ec2ba56483b1614bdbfd82b3b2b8"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
diff --git a/recipes/python/python-phoneutils_git.bb b/recipes/python/python-phoneutils_git.bb
index c616a2beed..2c6fca1ed1 100644
--- a/recipes/python/python-phoneutils_git.bb
+++ b/recipes/python/python-phoneutils_git.bb
@@ -3,6 +3,7 @@ SECTION = "devel/python"
DEPENDS = "libphone-utils python-cython-native python-pyrex-native"
RDEPENDS = "libphone-utils"
+SRCREV = "8a7c719e0c3f1f8c10f77f17422da02d7177f0dd"
PV = "0.0.2+gitr${SRCREV}"
PR = "r2"
diff --git a/recipes/python/python-pygame-1.8.1/Setup b/recipes/python/python-pygame-1.8.1/Setup
deleted file mode 100644
index dd6d540da5..0000000000
--- a/recipes/python/python-pygame-1.8.1/Setup
+++ /dev/null
@@ -1,63 +0,0 @@
-#This Setup file is used by the setup.py script to configure the
-#python extensions. You will likely use the "config.py" which will
-#build a correct Setup file for you based on your system settings.
-#If not, the format is simple enough to edit by hand. First change
-#the needed commandline flags for each dependency, then comment out
-#any unavailable optional modules in the first optional section.
-
-
-SDL = -D_REENTRANT -Xlinker -lSDL -lpthread
-FONT = -lSDL_ttf
-IMAGE = -lSDL_image
-MIXER = -lSDL_mixer
-SMPEG = -lsmpeg
-PNG = -lpng
-JPEG = -ljpeg
-SCRAP = -lX11
-
-#DEBUG = -C-W -C-Wall
-DEBUG =
-
-#the following modules are optional. you will want to compile
-#everything you can, but you can ignore ones you don't have
-#dependencies for, just comment them out
-
-imageext src/imageext.c $(SDL) $(IMAGE) $(PNG) $(JPEG) $(DEBUG)
-font src/font.c $(SDL) $(FONT) $(DEBUG)
-mixer src/mixer.c $(SDL) $(MIXER) $(DEBUG)
-mixer_music src/music.c $(SDL) $(MIXER) $(DEBUG)
-_numericsurfarray src/_numericsurfarray.c $(SDL) $(DEBUG)
-_numericsndarray src/_numericsndarray.c $(SDL) $(MIXER) $(DEBUG)
-scrap src/scrap.c $(SDL) $(SCRAP) $(DEBUG)
-
-#experimental new movie movie. requires libavcodec and libavformat.
-#add any necessary compile flags to this line and uncomment.
-#movieext src/movie.c src/ffmovie.c $(SDL) -lavcodec -lavformat
-
-
-#these modules are required for pygame to run. they only require
-#SDL as a dependency. these should not be altered
-
-base src/base.c $(SDL) $(DEBUG)
-cdrom src/cdrom.c $(SDL) $(DEBUG)
-color src/color.c $(SDL) $(DEBUG)
-constants src/constants.c $(SDL) $(DEBUG)
-display src/display.c $(SDL) $(DEBUG)
-event src/event.c $(SDL) $(DEBUG)
-fastevent src/fastevent.c src/fastevents.c $(SDL) $(DEBUG)
-key src/key.c $(SDL) $(DEBUG)
-mouse src/mouse.c $(SDL) $(DEBUG)
-rect src/rect.c $(SDL) $(DEBUG)
-rwobject src/rwobject.c $(SDL) $(DEBUG)
-surface src/surface.c src/alphablit.c src/surface_fill.c $(SDL) $(DEBUG)
-surflock src/surflock.c $(SDL) $(DEBUG)
-time src/time.c $(SDL) $(DEBUG)
-joystick src/joystick.c $(SDL) $(DEBUG)
-draw src/draw.c $(SDL) $(DEBUG)
-image src/image.c $(SDL) $(DEBUG)
-overlay src/overlay.c $(SDL) $(DEBUG)
-transform src/transform.c src/rotozoom.c src/scale2x.c $(SDL) $(DEBUG)
-mask src/mask.c src/bitmask.c $(SDL) $(DEBUG)
-bufferproxy src/bufferproxy.c $(SDL) $(DEBUG)
-pixelarray src/pixelarray.c $(SDL) $(DEBUG)
-
diff --git a/recipes/python/python-pygame_1.8.1.bb b/recipes/python/python-pygame_1.8.1.bb
deleted file mode 100644
index 95191ce350..0000000000
--- a/recipes/python/python-pygame_1.8.1.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-DESCRIPTION = "Python libSDL Bindings"
-SECTION = "devel/python"
-HOMEPAGE = "http://www.pygame.org"
-LICENSE = "LGPL"
-DEPENDS = "libsdl-x11 libsdl-image libsdl-mixer libsdl-net libsdl-ttf python-numeric"
-DEPENDS += "${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'smpeg', d)}"
-SRCNAME = "pygame"
-PR = "ml4"
-
-SRC_URI = "\
- ftp://ftp.pygame.org/pub/pygame/${SRCNAME}-${PV}release.tar.gz \
- file://Setup \
-"
-S = "${WORKDIR}/${SRCNAME}-${PV}release"
-
-inherit distutils
-
-do_configure_prepend() {
- cat ${WORKDIR}/Setup >Setup
- SDL="`sdl-config --cflags` `sdl-config --libs`"; echo "SDL=$SDL" >>Setup
- if [ '${ENTERPRISE_DISTRO}' != '1' ]; then
- echo "movie src/movie.c \$(SDL) \$(SMPEG) \$(DEBUG)" >>Setup
- fi
-}
-
-do_stage() {
- distutils_stage_all
-}
-
-RDEPENDS = "python-numeric"
diff --git a/recipes/python/python-pygame_1.9.1.bb b/recipes/python/python-pygame_1.9.1.bb
new file mode 100644
index 0000000000..bbeedda3a9
--- /dev/null
+++ b/recipes/python/python-pygame_1.9.1.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "Python libSDL Bindings"
+SECTION = "devel/python"
+HOMEPAGE = "http://www.pygame.org"
+LICENSE = "LGPL"
+DEPENDS = "libsdl-x11 libsdl-image libsdl-mixer libsdl-net libsdl-ttf python-numeric"
+DEPENDS += "${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'smpeg', d)}"
+RDEPENDS = "python-numeric"
+SRCNAME = "pygame"
+PR = "ml4"
+
+SRC_URI = "http://www.pygame.org/ftp/${SRCNAME}-${PV}release.tar.gz;name=archive"
+SRC_URI[archive.md5sum] = "1c4cdc708d17c8250a2d78ef997222fc"
+SRC_URI[archive.sha256sum] = "a26095472ae4be9631e0d5bfb9a52ac57a3a091e45757913128e4a473807d433"
+S = "${WORKDIR}/${SRCNAME}-${PV}release"
+
+inherit distutils
+
+do_configure_prepend() {
+ # Drop options to replace them later and drom pypm as we don't have portmidi/porttime
+ sed '/^SDL =/d; /^SMPEG =/d; /^movie src/d; /^pypm src/d' Setup.in > Setup
+ SDL="`sdl-config --cflags` `sdl-config --libs`"; echo "SDL=$SDL" >>Setup
+ if [ '${ENTERPRISE_DISTRO}' != '1' ]; then
+ SMPEG="`smpeg-config --cflags` `smpeg-config --libs`"; echo "SMPEG=$SMPEG" >>Setup
+ echo "movie src/movie.c \$(SDL) \$(SMPEG) \$(DEBUG)" >>Setup
+ fi
+}
diff --git a/recipes/python/python-pygobject-native_2.20.0.bb b/recipes/python/python-pygobject-native_2.20.0.bb
index 918ffa2643..409481c2bf 100644
--- a/recipes/python/python-pygobject-native_2.20.0.bb
+++ b/recipes/python/python-pygobject-native_2.20.0.bb
@@ -1,11 +1,11 @@
require python-pygobject_${PV}.bb
+inherit native
+
DEPENDS = "python-native glib-2.0-native"
PARALLEL_MAKE = ""
-inherit native
-
SRC_URI = "\
ftp://ftp.gnome.org/pub/GNOME/sources/pygobject/${MAJ_VER}/pygobject-${PV}.tar.bz2 \
# file://python-path.patch;patch=1 \
@@ -13,7 +13,11 @@ SRC_URI = "\
export GOBJECT_INTROSPECTION_CFLAGS="-pthread -I${STAGING_INCDIR}/gobject-introspection-1.0 -I${STAGING_INCDIR}/glib-2.0 -I${STAGING_LIBDIR}/glib-2.0/include"
-do_stage_append() {
- install -d ${STAGING_BINDIR}
- install -m 0755 gobject/generate-constants ${STAGING_BINDIR}/gobject-generate-constants
+do_configure_prepend() {
+ unset PYTHONPATH
+}
+
+do_install_append() {
+ install -d ${D}${bindir}
+ install -m 0755 gobject/generate-constants ${D}${bindir}/gobject-generate-constants
}
diff --git a/recipes/python/python-pygobject_2.20.0.bb b/recipes/python/python-pygobject_2.20.0.bb
index 10c94dcbc1..fb97e53600 100644
--- a/recipes/python/python-pygobject_2.20.0.bb
+++ b/recipes/python/python-pygobject_2.20.0.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Python GObject bindings"
SECTION = "devel/python"
LICENSE = "LGPL"
-DEPENDS = "python-pygobject-native-${PV}"
+DEPENDS = "libffi python-pygobject-native-${PV}"
PE = "1"
MAJ_VER = "${@bb.data.getVar('PV',d,1).split('.')[0]}.${@bb.data.getVar('PV',d,1).split('.')[1]}"
diff --git a/recipes/python/python-pysqlite2-native_2.4.0.bb b/recipes/python/python-pysqlite2-native_2.4.0.bb
new file mode 100644
index 0000000000..0a7d667dca
--- /dev/null
+++ b/recipes/python/python-pysqlite2-native_2.4.0.bb
@@ -0,0 +1,10 @@
+require python-pysqlite2_${PV}.bb
+inherit native
+DEPENDS = "python-native sqlite3-native"
+RDEPENDS = ""
+
+do_stage() {
+ BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
+ STAGING_LIBDIR=${STAGING_LIBDIR} STAGING_INCDIR=${STAGING_INCDIR} \
+ ${STAGING_BINDIR}/python setup.py install --prefix=${STAGING_BINDIR}/.. --install-data=${STAGING_DATADIR}
+}
diff --git a/recipes/python/python-wsgiref_0.1.2.bb b/recipes/python/python-wsgiref_0.1.2.bb
new file mode 100644
index 0000000000..757a81c4f5
--- /dev/null
+++ b/recipes/python/python-wsgiref_0.1.2.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "WSGI (PEP 333) Reference Library"
+SECTION = "devel/python"
+PRIORITY = "optional"
+LICENSE = "PSF ZPL"
+SRCNAME = "wsgiref"
+PR = "ml0"
+
+SRC_URI = "http://pypi.python.org/packages/source/w/${SRCNAME}/${SRCNAME}-${PV}.zip;name=wsgiref"
+SRC_URI[wsgiref.md5sum] = "29b146e6ebd0f9fb119fe321f7bcf6cb"
+SRC_URI[wsgiref.sha256sum] = "c7e610c800957046c04c8014aab8cce8f0b9f0495c8cd349e57c1f7cabf40e79"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
diff --git a/recipes/qemu/qemu-0.10.3/22_net_tuntap_stall.patch b/recipes/qemu/qemu-0.10.3/22_net_tuntap_stall.patch
deleted file mode 100644
index 993960be98..0000000000
--- a/recipes/qemu/qemu-0.10.3/22_net_tuntap_stall.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: qemu-0.10.3/net.c
-===================================================================
---- qemu-0.10.3.orig/net.c 2009-05-19 17:46:54.650870195 +0400
-+++ qemu-0.10.3/net.c 2009-05-19 17:47:05.612854521 +0400
-@@ -955,7 +955,7 @@
- return -1;
- }
- memset(&ifr, 0, sizeof(ifr));
-- ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
-+ ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;
- if (ifname[0] != '\0')
- pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
- else
diff --git a/recipes/qemu/qemu-0.10.3/32_syscall_sysctl.patch b/recipes/qemu/qemu-0.10.3/32_syscall_sysctl.patch
deleted file mode 100644
index 2a670c90be..0000000000
--- a/recipes/qemu/qemu-0.10.3/32_syscall_sysctl.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c | 32 +++++++++++++++++++++++++++++---
-# 1 file changed, 29 insertions(+), 3 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2009-05-19 17:50:28.000000000 +0400
-+++ linux-user/syscall.c 2009-05-19 17:52:19.094103462 +0400
-@@ -55,6 +55,7 @@
- #include <netinet/ip.h>
- #include <netinet/tcp.h>
- #include <qemu-common.h>
-+#include <sys/sysctl.h>
- #ifdef HAVE_GPROF
- #include <sys/gmon.h>
- #endif
-@@ -5193,9 +5194,34 @@
- break;
- #endif
- case TARGET_NR__sysctl:
-- /* We don't implement this, but ENOTDIR is always a safe
-- return value. */
-- ret = -TARGET_ENOTDIR;
-+ {
-+ struct __sysctl_args *args = (struct __sysctl_args *) arg1;
-+ int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i;
-+ void *oldval, *newval;
-+
-+ name_target = (int *) tswapl((long) args->name);
-+ nlen = tswapl(args->nlen);
-+ oldval = (void *) tswapl((long) args->oldval);
-+ oldlenp = (int *) tswapl((long) args->oldlenp);
-+ oldlen = tswapl(*oldlenp);
-+ newval = (void *) tswapl((long) args->newval);
-+ newlen = tswapl(args->newlen);
-+
-+ name = alloca(nlen * sizeof (int));
-+ for (i = 0; i < nlen; i++)
-+ name[i] = tswapl(name_target[i]);
-+
-+ if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) {
-+ ret = get_errno(
-+ sysctl(name, nlen, oldval, &oldlen, newval, newlen));
-+ if (!is_error(ret)) {
-+ *oldlenp = tswapl(oldlen);
-+ }
-+ } else {
-+ gemu_log("qemu: Unsupported sysctl name\n");
-+ ret = -ENOSYS;
-+ }
-+ }
- break;
- case TARGET_NR_sched_setparam:
- {
diff --git a/recipes/qemu/qemu-0.10.3/61_safe_64bit_int.patch b/recipes/qemu/qemu-0.10.3/61_safe_64bit_int.patch
deleted file mode 100644
index 80e7b22e27..0000000000
--- a/recipes/qemu/qemu-0.10.3/61_safe_64bit_int.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-#DPATCHLEVEL=0
----
-# dyngen-exec.h | 4 ++--
-# 1 file changed, 2 insertions(+), 2 deletions(-)
-#
-Index: dyngen-exec.h
-===================================================================
---- dyngen-exec.h.orig 2009-05-01 21:02:44.000000000 +0400
-+++ dyngen-exec.h 2009-05-19 17:56:28.164854448 +0400
-@@ -41,7 +41,7 @@
- // Linux/Sparc64 defines uint64_t
- #if !(defined (__sparc_v9__) && defined(__linux__)) && !(defined(__APPLE__) && defined(__x86_64__))
- /* XXX may be done for all 64 bits targets ? */
--#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(_ARCH_PPC64)
-+#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(_ARCH_PPC64) || defined(__sparc__)
- typedef unsigned long uint64_t;
- #else
- typedef unsigned long long uint64_t;
-@@ -58,7 +58,7 @@
- typedef signed int int32_t;
- // Linux/Sparc64 defines int64_t
- #if !(defined (__sparc_v9__) && defined(__linux__)) && !(defined(__APPLE__) && defined(__x86_64__))
--#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(_ARCH_PPC64)
-+#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(_ARCH_PPC64) || defined(__sparc__)
- typedef signed long int64_t;
- #else
- typedef signed long long int64_t;
diff --git a/recipes/qemu/qemu-0.10.3/fix_fortify_source_compilation.patch b/recipes/qemu/qemu-0.10.3/fix_fortify_source_compilation.patch
deleted file mode 100644
index 326d197167..0000000000
--- a/recipes/qemu/qemu-0.10.3/fix_fortify_source_compilation.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- qemu-0.10.3/block-vvfat.c.orig 2009-05-01 21:02:44 +0400
-+++ qemu-0.10.3/block-vvfat.c 2009-12-15 22:06:04 +0300
-@@ -865,7 +865,9 @@
- {
- direntry_t* entry=array_get_next(&(s->directory));
- entry->attributes=0x28; /* archive | volume label */
-- snprintf((char*)entry->name,11,"QEMU VVFAT");
-+ /* snprintf((char*)entry->name,11,"QEMU VVFAT"); */
-+ snprintf(entry->name, sizeof(entry->name), "QEMU VV");
-+ snprintf(entry->extension, sizeof(entry->extension), "FAT");
- }
-
- /* Now build FAT, and write back information into directory */
diff --git a/recipes/qemu/qemu-0.10.3/no-strip.patch b/recipes/qemu/qemu-0.10.3/no-strip.patch
deleted file mode 100644
index 4813dd4e2b..0000000000
--- a/recipes/qemu/qemu-0.10.3/no-strip.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Index: trunk/Makefile
-===================================================================
---- trunk.orig/Makefile 2008-04-24 20:15:37.000000000 +0100
-+++ trunk/Makefile 2008-04-24 20:16:30.000000000 +0100
-@@ -196,7 +196,7 @@
- install: all $(if $(BUILD_DOCS),install-doc)
- mkdir -p "$(DESTDIR)$(bindir)"
- ifneq ($(TOOLS),)
-- $(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)"
-+ $(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)"
- endif
- mkdir -p "$(DESTDIR)$(datadir)"
- set -e; for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
-Index: trunk/Makefile.target
-===================================================================
---- trunk.orig/Makefile.target 2008-04-24 20:15:37.000000000 +0100
-+++ trunk/Makefile.target 2008-04-24 20:16:30.000000000 +0100
-@@ -685,7 +685,7 @@
-
- install: all
- ifneq ($(PROGS),)
-- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
-+ $(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)"
- endif
-
- # Include automatically generated dependency files
diff --git a/recipes/qemu/qemu-0.10.3/06_exit_segfault.patch b/recipes/qemu/qemu-0.12.3/06_exit_segfault.patch
index bc02d31839..bc02d31839 100644
--- a/recipes/qemu/qemu-0.10.3/06_exit_segfault.patch
+++ b/recipes/qemu/qemu-0.12.3/06_exit_segfault.patch
diff --git a/recipes/qemu/qemu-0.10.3/11_signal_sigaction.patch b/recipes/qemu/qemu-0.12.3/11_signal_sigaction.patch
index cd56541b71..cd56541b71 100644
--- a/recipes/qemu/qemu-0.10.3/11_signal_sigaction.patch
+++ b/recipes/qemu/qemu-0.12.3/11_signal_sigaction.patch
diff --git a/recipes/qemu/qemu-0.12.3/22_net_tuntap_stall.patch b/recipes/qemu/qemu-0.12.3/22_net_tuntap_stall.patch
new file mode 100644
index 0000000000..01dc29d910
--- /dev/null
+++ b/recipes/qemu/qemu-0.12.3/22_net_tuntap_stall.patch
@@ -0,0 +1,25 @@
+Index: qemu-0.12.3/net/tap-linux.c
+===================================================================
+--- qemu-0.12.3.orig/net/tap-linux.c
++++ qemu-0.12.3/net/tap-linux.c
+@@ -43,7 +43,7 @@ int tap_open(char *ifname, int ifname_si
+ return -1;
+ }
+ memset(&ifr, 0, sizeof(ifr));
+- ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
++ ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;
+
+ if (*vnet_hdr) {
+ unsigned int features;
+Index: qemu-0.12.3/net/tap-linux.h
+===================================================================
+--- qemu-0.12.3.orig/net/tap-linux.h
++++ qemu-0.12.3/net/tap-linux.h
+@@ -33,6 +33,7 @@
+ /* TUNSETIFF ifr flags */
+ #define IFF_TAP 0x0002
+ #define IFF_NO_PI 0x1000
++#define IFF_ONE_QUEUE 0x2000
+ #define IFF_VNET_HDR 0x4000
+
+ /* Features for GSO (TUNSETOFFLOAD). */
diff --git a/recipes/qemu/qemu-0.10.3/31_syscalls.patch b/recipes/qemu/qemu-0.12.3/31_syscalls.patch
index 20a1499d18..20a1499d18 100644
--- a/recipes/qemu/qemu-0.10.3/31_syscalls.patch
+++ b/recipes/qemu/qemu-0.12.3/31_syscalls.patch
diff --git a/recipes/qemu/qemu-0.12.3/32_syscall_sysctl.patch b/recipes/qemu/qemu-0.12.3/32_syscall_sysctl.patch
new file mode 100644
index 0000000000..2bd90d177d
--- /dev/null
+++ b/recipes/qemu/qemu-0.12.3/32_syscall_sysctl.patch
@@ -0,0 +1,55 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c | 32 +++++++++++++++++++++++++++++---
+# 1 file changed, 29 insertions(+), 3 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig
++++ linux-user/syscall.c
+@@ -56,6 +56,7 @@
+ #include <netinet/ip.h>
+ #include <netinet/tcp.h>
+ #include <qemu-common.h>
++#include <sys/sysctl.h>
+ #ifdef TARGET_GPROF
+ #include <sys/gmon.h>
+ #endif
+@@ -5986,9 +5987,34 @@ abi_long do_syscall(void *cpu_env, int n
+ break;
+ #endif
+ case TARGET_NR__sysctl:
+- /* We don't implement this, but ENOTDIR is always a safe
+- return value. */
+- ret = -TARGET_ENOTDIR;
++ {
++ struct __sysctl_args *args = (struct __sysctl_args *) arg1;
++ int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i;
++ void *oldval, *newval;
++
++ name_target = (int *) tswapl((long) args->name);
++ nlen = tswapl(args->nlen);
++ oldval = (void *) tswapl((long) args->oldval);
++ oldlenp = (int *) tswapl((long) args->oldlenp);
++ oldlen = tswapl(*oldlenp);
++ newval = (void *) tswapl((long) args->newval);
++ newlen = tswapl(args->newlen);
++
++ name = alloca(nlen * sizeof (int));
++ for (i = 0; i < nlen; i++)
++ name[i] = tswapl(name_target[i]);
++
++ if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) {
++ ret = get_errno(
++ sysctl(name, nlen, oldval, &oldlen, newval, newlen));
++ if (!is_error(ret)) {
++ *oldlenp = tswapl(oldlen);
++ }
++ } else {
++ gemu_log("qemu: Unsupported sysctl name\n");
++ ret = -ENOSYS;
++ }
++ }
+ break;
+ case TARGET_NR_sched_setparam:
+ {
diff --git a/recipes/qemu/qemu-0.10.3/52_ne2000_return.patch b/recipes/qemu/qemu-0.12.3/52_ne2000_return.patch
index e364bff731..e364bff731 100644
--- a/recipes/qemu/qemu-0.10.3/52_ne2000_return.patch
+++ b/recipes/qemu/qemu-0.12.3/52_ne2000_return.patch
diff --git a/recipes/qemu/qemu-0.10.3/63_sparc_build.patch b/recipes/qemu/qemu-0.12.3/63_sparc_build.patch
index 097f55a09e..097f55a09e 100644
--- a/recipes/qemu/qemu-0.10.3/63_sparc_build.patch
+++ b/recipes/qemu/qemu-0.12.3/63_sparc_build.patch
diff --git a/recipes/qemu/qemu-0.10.3/64_ppc_asm_constraints.patch b/recipes/qemu/qemu-0.12.3/64_ppc_asm_constraints.patch
index 7562daf77b..7562daf77b 100644
--- a/recipes/qemu/qemu-0.10.3/64_ppc_asm_constraints.patch
+++ b/recipes/qemu/qemu-0.12.3/64_ppc_asm_constraints.patch
diff --git a/recipes/qemu/qemu-0.10.3/66_tls_ld.patch b/recipes/qemu/qemu-0.12.3/66_tls_ld.patch
index cbd3f873d8..cbd3f873d8 100644
--- a/recipes/qemu/qemu-0.10.3/66_tls_ld.patch
+++ b/recipes/qemu/qemu-0.12.3/66_tls_ld.patch
diff --git a/recipes/qemu/qemu-0.10.3/91-oh-sdl-cursor.patch b/recipes/qemu/qemu-0.12.3/91-oh-sdl-cursor.patch
index b3d95a4534..b3d95a4534 100644
--- a/recipes/qemu/qemu-0.10.3/91-oh-sdl-cursor.patch
+++ b/recipes/qemu/qemu-0.12.3/91-oh-sdl-cursor.patch
diff --git a/recipes/qemu/qemu-0.10.3/fix_baum_c_compilation.patch b/recipes/qemu/qemu-0.12.3/fix_baum_c_compilation.patch
index a2eb438ed9..a2eb438ed9 100644
--- a/recipes/qemu/qemu-0.10.3/fix_baum_c_compilation.patch
+++ b/recipes/qemu/qemu-0.12.3/fix_baum_c_compilation.patch
diff --git a/recipes/qemu/qemu-0.12.3/fix_fortify_source_compilation.patch b/recipes/qemu/qemu-0.12.3/fix_fortify_source_compilation.patch
new file mode 100644
index 0000000000..db507b3b45
--- /dev/null
+++ b/recipes/qemu/qemu-0.12.3/fix_fortify_source_compilation.patch
@@ -0,0 +1,15 @@
+Index: qemu-0.12.3/block/vvfat.c
+===================================================================
+--- qemu-0.12.3.orig/block/vvfat.c
++++ qemu-0.12.3/block/vvfat.c
+@@ -868,7 +868,9 @@ static int init_directories(BDRVVVFATSta
+ {
+ direntry_t* entry=array_get_next(&(s->directory));
+ entry->attributes=0x28; /* archive | volume label */
+- snprintf((char*)entry->name,11,"QEMU VVFAT");
++ // snprintf((char*)entry->name,11,"QEMU VVFAT");
++ snprintf(entry->name, sizeof(entry->name), "QEMU VV");
++ snprintf(entry->extension, sizeof(entry->extension), "FAT");
+ }
+
+ /* Now build FAT, and write back information into directory */
diff --git a/recipes/qemu/qemu-0.10.3/fix_segfault.patch b/recipes/qemu/qemu-0.12.3/fix_segfault.patch
index 32ca3c0b6b..32ca3c0b6b 100644
--- a/recipes/qemu/qemu-0.10.3/fix_segfault.patch
+++ b/recipes/qemu/qemu-0.12.3/fix_segfault.patch
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch
deleted file mode 100644
index bd955b6db3..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-#DPATCHLEVEL=0
----
-# block.c | 6 +++++-
-# 1 file changed, 5 insertions(+), 1 deletion(-)
-#
-Index: block.c
-===================================================================
---- block.c.orig 2007-06-13 11:51:52.000000000 +0100
-+++ block.c 2007-06-13 11:51:53.000000000 +0100
-@@ -188,8 +188,12 @@ void get_tmp_filename(char *filename, in
- void get_tmp_filename(char *filename, int size)
- {
- int fd;
-+ char *tmpdir;
- /* XXX: race condition possible */
-- pstrcpy(filename, size, "/tmp/vl.XXXXXX");
-+ tmpdir = getenv("TMPDIR");
-+ if (!tmpdir)
-+ tmpdir = "/tmp";
-+ snprintf(filename, size, "%s/vl.XXXXXX", tmpdir);
- fd = mkstemp(filename);
- close(fd);
- }
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch
deleted file mode 100644
index 73f31550fe..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=0
----
-# vl.c | 2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: vl.c
-===================================================================
---- vl.c.orig 2007-06-13 11:51:52.000000000 +0100
-+++ vl.c 2007-06-13 11:52:24.000000000 +0100
-@@ -7242,7 +7242,7 @@ int main(int argc, char **argv)
- m->name, m->desc,
- m == first_machine ? " (default)" : "");
- }
-- exit(1);
-+ exit(strcmp(optarg, "?"));
- }
- break;
- case QEMU_OPTION_cpu:
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch
deleted file mode 100644
index 1575cbce63..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-#DPATCHLEVEL=1
----
-# vl.c | 6 +++++-
-# 1 file changed, 5 insertions(+), 1 deletion(-)
-#
-Index: qemu/vl.c
-===================================================================
---- qemu.orig/vl.c 2007-06-13 11:51:53.000000000 +0100
-+++ qemu/vl.c 2007-06-13 11:52:19.000000000 +0100
-@@ -1026,10 +1026,14 @@ static int rtc_fd;
-
- static int start_rtc_timer(void)
- {
-+ unsigned long current_rtc_freq = 0;
-+
- rtc_fd = open("/dev/rtc", O_RDONLY);
- if (rtc_fd < 0)
- return -1;
-- if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
-+ ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
-+ if (current_rtc_freq != RTC_FREQ &&
-+ ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
- fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
- "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
- "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch
deleted file mode 100644
index b7c4732f24..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-#DPATCHLEVEL=1
----
-# hw/pc.c | 1 -
-# 1 file changed, 1 deletion(-)
-#
-Index: qemu/hw/pc.c
-===================================================================
---- qemu.orig/hw/pc.c 2007-06-13 11:51:52.000000000 +0100
-+++ qemu/hw/pc.c 2007-06-13 11:51:53.000000000 +0100
-@@ -355,7 +355,6 @@ static void generate_bootsect(uint32_t g
- if (bs_table[0] == NULL) {
- fprintf(stderr, "A disk image must be given for 'hda' when booting "
- "a Linux kernel\n");
-- exit(1);
- }
-
- memset(bootsect, 0, sizeof(bootsect));
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch
deleted file mode 100644
index 447c3550b8..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/main.c | 8 ++++----
-# 1 file changed, 4 insertions(+), 4 deletions(-)
-#
-Index: linux-user/main.c
-===================================================================
---- linux-user/main.c.orig 2007-06-13 11:51:52.000000000 +0100
-+++ linux-user/main.c 2007-06-13 11:52:16.000000000 +0100
-@@ -642,7 +642,7 @@ void cpu_loop (CPUSPARCState *env)
- default:
- printf ("Unhandled trap: 0x%x\n", trapnr);
- cpu_dump_state(env, stderr, fprintf, 0);
-- exit (1);
-+ _exit (1);
- }
- process_pending_signals (env);
- }
-@@ -1471,7 +1471,7 @@ void cpu_loop (CPUState *env)
- default:
- printf ("Unhandled trap: 0x%x\n", trapnr);
- cpu_dump_state(env, stderr, fprintf, 0);
-- exit (1);
-+ _exit (1);
- }
- process_pending_signals (env);
- }
-@@ -1735,7 +1735,7 @@ int main(int argc, char **argv)
- for(item = cpu_log_items; item->mask != 0; item++) {
- printf("%-10s %s\n", item->name, item->help);
- }
-- exit(1);
-+ _exit(1);
- }
- cpu_set_log(mask);
- } else if (!strcmp(r, "s")) {
-@@ -1754,7 +1754,7 @@ int main(int argc, char **argv)
- if (qemu_host_page_size == 0 ||
- (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) {
- fprintf(stderr, "page size must be a power of two\n");
-- exit(1);
-+ _exit(1);
- }
- } else if (!strcmp(r, "g")) {
- gdbstub_port = atoi(argv[optind++]);
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch
deleted file mode 100644
index 794a538676..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/signal.c | 7 ++++++-
-# 1 file changed, 6 insertions(+), 1 deletion(-)
-#
-Index: linux-user/signal.c
-===================================================================
---- linux-user/signal.c.orig 2007-06-13 11:51:52.000000000 +0100
-+++ linux-user/signal.c 2007-06-13 11:52:21.000000000 +0100
-@@ -341,10 +341,15 @@ int queue_signal(int sig, target_siginfo
- k = &sigact_table[sig - 1];
- handler = k->sa._sa_handler;
- if (handler == TARGET_SIG_DFL) {
-+ if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) {
-+ kill(getpid(),SIGSTOP);
-+ return 0;
-+ } else
- /* default handler : ignore some signal. The other are fatal */
- if (sig != TARGET_SIGCHLD &&
- sig != TARGET_SIGURG &&
-- sig != TARGET_SIGWINCH) {
-+ sig != TARGET_SIGWINCH &&
-+ sig != TARGET_SIGCONT) {
- force_sig(sig);
- } else {
- return 0; /* indicate ignored */
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch
deleted file mode 100644
index 5446efc562..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/signal.c | 5 +++++
-# 1 file changed, 5 insertions(+)
-#
-Index: linux-user/signal.c
-===================================================================
---- linux-user/signal.c.orig 2007-06-13 11:51:54.000000000 +0100
-+++ linux-user/signal.c 2007-06-13 11:52:20.000000000 +0100
-@@ -429,6 +429,11 @@ int do_sigaction(int sig, const struct t
-
- if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP)
- return -EINVAL;
-+
-+ /* no point doing the stuff as those are not allowed for sigaction */
-+ if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP))
-+ return -EINVAL;
-+
- k = &sigact_table[sig - 1];
- #if defined(DEBUG_SIGNAL)
- fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n",
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch
deleted file mode 100644
index d8d4198784..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch
+++ /dev/null
@@ -1,401 +0,0 @@
-#DPATCHLEVEL=1
----
-# linux-user/signal.c | 371 ++++++++++++++++++++++++++++++++++++++++++++++++++++
-# 1 file changed, 371 insertions(+)
-#
-Index: qemu/linux-user/signal.c
-===================================================================
---- qemu.orig/linux-user/signal.c 2007-06-13 11:51:54.000000000 +0100
-+++ qemu/linux-user/signal.c 2007-06-13 11:51:54.000000000 +0100
-@@ -2,6 +2,7 @@
- * Emulation of Linux signals
- *
- * Copyright (c) 2003 Fabrice Bellard
-+ * Copyright (c) 2005 Josh Triplett <josh@psas.pdx.edu>
- *
- * 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
-@@ -16,6 +17,12 @@
- * 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.
-+ *
-+ * Various portions adapted from the Linux kernel:
-+ * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
-+ * Derived from "arch/i386/kernel/signal.c"
-+ * Copyright (C) 1991, 1992 Linus Torvalds
-+ * 1997-11-28 Modified for POSIX.1b signals by Richard Henderson
- */
- #include <stdlib.h>
- #include <stdio.h>
-@@ -1964,6 +1971,370 @@ long do_rt_sigreturn(CPUState *env)
- return -ENOSYS;
- }
-
-+#elif defined(TARGET_PPC)
-+/* Adapted from the Linux kernel:
-+ * arch/ppc/kernel/signal.c
-+ * include/asm-ppc/elf.h
-+ * include/asm-ppc/ptrace.h
-+ * include/asm-ppc/sigcontext.h
-+ * include/asm-ppc/ucontext.h
-+ */
-+
-+/*
-+ * When we have signals to deliver, we set up on the
-+ * user stack, going down from the original stack pointer:
-+ * a sigregs struct
-+ * a sigcontext struct
-+ * a gap of __SIGNAL_FRAMESIZE bytes
-+ *
-+ * Each of these things must be a multiple of 16 bytes in size.
-+ *
-+ */
-+
-+#define TARGET_ELF_NGREG 48 /* includes nip, msr, lr, etc. */
-+#define TARGET_ELF_NFPREG 33 /* includes fpscr */
-+#define TARGET_ELF_NVRREG 33 /* includes vscr */
-+
-+/* General registers */
-+typedef unsigned long target_elf_greg_t;
-+typedef target_elf_greg_t target_elf_gregset_t[TARGET_ELF_NGREG];
-+
-+/* Floating point registers */
-+typedef double target_elf_fpreg_t;
-+typedef target_elf_fpreg_t target_elf_fpregset_t[TARGET_ELF_NFPREG];
-+
-+/* Altivec registers */
-+/* FIXME: Altivec not supported yet. */
-+/* typedef __vector128 elf_vrreg_t; */
-+typedef uint64_t target_elf_vrreg_t[2];
-+typedef target_elf_vrreg_t target_elf_vrregset_t[TARGET_ELF_NVRREG];
-+
-+struct target_mcontext {
-+ target_elf_gregset_t mc_gregs;
-+ target_elf_fpregset_t mc_fregs;
-+ /* The kernel calls this mc_pad, but does #define tramp mc_pad */
-+ target_ulong tramp[2];
-+ target_elf_vrregset_t mc_vregs __attribute__((__aligned__(16)));
-+};
-+
-+struct target_sigregs {
-+ struct target_mcontext mctx; /* all the register values */
-+ /* Programs using the rs6000/xcoff abi can save up to 19 gp regs
-+ and 18 fp regs below sp before decrementing it. */
-+ int abigap[56];
-+};
-+
-+struct target_sigcontext {
-+ target_ulong _unused[4];
-+ uint32_t signal;
-+ target_ulong handler;
-+ target_ulong oldmask;
-+ struct target_pt_regs *regs;
-+};
-+
-+#define __SIGNAL_FRAMESIZE 64
-+
-+static int
-+save_user_regs(CPUState *env, struct target_mcontext *frame, int sigret)
-+{
-+ /* save general and floating-point registers */
-+#if 0 /* FIXME: handle floating-point, Altivec, SPE */
-+ CHECK_FULL_REGS(regs);
-+ preempt_disable();
-+ if (regs->msr & MSR_FP)
-+ giveup_fpu(current);
-+#ifdef CONFIG_ALTIVEC
-+ if (current->thread.used_vr && (regs->msr & MSR_VEC))
-+ giveup_altivec(current);
-+#endif /* CONFIG_ALTIVEC */
-+#ifdef CONFIG_SPE
-+ if (current->thread.used_spe && (regs->msr & MSR_SPE))
-+ giveup_spe(current);
-+#endif /* CONFIG_ALTIVEC */
-+ preempt_enable();
-+#endif /* 0 */
-+
-+ /* Note: this needs to be in the same order as target_pt_regs */
-+ if(!memcpy(&frame->mc_gregs, env->gpr,
-+ 32*sizeof(target_elf_greg_t))
-+ || __put_user(env->nip, &frame->mc_gregs[32])
-+ || __put_user(do_load_msr(env), &frame->mc_gregs[33])
-+ /* FIXME: || __put_user(orig_gpr3, &frame->mc_gregs[34]) */
-+ || __put_user(env->ctr, &frame->mc_gregs[35])
-+ || __put_user(env->lr, &frame->mc_gregs[36])
-+ || __put_user(do_load_xer(env), &frame->mc_gregs[37])
-+ || __put_user(do_load_cr(env), &frame->mc_gregs[38])
-+ || __put_user(env->spr[SPR_MQ], &frame->mc_gregs[39])
-+ /* FIXME: || __put_user(trap, &frame->mc_gregs[40]) */
-+ || __put_user(env->spr[SPR_DAR], &frame->mc_gregs[41])
-+ || __put_user(env->spr[SPR_DSISR], &frame->mc_gregs[42])
-+ /* FIXME: || __put_user(result, &frame->mc_gregs[43]) */)
-+ return 1;
-+
-+ if(!memcpy(&frame->mc_fregs, env->fpr,
-+ 32*sizeof(target_elf_fpreg_t))
-+ || __put_user(do_load_fpscr(env), &frame->mc_fregs[32]))
-+
-+ do_store_fpscr(env, 0, 0xFF); /* turn off all fp exceptions */
-+
-+#if 0 /* FIXME: handle Altivec, SPE */
-+#ifdef CONFIG_ALTIVEC
-+ /* save altivec registers */
-+ if (current->thread.used_vr) {
-+ if (!memcpy(&frame->mc_vregs, current->thread.vr,
-+ ELF_NVRREG * sizeof(vector128)))
-+ return 1;
-+ /* set MSR_VEC in the saved MSR value to indicate that
-+ frame->mc_vregs contains valid data */
-+ if (__put_user(regs->msr | MSR_VEC, &frame->mc_gregs[PT_MSR]))
-+ return 1;
-+ }
-+ /* else assert((regs->msr & MSR_VEC) == 0) */
-+
-+ /* We always copy to/from vrsave, it's 0 if we don't have or don't
-+ * use altivec. Since VSCR only contains 32 bits saved in the least
-+ * significant bits of a vector, we "cheat" and stuff VRSAVE in the
-+ * most significant bits of that same vector. --BenH
-+ */
-+ if (__put_user(current->thread.vrsave, (u32 __user *)&frame->mc_vregs[32]))
-+ return 1;
-+#endif /* CONFIG_ALTIVEC */
-+
-+#ifdef CONFIG_SPE
-+ /* save spe registers */
-+ if (current->thread.used_spe) {
-+ if (!memcpy(&frame->mc_vregs, current->thread.evr,
-+ ELF_NEVRREG * sizeof(u32)))
-+ return 1;
-+ /* set MSR_SPE in the saved MSR value to indicate that
-+ frame->mc_vregs contains valid data */
-+ if (__put_user(regs->msr | MSR_SPE, &frame->mc_gregs[PT_MSR]))
-+ return 1;
-+ }
-+ /* else assert((regs->msr & MSR_SPE) == 0) */
-+
-+ /* We always copy to/from spefscr */
-+ if (__put_user(current->thread.spefscr, (u32 *)&frame->mc_vregs + ELF_NEVRREG))
-+ return 1;
-+#endif /* CONFIG_SPE */
-+#endif /* 0 */
-+
-+ if (sigret) {
-+ /* Set up the sigreturn trampoline: li r0,sigret; sc */
-+ if (__put_user(0x38000000UL + sigret, &frame->tramp[0])
-+ || __put_user(0x44000002UL, &frame->tramp[1]))
-+ return 1;
-+#if 0
-+ flush_icache_range((unsigned long) &frame->tramp[0],
-+ (unsigned long) &frame->tramp[2]);
-+#endif
-+ }
-+
-+ return 0;
-+}
-+
-+static int
-+restore_user_regs(CPUState *env, struct target_mcontext *sr, int sig)
-+{
-+ target_ulong save_r2 = 0;
-+ target_ulong saved_xer;
-+ target_ulong saved_cr;
-+ double saved_fpscr;
-+
-+#if 0 /* FIXME: handle Altivec, SPE */
-+#if defined(CONFIG_ALTIVEC) || defined(CONFIG_SPE)
-+ unsigned long msr;
-+#endif
-+#endif /* 0 */
-+
-+ /* backup/restore the TLS as we don't want it to be modified */
-+ if (!sig)
-+ save_r2 = env->gpr[2];
-+
-+ /* Copy all registers except MSR */
-+ /* Note: this needs to be in the same order as target_pt_regs */
-+ if(!memcpy(env->gpr, &sr->mc_gregs,
-+ 32*sizeof(target_elf_greg_t))
-+ || __get_user(env->nip, &sr->mc_gregs[32])
-+ /* FIXME: || __get_user(orig_gpr3, &sr->mc_gregs[34]) */
-+ || __get_user(env->ctr, &sr->mc_gregs[35])
-+ || __get_user(env->lr, &sr->mc_gregs[36])
-+ || __get_user(saved_xer, &sr->mc_gregs[37])
-+ || __get_user(saved_cr, &sr->mc_gregs[38])
-+ || __get_user(env->spr[SPR_MQ], &sr->mc_gregs[39])
-+ /* FIXME: || __get_user(trap, &sr->mc_gregs[40]) */
-+ || __get_user(env->spr[SPR_DAR], &sr->mc_gregs[41])
-+ || __get_user(env->spr[SPR_DSISR], &sr->mc_gregs[42])
-+ /* FIXME: || __get_user(result, &sr->mc_gregs[43]) */)
-+ return 1;
-+ do_store_xer(env, saved_xer);
-+ do_store_cr(env, saved_cr, 0xFF);
-+
-+ if (!sig)
-+ env->gpr[2] = save_r2;
-+
-+ /* The kernel delays restoring the floating-point registers until the
-+ * thread uses floating-point again. For simplicity, just restore the
-+ * registers now. */
-+ if(!memcpy(env->fpr, &sr->mc_fregs,
-+ 32*sizeof(target_elf_fpreg_t))
-+ || __get_user(saved_fpscr, &sr->mc_fregs[32]))
-+ return 1;
-+ do_store_fpscr(env, saved_fpscr, 0xFF);
-+
-+#if 0 /* FIXME: handle Altivec, SPE */
-+#ifdef CONFIG_ALTIVEC
-+ /* force the process to reload the altivec registers from
-+ current->thread when it next does altivec instructions */
-+ regs->msr &= ~MSR_VEC;
-+ if (!__get_user(msr, &sr->mc_gregs[PT_MSR]) && (msr & MSR_VEC) != 0) {
-+ /* restore altivec registers from the stack */
-+ if (!memcpy(current->thread.vr, &sr->mc_vregs,
-+ sizeof(sr->mc_vregs)))
-+ return 1;
-+ } else if (current->thread.used_vr)
-+ memset(&current->thread.vr, 0, ELF_NVRREG * sizeof(vector128));
-+
-+ /* Always get VRSAVE back */
-+ if (__get_user(current->thread.vrsave, (u32 __user *)&sr->mc_vregs[32]))
-+ return 1;
-+#endif /* CONFIG_ALTIVEC */
-+
-+#ifdef CONFIG_SPE
-+ /* force the process to reload the spe registers from
-+ current->thread when it next does spe instructions */
-+ regs->msr &= ~MSR_SPE;
-+ if (!__get_user(msr, &sr->mc_gregs[PT_MSR]) && (msr & MSR_SPE) != 0) {
-+ /* restore spe registers from the stack */
-+ if (!memcpy(current->thread.evr, &sr->mc_vregs,
-+ ELF_NEVRREG * sizeof(u32)))
-+ return 1;
-+ } else if (current->thread.used_spe)
-+ memset(&current->thread.evr, 0, ELF_NEVRREG * sizeof(u32));
-+
-+ /* Always get SPEFSCR back */
-+ if (__get_user(current->thread.spefscr, (u32 *)&sr->mc_vregs + ELF_NEVRREG))
-+ return 1;
-+#endif /* CONFIG_SPE */
-+#endif /* 0 */
-+
-+#if 0 /* FIXME: handle floating-point, Altivec, SPE */
-+#ifndef CONFIG_SMP
-+ preempt_disable();
-+ if (last_task_used_math == current)
-+ last_task_used_math = NULL;
-+ if (last_task_used_altivec == current)
-+ last_task_used_altivec = NULL;
-+ if (last_task_used_spe == current)
-+ last_task_used_spe = NULL;
-+ preempt_enable();
-+#endif
-+#endif /* 0 */
-+ return 0;
-+}
-+
-+static void setup_frame(int sig, struct emulated_sigaction *ka,
-+ target_sigset_t *oldset, CPUState *env)
-+{
-+ struct target_sigcontext *sc;
-+ struct target_sigregs *frame;
-+ target_ulong origsp = env->gpr[1];
-+ target_ulong newsp = origsp;
-+
-+ /* Set up Signal Frame */
-+ newsp -= sizeof(struct target_sigregs);
-+ frame = (struct target_sigregs *) newsp;
-+
-+ /* Put a sigcontext on the stack */
-+ newsp -= sizeof(*sc);
-+ sc = (struct target_sigcontext *) newsp;
-+
-+ /* create a stack frame for the caller of the handler */
-+ newsp -= __SIGNAL_FRAMESIZE;
-+
-+ if (!access_ok(VERIFY_WRITE, (void *) newsp, origsp - newsp))
-+ goto badframe;
-+
-+#if TARGET_NSIG != 64
-+#error "Please adjust handle_signal()"
-+#endif
-+ if (__put_user((target_ulong) ka->sa._sa_handler, &sc->handler)
-+ || __put_user(oldset->sig[0], &sc->oldmask)
-+ || __put_user(oldset->sig[1], &sc->_unused[3])
-+ || __put_user(frame, (target_ulong *)&sc->regs)
-+ || __put_user(sig, &sc->signal))
-+ goto badframe;
-+
-+ if (save_user_regs(env, &frame->mctx, TARGET_NR_sigreturn))
-+ goto badframe;
-+
-+ if (put_user(env->gpr[1], (unsigned long *)newsp))
-+ goto badframe;
-+ env->gpr[1] = newsp;
-+ env->gpr[3] = sig;
-+ env->gpr[4] = (unsigned long) sc;
-+ env->nip = (unsigned long) ka->sa._sa_handler;
-+ env->lr = (unsigned long) frame->mctx.tramp;
-+ /* FIXME: env->trap = 0; */
-+
-+ return;
-+
-+badframe:
-+#ifdef DEBUG_SIGNAL
-+ fprintf(stderr,
-+ "badframe in handle_signal, frame=%p newsp=%lx\n",
-+ frame, newsp);
-+#endif
-+ force_sig(TARGET_SIGSEGV);
-+}
-+
-+static void setup_rt_frame(int sig, struct emulated_sigaction *ka,
-+ target_siginfo_t *info,
-+ target_sigset_t *set, CPUState *env)
-+{
-+ fprintf(stderr, "setup_rt_frame: not implemented\n");
-+}
-+
-+long do_sigreturn(CPUState *env)
-+{
-+ struct target_sigcontext *sc;
-+ struct target_sigcontext sigctx;
-+ struct target_mcontext *sr;
-+ target_sigset_t set;
-+ sigset_t host_set;
-+
-+ /* Always make any pending restarted system calls return -EINTR */
-+#if 0 /* FIXME */
-+ current_thread_info()->restart_block.fn = do_no_restart_syscall;
-+#endif
-+
-+ sc = (struct target_sigcontext *)(env->gpr[1] + __SIGNAL_FRAMESIZE);
-+ if (!memcpy(&sigctx, sc, sizeof(sigctx)))
-+ goto badframe;
-+
-+ set.sig[0] = sigctx.oldmask;
-+ set.sig[1] = sigctx._unused[3];
-+ target_to_host_sigset_internal(&host_set, &set);
-+ sigprocmask(SIG_SETMASK, &host_set, NULL);
-+
-+ sr = (struct target_mcontext *) tswapl((target_ulong)sigctx.regs);
-+ if (!access_ok(VERIFY_READ, sr, sizeof(*sr))
-+ || restore_user_regs(env, sr, 1))
-+ goto badframe;
-+
-+ return 0;
-+
-+badframe:
-+ force_sig(TARGET_SIGSEGV);
-+ return 0;
-+}
-+
-+long do_rt_sigreturn(CPUState *env)
-+{
-+ fprintf(stderr, "do_rt_sigreturn: not implemented\n");
-+ return -ENOSYS;
-+}
-+
- #else
-
- static void setup_frame(int sig, struct emulated_sigaction *ka,
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch
deleted file mode 100644
index e9b31dfe40..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=0
----
-# vl.c | 2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: vl.c
-===================================================================
---- vl.c.orig 2007-06-13 11:51:53.000000000 +0100
-+++ vl.c 2007-06-13 11:52:10.000000000 +0100
-@@ -3617,7 +3617,7 @@ static int tap_open(char *ifname, int if
- return -1;
- }
- memset(&ifr, 0, sizeof(ifr));
-- ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
-+ ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;
- if (ifname[0] != '\0')
- pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
- else
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch
deleted file mode 100644
index 3dc58102ad..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c | 7 +++++--
-# 1 file changed, 5 insertions(+), 2 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2007-04-18 13:25:40.000000000 +0100
-+++ linux-user/syscall.c 2007-04-18 13:37:27.000000000 +0100
-@@ -43,7 +43,10 @@
- #include <sys/poll.h>
- #include <sys/times.h>
- #include <sys/shm.h>
-+#include <sys/ipc.h>
- #include <sys/sem.h>
-+#include <sys/shm.h>
-+#include <sys/msg.h>
- #include <sys/statfs.h>
- #include <utime.h>
- #include <sys/sysinfo.h>
-@@ -1240,11 +1243,11 @@ static long do_ipc(long call, long first
- ret = get_errno(shmctl(first, second, NULL));
- break;
- default:
-- goto unimplemented;
-+ ret = get_errno(shmctl(first, second, (struct shmid_ds *) ptr));
-+ break;
- }
- break;
- default:
-- unimplemented:
- gemu_log("Unsupported ipc call: %ld (version %d)\n", call, version);
- ret = -ENOSYS;
- break;
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch
deleted file mode 100644
index 3878079f19..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-#DPATCHLEVEL=0
----
-# Makefile.target | 2 +-
-# linux-user/syscall.c | 11 ++++++++---
-# 2 files changed, 9 insertions(+), 4 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2007-06-13 11:51:52.000000000 +0100
-+++ linux-user/syscall.c 2007-06-13 11:52:18.000000000 +0100
-@@ -180,6 +180,7 @@ extern int getresuid(uid_t *, uid_t *, u
- extern int setresgid(gid_t, gid_t, gid_t);
- extern int getresgid(gid_t *, gid_t *, gid_t *);
- extern int setgroups(int, gid_t *);
-+extern int uselib(const char*);
-
- /*
- * This list is the union of errno values overidden in asm-<arch>/errno.h
-@@ -3215,7 +3216,8 @@ long do_syscall(void *cpu_env, int num,
- break;
- #ifdef TARGET_NR_uselib
- case TARGET_NR_uselib:
-- goto unimplemented;
-+ ret = get_errno(uselib(path((const char*)arg1)));
-+ break;
- #endif
- #ifdef TARGET_NR_swapon
- case TARGET_NR_swapon:
-@@ -4405,7 +4407,9 @@ long do_syscall(void *cpu_env, int num,
- goto unimplemented;
- #ifdef TARGET_NR_mincore
- case TARGET_NR_mincore:
-- goto unimplemented;
-+ page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE);
-+ ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
-+ break;
- #endif
- #ifdef TARGET_NR_madvise
- case TARGET_NR_madvise:
-@@ -4539,7 +4543,8 @@ long do_syscall(void *cpu_env, int num,
- break;
- #ifdef TARGET_NR_readahead
- case TARGET_NR_readahead:
-- goto unimplemented;
-+ ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3));
-+ break;
- #endif
- #ifdef TARGET_NR_setxattr
- case TARGET_NR_setxattr:
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch
deleted file mode 100644
index d175cf96ba..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c | 33 ++++++++++++++++++++++++++++++---
-# 1 file changed, 30 insertions(+), 3 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2007-06-13 11:51:54.000000000 +0100
-+++ linux-user/syscall.c 2007-06-13 11:52:17.000000000 +0100
-@@ -52,6 +52,7 @@
- //#include <sys/user.h>
- #include <netinet/ip.h>
- #include <netinet/tcp.h>
-+#include <sys/sysctl.h>
-
- #define termios host_termios
- #define winsize host_winsize
-@@ -3912,9 +3913,35 @@ long do_syscall(void *cpu_env, int num,
- break;
- #endif
- case TARGET_NR__sysctl:
-- /* We don't implement this, but ENODIR is always a safe
-- return value. */
-- return -ENOTDIR;
-+ {
-+ struct __sysctl_args *args = (struct __sysctl_args *) arg1;
-+ int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i;
-+ void *oldval, *newval;
-+
-+ name_target = (int *) tswapl((long) args->name);
-+ nlen = tswapl(args->nlen);
-+ oldval = (void *) tswapl((long) args->oldval);
-+ oldlenp = (int *) tswapl((long) args->oldlenp);
-+ oldlen = tswapl(*oldlenp);
-+ newval = (void *) tswapl((long) args->newval);
-+ newlen = tswapl(args->newlen);
-+
-+ name = alloca(nlen * sizeof (int));
-+ for (i = 0; i < nlen; i++)
-+ name[i] = tswapl(name_target[i]);
-+
-+ if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) {
-+ ret = get_errno(
-+ sysctl(name, nlen, oldval, &oldlen, newval, newlen));
-+ if (!is_error(ret)) {
-+ *oldlenp = tswapl(oldlen);
-+ }
-+ } else {
-+ gemu_log("qemu: Unsupported sysctl name\n");
-+ ret = -ENOSYS;
-+ }
-+ }
-+ break;
- case TARGET_NR_sched_setparam:
- {
- struct sched_param *target_schp;
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch
deleted file mode 100644
index a71f8b1944..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c | 6 +-----
-# 1 file changed, 1 insertion(+), 5 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2007-06-13 11:51:54.000000000 +0100
-+++ linux-user/syscall.c 2007-06-13 11:52:17.000000000 +0100
-@@ -2177,11 +2177,7 @@ int do_fork(CPUState *env, unsigned int
- if (!newsp)
- newsp = env->gpr[1];
- new_env->gpr[1] = newsp;
-- {
-- int i;
-- for (i = 7; i < 32; i++)
-- new_env->gpr[i] = 0;
-- }
-+ new_env->gpr[3] = 0;
- #elif defined(TARGET_SH4)
- if (!newsp)
- newsp = env->gregs[15];
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch
deleted file mode 100644
index 0a7f4c48dd..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch
+++ /dev/null
@@ -1,21 +0,0 @@
----
- linux-user/syscall.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2007-06-13 11:51:55.000000000 +0100
-+++ linux-user/syscall.c 2007-06-13 11:52:13.000000000 +0100
-@@ -4434,6 +4434,12 @@ long do_syscall(void *cpu_env, int num,
- ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
- break;
- #endif
-+#ifdef TARGET_NR_fadvise64_64
-+ case TARGET_NR_fadvise64_64:
-+ /* Just return success */
-+ ret = get_errno(0);
-+ break;
-+#endif
- #ifdef TARGET_NR_madvise
- case TARGET_NR_madvise:
- /* A straight passthrough may not be safe because qemu sometimes
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch
deleted file mode 100644
index d579dbc66e..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/main.c | 53 +++++++++++++++++++++++++++++++++++++++++++++--
-# target-arm/nwfpe/fpa11.c | 7 ++++++
-# 2 files changed, 58 insertions(+), 2 deletions(-)
-#
-Index: linux-user/main.c
-===================================================================
---- linux-user/main.c.orig 2007-06-13 11:51:53.000000000 +0100
-+++ linux-user/main.c 2007-06-13 11:52:07.000000000 +0100
-@@ -339,18 +339,67 @@ void cpu_loop(CPUARMState *env)
- {
- TaskState *ts = env->opaque;
- uint32_t opcode;
-+ int rc;
-
- /* we handle the FPU emulation here, as Linux */
- /* we get the opcode */
- opcode = tget32(env->regs[15]);
-
-- if (EmulateAll(opcode, &ts->fpa, env) == 0) {
-+ rc = EmulateAll(opcode, &ts->fpa, env);
-+ if (rc == 0) { /* illegal instruction */
- info.si_signo = SIGILL;
- info.si_errno = 0;
- info.si_code = TARGET_ILL_ILLOPN;
- info._sifields._sigfault._addr = env->regs[15];
- queue_signal(info.si_signo, &info);
-- } else {
-+ } else if (rc < 0) { /* FP exception */
-+ int arm_fpe=0;
-+
-+ /* translate softfloat flags to FPSR flags */
-+ if (-rc & float_flag_invalid)
-+ arm_fpe |= BIT_IOC;
-+ if (-rc & float_flag_divbyzero)
-+ arm_fpe |= BIT_DZC;
-+ if (-rc & float_flag_overflow)
-+ arm_fpe |= BIT_OFC;
-+ if (-rc & float_flag_underflow)
-+ arm_fpe |= BIT_UFC;
-+ if (-rc & float_flag_inexact)
-+ arm_fpe |= BIT_IXC;
-+
-+ FPSR fpsr = ts->fpa.fpsr;
-+ //printf("fpsr 0x%x, arm_fpe 0x%x\n",fpsr,arm_fpe);
-+
-+ if (fpsr & (arm_fpe << 16)) { /* exception enabled? */
-+ info.si_signo = SIGFPE;
-+ info.si_errno = 0;
-+
-+ /* ordered by priority, least first */
-+ if (arm_fpe & BIT_IXC) info.si_code = TARGET_FPE_FLTRES;
-+ if (arm_fpe & BIT_UFC) info.si_code = TARGET_FPE_FLTUND;
-+ if (arm_fpe & BIT_OFC) info.si_code = TARGET_FPE_FLTOVF;
-+ if (arm_fpe & BIT_DZC) info.si_code = TARGET_FPE_FLTDIV;
-+ if (arm_fpe & BIT_IOC) info.si_code = TARGET_FPE_FLTINV;
-+
-+ info._sifields._sigfault._addr = env->regs[15];
-+ queue_signal(info.si_signo, &info);
-+ } else {
-+ env->regs[15] += 4;
-+ }
-+
-+ /* accumulate unenabled exceptions */
-+ if ((!(fpsr & BIT_IXE)) && (arm_fpe & BIT_IXC))
-+ fpsr |= BIT_IXC;
-+ if ((!(fpsr & BIT_UFE)) && (arm_fpe & BIT_UFC))
-+ fpsr |= BIT_UFC;
-+ if ((!(fpsr & BIT_OFE)) && (arm_fpe & BIT_OFC))
-+ fpsr |= BIT_OFC;
-+ if ((!(fpsr & BIT_DZE)) && (arm_fpe & BIT_DZC))
-+ fpsr |= BIT_DZC;
-+ if ((!(fpsr & BIT_IOE)) && (arm_fpe & BIT_IOC))
-+ fpsr |= BIT_IOC;
-+ ts->fpa.fpsr=fpsr;
-+ } else { /* everything OK */
- /* increment PC */
- env->regs[15] += 4;
- }
-Index: target-arm/nwfpe/fpa11.c
-===================================================================
---- target-arm/nwfpe/fpa11.c.orig 2007-06-13 11:51:52.000000000 +0100
-+++ target-arm/nwfpe/fpa11.c 2007-06-13 11:51:55.000000000 +0100
-@@ -162,6 +162,8 @@ unsigned int EmulateAll(unsigned int opc
- fpa11->initflag = 1;
- }
-
-+ set_float_exception_flags(0, &fpa11->fp_status);
-+
- if (TEST_OPCODE(opcode,MASK_CPRT))
- {
- //fprintf(stderr,"emulating CPRT\n");
-@@ -191,6 +193,11 @@ unsigned int EmulateAll(unsigned int opc
- }
-
- // restore_flags(flags);
-+ if(nRc == 1 && get_float_exception_flags(&fpa11->fp_status))
-+ {
-+ //printf("fef 0x%x\n",float_exception_flags);
-+ nRc=-get_float_exception_flags(&fpa11->fp_status);
-+ }
-
- //printf("returning %d\n",nRc);
- return(nRc);
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch
deleted file mode 100644
index f0316c8042..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch
+++ /dev/null
@@ -1,17 +0,0 @@
----
- hw/ne2000.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: qemu/hw/ne2000.c
-===================================================================
---- qemu.orig/hw/ne2000.c 2007-06-13 11:51:52.000000000 +0100
-+++ qemu/hw/ne2000.c 2007-06-13 11:51:55.000000000 +0100
-@@ -214,7 +214,7 @@ static int ne2000_can_receive(void *opaq
- NE2000State *s = opaque;
-
- if (s->cmd & E8390_STOP)
-- return 1;
-+ return 0;
- return !ne2000_buffer_full(s);
- }
-
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch
deleted file mode 100644
index 553e57623e..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-#DPATCHLEVEL=0
----
-# dyngen-exec.h | 4 ++--
-# 1 file changed, 2 insertions(+), 2 deletions(-)
-#
-Index: dyngen-exec.h
-===================================================================
---- dyngen-exec.h.orig 2007-06-13 11:48:22.000000000 +0100
-+++ dyngen-exec.h 2007-06-13 11:51:55.000000000 +0100
-@@ -38,7 +38,7 @@ typedef unsigned int uint32_t;
- // Linux/Sparc64 defines uint64_t
- #if !(defined (__sparc_v9__) && defined(__linux__))
- /* XXX may be done for all 64 bits targets ? */
--#if defined (__x86_64__) || defined(__ia64)
-+#if defined (__x86_64__) || defined(__ia64) || defined(__alpha__) || defined(__sparc__)
- typedef unsigned long uint64_t;
- #else
- typedef unsigned long long uint64_t;
-@@ -55,7 +55,7 @@ typedef signed short int16_t;
- typedef signed int int32_t;
- // Linux/Sparc64 defines int64_t
- #if !(defined (__sparc_v9__) && defined(__linux__))
--#if defined (__x86_64__) || defined(__ia64)
-+#if defined (__x86_64__) || defined(__ia64) || defined(__alpha__) || defined(__sparc__)
- typedef signed long int64_t;
- #else
- typedef signed long long int64_t;
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch
deleted file mode 100644
index 32a6bc0ee0..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=0
----
-# sparc.ld | 2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: sparc.ld
-===================================================================
---- sparc.ld.orig 2007-06-13 11:48:22.000000000 +0100
-+++ sparc.ld 2007-06-13 11:51:56.000000000 +0100
-@@ -6,7 +6,7 @@ ENTRY(_start)
- SECTIONS
- {
- /* Read-only sections, merged into text segment: */
-- . = 0x60000000 + SIZEOF_HEADERS;
-+ . = 0x60000000 + 0x400;
- .interp : { *(.interp) }
- .hash : { *(.hash) }
- .dynsym : { *(.dynsym) }
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch
deleted file mode 100644
index e4858b79d7..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=1
----
-# cpu-all.h | 2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: qemu/cpu-all.h
-===================================================================
---- qemu.orig/cpu-all.h 2007-06-13 11:48:22.000000000 +0100
-+++ qemu/cpu-all.h 2007-06-13 11:51:56.000000000 +0100
-@@ -250,7 +250,7 @@ static inline void stw_le_p(void *ptr, i
- static inline void stl_le_p(void *ptr, int v)
- {
- #ifdef __powerpc__
-- __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr));
-+ __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory");
- #else
- uint8_t *p = ptr;
- p[0] = v;
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch
deleted file mode 100644
index ea060811a1..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch
+++ /dev/null
@@ -1,44 +0,0 @@
----
- configure | 6 ++++++
- vl.c | 4 +++-
- 2 files changed, 9 insertions(+), 1 deletion(-)
-
-Index: configure
-===================================================================
---- configure.orig 2007-06-13 11:48:22.000000000 +0100
-+++ configure 2007-06-13 11:52:07.000000000 +0100
-@@ -112,6 +112,12 @@ OS_CFLAGS="-mno-cygwin"
- MINGW32*)
- mingw32="yes"
- ;;
-+GNU/kFreeBSD)
-+oss="yes"
-+if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
-+ kqemu="yes"
-+fi
-+;;
- FreeBSD)
- bsd="yes"
- oss="yes"
-Index: vl.c
-===================================================================
---- vl.c.orig 2007-06-13 11:51:54.000000000 +0100
-+++ vl.c 2007-06-13 11:51:56.000000000 +0100
-@@ -47,6 +47,8 @@
- #ifndef __APPLE__
- #include <libutil.h>
- #endif
-+#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
-+#include <freebsd/stdlib.h>
- #else
- #ifndef __sun__
- #include <linux/if.h>
-@@ -3454,7 +3456,7 @@ static TAPState *net_tap_fd_init(VLANSta
- return s;
- }
-
--#ifdef _BSD
-+#if defined (_BSD) || defined (__FreeBSD_kernel__)
- static int tap_open(char *ifname, int ifname_size)
- {
- int fd;
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch
deleted file mode 100644
index 54e02eff8b..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch
+++ /dev/null
@@ -1,55 +0,0 @@
----
- arm.ld | 7 +++++++
- i386.ld | 7 +++++++
- 2 files changed, 14 insertions(+)
-
-Index: arm.ld
-===================================================================
---- arm.ld.orig 2007-06-13 11:48:22.000000000 +0100
-+++ arm.ld 2007-06-13 11:51:56.000000000 +0100
-@@ -26,6 +26,10 @@ SECTIONS
- { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
- .rela.rodata :
- { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
-+ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
-+ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
-+ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
-+ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
- .rel.got : { *(.rel.got) }
- .rela.got : { *(.rela.got) }
- .rel.ctors : { *(.rel.ctors) }
-@@ -58,6 +62,9 @@ SECTIONS
- .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
- __exidx_end = .;
- .reginfo : { *(.reginfo) }
-+ /* Thread Local Storage sections */
-+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
- /* Adjust the address for the data segment. We want to adjust up to
- the same address within the page on the next page up. */
- . = ALIGN(0x100000) + (. & (0x100000 - 1));
-Index: i386.ld
-===================================================================
---- i386.ld.orig 2007-06-13 11:48:22.000000000 +0100
-+++ i386.ld 2007-06-13 11:51:56.000000000 +0100
-@@ -28,6 +28,10 @@ SECTIONS
- { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
- .rela.rodata :
- { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
-+ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
-+ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
-+ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
-+ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
- .rel.got : { *(.rel.got) }
- .rela.got : { *(.rela.got) }
- .rel.ctors : { *(.rel.ctors) }
-@@ -53,6 +57,9 @@ SECTIONS
- _etext = .;
- PROVIDE (etext = .);
- .fini : { *(.fini) } =0x47ff041f
-+ /* Thread Local Storage sections */
-+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
- . = ALIGN(32 / 8);
- PROVIDE (__preinit_array_start = .);
- .preinit_array : { *(.preinit_array) }
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch
deleted file mode 100644
index 5280a5bd4a..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-=== modified file 'sdl.c'
----
- sdl.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: sdl.c
-===================================================================
---- sdl.c.orig 2007-06-13 11:48:22.000000000 +0100
-+++ sdl.c 2007-06-13 11:51:56.000000000 +0100
-@@ -241,7 +241,7 @@ static void sdl_hide_cursor(void)
-
- if (kbd_mouse_is_absolute()) {
- SDL_ShowCursor(1);
-- SDL_SetCursor(sdl_cursor_hidden);
-+ /* SDL_SetCursor(sdl_cursor_hidden); */
- } else {
- SDL_ShowCursor(0);
- }
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch
deleted file mode 100644
index 4911ac131f..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch
+++ /dev/null
@@ -1,223 +0,0 @@
-=== modified file 'hw/pl110.c'
----
- hw/pl110.c | 13 ++++--
- hw/pl110_template.h | 107 ++++++++++++++++++++++++++++++++++++----------------
- 2 files changed, 86 insertions(+), 34 deletions(-)
-
-Index: hw/pl110.c
-===================================================================
---- hw/pl110.c.orig 2007-06-13 11:48:22.000000000 +0100
-+++ hw/pl110.c 2007-06-13 11:51:57.000000000 +0100
-@@ -10,6 +10,7 @@
- #include "vl.h"
-
- #define PL110_CR_EN 0x001
-+#define PL110_CR_BGR 0x100
- #define PL110_CR_BEBO 0x200
- #define PL110_CR_BEPO 0x400
- #define PL110_CR_PWR 0x800
-@@ -114,6 +115,7 @@ static void pl110_update_display(void *o
- int first, last = 0;
- int dirty, new_dirty;
- int i;
-+ int bpp_offset;
-
- if (!pl110_enabled(s))
- return;
-@@ -145,12 +147,17 @@ static void pl110_update_display(void *o
- fprintf(stderr, "pl110: Bad color depth\n");
- exit(1);
- }
-+ if (s->cr & PL110_CR_BGR)
-+ bpp_offset = 0;
-+ else
-+ bpp_offset = 18;
-+
- if (s->cr & PL110_CR_BEBO)
-- fn = fntable[s->bpp + 6];
-+ fn = fntable[s->bpp + 6 + bpp_offset];
- else if (s->cr & PL110_CR_BEPO)
-- fn = fntable[s->bpp + 12];
-+ fn = fntable[s->bpp + 12 + bpp_offset];
- else
-- fn = fntable[s->bpp];
-+ fn = fntable[s->bpp + bpp_offset];
-
- src_width = s->cols;
- switch (s->bpp) {
-Index: hw/pl110_template.h
-===================================================================
---- hw/pl110_template.h.orig 2007-06-13 11:48:22.000000000 +0100
-+++ hw/pl110_template.h 2007-06-13 11:51:57.000000000 +0100
-@@ -24,6 +24,16 @@
- #error unknown bit depth
- #endif
-
-+#undef RGB
-+#define BORDER bgr
-+#define ORDER 0
-+#include "pl110_template.h"
-+#define ORDER 1
-+#include "pl110_template.h"
-+#define ORDER 2
-+#include "pl110_template.h"
-+#define RGB
-+#define BORDER rgb
- #define ORDER 0
- #include "pl110_template.h"
- #define ORDER 1
-@@ -33,26 +43,47 @@
-
- static drawfn glue(pl110_draw_fn_,BITS)[18] =
- {
-- glue(pl110_draw_line1_lblp,BITS),
-- glue(pl110_draw_line2_lblp,BITS),
-- glue(pl110_draw_line4_lblp,BITS),
-- glue(pl110_draw_line8_lblp,BITS),
-- glue(pl110_draw_line16_lblp,BITS),
-- glue(pl110_draw_line32_lblp,BITS),
-+ glue(pl110_draw_line1_lblp_bgr,BITS),
-+ glue(pl110_draw_line2_lblp_bgr,BITS),
-+ glue(pl110_draw_line4_lblp_bgr,BITS),
-+ glue(pl110_draw_line8_lblp_bgr,BITS),
-+ glue(pl110_draw_line16_lblp_bgr,BITS),
-+ glue(pl110_draw_line32_lblp_bgr,BITS),
-
-- glue(pl110_draw_line1_bbbp,BITS),
-- glue(pl110_draw_line2_bbbp,BITS),
-- glue(pl110_draw_line4_bbbp,BITS),
-- glue(pl110_draw_line8_bbbp,BITS),
-- glue(pl110_draw_line16_bbbp,BITS),
-- glue(pl110_draw_line32_bbbp,BITS),
-+ glue(pl110_draw_line1_bbbp_bgr,BITS),
-+ glue(pl110_draw_line2_bbbp_bgr,BITS),
-+ glue(pl110_draw_line4_bbbp_bgr,BITS),
-+ glue(pl110_draw_line8_bbbp_bgr,BITS),
-+ glue(pl110_draw_line16_bbbp_bgr,BITS),
-+ glue(pl110_draw_line32_bbbp_bgr,BITS),
-
-- glue(pl110_draw_line1_lbbp,BITS),
-- glue(pl110_draw_line2_lbbp,BITS),
-- glue(pl110_draw_line4_lbbp,BITS),
-- glue(pl110_draw_line8_lbbp,BITS),
-- glue(pl110_draw_line16_lbbp,BITS),
-- glue(pl110_draw_line32_lbbp,BITS)
-+ glue(pl110_draw_line1_lbbp_bgr,BITS),
-+ glue(pl110_draw_line2_lbbp_bgr,BITS),
-+ glue(pl110_draw_line4_lbbp_bgr,BITS),
-+ glue(pl110_draw_line8_lbbp_bgr,BITS),
-+ glue(pl110_draw_line16_lbbp_bgr,BITS),
-+ glue(pl110_draw_line32_lbbp_bgr,BITS),
-+
-+ glue(pl110_draw_line1_lblp_rgb,BITS),
-+ glue(pl110_draw_line2_lblp_rgb,BITS),
-+ glue(pl110_draw_line4_lblp_rgb,BITS),
-+ glue(pl110_draw_line8_lblp_rgb,BITS),
-+ glue(pl110_draw_line16_lblp_rgb,BITS),
-+ glue(pl110_draw_line32_lblp_rgb,BITS),
-+
-+ glue(pl110_draw_line1_bbbp_rgb,BITS),
-+ glue(pl110_draw_line2_bbbp_rgb,BITS),
-+ glue(pl110_draw_line4_bbbp_rgb,BITS),
-+ glue(pl110_draw_line8_bbbp_rgb,BITS),
-+ glue(pl110_draw_line16_bbbp_rgb,BITS),
-+ glue(pl110_draw_line32_bbbp_rgb,BITS),
-+
-+ glue(pl110_draw_line1_lbbp_rgb,BITS),
-+ glue(pl110_draw_line2_lbbp_rgb,BITS),
-+ glue(pl110_draw_line4_lbbp_rgb,BITS),
-+ glue(pl110_draw_line8_lbbp_rgb,BITS),
-+ glue(pl110_draw_line16_lbbp_rgb,BITS),
-+ glue(pl110_draw_line32_lbbp_rgb,BITS),
- };
-
- #undef BITS
-@@ -61,18 +92,18 @@ static drawfn glue(pl110_draw_fn_,BITS)[
- #else
-
- #if ORDER == 0
--#define NAME glue(lblp, BITS)
-+#define NAME glue(glue(lblp_, BORDER), BITS)
- #ifdef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
- #elif ORDER == 1
--#define NAME glue(bbbp, BITS)
-+#define NAME glue(glue(bbbp_, BORDER), BITS)
- #ifndef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
- #else
- #define SWAP_PIXELS 1
--#define NAME glue(lbbp, BITS)
-+#define NAME glue(glue(lbbp_, BORDER), BITS)
- #ifdef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
-@@ -195,27 +226,34 @@ static void glue(pl110_draw_line16_,NAME
- #ifdef SWAP_WORDS
- data = bswap32(data);
- #endif
-+#ifdef RGB
-+#define LSB r
-+#define MSB b
-+#else
-+#define LSB b
-+#define MSB r
-+#endif
- #if 0
-- r = data & 0x1f;
-+ LSB = data & 0x1f;
- data >>= 5;
- g = data & 0x3f;
- data >>= 6;
-- b = data & 0x1f;
-+ MSB = data & 0x1f;
- data >>= 5;
- #else
-- r = (data & 0x1f) << 3;
-+ LSB = (data & 0x1f) << 3;
- data >>= 5;
- g = (data & 0x3f) << 2;
- data >>= 6;
-- b = (data & 0x1f) << 3;
-+ MSB = (data & 0x1f) << 3;
- data >>= 5;
- #endif
- COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
-- r = (data & 0x1f) << 3;
-+ LSB = (data & 0x1f) << 3;
- data >>= 5;
- g = (data & 0x3f) << 2;
- data >>= 6;
-- b = (data & 0x1f) << 3;
-+ MSB = (data & 0x1f) << 3;
- data >>= 5;
- COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
- width -= 2;
-@@ -229,14 +267,21 @@ static void glue(pl110_draw_line32_,NAME
- unsigned int r, g, b;
- while (width > 0) {
- data = *(uint32_t *)src;
-+#ifdef RGB
-+#define LSB r
-+#define MSB b
-+#else
-+#define LSB b
-+#define MSB r
-+#endif
- #ifdef SWAP_WORDS
-- r = data & 0xff;
-+ LSB = data & 0xff;
- g = (data >> 8) & 0xff;
-- b = (data >> 16) & 0xff;
-+ MSB = (data >> 16) & 0xff;
- #else
-- r = (data >> 24) & 0xff;
-+ LSB = (data >> 24) & 0xff;
- g = (data >> 16) & 0xff;
-- b = (data >> 8) & 0xff;
-+ MSB = (data >> 8) & 0xff;
- #endif
- COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
- width--;
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch
deleted file mode 100644
index f9b10aebc5..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch
+++ /dev/null
@@ -1,857 +0,0 @@
-Index: qemu/configure
-===================================================================
---- qemu.orig/configure 2006-08-26 16:31:53.000000000 +0100
-+++ qemu/configure 2006-08-26 16:31:53.000000000 +0100
-@@ -97,6 +97,7 @@
- build_docs="no"
- build_acpi_tables="no"
- uname_release=""
-+nptl="yes"
-
- # OS specific
- targetos=`uname -s`
-@@ -243,6 +244,8 @@
- ;;
- --enable-iasl) build_acpi_tables="yes"
- ;;
-+ --disable-nptl) nptl="no"
-+ ;;
- esac
- done
-
-@@ -441,6 +444,23 @@
- fi
- fi
-
-+# check NPTL support
-+cat > $TMPC <<EOF
-+#include <sched.h>
-+void foo()
-+{
-+#ifndef CLONE_SETTLS
-+#error bork
-+#endif
-+}
-+EOF
-+
-+if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
-+ :
-+else
-+ nptl="no"
-+fi
-+
- ##########################################
- # SDL probe
-
-@@ -559,6 +579,7 @@
- fi
- echo "FMOD support $fmod $fmod_support"
- echo "kqemu support $kqemu"
-+echo "NPTL support $nptl"
- echo "Documentation $build_docs"
- [ ! -z "$uname_release" ] && \
- echo "uname -r $uname_release"
-@@ -880,6 +901,14 @@
- echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
- fi
- fi
-+else
-+ if test "$nptl" = "yes" ; then
-+ case "$target_cpu" in
-+ arm | armeb)
-+ echo "#define USE_NPTL 1" >> $config_h
-+ ;;
-+ esac
-+ fi
- fi
-
- if test "$cocoa" = "yes" ; then
-Index: qemu/exec-all.h
-===================================================================
---- qemu.orig/exec-all.h 2006-08-26 16:28:32.000000000 +0100
-+++ qemu/exec-all.h 2006-08-26 16:31:53.000000000 +0100
-@@ -347,163 +347,7 @@
- extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
- extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
-
--#ifdef __powerpc__
--static inline int testandset (int *p)
--{
-- int ret;
-- __asm__ __volatile__ (
-- "0: lwarx %0,0,%1\n"
-- " xor. %0,%3,%0\n"
-- " bne 1f\n"
-- " stwcx. %2,0,%1\n"
-- " bne- 0b\n"
-- "1: "
-- : "=&r" (ret)
-- : "r" (p), "r" (1), "r" (0)
-- : "cr0", "memory");
-- return ret;
--}
--#endif
--
--#ifdef __i386__
--static inline int testandset (int *p)
--{
-- long int readval = 0;
--
-- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-- : "+m" (*p), "+a" (readval)
-- : "r" (1)
-- : "cc");
-- return readval;
--}
--#endif
--
--#ifdef __x86_64__
--static inline int testandset (int *p)
--{
-- long int readval = 0;
--
-- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-- : "+m" (*p), "+a" (readval)
-- : "r" (1)
-- : "cc");
-- return readval;
--}
--#endif
--
--#ifdef __s390__
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
-- " jl 0b"
-- : "=&d" (ret)
-- : "r" (1), "a" (p), "0" (*p)
-- : "cc", "memory" );
-- return ret;
--}
--#endif
--
--#ifdef __alpha__
--static inline int testandset (int *p)
--{
-- int ret;
-- unsigned long one;
--
-- __asm__ __volatile__ ("0: mov 1,%2\n"
-- " ldl_l %0,%1\n"
-- " stl_c %2,%1\n"
-- " beq %2,1f\n"
-- ".subsection 2\n"
-- "1: br 0b\n"
-- ".previous"
-- : "=r" (ret), "=m" (*p), "=r" (one)
-- : "m" (*p));
-- return ret;
--}
--#endif
--
--#ifdef __sparc__
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__("ldstub [%1], %0"
-- : "=r" (ret)
-- : "r" (p)
-- : "memory");
--
-- return (ret ? 1 : 0);
--}
--#endif
--
--#ifdef __arm__
--static inline int testandset (int *spinlock)
--{
-- register unsigned int ret;
-- __asm__ __volatile__("swp %0, %1, [%2]"
-- : "=r"(ret)
-- : "0"(1), "r"(spinlock));
--
-- return ret;
--}
--#endif
--
--#ifdef __mc68000
--static inline int testandset (int *p)
--{
-- char ret;
-- __asm__ __volatile__("tas %1; sne %0"
-- : "=r" (ret)
-- : "m" (p)
-- : "cc","memory");
-- return ret;
--}
--#endif
--
--#ifdef __ia64
--#include <ia64intrin.h>
--
--static inline int testandset (int *p)
--{
-- return __sync_lock_test_and_set (p, 1);
--}
--#endif
--
--typedef int spinlock_t;
--
--#define SPIN_LOCK_UNLOCKED 0
--
--#if defined(CONFIG_USER_ONLY)
--static inline void spin_lock(spinlock_t *lock)
--{
-- while (testandset(lock));
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
-- *lock = 0;
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
-- return !testandset(lock);
--}
--#else
--static inline void spin_lock(spinlock_t *lock)
--{
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
-- return 1;
--}
--#endif
-+#include "qemu_spinlock.h"
-
- extern spinlock_t tb_lock;
-
-Index: qemu/linux-user/arm/syscall.h
-===================================================================
---- qemu.orig/linux-user/arm/syscall.h 2006-03-09 19:18:11.000000000 +0000
-+++ qemu/linux-user/arm/syscall.h 2006-08-26 16:31:53.000000000 +0100
-@@ -28,7 +28,9 @@
- #define ARM_SYSCALL_BASE 0x900000
- #define ARM_THUMB_SYSCALL 0
-
--#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
-+#define ARM_NR_BASE 0xf0000
-+#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
-+#define ARM_NR_set_tls (ARM_NR_BASE + 5)
-
- #define ARM_NR_semihosting 0x123456
- #define ARM_NR_thumb_semihosting 0xAB
-Index: qemu/linux-user/main.c
-===================================================================
---- qemu.orig/linux-user/main.c 2006-08-26 16:28:40.000000000 +0100
-+++ qemu/linux-user/main.c 2006-08-26 16:31:53.000000000 +0100
-@@ -309,6 +309,50 @@
- }
- }
-
-+/* Handle a jump to the kernel code page. */
-+static int
-+do_kernel_trap(CPUARMState *env)
-+{
-+ uint32_t addr;
-+ uint32_t *ptr;
-+ uint32_t cpsr;
-+
-+ switch (env->regs[15]) {
-+ case 0xffff0fc0: /* __kernel_cmpxchg */
-+ /* XXX: This only works between threads, not between processes.
-+ Use native atomic operations. */
-+ /* ??? This probably breaks horribly if the access segfaults. */
-+ cpu_lock();
-+ ptr = (uint32_t *)env->regs[2];
-+ cpsr = cpsr_read(env);
-+ if (*ptr == env->regs[0]) {
-+ *ptr = env->regs[1];
-+ env->regs[0] = 0;
-+ cpsr |= CPSR_C;
-+ } else {
-+ env->regs[0] = -1;
-+ cpsr &= ~CPSR_C;
-+ }
-+ cpsr_write(env, cpsr, CPSR_C);
-+ cpu_unlock();
-+ break;
-+ case 0xffff0fe0: /* __kernel_get_tls */
-+ env->regs[0] = env->cp15.c13_tls;
-+ break;
-+ default:
-+ return 1;
-+ }
-+ /* Jump back to the caller. */
-+ addr = env->regs[14];
-+ if (addr & 1) {
-+ env->thumb = 1;
-+ addr &= ~1;
-+ }
-+ env->regs[15] = addr;
-+
-+ return 0;
-+}
-+
- void cpu_loop(CPUARMState *env)
- {
- int trapnr;
-@@ -365,10 +409,8 @@
- }
- }
-
-- if (n == ARM_NR_cacheflush) {
-- arm_cache_flush(env->regs[0], env->regs[1]);
-- } else if (n == ARM_NR_semihosting
-- || n == ARM_NR_thumb_semihosting) {
-+ if (n == ARM_NR_semihosting
-+ || n == ARM_NR_thumb_semihosting) {
- env->regs[0] = do_arm_semihosting (env);
- } else if (n == 0 || n >= ARM_SYSCALL_BASE
- || (env->thumb && n == ARM_THUMB_SYSCALL)) {
-@@ -379,14 +421,34 @@
- n -= ARM_SYSCALL_BASE;
- env->eabi = 0;
- }
-- env->regs[0] = do_syscall(env,
-- n,
-- env->regs[0],
-- env->regs[1],
-- env->regs[2],
-- env->regs[3],
-- env->regs[4],
-- env->regs[5]);
-+ if ( n > ARM_NR_BASE) {
-+ switch (n)
-+ {
-+ case ARM_NR_cacheflush:
-+ arm_cache_flush(env->regs[0], env->regs[1]);
-+ break;
-+#ifdef USE_NPTL
-+ case ARM_NR_set_tls:
-+ cpu_set_tls(env, env->regs[0]);
-+ env->regs[0] = 0;
-+ break;
-+#endif
-+ default:
-+ printf ("Error: Bad syscall: %x\n", n);
-+ goto error;
-+ }
-+ }
-+ else
-+ {
-+ env->regs[0] = do_syscall(env,
-+ n,
-+ env->regs[0],
-+ env->regs[1],
-+ env->regs[2],
-+ env->regs[3],
-+ env->regs[4],
-+ env->regs[5]);
-+ }
- } else {
- goto error;
- }
-@@ -425,6 +487,10 @@
- }
- }
- break;
-+ case EXCP_KERNEL_TRAP:
-+ if (do_kernel_trap(env))
-+ goto error;
-+ break;
- default:
- error:
- fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
-@@ -1639,6 +1705,10 @@
- ts->heap_base = info->brk;
- /* This will be filled in on the first SYS_HEAPINFO call. */
- ts->heap_limit = 0;
-+ /* Register the magic kernel code page. The cpu will generate a
-+ special exception when it tries to execute code here. We can't
-+ put real code here because it may be in use by the host kernel. */
-+ page_set_flags(0xffff0000, 0xffff0fff, 0);
- }
- #elif defined(TARGET_SPARC)
- {
-Index: qemu/linux-user/qemu.h
-===================================================================
---- qemu.orig/linux-user/qemu.h 2006-08-26 16:28:40.000000000 +0100
-+++ qemu/linux-user/qemu.h 2006-08-26 16:33:50.000000000 +0100
-@@ -75,6 +75,9 @@
- uint32_t v86mask;
- #endif
- int used; /* non zero if used */
-+#ifdef USE_NPTL
-+ uint32_t *child_tidptr;
-+#endif
- struct image_info *info;
- uint8_t stack[0];
- } __attribute__((aligned(16))) TaskState;
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c 2006-08-26 16:28:40.000000000 +0100
-+++ qemu/linux-user/syscall.c 2006-08-26 16:31:53.000000000 +0100
-@@ -66,9 +66,18 @@
- #include <linux/kd.h>
-
- #include "qemu.h"
-+#include "qemu_spinlock.h"
-
- //#define DEBUG
-
-+#ifdef USE_NPTL
-+#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
-+ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
-+#else
-+/* XXX: Hardcode the above values. */
-+#define CLONE_NPTL_FLAGS2 0
-+#endif
-+
- #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC)
- /* 16 bit uid wrappers emulation */
- #define USE_UID16
-@@ -1602,20 +1611,38 @@
- thread/process */
- #define NEW_STACK_SIZE 8192
-
-+#ifdef USE_NPTL
-+static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
-+#endif
-+
- static int clone_func(void *arg)
- {
- CPUState *env = arg;
-+#ifdef HAVE_NPTL
-+ /* Wait until the parent has finshed initializing the tls state. */
-+ while (!spin_trylock(&nptl_lock))
-+ usleep(1);
-+ spin_unlock(&nptl_lock);
-+#endif
- cpu_loop(env);
- /* never exits */
- return 0;
- }
-
--int do_fork(CPUState *env, unsigned int flags, unsigned long newsp)
-+int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
-+ uint32_t *parent_tidptr, void *newtls,
-+ uint32_t *child_tidptr)
- {
- int ret;
- TaskState *ts;
- uint8_t *new_stack;
- CPUState *new_env;
-+#ifdef USE_NPTL
-+ unsigned int nptl_flags;
-+
-+ if (flags & CLONE_PARENT_SETTID)
-+ *parent_tidptr = gettid();
-+#endif
-
- if (flags & CLONE_VM) {
- ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
-@@ -1665,16 +1692,60 @@
- #error unsupported target CPU
- #endif
- new_env->opaque = ts;
-+#ifdef USE_NPTL
-+ nptl_flags = flags;
-+ flags &= ~CLONE_NPTL_FLAGS2;
-+ if (nptl_flags & CLONE_CHILD_CLEARTID) {
-+ ts->child_tidptr = child_tidptr;
-+ }
-+ if (nptl_flags & CLONE_SETTLS)
-+ cpu_set_tls (new_env, newtls);
-+ /* Grab the global cpu lock so that the thread setup appears
-+ atomic. */
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ spin_lock(&nptl_lock);
-+#else
-+ if (flags & CLONE_NPTL_FLAGS2)
-+ return -EINVAL;
-+#endif
-+
- #ifdef __ia64__
- ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #else
- ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #endif
-+#ifdef USE_NPTL
-+ if (ret != -1) {
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ *child_tidptr = ret;
-+ }
-+ /* Allow the child to continue. */
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ spin_unlock(&nptl_lock);
-+#endif
- } else {
-- /* if no CLONE_VM, we consider it is a fork */
-- if ((flags & ~CSIGNAL) != 0)
-- return -EINVAL;
-- ret = fork();
-+ /* if no CLONE_VM, we consider it is a fork */
-+ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
-+ return -EINVAL;
-+ ret = fork();
-+#ifdef USE_NPTL
-+ /* There is a race condition here. The parent process could
-+ theoretically read the TID in the child process before the child
-+ tid is set. This would require using either ptrace
-+ (not implemented) or having *_tidptr to point at a shared memory
-+ mapping. We can't repeat the spinlock hack used above because
-+ the child process gets its own copy of the lock. */
-+ if (ret == 0) {
-+ /* Child Process. */
-+ if (flags & CLONE_CHILD_SETTID)
-+ *child_tidptr = gettid();
-+ ts = (TaskState *)env->opaque;
-+ if (flags & CLONE_CHILD_CLEARTID)
-+ ts->child_tidptr = child_tidptr;
-+ if (flags & CLONE_SETTLS)
-+ cpu_set_tls (env, newtls);
-+ }
-+#endif
- }
- return ret;
- }
-@@ -1918,7 +1989,7 @@
- ret = do_brk(arg1);
- break;
- case TARGET_NR_fork:
-- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
-+ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
- break;
- case TARGET_NR_waitpid:
- {
-@@ -2989,7 +3060,8 @@
- ret = get_errno(fsync(arg1));
- break;
- case TARGET_NR_clone:
-- ret = get_errno(do_fork(cpu_env, arg1, arg2));
-+ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
-+ (void *)arg4, (uint32_t *)arg5));
- break;
- #ifdef __NR_exit_group
- /* new thread calls */
-@@ -3339,7 +3411,8 @@
- #endif
- #ifdef TARGET_NR_vfork
- case TARGET_NR_vfork:
-- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
-+ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
-+ NULL, NULL, NULL));
- break;
- #endif
- #ifdef TARGET_NR_ugetrlimit
-@@ -3838,4 +3911,3 @@
- #endif
- return ret;
- }
--
-Index: qemu/target-arm/cpu.h
-===================================================================
---- qemu.orig/target-arm/cpu.h 2006-03-09 19:18:27.000000000 +0000
-+++ qemu/target-arm/cpu.h 2006-08-26 16:31:53.000000000 +0100
-@@ -35,6 +35,9 @@
- #define EXCP_IRQ 5
- #define EXCP_FIQ 6
- #define EXCP_BKPT 7
-+#define EXCP_KERNEL_TRAP 8 /* Jumped to kernel code page. */
-+
-+
-
- /* We currently assume float and double are IEEE single and double
- precision respectively.
-@@ -85,6 +88,7 @@
- uint32_t c9_data;
- uint32_t c13_fcse; /* FCSE PID. */
- uint32_t c13_context; /* Context ID. */
-+ uint32_t c13_tls; /* Paul Brook told me to just add this ;) */
- } cp15;
-
- /* Internal CPU feature flags. */
-@@ -135,6 +139,15 @@
- int cpu_arm_signal_handler(int host_signum, struct siginfo *info,
- void *puc);
-
-+void cpu_lock(void);
-+void cpu_unlock(void);
-+#if defined(USE_NPTL)
-+static inline void cpu_set_tls(CPUARMState *env, void *newtls)
-+{
-+ env->cp15.c13_tls = (uint32_t)newtls;
-+}
-+#endif
-+
- #define CPSR_M (0x1f)
- #define CPSR_T (1 << 5)
- #define CPSR_F (1 << 6)
-@@ -146,7 +159,11 @@
- #define CPSR_J (1 << 24)
- #define CPSR_IT_0_1 (3 << 25)
- #define CPSR_Q (1 << 27)
--#define CPSR_NZCV (0xf << 28)
-+#define CPSR_V (1 << 28)
-+#define CPSR_C (1 << 29)
-+#define CPSR_Z (1 << 30)
-+#define CPSR_N (1 << 31)
-+#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V)
-
- #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV)
- /* Return the current CPSR value. */
-Index: qemu/target-arm/exec.h
-===================================================================
---- qemu.orig/target-arm/exec.h 2006-03-09 19:18:27.000000000 +0000
-+++ qemu/target-arm/exec.h 2006-08-26 16:31:53.000000000 +0100
-@@ -51,8 +51,6 @@
-
- /* In op_helper.c */
-
--void cpu_lock(void);
--void cpu_unlock(void);
- void helper_set_cp15(CPUState *, uint32_t, uint32_t);
- uint32_t helper_get_cp15(CPUState *, uint32_t);
-
-Index: qemu/target-arm/op.c
-===================================================================
---- qemu.orig/target-arm/op.c 2006-08-26 16:28:48.000000000 +0100
-+++ qemu/target-arm/op.c 2006-08-26 16:31:53.000000000 +0100
-@@ -891,6 +891,12 @@
- cpu_loop_exit();
- }
-
-+void OPPROTO op_kernel_trap(void)
-+{
-+ env->exception_index = EXCP_KERNEL_TRAP;
-+ cpu_loop_exit();
-+}
-+
- /* VFP support. We follow the convention used for VFP instrunctions:
- Single precition routines have a "s" suffix, double precision a
- "d" suffix. */
-Index: qemu/target-arm/translate.c
-===================================================================
---- qemu.orig/target-arm/translate.c 2006-08-26 16:28:48.000000000 +0100
-+++ qemu/target-arm/translate.c 2006-08-26 16:31:53.000000000 +0100
-@@ -2382,6 +2382,7 @@
- s->is_jmp = DISAS_JUMP;
- }
-
-+
- /* generate intermediate code in gen_opc_buf and gen_opparam_buf for
- basic block 'tb'. If search_pc is TRUE, also generate PC
- information for each intermediate instruction. */
-@@ -2416,6 +2417,15 @@
- nb_gen_labels = 0;
- lj = -1;
- do {
-+#ifdef CONFIG_USER_ONLY
-+ /* Intercept jump to the magic kernel page. */
-+ if (dc->pc > 0xffff0000) {
-+ gen_op_kernel_trap();
-+ dc->is_jmp = DISAS_UPDATE;
-+ break;
-+ }
-+#endif
-+
- if (env->nb_breakpoints > 0) {
- for(j = 0; j < env->nb_breakpoints; j++) {
- if (env->breakpoints[j] == dc->pc) {
-Index: qemu/qemu_spinlock.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ qemu/qemu_spinlock.h 2006-08-26 16:31:53.000000000 +0100
-@@ -0,0 +1,182 @@
-+/*
-+ * internal execution defines for qemu
-+ *
-+ * Copyright (c) 2003 Fabrice Bellard
-+ *
-+ * 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
-+ */
-+
-+#ifndef _QEMU_SPINLOCK_H
-+#define _QEMU_SPINLOCK_H
-+
-+#ifdef __powerpc__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+ __asm__ __volatile__ (
-+ "0: lwarx %0,0,%1\n"
-+ " xor. %0,%3,%0\n"
-+ " bne 1f\n"
-+ " stwcx. %2,0,%1\n"
-+ " bne- 0b\n"
-+ "1: "
-+ : "=&r" (ret)
-+ : "r" (p), "r" (1), "r" (0)
-+ : "cr0", "memory");
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __i386__
-+static inline int testandset (int *p)
-+{
-+ long int readval = 0;
-+
-+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+ : "+m" (*p), "+a" (readval)
-+ : "r" (1)
-+ : "cc");
-+ return readval;
-+}
-+#endif
-+
-+#ifdef __x86_64__
-+static inline int testandset (int *p)
-+{
-+ long int readval = 0;
-+
-+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+ : "+m" (*p), "+a" (readval)
-+ : "r" (1)
-+ : "cc");
-+ return readval;
-+}
-+#endif
-+
-+#ifdef __s390__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+
-+ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
-+ " jl 0b"
-+ : "=&d" (ret)
-+ : "r" (1), "a" (p), "0" (*p)
-+ : "cc", "memory" );
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __alpha__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+ unsigned long one;
-+
-+ __asm__ __volatile__ ("0: mov 1,%2\n"
-+ " ldl_l %0,%1\n"
-+ " stl_c %2,%1\n"
-+ " beq %2,1f\n"
-+ ".subsection 2\n"
-+ "1: br 0b\n"
-+ ".previous"
-+ : "=r" (ret), "=m" (*p), "=r" (one)
-+ : "m" (*p));
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __sparc__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+
-+ __asm__ __volatile__("ldstub [%1], %0"
-+ : "=r" (ret)
-+ : "r" (p)
-+ : "memory");
-+
-+ return (ret ? 1 : 0);
-+}
-+#endif
-+
-+#ifdef __arm__
-+static inline int testandset (int *spinlock)
-+{
-+ register unsigned int ret;
-+ __asm__ __volatile__("swp %0, %1, [%2]"
-+ : "=r"(ret)
-+ : "0"(1), "r"(spinlock));
-+
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __mc68000
-+static inline int testandset (int *p)
-+{
-+ char ret;
-+ __asm__ __volatile__("tas %1; sne %0"
-+ : "=r" (ret)
-+ : "m" (p)
-+ : "cc","memory");
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __ia64
-+#include <ia64intrin.h>
-+
-+static inline int testandset (int *p)
-+{
-+ return __sync_lock_test_and_set (p, 1);
-+}
-+#endif
-+
-+typedef int spinlock_t;
-+
-+#define SPIN_LOCK_UNLOCKED 0
-+
-+#if defined(CONFIG_USER_ONLY)
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+ while (testandset(lock));
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+ *lock = 0;
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+ return !testandset(lock);
-+}
-+#else
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+ return 1;
-+}
-+#endif
-+
-+#endif /* ! _QEMU_SPINLOCK_H */
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/compiler.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/compiler.patch
deleted file mode 100644
index dad18b3a61..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/compiler.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- qemu/usb-linux.c~ 2006-07-19 19:06:15.000000000 +0100
-+++ qemu/usb-linux.c 2006-10-02 12:49:00.000000000 +0100
-@@ -26,7 +26,6 @@
- #if defined(__linux__)
- #include <dirent.h>
- #include <sys/ioctl.h>
--#include <linux/compiler.h>
- #include <linux/usbdevice_fs.h>
- #include <linux/version.h>
-
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/configure.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/configure.patch
deleted file mode 100644
index ea83f8cd6d..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/configure.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: qemu/configure
-===================================================================
---- qemu.orig/configure 2006-02-09 17:58:47.000000000 +0000
-+++ qemu/configure 2006-02-21 17:47:31.000000000 +0000
-@@ -482,7 +482,7 @@
- fi
- echo "HOST_CC=$host_cc" >> $config_mak
- echo "AR=$ar" >> $config_mak
--echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak
-+echo "STRIP=$strip" >> $config_mak
- echo "CFLAGS=$CFLAGS" >> $config_mak
- echo "LDFLAGS=$LDFLAGS" >> $config_mak
- echo "EXESUF=$EXESUF" >> $config_mak
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch
deleted file mode 100644
index 976c75cd60..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-Index: qemu/Makefile.target
-===================================================================
---- qemu.orig/Makefile.target 2007-06-29 10:57:58.000000000 +0000
-+++ qemu/Makefile.target 2007-06-29 10:58:01.000000000 +0000
-@@ -241,7 +241,6 @@
- ifdef CONFIG_LINUX_USER
- OBJS= main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o \
- elfload.o linuxload.o
--LIBS+= $(AIOLIBS)
- ifdef TARGET_HAS_BFLT
- OBJS+= flatload.o
- endif
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c 2007-06-29 10:58:01.000000000 +0000
-+++ qemu/linux-user/syscall.c 2007-06-29 10:58:30.000000000 +0000
-@@ -4872,29 +4872,6 @@
- goto unimplemented_nowarn;
- #endif
-
--#ifdef TARGET_NR_clock_gettime
-- case TARGET_NR_clock_gettime:
-- {
-- struct timespec ts;
-- ret = get_errno(clock_gettime(arg1, &ts));
-- if (!is_error(ret)) {
-- host_to_target_timespec(arg2, &ts);
-- }
-- break;
-- }
--#endif
--#ifdef TARGET_NR_clock_getres
-- case TARGET_NR_clock_getres:
-- {
-- struct timespec ts;
-- ret = get_errno(clock_getres(arg1, &ts));
-- if (!is_error(ret)) {
-- host_to_target_timespec(arg2, &ts);
-- }
-- break;
-- }
--#endif
--
- default:
- unimplemented:
- gemu_log("qemu: Unsupported syscall: %d\n", num);
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/makefile.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/makefile.patch
deleted file mode 100644
index 75b5ac9c71..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/makefile.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-Index: qemu/Makefile
-===================================================================
---- qemu.orig/Makefile 2007-07-30 18:25:50.000000000 +0200
-+++ qemu/Makefile 2007-07-30 18:26:13.000000000 +0200
-@@ -5,14 +5,14 @@
- .PHONY: all clean distclean dvi info install install-doc tar tarbin \
- speed test test2 html dvi info
-
--CFLAGS=-Wall -O2 -g -fno-strict-aliasing -I.
-+CFLAGS+=-Wall -O2 -g -fno-strict-aliasing -I.
- ifdef CONFIG_DARWIN
- CFLAGS+= -mdynamic-no-pic
- endif
- ifeq ($(ARCH),sparc)
- CFLAGS+=-mcpu=ultrasparc
- endif
--LDFLAGS=-g
-+LDFLAGS+=-g
- LIBS=
- DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
- TOOLS=qemu-img$(EXESUF)
-Index: qemu/Makefile.target
-===================================================================
---- qemu.orig/Makefile.target 2007-07-30 18:27:17.000000000 +0200
-+++ qemu/Makefile.target 2007-07-30 18:27:23.000000000 +0200
-@@ -17,9 +17,9 @@
- VPATH+=:$(SRC_PATH)/linux-user
- DEFINES+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ARCH)
- endif
--CFLAGS=-Wall -O2 -g -fno-strict-aliasing
-+CFLAGS+=-Wall -O2 -g -fno-strict-aliasing
- #CFLAGS+=-Werror
--LDFLAGS=-g
-+LDFLAGS+=-g
- LIBS=
- HELPER_CFLAGS=$(CFLAGS)
- DYNGEN=../dyngen$(EXESUF)
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/no-strip.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/no-strip.patch
deleted file mode 100644
index 59ed8771fe..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/no-strip.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- qemu.orig/Makefile
-+++ qemu/Makefile
-@@ -68,7 +68,7 @@
-
- install: all $(if $(BUILD_DOCS),install-doc)
- mkdir -p "$(DESTDIR)$(bindir)"
-- $(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)"
-+ $(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)"
- mkdir -p "$(DESTDIR)$(datadir)"
- for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
- video.x openbios-sparc32 pxe-ne2k_pci.bin \
---- qemu.orig/Makefile.target
-+++ qemu/Makefile.target
-@@ -655,7 +655,7 @@
-
- install: all
- ifneq ($(PROGS),)
-- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
-+ $(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)"
- endif
-
- ifneq ($(wildcard .depend),)
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch
deleted file mode 100644
index 09e5898d3a..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch
+++ /dev/null
@@ -1,219 +0,0 @@
-Index: qemu/hw/pl110.c
-===================================================================
---- qemu.orig/hw/pl110.c 2006-04-11 21:49:46.000000000 +0100
-+++ qemu/hw/pl110.c 2006-05-24 22:53:00.000000000 +0100
-@@ -10,6 +10,7 @@
- #include "vl.h"
-
- #define PL110_CR_EN 0x001
-+#define PL110_CR_BGR 0x100
- #define PL110_CR_BEBO 0x200
- #define PL110_CR_BEPO 0x400
- #define PL110_CR_PWR 0x800
-@@ -115,6 +116,7 @@
- int first, last = 0;
- int dirty, new_dirty;
- int i;
-+ int bpp_offset;
-
- if (!pl110_enabled(s))
- return;
-@@ -146,12 +148,17 @@
- fprintf(stderr, "pl110: Bad color depth\n");
- exit(1);
- }
-+ if (s->cr & PL110_CR_BGR)
-+ bpp_offset = 0;
-+ else
-+ bpp_offset = 18;
-+
- if (s->cr & PL110_CR_BEBO)
-- fn = fntable[s->bpp + 6];
-+ fn = fntable[s->bpp + 6 + bpp_offset];
- else if (s->cr & PL110_CR_BEPO)
-- fn = fntable[s->bpp + 12];
-+ fn = fntable[s->bpp + 12 + bpp_offset];
- else
-- fn = fntable[s->bpp];
-+ fn = fntable[s->bpp + bpp_offset];
-
- src_width = s->cols;
- switch (s->bpp) {
-Index: qemu/hw/pl110_template.h
-===================================================================
---- qemu.orig/hw/pl110_template.h 2006-02-19 12:31:32.000000000 +0000
-+++ qemu/hw/pl110_template.h 2006-05-24 23:04:03.000000000 +0100
-@@ -24,6 +24,16 @@
- #error unknown bit depth
- #endif
-
-+#undef RGB
-+#define BORDER bgr
-+#define ORDER 0
-+#include "pl110_template.h"
-+#define ORDER 1
-+#include "pl110_template.h"
-+#define ORDER 2
-+#include "pl110_template.h"
-+#define RGB
-+#define BORDER rgb
- #define ORDER 0
- #include "pl110_template.h"
- #define ORDER 1
-@@ -33,26 +43,47 @@
-
- static drawfn glue(pl110_draw_fn_,BITS)[18] =
- {
-- glue(pl110_draw_line1_lblp,BITS),
-- glue(pl110_draw_line2_lblp,BITS),
-- glue(pl110_draw_line4_lblp,BITS),
-- glue(pl110_draw_line8_lblp,BITS),
-- glue(pl110_draw_line16_lblp,BITS),
-- glue(pl110_draw_line32_lblp,BITS),
--
-- glue(pl110_draw_line1_bbbp,BITS),
-- glue(pl110_draw_line2_bbbp,BITS),
-- glue(pl110_draw_line4_bbbp,BITS),
-- glue(pl110_draw_line8_bbbp,BITS),
-- glue(pl110_draw_line16_bbbp,BITS),
-- glue(pl110_draw_line32_bbbp,BITS),
--
-- glue(pl110_draw_line1_lbbp,BITS),
-- glue(pl110_draw_line2_lbbp,BITS),
-- glue(pl110_draw_line4_lbbp,BITS),
-- glue(pl110_draw_line8_lbbp,BITS),
-- glue(pl110_draw_line16_lbbp,BITS),
-- glue(pl110_draw_line32_lbbp,BITS)
-+ glue(pl110_draw_line1_lblp_bgr,BITS),
-+ glue(pl110_draw_line2_lblp_bgr,BITS),
-+ glue(pl110_draw_line4_lblp_bgr,BITS),
-+ glue(pl110_draw_line8_lblp_bgr,BITS),
-+ glue(pl110_draw_line16_lblp_bgr,BITS),
-+ glue(pl110_draw_line32_lblp_bgr,BITS),
-+
-+ glue(pl110_draw_line1_bbbp_bgr,BITS),
-+ glue(pl110_draw_line2_bbbp_bgr,BITS),
-+ glue(pl110_draw_line4_bbbp_bgr,BITS),
-+ glue(pl110_draw_line8_bbbp_bgr,BITS),
-+ glue(pl110_draw_line16_bbbp_bgr,BITS),
-+ glue(pl110_draw_line32_bbbp_bgr,BITS),
-+
-+ glue(pl110_draw_line1_lbbp_bgr,BITS),
-+ glue(pl110_draw_line2_lbbp_bgr,BITS),
-+ glue(pl110_draw_line4_lbbp_bgr,BITS),
-+ glue(pl110_draw_line8_lbbp_bgr,BITS),
-+ glue(pl110_draw_line16_lbbp_bgr,BITS),
-+ glue(pl110_draw_line32_lbbp_bgr,BITS),
-+
-+ glue(pl110_draw_line1_lblp_rgb,BITS),
-+ glue(pl110_draw_line2_lblp_rgb,BITS),
-+ glue(pl110_draw_line4_lblp_rgb,BITS),
-+ glue(pl110_draw_line8_lblp_rgb,BITS),
-+ glue(pl110_draw_line16_lblp_rgb,BITS),
-+ glue(pl110_draw_line32_lblp_rgb,BITS),
-+
-+ glue(pl110_draw_line1_bbbp_rgb,BITS),
-+ glue(pl110_draw_line2_bbbp_rgb,BITS),
-+ glue(pl110_draw_line4_bbbp_rgb,BITS),
-+ glue(pl110_draw_line8_bbbp_rgb,BITS),
-+ glue(pl110_draw_line16_bbbp_rgb,BITS),
-+ glue(pl110_draw_line32_bbbp_rgb,BITS),
-+
-+ glue(pl110_draw_line1_lbbp_rgb,BITS),
-+ glue(pl110_draw_line2_lbbp_rgb,BITS),
-+ glue(pl110_draw_line4_lbbp_rgb,BITS),
-+ glue(pl110_draw_line8_lbbp_rgb,BITS),
-+ glue(pl110_draw_line16_lbbp_rgb,BITS),
-+ glue(pl110_draw_line32_lbbp_rgb,BITS),
- };
-
- #undef BITS
-@@ -61,18 +92,18 @@
- #else
-
- #if ORDER == 0
--#define NAME glue(lblp, BITS)
-+#define NAME glue(glue(lblp_, BORDER), BITS)
- #ifdef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
- #elif ORDER == 1
--#define NAME glue(bbbp, BITS)
-+#define NAME glue(glue(bbbp_, BORDER), BITS)
- #ifndef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
- #else
- #define SWAP_PIXELS 1
--#define NAME glue(lbbp, BITS)
-+#define NAME glue(glue(lbbp_, BORDER), BITS)
- #ifdef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
-@@ -195,27 +226,34 @@
- #ifdef SWAP_WORDS
- data = bswap32(data);
- #endif
-+#ifdef RGB
-+#define LSB r
-+#define MSB b
-+#else
-+#define LSB b
-+#define MSB r
-+#endif
- #if 0
-- r = data & 0x1f;
-+ LSB = data & 0x1f;
- data >>= 5;
- g = data & 0x3f;
- data >>= 6;
-- b = data & 0x1f;
-+ MSB = data & 0x1f;
- data >>= 5;
- #else
-- r = (data & 0x1f) << 3;
-+ LSB = (data & 0x1f) << 3;
- data >>= 5;
- g = (data & 0x3f) << 2;
- data >>= 6;
-- b = (data & 0x1f) << 3;
-+ MSB = (data & 0x1f) << 3;
- data >>= 5;
- #endif
- COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
-- r = (data & 0x1f) << 3;
-+ LSB = (data & 0x1f) << 3;
- data >>= 5;
- g = (data & 0x3f) << 2;
- data >>= 6;
-- b = (data & 0x1f) << 3;
-+ MSB = (data & 0x1f) << 3;
- data >>= 5;
- COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
- width -= 2;
-@@ -229,14 +267,21 @@
- unsigned int r, g, b;
- while (width > 0) {
- data = *(uint32_t *)src;
-+#ifdef RGB
-+#define LSB r
-+#define MSB b
-+#else
-+#define LSB b
-+#define MSB r
-+#endif
- #ifdef SWAP_WORDS
-- r = data & 0xff;
-+ LSB = data & 0xff;
- g = (data >> 8) & 0xff;
-- b = (data >> 16) & 0xff;
-+ MSB = (data >> 16) & 0xff;
- #else
-- r = (data >> 24) & 0xff;
-+ LSB = (data >> 24) & 0xff;
- g = (data >> 16) & 0xff;
-- b = (data >> 8) & 0xff;
-+ MSB = (data >> 8) & 0xff;
- #endif
- COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
- width--;
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch
deleted file mode 100644
index 869acba2cf..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch
+++ /dev/null
@@ -1,294 +0,0 @@
-Index: qemu/linux-user/main.c
-===================================================================
---- qemu.orig/linux-user/main.c 2007-06-29 10:47:58.000000000 +0000
-+++ qemu/linux-user/main.c 2007-06-29 10:47:58.000000000 +0000
-@@ -156,7 +156,7 @@
- p[1] = tswapl(e2);
- }
-
--uint64_t gdt_table[6];
-+uint64_t gdt_table[9];
- uint64_t idt_table[256];
-
- /* only dpl matters as we do only user space emulation */
-@@ -1768,7 +1768,11 @@
- int optind;
- const char *r;
- int gdbstub_port = 0;
--
-+ char *assume_kernel = getenv("QEMU_ASSUME_KERNEL");
-+
-+ if (assume_kernel)
-+ setenv("LD_ASSUME_KERNEL", assume_kernel, 1);
-+
- if (argc <= 1)
- usage();
-
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c 2007-06-29 10:47:58.000000000 +0000
-+++ qemu/linux-user/syscall.c 2007-06-29 10:53:44.000000000 +0000
-@@ -60,6 +60,7 @@
- #define tchars host_tchars /* same as target */
- #define ltchars host_ltchars /* same as target */
-
-+#include <linux/futex.h>
- #include <linux/termios.h>
- #include <linux/unistd.h>
- #include <linux/utsname.h>
-@@ -2122,6 +2123,80 @@
- return ret;
- }
-
-+int do_set_thread_area(CPUX86State *env, target_ulong ptr)
-+{
-+ uint64_t *gdt_table = g2h(env->gdt.base);
-+ struct target_modify_ldt_ldt_s ldt_info;
-+ struct target_modify_ldt_ldt_s *target_ldt_info;
-+ int seg_32bit, contents, read_exec_only, limit_in_pages;
-+ int seg_not_present, useable;
-+ uint32_t *lp, entry_1, entry_2;
-+ int i;
-+
-+ lock_user_struct(target_ldt_info, ptr, 1);
-+ ldt_info.entry_number = tswap32(target_ldt_info->entry_number);
-+ ldt_info.base_addr = tswapl(target_ldt_info->base_addr);
-+ ldt_info.limit = tswap32(target_ldt_info->limit);
-+ ldt_info.flags = tswap32(target_ldt_info->flags);
-+ if (ldt_info.entry_number == -1) {
-+ for (i=6; i<8; i++)
-+ if (gdt_table[i] == 0) {
-+ ldt_info.entry_number = i;
-+ target_ldt_info->entry_number = tswap32(i);
-+ break;
-+ }
-+ }
-+ unlock_user_struct(target_ldt_info, ptr, 0);
-+
-+ if (ldt_info.entry_number < 6 || ldt_info.entry_number > 8)
-+ return -EINVAL;
-+ seg_32bit = ldt_info.flags & 1;
-+ contents = (ldt_info.flags >> 1) & 3;
-+ read_exec_only = (ldt_info.flags >> 3) & 1;
-+ limit_in_pages = (ldt_info.flags >> 4) & 1;
-+ seg_not_present = (ldt_info.flags >> 5) & 1;
-+ useable = (ldt_info.flags >> 6) & 1;
-+
-+ if (contents == 3) {
-+ if (seg_not_present == 0)
-+ return -EINVAL;
-+ }
-+
-+ /* NOTE: same code as Linux kernel */
-+ /* Allow LDTs to be cleared by the user. */
-+ if (ldt_info.base_addr == 0 && ldt_info.limit == 0) {
-+ if ((contents == 0 &&
-+ read_exec_only == 1 &&
-+ seg_32bit == 0 &&
-+ limit_in_pages == 0 &&
-+ seg_not_present == 1 &&
-+ useable == 0 )) {
-+ entry_1 = 0;
-+ entry_2 = 0;
-+ goto install;
-+ }
-+ }
-+
-+ entry_1 = ((ldt_info.base_addr & 0x0000ffff) << 16) |
-+ (ldt_info.limit & 0x0ffff);
-+ entry_2 = (ldt_info.base_addr & 0xff000000) |
-+ ((ldt_info.base_addr & 0x00ff0000) >> 16) |
-+ (ldt_info.limit & 0xf0000) |
-+ ((read_exec_only ^ 1) << 9) |
-+ (contents << 10) |
-+ ((seg_not_present ^ 1) << 15) |
-+ (seg_32bit << 22) |
-+ (limit_in_pages << 23) |
-+ (useable << 20) |
-+ 0x7000;
-+
-+ /* Install the new entry ... */
-+install:
-+ lp = (uint32_t *)(gdt_table + ldt_info.entry_number);
-+ lp[0] = tswap32(entry_1);
-+ lp[1] = tswap32(entry_2);
-+ return 0;
-+}
- #endif /* defined(TARGET_I386) */
-
- /* this stack is the equivalent of the kernel stack associated with a
-@@ -2154,15 +2229,20 @@
- TaskState *ts;
- uint8_t *new_stack;
- CPUState *new_env;
-+#if defined(TARGET_I386)
-+ uint64_t *new_gdt_table;
-+#endif
- #ifdef USE_NPTL
- unsigned int nptl_flags;
-
- if (flags & CLONE_PARENT_SETTID)
- *parent_tidptr = gettid();
- #endif
--
-+
- if (flags & CLONE_VM) {
- ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
-+ if (!ts)
-+ return -ENOMEM;
- memset(ts, 0, sizeof(TaskState));
- new_stack = ts->stack;
- ts->used = 1;
-@@ -2174,6 +2254,29 @@
- #if defined(TARGET_I386)
- if (!newsp)
- newsp = env->regs[R_ESP];
-+ new_gdt_table = malloc(9 * 8);
-+ if (!new_gdt_table) {
-+ free(new_env);
-+ return -ENOMEM;
-+ }
-+ /* Copy main GDT table from parent, but clear TLS entries */
-+ memcpy(new_gdt_table, g2h(env->gdt.base), 6 * 8);
-+ memset(&new_gdt_table[6], 0, 3 * 8);
-+ new_env->gdt.base = h2g(new_gdt_table);
-+ if (flags & 0x00080000 /* CLONE_SETTLS */) {
-+ ret = do_set_thread_area(new_env, new_env->regs[R_ESI]);
-+ if (ret) {
-+ free(new_gdt_table);
-+ free(new_env);
-+ return ret;
-+ }
-+ }
-+ cpu_x86_load_seg(env, R_CS, new_env->regs[R_CS]);
-+ cpu_x86_load_seg(env, R_DS, new_env->regs[R_DS]);
-+ cpu_x86_load_seg(env, R_ES, new_env->regs[R_ES]);
-+ cpu_x86_load_seg(env, R_SS, new_env->regs[R_SS]);
-+ cpu_x86_load_seg(env, R_FS, new_env->regs[R_FS]);
-+ cpu_x86_load_seg(env, R_GS, new_env->regs[R_GS]);
- new_env->regs[R_ESP] = newsp;
- new_env->regs[R_EAX] = 0;
- #elif defined(TARGET_ARM)
-@@ -2517,6 +2620,68 @@
- unlock_user_struct(target_ts, target_addr, 1);
- }
-
-+static long do_futex(target_ulong uaddr, int op, uint32_t val,
-+ target_ulong utime, target_ulong uaddr2,
-+ uint32_t val3)
-+{
-+ struct timespec host_utime;
-+ unsigned long val2 = utime;
-+
-+ if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) {
-+ target_to_host_timespec(&host_utime, utime);
-+ val2 = (unsigned long)&host_utime;
-+ }
-+
-+#ifdef BSWAP_NEEDED
-+ switch(op) {
-+ case FUTEX_CMP_REQUEUE:
-+ val3 = tswap32(val3);
-+ case FUTEX_REQUEUE:
-+ val2 = tswap32(val2);
-+ case FUTEX_WAIT:
-+ case FUTEX_WAKE:
-+ val = tswap32(val);
-+ case FUTEX_LOCK_PI: /* This one's icky, but comes out OK */
-+ case FUTEX_UNLOCK_PI:
-+ break;
-+ default:
-+ gemu_log("qemu: Unsupported futex op %d\n", op);
-+ return -ENOSYS;
-+ }
-+#if 0 /* No, it's worse than this */
-+ if (op == FUTEX_WAKE_OP) {
-+ /* Need to munge the secondary operation (val3) */
-+ val3 = tswap32(val3);
-+ int op2 = (val3 >> 28) & 7;
-+ int cmp = (val3 >> 24) & 15;
-+ int oparg = (val3 << 8) >> 20;
-+ int cmparg = (val3 << 20) >> 20;
-+ int shift = val3 & (FUTEX_OP_OPARG_SHIFT << 28);
-+
-+ if (shift)
-+ oparg = (oparg & 7) + 24 - (oparg & 24);
-+ else oparg =
-+ if (op2 == FUTEX_OP_ADD) {
-+ gemu_log("qemu: Unsupported wrong-endian FUTEX_OP_ADD\n");
-+ return -ENOSYS;
-+ }
-+ if (cmparg == FUTEX_OP_CMP_LT || cmparg == FUTEX_OP_CMP_GE ||
-+ cmparg == FUTEX_OP_CMP_LE || cmparg == FUTEX_OP_CMP_GT) {
-+ gemu_log("qemu: Unsupported wrong-endian futex cmparg %d\n", cmparg);
-+ return -ENOSYS;
-+ }
-+ val3 = shift | (op2<<28) | (cmp<<24) | (oparg<<12) | cmparg;
-+ }
-+#endif
-+#endif
-+ return syscall(__NR_futex, g2h(uaddr), op, val, val2, g2h(uaddr2), val3);
-+}
-+
-+int do_set_tid_address(target_ulong tidptr)
-+{
-+ return syscall(__NR_set_tid_address, g2h(tidptr));
-+}
-+
- long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
- long arg4, long arg5, long arg6)
- {
-@@ -2534,7 +2699,7 @@
- _mcleanup();
- #endif
- gdb_exit(cpu_env, arg1);
-- /* XXX: should free thread stack and CPU env */
-+ /* XXX: should free thread stack, GDT and CPU env */
- _exit(arg1);
- ret = 0; /* avoid warning */
- break;
-@@ -4642,6 +4807,9 @@
- ((CPUMIPSState *) cpu_env)->tls_value = arg1;
- ret = 0;
- break;
-+#elif TARGET_i386
-+ ret = get_errno(do_set_thread_area(cpu_env, arg1));
-+ break;
- #else
- goto unimplemented_nowarn;
- #endif
-@@ -4655,6 +4823,21 @@
- goto unimplemented_nowarn;
- #endif
-
-+#ifdef TARGET_NR_futex
-+ case TARGET_NR_futex:
-+ ret = get_errno(do_futex(arg1, arg2, arg3, arg4, arg5, arg6));
-+ break;
-+#endif
-+#ifdef TARGET_NR_set_tid_address
-+ case TARGET_NR_set_tid_address:
-+ ret = get_errno(do_set_tid_address(arg1));
-+ break;
-+#endif
-+#ifdef TARGET_NR_set_robust_list
-+ case TARGET_NR_set_robust_list:
-+ goto unimplemented_nowarn;
-+#endif
-+
- #ifdef TARGET_NR_clock_gettime
- case TARGET_NR_clock_gettime:
- {
-@@ -4678,12 +4861,6 @@
- }
- #endif
-
--#if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address)
-- case TARGET_NR_set_tid_address:
-- ret = get_errno(set_tid_address((int *) arg1));
-- break;
--#endif
--
- default:
- unimplemented:
- gemu_log("qemu: Unsupported syscall: %d\n", num);
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch
deleted file mode 100644
index fc7b0cfa4b..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch
+++ /dev/null
@@ -1,892 +0,0 @@
-These are Paul Brook's patches to QEMU-0.8.2 to enable the running of single
-ARM binaries under QEMU's user-emulation mode. Without them, QEMU-0.8.1
-immediately dies saying:
- Error: f0005
- qemu: uncaught target signal 6 (Aborted) - exiting
-while qemu-0.8.2 dies saying:
- qemu: Unsupported syscall: 983045
- cannot set up thread-local storage: unknown error
-
-This file is a rediffing of the patches visible at
-https://nowt.dyndns.org/patch.qemu_nptl on 27 Sept 2006
-which "patch" fails to apply automatically.
-See also http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00194.html
-
- Martin Guy, 27 Sept 2006
-
-Index: qemu/configure
-===================================================================
---- qemu.orig/configure 2007-06-29 10:47:39.000000000 +0000
-+++ qemu/configure 2007-06-29 10:47:58.000000000 +0000
-@@ -101,6 +101,7 @@
- darwin_user="no"
- build_docs="no"
- uname_release=""
-+nptl="yes"
-
- # OS specific
- targetos=`uname -s`
-@@ -281,6 +282,8 @@
- *) echo "undefined SPARC architecture. Exiting";exit 1;;
- esac
- ;;
-+ --disable-nptl) nptl="no"
-+ ;;
- esac
- done
-
-@@ -355,6 +358,7 @@
- echo " --disable-linux-user disable all linux usermode emulation targets"
- echo " --enable-darwin-user enable all darwin usermode emulation targets"
- echo " --disable-darwin-user disable all darwin usermode emulation targets"
-+echo " --disable-nptl disable usermode NPTL guest support"
- echo " --fmod-lib path to FMOD library"
- echo " --fmod-inc path to FMOD includes"
- echo " --enable-uname-release=R Return R for uname -r in usermode emulation"
-@@ -524,6 +528,23 @@
- }
- EOF
-
-+# check NPTL support
-+cat > $TMPC <<EOF
-+#include <sched.h>
-+void foo()
-+{
-+#ifndef CLONE_SETTLS
-+#error bork
-+#endif
-+}
-+EOF
-+
-+if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
-+ :
-+else
-+ nptl="no"
-+fi
-+
- ##########################################
- # SDL probe
-
-@@ -678,6 +699,7 @@
- echo "Documentation $build_docs"
- [ ! -z "$uname_release" ] && \
- echo "uname -r $uname_release"
-+echo "NPTL support $nptl"
-
- if test $sdl_too_old = "yes"; then
- echo "-> Your SDL version is too old - please upgrade to have SDL support"
-@@ -1057,6 +1079,14 @@
- echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
- fi
- fi
-+else
-+ if test "$nptl" = "yes" ; then
-+ case "$target_cpu" in
-+ arm | armeb)
-+ echo "#define USE_NPTL 1" >> $config_h
-+ ;;
-+ esac
-+ fi
- fi
-
- if test "$cocoa" = "yes" ; then
-Index: qemu/exec-all.h
-===================================================================
---- qemu.orig/exec-all.h 2007-06-29 10:47:39.000000000 +0000
-+++ qemu/exec-all.h 2007-06-29 10:47:58.000000000 +0000
-@@ -360,170 +360,7 @@
- extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
- extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
-
--#if defined(__powerpc__)
--static inline int testandset (int *p)
--{
-- int ret;
-- __asm__ __volatile__ (
-- "0: lwarx %0,0,%1\n"
-- " xor. %0,%3,%0\n"
-- " bne 1f\n"
-- " stwcx. %2,0,%1\n"
-- " bne- 0b\n"
-- "1: "
-- : "=&r" (ret)
-- : "r" (p), "r" (1), "r" (0)
-- : "cr0", "memory");
-- return ret;
--}
--#elif defined(__i386__)
--static inline int testandset (int *p)
--{
-- long int readval = 0;
--
-- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-- : "+m" (*p), "+a" (readval)
-- : "r" (1)
-- : "cc");
-- return readval;
--}
--#elif defined(__x86_64__)
--static inline int testandset (int *p)
--{
-- long int readval = 0;
--
-- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-- : "+m" (*p), "+a" (readval)
-- : "r" (1)
-- : "cc");
-- return readval;
--}
--#elif defined(__s390__)
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
-- " jl 0b"
-- : "=&d" (ret)
-- : "r" (1), "a" (p), "0" (*p)
-- : "cc", "memory" );
-- return ret;
--}
--#elif defined(__alpha__)
--static inline int testandset (int *p)
--{
-- int ret;
-- unsigned long one;
--
-- __asm__ __volatile__ ("0: mov 1,%2\n"
-- " ldl_l %0,%1\n"
-- " stl_c %2,%1\n"
-- " beq %2,1f\n"
-- ".subsection 2\n"
-- "1: br 0b\n"
-- ".previous"
-- : "=r" (ret), "=m" (*p), "=r" (one)
-- : "m" (*p));
-- return ret;
--}
--#elif defined(__sparc__)
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__("ldstub [%1], %0"
-- : "=r" (ret)
-- : "r" (p)
-- : "memory");
--
-- return (ret ? 1 : 0);
--}
--#elif defined(__arm__)
--static inline int testandset (int *spinlock)
--{
-- register unsigned int ret;
-- __asm__ __volatile__("swp %0, %1, [%2]"
-- : "=r"(ret)
-- : "0"(1), "r"(spinlock));
--
-- return ret;
--}
--#elif defined(__mc68000)
--static inline int testandset (int *p)
--{
-- char ret;
-- __asm__ __volatile__("tas %1; sne %0"
-- : "=r" (ret)
-- : "m" (p)
-- : "cc","memory");
-- return ret;
--}
--#elif defined(__ia64)
--
--#include <ia64intrin.h>
--
--static inline int testandset (int *p)
--{
-- return __sync_lock_test_and_set (p, 1);
--}
--#elif defined(__mips__)
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__ (
-- " .set push \n"
-- " .set noat \n"
-- " .set mips2 \n"
-- "1: li $1, 1 \n"
-- " ll %0, %1 \n"
-- " sc $1, %1 \n"
-- " beqz $1, 1b \n"
-- " .set pop "
-- : "=r" (ret), "+R" (*p)
-- :
-- : "memory");
--
-- return ret;
--}
--#else
--#error unimplemented CPU support
--#endif
--
--typedef int spinlock_t;
--
--#define SPIN_LOCK_UNLOCKED 0
--
--#if defined(CONFIG_USER_ONLY)
--static inline void spin_lock(spinlock_t *lock)
--{
-- while (testandset(lock));
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
-- *lock = 0;
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
-- return !testandset(lock);
--}
--#else
--static inline void spin_lock(spinlock_t *lock)
--{
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
-- return 1;
--}
--#endif
-+#include "qemu_spinlock.h"
-
- extern spinlock_t tb_lock;
-
-Index: qemu/linux-user/arm/syscall.h
-===================================================================
---- qemu.orig/linux-user/arm/syscall.h 2007-06-29 10:47:39.000000000 +0000
-+++ qemu/linux-user/arm/syscall.h 2007-06-29 10:47:58.000000000 +0000
-@@ -28,7 +28,9 @@
- #define ARM_SYSCALL_BASE 0x900000
- #define ARM_THUMB_SYSCALL 0
-
--#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
-+#define ARM_NR_BASE 0xf0000
-+#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
-+#define ARM_NR_set_tls (ARM_NR_BASE + 5)
-
- #define ARM_NR_semihosting 0x123456
- #define ARM_NR_thumb_semihosting 0xAB
-Index: qemu/linux-user/main.c
-===================================================================
---- qemu.orig/linux-user/main.c 2007-06-29 10:47:39.000000000 +0000
-+++ qemu/linux-user/main.c 2007-06-29 10:53:47.000000000 +0000
-@@ -325,6 +325,50 @@
- }
- }
-
-+/* Handle a jump to the kernel code page. */
-+static int
-+do_kernel_trap(CPUARMState *env)
-+{
-+ uint32_t addr;
-+ uint32_t *ptr;
-+ uint32_t cpsr;
-+
-+ switch (env->regs[15]) {
-+ case 0xffff0fc0: /* __kernel_cmpxchg */
-+ /* XXX: This only works between threads, not between processes.
-+ Use native atomic operations. */
-+ /* ??? This probably breaks horribly if the access segfaults. */
-+ cpu_lock();
-+ ptr = (uint32_t *)env->regs[2];
-+ cpsr = cpsr_read(env);
-+ if (*ptr == env->regs[0]) {
-+ *ptr = env->regs[1];
-+ env->regs[0] = 0;
-+ cpsr |= CPSR_C;
-+ } else {
-+ env->regs[0] = -1;
-+ cpsr &= ~CPSR_C;
-+ }
-+ cpsr_write(env, cpsr, CPSR_C);
-+ cpu_unlock();
-+ break;
-+ case 0xffff0fe0: /* __kernel_get_tls */
-+ env->regs[0] = env->cp15.c13_tls;
-+ break;
-+ default:
-+ return 1;
-+ }
-+ /* Jump back to the caller. */
-+ addr = env->regs[14];
-+ if (addr & 1) {
-+ env->thumb = 1;
-+ addr &= ~1;
-+ }
-+ env->regs[15] = addr;
-+
-+ return 0;
-+}
-+
- void cpu_loop(CPUARMState *env)
- {
- int trapnr;
-@@ -381,10 +425,8 @@
- }
- }
-
-- if (n == ARM_NR_cacheflush) {
-- arm_cache_flush(env->regs[0], env->regs[1]);
-- } else if (n == ARM_NR_semihosting
-- || n == ARM_NR_thumb_semihosting) {
-+ if (n == ARM_NR_semihosting
-+ || n == ARM_NR_thumb_semihosting) {
- env->regs[0] = do_arm_semihosting (env);
- } else if (n == 0 || n >= ARM_SYSCALL_BASE
- || (env->thumb && n == ARM_THUMB_SYSCALL)) {
-@@ -395,14 +437,34 @@
- n -= ARM_SYSCALL_BASE;
- env->eabi = 0;
- }
-- env->regs[0] = do_syscall(env,
-- n,
-- env->regs[0],
-- env->regs[1],
-- env->regs[2],
-- env->regs[3],
-- env->regs[4],
-- env->regs[5]);
-+ if ( n > ARM_NR_BASE) {
-+ switch (n)
-+ {
-+ case ARM_NR_cacheflush:
-+ arm_cache_flush(env->regs[0], env->regs[1]);
-+ break;
-+#ifdef USE_NPTL
-+ case ARM_NR_set_tls:
-+ cpu_set_tls(env, env->regs[0]);
-+ env->regs[0] = 0;
-+ break;
-+#endif
-+ default:
-+ printf ("Error: Bad syscall: %x\n", n);
-+ goto error;
-+ }
-+ }
-+ else
-+ {
-+ env->regs[0] = do_syscall(env,
-+ n,
-+ env->regs[0],
-+ env->regs[1],
-+ env->regs[2],
-+ env->regs[3],
-+ env->regs[4],
-+ env->regs[5]);
-+ }
- } else {
- goto error;
- }
-@@ -441,6 +503,10 @@
- }
- }
- break;
-+ case EXCP_KERNEL_TRAP:
-+ if (do_kernel_trap(env))
-+ goto error;
-+ break;
- default:
- error:
- fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
-@@ -2047,6 +2113,10 @@
- ts->heap_base = info->brk;
- /* This will be filled in on the first SYS_HEAPINFO call. */
- ts->heap_limit = 0;
-+ /* Register the magic kernel code page. The cpu will generate a
-+ special exception when it tries to execute code here. We can't
-+ put real code here because it may be in use by the host kernel. */
-+ page_set_flags(0xffff0000, 0xffff0fff, 0);
- #endif
-
- if (gdbstub_port) {
-Index: qemu/linux-user/qemu.h
-===================================================================
---- qemu.orig/linux-user/qemu.h 2007-06-29 10:47:39.000000000 +0000
-+++ qemu/linux-user/qemu.h 2007-06-29 10:47:58.000000000 +0000
-@@ -80,6 +80,9 @@
- uint32_t heap_base;
- uint32_t heap_limit;
- #endif
-+#ifdef USE_NPTL
-+ uint32_t *child_tidptr;
-+#endif
- int used; /* non zero if used */
- struct image_info *info;
- uint8_t stack[0];
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c 2007-06-29 10:47:39.000000000 +0000
-+++ qemu/linux-user/syscall.c 2007-06-29 10:53:47.000000000 +0000
-@@ -70,9 +70,18 @@
- #include <linux/kd.h>
-
- #include "qemu.h"
-+#include "qemu_spinlock.h"
-
- //#define DEBUG
-
-+#ifdef USE_NPTL
-+#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
-+ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
-+#else
-+/* XXX: Hardcode the above values. */
-+#define CLONE_NPTL_FLAGS2 0
-+#endif
-+
- #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
- || defined(TARGET_M68K) || defined(TARGET_SH4)
- /* 16 bit uid wrappers emulation */
-@@ -2119,20 +2128,38 @@
- thread/process */
- #define NEW_STACK_SIZE 8192
-
-+#ifdef USE_NPTL
-+static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
-+#endif
-+
- static int clone_func(void *arg)
- {
- CPUState *env = arg;
-+#ifdef HAVE_NPTL
-+ /* Wait until the parent has finshed initializing the tls state. */
-+ while (!spin_trylock(&nptl_lock))
-+ usleep(1);
-+ spin_unlock(&nptl_lock);
-+#endif
- cpu_loop(env);
- /* never exits */
- return 0;
- }
-
--int do_fork(CPUState *env, unsigned int flags, unsigned long newsp)
-+int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
-+ uint32_t *parent_tidptr, void *newtls,
-+ uint32_t *child_tidptr)
- {
- int ret;
- TaskState *ts;
- uint8_t *new_stack;
- CPUState *new_env;
-+#ifdef USE_NPTL
-+ unsigned int nptl_flags;
-+
-+ if (flags & CLONE_PARENT_SETTID)
-+ *parent_tidptr = gettid();
-+#endif
-
- if (flags & CLONE_VM) {
- ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
-@@ -2199,16 +2226,67 @@
- #error unsupported target CPU
- #endif
- new_env->opaque = ts;
-+#ifdef USE_NPTL
-+ nptl_flags = flags;
-+ flags &= ~CLONE_NPTL_FLAGS2;
-+
-+ if (nptl_flags & CLONE_CHILD_CLEARTID) {
-+ ts->child_tidptr = child_tidptr;
-+ }
-+
-+ if (nptl_flags & CLONE_SETTLS)
-+ cpu_set_tls (new_env, newtls);
-+
-+ /* Grab the global cpu lock so that the thread setup appears
-+ atomic. */
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ spin_lock(&nptl_lock);
-+
-+#else
-+ if (flags & CLONE_NPTL_FLAGS2)
-+ return -EINVAL;
-+#endif
-+
-+ if (CLONE_VFORK & flags)
-+ flags ^= CLONE_VM;
- #ifdef __ia64__
- ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #else
- ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #endif
-+#ifdef USE_NPTL
-+ if (ret != -1) {
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ *child_tidptr = ret;
-+ }
-+
-+ /* Allow the child to continue. */
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ spin_unlock(&nptl_lock);
-+#endif
- } else {
- /* if no CLONE_VM, we consider it is a fork */
-- if ((flags & ~CSIGNAL) != 0)
-+ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
- return -EINVAL;
- ret = fork();
-+#ifdef USE_NPTL
-+ /* There is a race condition here. The parent process could
-+ theoretically read the TID in the child process before the child
-+ tid is set. This would require using either ptrace
-+ (not implemented) or having *_tidptr to point at a shared memory
-+ mapping. We can't repeat the spinlock hack used above because
-+ the child process gets its own copy of the lock. */
-+ if (ret == 0) {
-+ /* Child Process. */
-+ if (flags & CLONE_CHILD_SETTID)
-+ *child_tidptr = gettid();
-+ ts = (TaskState *)env->opaque;
-+ if (flags & CLONE_CHILD_CLEARTID)
-+ ts->child_tidptr = child_tidptr;
-+ if (flags & CLONE_SETTLS)
-+ cpu_set_tls (env, newtls);
-+ }
-+#endif
- }
- return ret;
- }
-@@ -2485,7 +2563,7 @@
- ret = do_brk(arg1);
- break;
- case TARGET_NR_fork:
-- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
-+ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
- break;
- #ifdef TARGET_NR_waitpid
- case TARGET_NR_waitpid:
-@@ -3649,7 +3727,8 @@
- ret = get_errno(fsync(arg1));
- break;
- case TARGET_NR_clone:
-- ret = get_errno(do_fork(cpu_env, arg1, arg2));
-+ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
-+ (void *)arg4, (uint32_t *)arg5));
- break;
- #ifdef __NR_exit_group
- /* new thread calls */
-@@ -4037,7 +4116,8 @@
- #endif
- #ifdef TARGET_NR_vfork
- case TARGET_NR_vfork:
-- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
-+ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
-+ NULL, NULL, NULL));
- break;
- #endif
- #ifdef TARGET_NR_ugetrlimit
-@@ -4619,4 +4699,3 @@
- #endif
- return ret;
- }
--
-Index: qemu/qemu_spinlock.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ qemu/qemu_spinlock.h 2007-06-29 10:47:58.000000000 +0000
-@@ -0,0 +1,181 @@
-+/*
-+ * Atomic operation helper include
-+ *
-+ * Copyright (c) 2005 Fabrice Bellard
-+ *
-+ * 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
-+ */
-+#ifndef QEMU_SPINLOCK_H
-+#define QEMU_SPINLOCK_H
-+
-+#ifdef __powerpc__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+ __asm__ __volatile__ (
-+ "0: lwarx %0,0,%1\n"
-+ " xor. %0,%3,%0\n"
-+ " bne 1f\n"
-+ " stwcx. %2,0,%1\n"
-+ " bne- 0b\n"
-+ "1: "
-+ : "=&r" (ret)
-+ : "r" (p), "r" (1), "r" (0)
-+ : "cr0", "memory");
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __i386__
-+static inline int testandset (int *p)
-+{
-+ long int readval = 0;
-+
-+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+ : "+m" (*p), "+a" (readval)
-+ : "r" (1)
-+ : "cc");
-+ return readval;
-+}
-+#endif
-+
-+#ifdef __x86_64__
-+static inline int testandset (int *p)
-+{
-+ long int readval = 0;
-+
-+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+ : "+m" (*p), "+a" (readval)
-+ : "r" (1)
-+ : "cc");
-+ return readval;
-+}
-+#endif
-+
-+#ifdef __s390__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+
-+ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
-+ " jl 0b"
-+ : "=&d" (ret)
-+ : "r" (1), "a" (p), "0" (*p)
-+ : "cc", "memory" );
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __alpha__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+ unsigned long one;
-+
-+ __asm__ __volatile__ ("0: mov 1,%2\n"
-+ " ldl_l %0,%1\n"
-+ " stl_c %2,%1\n"
-+ " beq %2,1f\n"
-+ ".subsection 2\n"
-+ "1: br 0b\n"
-+ ".previous"
-+ : "=r" (ret), "=m" (*p), "=r" (one)
-+ : "m" (*p));
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __sparc__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+
-+ __asm__ __volatile__("ldstub [%1], %0"
-+ : "=r" (ret)
-+ : "r" (p)
-+ : "memory");
-+
-+ return (ret ? 1 : 0);
-+}
-+#endif
-+
-+#ifdef __arm__
-+static inline int testandset (int *spinlock)
-+{
-+ register unsigned int ret;
-+ __asm__ __volatile__("swp %0, %1, [%2]"
-+ : "=r"(ret)
-+ : "0"(1), "r"(spinlock));
-+
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __mc68000
-+static inline int testandset (int *p)
-+{
-+ char ret;
-+ __asm__ __volatile__("tas %1; sne %0"
-+ : "=r" (ret)
-+ : "m" (p)
-+ : "cc","memory");
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __ia64
-+#include <ia64intrin.h>
-+
-+static inline int testandset (int *p)
-+{
-+ return __sync_lock_test_and_set (p, 1);
-+}
-+#endif
-+
-+typedef int spinlock_t;
-+
-+#define SPIN_LOCK_UNLOCKED 0
-+
-+#if defined(CONFIG_USER_ONLY)
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+ while (testandset(lock));
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+ *lock = 0;
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+ return !testandset(lock);
-+}
-+#else
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+ return 1;
-+}
-+#endif
-+
-+#endif
-Index: qemu/target-arm/cpu.h
-===================================================================
---- qemu.orig/target-arm/cpu.h 2007-06-29 10:47:39.000000000 +0000
-+++ qemu/target-arm/cpu.h 2007-06-29 10:47:58.000000000 +0000
-@@ -37,6 +37,7 @@
- #define EXCP_IRQ 5
- #define EXCP_FIQ 6
- #define EXCP_BKPT 7
-+#define EXCP_KERNEL_TRAP 8 /* Jumped to kernel code page. */
-
- typedef void ARMWriteCPFunc(void *opaque, int cp_info,
- int srcreg, int operand, uint32_t value);
-@@ -97,6 +98,7 @@
- uint32_t c9_data;
- uint32_t c13_fcse; /* FCSE PID. */
- uint32_t c13_context; /* Context ID. */
-+ uint32_t c13_tls; /* Context ID. */
- uint32_t c15_cpar; /* XScale Coprocessor Access Register */
- } cp15;
-
-@@ -169,6 +171,15 @@
- int cpu_arm_signal_handler(int host_signum, void *pinfo,
- void *puc);
-
-+void cpu_lock(void);
-+void cpu_unlock(void);
-+#if defined(USE_NPTL)
-+static inline void cpu_set_tls(CPUARMState *env, void *newtls)
-+{
-+ env->cp15.c13_tls = (uint32_t)(long)newtls;
-+}
-+#endif
-+
- #define CPSR_M (0x1f)
- #define CPSR_T (1 << 5)
- #define CPSR_F (1 << 6)
-@@ -180,7 +191,11 @@
- #define CPSR_J (1 << 24)
- #define CPSR_IT_0_1 (3 << 25)
- #define CPSR_Q (1 << 27)
--#define CPSR_NZCV (0xf << 28)
-+#define CPSR_V (1 << 28)
-+#define CPSR_C (1 << 29)
-+#define CPSR_Z (1 << 30)
-+#define CPSR_N (1 << 31)
-+#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V)
-
- #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV)
- /* Return the current CPSR value. */
-Index: qemu/target-arm/exec.h
-===================================================================
---- qemu.orig/target-arm/exec.h 2007-06-29 10:47:39.000000000 +0000
-+++ qemu/target-arm/exec.h 2007-06-29 10:47:58.000000000 +0000
-@@ -68,8 +68,6 @@
-
- /* In op_helper.c */
-
--void cpu_lock(void);
--void cpu_unlock(void);
- void helper_set_cp(CPUState *, uint32_t, uint32_t);
- uint32_t helper_get_cp(CPUState *, uint32_t);
- void helper_set_cp15(CPUState *, uint32_t, uint32_t);
-Index: qemu/target-arm/op.c
-===================================================================
---- qemu.orig/target-arm/op.c 2007-06-29 10:47:39.000000000 +0000
-+++ qemu/target-arm/op.c 2007-06-29 10:47:58.000000000 +0000
-@@ -891,6 +891,12 @@
- cpu_loop_exit();
- }
-
-+void OPPROTO op_kernel_trap(void)
-+{
-+ env->exception_index = EXCP_KERNEL_TRAP;
-+ cpu_loop_exit();
-+}
-+
- /* VFP support. We follow the convention used for VFP instrunctions:
- Single precition routines have a "s" suffix, double precision a
- "d" suffix. */
-Index: qemu/target-arm/op_mem.h
-===================================================================
---- qemu.orig/target-arm/op_mem.h 2007-06-29 10:47:39.000000000 +0000
-+++ qemu/target-arm/op_mem.h 2007-06-29 10:47:58.000000000 +0000
-@@ -1,5 +1,6 @@
- /* ARM memory operations. */
-
-+void helper_ld(uint32_t);
- /* Load from address T1 into T0. */
- #define MEM_LD_OP(name) \
- void OPPROTO glue(op_ld##name,MEMSUFFIX)(void) \
-Index: qemu/target-arm/translate.c
-===================================================================
---- qemu.orig/target-arm/translate.c 2007-06-29 10:47:39.000000000 +0000
-+++ qemu/target-arm/translate.c 2007-06-29 10:47:58.000000000 +0000
-@@ -3548,6 +3548,15 @@
- nb_gen_labels = 0;
- lj = -1;
- do {
-+#ifdef CONFIG_USER_ONLY
-+ /* Intercept jump to the magic kernel page. */
-+ if (dc->pc > 0xffff0000) {
-+ gen_op_kernel_trap();
-+ dc->is_jmp = DISAS_UPDATE;
-+ break;
-+ }
-+#endif
-+
- if (env->nb_breakpoints > 0) {
- for(j = 0; j < env->nb_breakpoints; j++) {
- if (env->breakpoints[j] == dc->pc) {
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch
deleted file mode 100644
index d9303e3464..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- qemu.orig/linux-user/mmap.c
-+++ qemu/linux-user/mmap.c
-@@ -29,6 +29,10 @@
-
- //#define DEBUG_MMAP
-
-+#ifndef MAP_32BIT
-+#define MAP_32BIT 0
-+#endif
-+
- /* NOTE: all the constants are the HOST ones, but addresses are target. */
- int target_mprotect(target_ulong start, target_ulong len, int prot)
- {
-@@ -234,7 +238,7 @@
- host_offset = offset & qemu_host_page_mask;
- host_len = len + offset - host_offset;
- host_start = (long)mmap(real_start ? g2h(real_start) : NULL,
-- host_len, prot, flags, fd, host_offset);
-+ host_len, prot, (flags | MAP_32BIT), fd, host_offset);
- if (host_start == -1)
- return host_start;
- /* update start so that it points to the file position at 'offset' */
-@@ -388,7 +392,7 @@
- int prot;
-
- /* XXX: use 5 args syscall */
-- new_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags);
-+ new_addr = (long)mremap(g2h(old_addr), old_size, new_size, (flags | MAP_32BIT));
- if (new_addr == -1)
- return new_addr;
- new_addr = h2g(new_addr);
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch
deleted file mode 100644
index c47e89895f..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-diff -pNaur qemu-cvs-ts-orig/hw/pci.c qemu-cvs-ts/hw/pci.c
---- qemu-cvs-ts-orig/hw/pci.c 2006-08-17 10:46:34.000000000 +0000
-+++ qemu-cvs-ts/hw/pci.c 2006-09-23 17:02:41.000000000 +0000
-@@ -34,6 +34,7 @@ struct PCIBus {
- SetIRQFunc *low_set_irq;
- void *irq_opaque;
- PCIDevice *devices[256];
-+ int irq_count[4];
- };
-
- static void pci_update_mappings(PCIDevice *d);
-@@ -49,6 +50,7 @@ PCIBus *pci_register_bus(pci_set_irq_fn
- bus->set_irq = set_irq;
- bus->irq_opaque = pic;
- bus->devfn_min = devfn_min;
-+ memset(bus->irq_count, 0, sizeof(bus->irq_count));
- first_bus = bus;
- return bus;
- }
-@@ -100,6 +102,7 @@ PCIDevice *pci_register_device(PCIBus *b
- pci_dev->bus = bus;
- pci_dev->devfn = devfn;
- pstrcpy(pci_dev->name, sizeof(pci_dev->name), name);
-+ memset(pci_dev->irq_state, 0, sizeof(pci_dev->irq_state));
-
- if (!config_read)
- config_read = pci_default_read_config;
-@@ -404,7 +407,10 @@ uint32_t pci_data_read(void *opaque, uin
- void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level)
- {
- PCIBus *bus = pci_dev->bus;
-- bus->set_irq(pci_dev, bus->irq_opaque, irq_num, level);
-+ bus->irq_count[irq_num] += level - pci_dev->irq_state[irq_num];
-+ pci_dev->irq_state[irq_num] = level;
-+ bus->set_irq(pci_dev, bus->irq_opaque,
-+ irq_num, !!bus->irq_count[irq_num]);
- }
-
- /***********************************************************/
-diff -pNaur qemu-cvs-ts-orig/vl.h qemu-cvs-ts/vl.h
---- qemu-cvs-ts-orig/vl.h 2006-09-18 01:15:29.000000000 +0000
-+++ qemu-cvs-ts/vl.h 2006-09-23 17:15:21.000000000 +0000
-@@ -733,6 +733,9 @@ struct PCIDevice {
- PCIConfigWriteFunc *config_write;
- /* ??? This is a PC-specific hack, and should be removed. */
- int irq_index;
-+
-+ /* remember last irq levels */
-+ int irq_state[4];
- };
-
- PCIDevice *pci_register_device(PCIBus *bus, const char *name,
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch
deleted file mode 100644
index bd6a51a1f5..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: qemu/sdl.c
-===================================================================
---- qemu.orig/sdl.c 2006-10-02 17:06:12.000000000 +0100
-+++ qemu/sdl.c 2006-10-02 17:06:59.000000000 +0100
-@@ -287,7 +287,7 @@
- {
- if (kbd_mouse_is_absolute()) {
- SDL_ShowCursor(1);
-- SDL_SetCursor(sdl_cursor_hidden);
-+ /* SDL_SetCursor(sdl_cursor_hidden); */
- } else {
- SDL_ShowCursor(0);
- }
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch
deleted file mode 100644
index 33a6db3f18..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch
+++ /dev/null
@@ -1,445 +0,0 @@
-diff -pNaur qemu-cvs-ts-orig/hw/usb-wacom.c qemu-cvs-ts/hw/usb-wacom.c
---- qemu-cvs-ts-orig/hw/usb-wacom.c 1970-01-01 01:00:00.000000000 +0100
-+++ qemu-cvs-ts/hw/usb-wacom.c 2006-09-22 20:44:26.000000000 +0200
-@@ -0,0 +1,408 @@
-+/*
-+ * Wacom PenPartner USB tablet emulation.
-+ *
-+ * Copyright (c) 2006 Openedhand Ltd.
-+ *
-+ * Author: Andrzej Zaborowski <balrog@zabor.org>
-+ *
-+ * Based on hw/usb-hid.c:
-+ * Copyright (c) 2005 Fabrice Bellard
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a copy
-+ * of this software and associated documentation files (the "Software"), to deal
-+ * in the Software without restriction, including without limitation the rights
-+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ * copies of the Software, and to permit persons to whom the Software is
-+ * furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ * THE SOFTWARE.
-+ */
-+#include "vl.h"
-+
-+/* Interface requests */
-+#define WACOM_GET_REPORT 0x2101
-+#define WACOM_SET_REPORT 0x2109
-+
-+/* HID interface requests */
-+#define HID_GET_REPORT 0xa101
-+#define HID_GET_IDLE 0xa102
-+#define HID_GET_PROTOCOL 0xa103
-+#define HID_SET_IDLE 0x210a
-+#define HID_SET_PROTOCOL 0x210b
-+
-+#define WACOM_MODE_HID 1
-+#define WACOM_MODE_WACOM 2
-+
-+typedef struct USBWacomState {
-+ USBDevice dev;
-+ int dx, dy, dz, buttons_state;
-+ int x, y;
-+ int mouse_grabbed;
-+ int mode;
-+} USBWacomState;
-+
-+static const uint8_t qemu_wacom_dev_descriptor[] = {
-+ 0x12, /* u8 bLength; */
-+ 0x01, /* u8 bDescriptorType; Device */
-+ 0x10, 0x10, /* u16 bcdUSB; v1.10 */
-+
-+ 0x00, /* u8 bDeviceClass; */
-+ 0x00, /* u8 bDeviceSubClass; */
-+ 0x00, /* u8 bDeviceProtocol; [ low/full speeds only ] */
-+ 0x08, /* u8 bMaxPacketSize0; 8 Bytes */
-+
-+ 0x6a, 0x05, /* u16 idVendor; */
-+ 0x00, 0x00, /* u16 idProduct; */
-+ 0x10, 0x42, /* u16 bcdDevice */
-+
-+ 0x01, /* u8 iManufacturer; */
-+ 0x02, /* u8 iProduct; */
-+ 0x00, /* u8 iSerialNumber; */
-+ 0x01, /* u8 bNumConfigurations; */
-+};
-+
-+static const uint8_t qemu_wacom_config_descriptor[] = {
-+ /* one configuration */
-+ 0x09, /* u8 bLength; */
-+ 0x02, /* u8 bDescriptorType; Configuration */
-+ 0x22, 0x00, /* u16 wTotalLength; */
-+ 0x01, /* u8 bNumInterfaces; (1) */
-+ 0x01, /* u8 bConfigurationValue; */
-+ 0x00, /* u8 iConfiguration; */
-+ 0x80, /* u8 bmAttributes;
-+ Bit 7: must be set,
-+ 6: Self-powered,
-+ 5: Remote wakeup,
-+ 4..0: resvd */
-+ 40, /* u8 MaxPower; */
-+
-+ /* one interface */
-+ 0x09, /* u8 if_bLength; */
-+ 0x04, /* u8 if_bDescriptorType; Interface */
-+ 0x00, /* u8 if_bInterfaceNumber; */
-+ 0x00, /* u8 if_bAlternateSetting; */
-+ 0x01, /* u8 if_bNumEndpoints; */
-+ 0x03, /* u8 if_bInterfaceClass; HID */
-+ 0x01, /* u8 if_bInterfaceSubClass; Boot */
-+ 0x02, /* u8 if_bInterfaceProtocol; [usb1.1 or single tt] */
-+ 0x00, /* u8 if_iInterface; */
-+
-+ /* HID descriptor */
-+ 0x09, /* u8 bLength; */
-+ 0x21, /* u8 bDescriptorType; */
-+ 0x01, 0x10, /* u16 HID_class */
-+ 0x00, /* u8 country_code */
-+ 0x01, /* u8 num_descriptors */
-+ 0x22, /* u8 type; Report */
-+ 0x6e, 0x00, /* u16 len */
-+
-+ /* one endpoint (status change endpoint) */
-+ 0x07, /* u8 ep_bLength; */
-+ 0x05, /* u8 ep_bDescriptorType; Endpoint */
-+ 0x81, /* u8 ep_bEndpointAddress; IN Endpoint 1 */
-+ 0x03, /* u8 ep_bmAttributes; Interrupt */
-+ 0x08, 0x00, /* u16 ep_wMaxPacketSize; */
-+ 0x0a, /* u8 ep_bInterval; */
-+};
-+
-+static void usb_mouse_event(void *opaque,
-+ int dx1, int dy1, int dz1, int buttons_state)
-+{
-+ USBWacomState *s = opaque;
-+
-+ s->dx += dx1;
-+ s->dy += dy1;
-+ s->dz += dz1;
-+ s->buttons_state = buttons_state;
-+}
-+
-+static void usb_wacom_event(void *opaque,
-+ int x, int y, int dz, int buttons_state)
-+{
-+ USBWacomState *s = opaque;
-+
-+ s->x = x;
-+ s->y = y;
-+ s->dz += dz;
-+ s->buttons_state = buttons_state;
-+}
-+
-+static inline int int_clamp(int val, int vmin, int vmax)
-+{
-+ if (val < vmin)
-+ return vmin;
-+ else if (val > vmax)
-+ return vmax;
-+ else
-+ return val;
-+}
-+
-+static int usb_mouse_poll(USBWacomState *s, uint8_t *buf, int len)
-+{
-+ int dx, dy, dz, b, l;
-+
-+ if (!s->mouse_grabbed) {
-+ qemu_add_mouse_event_handler(usb_mouse_event, s, 1);
-+ s->mouse_grabbed = 1;
-+ }
-+
-+ dx = int_clamp(s->dx, -128, 127);
-+ dy = int_clamp(s->dy, -128, 127);
-+ dz = int_clamp(s->dz, -128, 127);
-+
-+ s->dx -= dx;
-+ s->dy -= dy;
-+ s->dz -= dz;
-+
-+ b = 0;
-+ if (s->buttons_state & MOUSE_EVENT_LBUTTON)
-+ b |= 0x01;
-+ if (s->buttons_state & MOUSE_EVENT_RBUTTON)
-+ b |= 0x02;
-+ if (s->buttons_state & MOUSE_EVENT_MBUTTON)
-+ b |= 0x04;
-+
-+ buf[0] = b;
-+ buf[1] = dx;
-+ buf[2] = dy;
-+ l = 3;
-+ if (len >= 4) {
-+ buf[3] = dz;
-+ l = 4;
-+ }
-+ return l;
-+}
-+
-+static int usb_wacom_poll(USBWacomState *s, uint8_t *buf, int len)
-+{
-+ int b;
-+
-+ if (!s->mouse_grabbed) {
-+ qemu_add_mouse_event_handler(usb_wacom_event, s, 1);
-+ s->mouse_grabbed = 1;
-+ }
-+
-+ b = 0;
-+ if (s->buttons_state & MOUSE_EVENT_LBUTTON)
-+ b |= 0x01;
-+ if (s->buttons_state & MOUSE_EVENT_RBUTTON)
-+ b |= 0x02;
-+ if (s->buttons_state & MOUSE_EVENT_MBUTTON)
-+ b |= 0x04;
-+
-+ if (len < 7)
-+ return 0;
-+
-+ buf[0] = s->mode;
-+ buf[1] = s->x & 0xff;
-+ buf[2] = s->x >> 8;
-+ buf[3] = s->y & 0xff;
-+ buf[4] = s->y >> 8;
-+ if (b) {
-+ buf[5] = 0x40;
-+ buf[6] = 0;
-+ } else {
-+ buf[5] = 0x00;
-+ buf[6] = (unsigned char) -120;
-+ }
-+
-+ return 7;
-+}
-+
-+static void usb_wacom_handle_reset(USBDevice *dev)
-+{
-+ USBWacomState *s = (USBWacomState *) dev;
-+
-+ s->dx = 0;
-+ s->dy = 0;
-+ s->dz = 0;
-+ s->x = 0;
-+ s->y = 0;
-+ s->buttons_state = 0;
-+ s->mode = WACOM_MODE_HID;
-+}
-+
-+static int usb_wacom_handle_control(USBDevice *dev, int request, int value,
-+ int index, int length, uint8_t *data)
-+{
-+ USBWacomState *s = (USBWacomState *) dev;
-+ int ret = 0;
-+
-+ switch (request) {
-+ case DeviceRequest | USB_REQ_GET_STATUS:
-+ data[0] = (1 << USB_DEVICE_SELF_POWERED) |
-+ (dev->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP);
-+ data[1] = 0x00;
-+ ret = 2;
-+ break;
-+ case DeviceOutRequest | USB_REQ_CLEAR_FEATURE:
-+ if (value == USB_DEVICE_REMOTE_WAKEUP) {
-+ dev->remote_wakeup = 0;
-+ } else {
-+ goto fail;
-+ }
-+ ret = 0;
-+ break;
-+ case DeviceOutRequest | USB_REQ_SET_FEATURE:
-+ if (value == USB_DEVICE_REMOTE_WAKEUP) {
-+ dev->remote_wakeup = 1;
-+ } else {
-+ goto fail;
-+ }
-+ ret = 0;
-+ break;
-+ case DeviceOutRequest | USB_REQ_SET_ADDRESS:
-+ dev->addr = value;
-+ ret = 0;
-+ break;
-+ case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
-+ switch (value >> 8) {
-+ case USB_DT_DEVICE:
-+ memcpy(data, qemu_wacom_dev_descriptor,
-+ sizeof(qemu_wacom_dev_descriptor));
-+ ret = sizeof(qemu_wacom_dev_descriptor);
-+ break;
-+ case USB_DT_CONFIG:
-+ memcpy(data, qemu_wacom_config_descriptor,
-+ sizeof(qemu_wacom_config_descriptor));
-+ ret = sizeof(qemu_wacom_config_descriptor);
-+ break;
-+ case USB_DT_STRING:
-+ switch (value & 0xff) {
-+ case 0:
-+ /* language ids */
-+ data[0] = 4;
-+ data[1] = 3;
-+ data[2] = 0x09;
-+ data[3] = 0x04;
-+ ret = 4;
-+ break;
-+ case 1:
-+ /* serial number */
-+ ret = set_usb_string(data, "1");
-+ break;
-+ case 2:
-+ ret = set_usb_string(data, "Wacom PenPartner");
-+ break;
-+ case 3:
-+ /* vendor description */
-+ ret = set_usb_string(data, "QEMU " QEMU_VERSION);
-+ break;
-+ case 4:
-+ ret = set_usb_string(data, "Wacom Tablet");
-+ break;
-+ case 5:
-+ ret = set_usb_string(data, "Endpoint1 Interrupt Pipe");
-+ break;
-+ default:
-+ goto fail;
-+ }
-+ break;
-+ default:
-+ goto fail;
-+ }
-+ break;
-+ case DeviceRequest | USB_REQ_GET_CONFIGURATION:
-+ data[0] = 1;
-+ ret = 1;
-+ break;
-+ case DeviceOutRequest | USB_REQ_SET_CONFIGURATION:
-+ ret = 0;
-+ break;
-+ case DeviceRequest | USB_REQ_GET_INTERFACE:
-+ data[0] = 0;
-+ ret = 1;
-+ break;
-+ case DeviceOutRequest | USB_REQ_SET_INTERFACE:
-+ ret = 0;
-+ break;
-+ case WACOM_SET_REPORT:
-+ qemu_add_mouse_event_handler(NULL, NULL, 0);
-+ s->mouse_grabbed = 0;
-+ s->mode = data[0];
-+ ret = 0;
-+ break;
-+ case WACOM_GET_REPORT:
-+ data[0] = 0;
-+ data[1] = s->mode;
-+ ret = 2;
-+ break;
-+ /* USB HID requests */
-+ case HID_GET_REPORT:
-+ if (s->mode == WACOM_MODE_HID)
-+ ret = usb_mouse_poll(s, data, length);
-+ else if (s->mode == WACOM_MODE_WACOM)
-+ ret = usb_wacom_poll(s, data, length);
-+ break;
-+ case HID_SET_IDLE:
-+ ret = 0;
-+ break;
-+ default:
-+ fail:
-+ ret = USB_RET_STALL;
-+ break;
-+ }
-+ return ret;
-+}
-+
-+static int usb_wacom_handle_data(USBDevice *dev, int pid,
-+ uint8_t devep, uint8_t *data, int len)
-+{
-+ USBWacomState *s = (USBWacomState *) dev;
-+ int ret = 0;
-+
-+ switch (pid) {
-+ case USB_TOKEN_IN:
-+ if (devep == 1) {
-+ if (s->mode == WACOM_MODE_HID)
-+ ret = usb_mouse_poll(s, data, len);
-+ else if (s->mode == WACOM_MODE_WACOM)
-+ ret = usb_wacom_poll(s, data, len);
-+ break;
-+ }
-+ /* Fall through. */
-+ case USB_TOKEN_OUT:
-+ default:
-+ ret = USB_RET_STALL;
-+ break;
-+ }
-+ return ret;
-+}
-+
-+static void usb_wacom_handle_destroy(USBDevice *dev)
-+{
-+ USBWacomState *s = (USBWacomState *) dev;
-+
-+ qemu_add_mouse_event_handler(NULL, NULL, 0);
-+ qemu_free(s);
-+}
-+
-+USBDevice *usb_wacom_init(void)
-+{
-+ USBWacomState *s;
-+
-+ s = qemu_mallocz(sizeof(USBWacomState));
-+ if (!s)
-+ return NULL;
-+ s->dev.speed = USB_SPEED_FULL;
-+ s->dev.handle_packet = usb_generic_handle_packet;
-+
-+ s->dev.handle_reset = usb_wacom_handle_reset;
-+ s->dev.handle_control = usb_wacom_handle_control;
-+ s->dev.handle_data = usb_wacom_handle_data;
-+ s->dev.handle_destroy = usb_wacom_handle_destroy;
-+
-+ pstrcpy(s->dev.devname, sizeof(s->dev.devname),
-+ "QEMU PenPartner Tablet");
-+
-+ return (USBDevice *) s;
-+}
-diff -pNaur qemu-cvs-ts-orig/hw/usb.h qemu-cvs-ts/hw/usb.h
---- qemu-cvs-ts-orig/hw/usb.h 2006-08-12 03:04:27.000000000 +0200
-+++ qemu-cvs-ts/hw/usb.h 2006-09-21 01:40:40.000000000 +0200
-@@ -218,3 +218,6 @@ USBDevice *usb_tablet_init(void);
-
- /* usb-msd.c */
- USBDevice *usb_msd_init(const char *filename);
-+
-+/* usb-wacom.c */
-+USBDevice *usb_wacom_init(void);
-diff -pNaur qemu-cvs-ts-orig/vl.c qemu-cvs-ts/vl.c
---- qemu-cvs-ts-orig/vl.c 2006-09-10 16:39:54.000000000 +0200
-+++ qemu-cvs-ts/vl.c 2006-09-21 01:45:16.000000000 +0200
-@@ -3765,6 +3765,8 @@ static int usb_device_add(const char *de
- dev = usb_tablet_init();
- } else if (strstart(devname, "disk:", &p)) {
- dev = usb_msd_init(p);
-+ } else if (!strcmp(devname, "wacom-tablet")) {
-+ dev = usb_wacom_init();
- } else {
- return -1;
- }
-diff -pNaur qemu-cvs-ts-orig/Makefile.target qemu-cvs-ts/Makefile.target
---- qemu-cvs-ts-orig/Makefile.target 2006-09-18 03:15:29.000000000 +0200
-+++ qemu-cvs-ts/Makefile.target 2006-09-21 02:32:19.000000000 +0200
-@@ -330,6 +330,7 @@ VL_OBJS+= scsi-disk.o cdrom.o lsi53c895a
-
- # USB layer
- VL_OBJS+= usb.o usb-hub.o usb-linux.o usb-hid.o usb-ohci.o usb-msd.o
-+VL_OBJS+= usb-wacom.o
-
- # PCI network cards
- VL_OBJS+= ne2000.o rtl8139.o pcnet.o
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch
deleted file mode 100644
index ee24c15780..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- qemu-cvs-ts-orig/hw/usb-wacom.c 2006-09-29 22:53:06.000000000 +0000
-+++ qemu-cvs-ts/hw/usb-wacom.c 2006-09-29 22:44:14.000000000 +0000
-@@ -203,19 +203,18 @@ static int usb_wacom_poll(USBWacomState
- return 0;
-
- buf[0] = s->mode;
-+ buf[5] = 0x00;
- if (b) {
- buf[1] = s->x & 0xff;
- buf[2] = s->x >> 8;
- buf[3] = s->y & 0xff;
- buf[4] = s->y >> 8;
-- buf[5] = 0x40;
- buf[6] = 0;
- } else {
- buf[1] = 0;
- buf[2] = 0;
- buf[3] = 0;
- buf[4] = 0;
-- buf[5] = 0x00;
- buf[6] = (unsigned char) -127;
- }
-
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch
deleted file mode 100644
index 668d50d5f2..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch
+++ /dev/null
@@ -1,28 +0,0 @@
---- qemu-cvs-ts-orig/hw/usb-wacom.c 2006-09-29 17:27:43.000000000 +0000
-+++ qemu-cvs-ts/hw/usb-wacom.c 2006-09-29 17:48:13.000000000 +0000
-@@ -203,16 +203,20 @@ static int usb_wacom_poll(USBWacomState
- return 0;
-
- buf[0] = s->mode;
-- buf[1] = s->x & 0xff;
-- buf[2] = s->x >> 8;
-- buf[3] = s->y & 0xff;
-- buf[4] = s->y >> 8;
- if (b) {
-+ buf[1] = s->x & 0xff;
-+ buf[2] = s->x >> 8;
-+ buf[3] = s->y & 0xff;
-+ buf[4] = s->y >> 8;
- buf[5] = 0x40;
- buf[6] = 0;
- } else {
-+ buf[1] = 0;
-+ buf[2] = 0;
-+ buf[3] = 0;
-+ buf[4] = 0;
- buf[5] = 0x00;
-- buf[6] = (unsigned char) -120;
-+ buf[6] = (unsigned char) -127;
- }
-
- return 7;
diff --git a/recipes/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch b/recipes/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch
deleted file mode 100644
index cc122ebdba..0000000000
--- a/recipes/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch
+++ /dev/null
@@ -1,25 +0,0 @@
----
- linux-user/syscall.c | 10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
-
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c 2007-08-09 20:28:06.000000000 +0100
-+++ qemu/linux-user/syscall.c 2007-08-09 20:28:41.000000000 +0100
-@@ -61,7 +61,15 @@
- #define tchars host_tchars /* same as target */
- #define ltchars host_ltchars /* same as target */
-
--#include <linux/futex.h>
-+#define FUTEX_WAIT 0
-+#define FUTEX_WAKE 1
-+#define FUTEX_FD 2
-+#define FUTEX_REQUEUE 3
-+#define FUTEX_CMP_REQUEUE 4
-+#define FUTEX_WAKE_OP 5
-+#define FUTEX_LOCK_PI 6
-+#define FUTEX_UNLOCK_PI 7
-+
- #include <linux/termios.h>
- #include <linux/unistd.h>
- #include <linux/utsname.h>
diff --git a/recipes/qemu/qemu-0.9.1+svn/05_non-fatal_if_linux_hd_missing.patch b/recipes/qemu/qemu-0.9.1+svn/05_non-fatal_if_linux_hd_missing.patch
deleted file mode 100644
index a66737d9ce..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/05_non-fatal_if_linux_hd_missing.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-#DPATCHLEVEL=1
----
-# hw/pc.c | 1 -
-# 1 file changed, 1 deletion(-)
-#
-Index: trunk/hw/pc.c
-===================================================================
---- trunk.orig/hw/pc.c 2008-04-24 20:15:46.000000000 +0100
-+++ trunk/hw/pc.c 2008-04-24 20:15:49.000000000 +0100
-@@ -399,7 +399,6 @@
- if (hda == -1) {
- fprintf(stderr, "A disk image must be given for 'hda' when booting "
- "a Linux kernel\n");
-- exit(1);
- }
-
- memset(bootsect, 0, sizeof(bootsect));
diff --git a/recipes/qemu/qemu-0.9.1+svn/06_exit_segfault.patch b/recipes/qemu/qemu-0.9.1+svn/06_exit_segfault.patch
deleted file mode 100644
index bc02d31839..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/06_exit_segfault.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/main.c | 8 ++++----
-# 1 file changed, 4 insertions(+), 4 deletions(-)
-#
-Index: linux-user/main.c
-===================================================================
---- linux-user/main.c.orig 2008-04-24 20:15:46.000000000 +0100
-+++ linux-user/main.c 2008-04-24 20:15:53.000000000 +0100
-@@ -765,7 +765,7 @@
- default:
- printf ("Unhandled trap: 0x%x\n", trapnr);
- cpu_dump_state(env, stderr, fprintf, 0);
-- exit (1);
-+ _exit (1);
- }
- process_pending_signals (env);
- }
-@@ -1697,7 +1697,7 @@
- default:
- printf ("Unhandled trap: 0x%x\n", trapnr);
- cpu_dump_state(env, stderr, fprintf, 0);
-- exit (1);
-+ _exit (1);
- }
- process_pending_signals (env);
- }
-@@ -2026,7 +2026,7 @@
- for(item = cpu_log_items; item->mask != 0; item++) {
- printf("%-10s %s\n", item->name, item->help);
- }
-- exit(1);
-+ _exit(1);
- }
- cpu_set_log(mask);
- } else if (!strcmp(r, "s")) {
-@@ -2045,7 +2045,7 @@
- if (qemu_host_page_size == 0 ||
- (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) {
- fprintf(stderr, "page size must be a power of two\n");
-- exit(1);
-+ _exit(1);
- }
- } else if (!strcmp(r, "g")) {
- gdbstub_port = atoi(argv[optind++]);
diff --git a/recipes/qemu/qemu-0.9.1+svn/10_signal_jobs.patch b/recipes/qemu/qemu-0.9.1+svn/10_signal_jobs.patch
deleted file mode 100644
index d79482d2f4..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/10_signal_jobs.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/signal.c | 7 ++++++-
-# 1 file changed, 6 insertions(+), 1 deletion(-)
-#
-Index: linux-user/signal.c
-===================================================================
---- linux-user/signal.c.orig 2008-04-24 20:15:46.000000000 +0100
-+++ linux-user/signal.c 2008-04-24 20:15:55.000000000 +0100
-@@ -364,10 +364,15 @@
- k = &sigact_table[sig - 1];
- handler = k->sa._sa_handler;
- if (handler == TARGET_SIG_DFL) {
-+ if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) {
-+ kill(getpid(),SIGSTOP);
-+ return 0;
-+ } else
- /* default handler : ignore some signal. The other are fatal */
- if (sig != TARGET_SIGCHLD &&
- sig != TARGET_SIGURG &&
-- sig != TARGET_SIGWINCH) {
-+ sig != TARGET_SIGWINCH &&
-+ sig != TARGET_SIGCONT) {
- force_sig(sig);
- } else {
- return 0; /* indicate ignored */
diff --git a/recipes/qemu/qemu-0.9.1+svn/11_signal_sigaction.patch b/recipes/qemu/qemu-0.9.1+svn/11_signal_sigaction.patch
deleted file mode 100644
index cd56541b71..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/11_signal_sigaction.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/signal.c | 5 +++++
-# 1 file changed, 5 insertions(+)
-#
-Index: linux-user/signal.c
-===================================================================
---- linux-user/signal.c.orig 2008-04-24 20:15:55.000000000 +0100
-+++ linux-user/signal.c 2008-04-24 20:15:57.000000000 +0100
-@@ -512,6 +512,11 @@
-
- if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP)
- return -EINVAL;
-+
-+ /* no point doing the stuff as those are not allowed for sigaction */
-+ if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP))
-+ return -EINVAL;
-+
- k = &sigact_table[sig - 1];
- #if defined(DEBUG_SIGNAL)
- fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n",
diff --git a/recipes/qemu/qemu-0.9.1+svn/22_net_tuntap_stall.patch b/recipes/qemu/qemu-0.9.1+svn/22_net_tuntap_stall.patch
deleted file mode 100644
index 0e1038983b..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/22_net_tuntap_stall.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=0
----
-# vl.c | 2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: vl.c
-===================================================================
---- vl.c.orig 2008-04-24 20:15:46.000000000 +0100
-+++ vl.c 2008-04-24 20:15:58.000000000 +0100
-@@ -4155,7 +4155,7 @@
- return -1;
- }
- memset(&ifr, 0, sizeof(ifr));
-- ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
-+ ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;
- if (ifname[0] != '\0')
- pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
- else
diff --git a/recipes/qemu/qemu-0.9.1+svn/31_syscalls.patch b/recipes/qemu/qemu-0.9.1+svn/31_syscalls.patch
deleted file mode 100644
index 15565ae11d..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/31_syscalls.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c | 11 ++++++++---
-# 1 file changed, 8 insertions(+), 3 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2008-04-24 20:15:46.000000000 +0100
-+++ linux-user/syscall.c 2008-04-24 20:15:59.000000000 +0100
-@@ -250,6 +250,7 @@
- extern int setresgid(gid_t, gid_t, gid_t);
- extern int getresgid(gid_t *, gid_t *, gid_t *);
- extern int setgroups(int, gid_t *);
-+extern int uselib(const char*);
-
- #define ERRNO_TABLE_SIZE 1200
-
-@@ -4041,7 +4042,8 @@
- #endif
- #ifdef TARGET_NR_uselib
- case TARGET_NR_uselib:
-- goto unimplemented;
-+ ret = get_errno(uselib(path((const char*)arg1)));
-+ break;
- #endif
- #ifdef TARGET_NR_swapon
- case TARGET_NR_swapon:
-@@ -5322,7 +5324,9 @@
- goto unimplemented;
- #ifdef TARGET_NR_mincore
- case TARGET_NR_mincore:
-- goto unimplemented;
-+ /*page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE);*/
-+ ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
-+ break;
- #endif
- #ifdef TARGET_NR_madvise
- case TARGET_NR_madvise:
-@@ -5462,7 +5466,8 @@
- break;
- #ifdef TARGET_NR_readahead
- case TARGET_NR_readahead:
-- goto unimplemented;
-+ ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3));
-+ break;
- #endif
- #ifdef TARGET_NR_setxattr
- case TARGET_NR_setxattr:
diff --git a/recipes/qemu/qemu-0.9.1+svn/32_syscall_sysctl.patch b/recipes/qemu/qemu-0.9.1+svn/32_syscall_sysctl.patch
deleted file mode 100644
index d42c44cebc..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/32_syscall_sysctl.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c | 32 +++++++++++++++++++++++++++++---
-# 1 file changed, 29 insertions(+), 3 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2008-04-24 20:15:59.000000000 +0100
-+++ linux-user/syscall.c 2008-04-24 20:16:01.000000000 +0100
-@@ -52,6 +52,7 @@
- //#include <sys/user.h>
- #include <netinet/ip.h>
- #include <netinet/tcp.h>
-+#include <sys/sysctl.h>
-
- #define termios host_termios
- #define winsize host_winsize
-@@ -4758,9 +4759,34 @@
- break;
- #endif
- case TARGET_NR__sysctl:
-- /* We don't implement this, but ENOTDIR is always a safe
-- return value. */
-- ret = -TARGET_ENOTDIR;
-+ {
-+ struct __sysctl_args *args = (struct __sysctl_args *) arg1;
-+ int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i;
-+ void *oldval, *newval;
-+
-+ name_target = (int *) tswapl((long) args->name);
-+ nlen = tswapl(args->nlen);
-+ oldval = (void *) tswapl((long) args->oldval);
-+ oldlenp = (int *) tswapl((long) args->oldlenp);
-+ oldlen = tswapl(*oldlenp);
-+ newval = (void *) tswapl((long) args->newval);
-+ newlen = tswapl(args->newlen);
-+
-+ name = alloca(nlen * sizeof (int));
-+ for (i = 0; i < nlen; i++)
-+ name[i] = tswapl(name_target[i]);
-+
-+ if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) {
-+ ret = get_errno(
-+ sysctl(name, nlen, oldval, &oldlen, newval, newlen));
-+ if (!is_error(ret)) {
-+ *oldlenp = tswapl(oldlen);
-+ }
-+ } else {
-+ gemu_log("qemu: Unsupported sysctl name\n");
-+ ret = -ENOSYS;
-+ }
-+ }
- break;
- case TARGET_NR_sched_setparam:
- {
diff --git a/recipes/qemu/qemu-0.9.1+svn/33_syscall_ppc_clone.patch b/recipes/qemu/qemu-0.9.1+svn/33_syscall_ppc_clone.patch
deleted file mode 100644
index 962f821523..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/33_syscall_ppc_clone.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c | 6 +-----
-# 1 file changed, 1 insertion(+), 5 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2008-04-24 20:16:01.000000000 +0100
-+++ linux-user/syscall.c 2008-04-24 20:16:02.000000000 +0100
-@@ -2760,11 +2760,7 @@
- if (!newsp)
- newsp = env->gpr[1];
- new_env->gpr[1] = newsp;
-- {
-- int i;
-- for (i = 7; i < 32; i++)
-- new_env->gpr[i] = 0;
-- }
-+ new_env->gpr[3] = 0;
- #elif defined(TARGET_SH4)
- if (!newsp)
- newsp = env->gregs[15];
diff --git a/recipes/qemu/qemu-0.9.1+svn/39_syscall_fadvise64.patch b/recipes/qemu/qemu-0.9.1+svn/39_syscall_fadvise64.patch
deleted file mode 100644
index 845232cfca..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/39_syscall_fadvise64.patch
+++ /dev/null
@@ -1,21 +0,0 @@
----
- linux-user/syscall.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2008-04-24 20:16:02.000000000 +0100
-+++ linux-user/syscall.c 2008-04-24 20:16:03.000000000 +0100
-@@ -5350,6 +5350,12 @@
- ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
- break;
- #endif
-+#ifdef TARGET_NR_fadvise64_64
-+ case TARGET_NR_fadvise64_64:
-+ /* Just return success */
-+ ret = get_errno(0);
-+ break;
-+#endif
- #ifdef TARGET_NR_madvise
- case TARGET_NR_madvise:
- /* A straight passthrough may not be safe because qemu sometimes
diff --git a/recipes/qemu/qemu-0.9.1+svn/52_ne2000_return.patch b/recipes/qemu/qemu-0.9.1+svn/52_ne2000_return.patch
deleted file mode 100644
index e364bff731..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/52_ne2000_return.patch
+++ /dev/null
@@ -1,17 +0,0 @@
----
- hw/ne2000.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: trunk/hw/ne2000.c
-===================================================================
---- trunk.orig/hw/ne2000.c 2008-04-24 20:15:46.000000000 +0100
-+++ trunk/hw/ne2000.c 2008-04-24 20:16:05.000000000 +0100
-@@ -217,7 +217,7 @@
- NE2000State *s = opaque;
-
- if (s->cmd & E8390_STOP)
-- return 1;
-+ return 0;
- return !ne2000_buffer_full(s);
- }
-
diff --git a/recipes/qemu/qemu-0.9.1+svn/61_safe_64bit_int.patch b/recipes/qemu/qemu-0.9.1+svn/61_safe_64bit_int.patch
deleted file mode 100644
index 9a67feac6b..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/61_safe_64bit_int.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-#DPATCHLEVEL=0
----
-# dyngen-exec.h | 4 ++--
-# 1 file changed, 2 insertions(+), 2 deletions(-)
-#
-Index: dyngen-exec.h
-===================================================================
---- dyngen-exec.h.orig 2008-04-24 20:15:46.000000000 +0100
-+++ dyngen-exec.h 2008-04-24 20:16:06.000000000 +0100
-@@ -38,7 +38,7 @@
- // Linux/Sparc64 defines uint64_t
- #if !(defined (__sparc_v9__) && defined(__linux__))
- /* XXX may be done for all 64 bits targets ? */
--#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__)
-+#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__)
- typedef unsigned long uint64_t;
- #else
- typedef unsigned long long uint64_t;
-@@ -55,7 +55,7 @@
- typedef signed int int32_t;
- // Linux/Sparc64 defines int64_t
- #if !(defined (__sparc_v9__) && defined(__linux__))
--#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__)
-+#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__)
- typedef signed long int64_t;
- #else
- typedef signed long long int64_t;
diff --git a/recipes/qemu/qemu-0.9.1+svn/63_sparc_build.patch b/recipes/qemu/qemu-0.9.1+svn/63_sparc_build.patch
deleted file mode 100644
index 097f55a09e..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/63_sparc_build.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=0
----
-# sparc.ld | 2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: sparc.ld
-===================================================================
---- sparc.ld.orig 2008-04-24 20:15:46.000000000 +0100
-+++ sparc.ld 2008-04-24 20:16:07.000000000 +0100
-@@ -6,7 +6,7 @@
- SECTIONS
- {
- /* Read-only sections, merged into text segment: */
-- . = 0x60000000 + SIZEOF_HEADERS;
-+ . = 0x60000000 + 0x400;
- .interp : { *(.interp) }
- .hash : { *(.hash) }
- .dynsym : { *(.dynsym) }
diff --git a/recipes/qemu/qemu-0.9.1+svn/64_ppc_asm_constraints.patch b/recipes/qemu/qemu-0.9.1+svn/64_ppc_asm_constraints.patch
deleted file mode 100644
index 7d19817278..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/64_ppc_asm_constraints.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=1
----
-# cpu-all.h | 2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: trunk/cpu-all.h
-===================================================================
---- trunk.orig/cpu-all.h 2008-04-24 20:15:46.000000000 +0100
-+++ trunk/cpu-all.h 2008-04-24 20:16:08.000000000 +0100
-@@ -285,7 +285,7 @@
- static inline void stl_le_p(void *ptr, int v)
- {
- #ifdef __powerpc__
-- __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr));
-+ __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory");
- #else
- uint8_t *p = ptr;
- p[0] = v;
diff --git a/recipes/qemu/qemu-0.9.1+svn/65_kfreebsd.patch b/recipes/qemu/qemu-0.9.1+svn/65_kfreebsd.patch
deleted file mode 100644
index 028e85a878..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/65_kfreebsd.patch
+++ /dev/null
@@ -1,35 +0,0 @@
----
- configure | 6 ++++++
- vl.c | 2 ++
- 2 files changed, 8 insertions(+)
-
-Index: configure
-===================================================================
---- configure.orig 2008-04-24 20:15:46.000000000 +0100
-+++ configure 2008-04-24 20:16:09.000000000 +0100
-@@ -135,6 +135,12 @@
- kqemu="yes"
- fi
- ;;
-+GNU/kFreeBSD)
-+oss="yes"
-+if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
-+ kqemu="yes"
-+fi
-+;;
- FreeBSD)
- bsd="yes"
- oss="yes"
-Index: vl.c
-===================================================================
---- vl.c.orig 2008-04-24 20:15:58.000000000 +0100
-+++ vl.c 2008-04-24 20:16:09.000000000 +0100
-@@ -97,6 +97,8 @@
- #include <stropts.h>
- #endif
- #endif
-+#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
-+#include <freebsd/stdlib.h>
- #else
- #include <winsock2.h>
- int inet_aton(const char *cp, struct in_addr *ia);
diff --git a/recipes/qemu/qemu-0.9.1+svn/66_tls_ld.patch b/recipes/qemu/qemu-0.9.1+svn/66_tls_ld.patch
deleted file mode 100644
index cbd3f873d8..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/66_tls_ld.patch
+++ /dev/null
@@ -1,55 +0,0 @@
----
- arm.ld | 7 +++++++
- i386.ld | 7 +++++++
- 2 files changed, 14 insertions(+)
-
-Index: arm.ld
-===================================================================
---- arm.ld.orig 2008-04-24 20:15:45.000000000 +0100
-+++ arm.ld 2008-04-24 20:16:11.000000000 +0100
-@@ -26,6 +26,10 @@
- { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
- .rela.rodata :
- { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
-+ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
-+ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
-+ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
-+ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
- .rel.got : { *(.rel.got) }
- .rela.got : { *(.rela.got) }
- .rel.ctors : { *(.rel.ctors) }
-@@ -58,6 +62,9 @@
- .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
- __exidx_end = .;
- .reginfo : { *(.reginfo) }
-+ /* Thread Local Storage sections */
-+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
- /* Adjust the address for the data segment. We want to adjust up to
- the same address within the page on the next page up. */
- . = ALIGN(0x100000) + (. & (0x100000 - 1));
-Index: i386.ld
-===================================================================
---- i386.ld.orig 2008-04-24 20:15:45.000000000 +0100
-+++ i386.ld 2008-04-24 20:16:11.000000000 +0100
-@@ -28,6 +28,10 @@
- { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
- .rela.rodata :
- { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
-+ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
-+ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
-+ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
-+ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
- .rel.got : { *(.rel.got) }
- .rela.got : { *(.rela.got) }
- .rel.ctors : { *(.rel.ctors) }
-@@ -53,6 +57,9 @@
- _etext = .;
- PROVIDE (etext = .);
- .fini : { *(.fini) } =0x47ff041f
-+ /* Thread Local Storage sections */
-+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
- . = ALIGN(32 / 8);
- PROVIDE (__preinit_array_start = .);
- .preinit_array : { *(.preinit_array) }
diff --git a/recipes/qemu/qemu-0.9.1+svn/91-oh-sdl-cursor.patch b/recipes/qemu/qemu-0.9.1+svn/91-oh-sdl-cursor.patch
deleted file mode 100644
index b3d95a4534..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/91-oh-sdl-cursor.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-=== modified file 'sdl.c'
----
- sdl.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: sdl.c
-===================================================================
---- sdl.c.orig 2008-04-24 20:15:45.000000000 +0100
-+++ sdl.c 2008-04-24 20:16:12.000000000 +0100
-@@ -247,7 +247,7 @@
-
- if (kbd_mouse_is_absolute()) {
- SDL_ShowCursor(1);
-- SDL_SetCursor(sdl_cursor_hidden);
-+ /* SDL_SetCursor(sdl_cursor_hidden); */
- } else {
- SDL_ShowCursor(0);
- }
diff --git a/recipes/qemu/qemu-0.9.1+svn/configure_symlinkpath_fix.patch b/recipes/qemu/qemu-0.9.1+svn/configure_symlinkpath_fix.patch
deleted file mode 100644
index 3ec304a38c..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/configure_symlinkpath_fix.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-Index: qemu-0.9.1/configure
-===================================================================
---- qemu-0.9.1.orig/configure 2008-01-24 15:33:13.000000000 +0000
-+++ qemu-0.9.1/configure 2008-01-24 15:45:50.000000000 +0000
-@@ -209,15 +209,17 @@
-
- # find source path
- source_path=`dirname "$0"`
-+source_path_used="no"
-+workdir=`pwd`
-+workdir=`readlink -f $workdir`
- if [ -z "$source_path" ]; then
-- source_path=`pwd`
-+ source_path=$workdir
- else
- source_path=`cd "$source_path"; pwd`
--fi
--if test "$source_path" = `pwd` ; then
-- source_path_used="no"
--else
-- source_path_used="yes"
-+ source_path=`readlink -f $source_path`
-+ if test "$source_path" != "$workdir" ; then
-+ source_path_used="yes"
-+ fi
- fi
-
- werror="no"
diff --git a/recipes/qemu/qemu-0.9.1+svn/fix_baum_c_compilation.patch b/recipes/qemu/qemu-0.9.1+svn/fix_baum_c_compilation.patch
deleted file mode 100644
index a2eb438ed9..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/fix_baum_c_compilation.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Index: trunk/hw/baum.c
-===================================================================
---- trunk.orig/hw/baum.c 2008-11-29 05:12:40.418390606 +0300
-+++ trunk/hw/baum.c 2008-11-29 05:13:11.498378426 +0300
-@@ -569,8 +569,10 @@ CharDriverState *chr_baum_init(void)
- CharDriverState *chr;
- brlapi_handle_t *handle;
- #ifdef CONFIG_SDL
-+#ifdef SDL_VIDEO_DRIVER_X11
- SDL_SysWMinfo info;
- #endif
-+#endif
- int tty;
-
- baum = qemu_mallocz(sizeof(BaumDriverState));
-@@ -605,12 +607,14 @@ CharDriverState *chr_baum_init(void)
- }
-
- #ifdef CONFIG_SDL
-+#ifdef SDL_VIDEO_DRIVER_X11
- memset(&info, 0, sizeof(info));
- SDL_VERSION(&info.version);
- if (SDL_GetWMInfo(&info))
- tty = info.info.x11.wmwindow;
- else
- #endif
-+#endif
- tty = BRLAPI_TTY_DEFAULT;
-
- if (brlapi__enterTtyMode(handle, tty, NULL) == -1) {
diff --git a/recipes/qemu/qemu-0.9.1+svn/fix_brk.patch b/recipes/qemu/qemu-0.9.1+svn/fix_brk.patch
deleted file mode 100644
index f15e001dd6..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/fix_brk.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-Index: trunk/linux-user/syscall.c
-===================================================================
---- trunk.orig/linux-user/syscall.c 2008-04-24 20:16:24.000000000 +0100
-+++ trunk/linux-user/syscall.c 2008-04-24 20:16:32.000000000 +0100
-@@ -440,7 +440,7 @@
- if (!new_brk)
- return target_brk;
- if (new_brk < target_original_brk)
-- return -TARGET_ENOMEM;
-+ return target_brk;
-
- brk_page = HOST_PAGE_ALIGN(target_brk);
-
-@@ -455,12 +455,11 @@
- mapped_addr = get_errno(target_mmap(brk_page, new_alloc_size,
- PROT_READ|PROT_WRITE,
- MAP_ANON|MAP_FIXED|MAP_PRIVATE, 0, 0));
-- if (is_error(mapped_addr)) {
-- return mapped_addr;
-- } else {
-+
-+ if (!is_error(mapped_addr))
- target_brk = new_brk;
-- return target_brk;
-- }
-+
-+ return target_brk;
- }
-
- static inline abi_long copy_from_user_fdset(fd_set *fds,
-Index: trunk/linux-user/mmap.c
-===================================================================
---- trunk.orig/linux-user/mmap.c 2008-04-24 20:16:16.000000000 +0100
-+++ trunk/linux-user/mmap.c 2008-04-24 20:16:32.000000000 +0100
-@@ -264,6 +264,9 @@
- host_start += offset - host_offset;
- start = h2g(host_start);
- } else {
-+ int flg;
-+ target_ulong addr;
-+
- if (start & ~TARGET_PAGE_MASK) {
- errno = EINVAL;
- return -1;
-@@ -271,6 +274,14 @@
- end = start + len;
- real_end = HOST_PAGE_ALIGN(end);
-
-+ for(addr = real_start; addr < real_end; addr += TARGET_PAGE_SIZE) {
-+ flg = page_get_flags(addr);
-+ if( flg & PAGE_RESERVED ) {
-+ errno = ENXIO;
-+ return -1;
-+ }
-+ }
-+
- /* worst case: we cannot map the file because the offset is not
- aligned, so we read it */
- if (!(flags & MAP_ANONYMOUS) &&
diff --git a/recipes/qemu/qemu-0.9.1+svn/fix_dirent_h_include.patch b/recipes/qemu/qemu-0.9.1+svn/fix_dirent_h_include.patch
deleted file mode 100644
index 1320422aa7..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/fix_dirent_h_include.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/linux-user/syscall.c~ 2008-11-10 18:39:25.000000000 -0200
-+++ b/linux-user/syscall.c 2008-11-10 18:39:25.000000000 -0200
-@@ -76,8 +76,8 @@
- #include <linux/cdrom.h>
- #include <linux/hdreg.h>
- #include <linux/soundcard.h>
--#include <linux/dirent.h>
- #include <linux/kd.h>
-+#include <dirent.h>
-
- #include "qemu.h"
- #include "qemu_spinlock.h"
diff --git a/recipes/qemu/qemu-0.9.1+svn/fix_protection_bits.patch b/recipes/qemu/qemu-0.9.1+svn/fix_protection_bits.patch
deleted file mode 100644
index ee2b077602..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/fix_protection_bits.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: qemu-0.9.1/linux-user/mmap.c
-===================================================================
---- qemu-0.9.1.orig/linux-user/mmap.c 2008-04-16 14:10:26.000000000 +0100
-+++ qemu-0.9.1/linux-user/mmap.c 2008-04-16 14:10:51.000000000 +0100
-@@ -49,8 +49,7 @@
- end = start + len;
- if (end < start)
- return -EINVAL;
-- if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC))
-- return -EINVAL;
-+ prot = prot & (PROT_READ | PROT_WRITE | PROT_EXEC);
- if (len == 0)
- return 0;
-
diff --git a/recipes/qemu/qemu-0.9.1+svn/fix_segfault.patch b/recipes/qemu/qemu-0.9.1+svn/fix_segfault.patch
deleted file mode 100644
index 224a8b813d..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/fix_segfault.patch
+++ /dev/null
@@ -1,37 +0,0 @@
----
- linux-user/syscall.c | 22 ----------------------
- 1 file changed, 22 deletions(-)
-
-Index: trunk/linux-user/syscall.c
-===================================================================
---- trunk.orig/linux-user/syscall.c 2008-04-24 20:16:21.000000000 +0100
-+++ trunk/linux-user/syscall.c 2008-04-24 20:16:24.000000000 +0100
-@@ -5728,28 +5728,6 @@
- goto unimplemented_nowarn;
- #endif
-
--#ifdef TARGET_NR_clock_gettime
-- case TARGET_NR_clock_gettime:
-- {
-- struct timespec ts;
-- ret = get_errno(clock_gettime(arg1, &ts));
-- if (!is_error(ret)) {
-- host_to_target_timespec(arg2, &ts);
-- }
-- break;
-- }
--#endif
--#ifdef TARGET_NR_clock_getres
-- case TARGET_NR_clock_getres:
-- {
-- struct timespec ts;
-- ret = get_errno(clock_getres(arg1, &ts));
-- if (!is_error(ret)) {
-- host_to_target_timespec(arg2, &ts);
-- }
-- break;
-- }
--#endif
-
- #if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address)
- case TARGET_NR_set_tid_address:
diff --git a/recipes/qemu/qemu-0.9.1+svn/no-strip.patch b/recipes/qemu/qemu-0.9.1+svn/no-strip.patch
deleted file mode 100644
index 4813dd4e2b..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/no-strip.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Index: trunk/Makefile
-===================================================================
---- trunk.orig/Makefile 2008-04-24 20:15:37.000000000 +0100
-+++ trunk/Makefile 2008-04-24 20:16:30.000000000 +0100
-@@ -196,7 +196,7 @@
- install: all $(if $(BUILD_DOCS),install-doc)
- mkdir -p "$(DESTDIR)$(bindir)"
- ifneq ($(TOOLS),)
-- $(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)"
-+ $(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)"
- endif
- mkdir -p "$(DESTDIR)$(datadir)"
- set -e; for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
-Index: trunk/Makefile.target
-===================================================================
---- trunk.orig/Makefile.target 2008-04-24 20:15:37.000000000 +0100
-+++ trunk/Makefile.target 2008-04-24 20:16:30.000000000 +0100
-@@ -685,7 +685,7 @@
-
- install: all
- ifneq ($(PROGS),)
-- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
-+ $(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)"
- endif
-
- # Include automatically generated dependency files
diff --git a/recipes/qemu/qemu-0.9.1+svn/qemu-0.9.0-nptl.patch b/recipes/qemu/qemu-0.9.1+svn/qemu-0.9.0-nptl.patch
deleted file mode 100644
index ac68ebf460..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/qemu-0.9.0-nptl.patch
+++ /dev/null
@@ -1,1100 +0,0 @@
----
- configure | 25 ++++++
- exec-all.h | 165 ------------------------------------------
- linux-user/arm/syscall.h | 4 -
- linux-user/main.c | 94 +++++++++++++++++++++---
- linux-user/qemu.h | 3
- linux-user/syscall.c | 91 ++++++++++++++++++++++-
- qemu_spinlock.h | 181 +++++++++++++++++++++++++++++++++++++++++++++++
- target-arm/cpu.h | 10 ++
- target-arm/op.c | 6 +
- target-arm/translate.c | 9 ++
- 10 files changed, 405 insertions(+), 183 deletions(-)
-
-Index: trunk/configure
-===================================================================
---- trunk.orig/configure 2008-04-24 20:16:52.000000000 +0100
-+++ trunk/configure 2008-04-24 20:16:53.000000000 +0100
-@@ -112,6 +112,7 @@
- build_docs="no"
- uname_release=""
- curses="yes"
-+nptl="yes"
-
- # OS specific
- targetos=`uname -s`
-@@ -339,6 +340,8 @@
- ;;
- *) echo "ERROR: unknown option $opt"; show_help="yes"
- ;;
-+ --disable-nptl) nptl="no"
-+ ;;
- esac
- done
-
-@@ -436,6 +439,7 @@
- echo " --disable-linux-user disable all linux usermode emulation targets"
- echo " --enable-darwin-user enable all darwin usermode emulation targets"
- echo " --disable-darwin-user disable all darwin usermode emulation targets"
-+echo " --disable-nptl disable usermode NPTL guest support"
- echo " --fmod-lib path to FMOD library"
- echo " --fmod-inc path to FMOD includes"
- echo " --enable-uname-release=R Return R for uname -r in usermode emulation"
-@@ -647,6 +651,23 @@
- }
- EOF
-
-+# check NPTL support
-+cat > $TMPC <<EOF
-+#include <sched.h>
-+void foo()
-+{
-+#ifndef CLONE_SETTLS
-+#error bork
-+#endif
-+}
-+EOF
-+
-+if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
-+ :
-+else
-+ nptl="no"
-+fi
-+
- ##########################################
- # SDL probe
-
-@@ -845,6 +866,7 @@
- echo "Documentation $build_docs"
- [ ! -z "$uname_release" ] && \
- echo "uname -r $uname_release"
-+echo "NPTL support $nptl"
-
- if test $sdl_too_old = "yes"; then
- echo "-> Your SDL version is too old - please upgrade to have SDL support"
-@@ -1228,6 +1250,9 @@
- echo "#define TARGET_ARM 1" >> $config_h
- echo "#define CONFIG_NO_DYNGEN_OP 1" >> $config_h
- bflt="yes"
-+ if test "$nptl" = "yes" ; then
-+ echo "#define USE_NPTL 1" >> $config_h
-+ fi
- ;;
- cris)
- echo "TARGET_ARCH=cris" >> $config_mak
-Index: trunk/exec-all.h
-===================================================================
---- trunk.orig/exec-all.h 2008-04-24 20:16:41.000000000 +0100
-+++ trunk/exec-all.h 2008-04-24 20:16:53.000000000 +0100
-@@ -303,217 +303,7 @@
- extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
- extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
-
--#if defined(__hppa__)
--
--typedef int spinlock_t[4];
--
--#define SPIN_LOCK_UNLOCKED { 1, 1, 1, 1 }
--
--static inline void resetlock (spinlock_t *p)
--{
-- (*p)[0] = (*p)[1] = (*p)[2] = (*p)[3] = 1;
--}
--
--#else
--
--typedef int spinlock_t;
--
--#define SPIN_LOCK_UNLOCKED 0
--
--static inline void resetlock (spinlock_t *p)
--{
-- *p = SPIN_LOCK_UNLOCKED;
--}
--
--#endif
--
--#if defined(__powerpc__)
--static inline int testandset (int *p)
--{
-- int ret;
-- __asm__ __volatile__ (
-- "0: lwarx %0,0,%1\n"
-- " xor. %0,%3,%0\n"
-- " bne 1f\n"
-- " stwcx. %2,0,%1\n"
-- " bne- 0b\n"
-- "1: "
-- : "=&r" (ret)
-- : "r" (p), "r" (1), "r" (0)
-- : "cr0", "memory");
-- return ret;
--}
--#elif defined(__i386__)
--static inline int testandset (int *p)
--{
-- long int readval = 0;
--
-- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-- : "+m" (*p), "+a" (readval)
-- : "r" (1)
-- : "cc");
-- return readval;
--}
--#elif defined(__x86_64__)
--static inline int testandset (int *p)
--{
-- long int readval = 0;
--
-- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-- : "+m" (*p), "+a" (readval)
-- : "r" (1)
-- : "cc");
-- return readval;
--}
--#elif defined(__s390__)
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
-- " jl 0b"
-- : "=&d" (ret)
-- : "r" (1), "a" (p), "0" (*p)
-- : "cc", "memory" );
-- return ret;
--}
--#elif defined(__alpha__)
--static inline int testandset (int *p)
--{
-- int ret;
-- unsigned long one;
--
-- __asm__ __volatile__ ("0: mov 1,%2\n"
-- " ldl_l %0,%1\n"
-- " stl_c %2,%1\n"
-- " beq %2,1f\n"
-- ".subsection 2\n"
-- "1: br 0b\n"
-- ".previous"
-- : "=r" (ret), "=m" (*p), "=r" (one)
-- : "m" (*p));
-- return ret;
--}
--#elif defined(__sparc__)
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__("ldstub [%1], %0"
-- : "=r" (ret)
-- : "r" (p)
-- : "memory");
--
-- return (ret ? 1 : 0);
--}
--#elif defined(__arm__)
--static inline int testandset (int *spinlock)
--{
-- register unsigned int ret;
-- __asm__ __volatile__("swp %0, %1, [%2]"
-- : "=r"(ret)
-- : "0"(1), "r"(spinlock));
--
-- return ret;
--}
--#elif defined(__mc68000)
--static inline int testandset (int *p)
--{
-- char ret;
-- __asm__ __volatile__("tas %1; sne %0"
-- : "=r" (ret)
-- : "m" (p)
-- : "cc","memory");
-- return ret;
--}
--#elif defined(__hppa__)
--
--/* Because malloc only guarantees 8-byte alignment for malloc'd data,
-- and GCC only guarantees 8-byte alignment for stack locals, we can't
-- be assured of 16-byte alignment for atomic lock data even if we
-- specify "__attribute ((aligned(16)))" in the type declaration. So,
-- we use a struct containing an array of four ints for the atomic lock
-- type and dynamically select the 16-byte aligned int from the array
-- for the semaphore. */
--#define __PA_LDCW_ALIGNMENT 16
--static inline void *ldcw_align (void *p) {
-- unsigned long a = (unsigned long)p;
-- a = (a + __PA_LDCW_ALIGNMENT - 1) & ~(__PA_LDCW_ALIGNMENT - 1);
-- return (void *)a;
--}
--
--static inline int testandset (spinlock_t *p)
--{
-- unsigned int ret;
-- p = ldcw_align(p);
-- __asm__ __volatile__("ldcw 0(%1),%0"
-- : "=r" (ret)
-- : "r" (p)
-- : "memory" );
-- return !ret;
--}
--
--#elif defined(__ia64)
--
--#include <ia64intrin.h>
--
--static inline int testandset (int *p)
--{
-- return __sync_lock_test_and_set (p, 1);
--}
--#elif defined(__mips__)
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__ (
-- " .set push \n"
-- " .set noat \n"
-- " .set mips2 \n"
-- "1: li $1, 1 \n"
-- " ll %0, %1 \n"
-- " sc $1, %1 \n"
-- " beqz $1, 1b \n"
-- " .set pop "
-- : "=r" (ret), "+R" (*p)
-- :
-- : "memory");
--
-- return ret;
--}
--#else
--#error unimplemented CPU support
--#endif
--
--#if defined(CONFIG_USER_ONLY)
--static inline void spin_lock(spinlock_t *lock)
--{
-- while (testandset(lock));
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
-- resetlock(lock);
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
-- return !testandset(lock);
--}
--#else
--static inline void spin_lock(spinlock_t *lock)
--{
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
-- return 1;
--}
--#endif
-+#include "qemu_spinlock.h"
-
- extern spinlock_t tb_lock;
-
-Index: trunk/linux-user/arm/syscall.h
-===================================================================
---- trunk.orig/linux-user/arm/syscall.h 2008-04-24 20:16:41.000000000 +0100
-+++ trunk/linux-user/arm/syscall.h 2008-04-24 20:16:53.000000000 +0100
-@@ -28,7 +28,9 @@
- #define ARM_SYSCALL_BASE 0x900000
- #define ARM_THUMB_SYSCALL 0
-
--#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
-+#define ARM_NR_BASE 0xf0000
-+#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
-+#define ARM_NR_set_tls (ARM_NR_BASE + 5)
-
- #define ARM_NR_semihosting 0x123456
- #define ARM_NR_thumb_semihosting 0xAB
-Index: trunk/linux-user/main.c
-===================================================================
---- trunk.orig/linux-user/main.c 2008-04-24 20:16:47.000000000 +0100
-+++ trunk/linux-user/main.c 2008-04-24 20:17:38.000000000 +0100
-@@ -365,6 +365,50 @@
- }
- }
-
-+/* Handle a jump to the kernel code page. */
-+static int
-+do_kernel_trap(CPUARMState *env)
-+{
-+ uint32_t addr;
-+ uint32_t *ptr;
-+ uint32_t cpsr;
-+
-+ switch (env->regs[15]) {
-+ case 0xffff0fc0: /* __kernel_cmpxchg */
-+ /* XXX: This only works between threads, not between processes.
-+ Use native atomic operations. */
-+ /* ??? This probably breaks horribly if the access segfaults. */
-+ cpu_lock();
-+ ptr = (uint32_t *)env->regs[2];
-+ cpsr = cpsr_read(env);
-+ if (*ptr == env->regs[0]) {
-+ *ptr = env->regs[1];
-+ env->regs[0] = 0;
-+ cpsr |= CPSR_C;
-+ } else {
-+ env->regs[0] = -1;
-+ cpsr &= ~CPSR_C;
-+ }
-+ cpsr_write(env, cpsr, CPSR_C);
-+ cpu_unlock();
-+ break;
-+ case 0xffff0fe0: /* __kernel_get_tls */
-+ env->regs[0] = env->cp15.c13_tls2;
-+ break;
-+ default:
-+ return 1;
-+ }
-+ /* Jump back to the caller. */
-+ addr = env->regs[14];
-+ if (addr & 1) {
-+ env->thumb = 1;
-+ addr &= ~1;
-+ }
-+ env->regs[15] = addr;
-+
-+ return 0;
-+}
-+
- void cpu_loop(CPUARMState *env)
- {
- int trapnr;
-@@ -475,10 +519,8 @@
- }
- }
-
-- if (n == ARM_NR_cacheflush) {
-- arm_cache_flush(env->regs[0], env->regs[1]);
-- } else if (n == ARM_NR_semihosting
-- || n == ARM_NR_thumb_semihosting) {
-+ if (n == ARM_NR_semihosting
-+ || n == ARM_NR_thumb_semihosting) {
- env->regs[0] = do_arm_semihosting (env);
- } else if (n == 0 || n >= ARM_SYSCALL_BASE
- || (env->thumb && n == ARM_THUMB_SYSCALL)) {
-@@ -489,14 +531,34 @@
- n -= ARM_SYSCALL_BASE;
- env->eabi = 0;
- }
-- env->regs[0] = do_syscall(env,
-- n,
-- env->regs[0],
-- env->regs[1],
-- env->regs[2],
-- env->regs[3],
-- env->regs[4],
-- env->regs[5]);
-+ if ( n > ARM_NR_BASE) {
-+ switch (n)
-+ {
-+ case ARM_NR_cacheflush:
-+ arm_cache_flush(env->regs[0], env->regs[1]);
-+ break;
-+#ifdef USE_NPTL
-+ case ARM_NR_set_tls:
-+ cpu_set_tls(env, env->regs[0]);
-+ env->regs[0] = 0;
-+ break;
-+#endif
-+ default:
-+ printf ("Error: Bad syscall: %x\n", n);
-+ goto error;
-+ }
-+ }
-+ else
-+ {
-+ env->regs[0] = do_syscall(env,
-+ n,
-+ env->regs[0],
-+ env->regs[1],
-+ env->regs[2],
-+ env->regs[3],
-+ env->regs[4],
-+ env->regs[5]);
-+ }
- } else {
- goto error;
- }
-@@ -535,6 +597,10 @@
- }
- }
- break;
-+ case EXCP_KERNEL_TRAP:
-+ if (do_kernel_trap(env))
-+ goto error;
-+ break;
- default:
- error:
- fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
-@@ -1994,6 +2060,11 @@
- int drop_ld_preload = 0, environ_count = 0;
- char **target_environ, **wrk, **dst;
-
-+ char *assume_kernel = getenv("QEMU_ASSUME_KERNEL");
-+
-+ if (assume_kernel)
-+ setenv("LD_ASSUME_KERNEL", assume_kernel, 1);
-+
- if (argc <= 1)
- usage();
-
-@@ -2403,6 +2474,10 @@
- ts->heap_base = info->brk;
- /* This will be filled in on the first SYS_HEAPINFO call. */
- ts->heap_limit = 0;
-+ /* Register the magic kernel code page. The cpu will generate a
-+ special exception when it tries to execute code here. We can't
-+ put real code here because it may be in use by the host kernel. */
-+ page_set_flags(0xffff0000, 0xffff0fff, 0);
- #endif
-
- if (gdbstub_port) {
-Index: trunk/linux-user/qemu.h
-===================================================================
---- trunk.orig/linux-user/qemu.h 2008-04-24 20:16:41.000000000 +0100
-+++ trunk/linux-user/qemu.h 2008-04-24 20:16:53.000000000 +0100
-@@ -107,6 +107,9 @@
- uint32_t heap_base;
- uint32_t heap_limit;
- #endif
-+#ifdef USE_NPTL
-+ uint32_t *child_tidptr;
-+#endif
- int used; /* non zero if used */
- struct image_info *info;
- uint8_t stack[0];
-Index: trunk/linux-user/syscall.c
-===================================================================
---- trunk.orig/linux-user/syscall.c 2008-04-24 20:16:50.000000000 +0100
-+++ trunk/linux-user/syscall.c 2008-04-24 20:19:52.000000000 +0100
-@@ -61,6 +61,7 @@
- #define tchars host_tchars /* same as target */
- #define ltchars host_ltchars /* same as target */
-
-+#include <linux/futex.h>
- #include <linux/termios.h>
- #include <linux/unistd.h>
- #include <linux/utsname.h>
-@@ -71,9 +72,18 @@
- #include <linux/kd.h>
-
- #include "qemu.h"
-+#include "qemu_spinlock.h"
-
- //#define DEBUG
-
-+#ifdef USE_NPTL
-+#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
-+ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
-+#else
-+/* XXX: Hardcode the above values. */
-+#define CLONE_NPTL_FLAGS2 0
-+#endif
-+
- #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
- || defined(TARGET_M68K) || defined(TARGET_SH4) || defined(TARGET_CRIS)
- /* 16 bit uid wrappers emulation */
-@@ -2695,16 +2705,25 @@
- return 0;
- }
- #endif
--
- #endif /* defined(TARGET_I386) */
-
- /* this stack is the equivalent of the kernel stack associated with a
- thread/process */
- #define NEW_STACK_SIZE 8192
-
-+#ifdef USE_NPTL
-+static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
-+#endif
-+
- static int clone_func(void *arg)
- {
- CPUState *env = arg;
-+#ifdef HAVE_NPTL
-+ /* Wait until the parent has finshed initializing the tls state. */
-+ while (!spin_trylock(&nptl_lock))
-+ usleep(1);
-+ spin_unlock(&nptl_lock);
-+#endif
- cpu_loop(env);
- /* never exits */
- return 0;
-@@ -2712,15 +2731,27 @@
-
- /* do_fork() Must return host values and target errnos (unlike most
- do_*() functions). */
--int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp)
-+int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
-+ uint32_t *parent_tidptr, void *newtls,
-+ uint32_t *child_tidptr)
- {
- int ret;
- TaskState *ts;
- uint8_t *new_stack;
- CPUState *new_env;
-+#if defined(TARGET_I386)
-+ uint64_t *new_gdt_table;
-+#endif
-+#ifdef USE_NPTL
-+ unsigned int nptl_flags;
-
-+ if (flags & CLONE_PARENT_SETTID)
-+ *parent_tidptr = gettid();
-+#endif
- if (flags & CLONE_VM) {
- ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
-+ if (!ts)
-+ return -ENOMEM;
- memset(ts, 0, sizeof(TaskState));
- new_stack = ts->stack;
- ts->used = 1;
-@@ -2732,6 +2763,29 @@
- #if defined(TARGET_I386)
- if (!newsp)
- newsp = env->regs[R_ESP];
-+ new_gdt_table = malloc(9 * 8);
-+ if (!new_gdt_table) {
-+ free(new_env);
-+ return -ENOMEM;
-+ }
-+ /* Copy main GDT table from parent, but clear TLS entries */
-+ memcpy(new_gdt_table, g2h(env->gdt.base), 6 * 8);
-+ memset(&new_gdt_table[6], 0, 3 * 8);
-+ new_env->gdt.base = h2g(new_gdt_table);
-+ if (flags & 0x00080000 /* CLONE_SETTLS */) {
-+ ret = do_set_thread_area(new_env, new_env->regs[R_ESI]);
-+ if (ret) {
-+ free(new_gdt_table);
-+ free(new_env);
-+ return ret;
-+ }
-+ }
-+ cpu_x86_load_seg(env, R_CS, new_env->regs[R_CS]);
-+ cpu_x86_load_seg(env, R_DS, new_env->regs[R_DS]);
-+ cpu_x86_load_seg(env, R_ES, new_env->regs[R_ES]);
-+ cpu_x86_load_seg(env, R_SS, new_env->regs[R_SS]);
-+ cpu_x86_load_seg(env, R_FS, new_env->regs[R_FS]);
-+ cpu_x86_load_seg(env, R_GS, new_env->regs[R_GS]);
- new_env->regs[R_ESP] = newsp;
- new_env->regs[R_EAX] = 0;
- #elif defined(TARGET_ARM)
-@@ -2784,16 +2838,67 @@
- #error unsupported target CPU
- #endif
- new_env->opaque = ts;
-+#ifdef USE_NPTL
-+ nptl_flags = flags;
-+ flags &= ~CLONE_NPTL_FLAGS2;
-+
-+ if (nptl_flags & CLONE_CHILD_CLEARTID) {
-+ ts->child_tidptr = child_tidptr;
-+ }
-+
-+ if (nptl_flags & CLONE_SETTLS)
-+ cpu_set_tls (new_env, newtls);
-+
-+ /* Grab the global cpu lock so that the thread setup appears
-+ atomic. */
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ spin_lock(&nptl_lock);
-+
-+#else
-+ if (flags & CLONE_NPTL_FLAGS2)
-+ return -EINVAL;
-+#endif
-+
-+ if (CLONE_VFORK & flags)
-+ flags ^= CLONE_VM;
- #ifdef __ia64__
- ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #else
- ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #endif
-+#ifdef USE_NPTL
-+ if (ret != -1) {
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ *child_tidptr = ret;
-+ }
-+
-+ /* Allow the child to continue. */
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ spin_unlock(&nptl_lock);
-+#endif
- } else {
- /* if no CLONE_VM, we consider it is a fork */
-- if ((flags & ~CSIGNAL) != 0)
-+ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
- return -EINVAL;
- ret = fork();
-+#ifdef USE_NPTL
-+ /* There is a race condition here. The parent process could
-+ theoretically read the TID in the child process before the child
-+ tid is set. This would require using either ptrace
-+ (not implemented) or having *_tidptr to point at a shared memory
-+ mapping. We can't repeat the spinlock hack used above because
-+ the child process gets its own copy of the lock. */
-+ if (ret == 0) {
-+ /* Child Process. */
-+ if (flags & CLONE_CHILD_SETTID)
-+ *child_tidptr = gettid();
-+ ts = (TaskState *)env->opaque;
-+ if (flags & CLONE_CHILD_CLEARTID)
-+ ts->child_tidptr = child_tidptr;
-+ if (flags & CLONE_SETTLS)
-+ cpu_set_tls (env, newtls);
-+ }
-+#endif
- }
- return ret;
- }
-@@ -3052,6 +3157,68 @@
- unlock_user_struct(target_ts, target_addr, 1);
- }
-
-+static long do_futex(target_ulong uaddr, int op, uint32_t val,
-+ target_ulong utime, target_ulong uaddr2,
-+ uint32_t val3)
-+{
-+ struct timespec host_utime;
-+ unsigned long val2 = utime;
-+
-+ if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) {
-+ target_to_host_timespec(&host_utime, utime);
-+ val2 = (unsigned long)&host_utime;
-+ }
-+
-+#ifdef BSWAP_NEEDED
-+ switch(op) {
-+ case FUTEX_CMP_REQUEUE:
-+ val3 = tswap32(val3);
-+ case FUTEX_REQUEUE:
-+ val2 = tswap32(val2);
-+ case FUTEX_WAIT:
-+ case FUTEX_WAKE:
-+ val = tswap32(val);
-+ case FUTEX_LOCK_PI: /* This one's icky, but comes out OK */
-+ case FUTEX_UNLOCK_PI:
-+ break;
-+ default:
-+ gemu_log("qemu: Unsupported futex op %d\n", op);
-+ return -ENOSYS;
-+ }
-+#if 0 /* No, it's worse than this */
-+ if (op == FUTEX_WAKE_OP) {
-+ /* Need to munge the secondary operation (val3) */
-+ val3 = tswap32(val3);
-+ int op2 = (val3 >> 28) & 7;
-+ int cmp = (val3 >> 24) & 15;
-+ int oparg = (val3 << 8) >> 20;
-+ int cmparg = (val3 << 20) >> 20;
-+ int shift = val3 & (FUTEX_OP_OPARG_SHIFT << 28);
-+
-+ if (shift)
-+ oparg = (oparg & 7) + 24 - (oparg & 24);
-+ else oparg =
-+ if (op2 == FUTEX_OP_ADD) {
-+ gemu_log("qemu: Unsupported wrong-endian FUTEX_OP_ADD\n");
-+ return -ENOSYS;
-+ }
-+ if (cmparg == FUTEX_OP_CMP_LT || cmparg == FUTEX_OP_CMP_GE ||
-+ cmparg == FUTEX_OP_CMP_LE || cmparg == FUTEX_OP_CMP_GT) {
-+ gemu_log("qemu: Unsupported wrong-endian futex cmparg %d\n", cmparg);
-+ return -ENOSYS;
-+ }
-+ val3 = shift | (op2<<28) | (cmp<<24) | (oparg<<12) | cmparg;
-+ }
-+#endif
-+#endif
-+ return syscall(__NR_futex, g2h(uaddr), op, val, val2, g2h(uaddr2), val3);
-+}
-+
-+int do_set_tid_address(target_ulong tidptr)
-+{
-+ return syscall(__NR_set_tid_address, g2h(tidptr));
-+}
-+
- /* do_syscall() should always have a single exit point at the end so
- that actions, such as logging of syscall results, can be performed.
- All errnos that do_syscall() returns must be -TARGET_<errcode>. */
-@@ -3076,7 +3243,7 @@
- _mcleanup();
- #endif
- gdb_exit(cpu_env, arg1);
-- /* XXX: should free thread stack and CPU env */
-+ /* XXX: should free thread stack, GDT and CPU env */
- _exit(arg1);
- ret = 0; /* avoid warning */
- break;
-@@ -3118,7 +3285,7 @@
- ret = do_brk(arg1);
- break;
- case TARGET_NR_fork:
-- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
-+ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
- break;
- #ifdef TARGET_NR_waitpid
- case TARGET_NR_waitpid:
-@@ -4482,7 +4649,8 @@
- ret = get_errno(fsync(arg1));
- break;
- case TARGET_NR_clone:
-- ret = get_errno(do_fork(cpu_env, arg1, arg2));
-+ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
-+ (void *)arg4, (uint32_t *)arg5));
- break;
- #ifdef __NR_exit_group
- /* new thread calls */
-@@ -4943,7 +5111,8 @@
- #endif
- #ifdef TARGET_NR_vfork
- case TARGET_NR_vfork:
-- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
-+ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
-+ NULL, NULL, NULL));
- break;
- #endif
- #ifdef TARGET_NR_ugetrlimit
-@@ -5521,6 +5690,9 @@
- #elif defined(TARGET_I386) && defined(TARGET_ABI32)
- ret = do_set_thread_area(cpu_env, arg1);
- break;
-+#elif TARGET_i386
-+ ret = get_errno(do_set_thread_area(cpu_env, arg1));
-+ break;
- #else
- goto unimplemented_nowarn;
- #endif
-@@ -5538,6 +5710,12 @@
- goto unimplemented_nowarn;
- #endif
-
-+#ifdef TARGET_NR_futex
-+ case TARGET_NR_futex:
-+ ret = get_errno(do_futex(arg1, arg2, arg3, arg4, arg5, arg6));
-+ break;
-+#endif
-+
- #ifdef TARGET_NR_clock_gettime
- case TARGET_NR_clock_gettime:
- {
-Index: trunk/qemu_spinlock.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ trunk/qemu_spinlock.h 2008-04-24 20:16:53.000000000 +0100
-@@ -0,0 +1,250 @@
-+/*
-+ * Atomic operation helper include
-+ *
-+ * Copyright (c) 2005 Fabrice Bellard
-+ *
-+ * 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
-+ */
-+#ifndef QEMU_SPINLOCK_H
-+#define QEMU_SPINLOCK_H
-+
-+#ifdef __powerpc__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+ __asm__ __volatile__ (
-+ "0: lwarx %0,0,%1\n"
-+ " xor. %0,%3,%0\n"
-+ " bne 1f\n"
-+ " stwcx. %2,0,%1\n"
-+ " bne- 0b\n"
-+ "1: "
-+ : "=&r" (ret)
-+ : "r" (p), "r" (1), "r" (0)
-+ : "cr0", "memory");
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __i386__
-+static inline int testandset (int *p)
-+{
-+ long int readval = 0;
-+
-+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+ : "+m" (*p), "+a" (readval)
-+ : "r" (1)
-+ : "cc");
-+ return readval;
-+}
-+#endif
-+
-+#ifdef __x86_64__
-+static inline int testandset (int *p)
-+{
-+ long int readval = 0;
-+
-+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+ : "+m" (*p), "+a" (readval)
-+ : "r" (1)
-+ : "cc");
-+ return readval;
-+}
-+#endif
-+
-+#ifdef __s390__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+
-+ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
-+ " jl 0b"
-+ : "=&d" (ret)
-+ : "r" (1), "a" (p), "0" (*p)
-+ : "cc", "memory" );
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __alpha__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+ unsigned long one;
-+
-+ __asm__ __volatile__ ("0: mov 1,%2\n"
-+ " ldl_l %0,%1\n"
-+ " stl_c %2,%1\n"
-+ " beq %2,1f\n"
-+ ".subsection 2\n"
-+ "1: br 0b\n"
-+ ".previous"
-+ : "=r" (ret), "=m" (*p), "=r" (one)
-+ : "m" (*p));
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __sparc__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+
-+ __asm__ __volatile__("ldstub [%1], %0"
-+ : "=r" (ret)
-+ : "r" (p)
-+ : "memory");
-+
-+ return (ret ? 1 : 0);
-+}
-+#endif
-+
-+#ifdef __arm__
-+static inline int testandset (int *spinlock)
-+{
-+ register unsigned int ret;
-+ __asm__ __volatile__("swp %0, %1, [%2]"
-+ : "=r"(ret)
-+ : "0"(1), "r"(spinlock));
-+
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __mc68000
-+static inline int testandset (int *p)
-+{
-+ char ret;
-+ __asm__ __volatile__("tas %1; sne %0"
-+ : "=r" (ret)
-+ : "m" (p)
-+ : "cc","memory");
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __hppa__
-+/* Because malloc only guarantees 8-byte alignment for malloc'd data,
-+ and GCC only guarantees 8-byte alignment for stack locals, we can't
-+ be assured of 16-byte alignment for atomic lock data even if we
-+ specify "__attribute ((aligned(16)))" in the type declaration. So,
-+ we use a struct containing an array of four ints for the atomic lock
-+ type and dynamically select the 16-byte aligned int from the array
-+ for the semaphore. */
-+#define __PA_LDCW_ALIGNMENT 16
-+static inline void *ldcw_align (void *p) {
-+ unsigned long a = (unsigned long)p;
-+ a = (a + __PA_LDCW_ALIGNMENT - 1) & ~(__PA_LDCW_ALIGNMENT - 1);
-+ return (void *)a;
-+}
-+
-+static inline int testandset (spinlock_t *p)
-+{
-+ unsigned int ret;
-+ p = ldcw_align(p);
-+ __asm__ __volatile__("ldcw 0(%1),%0"
-+ : "=r" (ret)
-+ : "r" (p)
-+ : "memory" );
-+ return !ret;
-+}
-+#endif
-+
-+#ifdef __ia64
-+#include <ia64intrin.h>
-+
-+static inline int testandset (int *p)
-+{
-+ return __sync_lock_test_and_set (p, 1);
-+}
-+#endif
-+
-+#ifdef __mips__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+
-+ __asm__ __volatile__ (
-+ " .set push \n"
-+ " .set noat \n"
-+ " .set mips2 \n"
-+ "1: li $1, 1 \n"
-+ " ll %0, %1 \n"
-+ " sc $1, %1 \n"
-+ " beqz $1, 1b \n"
-+ " .set pop "
-+ : "=r" (ret), "+R" (*p)
-+ :
-+ : "memory");
-+
-+ return ret;
-+}
-+#endif
-+
-+#if defined(__hppa__)
-+
-+typedef int spinlock_t[4];
-+
-+#define SPIN_LOCK_UNLOCKED { 1, 1, 1, 1 }
-+
-+static inline void resetlock (spinlock_t *p)
-+{
-+ (*p)[0] = (*p)[1] = (*p)[2] = (*p)[3] = 1;
-+}
-+
-+#else
-+
-+typedef int spinlock_t;
-+
-+#define SPIN_LOCK_UNLOCKED 0
-+
-+static inline void resetlock (spinlock_t *p)
-+{
-+ *p = SPIN_LOCK_UNLOCKED;
-+}
-+
-+#endif
-+
-+#if defined(CONFIG_USER_ONLY)
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+ while (testandset(lock));
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+ resetlock(lock);
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+ return !testandset(lock);
-+}
-+#else
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+ return 1;
-+}
-+#endif
-+
-+#endif
-Index: trunk/target-arm/cpu.h
-===================================================================
---- trunk.orig/target-arm/cpu.h 2008-04-24 20:16:41.000000000 +0100
-+++ trunk/target-arm/cpu.h 2008-04-24 20:16:53.000000000 +0100
-@@ -38,6 +38,7 @@
- #define EXCP_FIQ 6
- #define EXCP_BKPT 7
- #define EXCP_EXCEPTION_EXIT 8 /* Return from v7M exception. */
-+#define EXCP_KERNEL_TRAP 9 /* Jumped to kernel code page. */
-
- #define ARMV7M_EXCP_RESET 1
- #define ARMV7M_EXCP_NMI 2
-@@ -218,6 +219,15 @@
- void cpu_lock(void);
- void cpu_unlock(void);
-
-+void cpu_lock(void);
-+void cpu_unlock(void);
-+#if defined(USE_NPTL)
-+static inline void cpu_set_tls(CPUARMState *env, void *newtls)
-+{
-+ env->cp15.c13_tls2 = (uint32_t)(long)newtls;
-+}
-+#endif
-+
- #define CPSR_M (0x1f)
- #define CPSR_T (1 << 5)
- #define CPSR_F (1 << 6)
-Index: trunk/target-arm/translate.c
-===================================================================
---- trunk.orig/target-arm/translate.c 2008-04-24 20:16:41.000000000 +0100
-+++ trunk/target-arm/translate.c 2008-04-24 20:16:53.000000000 +0100
-@@ -8606,7 +8606,14 @@
- gen_exception(EXCP_EXCEPTION_EXIT);
- }
- #endif
--
-+#ifdef CONFIG_USER_ONLY
-+ /* Intercept jump to the magic kernel page. */
-+ if (dc->pc > 0xffff0000) {
-+ gen_exception(EXCP_KERNEL_TRAP);
-+ dc->is_jmp = DISAS_UPDATE;
-+ break;
-+ }
-+#endif
- if (env->nb_breakpoints > 0) {
- for(j = 0; j < env->nb_breakpoints; j++) {
- if (env->breakpoints[j] == dc->pc) {
diff --git a/recipes/qemu/qemu-0.9.1+svn/qemu-amd64-32b-mapping-0.9.0.patch b/recipes/qemu/qemu-0.9.1+svn/qemu-amd64-32b-mapping-0.9.0.patch
deleted file mode 100644
index 02f093abb9..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/qemu-amd64-32b-mapping-0.9.0.patch
+++ /dev/null
@@ -1,37 +0,0 @@
----
- linux-user/mmap.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-Index: trunk/linux-user/mmap.c
-===================================================================
---- trunk.orig/linux-user/mmap.c 2008-04-24 20:15:37.000000000 +0100
-+++ trunk/linux-user/mmap.c 2008-04-24 20:16:16.000000000 +0100
-@@ -29,6 +29,10 @@
-
- //#define DEBUG_MMAP
-
-+#ifndef MAP_32BIT
-+#define MAP_32BIT 0
-+#endif
-+
- /* NOTE: all the constants are the HOST ones, but addresses are target. */
- int target_mprotect(abi_ulong start, abi_ulong len, int prot)
- {
-@@ -251,7 +255,7 @@
- especially important if qemu_host_page_size >
- qemu_real_host_page_size */
- p = mmap(g2h(mmap_start),
-- host_len, prot, flags | MAP_FIXED, fd, host_offset);
-+ host_len, prot, flags | MAP_FIXED | MAP_32BIT, fd, host_offset);
- if (p == MAP_FAILED)
- return -1;
- /* update start so that it points to the file position at 'offset' */
-@@ -406,7 +410,7 @@
- unsigned long host_addr;
-
- /* XXX: use 5 args syscall */
-- host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags);
-+ host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags | MAP_32BIT);
- if (host_addr == -1)
- return -1;
- new_addr = h2g(host_addr);
diff --git a/recipes/qemu/qemu-0.9.1+svn/qemu-n800-support.patch b/recipes/qemu/qemu-0.9.1+svn/qemu-n800-support.patch
deleted file mode 100644
index 1224fb4cbd..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/qemu-n800-support.patch
+++ /dev/null
@@ -1,2381 +0,0 @@
-diff -urN 4242/cpu-all.h qemu-omap/cpu-all.h
---- 4242/cpu-all.h 2008-04-24 21:26:19.000000000 +0100
-+++ qemu-omap/cpu-all.h 2008-04-23 09:57:55.000000000 +0100
-@@ -816,7 +816,7 @@
- /* physical memory access */
- #define TLB_INVALID_MASK (1 << 3)
- #define IO_MEM_SHIFT 4
--#define IO_MEM_NB_ENTRIES (1 << (TARGET_PAGE_BITS - IO_MEM_SHIFT))
-+#define IO_MEM_NB_ENTRIES (16 << (TARGET_PAGE_BITS - IO_MEM_SHIFT))
-
- #define IO_MEM_RAM (0 << IO_MEM_SHIFT) /* hardcoded offset */
- #define IO_MEM_ROM (1 << IO_MEM_SHIFT) /* hardcoded offset */
-diff -urN 4242/exec.c qemu-omap/exec.c
---- 4242/exec.c 2008-04-24 18:11:49.000000000 +0100
-+++ qemu-omap/exec.c 2008-04-23 09:57:55.000000000 +0100
-@@ -1664,7 +1664,7 @@
- {
- if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM && !(pd & IO_MEM_ROMD)) {
- /* IO memory case */
-- address = vaddr | pd;
-+ address = vaddr | (pd & ~TARGET_PAGE_MASK);
- addend = paddr;
- } else {
- /* standard memory */
-@@ -1698,7 +1698,9 @@
- } else {
- te->addr_read = -1;
- }
-- if (prot & PAGE_EXEC) {
-+ if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM && !(pd & IO_MEM_ROMD)) {
-+ te->addr_code = pd;
-+ } else if (prot & PAGE_EXEC) {
- te->addr_code = address;
- } else {
- te->addr_code = -1;
-@@ -2493,7 +2495,9 @@
- if (io_index <= 0) {
- if (io_mem_nb >= IO_MEM_NB_ENTRIES)
- return -1;
-- io_index = io_mem_nb++;
-+ do io_index = io_mem_nb++;
-+ while (((io_index << IO_MEM_SHIFT) & ~TARGET_PAGE_MASK)
-+ <= IO_MEM_NOTDIRTY);
- } else {
- if (io_index >= IO_MEM_NB_ENTRIES)
- return -1;
-diff -urN 4242/hw/max7310.c qemu-omap/hw/max7310.c
---- 4242/hw/max7310.c 2008-04-24 18:11:49.000000000 +0100
-+++ qemu-omap/hw/max7310.c 2008-03-02 19:31:55.000000000 +0000
-@@ -134,8 +134,8 @@
- s->i2c_command_byte = 1;
- break;
- case I2C_FINISH:
-- if (s->len == 1)
- #ifdef VERBOSE
-+ if (s->len == 1)
- printf("%s: message too short (%i bytes)\n", __FUNCTION__, s->len);
- #endif
- break;
-diff -urN 4242/hw/ndis.h qemu-omap/hw/ndis.h
---- 4242/hw/ndis.h 1970-01-01 01:00:00.000000000 +0100
-+++ qemu-omap/hw/ndis.h 2008-04-23 09:57:56.000000000 +0100
-@@ -0,0 +1,217 @@
-+/*
-+ * ndis.h
-+ *
-+ * ntddndis.h modified by Benedikt Spranger <b.spranger@pengutronix.de>
-+ *
-+ * Thanks to the cygwin development team,
-+ * espacially to Casper S. Hornstrup <chorns@users.sourceforge.net>
-+ *
-+ * THIS SOFTWARE IS NOT COPYRIGHTED
-+ *
-+ * This source code is offered for use in the public domain. You may
-+ * use, modify or distribute it freely.
-+ *
-+ * This code is distributed in the hope that it will be useful but
-+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
-+ * DISCLAIMED. This includes but is not limited to warranties of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-+ *
-+ */
-+
-+#ifndef _LINUX_NDIS_H
-+#define _LINUX_NDIS_H
-+
-+
-+#define NDIS_STATUS_MULTICAST_FULL 0xC0010009
-+#define NDIS_STATUS_MULTICAST_EXISTS 0xC001000A
-+#define NDIS_STATUS_MULTICAST_NOT_FOUND 0xC001000B
-+
-+enum NDIS_DEVICE_POWER_STATE {
-+ NdisDeviceStateUnspecified = 0,
-+ NdisDeviceStateD0,
-+ NdisDeviceStateD1,
-+ NdisDeviceStateD2,
-+ NdisDeviceStateD3,
-+ NdisDeviceStateMaximum
-+};
-+
-+struct NDIS_PM_WAKE_UP_CAPABILITIES {
-+ enum NDIS_DEVICE_POWER_STATE MinMagicPacketWakeUp;
-+ enum NDIS_DEVICE_POWER_STATE MinPatternWakeUp;
-+ enum NDIS_DEVICE_POWER_STATE MinLinkChangeWakeUp;
-+};
-+
-+/* NDIS_PNP_CAPABILITIES.Flags constants */
-+#define NDIS_DEVICE_WAKE_UP_ENABLE 0x00000001
-+#define NDIS_DEVICE_WAKE_ON_PATTERN_MATCH_ENABLE 0x00000002
-+#define NDIS_DEVICE_WAKE_ON_MAGIC_PACKET_ENABLE 0x00000004
-+
-+struct NDIS_PNP_CAPABILITIES {
-+ __le32 Flags;
-+ struct NDIS_PM_WAKE_UP_CAPABILITIES WakeUpCapabilities;
-+};
-+
-+struct NDIS_PM_PACKET_PATTERN {
-+ __le32 Priority;
-+ __le32 Reserved;
-+ __le32 MaskSize;
-+ __le32 PatternOffset;
-+ __le32 PatternSize;
-+ __le32 PatternFlags;
-+};
-+
-+
-+/* Required Object IDs (OIDs) */
-+#define OID_GEN_SUPPORTED_LIST 0x00010101
-+#define OID_GEN_HARDWARE_STATUS 0x00010102
-+#define OID_GEN_MEDIA_SUPPORTED 0x00010103
-+#define OID_GEN_MEDIA_IN_USE 0x00010104
-+#define OID_GEN_MAXIMUM_LOOKAHEAD 0x00010105
-+#define OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106
-+#define OID_GEN_LINK_SPEED 0x00010107
-+#define OID_GEN_TRANSMIT_BUFFER_SPACE 0x00010108
-+#define OID_GEN_RECEIVE_BUFFER_SPACE 0x00010109
-+#define OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010A
-+#define OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010B
-+#define OID_GEN_VENDOR_ID 0x0001010C
-+#define OID_GEN_VENDOR_DESCRIPTION 0x0001010D
-+#define OID_GEN_CURRENT_PACKET_FILTER 0x0001010E
-+#define OID_GEN_CURRENT_LOOKAHEAD 0x0001010F
-+#define OID_GEN_DRIVER_VERSION 0x00010110
-+#define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111
-+#define OID_GEN_PROTOCOL_OPTIONS 0x00010112
-+#define OID_GEN_MAC_OPTIONS 0x00010113
-+#define OID_GEN_MEDIA_CONNECT_STATUS 0x00010114
-+#define OID_GEN_MAXIMUM_SEND_PACKETS 0x00010115
-+#define OID_GEN_VENDOR_DRIVER_VERSION 0x00010116
-+#define OID_GEN_SUPPORTED_GUIDS 0x00010117
-+#define OID_GEN_NETWORK_LAYER_ADDRESSES 0x00010118
-+#define OID_GEN_TRANSPORT_HEADER_OFFSET 0x00010119
-+#define OID_GEN_MACHINE_NAME 0x0001021A
-+#define OID_GEN_RNDIS_CONFIG_PARAMETER 0x0001021B
-+#define OID_GEN_VLAN_ID 0x0001021C
-+
-+/* Optional OIDs */
-+#define OID_GEN_MEDIA_CAPABILITIES 0x00010201
-+#define OID_GEN_PHYSICAL_MEDIUM 0x00010202
-+
-+/* Required statistics OIDs */
-+#define OID_GEN_XMIT_OK 0x00020101
-+#define OID_GEN_RCV_OK 0x00020102
-+#define OID_GEN_XMIT_ERROR 0x00020103
-+#define OID_GEN_RCV_ERROR 0x00020104
-+#define OID_GEN_RCV_NO_BUFFER 0x00020105
-+
-+/* Optional statistics OIDs */
-+#define OID_GEN_DIRECTED_BYTES_XMIT 0x00020201
-+#define OID_GEN_DIRECTED_FRAMES_XMIT 0x00020202
-+#define OID_GEN_MULTICAST_BYTES_XMIT 0x00020203
-+#define OID_GEN_MULTICAST_FRAMES_XMIT 0x00020204
-+#define OID_GEN_BROADCAST_BYTES_XMIT 0x00020205
-+#define OID_GEN_BROADCAST_FRAMES_XMIT 0x00020206
-+#define OID_GEN_DIRECTED_BYTES_RCV 0x00020207
-+#define OID_GEN_DIRECTED_FRAMES_RCV 0x00020208
-+#define OID_GEN_MULTICAST_BYTES_RCV 0x00020209
-+#define OID_GEN_MULTICAST_FRAMES_RCV 0x0002020A
-+#define OID_GEN_BROADCAST_BYTES_RCV 0x0002020B
-+#define OID_GEN_BROADCAST_FRAMES_RCV 0x0002020C
-+#define OID_GEN_RCV_CRC_ERROR 0x0002020D
-+#define OID_GEN_TRANSMIT_QUEUE_LENGTH 0x0002020E
-+#define OID_GEN_GET_TIME_CAPS 0x0002020F
-+#define OID_GEN_GET_NETCARD_TIME 0x00020210
-+#define OID_GEN_NETCARD_LOAD 0x00020211
-+#define OID_GEN_DEVICE_PROFILE 0x00020212
-+#define OID_GEN_INIT_TIME_MS 0x00020213
-+#define OID_GEN_RESET_COUNTS 0x00020214
-+#define OID_GEN_MEDIA_SENSE_COUNTS 0x00020215
-+#define OID_GEN_FRIENDLY_NAME 0x00020216
-+#define OID_GEN_MINIPORT_INFO 0x00020217
-+#define OID_GEN_RESET_VERIFY_PARAMETERS 0x00020218
-+
-+/* IEEE 802.3 (Ethernet) OIDs */
-+#define NDIS_802_3_MAC_OPTION_PRIORITY 0x00000001
-+
-+#define OID_802_3_PERMANENT_ADDRESS 0x01010101
-+#define OID_802_3_CURRENT_ADDRESS 0x01010102
-+#define OID_802_3_MULTICAST_LIST 0x01010103
-+#define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104
-+#define OID_802_3_MAC_OPTIONS 0x01010105
-+#define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101
-+#define OID_802_3_XMIT_ONE_COLLISION 0x01020102
-+#define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103
-+#define OID_802_3_XMIT_DEFERRED 0x01020201
-+#define OID_802_3_XMIT_MAX_COLLISIONS 0x01020202
-+#define OID_802_3_RCV_OVERRUN 0x01020203
-+#define OID_802_3_XMIT_UNDERRUN 0x01020204
-+#define OID_802_3_XMIT_HEARTBEAT_FAILURE 0x01020205
-+#define OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206
-+#define OID_802_3_XMIT_LATE_COLLISIONS 0x01020207
-+
-+/* OID_GEN_MINIPORT_INFO constants */
-+#define NDIS_MINIPORT_BUS_MASTER 0x00000001
-+#define NDIS_MINIPORT_WDM_DRIVER 0x00000002
-+#define NDIS_MINIPORT_SG_LIST 0x00000004
-+#define NDIS_MINIPORT_SUPPORTS_MEDIA_QUERY 0x00000008
-+#define NDIS_MINIPORT_INDICATES_PACKETS 0x00000010
-+#define NDIS_MINIPORT_IGNORE_PACKET_QUEUE 0x00000020
-+#define NDIS_MINIPORT_IGNORE_REQUEST_QUEUE 0x00000040
-+#define NDIS_MINIPORT_IGNORE_TOKEN_RING_ERRORS 0x00000080
-+#define NDIS_MINIPORT_INTERMEDIATE_DRIVER 0x00000100
-+#define NDIS_MINIPORT_IS_NDIS_5 0x00000200
-+#define NDIS_MINIPORT_IS_CO 0x00000400
-+#define NDIS_MINIPORT_DESERIALIZE 0x00000800
-+#define NDIS_MINIPORT_REQUIRES_MEDIA_POLLING 0x00001000
-+#define NDIS_MINIPORT_SUPPORTS_MEDIA_SENSE 0x00002000
-+#define NDIS_MINIPORT_NETBOOT_CARD 0x00004000
-+#define NDIS_MINIPORT_PM_SUPPORTED 0x00008000
-+#define NDIS_MINIPORT_SUPPORTS_MAC_ADDRESS_OVERWRITE 0x00010000
-+#define NDIS_MINIPORT_USES_SAFE_BUFFER_APIS 0x00020000
-+#define NDIS_MINIPORT_HIDDEN 0x00040000
-+#define NDIS_MINIPORT_SWENUM 0x00080000
-+#define NDIS_MINIPORT_SURPRISE_REMOVE_OK 0x00100000
-+#define NDIS_MINIPORT_NO_HALT_ON_SUSPEND 0x00200000
-+#define NDIS_MINIPORT_HARDWARE_DEVICE 0x00400000
-+#define NDIS_MINIPORT_SUPPORTS_CANCEL_SEND_PACKETS 0x00800000
-+#define NDIS_MINIPORT_64BITS_DMA 0x01000000
-+
-+#define NDIS_MEDIUM_802_3 0x00000000
-+#define NDIS_MEDIUM_802_5 0x00000001
-+#define NDIS_MEDIUM_FDDI 0x00000002
-+#define NDIS_MEDIUM_WAN 0x00000003
-+#define NDIS_MEDIUM_LOCAL_TALK 0x00000004
-+#define NDIS_MEDIUM_DIX 0x00000005
-+#define NDIS_MEDIUM_ARCENT_RAW 0x00000006
-+#define NDIS_MEDIUM_ARCENT_878_2 0x00000007
-+#define NDIS_MEDIUM_ATM 0x00000008
-+#define NDIS_MEDIUM_WIRELESS_LAN 0x00000009
-+#define NDIS_MEDIUM_IRDA 0x0000000A
-+#define NDIS_MEDIUM_BPC 0x0000000B
-+#define NDIS_MEDIUM_CO_WAN 0x0000000C
-+#define NDIS_MEDIUM_1394 0x0000000D
-+
-+#define NDIS_PACKET_TYPE_DIRECTED 0x00000001
-+#define NDIS_PACKET_TYPE_MULTICAST 0x00000002
-+#define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
-+#define NDIS_PACKET_TYPE_BROADCAST 0x00000008
-+#define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
-+#define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
-+#define NDIS_PACKET_TYPE_SMT 0x00000040
-+#define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
-+#define NDIS_PACKET_TYPE_GROUP 0x00000100
-+#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00000200
-+#define NDIS_PACKET_TYPE_FUNCTIONAL 0x00000400
-+#define NDIS_PACKET_TYPE_MAC_FRAME 0x00000800
-+
-+#define NDIS_MEDIA_STATE_CONNECTED 0x00000000
-+#define NDIS_MEDIA_STATE_DISCONNECTED 0x00000001
-+
-+#define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
-+#define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
-+#define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
-+#define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
-+#define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
-+#define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
-+#define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
-+#define NDIS_MAC_OPTION_RESERVED 0x80000000
-+
-+#endif /* _LINUX_NDIS_H */
-diff -urN 4242/hw/nseries.c qemu-omap/hw/nseries.c
---- 4242/hw/nseries.c 2008-04-24 18:11:49.000000000 +0100
-+++ qemu-omap/hw/nseries.c 2008-04-23 09:57:56.000000000 +0100
-@@ -602,6 +602,37 @@
- (void *) &config7, sizeof(config7));
- }
-
-+#if 0
-+static uint32_t n800_pinout[104] = {
-+ 0x080f00d8, 0x00d40808, 0x03080808, 0x080800d0,
-+ 0x00dc0808, 0x0b0f0f00, 0x080800b4, 0x00c00808,
-+ 0x08080808, 0x180800c4, 0x00b80000, 0x08080808,
-+ 0x080800bc, 0x00cc0808, 0x08081818, 0x18180128,
-+ 0x01241800, 0x18181818, 0x000000f0, 0x01300000,
-+ 0x00001b0b, 0x1b0f0138, 0x00e0181b, 0x1b031b0b,
-+ 0x180f0078, 0x00740018, 0x0f0f0f1a, 0x00000080,
-+ 0x007c0000, 0x00000000, 0x00000088, 0x00840000,
-+ 0x00000000, 0x00000094, 0x00980300, 0x0f180003,
-+ 0x0000008c, 0x00900f0f, 0x0f0f1b00, 0x0f00009c,
-+ 0x01140000, 0x1b1b0f18, 0x0818013c, 0x01400008,
-+ 0x00001818, 0x000b0110, 0x010c1800, 0x0b030b0f,
-+ 0x181800f4, 0x00f81818, 0x00000018, 0x000000fc,
-+ 0x00401808, 0x00000000, 0x0f1b0030, 0x003c0008,
-+ 0x00000000, 0x00000038, 0x00340000, 0x00000000,
-+ 0x1a080070, 0x00641a1a, 0x08080808, 0x08080060,
-+ 0x005c0808, 0x08080808, 0x08080058, 0x00540808,
-+ 0x08080808, 0x0808006c, 0x00680808, 0x08080808,
-+ 0x000000a8, 0x00b00000, 0x08080808, 0x000000a0,
-+ 0x00a40000, 0x00000000, 0x08ff0050, 0x004c0808,
-+ 0xffffffff, 0xffff0048, 0x0044ffff, 0xffffffff,
-+ 0x000000ac, 0x01040800, 0x08080b0f, 0x18180100,
-+ 0x01081818, 0x0b0b1808, 0x1a0300e4, 0x012c0b1a,
-+ 0x02020018, 0x0b000134, 0x011c0800, 0x0b1b1b00,
-+ 0x0f0000c8, 0x00ec181b, 0x000f0f02, 0x00180118,
-+ 0x01200000, 0x0f0b1b1b, 0x0f0200e8, 0x0000020b,
-+};
-+#endif
-+
- /* Setup sequence done by the bootloader */
- static void n800_boot_init(void *opaque)
- {
-@@ -942,3 +973,71 @@
- "Nokia N800 aka. RX-34 tablet (OMAP2420)",
- n800_init,
- };
-+
-+#if 0
-+/* cx3110x.c */
-+#define CY_ARM_INT 0x00
-+#define CY_ARM_INT_ENA 0x00
-+#define CY_HOST_INT 0x00
-+#define CY_HOST_INT_ENA 0x00
-+#define CY_HOST_INT_ACK 0x00
-+#define CY_GP1_COMM 0x00
-+#define CY_GP2_COMM 0x00
-+#define CY_DEV_CTRL_STA 0x00
-+#define CY_DMA_DATA 0x00 /* 16-bit */
-+#define CY_DMA_WR_CTRL 0x00 /* 16-bit */
-+#define CY_DMA_WR_LEN 0x00 /* 16-bit */
-+#define CY_DMA_WR_BASE 0x00
-+#define CY_DMA_RD_CTRL 0x00 /* 16-bit */
-+#define CY_DMA_RD_LEN 0x00 /* 16-bit */
-+#define CY_DMA_RD_BASE 0x00
-+
-+HW:
-+(spi bus 1.0)
-+ tsc2005
-+(spi bus 1.1)
-+ lcd_mipid
-+(spi bus 2.0)
-+ cx3110x (WLAN)
-+(spi somewhere?)
-+ pc2400m (WiMAX)
-+(i2c bus 0)
-+ TLV320AIC33 (audio codec on i2c)
-+ TCM825x (camera on i2c)
-+ lp5521 (LED on i2c)
-+ tsl2563 (light sensor, hwmon on i2c)
-+ lm8323 (keypad on i2c)
-+(i2c bus 1)
-+ tmp105 (temperature sensor, hwmon on i2c)
-+ menelaus (power on i2c)
-+
-+GPIO 0: out hi
-+GPIO 8: in hi
-+GPIO 9: out hi
-+GPIO 10: out lo
-+GPIO 12: out lo
-+GPIO 15: out lo
-+GPIO 23: out hi
-+GPIO 26: in hi, irq-186 rising
-+GPIO 53: out lo
-+GPIO 58: in hi, irq-218 low wakeup
-+GPIO 62: out lo
-+GPIO 64: out hi
-+GPIO 65: in hi
-+GPIO 66: out lo
-+GPIO 93: out lo
-+GPIO 94: in hi
-+GPIO 95: out lo
-+GPIO 96: out hi
-+GPIO 101: out lo
-+GPIO 102: in hi, irq-262 bothedge
-+GPIO 106: in hi, irq-266 falling wakeup
-+GPIO 107: in hi, irq-267 bothedge
-+GPIO 108: in lo, irq-268 rising wakeup
-+GPIO 109: in hi, irq-269 falling wakeup
-+GPIO 110: in hi, irq-270 bothedge
-+GPIO 111: in lo, irq-271 rising
-+GPIO 112: out hi
-+GPIO 118: out hi
-+GPIO 125: in lo, irq-285 rising
-+#endif
-diff -urN 4242/hw/omap2.c qemu-omap/hw/omap2.c
---- 4242/hw/omap2.c 2008-04-24 18:11:49.000000000 +0100
-+++ qemu-omap/hw/omap2.c 2008-04-23 09:57:56.000000000 +0100
-@@ -3675,152 +3675,152 @@
- omap_findclk(s, "dss_l4_iclk"));
-
- /* All register mappings (includin those not currenlty implemented):
-- * SystemControlMod 48000000 - 48000fff
-- * SystemControlL4 48001000 - 48001fff
-- * 32kHz Timer Mod 48004000 - 48004fff
-- * 32kHz Timer L4 48005000 - 48005fff
-- * PRCM ModA 48008000 - 480087ff
-+ * SystemControlMod 48000000 - 48000fff (REV 0x00000010)
-+ * SystemControlL4 48001000 - 48001fff (0x00200010, 0x01000200, 0x00000000)
-+ * 32kHz Timer Mod 48004000 - 48004fff (REV 0x00000011)
-+ * 32kHz Timer L4 48005000 - 48005fff (0x00200010, 0x01000200, 0x00000000)
-+ * PRCM ModA 48008000 - 480087ff (REV 0x00000010)
- * PRCM ModB 48008800 - 48008fff
-- * PRCM L4 48009000 - 48009fff
-- * TEST-BCM Mod 48012000 - 48012fff
-- * TEST-BCM L4 48013000 - 48013fff
-- * TEST-TAP Mod 48014000 - 48014fff
-- * TEST-TAP L4 48015000 - 48015fff
-- * GPIO1 Mod 48018000 - 48018fff
-- * GPIO Top 48019000 - 48019fff
-- * GPIO2 Mod 4801a000 - 4801afff
-- * GPIO L4 4801b000 - 4801bfff
-- * GPIO3 Mod 4801c000 - 4801cfff
-- * GPIO4 Mod 4801e000 - 4801efff
-- * WDTIMER1 Mod 48020000 - 48010fff
-+ * PRCM L4 48009000 - 48009fff (0x00200010, 0x00000200, 0x00000000)
-+ * TEST-BCM Mod 48012000 - 48012fff (REV 0x00000010)
-+ * TEST-BCM L4 48013000 - 48013fff (0x00200010, 0x00000200, 0x00000000)
-+ * TEST-TAP Mod 48014000 - 48014fff (REV 0x00000010)
-+ * TEST-TAP L4 48015000 - 48015fff (0x00200010, 0x00000200, 0x00000000)
-+ * GPIO1 Mod 48018000 - 48018fff (REV 0x00000018)
-+ * GPIO Top 48019000 - 48019fff (REV 0x00000011)
-+ * GPIO2 Mod 4801a000 - 4801afff (REV 0x00000018)
-+ * GPIO L4 4801b000 - 4801bfff (0x00200010, 0x00000200, 0x00000000)
-+ * GPIO3 Mod 4801c000 - 4801cfff (REV 0x00000018)
-+ * GPIO4 Mod 4801e000 - 4801efff (REV 0x00000018)
-+ * WDTIMER1 Mod 48020000 - 48010fff (REV Abort)
- * WDTIMER Top 48021000 - 48011fff
-- * WDTIMER2 Mod 48022000 - 48012fff
-- * WDTIMER L4 48023000 - 48013fff
-- * WDTIMER3 Mod 48024000 - 48014fff
-- * WDTIMER3 L4 48025000 - 48015fff
-- * WDTIMER4 Mod 48026000 - 48016fff
-- * WDTIMER4 L4 48027000 - 48017fff
-- * GPTIMER1 Mod 48028000 - 48018fff
-- * GPTIMER1 L4 48029000 - 48019fff
-- * GPTIMER2 Mod 4802a000 - 4801afff
-- * GPTIMER2 L4 4802b000 - 4801bfff
-+ * WDTIMER2 Mod 48022000 - 48012fff (REV 0x00000011)
-+ * WDTIMER L4 48023000 - 48013fff (0x00200010, 0x00000200, 0x00000000)
-+ * WDTIMER3 Mod 48024000 - 48014fff (REV 0x00000011)
-+ * WDTIMER3 L4 48025000 - 48015fff (0x00200010, 0x00000200, 0x00000000)
-+ * WDTIMER4 Mod 48026000 - 48016fff (REV 0x00000011)
-+ * WDTIMER4 L4 48027000 - 48017fff (0x00200010, 0x00000200, 0x00000000)
-+ * GPTIMER1 Mod 48028000 - 48018fff (REV 0x00000013)
-+ * GPTIMER1 L4 48029000 - 48019fff (0x00200010, 0x00000200, 0x00000000)
-+ * GPTIMER2 Mod 4802a000 - 4801afff (REV Abort)
-+ * GPTIMER2 L4 4802b000 - 4801bfff (0x00200010, 0x00000200, 0x00000000)
- * L4-Config AP 48040000 - 480407ff
- * L4-Config IP 48040800 - 48040fff
- * L4-Config LA 48041000 - 48041fff
-- * ARM11ETB Mod 48048000 - 48049fff
-- * ARM11ETB L4 4804a000 - 4804afff
-- * DISPLAY Top 48050000 - 480503ff
-- * DISPLAY DISPC 48050400 - 480507ff
-- * DISPLAY RFBI 48050800 - 48050bff
-- * DISPLAY VENC 48050c00 - 48050fff
-- * DISPLAY L4 48051000 - 48051fff
-- * CAMERA Top 48052000 - 480523ff
-- * CAMERA core 48052400 - 480527ff
-- * CAMERA DMA 48052800 - 48052bff
-- * CAMERA MMU 48052c00 - 48052fff
-- * CAMERA L4 48053000 - 48053fff
-- * SDMA Mod 48056000 - 48056fff
-- * SDMA L4 48057000 - 48057fff
-- * SSI Top 48058000 - 48058fff
-- * SSI GDD 48059000 - 48059fff
-- * SSI Port1 4805a000 - 4805afff
-- * SSI Port2 4805b000 - 4805bfff
-- * SSI L4 4805c000 - 4805cfff
-- * USB Mod 4805e000 - 480fefff
-- * USB L4 4805f000 - 480fffff
-- * WIN_TRACER1 Mod 48060000 - 48060fff
-- * WIN_TRACER1 L4 48061000 - 48061fff
-- * WIN_TRACER2 Mod 48062000 - 48062fff
-- * WIN_TRACER2 L4 48063000 - 48063fff
-- * WIN_TRACER3 Mod 48064000 - 48064fff
-- * WIN_TRACER3 L4 48065000 - 48065fff
-- * WIN_TRACER4 Top 48066000 - 480660ff
-- * WIN_TRACER4 ETT 48066100 - 480661ff
-- * WIN_TRACER4 WT 48066200 - 480662ff
-- * WIN_TRACER4 L4 48067000 - 48067fff
-- * XTI Mod 48068000 - 48068fff
-- * XTI L4 48069000 - 48069fff
-- * UART1 Mod 4806a000 - 4806afff
-- * UART1 L4 4806b000 - 4806bfff
-- * UART2 Mod 4806c000 - 4806cfff
-- * UART2 L4 4806d000 - 4806dfff
-- * UART3 Mod 4806e000 - 4806efff
-- * UART3 L4 4806f000 - 4806ffff
-- * I2C1 Mod 48070000 - 48070fff
-- * I2C1 L4 48071000 - 48071fff
-- * I2C2 Mod 48072000 - 48072fff
-- * I2C2 L4 48073000 - 48073fff
-- * McBSP1 Mod 48074000 - 48074fff
-- * McBSP1 L4 48075000 - 48075fff
-- * McBSP2 Mod 48076000 - 48076fff
-- * McBSP2 L4 48077000 - 48077fff
-- * GPTIMER3 Mod 48078000 - 48078fff
-- * GPTIMER3 L4 48079000 - 48079fff
-- * GPTIMER4 Mod 4807a000 - 4807afff
-- * GPTIMER4 L4 4807b000 - 4807bfff
-- * GPTIMER5 Mod 4807c000 - 4807cfff
-- * GPTIMER5 L4 4807d000 - 4807dfff
-- * GPTIMER6 Mod 4807e000 - 4807efff
-- * GPTIMER6 L4 4807f000 - 4807ffff
-- * GPTIMER7 Mod 48080000 - 48080fff
-- * GPTIMER7 L4 48081000 - 48081fff
-- * GPTIMER8 Mod 48082000 - 48082fff
-- * GPTIMER8 L4 48083000 - 48083fff
-- * GPTIMER9 Mod 48084000 - 48084fff
-- * GPTIMER9 L4 48085000 - 48085fff
-- * GPTIMER10 Mod 48086000 - 48086fff
-- * GPTIMER10 L4 48087000 - 48087fff
-- * GPTIMER11 Mod 48088000 - 48088fff
-- * GPTIMER11 L4 48089000 - 48089fff
-- * GPTIMER12 Mod 4808a000 - 4808afff
-- * GPTIMER12 L4 4808b000 - 4808bfff
-- * EAC Mod 48090000 - 48090fff
-- * EAC L4 48091000 - 48091fff
-- * FAC Mod 48092000 - 48092fff
-- * FAC L4 48093000 - 48093fff
-- * MAILBOX Mod 48094000 - 48094fff
-- * MAILBOX L4 48095000 - 48095fff
-- * SPI1 Mod 48098000 - 48098fff
-- * SPI1 L4 48099000 - 48099fff
-- * SPI2 Mod 4809a000 - 4809afff
-- * SPI2 L4 4809b000 - 4809bfff
-- * MMC/SDIO Mod 4809c000 - 4809cfff
-- * MMC/SDIO L4 4809d000 - 4809dfff
-- * MS_PRO Mod 4809e000 - 4809efff
-- * MS_PRO L4 4809f000 - 4809ffff
-- * RNG Mod 480a0000 - 480a0fff
-- * RNG L4 480a1000 - 480a1fff
-- * DES3DES Mod 480a2000 - 480a2fff
-- * DES3DES L4 480a3000 - 480a3fff
-- * SHA1MD5 Mod 480a4000 - 480a4fff
-- * SHA1MD5 L4 480a5000 - 480a5fff
-- * AES Mod 480a6000 - 480a6fff
-- * AES L4 480a7000 - 480a7fff
-- * PKA Mod 480a8000 - 480a9fff
-- * PKA L4 480aa000 - 480aafff
-- * MG Mod 480b0000 - 480b0fff
-- * MG L4 480b1000 - 480b1fff
-- * HDQ/1-wire Mod 480b2000 - 480b2fff
-- * HDQ/1-wire L4 480b3000 - 480b3fff
-- * MPU interrupt 480fe000 - 480fefff
-- * IVA RAM 5c000000 - 5c01ffff
-- * IVA ROM 5c020000 - 5c027fff
-- * IMG_BUF_A 5c040000 - 5c040fff
-- * IMG_BUF_B 5c042000 - 5c042fff
-- * VLCDS 5c048000 - 5c0487ff
-- * IMX_COEF 5c049000 - 5c04afff
-- * IMX_CMD 5c051000 - 5c051fff
-- * VLCDQ 5c053000 - 5c0533ff
-- * VLCDH 5c054000 - 5c054fff
-- * SEQ_CMD 5c055000 - 5c055fff
-- * IMX_REG 5c056000 - 5c0560ff
-- * VLCD_REG 5c056100 - 5c0561ff
-- * SEQ_REG 5c056200 - 5c0562ff
-- * IMG_BUF_REG 5c056300 - 5c0563ff
-- * SEQIRQ_REG 5c056400 - 5c0564ff
-- * OCP_REG 5c060000 - 5c060fff
-- * SYSC_REG 5c070000 - 5c070fff
-- * MMU_REG 5d000000 - 5d000fff
-+ * ARM11ETB Mod 48048000 - 48049fff (REV 0x00000011)
-+ * ARM11ETB L4 4804a000 - 4804afff (0x00200010, 0x00000200, 0x00000000)
-+ * DISPLAY Top 48050000 - 480503ff (REV 0x00000003)
-+ * DISPLAY DISPC 48050400 - 480507ff (REV 0x00000020)
-+ * DISPLAY RFBI 48050800 - 48050bff (REV 0x00000010)
-+ * DISPLAY VENC 48050c00 - 48050fff (REV Abort)
-+ * DISPLAY L4 48051000 - 48051fff (0x00200010, 0x00000200, 0x00000100)
-+ * CAMERA Top 48052000 - 480523ff (REV 0x00000020)
-+ * CAMERA core 48052400 - 480527ff (REV 0x00000020)
-+ * CAMERA DMA 48052800 - 48052bff (REV 0x00000020)
-+ * CAMERA MMU 48052c00 - 48052fff (REV 0x00000010)
-+ * CAMERA L4 48053000 - 48053fff (0x00200010, 0x00000200, 0x00000000)
-+ * SDMA Mod 48056000 - 48056fff (REV 0x00000020)
-+ * SDMA L4 48057000 - 48057fff (0x00200010, 0x00000200, 0x00000000)
-+ * SSI Top 48058000 - 48058fff (REV Abort)
-+ * SSI GDD 48059000 - 48059fff (REV Abort)
-+ * SSI Port1 4805a000 - 4805afff (REV Abort)
-+ * SSI Port2 4805b000 - 4805bfff (REV Abort)
-+ * SSI L4 4805c000 - 4805cfff (0x00200010, 0x00000200, 0x00000100)
-+ * USB Mod 4805e000 - 480fefff (REV Abort)
-+ * USB L4 4805f000 - 480fffff (0x00200010, 0x01000200, 0x00000100)
-+ * WIN_TRACER1 Mod 48060000 - 48060fff (REV 0x00000020)
-+ * WIN_TRACER1 L4 48061000 - 48061fff (0x00200010, 0x00000200, 0x00000000)
-+ * WIN_TRACER2 Mod 48062000 - 48062fff (REV 0x00000020)
-+ * WIN_TRACER2 L4 48063000 - 48063fff (0x00200010, 0x00000200, 0x00000000)
-+ * WIN_TRACER3 Mod 48064000 - 48064fff (REV 0x00000020)
-+ * WIN_TRACER3 L4 48065000 - 48065fff (0x00200010, 0x00000200, 0x00000000)
-+ * WIN_TRACER4 Top 48066000 - 480660ff (REV 0x00000011)
-+ * WIN_TRACER4 ETT 48066100 - 480661ff (REV 0x00000011)
-+ * WIN_TRACER4 WT 48066200 - 480662ff (REV 0x00000020)
-+ * WIN_TRACER4 L4 48067000 - 48067fff (0x00200010, 0x00000200, 0x00000000)
-+ * XTI Mod 48068000 - 48068fff (REV 0x00000010)
-+ * XTI L4 48069000 - 48069fff (0x00200010, 0x00000200, 0x00000000)
-+ * UART1 Mod 4806a000 - 4806afff (MVR Abort)
-+ * UART1 L4 4806b000 - 4806bfff (0x00200010, 0x00000200, 0x00000000)
-+ * UART2 Mod 4806c000 - 4806cfff (MVR Abort)
-+ * UART2 L4 4806d000 - 4806dfff (0x00200010, 0x00000200, 0x00000000)
-+ * UART3 Mod 4806e000 - 4806efff (MVR 0x20)
-+ * UART3 L4 4806f000 - 4806ffff (0x00200010, 0x00000200, 0x00000000)
-+ * I2C1 Mod 48070000 - 48070fff (REV 0x0034)
-+ * I2C1 L4 48071000 - 48071fff (0x00200010, 0x01000200, 0x01000000)
-+ * I2C2 Mod 48072000 - 48072fff (REV 0x0034)
-+ * I2C2 L4 48073000 - 48073fff (0x00200010, 0x01000200, 0x01000000)
-+ * McBSP1 Mod 48074000 - 48074fff (REV Abort)
-+ * McBSP1 L4 48075000 - 48075fff (0x00200010, 0x01000200, 0x01000000)
-+ * McBSP2 Mod 48076000 - 48076fff (REV Abort)
-+ * McBSP2 L4 48077000 - 48077fff (0x00200010, 0x01000200, 0x01000000)
-+ * GPTIMER3 Mod 48078000 - 48078fff (REV Abort)
-+ * GPTIMER3 L4 48079000 - 48079fff (0x00200010, 0x00000200, 0x00000000)
-+ * GPTIMER4 Mod 4807a000 - 4807afff (REV Abort)
-+ * GPTIMER4 L4 4807b000 - 4807bfff (0x00200010, 0x00000200, 0x00000000)
-+ * GPTIMER5 Mod 4807c000 - 4807cfff (REV Abort)
-+ * GPTIMER5 L4 4807d000 - 4807dfff (0x00200010, 0x00000200, 0x00000000)
-+ * GPTIMER6 Mod 4807e000 - 4807efff (REV Abort)
-+ * GPTIMER6 L4 4807f000 - 4807ffff (0x00200010, 0x00000200, 0x00000000)
-+ * GPTIMER7 Mod 48080000 - 48080fff (REV Abort)
-+ * GPTIMER7 L4 48081000 - 48081fff (0x00200010, 0x00000200, 0x00000000)
-+ * GPTIMER8 Mod 48082000 - 48082fff (REV Abort)
-+ * GPTIMER8 L4 48083000 - 48083fff (0x00200010, 0x00000200, 0x00000000)
-+ * GPTIMER9 Mod 48084000 - 48084fff (REV Abort)
-+ * GPTIMER9 L4 48085000 - 48085fff (0x00200010, 0x00000200, 0x00000000)
-+ * GPTIMER10 Mod 48086000 - 48086fff (REV Abort)
-+ * GPTIMER10 L4 48087000 - 48087fff (0x00200010, 0x00000200, 0x00000000)
-+ * GPTIMER11 Mod 48088000 - 48088fff (REV Abort)
-+ * GPTIMER11 L4 48089000 - 48089fff (0x00200010, 0x00000200, 0x00000000)
-+ * GPTIMER12 Mod 4808a000 - 4808afff (REV Abort)
-+ * GPTIMER12 L4 4808b000 - 4808bfff (0x00200010, 0x00000200, 0x00000000)
-+ * EAC Mod 48090000 - 48090fff (REV Abort)
-+ * EAC L4 48091000 - 48091fff (0x00200010, 0x00000200, 0x00000000)
-+ * FAC Mod 48092000 - 48092fff (REV Abort)
-+ * FAC L4 48093000 - 48093fff (0x00200010, 0x00000200, 0x00000000)
-+ * MAILBOX Mod 48094000 - 48094fff (REV 0x00000010)
-+ * MAILBOX L4 48095000 - 48095fff (0x00200010, 0x00000200, 0x00000000)
-+ * SPI1 Mod 48098000 - 48098fff (REV Abort)
-+ * SPI1 L4 48099000 - 48099fff (0x00200010, 0x00000200, 0x00000000)
-+ * SPI2 Mod 4809a000 - 4809afff (REV Abort)
-+ * SPI2 L4 4809b000 - 4809bfff (0x00200010, 0x00000200, 0x00000000)
-+ * MMC/SDIO Mod 4809c000 - 4809cfff (REV 0x0044)
-+ * MMC/SDIO L4 4809d000 - 4809dfff (0x00200010, 0x01000200, 0x01000000)
-+ * MS_PRO Mod 4809e000 - 4809efff (REV Abort)
-+ * MS_PRO L4 4809f000 - 4809ffff (0x00200010, 0x01000200, 0x01000000)
-+ * RNG Mod 480a0000 - 480a0fff (REV 0xFC066F93?)
-+ * RNG L4 480a1000 - 480a1fff (0x00200010, 0x01000200, 0x00000000)
-+ * DES3DES Mod 480a2000 - 480a2fff (REV 0x00000000?)
-+ * DES3DES L4 480a3000 - 480a3fff (0x00200010, 0x01000200, 0x00000000)
-+ * SHA1MD5 Mod 480a4000 - 480a4fff (REV 0x00000000?)
-+ * SHA1MD5 L4 480a5000 - 480a5fff (0x00200010, 0x01000200, 0x00000000)
-+ * AES Mod 480a6000 - 480a6fff (REV 0x00000000?)
-+ * AES L4 480a7000 - 480a7fff (0x00200010, 0x00000200, 0x00000000)
-+ * PKA Mod 480a8000 - 480a9fff (REV 0x00000000?)
-+ * PKA L4 480aa000 - 480aafff (0x00200010, 0x00000200, 0x00000000)
-+ * MG Mod 480b0000 - 480b0fff (REV Abort)
-+ * MG L4 480b1000 - 480b1fff (0x00200010, 0x01000200, 0x01000000)
-+ * HDQ/1-wire Mod 480b2000 - 480b2fff (REV 0x00000002)
-+ * HDQ/1-wire L4 480b3000 - 480b3fff (0x00200010, 0x00000200, 0x00000000)
-+ * MPU interrupt 480fe000 - 480fefff (REV 0x00000020)
-+ * IVA RAM 5c000000 - 5c01ffff (REV Abort)
-+ * IVA ROM 5c020000 - 5c027fff (REV Abort)
-+ * IMG_BUF_A 5c040000 - 5c040fff (REV Abort)
-+ * IMG_BUF_B 5c042000 - 5c042fff (REV Abort)
-+ * VLCDS 5c048000 - 5c0487ff (REV Abort)
-+ * IMX_COEF 5c049000 - 5c04afff (REV Abort)
-+ * IMX_CMD 5c051000 - 5c051fff (REV Abort)
-+ * VLCDQ 5c053000 - 5c0533ff (REV Abort)
-+ * VLCDH 5c054000 - 5c054fff (REV Abort)
-+ * SEQ_CMD 5c055000 - 5c055fff (REV Abort)
-+ * IMX_REG 5c056000 - 5c0560ff (REV Abort)
-+ * VLCD_REG 5c056100 - 5c0561ff (REV Abort)
-+ * SEQ_REG 5c056200 - 5c0562ff (REV Abort)
-+ * IMG_BUF_REG 5c056300 - 5c0563ff (REV Abort)
-+ * SEQIRQ_REG 5c056400 - 5c0564ff (REV Abort)
-+ * OCP_REG 5c060000 - 5c060fff (REV Abort)
-+ * SYSC_REG 5c070000 - 5c070fff (REV Abort)
-+ * MMU_REG 5d000000 - 5d000fff (REV Abort)
- * sDMA R 68000400 - 680005ff
- * sDMA W 68000600 - 680007ff
- * Display Control 68000800 - 680009ff
-@@ -3849,9 +3849,9 @@
- * GPMC (firewall) 68006000 - 680063ff
- * GPMC (err login) 68006400 - 680067ff
- * SMS (err login) 68006c00 - 68006fff
-- * SMS registers 68008000 - 68008fff
-- * SDRC registers 68009000 - 68009fff
-- * GPMC registers 6800a000 6800afff
-+ * SMS registers 68008000 - 68008fff (REV 0x00000020)
-+ * SDRC registers 68009000 - 68009fff (REV 0x00000020)
-+ * GPMC registers 6800a000 6800afff (REV 0x00000020)
- */
-
- qemu_register_reset(omap2_mpu_reset, s);
-diff -urN 4242/hw/pc.c qemu-omap/hw/pc.c
---- 4242/hw/pc.c 2008-04-24 21:26:22.000000000 +0100
-+++ qemu-omap/hw/pc.c 2008-04-23 09:57:56.000000000 +0100
-@@ -445,6 +445,37 @@
- bdrv_set_boot_sector(drives_table[hda].bdrv, bootsect, sizeof(bootsect));
- }
-
-+static int load_kernel(const char *filename, uint8_t *addr,
-+ uint8_t *real_addr)
-+{
-+ int fd, size;
-+ int setup_sects;
-+
-+ fd = open(filename, O_RDONLY | O_BINARY);
-+ if (fd < 0)
-+ return -1;
-+
-+ /* load 16 bit code */
-+ if (read(fd, real_addr, 512) != 512)
-+ goto fail;
-+ setup_sects = real_addr[0x1F1];
-+ if (!setup_sects)
-+ setup_sects = 4;
-+ if (read(fd, real_addr + 512, setup_sects * 512) !=
-+ setup_sects * 512)
-+ goto fail;
-+
-+ /* load 32 bit code */
-+ size = read(fd, addr, 16 * 1024 * 1024);
-+ if (size < 0)
-+ goto fail;
-+ close(fd);
-+ return size;
-+ fail:
-+ close(fd);
-+ return -1;
-+}
-+
- static long get_file_size(FILE *f)
- {
- long where, size;
-diff -urN 4242/hw/tusb6010.c qemu-omap/hw/tusb6010.c
---- 4242/hw/tusb6010.c 2008-04-23 12:18:54.000000000 +0100
-+++ qemu-omap/hw/tusb6010.c 2008-04-23 09:57:56.000000000 +0100
-@@ -287,9 +287,6 @@
- /* TODO: How is this signalled? */
- }
-
--extern CPUReadMemoryFunc *musb_read[];
--extern CPUWriteMemoryFunc *musb_write[];
--
- static uint32_t tusb_async_readb(void *opaque, target_phys_addr_t addr)
- {
- struct tusb_s *s = (struct tusb_s *) opaque;
-diff -urN 4242/hw/usb.h qemu-omap/hw/usb.h
---- 4242/hw/usb.h 2008-04-23 12:18:54.000000000 +0100
-+++ qemu-omap/hw/usb.h 2008-04-23 09:57:56.000000000 +0100
-@@ -219,6 +219,9 @@
- /* usb-msd.c */
- USBDevice *usb_msd_init(const char *filename);
-
-+/* usb-net.c */
-+USBDevice *usb_net_init(NICInfo *nd);
-+
- /* usb-wacom.c */
- USBDevice *usb_wacom_init(void);
-
-@@ -254,3 +257,7 @@
- uint32_t musb_core_intr_get(struct musb_s *s);
- void musb_core_intr_clear(struct musb_s *s, uint32_t mask);
- void musb_set_size(struct musb_s *s, int epnum, int size, int is_tx);
-+#ifdef NEED_CPU_H
-+extern CPUReadMemoryFunc *musb_read[];
-+extern CPUWriteMemoryFunc *musb_write[];
-+#endif
-diff -urN 4242/hw/usb-hub.c qemu-omap/hw/usb-hub.c
---- 4242/hw/usb-hub.c 2008-04-23 11:43:37.000000000 +0100
-+++ qemu-omap/hw/usb-hub.c 2008-04-23 09:57:56.000000000 +0100
-@@ -146,8 +146,8 @@
- 0x07, /* u8 ep_bLength; */
- 0x05, /* u8 ep_bDescriptorType; Endpoint */
- 0x81, /* u8 ep_bEndpointAddress; IN Endpoint 1 */
-- 0x03, /* u8 ep_bmAttributes; Interrupt */
-- 0x02, 0x00, /* u16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8) */
-+ 0x03, /* u8 ep_bmAttributes; Interrupt */
-+ 0x02, 0x00, /* u16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8) */
- 0xff /* u8 ep_bInterval; (255ms -- usb 2.0 spec) */
- };
-
-diff -urN 4242/hw/usb-net.c qemu-omap/hw/usb-net.c
---- 4242/hw/usb-net.c 1970-01-01 01:00:00.000000000 +0100
-+++ qemu-omap/hw/usb-net.c 2008-04-23 09:57:56.000000000 +0100
-@@ -0,0 +1,1334 @@
-+/*
-+ * QEMU USB Net devices
-+ *
-+ * Copyright (c) 2006 Thomas Sailer
-+ * based on usb-hid.c Copyright (c) 2005 Fabrice Bellard
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a copy
-+ * of this software and associated documentation files (the "Software"), to deal
-+ * in the Software without restriction, including without limitation the rights
-+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ * copies of the Software, and to permit persons to whom the Software is
-+ * furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ * THE SOFTWARE.
-+ */
-+
-+#include "qemu-common.h"
-+#include "usb.h"
-+#include "net.h"
-+#include "../audio/sys-queue.h"
-+
-+typedef uint32_t __le32;
-+#include "ndis.h"
-+
-+/*#define TRAFFIC_DEBUG*/
-+/* Thanks to NetChip Technologies for donating this product ID.
-+ * It's for devices with only CDC Ethernet configurations.
-+ */
-+#define CDC_VENDOR_NUM 0x0525 /* NetChip */
-+#define CDC_PRODUCT_NUM 0xa4a1 /* Linux-USB Ethernet Gadget */
-+/* For hardware that can talk RNDIS and either of the above protocols,
-+ * use this ID ... the windows INF files will know it.
-+ */
-+#define RNDIS_VENDOR_NUM 0x0525 /* NetChip */
-+#define RNDIS_PRODUCT_NUM 0xa4a2 /* Ethernet/RNDIS Gadget */
-+
-+#define STRING_MANUFACTURER 1
-+#define STRING_PRODUCT 2
-+#define STRING_ETHADDR 3
-+#define STRING_DATA 4
-+#define STRING_CONTROL 5
-+#define STRING_RNDIS_CONTROL 6
-+#define STRING_CDC 7
-+#define STRING_SUBSET 8
-+#define STRING_RNDIS 9
-+#define STRING_SERIALNUMBER 10
-+
-+#define DEV_CONFIG_VALUE 1 /* cdc or subset */
-+#define DEV_RNDIS_CONFIG_VALUE 2 /* rndis; optional */
-+
-+#define USB_CDC_SUBCLASS_ACM 0x02
-+#define USB_CDC_SUBCLASS_ETHERNET 0x06
-+
-+#define USB_CDC_PROTO_NONE 0
-+#define USB_CDC_ACM_PROTO_VENDOR 0xff
-+
-+#define USB_CDC_HEADER_TYPE 0x00 /* header_desc */
-+#define USB_CDC_CALL_MANAGEMENT_TYPE 0x01 /* call_mgmt_descriptor */
-+#define USB_CDC_ACM_TYPE 0x02 /* acm_descriptor */
-+#define USB_CDC_UNION_TYPE 0x06 /* union_desc */
-+#define USB_CDC_ETHERNET_TYPE 0x0f /* ether_desc */
-+
-+#define USB_DT_CS_INTERFACE 0x24
-+#define USB_DT_CS_ENDPOINT 0x25
-+
-+#define ClassInterfaceRequest \
-+ ((USB_DIR_IN|USB_TYPE_CLASS|USB_RECIP_INTERFACE)<<8)
-+#define ClassInterfaceOutRequest \
-+ ((USB_DIR_OUT|USB_TYPE_CLASS|USB_RECIP_INTERFACE)<<8)
-+
-+#define USB_CDC_SEND_ENCAPSULATED_COMMAND 0x00
-+#define USB_CDC_GET_ENCAPSULATED_RESPONSE 0x01
-+#define USB_CDC_REQ_SET_LINE_CODING 0x20
-+#define USB_CDC_REQ_GET_LINE_CODING 0x21
-+#define USB_CDC_REQ_SET_CONTROL_LINE_STATE 0x22
-+#define USB_CDC_REQ_SEND_BREAK 0x23
-+#define USB_CDC_SET_ETHERNET_MULTICAST_FILTERS 0x40
-+#define USB_CDC_SET_ETHERNET_PM_PATTERN_FILTER 0x41
-+#define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER 0x42
-+#define USB_CDC_SET_ETHERNET_PACKET_FILTER 0x43
-+#define USB_CDC_GET_ETHERNET_STATISTIC 0x44
-+
-+#define USB_ENDPOINT_XFER_BULK 2
-+#define USB_ENDPOINT_XFER_INT 3
-+
-+#define LOG2_STATUS_INTERVAL_MSEC 5 /* 1 << 5 == 32 msec */
-+#define STATUS_BYTECOUNT 16 /* 8 byte header + data */
-+
-+#define ETH_FRAME_LEN 1514 /* Max. octets in frame sans FCS */
-+
-+/*
-+ * mostly the same descriptor as the linux gadget rndis driver
-+ */
-+static const uint8_t qemu_net_dev_descriptor[] = {
-+ 0x12, /* u8 bLength; */
-+ USB_DT_DEVICE, /* u8 bDescriptorType; Device */
-+ 0x00, 0x02, /* u16 bcdUSB; v2.0 */
-+ USB_CLASS_COMM, /* u8 bDeviceClass; */
-+ 0x00, /* u8 bDeviceSubClass; */
-+ 0x00, /* u8 bDeviceProtocol; [ low/full speeds only ] */
-+ 0x40, /* u8 bMaxPacketSize0 */
-+ RNDIS_VENDOR_NUM & 0xff, RNDIS_VENDOR_NUM >> 8, /* u16 idVendor; */
-+ RNDIS_PRODUCT_NUM & 0xff, RNDIS_PRODUCT_NUM >> 8, /* u16 idProduct; */
-+ 0x00, 0x00, /* u16 bcdDevice */
-+ STRING_MANUFACTURER, /* u8 iManufacturer; */
-+ STRING_PRODUCT, /* u8 iProduct; */
-+ STRING_SERIALNUMBER, /* u8 iSerialNumber; */
-+ 0x02 /* u8 bNumConfigurations; */
-+};
-+
-+static const uint8_t qemu_net_rndis_config_descriptor[] = {
-+ /* Configuration Descriptor */
-+ 0x09, /* u8 bLength */
-+ USB_DT_CONFIG, /* u8 bDescriptorType */
-+ 0x43, 0x00, /* le16 wTotalLength */
-+ 0x02, /* u8 bNumInterfaces */
-+ DEV_RNDIS_CONFIG_VALUE, /* u8 bConfigurationValue */
-+ STRING_RNDIS, /* u8 iConfiguration */
-+ 0xc0, /* u8 bmAttributes */
-+ 0x32, /* u8 bMaxPower */
-+ /* RNDIS Control Interface */
-+ 0x09, /* u8 bLength */
-+ USB_DT_INTERFACE, /* u8 bDescriptorType */
-+ 0x00, /* u8 bInterfaceNumber */
-+ 0x00, /* u8 bAlternateSetting */
-+ 0x01, /* u8 bNumEndpoints */
-+ USB_CLASS_COMM, /* u8 bInterfaceClass */
-+ USB_CDC_SUBCLASS_ACM, /* u8 bInterfaceSubClass */
-+ USB_CDC_ACM_PROTO_VENDOR, /* u8 bInterfaceProtocol */
-+ STRING_RNDIS_CONTROL, /* u8 iInterface */
-+ /* Header Descriptor */
-+ 0x05, /* u8 bLength */
-+ USB_DT_CS_INTERFACE, /* u8 bDescriptorType */
-+ USB_CDC_HEADER_TYPE, /* u8 bDescriptorSubType */
-+ 0x10, 0x01, /* le16 bcdCDC */
-+ /* Call Management Descriptor */
-+ 0x05, /* u8 bLength */
-+ USB_DT_CS_INTERFACE, /* u8 bDescriptorType */
-+ USB_CDC_CALL_MANAGEMENT_TYPE, /* u8 bDescriptorSubType */
-+ 0x00, /* u8 bmCapabilities */
-+ 0x01, /* u8 bDataInterface */
-+ /* ACM Descriptor */
-+ 0x04, /* u8 bLength */
-+ USB_DT_CS_INTERFACE, /* u8 bDescriptorType */
-+ USB_CDC_ACM_TYPE, /* u8 bDescriptorSubType */
-+ 0x00, /* u8 bmCapabilities */
-+ /* Union Descriptor */
-+ 0x05, /* u8 bLength */
-+ USB_DT_CS_INTERFACE, /* u8 bDescriptorType */
-+ USB_CDC_UNION_TYPE, /* u8 bDescriptorSubType */
-+ 0x00, /* u8 bMasterInterface0 */
-+ 0x01, /* u8 bSlaveInterface0 */
-+ /* Status Descriptor */
-+ 0x07, /* u8 bLength */
-+ USB_DT_ENDPOINT, /* u8 bDescriptorType */
-+ USB_DIR_IN | 1, /* u8 bEndpointAddress */
-+ USB_ENDPOINT_XFER_INT, /* u8 bmAttributes */
-+ STATUS_BYTECOUNT & 0xff, STATUS_BYTECOUNT >> 8, /* le16 wMaxPacketSize */
-+ 1 << LOG2_STATUS_INTERVAL_MSEC, /* u8 bInterval */
-+ /* RNDIS Data Interface */
-+ 0x09, /* u8 bLength */
-+ USB_DT_INTERFACE, /* u8 bDescriptorType */
-+ 0x01, /* u8 bInterfaceNumber */
-+ 0x00, /* u8 bAlternateSetting */
-+ 0x02, /* u8 bNumEndpoints */
-+ USB_CLASS_CDC_DATA, /* u8 bInterfaceClass */
-+ 0x00, /* u8 bInterfaceSubClass */
-+ 0x00, /* u8 bInterfaceProtocol */
-+ STRING_DATA, /* u8 iInterface */
-+ /* Source Endpoint */
-+ 0x07, /* u8 bLength */
-+ USB_DT_ENDPOINT, /* u8 bDescriptorType */
-+ USB_DIR_IN | 2, /* u8 bEndpointAddress */
-+ USB_ENDPOINT_XFER_BULK, /* u8 bmAttributes */
-+ 0x40, 0x00, /* le16 wMaxPacketSize */
-+ 0x00, /* u8 bInterval */
-+ /* Sink Endpoint */
-+ 0x07, /* u8 bLength */
-+ USB_DT_ENDPOINT, /* u8 bDescriptorType */
-+ USB_DIR_OUT | 2, /* u8 bEndpointAddress */
-+ USB_ENDPOINT_XFER_BULK, /* u8 bmAttributes */
-+ 0x40, 0x00, /* le16 wMaxPacketSize */
-+ 0x00 /* u8 bInterval */
-+};
-+
-+static const uint8_t qemu_net_cdc_config_descriptor[] = {
-+ /* Configuration Descriptor */
-+ 0x09, /* u8 bLength */
-+ USB_DT_CONFIG, /* u8 bDescriptorType */
-+ 0x50, 0x00, /* le16 wTotalLength */
-+ 0x02, /* u8 bNumInterfaces */
-+ DEV_CONFIG_VALUE, /* u8 bConfigurationValue */
-+ STRING_CDC, /* u8 iConfiguration */
-+ 0xc0, /* u8 bmAttributes */
-+ 0x32, /* u8 bMaxPower */
-+ /* CDC Control Interface */
-+ 0x09, /* u8 bLength */
-+ USB_DT_INTERFACE, /* u8 bDescriptorType */
-+ 0x00, /* u8 bInterfaceNumber */
-+ 0x00, /* u8 bAlternateSetting */
-+ 0x01, /* u8 bNumEndpoints */
-+ USB_CLASS_COMM, /* u8 bInterfaceClass */
-+ USB_CDC_SUBCLASS_ETHERNET, /* u8 bInterfaceSubClass */
-+ USB_CDC_PROTO_NONE, /* u8 bInterfaceProtocol */
-+ STRING_CONTROL, /* u8 iInterface */
-+ /* Header Descriptor */
-+ 0x05, /* u8 bLength */
-+ USB_DT_CS_INTERFACE, /* u8 bDescriptorType */
-+ USB_CDC_HEADER_TYPE, /* u8 bDescriptorSubType */
-+ 0x10, 0x01, /* le16 bcdCDC */
-+ /* Union Descriptor */
-+ 0x05, /* u8 bLength */
-+ USB_DT_CS_INTERFACE, /* u8 bDescriptorType */
-+ USB_CDC_UNION_TYPE, /* u8 bDescriptorSubType */
-+ 0x00, /* u8 bMasterInterface0 */
-+ 0x01, /* u8 bSlaveInterface0 */
-+ /* Ethernet Descriptor */
-+ 0x0d, /* u8 bLength */
-+ USB_DT_CS_INTERFACE, /* u8 bDescriptorType */
-+ USB_CDC_ETHERNET_TYPE, /* u8 bDescriptorSubType */
-+ STRING_ETHADDR, /* u8 iMACAddress */
-+ 0x00, 0x00, 0x00, 0x00, /* le32 bmEthernetStatistics */
-+ ETH_FRAME_LEN & 0xff, ETH_FRAME_LEN >> 8, /* le16 wMaxSegmentSize */
-+ 0x00, 0x00, /* le16 wNumberMCFilters */
-+ 0x00, /* u8 bNumberPowerFilters */
-+ /* Status Descriptor */
-+ 0x07, /* u8 bLength */
-+ USB_DT_ENDPOINT, /* u8 bDescriptorType */
-+ USB_DIR_IN | 1, /* u8 bEndpointAddress */
-+ USB_ENDPOINT_XFER_INT, /* u8 bmAttributes */
-+ STATUS_BYTECOUNT & 0xff, STATUS_BYTECOUNT >> 8, /* le16 wMaxPacketSize */
-+ 1 << LOG2_STATUS_INTERVAL_MSEC, /* u8 bInterval */
-+ /* CDC Data (nop) Interface */
-+ 0x09, /* u8 bLength */
-+ USB_DT_INTERFACE, /* u8 bDescriptorType */
-+ 0x01, /* u8 bInterfaceNumber */
-+ 0x00, /* u8 bAlternateSetting */
-+ 0x00, /* u8 bNumEndpoints */
-+ USB_CLASS_CDC_DATA, /* u8 bInterfaceClass */
-+ 0x00, /* u8 bInterfaceSubClass */
-+ 0x00, /* u8 bInterfaceProtocol */
-+ 0x00, /* u8 iInterface */
-+ /* CDC Data Interface */
-+ 0x09, /* u8 bLength */
-+ USB_DT_INTERFACE, /* u8 bDescriptorType */
-+ 0x01, /* u8 bInterfaceNumber */
-+ 0x01, /* u8 bAlternateSetting */
-+ 0x02, /* u8 bNumEndpoints */
-+ USB_CLASS_CDC_DATA, /* u8 bInterfaceClass */
-+ 0x00, /* u8 bInterfaceSubClass */
-+ 0x00, /* u8 bInterfaceProtocol */
-+ STRING_DATA, /* u8 iInterface */
-+ /* Source Endpoint */
-+ 0x07, /* u8 bLength */
-+ USB_DT_ENDPOINT, /* u8 bDescriptorType */
-+ USB_DIR_IN | 2, /* u8 bEndpointAddress */
-+ USB_ENDPOINT_XFER_BULK, /* u8 bmAttributes */
-+ 0x40, 0x00, /* le16 wMaxPacketSize */
-+ 0x00, /* u8 bInterval */
-+ /* Sink Endpoint */
-+ 0x07, /* u8 bLength */
-+ USB_DT_ENDPOINT, /* u8 bDescriptorType */
-+ USB_DIR_OUT | 2, /* u8 bEndpointAddress */
-+ USB_ENDPOINT_XFER_BULK, /* u8 bmAttributes */
-+ 0x40, 0x00, /* le16 wMaxPacketSize */
-+ 0x00 /* u8 bInterval */
-+};
-+
-+/*
-+ * RNDIS Status
-+ */
-+
-+#define RNDIS_MAXIMUM_FRAME_SIZE 1518
-+#define RNDIS_MAX_TOTAL_SIZE 1558
-+
-+/* Remote NDIS Versions */
-+#define RNDIS_MAJOR_VERSION 1
-+#define RNDIS_MINOR_VERSION 0
-+
-+/* Status Values */
-+#define RNDIS_STATUS_SUCCESS 0x00000000U /* Success */
-+#define RNDIS_STATUS_FAILURE 0xC0000001U /* Unspecified error */
-+#define RNDIS_STATUS_INVALID_DATA 0xC0010015U /* Invalid data */
-+#define RNDIS_STATUS_NOT_SUPPORTED 0xC00000BBU /* Unsupported request */
-+#define RNDIS_STATUS_MEDIA_CONNECT 0x4001000BU /* Device connected */
-+#define RNDIS_STATUS_MEDIA_DISCONNECT 0x4001000CU /* Device disconnected */
-+
-+/* Message Set for Connectionless (802.3) Devices */
-+#define REMOTE_NDIS_PACKET_MSG 0x00000001U
-+#define REMOTE_NDIS_INITIALIZE_MSG 0x00000002U /* Initialize device */
-+#define REMOTE_NDIS_HALT_MSG 0x00000003U
-+#define REMOTE_NDIS_QUERY_MSG 0x00000004U
-+#define REMOTE_NDIS_SET_MSG 0x00000005U
-+#define REMOTE_NDIS_RESET_MSG 0x00000006U
-+#define REMOTE_NDIS_INDICATE_STATUS_MSG 0x00000007U
-+#define REMOTE_NDIS_KEEPALIVE_MSG 0x00000008U
-+
-+/* Message completion */
-+#define REMOTE_NDIS_INITIALIZE_CMPLT 0x80000002U
-+#define REMOTE_NDIS_QUERY_CMPLT 0x80000004U
-+#define REMOTE_NDIS_SET_CMPLT 0x80000005U
-+#define REMOTE_NDIS_RESET_CMPLT 0x80000006U
-+#define REMOTE_NDIS_KEEPALIVE_CMPLT 0x80000008U
-+
-+/* Device Flags */
-+#define RNDIS_DF_CONNECTIONLESS 0x00000001U
-+#define RNDIS_DF_CONNECTION_ORIENTED 0x00000002U
-+
-+#define RNDIS_MEDIUM_802_3 0x00000000U
-+
-+/* from drivers/net/sk98lin/h/skgepnmi.h */
-+#define OID_PNP_CAPABILITIES 0xFD010100
-+#define OID_PNP_SET_POWER 0xFD010101
-+#define OID_PNP_QUERY_POWER 0xFD010102
-+#define OID_PNP_ADD_WAKE_UP_PATTERN 0xFD010103
-+#define OID_PNP_REMOVE_WAKE_UP_PATTERN 0xFD010104
-+#define OID_PNP_ENABLE_WAKE_UP 0xFD010106
-+
-+typedef struct rndis_init_msg_type
-+{
-+ __le32 MessageType;
-+ __le32 MessageLength;
-+ __le32 RequestID;
-+ __le32 MajorVersion;
-+ __le32 MinorVersion;
-+ __le32 MaxTransferSize;
-+} rndis_init_msg_type;
-+
-+typedef struct rndis_init_cmplt_type
-+{
-+ __le32 MessageType;
-+ __le32 MessageLength;
-+ __le32 RequestID;
-+ __le32 Status;
-+ __le32 MajorVersion;
-+ __le32 MinorVersion;
-+ __le32 DeviceFlags;
-+ __le32 Medium;
-+ __le32 MaxPacketsPerTransfer;
-+ __le32 MaxTransferSize;
-+ __le32 PacketAlignmentFactor;
-+ __le32 AFListOffset;
-+ __le32 AFListSize;
-+} rndis_init_cmplt_type;
-+
-+typedef struct rndis_halt_msg_type
-+{
-+ __le32 MessageType;
-+ __le32 MessageLength;
-+ __le32 RequestID;
-+} rndis_halt_msg_type;
-+
-+typedef struct rndis_query_msg_type
-+{
-+ __le32 MessageType;
-+ __le32 MessageLength;
-+ __le32 RequestID;
-+ __le32 OID;
-+ __le32 InformationBufferLength;
-+ __le32 InformationBufferOffset;
-+ __le32 DeviceVcHandle;
-+} rndis_query_msg_type;
-+
-+typedef struct rndis_query_cmplt_type
-+{
-+ __le32 MessageType;
-+ __le32 MessageLength;
-+ __le32 RequestID;
-+ __le32 Status;
-+ __le32 InformationBufferLength;
-+ __le32 InformationBufferOffset;
-+} rndis_query_cmplt_type;
-+
-+typedef struct rndis_set_msg_type
-+{
-+ __le32 MessageType;
-+ __le32 MessageLength;
-+ __le32 RequestID;
-+ __le32 OID;
-+ __le32 InformationBufferLength;
-+ __le32 InformationBufferOffset;
-+ __le32 DeviceVcHandle;
-+} rndis_set_msg_type;
-+
-+typedef struct rndis_set_cmplt_type
-+{
-+ __le32 MessageType;
-+ __le32 MessageLength;
-+ __le32 RequestID;
-+ __le32 Status;
-+} rndis_set_cmplt_type;
-+
-+typedef struct rndis_reset_msg_type
-+{
-+ __le32 MessageType;
-+ __le32 MessageLength;
-+ __le32 Reserved;
-+} rndis_reset_msg_type;
-+
-+typedef struct rndis_reset_cmplt_type
-+{
-+ __le32 MessageType;
-+ __le32 MessageLength;
-+ __le32 Status;
-+ __le32 AddressingReset;
-+} rndis_reset_cmplt_type;
-+
-+typedef struct rndis_indicate_status_msg_type
-+{
-+ __le32 MessageType;
-+ __le32 MessageLength;
-+ __le32 Status;
-+ __le32 StatusBufferLength;
-+ __le32 StatusBufferOffset;
-+} rndis_indicate_status_msg_type;
-+
-+typedef struct rndis_keepalive_msg_type
-+{
-+ __le32 MessageType;
-+ __le32 MessageLength;
-+ __le32 RequestID;
-+} rndis_keepalive_msg_type;
-+
-+typedef struct rndis_keepalive_cmplt_type
-+{
-+ __le32 MessageType;
-+ __le32 MessageLength;
-+ __le32 RequestID;
-+ __le32 Status;
-+} rndis_keepalive_cmplt_type;
-+
-+struct rndis_packet_msg_type
-+{
-+ __le32 MessageType;
-+ __le32 MessageLength;
-+ __le32 DataOffset;
-+ __le32 DataLength;
-+ __le32 OOBDataOffset;
-+ __le32 OOBDataLength;
-+ __le32 NumOOBDataElements;
-+ __le32 PerPacketInfoOffset;
-+ __le32 PerPacketInfoLength;
-+ __le32 VcHandle;
-+ __le32 Reserved;
-+};
-+
-+struct rndis_config_parameter
-+{
-+ __le32 ParameterNameOffset;
-+ __le32 ParameterNameLength;
-+ __le32 ParameterType;
-+ __le32 ParameterValueOffset;
-+ __le32 ParameterValueLength;
-+};
-+
-+/* implementation specific */
-+enum rndis_state
-+{
-+ RNDIS_UNINITIALIZED,
-+ RNDIS_INITIALIZED,
-+ RNDIS_DATA_INITIALIZED,
-+};
-+
-+static const uint32_t oid_supported_list[] =
-+{
-+ /* the general stuff */
-+ OID_GEN_SUPPORTED_LIST,
-+ OID_GEN_HARDWARE_STATUS,
-+ OID_GEN_MEDIA_SUPPORTED,
-+ OID_GEN_MEDIA_IN_USE,
-+ OID_GEN_MAXIMUM_FRAME_SIZE,
-+ OID_GEN_LINK_SPEED,
-+ OID_GEN_TRANSMIT_BLOCK_SIZE,
-+ OID_GEN_RECEIVE_BLOCK_SIZE,
-+ OID_GEN_VENDOR_ID,
-+ OID_GEN_VENDOR_DESCRIPTION,
-+ OID_GEN_VENDOR_DRIVER_VERSION,
-+ OID_GEN_CURRENT_PACKET_FILTER,
-+ OID_GEN_MAXIMUM_TOTAL_SIZE,
-+ OID_GEN_MEDIA_CONNECT_STATUS,
-+ OID_GEN_PHYSICAL_MEDIUM,
-+ /* the statistical stuff */
-+ OID_GEN_XMIT_OK,
-+ OID_GEN_RCV_OK,
-+ OID_GEN_XMIT_ERROR,
-+ OID_GEN_RCV_ERROR,
-+ OID_GEN_RCV_NO_BUFFER,
-+ /* mandatory 802.3 */
-+ /* the general stuff */
-+ OID_802_3_PERMANENT_ADDRESS,
-+ OID_802_3_CURRENT_ADDRESS,
-+ OID_802_3_MULTICAST_LIST,
-+ OID_802_3_MAC_OPTIONS,
-+ OID_802_3_MAXIMUM_LIST_SIZE,
-+
-+ /* the statistical stuff */
-+ OID_802_3_RCV_ERROR_ALIGNMENT,
-+ OID_802_3_XMIT_ONE_COLLISION,
-+ OID_802_3_XMIT_MORE_COLLISIONS
-+};
-+
-+struct rndis_response {
-+ TAILQ_ENTRY(rndis_response) entries;
-+ uint32_t length;
-+ uint8_t buf[0];
-+};
-+
-+
-+typedef struct USBNetState {
-+ USBDevice dev;
-+
-+ unsigned int rndis;
-+ enum rndis_state rndis_state;
-+ uint32_t medium;
-+ uint32_t speed;
-+ uint32_t media_state;
-+ uint16_t filter;
-+ uint32_t vendorid;
-+ uint8_t mac[6];
-+
-+ unsigned int out_ptr;
-+ uint8_t out_buf[2048];
-+
-+ USBPacket *inpkt;
-+ unsigned int in_ptr, in_len;
-+ uint8_t in_buf[2048];
-+
-+ VLANClientState *vc;
-+ TAILQ_HEAD(rndis_resp_head, rndis_response) rndis_resp;
-+} USBNetState;
-+
-+
-+static int ndis_query(USBNetState *s, uint32_t oid, uint8_t *inbuf, unsigned int inlen, uint8_t *outbuf)
-+{
-+ switch (oid) {
-+ /* general oids (table 4-1) */
-+ /* mandatory */
-+ case OID_GEN_SUPPORTED_LIST:
-+ {
-+ unsigned int i, count = sizeof(oid_supported_list) / sizeof(uint32_t);
-+ for (i = 0; i < count; i++)
-+ ((__le32 *)outbuf)[i] = cpu_to_le32(oid_supported_list[i]);
-+ return sizeof(oid_supported_list);
-+ }
-+
-+ /* mandatory */
-+ case OID_GEN_HARDWARE_STATUS:
-+ *((__le32 *)outbuf) = cpu_to_le32(0);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_MEDIA_SUPPORTED:
-+ *((__le32 *)outbuf) = cpu_to_le32(s->medium);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_MEDIA_IN_USE:
-+ *((__le32 *)outbuf) = cpu_to_le32(s->medium);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_MAXIMUM_FRAME_SIZE:
-+ *((__le32 *)outbuf) = cpu_to_le32(ETH_FRAME_LEN);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_LINK_SPEED:
-+ *((__le32 *)outbuf) = cpu_to_le32(s->speed);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_TRANSMIT_BLOCK_SIZE:
-+ *((__le32 *)outbuf) = cpu_to_le32(ETH_FRAME_LEN);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_RECEIVE_BLOCK_SIZE:
-+ *((__le32 *)outbuf) = cpu_to_le32(ETH_FRAME_LEN);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_VENDOR_ID:
-+ *((__le32 *)outbuf) = cpu_to_le32(0x1234);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_VENDOR_DESCRIPTION:
-+ strcpy(outbuf, "QEMU USB RNDIS Net");
-+ return strlen(outbuf) + 1;
-+
-+ case OID_GEN_VENDOR_DRIVER_VERSION:
-+ *((__le32 *)outbuf) = cpu_to_le32(1);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_CURRENT_PACKET_FILTER:
-+ *((__le32 *)outbuf) = cpu_to_le32(s->filter);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_MAXIMUM_TOTAL_SIZE:
-+ *((__le32 *)outbuf) = cpu_to_le32(RNDIS_MAX_TOTAL_SIZE);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_MEDIA_CONNECT_STATUS:
-+ *((__le32 *)outbuf) = cpu_to_le32(s->media_state);
-+ return sizeof(__le32);
-+
-+ case OID_GEN_PHYSICAL_MEDIUM:
-+ *((__le32 *)outbuf) = cpu_to_le32(0);
-+ return sizeof(__le32);
-+
-+ case OID_GEN_MAC_OPTIONS:
-+ *((__le32 *)outbuf) = cpu_to_le32(NDIS_MAC_OPTION_RECEIVE_SERIALIZED | NDIS_MAC_OPTION_FULL_DUPLEX);
-+ return sizeof(__le32);
-+
-+ /* statistics OIDs (table 4-2) */
-+ /* mandatory */
-+ case OID_GEN_XMIT_OK:
-+ *((__le32 *)outbuf) = cpu_to_le32(0);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_RCV_OK:
-+ *((__le32 *)outbuf) = cpu_to_le32(0);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_XMIT_ERROR:
-+ *((__le32 *)outbuf) = cpu_to_le32(0);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_RCV_ERROR:
-+ *((__le32 *)outbuf) = cpu_to_le32(0);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_GEN_RCV_NO_BUFFER:
-+ *((__le32 *)outbuf) = cpu_to_le32(0);
-+ return sizeof(__le32);
-+
-+ /* ieee802.3 OIDs (table 4-3) */
-+ /* mandatory */
-+ case OID_802_3_PERMANENT_ADDRESS:
-+ memcpy(outbuf, s->mac, 6);
-+ return 6;
-+
-+ /* mandatory */
-+ case OID_802_3_CURRENT_ADDRESS:
-+ memcpy(outbuf, s->mac, 6);
-+ return 6;
-+
-+ /* mandatory */
-+ case OID_802_3_MULTICAST_LIST:
-+ *((__le32 *)outbuf) = cpu_to_le32(0xE0000000);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_802_3_MAXIMUM_LIST_SIZE:
-+ *((__le32 *)outbuf) = cpu_to_le32(1);
-+ return sizeof(__le32);
-+
-+ case OID_802_3_MAC_OPTIONS:
-+ return 0;
-+
-+ /* ieee802.3 statistics OIDs (table 4-4) */
-+ /* mandatory */
-+ case OID_802_3_RCV_ERROR_ALIGNMENT:
-+ *((__le32 *)outbuf) = cpu_to_le32(0);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_802_3_XMIT_ONE_COLLISION:
-+ *((__le32 *)outbuf) = cpu_to_le32(0);
-+ return sizeof(__le32);
-+
-+ /* mandatory */
-+ case OID_802_3_XMIT_MORE_COLLISIONS:
-+ *((__le32 *)outbuf) = cpu_to_le32(0);
-+ return sizeof(__le32);
-+
-+ default:
-+ fprintf(stderr, "usbnet: unknown OID 0x%08x\n", oid);
-+ return 0;
-+ }
-+ return -1;
-+}
-+
-+static int ndis_set(USBNetState *s, uint32_t oid, uint8_t *inbuf, unsigned int inlen)
-+{
-+ switch (oid) {
-+ case OID_GEN_CURRENT_PACKET_FILTER:
-+ s->filter = le32_to_cpup((__le32 *)inbuf);
-+ if (s->filter) {
-+ s->rndis_state = RNDIS_DATA_INITIALIZED;
-+ } else {
-+ s->rndis_state = RNDIS_INITIALIZED;
-+ }
-+ return 0;
-+
-+ case OID_802_3_MULTICAST_LIST:
-+ return 0;
-+
-+ }
-+ return -1;
-+}
-+
-+static int rndis_get_response(USBNetState *s, uint8_t *buf)
-+{
-+ int ret = 0;
-+ struct rndis_response *r = s->rndis_resp.tqh_first;
-+ if (!r)
-+ return ret;
-+ TAILQ_REMOVE(&s->rndis_resp, r, entries);
-+ ret = r->length;
-+ memcpy(buf, r->buf, r->length);
-+ qemu_free(r);
-+ return ret;
-+}
-+
-+static void *rndis_queue_response(USBNetState *s, unsigned int length)
-+{
-+ struct rndis_response *r = qemu_mallocz(sizeof(struct rndis_response) + length);
-+ if (!r)
-+ return NULL;
-+ TAILQ_INSERT_TAIL(&s->rndis_resp, r, entries);
-+ r->length = length;
-+ return &r->buf[0];
-+}
-+
-+static void rndis_clear_responsequeue(USBNetState *s)
-+{
-+ struct rndis_response *r;
-+
-+ while ((r = s->rndis_resp.tqh_first)) {
-+ TAILQ_REMOVE(&s->rndis_resp, r, entries);
-+ qemu_free(r);
-+ }
-+}
-+
-+static int rndis_init_response(USBNetState *s, rndis_init_msg_type *buf)
-+{
-+ rndis_init_cmplt_type *resp = rndis_queue_response(s, sizeof(rndis_init_cmplt_type));
-+ if (!resp)
-+ return USB_RET_STALL;
-+ resp->MessageType = cpu_to_le32(REMOTE_NDIS_INITIALIZE_CMPLT);
-+ resp->MessageLength = cpu_to_le32(sizeof(rndis_init_cmplt_type));
-+ resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
-+ resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
-+ resp->MajorVersion = cpu_to_le32(RNDIS_MAJOR_VERSION);
-+ resp->MinorVersion = cpu_to_le32(RNDIS_MINOR_VERSION);
-+ resp->DeviceFlags = cpu_to_le32(RNDIS_DF_CONNECTIONLESS);
-+ resp->Medium = cpu_to_le32(RNDIS_MEDIUM_802_3);
-+ resp->MaxPacketsPerTransfer = cpu_to_le32(1);
-+ resp->MaxTransferSize = cpu_to_le32(ETH_FRAME_LEN + sizeof(struct rndis_packet_msg_type) + 22);
-+ resp->PacketAlignmentFactor = cpu_to_le32(0);
-+ resp->AFListOffset = cpu_to_le32(0);
-+ resp->AFListSize = cpu_to_le32(0);
-+ return 0;
-+}
-+
-+static int rndis_query_response(USBNetState *s, rndis_query_msg_type *buf, unsigned int length)
-+{
-+ rndis_query_cmplt_type *resp;
-+ uint8_t infobuf[sizeof(oid_supported_list)]; /* oid_supported_list is the largest data reply */
-+ uint32_t bufoffs, buflen;
-+ int infobuflen;
-+ unsigned int resplen;
-+ bufoffs = le32_to_cpu(buf->InformationBufferOffset) + 8;
-+ buflen = le32_to_cpu(buf->InformationBufferLength);
-+ if (bufoffs + buflen > length)
-+ return USB_RET_STALL;
-+ infobuflen = ndis_query(s, le32_to_cpu(buf->OID), bufoffs + (uint8_t *)buf, buflen, infobuf);
-+ resplen = sizeof(rndis_query_cmplt_type) + ((infobuflen < 0) ? 0 : infobuflen);
-+ resp = rndis_queue_response(s, resplen);
-+ if (!resp)
-+ return USB_RET_STALL;
-+ resp->MessageType = cpu_to_le32(REMOTE_NDIS_QUERY_CMPLT);
-+ resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
-+ resp->MessageLength = cpu_to_le32(resplen);
-+ if (infobuflen < 0) {
-+ /* OID not supported */
-+ resp->Status = cpu_to_le32(RNDIS_STATUS_NOT_SUPPORTED);
-+ resp->InformationBufferLength = cpu_to_le32(0);
-+ resp->InformationBufferOffset = cpu_to_le32(0);
-+ return 0;
-+ }
-+ resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
-+ resp->InformationBufferOffset = cpu_to_le32(infobuflen ? sizeof(rndis_query_cmplt_type) - 8 : 0);
-+ resp->InformationBufferLength = cpu_to_le32(infobuflen);
-+ memcpy(resp + 1, infobuf, infobuflen);
-+ return 0;
-+}
-+
-+static int rndis_set_response(USBNetState *s, rndis_set_msg_type *buf, unsigned int length)
-+{
-+ rndis_set_cmplt_type *resp = rndis_queue_response(s, sizeof(rndis_set_cmplt_type));
-+ uint32_t bufoffs, buflen;
-+ if (!resp)
-+ return USB_RET_STALL;
-+ bufoffs = le32_to_cpu(buf->InformationBufferOffset) + 8;
-+ buflen = le32_to_cpu(buf->InformationBufferLength);
-+ if (bufoffs + buflen > length)
-+ return USB_RET_STALL;
-+ int ret = ndis_set(s, le32_to_cpu(buf->OID), bufoffs + (uint8_t *)buf, buflen);
-+ resp->MessageType = cpu_to_le32(REMOTE_NDIS_SET_CMPLT);
-+ resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
-+ resp->MessageLength = cpu_to_le32(sizeof(rndis_set_cmplt_type));
-+ if (ret < 0) {
-+ /* OID not supported */
-+ resp->Status = cpu_to_le32(RNDIS_STATUS_NOT_SUPPORTED);
-+ return 0;
-+ }
-+ resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
-+ return 0;
-+}
-+
-+static int rndis_reset_response(USBNetState *s, rndis_reset_msg_type *buf)
-+{
-+ rndis_reset_cmplt_type *resp = rndis_queue_response(s, sizeof(rndis_reset_cmplt_type));
-+ if (!resp)
-+ return USB_RET_STALL;
-+ resp->MessageType = cpu_to_le32(REMOTE_NDIS_RESET_CMPLT);
-+ resp->MessageLength = cpu_to_le32(sizeof(rndis_reset_cmplt_type));
-+ resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
-+ /* resent information */
-+ resp->AddressingReset = cpu_to_le32(1);
-+ return 0;
-+}
-+
-+static int rndis_keepalive_response(USBNetState *s, rndis_keepalive_msg_type *buf)
-+{
-+ rndis_keepalive_cmplt_type *resp = rndis_queue_response(s, sizeof(rndis_keepalive_cmplt_type));
-+ if (!resp)
-+ return USB_RET_STALL;
-+ resp->MessageType = cpu_to_le32(REMOTE_NDIS_KEEPALIVE_CMPLT);
-+ resp->MessageLength = cpu_to_le32(sizeof(rndis_keepalive_cmplt_type));
-+ resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
-+ resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
-+ return 0;
-+}
-+
-+static int rndis_parse(USBNetState *s, uint8_t *data, int length)
-+{
-+ uint32_t MsgType, MsgLength;
-+ __le32 *tmp = (__le32 *)data;
-+ MsgType = le32_to_cpup(tmp++);
-+ MsgLength = le32_to_cpup(tmp++);
-+
-+ switch (MsgType) {
-+ case REMOTE_NDIS_INITIALIZE_MSG:
-+ s->rndis_state = RNDIS_INITIALIZED;
-+ return rndis_init_response(s, (rndis_init_msg_type *)data);
-+
-+ case REMOTE_NDIS_HALT_MSG:
-+ s->rndis_state = RNDIS_UNINITIALIZED;
-+ return 0;
-+
-+ case REMOTE_NDIS_QUERY_MSG:
-+ return rndis_query_response(s, (rndis_query_msg_type *)data, length);
-+
-+ case REMOTE_NDIS_SET_MSG:
-+ return rndis_set_response(s, (rndis_set_msg_type *)data, length);
-+
-+ case REMOTE_NDIS_RESET_MSG:
-+ rndis_clear_responsequeue(s);
-+ s->out_ptr = s->in_ptr = s->in_len = 0;
-+ return rndis_reset_response(s, (rndis_reset_msg_type *)data);
-+
-+ case REMOTE_NDIS_KEEPALIVE_MSG:
-+ /* For USB: host does this every 5 seconds */
-+ return rndis_keepalive_response(s, (rndis_keepalive_msg_type *)data);
-+ }
-+ return USB_RET_STALL;
-+}
-+
-+static void usb_net_handle_reset(USBDevice *dev)
-+{
-+}
-+
-+static int usb_net_handle_control(USBDevice *dev, int request, int value,
-+ int index, int length, uint8_t *data)
-+{
-+ USBNetState *s = (USBNetState *)dev;
-+ int ret = 0;
-+
-+ switch(request) {
-+ case DeviceRequest | USB_REQ_GET_STATUS:
-+ data[0] = (1 << USB_DEVICE_SELF_POWERED) |
-+ (dev->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP);
-+ data[1] = 0x00;
-+ ret = 2;
-+ break;
-+
-+ case DeviceOutRequest | USB_REQ_CLEAR_FEATURE:
-+ if (value == USB_DEVICE_REMOTE_WAKEUP) {
-+ dev->remote_wakeup = 0;
-+ } else {
-+ goto fail;
-+ }
-+ ret = 0;
-+ break;
-+
-+ case DeviceOutRequest | USB_REQ_SET_FEATURE:
-+ if (value == USB_DEVICE_REMOTE_WAKEUP) {
-+ dev->remote_wakeup = 1;
-+ } else {
-+ goto fail;
-+ }
-+ ret = 0;
-+ break;
-+
-+ case DeviceOutRequest | USB_REQ_SET_ADDRESS:
-+ dev->addr = value;
-+ ret = 0;
-+ break;
-+
-+ case ClassInterfaceOutRequest | USB_CDC_SEND_ENCAPSULATED_COMMAND:
-+ if (!s->rndis || value || index != 0)
-+ goto fail;
-+#if TRAFFIC_DEBUG
-+ {
-+ unsigned int i;
-+ fprintf(stderr, "SEND_ENCAPSULATED_COMMAND:");
-+ for (i = 0; i < length; i++) {
-+ if (!(i & 15))
-+ fprintf(stderr, "\n%04X:", i);
-+ fprintf(stderr, " %02X", data[i]);
-+ }
-+ fprintf(stderr, "\n\n");
-+ }
-+#endif
-+ ret = rndis_parse(s, data, length);
-+ break;
-+
-+ case ClassInterfaceRequest | USB_CDC_GET_ENCAPSULATED_RESPONSE:
-+ if (!s->rndis || value || index != 0)
-+ goto fail;
-+ ret = rndis_get_response(s, data);
-+ if (!ret) {
-+ data[0] = 0;
-+ ret = 1;
-+ }
-+#if TRAFFIC_DEBUG
-+ {
-+ unsigned int i;
-+ fprintf(stderr, "GET_ENCAPSULATED_RESPONSE:");
-+ for (i = 0; i < ret; i++) {
-+ if (!(i & 15))
-+ fprintf(stderr, "\n%04X:", i);
-+ fprintf(stderr, " %02X", data[i]);
-+ }
-+ fprintf(stderr, "\n\n");
-+ }
-+#endif
-+ break;
-+
-+ case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
-+ switch(value >> 8) {
-+ case USB_DT_DEVICE:
-+ ret = sizeof(qemu_net_dev_descriptor);
-+ memcpy(data, qemu_net_dev_descriptor, ret);
-+ break;
-+
-+ case USB_DT_CONFIG:
-+ switch (value & 0xff) {
-+ case 0:
-+ ret = sizeof(qemu_net_rndis_config_descriptor);
-+ memcpy(data, qemu_net_rndis_config_descriptor,
-+ ret);
-+ break;
-+
-+ case 1:
-+ ret = sizeof(qemu_net_cdc_config_descriptor);
-+ memcpy(data, qemu_net_cdc_config_descriptor,
-+ ret);
-+ break;
-+
-+ default:
-+ goto fail;
-+ }
-+ data[2] = ret & 0xff;
-+ data[3] = ret >> 8;
-+ break;
-+
-+ case USB_DT_STRING:
-+ switch (value & 0xff) {
-+ case 0:
-+ /* language ids */
-+ data[0] = 4;
-+ data[1] = 3;
-+ data[2] = 0x09;
-+ data[3] = 0x04;
-+ ret = 4;
-+ break;
-+
-+ case STRING_MANUFACTURER:
-+ ret = set_usb_string(data, "QEMU");
-+ break;
-+
-+ case STRING_PRODUCT:
-+ ret = set_usb_string(data, "RNDIS/QEMU USB Network Device");
-+ break;
-+
-+ case STRING_ETHADDR:
-+ ret = set_usb_string(data, "400102030405");
-+ break;
-+
-+ case STRING_DATA:
-+ ret = set_usb_string(data, "QEMU USB Net Data Interface");
-+ break;
-+
-+ case STRING_CONTROL:
-+ ret = set_usb_string(data, "QEMU USB Net Control Interface");
-+ break;
-+
-+ case STRING_RNDIS_CONTROL:
-+ ret = set_usb_string(data, "QEMU USB Net RNDIS Control Interface");
-+ break;
-+
-+ case STRING_CDC:
-+ ret = set_usb_string(data, "QEMU USB Net CDC");
-+ break;
-+
-+ case STRING_SUBSET:
-+ ret = set_usb_string(data, "QEMU USB Net Subset");
-+ break;
-+
-+ case STRING_RNDIS:
-+ ret = set_usb_string(data, "QEMU USB Net RNDIS");
-+ break;
-+
-+ case STRING_SERIALNUMBER:
-+ ret = set_usb_string(data, "1");
-+ break;
-+
-+ default:
-+ goto fail;
-+ }
-+ break;
-+
-+ default:
-+ goto fail;
-+ }
-+ break;
-+
-+ case DeviceRequest | USB_REQ_GET_CONFIGURATION:
-+ data[0] = s->rndis ? DEV_RNDIS_CONFIG_VALUE : DEV_CONFIG_VALUE;
-+ ret = 1;
-+ break;
-+
-+ case DeviceOutRequest | USB_REQ_SET_CONFIGURATION:
-+ switch (value & 0xff) {
-+ case DEV_CONFIG_VALUE:
-+ s->rndis = 0;
-+ break;
-+
-+ case DEV_RNDIS_CONFIG_VALUE:
-+ s->rndis = 1;
-+ break;
-+
-+ default:
-+ goto fail;
-+ }
-+ ret = 0;
-+ break;
-+
-+ case DeviceRequest | USB_REQ_GET_INTERFACE:
-+ case InterfaceRequest | USB_REQ_GET_INTERFACE:
-+ data[0] = 0;
-+ ret = 1;
-+ break;
-+
-+ case DeviceOutRequest | USB_REQ_SET_INTERFACE:
-+ case InterfaceOutRequest | USB_REQ_SET_INTERFACE:
-+ ret = 0;
-+ break;
-+
-+ default:
-+ fail:
-+ fprintf(stderr, "usbnet: failed control transaction: request 0x%x value 0x%x index 0x%x length 0x%x\n",
-+ request, value, index, length);
-+ ret = USB_RET_STALL;
-+ break;
-+ }
-+ return ret;
-+}
-+
-+static int usb_net_handle_statusin(USBNetState *s, USBPacket *p)
-+{
-+ int ret = 8;
-+ if (p->len < 8)
-+ return USB_RET_STALL;
-+ ((__le32 *)p->data)[0] = cpu_to_le32(1);
-+ ((__le32 *)p->data)[1] = cpu_to_le32(0);
-+ if (!s->rndis_resp.tqh_first)
-+ ret = USB_RET_NAK;
-+#if DEBUG
-+ fprintf(stderr, "usbnet: interrupt poll len %u return %d", p->len, ret);
-+ {
-+ int i;
-+ fprintf(stderr, ":");
-+ for (i = 0; i < ret; i++) {
-+ if (!(i & 15))
-+ fprintf(stderr, "\n%04X:", i);
-+ fprintf(stderr, " %02X", p->data[i]);
-+ }
-+ fprintf(stderr, "\n\n");
-+ }
-+#endif
-+ return ret;
-+}
-+
-+static int usb_net_handle_datain(USBNetState *s, USBPacket *p)
-+{
-+ int ret = USB_RET_NAK;
-+
-+ if (s->in_ptr > s->in_len) {
-+ s->in_ptr = s->in_len = 0;
-+ ret = USB_RET_NAK;
-+ return ret;
-+ }
-+ if (!s->in_len) {
-+ ret = USB_RET_NAK;
-+ return ret;
-+ }
-+ ret = s->in_len - s->in_ptr;
-+ if (ret > p->len)
-+ ret = p->len;
-+ memcpy(p->data, &s->in_buf[s->in_ptr], ret);
-+ s->in_ptr += ret;
-+ if (s->in_ptr >= s->in_len && (s->rndis || (s->in_len & (64-1)) || !ret)) {
-+ /* no short packet necessary */
-+ s->in_ptr = s->in_len = 0;
-+ }
-+#if TRAFFIC_DEBUG
-+ fprintf(stderr, "usbnet: data in len %u return %d", p->len, ret);
-+ {
-+ int i;
-+ fprintf(stderr, ":");
-+ for (i = 0; i < ret; i++) {
-+ if (!(i & 15))
-+ fprintf(stderr, "\n%04X:", i);
-+ fprintf(stderr, " %02X", p->data[i]);
-+ }
-+ fprintf(stderr, "\n\n");
-+ }
-+#endif
-+ return ret;
-+}
-+
-+static int usb_net_handle_dataout(USBNetState *s, USBPacket *p)
-+{
-+ int ret = p->len;
-+ int sz = sizeof(s->out_buf) - s->out_ptr;
-+ struct rndis_packet_msg_type *msg = (struct rndis_packet_msg_type *)s->out_buf;
-+ uint32_t len;
-+
-+#if TRAFFIC_DEBUG
-+ fprintf(stderr, "usbnet: data out len %u\n", p->len);
-+ {
-+ int i;
-+ fprintf(stderr, ":");
-+ for (i = 0; i < p->len; i++) {
-+ if (!(i & 15))
-+ fprintf(stderr, "\n%04X:", i);
-+ fprintf(stderr, " %02X", p->data[i]);
-+ }
-+ fprintf(stderr, "\n\n");
-+ }
-+#endif
-+ if (sz > ret)
-+ sz = ret;
-+ memcpy(&s->out_buf[s->out_ptr], p->data, sz);
-+ s->out_ptr += sz;
-+ if (!s->rndis) {
-+ if (ret < 64) {
-+ qemu_send_packet(s->vc, s->out_buf, s->out_ptr);
-+ s->out_ptr = 0;
-+ }
-+ return ret;
-+ }
-+ len = le32_to_cpu(msg->MessageLength);
-+ if (s->out_ptr < 8 || s->out_ptr < len)
-+ return ret;
-+ if (le32_to_cpu(msg->MessageType) == REMOTE_NDIS_PACKET_MSG) {
-+ uint32_t offs = 8 + le32_to_cpu(msg->DataOffset);
-+ uint32_t size = le32_to_cpu(msg->DataLength);
-+ if (offs + size <= len)
-+ qemu_send_packet(s->vc, s->out_buf + offs, size);
-+ }
-+ s->out_ptr -= len;
-+ memmove(s->out_buf, &s->out_buf[len], s->out_ptr);
-+ return ret;
-+}
-+
-+static int usb_net_handle_data(USBDevice *dev, USBPacket *p)
-+{
-+ USBNetState *s = (USBNetState *)dev;
-+ int ret = 0;
-+
-+ switch(p->pid) {
-+ case USB_TOKEN_IN:
-+ switch (p->devep) {
-+ case 1:
-+ ret = usb_net_handle_statusin(s, p);
-+ break;
-+
-+ case 2:
-+ ret = usb_net_handle_datain(s, p);
-+ break;
-+
-+ default:
-+ goto fail;
-+ }
-+ break;
-+
-+ case USB_TOKEN_OUT:
-+ switch (p->devep) {
-+ case 2:
-+ ret = usb_net_handle_dataout(s, p);
-+ break;
-+
-+ default:
-+ goto fail;
-+ }
-+ break;
-+
-+ default:
-+ fail:
-+ ret = USB_RET_STALL;
-+ break;
-+ }
-+ if (ret == USB_RET_STALL)
-+ fprintf(stderr, "usbnet: failed data transaction: pid 0x%x ep 0x%x len 0x%x\n", p->pid, p->devep, p->len);
-+ return ret;
-+}
-+
-+static void usbnet_receive(void *opaque, const uint8_t *buf, int size)
-+{
-+ USBNetState *s = opaque;
-+
-+ if (s->rndis) {
-+ struct rndis_packet_msg_type *msg = (struct rndis_packet_msg_type *)s->in_buf;
-+ if (!s->rndis_state == RNDIS_DATA_INITIALIZED)
-+ return;
-+ if (size + sizeof(struct rndis_packet_msg_type) > sizeof(s->in_buf))
-+ return;
-+ memset(msg, 0, sizeof(struct rndis_packet_msg_type));
-+ msg->MessageType = cpu_to_le32(REMOTE_NDIS_PACKET_MSG);
-+ msg->MessageLength = cpu_to_le32(size + sizeof(struct rndis_packet_msg_type));
-+ msg->DataOffset = cpu_to_le32(sizeof(struct rndis_packet_msg_type) - 8);
-+ msg->DataLength = cpu_to_le32(size);
-+ //msg->OOBDataOffset;
-+ //msg->OOBDataLength;
-+ //msg->NumOOBDataElements;
-+ //msg->PerPacketInfoOffset;
-+ //msg->PerPacketInfoLength;
-+ //msg->VcHandle;
-+ //msg->Reserved;
-+ memcpy(msg + 1, buf, size);
-+ s->in_len = size + sizeof(struct rndis_packet_msg_type);
-+ } else {
-+ if (size > sizeof(s->in_buf))
-+ return;
-+ memcpy(s->in_buf, buf, size);
-+ s->in_len = size;
-+ }
-+ s->in_ptr = 0;
-+}
-+
-+static int usbnet_can_receive(void *opaque)
-+{
-+ USBNetState *s = opaque;
-+
-+ if (s->rndis && !s->rndis_state == RNDIS_DATA_INITIALIZED)
-+ return 1;
-+ return !s->in_len;
-+}
-+
-+static void usb_net_handle_destroy(USBDevice *dev)
-+{
-+ USBNetState *s = (USBNetState *)dev;
-+ rndis_clear_responsequeue(s);
-+ qemu_free(s);
-+}
-+
-+USBDevice *usb_net_init(NICInfo *nd)
-+{
-+ USBNetState *s;
-+
-+ s = qemu_mallocz(sizeof(USBNetState));
-+ if (!s)
-+ return NULL;
-+ s->dev.speed = USB_SPEED_FULL;
-+ s->dev.handle_packet = usb_generic_handle_packet;
-+
-+ s->dev.handle_reset = usb_net_handle_reset;
-+ s->dev.handle_control = usb_net_handle_control;
-+ s->dev.handle_data = usb_net_handle_data;
-+ s->dev.handle_destroy = usb_net_handle_destroy;
-+
-+ s->rndis = 1;
-+ s->rndis_state = RNDIS_UNINITIALIZED;
-+ s->medium = NDIS_MEDIUM_802_3;
-+ s->speed = 1000000; /* 100MBps, in 100Bps units */
-+ s->media_state = NDIS_MEDIA_STATE_CONNECTED;
-+ s->filter = 0;
-+ s->vendorid = 0x1234;
-+ memcpy(s->mac, nd->macaddr, 6);
-+ TAILQ_INIT(&s->rndis_resp);
-+
-+ pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Network Interface");
-+ s->vc = qemu_new_vlan_client(nd->vlan, usbnet_receive, usbnet_can_receive, s);
-+ snprintf(s->vc->info_str, sizeof(s->vc->info_str),
-+ "usbnet macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
-+ s->mac[0], s->mac[1], s->mac[2],
-+ s->mac[3], s->mac[4], s->mac[5]);
-+ fprintf(stderr, "usbnet: initialized mac %02x:%02x:%02x:%02x:%02x:%02x\n",
-+ s->mac[0], s->mac[1], s->mac[2],
-+ s->mac[3], s->mac[4], s->mac[5]);
-+ return (USBDevice *)s;
-+}
-diff -urN 4242/Makefile qemu-omap/Makefile
---- 4242/Makefile 2008-04-24 20:17:05.000000000 +0100
-+++ qemu-omap/Makefile 2008-04-23 09:57:55.000000000 +0100
-@@ -55,7 +55,8 @@
- OBJS+=tmp105.o
- OBJS+=scsi-disk.o cdrom.o
- OBJS+=scsi-generic.o
--OBJS+=usb.o usb-hub.o usb-linux.o usb-hid.o usb-msd.o usb-wacom.o usb-serial.o
-+OBJS+=usb.o usb-hub.o usb-linux.o usb-hid.o usb-msd.o usb-net.o
-+OBJS+=usb-wacom.o usb-serial.o
- OBJS+=sd.o ssi-sd.o
-
- ifdef CONFIG_BRLAPI
-diff -urN 4242/softmmu_template.h qemu-omap/softmmu_template.h
---- 4242/softmmu_template.h 2008-04-24 18:11:49.000000000 +0100
-+++ qemu-omap/softmmu_template.h 2008-04-23 09:57:56.000000000 +0100
-@@ -51,12 +51,15 @@
- int mmu_idx,
- void *retaddr);
- static inline DATA_TYPE glue(io_read, SUFFIX)(target_phys_addr_t physaddr,
-- target_ulong tlb_addr)
-+ target_ulong tlb_addr,
-+ target_ulong tlb_io)
- {
- DATA_TYPE res;
- int index;
-
-- index = (tlb_addr >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
-+ index = (tlb_addr & ~TARGET_PAGE_MASK) >> IO_MEM_SHIFT;
-+ if (index > 4)
-+ index = (tlb_io >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
- #if SHIFT <= 2
- res = io_mem_read[index][SHIFT](io_mem_opaque[index], physaddr);
- #else
-@@ -95,7 +98,9 @@
- /* IO access */
- if ((addr & (DATA_SIZE - 1)) != 0)
- goto do_unaligned_access;
-- res = glue(io_read, SUFFIX)(physaddr, tlb_addr);
-+ res = glue(io_read, SUFFIX)(physaddr, tlb_addr,
-+ env->tlb_table[mmu_idx]
-+ [index].addr_code);
- } else if (((addr & ~TARGET_PAGE_MASK) + DATA_SIZE - 1) >= TARGET_PAGE_SIZE) {
- /* slow unaligned access (it spans two pages or IO) */
- do_unaligned_access:
-@@ -147,7 +152,9 @@
- /* IO access */
- if ((addr & (DATA_SIZE - 1)) != 0)
- goto do_unaligned_access;
-- res = glue(io_read, SUFFIX)(physaddr, tlb_addr);
-+ res = glue(io_read, SUFFIX)(physaddr, tlb_addr,
-+ env->tlb_table[mmu_idx]
-+ [index].addr_code);
- } else if (((addr & ~TARGET_PAGE_MASK) + DATA_SIZE - 1) >= TARGET_PAGE_SIZE) {
- do_unaligned_access:
- /* slow unaligned access (it spans two pages) */
-@@ -186,11 +193,14 @@
- static inline void glue(io_write, SUFFIX)(target_phys_addr_t physaddr,
- DATA_TYPE val,
- target_ulong tlb_addr,
-- void *retaddr)
-+ void *retaddr,
-+ target_ulong tlb_io)
- {
- int index;
-
-- index = (tlb_addr >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
-+ index = (tlb_addr & ~TARGET_PAGE_MASK) >> IO_MEM_SHIFT;
-+ if (index > 4)
-+ index = (tlb_io >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
- env->mem_write_vaddr = tlb_addr;
- env->mem_write_pc = (unsigned long)retaddr;
- #if SHIFT <= 2
-@@ -228,7 +238,8 @@
- if ((addr & (DATA_SIZE - 1)) != 0)
- goto do_unaligned_access;
- retaddr = GETPC();
-- glue(io_write, SUFFIX)(physaddr, val, tlb_addr, retaddr);
-+ glue(io_write, SUFFIX)(physaddr, val, tlb_addr, retaddr,
-+ env->tlb_table[mmu_idx][index].addr_code);
- } else if (((addr & ~TARGET_PAGE_MASK) + DATA_SIZE - 1) >= TARGET_PAGE_SIZE) {
- do_unaligned_access:
- retaddr = GETPC();
-@@ -278,7 +289,8 @@
- /* IO access */
- if ((addr & (DATA_SIZE - 1)) != 0)
- goto do_unaligned_access;
-- glue(io_write, SUFFIX)(physaddr, val, tlb_addr, retaddr);
-+ glue(io_write, SUFFIX)(physaddr, val, tlb_addr, retaddr,
-+ env->tlb_table[mmu_idx][index].addr_code);
- } else if (((addr & ~TARGET_PAGE_MASK) + DATA_SIZE - 1) >= TARGET_PAGE_SIZE) {
- do_unaligned_access:
- /* XXX: not efficient, but simple */
-diff -urN 4242/target-i386/cpu.h qemu-omap/target-i386/cpu.h
---- 4242/target-i386/cpu.h 2008-04-23 12:18:51.000000000 +0100
-+++ qemu-omap/target-i386/cpu.h 2008-04-23 09:57:56.000000000 +0100
-@@ -499,7 +499,7 @@
- SegmentCache idt; /* only base and limit are used */
-
- target_ulong cr[9]; /* NOTE: cr1, cr5-7 are unused */
-- uint64_t a20_mask;
-+ uint32_t a20_mask;
-
- /* FPU state */
- unsigned int fpstt; /* top of stack index */
-diff -urN 4242/target-i386/helper2.c qemu-omap/target-i386/helper2.c
---- 4242/target-i386/helper2.c 2008-04-23 12:18:51.000000000 +0100
-+++ qemu-omap/target-i386/helper2.c 2008-04-23 09:57:56.000000000 +0100
-@@ -377,7 +377,7 @@
- env->hflags |= HF_GIF_MASK;
-
- cpu_x86_update_cr0(env, 0x60000010);
-- env->a20_mask = ~0x0;
-+ env->a20_mask = 0xffffffff;
- env->smbase = 0x30000;
-
- env->idt.limit = 0xffff;
-@@ -695,7 +695,7 @@
- /* when a20 is changed, all the MMU mappings are invalid, so
- we must flush everything */
- tlb_flush(env, 1);
-- env->a20_mask = (~0x100000) | (a20_state << 20);
-+ env->a20_mask = 0xffefffff | (a20_state << 20);
- }
- }
-
-@@ -800,8 +800,7 @@
-
- #else
-
--/* Bits 52-62 of a PTE are reserved. Bit 63 is the NX bit. */
--#define PHYS_ADDR_MASK 0xffffffffff000L
-+#define PHYS_ADDR_MASK 0xfffff000
-
- /* return value:
- -1 = cannot handle fault
-@@ -813,10 +812,9 @@
- int is_write1, int mmu_idx, int is_softmmu)
- {
- uint64_t ptep, pte;
-- target_ulong pde_addr, pte_addr;
-+ uint32_t pdpe_addr, pde_addr, pte_addr;
- int error_code, is_dirty, prot, page_size, ret, is_write, is_user;
-- target_phys_addr_t paddr;
-- uint32_t page_offset;
-+ unsigned long paddr, page_offset;
- target_ulong vaddr, virt_addr;
-
- is_user = mmu_idx == MMU_USER_IDX;
-@@ -836,11 +834,12 @@
-
- if (env->cr[4] & CR4_PAE_MASK) {
- uint64_t pde, pdpe;
-- target_ulong pdpe_addr;
-
-+ /* XXX: we only use 32 bit physical addresses */
- #ifdef TARGET_X86_64
- if (env->hflags & HF_LMA_MASK) {
-- uint64_t pml4e_addr, pml4e;
-+ uint32_t pml4e_addr;
-+ uint64_t pml4e;
- int32_t sext;
-
- /* test virtual address sign extension */
-@@ -1102,19 +1101,17 @@
-
- target_phys_addr_t cpu_get_phys_page_debug(CPUState *env, target_ulong addr)
- {
-- target_ulong pde_addr, pte_addr;
-- uint64_t pte;
-- target_phys_addr_t paddr;
-- uint32_t page_offset;
-- int page_size;
-+ uint32_t pde_addr, pte_addr;
-+ uint32_t pde, pte, paddr, page_offset, page_size;
-
- if (env->cr[4] & CR4_PAE_MASK) {
-- target_ulong pdpe_addr;
-- uint64_t pde, pdpe;
-+ uint32_t pdpe_addr, pde_addr, pte_addr;
-+ uint32_t pdpe;
-
-+ /* XXX: we only use 32 bit physical addresses */
- #ifdef TARGET_X86_64
- if (env->hflags & HF_LMA_MASK) {
-- uint64_t pml4e_addr, pml4e;
-+ uint32_t pml4e_addr, pml4e;
- int32_t sext;
-
- /* test virtual address sign extension */
-@@ -1124,13 +1121,13 @@
-
- pml4e_addr = ((env->cr[3] & ~0xfff) + (((addr >> 39) & 0x1ff) << 3)) &
- env->a20_mask;
-- pml4e = ldq_phys(pml4e_addr);
-+ pml4e = ldl_phys(pml4e_addr);
- if (!(pml4e & PG_PRESENT_MASK))
- return -1;
-
- pdpe_addr = ((pml4e & ~0xfff) + (((addr >> 30) & 0x1ff) << 3)) &
- env->a20_mask;
-- pdpe = ldq_phys(pdpe_addr);
-+ pdpe = ldl_phys(pdpe_addr);
- if (!(pdpe & PG_PRESENT_MASK))
- return -1;
- } else
-@@ -1138,14 +1135,14 @@
- {
- pdpe_addr = ((env->cr[3] & ~0x1f) + ((addr >> 27) & 0x18)) &
- env->a20_mask;
-- pdpe = ldq_phys(pdpe_addr);
-+ pdpe = ldl_phys(pdpe_addr);
- if (!(pdpe & PG_PRESENT_MASK))
- return -1;
- }
-
- pde_addr = ((pdpe & ~0xfff) + (((addr >> 21) & 0x1ff) << 3)) &
- env->a20_mask;
-- pde = ldq_phys(pde_addr);
-+ pde = ldl_phys(pde_addr);
- if (!(pde & PG_PRESENT_MASK)) {
- return -1;
- }
-@@ -1158,11 +1155,9 @@
- pte_addr = ((pde & ~0xfff) + (((addr >> 12) & 0x1ff) << 3)) &
- env->a20_mask;
- page_size = 4096;
-- pte = ldq_phys(pte_addr);
-+ pte = ldl_phys(pte_addr);
- }
- } else {
-- uint32_t pde;
--
- if (!(env->cr[0] & CR0_PG_MASK)) {
- pte = addr;
- page_size = 4096;
-diff -urN 4242/vl.c qemu-omap/vl.c
---- 4242/vl.c 2008-04-24 21:26:21.000000000 +0100
-+++ qemu-omap/vl.c 2008-04-23 09:57:57.000000000 +0100
-@@ -5284,6 +5284,11 @@
- dev = usb_keyboard_init();
- } else if (strstart(devname, "disk:", &p)) {
- dev = usb_msd_init(p);
-+ } else if (strstart(devname, "net:", &p)) {
-+ unsigned int nr = strtoul(p, NULL, 0);
-+ if (nr >= (unsigned int) nb_nics || strcmp(nd_table[nr].model, "usb"))
-+ return -1;
-+ dev = usb_net_init(&nd_table[nr]);
- } else if (!strcmp(devname, "wacom-tablet")) {
- dev = usb_wacom_init();
- } else if (strstart(devname, "serial:", &p)) {
diff --git a/recipes/qemu/qemu-0.9.1+svn/revert_arm_tcg.patch.gz b/recipes/qemu/qemu-0.9.1+svn/revert_arm_tcg.patch.gz
deleted file mode 100644
index eb2a76c167..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/revert_arm_tcg.patch.gz
+++ /dev/null
Binary files differ
diff --git a/recipes/qemu/qemu-0.9.1+svn/series b/recipes/qemu/qemu-0.9.1+svn/series
deleted file mode 100644
index fb110340c4..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/series
+++ /dev/null
@@ -1,25 +0,0 @@
-05_non-fatal_if_linux_hd_missing.patch
-06_exit_segfault.patch -p0
-10_signal_jobs.patch -p0
-11_signal_sigaction.patch -p0
-22_net_tuntap_stall.patch -p0
-31_syscalls.patch -p0
-32_syscall_sysctl.patch -p0
-33_syscall_ppc_clone.patch -p0
-39_syscall_fadvise64.patch -p0
-52_ne2000_return.patch
-61_safe_64bit_int.patch -p0
-63_sparc_build.patch -p0
-64_ppc_asm_constraints.patch
-65_kfreebsd.patch -p0
-66_tls_ld.patch -p0
-91-oh-sdl-cursor.patch -p0
-qemu-0.9.0-nptl.patch
-qemu-0.9.0-nptl-update.patch
-qemu-amd64-32b-mapping-0.9.0.patch
-workaround_bad_futex_headers.patch -p1
-fix_segfault.patch
-no-strip.patch
-fix_brk.patch
-fix_protection_bits.patch -p1
-qemu-n800-support.patch -p1
diff --git a/recipes/qemu/qemu-0.9.1+svn/workaround_bad_futex_headers.patch b/recipes/qemu/qemu-0.9.1+svn/workaround_bad_futex_headers.patch
deleted file mode 100644
index cc122ebdba..0000000000
--- a/recipes/qemu/qemu-0.9.1+svn/workaround_bad_futex_headers.patch
+++ /dev/null
@@ -1,25 +0,0 @@
----
- linux-user/syscall.c | 10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
-
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c 2007-08-09 20:28:06.000000000 +0100
-+++ qemu/linux-user/syscall.c 2007-08-09 20:28:41.000000000 +0100
-@@ -61,7 +61,15 @@
- #define tchars host_tchars /* same as target */
- #define ltchars host_ltchars /* same as target */
-
--#include <linux/futex.h>
-+#define FUTEX_WAIT 0
-+#define FUTEX_WAKE 1
-+#define FUTEX_FD 2
-+#define FUTEX_REQUEUE 3
-+#define FUTEX_CMP_REQUEUE 4
-+#define FUTEX_WAKE_OP 5
-+#define FUTEX_LOCK_PI 6
-+#define FUTEX_UNLOCK_PI 7
-+
- #include <linux/termios.h>
- #include <linux/unistd.h>
- #include <linux/utsname.h>
diff --git a/recipes/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch b/recipes/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch
deleted file mode 100644
index 40264ed443..0000000000
--- a/recipes/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-#DPATCHLEVEL=0
----
-# block.c | 6 +++++-
-# 1 file changed, 5 insertions(+), 1 deletion(-)
-#
-Index: block.c
-===================================================================
---- block.c.orig 2007-12-03 23:47:25.000000000 +0000
-+++ block.c 2007-12-03 23:47:31.000000000 +0000
-@@ -191,8 +191,12 @@ void get_tmp_filename(char *filename, in
- void get_tmp_filename(char *filename, int size)
- {
- int fd;
-+ char *tmpdir;
- /* XXX: race condition possible */
-- pstrcpy(filename, size, "/tmp/vl.XXXXXX");
-+ tmpdir = getenv("TMPDIR");
-+ if (!tmpdir)
-+ tmpdir = "/tmp";
-+ snprintf(filename, size, "%s/vl.XXXXXX", tmpdir);
- fd = mkstemp(filename);
- close(fd);
- }
diff --git a/recipes/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch b/recipes/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch
deleted file mode 100644
index 31c9da491d..0000000000
--- a/recipes/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-#DPATCHLEVEL=1
----
-# vl.c | 5 ++++-
-# 1 file changed, 4 insertions(+), 1 deletion(-)
-#
-Index: qemu/vl.c
-===================================================================
---- qemu.orig/vl.c 2007-12-03 15:44:35.000000000 +0000
-+++ qemu/vl.c 2007-12-03 15:51:03.000000000 +0000
-@@ -1289,12 +1289,15 @@ static void hpet_stop_timer(struct qemu_
-
- static int rtc_start_timer(struct qemu_alarm_timer *t)
- {
-+ unsigned long current_rtc_freq = 0;
- int rtc_fd;
-
- TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
- if (rtc_fd < 0)
- return -1;
-- if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
-+ ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
-+ if (current_rtc_freq != RTC_FREQ &&
-+ ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
- fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
- "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
- "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
diff --git a/recipes/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch b/recipes/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch
deleted file mode 100644
index fdd922605e..0000000000
--- a/recipes/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-#DPATCHLEVEL=1
----
-# hw/pc.c | 1 -
-# 1 file changed, 1 deletion(-)
-#
-Index: qemu/hw/pc.c
-===================================================================
---- qemu.orig/hw/pc.c 2007-12-03 23:47:25.000000000 +0000
-+++ qemu/hw/pc.c 2007-12-03 23:47:38.000000000 +0000
-@@ -385,7 +385,6 @@ static void generate_bootsect(uint32_t g
- if (bs_table[0] == NULL) {
- fprintf(stderr, "A disk image must be given for 'hda' when booting "
- "a Linux kernel\n");
-- exit(1);
- }
-
- memset(bootsect, 0, sizeof(bootsect));
diff --git a/recipes/qemu/qemu-0.9.1/06_exit_segfault.patch b/recipes/qemu/qemu-0.9.1/06_exit_segfault.patch
deleted file mode 100644
index 06123d0626..0000000000
--- a/recipes/qemu/qemu-0.9.1/06_exit_segfault.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/main.c | 8 ++++----
-# 1 file changed, 4 insertions(+), 4 deletions(-)
-#
-Index: linux-user/main.c
-===================================================================
---- linux-user/main.c.orig 2007-12-03 23:47:25.000000000 +0000
-+++ linux-user/main.c 2007-12-03 23:47:41.000000000 +0000
-@@ -714,7 +714,7 @@ void cpu_loop (CPUSPARCState *env)
- default:
- printf ("Unhandled trap: 0x%x\n", trapnr);
- cpu_dump_state(env, stderr, fprintf, 0);
-- exit (1);
-+ _exit (1);
- }
- process_pending_signals (env);
- }
-@@ -1634,7 +1634,7 @@ void cpu_loop (CPUState *env)
- default:
- printf ("Unhandled trap: 0x%x\n", trapnr);
- cpu_dump_state(env, stderr, fprintf, 0);
-- exit (1);
-+ _exit (1);
- }
- process_pending_signals (env);
- }
-@@ -1954,7 +1954,7 @@ int main(int argc, char **argv)
- for(item = cpu_log_items; item->mask != 0; item++) {
- printf("%-10s %s\n", item->name, item->help);
- }
-- exit(1);
-+ _exit(1);
- }
- cpu_set_log(mask);
- } else if (!strcmp(r, "s")) {
-@@ -1973,7 +1973,7 @@ int main(int argc, char **argv)
- if (qemu_host_page_size == 0 ||
- (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) {
- fprintf(stderr, "page size must be a power of two\n");
-- exit(1);
-+ _exit(1);
- }
- } else if (!strcmp(r, "g")) {
- gdbstub_port = atoi(argv[optind++]);
diff --git a/recipes/qemu/qemu-0.9.1/10_signal_jobs.patch b/recipes/qemu/qemu-0.9.1/10_signal_jobs.patch
deleted file mode 100644
index 34282adc9d..0000000000
--- a/recipes/qemu/qemu-0.9.1/10_signal_jobs.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/signal.c | 7 ++++++-
-# 1 file changed, 6 insertions(+), 1 deletion(-)
-#
-Index: linux-user/signal.c
-===================================================================
---- linux-user/signal.c.orig 2007-12-03 15:40:26.000000000 +0000
-+++ linux-user/signal.c 2007-12-03 15:55:49.000000000 +0000
-@@ -364,10 +364,15 @@ int queue_signal(int sig, target_siginfo
- k = &sigact_table[sig - 1];
- handler = k->sa._sa_handler;
- if (handler == TARGET_SIG_DFL) {
-+ if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) {
-+ kill(getpid(),SIGSTOP);
-+ return 0;
-+ } else
- /* default handler : ignore some signal. The other are fatal */
- if (sig != TARGET_SIGCHLD &&
- sig != TARGET_SIGURG &&
-- sig != TARGET_SIGWINCH) {
-+ sig != TARGET_SIGWINCH &&
-+ sig != TARGET_SIGCONT) {
- force_sig(sig);
- } else {
- return 0; /* indicate ignored */
diff --git a/recipes/qemu/qemu-0.9.1/11_signal_sigaction.patch b/recipes/qemu/qemu-0.9.1/11_signal_sigaction.patch
deleted file mode 100644
index 33c5e8b12d..0000000000
--- a/recipes/qemu/qemu-0.9.1/11_signal_sigaction.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/signal.c | 5 +++++
-# 1 file changed, 5 insertions(+)
-#
-Index: linux-user/signal.c
-===================================================================
---- linux-user/signal.c.orig 2007-12-03 23:47:44.000000000 +0000
-+++ linux-user/signal.c 2007-12-03 23:47:46.000000000 +0000
-@@ -512,6 +512,11 @@ int do_sigaction(int sig, const struct t
-
- if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP)
- return -EINVAL;
-+
-+ /* no point doing the stuff as those are not allowed for sigaction */
-+ if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP))
-+ return -EINVAL;
-+
- k = &sigact_table[sig - 1];
- #if defined(DEBUG_SIGNAL)
- fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n",
diff --git a/recipes/qemu/qemu-0.9.1/22_net_tuntap_stall.patch b/recipes/qemu/qemu-0.9.1/22_net_tuntap_stall.patch
deleted file mode 100644
index 6017df0f6d..0000000000
--- a/recipes/qemu/qemu-0.9.1/22_net_tuntap_stall.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=0
----
-# vl.c | 2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: vl.c
-===================================================================
---- vl.c.orig 2007-12-03 23:47:36.000000000 +0000
-+++ vl.c 2007-12-03 23:47:48.000000000 +0000
-@@ -4023,7 +4023,7 @@ static int tap_open(char *ifname, int if
- return -1;
- }
- memset(&ifr, 0, sizeof(ifr));
-- ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
-+ ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;
- if (ifname[0] != '\0')
- pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
- else
diff --git a/recipes/qemu/qemu-0.9.1/31_syscalls.patch b/recipes/qemu/qemu-0.9.1/31_syscalls.patch
deleted file mode 100644
index 95a7332ee8..0000000000
--- a/recipes/qemu/qemu-0.9.1/31_syscalls.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c | 11 ++++++++---
-# 1 file changed, 8 insertions(+), 3 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2007-12-03 19:32:56.000000000 +0000
-+++ linux-user/syscall.c 2007-12-03 19:33:41.000000000 +0000
-@@ -250,6 +250,7 @@ extern int getresuid(uid_t *, uid_t *, u
- extern int setresgid(gid_t, gid_t, gid_t);
- extern int getresgid(gid_t *, gid_t *, gid_t *);
- extern int setgroups(int, gid_t *);
-+extern int uselib(const char*);
-
- #define ERRNO_TABLE_SIZE 1200
-
-@@ -4024,7 +4025,8 @@ abi_long do_syscall(void *cpu_env, int n
- #endif
- #ifdef TARGET_NR_uselib
- case TARGET_NR_uselib:
-- goto unimplemented;
-+ ret = get_errno(uselib(path((const char*)arg1)));
-+ break;
- #endif
- #ifdef TARGET_NR_swapon
- case TARGET_NR_swapon:
-@@ -5289,7 +5291,9 @@ abi_long do_syscall(void *cpu_env, int n
- goto unimplemented;
- #ifdef TARGET_NR_mincore
- case TARGET_NR_mincore:
-- goto unimplemented;
-+ /*page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE);*/
-+ ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
-+ break;
- #endif
- #ifdef TARGET_NR_madvise
- case TARGET_NR_madvise:
-@@ -5429,7 +5433,8 @@ abi_long do_syscall(void *cpu_env, int n
- break;
- #ifdef TARGET_NR_readahead
- case TARGET_NR_readahead:
-- goto unimplemented;
-+ ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3));
-+ break;
- #endif
- #ifdef TARGET_NR_setxattr
- case TARGET_NR_setxattr:
diff --git a/recipes/qemu/qemu-0.9.1/32_syscall_sysctl.patch b/recipes/qemu/qemu-0.9.1/32_syscall_sysctl.patch
deleted file mode 100644
index 5e8dd75b0e..0000000000
--- a/recipes/qemu/qemu-0.9.1/32_syscall_sysctl.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c | 32 +++++++++++++++++++++++++++++---
-# 1 file changed, 29 insertions(+), 3 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2007-12-03 15:56:24.000000000 +0000
-+++ linux-user/syscall.c 2007-12-03 15:57:36.000000000 +0000
-@@ -52,6 +52,7 @@
- //#include <sys/user.h>
- #include <netinet/ip.h>
- #include <netinet/tcp.h>
-+#include <sys/sysctl.h>
-
- #define termios host_termios
- #define winsize host_winsize
-@@ -4739,9 +4740,34 @@ abi_long do_syscall(void *cpu_env, int n
- break;
- #endif
- case TARGET_NR__sysctl:
-- /* We don't implement this, but ENOTDIR is always a safe
-- return value. */
-- ret = -TARGET_ENOTDIR;
-+ {
-+ struct __sysctl_args *args = (struct __sysctl_args *) arg1;
-+ int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i;
-+ void *oldval, *newval;
-+
-+ name_target = (int *) tswapl((long) args->name);
-+ nlen = tswapl(args->nlen);
-+ oldval = (void *) tswapl((long) args->oldval);
-+ oldlenp = (int *) tswapl((long) args->oldlenp);
-+ oldlen = tswapl(*oldlenp);
-+ newval = (void *) tswapl((long) args->newval);
-+ newlen = tswapl(args->newlen);
-+
-+ name = alloca(nlen * sizeof (int));
-+ for (i = 0; i < nlen; i++)
-+ name[i] = tswapl(name_target[i]);
-+
-+ if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) {
-+ ret = get_errno(
-+ sysctl(name, nlen, oldval, &oldlen, newval, newlen));
-+ if (!is_error(ret)) {
-+ *oldlenp = tswapl(oldlen);
-+ }
-+ } else {
-+ gemu_log("qemu: Unsupported sysctl name\n");
-+ ret = -ENOSYS;
-+ }
-+ }
- break;
- case TARGET_NR_sched_setparam:
- {
diff --git a/recipes/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch b/recipes/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch
deleted file mode 100644
index 3f733b6ab8..0000000000
--- a/recipes/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c | 6 +-----
-# 1 file changed, 1 insertion(+), 5 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2007-12-03 15:58:11.000000000 +0000
-+++ linux-user/syscall.c 2007-12-03 15:58:46.000000000 +0000
-@@ -2750,11 +2750,7 @@ int do_fork(CPUState *env, unsigned int
- if (!newsp)
- newsp = env->gpr[1];
- new_env->gpr[1] = newsp;
-- {
-- int i;
-- for (i = 7; i < 32; i++)
-- new_env->gpr[i] = 0;
-- }
-+ new_env->gpr[3] = 0;
- #elif defined(TARGET_SH4)
- if (!newsp)
- newsp = env->gregs[15];
diff --git a/recipes/qemu/qemu-0.9.1/39_syscall_fadvise64.patch b/recipes/qemu/qemu-0.9.1/39_syscall_fadvise64.patch
deleted file mode 100644
index 54ee3e0948..0000000000
--- a/recipes/qemu/qemu-0.9.1/39_syscall_fadvise64.patch
+++ /dev/null
@@ -1,21 +0,0 @@
----
- linux-user/syscall.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig 2007-12-03 19:33:47.000000000 +0000
-+++ linux-user/syscall.c 2007-12-03 19:33:48.000000000 +0000
-@@ -5317,6 +5317,12 @@ abi_long do_syscall(void *cpu_env, int n
- ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
- break;
- #endif
-+#ifdef TARGET_NR_fadvise64_64
-+ case TARGET_NR_fadvise64_64:
-+ /* Just return success */
-+ ret = get_errno(0);
-+ break;
-+#endif
- #ifdef TARGET_NR_madvise
- case TARGET_NR_madvise:
- /* A straight passthrough may not be safe because qemu sometimes
diff --git a/recipes/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch b/recipes/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch
deleted file mode 100644
index cea3afc7ff..0000000000
--- a/recipes/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/main.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++-
-# target-arm/nwfpe/fpa11.c | 7 ++++++
-# 2 files changed, 57 insertions(+), 1 deletion(-)
-#
-Index: linux-user/main.c
-===================================================================
---- linux-user/main.c.orig 2007-12-03 15:59:10.000000000 +0000
-+++ linux-user/main.c 2007-12-03 16:01:27.000000000 +0000
-@@ -377,18 +377,67 @@ void cpu_loop(CPUARMState *env)
- {
- TaskState *ts = env->opaque;
- uint32_t opcode;
-+ int rc;
-
- /* we handle the FPU emulation here, as Linux */
- /* we get the opcode */
- /* FIXME - what to do if get_user() fails? */
- get_user_u32(opcode, env->regs[15]);
-
-- if (EmulateAll(opcode, &ts->fpa, env) == 0) {
-+ rc = EmulateAll(opcode, &ts->fpa, env);
-+ if (rc == 0) { /* illegal instruction */
- info.si_signo = SIGILL;
- info.si_errno = 0;
- info.si_code = TARGET_ILL_ILLOPN;
- info._sifields._sigfault._addr = env->regs[15];
- queue_signal(info.si_signo, &info);
-+ } else if (rc < 0) { /* FP exception */
-+ int arm_fpe=0;
-+
-+ /* translate softfloat flags to FPSR flags */
-+ if (-rc & float_flag_invalid)
-+ arm_fpe |= BIT_IOC;
-+ if (-rc & float_flag_divbyzero)
-+ arm_fpe |= BIT_DZC;
-+ if (-rc & float_flag_overflow)
-+ arm_fpe |= BIT_OFC;
-+ if (-rc & float_flag_underflow)
-+ arm_fpe |= BIT_UFC;
-+ if (-rc & float_flag_inexact)
-+ arm_fpe |= BIT_IXC;
-+
-+ FPSR fpsr = ts->fpa.fpsr;
-+ //printf("fpsr 0x%x, arm_fpe 0x%x\n",fpsr,arm_fpe);
-+
-+ if (fpsr & (arm_fpe << 16)) { /* exception enabled? */
-+ info.si_signo = SIGFPE;
-+ info.si_errno = 0;
-+
-+ /* ordered by priority, least first */
-+ if (arm_fpe & BIT_IXC) info.si_code = TARGET_FPE_FLTRES;
-+ if (arm_fpe & BIT_UFC) info.si_code = TARGET_FPE_FLTUND;
-+ if (arm_fpe & BIT_OFC) info.si_code = TARGET_FPE_FLTOVF;
-+ if (arm_fpe & BIT_DZC) info.si_code = TARGET_FPE_FLTDIV;
-+ if (arm_fpe & BIT_IOC) info.si_code = TARGET_FPE_FLTINV;
-+
-+ info._sifields._sigfault._addr = env->regs[15];
-+ queue_signal(info.si_signo, &info);
-+ } else {
-+ env->regs[15] += 4;
-+ }
-+
-+ /* accumulate unenabled exceptions */
-+ if ((!(fpsr & BIT_IXE)) && (arm_fpe & BIT_IXC))
-+ fpsr |= BIT_IXC;
-+ if ((!(fpsr & BIT_UFE)) && (arm_fpe & BIT_UFC))
-+ fpsr |= BIT_UFC;
-+ if ((!(fpsr & BIT_OFE)) && (arm_fpe & BIT_OFC))
-+ fpsr |= BIT_OFC;
-+ if ((!(fpsr & BIT_DZE)) && (arm_fpe & BIT_DZC))
-+ fpsr |= BIT_DZC;
-+ if ((!(fpsr & BIT_IOE)) && (arm_fpe & BIT_IOC))
-+ fpsr |= BIT_IOC;
-+ ts->fpa.fpsr=fpsr;
- } else {
- /* increment PC */
- env->regs[15] += 4;
-Index: target-arm/nwfpe/fpa11.c
-===================================================================
---- target-arm/nwfpe/fpa11.c.orig 2007-12-03 15:40:26.000000000 +0000
-+++ target-arm/nwfpe/fpa11.c 2007-12-03 15:59:11.000000000 +0000
-@@ -162,6 +162,8 @@ unsigned int EmulateAll(unsigned int opc
- fpa11->initflag = 1;
- }
-
-+ set_float_exception_flags(0, &fpa11->fp_status);
-+
- if (TEST_OPCODE(opcode,MASK_CPRT))
- {
- //fprintf(stderr,"emulating CPRT\n");
-@@ -191,6 +193,11 @@ unsigned int EmulateAll(unsigned int opc
- }
-
- // restore_flags(flags);
-+ if(nRc == 1 && get_float_exception_flags(&fpa11->fp_status))
-+ {
-+ //printf("fef 0x%x\n",float_exception_flags);
-+ nRc=-get_float_exception_flags(&fpa11->fp_status);
-+ }
-
- //printf("returning %d\n",nRc);
- return(nRc);
diff --git a/recipes/qemu/qemu-0.9.1/52_ne2000_return.patch b/recipes/qemu/qemu-0.9.1/52_ne2000_return.patch
deleted file mode 100644
index e4ea33f2c6..0000000000
--- a/recipes/qemu/qemu-0.9.1/52_ne2000_return.patch
+++ /dev/null
@@ -1,17 +0,0 @@
----
- hw/ne2000.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: qemu/hw/ne2000.c
-===================================================================
---- qemu.orig/hw/ne2000.c 2007-12-03 19:32:52.000000000 +0000
-+++ qemu/hw/ne2000.c 2007-12-03 19:33:55.000000000 +0000
-@@ -217,7 +217,7 @@ static int ne2000_can_receive(void *opaq
- NE2000State *s = opaque;
-
- if (s->cmd & E8390_STOP)
-- return 1;
-+ return 0;
- return !ne2000_buffer_full(s);
- }
-
diff --git a/recipes/qemu/qemu-0.9.1/61_safe_64bit_int.patch b/recipes/qemu/qemu-0.9.1/61_safe_64bit_int.patch
deleted file mode 100644
index 9b1ace81a5..0000000000
--- a/recipes/qemu/qemu-0.9.1/61_safe_64bit_int.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-#DPATCHLEVEL=0
----
-# dyngen-exec.h | 4 ++--
-# 1 file changed, 2 insertions(+), 2 deletions(-)
-#
-Index: dyngen-exec.h
-===================================================================
---- dyngen-exec.h.orig 2007-12-31 13:06:21.000000000 +0000
-+++ dyngen-exec.h 2007-12-31 13:08:54.000000000 +0000
-@@ -38,7 +38,7 @@
- // Linux/Sparc64 defines uint64_t
- #if !(defined (__sparc_v9__) && defined(__linux__))
- /* XXX may be done for all 64 bits targets ? */
--#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__)
-+#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__)
- typedef unsigned long uint64_t;
- #else
- typedef unsigned long long uint64_t;
-@@ -55,7 +55,7 @@
- typedef signed int int32_t;
- // Linux/Sparc64 defines int64_t
- #if !(defined (__sparc_v9__) && defined(__linux__))
--#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__)
-+#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__)
- typedef signed long int64_t;
- #else
- typedef signed long long int64_t;
diff --git a/recipes/qemu/qemu-0.9.1/63_sparc_build.patch b/recipes/qemu/qemu-0.9.1/63_sparc_build.patch
deleted file mode 100644
index 37b38f641b..0000000000
--- a/recipes/qemu/qemu-0.9.1/63_sparc_build.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=0
----
-# sparc.ld | 2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: sparc.ld
-===================================================================
---- sparc.ld.orig 2007-12-03 15:40:26.000000000 +0000
-+++ sparc.ld 2007-12-03 16:05:06.000000000 +0000
-@@ -6,7 +6,7 @@ ENTRY(_start)
- SECTIONS
- {
- /* Read-only sections, merged into text segment: */
-- . = 0x60000000 + SIZEOF_HEADERS;
-+ . = 0x60000000 + 0x400;
- .interp : { *(.interp) }
- .hash : { *(.hash) }
- .dynsym : { *(.dynsym) }
diff --git a/recipes/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch b/recipes/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch
deleted file mode 100644
index e4858b79d7..0000000000
--- a/recipes/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=1
----
-# cpu-all.h | 2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: qemu/cpu-all.h
-===================================================================
---- qemu.orig/cpu-all.h 2007-06-13 11:48:22.000000000 +0100
-+++ qemu/cpu-all.h 2007-06-13 11:51:56.000000000 +0100
-@@ -250,7 +250,7 @@ static inline void stw_le_p(void *ptr, i
- static inline void stl_le_p(void *ptr, int v)
- {
- #ifdef __powerpc__
-- __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr));
-+ __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory");
- #else
- uint8_t *p = ptr;
- p[0] = v;
diff --git a/recipes/qemu/qemu-0.9.1/65_kfreebsd.patch b/recipes/qemu/qemu-0.9.1/65_kfreebsd.patch
deleted file mode 100644
index dfece800ac..0000000000
--- a/recipes/qemu/qemu-0.9.1/65_kfreebsd.patch
+++ /dev/null
@@ -1,35 +0,0 @@
----
- configure | 6 ++++++
- vl.c | 2 ++
- 2 files changed, 8 insertions(+)
-
-Index: configure
-===================================================================
---- configure.orig 2007-12-03 15:40:26.000000000 +0000
-+++ configure 2007-12-03 16:05:34.000000000 +0000
-@@ -129,6 +129,12 @@ if [ "$cpu" = "i386" -o "$cpu" = "x86_64
- kqemu="yes"
- fi
- ;;
-+GNU/kFreeBSD)
-+oss="yes"
-+if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
-+ kqemu="yes"
-+fi
-+;;
- FreeBSD)
- bsd="yes"
- oss="yes"
-Index: vl.c
-===================================================================
---- vl.c.orig 2007-12-03 16:05:32.000000000 +0000
-+++ vl.c 2007-12-03 16:05:34.000000000 +0000
-@@ -97,6 +97,8 @@
- #include <stropts.h>
- #endif
- #endif
-+#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
-+#include <freebsd/stdlib.h>
- #else
- #include <winsock2.h>
- int inet_aton(const char *cp, struct in_addr *ia);
diff --git a/recipes/qemu/qemu-0.9.1/66_tls_ld.patch b/recipes/qemu/qemu-0.9.1/66_tls_ld.patch
deleted file mode 100644
index 54e02eff8b..0000000000
--- a/recipes/qemu/qemu-0.9.1/66_tls_ld.patch
+++ /dev/null
@@ -1,55 +0,0 @@
----
- arm.ld | 7 +++++++
- i386.ld | 7 +++++++
- 2 files changed, 14 insertions(+)
-
-Index: arm.ld
-===================================================================
---- arm.ld.orig 2007-06-13 11:48:22.000000000 +0100
-+++ arm.ld 2007-06-13 11:51:56.000000000 +0100
-@@ -26,6 +26,10 @@ SECTIONS
- { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
- .rela.rodata :
- { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
-+ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
-+ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
-+ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
-+ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
- .rel.got : { *(.rel.got) }
- .rela.got : { *(.rela.got) }
- .rel.ctors : { *(.rel.ctors) }
-@@ -58,6 +62,9 @@ SECTIONS
- .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
- __exidx_end = .;
- .reginfo : { *(.reginfo) }
-+ /* Thread Local Storage sections */
-+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
- /* Adjust the address for the data segment. We want to adjust up to
- the same address within the page on the next page up. */
- . = ALIGN(0x100000) + (. & (0x100000 - 1));
-Index: i386.ld
-===================================================================
---- i386.ld.orig 2007-06-13 11:48:22.000000000 +0100
-+++ i386.ld 2007-06-13 11:51:56.000000000 +0100
-@@ -28,6 +28,10 @@ SECTIONS
- { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
- .rela.rodata :
- { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
-+ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
-+ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
-+ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
-+ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
- .rel.got : { *(.rel.got) }
- .rela.got : { *(.rela.got) }
- .rel.ctors : { *(.rel.ctors) }
-@@ -53,6 +57,9 @@ SECTIONS
- _etext = .;
- PROVIDE (etext = .);
- .fini : { *(.fini) } =0x47ff041f
-+ /* Thread Local Storage sections */
-+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
- . = ALIGN(32 / 8);
- PROVIDE (__preinit_array_start = .);
- .preinit_array : { *(.preinit_array) }
diff --git a/recipes/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch b/recipes/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch
deleted file mode 100644
index 0d60c1c306..0000000000
--- a/recipes/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-=== modified file 'sdl.c'
----
- sdl.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: sdl.c
-===================================================================
---- sdl.c.orig 2007-12-03 19:32:15.000000000 +0000
-+++ sdl.c 2007-12-03 19:34:04.000000000 +0000
-@@ -247,7 +247,7 @@ static void sdl_hide_cursor(void)
-
- if (kbd_mouse_is_absolute()) {
- SDL_ShowCursor(1);
-- SDL_SetCursor(sdl_cursor_hidden);
-+ /* SDL_SetCursor(sdl_cursor_hidden); */
- } else {
- SDL_ShowCursor(0);
- }
diff --git a/recipes/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch b/recipes/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch
deleted file mode 100644
index 3ec304a38c..0000000000
--- a/recipes/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-Index: qemu-0.9.1/configure
-===================================================================
---- qemu-0.9.1.orig/configure 2008-01-24 15:33:13.000000000 +0000
-+++ qemu-0.9.1/configure 2008-01-24 15:45:50.000000000 +0000
-@@ -209,15 +209,17 @@
-
- # find source path
- source_path=`dirname "$0"`
-+source_path_used="no"
-+workdir=`pwd`
-+workdir=`readlink -f $workdir`
- if [ -z "$source_path" ]; then
-- source_path=`pwd`
-+ source_path=$workdir
- else
- source_path=`cd "$source_path"; pwd`
--fi
--if test "$source_path" = `pwd` ; then
-- source_path_used="no"
--else
-- source_path_used="yes"
-+ source_path=`readlink -f $source_path`
-+ if test "$source_path" != "$workdir" ; then
-+ source_path_used="yes"
-+ fi
- fi
-
- werror="no"
diff --git a/recipes/qemu/qemu-0.9.1/disable-error-in-configure.patch b/recipes/qemu/qemu-0.9.1/disable-error-in-configure.patch
deleted file mode 100644
index 017f9f6355..0000000000
--- a/recipes/qemu/qemu-0.9.1/disable-error-in-configure.patch
+++ /dev/null
@@ -1,17 +0,0 @@
----
- configure | 2 --
- 1 file changed, 2 deletions(-)
-
-Index: qemu/configure
-===================================================================
---- qemu.orig/configure 2007-12-03 16:38:38.000000000 +0000
-+++ qemu/configure 2007-12-03 16:38:39.000000000 +0000
-@@ -323,8 +323,6 @@ for opt do
- ;;
- --disable-werror) werror="no"
- ;;
-- *) echo "ERROR: unknown option $opt"; show_help="yes"
-- ;;
- --disable-nptl) nptl="no"
- ;;
- esac
diff --git a/recipes/qemu/qemu-0.9.1/fix_segfault.patch b/recipes/qemu/qemu-0.9.1/fix_segfault.patch
deleted file mode 100644
index 443c330650..0000000000
--- a/recipes/qemu/qemu-0.9.1/fix_segfault.patch
+++ /dev/null
@@ -1,37 +0,0 @@
----
- linux-user/syscall.c | 22 ----------------------
- 1 file changed, 22 deletions(-)
-
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c 2007-12-03 23:40:11.000000000 +0000
-+++ qemu/linux-user/syscall.c 2007-12-03 23:40:21.000000000 +0000
-@@ -5695,28 +5695,6 @@ abi_long do_syscall(void *cpu_env, int n
- goto unimplemented_nowarn;
- #endif
-
--#ifdef TARGET_NR_clock_gettime
-- case TARGET_NR_clock_gettime:
-- {
-- struct timespec ts;
-- ret = get_errno(clock_gettime(arg1, &ts));
-- if (!is_error(ret)) {
-- host_to_target_timespec(arg2, &ts);
-- }
-- break;
-- }
--#endif
--#ifdef TARGET_NR_clock_getres
-- case TARGET_NR_clock_getres:
-- {
-- struct timespec ts;
-- ret = get_errno(clock_getres(arg1, &ts));
-- if (!is_error(ret)) {
-- host_to_target_timespec(arg2, &ts);
-- }
-- break;
-- }
--#endif
-
- #if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address)
- case TARGET_NR_set_tid_address:
diff --git a/recipes/qemu/qemu-0.9.1/no-strip.patch b/recipes/qemu/qemu-0.9.1/no-strip.patch
deleted file mode 100644
index fc69b37e16..0000000000
--- a/recipes/qemu/qemu-0.9.1/no-strip.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- qemu.orig/Makefile 2008-01-29 23:16:27.000000000 -0800
-+++ qemu-0.9.1/Makefile 2008-01-29 23:16:38.000000000 -0800
-@@ -174,7 +174,7 @@
- install: all $(if $(BUILD_DOCS),install-doc)
- mkdir -p "$(DESTDIR)$(bindir)"
- ifneq ($(TOOLS),)
-- $(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)"
-+ $(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)"
- endif
- mkdir -p "$(DESTDIR)$(datadir)"
- for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
---- qemu.orig/Makefile.target 2008-01-29 23:16:27.000000000 -0800
-+++ qemu-0.9.1/Makefile.target 2008-01-29 23:17:33.000000000 -0800
-@@ -632,7 +632,7 @@
-
- install: all
- ifneq ($(PROGS),)
-- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
-+ $(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)"
- endif
-
- ifneq ($(wildcard .depend),)
diff --git a/recipes/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch b/recipes/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch
deleted file mode 100644
index ebc996e873..0000000000
--- a/recipes/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch
+++ /dev/null
@@ -1,219 +0,0 @@
----
- linux-user/main.c | 7 ++-
- linux-user/syscall.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++-----
- 2 files changed, 111 insertions(+), 10 deletions(-)
-
-Index: qemu/linux-user/main.c
-===================================================================
---- qemu.orig/linux-user/main.c 2007-12-03 19:34:09.000000000 +0000
-+++ qemu/linux-user/main.c 2007-12-03 23:44:45.000000000 +0000
-@@ -391,7 +391,7 @@ do_kernel_trap(CPUARMState *env)
- cpu_unlock();
- break;
- case 0xffff0fe0: /* __kernel_get_tls */
-- env->regs[0] = env->cp15.c13_tls;
-+ env->regs[0] = env->cp15.c13_tls2;
- break;
- default:
- return 1;
-@@ -2037,6 +2037,11 @@ int main(int argc, char **argv)
- int drop_ld_preload = 0, environ_count = 0;
- char **target_environ, **wrk, **dst;
-
-+ char *assume_kernel = getenv("QEMU_ASSUME_KERNEL");
-+
-+ if (assume_kernel)
-+ setenv("LD_ASSUME_KERNEL", assume_kernel, 1);
-+
- if (argc <= 1)
- usage();
-
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c 2007-12-03 19:34:09.000000000 +0000
-+++ qemu/linux-user/syscall.c 2007-12-03 23:46:54.000000000 +0000
-@@ -61,6 +61,7 @@
- #define tchars host_tchars /* same as target */
- #define ltchars host_ltchars /* same as target */
-
-+#include <linux/futex.h>
- #include <linux/termios.h>
- #include <linux/unistd.h>
- #include <linux/utsname.h>
-@@ -2694,7 +2695,6 @@ abi_long do_arch_prctl(CPUX86State *env,
- return 0;
- }
- #endif
--
- #endif /* defined(TARGET_I386) */
-
- /* this stack is the equivalent of the kernel stack associated with a
-@@ -2729,16 +2729,19 @@ int do_fork(CPUState *env, unsigned int
- TaskState *ts;
- uint8_t *new_stack;
- CPUState *new_env;
--
-+#if defined(TARGET_I386)
-+ uint64_t *new_gdt_table;
-+#endif
- #ifdef USE_NPTL
- unsigned int nptl_flags;
-
- if (flags & CLONE_PARENT_SETTID)
- *parent_tidptr = gettid();
- #endif
--
- if (flags & CLONE_VM) {
- ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
-+ if (!ts)
-+ return -ENOMEM;
- memset(ts, 0, sizeof(TaskState));
- new_stack = ts->stack;
- ts->used = 1;
-@@ -2750,6 +2753,29 @@ int do_fork(CPUState *env, unsigned int
- #if defined(TARGET_I386)
- if (!newsp)
- newsp = env->regs[R_ESP];
-+ new_gdt_table = malloc(9 * 8);
-+ if (!new_gdt_table) {
-+ free(new_env);
-+ return -ENOMEM;
-+ }
-+ /* Copy main GDT table from parent, but clear TLS entries */
-+ memcpy(new_gdt_table, g2h(env->gdt.base), 6 * 8);
-+ memset(&new_gdt_table[6], 0, 3 * 8);
-+ new_env->gdt.base = h2g(new_gdt_table);
-+ if (flags & 0x00080000 /* CLONE_SETTLS */) {
-+ ret = do_set_thread_area(new_env, new_env->regs[R_ESI]);
-+ if (ret) {
-+ free(new_gdt_table);
-+ free(new_env);
-+ return ret;
-+ }
-+ }
-+ cpu_x86_load_seg(env, R_CS, new_env->regs[R_CS]);
-+ cpu_x86_load_seg(env, R_DS, new_env->regs[R_DS]);
-+ cpu_x86_load_seg(env, R_ES, new_env->regs[R_ES]);
-+ cpu_x86_load_seg(env, R_SS, new_env->regs[R_SS]);
-+ cpu_x86_load_seg(env, R_FS, new_env->regs[R_FS]);
-+ cpu_x86_load_seg(env, R_GS, new_env->regs[R_GS]);
- new_env->regs[R_ESP] = newsp;
- new_env->regs[R_EAX] = 0;
- #elif defined(TARGET_ARM)
-@@ -3121,6 +3147,68 @@ static inline abi_long host_to_target_ti
- unlock_user_struct(target_ts, target_addr, 1);
- }
-
-+static long do_futex(target_ulong uaddr, int op, uint32_t val,
-+ target_ulong utime, target_ulong uaddr2,
-+ uint32_t val3)
-+{
-+ struct timespec host_utime;
-+ unsigned long val2 = utime;
-+
-+ if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) {
-+ target_to_host_timespec(&host_utime, utime);
-+ val2 = (unsigned long)&host_utime;
-+ }
-+
-+#ifdef BSWAP_NEEDED
-+ switch(op) {
-+ case FUTEX_CMP_REQUEUE:
-+ val3 = tswap32(val3);
-+ case FUTEX_REQUEUE:
-+ val2 = tswap32(val2);
-+ case FUTEX_WAIT:
-+ case FUTEX_WAKE:
-+ val = tswap32(val);
-+ case FUTEX_LOCK_PI: /* This one's icky, but comes out OK */
-+ case FUTEX_UNLOCK_PI:
-+ break;
-+ default:
-+ gemu_log("qemu: Unsupported futex op %d\n", op);
-+ return -ENOSYS;
-+ }
-+#if 0 /* No, it's worse than this */
-+ if (op == FUTEX_WAKE_OP) {
-+ /* Need to munge the secondary operation (val3) */
-+ val3 = tswap32(val3);
-+ int op2 = (val3 >> 28) & 7;
-+ int cmp = (val3 >> 24) & 15;
-+ int oparg = (val3 << 8) >> 20;
-+ int cmparg = (val3 << 20) >> 20;
-+ int shift = val3 & (FUTEX_OP_OPARG_SHIFT << 28);
-+
-+ if (shift)
-+ oparg = (oparg & 7) + 24 - (oparg & 24);
-+ else oparg =
-+ if (op2 == FUTEX_OP_ADD) {
-+ gemu_log("qemu: Unsupported wrong-endian FUTEX_OP_ADD\n");
-+ return -ENOSYS;
-+ }
-+ if (cmparg == FUTEX_OP_CMP_LT || cmparg == FUTEX_OP_CMP_GE ||
-+ cmparg == FUTEX_OP_CMP_LE || cmparg == FUTEX_OP_CMP_GT) {
-+ gemu_log("qemu: Unsupported wrong-endian futex cmparg %d\n", cmparg);
-+ return -ENOSYS;
-+ }
-+ val3 = shift | (op2<<28) | (cmp<<24) | (oparg<<12) | cmparg;
-+ }
-+#endif
-+#endif
-+ return syscall(__NR_futex, g2h(uaddr), op, val, val2, g2h(uaddr2), val3);
-+}
-+
-+int do_set_tid_address(target_ulong tidptr)
-+{
-+ return syscall(__NR_set_tid_address, g2h(tidptr));
-+}
-+
- /* do_syscall() should always have a single exit point at the end so
- that actions, such as logging of syscall results, can be performed.
- All errnos that do_syscall() returns must be -TARGET_<errcode>. */
-@@ -3145,7 +3233,7 @@ abi_long do_syscall(void *cpu_env, int n
- _mcleanup();
- #endif
- gdb_exit(cpu_env, arg1);
-- /* XXX: should free thread stack and CPU env */
-+ /* XXX: should free thread stack, GDT and CPU env */
- _exit(arg1);
- ret = 0; /* avoid warning */
- break;
-@@ -5569,6 +5657,9 @@ abi_long do_syscall(void *cpu_env, int n
- #elif defined(TARGET_I386) && defined(TARGET_ABI32)
- ret = do_set_thread_area(cpu_env, arg1);
- break;
-+#elif TARGET_i386
-+ ret = get_errno(do_set_thread_area(cpu_env, arg1));
-+ break;
- #else
- goto unimplemented_nowarn;
- #endif
-@@ -5586,6 +5677,16 @@ abi_long do_syscall(void *cpu_env, int n
- goto unimplemented_nowarn;
- #endif
-
-+#ifdef TARGET_NR_futex
-+ case TARGET_NR_futex:
-+ ret = get_errno(do_futex(arg1, arg2, arg3, arg4, arg5, arg6));
-+ break;
-+#endif
-+#ifdef TARGET_NR_set_robust_list
-+ case TARGET_NR_set_robust_list:
-+ goto unimplemented_nowarn;
-+#endif
-+
- #ifdef TARGET_NR_clock_gettime
- case TARGET_NR_clock_gettime:
- {
-@@ -5627,11 +5728,6 @@ abi_long do_syscall(void *cpu_env, int n
- break;
- #endif
-
--#ifdef TARGET_NR_set_robust_list
-- case TARGET_NR_set_robust_list:
-- goto unimplemented_nowarn;
--#endif
--
- #if defined(TARGET_NR_utimensat) && defined(__NR_utimensat)
- case TARGET_NR_utimensat:
- {
diff --git a/recipes/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch b/recipes/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch
deleted file mode 100644
index 10e3cc04a5..0000000000
--- a/recipes/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch
+++ /dev/null
@@ -1,929 +0,0 @@
-These are Paul Brook's patches to QEMU-0.8.2 to enable the running of single
-ARM binaries under QEMU's user-emulation mode. Without them, QEMU-0.8.1
-immediately dies saying:
- Error: f0005
- qemu: uncaught target signal 6 (Aborted) - exiting
-while qemu-0.8.2 dies saying:
- qemu: Unsupported syscall: 983045
- cannot set up thread-local storage: unknown error
-
-This file is a rediffing of the patches visible at
-https://nowt.dyndns.org/patch.qemu_nptl on 27 Sept 2006
-which "patch" fails to apply automatically.
-See also http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00194.html
-
- Martin Guy, 27 Sept 2006
-
----
- configure | 25 ++++++
- exec-all.h | 165 ------------------------------------------
- linux-user/arm/syscall.h | 4 -
- linux-user/main.c | 94 +++++++++++++++++++++---
- linux-user/qemu.h | 3
- linux-user/syscall.c | 91 ++++++++++++++++++++++-
- qemu_spinlock.h | 181 +++++++++++++++++++++++++++++++++++++++++++++++
- target-arm/cpu.h | 10 ++
- target-arm/op.c | 6 +
- target-arm/translate.c | 9 ++
- 10 files changed, 405 insertions(+), 183 deletions(-)
-
---- qemu.orig/configure
-+++ qemu/configure
-@@ -103,10 +103,11 @@ check_gcc="yes"
- softmmu="yes"
- linux_user="no"
- darwin_user="no"
- build_docs="no"
- uname_release=""
-+nptl="yes"
-
- # OS specific
- targetos=`uname -s`
- case $targetos in
- CYGWIN*)
-@@ -322,10 +323,12 @@ for opt do
- ;;
- --disable-werror) werror="no"
- ;;
- *) echo "ERROR: unknown option $opt"; show_help="yes"
- ;;
-+ --disable-nptl) nptl="no"
-+ ;;
- esac
- done
-
- if [ "$bsd" = "yes" -o "$darwin" = "yes" -o "$mingw32" = "yes" ] ; then
- AIOLIBS=
-@@ -417,10 +420,11 @@ echo " --enable-system enable
- echo " --disable-system disable all system emulation targets"
- echo " --enable-linux-user enable all linux usermode emulation targets"
- echo " --disable-linux-user disable all linux usermode emulation targets"
- echo " --enable-darwin-user enable all darwin usermode emulation targets"
- echo " --disable-darwin-user disable all darwin usermode emulation targets"
-+echo " --disable-nptl disable usermode NPTL guest support"
- echo " --fmod-lib path to FMOD library"
- echo " --fmod-inc path to FMOD includes"
- echo " --enable-uname-release=R Return R for uname -r in usermode emulation"
- echo " --sparc_cpu=V Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9"
- echo ""
-@@ -583,10 +587,27 @@ fi
- cat > $TMPC <<EOF
- int main(void) {
- }
- EOF
-
-+# check NPTL support
-+cat > $TMPC <<EOF
-+#include <sched.h>
-+void foo()
-+{
-+#ifndef CLONE_SETTLS
-+#error bork
-+#endif
-+}
-+EOF
-+
-+if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
-+ :
-+else
-+ nptl="no"
-+fi
-+
- ##########################################
- # SDL probe
-
- sdl_too_old=no
-
-@@ -747,10 +768,11 @@ if test -n "$sparc_cpu"; then
- fi
- echo "kqemu support $kqemu"
- echo "Documentation $build_docs"
- [ ! -z "$uname_release" ] && \
- echo "uname -r $uname_release"
-+echo "NPTL support $nptl"
-
- if test $sdl_too_old = "yes"; then
- echo "-> Your SDL version is too old - please upgrade to have SDL support"
- fi
- if [ -s /tmp/qemu-$$-sdl-config.log ]; then
-@@ -1063,10 +1085,13 @@ if test "$target_cpu" = "i386" ; then
- fi
- elif test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" ; then
- echo "TARGET_ARCH=arm" >> $config_mak
- echo "#define TARGET_ARCH \"arm\"" >> $config_h
- echo "#define TARGET_ARM 1" >> $config_h
-+ if test "$nptl" = "yes" ; then
-+ echo "#define USE_NPTL 1" >> $config_h
-+ fi
- bflt="yes"
- elif test "$target_cpu" = "sparc" ; then
- echo "TARGET_ARCH=sparc" >> $config_mak
- echo "#define TARGET_ARCH \"sparc\"" >> $config_h
- echo "#define TARGET_SPARC 1" >> $config_h
---- qemu.orig/exec-all.h
-+++ qemu/exec-all.h
-@@ -338,174 +338,11 @@ dummy_label ## n: ;\
-
- extern CPUWriteMemoryFunc *io_mem_write[IO_MEM_NB_ENTRIES][4];
- extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
- extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
-
--#if defined(__powerpc__)
--static inline int testandset (int *p)
--{
-- int ret;
-- __asm__ __volatile__ (
-- "0: lwarx %0,0,%1\n"
-- " xor. %0,%3,%0\n"
-- " bne 1f\n"
-- " stwcx. %2,0,%1\n"
-- " bne- 0b\n"
-- "1: "
-- : "=&r" (ret)
-- : "r" (p), "r" (1), "r" (0)
-- : "cr0", "memory");
-- return ret;
--}
--#elif defined(__i386__)
--static inline int testandset (int *p)
--{
-- long int readval = 0;
--
-- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-- : "+m" (*p), "+a" (readval)
-- : "r" (1)
-- : "cc");
-- return readval;
--}
--#elif defined(__x86_64__)
--static inline int testandset (int *p)
--{
-- long int readval = 0;
--
-- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-- : "+m" (*p), "+a" (readval)
-- : "r" (1)
-- : "cc");
-- return readval;
--}
--#elif defined(__s390__)
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
-- " jl 0b"
-- : "=&d" (ret)
-- : "r" (1), "a" (p), "0" (*p)
-- : "cc", "memory" );
-- return ret;
--}
--#elif defined(__alpha__)
--static inline int testandset (int *p)
--{
-- int ret;
-- unsigned long one;
--
-- __asm__ __volatile__ ("0: mov 1,%2\n"
-- " ldl_l %0,%1\n"
-- " stl_c %2,%1\n"
-- " beq %2,1f\n"
-- ".subsection 2\n"
-- "1: br 0b\n"
-- ".previous"
-- : "=r" (ret), "=m" (*p), "=r" (one)
-- : "m" (*p));
-- return ret;
--}
--#elif defined(__sparc__)
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__("ldstub [%1], %0"
-- : "=r" (ret)
-- : "r" (p)
-- : "memory");
--
-- return (ret ? 1 : 0);
--}
--#elif defined(__arm__)
--static inline int testandset (int *spinlock)
--{
-- register unsigned int ret;
-- __asm__ __volatile__("swp %0, %1, [%2]"
-- : "=r"(ret)
-- : "0"(1), "r"(spinlock));
--
-- return ret;
--}
--#elif defined(__mc68000)
--static inline int testandset (int *p)
--{
-- char ret;
-- __asm__ __volatile__("tas %1; sne %0"
-- : "=r" (ret)
-- : "m" (p)
-- : "cc","memory");
-- return ret;
--}
--#elif defined(__ia64)
--
--#include <ia64intrin.h>
--
--static inline int testandset (int *p)
--{
-- return __sync_lock_test_and_set (p, 1);
--}
--#elif defined(__mips__)
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__ (
-- " .set push \n"
-- " .set noat \n"
-- " .set mips2 \n"
-- "1: li $1, 1 \n"
-- " ll %0, %1 \n"
-- " sc $1, %1 \n"
-- " beqz $1, 1b \n"
-- " .set pop "
-- : "=r" (ret), "+R" (*p)
-- :
-- : "memory");
--
-- return ret;
--}
--#else
--#error unimplemented CPU support
--#endif
--
--typedef int spinlock_t;
--
--#define SPIN_LOCK_UNLOCKED 0
--
--#if defined(CONFIG_USER_ONLY)
--static inline void spin_lock(spinlock_t *lock)
--{
-- while (testandset(lock));
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
-- *lock = 0;
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
-- return !testandset(lock);
--}
--#else
--static inline void spin_lock(spinlock_t *lock)
--{
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
-- return 1;
--}
--#endif
-+#include "qemu_spinlock.h"
-
- extern spinlock_t tb_lock;
-
- extern int tb_invalidated_flag;
-
---- qemu.orig/linux-user/arm/syscall.h
-+++ qemu/linux-user/arm/syscall.h
-@@ -26,11 +26,13 @@ struct target_pt_regs {
- #define ARM_ORIG_r0 uregs[17]
-
- #define ARM_SYSCALL_BASE 0x900000
- #define ARM_THUMB_SYSCALL 0
-
--#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
-+#define ARM_NR_BASE 0xf0000
-+#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
-+#define ARM_NR_set_tls (ARM_NR_BASE + 5)
-
- #define ARM_NR_semihosting 0x123456
- #define ARM_NR_thumb_semihosting 0xAB
-
- #if defined(TARGET_WORDS_BIGENDIAN)
---- qemu.orig/linux-user/main.c
-+++ qemu/linux-user/main.c
-@@ -361,10 +361,54 @@ static void arm_cache_flush(abi_ulong st
- break;
- addr = last1 + 1;
- }
- }
-
-+/* Handle a jump to the kernel code page. */
-+static int
-+do_kernel_trap(CPUARMState *env)
-+{
-+ uint32_t addr;
-+ uint32_t *ptr;
-+ uint32_t cpsr;
-+
-+ switch (env->regs[15]) {
-+ case 0xffff0fc0: /* __kernel_cmpxchg */
-+ /* XXX: This only works between threads, not between processes.
-+ Use native atomic operations. */
-+ /* ??? This probably breaks horribly if the access segfaults. */
-+ cpu_lock();
-+ ptr = (uint32_t *)env->regs[2];
-+ cpsr = cpsr_read(env);
-+ if (*ptr == env->regs[0]) {
-+ *ptr = env->regs[1];
-+ env->regs[0] = 0;
-+ cpsr |= CPSR_C;
-+ } else {
-+ env->regs[0] = -1;
-+ cpsr &= ~CPSR_C;
-+ }
-+ cpsr_write(env, cpsr, CPSR_C);
-+ cpu_unlock();
-+ break;
-+ case 0xffff0fe0: /* __kernel_get_tls */
-+ env->regs[0] = env->cp15.c13_tls;
-+ break;
-+ default:
-+ return 1;
-+ }
-+ /* Jump back to the caller. */
-+ addr = env->regs[14];
-+ if (addr & 1) {
-+ env->thumb = 1;
-+ addr &= ~1;
-+ }
-+ env->regs[15] = addr;
-+
-+ return 0;
-+}
-+
- void cpu_loop(CPUARMState *env)
- {
- int trapnr;
- unsigned int n, insn;
- target_siginfo_t info;
-@@ -471,32 +515,50 @@ void cpu_loop(CPUARMState *env)
- get_user_u32(insn, env->regs[15] - 4);
- n = insn & 0xffffff;
- }
- }
-
-- if (n == ARM_NR_cacheflush) {
-- arm_cache_flush(env->regs[0], env->regs[1]);
-- } else if (n == ARM_NR_semihosting
-- || n == ARM_NR_thumb_semihosting) {
-+ if (n == ARM_NR_semihosting
-+ || n == ARM_NR_thumb_semihosting) {
- env->regs[0] = do_arm_semihosting (env);
- } else if (n == 0 || n >= ARM_SYSCALL_BASE
- || (env->thumb && n == ARM_THUMB_SYSCALL)) {
- /* linux syscall */
- if (env->thumb || n == 0) {
- n = env->regs[7];
- } else {
- n -= ARM_SYSCALL_BASE;
- env->eabi = 0;
- }
-- env->regs[0] = do_syscall(env,
-- n,
-- env->regs[0],
-- env->regs[1],
-- env->regs[2],
-- env->regs[3],
-- env->regs[4],
-- env->regs[5]);
-+ if ( n > ARM_NR_BASE) {
-+ switch (n)
-+ {
-+ case ARM_NR_cacheflush:
-+ arm_cache_flush(env->regs[0], env->regs[1]);
-+ break;
-+#ifdef USE_NPTL
-+ case ARM_NR_set_tls:
-+ cpu_set_tls(env, env->regs[0]);
-+ env->regs[0] = 0;
-+ break;
-+#endif
-+ default:
-+ printf ("Error: Bad syscall: %x\n", n);
-+ goto error;
-+ }
-+ }
-+ else
-+ {
-+ env->regs[0] = do_syscall(env,
-+ n,
-+ env->regs[0],
-+ env->regs[1],
-+ env->regs[2],
-+ env->regs[3],
-+ env->regs[4],
-+ env->regs[5]);
-+ }
- } else {
- goto error;
- }
- }
- break;
-@@ -531,10 +593,14 @@ void cpu_loop(CPUARMState *env)
- info.si_code = TARGET_TRAP_BRKPT;
- queue_signal(info.si_signo, &info);
- }
- }
- break;
-+ case EXCP_KERNEL_TRAP:
-+ if (do_kernel_trap(env))
-+ goto error;
-+ break;
- default:
- error:
- fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
- trapnr);
- cpu_dump_state(env, stderr, fprintf, 0);
-@@ -2378,10 +2444,14 @@ int main(int argc, char **argv)
- #if defined(TARGET_ARM) || defined(TARGET_M68K)
- ts->stack_base = info->start_stack;
- ts->heap_base = info->brk;
- /* This will be filled in on the first SYS_HEAPINFO call. */
- ts->heap_limit = 0;
-+ /* Register the magic kernel code page. The cpu will generate a
-+ special exception when it tries to execute code here. We can't
-+ put real code here because it may be in use by the host kernel. */
-+ page_set_flags(0xffff0000, 0xffff0fff, 0);
- #endif
-
- if (gdbstub_port) {
- gdbserver_start (gdbstub_port);
- gdb_handlesig(env, 0);
---- qemu.orig/linux-user/qemu.h
-+++ qemu/linux-user/qemu.h
-@@ -100,10 +100,13 @@ typedef struct TaskState {
- /* Extra fields for semihosted binaries. */
- uint32_t stack_base;
- uint32_t heap_base;
- uint32_t heap_limit;
- #endif
-+#ifdef USE_NPTL
-+ uint32_t *child_tidptr;
-+#endif
- int used; /* non zero if used */
- struct image_info *info;
- uint8_t stack[0];
- } __attribute__((aligned(16))) TaskState;
-
---- qemu.orig/linux-user/syscall.c
-+++ qemu/linux-user/syscall.c
-@@ -69,13 +69,22 @@
- #include <linux/soundcard.h>
- #include <linux/dirent.h>
- #include <linux/kd.h>
-
- #include "qemu.h"
-+#include "qemu_spinlock.h"
-
- //#define DEBUG
-
-+#ifdef USE_NPTL
-+#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
-+ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
-+#else
-+/* XXX: Hardcode the above values. */
-+#define CLONE_NPTL_FLAGS2 0
-+#endif
-+
- #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
- || defined(TARGET_M68K) || defined(TARGET_SH4) || defined(TARGET_CRIS)
- /* 16 bit uid wrappers emulation */
- #define USE_UID16
- #endif
-@@ -2690,27 +2699,46 @@ abi_long do_arch_prctl(CPUX86State *env,
-
- /* this stack is the equivalent of the kernel stack associated with a
- thread/process */
- #define NEW_STACK_SIZE 8192
-
-+#ifdef USE_NPTL
-+static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
-+#endif
-+
- static int clone_func(void *arg)
- {
- CPUState *env = arg;
-+#ifdef HAVE_NPTL
-+ /* Wait until the parent has finshed initializing the tls state. */
-+ while (!spin_trylock(&nptl_lock))
-+ usleep(1);
-+ spin_unlock(&nptl_lock);
-+#endif
- cpu_loop(env);
- /* never exits */
- return 0;
- }
-
- /* do_fork() Must return host values and target errnos (unlike most
- do_*() functions). */
--int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp)
-+int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
-+ uint32_t *parent_tidptr, void *newtls,
-+ uint32_t *child_tidptr)
- {
- int ret;
- TaskState *ts;
- uint8_t *new_stack;
- CPUState *new_env;
-
-+#ifdef USE_NPTL
-+ unsigned int nptl_flags;
-+
-+ if (flags & CLONE_PARENT_SETTID)
-+ *parent_tidptr = gettid();
-+#endif
-+
- if (flags & CLONE_VM) {
- ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
- memset(ts, 0, sizeof(TaskState));
- new_stack = ts->stack;
- ts->used = 1;
-@@ -2772,20 +2800,71 @@ int do_fork(CPUState *env, unsigned int
- new_env->regs[14] = newsp;
- #else
- #error unsupported target CPU
- #endif
- new_env->opaque = ts;
-+#ifdef USE_NPTL
-+ nptl_flags = flags;
-+ flags &= ~CLONE_NPTL_FLAGS2;
-+
-+ if (nptl_flags & CLONE_CHILD_CLEARTID) {
-+ ts->child_tidptr = child_tidptr;
-+ }
-+
-+ if (nptl_flags & CLONE_SETTLS)
-+ cpu_set_tls (new_env, newtls);
-+
-+ /* Grab the global cpu lock so that the thread setup appears
-+ atomic. */
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ spin_lock(&nptl_lock);
-+
-+#else
-+ if (flags & CLONE_NPTL_FLAGS2)
-+ return -EINVAL;
-+#endif
-+
-+ if (CLONE_VFORK & flags)
-+ flags ^= CLONE_VM;
- #ifdef __ia64__
- ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #else
- ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #endif
-+#ifdef USE_NPTL
-+ if (ret != -1) {
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ *child_tidptr = ret;
-+ }
-+
-+ /* Allow the child to continue. */
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ spin_unlock(&nptl_lock);
-+#endif
- } else {
- /* if no CLONE_VM, we consider it is a fork */
-- if ((flags & ~CSIGNAL) != 0)
-+ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
- return -EINVAL;
- ret = fork();
-+#ifdef USE_NPTL
-+ /* There is a race condition here. The parent process could
-+ theoretically read the TID in the child process before the child
-+ tid is set. This would require using either ptrace
-+ (not implemented) or having *_tidptr to point at a shared memory
-+ mapping. We can't repeat the spinlock hack used above because
-+ the child process gets its own copy of the lock. */
-+ if (ret == 0) {
-+ /* Child Process. */
-+ if (flags & CLONE_CHILD_SETTID)
-+ *child_tidptr = gettid();
-+ ts = (TaskState *)env->opaque;
-+ if (flags & CLONE_CHILD_CLEARTID)
-+ ts->child_tidptr = child_tidptr;
-+ if (flags & CLONE_SETTLS)
-+ cpu_set_tls (env, newtls);
-+ }
-+#endif
- }
- return ret;
- }
-
- static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
-@@ -3106,11 +3185,11 @@ abi_long do_syscall(void *cpu_env, int n
- break;
- case TARGET_NR_brk:
- ret = do_brk(arg1);
- break;
- case TARGET_NR_fork:
-- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
-+ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
- break;
- #ifdef TARGET_NR_waitpid
- case TARGET_NR_waitpid:
- {
- int status;
-@@ -4463,11 +4542,12 @@ abi_long do_syscall(void *cpu_env, int n
- #endif
- case TARGET_NR_fsync:
- ret = get_errno(fsync(arg1));
- break;
- case TARGET_NR_clone:
-- ret = get_errno(do_fork(cpu_env, arg1, arg2));
-+ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
-+ (void *)arg4, (uint32_t *)arg5));
- break;
- #ifdef __NR_exit_group
- /* new thread calls */
- case TARGET_NR_exit_group:
- gdb_exit(cpu_env, arg1);
-@@ -4908,11 +4988,12 @@ abi_long do_syscall(void *cpu_env, int n
- case TARGET_NR_putpmsg:
- goto unimplemented;
- #endif
- #ifdef TARGET_NR_vfork
- case TARGET_NR_vfork:
-- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
-+ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
-+ NULL, NULL, NULL));
- break;
- #endif
- #ifdef TARGET_NR_ugetrlimit
- case TARGET_NR_ugetrlimit:
- {
---- /dev/null
-+++ qemu/qemu_spinlock.h
-@@ -0,0 +1,181 @@
-+/*
-+ * Atomic operation helper include
-+ *
-+ * Copyright (c) 2005 Fabrice Bellard
-+ *
-+ * 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
-+ */
-+#ifndef QEMU_SPINLOCK_H
-+#define QEMU_SPINLOCK_H
-+
-+#ifdef __powerpc__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+ __asm__ __volatile__ (
-+ "0: lwarx %0,0,%1\n"
-+ " xor. %0,%3,%0\n"
-+ " bne 1f\n"
-+ " stwcx. %2,0,%1\n"
-+ " bne- 0b\n"
-+ "1: "
-+ : "=&r" (ret)
-+ : "r" (p), "r" (1), "r" (0)
-+ : "cr0", "memory");
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __i386__
-+static inline int testandset (int *p)
-+{
-+ long int readval = 0;
-+
-+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+ : "+m" (*p), "+a" (readval)
-+ : "r" (1)
-+ : "cc");
-+ return readval;
-+}
-+#endif
-+
-+#ifdef __x86_64__
-+static inline int testandset (int *p)
-+{
-+ long int readval = 0;
-+
-+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+ : "+m" (*p), "+a" (readval)
-+ : "r" (1)
-+ : "cc");
-+ return readval;
-+}
-+#endif
-+
-+#ifdef __s390__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+
-+ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
-+ " jl 0b"
-+ : "=&d" (ret)
-+ : "r" (1), "a" (p), "0" (*p)
-+ : "cc", "memory" );
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __alpha__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+ unsigned long one;
-+
-+ __asm__ __volatile__ ("0: mov 1,%2\n"
-+ " ldl_l %0,%1\n"
-+ " stl_c %2,%1\n"
-+ " beq %2,1f\n"
-+ ".subsection 2\n"
-+ "1: br 0b\n"
-+ ".previous"
-+ : "=r" (ret), "=m" (*p), "=r" (one)
-+ : "m" (*p));
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __sparc__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+
-+ __asm__ __volatile__("ldstub [%1], %0"
-+ : "=r" (ret)
-+ : "r" (p)
-+ : "memory");
-+
-+ return (ret ? 1 : 0);
-+}
-+#endif
-+
-+#ifdef __arm__
-+static inline int testandset (int *spinlock)
-+{
-+ register unsigned int ret;
-+ __asm__ __volatile__("swp %0, %1, [%2]"
-+ : "=r"(ret)
-+ : "0"(1), "r"(spinlock));
-+
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __mc68000
-+static inline int testandset (int *p)
-+{
-+ char ret;
-+ __asm__ __volatile__("tas %1; sne %0"
-+ : "=r" (ret)
-+ : "m" (p)
-+ : "cc","memory");
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __ia64
-+#include <ia64intrin.h>
-+
-+static inline int testandset (int *p)
-+{
-+ return __sync_lock_test_and_set (p, 1);
-+}
-+#endif
-+
-+typedef int spinlock_t;
-+
-+#define SPIN_LOCK_UNLOCKED 0
-+
-+#if defined(CONFIG_USER_ONLY)
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+ while (testandset(lock));
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+ *lock = 0;
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+ return !testandset(lock);
-+}
-+#else
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+ return 1;
-+}
-+#endif
-+
-+#endif
---- qemu.orig/target-arm/cpu.h
-+++ qemu/target-arm/cpu.h
-@@ -36,10 +36,11 @@
- #define EXCP_DATA_ABORT 4
- #define EXCP_IRQ 5
- #define EXCP_FIQ 6
- #define EXCP_BKPT 7
- #define EXCP_EXCEPTION_EXIT 8 /* Return from v7M exception. */
-+#define EXCP_KERNEL_TRAP 9 /* Jumped to kernel code page. */
-
- #define ARMV7M_EXCP_RESET 1
- #define ARMV7M_EXCP_NMI 2
- #define ARMV7M_EXCP_HARD 3
- #define ARMV7M_EXCP_MEM 4
-@@ -220,10 +221,19 @@ int cpu_arm_signal_handler(int host_sign
- void *puc);
-
- void cpu_lock(void);
- void cpu_unlock(void);
-
-+void cpu_lock(void);
-+void cpu_unlock(void);
-+#if defined(USE_NPTL)
-+static inline void cpu_set_tls(CPUARMState *env, void *newtls)
-+{
-+ env->cp15.c13_tls2 = (uint32_t)(long)newtls;
-+}
-+#endif
-+
- #define CPSR_M (0x1f)
- #define CPSR_T (1 << 5)
- #define CPSR_F (1 << 6)
- #define CPSR_I (1 << 7)
- #define CPSR_A (1 << 8)
---- qemu.orig/target-arm/op.c
-+++ qemu/target-arm/op.c
-@@ -1007,10 +1007,16 @@ void OPPROTO op_exception_exit(void)
- {
- env->exception_index = EXCP_EXCEPTION_EXIT;
- cpu_loop_exit();
- }
-
-+void OPPROTO op_kernel_trap(void)
-+{
-+ env->exception_index = EXCP_KERNEL_TRAP;
-+ cpu_loop_exit();
-+}
-+
- /* VFP support. We follow the convention used for VFP instrunctions:
- Single precition routines have a "s" suffix, double precision a
- "d" suffix. */
-
- #define VFP_OP(name, p) void OPPROTO op_vfp_##name##p(void)
---- qemu.orig/target-arm/translate.c
-+++ qemu/target-arm/translate.c
-@@ -7518,11 +7518,18 @@ static inline int gen_intermediate_code_
- /* We always get here via a jump, so know we are not in a
- conditional execution block. */
- gen_op_exception_exit();
- }
- #endif
--
-+#ifdef CONFIG_USER_ONLY
-+ /* Intercept jump to the magic kernel page. */
-+ if (dc->pc > 0xffff0000) {
-+ gen_op_kernel_trap();
-+ dc->is_jmp = DISAS_UPDATE;
-+ break;
-+ }
-+#endif
- if (env->nb_breakpoints > 0) {
- for(j = 0; j < env->nb_breakpoints; j++) {
- if (env->breakpoints[j] == dc->pc) {
- gen_set_condexec(dc);
- gen_op_movl_T0_im((long)dc->pc);
diff --git a/recipes/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch b/recipes/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch
deleted file mode 100644
index c7f36d8110..0000000000
--- a/recipes/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch
+++ /dev/null
@@ -1,37 +0,0 @@
----
- linux-user/mmap.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-Index: qemu/linux-user/mmap.c
-===================================================================
---- qemu.orig/linux-user/mmap.c 2007-12-03 15:40:25.000000000 +0000
-+++ qemu/linux-user/mmap.c 2007-12-03 16:37:21.000000000 +0000
-@@ -29,6 +29,10 @@
-
- //#define DEBUG_MMAP
-
-+#ifndef MAP_32BIT
-+#define MAP_32BIT 0
-+#endif
-+
- /* NOTE: all the constants are the HOST ones, but addresses are target. */
- int target_mprotect(abi_ulong start, abi_ulong len, int prot)
- {
-@@ -251,7 +255,7 @@ abi_long target_mmap(abi_ulong start, ab
- especially important if qemu_host_page_size >
- qemu_real_host_page_size */
- p = mmap(g2h(mmap_start),
-- host_len, prot, flags | MAP_FIXED, fd, host_offset);
-+ host_len, prot, flags | MAP_FIXED | MAP_32BIT, fd, host_offset);
- if (p == MAP_FAILED)
- return -1;
- /* update start so that it points to the file position at 'offset' */
-@@ -406,7 +410,7 @@ abi_long target_mremap(abi_ulong old_add
- unsigned long host_addr;
-
- /* XXX: use 5 args syscall */
-- host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags);
-+ host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags | MAP_32BIT);
- if (host_addr == -1)
- return -1;
- new_addr = h2g(host_addr);
diff --git a/recipes/qemu/qemu-0.9.1/series b/recipes/qemu/qemu-0.9.1/series
deleted file mode 100644
index e6ffdcc6bd..0000000000
--- a/recipes/qemu/qemu-0.9.1/series
+++ /dev/null
@@ -1,25 +0,0 @@
-02_snapshot_use_tmpdir.patch -p0
-04_do_not_print_rtc_freq_if_ok.patch -p1
-05_non-fatal_if_linux_hd_missing.patch -p1
-06_exit_segfault.patch -p0
-10_signal_jobs.patch -p0
-11_signal_sigaction.patch -p0
-22_net_tuntap_stall.patch -p0
-31_syscalls.patch -p0
-32_syscall_sysctl.patch -p0
-33_syscall_ppc_clone.patch -p0
-39_syscall_fadvise64.patch -p0
-41_arm_fpa_sigfpe.patch -p0
-52_ne2000_return.patch -p1
-61_safe_64bit_int.patch -p0
-63_sparc_build.patch -p0
-64_ppc_asm_constraints.patch -p1
-65_kfreebsd.patch -p0
-66_tls_ld.patch -p0
-91-oh-sdl-cursor.patch -p0
-qemu-0.9.0-nptl.patch -p1
-qemu-0.9.0-nptl-update.patch -p1
-qemu-amd64-32b-mapping-0.9.0.patch -p1
-workaround_bad_futex_headers.patch -p1
-fix_segfault.patch -p1
-disable-error-in-configure.patch -p1
diff --git a/recipes/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch b/recipes/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch
deleted file mode 100644
index cc122ebdba..0000000000
--- a/recipes/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch
+++ /dev/null
@@ -1,25 +0,0 @@
----
- linux-user/syscall.c | 10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
-
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c 2007-08-09 20:28:06.000000000 +0100
-+++ qemu/linux-user/syscall.c 2007-08-09 20:28:41.000000000 +0100
-@@ -61,7 +61,15 @@
- #define tchars host_tchars /* same as target */
- #define ltchars host_ltchars /* same as target */
-
--#include <linux/futex.h>
-+#define FUTEX_WAIT 0
-+#define FUTEX_WAKE 1
-+#define FUTEX_FD 2
-+#define FUTEX_REQUEUE 3
-+#define FUTEX_CMP_REQUEUE 4
-+#define FUTEX_WAKE_OP 5
-+#define FUTEX_LOCK_PI 6
-+#define FUTEX_UNLOCK_PI 7
-+
- #include <linux/termios.h>
- #include <linux/unistd.h>
- #include <linux/utsname.h>
diff --git a/recipes/qemu/qemu-0.9.1/writev_fix.patch b/recipes/qemu/qemu-0.9.1/writev_fix.patch
deleted file mode 100644
index e0ed4af972..0000000000
--- a/recipes/qemu/qemu-0.9.1/writev_fix.patch
+++ /dev/null
@@ -1,17 +0,0 @@
----
- linux-user/syscall.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: qemu-0.9.1/linux-user/syscall.c
-===================================================================
---- qemu-0.9.1.orig/linux-user/syscall.c 2008-02-03 00:00:00.000000000 +0000
-+++ qemu-0.9.1/linux-user/syscall.c 2008-02-03 00:00:38.000000000 +0000
-@@ -1048,7 +1048,7 @@ static abi_long lock_iovec(int type, str
- base = tswapl(target_vec[i].iov_base);
- vec[i].iov_len = tswapl(target_vec[i].iov_len);
- vec[i].iov_base = lock_user(type, base, vec[i].iov_len, copy);
-- if (!vec[i].iov_base)
-+ if (!vec[i].iov_base && vec[i].iov_len)
- goto fail;
- }
- unlock_user (target_vec, target_addr, 0);
diff --git a/recipes/qemu/qemu-gcc3-check.inc b/recipes/qemu/qemu-gcc3-check.inc
deleted file mode 100644
index 81c3555b48..0000000000
--- a/recipes/qemu/qemu-gcc3-check.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-python __anonymous() {
- from bb import which, data
-
- path = data.getVar('PATH', d, 1)
- oldOeConf = data.getVar('EXTRA_OECONF', d, 1)
- if not oldOeConf: oldOeConf = ""
- gcc3 = check_gcc3(d)
- if gcc3:
- data.setVar('EXTRA_OECONF', oldOeConf + " --cc=" + gcc3, d)
-}
-
diff --git a/recipes/qemu/qemu-native.inc b/recipes/qemu/qemu-native.inc
deleted file mode 100644
index 9edad6609d..0000000000
--- a/recipes/qemu/qemu-native.inc
+++ /dev/null
@@ -1,6 +0,0 @@
-inherit native
-
-DEPENDS = "libsdl-native zlib-native"
-
-export OS_CFLAGS="${CFLAGS} ${LDFLAGS}"
-
diff --git a/recipes/qemu/qemu-native_0.10.3.bb b/recipes/qemu/qemu-native_0.10.3.bb
deleted file mode 100644
index 16984a3f6a..0000000000
--- a/recipes/qemu/qemu-native_0.10.3.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require qemu_${PV}.bb
-require qemu-native.inc
diff --git a/recipes/qemu/qemu-native_0.9.1.bb b/recipes/qemu/qemu-native_0.9.1.bb
deleted file mode 100644
index 4c418f6ca7..0000000000
--- a/recipes/qemu/qemu-native_0.9.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require qemu_${PV}.bb
-require qemu-native.inc
-require qemu-gcc3-check.inc
-
-DEPENDS += "gcc3-native"
diff --git a/recipes/qemu/qemu-native_20070613.bb b/recipes/qemu/qemu-native_20070613.bb
deleted file mode 100644
index 4c418f6ca7..0000000000
--- a/recipes/qemu/qemu-native_20070613.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require qemu_${PV}.bb
-require qemu-native.inc
-require qemu-gcc3-check.inc
-
-DEPENDS += "gcc3-native"
diff --git a/recipes/qemu/qemu-native_cvs.bb b/recipes/qemu/qemu-native_cvs.bb
deleted file mode 100644
index 51e6028ae1..0000000000
--- a/recipes/qemu/qemu-native_cvs.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require qemu_cvs.bb
-require qemu-native.inc
-require qemu-gcc3-check.inc
-
-DEPENDS += "gcc3-native"
diff --git a/recipes/qemu/qemu-native_svn.bb b/recipes/qemu/qemu-native_svn.bb
deleted file mode 100644
index b530bbd35a..0000000000
--- a/recipes/qemu/qemu-native_svn.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require qemu_svn.bb
-require qemu-native.inc
-require qemu-gcc3-check.inc
-
-DEPENDS += "gcc3-native"
diff --git a/recipes/qemu/qemu_0.10.3.bb b/recipes/qemu/qemu_0.10.3.bb
deleted file mode 100644
index 182f4b4407..0000000000
--- a/recipes/qemu/qemu_0.10.3.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-LICENSE = "GPL"
-DEPENDS = "zlib"
-
-PR = "r1"
-
-FILESPATH = "${FILE_DIRNAME}/qemu-${PV}"
-FILESDIR = "${WORKDIR}"
-
-SRC_URI = "\
- http://download.savannah.gnu.org/releases/qemu/qemu-${PV}.tar.gz \
- file://06_exit_segfault.patch;patch=1;pnum=0 \
- file://11_signal_sigaction.patch;patch=1;pnum=0 \
- file://22_net_tuntap_stall.patch;patch=1 \
- file://31_syscalls.patch;patch=1;pnum=0 \
- file://32_syscall_sysctl.patch;patch=1;pnum=0 \
- file://52_ne2000_return.patch;patch=1 \
- file://61_safe_64bit_int.patch;patch=1;pnum=0 \
- file://63_sparc_build.patch;patch=1;pnum=0 \
- file://64_ppc_asm_constraints.patch;patch=1 \
- file://66_tls_ld.patch;patch=1;pnum=0 \
- file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \
- file://fix_segfault.patch;patch=1 \
- file://no-strip.patch;patch=1 \
- file://fix_baum_c_compilation.patch;patch=1 \
- file://fix_fortify_source_compilation.patch;patch=1 \
- "
-
-S = "${WORKDIR}/qemu-${PV}"
-
-EXTRA_OECONF += "--disable-gfx-check"
-
-inherit autotools
-
-do_configure() {
- ${S}/configure --prefix=${prefix} ${EXTRA_OECONF}
-}
diff --git a/recipes/qemu/qemu_0.12.3.bb b/recipes/qemu/qemu_0.12.3.bb
new file mode 100644
index 0000000000..d1971e96f8
--- /dev/null
+++ b/recipes/qemu/qemu_0.12.3.bb
@@ -0,0 +1,40 @@
+LICENSE = "GPL"
+DEPENDS = "zlib"
+
+PR = "r1"
+
+SRC_URI = "\
+ http://download.savannah.gnu.org/releases/qemu/qemu-${PV}.tar.gz;name=qemu-${PV} \
+ file://06_exit_segfault.patch;patch=1;pnum=0 \
+ file://11_signal_sigaction.patch;patch=1;pnum=0 \
+ file://22_net_tuntap_stall.patch;patch=1 \
+ file://31_syscalls.patch;patch=1;pnum=0 \
+ file://32_syscall_sysctl.patch;patch=1;pnum=0 \
+ file://52_ne2000_return.patch;patch=1 \
+ file://63_sparc_build.patch;patch=1;pnum=0 \
+ file://64_ppc_asm_constraints.patch;patch=1 \
+ file://66_tls_ld.patch;patch=1;pnum=0 \
+ file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \
+ file://fix_segfault.patch;patch=1 \
+ file://fix_baum_c_compilation.patch;patch=1 \
+ file://fix_fortify_source_compilation.patch;patch=1 \
+ "
+
+SRC_URI[qemu-0.12.3.sha256sum] = "3ce26f8fb0a59418b2064a26bac4b40ea4e493acbc3df7ad5932635477fade4b"
+SRC_URI[qemu-0.12.3.md5sum] = "d215e4568650e8019816397174c090e1"
+
+BBCLASSEXTEND="native"
+
+S = "${WORKDIR}/qemu-${PV}"
+
+EXTRA_OECONF += "--disable-sdl --disable-strip"
+
+inherit autotools
+
+do_configure_prepend_virtclass-native() {
+ export QEMU_CFLAGS="-I${STAGING_INCDIR_NATIVE} ${QEMU_CFLAGS}"
+}
+
+do_configure() {
+ ${S}/configure --prefix=${prefix} ${EXTRA_OECONF}
+}
diff --git a/recipes/qemu/qemu_0.9.1.bb b/recipes/qemu/qemu_0.9.1.bb
deleted file mode 100644
index e3e7aa0887..0000000000
--- a/recipes/qemu/qemu_0.9.1.bb
+++ /dev/null
@@ -1,49 +0,0 @@
-LICENSE = "GPL"
-DEPENDS = "zlib"
-PR = "r7"
-
-FILESPATH = "${FILE_DIRNAME}/qemu-${PV}"
-FILESDIR = "${WORKDIR}"
-
-SRC_URI = "\
- http://www.bellard.org/qemu/qemu-0.9.1.tar.gz \
- file://02_snapshot_use_tmpdir.patch;patch=1;pnum=0 \
- file://04_do_not_print_rtc_freq_if_ok.patch;patch=1;pnum=1 \
- file://05_non-fatal_if_linux_hd_missing.patch;patch=1;pnum=1 \
- file://06_exit_segfault.patch;patch=1;pnum=0 \
- file://10_signal_jobs.patch;patch=1;pnum=0 \
- file://11_signal_sigaction.patch;patch=1;pnum=0 \
- file://22_net_tuntap_stall.patch;patch=1;pnum=0 \
- file://31_syscalls.patch;patch=1;pnum=0 \
- file://32_syscall_sysctl.patch;patch=1;pnum=0 \
- file://33_syscall_ppc_clone.patch;patch=1;pnum=0 \
- file://39_syscall_fadvise64.patch;patch=1;pnum=0 \
- file://41_arm_fpa_sigfpe.patch;patch=1;pnum=0 \
- file://52_ne2000_return.patch;patch=1;pnum=1 \
- file://61_safe_64bit_int.patch;patch=1;pnum=0 \
- file://63_sparc_build.patch;patch=1;pnum=0 \
- file://64_ppc_asm_constraints.patch;patch=1;pnum=1 \
- file://65_kfreebsd.patch;patch=1;pnum=0 \
- file://66_tls_ld.patch;patch=1;pnum=0 \
- file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \
- file://qemu-0.9.0-nptl.patch;patch=1 \
- file://qemu-0.9.0-nptl-update.patch;patch=1 \
- file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1 \
- file://workaround_bad_futex_headers.patch;patch=1 \
- file://fix_segfault.patch;patch=1 \
- file://writev_fix.patch;patch=1 \
- file://configure_symlinkpath_fix.patch;patch=1 \
- file://disable-error-in-configure.patch;patch=1 \
- file://no-strip.patch;patch=1"
-
-S = "${WORKDIR}/qemu-${PV}"
-
-#EXTRA_OECONF += "--disable-sdl"
-#EXTRA_OECONF += "--target-list=arm-linux-user,arm-softmmu"
-EXTRA_OECONF += "--disable-gfx-check"
-
-inherit autotools
-
-do_configure() {
- oe_runconf
-}
diff --git a/recipes/qemu/qemu_20070613.bb b/recipes/qemu/qemu_20070613.bb
deleted file mode 100644
index 533848963b..0000000000
--- a/recipes/qemu/qemu_20070613.bb
+++ /dev/null
@@ -1,48 +0,0 @@
-LICENSE = "GPL"
-DEPENDS = "zlib"
-SRCDATE = "20070613"
-PV = "0.9.0+cvs${SRCDATE}"
-PR = "r5"
-
-FILESPATH = "${FILE_DIRNAME}/qemu-${PV}"
-FILESDIR = "${WORKDIR}"
-
-SRC_URI = "\
- cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu \
- file://02_snapshot_use_tmpdir.patch;patch=1;pnum=0 \
- file://03_machines_list_no_error.patch;patch=1;pnum=0 \
- file://04_do_not_print_rtc_freq_if_ok.patch;patch=1;pnum=1 \
- file://05_non-fatal_if_linux_hd_missing.patch;patch=1;pnum=1 \
- file://06_exit_segfault.patch;patch=1;pnum=0 \
- file://10_signal_jobs.patch;patch=1;pnum=0 \
- file://11_signal_sigaction.patch;patch=1;pnum=0 \
- file://12_signal_powerpc_support.patch;patch=1;pnum=1 \
- file://22_net_tuntap_stall.patch;patch=1;pnum=0 \
- file://31_syscalls.patch;patch=1;pnum=0 \
- file://32_syscall_sysctl.patch;patch=1;pnum=0 \
- file://33_syscall_ppc_clone.patch;patch=1;pnum=0 \
- file://39_syscall_fadvise64.patch;patch=1;pnum=0 \
- file://41_arm_fpa_sigfpe.patch;patch=1;pnum=0 \
- file://52_ne2000_return.patch;patch=1;pnum=1 \
- file://61_safe_64bit_int.patch;patch=1;pnum=0 \
- file://63_sparc_build.patch;patch=1;pnum=0 \
- file://64_ppc_asm_constraints.patch;patch=1;pnum=1 \
- file://65_kfreebsd.patch;patch=1;pnum=0 \
- file://66_tls_ld.patch;patch=1;pnum=0 \
- file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \
- file://93-oh-pl110-rgb.patch;patch=1;pnum=0 \
- file://qemu-0.9.0-nptl.patch;patch=1 \
- file://qemu-0.9.0-nptl-update.patch;patch=1 \
- file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1 \
- file://workaround_bad_futex_headers.patch;patch=1 \
- file://fix_segfault.patch;patch=1 \
- file://no-strip.patch;patch=1"
-
-S = "${WORKDIR}/qemu"
-
-#EXTRA_OECONF = "--disable-sdl"
-#EXTRA_OECONF = "--disable-gfx-check --target-list=arm-linux-user"
-EXTRA_OECONF = "--disable-gfx-check"
-
-inherit autotools
-
diff --git a/recipes/qemu/qemu_cvs.bb b/recipes/qemu/qemu_cvs.bb
deleted file mode 100644
index 137262ca2d..0000000000
--- a/recipes/qemu/qemu_cvs.bb
+++ /dev/null
@@ -1,55 +0,0 @@
-LICENSE = "GPL"
-DEPENDS = "zlib"
-PV = "0.9.0+cvs${SRCDATE}"
-PR = "r4"
-
-DEFAULT_PREFERENCE = "-1"
-FILESDIR = "${WORKDIR}"
-
-SRC_URI = "\
- cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu \
- file://02_snapshot_use_tmpdir.patch;patch=1;pnum=0 \
- file://03_machines_list_no_error.patch;patch=1;pnum=0 \
- file://04_do_not_print_rtc_freq_if_ok.patch;patch=1;pnum=1 \
- file://05_non-fatal_if_linux_hd_missing.patch;patch=1;pnum=1 \
- file://06_exit_segfault.patch;patch=1;pnum=0 \
- file://10_signal_jobs.patch;patch=1;pnum=0 \
- file://11_signal_sigaction.patch;patch=1;pnum=0 \
- file://12_signal_powerpc_support.patch;patch=1;pnum=1 \
- file://22_net_tuntap_stall.patch;patch=1;pnum=0 \
- file://31_syscalls.patch;patch=1;pnum=0 \
- file://32_syscall_sysctl.patch;patch=1;pnum=0 \
- file://33_syscall_ppc_clone.patch;patch=1;pnum=0 \
- file://39_syscall_fadvise64.patch;patch=1;pnum=0 \
- file://41_arm_fpa_sigfpe.patch;patch=1;pnum=0 \
- file://52_ne2000_return.patch;patch=1;pnum=1 \
- file://61_safe_64bit_int.patch;patch=1;pnum=0 \
- file://63_sparc_build.patch;patch=1;pnum=0 \
- file://64_ppc_asm_constraints.patch;patch=1;pnum=1 \
- file://65_kfreebsd.patch;patch=1;pnum=0 \
- file://66_tls_ld.patch;patch=1;pnum=0 \
- file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \
- file://93-oh-pl110-rgb.patch;patch=1;pnum=0 \
- file://qemu-0.9.0-nptl.patch;patch=1 \
- file://qemu-0.9.0-nptl-update.patch;patch=1 \
- file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1 \
- file://workaround_bad_futex_headers.patch;patch=1 \
- file://fix_segfault.patch;patch=1"
-
-# svn://svn.o-hand.com/repos/misc/trunk/qemu-packaging/qemu;module=debian;proto=http;srcdate=20070119 \
-# file://debian/patches/21_net_soopts.patch;patch=1;pnum=0 \
-# file://debian/patches/35_syscall_sockaddr.patch;patch=1;pnum=0 \
-# file://debian/patches/43_arm_cpustate.patch;patch=1;pnum=0 \
-# file://debian/patches/62_linux_boot_nasm.patch;patch=1;pnum=0 \
-# file://debian/patches/67_ppc_ftbfs.patch;patch=1;pnum=0 \
-# file://debian/patches/80_ui_curses.patch;patch=1;pnum=0 \
-# file://debian/patches/96-x.patch;patch=1"
-
-S = "${WORKDIR}/qemu"
-
-#EXTRA_OECONF += "--disable-sdl"
-#EXTRA_OECONF += "--target-list=arm-linux-user"
-EXTRA_OECONF += "--disable-gfx-check"
-
-inherit autotools
-
diff --git a/recipes/qemu/qemu_svn.bb b/recipes/qemu/qemu_svn.bb
deleted file mode 100644
index 2e78d868bc..0000000000
--- a/recipes/qemu/qemu_svn.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-LICENSE = "GPL"
-DEPENDS = "zlib"
-PV = "0.9.1+svnr${SRCPV}"
-PR = "r15"
-
-FILESPATH = "${FILE_DIRNAME}/qemu-0.9.1+svn/"
-FILESDIR = "${WORKDIR}"
-
-SRC_URI = "\
- svn://svn.savannah.nongnu.org/qemu;module=trunk \
- file://05_non-fatal_if_linux_hd_missing.patch;patch=1;pnum=1 \
- file://06_exit_segfault.patch;patch=1;pnum=0 \
- file://10_signal_jobs.patch;patch=1;pnum=0 \
- file://11_signal_sigaction.patch;patch=1;pnum=0 \
- file://22_net_tuntap_stall.patch;patch=1;pnum=0 \
- file://31_syscalls.patch;patch=1;pnum=0 \
- file://32_syscall_sysctl.patch;patch=1;pnum=0 \
- file://33_syscall_ppc_clone.patch;patch=1;pnum=0 \
- file://39_syscall_fadvise64.patch;patch=1;pnum=0 \
- file://41_arm_fpa_sigfpe.patch;patch=1;pnum=0;maxrev=4028 \
- file://52_ne2000_return.patch;patch=1;pnum=1 \
- file://61_safe_64bit_int.patch;patch=1;pnum=0 \
- file://63_sparc_build.patch;patch=1;pnum=0 \
- file://64_ppc_asm_constraints.patch;patch=1;pnum=1 \
- file://65_kfreebsd.patch;patch=1;pnum=0 \
- file://66_tls_ld.patch;patch=1;pnum=0 \
- file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \
- file://qemu-0.9.0-nptl.patch;patch=1 \
- file://qemu-0.9.0-nptl-update.patch;patch=1;maxrev=4028 \
- file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1 \
- file://workaround_bad_futex_headers.patch;patch=1 \
- file://fix_segfault.patch;patch=1 \
- file://no-strip.patch;patch=1 \
- file://fix_brk.patch;patch=1 \
- file://fix_protection_bits.patch;patch=1 \
- file://revert_arm_tcg.patch.gz;patch=1;minrev=4242 \
- file://qemu-n800-support.patch;patch=1 \
- file://fix_baum_c_compilation.patch;patch=1 \
- file://fix_dirent_h_include.patch;patch=1"
-
-S = "${WORKDIR}/trunk"
-
-#EXTRA_OECONF += "--disable-sdl"
-#EXTRA_OECONF += "--target-list=arm-linux-user,arm-softmmu,i386-softmmu"
-EXTRA_OECONF += "--disable-gfx-check"
-
-inherit autotools
-
-do_configure() {
- ${S}/configure --prefix=${prefix} ${EXTRA_OECONF}
-}
diff --git a/recipes/qi/files/0002-gta02-add-kernel-params-to-boot-from-ubifs-ubi0-om-g.patch b/recipes/qi/files/0002-gta02-add-kernel-params-to-boot-from-ubifs-ubi0-om-g.patch
deleted file mode 100644
index d2e7517a86..0000000000
--- a/recipes/qi/files/0002-gta02-add-kernel-params-to-boot-from-ubifs-ubi0-om-g.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 843dbaa59d56b7c042662f48ed68bd41960635dd Mon Sep 17 00:00:00 2001
-From: Martin Jansa <Martin.Jansa@gmail.com>
-Date: Tue, 5 Jan 2010 12:44:25 +0100
-Subject: [PATCH 2/2] gta02: add kernel params to boot from ubifs ubi0:om-gta02-rootfs
-
----
- src/cpu/s3c2442/gta02.c | 5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/src/cpu/s3c2442/gta02.c b/src/cpu/s3c2442/gta02.c
-index 0347f61..48ee245 100644
---- a/src/cpu/s3c2442/gta02.c
-+++ b/src/cpu/s3c2442/gta02.c
-@@ -733,8 +733,9 @@ const struct board_api board_api_gta02 = {
- /* NOTE offset below is replaced at runtime */
- .offset_blocks512_if_no_partition = 0x80000 / 512,
- .filesystem = FS_RAW,
-- .commandline_append = " rootfstype=jffs2 "
-- "root=/dev/mtdblock6 ",
-+ .commandline_append = " rootfstype=ubifs " \
-+ " ubi.mtd=6,2048 " \
-+ " root=ubi0:om-gta02-rootfs ",
- },
- },
- };
---
-1.6.6
-
diff --git a/recipes/qi/files/rootfstype.ubifs.patch b/recipes/qi/files/rootfstype.ubifs.patch
new file mode 100644
index 0000000000..4775c16d73
--- /dev/null
+++ b/recipes/qi/files/rootfstype.ubifs.patch
@@ -0,0 +1,45 @@
+From 9313360da422929181bfb3339137caaa4400195f Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Tue, 5 Jan 2010 12:44:25 +0100
+Subject: [PATCH 1/2] gta02|gta01: add kernel params to boot from ubifs ubi0:rootfs
+
+---
+ src/cpu/s3c2410/gta01.c | 5 +++--
+ src/cpu/s3c2442/gta02.c | 5 +++--
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/src/cpu/s3c2410/gta01.c b/src/cpu/s3c2410/gta01.c
+index 4686fa2..a2fce11 100644
+--- a/src/cpu/s3c2410/gta01.c
++++ b/src/cpu/s3c2410/gta01.c
+@@ -305,8 +305,9 @@ const struct board_api board_api_gta01 = {
+ .block_read = nand_read_ll,
+ .offset_blocks512_if_no_partition = 0x44000 / 512,
+ .filesystem = FS_RAW,
+- .commandline_append = "rootfstype=jffs2 "
+- "root=/dev/mtdblock4 ",
++ .commandline_append = " rootfstype=ubifs " \
++ " ubi.mtd=4,512 " \
++ " root=ubi0:om-gta01-rootfs ",
+ },
+ },
+ };
+diff --git a/src/cpu/s3c2442/gta02.c b/src/cpu/s3c2442/gta02.c
+index 0347f61..48ee245 100644
+--- a/src/cpu/s3c2442/gta02.c
++++ b/src/cpu/s3c2442/gta02.c
+@@ -733,8 +733,9 @@ const struct board_api board_api_gta02 = {
+ /* NOTE offset below is replaced at runtime */
+ .offset_blocks512_if_no_partition = 0x80000 / 512,
+ .filesystem = FS_RAW,
+- .commandline_append = " rootfstype=jffs2 "
+- "root=/dev/mtdblock6 ",
++ .commandline_append = " rootfstype=ubifs " \
++ " ubi.mtd=6,2048 " \
++ " root=ubi0:om-gta02-rootfs ",
+ },
+ },
+ };
+--
+1.7.0.2
+
diff --git a/recipes/qi/qi-ubi_git.bb b/recipes/qi/qi-ubi_git.bb
index fb8bbe0f06..65995a6241 100644
--- a/recipes/qi/qi-ubi_git.bb
+++ b/recipes/qi/qi-ubi_git.bb
@@ -6,5 +6,5 @@ do_configure_prepend() {
}
SRC_URI_append = "\
- file://0002-gta02-add-kernel-params-to-boot-from-ubifs-ubi0-om-g.patch;patch=1 \
+ file://rootfstype.ubifs.patch;patch=1 \
"
diff --git a/recipes/qi/qi_git.bb b/recipes/qi/qi_git.bb
index 3364054298..a9c8215e88 100644
--- a/recipes/qi/qi_git.bb
+++ b/recipes/qi/qi_git.bb
@@ -1,7 +1,8 @@
require qi.inc
-PR = "r0"
+PR = "r1"
PR_append = "+gitr${SRCREV}"
+SRCREV = "c38b062a609f1442e6a9e13005cfbdfd59a5ac0d"
SRC_URI = "\
git://git.openmoko.org/git/qi.git;protocol=git;branch=master \
file://sanitize-makefile.patch;patch=1 \
diff --git a/recipes/qmake/files/qmake-hack.diff b/recipes/qmake/files/qmake-hack.diff
new file mode 100644
index 0000000000..290f54052b
--- /dev/null
+++ b/recipes/qmake/files/qmake-hack.diff
@@ -0,0 +1,15 @@
+--- /tmp/configure 2010-02-10 15:41:58.000000000 +0100
++++ qt-embedded-linux-opensource-src-4.4.3/configure 2010-02-10 15:42:01.000000000 +0100
+@@ -3946,6 +3946,12 @@
+ [ '!' -z "$QCONFIG_H" ] && mv -f "$QCONFIG_H" "$QMAKE_QCONFIG_H" #move qmake's qconfig.h to qconfig.h.qmake
+ [ '!' -z "$OLD_QCONFIG_H" ] && mv -f "${OLD_QCONFIG_H}.old" "$OLD_QCONFIG_H" #put back qconfig.h
+ [ "$QMAKE_BUILD_ERROR" = "yes" ] && exit 2
++
++# OE
++if [ x$CROSSHACK = xtrue ] ; then
++ echo "Exiting now, since we have what we want: a qmake binary"
++ exit 0
++fi
+ fi # Build qmake
+
+ #-------------------------------------------------------------------------------
diff --git a/recipes/qmake/qmake2-native.inc b/recipes/qmake/qmake2-native.inc
deleted file mode 100644
index 990820066a..0000000000
--- a/recipes/qmake/qmake2-native.inc
+++ /dev/null
@@ -1,67 +0,0 @@
-DESCRIPTION = "TrollTech Makefile Generator"
-PRIORITY = "optional"
-HOMEPAGE = "http://www.trolltech.com"
-SECTION = "devel"
-LICENSE = "GPL"
-PR = "r7"
-
-# We call 'moc' during the build
-DEPENDS = "uicmoc4-native"
-
-QTVER = "qt-embedded-linux-opensource-src-${QTVERSION}"
-
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/${QTVER}.tar.bz2 \
- file://0001-fix-mkspecs.patch;patch=1 \
- file://qt-config.patch;patch=1 \
- file://use-lflags-last.patch;patch=1 \
- file://linux-oe-qmake.conf"
-S = "${WORKDIR}/${QTVER}"
-
-inherit autotools
-
-export QTDIR = "${S}"
-EXTRA_OEMAKE = "-e"
-
-do_configure() {
- # Make sure we regenerate all Makefiles
- find ${S} -name "Makefile" | xargs rm
- # Install the OE build templates
- for template in linux-oe-g++ linux-uclibc-oe-g++ linux-gnueabi-oe-g++ linux-uclibceabi-oe-g++
- do
- install -d ${S}/mkspecs/$template
- install -m 0644 ${WORKDIR}/linux-oe-qmake.conf ${S}/mkspecs/$template/qmake.conf
- ln -sf ../linux-g++/qplatformdefs.h ${S}/mkspecs/$template/qplatformdefs.h
- done
-
- QMAKESPEC=
- PLATFORM=${HOST_OS}-oe-g++
- export PLATFORM
- export OE_QMAKE_CC="${CC}"
- export OE_QMAKE_CFLAGS="${CFLAGS}"
- export OE_QMAKE_CXX="${CXX}"
- export OE_QMAKE_CXXFLAGS="-fno-exceptions -fno-rtti ${CXXFLAGS}"
- export OE_QMAKE_LDFLAGS="${LDFLAGS}"
- export OE_QMAKE_LINK="${CCLD}"
- export OE_QMAKE_AR="${AR}"
- export OE_QMAKE_STRIP="${STRIP}"
- export OE_QMAKE_UIC="${STAGING_BINDIR_NATIVE}/uic4"
- export OE_QMAKE_MOC="${STAGING_BINDIR_NATIVE}/moc4"
- export QMAKE_MOC="${STAGING_BINDIR_NATIVE}/moc4"
- export OE_QMAKE_RCC="${STAGING_BINDIR_NATIVE}/rcc4"
- export QMAKE_RCC="${STAGING_BINDIR_NATIVE}/rcc4"
- export OE_QMAKE_QMAKE="${STAGING_BINDIR_NATIVE}/qmake"
- export OE_QMAKE_RPATH="-Wl,-rpath-link,"
- echo yes | ./configure -prefix ${STAGING_DIR_NATIVE}/qt4 ${EXTRA_OECONF} || die "Configuring qt failed"
-}
-
-do_compile() {
- :
-}
-
-do_stage() {
- install -d ${STAGING_BINDIR_NATIVE}
- install -m 0755 bin/qmake ${STAGING_BINDIR_NATIVE}/qmake2
- install -m 0755 bin/qmake ${STAGING_BINDIR_NATIVE}/qmake-qt4
- install -d ${STAGING_DATADIR_NATIVE}/qt4
- cp -PfR mkspecs ${STAGING_DATADIR_NATIVE}/qt4/
-}
diff --git a/recipes/qmake/qmake2-native_2.10a.bb b/recipes/qmake/qmake2-native_2.10a.bb
deleted file mode 100644
index 4579838b43..0000000000
--- a/recipes/qmake/qmake2-native_2.10a.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-QTVERSION="4.4.3"
-FILESDIR += "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qmake2-native"
-
-inherit native
-
-require ${PN}.inc
-
-do_install() {
- :
-}
-
-
diff --git a/recipes/qmake/qmake2-sdk_2.10a.bb b/recipes/qmake/qmake2-sdk_2.10a.bb
deleted file mode 100644
index 6ed9ebdebb..0000000000
--- a/recipes/qmake/qmake2-sdk_2.10a.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-QTVERSION="4.4.3"
-require qmake2-native.inc
-
-inherit sdk
-
-do_install () {
- install -d ${D}/${bindir}
- install -m 0755 bin/qmake ${D}/${bindir}/qmake2
- install -m 0755 bin/qmake ${D}/${bindir}/qmake-qt4
- install -d ${D}/${datadir}/qt4
- cp -PfR mkspecs ${D}/${datadir}/qt4/
-}
-
-
-
-
-
diff --git a/recipes/qmake/qmake2.inc b/recipes/qmake/qmake2.inc
new file mode 100644
index 0000000000..6924d1f5ec
--- /dev/null
+++ b/recipes/qmake/qmake2.inc
@@ -0,0 +1,69 @@
+DESCRIPTION = "TrollTech Makefile Generator"
+PRIORITY = "optional"
+HOMEPAGE = "http://www.trolltech.com"
+SECTION = "devel"
+LICENSE = "GPL"
+PR = "r8"
+
+# We call 'moc' during the build
+DEPENDS = "uicmoc4-native"
+
+QTVER = "qt-embedded-linux-opensource-src-${QTVERSION}"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/${QTVER}.tar.bz2 \
+ file://0001-fix-mkspecs.patch;patch=1 \
+ file://qt-config.patch;patch=1 \
+ file://use-lflags-last.patch;patch=1 \
+ file://linux-oe-qmake.conf"
+S = "${WORKDIR}/${QTVER}"
+
+inherit autotools
+
+CROSSHACK = "true"
+CROSSHACK_virtclass-native = ""
+CROSSHACK_virtclass-nativesdk = ""
+
+export CROSSHACK
+export QTDIR = "${S}"
+EXTRA_OEMAKE = "-e"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_configure() {
+
+ # Make sure we regenerate all Makefiles
+ find ${S} -name "Makefile" | xargs rm
+ # Install the OE build templates
+ for template in linux-oe-g++ linux-uclibc-oe-g++ linux-gnueabi-oe-g++ linux-uclibceabi-oe-g++
+ do
+ install -d ${S}/mkspecs/$template
+ install -m 0644 ${WORKDIR}/linux-oe-qmake.conf ${S}/mkspecs/$template/qmake.conf
+ ln -sf ../linux-g++/qplatformdefs.h ${S}/mkspecs/$template/qplatformdefs.h
+ done
+
+ QMAKESPEC=
+ PLATFORM=${HOST_OS}-oe-g++
+ export PLATFORM
+ export OE_QMAKE_CC="${CC}"
+ export OE_QMAKE_CFLAGS="${CFLAGS}"
+ export OE_QMAKE_CXX="${CXX}"
+ export OE_QMAKE_CXXFLAGS="-fno-exceptions -fno-rtti ${CXXFLAGS}"
+ export OE_QMAKE_LDFLAGS="${LDFLAGS}"
+ export OE_QMAKE_LINK="${CCLD}"
+ export OE_QMAKE_AR="${AR}"
+ export OE_QMAKE_STRIP="${STRIP}"
+ export OE_QMAKE_UIC="${STAGING_BINDIR_NATIVE}/uic4"
+ export OE_QMAKE_MOC="${STAGING_BINDIR_NATIVE}/moc4"
+ export QMAKE_MOC="${STAGING_BINDIR_NATIVE}/moc4"
+ export OE_QMAKE_RCC="${STAGING_BINDIR_NATIVE}/rcc4"
+ export QMAKE_RCC="${STAGING_BINDIR_NATIVE}/rcc4"
+ export OE_QMAKE_QMAKE="${STAGING_BINDIR_NATIVE}/qmake"
+ export OE_QMAKE_RPATH="-Wl,-rpath-link,"
+ echo yes | ./configure -prefix ${STAGING_DIR_NATIVE}/qt4 ${EXTRA_OECONF} || die "Configuring qt failed"
+}
+
+do_compile() {
+ :
+}
+
+FILES_${PN} += "${datadir}/qt4/"
diff --git a/recipes/qmake/qmake2-native/linux-oe-qmake.conf b/recipes/qmake/qmake2/linux-oe-qmake.conf
index f58481a693..f58481a693 100644
--- a/recipes/qmake/qmake2-native/linux-oe-qmake.conf
+++ b/recipes/qmake/qmake2/linux-oe-qmake.conf
diff --git a/recipes/qmake/qmake2_2.10a.bb b/recipes/qmake/qmake2_2.10a.bb
new file mode 100644
index 0000000000..abf4380b7c
--- /dev/null
+++ b/recipes/qmake/qmake2_2.10a.bb
@@ -0,0 +1,18 @@
+QTVERSION="4.4.3"
+FILESDIR += "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qmake2"
+
+BBCLASSEXTEND = "native sdk"
+
+require ${PN}.inc
+
+SRC_URI += "file://qmake-hack.diff;patch=1"
+
+do_install() {
+ install -d ${D}/${bindir}
+ install -m 0755 bin/qmake ${D}/${bindir}/qmake2
+ install -m 0755 bin/qmake ${D}/${bindir}/qmake-qt4
+ install -d ${D}/${datadir}/qt4
+ cp -PfR mkspecs ${D}/${datadir}/qt4/
+}
+
+
diff --git a/recipes/qt4/files/qt-config.patch b/recipes/qt4/files/qt-config.patch
index 3aa041aa51..a4a701ccd7 100644
--- a/recipes/qt4/files/qt-config.patch
+++ b/recipes/qt4/files/qt-config.patch
@@ -14,7 +14,7 @@
qtconfig = qmake_libraryInfoFile();
+ if (!QFile::exists(qtconfig)) {
+ QByteArray config = getenv("QT_CONF_PATH");
-+ qtconfig = config;
++ qtconfig = QFile::decodeName(config);
+ }
#else
if (!QFile::exists(qtconfig) && QCoreApplication::instance()) {
diff --git a/recipes/qt4/qt-4.6.1.inc b/recipes/qt4/qt-4.6.1.inc
deleted file mode 100644
index 274deea426..0000000000
--- a/recipes/qt4/qt-4.6.1.inc
+++ /dev/null
@@ -1,47 +0,0 @@
-DEFAULT_PREFERENCE = "-1"
-
-FILESPATHPKG .= ":qt-${PV}"
-
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-${PV}.tar.gz \
- file://0001-cross-compile.patch;patch=1 \
- file://0002-fix-resinit-declaration.patch;patch=1 \
- file://0004-no-qmake.patch;patch=1 \
- file://0006-freetype-host-includes.patch;patch=1 \
- file://0008-qt-lib-infix.patch;patch=1 \
- file://0009-support-2bpp.patch;patch=1 \
- file://0010-no-simpledecoration-example.patch;patch=1 \
- file://fix-config-tests.patch;patch=1 \
- file://g++.conf \
- file://linux.conf \
- "
-
-S = "${WORKDIR}/qt-everywhere-opensource-src-${PV}"
-
-do_configure_prepend() {
- sed -i s:SEDME:${S}: ${WORKDIR}/linux.conf
- sed -i \
- -e /QMAKE_MOC\ /d \
- -e /QMAKE_UIC\ /d \
- -e /QMAKE_UIC3\ /d \
- -e /QMAKE_RCC\ /d \
- ${S}/configure
-}
-
-QT_GLFLAGS ?= ""
-QT_CONFIG_FLAGS += "${QT_GLFLAGS}"
-
-do_compile() {
- unset CFLAGS CXXFLAGS
- oe_runmake ${EXTRA_ENV}
-}
-
-do_install_append() {
- install -d ${D}${bindir}
- for i in rcc uic moc ; do
- install -m 0755 ${S}/bin/$i ${D}${bindir}/
- done
-}
-
-LICENSE = "LGPLv2.1 GPLv3"
-SRC_URI += " \
- file://hack-out-pg_config.patch;patch=1"
diff --git a/recipes/qt4/qt-4.6.2.inc b/recipes/qt4/qt-4.6.2.inc
new file mode 100644
index 0000000000..94777e5d04
--- /dev/null
+++ b/recipes/qt4/qt-4.6.2.inc
@@ -0,0 +1,55 @@
+DEFAULT_PREFERENCE = "-1"
+
+FILESPATHPKG .= ":qt-${PV}"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-${PV}.tar.gz \
+ file://0001-cross-compile.patch;patch=1 \
+ file://0002-fix-resinit-declaration.patch;patch=1 \
+ file://0004-no-qmake.patch;patch=1 \
+ file://0006-freetype-host-includes.patch;patch=1 \
+ file://0008-qt-lib-infix.patch;patch=1 \
+ file://0009-support-2bpp.patch;patch=1 \
+ file://0010-no-simpledecoration-example.patch;patch=1 \
+ file://fix-config-tests.patch;patch=1 \
+ file://g++.conf \
+ file://linux.conf \
+ "
+
+S = "${WORKDIR}/qt-everywhere-opensource-src-${PV}"
+
+do_configure_prepend() {
+ for pro in $(find ${S} -name "*.pro") ; do
+ sed -i 's:$$QT_BUILD_TREE/bin/lrelease:${OE_QMAKE_LRELEASE}:g' $pro
+ done
+
+ sed -i s:SEDME:${S}: ${WORKDIR}/linux.conf
+ sed -i \
+ -e /QMAKE_MOC\ /d \
+ -e /QMAKE_UIC\ /d \
+ -e /QMAKE_UIC3\ /d \
+ -e /QMAKE_RCC\ /d \
+ ${S}/configure
+}
+
+do_configure_append() {
+ sed -e '/QMAKE_TARGET /d' -e '/TARGET /d' -i ${S}/translations/Makefile
+}
+
+QT_GLFLAGS ?= ""
+QT_CONFIG_FLAGS += " -no-rpath -qt3support -reduce-relocations -silent ${QT_GLFLAGS}"
+
+do_compile() {
+ unset CFLAGS CXXFLAGS
+ oe_runmake ${EXTRA_ENV}
+}
+
+do_install_append() {
+ install -d ${D}${bindir}
+ for i in rcc uic moc ; do
+ install -m 0755 ${S}/bin/$i ${D}${bindir}/
+ done
+}
+
+LICENSE = "LGPLv2.1 GPLv3"
+SRC_URI += " \
+ file://hack-out-pg_config.patch;patch=1"
diff --git a/recipes/qt4/qt4-embedded-4.6.1/0006-freetype-host-includes.patch b/recipes/qt4/qt4-embedded-4.6.2/0006-freetype-host-includes.patch
index 987c425138..987c425138 100644
--- a/recipes/qt4/qt4-embedded-4.6.1/0006-freetype-host-includes.patch
+++ b/recipes/qt4/qt4-embedded-4.6.2/0006-freetype-host-includes.patch
diff --git a/recipes/qt4/qt4-embedded-4.6.1/0008-qt-lib-infix.patch b/recipes/qt4/qt4-embedded-4.6.2/0008-qt-lib-infix.patch
index 61e60a0eb6..61e60a0eb6 100644
--- a/recipes/qt4/qt4-embedded-4.6.1/0008-qt-lib-infix.patch
+++ b/recipes/qt4/qt4-embedded-4.6.2/0008-qt-lib-infix.patch
diff --git a/recipes/qt4/qt4-embedded-4.6.1/0010-no-simpledecoration-example.patch b/recipes/qt4/qt4-embedded-4.6.2/0010-no-simpledecoration-example.patch
index fce5bba938..fce5bba938 100644
--- a/recipes/qt4/qt4-embedded-4.6.1/0010-no-simpledecoration-example.patch
+++ b/recipes/qt4/qt4-embedded-4.6.2/0010-no-simpledecoration-example.patch
diff --git a/recipes/qt4/qt4-embedded-4.6.1/linux.conf b/recipes/qt4/qt4-embedded-4.6.2/linux.conf
index 68ae80b929..68ae80b929 100644
--- a/recipes/qt4/qt4-embedded-4.6.1/linux.conf
+++ b/recipes/qt4/qt4-embedded-4.6.2/linux.conf
diff --git a/recipes/qt4/qt4-embedded-gles/linux.conf b/recipes/qt4/qt4-embedded-gles/linux.conf
index a530c75913..32f3275402 100644
--- a/recipes/qt4/qt4-embedded-gles/linux.conf
+++ b/recipes/qt4/qt4-embedded-gles/linux.conf
@@ -25,7 +25,6 @@ QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
QMAKE_LIBS_NIS = -lnsl
QMAKE_LIBS_EGL = -lEGL -lIMGegl -lsrv_um
QMAKE_LIBS_OPENGL_QT = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um
-QMAKE_LIBS_OPENVG = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um -lOpenVG -lOpenVGU
QMAKE_LIBS_OPENGL_ES2 = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um
QMAKE_LIBS_THREAD = -lpthread
diff --git a/recipes/qt4/qt4-embedded-gles_4.6.0.bb b/recipes/qt4/qt4-embedded-gles_4.6.0.bb
index 7aadafe6a0..915dd0734f 100644
--- a/recipes/qt4/qt4-embedded-gles_4.6.0.bb
+++ b/recipes/qt4/qt4-embedded-gles_4.6.0.bb
@@ -4,7 +4,7 @@ PR = "${INC_PR}.1"
PROVIDES += "qt4-embedded"
QT_GLFLAGS = "-opengl es2 -openvg"
-require qt-4.6.1.inc
+require qt-4.6.0.inc
FILESPATHPKG .= ":qt4-embedded-${PV}:qt4-embedded"
diff --git a/recipes/qt4/qt4-embedded-gles_4.6.1.bb b/recipes/qt4/qt4-embedded-gles_4.6.1.bb
deleted file mode 100644
index 915dd0734f..0000000000
--- a/recipes/qt4/qt4-embedded-gles_4.6.1.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-require qt4-embedded.inc
-PR = "${INC_PR}.1"
-
-PROVIDES += "qt4-embedded"
-QT_GLFLAGS = "-opengl es2 -openvg"
-
-require qt-4.6.0.inc
-
-
-FILESPATHPKG .= ":qt4-embedded-${PV}:qt4-embedded"
-
-DEPENDS += "virtual/egl"
-
-
diff --git a/recipes/qt4/qt4-embedded-gles_4.6.2.bb b/recipes/qt4/qt4-embedded-gles_4.6.2.bb
new file mode 100644
index 0000000000..e7ba671a22
--- /dev/null
+++ b/recipes/qt4/qt4-embedded-gles_4.6.2.bb
@@ -0,0 +1,14 @@
+require qt4-embedded.inc
+PR = "${INC_PR}.3"
+
+PROVIDES += "qt4-embedded"
+QT_GLFLAGS = "-opengl es2 -no-openvg -plugin-gfx-linuxfb -plugin-gfx-powervr"
+
+require qt-${PV}.inc
+
+
+FILESPATHPKG .= ":qt4-embedded-${PV}:qt4-embedded"
+
+DEPENDS += "virtual/egl"
+
+
diff --git a/recipes/qt4/qt4-embedded.inc b/recipes/qt4/qt4-embedded.inc
index e8184e772d..39a5e98ca5 100644
--- a/recipes/qt4/qt4-embedded.inc
+++ b/recipes/qt4/qt4-embedded.inc
@@ -4,7 +4,7 @@ LICENSE = "GPL QPL"
PRIORITY = "optional"
HOMEPAGE = "http://www.trolltech.com"
DEPENDS += "directfb tslib"
-INC_PR = "r15"
+INC_PR = "r17"
QT_BASE_NAME ?= "qt4-embedded"
QT_BASE_LIB ?= "libqt-embedded"
diff --git a/recipes/qt4/qt4-embedded_4.6.0.bb b/recipes/qt4/qt4-embedded_4.6.0.bb
index f2c8410c55..58fda71ad1 100644
--- a/recipes/qt4/qt4-embedded_4.6.0.bb
+++ b/recipes/qt4/qt4-embedded_4.6.0.bb
@@ -2,5 +2,5 @@ require qt4-embedded.inc
PR = "${INC_PR}.0"
-require qt-4.6.1.inc
+require qt-4.6.0.inc
diff --git a/recipes/qt4/qt4-embedded_4.6.1.bb b/recipes/qt4/qt4-embedded_4.6.1.bb
deleted file mode 100644
index f2c8410c55..0000000000
--- a/recipes/qt4/qt4-embedded_4.6.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require qt4-embedded.inc
-
-PR = "${INC_PR}.0"
-
-require qt-4.6.1.inc
-
diff --git a/recipes/qt4/qt4-embedded_4.6.2.bb b/recipes/qt4/qt4-embedded_4.6.2.bb
new file mode 100644
index 0000000000..8583752d6d
--- /dev/null
+++ b/recipes/qt4/qt4-embedded_4.6.2.bb
@@ -0,0 +1,8 @@
+require qt4-embedded.inc
+
+PR = "${INC_PR}.1"
+
+QT_CONFIG_FLAGS_append_armv6 = " -no-neon "
+
+require qt-${PV}.inc
+
diff --git a/recipes/qt4/qt4-tools-native.inc b/recipes/qt4/qt4-tools-native.inc
index 8f520926ce..bd0d2e138e 100644
--- a/recipes/qt4/qt4-tools-native.inc
+++ b/recipes/qt4/qt4-tools-native.inc
@@ -5,18 +5,19 @@ HOMEPAGE = "http://www.trolltech.com"
PRIORITY = "optional"
LICENSE = "GPL"
-INC_PR = "r5"
+INC_PR = "r6"
inherit native
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-${PV}.tar.bz2 \
- file://configure-lflags.patch;patch=1 \
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-${PV}.tar.gz \
file://qt-config.patch;patch=1 \
file://g++.conf \
file://linux.conf"
-S = "${WORKDIR}/qt-embedded-linux-opensource-src-${PV}"
+S = "${WORKDIR}/qt-everywhere-opensource-src-${PV}"
EXTRA_OECONF = "-prefix ${prefix} \
+ -L ${STAGING_LIBDIR_NATIVE} \
+ -I ${STAGING_INCDIR_NATIVE} \
-qt-libjpeg -qt-gif -system-zlib \
-no-libjpeg -no-libpng \
-no-accessibility \
@@ -24,7 +25,7 @@ EXTRA_OECONF = "-prefix ${prefix} \
-no-exceptions \
-no-nas-sound \
-no-nis \
- -verbose -release -fast -static \
+ -verbose -release -static \
-qt3support"
# yank default -e, otherwise we get the following error:
@@ -32,7 +33,7 @@ EXTRA_OECONF = "-prefix ${prefix} \
EXTRA_OEMAKE = " "
do_configure() {
- (echo o; echo yes) | LFLAGS="-L${STAGING_LIBDIR_NATIVE}" ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}"
+ (echo o; echo yes) | ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}"
}
TOBUILD = "\
@@ -72,4 +73,3 @@ do_stage() {
install -m 0644 tools/porting/src/q3porting.xml ${STAGING_DATADIR_NATIVE}/qt4/
}
-
diff --git a/recipes/qt4/qt4-tools-native_4.4.3.bb b/recipes/qt4/qt4-tools-native_4.4.3.bb
index a734b6b936..3ad402f0ed 100644
--- a/recipes/qt4/qt4-tools-native_4.4.3.bb
+++ b/recipes/qt4/qt4-tools-native_4.4.3.bb
@@ -1,2 +1,18 @@
require qt4-tools-native.inc
+
+# Older releases have different source archive name, than .inc
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-${PV}.tar.bz2 \
+ file://configure-lflags.patch;patch=1 \
+ file://qt-config.patch;patch=1 \
+ file://g++.conf \
+ file://linux.conf"
+
+S = "${WORKDIR}/qt-embedded-linux-opensource-src-${PV}"
+
+EXTRA_OECONF += " -fast"
+
+do_configure() {
+ (echo o; echo yes) | LFLAGS="-L${STAGING_LIBDIR_NATIVE}" ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}"
+}
+
PR = "${INC_PR}.1"
diff --git a/recipes/qt4/qt4-tools-native_4.5.2.bb b/recipes/qt4/qt4-tools-native_4.5.2.bb
index 8eed0034db..c083aa0197 100644
--- a/recipes/qt4/qt4-tools-native_4.5.2.bb
+++ b/recipes/qt4/qt4-tools-native_4.5.2.bb
@@ -1,5 +1,21 @@
require qt4-tools-native.inc
+
+# Older releases have different source archive name, than .inc
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-${PV}.tar.bz2 \
+ file://configure-lflags.patch;patch=1 \
+ file://qt-config.patch;patch=1 \
+ file://g++.conf \
+ file://linux.conf"
+
+S = "${WORKDIR}/qt-embedded-linux-opensource-src-${PV}"
+
+EXTRA_OECONF += " -fast -qt-freetype"
+
+do_configure() {
+ (echo o; echo yes) | LFLAGS="-L${STAGING_LIBDIR_NATIVE}" ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}"
+}
+
LICENSE = "LGPLv2.1 GPLv3"
-PR = "${INC_PR}.1"
+PR = "${INC_PR}.2"
TOBUILD := "src/tools/bootstrap ${TOBUILD}"
diff --git a/recipes/qt4/qt4-tools-native_4.6.0.bb b/recipes/qt4/qt4-tools-native_4.6.0.bb
index 48310b1233..44258b205c 100644
--- a/recipes/qt4/qt4-tools-native_4.6.0.bb
+++ b/recipes/qt4/qt4-tools-native_4.6.0.bb
@@ -4,12 +4,6 @@ require qt4-tools-native.inc
LICENSE = "LGPLv2.1 GPLv3"
PR = "${INC_PR}.0"
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-${PV}.tar.gz \
- file://configure-lflags.patch;patch=1 \
- file://qt-config.patch;patch=1 \
- file://g++.conf \
- file://linux.conf"
-
-S = "${WORKDIR}/qt-everywhere-opensource-src-${PV}"
+EXTRA_OECONF += " -fast"
TOBUILD := "src/tools/bootstrap ${TOBUILD}"
diff --git a/recipes/qt4/qt4-tools-native_4.6.1.bb b/recipes/qt4/qt4-tools-native_4.6.1.bb
deleted file mode 100644
index 48310b1233..0000000000
--- a/recipes/qt4/qt4-tools-native_4.6.1.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DEFAULT_PREFERENCE = "-1"
-
-require qt4-tools-native.inc
-LICENSE = "LGPLv2.1 GPLv3"
-PR = "${INC_PR}.0"
-
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-${PV}.tar.gz \
- file://configure-lflags.patch;patch=1 \
- file://qt-config.patch;patch=1 \
- file://g++.conf \
- file://linux.conf"
-
-S = "${WORKDIR}/qt-everywhere-opensource-src-${PV}"
-
-TOBUILD := "src/tools/bootstrap ${TOBUILD}"
diff --git a/recipes/qt4/qt4-tools-native_4.6.2.bb b/recipes/qt4/qt4-tools-native_4.6.2.bb
new file mode 100644
index 0000000000..894e497a9d
--- /dev/null
+++ b/recipes/qt4/qt4-tools-native_4.6.2.bb
@@ -0,0 +1,9 @@
+DEFAULT_PREFERENCE = "-1"
+
+require qt4-tools-native.inc
+LICENSE = "LGPLv2.1 GPLv3"
+PR = "${INC_PR}.0"
+
+EXTRA_OECONF += " -no-fast -silent -no-rpath"
+
+TOBUILD := "src/tools/bootstrap ${TOBUILD}"
diff --git a/recipes/qt4/qt4-tools-sdk_4.6.1.bb b/recipes/qt4/qt4-tools-sdk_4.6.2.bb
index b74b8a27e0..b74b8a27e0 100644
--- a/recipes/qt4/qt4-tools-sdk_4.6.1.bb
+++ b/recipes/qt4/qt4-tools-sdk_4.6.2.bb
diff --git a/recipes/qt4/qt4-x11-free-4.6.1/0008-qt-lib-infix.patch b/recipes/qt4/qt4-x11-free-4.6.2/0008-qt-lib-infix.patch
index 61e60a0eb6..61e60a0eb6 100644
--- a/recipes/qt4/qt4-x11-free-4.6.1/0008-qt-lib-infix.patch
+++ b/recipes/qt4/qt4-x11-free-4.6.2/0008-qt-lib-infix.patch
diff --git a/recipes/qt4/qt4-x11-free-4.6.1/0010-no-simpledecoration-example.patch b/recipes/qt4/qt4-x11-free-4.6.2/0010-no-simpledecoration-example.patch
index fce5bba938..fce5bba938 100644
--- a/recipes/qt4/qt4-x11-free-4.6.1/0010-no-simpledecoration-example.patch
+++ b/recipes/qt4/qt4-x11-free-4.6.2/0010-no-simpledecoration-example.patch
diff --git a/recipes/qt4/qt4-x11-free-4.6.1/linux.conf b/recipes/qt4/qt4-x11-free-4.6.2/linux.conf
index 68ae80b929..68ae80b929 100644
--- a/recipes/qt4/qt4-x11-free-4.6.1/linux.conf
+++ b/recipes/qt4/qt4-x11-free-4.6.2/linux.conf
diff --git a/recipes/qt4/qt4-x11-free-gles/linux.conf b/recipes/qt4/qt4-x11-free-gles/linux.conf
index b5741574b8..b825e5dc16 100644
--- a/recipes/qt4/qt4-x11-free-gles/linux.conf
+++ b/recipes/qt4/qt4-x11-free-gles/linux.conf
@@ -25,7 +25,6 @@ QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
QMAKE_LIBS_NIS = -lnsl
QMAKE_LIBS_EGL = -lEGL -lIMGegl -lsrv_um
QMAKE_LIBS_OPENGL_QT = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um
-QMAKE_LIBS_OPENVG = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um -lOpenVG -lOpenVGU
QMAKE_LIBS_OPENGL_ES2 = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um
QMAKE_LIBS_THREAD = -lpthread
diff --git a/recipes/qt4/qt4-x11-free-gles_4.6.0.bb b/recipes/qt4/qt4-x11-free-gles_4.6.0.bb
index c25f9050fe..8d09d89f8d 100644
--- a/recipes/qt4/qt4-x11-free-gles_4.6.0.bb
+++ b/recipes/qt4/qt4-x11-free-gles_4.6.0.bb
@@ -3,7 +3,7 @@ PR = "${INC_PR}.3"
QT_GLFLAGS = "-opengl es2 -openvg"
-require qt-4.6.1.inc
+require qt-4.6.0.inc
QT_CONFIG_FLAGS += " \
-no-embedded \
diff --git a/recipes/qt4/qt4-x11-free-gles_4.6.1.bb b/recipes/qt4/qt4-x11-free-gles_4.6.1.bb
deleted file mode 100644
index 8d09d89f8d..0000000000
--- a/recipes/qt4/qt4-x11-free-gles_4.6.1.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-require qt4-x11-free.inc
-PR = "${INC_PR}.3"
-
-QT_GLFLAGS = "-opengl es2 -openvg"
-
-require qt-4.6.0.inc
-
-QT_CONFIG_FLAGS += " \
- -no-embedded \
- -xrandr \
- -x11"
-
-FILESPATHPKG .= ":qt4-x11-free-${PV}:qt4-x11-free"
-
-DEPENDS += "virtual/egl"
-PROVIDES += "qt4-x11-free"
-
-
diff --git a/recipes/qt4/qt4-x11-free-gles_4.6.2.bb b/recipes/qt4/qt4-x11-free-gles_4.6.2.bb
new file mode 100644
index 0000000000..669cbf651e
--- /dev/null
+++ b/recipes/qt4/qt4-x11-free-gles_4.6.2.bb
@@ -0,0 +1,18 @@
+require qt4-x11-free.inc
+PR = "${INC_PR}.5"
+
+QT_GLFLAGS = "-opengl es2 -no-openvg"
+
+require qt-${PV}.inc
+
+QT_CONFIG_FLAGS += " \
+ -no-embedded \
+ -xrandr \
+ -x11"
+
+FILESPATHPKG .= ":qt4-x11-free-${PV}:qt4-x11-free"
+
+DEPENDS += "virtual/egl"
+PROVIDES += "qt4-x11-free"
+
+
diff --git a/recipes/qt4/qt4-x11-free.inc b/recipes/qt4/qt4-x11-free.inc
index dffe3a0d17..fd33a21787 100644
--- a/recipes/qt4/qt4-x11-free.inc
+++ b/recipes/qt4/qt4-x11-free.inc
@@ -5,7 +5,7 @@ HOMEPAGE = "http://www.trolltech.com"
LICENSE = "GPL QPL"
DEPENDS += "virtual/libx11 fontconfig xft libxext libxrender libxrandr libxcursor"
-INC_PR = "r14"
+INC_PR = "r16"
SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-${PV}.tar.gz \
file://0001-cross-compile.patch;patch=1 \
diff --git a/recipes/qt4/qt4-x11-free_4.6.0.bb b/recipes/qt4/qt4-x11-free_4.6.0.bb
index c2d8f669cf..685b7add57 100644
--- a/recipes/qt4/qt4-x11-free_4.6.0.bb
+++ b/recipes/qt4/qt4-x11-free_4.6.0.bb
@@ -1,7 +1,7 @@
require qt4-x11-free.inc
PR = "${INC_PR}.1"
-require qt-4.6.1.inc
+require qt-4.6.0.inc
QT_CONFIG_FLAGS += " \
-no-embedded \
diff --git a/recipes/qt4/qt4-x11-free_4.6.1.bb b/recipes/qt4/qt4-x11-free_4.6.1.bb
deleted file mode 100644
index 685b7add57..0000000000
--- a/recipes/qt4/qt4-x11-free_4.6.1.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require qt4-x11-free.inc
-PR = "${INC_PR}.1"
-
-require qt-4.6.0.inc
-
-QT_CONFIG_FLAGS += " \
- -no-embedded \
- -xrandr \
- -x11"
-
-
diff --git a/recipes/qt4/qt4-x11-free_4.6.2.bb b/recipes/qt4/qt4-x11-free_4.6.2.bb
new file mode 100644
index 0000000000..fe03daa971
--- /dev/null
+++ b/recipes/qt4/qt4-x11-free_4.6.2.bb
@@ -0,0 +1,13 @@
+require qt4-x11-free.inc
+PR = "${INC_PR}.2"
+
+QT_CONFIG_FLAGS_append_armv6 = " -no-neon "
+
+require qt-${PV}.inc
+
+QT_CONFIG_FLAGS += " \
+ -no-embedded \
+ -xrandr \
+ -x11"
+
+
diff --git a/recipes/qt4/qt4.inc b/recipes/qt4/qt4.inc
index 62fcec11a2..14b0a960df 100644
--- a/recipes/qt4/qt4.inc
+++ b/recipes/qt4/qt4.inc
@@ -96,7 +96,7 @@ RRECOMMENDS_${PN} = "${LIB_PACKAGES} ${OTHER_PACKAGES}"
RRECOMMENDS_${PN}-dev = "${DEV_PACKAGES}"
RRECOMMENDS_${PN}-dbg = "${DBG_PACKAGES}"
-FILES_${QT_BASE_NAME}-tools = "${bindir}/uic* ${bindir}/moc ${bindir}/rcc ${bindir}/qttracereplay"
+FILES_${QT_BASE_NAME}-tools = "${bindir}/uic* ${bindir}/moc ${bindir}/rcc ${bindir}/qttracereplay ${bindir}/qdoc*"
FILES_${QT_BASE_NAME}-assistant = "${bindir}/*assistant* ${bindir}/qcollectiongenerator ${bindir}/qhelpconverter ${bindir}/qhelpgenerator"
FILES_${QT_BASE_NAME}-assistant-dbg = "${bindir}/.debug/*assistant* ${bindir}/.debug/qcollectiongenerator ${bindir}/.debug/qhelpconverter ${bindir}/.debug/qhelpgenerator"
FILES_${QT_BASE_NAME}-common = "${bindir}/qtconfig"
@@ -164,9 +164,9 @@ do_configure() {
-demosdir ${bindir}/${QT_DIR_NAME}/demos \
-platform ${TARGET_OS}-oe-g++ \
-xplatform ${TARGET_OS}-oe-g++ \
- -embedded ${QT_ARCH} ${QT_ENDIAN} -fast \
+ -embedded ${QT_ARCH} ${QT_ENDIAN} \
-crossarch ${QT_ARCH} \
- ${QT_CONFIG_FLAGS} -fast \
+ ${QT_CONFIG_FLAGS} -no-fast \
-L${STAGING_LIBDIR} -I${STAGING_INCDIR} \
-I${STAGING_INCDIR}/freetype2 \
-I${STAGING_INCDIR}/mysql \
@@ -243,9 +243,13 @@ do_install() {
# fix pkgconfig, libtool and prl files
sed -i -e s#-L${S}/lib##g \
-e s#-L${STAGING_LIBDIR}##g \
+ -e 's#STAGING_LIBDIR}#libdir}'#g \
-e s#-L${libdir}##g \
-e s#'$(OE_QMAKE_LIBS_X11)'#"${OE_QMAKE_LIBS_X11}"#g \
- -e s#"-Wl,-rpath-link,${S}/lib"##g \
+ -e s#" -Wl,-rpath-link,${S}/lib"##g \
+ -e s#" -Wl,-rpath-link,${libdir}"##g \
+ -e 's#I/usr/include#Iincludedir}#g' \
+ -e 's#Iin#I${in#g' \
${D}${libdir}/*.la ${D}${libdir}/*.prl ${D}${libdir}/pkgconfig/*.pc
# fix pkgconfig files
@@ -256,6 +260,13 @@ do_install() {
sed -i -e /Requires/s#"${name}"#"${name}${QT_LIBINFIX}"#g ${D}${libdir}/pkgconfig/*.pc
done
+ # QT abuses $includedir to point to its headers, which breaks pkgconfig sysroot, so manually fix it up here:
+ for pc in ${D}${libdir}/pkgconfig/*.pc ; do
+ sed -i -e "s:prefix}include/${QT_BASE_NAME}/$(basename $pc .pc):includedir}:" \
+ -e "s,Cflags: ,Cflags: -IP{includedir}/${QT_BASE_NAME}/$(basename $pc .pc) ," \
+ -e 's:IP{:I${:g' $pc
+ done
+
install -d ${D}/${libdir}/fonts
touch ${D}/${libdir}/fonts/fontdir
}
diff --git a/recipes/quilt/quilt-native.inc b/recipes/quilt/quilt-native.inc
index f815969344..cad1b745f3 100644
--- a/recipes/quilt/quilt-native.inc
+++ b/recipes/quilt/quilt-native.inc
@@ -9,7 +9,7 @@ INHIBIT_AUTOTOOLS_DEPS = "1"
inherit autotools native
PATCHTOOL = "patch"
-EXTRA_OECONF = "--disable-nls"
+EXTRA_OECONF = "--disable-nls --without-date"
do_configure () {
oe_runconf
diff --git a/recipes/readline/readline-5.2/fix-includes.patch b/recipes/readline/readline-5.2/fix-includes.patch
new file mode 100644
index 0000000000..8ec398d9fe
--- /dev/null
+++ b/recipes/readline/readline-5.2/fix-includes.patch
@@ -0,0 +1,13 @@
+Index: readline-5.2/rltypedefs.h
+===================================================================
+--- readline-5.2.orig/rltypedefs.h
++++ readline-5.2/rltypedefs.h
+@@ -23,6 +23,8 @@
+ #ifndef _RL_TYPEDEFS_H_
+ #define _RL_TYPEDEFS_H_
+
++#include <stdio.h>
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
diff --git a/recipes/readline/readline_5.2.bb b/recipes/readline/readline_5.2.bb
index a7dc818790..b7071167bc 100644
--- a/recipes/readline/readline_5.2.bb
+++ b/recipes/readline/readline_5.2.bb
@@ -8,12 +8,14 @@ LICENSE = "GPLv2"
DEPENDS += "ncurses"
RPROVIDES_${PN} += "readline"
LEAD_SONAME = "libreadline.so"
-PR = "r4"
-
-SRC_URI = "ftp://ftp.gnu.org/gnu/readline/readline-${PV}.tar.gz \
- file://configure_fix.patch;patch=1 \
- file://acinclude.m4"
+PR = "r5"
+SRC_URI = "\
+ ftp://ftp.gnu.org/gnu/readline/readline-${PV}.tar.gz \
+ file://fix-includes.patch;patch=1 \
+ file://configure_fix.patch;patch=1 \
+ file://acinclude.m4 \
+"
S = "${WORKDIR}/readline-${PV}"
inherit autotools
diff --git a/recipes/remoko/remoko-server_svn.bb b/recipes/remoko/remoko-server_svn.bb
index 1e17a9ec40..13ee0824ae 100644
--- a/recipes/remoko/remoko-server_svn.bb
+++ b/recipes/remoko/remoko-server_svn.bb
@@ -3,6 +3,7 @@ HOMEPAGE = "http://code.google.com/p/remoko/"
AUTHOR = "Valério Valério"
LICENSE = "GPL"
SECTION = "console/network"
+SRCREV = "121"
PV = "0.2.1+svnr${SRCPV}"
PE = "1"
diff --git a/recipes/remoko/remoko_svn.bb b/recipes/remoko/remoko_svn.bb
index 8d209daf14..8a70a9bd41 100644
--- a/recipes/remoko/remoko_svn.bb
+++ b/recipes/remoko/remoko_svn.bb
@@ -4,6 +4,7 @@ AUTHOR = "Valério Valério"
LICENSE = "GPL"
SECTION = "console/network"
DEPENDS = "edje-native"
+SRCREV = "121"
PV = "0.3.2+svnr${SRCPV}"
PE = "1"
diff --git a/recipes/samba/samba-ads-3.3.0/wbstatic.patch b/recipes/samba/samba-ads-3.3.0/wbstatic.patch
deleted file mode 100644
index 1d2260cb55..0000000000
--- a/recipes/samba/samba-ads-3.3.0/wbstatic.patch
+++ /dev/null
@@ -1,194 +0,0 @@
-diff -urN source.old//Makefile.in source//Makefile.in
---- source.old//Makefile.in 2009-01-26 13:56:34.000000000 +0000
-+++ source//Makefile.in 2009-02-13 22:53:43.197061293 +0000
-@@ -690,7 +690,7 @@
- $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
- $(LIBADS_OBJ) $(KRBCLIENT_OBJ) $(LIBADS_SERVER_OBJ) \
- $(REG_FULL_OBJ) $(POPT_LIB_OBJ) $(BUILDOPT_OBJ) \
-- $(SMBLDAP_OBJ) $(LDB_OBJ) $(LIBNET_OBJ) @LIBWBCLIENT_STATIC@ \
-+ $(SMBLDAP_OBJ) $(LDB_OBJ) $(LIBNET_OBJ) bin/libwbclient.a \
- $(LIBSMBCONF_OBJ) \
- $(PRIVILEGES_BASIC_OBJ)
-
-@@ -725,7 +725,7 @@
- web/swat.o web/neg_lang.o
-
- SWAT_OBJ = $(SWAT_OBJ1) $(PARAM_OBJ) $(PRINTING_OBJ) $(PRINTBASE_OBJ) $(LIBSMB_OBJ) \
-- $(LOCKING_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(KRBCLIENT_OBJ) \
-+ $(LOCKING_OBJ) $(PASSDB_OBJ) bin/libwbclient.a $(KRBCLIENT_OBJ) \
- $(LIB_NONSMBD_OBJ) $(GROUPDB_OBJ) $(PLAINTEXT_AUTH_OBJ) \
- $(POPT_LIB_OBJ) $(SMBLDAP_OBJ) $(RPC_PARSE_OBJ) $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) \
- $(PASSCHANGE_OBJ) $(LDB_OBJ)
-@@ -745,7 +745,7 @@
- $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) \
- rpc_client/cli_pipe.o librpc/rpc/binding.o $(RPC_PARSE_OBJ2) \
- $(RPC_CLIENT_OBJ1) \
-- $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(LDB_OBJ) $(GROUPDB_OBJ) \
-+ $(PASSDB_OBJ) bin/libwbclient.a $(SMBLDAP_OBJ) $(LDB_OBJ) $(GROUPDB_OBJ) \
- $(LIBMSRPC_GEN_OBJ)
-
- TESTPARM_OBJ = utils/testparm.o \
-@@ -755,18 +755,18 @@
- PASSWD_UTIL_OBJ = utils/passwd_util.o
-
- SMBPASSWD_OBJ = utils/smbpasswd.o $(PASSWD_UTIL_OBJ) $(PASSCHANGE_OBJ) \
-- $(PARAM_OBJ) $(LIBSMB_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ \
-+ $(PARAM_OBJ) $(LIBSMB_OBJ) $(PASSDB_OBJ) bin/libwbclient.a \
- $(GROUPDB_OBJ) $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) \
- $(POPT_LIB_OBJ) $(SMBLDAP_OBJ) $(RPC_PARSE_OBJ) \
- $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) $(LDB_OBJ)
-
--PDBEDIT_OBJ = utils/pdbedit.o $(PASSWD_UTIL_OBJ) $(PARAM_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ \
-+PDBEDIT_OBJ = utils/pdbedit.o $(PASSWD_UTIL_OBJ) $(PARAM_OBJ) $(PASSDB_OBJ) bin/libwbclient.a \
- $(LIBSAMBA_OBJ) \
- $(LIB_NONSMBD_OBJ) $(GROUPDB_OBJ) \
- $(POPT_LIB_OBJ) $(SMBLDAP_OBJ) libsmb/asn1.o \
- $(LDB_OBJ)
-
--SMBGET_OBJ = utils/smbget.o $(POPT_LIB_OBJ) $(LIBSMBCLIENT_OBJ1) @LIBWBCLIENT_STATIC@
-+SMBGET_OBJ = utils/smbget.o $(POPT_LIB_OBJ) $(LIBSMBCLIENT_OBJ1) bin/libwbclient.a
-
- DISPLAY_SEC_OBJ= lib/display_sec.o
-
-@@ -782,7 +782,7 @@
-
- RPCCLIENT_OBJ = $(RPCCLIENT_OBJ1) \
- $(PARAM_OBJ) $(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) \
-- $(RPC_PARSE_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) \
-+ $(RPC_PARSE_OBJ) $(PASSDB_OBJ) bin/libwbclient.a $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) \
- $(READLINE_OBJ) $(GROUPDB_OBJ) $(KRBCLIENT_OBJ) \
- $(LIBADS_OBJ) $(POPT_LIB_OBJ) \
- $(SMBLDAP_OBJ) $(DCUTIL_OBJ) $(LDB_OBJ)
-@@ -810,7 +810,7 @@
- $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \
- $(PASSDB_OBJ) $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ)
-
--LIBSMBCLIENT_OBJ = $(LIBSMBCLIENT_OBJ1) @LIBWBCLIENT_STATIC@
-+LIBSMBCLIENT_OBJ = $(LIBSMBCLIENT_OBJ1) bin/libwbclient.a
-
- # This shared library is intended for linking with unit test programs
- # to test Samba internals. It's called libbigballofmud.so to
-@@ -819,7 +819,7 @@
- LIBBIGBALLOFMUD_MAJOR = 0
-
- LIBBIGBALLOFMUD_OBJ = $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
-- $(LIBSMB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ \
-+ $(LIBSMB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) $(PASSDB_OBJ) bin/libwbclient.a \
- $(GROUPDB_OBJ) $(KRBCLIENT_OBJ) $(SMBLDAP_OBJ) $(LDB_OBJ)
-
- CLIENT_OBJ1 = client/client.o client/clitar.o rpc_client/cli_pipe.o \
-@@ -831,7 +831,7 @@
- CLIENT_OBJ = $(CLIENT_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) \
- $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) $(LIBMSRPC_GEN_OBJ) \
- $(READLINE_OBJ) $(POPT_LIB_OBJ) \
-- $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
-+ $(PASSDB_OBJ) bin/libwbclient.a $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
- $(DISPLAY_SEC_OBJ)
-
- LIBSMBCONF_OBJ = lib/smbconf/smbconf.o lib/smbconf/smbconf_util.o \
-@@ -886,7 +886,7 @@
- $(LDB_OBJ) $(LIBGPO_OBJ) @BUILD_INIPARSER@ $(DISPLAY_SEC_OBJ) \
- $(REG_SMBCONF_OBJ) @LIBNETAPI_STATIC@ $(LIBNET_OBJ) \
- $(LIBSMBCONF_OBJ) \
-- @LIBWBCLIENT_STATIC@ \
-+ bin/libwbclient.a \
- $(PRIVILEGES_BASIC_OBJ)
-
- CUPS_OBJ = client/smbspool.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
-@@ -926,7 +926,7 @@
- $(LIBNDR_GEN_OBJ0)
-
- PDBTEST_OBJ = torture/pdbtest.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
-- $(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(GROUPDB_OBJ) \
-+ $(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) bin/libwbclient.a $(GROUPDB_OBJ) \
- $(SMBLDAP_OBJ) $(POPT_LIB_OBJ) $(LDB_OBJ) \
- $(LIBNDR_GEN_OBJ0)
-
-@@ -942,14 +942,14 @@
-
- SMBCACLS_OBJ = utils/smbcacls.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
- $(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) $(RPC_PARSE_OBJ) \
-- $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(GROUPDB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
-+ $(PASSDB_OBJ) bin/libwbclient.a $(GROUPDB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
- $(POPT_LIB_OBJ) $(DCUTIL_OBJ) $(LIBADS_OBJ) $(SMBLDAP_OBJ) $(LDB_OBJ)
-
- SMBCQUOTAS_OBJ = utils/smbcquotas.o $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
- $(PARAM_OBJ) \
- $(LIB_NONSMBD_OBJ) $(RPC_PARSE_OBJ) \
- $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(POPT_LIB_OBJ) \
-- $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ)
-+ $(PASSDB_OBJ) bin/libwbclient.a $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ)
-
- EVTLOGADM_OBJ0 = utils/eventlogadm.o
-
-@@ -988,7 +988,7 @@
-
- PAM_SMBPASS_OBJ_0 = pam_smbpass/pam_smb_auth.o pam_smbpass/pam_smb_passwd.o \
- pam_smbpass/pam_smb_acct.o pam_smbpass/support.o
--PAM_SMBPASS_OBJ = $(PAM_SMBPASS_OBJ_0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(GROUPDB_OBJ) \
-+PAM_SMBPASS_OBJ = $(PAM_SMBPASS_OBJ_0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) bin/libwbclient.a $(GROUPDB_OBJ) \
- $(SMBLDAP_OBJ) $(LIBSAMBA_OBJ) \
- $(LDB_OBJ)
-
-@@ -1036,7 +1036,7 @@
- smbd/connection.o
-
- WINBINDD_OBJ = \
-- $(WINBINDD_OBJ1) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(GROUPDB_OBJ) \
-+ $(WINBINDD_OBJ1) $(PASSDB_OBJ) bin/libwbclient.a $(GROUPDB_OBJ) \
- $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
- $(LIBSMB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \
- $(PROFILE_OBJ) $(SLCACHE_OBJ) $(SMBLDAP_OBJ) \
-@@ -1047,7 +1047,7 @@
-
- WBINFO_OBJ = nsswitch/wbinfo.o $(LIBSAMBA_OBJ) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
- $(POPT_LIB_OBJ) $(AFS_SETTOKEN_OBJ) \
-- lib/winbind_util.o $(WBCOMMON_OBJ) @LIBWBCLIENT_STATIC@
-+ lib/winbind_util.o $(WBCOMMON_OBJ) bin/libwbclient.a
-
- WINBIND_NSS_OBJ = $(WBCOMMON_OBJ) $(LIBREPLACE_OBJ) @WINBIND_NSS_EXTRA_OBJS@
-
-@@ -1111,7 +1111,7 @@
- $(SERVER_MUTEX_OBJ) $(LIBADS_SERVER_OBJ) \
- $(PASSDB_OBJ) $(GROUPDB_OBJ) \
- $(SMBLDAP_OBJ) $(LIBNMB_OBJ) \
-- $(LDB_OBJ) $(WBCOMMON_OBJ) @LIBWBCLIENT_STATIC@ \
-+ $(LDB_OBJ) $(WBCOMMON_OBJ) bin/libwbclient.a \
- $(LIBNDR_GEN_OBJ0) $(LIBNDR_GEN_OBJ1)
-
-
-@@ -1120,14 +1120,14 @@
- VLP_OBJ = $(VLP_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) \
- $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) $(LIBMSRPC_GEN_OBJ) \
- $(READLINE_OBJ) $(POPT_LIB_OBJ) \
-- $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
-+ $(PASSDB_OBJ) bin/libwbclient.a $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
- $(DISPLAY_SEC_OBJ)
-
- RPC_OPEN_TCP_OBJ = torture/rpc_open_tcp.o \
- $(LIBSMB_OBJ) \
- $(PARAM_OBJ) \
- $(PASSDB_OBJ) \
-- @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(LDB_OBJ) $(GROUPDB_OBJ) \
-+ bin/libwbclient.a $(SMBLDAP_OBJ) $(LDB_OBJ) $(GROUPDB_OBJ) \
- $(LIB_NONSMBD_OBJ) \
- $(KRBCLIENT_OBJ) \
- $(RPC_PARSE_OBJ2) \
-@@ -1743,7 +1743,7 @@
- LIBWBCLIENT_SOVER=@LIBWBCLIENT_SOVER@
- LIBWBCLIENT_SHARED_TARGET_SONAME=$(LIBWBCLIENT_SHARED_TARGET).$(LIBWBCLIENT_SOVER)
- LIBWBCLIENT_STATIC_TARGET=@LIBWBCLIENT_STATIC_TARGET@
--LIBWBCLIENT=@LIBWBCLIENT_STATIC@ @LIBWBCLIENT_SHARED@
-+LIBWBCLIENT=bin/libwbclient.a @LIBWBCLIENT_SHARED@
- LIBWBCLIENT_SYMS=$(srcdir)/exports/libwbclient.@SYMSEXT@
- LIBWBCLIENT_HEADERS=$(srcdir)/nsswitch/libwbclient/wbclient.h
-
-@@ -1880,7 +1880,7 @@
- $(PARAM_WITHOUT_REG_OBJ) $(LIB_NONSMBD_OBJ) \
- $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
- $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \
-- $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
-+ $(PASSDB_OBJ) bin/libwbclient.a $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
- $(DCUTIL_OBJ) $(LIBADS_OBJ) $(PRIVILEGES_BASIC_OBJ) \
- auth/token_util.o
-
diff --git a/recipes/samba/samba-ads_3.2.15.bb b/recipes/samba/samba-ads_3.2.15.bb
new file mode 100644
index 0000000000..dc64754665
--- /dev/null
+++ b/recipes/samba/samba-ads_3.2.15.bb
@@ -0,0 +1,13 @@
+require samba.inc
+require samba-ads.inc
+LICENSE = "GPLv3"
+
+PR = "r2"
+SRC_URI += "file://config-lfs.patch;patch=1 \
+ file://quota.patch;patch=1;pnum=0 \
+ file://configure-3.2.8.patch;patch=1 \
+ file://config-h.patch;patch=1 \
+ file://mtab.patch;patch=1 \
+ "
+SRC_URI[src.md5sum] = "5a3bcc4927c9643b9f42970d0815b18f"
+SRC_URI[src.sha256sum] = "84281fd1faeffee8558e49dff865dd382abbf78bc1be00f8cb5aa70aeea67d46"
diff --git a/recipes/samba/samba-ads_3.2.8.bb b/recipes/samba/samba-ads_3.2.8.bb
deleted file mode 100644
index e643292dd4..0000000000
--- a/recipes/samba/samba-ads_3.2.8.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require samba.inc
-require samba-ads.inc
-LICENSE = "GPLv3"
-
-PR = "r2"
-SRC_URI += "file://config-lfs.patch;patch=1 \
- file://quota.patch;patch=1;pnum=0 \
- file://configure-3.2.8.patch;patch=1 \
- file://config-h.patch;patch=1 \
- file://mtab.patch;patch=1 \
- "
diff --git a/recipes/samba/samba-ads_3.3.0.bb b/recipes/samba/samba-ads_3.3.0.bb
deleted file mode 100644
index e5184cfecd..0000000000
--- a/recipes/samba/samba-ads_3.3.0.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require samba.inc
-require samba-ads.inc
-LICENSE = "GPLv3"
-
-PR = "r3"
-SRC_URI += "file://config-lfs.patch;patch=1 \
- file://quota.patch;patch=1;pnum=0 \
- file://configure-3.3.0.patch;patch=1 \
- file://config-h.patch;patch=1 \
- file://mtab.patch;patch=1 \
- file://wbstatic.patch;patch=1 \
- "
-
-do_compile () {
- base_do_compile
-}
diff --git a/recipes/samba/samba-ads_3.3.9.bb b/recipes/samba/samba-ads_3.3.9.bb
new file mode 100644
index 0000000000..4b2e36586b
--- /dev/null
+++ b/recipes/samba/samba-ads_3.3.9.bb
@@ -0,0 +1,15 @@
+require samba.inc
+require samba-ads.inc
+LICENSE = "GPLv3"
+
+PR = "r3"
+SRC_URI += "file://config-lfs.patch;patch=1 \
+ file://quota.patch;patch=1;pnum=0 \
+ file://configure-3.3.0.patch;patch=1 \
+ file://config-h.patch;patch=1 \
+ file://mtab.patch;patch=1 \
+ "
+
+do_compile () {
+ base_do_compile
+}
diff --git a/recipes/samba/samba.inc b/recipes/samba/samba.inc
index ec21ed70b0..d8df8f176c 100644
--- a/recipes/samba/samba.inc
+++ b/recipes/samba/samba.inc
@@ -2,7 +2,7 @@ SECTION = "console/network"
LICENSE = "GPL"
DEPENDS = "readline virtual/libiconv"
-SRC_URI = "http://samba.org/samba/ftp/stable/samba-${PV}.tar.gz \
+SRC_URI = "http://samba.org/samba/ftp/stable/samba-${PV}.tar.gz;name=src \
file://volatiles.03_samba \
file://smb.conf \
file://init \
diff --git a/recipes/samba/samba_3.2.15.bb b/recipes/samba/samba_3.2.15.bb
new file mode 100644
index 0000000000..6a14f96078
--- /dev/null
+++ b/recipes/samba/samba_3.2.15.bb
@@ -0,0 +1,27 @@
+require samba.inc
+require samba-basic.inc
+LICENSE = "GPLv3"
+
+SRC_URI += "file://configure-3.2.8.patch;patch=1 \
+ file://config-h.patch;patch=1 \
+ file://mtab.patch;patch=1 \
+ "
+SRC_URI[src.md5sum] = "5a3bcc4927c9643b9f42970d0815b18f"
+SRC_URI[src.sha256sum] = "84281fd1faeffee8558e49dff865dd382abbf78bc1be00f8cb5aa70aeea67d46"
+
+PR = "r1"
+
+EXTRA_OECONF += "\
+ SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes \
+ samba_cv_CC_NEGATIVE_ENUM_VALUES=yes \
+ linux_getgrouplist_ok=no \
+ samba_cv_HAVE_BROKEN_GETGROUPS=no \
+ samba_cv_HAVE_FTRUNCATE_EXTEND=yes \
+ samba_cv_have_setresuid=yes \
+ samba_cv_have_setresgid=yes \
+ samba_cv_HAVE_WRFILE_KEYTAB=yes \
+ "
+
+do_configure() {
+ oe_runconf
+}
diff --git a/recipes/samba/samba_3.2.8.bb b/recipes/samba/samba_3.2.8.bb
deleted file mode 100644
index 16dcd3160a..0000000000
--- a/recipes/samba/samba_3.2.8.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-require samba.inc
-require samba-basic.inc
-LICENSE = "GPLv3"
-
-SRC_URI += "file://configure-3.2.8.patch;patch=1 \
- file://config-h.patch;patch=1 \
- file://mtab.patch;patch=1 \
- "
-
-PR = "r1"
-
-EXTRA_OECONF += "\
- SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes \
- samba_cv_CC_NEGATIVE_ENUM_VALUES=yes \
- linux_getgrouplist_ok=no \
- samba_cv_HAVE_BROKEN_GETGROUPS=no \
- samba_cv_HAVE_FTRUNCATE_EXTEND=yes \
- samba_cv_have_setresuid=yes \
- samba_cv_have_setresgid=yes \
- samba_cv_HAVE_WRFILE_KEYTAB=yes \
- "
-
-do_configure() {
- oe_runconf
-}
diff --git a/recipes/samsung-soc-utils/s3c24xx-gpio_svn.bb b/recipes/samsung-soc-utils/s3c24xx-gpio_svn.bb
index 10ebf6b431..b813f76b16 100644
--- a/recipes/samsung-soc-utils/s3c24xx-gpio_svn.bb
+++ b/recipes/samsung-soc-utils/s3c24xx-gpio_svn.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "A user-space tool to show and modify the state of GPIOs on the S3
SECTION = "console/utils"
AUTHOR = "Werner Almesberger <werner@openmoko.org>"
LICENSE = "GPL"
+SRCREV = "4949"
PV = "1.0+svnr${SRCPV}"
PR = "r2"
diff --git a/recipes/samsung-soc-utils/s3c64xx-gpio_svn.bb b/recipes/samsung-soc-utils/s3c64xx-gpio_svn.bb
index 473626fcdc..f8ca7947f3 100644
--- a/recipes/samsung-soc-utils/s3c64xx-gpio_svn.bb
+++ b/recipes/samsung-soc-utils/s3c64xx-gpio_svn.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "A user-space tool to show and modify the state of GPIOs on the S3
SECTION = "console/utils"
AUTHOR = "Werner Almesberger <werner@openmoko.org>"
LICENSE = "GPL"
+SRCREV = "4949"
PV = "1.0+svnr${SRCPV}"
PR = "r0"
diff --git a/recipes/samsung-soc-utils/sjf2410-linux-native_svn.bb b/recipes/samsung-soc-utils/sjf2410-linux-native_svn.bb
index f6584109c6..2554ef2833 100644
--- a/recipes/samsung-soc-utils/sjf2410-linux-native_svn.bb
+++ b/recipes/samsung-soc-utils/sjf2410-linux-native_svn.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "JTAG utility to interface w/ a S3C2410 device"
SECTION = "devel"
AUTHOR = "Harald Welte <laforge@openmoko.org>"
LICENSE = "GPL"
+SRCREV = "4268"
PV = "0.1+svnr${SRCPV}"
PR = "r0"
diff --git a/recipes/schroedinger/files/Makefile.patch b/recipes/schroedinger/files/Makefile.patch
new file mode 100644
index 0000000000..d749c884e1
--- /dev/null
+++ b/recipes/schroedinger/files/Makefile.patch
@@ -0,0 +1,15 @@
+Index: schroedinger-1.0.5/schroedinger/Makefile.am
+===================================================================
+--- schroedinger-1.0.5.orig/schroedinger/Makefile.am
++++ schroedinger-1.0.5/schroedinger/Makefile.am
+@@ -53,9 +53,7 @@ pkginclude_HEADERS = \
+ schroutils.h \
+ schrovideoformat.h \
+ schrovirtframe.h \
+- schrowavelet.h \
+- schrobitstream.h \
+- schromotion.h
++ schrowavelet.h
+
+ noinst_HEADERS = \
+ schrooil.h \
diff --git a/recipes/schroedinger/files/configure.ac.patch b/recipes/schroedinger/files/configure.ac.patch
new file mode 100644
index 0000000000..ac5e7eebec
--- /dev/null
+++ b/recipes/schroedinger/files/configure.ac.patch
@@ -0,0 +1,13 @@
+Index: schroedinger-1.0.9/configure.ac
+===================================================================
+--- schroedinger-1.0.9.orig/configure.ac
++++ schroedinger-1.0.9/configure.ac
+@@ -54,7 +54,7 @@ if test "x${HAVE_ORC}" != xyes ; then
+ AC_ERROR([orc-0.4 >= $ORC_VER is required])
+ fi
+ SCHRO_PKG_DEPS="$SCHRO_PKG_DEPS orc-0.4 >= $ORC_VER"
+-ORCC=`$PKG_CONFIG --variable=orcc orc-0.4`
++ORCC=$STAGING_DIR`$PKG_CONFIG --variable=orcc orc-0.4`
+ AC_SUBST(ORCC)
+
+ AC_ARG_WITH([thread],
diff --git a/recipes/schroedinger/gst-plugin-schroedinger_1.0.5.bb b/recipes/schroedinger/gst-plugin-schroedinger_1.0.5.bb
deleted file mode 100644
index 64660bb7f2..0000000000
--- a/recipes/schroedinger/gst-plugin-schroedinger_1.0.5.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-require schroedinger.inc
-PR = "r2"
-
-DEPENDS += "gstreamer gst-plugins-base"
-
-SRC_URI = "http://www.diracvideo.org/download/schroedinger/schroedinger-${PV}.tar.gz"
-
-S = "${WORKDIR}/schroedinger-${PV}"
-
-PACKAGES = "gst-plugin-schroedinger gst-plugin-schroedinger-dev gst-plugin-schroedinger-dbg"
-FILES_gst-plugin-schroedinger += "${libdir}/gstreamer-0.10/libgstschro.so"
-FILES_gst-plugin-schroedinger-dev += "${libdir}/gstreamer-0.10/libgstschro.*"
-FILES_gst-plugin-schroedinger-dbg += "${libdir}/gstreamer-0.10/.debug/libgstschro.so"
-
diff --git a/recipes/schroedinger/gst-plugin-schroedinger_1.0.9.bb b/recipes/schroedinger/gst-plugin-schroedinger_1.0.9.bb
new file mode 100644
index 0000000000..0a95646a61
--- /dev/null
+++ b/recipes/schroedinger/gst-plugin-schroedinger_1.0.9.bb
@@ -0,0 +1,15 @@
+require schroedinger.inc
+PR = "r0"
+
+DEPENDS += "gstreamer gst-plugins-base"
+
+SRC_URI[schroedingertargz.md5sum] = "d67ec48b7c506db8c8b49156bf409e60"
+SRC_URI[schroedingertargz.sha256sum] = "345abcaa72ff0f2e9c1075e22f7141475ee4e6eea23a7f568b69ffc13cc1c723"
+
+S = "${WORKDIR}/schroedinger-${PV}"
+
+PACKAGES = "gst-plugin-schroedinger gst-plugin-schroedinger-dev gst-plugin-schroedinger-dbg"
+FILES_gst-plugin-schroedinger += "${libdir}/gstreamer-0.10/libgstschro.so"
+FILES_gst-plugin-schroedinger-dev += "${libdir}/gstreamer-0.10/libgstschro.*"
+FILES_gst-plugin-schroedinger-dbg += "${libdir}/gstreamer-0.10/.debug/libgstschro.so"
+
diff --git a/recipes/schroedinger/schroedinger.inc b/recipes/schroedinger/schroedinger.inc
index f907613fd1..90f7ca658b 100644
--- a/recipes/schroedinger/schroedinger.inc
+++ b/recipes/schroedinger/schroedinger.inc
@@ -1,10 +1,15 @@
HOMEPAGE = "http://schrodinger.sourceforge.net/"
LICENSE = "MPL GPL LGPL MIT"
-DEPENDS = "liboil"
+DEPENDS = "liboil orc-native orc"
-PR = "r2"
+PR = "r0"
-SRC_URI = "http://www.diracvideo.org/download/schroedinger/${P}.tar.gz"
+SRC_URI = "http://www.diracvideo.org/download/schroedinger/${P}.tar.gz;name=schroedingertargz"
+SRC_URI[schroedingertargz.md5sum] = "d67ec48b7c506db8c8b49156bf409e60"
+SRC_URI[schroedingertargz.sha256sum] = "345abcaa72ff0f2e9c1075e22f7141475ee4e6eea23a7f568b69ffc13cc1c723"
+SRC_URI += "file://configure.ac.patch;patch=1"
+
+EXTRA_OECONF += "STAGING_DIR=${STAGING_DIR_NATIVE}"
inherit autotools
diff --git a/recipes/schroedinger/schroedinger_1.0.5.bb b/recipes/schroedinger/schroedinger_1.0.5.bb
deleted file mode 100644
index 476c2965e6..0000000000
--- a/recipes/schroedinger/schroedinger_1.0.5.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require schroedinger.inc
-
-PR = "r3"
-
-inherit autotools_stage
-
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-
-PACKAGES =+ "gst-plugin-schroedinger-dbg gst-plugin-schroedinger-dev gst-plugin-schroedinger"
-FILES_gst-plugin-schroedinger = "${libdir}/gstreamer-0.10/*.so"
-FILES_gst-plugin-schroedinger-dbg = "${libdir}/gstreamer-0.10/.debug"
-FILES_gst-plugin-schroedinger-dev = "${libdir}/gstreamer-0.10/*.*a"
diff --git a/recipes/schroedinger/schroedinger_1.0.9.bb b/recipes/schroedinger/schroedinger_1.0.9.bb
new file mode 100644
index 0000000000..d9b919169b
--- /dev/null
+++ b/recipes/schroedinger/schroedinger_1.0.9.bb
@@ -0,0 +1,15 @@
+require schroedinger.inc
+
+PR = "r0"
+
+inherit autotools_stage
+
+SRC_URI[schroedingertargz.md5sum] = "d67ec48b7c506db8c8b49156bf409e60"
+SRC_URI[schroedingertargz.sha256sum] = "345abcaa72ff0f2e9c1075e22f7141475ee4e6eea23a7f568b69ffc13cc1c723"
+
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
+
+PACKAGES =+ "gst-plugin-schroedinger-dbg gst-plugin-schroedinger-dev gst-plugin-schroedinger"
+FILES_gst-plugin-schroedinger = "${libdir}/gstreamer-0.10/*.so"
+FILES_gst-plugin-schroedinger-dbg = "${libdir}/gstreamer-0.10/.debug"
+FILES_gst-plugin-schroedinger-dev = "${libdir}/gstreamer-0.10/*.*a"
diff --git a/recipes/sdlperl/sdl-perl_1.20.3.bb b/recipes/sdlperl/sdl-perl_1.20.3.bb
index 6820fa05ce..b93637d7ae 100644
--- a/recipes/sdlperl/sdl-perl_1.20.3.bb
+++ b/recipes/sdlperl/sdl-perl_1.20.3.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
HOMEPAGE = "http://sdl.perl.org/"
LICENSE = "GPL"
DEPENDS = "perl virtual/libsdl libsdl-image libsdl-gfx libsdl-ttf libsdl-mixer libsdl-net smpeg"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://bloodgate.com/perl/sdl/pub/SDL_perl-${PV}.tar.gz"
S = "${WORKDIR}/SDL_perl-${PV}"
@@ -13,6 +13,4 @@ inherit cpan
do_configure_prepend() {
# Search staging area for includes
sed -i -e 's:/usr/\(local/\)\{0,1\}include:${STAGING_INCDIR}:g' Makefile.linux
- # smpeg.h isn't in a subdirectry
- sed -i -e 's:#include <smpeg/smpeg.h>:#include <smpeg.h>:g' SDL_perl.xs
}
diff --git a/recipes/shadow/shadow.inc b/recipes/shadow/shadow.inc
index 9da5845012..30bd92f394 100644
--- a/recipes/shadow/shadow.inc
+++ b/recipes/shadow/shadow.inc
@@ -11,7 +11,7 @@ LICENSE = "BSD"
SECTION = "base"
DEPENDS += "${@base_contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
-INC_PR = "r9"
+INC_PR = "r13"
# Additional Policy files for PAM
PAM_SRC_URI = " \
@@ -79,19 +79,39 @@ do_install_append() {
sed -i 's/MAIL_DIR/#MAIL_DIR/g' ${D}${sysconfdir}/login.defs
sed -i 's/#MAIL_FILE/MAIL_FILE/g' ${D}${sysconfdir}/login.defs
- mv ${D}${bindir}/passwd ${D}${bindir}/passwd.${PN}
+ install -d ${D}${sbindir} ${D}${base_sbindir} ${D}${base_bindir}
+ for i in passwd chfn newgrp chsh ; do
+ mv ${D}${bindir}/$i ${D}${bindir}/$i.${PN}
+ done
+
mv ${D}${sbindir}/chpasswd ${D}${sbindir}/chpasswd.${PN}
+ mv ${D}${sbindir}/vigr ${D}${base_sbindir}/vigr.${PN}
+ mv ${D}${sbindir}/vipw ${D}${base_sbindir}/vipw.${PN}
+ mv ${D}${bindir}/login ${D}${base_bindir}/login.${PN}
# Ensure we add a suitable securetty file to the package that has most common embedded TTYs defined.
install -m 0400 ${WORKDIR}/securetty ${D}${sysconfdir}/securetty
+
}
pkg_postinst_${PN} () {
- update-alternatives --install ${bindir}/passwd passwd passwd.${PN} 100
- update-alternatives --install ${sbindir}/chpasswd chpasswd chpasswd.${PN} 100
+ update-alternatives --install ${bindir}/passwd passwd passwd.${PN} 200
+ update-alternatives --install ${sbindir}/chpasswd chpasswd chpasswd.${PN} 200
+ update-alternatives --install ${bindir}/chfn chfn chfn.${PN} 200
+ update-alternatives --install ${bindir}/newgrp newgrp newgrp.${PN} 200
+ update-alternatives --install ${bindir}/chsh chsh chsh.${PN} 200
+ update-alternatives --install ${base_bindir}/login login login.${PN} 200
+ update-alternatives --install ${base_sbindir}/vipw vipw vipw.${PN} 200
+ update-alternatives --install ${base_sbindir}/vigr vigr vigr.${PN} 200
+ if [ "x$D" != "x" ]; then
+ exit 1
+ fi
+ pwconv
+ grpconv
}
pkg_prerm_${PN} () {
- update-alternatives --remove passwd passwd.${PN}
- update-alternatives --remove chpasswd chpasswd.${PN}
+ for i in passwd chpasswd chfn newgrp chsh login vipw vigr ; do
+ update-alternatives --remove $i $i.${PN}
+ done
}
diff --git a/recipes/shr/alsa-scenarii-shr_git.bb b/recipes/shr/alsa-scenarii-shr_git.bb
index dff37cc083..a842086abe 100644
--- a/recipes/shr/alsa-scenarii-shr_git.bb
+++ b/recipes/shr/alsa-scenarii-shr_git.bb
@@ -1,9 +1,9 @@
DESCRIPTION = "Package for the different scenarios used by Openmoko"
SECTION = "openmoko/base"
PV = "1.0+gitr${SRCREV}"
-PR = "r2"
+PR = "r3"
-COMPATIBLE_MACHINE = "(om-gta01|om-gta02|om-3d7k)"
+COMPATIBLE_MACHINE = "(om-gta01|om-gta02|om-3d7k|htcdream)"
SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
diff --git a/recipes/shr/e-wm-config-illume-shr_git.bb b/recipes/shr/e-wm-config-illume-shr_git.bb
index 1a368c6fe5..80ce881fc2 100644
--- a/recipes/shr/e-wm-config-illume-shr_git.bb
+++ b/recipes/shr/e-wm-config-illume-shr_git.bb
@@ -3,7 +3,7 @@ SECTION = "e/utils"
DEPENDS = "eet"
LICENSE = "MIT BSD"
PV = "1.1-${EFL_SRCREV}+gitr${SRCREV}"
-PR = "r7"
+PR = "r8"
inherit e
@@ -22,7 +22,7 @@ RRECOMMENDS_${PN} = "\
e-wm-sysactions-shr \
e-wm-menu-shr \
illume-keyboard-default-alpha \
- illume-keyboard-default-numeric \
+ illume-keyboard-numeric-alt \
illume-keyboard-default-terminal \
"
diff --git a/recipes/shr/e-wm-config-illume2-shr_git.bb b/recipes/shr/e-wm-config-illume2-shr_git.bb
new file mode 100644
index 0000000000..098c1cdb48
--- /dev/null
+++ b/recipes/shr/e-wm-config-illume2-shr_git.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "illume2 SHR config"
+SECTION = "e/utils"
+DEPENDS = "eet"
+LICENSE = "MIT BSD"
+RDEPENDS = "shr-e-gadgets"
+SRCREV = "868999443054da51b198860459b92734a3b16d42"
+PV = "1.1-${EFL_SRCREV}+gitr${SRCREV}"
+PR = "r9"
+
+inherit e
+
+SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
+
+S = "${WORKDIR}/git/e-wm/${PN}"
+
+EXTRA_OECONF = "\
+ --with-eet-eet=${STAGING_BINDIR_NATIVE}/eet \
+"
+
+FILES_${PN} = "${datadir}/enlightenment/data/config/illume2-shr"
+
+RRECOMMENDS_${PN} = "\
+ e-wm-sysactions-shr \
+ e-wm-menu-shr \
+ illume-keyboard-default-alpha \
+ illume-keyboard-numeric-alt \
+ illume-keyboard-default-terminal \
+"
+
diff --git a/recipes/shr/e-wm-theme-illume-neo_git.bb b/recipes/shr/e-wm-theme-illume-neo_git.bb
index ed6adf71c0..ca1b3ab3ce 100644
--- a/recipes/shr/e-wm-theme-illume-neo_git.bb
+++ b/recipes/shr/e-wm-theme-illume-neo_git.bb
@@ -4,11 +4,12 @@ HOMEPAGE = "http://jmccloud.jm.funpic.de"
AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
DEPENDS = "edje-native"
RDEPENDS = "e-wm"
-RRECOMMENDS = "elementary-theme-neo gtk-theme-neo libframeworkd-phonegui-efl-theme-neo etk-theme-neo gpe-theme-neo icon-theme-neo"
+RSUGGESTS = "elementary-theme-neo gtk-theme-neo gpe-theme-neo icon-theme-neo"
LICENCE = "unknown"
+SRCREV = "820f4d41531ad6f790615b6a7312a60e30e99fdc"
PV = "0.1-${EFL_SRCREV}+gitr${SRCREV}"
-PR = "r1"
+PR = "r3"
SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
diff --git a/recipes/shr/elementary-theme-neo_git.bb b/recipes/shr/elementary-theme-neo_git.bb
index 2c1f2f7831..ff310445c8 100644
--- a/recipes/shr/elementary-theme-neo_git.bb
+++ b/recipes/shr/elementary-theme-neo_git.bb
@@ -1,13 +1,14 @@
-DESCRIPTION = "nEo elementary theme - a very fast, high contrast etk theme"
+DESCRIPTION = "nEo elementary theme - a very fast, high contrast elementary theme"
SECTION = "e/utils"
HOMEPAGE = "http://jmccloud.jm.funpic.de"
AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
DEPENDS = "edje-native"
-RRECOMMENDS = "e-wm-theme-illume-neo gtk-theme-neo libframeworkd-phonegui-efl-theme-neo etk-theme-neo gpe-theme-neo icon-theme-neo"
+RSUGGESTS = "elementary-theme-neo e-wm-theme-illume-neo gtk-theme-neo gpe-theme-neo icon-theme-neo"
LICENSE = "unknown"
-PV = "0.2.1-${EFL_SRCREV}+gitr${SRCREV}"
-PR = "r3"
+SRCREV = "fb377425e69ce1fc13f5094801b96836203e8154"
+PV = "0.5-${EFL_SRCREV}+gitr${SRCREV}"
+PR = "r1"
SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master \
"
diff --git a/recipes/shr/elementary-theme-o2_git.bb b/recipes/shr/elementary-theme-o2_git.bb
new file mode 100644
index 0000000000..45e37e6cc1
--- /dev/null
+++ b/recipes/shr/elementary-theme-o2_git.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "o2 theme for the elementary toolkit - it looks like om2007.2"
+SECTION = "e/utils"
+HOMEPAGE = "http://jmccloud.jm.funpic.de"
+AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
+DEPENDS = "edje-native"
+RSUGGESTS = "phoneui-shr-theme-o2"
+LICENSE = "unknown"
+
+SRCREV = "b5eb3134850c277ad8ae1a960b03ff4a509278a8"
+PV = "0.1-${EFL_SRCREV}+gitr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master \
+ "
+
+S = "${WORKDIR}/git/elementary/${PN}"
+
+do_compile() {
+ ${STAGING_BINDIR_NATIVE}/edje_cc -id ${S}/. -fd ${S}/. ${S}/o2.edc -o ${S}/o2.edj
+}
+
+do_install() {
+ install -d ${D}${datadir}/elementary/themes/
+ install -m 0644 ${S}/o2.edj ${D}${datadir}/elementary/themes/
+}
+
+FILES_${PN} = "${datadir}/elementary/themes/"
diff --git a/recipes/shr/etk-theme-neo_git.bb b/recipes/shr/etk-theme-neo_git.bb
deleted file mode 100644
index 2279af0e04..0000000000
--- a/recipes/shr/etk-theme-neo_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "nEo etk theme - a very fast, high contrast etk theme"
-HOMEPAGE = "http://jmccloud.jm.funpic.de"
-AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
-RRECOMMENDS = "elementary-theme-neo e-wm-theme-illume-neo gtk-theme-neo libframeworkd-phonegui-efl-theme-neo gpe-theme-neo icon-theme-neo"
-LICENSE = "unknown"
-
-PV = "0.2-${EFL_SRCREV}+gitr${SRCREV}"
-PR = "r2"
-
-SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
-
-require etk-theme.inc
diff --git a/recipes/shr/etk-theme-shr_git.bb b/recipes/shr/etk-theme-shr_git.bb
deleted file mode 100644
index e05fa56ee4..0000000000
--- a/recipes/shr/etk-theme-shr_git.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-DESCRIPTION = "etk SHR theme"
-LICENSE = "MIT BSD"
-PV = "1.1.1-${EFL_SRCREV}+gitr${SRCREV}"
-PR = "r2"
-
-SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
-
-require etk-theme.inc
diff --git a/recipes/shr/gtk-theme-neo_git.bb b/recipes/shr/gtk-theme-neo_git.bb
index 6415b6a6ec..94f9b9f992 100644
--- a/recipes/shr/gtk-theme-neo_git.bb
+++ b/recipes/shr/gtk-theme-neo_git.bb
@@ -2,11 +2,12 @@ DESCRIPTION = "nEo GTK theme - a very fast, high contrast GTK theme"
HOMEPAGE = "http://jmccloud.jm.funpic.de"
AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
RDEPENDS += "icon-theme-neo"
-RRECOMMENDS = "elementary-theme-neo e-wm-theme-illume-neo libframeworkd-phonegui-efl-theme-neo etk-theme-neo gpe-theme-neo icon-theme-neo"
+RSUGGESTS = "elementary-theme-neo e-wm-theme-illume-neo gpe-theme-neo icon-theme-neo"
LICENSE = "unknown"
+SRCREV = "f847105c5ef5d488a4bce0c0a85d572c3509d56f"
PV = "0.2-${EFL_SRCREV}+gitr${SRCREV}"
-PR = "r3"
+PR = "r5"
SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
diff --git a/recipes/shr/icon-theme-neo_git.bb b/recipes/shr/icon-theme-neo_git.bb
index 1b6c8ae7e2..b9894722ed 100644
--- a/recipes/shr/icon-theme-neo_git.bb
+++ b/recipes/shr/icon-theme-neo_git.bb
@@ -3,11 +3,12 @@ SECTION = "e/utils"
HOMEPAGE = "http://jmccloud.jm.funpic.de"
AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
RDEPENDS = "e-wm"
-RRECOMMENDS = "elementary-theme-neo e-wm-theme-illume-neo gtk-theme-neo libframeworkd-phonegui-efl-theme-neo etk-theme-neo gpe-theme-neo"
+RSUGGESTS = "elementary-theme-neo e-wm-theme-illume-neo gtk-theme-neo gpe-theme-neo"
LICENSE = "unknown"
+SRCREV = "f847105c5ef5d488a4bce0c0a85d572c3509d56f"
PV = "0.2-${EFL_SRCREV}+gitr${SRCREV}"
-PR = "r1"
+PR = "r3"
SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
diff --git a/recipes/shr/initscripts-shr/mountdevsubfs.sh b/recipes/shr/initscripts-shr/mountdevsubfs.sh
index c6cfb05af2..4308dab44e 100644
--- a/recipes/shr/initscripts-shr/mountdevsubfs.sh
+++ b/recipes/shr/initscripts-shr/mountdevsubfs.sh
@@ -4,11 +4,12 @@
test -c /dev/ptmx || mknod -m 666 /dev/ptmx c 5 2
-if [ -d /dev/pts ]; then
- mount -n -t devpts devpts /dev/pts -ogid=${TTYGRP},mode=${TTYMODE}
+if [ ! -d /dev/pts ]; then
+ mkdir /dev/pts
fi
-
-
-if [ -d /dev/shm ]; then
- mount -n -t tmpfs shmfs /dev/shm -omode=0777
+if [ ! -d /dev/shm ]; then
+ mkdir /dev/shm
fi
+
+mount -n -t devpts devpts /dev/pts -ogid=${TTYGRP},mode=${TTYMODE}
+mount -n -t tmpfs shmfs /dev/shm -omode=0777
diff --git a/recipes/shr/initscripts-shr_0.0.1.bb b/recipes/shr/initscripts-shr_0.0.1.bb
index 89df6ce375..ac7d83f96b 100644
--- a/recipes/shr/initscripts-shr_0.0.1.bb
+++ b/recipes/shr/initscripts-shr_0.0.1.bb
@@ -5,7 +5,7 @@ DEPENDS = ""
RDEPENDS = ""
LICENSE = "GPL"
PV = "0.0.1"
-PR = "r14"
+PR = "r15"
RPROVIDES_${PN} = "initscripts"
RCONFLICTS_${PN} = "initscripts"
diff --git a/recipes/shr/libframeworkd-phonegui-efl-theme-neo_git.bb b/recipes/shr/libframeworkd-phonegui-efl-theme-neo_git.bb
deleted file mode 100644
index 27dc47bac3..0000000000
--- a/recipes/shr/libframeworkd-phonegui-efl-theme-neo_git.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-DESCRIPTION = "nEo libframeworkd-phonegui-efl - a very fast, high contrast etk theme"
-HOMEPAGE = "http://jmccloud.jm.funpic.de"
-AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
-RDEPENDS = "libframeworkd-phonegui-efl"
-RRECOMMENDS = "elementary-theme-neo e-wm-theme-illume-neo gtk-theme-neo etk-theme-neo gpe-theme-neo icon-theme-neo"
-LICENSE = "unknown"
-
-PV = "0.2-${EFL_SRCREV}+gitr${SRCREV}"
-PR = "r2"
-
-require libframeworkd-phonegui-efl-theme.inc
-
-SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
-
-S = "${WORKDIR}/git/libframeworkd-phonegui-efl/theme-neo"
-
-do_compile() {
- for edc in call contacts dialer dialog elm-resizing-label incoming-message keypad messages sim-auth ussd ; do
- ${STAGING_BINDIR_NATIVE}/edje_cc -id ${S}/${edc}/. -fd ${S}/${edc}. ${S}/${edc}/${edc}.edc -o ${S}/${edc}.edj
- done
-}
-
-do_install() {
- install -d ${D}${datadir}/libframeworkd-phonegui-efl.${PN}/
- install -m 0644 ${S}/*.edj ${D}${datadir}/libframeworkd-phonegui-efl.${PN}/
-}
diff --git a/recipes/shr/libframeworkd-phonegui-efl2_git.bb b/recipes/shr/libframeworkd-phonegui-efl2_git.bb
deleted file mode 100644
index 551abb1dd2..0000000000
--- a/recipes/shr/libframeworkd-phonegui-efl2_git.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "frameworkd EFL phonegui 2"
-SECTION = "e/apps"
-DEPENDS += " dbus-glib libframeworkd-glib libframeworkd-phonegui etk evas ecore edje edje-native elementary"
-PV = "0.0.1+gitr${SRCREV}"
-PR = "r2"
-
-SRC_URI = "git://shr.bearstech.com/repo/libframeworkd-phonegui-efl2.git;protocol=http;branch=master"
-S = "${WORKDIR}/git"
-
-inherit pkgconfig autotools autotools_stage
-
-EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
-
-
-do_configure_prepend() {
- autopoint --force
-}
-
diff --git a/recipes/shr/libframeworkd-phonegui-efl_git.bb b/recipes/shr/libframeworkd-phonegui-efl_git.bb
deleted file mode 100644
index 5d0d099a9a..0000000000
--- a/recipes/shr/libframeworkd-phonegui-efl_git.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-DESCRIPTION = "frameworkd EFL phonegui"
-HOMEPAGE = "http://shr-project.org/"
-LICENSE = "GPL"
-SECTION = "e/apps"
-DEPENDS += " dbus-glib libframeworkd-glib libframeworkd-phonegui etk evas ecore edje edje-native elementary"
-PV = "0.0.3+gitr${SRCREV}"
-PR = "r36"
-
-require libframeworkd-phonegui-efl-theme.inc
-
-inherit pkgconfig autotools autotools_stage
-
-SRC_URI = "git://git.shr-project.org/repo/shr.git;protocol=http;branch=master"
-S = "${WORKDIR}/git/${PN}"
-
-EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
-
-do_configure_prepend() {
- sed -i "s|^filesdir = \$(datadir)/libframeworkd-phonegui-efl/|filesdir = \$(datadir)/libframeworkd-phonegui-efl.${PN}|g" data/Makefile.am
- autopoint --force
-}
-
diff --git a/recipes/shr/libframeworkd-phonegui_git.bb b/recipes/shr/libframeworkd-phonegui_git.bb
deleted file mode 100644
index 50b546512a..0000000000
--- a/recipes/shr/libframeworkd-phonegui_git.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "Frameworkd phonegui library"
-HOMEPAGE = "http://shr-project.org/"
-LICENSE = "GPL"
-SECTION = "libs"
-PV = "0.0.2+gitr${SRCREV}"
-PR = "r10"
-
-DEPENDS="glib-2.0 dbus-glib libframeworkd-glib libphone-utils"
-
-inherit pkgconfig autotools autotools_stage
-
-SRC_URI = "git://git.shr-project.org/repo/shr.git;protocol=http;branch=master"
-S = "${WORKDIR}/git/${PN}"
-
-CONFFILES_${PN} = "${sysconfdir}/frameworkd-phonegui.conf"
diff --git a/recipes/shr/libphone-ui-shr_git.bb b/recipes/shr/libphone-ui-shr_git.bb
index c297fe3640..e9080ae713 100644
--- a/recipes/shr/libphone-ui-shr_git.bb
+++ b/recipes/shr/libphone-ui-shr_git.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "SHR default module for the Phone UI daemon"
SECTION = "e/apps"
-DEPENDS += " dbus-glib libframeworkd-glib libphone-ui etk evas ecore edje edje-native elementary"
+DEPENDS += " dbus-glib libframeworkd-glib libphone-ui evas ecore edje edje-native elementary"
PV = "0.0.0+gitr${SRCREV}"
-PR = "r4"
+PR = "r5"
SRC_URI = "git://shr.bearstech.com/repo/libphone-ui-shr.git;protocol=http;branch=master"
S = "${WORKDIR}/git"
diff --git a/recipes/shr/libphone-utils_git.bb b/recipes/shr/libphone-utils_git.bb
index 7cf26ffec1..f842ccde17 100644
--- a/recipes/shr/libphone-utils_git.bb
+++ b/recipes/shr/libphone-utils_git.bb
@@ -1,5 +1,6 @@
DESCRIPTION = "phone-utils library"
SECTION = "libs"
+SRCREV = "3eb7242866543a266bd43a048d05b1a674ce94cf"
PV = "0.0.2+gitr${SRCREV}"
PR = "r2"
diff --git a/recipes/shr/phoneui-apps_git.bb b/recipes/shr/phoneui-apps_git.bb
index a6e3e17aee..1ddb0c60e4 100644
--- a/recipes/shr/phoneui-apps_git.bb
+++ b/recipes/shr/phoneui-apps_git.bb
@@ -4,14 +4,14 @@ LICENSE = "GPL"
SECTION = "x11/applications"
DEPENDS += "dbus-glib"
PV = "0.0.0+gitr${SRCREV}"
-PR = "r0"
+PR = "r1"
inherit pkgconfig autotools
SRC_URI = "git://git.shr-project.org/repo/phoneui-apps.git;protocol=http;branch=master"
S = "${WORKDIR}/git"
-PACKAGES = "${PN}-dialer ${PN}-messages ${PN}-contacts"
+PACKAGES = "${PN}-dialer ${PN}-messages ${PN}-contacts ${PN}-quick-settings"
FILES_${PN}-dialer = "\
/usr/bin/phoneui-dialer \
@@ -26,3 +26,7 @@ FILES_${PN}-contacts = "\
/usr/share/applications/phoneui-contacts.desktop \
"
+FILES_${PN}-quick-settings = "\
+ /usr/bin/phoneui-quick-settings \
+"
+
diff --git a/recipes/shr/phoneui-shr-theme-neo_git.bb b/recipes/shr/phoneui-shr-theme-neo_git.bb
new file mode 100644
index 0000000000..0bf26487af
--- /dev/null
+++ b/recipes/shr/phoneui-shr-theme-neo_git.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "nEo phoneui-shr theme - a very fast, high contrast phoneui-shr theme"
+AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
+HOMEPAGE = "http://jmccloud.jm.funpic.de"
+SECTION = "e/utils"
+LICENSE = "unknown"
+DEPENDS = "edje-native"
+RDEPENDS = "libphone-ui-shr"
+RSUGGESTS = "e-wm-theme-illume-neo gtk-theme-neo icon-theme-neo elementary-theme-neo"
+SRCREV = "8e89c8dbae569a08cac246a3805fca20988c0ad1"
+PV = "0.1+gitr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
+
+S = "${WORKDIR}/git/phoneui-shr/${PN}"
+
+do_compile() {
+ ${STAGING_BINDIR_NATIVE}/edje_cc -id ${S}/. -fd ${S}/. ${S}/neo.edc -o ${S}/neo.edj
+ ${STAGING_BINDIR_NATIVE}/edje_cc -id ${S}/idle_screen -fd ${S}/idle_screen ${S}/neo.edc -o ${S}/idle_screen.edj.neo
+}
+do_install() {
+ install -d ${D}${datadir}/libphone-ui-shr/
+ install -m 0644 ${S}/neo.edj ${D}${datadir}/libphone-ui-shr/
+ install -m 0644 ${S}/idle_screen.edj.neo ${D}${datadir}/libphone-ui-shr/
+ install -m 0644 ${S}/config ${D}${datadir}/libphone-ui-shr/
+}
+
+FILES_${PN} = "${datadir}/libphone-ui-shr/"
+CONFFILES_${PN} = "${datadir}/libphone-ui-shr/config"
diff --git a/recipes/shr/phoneui-shr-theme-o2_git.bb b/recipes/shr/phoneui-shr-theme-o2_git.bb
new file mode 100644
index 0000000000..a671d8b650
--- /dev/null
+++ b/recipes/shr/phoneui-shr-theme-o2_git.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "o2 theme for libphone-ui-shr - it looks like om2007.2"
+AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
+HOMEPAGE = "http://jmccloud.jm.funpic.de"
+SECTION = "e/utils"
+LICENSE = "unknown"
+DEPENDS = "edje-native"
+RDEPENDS = "libphone-ui-shr"
+RSUGGESTS = "elementary-theme-o2"
+SRCREV = "b5eb3134850c277ad8ae1a960b03ff4a509278a8"
+PV = "0.1+gitr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
+
+S = "${WORKDIR}/git/phoneui-shr/${PN}"
+
+do_compile() {
+ ${STAGING_BINDIR_NATIVE}/edje_cc -id ${S}/. -fd ${S}/. ${S}/o2.edc -o ${S}/o2.edj
+}
+do_install() {
+ install -d ${D}${datadir}/libphone-ui-shr/
+ install -m 0644 ${S}/o2.edj ${D}${datadir}/libphone-ui-shr/
+ install -m 0644 ${S}/config ${D}${datadir}/libphone-ui-shr/
+}
+
+FILES_${PN} = "${datadir}/libphone-ui-shr/"
+CONFFILES_${PN} = "${datadir}/libphone-ui-shr/config"
diff --git a/recipes/shr/shr-contacts_git.bb b/recipes/shr/shr-contacts_git.bb
deleted file mode 100644
index 1b9a383130..0000000000
--- a/recipes/shr/shr-contacts_git.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "The SHR Contacts application"
-HOMEPAGE = "http://shr-project.org/"
-LICENSE = "GPL"
-SECTION = "x11/applications"
-DEPENDS += "dbus-glib libframeworkd-glib libframeworkd-phonegui"
-PV = "0.0.2+gitr${SRCREV}"
-PR = "r6"
-
-inherit pkgconfig autotools
-
-SRC_URI = "git://git.shr-project.org/repo/shr.git;protocol=http;branch=master"
-S = "${WORKDIR}/git/${PN}"
-
diff --git a/recipes/shr/shr-dialer_git.bb b/recipes/shr/shr-dialer_git.bb
deleted file mode 100644
index 796b96592b..0000000000
--- a/recipes/shr/shr-dialer_git.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "The SHR Dialer"
-HOMEPAGE = "http://shr-project.org/"
-LICENSE = "GPL"
-SECTION = "x11/applications"
-DEPENDS += "dbus-glib libframeworkd-glib libframeworkd-phonegui"
-PV = "0.0.2+gitr${SRCREV}"
-PR = "r9"
-
-inherit pkgconfig autotools
-
-SRC_URI = "git://git.shr-project.org/repo/shr.git;protocol=http;branch=master"
-S = "${WORKDIR}/git/${PN}"
-
diff --git a/recipes/shr/shr-e-gadgets_git.bb b/recipes/shr/shr-e-gadgets_git.bb
new file mode 100644
index 0000000000..b1a83d8e31
--- /dev/null
+++ b/recipes/shr/shr-e-gadgets_git.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "An e17 module for a lot of needed shr-gadgets"
+HOMEPAGE = "http://shr-project.org"
+LICENSE = "BSD"
+DEPENDS = "e-wm"
+RDEPENDS = "e-wm"
+SECTION = "x11/application"
+
+SRCREV = "273576014a79823bd45f7cd9c4e0314bb001b762"
+PV = "0.0.0+gitr${SRCREV}"
+
+inherit autotools
+
+SRC_URI = "git://git.shr-project.org/repo/shr-e-gadgets.git;protocol=http;branch=master"
+S = "${WORKDIR}/git"
+
+FILES_${PN} += "\
+ ${libdir}/enlightenment/modules/*/*.* \
+ ${libdir}/enlightenment/modules/*/*/* \
+"
diff --git a/recipes/shr/shr-launcher_svn.bb b/recipes/shr/shr-launcher_svn.bb
index 3b72752daf..e8e260fa91 100644
--- a/recipes/shr/shr-launcher_svn.bb
+++ b/recipes/shr/shr-launcher_svn.bb
@@ -4,7 +4,7 @@ AUTHOR = "cchandel"
LICENSE = "GPLv2"
SECTION = "e/apps"
DEPENDS = "elementary eina edbus"
-
+SRCREV = "103"
PV = "0.0.1+svnr${SRCPV}"
PR = "r5"
diff --git a/recipes/shr/shr-messages_git.bb b/recipes/shr/shr-messages_git.bb
deleted file mode 100644
index 6fc0694c29..0000000000
--- a/recipes/shr/shr-messages_git.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "The SHR Messages"
-HOMEPAGE = "http://shr-project.org/"
-LICENSE = "GPL"
-SECTION = "x11/applications"
-DEPENDS += "dbus-glib libframeworkd-glib libframeworkd-phonegui"
-PV = "0.0.2+gitr${SRCREV}"
-PR = "r8"
-
-inherit pkgconfig autotools
-
-SRC_URI = "git://git.shr-project.org/repo/shr.git;protocol=http;branch=master"
-S = "${WORKDIR}/git/${PN}"
-
diff --git a/recipes/shr/shr-theme-neo.bb b/recipes/shr/shr-theme-neo.bb
index 20186ffe31..e852632736 100644
--- a/recipes/shr/shr-theme-neo.bb
+++ b/recipes/shr/shr-theme-neo.bb
@@ -2,10 +2,10 @@ DESCRIPTION = "nEo shr theme - a very fast, high contrast shr theme"
SECTION = "x11/data"
HOMEPAGE = "http://jmccloud.jm.funpic.de"
AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
-RDEPENDS = "elementary-theme-neo e-wm-theme-illume-neo gtk-theme-neo libframeworkd-phonegui-efl-theme-neo gpe-theme-neo icon-theme-neo"
+RDEPENDS = "phoneui-shr-theme-neo elementary-theme-neo e-wm-theme-illume-neo gtk-theme-neo gpe-theme-neo icon-theme-neo"
LICENSE = "unknown"
PV = "0.2"
-PR = "r1"
+PR = "r3"
ALLOW_EMPTY = "1"
diff --git a/recipes/shr/shr-theme-o2.bb b/recipes/shr/shr-theme-o2.bb
new file mode 100644
index 0000000000..6c03d12982
--- /dev/null
+++ b/recipes/shr/shr-theme-o2.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "o2 theme suit for shr - it looks like om2007.2"
+SECTION = "x11/data"
+HOMEPAGE = "http://jmccloud.jm.funpic.de"
+AUTHOR = "Jesus McCloud <bernd.pruenster@gmail.com"
+RDEPENDS = "phoneui-shr-theme-o2 elementary-theme-o2"
+LICENSE = "unknown"
+
+PV = "0.1"
+
+ALLOW_EMPTY = "1"
diff --git a/recipes/smartmontools/smartmontools_5.39.1.bb b/recipes/smartmontools/smartmontools_5.39.1.bb
new file mode 100644
index 0000000000..ec9a10d4c5
--- /dev/null
+++ b/recipes/smartmontools/smartmontools_5.39.1.bb
@@ -0,0 +1 @@
+include smartmontools.inc
diff --git a/recipes/smpeg/smpeg/as-fix.patch b/recipes/smpeg/smpeg/as-fix.patch
deleted file mode 100644
index 1a747018e5..0000000000
--- a/recipes/smpeg/smpeg/as-fix.patch
+++ /dev/null
@@ -1,18 +0,0 @@
----
- configure.in | 1 +
- 1 file changed, 1 insertion(+)
-
---- trunk.orig/configure.in
-+++ trunk/configure.in
-@@ -54,10 +54,11 @@ AC_PROG_MAKE_SET
- AC_PROG_CC
- AC_PROG_CXX
- AC_LIBTOOL_WIN32_DLL
- AM_PROG_LIBTOOL
- AC_PROG_INSTALL
-+AM_PROG_AS
-
- dnl Ugh.
- AS="$CC"
- CCAS="$CC"
- AC_SUBST(AS)
diff --git a/recipes/smpeg/smpeg_svn.bb b/recipes/smpeg/smpeg_svn.bb
index 343e0bd2eb..7883463df4 100644
--- a/recipes/smpeg/smpeg_svn.bb
+++ b/recipes/smpeg/smpeg_svn.bb
@@ -6,41 +6,31 @@ DEPENDS = "virtual/libsdl"
PROVIDES = "smpeg"
PV = "0.4.5+svnr${SRCPV}"
PE = "1"
-SRCREV = "370"
+SRCREV = "387"
-SRC_URI = "svn://svn.icculus.org/smpeg/;module=trunk \
- file://m4.patch;patch=1 \
- file://as-fix.patch;patch=1"
+SRC_URI = "svn://svn.icculus.org/smpeg/;module=trunk"
S = "${WORKDIR}/trunk"
-inherit autotools
+inherit autotools binconfig
-export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config"
-
-CFLAGS_append = " -I${STAGING_INCDIR}/SDL"
EXTRA_OECONF = "--disable-gtktest --disable-opengl-player --without-x \
--without-gtk --disable-gtk-player"
do_configure_prepend () {
touch NEWS AUTHORS ChangeLog
- rm -f acinclude.m4
-}
-
-do_stage() {
- oe_libinstall -so -C .libs libsmpeg-0.4 ${STAGING_LIBDIR}
- ln -sf libsmpeg-0.4.so ${STAGING_LIBDIR}/libsmpeg.so
-
- for f in "*.h"
- do
- install -m 0644 ${f} ${STAGING_INCDIR}/SDL
- done
-
- cat smpeg-config | sed -e "s,-I/usr/include/SDL,-I${STAGING_INCDIR}/SDL," \
- | sed -e "s,-I/usr/include/smpeg, ," \
- | sed -e "s,libdirs ,mickey_is_cool ," \
- | sed -e "s,-lSDL ,-lSDL-1.2 , "> ${STAGING_BINDIR_CROSS}/smpeg-config
- chmod a+rx ${STAGING_BINDIR_CROSS}/smpeg-config
+ # drop all .m4 which are available in staging
+ rm -f acinclude/gtk-2.0.m4 \
+ acinclude/libtool.m4 \
+ acinclude/ltdl.m4 \
+ acinclude/ltoptions.m4 \
+ acinclude/ltsugar.m4 \
+ acinclude/ltversion.m4 \
+ acinclude/lt~obsolete.m4 \
+ acinclude/pkg.m4 \
+ acinclude/sdl.m4 \
+ aclocal.m4 \
+ acinclude.m4
}
PACKAGES =+ "plaympeg "
diff --git a/recipes/snort/files/snort.fix.configure.in.HACK b/recipes/snort/files/snort.fix.configure.in.HACK
new file mode 100644
index 0000000000..1ce58475c1
--- /dev/null
+++ b/recipes/snort/files/snort.fix.configure.in.HACK
@@ -0,0 +1,103 @@
+diff -Nur snort-2.8.5.3.vanilla/configure.in snort-2.8.5.3/configure.in
+--- snort-2.8.5.3.vanilla/configure.in 2010-02-12 17:36:25.000000000 +0100
++++ snort-2.8.5.3/configure.in 2010-03-02 11:23:03.000000000 +0100
+@@ -74,7 +74,6 @@
+ # libpcap doesn't even LOOK at the timeout you give it under Linux
+ AC_DEFINE([PCAP_TIMEOUT_IGNORED],[1],[Define if pcap timeout is ignored])
+ AC_SUBST(extra_incl)
+- extra_incl="-I/usr/include/pcap"
+ ;;
+ *-hpux10*|*-hpux11*)
+ AC_DEFINE([HPUX],[1],[Define if HP-UX 10 or 11])
+@@ -229,25 +228,7 @@
+ AC_CHECK_TYPES([int8_t,int16_t,int32_t,int64_t])
+
+ # In case INADDR_NONE is not defined (like on Solaris)
+-have_inaddr_none="no"
+-AC_MSG_CHECKING([for INADDR_NONE])
+-AC_RUN_IFELSE(
+-[AC_LANG_PROGRAM(
+-[[
+-#include <sys/types.h>
+-#include <netinet/in.h>
+-#include <arpa/inet.h>
+-]],
+-[[
+- if (inet_addr("10,5,2") == INADDR_NONE);
+- return 0;
+-]])],
+-[have_inaddr_none="yes"],
+-[have_inaddr_none="no"])
+-AC_MSG_RESULT($have_inaddr_none)
+-if test "x$have_inaddr_none" = "xno"; then
+- AC_DEFINE([INADDR_NONE],[-1],[For INADDR_NONE definition])
+-fi
++have_inaddr_none="yes"
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #include <stdio.h>
+@@ -350,62 +331,8 @@
+ # This is Linux only. The check is done after pcre because the code below uses pcre.
+ # It seems Phil Wood's pcap does not accumulate - 0.9x
+ pcap_version_check="yes"
+-if test "x$linux" = "xyes"; then
+- if test "x$pcap_version_check" = "xyes"; then
+- AC_MSG_CHECKING([for libpcap version >= 0.9])
+- AC_RUN_IFELSE(
+- [AC_LANG_PROGRAM(
+- [[
+- #include <pcap.h>
+- #include <string.h>
+- extern char pcap_version[];
+- ]],
+- [[
+- if (strcmp(pcap_version, "0.9x") == 0)
+- return 1;
+-
+- if (strcmp(pcap_version, "0.9.0") < 0)
+- return 1;
+- ]])],
+- [libpcap_version_09="yes"],
+- [libpcap_version_09="no"])
+- AC_MSG_RESULT($libpcap_version_09)
+- if test "x$libpcap_version_09" = "xyes"; then
+- AC_DEFINE([LIBPCAP_ACCUMULATES],[1],[For libpcap versions that accumulate stats])
+- fi
+- else
+- libpcap_version_09="no"
+- AC_DEFINE([LIBPCAP_ACCUMULATES],[1],[For libpcap versions that accumulate stats])
+- fi
+-
+- # there is a bug in the Linux code in 0.9.0 - 0.9.4 where the pcap
+- # stats are doubled.
+- if test "x$libpcap_version_09" = "xyes"; then
+- AC_MSG_CHECKING(for libpcap version 0.9.0 - 0.9.4)
+- AC_RUN_IFELSE(
+- [AC_LANG_PROGRAM(
+- [[
+- #include <pcap.h>
+- #include <string.h>
+- extern char pcap_version[];
+- ]],
+- [[
+- if (strcmp(pcap_version, "0.9.5") < 0)
+- return 1;
+- ]])],
+- [libpcap_version_09_bug="no"],
+- [libpcap_version_09_bug="yes"])
+- AC_MSG_RESULT($libpcap_version_09_bug)
+- else
+- libpcap_version_09_bug="no"
+- fi
+-
+- if test "x$libpcap_version_09_bug" = "xyes"; then
+- AC_DEFINE([LINUX_LIBPCAP_DOUBLES_STATS],[1],[For Linux libpcap versions 0.9.0 to 0.9.4])
+- fi
+-else
+- AC_DEFINE([LIBPCAP_ACCUMULATES],[1],[For libpcap versions that accumulate stats])
+-fi
++libpcap_version_09="yes"
++libpcap_version_09_bug="no"
+
+ AC_DEFUN([FAIL_MESSAGE],[
+ echo
diff --git a/recipes/snort/snort_2.8.5.3.bb b/recipes/snort/snort_2.8.5.3.bb
new file mode 100644
index 0000000000..f72b8b30aa
--- /dev/null
+++ b/recipes/snort/snort_2.8.5.3.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "snort - a free lightweight network intrusion detection system for UNIX and Windows."
+HOMEPAGE = "http://www.snort.org/"
+LICENSE = "GPL"
+DEPENDS = "libpcap libnet libpcre"
+RDEPENDS = "libpcap libnet libpcre barnyard"
+
+PR = "r1"
+
+SRC_URI = " http://dl.snort.org/snort-current/${P}.tar.gz;name=tarball \
+ file://snort.fix.configure.in.HACK;patch=1 \
+ "
+SRC_URI[tarball.md5sum] = "ef02aaad54746603f2cb3236fe962128"
+SRC_URI[tarball.sha256sum] = "a7d9eb16427514d00926e9892c4a92b6ff1fd0f79555d8f8dce91dfa14112e6a"
+
+S = "${WORKDIR}/${P}"
+
+#snort does not like parallel make!
+PARALLEL_MAKE = ""
+
+inherit autotools pkgconfig
+
+#fix path of pc file
+do_install_prepend() {
+ sed -i -e 's:-Wl,-rpath-link,${STAGING_LIBDIR}::g' -e 's:-isystem${STAGING_INCDIR}::g' snort.pc
+}
+
diff --git a/recipes/socat/files/compile.patch b/recipes/socat/files/compile.patch
new file mode 100644
index 0000000000..35a1e3188f
--- /dev/null
+++ b/recipes/socat/files/compile.patch
@@ -0,0 +1,939 @@
+Index: socat-1.7.1.2/configure.in
+===================================================================
+--- socat-1.7.1.2.orig/configure.in 2010-03-17 10:10:07.431327912 +0800
++++ socat-1.7.1.2/configure.in 2010-03-17 11:30:56.010077501 +0800
+@@ -86,7 +86,7 @@
+
+
+ dnl Check for extra socket library (for Solaris)
+-AC_CHECK_FUNC(hstrerror, , AC_CHECK_LIB(resolv, hstrerror, [LIBS="$LIBS -lresolv"; AC_DEFINE(HAVE_HSTRERROR)]))
++AC_CHECK_FUNC(hstrerror, , AC_CHECK_LIB(resolv, hstrerror, [LIBS="$LIBS -lresolv"; AC_DEFINE(HAVE_HSTRERROR, [1], [STRERROR])]))
+ AC_CHECK_FUNC(gethostent, , AC_CHECK_LIB(nsl, gethostent))
+ AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
+
+@@ -100,7 +100,7 @@
+ [sc_cv_have_prototype_hstrerror=yes]);
+ CFLAGS="$CFLAGS1"])
+ if test $sc_cv_have_prototype_hstrerror = yes; then
+- AC_DEFINE(HAVE_PROTOTYPE_HSTRERROR)
++ AC_DEFINE(HAVE_PROTOTYPE_HSTRERROR, [1], [Has Strerror])
+ fi
+ AC_MSG_RESULT($sc_cv_have_prototype_hstrerror)
+
+@@ -109,83 +109,83 @@
+ AC_ARG_ENABLE(help, [ --disable-help disable help],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_HELP) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_HELP, [1], [With help]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_HELP) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_HELP, [1], [With help]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include STDIO support)
+ AC_ARG_ENABLE(stdio, [ --disable-stdio disable STDIO support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_STDIO) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_STDIO, [1], [With stdio]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_STDIO) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_STDIO, [1], [With stdio]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include FD-number support)
+ AC_ARG_ENABLE(fdnum, [ --disable-fdnum disable FD-number support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_FDNUM) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_FDNUM, [1], [With fdnum]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_FDNUM) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_FDNUM, [1], [With fdnum]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include direct file support)
+ AC_ARG_ENABLE(file, [ --disable-file disable direct file support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_FILE) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_FILE, [1], [With file]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_FILE) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_FILE, [1], [With file]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include direct create support)
+ AC_ARG_ENABLE(creat, [ --disable-creat disable direct create support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_CREAT) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_CREAT, [1], [With creat]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_CREAT) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_CREAT, [1], [With creat]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include gopen support)
+ AC_ARG_ENABLE(gopen, [ --disable-gopen disable open for UNIX socket support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_GOPEN) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_GOPEN, [1], [With gopen]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_GOPEN) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_GOPEN, [1], [With gopen]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include explicit pipe support)
+ AC_ARG_ENABLE(pipe, [ --disable-pipe disable pipe support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_PIPE) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_PIPE, [1], [With pipe]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_PIPE) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_PIPE, [1], [With pipe]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include explicit termios support)
+ AC_ARG_ENABLE(termios, [ --disable-termios disable termios support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_TERMIOS) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_TERMIOS, [1], [With termios]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_TERMIOS) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_TERMIOS, [1], [With termios]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include UNIX socket support)
+ AC_ARG_ENABLE(unix, [ --disable-unix disable UNIX domain socket support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_UNIX) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_UNIX, [1], [With unix]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_UNIX) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_UNIX, [1], [With unix]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include abstract UNIX socket support)
+ AC_ARG_ENABLE(abstract_unixsocket, [ --disable-abstract-unixsocket disable abstract UNIX domain socket support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_ABSTRACT_UNIXSOCKET) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_ABSTRACT_UNIXSOCKET, [1], [With abstract unix socket]) AC_MSG_RESULT(yes);;
+ esac],
+ [ case "`uname`" in
+ Linux)
+- AC_DEFINE(WITH_ABSTRACT_UNIXSOCKET) AC_MSG_RESULT(yes);;
++ AC_DEFINE(WITH_ABSTRACT_UNIXSOCKET, [1], [With abstract unix socket]) AC_MSG_RESULT(yes);;
+ *)
+ AC_MSG_RESULT(no);;
+ esac])
+@@ -194,9 +194,9 @@
+ AC_ARG_ENABLE(ip4, [ --disable-ip4 disable IPv4 support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_IP4) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_IP4, [1], [with ipv4]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_IP4) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_IP4, [1], [with ipv4]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include IPv6 support)
+ AC_ARG_ENABLE(ip6, [ --disable-ip6 disable IPv6 support],
+@@ -207,7 +207,7 @@
+ [ AC_MSG_RESULT(yes); WITH_IP6=1 ])
+ if test "$WITH_IP6"; then
+ AC_CHECK_HEADERS([netinet/ip6.h],
+- [AC_DEFINE(HAVE_NETINET_IP6_H) AC_DEFINE(WITH_IP6)],
++ [AC_DEFINE(HAVE_NETINET_IP6_H) AC_DEFINE(WITH_IP6, [1], [with ipv6])],
+ [AC_MSG_WARN([include file netinet/ip6.h not found, disabling IP6])],
+ [AC_INCLUDES_DEFAULT
+ #ifdef HAVE_NETINET_IN_H
+@@ -219,17 +219,17 @@
+ AC_ARG_ENABLE(rawip, [ --disable-rawip disable raw IP support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_RAWIP) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_RAWIP, [1], [With reawip]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_RAWIP) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_RAWIP, [1], [With rawip]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include generic socket support)
+ AC_ARG_ENABLE(rawsocket, [ --disable-genericsocket disable generic socket support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_GENERICSOCKET) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_GENERICSOCKET, [1], [With genericsocket]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_GENERICSOCKET) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_GENERICSOCKET, [1], [With genericsocket]) AC_MSG_RESULT(yes)])
+ AC_MSG_CHECKING(whether to include raw network interface support)
+ AC_ARG_ENABLE(interface, [ --disable-interface disable network interface support],
+ [case "$enableval" in
+@@ -239,35 +239,35 @@
+ [AC_MSG_RESULT(yes); WITH_INTERFACE=1 ])
+ if test "$WITH_INTERFACE"; then
+ AC_CHECK_HEADER(netpacket/packet.h,
+- AC_DEFINE(HAVE_NETPACKET_PACKET_H),
++ AC_DEFINE(HAVE_NETPACKET_PACKET_H, [1], [Has packet.h]),
+ [WITH_INTERFACE=;
+ AC_MSG_WARN([include file netpacket/packet.h not found, disabling interface])])
+ fi
+ if test "$WITH_INTERFACE"; then
+ AC_CHECK_HEADER(netinet/if_ether.h,
+- AC_DEFINE(HAVE_NETINET_IF_ETHER_H),
++ AC_DEFINE(HAVE_NETINET_IF_ETHER_H, [1], [Has if_ether.h]),
+ [WITH_INTERFACE=;
+ AC_MSG_WARN([include file netinet/if_ether.h not found, disabling interface])])
+ fi
+ if test "$WITH_INTERFACE"; then
+- AC_DEFINE(WITH_INTERFACE)
++ AC_DEFINE(WITH_INTERFACE, [1], [Wither interface])
+ fi
+
+ AC_MSG_CHECKING(whether to include TCP support)
+ AC_ARG_ENABLE(tcp, [ --disable-tcp disable TCP support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_TCP) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_TCP, [1], [With TCP]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_TCP) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_TCP, [1], [With TCP]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include UDP support)
+ AC_ARG_ENABLE(udp, [ --disable-udp disable UDP support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_UDP) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_UDP, [1], [With UDP]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_UDP) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_UDP, [1], [With UDP]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include SCTP support)
+ AC_ARG_ENABLE(sctp, [ --disable-sctp disable SCTP support],
+@@ -287,7 +287,7 @@
+ [sc_cv_define_ipproto_sctp=no])])
+ AC_MSG_RESULT($sc_cv_define_ipproto_sctp)
+ if test $sc_cv_define_ipproto_sctp = yes; then
+- AC_DEFINE(WITH_SCTP)
++ AC_DEFINE(WITH_SCTP, [1], [With SCTP])
+ else
+ AC_MSG_WARN([IPPROTO_SCTP undefined, disabling SCTP support])
+ fi
+@@ -297,65 +297,65 @@
+ AC_ARG_ENABLE(listen, [ --disable-listen disable listen support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_LISTEN) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_LISTEN, [1], [With listen]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_LISTEN) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_LISTEN, [1], [With listen]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include socks4 support)
+ AC_ARG_ENABLE(socks4, [ --disable-socks4 disable socks4 support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_SOCKS4) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_SOCKS4, [1], [With socks]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_SOCKS4) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_SOCKS4, [1], [With socks]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include socks4a support)
+ AC_ARG_ENABLE(socks4a, [ --disable-socks4a disable socks4a support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_SOCKS4A) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_SOCKS4A, [1], [With socks4a]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_SOCKS4A) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_SOCKS4A, [1], [With socks4a]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include proxy connect support)
+ AC_ARG_ENABLE(proxy, [ --disable-proxy disable proxy connect support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_PROXY) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_PROXY, [1], [With proxy]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_PROXY) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_PROXY, [1], [With proxy]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include exec support)
+ AC_ARG_ENABLE(exec, [ --disable-exec disable exec support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_EXEC) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_EXEC, [1], [With exec]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_EXEC) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_EXEC, [1], [With exec]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING([whether to include system (shell) support])
+ AC_ARG_ENABLE(system, [ --disable-system disable system (shell) support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_SYSTEM) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_SYSTEM, [1], [With system]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_SYSTEM) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_SYSTEM, [1], [With system]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include pty address support)
+ AC_ARG_ENABLE(pty, [ --disable-pty disable pty support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_PTY) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_PTY, [1], [With pty]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_PTY) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_PTY, [1], [With pty]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include ext2 fs attributes support)
+ AC_ARG_ENABLE(ext2, [ --disable-ext2 disable ext2 fs attributes support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_EXT2) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_EXT2, [1], [With ext2]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_EXT2) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_EXT2, [1], [With ext2]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(whether to include readline support)
+ AC_ARG_ENABLE(readline, [ --disable-readline disable readline support],
+@@ -400,10 +400,10 @@
+
+ if test -n "$sc_usable_readline_found"; then
+ AC_MSG_RESULT(yes)
+- AC_DEFINE(HAVE_READLINE_READLINE_H,1)
+- AC_DEFINE(HAVE_READLINE_HISTORY_H,1)
+- AC_DEFINE(HAVE_LIBREADLINE,1)
+- AC_DEFINE(WITH_READLINE,1)
++ AC_DEFINE(HAVE_READLINE_READLINE_H,1, [have readline])
++ AC_DEFINE(HAVE_READLINE_HISTORY_H,1, [have history])
++ AC_DEFINE(HAVE_LIBREADLINE,1, [have readline])
++ AC_DEFINE(WITH_READLINE,1, [with readline])
+ break
+ else
+ AC_MSG_RESULT(no)
+@@ -446,7 +446,7 @@
+ done])
+ ])
+ if test "$sc_cv_have_openssl_ssl_h" = "yes"; then
+- AC_DEFINE(HAVE_OPENSSL_SSL_H)
++ AC_DEFINE(HAVE_OPENSSL_SSL_H, [1], [have openssl.h])
+ fi
+ AC_MSG_NOTICE(checked for openssl/ssl.h... $sc_cv_have_openssl_ssl_h)
+ fi # end checking for openssl/ssl.h
+@@ -478,7 +478,7 @@
+ ]
+ )
+ if test "$sc_cv_have_libssl" = 'yes'; then
+- AC_DEFINE(HAVE_LIBSSL)
++ AC_DEFINE(HAVE_LIBSSL, [1], [libssl])
+ fi
+ AC_MSG_RESULT($sc_cv_have_libssl)
+ fi
+@@ -506,7 +506,7 @@
+ #fi
+ if test -n "$WITH_OPENSSL"; then
+ if test "$sc_cv_have_openssl_ssl_h" = "yes" -a "$sc_cv_have_libssl" = "yes"; then
+- AC_DEFINE(WITH_OPENSSL)
++ AC_DEFINE(WITH_OPENSSL, [1], [With openssl])
+ else
+ AC_MSG_WARN([not all components of OpenSSL found, disabling it]);
+ fi
+@@ -552,7 +552,7 @@
+ )]
+ )
+ if test "$sv_cv_have_openssl_fips_h" = "yes"; then
+- AC_DEFINE(HAVE_OPENSSL_FIPS_H)
++ AC_DEFINE(HAVE_OPENSSL_FIPS_H, [1], [OpenSSL fips.h])
+ fi
+ AC_MSG_NOTICE(checked for openssl/fips.h... $sc_cv_have_openssl_ssl_h)
+ fi
+@@ -583,15 +583,15 @@
+ ]
+ )
+ if test "$sc_cv_have_libcrypto" = 'yes'; then
+- AC_DEFINE(HAVE_LIBCRYPTO)
++ AC_DEFINE(HAVE_LIBCRYPTO, [1], [libcrypto])
+ fi
+ AC_MSG_RESULT($sc_cv_have_libcrypto)
+ fi
+
+ if test -n "$WITH_FIPS"; then
+ if test "$sc_cv_have_openssl_fips_h" = 'yes' -a "$sc_cv_have_libcrypto" = 'yes'; then
+- AC_DEFINE(WITH_FIPS)
+- AC_DEFINE(OPENSSL_FIPS)
++ AC_DEFINE(WITH_FIPS, [1], [With fips])
++ AC_DEFINE(OPENSSL_FIPS, [1], [openssl fips])
+ else
+ AC_MSG_WARN([not all components of OpenSSL FIPS found, disabling it]);
+ fi
+@@ -612,17 +612,17 @@
+ fi
+ #
+ if test -n "$WITH_TUN"; then
+- AC_DEFINE(WITH_TUN)
++ AC_DEFINE(WITH_TUN, [1], [with tun])
+ fi
+
+ AC_MSG_CHECKING(whether to include system call tracing)
+ AC_ARG_ENABLE(sycls, [ --disable-sycls disable system call tracing],
+ [case "$enableval" in
+ no) SYCLS=""; SSLCLS=""; AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_SYCLS)
++ *) AC_DEFINE(WITH_SYCLS, [1], [syscls])
+ SYCLS="sycls.c"; SSLCLS="sslcls.c"; AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_SYCLS)
++ [AC_DEFINE(WITH_SYCLS, [1], [syscls])
+ SYCLS="sycls.c"; SSLCLS="sslcls.c"; AC_MSG_RESULT(yes)])
+ AC_SUBST(SYCLS)
+ AC_SUBST(SSLCLS)
+@@ -631,31 +631,31 @@
+ AC_ARG_ENABLE(filan, [ --disable-filan disable file descriptor analyzer],
+ [case "$enableval" in
+ no) FILAN=""; AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_FILAN) FILAN="filan.c"; AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_FILAN, [1], [filan]) FILAN="filan.c"; AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_FILAN) FILAN="filan.c"; AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_FILAN, [1], [filan]) FILAN="filan.c"; AC_MSG_RESULT(yes)])
+ AC_SUBST(FILAN)
+
+ AC_MSG_CHECKING(whether to include retry support)
+ AC_ARG_ENABLE(retry, [ --disable-retry disable retry support],
+ [case "$enableval" in
+ no) AC_MSG_RESULT(no);;
+- *) AC_DEFINE(WITH_RETRY) AC_MSG_RESULT(yes);;
++ *) AC_DEFINE(WITH_RETRY, [1], [retry]) AC_MSG_RESULT(yes);;
+ esac],
+- [AC_DEFINE(WITH_RETRY) AC_MSG_RESULT(yes)])
++ [AC_DEFINE(WITH_RETRY, [1], [retry]) AC_MSG_RESULT(yes)])
+
+ AC_MSG_CHECKING(included message level)
+ AC_ARG_ENABLE(msglevel, [ --enable-msglevel=N set max verbosity to debug,info,notice,warn,error,fatal],
+ [case "$enableval" in
+- debug) AC_DEFINE(WITH_MSGLEVEL,0) AC_MSG_RESULT(debug);;
+- info) AC_DEFINE(WITH_MSGLEVEL,1) AC_MSG_RESULT(info);;
+- notice) AC_DEFINE(WITH_MSGLEVEL,2) AC_MSG_RESULT(notice);;
+- warn) AC_DEFINE(WITH_MSGLEVEL,3) AC_MSG_RESULT(warn);;
+- error) AC_DEFINE(WITH_MSGLEVEL,4) AC_MSG_RESULT(error);;
+- fatal) AC_DEFINE(WITH_MSGLEVEL,5) AC_MSG_RESULT(fatal);;
+- *) AC_DEFINE(WITH_MSGLEVEL,0) AC_MSG_RESULT(debug);;
++ debug) AC_DEFINE(WITH_MSGLEVEL,0, [msglevel]) AC_MSG_RESULT(debug);;
++ info) AC_DEFINE(WITH_MSGLEVEL,1, [msglevel]) AC_MSG_RESULT(info);;
++ notice) AC_DEFINE(WITH_MSGLEVEL,2, [msglevel]) AC_MSG_RESULT(notice);;
++ warn) AC_DEFINE(WITH_MSGLEVEL,3, [msglevel]) AC_MSG_RESULT(warn);;
++ error) AC_DEFINE(WITH_MSGLEVEL,4, [msglevel]) AC_MSG_RESULT(error);;
++ fatal) AC_DEFINE(WITH_MSGLEVEL,5, [msglevel]) AC_MSG_RESULT(fatal);;
++ *) AC_DEFINE(WITH_MSGLEVEL,0, [msglevel]) AC_MSG_RESULT(debug);;
+ esac],
+- [AC_DEFINE(WITH_MSGLEVEL,0) AC_MSG_RESULT(debug)])
++ [AC_DEFINE(WITH_MSGLEVEL,0, [msglevel]) AC_MSG_RESULT(debug)])
+
+ #AC_SUBST(V_INCL)
+
+@@ -672,7 +672,7 @@
+ AC_HEADER_TIME
+
+ dnl Check for extra realtime library (for Solaris)
+-AC_CHECK_FUNC(nanosleep, AC_DEFINE(HAVE_NANOSLEEP), AC_CHECK_LIB(rt, nanosleep, [LIBS="-lrt $LIBS"; AC_DEFINE(HAVE_NANOSLEEP)]))
++AC_CHECK_FUNC(nanosleep, AC_DEFINE(HAVE_NANOSLEEP, [1], [have nanosleep]), AC_CHECK_LIB(rt, nanosleep, [LIBS="-lrt $LIBS"; AC_DEFINE(HAVE_NANOSLEEP, [1], [have nanosleep])]))
+ #AC_CHECK_FUNC(nanosleep, , AC_CHECK_LIB(rt, nanosleep))
+
+ dnl Checks for library functions.
+@@ -694,7 +694,7 @@
+ [sc_cv_type_longlong=yes],
+ [sc_cv_type_longlong=no])])
+ if test $sc_cv_type_longlong = yes; then
+- AC_DEFINE(HAVE_TYPE_LONGLONG)
++ AC_DEFINE(HAVE_TYPE_LONGLONG, [1], [have type long long])
+ fi
+ AC_MSG_RESULT($sc_cv_type_longlong)
+
+@@ -710,7 +710,7 @@
+ [sc_cv_type_socklen=yes],
+ [sc_cv_type_socklen=no])])
+ if test $sc_cv_type_socklen = yes; then
+- AC_DEFINE(HAVE_TYPE_SOCKLEN)
++ AC_DEFINE(HAVE_TYPE_SOCKLEN, [1], [Has Socklen])
+ fi
+ AC_MSG_RESULT($sc_cv_type_socklen)
+
+@@ -720,7 +720,7 @@
+ [sc_cv_type_stat64=yes],
+ [sc_cv_type_stat64=no])])
+ if test $sc_cv_type_stat64 = yes; then
+- AC_DEFINE(HAVE_TYPE_STAT64)
++ AC_DEFINE(HAVE_TYPE_STAT64, [1], [Has stat64])
+ fi
+ AC_MSG_RESULT($sc_cv_type_stat64)
+
+@@ -730,7 +730,7 @@
+ [sc_cv_type_off64=yes],
+ [sc_cv_type_off64=no])])
+ if test $sc_cv_type_off64 = yes; then
+- AC_DEFINE(HAVE_TYPE_OFF64)
++ AC_DEFINE(HAVE_TYPE_OFF64, [1], [have off64])
+ fi
+ AC_MSG_RESULT($sc_cv_type_off64)
+
+@@ -740,7 +740,7 @@
+ [sc_cv_type_sighandler=yes],
+ [sc_cv_type_sighandler=no])])
+ if test $sc_cv_type_sighandler = yes; then
+- AC_DEFINE(HAVE_TYPE_SIGHANDLER)
++ AC_DEFINE(HAVE_TYPE_SIGHANDLER, [1], [have type sighandler])
+ fi
+ AC_MSG_RESULT($sc_cv_type_socklen)
+
+@@ -758,7 +758,7 @@
+ [sc_cv_type_uint8=yes],
+ [sc_cv_type_uint8=no])])
+ if test $sc_cv_type_uint8 = yes; then
+- AC_DEFINE(HAVE_TYPE_UINT8)
++ AC_DEFINE(HAVE_TYPE_UINT8, [1], [have uint8])
+ fi
+ AC_MSG_RESULT($sc_cv_type_uint8)
+
+@@ -776,7 +776,7 @@
+ [sc_cv_type_uint16=yes],
+ [sc_cv_type_uint16=no])])
+ if test $sc_cv_type_uint16 = yes; then
+- AC_DEFINE(HAVE_TYPE_UINT16)
++ AC_DEFINE(HAVE_TYPE_UINT16, [1], [have uint16t])
+ fi
+ AC_MSG_RESULT($sc_cv_type_uint16)
+
+@@ -794,7 +794,7 @@
+ [sc_cv_type_uint32=yes],
+ [sc_cv_type_uint32=no])])
+ if test $sc_cv_type_uint32 = yes; then
+- AC_DEFINE(HAVE_TYPE_UINT32)
++ AC_DEFINE(HAVE_TYPE_UINT32, [1], [have uint32])
+ fi
+ AC_MSG_RESULT($sc_cv_type_uint32)
+
+@@ -812,7 +812,7 @@
+ [sc_cv_type_uint64=yes],
+ [sc_cv_type_uint64=no])])
+ if test $sc_cv_type_uint64 = yes; then
+- AC_DEFINE(HAVE_TYPE_UINT64)
++ AC_DEFINE(HAVE_TYPE_UINT64, [1], [have uint64] )
+ fi
+ AC_MSG_RESULT($sc_cv_type_uint64)
+
+@@ -834,7 +834,7 @@
+ #include <sys/select.h>
+ #endif],
+ [fd_set s; s.fds_bits[0]=0;],
+-[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FDS_BITS)],
++[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FDS_BITS, [1], [have fds bits])],
+ [AC_MSG_RESULT(no);])
+
+ AC_MSG_CHECKING(for sa_family_t)
+@@ -844,7 +844,7 @@
+ [sc_cv_type_sa_family_t=yes],
+ [sc_cv_type_sa_family_t=no])])
+ if test $sc_cv_type_sa_family_t = yes; then
+- AC_DEFINE(HAVE_TYPE_SA_FAMILY_T)
++ AC_DEFINE(HAVE_TYPE_SA_FAMILY_T, [1], [have sa family_t type])
+ fi
+ AC_MSG_RESULT($sc_cv_type_sa_family_t)
+
+@@ -854,7 +854,7 @@
+ [sc_cv_struct_sigaction_sa_sigaction=yes],
+ [sc_cv_struct_sigaction_sa_sigaction=no])])
+ if test $sc_cv_struct_sigaction_sa_sigaction = yes; then
+- AC_DEFINE(HAVE_STRUCT_SIGACTION_SA_SIGACTION)
++ AC_DEFINE(HAVE_STRUCT_SIGACTION_SA_SIGACTION, [1], [sigaction])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_sigaction_sa_sigaction)
+
+@@ -862,11 +862,11 @@
+ AC_MSG_CHECKING(for termios.c_ispeed)
+ AC_CACHE_VAL(sc_cv_termios_ispeed,
+ [AC_TRY_COMPILE([#include <termios.h>],
+-[struct termios t; t.c_ispeed=0;],
++[struct termios t; t.c_ispeed=ISPEED_OFFSET; t.c_ospeed=OSPEED_OFFSET;],
+ [sc_cv_termios_ispeed=yes],
+ [sc_cv_termios_ispeed=no])])
+ if test $sc_cv_termios_ispeed = yes; then
+- AC_DEFINE(HAVE_TERMIOS_ISPEED)
++ AC_DEFINE(HAVE_TERMIOS_ISPEED, [1], [have ispeed])
+ fi
+ AC_MSG_RESULT($sc_cv_termios_ispeed)
+
+@@ -897,7 +897,7 @@
+ LIBS="$LIBS1"
+ AC_MSG_RESULT($ac_cv_ispeed_offset)
+ if test $ac_cv_ispeed_offset -ge 0; then
+- AC_DEFINE_UNQUOTED(ISPEED_OFFSET, $ac_cv_ispeed_offset)
++ AC_DEFINE_UNQUOTED(ISPEED_OFFSET, $ac_cv_ispeed_offset, [have ispeed])
+ fi
+ fi
+
+@@ -916,7 +916,7 @@
+ )]
+ )])
+ if test $ac_cv_svid3 = yes; then
+- AC_DEFINE(_SVID3)
++ AC_DEFINE(_SVID3, [1], [svid3])
+ fi
+ AC_MSG_RESULT($ac_cv_svid3)
+
+@@ -931,7 +931,7 @@
+ [sc_cv_struct_timespec=yes],
+ [sc_cv_struct_timespec=no])])
+ if test $sc_cv_struct_timespec = yes; then
+- AC_DEFINE(HAVE_STRUCT_TIMESPEC)
++ AC_DEFINE(HAVE_STRUCT_TIMESPEC, [1], [struct timespec])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_timespec)
+
+@@ -944,7 +944,7 @@
+ [sc_cv_struct_linger=yes],
+ [sc_cv_struct_linger=no])])
+ if test $sc_cv_struct_linger = yes; then
+- AC_DEFINE(HAVE_STRUCT_LINGER)
++ AC_DEFINE(HAVE_STRUCT_LINGER, [1], [struct linger])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_linger)
+
+@@ -958,7 +958,7 @@
+ [sc_cv_struct_ip_mreq=yes],
+ [sc_cv_struct_ip_mreq=no])])
+ if test $sc_cv_struct_ip_mreq = yes; then
+- AC_DEFINE(HAVE_STRUCT_IP_MREQ)
++ AC_DEFINE(HAVE_STRUCT_IP_MREQ, [1], [have struct ip mreq])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_ip_mreq)
+
+@@ -971,7 +971,7 @@
+ [sc_cv_struct_ip_mreqn=yes],
+ [sc_cv_struct_ip_mreqn=no])])
+ if test $sc_cv_struct_ip_mreqn = yes; then
+- AC_DEFINE(HAVE_STRUCT_IP_MREQN)
++ AC_DEFINE(HAVE_STRUCT_IP_MREQN, [1], [have struct ip mreqn])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_ip_mreqn)
+
+@@ -984,7 +984,7 @@
+ [sc_cv_struct_ipv6_mreq=yes],
+ [sc_cv_struct_ipv6_mreq=no])])
+ if test $sc_cv_struct_ipv6_mreq = yes; then
+- AC_DEFINE(HAVE_STRUCT_IPV6_MREQ)
++ AC_DEFINE(HAVE_STRUCT_IPV6_MREQ, [1], [have struct ipv5 mreq])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_ipv6_mreq)
+
+@@ -998,7 +998,7 @@
+ [sc_cv_struct_ifreq=yes],
+ [sc_cv_struct_ifreq=no])])
+ if test $sc_cv_struct_ifreq = yes; then
+- AC_DEFINE(HAVE_STRUCT_IFREQ)
++ AC_DEFINE(HAVE_STRUCT_IFREQ, [1], [have struct ifreq])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_ifreq)
+
+@@ -1013,7 +1013,7 @@
+ [sc_cv_struct_ifreq_ifr_index=yes],
+ [sc_cv_struct_ifreq_ifr_index=no])])
+ if test $sc_cv_struct_ifreq_ifr_index = yes; then
+- AC_DEFINE(HAVE_STRUCT_IFREQ_IFR_INDEX)
++ AC_DEFINE(HAVE_STRUCT_IFREQ_IFR_INDEX, [1], [have struct ifreq ifr])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_ifreq_ifr_index)
+
+@@ -1028,7 +1028,7 @@
+ [sc_cv_struct_ifreq_ifr_ifindex=yes],
+ [sc_cv_struct_ifreq_ifr_ifindex=no])])
+ if test $sc_cv_struct_ifreq_ifr_ifindex = yes; then
+- AC_DEFINE(HAVE_STRUCT_IFREQ_IFR_IFINDEX)
++ AC_DEFINE(HAVE_STRUCT_IFREQ_IFR_IFINDEX, [1], [have struct ifreq ifindex])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_ifreq_ifr_ifindex)
+
+@@ -1043,7 +1043,7 @@
+ [sc_cv_struct_sockaddr_salen=yes],
+ [sc_cv_struct_sockaddr_salen=no])])
+ if test $sc_cv_struct_sockaddr_salen = yes; then
+- AC_DEFINE(HAVE_STRUCT_SOCKADDR_SALEN)
++ AC_DEFINE(HAVE_STRUCT_SOCKADDR_SALEN, [1], [sockaddr salen])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_sockaddr_salen)
+
+@@ -1054,31 +1054,31 @@
+ #include <netinet/in.h>],
+ [struct sockaddr_in6 sa6;sa6.sin6_addr.s6_addr[0]=0;],
+ [AC_MSG_RESULT(s6_addr);
+- AC_DEFINE(HAVE_IP6_SOCKADDR, 0)],
++ AC_DEFINE(HAVE_IP6_SOCKADDR, 0, [ip6 sockaddr])],
+ [AC_TRY_COMPILE([#include <sys/types.h>
+ #include <netinet/in.h>],
+ [struct sockaddr_in6 sa6;sa6.sin6_addr.u6_addr.u6_addr16[0]=0;],
+ [AC_MSG_RESULT(u6_addr.u6_addr16);
+- AC_DEFINE(HAVE_IP6_SOCKADDR, 1)],
++ AC_DEFINE(HAVE_IP6_SOCKADDR, 1, [ip6 sockaddr])],
+ [AC_TRY_COMPILE([#include <sys/types.h>
+ #include <netinet/in.h>],
+ [struct sockaddr_in6 sa6;sa6.sin6_addr.u6_addr16[0]=0;],
+- [AC_MSG_RESULT(u6_addr16); AC_DEFINE(HAVE_IP6_SOCKADDR, 2)],
++ [AC_MSG_RESULT(u6_addr16); AC_DEFINE(HAVE_IP6_SOCKADDR, 2, [ip6 sockaddr])],
+ [AC_TRY_COMPILE([#include <sys/types.h>
+ #include <netinet/in.h>],
+ [struct sockaddr_in6 sa6;sa6.sin6_addr.in6_u.u6_addr16[0]=0;],
+ [AC_MSG_RESULT(in6_u.u6_addr16);
+- AC_DEFINE(HAVE_IP6_SOCKADDR, 3)],
++ AC_DEFINE(HAVE_IP6_SOCKADDR, 3, [ip6 sockaddr])],
+ [AC_TRY_COMPILE([#include <sys/types.h>
+ #include <netinet/in.h>],
+ [struct sockaddr_in6 sa6;sa6.sin6_addr._S6_un._S6_u32[0]=0;],
+ [AC_MSG_RESULT(_S6_un._S6_u32);
+- AC_DEFINE(HAVE_IP6_SOCKADDR, 4)],
++ AC_DEFINE(HAVE_IP6_SOCKADDR, 4, [ip6 sockaddr])],
+ [AC_TRY_COMPILE([#include <sys/types.h>
+ #include <netinet/in.h>],
+ [struct sockaddr_in6 sa6;sa6.sin6_addr.__u6_addr.__u6_addr32[0]=0;],
+ [AC_MSG_RESULT(__u6_addr.__u6_addr32);
+- AC_DEFINE(HAVE_IP6_SOCKADDR, 5)],
++ AC_DEFINE(HAVE_IP6_SOCKADDR, 5, [ip6 sockaddr])],
+
+ [AC_MSG_RESULT([none or unknown])]
+ )])])])])])
+@@ -1090,7 +1090,7 @@
+ [sc_cv_struct_iovec=yes],
+ [sc_cv_struct_iovec=no])])
+ if test $sc_cv_struct_iovec = yes; then
+- AC_DEFINE(HAVE_STRUCT_IOVEC)
++ AC_DEFINE(HAVE_STRUCT_IOVEC, [1], [have struct iovec])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_iovec)
+
+@@ -1103,7 +1103,7 @@
+ [sc_cv_struct_msghdr_msgcontrol=yes],
+ [sc_cv_struct_msghdr_msgcontrol=no])])
+ if test $sc_cv_struct_msghdr_msgcontrol = yes; then
+- AC_DEFINE(HAVE_STRUCT_MSGHDR_MSGCONTROL)
++ AC_DEFINE(HAVE_STRUCT_MSGHDR_MSGCONTROL, [1], [have struct msgcontrol])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_msghdr_msgcontrol)
+
+@@ -1116,7 +1116,7 @@
+ [sc_cv_struct_msghdr_msgcontrollen=yes],
+ [sc_cv_struct_msghdr_msgcontrollen=no])])
+ if test $sc_cv_struct_msghdr_msgcontrollen = yes; then
+- AC_DEFINE(HAVE_STRUCT_MSGHDR_MSGCONTROLLEN)
++ AC_DEFINE(HAVE_STRUCT_MSGHDR_MSGCONTROLLEN, [1], [have struct msghdr msgcontrollen])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_msghdr_msgcontrollen)
+
+@@ -1129,7 +1129,7 @@
+ [sc_cv_struct_msghdr_msgflags=yes],
+ [sc_cv_struct_msghdr_msgflags=no])])
+ if test $sc_cv_struct_msghdr_msgflags = yes; then
+- AC_DEFINE(HAVE_STRUCT_MSGHDR_MSGFLAGS)
++ AC_DEFINE(HAVE_STRUCT_MSGHDR_MSGFLAGS, [1], [msgflags])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_msghdr_msgflags)
+
+@@ -1142,7 +1142,7 @@
+ [sc_cv_struct_cmsghdr=yes],
+ [sc_cv_struct_cmsghdr=no])])
+ if test $sc_cv_struct_cmsghdr = yes; then
+- AC_DEFINE(HAVE_STRUCT_CMSGHDR)
++ AC_DEFINE(HAVE_STRUCT_CMSGHDR, [1], [have cmshdr])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_cmsghdr)
+
+@@ -1155,7 +1155,7 @@
+ [sc_cv_struct_in_pktinfo=yes],
+ [sc_cv_struct_in_pktinfo=no])])
+ if test $sc_cv_struct_in_pktinfo = yes; then
+- AC_DEFINE(HAVE_STRUCT_IN_PKTINFO)
++ AC_DEFINE(HAVE_STRUCT_IN_PKTINFO, [1], [pktinfo])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_in_pktinfo)
+
+@@ -1170,7 +1170,7 @@
+ [sc_cv_struct_ip_ip_hl=yes],
+ [sc_cv_struct_ip_ip_hl=no])])
+ if test $sc_cv_struct_ip_ip_hl = yes; then
+- AC_DEFINE(HAVE_STRUCT_IP_IP_HL)
++ AC_DEFINE(HAVE_STRUCT_IP_IP_HL, [1], [foo])
+ fi
+ AC_MSG_RESULT($sc_cv_struct_ip_ip_hl)
+
+@@ -1178,19 +1178,19 @@
+ dnl Library function checks
+
+ dnl Check sigaction()
+-AC_CHECK_FUNC(sigaction, AC_DEFINE(HAVE_SIGACTION))
++AC_CHECK_FUNC(sigaction, AC_DEFINE(HAVE_SIGACTION, [1], [foo]))
+
+ dnl Check for 64bit versions of system calls
+-AC_CHECK_FUNC(stat64, AC_DEFINE(HAVE_STAT64))
+-AC_CHECK_FUNC(fstat64, AC_DEFINE(HAVE_FSTAT64))
+-AC_CHECK_FUNC(lstat64, AC_DEFINE(HAVE_LSTAT64))
+-AC_CHECK_FUNC(lseek64, AC_DEFINE(HAVE_LSEEK64))
+-AC_CHECK_FUNC(truncate64, AC_DEFINE(HAVE_TRUNCATE64))
+-AC_CHECK_FUNC(ftruncate64, AC_DEFINE(HAVE_FTRUNCATE64))
+-
+-AC_CHECK_FUNC(strtoll, AC_DEFINE(HAVE_STRTOLL))
+-AC_CHECK_FUNC(hstrerror, AC_DEFINE(HAVE_HSTRERROR))
+-AC_CHECK_FUNC(inet_ntop, AC_DEFINE(HAVE_INET_NTOP))
++AC_CHECK_FUNC(stat64, AC_DEFINE(HAVE_STAT64, [1], [foo]))
++AC_CHECK_FUNC(fstat64, AC_DEFINE(HAVE_FSTAT64, [1], [foo]))
++AC_CHECK_FUNC(lstat64, AC_DEFINE(HAVE_LSTAT64, [1], [foo]))
++AC_CHECK_FUNC(lseek64, AC_DEFINE(HAVE_LSEEK64, [1], [foo]))
++AC_CHECK_FUNC(truncate64, AC_DEFINE(HAVE_TRUNCATE64, [1], [foo]))
++AC_CHECK_FUNC(ftruncate64, AC_DEFINE(HAVE_FTRUNCATE64, [1], [foo]))
++
++AC_CHECK_FUNC(strtoll, AC_DEFINE(HAVE_STRTOLL, [1], [foo]))
++AC_CHECK_FUNC(hstrerror, AC_DEFINE(HAVE_HSTRERROR, [1], [foo]))
++AC_CHECK_FUNC(inet_ntop, AC_DEFINE(HAVE_INET_NTOP, [1], [foo]))
+
+ #if test "$ac_cv_func_hstrerror" = "yes"; then
+ # AC_MSG_CHECKING(if _XOPEN_SOURCE_EXTENDED is helpful)
+@@ -1213,25 +1213,26 @@
+
+ dnl Search for openpty()
+ # MacOS
+-AC_CHECK_FUNC(openpty, AC_DEFINE(HAVE_OPENPTY))
++AC_CHECK_FUNC(openpty, AC_DEFINE(HAVE_OPENPTY, [1], [foo]))
+ # AIX
+ AC_CHECK_LIB(bsd, openpty,
+- [LIBS="-lbsd $LIBS"; AC_DEFINE(HAVE_OPENPTY)])
++ [LIBS="-lbsd $LIBS"; AC_DEFINE(HAVE_OPENPTY, [1], [foo])])
+ # Linux 2.4
+ AC_CHECK_LIB(util, openpty,
+- [LIBS="-lutil $LIBS"; AC_DEFINE(HAVE_OPENPTY)])
++ [LIBS="-lutil $LIBS"; AC_DEFINE(HAVE_OPENPTY, [1], [foo])])
++
+
+ dnl Search for flock()
+ # with Linux it's in libc, with AIX in libbsd
+-AC_CHECK_FUNC(flock, AC_DEFINE(HAVE_FLOCK),
++AC_CHECK_FUNC(flock, AC_DEFINE(HAVE_FLOCK, [1], [have flock]),
+ AC_CHECK_LIB(bsd, flock, [LIBS="-lbsd $LIBS"]))
+
+ dnl Search for setenv()
+-AC_CHECK_FUNC(setenv, AC_DEFINE(HAVE_SETENV),
++AC_CHECK_FUNC(setenv, AC_DEFINE(HAVE_SETENV, [1], [have setenv]),
+ AC_CHECK_LIB(isode, setenv, [LIBS="-lisode $LIBS"]))
+
+ dnl Search for unsetenv()
+-AC_CHECK_FUNC(unsetenv, AC_DEFINE(HAVE_UNSETENV))
++AC_CHECK_FUNC(unsetenv, AC_DEFINE(HAVE_UNSETENV, [1], [have unsetenv]))
+
+
+ dnl Run time checks
+@@ -1250,7 +1251,7 @@
+ [ac_cv_have_z_modifier=no],
+ [ac_cv_have_z_modifier=no])])
+ if test $ac_cv_have_z_modifier = yes; then
+- AC_DEFINE(HAVE_FORMAT_Z)
++ AC_DEFINE(HAVE_FORMAT_Z, [1], [have format z])
+ fi
+ AC_MSG_RESULT($ac_cv_have_z_modifier)
+
+@@ -1289,7 +1290,8 @@
+ [AC_MSG_RESULT(please determine $1_SHIFT manually)]
+ )
+ LIBS="$LIBS1"])
+-AC_DEFINE_UNQUOTED($1_SHIFT, ${$2})
++SHIFT_NAME="$1"_SHIFT
++AC_DEFINE_UNQUOTED($SHIFT_NAME, ${$2}, [foo])
+ ])
+
+ AC_SHIFT_OFFSET(CRDLY, sc_cv_sys_crdly_shift)
+@@ -1326,7 +1328,7 @@
+ [$4="0 /* unknown, taking default */"
+ ]) ]) ]) ]) ]) ]) ]) ])
+ CFLAGS="$CFLAGS1" ])
+-AC_DEFINE_UNQUOTED($3, ${$4})
++AC_DEFINE_UNQUOTED($3, ${$4}, [foo])
+ ])
+
+ dnl find what physical type (basic C type) describes the given struct or union
+@@ -1358,7 +1360,7 @@
+ [$5="0 /* unknown, taking default */"
+ ]) ]) ]) ]) ]) ]) ]) ])
+ CFLAGS="$CFLAGS1" ])
+-AC_DEFINE_UNQUOTED($4, ${$5})
++AC_DEFINE_UNQUOTED($4, ${$5}, [foo])
+ ])
+
+ AC_BASIC_TYPE([#include <stdlib.h>], size_t, HAVE_BASIC_SIZE_T, sc_cv_type_sizet_basic)
+@@ -1416,13 +1418,13 @@
+
+ AC_MSG_CHECKING(for /dev/ptmx)
+ if test -c /dev/ptmx; then
+- AC_DEFINE(HAVE_DEV_PTMX, 1)
++ AC_DEFINE(HAVE_DEV_PTMX, 1, [ptmx])
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(for /dev/ptc)
+ if test -c /dev/ptc; then
+- AC_DEFINE(HAVE_DEV_PTC)
++ AC_DEFINE(HAVE_DEV_PTC, 1, [ptc])
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+@@ -1431,7 +1433,7 @@
+
+ AC_MSG_CHECKING(for /proc)
+ if test -d /proc; then
+- AC_DEFINE(HAVE_PROC_DIR, 1)
++ AC_DEFINE(HAVE_PROC_DIR, 1, [procdir])
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+@@ -1439,7 +1441,7 @@
+
+ AC_MSG_CHECKING(for /proc/*/fd)
+ if test -d /proc/$$/fd; then
+- AC_DEFINE(HAVE_PROC_DIR_FD, 1)
++ AC_DEFINE(HAVE_PROC_DIR_FD, 1, [procdir fd])
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+@@ -1479,7 +1481,7 @@
+ done])
+ ])
+ if test "$sc_cv_have_tcpd_h" = "yes"; then
+- AC_DEFINE(HAVE_TCPD_H)
++ AC_DEFINE(HAVE_TCPD_H, [1], [have tcpd])
+ fi
+ AC_MSG_NOTICE(checked for tcpd.h... $sc_cv_have_tcpd_h)
+ fi # end checking for tcpd.h
+@@ -1512,14 +1514,14 @@
+ ]
+ )
+ if test "$sc_cv_have_libwrap" = 'yes'; then
+- AC_DEFINE(HAVE_LIBWRAP)
++ AC_DEFINE(HAVE_LIBWRAP, [1], [libwrap])
+ fi
+ AC_MSG_RESULT($sc_cv_have_libwrap)
+ fi
+ #
+ if test -n "$WITH_LIBWRAP"; then
+ if test "$sc_cv_have_tcpd_h" = "yes" -a "$sc_cv_have_libwrap" = "yes"; then
+- AC_DEFINE(WITH_LIBWRAP)
++ AC_DEFINE(WITH_LIBWRAP, [1], [libwrap])
+ else
+ AC_MSG_WARN([not all components of tcp wrappers found, disabling it]);
+ fi
+@@ -1534,7 +1536,7 @@
+ [sc_cv_have_hosts_allow_table=yes],
+ [sc_cv_have_hosts_allow_table=no])])
+ if test $sc_cv_have_hosts_allow_table = yes; then
+- AC_DEFINE(HAVE_HOSTS_ALLOW_TABLE)
++ AC_DEFINE(HAVE_HOSTS_ALLOW_TABLE, [1], [hosts allow table])
+ fi
+ AC_MSG_RESULT($sc_cv_have_hosts_allow_table)
+ fi # test -n "$WITH_LIBWRAP"
diff --git a/recipes/socat/files/ldflags.patch b/recipes/socat/files/ldflags.patch
deleted file mode 100644
index 6ab4681383..0000000000
--- a/recipes/socat/files/ldflags.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- socat-1.3/Makefile.in~ldflags
-+++ socat-1.3/Makefile.in
-@@ -33,6 +33,7 @@
-
-
- CFLAGS = @CFLAGS@ $(CCOPTS) $(DEFS) $(INCLS)
-+LDFLAGS = @LDFLAGS@
- CLIBS = $(LIBS)
- #CLIBS = $(LIBS) -lm -lefence
- XIOSRCS = xioinitialize.c xiohelp.c xioparam.c xiodiag.c xioopen.c xioopts.c xiosigchld.c xioread.c xiowrite.c \
-@@ -78,13 +79,13 @@
- makedepend @SYSDEFS@ $(CFILES)
-
- socat: socat.o libxio.a
-- $(CC) $(CFLAGS) -o $@ socat.o libxio.a $(CLIBS)
-+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ socat.o libxio.a $(CLIBS)
-
- procan: procan_main.o procan.o error.o sycls.o sysutils.o utils.o
-- $(CC) $(CFLAGS) -o $@ procan_main.o procan.o error.o sycls.o sysutils.o utils.o $(CLIBS)
-+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ procan_main.o procan.o error.o sycls.o sysutils.o utils.o $(CLIBS)
-
- filan: filan_main.o filan.o fdname.o error.o sycls.o sysutils.o utils.o
-- $(CC) $(CFLAGS) -o $@ filan_main.o filan.o fdname.o error.o sycls.o sysutils.o utils.o $(CLIBS)
-+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ filan_main.o filan.o fdname.o error.o sycls.o sysutils.o utils.o $(CLIBS)
-
- libxio.a: $(XIOOBJS) $(UTLOBJS)
- $(AR) r $@ $(XIOOBJS) $(UTLOBJS)
diff --git a/recipes/socat/files/xioinitialize.patch b/recipes/socat/files/xioinitialize.patch
deleted file mode 100644
index 24e816cfd7..0000000000
--- a/recipes/socat/files/xioinitialize.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-diff -Naur socat-1.3/xioinitialize.c socat-1.3_patched/xioinitialize.c
---- socat-1.3/xioinitialize.c 2003-05-23 08:24:53.000000000 +0200
-+++ socat-1.3_patched/xioinitialize.c 2006-09-09 18:18:19.000000000 +0200
-@@ -19,48 +19,10 @@
- assert(O_WRONLY==1);
- assert(O_RDWR==2);
-
-- /* some assertions about termios */
--#if WITH_TERMIOS
--#ifdef CRDLY
-- assert(3 << opt_crdly.arg3 == CRDLY);
--#endif
--#ifdef TABDLY
-- assert(3 << opt_tabdly.arg3 == TABDLY);
--#endif
-- assert(3 << opt_csize.arg3 == CSIZE);
-- {
-- union {
-- struct termios termarg;
-- tcflag_t flags[4];
--#if HAVE_TERMIOS_ISPEED
-- speed_t speeds[sizeof(struct termios)/sizeof(speed_t)];
--#endif
-- } tdata;
-- tdata.termarg.c_iflag = 0x12345678;
-- tdata.termarg.c_oflag = 0x23456789;
-- tdata.termarg.c_cflag = 0x3456789a;
-- tdata.termarg.c_lflag = 0x456789ab;
-- assert(tdata.termarg.c_iflag == tdata.flags[0]);
-- assert(tdata.termarg.c_oflag == tdata.flags[1]);
-- assert(tdata.termarg.c_cflag == tdata.flags[2]);
-- assert(tdata.termarg.c_lflag == tdata.flags[3]);
--#if HAVE_TERMIOS_ISPEED
-- tdata.termarg.c_ispeed = 0x56789abc;
-- tdata.termarg.c_ospeed = 0x6789abcd;
-- assert(tdata.termarg.c_ispeed == tdata.speeds[ISPEED_OFFSET]);
-- assert(tdata.termarg.c_ospeed == tdata.speeds[OSPEED_OFFSET]);
--#endif
-- }
--#endif
--
- /* these dependencies required in applyopts() for OFUNC_FCNTL */
- assert(F_GETFD == F_SETFD-1);
- assert(F_GETFL == F_SETFL-1);
-
-- if (Atexit(xioexit) < 0) {
-- Error("atexit(xioexit) failed");
-- return -1;
-- }
- xioinitialized = 1;
- return 0;
- }
diff --git a/recipes/socat/files/xioopen.patch b/recipes/socat/files/xioopen.patch
deleted file mode 100644
index 456862653a..0000000000
--- a/recipes/socat/files/xioopen.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -Naur socat-1.3/xioopen.h socat-1.3_patched/xioopen.h
---- socat-1.3/xioopen.h 2003-02-15 15:26:22.000000000 +0100
-+++ socat-1.3_patched/xioopen.h 2006-09-05 10:49:15.000000000 +0200
-@@ -42,7 +42,6 @@
- extern const char *ddirection[];
- extern const char *filetypenames[];
- extern const struct addrname addressnames[];
--extern const char *addressgroupnames[];
- extern const struct optname optionnames[];
-
- extern int xioopen_makedual(xiofile_t *file);
diff --git a/recipes/socat/socat_1.3.2.1.bb b/recipes/socat/socat_1.3.2.1.bb
deleted file mode 100644
index c30fb7a0ec..0000000000
--- a/recipes/socat/socat_1.3.2.1.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SECTION = "console/network"
-DEPENDS = "openssl"
-DESCRIPTION = "Socat is a relay for bidirectional data \
-transfer between two independent data channels."
-LICENSE = "GPL"
-PR = "r1"
-
-SRC_URI = "http://www.dest-unreach.org/socat/download/Archive/socat-${PV}.tar.bz2 \
- file://xioopen.patch;patch=1 \
- file://ldflags.patch;patch=1 \
- file://xioinitialize.patch;patch=1"
-S = "${WORKDIR}/socat-1.3"
-
-inherit autotools
-
-do_install_prepend () {
- mkdir -p ${D}${bindir}
- install -d ${D}${bindir} ${D}${mandir}/man1
-}
diff --git a/recipes/socat/socat_1.7.1.2.bb b/recipes/socat/socat_1.7.1.2.bb
new file mode 100644
index 0000000000..0a2ab544ad
--- /dev/null
+++ b/recipes/socat/socat_1.7.1.2.bb
@@ -0,0 +1,19 @@
+SECTION = "console/network"
+DEPENDS = "openssl"
+DESCRIPTION = "Socat is a relay for bidirectional data \
+transfer between two independent data channels."
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "http://www.dest-unreach.org/socat/download/socat-${PV}.tar.bz2;name=src \
+ file://compile.patch;patch=1"
+SRC_URI[src.md5sum] = "9c0c5e83ce665f38d4d3aababad275eb"
+SRC_URI[src.sha256sum] = "f7395b154914bdaa49805603aac2a90fb3d60255f95691d7779ab4680615e167"
+EXTRA_OECONF = " --disable-termios "
+
+inherit autotools
+
+do_install_prepend () {
+ mkdir -p ${D}${bindir}
+ install -d ${D}${bindir} ${D}${mandir}/man1
+}
diff --git a/recipes/sofia-sip/sofia-sip.inc b/recipes/sofia-sip/sofia-sip.inc
index f2bc57688f..05c559bb40 100644
--- a/recipes/sofia-sip/sofia-sip.inc
+++ b/recipes/sofia-sip/sofia-sip.inc
@@ -3,7 +3,7 @@ HOMEPAGE = "http://sofia-sip.sourceforge.net/"
LICENSE = "LGPL"
DEPENDS = "glib-2.0 openssl"
-SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz"
+SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz;name=archive"
inherit autotools pkgconfig
diff --git a/recipes/sofia-sip/sofia-sip_1.12.10.bb b/recipes/sofia-sip/sofia-sip_1.12.10.bb
new file mode 100644
index 0000000000..d121c3a470
--- /dev/null
+++ b/recipes/sofia-sip/sofia-sip_1.12.10.bb
@@ -0,0 +1,4 @@
+require sofia-sip.inc
+
+SRC_URI[archive.md5sum] = "9e07fde3ad2009e44d1100ca3950d02b"
+SRC_URI[archive.sha256sum] = "e6648382f24c73997f83e153cfef7f42125bf0dd3af73b98ca623e10ec321663"
diff --git a/recipes/squashfs-tools/squashfs-tools-4.0/Makefile.patch b/recipes/squashfs-tools/squashfs-tools-4.0/Makefile.patch
index 2c88aba2ae..546847e699 100644
--- a/recipes/squashfs-tools/squashfs-tools-4.0/Makefile.patch
+++ b/recipes/squashfs-tools/squashfs-tools-4.0/Makefile.patch
@@ -1,60 +1,22 @@
Index: squashfs-tools/Makefile
===================================================================
---- squashfs-tools.orig/Makefile 2009-04-19 01:47:43.000000000 +0200
-+++ squashfs-tools/Makefile 2009-04-19 01:52:36.000000000 +0200
-@@ -1,36 +1,48 @@
- INSTALL_DIR = /usr/local/bin
-
- INCLUDEDIR = .
-+CFLAGS_R = -I$(INCLUDEDIR) -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE
-+LIBS = -lz -lpthread
-
- CFLAGS := -I$(INCLUDEDIR) -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -O2
-
+--- squashfs-tools.orig/Makefile 2010-03-08 11:17:18.009403053 +0100
++++ squashfs-tools/Makefile 2010-03-08 11:18:04.240910008 +0100
+@@ -51,7 +51,7 @@
all: mksquashfs unsquashfs
- mksquashfs: mksquashfs.o read_fs.o sort.o swap.o pseudo.o
-- $(CC) mksquashfs.o read_fs.o sort.o swap.o pseudo.o -lz -lpthread -lm -o $@
-+ $(CC) $(LDFLAGS) mksquashfs.o read_fs.o sort.o swap.o pseudo.o -lz -lpthread -lm -o $@
-
- mksquashfs.o: mksquashfs.c squashfs_fs.h mksquashfs.h global.h sort.h squashfs_swap.h Makefile
-+ $(CC) $(CFLAGS_R) $(CFLAGS) -c -o $@ $<
-
- read_fs.o: read_fs.c squashfs_fs.h read_fs.h global.h squashfs_swap.h Makefile
-+ $(CC) $(CFLAGS_R) $(CFLAGS) -c -o $@ $<
-
- sort.o: sort.c squashfs_fs.h global.h sort.h Makefile
-+ $(CC) $(CFLAGS_R) $(CFLAGS) -c -o $@ $<
-
- swap.o: swap.c Makefile
-+ $(CC) $(CFLAGS_R) $(CFLAGS) -c -o $@ $<
-
- pseudo.o: pseudo.c pseudo.h Makefile
-+ $(CC) $(CFLAGS_R) $(CFLAGS) -c -o $@ $<
-
- unsquashfs: unsquashfs.o unsquash-1.o unsquash-2.o unsquash-3.o unsquash-4.o swap.o
-- $(CC) unsquashfs.o unsquash-1.o unsquash-2.o unsquash-3.o unsquash-4.o swap.o -lz -lpthread -lm -o $@
-+ $(CC) $(LDFLAGS) unsquashfs.o unsquash-1.o unsquash-2.o unsquash-3.o unsquash-4.o swap.o -lz -lpthread -lm -o $@
-
--unsquashfs.o: unsquashfs.h unsquashfs.c squashfs_fs.h squashfs_swap.h squashfs_compat.h global.h Makefile
-+unsquashfs.o: unsquashfs.c unsquashfs.h squashfs_fs.h squashfs_swap.h squashfs_compat.h global.h Makefile
-+ $(CC) $(CFLAGS_R) $(CFLAGS) -c -o $@ $<
-
--unsquash-1.o: unsquashfs.h unsquash-1.c squashfs_fs.h squashfs_compat.h global.h Makefile
-+unsquash-1.o: unsquash-1.c unsquashfs.h squashfs_fs.h squashfs_compat.h global.h Makefile
-+ $(CC) $(CFLAGS_R) $(CFLAGS) -c -o $@ $<
-
--unsquash-2.o: unsquashfs.h unsquash-2.c unsquashfs.h squashfs_fs.h squashfs_compat.h global.h Makefile
-+unsquash-2.o: unsquash-2.c unsquashfs.h unsquashfs.h squashfs_fs.h squashfs_compat.h global.h Makefile
-+ $(CC) $(CFLAGS_R) $(CFLAGS) -c -o $@ $<
+ mksquashfs: $(MKSQUASHFS_OBJS)
+- $(CC) $(MKSQUASHFS_OBJS) -lz -lpthread -lm $(LIBS) -o $@
++ $(CC) $(LDFLAGS) $(MKSQUASHFS_OBJS) -lz -lpthread -lm $(LIBS) -o $@
--unsquash-3.o: unsquashfs.h unsquash-3.c squashfs_fs.h squashfs_compat.h global.h Makefile
-+unsquash-3.o: unsquash-3.c unsquashfs.h squashfs_fs.h squashfs_compat.h global.h Makefile
-+ $(CC) $(CFLAGS_R) $(CFLAGS) -c -o $@ $<
+ mksquashfs.o: mksquashfs.c squashfs_fs.h mksquashfs.h global.h sort.h \
+ squashfs_swap.h
+@@ -67,7 +67,7 @@
+ compressor.o: compressor.c compressor.h
--unsquash-4.o: unsquashfs.h unsquash-4.c squashfs_fs.h squashfs_swap.h global.h Makefile
-+unsquash-4.o: unsquash-4.c unsquashfs.h squashfs_fs.h squashfs_swap.h global.h Makefile
-+ $(CC) $(CFLAGS_R) $(CFLAGS) -c -o $@ $<
+ unsquashfs: $(UNSQUASHFS_OBJS)
+- $(CC) $(UNSQUASHFS_OBJS) -lz -lpthread -lm $(LIBS) -o $@
++ $(CC) $(LDFLAGS) $(UNSQUASHFS_OBJS) -lz -lpthread -lm $(LIBS) -o $@
- clean:
- -rm -f *.o mksquashfs unsquashfs
+ unsquashfs.o: unsquashfs.h unsquashfs.c squashfs_fs.h squashfs_swap.h \
+ squashfs_compat.h global.h
diff --git a/recipes/squashfs-tools/squashfs-tools_4.0.bb b/recipes/squashfs-tools/squashfs-tools_4.0.bb
index 886c095883..1f58f139d5 100644
--- a/recipes/squashfs-tools/squashfs-tools_4.0.bb
+++ b/recipes/squashfs-tools/squashfs-tools_4.0.bb
@@ -1,9 +1,10 @@
# This override is required since this has not yet been released
SRC_URI = "cvs://anonymous@squashfs.cvs.sourceforge.net/cvsroot/squashfs;module=squashfs;date=${SRCDATE} \
http://downloads.sourceforge.net/sevenzip/lzma465.tar.bz2"
+SRC_URI += " file://Makefile.patch;patch=1"
require squashfs-tools.inc
-PR = "${INC_PR}.2"
+PR = "${INC_PR}.3"
S = "${WORKDIR}/squashfs/squashfs-tools"
diff --git a/recipes/squid/squid-native.inc b/recipes/squid/squid-native.inc
new file mode 100644
index 0000000000..1077b98461
--- /dev/null
+++ b/recipes/squid/squid-native.inc
@@ -0,0 +1,9 @@
+inherit native autotools
+
+SRC_URI = "http://www.squid-cache.org/Versions/v2/${SQUID_MAJOR}/squid-${PV}.tar.bz2;name=squid-${PV}"
+S = "${WORKDIR}/squid-${PV}"
+
+do_stage() {
+ install -d ${STAGING_BINDIR_NATIVE}
+ install -m 0755 src/cf_gen ${STAGING_BINDIR_NATIVE}/cf_gen
+}
diff --git a/recipes/squid/squid-native_2.6.STABLE14.bb b/recipes/squid/squid-native_2.6.STABLE14.bb
index c8c4258275..aede5dc195 100644
--- a/recipes/squid/squid-native_2.6.STABLE14.bb
+++ b/recipes/squid/squid-native_2.6.STABLE14.bb
@@ -1,11 +1,3 @@
-inherit native autotools
+SQUID_MAJOR = "2.6"
-SRC_URI = "http://www.squid-cache.org/Versions/v2/2.6/squid-${PV}.tar.bz2"
-S = "${WORKDIR}/squid-${PV}"
-
-inherit native autotools
-
-do_stage() {
- install -d ${STAGING_BINDIR_NATIVE}
- install -m 0755 src/cf_gen ${STAGING_BINDIR_NATIVE}/cf_gen
-}
+include squid-native.inc
diff --git a/recipes/squid/squid-native_2.7.STABLE8.bb b/recipes/squid/squid-native_2.7.STABLE8.bb
new file mode 100644
index 0000000000..3c9fa2ae44
--- /dev/null
+++ b/recipes/squid/squid-native_2.7.STABLE8.bb
@@ -0,0 +1,6 @@
+SQUID_MAJOR = "2.7"
+
+include squid-native.inc
+
+SRC_URI[squid-2.7.STABLE8.md5sum] = "c061ba1c9ae39d0aaa8eca137f7dd18b"
+SRC_URI[squid-2.7.STABLE8.sha256sum] = "9409b02fc53518e334395df803a1ae30f4ed385b0f041fb310b4c75e2a49138c" \ No newline at end of file
diff --git a/recipes/squid/squid.inc b/recipes/squid/squid.inc
new file mode 100644
index 0000000000..93b6800af5
--- /dev/null
+++ b/recipes/squid/squid.inc
@@ -0,0 +1,59 @@
+DESCRIPTION = "Squid is a caching proxy for the Web supporting HTTP, HTTPS, FTP, and more"
+LICENSE = "GPLv2"
+INC_PR = "r7"
+DEPENDS = "squid-native-${PV} openssl openldap"
+
+SRC_URI = "http://www.squid-cache.org/Versions/v2/${SQUID_MAJOR}/squid-${PV}.tar.bz2;name=squid-${PV} \
+ file://fix_epoll_check.patch;patch=1 \
+ file://squid.init \
+ file://squid-volatiles \
+ "
+
+inherit autotools update-rc.d
+
+EXTRA_OECONF = "--disable-epoll --disable-nls --enable-ssl --enable-storeio=null,ufs --enable-digest-auth-helpers=ldap --enable-basic-auth-helpers=LDAP"
+
+logdir = ${localstatedir}/log/squid
+EXTRA_OEMAKE = "\
+ DEFAULT_CACHE_LOG=${logdir}/cache.log \
+ DEFAULT_ACCESS_LOG=${logdir}/access.log \
+ DEFAULT_STORE_LOG=${logdir}/store.log \
+ DEFAULT_PID_FILE=${localstatedir}/run/squid.pid \
+ DEFAULT_SWAP_DIR=${localstatedir}/spool/squid \
+ DEFAULT_CONFIG_FILE=${sysconfdir}/squid/squid.conf \
+ DEFAULT_MIME_TABLE=${sysconfdir}/squid/mime.conf \
+ DEFAULT_CACHEMGR_CONFIG=${sysconfdir}/squid/cachemgr.conf \
+ "
+
+INITSCRIPT_NAME = "squid"
+
+do_configure_append() {
+ sed -i -e 's|./cf_gen |${STAGING_BINDIR_NATIVE}/cf_gen |g' src/Makefile
+}
+
+do_install_prepend() {
+ install -d ${D}${sysconfdir}/squid
+}
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${sysconfdir}/default/volatiles
+ install -m 755 ${WORKDIR}/squid.init ${D}${sysconfdir}/init.d/squid
+ mv ${D}${sysconfdir}/mime.conf.default ${D}${sysconfdir}/squid/
+ mv ${D}${sysconfdir}/squid.conf.default ${D}${sysconfdir}/squid/
+ install -m 0644 ${WORKDIR}/squid-volatiles ${D}${sysconfdir}/default/volatiles/squid
+ sed -ri "s,^\#?\ *(pid_filename.+)$,\1," ${D}${sysconfdir}/squid/squid.conf
+}
+
+# this packages the languages better and saves some space, installs
+# English as errors default and the others in locale package
+
+PACKAGES =+ "${PN}-auth-ldap"
+RDEPENDS_${PN}-auth-ldap += "${PN}"
+
+FILES_${PN} += " ${datadir}/errors/English/* \
+ ${datadir}/icons/* \
+ ${datadir}/mib.txt"
+
+FILES_${PN}-locale += " ${datadir}/errors/* "
+FILES_${PN}-auth-ldap = "${libexecdir}/digest_ldap_auth ${libexecdir}/squid_ldap_auth" \ No newline at end of file
diff --git a/recipes/squid/squid/squid-volatiles b/recipes/squid/squid/squid-volatiles
new file mode 100644
index 0000000000..b4e1f602a3
--- /dev/null
+++ b/recipes/squid/squid/squid-volatiles
@@ -0,0 +1 @@
+d nobody nogroup 0775 /var/log/squid none
diff --git a/recipes/squid/squid/squid.init b/recipes/squid/squid/squid.init
index 61d9de42dd..d829cf90b9 100644
--- a/recipes/squid/squid/squid.init
+++ b/recipes/squid/squid/squid.init
@@ -3,7 +3,7 @@ DAEMON=/usr/sbin/squid
NAME=squid
DESC="Squid HTTP proxy"
PIDFILE=/var/run/squid.pid
-SQUID_ARGS="-D -sYC"
+SQUID_ARGS="-D -sY"
test -f $DAEMON || exit 0
@@ -36,11 +36,25 @@ start() {
chown $owner $ldr
fi
- start-stop-daemon -S -p $PIDFILE -x $DAEMON
+ start-stop-daemon -S -p $PIDFILE -x $DAEMON -- $SQUID_ARGS
}
stop() {
- start-stop-daemon -K -p $PIDFILE -x $DAEMON
+ EX=0
+ CNT=1
+ while [ $EX -eq 0 -a $CNT -lt 15 ]; do
+ echo -n .
+ sleep 1
+ start-stop-daemon -K -p $PIDFILE 1>/dev/null 2>&1
+ EX=$?
+ CNT=`expr $CNT + 1`
+ done
+ if [ $CNT -eq 15 ]; then
+ echo "failed."
+ else
+ echo "done."
+ rm -f $PIDFILE
+ fi
}
case "$1" in
@@ -50,9 +64,8 @@ case "$1" in
echo "done."
;;
stop)
- echo -n "Stopping $DESC: $NAME... "
+ echo -n "Stopping $DESC: $NAME"
stop
- echo "done."
;;
restart)
echo "Restarting $DESC: $NAME... "
diff --git a/recipes/squid/squid_2.6.STABLE14.bb b/recipes/squid/squid_2.6.STABLE14.bb
index 10c20c505e..125ac234e1 100644
--- a/recipes/squid/squid_2.6.STABLE14.bb
+++ b/recipes/squid/squid_2.6.STABLE14.bb
@@ -1,41 +1,4 @@
-DESCRIPTION = "Squid is a caching proxy for the Web supporting HTTP, HTTPS, FTP, and more"
-LICENSE = "GPLv2"
-PR = "r1"
-DEPENDS = "squid-native-${PV}"
+PR = "${INC_PR}.0"
+SQUID_MAJOR = "2.6"
-SRC_URI = "http://www.squid-cache.org/Versions/v2/2.6/squid-${PV}.tar.bz2 \
- file://fix_epoll_check.patch;patch=1 \
- file://squid.init"
-
-inherit autotools update-rc.d
-
-EXTRA_OECONF = "--disable-epoll --disable-nls"
-
-logdir = ${localstatedir}/log/squid
-EXTRA_OEMAKE = "\
- DEFAULT_CACHE_LOG=${logdir}/cache.log \
- DEFAULT_ACCESS_LOG=${logdir}/access.log \
- DEFAULT_STORE_LOG=${logdir}/store.log \
- DEFAULT_PID_FILE=${localstatedir}/run/squid.pid \
- DEFAULT_SWAP_DIR=${localstatedir}/spool/squid \
- "
-
-INITSCRIPT_NAME = "squid"
-
-do_configure_append() {
- sed -i -e 's|./cf_gen |${STAGING_BINDIR_NATIVE}/cf_gen |g' src/Makefile
-}
-
-do_install_append() {
- install -d ${D}${sysconfdir}/init.d
- install -m 755 ${WORKDIR}/squid.init ${D}${sysconfdir}/init.d/squid
-}
-
-# this packages the languages better and saves some space, installs
-# English as errors default and the others in locale package
-
-FILES_${PN} += " ${datadir}/errors/English/* \
- ${datadir}/icons/* \
- ${datadir}/mib.txt"
-
-FILES_${PN}-locale += " ${datadir}/errors/* "
+include squid.inc \ No newline at end of file
diff --git a/recipes/squid/squid_2.7.STABLE8.bb b/recipes/squid/squid_2.7.STABLE8.bb
new file mode 100644
index 0000000000..b237fe3919
--- /dev/null
+++ b/recipes/squid/squid_2.7.STABLE8.bb
@@ -0,0 +1,16 @@
+PR = "${INC_PR}.0"
+SQUID_MAJOR = "2.7"
+
+include squid.inc
+
+# GPLv2+ since 2.6.STABLE18
+LICENSE = "GPL"
+
+EXTRA_OECONF += "--enable-epoll"
+
+SRC_URI[squid-2.7.STABLE8.md5sum] = "c061ba1c9ae39d0aaa8eca137f7dd18b"
+SRC_URI[squid-2.7.STABLE8.sha256sum] = "9409b02fc53518e334395df803a1ae30f4ed385b0f041fb310b4c75e2a49138c"
+
+do_configure_prepend() {
+ export ac_cv_epoll_ctl=yes
+} \ No newline at end of file
diff --git a/recipes/streamripper/streamripper_1.61.10.bb b/recipes/streamripper/streamripper_1.61.10.bb
deleted file mode 100644
index fe691400ac..0000000000
--- a/recipes/streamripper/streamripper_1.61.10.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "StreamRipper lets you record streaming mp3 to your hard drive."
-SECTION = "console/multimedia"
-LICENSE = "GPL"
-DEPENDS= "libogg libvorbis"
-RDEPENDS= "libogg libvorbis"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/streamripper/streamripper-${PV}.tar.gz"
-
-EXTRA_OECONF="--disable-oggtest \
- --disable-vorbistest \
- --with-ogg=${STAGING_LIBDIR} \
- --with-vorbis=${STAGING_LIBDIR}"
-
-inherit autotools
-
diff --git a/recipes/streamripper/streamripper_1.64.6.bb b/recipes/streamripper/streamripper_1.64.6.bb
new file mode 100644
index 0000000000..f8141cf06c
--- /dev/null
+++ b/recipes/streamripper/streamripper_1.64.6.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "StreamRipper lets you record streaming mp3 to your hard drive."
+SECTION = "console/multimedia"
+LICENSE = "GPL"
+DEPENDS= "libogg libvorbis"
+RDEPENDS= "libogg libvorbis"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/streamripper/streamripper-${PV}.tar.gz;name=src"
+SRC_URI[src.md5sum] = "a37a1a8b8f9228522196a122a1c2dd32"
+SRC_URI[src.sha256sum] = "c1d75f2e9c7b38fd4695be66eff4533395248132f3cc61f375196403c4d8de42"
+
+EXTRA_OECONF="--disable-oggtest \
+ --disable-vorbistest \
+ --with-ogg=${STAGING_LIBDIR} \
+ --with-vorbis=${STAGING_LIBDIR}"
+
+inherit autotools
+
diff --git a/recipes/subversion/subversion_1.6.5.bb b/recipes/subversion/subversion_1.6.5.bb
index 50f5e6e5d6..09bf1f3681 100644
--- a/recipes/subversion/subversion_1.6.5.bb
+++ b/recipes/subversion/subversion_1.6.5.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "The Subversion (svn) client"
SECTION = "console/network"
-DEPENDS = "apr-util neon"
+DEPENDS = "apr-util neon sqlite3"
RDEPENDS = "neon"
LICENSE = "Apache BSD"
HOMEPAGE = "http://subversion.tigris.org/"
diff --git a/recipes/sudo/sudo_1.7.2p1.bb b/recipes/sudo/sudo_1.7.2p1.bb
deleted file mode 100644
index bfa8afe650..0000000000
--- a/recipes/sudo/sudo_1.7.2p1.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-PR = "r3"
-
-DEPENDS = "libpam"
-RDEPENDS = "libpam libpam-meta"
-
-SRC_URI = "http://ftp.sudo.ws/sudo/dist/sudo-${PV}.tar.gz \
- file://sudo.pamd \
-"
-
-EXTRA_OECONF += " --with-pam "
-
-require sudo.inc
-
-# Do in the recipe not the common inc as not all SUDO recipes want PAM support.
-
-do_install_append() {
- install -d ${D}${sysconfdir}/pam.d/
- install -m 0644 ${WORKDIR}/sudo.pamd ${D}${sysconfdir}/pam.d/sudo
-}
diff --git a/recipes/sudo/sudo_1.7.2p4.bb b/recipes/sudo/sudo_1.7.2p4.bb
new file mode 100644
index 0000000000..3fe7aeffcd
--- /dev/null
+++ b/recipes/sudo/sudo_1.7.2p4.bb
@@ -0,0 +1,22 @@
+PR = "r3"
+
+DEPENDS = "libpam"
+RDEPENDS = "libpam libpam-meta"
+
+SRC_URI = "http://ftp.sudo.ws/sudo/dist/sudo-${PV}.tar.gz;name=src \
+ file://sudo.pamd \
+"
+
+SRC_URI[src.md5sum] = "3989e5a00538247d7dcef8b514076752"
+SRC_URI[src.sha256sum] = "57d9adbdffa881e32894231079da7d68ffe99f46942818b63baadf6c795b7bdd"
+
+EXTRA_OECONF += " --with-pam "
+
+require sudo.inc
+
+# Do in the recipe not the common inc as not all SUDO recipes want PAM support.
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/pam.d/
+ install -m 0644 ${WORKDIR}/sudo.pamd ${D}${sysconfdir}/pam.d/sudo
+}
diff --git a/recipes/swt/swt-gtk.inc b/recipes/swt/swt-gtk.inc
index eed628a313..aa0f1ee70e 100644
--- a/recipes/swt/swt-gtk.inc
+++ b/recipes/swt/swt-gtk.inc
@@ -10,7 +10,6 @@ S = "${WORKDIR}/swt-source"
# A number which is used by SWT to mark the shared libraries. It can be found
# in the version.txt file inside the source directory.
-SWTVERSION = ${@bb.fatal('SWTVERSION is not defined in this swt-gtk recipe!')}
SWT_API_VERSION = ${@bb.fatal('SWT_API_VERSION is not defined in this swt-gtk recipe!')}
do_unpackpost() {
@@ -22,8 +21,12 @@ do_unpackpost() {
unzip -o ../src.zip
cp ../Makefile .
+ # Sets version numbers for native libraries.
sed -i -e "s|RELEASE=OE_SWT_RELEASE|RELEASE=${PV}|" Makefile
sed -i -e "s|SONAME_VERSION=OE_SWT_API_VERSION|SONAME_VERSION=${SWT_API_VERSION}|" Makefile
+
+ # Properly applies OE's LDFLAGS to linking step.
+ sed -i -e "s|LIBS = -shared -fPIC|LIBS = -shared ${LDFLAGS}|" make_linux.mak
}
do_compile() {
@@ -33,12 +36,14 @@ do_compile() {
addtask unpackpost after do_unpack before do_patch
do_install() {
+ local swtversion=`cat version.txt | tr -d "version. "`
+
oe_jarinstall swt-gtk-${PV}.jar swt-gtk.jar swt.jar
- oe_libinstall -so libswt-atk-gtk-${SWTVERSION} ${D}/${libdir_jni}
- oe_libinstall -so libswt-cairo-gtk-${SWTVERSION} ${D}/${libdir_jni}
- oe_libinstall -so libswt-pi-gtk-${SWTVERSION} ${D}/${libdir_jni}
- oe_libinstall -so libswt-gtk-${SWTVERSION} ${D}/${libdir_jni}
+ oe_libinstall -so libswt-atk-gtk-$swtversion ${D}/${libdir_jni}
+ oe_libinstall -so libswt-cairo-gtk-$swtversion ${D}/${libdir_jni}
+ oe_libinstall -so libswt-pi-gtk-$swtversion ${D}/${libdir_jni}
+ oe_libinstall -so libswt-gtk-$swtversion ${D}/${libdir_jni}
}
do_stage() {
diff --git a/recipes/swt/swt3.3-gtk_3.3.1.bb b/recipes/swt/swt3.3-gtk_3.3.1.bb
deleted file mode 100644
index 82860edfb3..0000000000
--- a/recipes/swt/swt3.3-gtk_3.3.1.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require swt-gtk.inc
-
-PR = "r1"
-
-SRC_URI = "http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/eclipse/downloads/drops/R-${PV}-200710231652/swt-${PV}-gtk-linux-x86.zip \
- file://Makefile"
-
-# A number which is used by SWT to mark the shared libraries.
-SWTVERSION = "3347"
-SWT_API_VERSION = "3.3"
-
-RCONFLICTS = "libswt3.4-gtk-java"
diff --git a/recipes/swt/swt3.4-gtk-hildon_3.4.2.bb b/recipes/swt/swt3.4-gtk-hildon_3.4.2.bb
index 667e516fa0..d834a58157 100644
--- a/recipes/swt/swt3.4-gtk-hildon_3.4.2.bb
+++ b/recipes/swt/swt3.4-gtk-hildon_3.4.2.bb
@@ -1,6 +1,6 @@
require swt3.4-gtk_${PV}.bb
-PR = "r0"
+PR = "r1"
DEPENDS += "libhildon libhildonfm"
diff --git a/recipes/swt/swt3.4-gtk-hildon_3.4.bb b/recipes/swt/swt3.4-gtk-hildon_3.4.bb
deleted file mode 100644
index d834a58157..0000000000
--- a/recipes/swt/swt3.4-gtk-hildon_3.4.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require swt3.4-gtk_${PV}.bb
-
-PR = "r1"
-
-DEPENDS += "libhildon libhildonfm"
-
-SRC_URI += "file://swt-hildon.patch;patch=1"
diff --git a/recipes/swt/swt3.4-gtk_3.4.2.bb b/recipes/swt/swt3.4-gtk_3.4.2.bb
index f4b6a85f37..1f9b80f27c 100644
--- a/recipes/swt/swt3.4-gtk_3.4.2.bb
+++ b/recipes/swt/swt3.4-gtk_3.4.2.bb
@@ -1,14 +1,13 @@
require swt-gtk.inc
-PR = "r0"
+PR = "r2"
SRC_URI = "http://ftp.wh2.tu-dresden.de/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.4.2-200902111700/swt-3.4.2-gtk-linux-x86.zip \
file://Makefile"
# A number which is used by SWT to mark the shared libraries.
-SWTVERSION = "3452"
SWT_API_VERSION = "3.4"
PROVIDES = "swt3.4-gtk"
-RCONFLICTS = "libswt3.3-gtk-java"
+RCONFLICTS = "libswt3.5-gtk-java"
diff --git a/recipes/swt/swt3.4-gtk_3.4.bb b/recipes/swt/swt3.4-gtk_3.4.bb
deleted file mode 100644
index b6eafcad8c..0000000000
--- a/recipes/swt/swt3.4-gtk_3.4.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-require swt-gtk.inc
-
-PR = "r0"
-
-SRC_URI = "http://ftp.wh2.tu-dresden.de/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.4-200806172000/swt-3.4-gtk-linux-x86.zip \
- file://Makefile"
-
-# A number which is used by SWT to mark the shared libraries.
-SWTVERSION = "3448"
-SWT_API_VERSION = "3.4"
-
-PROVIDES = "swt3.4-gtk"
-
-RCONFLICTS = "libswt3.3-gtk-java"
diff --git a/recipes/swt/swt3.5-gtk_3.5.1.bb b/recipes/swt/swt3.5-gtk_3.5.1.bb
new file mode 100644
index 0000000000..f94b94cdfc
--- /dev/null
+++ b/recipes/swt/swt3.5-gtk_3.5.1.bb
@@ -0,0 +1,16 @@
+require swt-gtk.inc
+
+PR = "r0"
+
+SRC_URI = "http://mirror.switch.ch/eclipse/eclipse/downloads/drops/R-3.5.1-200909170800/swt-3.5.1-gtk-linux-x86.zip;name=swt \
+ file://Makefile"
+
+SRC_URI[swt.md5sum] = "ceaa95d484d7ab95c663401b5a9bd1f5"
+SRC_URI[swt.sha1sum] = "654744a3a2bc7eadfd807d2f1238580ac31571ee"
+
+# A number which is used by SWT to mark the shared libraries.
+SWT_API_VERSION = "3.5"
+
+PROVIDES = "swt3.5-gtk"
+
+RCONFLICTS = "libswt3.4-gtk-java"
diff --git a/recipes/sylpheed/claws-mail_3.6.1.bb b/recipes/sylpheed/claws-mail_3.6.1.bb
index a2d7101ece..aec96c28fa 100644
--- a/recipes/sylpheed/claws-mail_3.6.1.bb
+++ b/recipes/sylpheed/claws-mail_3.6.1.bb
@@ -2,7 +2,7 @@ SECTION = "x11/network"
DESCRIPTION = "Mail user agent"
DEPENDS = "gtk+ libetpan openssl aspell"
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
inherit autotools pkgconfig
@@ -50,6 +50,3 @@ do_install_append() {
sed -i 's/Icon=[^.]*$/&.png/' ${D}${datadir}/applications/claws-mail.desktop
}
-do_stage() {
- autotools_stage_includes
-}
diff --git a/recipes/sysvinit/sysvinit_2.86.bb b/recipes/sysvinit/sysvinit_2.86.bb
index e546726ab9..2cf27b26b0 100644
--- a/recipes/sysvinit/sysvinit_2.86.bb
+++ b/recipes/sysvinit/sysvinit_2.86.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "System-V like init."
SECTION = "base"
-LICENSE = "GPL"
+LICENSE = "GPLv2+"
HOMEPAGE = "http://freshmeat.net/projects/sysvinit/"
-PR = "r57"
+PR = "r58"
# USE_VT and SERIAL_CONSOLE are generally defined by the MACHINE .conf.
# Set PACKAGE_ARCH appropriately.
diff --git a/recipes/tangogps/tangogps.inc b/recipes/tangogps/tangogps.inc
index 9897461e0e..bab91a14f8 100644
--- a/recipes/tangogps/tangogps.inc
+++ b/recipes/tangogps/tangogps.inc
@@ -6,7 +6,7 @@ LICENSE = "GPLv2"
PRIORITY = "optional"
DEPENDS = "curl gtk+ gconf sqlite3 libexif"
-SRC_URI = "http://www.tangogps.org/downloads/tangogps-${PV}.tar.gz"
+SRC_URI = "http://www.tangogps.org/downloads/tangogps-${PV}.tar.gz;name=archive"
S = "${WORKDIR}/tangogps-${PV}"
inherit autotools pkgconfig
diff --git a/recipes/tangogps/tangogps_0.99.3.bb b/recipes/tangogps/tangogps_0.99.3.bb
new file mode 100644
index 0000000000..1521550d0d
--- /dev/null
+++ b/recipes/tangogps/tangogps_0.99.3.bb
@@ -0,0 +1,4 @@
+require tangogps.inc
+
+SRC_URI[archive.md5sum] = "74b4f584b6edae576c1d77d166a9476e"
+SRC_URI[archive.sha256sum] = "ff8bf63021e54ea7cd5c52382b32877252e5230154606f6235648caf36f51b8f"
diff --git a/recipes/tasks/angstrom-task-gnome.bb b/recipes/tasks/angstrom-task-gnome.bb
index 1c54f374d8..29b6e2c100 100644
--- a/recipes/tasks/angstrom-task-gnome.bb
+++ b/recipes/tasks/angstrom-task-gnome.bb
@@ -12,7 +12,7 @@ XSERVER ?= "xserver-xorg \
xf86-input-keyboard \
"
-PR = "r5"
+PR = "r7"
PACKAGES += "task-gnome-apps task-gnome-fonts task-gnome task-gnome-gstreamer task-gnome-perl task-gnome-pulseaudio task-gnome-themes task-gnome-totem task-gnome-xserver-base task-gnome-xserver"
@@ -30,6 +30,7 @@ RDEPENDS_task-gnome-apps = " \
gimp \
gnome-games \
gnome-mplayer \
+ gecko-mediaplayer-firefox-hack \
gnumeric \
gphoto2 \
gthumb \
@@ -66,7 +67,7 @@ RDEPENDS_task-gnome = " \
gnome-bluetooth \
gnome-desktop \
gnome-doc-utils \
- gnome-keyring gnome-keyring-pam-plugin libpam-meta \
+ gnome-keyring gnome-keyring-pam-plugin libpam-meta pam-plugin-ck-connector \
gnome-media \
gnome-menus \
gnome-mime-data \
diff --git a/recipes/tasks/task-base.bb b/recipes/tasks/task-base.bb
index d59acba026..555a463635 100644
--- a/recipes/tasks/task-base.bb
+++ b/recipes/tasks/task-base.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Merge machine and distro options to create a basic machine task/package"
-PR = "r87"
+PR = "r89"
inherit task
@@ -136,7 +136,9 @@ python __anonymous () {
import bb
- if not hasattr(__builtins__, 'set'):
+ try:
+ set
+ except NameError:
from sets import Set as set
distro_features = set(bb.data.getVar("DISTRO_FEATURES", d, 1).split())
diff --git a/recipes/tasks/task-cli-tools-python.bb b/recipes/tasks/task-cli-tools-python.bb
index 7c75084dd0..7945b03a1f 100644
--- a/recipes/tasks/task-cli-tools-python.bb
+++ b/recipes/tasks/task-cli-tools-python.bb
@@ -2,11 +2,11 @@ DESCRIPTION = "A set of python-based command line tools"
SECTION = "console"
LICENSE = "MIT"
PV = "1.0"
-PR = "r8"
+PR = "r10"
inherit task
RDEPENDS_${PN} = "\
- mickeydbus \
+ mdbus \
mickeyterm \
"
diff --git a/recipes/tasks/task-cli-tools.bb b/recipes/tasks/task-cli-tools.bb
index 9c5e8615e0..dfb79e7e98 100644
--- a/recipes/tasks/task-cli-tools.bb
+++ b/recipes/tasks/task-cli-tools.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "A set of command line tools useful for debugging"
SECTION = "console"
LICENSE = "MIT"
PV = "1.0"
-PR = "r9"
+PR = "r13"
inherit task
@@ -13,7 +13,10 @@ RDEPENDS_${PN} = "\
htop \
iptables \
lsof \
+ mbuffer \
+ mdbus2 \
mtd-utils \
+ mterm2 \
nano \
nfs-utils-client \
powertop \
@@ -28,6 +31,7 @@ RDEPENDS_${PN}-debug = "\
evtest \
devmem2 \
i2c-tools \
+ gdb \
ltrace \
procps \
pxaregs \
diff --git a/recipes/tasks/task-efl.bb b/recipes/tasks/task-efl.bb
index 20c8954754..00236a4050 100644
--- a/recipes/tasks/task-efl.bb
+++ b/recipes/tasks/task-efl.bb
@@ -9,13 +9,11 @@ RDEPENDS = "\
edje \
emotion \
esmart \
- epsilon \
edbus \
efreet \
ewl \
- etk \
epdf \
"
-PR = "r0"
+PR = "r1"
ALLOW_EMPTY = "1"
diff --git a/recipes/tasks/task-fso2-compliance.bb b/recipes/tasks/task-fso2-compliance.bb
index de7d6c1281..3e064785d2 100644
--- a/recipes/tasks/task-fso2-compliance.bb
+++ b/recipes/tasks/task-fso2-compliance.bb
@@ -3,15 +3,11 @@ Install this task to make your distribution FSO 2.0-compliant."
SECTION = "fso/base"
LICENSE = "MIT"
PV = "1.9.0"
-PR = "r5"
+PR = "r7"
inherit task
RDEPENDS_${PN} = "\
- dbus-hlid \
-# TODO: remove when fso2 is finished
- frameworkd \
- \
libfsobasics \
libfsotransport \
libfsoframework \
@@ -21,31 +17,27 @@ RDEPENDS_${PN} = "\
fsodeviced \
fsogsmd \
fsotdld \
- fsomusicd \
+# fsomusicd \
fsonetworkd \
fsousaged \
\
- fso-alsa-data \
fso-apm \
- fso-gpsd \
-# fso-monitord \
- connman \
+# connman \
# connman-scripts \
- connman-plugin-bluetooth \
+# connman-plugin-bluetooth \
# connman-plugin-dhclient \
# connman-plugin-dnsproxy \
# connman-plugin-ethernet \
# connman-plugin-fake \
- connman-plugin-loopback \
- connman-plugin-pppd \
+# connman-plugin-loopback \
+# connman-plugin-pppd \
# connman-plugin-resolvconf \
- connman-plugin-udhcp \
- connman-plugin-wifi \
+# connman-plugin-udhcp \
+# connman-plugin-wifi \
# connman-test-utils \
"
RRECOMMENDS_${PN} = "\
- fso-abyss \
wmiconfig \
tzdata \
tzdata-africa \
diff --git a/recipes/tasks/task-gpe-desktopapps.bb b/recipes/tasks/task-gpe-desktopapps.bb
index 25c055f446..5b6f721e0a 100644
--- a/recipes/tasks/task-gpe-desktopapps.bb
+++ b/recipes/tasks/task-gpe-desktopapps.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Additional desktop applications package for GPE Palmtop Environment"
-PR = "r6"
+PR = "r7"
LICENSE = "MIT"
inherit task
@@ -9,6 +9,5 @@ RDEPENDS_${PN} = "\
firefox \
thunderbird \
galculator \
- gnumeric \
- gpdf"
+ gnumeric"
diff --git a/recipes/tasks/task-gpe.bb b/recipes/tasks/task-gpe.bb
index 0bf1325da0..785f0184b1 100644
--- a/recipes/tasks/task-gpe.bb
+++ b/recipes/tasks/task-gpe.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Task packages for GPE Palmtop Environment"
-PR = "r7"
+PR = "r8"
LICENSE = "MIT"
inherit task
@@ -120,8 +120,7 @@ RDEPENDS_gpe-task-desktopapps = "\
firefox \
thunderbird \
galculator \
- gnumeric \
- gpdf"
+ gnumeric"
# totem"
RDEPENDS_gpe-task-sectest = "\
diff --git a/recipes/tasks/task-mamona-base.bb b/recipes/tasks/task-mamona-base.bb
index c3f867fdec..29e88ff4fa 100644
--- a/recipes/tasks/task-mamona-base.bb
+++ b/recipes/tasks/task-mamona-base.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "task mamona base"
LICENSE = "MIT"
-PR = "r2"
+PR = "r3"
ALLOW_EMPTY = "1"
PACKAGES = "${PN}"
@@ -16,7 +16,6 @@ RDEPENDS = "\
dpkg \
e2fsprogs \
e2fsprogs-badblocks \
- e2fsprogs-blkid \
e2fsprogs-uuidgen \
file \
gawk \
@@ -44,5 +43,6 @@ RDEPENDS = "\
util-linux-losetup \
util-linux-swaponoff \
util-linux-umount \
+ util-linux-ng-blkid \
zlib \
"
diff --git a/recipes/tasks/task-nas-server.bb b/recipes/tasks/task-nas-server.bb
index 6924ff5388..f190a86587 100644
--- a/recipes/tasks/task-nas-server.bb
+++ b/recipes/tasks/task-nas-server.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Tasks for a Network Attached Storage server"
LICENSE = "MIT"
PROVIDES = "task-nas-server-everything"
-PR = "r1"
+PR = "r2"
inherit task
@@ -15,7 +15,6 @@ NAS_SERVER_PACKAGES = "\
task-nas-server-samba \
task-nas-server-dnsmasq \
task-nas-server-iptables \
- task-nas-server-openmoko \
task-nas-server-tzdata \
task-nas-server-nfs \
task-nas-server-vfat \
@@ -56,13 +55,6 @@ RRECOMMENDS_task-nas-server-iptables = "\
kernel-module-ipt-masquerade \
"
-DESCRIPTION_task-nas-server-openmoko = "NAS-Server: Openmoko Support"
-RDEPENDS_task-nas-server-openmoko = "\
- dfu-util \
-"
-RRECOMMENDS_task-nas-server-openmoko = "\
-"
-
DESCRIPTION_task-nas-server-tzdata = "NAS-Server: Timezone Support"
RDEPENDS_task-nas-server-tzdata = "\
tzdata \
diff --git a/recipes/tasks/task-openmoko-feed.bb b/recipes/tasks/task-openmoko-feed.bb
index 670af8eafe..9c7d8c5fd9 100644
--- a/recipes/tasks/task-openmoko-feed.bb
+++ b/recipes/tasks/task-openmoko-feed.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Openmoko: Misc. Feed Items"
SECTION = "openmoko/base"
LICENSE = "MIT"
-PR = "r61"
+PR = "r62"
inherit task
@@ -13,7 +13,7 @@ RDEPENDS_task-openmoko-feed = "\
ppp \
bluez-hcidump \
bootchart \
- eet evas ecore embryo epsilon edje efreet emotion epdf \
+ eet evas ecore embryo edje efreet emotion epdf \
exhibit edje-viewer \
free42-vga \
gpe-filemanager gpe-gallery gpe-timesheet gpe-todo gpe-contacts \
diff --git a/recipes/tasks/task-openprotium.bb b/recipes/tasks/task-openprotium.bb
index a8e7bd7766..4a8e1e45ad 100644
--- a/recipes/tasks/task-openprotium.bb
+++ b/recipes/tasks/task-openprotium.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Basic image for openprotium"
HOMEPAGE = "http://www.openprotium.org"
ALLOW_EMPTY = "1"
-PR = "r1"
+PR = "r2"
inherit task
@@ -35,7 +35,7 @@ RDEPENDS = " kernel \
modutils-initscripts \
ipkg-collateral ipkg ipkg-link \
portmap \
- e2fsprogs-blkid \
+ util-linux-ng-blkid \
mdadm \
hdparm \
mtd-utils \
diff --git a/recipes/tasks/task-proper-tools.bb b/recipes/tasks/task-proper-tools.bb
index 056109ef86..e693c10cc6 100644
--- a/recipes/tasks/task-proper-tools.bb
+++ b/recipes/tasks/task-proper-tools.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Full versions of tools provided by busybox"
-PR = "r10"
+PR = "r11"
inherit task
@@ -10,7 +10,6 @@ RDEPENDS_${PN} = "\
debianutils \
diffutils \
e2fsprogs \
- e2fsprogs-fsck \
fbset \
findutils \
gawk \
diff --git a/recipes/tasks/task-python-efl-examples.bb b/recipes/tasks/task-python-efl-examples.bb
index 34efbeab6b..d882ceccc4 100644
--- a/recipes/tasks/task-python-efl-examples.bb
+++ b/recipes/tasks/task-python-efl-examples.bb
@@ -6,10 +6,8 @@ RDEPENDS = "\
python-ecore-examples \
python-emotion-examples \
python-edje-examples \
- python-etk-examples \
- python-epsilon-examples \
python-math python-textutils \
"
-PR = "ml4"
+PR = "ml4.1"
ALLOW_EMPTY = "1"
diff --git a/recipes/tasks/task-python-efl.bb b/recipes/tasks/task-python-efl.bb
index 70c1adfebd..79d50c7a16 100644
--- a/recipes/tasks/task-python-efl.bb
+++ b/recipes/tasks/task-python-efl.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Python Bindings to the Enlightenment Foundation Libraries"
LICENSE = "MIT"
SECTION = "devel/python"
-PR = "ml4"
+PR = "ml4.1"
ALLOW_EMPTY = "1"
@@ -11,8 +11,6 @@ RDEPENDS = "\
python-edje \
python-elementary \
python-emotion \
- python-etk \
- python-epsilon \
python-edbus \
"
diff --git a/recipes/tasks/task-sdk-bare.bb b/recipes/tasks/task-sdk-bare.bb
index f86cc9d81d..5a43fed9b0 100644
--- a/recipes/tasks/task-sdk-bare.bb
+++ b/recipes/tasks/task-sdk-bare.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Packages for a standalone SDK or external toolchain"
LICENSE = "MIT"
ALLOW_EMPTY = "1"
-
+PR = "r1"
PACKAGES = "${PN}"
@@ -12,13 +12,7 @@ GLIBC_PKGS = "\
glibc-utils \
libsegfault \
glibc-thread-db \
- glibc-localedata-i18n \
- glibc-gconv-ibm850 \
- glibc-gconv-cp1252 \
- glibc-gconv-iso8859-1 \
- glibc-gconv-iso8859-15 \
- locale-base-en-gb \
- "
+"
LIBC_PKGS_linux = "${GLIBC_PKGS}"
LIBC_PKGS_linux-gnueabi = "${GLIBC_PKGS}"
diff --git a/recipes/tasks/task-shr-feed.bb b/recipes/tasks/task-shr-feed.bb
index 3cc551b189..eba0fb6492 100644
--- a/recipes/tasks/task-shr-feed.bb
+++ b/recipes/tasks/task-shr-feed.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "SHR Feed"
-PR = "r35"
+PR = "r49"
PV = "1.0"
LICENSE = "GPL"
@@ -7,6 +7,7 @@ inherit task
RDEPENDS_${PN} += "\
babiloo-efl \
+ bootchart-lite \
claws-mail \
claws-plugin-mailmbox \
# claws-plugin-gtkhtml2-viewer \
@@ -16,6 +17,8 @@ RDEPENDS_${PN} += "\
dosbox \
enotes \
epdfview \
+ estardict \
+ evopedia \
fbreader \
ffalarms \
gpe-calendar \
@@ -28,21 +31,22 @@ RDEPENDS_${PN} += "\
gpe-contacts \
gtkmm \
guitartune \
+ jefliks \
mc \
+ mpd \
mplayer \
navit \
- omview \
orrery \
python-elementary \
pythm \
python-wifi \
- omoney \
openmoko-agpsui \
openvpn \
pyphonelog \
# shr-config \
shr-today \
shr-theme-neo \
+ shr-theme-o2 \
shr-theme-niebiee \
shr-theme-sixteen \
# gry should be in image already
@@ -60,7 +64,6 @@ RDEPENDS_${PN} += "\
python-pygame \
mokoko \
# exhibit \
- edje-viewer \
obexpush \
obexftp \
obex-data-server \
@@ -132,7 +135,6 @@ RDEPENDS_${PN} += "\
# gpsdrive \
wxwidgets \
x11vnc \
- xf86-video-glamo \
# libswt3.4-gtk-java \
cacao \
# jamvm \
@@ -205,6 +207,8 @@ RDEPENDS_${PN} += "\
fsousaged \
fsodeviced \
fsonetworkd \
+ mdbus \
+ mickeyterm \
opimd-utils \
omgps \
shr-launcher \
@@ -222,6 +226,7 @@ RDEPENDS_${PN} += "\
illume-keyboard-german \
illume-keyboard-hebrew \
illume-keyboard-numeric-alt \
+ illume-keyboard-default-numeric \
illume-keyboard-russian \
illume-keyboard-russian-terminal \
python-xlib \
@@ -232,14 +237,13 @@ RDEPENDS_${PN} += "\
om-neon \
ipython \
# phoneme-advanced-foundation \
- eve \
+# eve was killed in svnr45979
python-pybluez \
x11perf \
pyring \
bt-configure \
bt-gps \
advancedcaching \
- glamo-dri-tests \
bonnie++ \
reiserfsprogs \
blipomoko \
@@ -274,4 +278,9 @@ RDEPENDS_${PN} += "\
ventura \
emtooth \
podboy \
+ mcnavi \
+ neolight \
"
+
+# this is only usefull on gta02 and on other devices it's trying to pull mesa-dri (not respecting DEFAULT_PROVIDER for virtual/libgl)
+RDEPENDS_${PN}_append_om-gta02 = "glamo-dri-tests"
diff --git a/recipes/tasks/task-shr-minimal.bb b/recipes/tasks/task-shr-minimal.bb
index 8538391df3..097129292e 100644
--- a/recipes/tasks/task-shr-minimal.bb
+++ b/recipes/tasks/task-shr-minimal.bb
@@ -1,10 +1,12 @@
DESCRIPTION = "SHR Lite Image Feed"
-PR = "r20"
+PR = "r28"
PV = "2.0"
LICENSE = "GPL"
inherit task
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
def get_rdepends(bb, d):
enabled = bb.data.getVar("ENABLE_BINARY_LOCALE_GENERATION", d, 1)
@@ -63,15 +65,16 @@ PACKAGES += "\
RDEPENDS_${PN}-base = "\
+ ${MACHINE_TASK_PROVIDER} \
+ task-base \
+ glibc-utils \
+ glibc-charmap-utf-8 \
netbase \
sysfsutils \
modutils-initscripts \
module-init-tools-depmod \
- rsync \
- screen \
fbset \
fbset-modes \
- openssh-sftp-server \
cron \
logrotate\
util-linux-ng-fdisk \
@@ -79,13 +82,8 @@ RDEPENDS_${PN}-base = "\
"
RDEPENDS_${PN}-cli = "\
- screen \
nano \
- iptables \
mtd-utils \
- s3c24xx-gpio \
- mickeydbus \
- mickeyterm \
"
RDEPENDS_${PN}-fso = "\
@@ -98,38 +96,38 @@ RDEPENDS_${PN}-fso = "\
#FIXME: libcanberra-alsa should be pulled in by fsodeviced but isn't
RDEPENDS_${PN}-audio = "\
+ alsa-utils-alsactl \
+ alsa-utils-alsamixer \
alsa-utils-aplay \
alsa-utils-amixer \
libcanberra-alsa \
"
-RDEPENDS_${PN}-audio_append_om-gta01 = "\
- alsa-scenarii-shr \
-"
-
-RDEPENDS_${PN}-audio_append_om-gta02 = "\
- alsa-scenarii-shr \
-"
-
RDEPENDS_${PN}-x = "\
- glibc-utils \
- glibc-charmap-utf-8 \
+ task-x11-illume \
+ task-fonts-truetype-core \
e-wm-menu-shr \
shr-wizard \
shr-theme-gry \
- etk-theme-shr \
- ${@get_rdepends(bb, d)} \
- libx11-locale \
- libmokoui2 \
xcursor-transparent-theme \
xinput-calibrator \
+# Needed for proper input support in efl based apps
+ libx11-locale \
+# All localedata based on IMAGE_LINGUAS
+ ${@get_rdepends(bb, d)} \
+# Make sure it's available for those who want's to play with illume2
+ e-wm-config-illume2-shr \
"
RDEPENDS_${PN}-apps = "\
+# because of new opimd doesn't support SIM contacts itself
+ pisi \
fso-abyss \
+ task-fso2-compliance \
phoneui-apps-messages \
phoneui-apps-contacts \
phoneui-apps-dialer \
+ phoneui-apps-quick-settings \
phonefsod \
phoneuid \
libphone-ui \
@@ -142,10 +140,8 @@ RDEPENDS_${PN}-apps = "\
RDEPENDS_${PN}-gtk = "\
- openmoko-icon-theme-standard2 \
shr-theme-gtk-e17lookalike \
vala-terminal \
- tangogps \
pyphonelog \
matchbox-keyboard-im \
"
diff --git a/recipes/tasks/task-shr.bb b/recipes/tasks/task-shr.bb
index 25e1b170c3..dfa5c7cafb 100644
--- a/recipes/tasks/task-shr.bb
+++ b/recipes/tasks/task-shr.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "SHR Fat Image Feed"
-PR = "r3"
+PR = "r7"
PV = "2.0"
LICENSE = "GPL"
@@ -9,6 +9,7 @@ PACKAGES = "\
${PN}-gtk \
${PN}-apps \
${PN}-games \
+ ${PN}-cli \
"
RDEPENDS_${PN}-gtk = "\
@@ -17,6 +18,7 @@ RDEPENDS_${PN}-gtk = "\
libpurple-protocol-msn \
libpurple-protocol-icq \
vagalume \
+ tangogps \
gpe-sketchbook \
"
@@ -24,12 +26,18 @@ RDEPENDS_${PN}-apps += "\
task-shr-minimal-apps \
opimd-utils-notes \
mokonnect \
- midori \
+ ventura \
intone \
"
+RDEPENDS_${PN}-cli += "\
+ task-cli-tools \
+ task-cli-tools-debug \
+ task-shr-minimal-cli \
+ rsync \
+ openssh-sftp-server \
+"
RDEPENDS_${PN}-games += "\
mokomaze \
numptyphysics \
"
-
diff --git a/recipes/tasks/task-slugos.bb b/recipes/tasks/task-slugos.bb
index 8ed43b1983..0ebf149480 100644
--- a/recipes/tasks/task-slugos.bb
+++ b/recipes/tasks/task-slugos.bb
@@ -6,7 +6,7 @@
DESCRIPTION = "Task packages for the SlugOS distribution"
HOMEPAGE = "http://www.nslu2-linux.org"
LICENSE = "MIT"
-PR = "r24"
+PR = "r25"
PACKAGE_ARCH = "${MACHINE_ARCH}"
COMPATIBLE_MACHINE = "(nslu2|ixp4xx|sheevaplug)"
ALLOW_EMPTY = "1"
@@ -34,10 +34,10 @@ cpio \
# file system.
SLUGOS_STANDARD_RRECOMMENDS += "\
e2fsprogs-mke2fs \
-e2fsprogs-fsck \
+util-linux-ng-fsck \
e2fsprogs-e2fsck \
e2fsprogs-badblocks \
-e2fsprogs-blkid \
+util-linux-ng-blkid \
"
# Filesystem selection. Adding entries here adds the module to the
diff --git a/recipes/tasks/task-x11.bb b/recipes/tasks/task-x11.bb
index 1a50461352..db45ab9380 100644
--- a/recipes/tasks/task-x11.bb
+++ b/recipes/tasks/task-x11.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "The X Window System -- install this task to get a client/server b
SECTION = "x11/server"
LICENSE = "MIT"
PV = "1.0"
-PR = "r2"
+PR = "r3"
# WORK IN PROGRESS
diff --git a/recipes/telepathy/empathy_2.28.2.bb b/recipes/telepathy/empathy_2.28.2.bb
index c1e715f433..e50389bd51 100644
--- a/recipes/telepathy/empathy_2.28.2.bb
+++ b/recipes/telepathy/empathy_2.28.2.bb
@@ -1,7 +1,10 @@
DESCRIPTION = "Empathy: a Telepathy based IM client"
HOMEPAGE = "http://blogs.gnome.org/view/xclaesse/2007/04/26/0"
LICENSE = "GPL"
-DEPENDS = "libcanberra telepathy-farsight gnome-doc-utils python-native telepathy-python telepathy-mission-control libtelepathy telepathy-glib gtk+ gconf libglade eds-dbus"
+DEPENDS = "libcanberra telepathy-farsight gnome-doc-utils \
+python-native telepathy-python telepathy-mission-control \
+libtelepathy telepathy-glib gtk+ gconf libglade eds-dbus \
+libunique"
RDEPENDS = "telepathy-mission-control"
RRECOMMENDS = "telepathy-gabble"
diff --git a/recipes/tgt/tgt_1.0.0.bb b/recipes/tgt/tgt_1.0.0.bb
deleted file mode 100644
index 757ef4a384..0000000000
--- a/recipes/tgt/tgt_1.0.0.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-DESCRIPTION = "Linux target framework (tgt) aims to simplify various SCSI target driver (iSCSI, Fibre Channel, SRP, etc) creation and maintenance"
-HOMEPAGE = "http://stgt.berlios.de/"
-LICENSE = "GPLv2"
-DEPENDS = "openssl"
-RDEPENDS = "iscsi-target"
-
-PR = "r0"
-SRC_URI = "http://stgt.berlios.de/releases/tgt-${PV}.tar.bz2"
-
-EXTRA_OEMAKE += "ISCSI=1"
-
-TARGET_CC_ARCH += "${LDFLAGS}"
-
-do_configure() {
-}
-
-do_install() {
- oe_runmake DESTDIR="${D}" install
-}
diff --git a/recipes/tgt/tgt_1.0.2.bb b/recipes/tgt/tgt_1.0.2.bb
new file mode 100644
index 0000000000..f851647a2e
--- /dev/null
+++ b/recipes/tgt/tgt_1.0.2.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Linux target framework (tgt) aims to simplify various SCSI target driver (iSCSI, Fibre Channel, SRP, etc) creation and maintenance"
+HOMEPAGE = "http://stgt.berlios.de/"
+LICENSE = "GPLv2"
+DEPENDS = "openssl"
+RDEPENDS = "iscsi-target"
+
+PR = "r0"
+SRC_URI = "http://stgt.berlios.de/releases/tgt-1.0.2.tar.gz;name=tgt102targz"
+SRC_URI[tgt102targz.md5sum] = "69f55046aaba9c8b9599115366b3938b"
+SRC_URI[tgt102targz.sha256sum] = "ab5db63cb1a1bd74d7c5f1e4fe2727fa22d992c38fd346917506954f960f0586"
+
+
+EXTRA_OEMAKE += "ISCSI=1"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_configure() {
+}
+
+do_install() {
+ oe_runmake DESTDIR="${D}" install
+}
diff --git a/recipes/totem/totem_2.28.5.bb b/recipes/totem/totem_2.28.5.bb
index 0bc61b7d1b..ee7501d744 100644
--- a/recipes/totem/totem_2.28.5.bb
+++ b/recipes/totem/totem_2.28.5.bb
@@ -6,7 +6,7 @@ DESCRIPTION = "A GTK2 based media player"
HOMEPAGE = "http://www.gnome.org/projects/totem/"
LICENSE = "GPL"
-PR = "r4"
+PR = "r5"
DEPENDS = " nautilus tracker gnome-doc-utils libunique libgdata totem-pl-parser gtk+ dbus bluez-libs libglade gconf libxml2 gst-ffmpeg gst-plugins-bad gst-plugins-base"
RDEPENDS_${PN} += "iso-codes"
@@ -72,8 +72,8 @@ python populate_packages_prepend () {
FILES_${PN} = "${bindir}/* ${sysconfdir} ${libdir}/lib*.so.* ${libexecdir} ${datadir}/icons ${datadir}/totem ${datadir}/applications \
"
-RDEPENDS_totem-plugin-iplayer_append = "python-pygtk"
-RDEPENDS_totem-plugin-youtube_append = "python-pygtk"
+RDEPENDS_totem-plugin-iplayer_append = "python-pygtk gst-plugin-flv"
+RDEPENDS_totem-plugin-youtube_append = "python-pygtk gnome-vfs-plugin-http gst-plugin-gnomevfs gst-plugin-flv"
PACKAGES =+ "totem-nautilus-extension totem-browser-plugin-dbg totem-browser-plugin"
diff --git a/recipes/transmission/transmission_1.91.bb b/recipes/transmission/transmission_1.91.bb
new file mode 100644
index 0000000000..b50c82add9
--- /dev/null
+++ b/recipes/transmission/transmission_1.91.bb
@@ -0,0 +1,5 @@
+require transmission.inc
+
+SRC_URI[archive.md5sum] = "2c6993300988d5aa2e3fc24a439d3633"
+SRC_URI[archive.sha256sum] = "716b86eeccb87d955094c341dec8299e4a33b4d3bf37f3969d4638c0a13a9e8b"
+
diff --git a/recipes/tslib/tslib.inc b/recipes/tslib/tslib.inc
index 81f2a4eaa6..4d75c5a45f 100644
--- a/recipes/tslib/tslib.inc
+++ b/recipes/tslib/tslib.inc
@@ -2,7 +2,7 @@ DESCRIPTION = "tslib is a plugin-based flexible touchscreen access library."
HOMEPAGE = "http://tslib.berlios.de/"
AUTHOR = "Russell King w/ plugins by Chris Larson et. al."
SECTION = "base"
-LICENSE = "LGPL"
+LICENSE = "LGPLv2"
INC_PR = "r23"
SRC_URI += "\
diff --git a/recipes/tslib/tslib/htc-msm7/ts.conf b/recipes/tslib/tslib/htc-msm7/ts.conf
new file mode 100644
index 0000000000..1b0da937e8
--- /dev/null
+++ b/recipes/tslib/tslib/htc-msm7/ts.conf
@@ -0,0 +1,25 @@
+# Uncomment if you wish to use the linux input layer event interface
+module_raw input
+
+# Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d
+# module_raw collie
+
+# Uncomment if you're using a Sharp Zaurus SL-C700/C750/C760/C860
+# module_raw corgi
+
+# Uncomment if you're using a device with a UCB1200/1300/1400 TS interface
+# module_raw ucb1x00
+
+# Uncomment if you're using an HP iPaq h3600 or similar
+# module_raw h3600
+
+# Uncomment if you're using a Hitachi Webpad
+# module_raw mk712
+
+# Uncomment if you're using an IBM Arctic II
+# module_raw arctic2
+
+module pthres pmin=1
+module variance delta=30
+module dejitter delta=100
+module linear
diff --git a/recipes/tslib/tslib/htc-msm7/tslib.sh b/recipes/tslib/tslib/htc-msm7/tslib.sh
new file mode 100644
index 0000000000..d6141f8d66
--- /dev/null
+++ b/recipes/tslib/tslib/htc-msm7/tslib.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# FIXME: Use /dev/input/touchscreen, once we have this logic on all hotplug system
+# Yes, hardcoding the event node is wrong, will fix this eventually
+TSLIB_TSDEVICE=/dev/input/event1
+
+export TSLIB_TSDEVICE
diff --git a/recipes/tslib/tslib_1.0.bb b/recipes/tslib/tslib_1.0.bb
index 58a0e35bd1..4c2a56c435 100644
--- a/recipes/tslib/tslib_1.0.bb
+++ b/recipes/tslib/tslib_1.0.bb
@@ -2,6 +2,6 @@ SRC_URI = "http://download.berlios.de/tslib/${BP}.tar.bz2 \
file://fix_version.patch;patch=1 \
file://tslib-nopressure.patch;patch=1 \
file://tslib-pluginsld.patch;patch=1"
-PR = "${INC_PR}.3"
+PR = "${INC_PR}.4"
include tslib.inc
diff --git a/recipes/tzdata/tzdata_2010b.bb b/recipes/tzdata/tzdata_2010b.bb
new file mode 100644
index 0000000000..2d406bd094
--- /dev/null
+++ b/recipes/tzdata/tzdata_2010b.bb
@@ -0,0 +1,4 @@
+require tzdata.inc
+
+SRC_URI = "http://ftp.uni-erlangen.de/pub/Linux/MIRROR.gentoo/distfiles/tzdata${PV}.tar.gz"
+PR = "${INC_PR}.0"
diff --git a/recipes/u-boot/files/omapzoom2/0001-OMAP3-set-L1NEON-bit-in-aux-control-register.patch b/recipes/u-boot/files/omapzoom2/0001-OMAP3-set-L1NEON-bit-in-aux-control-register.patch
new file mode 100644
index 0000000000..84822a717c
--- /dev/null
+++ b/recipes/u-boot/files/omapzoom2/0001-OMAP3-set-L1NEON-bit-in-aux-control-register.patch
@@ -0,0 +1,40 @@
+From fe048d0b6db98744888ba79b6b6551d822e19edd Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Mon, 25 Jan 2010 14:31:01 +0100
+Subject: [PATCH] OMAP3: set L1NEON bit in aux control register
+
+This is required to work around ARM erratum 621766, affecting
+Cortex-A8 r1p0-3:
+
+ When a sequence of Neon load instructions is intermixed with several
+ branches, some of which are mispredicted, it is possible for the
+ processor to deadlock due to Neon loads on the speculative path not
+ being properly flushed from the Neon load queue.
+
+Also enable ASA like recent upstream u-boots do.
+
+Based on a patch from Mans Rullgard: http://www.mail-archive.com/u-boot@lists.denx.de/msg04879.html
+---
+ cpu/omap3/cpu.c | 6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/cpu/omap3/cpu.c b/cpu/omap3/cpu.c
+index 54c0ecf..0f3882a 100644
+--- a/cpu/omap3/cpu.c
++++ b/cpu/omap3/cpu.c
+@@ -252,8 +252,10 @@ void setup_auxcr(int device_type, int boot_type)
+ /* r12 = AUXCR Write function and r0 value */
+ __asm__ __volatile__("mov r12, #0x3");
+ __asm__ __volatile__("mrc p15, 0, r0, c1, c0, 1");
+- /* Enabling IBE. ASA is disabled following recommendation from ARM */
+- __asm__ __volatile__("orr r0, r0, #0x40");
++ /* Enabling ASA */
++ __asm__ __volatile__("orr r0, r0, #0x10");
++ /* Enable L1NEON */
++ __asm__ __volatile__("orr r0, r0, #1<<5");
+ /* SMI instruction to call ROM Code API */
+ __asm__ __volatile__(".word 0xE1600070");
+
+--
+1.6.5
+
diff --git a/recipes/u-boot/u-boot-git/0001-cmd_i2c.c-reduced-subaddress-length-to-3-bytes.patch b/recipes/u-boot/u-boot-git/0001-cmd_i2c.c-reduced-subaddress-length-to-3-bytes.patch
new file mode 100644
index 0000000000..afaee11c5d
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/0001-cmd_i2c.c-reduced-subaddress-length-to-3-bytes.patch
@@ -0,0 +1,66 @@
+From 609d8536cd125793fe52b393e854dd7df238c954 Mon Sep 17 00:00:00 2001
+From: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
+Date: Wed, 24 Feb 2010 09:23:00 +0100
+Subject: [PATCH 1/5] cmd_i2c.c: reduced subaddress length to 3 bytes
+
+according to some of the comments the subaddress length is 1 or 2, but we are being
+prepared for the case it becomes 3. However the code also accepted 4.
+This repairs this by changing the constand 4 to 3.
+
+Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
+---
+ common/cmd_i2c.c | 10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/common/cmd_i2c.c b/common/cmd_i2c.c
+index 62cbd33..7531702 100644
+--- a/common/cmd_i2c.c
++++ b/common/cmd_i2c.c
+@@ -193,7 +193,7 @@ int do_i2c_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+ for (j = 0; j < 8; j++) {
+ if (argv[2][j] == '.') {
+ alen = argv[2][j+1] - '0';
+- if (alen > 4) {
++ if (alen > 3) {
+ cmd_usage(cmdtp);
+ return 1;
+ }
+@@ -287,7 +287,7 @@ int do_i2c_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+ for (j = 0; j < 8; j++) {
+ if (argv[2][j] == '.') {
+ alen = argv[2][j+1] - '0';
+- if (alen > 4) {
++ if (alen > 3) {
+ cmd_usage(cmdtp);
+ return 1;
+ }
+@@ -361,7 +361,7 @@ int do_i2c_crc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+ for (j = 0; j < 8; j++) {
+ if (argv[2][j] == '.') {
+ alen = argv[2][j+1] - '0';
+- if (alen > 4) {
++ if (alen > 3) {
+ cmd_usage(cmdtp);
+ return 1;
+ }
+@@ -451,7 +451,7 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char *argv[])
+ for (j = 0; j < 8; j++) {
+ if (argv[2][j] == '.') {
+ alen = argv[2][j+1] - '0';
+- if (alen > 4) {
++ if (alen > 3) {
+ cmd_usage(cmdtp);
+ return 1;
+ }
+@@ -607,7 +607,7 @@ int do_i2c_loop(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+ for (j = 0; j < 8; j++) {
+ if (argv[2][j] == '.') {
+ alen = argv[2][j+1] - '0';
+- if (alen > 4) {
++ if (alen > 3) {
+ cmd_usage(cmdtp);
+ return 1;
+ }
+--
+1.7.0
+
diff --git a/recipes/u-boot/u-boot-git/0002-cmd_bootm.c-made-subcommand-array-static.patch b/recipes/u-boot/u-boot-git/0002-cmd_bootm.c-made-subcommand-array-static.patch
new file mode 100644
index 0000000000..9bf471e347
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/0002-cmd_bootm.c-made-subcommand-array-static.patch
@@ -0,0 +1,26 @@
+From bdf849874fdb53e9b58adedec3bb54e19d06792c Mon Sep 17 00:00:00 2001
+From: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
+Date: Wed, 24 Feb 2010 10:28:34 +0100
+Subject: [PATCH 2/5] cmd_bootm.c: made subcommand array static
+
+Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
+---
+ common/cmd_bootm.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
+index 23ab0c4..827d542 100644
+--- a/common/cmd_bootm.c
++++ b/common/cmd_bootm.c
+@@ -462,7 +462,7 @@ static int bootm_start_standalone(ulong iflag, int argc, char *argv[])
+
+ /* we overload the cmd field with our state machine info instead of a
+ * function pointer */
+-cmd_tbl_t cmd_bootm_sub[] = {
++static cmd_tbl_t cmd_bootm_sub[] = {
+ U_BOOT_CMD_MKENT(start, 0, 1, (void *)BOOTM_STATE_START, "", ""),
+ U_BOOT_CMD_MKENT(loados, 0, 1, (void *)BOOTM_STATE_LOADOS, "", ""),
+ #if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_SPARC)
+--
+1.7.0
+
diff --git a/recipes/u-boot/u-boot-git/0002-cmd_itest.c-fix-pointer-dereferencing.patch b/recipes/u-boot/u-boot-git/0002-cmd_itest.c-fix-pointer-dereferencing.patch
new file mode 100644
index 0000000000..1b423b9195
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/0002-cmd_itest.c-fix-pointer-dereferencing.patch
@@ -0,0 +1,40 @@
+Subject: [PATCH 2/2] cmd_itest.c: fix pointer dereferencing
+Date: Mon, 22 Feb 2010 22:49:06 +0100
+Message-Id: <1266875346-17025-1-git-send-email-fransmeulenbroeks@gmail.com>
+X-Mailer: git-send-email 1.6.4.2
+
+fix pointer dereferencing
+if the size is .b and .w an 8 or 16 bit access is done.
+
+Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
+---
+ common/cmd_itest.c | 9 +++++++--
+ 1 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/common/cmd_itest.c b/common/cmd_itest.c
+index 5b301bf..58c5e7b 100644
+--- a/common/cmd_itest.c
++++ b/common/cmd_itest.c
+@@ -66,12 +66,17 @@ op_tbl_t op_table [] = {
+
+ static long evalexp(char *s, int w)
+ {
+- long l, *p;
++ long l = 0;
++ long *p;
+
+ /* if the parameter starts with a * then assume is a pointer to the value we want */
+ if (s[0] == '*') {
+ p = (long *)simple_strtoul(&s[1], NULL, 16);
+- l = *p;
++ switch (w) {
++ case 1: return((long)(*(unsigned char *)p));
++ case 2: return((long)(*(unsigned short *)p));
++ case 4: return(*p);
++ }
+ } else {
+ l = simple_strtoul(s, NULL, 16);
+ }
+--
+1.6.4.2
+
diff --git a/recipes/u-boot/u-boot-git/0003-cmd_i2c.c-reworked-subcommand-handling.patch b/recipes/u-boot/u-boot-git/0003-cmd_i2c.c-reworked-subcommand-handling.patch
new file mode 100644
index 0000000000..d681bc2a98
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/0003-cmd_i2c.c-reworked-subcommand-handling.patch
@@ -0,0 +1,109 @@
+From 75ed15eae925d6e9c8078c8fb013d344d7f3d50f Mon Sep 17 00:00:00 2001
+From: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
+Date: Wed, 24 Feb 2010 12:24:34 +0100
+Subject: [PATCH 3/5] cmd_i2c.c: reworked subcommand handling
+
+Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
+---
+ common/cmd_i2c.c | 77 +++++++++++++++++++++++++++++++----------------------
+ 1 files changed, 45 insertions(+), 32 deletions(-)
+
+diff --git a/common/cmd_i2c.c b/common/cmd_i2c.c
+index 7531702..e54fc20 100644
+--- a/common/cmd_i2c.c
++++ b/common/cmd_i2c.c
+@@ -1242,46 +1242,59 @@ int do_i2c_bus_speed(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+ return ret;
+ }
+
+-int do_i2c(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
++int do_i2c_mm(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+ {
+- /* Strip off leading 'i2c' command argument */
+- argc--;
+- argv++;
++ return mod_i2c_mem (cmdtp, 1, flag, argc, argv);
++}
++
++int do_i2c_nm(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
++{
++ return mod_i2c_mem (cmdtp, 0, flag, argc, argv);
++}
+
++int do_i2c_reset(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
++{
++ i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
++ return 0;
++}
++
++static cmd_tbl_t cmd_i2c_sub[] = {
+ #if defined(CONFIG_I2C_MUX)
+- if (!strncmp(argv[0], "bu", 2))
+- return do_i2c_add_bus(cmdtp, flag, argc, argv);
++ U_BOOT_CMD_MKENT(bus, 1, 1, do_i2c_add_bus, "", ""),
+ #endif /* CONFIG_I2C_MUX */
+- if (!strncmp(argv[0], "sp", 2))
+- return do_i2c_bus_speed(cmdtp, flag, argc, argv);
++ U_BOOT_CMD_MKENT(crc32, 3, 1, do_i2c_crc, "", ""),
+ #if defined(CONFIG_I2C_MULTI_BUS)
+- if (!strncmp(argv[0], "de", 2))
+- return do_i2c_bus_num(cmdtp, flag, argc, argv);
++ U_BOOT_CMD_MKENT(dev, 1, 1, do_i2c_bus_num, "", ""),
+ #endif /* CONFIG_I2C_MULTI_BUS */
+- if (!strncmp(argv[0], "md", 2))
+- return do_i2c_md(cmdtp, flag, argc, argv);
+- if (!strncmp(argv[0], "mm", 2))
+- return mod_i2c_mem (cmdtp, 1, flag, argc, argv);
+- if (!strncmp(argv[0], "mw", 2))
+- return do_i2c_mw(cmdtp, flag, argc, argv);
+- if (!strncmp(argv[0], "nm", 2))
+- return mod_i2c_mem (cmdtp, 0, flag, argc, argv);
+- if (!strncmp(argv[0], "cr", 2))
+- return do_i2c_crc(cmdtp, flag, argc, argv);
+- if (!strncmp(argv[0], "pr", 2))
+- return do_i2c_probe(cmdtp, flag, argc, argv);
+- if (!strncmp(argv[0], "re", 2)) {
+- i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
+- return 0;
+- }
+- if (!strncmp(argv[0], "lo", 2))
+- return do_i2c_loop(cmdtp, flag, argc, argv);
++ U_BOOT_CMD_MKENT(loop, 3, 1, do_i2c_loop, "", ""),
++ U_BOOT_CMD_MKENT(md, 3, 1, do_i2c_md, "", ""),
++ U_BOOT_CMD_MKENT(mm, 2, 1, do_i2c_mm, "", ""),
++ U_BOOT_CMD_MKENT(mw, 3, 1, do_i2c_mw, "", ""),
++ U_BOOT_CMD_MKENT(nm, 2, 1, do_i2c_nm, "", ""),
++ U_BOOT_CMD_MKENT(probe, 0, 1, do_i2c_probe, "", ""),
++ U_BOOT_CMD_MKENT(reset, 0, 1, do_i2c_reset, "", ""),
+ #if defined(CONFIG_CMD_SDRAM)
+- if (!strncmp(argv[0], "sd", 2))
+- return do_sdram(cmdtp, flag, argc, argv);
++ U_BOOT_CMD_MKENT(sdram, 1, 1, do_i2c_sdram, "", ""),
+ #endif
+- cmd_usage(cmdtp);
+- return 0;
++ U_BOOT_CMD_MKENT(speed, 1, 1, do_i2c_bus_speed, "", ""),
++};
++
++int do_i2c(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
++{
++ cmd_tbl_t *c;
++
++ /* Strip off leading 'i2c' command argument */
++ argc--;
++ argv++;
++
++ c = find_cmd_tbl(argv[0], &cmd_i2c_sub[0], ARRAY_SIZE(cmd_i2c_sub));
++
++ if (c) {
++ return c->cmd(cmdtp, flag, argc, argv);
++ } else {
++ cmd_usage(cmdtp);
++ return 1;
++ }
+ }
+
+ /***************************************************/
+--
+1.7.0
+
diff --git a/recipes/u-boot/u-boot-git/0004-cmd_i2c.c-sorted-commands-alphabetically.patch b/recipes/u-boot/u-boot-git/0004-cmd_i2c.c-sorted-commands-alphabetically.patch
new file mode 100644
index 0000000000..b433d6a582
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/0004-cmd_i2c.c-sorted-commands-alphabetically.patch
@@ -0,0 +1,48 @@
+From 5ed358a930d5bb79510dadf4e22b8ed9f972f454 Mon Sep 17 00:00:00 2001
+From: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
+Date: Thu, 25 Feb 2010 09:58:24 +0100
+Subject: [PATCH 4/5] cmd_i2c.c: sorted commands alphabetically
+
+Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
+---
+ common/cmd_i2c.c | 11 +++++------
+ 1 files changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/common/cmd_i2c.c b/common/cmd_i2c.c
+index e54fc20..b51e3f4 100644
+--- a/common/cmd_i2c.c
++++ b/common/cmd_i2c.c
+@@ -1302,25 +1302,24 @@ int do_i2c(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+ U_BOOT_CMD(
+ i2c, 6, 1, do_i2c,
+ "I2C sub-system",
+- "speed [speed] - show or set I2C bus speed\n"
+ #if defined(CONFIG_I2C_MUX)
+- "i2c bus [muxtype:muxaddr:muxchannel] - add a new bus reached over muxes\n"
++ "bus [muxtype:muxaddr:muxchannel] - add a new bus reached over muxes\ni2c "
+ #endif /* CONFIG_I2C_MUX */
++ "crc32 chip address[.0, .1, .2] count - compute CRC32 checksum\n"
+ #if defined(CONFIG_I2C_MULTI_BUS)
+ "i2c dev [dev] - show or set current I2C bus\n"
+ #endif /* CONFIG_I2C_MULTI_BUS */
++ "i2c loop chip address[.0, .1, .2] [# of objects] - looping read of device\n"
+ "i2c md chip address[.0, .1, .2] [# of objects] - read from I2C device\n"
+ "i2c mm chip address[.0, .1, .2] - write to I2C device (auto-incrementing)\n"
+ "i2c mw chip address[.0, .1, .2] value [count] - write to I2C device (fill)\n"
+ "i2c nm chip address[.0, .1, .2] - write to I2C device (constant address)\n"
+- "i2c crc32 chip address[.0, .1, .2] count - compute CRC32 checksum\n"
+ "i2c probe - show devices on the I2C bus\n"
+ "i2c reset - re-init the I2C Controller\n"
+- "i2c loop chip address[.0, .1, .2] [# of objects] - looping read of device"
+ #if defined(CONFIG_CMD_SDRAM)
+- "\n"
+- "i2c sdram chip - print SDRAM configuration information"
++ "i2c sdram chip - print SDRAM configuration information\n"
+ #endif
++ "i2c speed [speed] - show or set I2C bus speed"
+ );
+
+ #if defined(CONFIG_I2C_MUX)
+--
+1.7.0
+
diff --git a/recipes/u-boot/u-boot-git/0005-cmd_i2c.c-added-i2c-read-to-memory-function.patch b/recipes/u-boot/u-boot-git/0005-cmd_i2c.c-added-i2c-read-to-memory-function.patch
new file mode 100644
index 0000000000..01d88548f5
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/0005-cmd_i2c.c-added-i2c-read-to-memory-function.patch
@@ -0,0 +1,107 @@
+From cac3d6cd05cc89a4c1495f7198218ef2ae8088ec Mon Sep 17 00:00:00 2001
+From: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
+Date: Thu, 25 Feb 2010 10:05:37 +0100
+Subject: [PATCH 5/5] cmd_i2c.c: added i2c read to memory function
+
+Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
+---
+ common/cmd_i2c.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 files changed, 60 insertions(+), 2 deletions(-)
+
+diff --git a/common/cmd_i2c.c b/common/cmd_i2c.c
+index b51e3f4..9e7143a 100644
+--- a/common/cmd_i2c.c
++++ b/common/cmd_i2c.c
+@@ -154,6 +154,63 @@ int i2c_set_bus_speed(unsigned int)
+ */
+ #define DISP_LINE_LEN 16
+
++/*
++ * Syntax:
++ * i2c read {i2c_chip} {devaddr}{.0, .1, .2} {len} {memaddr}
++ */
++
++int do_i2c_read ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
++{
++ u_char chip;
++ uint devaddr, alen, length;
++ u_char *memaddr;
++ int j;
++
++ if (argc != 5) {
++ cmd_usage(cmdtp);
++ return 1;
++ }
++
++ /*
++ * I2C chip address
++ */
++ chip = simple_strtoul(argv[1], NULL, 16);
++
++ /*
++ * I2C data address within the chip. This can be 1 or
++ * 2 bytes long. Some day it might be 3 bytes long :-).
++ */
++ devaddr = simple_strtoul(argv[2], NULL, 16);
++ alen = 1;
++ for (j = 0; j < 8; j++) {
++ if (argv[2][j] == '.') {
++ alen = argv[2][j+1] - '0';
++ if (alen > 3) {
++ cmd_usage(cmdtp);
++ return 1;
++ }
++ break;
++ } else if (argv[2][j] == '\0')
++ break;
++ }
++
++ /*
++ * Length is the number of objects, not number of bytes.
++ */
++ length = simple_strtoul(argv[3], NULL, 16);
++
++ /*
++ * memaddr is the address where to store things in memory
++ */
++ memaddr = (u_char *)simple_strtoul(argv[4], NULL, 16);
++
++ if (i2c_read(chip, devaddr, alen, memaddr, length) != 0) {
++ puts ("Error reading the chip.\n");
++ return 1;
++ }
++ return 0;
++}
++
+ int do_i2c_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+ {
+ u_char chip;
+@@ -1272,6 +1329,7 @@ static cmd_tbl_t cmd_i2c_sub[] = {
+ U_BOOT_CMD_MKENT(mw, 3, 1, do_i2c_mw, "", ""),
+ U_BOOT_CMD_MKENT(nm, 2, 1, do_i2c_nm, "", ""),
+ U_BOOT_CMD_MKENT(probe, 0, 1, do_i2c_probe, "", ""),
++ U_BOOT_CMD_MKENT(read, 5, 1, do_i2c_read, "", ""),
+ U_BOOT_CMD_MKENT(reset, 0, 1, do_i2c_reset, "", ""),
+ #if defined(CONFIG_CMD_SDRAM)
+ U_BOOT_CMD_MKENT(sdram, 1, 1, do_i2c_sdram, "", ""),
+@@ -1315,6 +1373,7 @@ U_BOOT_CMD(
+ "i2c mw chip address[.0, .1, .2] value [count] - write to I2C device (fill)\n"
+ "i2c nm chip address[.0, .1, .2] - write to I2C device (constant address)\n"
+ "i2c probe - show devices on the I2C bus\n"
++ "i2c read chip address[.0, .1, .2] length memaddress - read to memory \n"
+ "i2c reset - re-init the I2C Controller\n"
+ #if defined(CONFIG_CMD_SDRAM)
+ "i2c sdram chip - print SDRAM configuration information\n"
+@@ -1322,8 +1381,7 @@ U_BOOT_CMD(
+ "i2c speed [speed] - show or set I2C bus speed"
+ );
+
+-#if defined(CONFIG_I2C_MUX)
+-
++#if defined(CONFIG_I2C_MUX)
+ int i2c_mux_add_device(I2C_MUX_DEVICE *dev)
+ {
+ I2C_MUX_DEVICE *devtmp = i2c_mux_devices;
+--
+1.7.0
+
diff --git a/recipes/u-boot/u-boot-git/0007-cmd_setexpr-allow-memory-addresses-and-env-vars-in-e.patch b/recipes/u-boot/u-boot-git/0007-cmd_setexpr-allow-memory-addresses-and-env-vars-in-e.patch
new file mode 100644
index 0000000000..13408657b4
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/0007-cmd_setexpr-allow-memory-addresses-and-env-vars-in-e.patch
@@ -0,0 +1,89 @@
+From 0d685fe90ab92ccb9f15b7d79b1063f5b79b2dd5 Mon Sep 17 00:00:00 2001
+From: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
+Date: Thu, 25 Feb 2010 11:05:31 +0100
+Subject: [PATCH 7/7] cmd_setexpr: allow memory addresses and env vars in expressions
+
+This patch add functionality to use memory addresses and environment variables in
+expressions. This increases the power of expressions substantially
+
+It adheres to the standard convemtions: memory addresses can be given in the format
+*address (e.g. *1000), environment variables as $this_var.
+environment variables are not processed recursively but can contain both constants
+and memory addresses.
+
+Rationale for this change is that it allows masking off bits from a byte that is
+obtained by reading data from e.g. i2c.
+
+Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
+
+---
+
+If recursive environment vars is desired: this can be added easily by changing the
+if statement into a while statement.
+I figured that would be somewhat over the top though (and, unless you take
+special precautions you can run into an endless loop if an env var contains
+its own name.
+If it is desired, please let me know and I happily will add it.
+---
+ common/cmd_setexpr.c | 31 ++++++++++++++++++++++++++++---
+ 1 files changed, 28 insertions(+), 3 deletions(-)
+
+diff --git a/common/cmd_setexpr.c b/common/cmd_setexpr.c
+index f8b5d4d..a7c6f53 100644
+--- a/common/cmd_setexpr.c
++++ b/common/cmd_setexpr.c
+@@ -28,10 +28,28 @@
+ #include <config.h>
+ #include <command.h>
+
++static ulong get_arg(char *s, int w)
++{
++ ulong *p;
++
++ /* if the parameter starts with a * then assume is a pointer to the value we want */
++ if (s[0] == '*') {
++ p = (ulong *)simple_strtoul(&s[1], NULL, 16);
++ switch (w) {
++ case 1: return((ulong)(*(uchar *)p));
++ case 2: return((ulong)(*(ushort *)p));
++ case 4: return(*p);
++ }
++ } else {
++ return simple_strtoul(s, NULL, 16);
++ }
++}
++
+ int do_setexpr(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+ {
+ ulong a, b;
+ char buf[16];
++ int w;
+
+ /* Validate arguments */
+ if ((argc != 5) || (strlen(argv[3]) != 1)) {
+@@ -39,8 +61,10 @@ int do_setexpr(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+ return 1;
+ }
+
+- a = simple_strtoul(argv[2], NULL, 16);
+- b = simple_strtoul(argv[4], NULL, 16);
++ w = cmd_get_data_size(argv[0], 4);
++
++ a = get_arg(argv[2], w);
++ b = get_arg(argv[4], w);
+
+ switch (argv[3][0]) {
+ case '|': sprintf(buf, "%lx", (a | b)); break;
+@@ -64,7 +88,8 @@ int do_setexpr(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+ U_BOOT_CMD(
+ setexpr, 5, 0, do_setexpr,
+ "set environment variable as the result of eval expression",
+- "name value1 <op> value2\n"
++ "[.b, .w, .l] name value1 <op> value2\n"
+ " - set environment variable 'name' to the result of the evaluated\n"
+ " express specified by <op>. <op> can be &, |, ^, +, -, *, /, %"
++ " size argument is only meaningful if value1 and/or value2 are memory addresses"
+ );
+--
+1.7.0
+
diff --git a/recipes/u-boot/u-boot-git/Cortex-A8-erratum-725233.diff b/recipes/u-boot/u-boot-git/Cortex-A8-erratum-725233.diff
new file mode 100644
index 0000000000..73f955b69a
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/Cortex-A8-erratum-725233.diff
@@ -0,0 +1,45 @@
+From: Siarhei Siamashka <siarhei.siamashka@gmail.com>
+Date: Wed, 24 Feb 2010 04:56:36 +0000 (-0500)
+Subject: OMAP3: workaround for ARM Cortex-A8 erratum 725233
+X-Git-Url: http://git.denx.de/?p=u-boot%2Fu-boot-arm.git;a=commitdiff_plain;h=42d97d08838d4e010d80c92ad1300c426320dd18
+
+OMAP3: workaround for ARM Cortex-A8 erratum 725233
+
+725233: PLD instructions executed with PLD data forwarding
+enabled can result in a processor deadlock
+
+This deadlock can happen when NEON load instructions are used together
+with cache preload instructions (PLD). The problematic conditions
+can be triggered in-the-wild by NEON optimized functions from pixman
+library (http://cgit.freedesktop.org/pixman), which perform dynamic
+adjustment of prefetch distance.
+
+The workaround disables PLD data forwarding by setting PLD_FWD bit
+in L2 Cache Auxiliary Control Register as recommended in ARM Cortex-A8
+errata list.
+
+The deadlock can only happen on r1pX revisions of Cortex-A8 (used in
+OMAP34xx/OMAP35xx). Performance impact of the workaround is practically
+non-existant.
+
+Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
+Signed-off-by: Sandeep Paulraj <s-paulraj@ti.com>
+---
+
+diff --git a/cpu/arm_cortexa8/omap3/board.c b/cpu/arm_cortexa8/omap3/board.c
+index 2aa69b3..7b78fa4 100644
+--- a/cpu/arm_cortexa8/omap3/board.c
++++ b/cpu/arm_cortexa8/omap3/board.c
+@@ -146,6 +146,12 @@ void setup_auxcr()
+ __asm__ __volatile__("orr r0, r0, #1 << 5");
+ /* SMI instruction to call ROM Code API */
+ __asm__ __volatile__(".word 0xE1600070");
++ /* Set PLD_FWD bit in L2AUXCR (Cortex-A8 erratum 725233 workaround) */
++ __asm__ __volatile__("mov r12, #0x2");
++ __asm__ __volatile__("mrc p15, 1, r0, c9, c0, 2");
++ __asm__ __volatile__("orr r0, r0, #1 << 27");
++ /* SMI instruction to call ROM Code API */
++ __asm__ __volatile__(".word 0xE1600070");
+ __asm__ __volatile__("mov r0, %0":"=r"(i));
+ __asm__ __volatile__("mov r12, %0":"=r"(j));
+ }
diff --git a/recipes/u-boot/u-boot-git/beagleboard/0001-omap3-clock.c-don-t-reprogram-clocks-when-trying-to-.patch b/recipes/u-boot/u-boot-git/beagleboard/0001-omap3-clock.c-don-t-reprogram-clocks-when-trying-to-.patch
new file mode 100644
index 0000000000..eead4b9d7c
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/beagleboard/0001-omap3-clock.c-don-t-reprogram-clocks-when-trying-to-.patch
@@ -0,0 +1,50 @@
+From 0c597fe20bab64deca7d71e7da6c0a7e553a2a7b Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Thu, 18 Feb 2010 11:05:49 +0100
+Subject: [PATCH 1/2] omap3 clock.c: don't reprogram clocks when trying to find out clock divider
+
+---
+ cpu/arm_cortexa8/omap3/clock.c | 14 +++++++++-----
+ 1 files changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/cpu/arm_cortexa8/omap3/clock.c b/cpu/arm_cortexa8/omap3/clock.c
+index d67517a..40bd679 100644
+--- a/cpu/arm_cortexa8/omap3/clock.c
++++ b/cpu/arm_cortexa8/omap3/clock.c
+@@ -40,17 +40,19 @@
+ *****************************************************************************/
+ u32 get_osc_clk_speed(void)
+ {
+- u32 start, cstart, cend, cdiff, val;
++ u32 start, cstart, cend, cdiff, cdiv, val;
+ struct prcm *prcm_base = (struct prcm *)PRCM_BASE;
+ struct prm *prm_base = (struct prm *)PRM_BASE;
+ struct gptimer *gpt1_base = (struct gptimer *)OMAP34XX_GPT1;
+ struct s32ktimer *s32k_base = (struct s32ktimer *)SYNC_32KTIMER_BASE;
+
+ val = readl(&prm_base->clksrc_ctrl);
+-
+- /* If SYS_CLK is being divided by 2, remove for now */
+- val = (val & (~SYSCLKDIV_2)) | SYSCLKDIV_1;
+- writel(val, &prm_base->clksrc_ctrl);
++ if (val & SYSCLKDIV_2)
++ cdiv = 2;
++ else if (val & SYSCLKDIV_1)
++ cdiv = 1;
++ else
++ cdiv = 1;
+
+ /* enable timer2 */
+ val = readl(&prcm_base->clksel_wkup) | CLKSEL_GPT1;
+@@ -83,6 +85,8 @@ u32 get_osc_clk_speed(void)
+ cend = readl(&gpt1_base->tcrr); /* get end sys_clk count */
+ cdiff = cend - cstart; /* get elapsed ticks */
+
++ cdiff *= cdiv;
++
+ /* based on number of ticks assign speed */
+ if (cdiff > 19000)
+ return S38_4M;
+--
+1.6.6.1
+
diff --git a/recipes/u-boot/u-boot-git/beagleboard/0002-beagleboard-add-pinmuxing-for-beagleboard-XM.patch b/recipes/u-boot/u-boot-git/beagleboard/0002-beagleboard-add-pinmuxing-for-beagleboard-XM.patch
new file mode 100644
index 0000000000..fe014084d8
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/beagleboard/0002-beagleboard-add-pinmuxing-for-beagleboard-XM.patch
@@ -0,0 +1,69 @@
+From 8698ae8de6be63c35d8816e78b0e53c6a4b74933 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Thu, 18 Feb 2010 11:19:50 +0100
+Subject: [PATCH 2/2] beagleboard: add pinmuxing for beagleboard XM
+
+---
+ board/ti/beagle/beagle.c | 16 ++++++++++++++--
+ board/ti/beagle/beagle.h | 20 ++++++++++++++++++++
+ 2 files changed, 34 insertions(+), 2 deletions(-)
+
+diff --git a/board/ti/beagle/beagle.c b/board/ti/beagle/beagle.c
+index 1d91c76..8b5243b 100644
+--- a/board/ti/beagle/beagle.c
++++ b/board/ti/beagle/beagle.c
+@@ -182,6 +182,18 @@ void set_muxconf_regs(void)
+ {
+ MUX_BEAGLE();
+
+- if (beagle_revision != REVISION_AXBX)
+- MUX_BEAGLE_C();
++ switch(beagle_revision) {
++ case REVISION_AXBX:
++ break;
++ case REVISION_CX:
++ MUX_BEAGLE_C();
++ break;
++ case REVISION_C4:
++ MUX_BEAGLE_C();
++ break;
++ case REVISION_XM:
++ MUX_BEAGLE_C();
++ MUX_BEAGLE_XM();
++ break;
++ }
+ }
+diff --git a/board/ti/beagle/beagle.h b/board/ti/beagle/beagle.h
+index db17160..adf8c5a 100644
+--- a/board/ti/beagle/beagle.h
++++ b/board/ti/beagle/beagle.h
+@@ -387,6 +387,26 @@ const omap3_sysinfo sysinfo = {
+ MUX_VAL(CP(UART2_RTS), (IDIS | PTD | DIS | M0)) /*UART2_RTS*/\
+ MUX_VAL(CP(UART2_TX), (IDIS | PTD | DIS | M0)) /*UART2_TX*/
+
++#define MUX_BEAGLE_XM() \
++ MUX_VAL(CP(DSS_DATA0), (IDIS | PTD | DIS | M7)) /*safe_mode*/\
++ MUX_VAL(CP(DSS_DATA1), (IDIS | PTD | DIS | M7)) /*safe_mode*/\
++ MUX_VAL(CP(DSS_DATA2), (IDIS | PTD | DIS | M7)) /*safe_mode*/\
++ MUX_VAL(CP(DSS_DATA3), (IDIS | PTD | DIS | M7)) /*safe_mode*/\
++ MUX_VAL(CP(DSS_DATA4), (IDIS | PTD | DIS | M7)) /*safe_mode*/\
++ MUX_VAL(CP(DSS_DATA5), (IDIS | PTD | DIS | M7)) /*safe_mode*/\
++ MUX_VAL(CP(DSS_DATA18), (IDIS | PTD | DIS | M3)) /*DSS_DATA0*/\
++ MUX_VAL(CP(DSS_DATA19), (IDIS | PTD | DIS | M3)) /*DSS_DATA1*/\
++ MUX_VAL(CP(DSS_DATA20), (IDIS | PTD | DIS | M3)) /*DSS_DATA2*/\
++ MUX_VAL(CP(DSS_DATA21), (IDIS | PTD | DIS | M3)) /*DSS_DATA3*/\
++ MUX_VAL(CP(DSS_DATA22), (IDIS | PTD | DIS | M3)) /*DSS_DATA4*/\
++ MUX_VAL(CP(DSS_DATA23), (IDIS | PTD | DIS | M3)) /*DSS_DATA5*/\
++ MUX_VAL(CP(SYS_BOOT0), (IDIS | PTD | DIS | M3)) /*DSS_DATA18*/\
++ MUX_VAL(CP(SYS_BOOT1), (IDIS | PTD | DIS | M3)) /*DSS_DATA19*/\
++ MUX_VAL(CP(SYS_BOOT3), (IDIS | PTD | DIS | M3)) /*DSS_DATA20*/\
++ MUX_VAL(CP(SYS_BOOT4), (IDIS | PTD | DIS | M3)) /*DSS_DATA21*/\
++ MUX_VAL(CP(SYS_BOOT5), (IDIS | PTD | DIS | M3)) /*DSS_DATA22*/\
++ MUX_VAL(CP(SYS_BOOT6), (IDIS | PTD | DIS | M3)) /*DSS_DATA23*/
++
+ /*
+ * Display Configuration
+ */
+--
+1.6.6.1
+
diff --git a/recipes/u-boot/u-boot-git/beagleboard/0003-beagleboard-move-muxing-into-revision-print-switch.patch b/recipes/u-boot/u-boot-git/beagleboard/0003-beagleboard-move-muxing-into-revision-print-switch.patch
new file mode 100644
index 0000000000..3750cf8990
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/beagleboard/0003-beagleboard-move-muxing-into-revision-print-switch.patch
@@ -0,0 +1,53 @@
+From 24e335a1457da32a1d79621d3a24462d6fb96853 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Thu, 18 Feb 2010 11:55:26 +0100
+Subject: [PATCH] beagleboard: move muxing into revision print switch()
+
+---
+ board/ti/beagle/beagle.c | 19 ++++---------------
+ 1 files changed, 4 insertions(+), 15 deletions(-)
+
+diff --git a/board/ti/beagle/beagle.c b/board/ti/beagle/beagle.c
+index 8b5243b..8fac6b2 100644
+--- a/board/ti/beagle/beagle.c
++++ b/board/ti/beagle/beagle.c
+@@ -101,12 +101,16 @@ void beagle_identify(void)
+ break;
+ case REVISION_CX:
+ printf("C1/C2/C3\n");
++ MUX_BEAGLE_C();
+ break;
+ case REVISION_C4:
+ printf("C4\n");
++ MUX_BEAGLE_C();
+ break;
+ case REVISION_XM:
+ printf("XM\n");
++ MUX_BEAGLE_C();
++ MUX_BEAGLE_XM();
+ break;
+ default:
+ printf("unknown 0x%02x\n", beagle_revision);
+@@ -181,19 +185,4 @@ int misc_init_r(void)
+ void set_muxconf_regs(void)
+ {
+ MUX_BEAGLE();
+-
+- switch(beagle_revision) {
+- case REVISION_AXBX:
+- break;
+- case REVISION_CX:
+- MUX_BEAGLE_C();
+- break;
+- case REVISION_C4:
+- MUX_BEAGLE_C();
+- break;
+- case REVISION_XM:
+- MUX_BEAGLE_C();
+- MUX_BEAGLE_XM();
+- break;
+- }
+ }
+--
+1.6.6.1
+
diff --git a/recipes/u-boot/u-boot-git/beagleboard/720MHz.patch b/recipes/u-boot/u-boot-git/beagleboard/720MHz.patch
index 5fe56f37a4..c50e0bd793 100644
--- a/recipes/u-boot/u-boot-git/beagleboard/720MHz.patch
+++ b/recipes/u-boot/u-boot-git/beagleboard/720MHz.patch
@@ -1,87 +1,3 @@
-Delivered-To: koen@beagleboard.org
-Received: by 10.216.36.75 with SMTP id v53cs218072wea;
- Fri, 8 Jan 2010 07:40:21 -0800 (PST)
-Received: by 10.142.4.39 with SMTP id 39mr2584681wfd.128.1262965220278;
- Fri, 08 Jan 2010 07:40:20 -0800 (PST)
-Return-Path: <33FFHSwYPC8Aqngyoshkgmrkhugxj.uxmhkgmrkhugxjmuumrkmxu0vy.ius@listserv.bounces.google.com>
-Received: from mail-pw0-f72.google.com (mail-pw0-f72.google.com [209.85.160.72])
- by mx.google.com with ESMTP id 38si23195897pzk.46.2010.01.08.07.40.18;
- Fri, 08 Jan 2010 07:40:19 -0800 (PST)
-Received-SPF: pass (google.com: domain of 33FFHSwYPC8Aqngyoshkgmrkhugxj.uxmhkgmrkhugxjmuumrkmxu0vy.ius@listserv.bounces.google.com designates 209.85.160.72 as permitted sender) client-ip=209.85.160.72;
-Authentication-Results: mx.google.com; spf=pass (google.com: domain of 33FFHSwYPC8Aqngyoshkgmrkhugxj.uxmhkgmrkhugxjmuumrkmxu0vy.ius@listserv.bounces.google.com designates 209.85.160.72 as permitted sender) smtp.mail=33FFHSwYPC8Aqngyoshkgmrkhugxj.uxmhkgmrkhugxjmuumrkmxu0vy.ius@listserv.bounces.google.com; dkim=pass (test mode) header.i=@googlegroups.com
-Received: by pwj4 with SMTP id 4sf2565630pwj.11
- for <multiple recipients>; Fri, 08 Jan 2010 07:40:18 -0800 (PST)
-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=googlegroups.com; s=beta;
- h=domainkey-signature:received:x-beenthere:received:received:received
- :received:received-spf:received:mime-version:received:date
- :message-id:subject:from:to:x-original-authentication-results
- :x-original-sender:reply-to:precedence:mailing-list:list-id
- :list-post:list-help:list-archive:x-thread-url:x-message-url:sender
- :list-unsubscribe:list-subscribe:content-type;
- bh=sLkJYeKXFIX8TOTxLWasbW6XSWbNbihsEqHqajWruOU=;
- b=hNYYuHunIzWspBNr+rsCpj+cl3TfrJP/qRi2OR8S8fvW1ATmUGwE3UcFxBx/cz4C47
- rPcDSOVMOKJn2ybeb7z12kDUV7FLPbzI26BjmBUXoLC4yYdCeiwS+pR/gCEP/CZsVNam
- 0/sgZd6Zfnui2nrHnqHFA/eBwvBmNr8njjhzc=
-DomainKey-Signature: a=rsa-sha1; c=nofws;
- d=googlegroups.com; s=beta;
- h=x-beenthere:received-spf:mime-version:date:message-id:subject:from
- :to:x-original-authentication-results:x-original-sender:reply-to
- :precedence:mailing-list:list-id:list-post:list-help:list-archive
- :x-thread-url:x-message-url:sender:list-unsubscribe:list-subscribe
- :content-type;
- b=kvIhKL3OOVUlwb+XfiZuzkLNRQqtf4QLC8FZStrd2J1zfvTSjTuxtFrU2bqN6OVn+6
- s9CW3qnGQKNfIuBNUfuQirfG7O/QkdVxGx8nXYPwcm1xL9mJa70CGUoNA4gnwZSFXEmA
- v3N+BsCQs8InO9VHQxTmTP1pW4DH9HIPqIjFs=
-Received: by 10.115.67.15 with SMTP id u15mr3692522wak.15.1262965212711;
- Fri, 08 Jan 2010 07:40:12 -0800 (PST)
-X-BeenThere: beagleboard@googlegroups.com
-Received: by 10.114.19.19 with SMTP id 19ls485387was.0.p; Fri, 08 Jan 2010
- 07:40:07 -0800 (PST)
-Received: by 10.114.3.19 with SMTP id 19mr7029424wac.17.1262965207675;
- Fri, 08 Jan 2010 07:40:07 -0800 (PST)
-Received: by 10.114.3.19 with SMTP id 19mr7029423wac.17.1262965207655;
- Fri, 08 Jan 2010 07:40:07 -0800 (PST)
-Return-Path: <khasim@beagleboard.org>
-Received: from mail-px0-f196.google.com (mail-px0-f196.google.com [209.85.216.196])
- by gmr-mx.google.com with ESMTP id 23si8245940pxi.8.2010.01.08.07.40.07;
- Fri, 08 Jan 2010 07:40:07 -0800 (PST)
-Received-SPF: neutral (google.com: 209.85.216.196 is neither permitted nor denied by best guess record for domain of khasim@beagleboard.org) client-ip=209.85.216.196;
-Received: by pxi34 with SMTP id 34so11355653pxi.8
- for <beagleboard@googlegroups.com>; Fri, 08 Jan 2010 07:40:07 -0800 (PST)
-MIME-Version: 1.0
-Received: by 10.142.75.10 with SMTP id x10mr1272361wfa.153.1262965205948; Fri,
- 08 Jan 2010 07:40:05 -0800 (PST)
-Date: Fri, 8 Jan 2010 21:10:05 +0530
-Message-ID: <a8ca84ad1001080740l63fdac79y6b478863b0a5e316@mail.gmail.com>
-Subject: [beagleboard] TI:OMAP: [PATCH 3/4] Support 720Mhz configuration for
- OMAP35xx
-From: Khasim Syed Mohammed <khasim@beagleboard.org>
-To: u-boot@lists.denx.de, beagleboard@googlegroups.com
-X-Original-Authentication-Results: gmr-mx.google.com; spf=neutral (google.com:
- 209.85.216.196 is neither permitted nor denied by best guess record for
- domain of khasim@beagleboard.org) smtp.mail=khasim@beagleboard.org
-X-Original-Sender: khasim@beagleboard.org
-Reply-To: beagleboard@googlegroups.com
-Precedence: list
-Mailing-list: list beagleboard@googlegroups.com; contact beagleboard+owners@googlegroups.com
-List-ID: <beagleboard.googlegroups.com>
-List-Post: <http://groups.google.com/group/beagleboard/post?hl=>,
- <mailto:beagleboard@googlegroups.com>
-List-Help: <http://groups.google.com/support/?hl=>, <mailto:beagleboard+help@googlegroups.com>
-List-Archive: <http://groups.google.com/group/beagleboard?hl=>
-X-Thread-Url: http://groups.google.com/group/beagleboard/t/1d8e4b923e126fcb
-X-Message-Url: http://groups.google.com/group/beagleboard/msg/b8825bed3084009a
-Sender: beagleboard@googlegroups.com
-List-Unsubscribe: <http://groups.google.com/group/beagleboard/subscribe?hl=>,
- <mailto:beagleboard+unsubscribe@googlegroups.com>
-List-Subscribe: <http://groups.google.com/group/beagleboard/subscribe?hl=>,
- <mailto:beagleboard+subscribe@googlegroups.com>
-Content-Type: multipart/mixed; boundary=001636b2ac6d98250e047ca900e4
-
---001636b2ac6d98250e047ca900e4
-Content-Type: text/plain; charset=ISO-8859-1
-
From bba669562fa208d12f4c7cd8188446e8576cd6ee Mon Sep 17 00:00:00 2001
From: Syed Mohammed Khasim <khasim@ti.com>
Date: Fri, 8 Jan 2010 20:34:37 +0530
@@ -112,7 +28,7 @@ index 0def5a6..7985ee9 100644
twl4030_power_init();
twl4030_led_init();
-+ if (beagle_revision == REVISION_C4) {
++ if ((beagle_revision == REVISION_C4) || (beagle_revision == REVISION_XM)) {
+
+ /* Select TWL4030 VSEL to support 720Mhz */
+ twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VAUX2_DEDICATED,
@@ -248,15 +164,3 @@ index f260ecb..b96c96c 100644
--
1.5.6.3
---001636b2ac6d98250e047ca900e4
-Content-Type: text/plain; charset=ISO-8859-1
-
---
-You received this message because you are subscribed to the Google Groups "Beagle Board" group.
-To post to this group, send email to beagleboard@googlegroups.com.
-To unsubscribe from this group, send email to beagleboard+unsubscribe@googlegroups.com.
-For more options, visit this group at http://groups.google.com/group/beagleboard?hl=en.
-
-
-
---001636b2ac6d98250e047ca900e4--
diff --git a/recipes/u-boot/u-boot-git/beagleboard/revision-detection.patch b/recipes/u-boot/u-boot-git/beagleboard/revision-detection.patch
index c2a41bfcc7..634efda385 100644
--- a/recipes/u-boot/u-boot-git/beagleboard/revision-detection.patch
+++ b/recipes/u-boot/u-boot-git/beagleboard/revision-detection.patch
@@ -1,87 +1,3 @@
-Delivered-To: koen@beagleboard.org
-Received: by 10.216.36.75 with SMTP id v53cs217947wea;
- Fri, 8 Jan 2010 07:38:03 -0800 (PST)
-Received: by 10.141.214.24 with SMTP id r24mr6834000rvq.27.1262965082475;
- Fri, 08 Jan 2010 07:38:02 -0800 (PST)
-Return-Path: <3UlFHSwYPCzYcZSkaeTWSYdWTgSjV.gjYTWSYdWTgSjVYggYdWYjgmhk.Uge@listserv.bounces.google.com>
-Received: from mail-pw0-f72.google.com (mail-pw0-f72.google.com [209.85.160.72])
- by mx.google.com with ESMTP id 31si42836225pzk.96.2010.01.08.07.38.00;
- Fri, 08 Jan 2010 07:38:01 -0800 (PST)
-Received-SPF: pass (google.com: domain of 3UlFHSwYPCzYcZSkaeTWSYdWTgSjV.gjYTWSYdWTgSjVYggYdWYjgmhk.Uge@listserv.bounces.google.com designates 209.85.160.72 as permitted sender) client-ip=209.85.160.72;
-Authentication-Results: mx.google.com; spf=pass (google.com: domain of 3UlFHSwYPCzYcZSkaeTWSYdWTgSjV.gjYTWSYdWTgSjVYggYdWYjgmhk.Uge@listserv.bounces.google.com designates 209.85.160.72 as permitted sender) smtp.mail=3UlFHSwYPCzYcZSkaeTWSYdWTgSjV.gjYTWSYdWTgSjVYggYdWYjgmhk.Uge@listserv.bounces.google.com; dkim=pass (test mode) header.i=@googlegroups.com
-Received: by pwj4 with SMTP id 4sf2565182pwj.11
- for <multiple recipients>; Fri, 08 Jan 2010 07:38:00 -0800 (PST)
-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=googlegroups.com; s=beta;
- h=domainkey-signature:received:x-beenthere:received:received:received
- :received:received-spf:received:mime-version:received:date
- :message-id:subject:from:to:x-original-authentication-results
- :x-original-sender:reply-to:precedence:mailing-list:list-id
- :list-post:list-help:list-archive:x-thread-url:x-message-url:sender
- :list-unsubscribe:list-subscribe:content-type;
- bh=XdDWC3Pjbe6mfVpRg0Nyb4elMKzFUcLRQ+7/Tb3fHMQ=;
- b=NiM6Z+/ubLFaxomCEKnZjYyFgB7ZbE4xWWwqF6i/H8BQiedPp1rBmQSdQ2EH4qDFgm
- D3DR5jXVjtOALhgh/9cxU/S46ltiM5rtGnwtcjgV+Gv9r5/sfqhze9c81t7bzIo+bpqn
- cg8yNHOFjwkPSWdSidIhKnZJGQRj/ZIgxJxCw=
-DomainKey-Signature: a=rsa-sha1; c=nofws;
- d=googlegroups.com; s=beta;
- h=x-beenthere:received-spf:mime-version:date:message-id:subject:from
- :to:x-original-authentication-results:x-original-sender:reply-to
- :precedence:mailing-list:list-id:list-post:list-help:list-archive
- :x-thread-url:x-message-url:sender:list-unsubscribe:list-subscribe
- :content-type;
- b=0jHA96QBedAxJl8vWrKHetbULCj+FIcyXTmI01rlbnfXOm8WuPhJDLyj7Qo34LiQXE
- dYkeQ2RNv3L03nbVuPezNfUKHuKLONUQKVvAfxRDset7eLpsYuKQZADZ+loSfkeVlwDW
- ai/7Z937On5tliSGUDPp+73oUNfje1ReYx+dc=
-Received: by 10.115.87.31 with SMTP id p31mr3273178wal.7.1262965074762;
- Fri, 08 Jan 2010 07:37:54 -0800 (PST)
-X-BeenThere: beagleboard@googlegroups.com
-Received: by 10.115.116.23 with SMTP id t23ls485636wam.1.p; Fri, 08 Jan 2010
- 07:37:51 -0800 (PST)
-Received: by 10.114.3.19 with SMTP id 19mr7028808wac.17.1262965071286;
- Fri, 08 Jan 2010 07:37:51 -0800 (PST)
-Received: by 10.114.3.19 with SMTP id 19mr7028807wac.17.1262965071261;
- Fri, 08 Jan 2010 07:37:51 -0800 (PST)
-Return-Path: <khasim@beagleboard.org>
-Received: from mail-px0-f174.google.com (mail-px0-f174.google.com [209.85.216.174])
- by gmr-mx.google.com with ESMTP id 16si3405423pxi.11.2010.01.08.07.37.51;
- Fri, 08 Jan 2010 07:37:51 -0800 (PST)
-Received-SPF: neutral (google.com: 209.85.216.174 is neither permitted nor denied by best guess record for domain of khasim@beagleboard.org) client-ip=209.85.216.174;
-Received: by mail-px0-f174.google.com with SMTP id 4so2127527pxi.33
- for <beagleboard@googlegroups.com>; Fri, 08 Jan 2010 07:37:51 -0800 (PST)
-MIME-Version: 1.0
-Received: by 10.142.66.15 with SMTP id o15mr4287776wfa.145.1262965071051; Fri,
- 08 Jan 2010 07:37:51 -0800 (PST)
-Date: Fri, 8 Jan 2010 21:07:50 +0530
-Message-ID: <a8ca84ad1001080737r2312270ao80aa04ce60cc780@mail.gmail.com>
-Subject: [beagleboard] TI:OMAP: [PATCH 1/4] OMAP3 Beagle Update revision
- detection
-From: Khasim Syed Mohammed <khasim@beagleboard.org>
-To: u-boot@lists.denx.de, beagleboard@googlegroups.com
-X-Original-Authentication-Results: gmr-mx.google.com; spf=neutral (google.com:
- 209.85.216.174 is neither permitted nor denied by best guess record for
- domain of khasim@beagleboard.org) smtp.mail=khasim@beagleboard.org
-X-Original-Sender: khasim@beagleboard.org
-Reply-To: beagleboard@googlegroups.com
-Precedence: list
-Mailing-list: list beagleboard@googlegroups.com; contact beagleboard+owners@googlegroups.com
-List-ID: <beagleboard.googlegroups.com>
-List-Post: <http://groups.google.com/group/beagleboard/post?hl=>,
- <mailto:beagleboard@googlegroups.com>
-List-Help: <http://groups.google.com/support/?hl=>, <mailto:beagleboard+help@googlegroups.com>
-List-Archive: <http://groups.google.com/group/beagleboard?hl=>
-X-Thread-Url: http://groups.google.com/group/beagleboard/t/1d4ac362a651981d
-X-Message-Url: http://groups.google.com/group/beagleboard/msg/8a2d1aa3c9c40beb
-Sender: beagleboard@googlegroups.com
-List-Unsubscribe: <http://groups.google.com/group/beagleboard/subscribe?hl=>,
- <mailto:beagleboard+unsubscribe@googlegroups.com>
-List-Subscribe: <http://groups.google.com/group/beagleboard/subscribe?hl=>,
- <mailto:beagleboard+subscribe@googlegroups.com>
-Content-Type: multipart/mixed; boundary=0016e64cc3d4779e0f047ca8f8bb
-
---0016e64cc3d4779e0f047ca8f8bb
-Content-Type: text/plain; charset=ISO-8859-1
-
From 15fbe5ff9ee2fd2f8da4c16805d6c7ccf7244bae Mon Sep 17 00:00:00 2001
From: Syed Mohammed Khasim <khasim@ti.com>
Date: Fri, 8 Jan 2010 20:13:47 +0530
@@ -134,7 +50,7 @@ index 32d501e..0def5a6 100644
+ * GPIO173, GPIO172, GPIO171: 1 1 1 => Ax/Bx
+ * GPIO173, GPIO172, GPIO171: 1 1 0 => C1/2/3
+ * GPIO173, GPIO172, GPIO171: 1 0 1 => C4
-+ * GPIO173, GPIO172, GPIO171: 0 0 0 => D
++ * GPIO173, GPIO172, GPIO171: 0 0 0 => XM
*/
void beagle_identify(void)
{
@@ -180,8 +96,8 @@ index 32d501e..0def5a6 100644
+ case REVISION_C4:
+ printf("C4\n");
+ break;
-+ case REVISION_D:
-+ printf("D\n");
++ case REVISION_XM:
++ printf("XM\n");
+ break;
+ default:
+ printf("unknown 0x%02x\n", beagle_revision);
@@ -211,7 +127,7 @@ index 7fe6275..b1720c9 100644
+#define REVISION_AXBX 0x7
+#define REVISION_CX 0x6
+#define REVISION_C4 0x5
-+#define REVISION_D 0x0
++#define REVISION_XM 0x0
/*
* IEN - Input Enable
@@ -226,16 +142,3 @@ index 7fe6275..b1720c9 100644
MUX_VAL(CP(MCSPI1_CS2), (IDIS | PTD | DIS | M4)) /*GPIO_176*/\
--
1.5.6.3
-
---0016e64cc3d4779e0f047ca8f8bb
-Content-Type: text/plain; charset=ISO-8859-1
-
---
-You received this message because you are subscribed to the Google Groups "Beagle Board" group.
-To post to this group, send email to beagleboard@googlegroups.com.
-To unsubscribe from this group, send email to beagleboard+unsubscribe@googlegroups.com.
-For more options, visit this group at http://groups.google.com/group/beagleboard?hl=en.
-
-
-
---0016e64cc3d4779e0f047ca8f8bb--
diff --git a/recipes/u-boot/u-boot_git.bb b/recipes/u-boot/u-boot_git.bb
index 6273e044da..fb81caf183 100644
--- a/recipes/u-boot/u-boot_git.bb
+++ b/recipes/u-boot/u-boot_git.bb
@@ -1,5 +1,5 @@
require u-boot.inc
-PR ="r38"
+PR ="r42"
FILESPATHPKG =. "u-boot-git:"
@@ -12,6 +12,8 @@ SRCREV_afeb9260 = "6b8edfde22acc574b5532e9f086e6a7287a9bc78"
SRCREV_afeb9260-180 = "6b8edfde22acc574b5532e9f086e6a7287a9bc78"
SRCREV_palmpre = "6b8edfde22acc574b5532e9f086e6a7287a9bc78"
SRCREV_cm-t35 = "3c014f1586d5bfe30dca7549396915c83f31cd30"
+SRCREV_mpc8641-hpcn = "f20393c5e787b3776c179d20f82a86bda124d651"
+SRCREV_p2020ds = "f20393c5e787b3776c179d20f82a86bda124d651"
SRC_URI_append_afeb9260 = " file://AFEB9260-network-fix.patch;patch=1"
SRC_URI_append_afeb9260-180 = " file://AFEB9260-network-fix.patch;patch=1"
SRC_URI_append_cm-t35 = "file://cm-t35/cm-t35.patch;patch=1"
@@ -23,14 +25,30 @@ file://revision-detection.patch;patch=1 \
file://i2c.patch;patch=1 \
file://720MHz.patch;patch=1 \
file://dss.patch;patch=1 \
+file://0001-omap3-clock.c-don-t-reprogram-clocks-when-trying-to-.patch;patch=1 \
+file://0002-beagleboard-add-pinmuxing-for-beagleboard-XM.patch;patch=1 \
+file://0003-beagleboard-move-muxing-into-revision-print-switch.patch;patch=1 \
+file://Cortex-A8-erratum-725233.diff;patch=1 \
"
SRCREV_beagleboard = "a5cf522a91ba479d459f8221135bdb3e9ae97479"
PV_beagleboard = "2009.11-rc1+${PR}+gitr${SRCREV}"
-SRCREV_calamari = "f67066b6b0740b826ed862615c5ab022aaf4779a"
-PV_calamari = "2009.08+${PR}+gitr${SRCREV}"
-SRC_URI_append_calamari = " file://buggy-gcc-really-no-spe.patch;patch=1"
+SRCREV_calamari = "533cf3a024947aaf74c16573a6d951cd0c3d0a7d"
+
+PV_calamari = "2009.11+${PR}+gitr${SRCREV}"
+SRC_URI_calamari = " \
+ git://git.denx.de/u-boot-mpc85xx.git;protocol=git \
+ file://0002-cmd_itest.c-fix-pointer-dereferencing.patch;patch=1 \
+ file://0001-cmd_i2c.c-reduced-subaddress-length-to-3-bytes.patch;patch=1 \
+ file://0002-cmd_bootm.c-made-subcommand-array-static.patch;patch=1 \
+ file://0003-cmd_i2c.c-reworked-subcommand-handling.patch;patch=1 \
+ file://0004-cmd_i2c.c-sorted-commands-alphabetically.patch;patch=1 \
+ file://0005-cmd_i2c.c-added-i2c-read-to-memory-function.patch;patch=1 \
+ file://0007-cmd_setexpr-allow-memory-addresses-and-env-vars-in-e.patch;patch=1 \
+ "
+
+UBOOT_MACHINE_calamari = "MPC8536DS_config"
SRC_URI_omap3-touchbook = "git://gitorious.org/u-boot-omap3/mainline.git;branch=omap3-dev;protocol=git \
file://fw_env.config \
@@ -79,8 +97,34 @@ SRC_URI_omapzoom = "git://www.sakoman.net/git/u-boot-omap3.git;branch=omap3-dev;
SRCREV_omapzoom = "d691b424f1f5bf7eea3a4131dfc578d272e8f335"
PV_omapzoom = "2009.01+${PR}+gitr${SRCREV}"
-SRCREV_omapzoom2 = "3672cd5c3b53d219d33345eebad4e25ad5bf6d52"
-PV_omapzoom2 = "2009.05+${PR}+gitr${SRCREV}"
+SRC_URI_omapzoom2 = "git://dev.omapzoom.org/pub/scm/bootloader/u-boot.git;branch=master;protocol=git \
+ file://0001-OMAP3-set-L1NEON-bit-in-aux-control-register.patch;patch=1"
+SRCREV_omapzoom2 = "78e778e0ea884306841c6499851a1e35177d81d0"
+PV_omapzoom2 = "1.1.4+${PR}+gitr${SRCREV}"
+PE_omapzoom2 = "1"
+
+do_compile_omapzoom2 () {
+ unset LDFLAGS
+ unset CFLAGS
+ unset CPPFLAGS
+ oe_runmake ${UBOOT_MACHINE}
+ oe_runmake all
+ oe_runmake tools
+}
+
+SRC_URI_omapzoom36x = "git://dev.omapzoom.org/pub/scm/bootloader/u-boot.git;branch=master;protocol=git"
+SRCREV_omapzoom36x = "ab45d2a787a9674bed30542139175d8e090e0749"
+PV_omapzoom36x = "1.1.4+${PR}+gitr${SRCREV}"
+PE_omapzoom36x = "1"
+
+do_compile_omapzoom36x () {
+ unset LDFLAGS
+ unset CFLAGS
+ unset CPPFLAGS
+ oe_runmake ${UBOOT_MACHINE}
+ oe_runmake all
+ oe_runmake tools
+}
SRC_URI_overo = "git://gitorious.org/u-boot-omap3/mainline.git;branch=omap3-dev;protocol=git \
file://fw-env.patch;patch=1 \
diff --git a/recipes/uclibc/uclibc-0.9.30.3/a780/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/a780/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/a780/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/akita/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/akita/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/akita/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/arm/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/arm/uClibc.machine
new file mode 100644
index 0000000000..898b73a33b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/arm/uClibc.machine
@@ -0,0 +1,69 @@
+#
+# Automatically generated make config: don't edit
+# Mon May 14 10:23:14 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+CONFIG_ARM920T=y
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/armeb/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/armeb/uClibc.machine
new file mode 100644
index 0000000000..2d9f63e531
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/armeb/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 22:07:03 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_BIG_ENDIAN=y
+ARCH_WANTS_BIG_ENDIAN=y
+# ARCH_WANTS_LITTLE_ENDIAN is not set
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/armv4t/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/armv4t/uClibc.machine
new file mode 100644
index 0000000000..898b73a33b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/armv4t/uClibc.machine
@@ -0,0 +1,69 @@
+#
+# Automatically generated make config: don't edit
+# Mon May 14 10:23:14 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+CONFIG_ARM920T=y
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/armv5te/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/armv5te/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/armv5te/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/armv6/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/armv6/uClibc.machine
new file mode 100644
index 0000000000..85f70f70c7
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/armv6/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+UCLIBC_HAS_SOFT_FLOAT=n
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/armv7a/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/armv7a/uClibc.machine
new file mode 100644
index 0000000000..85f70f70c7
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/armv7a/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+UCLIBC_HAS_SOFT_FLOAT=n
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/avr32/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/avr32/uClibc.machine
new file mode 100644
index 0000000000..ed8b1a447e
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/avr32/uClibc.machine
@@ -0,0 +1,54 @@
+#
+# Automatically generated make config: don't edit
+# Thu May 1 16:06:57 2008
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+TARGET_avr32=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="avr32"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_AVR32_AP7=y
+LINKRELAX=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_BIG_ENDIAN=y
+
+#
+# Using Big Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/home/stelios/proj/OE/tmp/uclibc/staging/avr32-angstrom-linux-uclibc/usr/include"
+HAVE_DOT_CONFIG=y
diff --git a/recipes/perl/perl-5.8.7/uclibc.patch b/recipes/uclibc/uclibc-0.9.30.3/bfin/uClibc.config
index e69de29bb2..e69de29bb2 100644
--- a/recipes/perl/perl-5.8.7/uclibc.patch
+++ b/recipes/uclibc/uclibc-0.9.30.3/bfin/uClibc.config
diff --git a/recipes/uclibc/uclibc-0.9.30.3/bfin/uClibc.distro b/recipes/uclibc/uclibc-0.9.30.3/bfin/uClibc.distro
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/bfin/uClibc.distro
diff --git a/recipes/uclibc/uclibc-0.9.30.3/bfin/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/bfin/uClibc.machine
new file mode 100644
index 0000000000..33a294f009
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/bfin/uClibc.machine
@@ -0,0 +1,192 @@
+#
+# Automatically generated make config: don't edit
+# Sat Oct 20 20:22:28 2007
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+TARGET_bfin=y
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="bfin"
+FORCE_OPTIONS_FOR_ARCH=y
+TARGET_SUBARCH=""
+# UCLIBC_FORMAT_ELF is not set
+UCLIBC_FORMAT_FDPIC_ELF=y
+# UCLIBC_FORMAT_FLAT is not set
+# UCLIBC_FORMAT_FLAT_SEP_DATA is not set
+# UCLIBC_FORMAT_SHARED_FLAT is not set
+ARCH_LITTLE_ENDIAN=y
+
+#
+# Using Little Endian
+#
+ARCH_HAS_NO_MMU=y
+
+#
+# Target CPU lacks a memory management unit (MMU)
+#
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+# DO_C99_MATH is not set
+KERNEL_HEADERS="/usr/include"
+# UCLIBC_UCLINUX_BROKEN_MUNMAP is not set
+EXCLUDE_BRK=y
+HAVE_DOT_CONFIG=y
+
+#
+# General Library Settings
+#
+# HAVE_NO_PIC is not set
+DOPIC=y
+# HAVE_NO_SHARED is not set
+# ARCH_HAS_NO_LDSO is not set
+HAVE_SHARED=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+UCLIBC_STATIC_LDCONFIG=y
+LDSO_RUNPATH=y
+UCLIBC_CTOR_DTOR=y
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+PTHREADS_DEBUG_SUPPORT=y
+LINUXTHREADS_OLD=y
+UCLIBC_HAS_LFS=y
+MALLOC=y
+# MALLOC_SIMPLE is not set
+# MALLOC_STANDARD is not set
+# MALLOC_GLIBC_COMPAT is not set
+UCLIBC_DYNAMIC_ATEXIT=y
+# COMPAT_ATEXIT is not set
+# UCLIBC_SUSV3_LEGACY is not set
+# UCLIBC_SUSV3_LEGACY_MACROS is not set
+UCLIBC_HAS_SHADOW=y
+# UCLIBC_HAS_PROGRAM_INVOCATION_NAME is not set
+UCLIBC_HAS___PROGNAME=y
+UNIX98PTY_ONLY=y
+ASSUME_DEVPTS=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+
+#
+# Networking Support
+#
+# UCLIBC_HAS_IPV6 is not set
+# UCLIBC_HAS_RPC is not set
+# UCLIBC_USE_NETLINK is not set
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_STRING_GENERIC_OPT=y
+UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+UCLIBC_HAS_CTYPE_UNSAFE=y
+# UCLIBC_HAS_CTYPE_CHECKED is not set
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+# UCLIBC_HAS_WCHAR is not set
+# UCLIBC_HAS_LOCALE is not set
+# UCLIBC_HAS_HEXADECIMAL_FLOATS is not set
+# UCLIBC_HAS_GLIBC_CUSTOM_PRINTF is not set
+# USE_OLD_VFPRINTF is not set
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+# UCLIBC_HAS_SCANF_GLIBC_A_FLAG is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+UCLIBC_HAS_STDIO_BUFSIZ_4096=y
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
+UCLIBC_HAS_STDIO_GETC_MACRO=y
+UCLIBC_HAS_STDIO_PUTC_MACRO=y
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+# UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE is not set
+# UCLIBC_HAS_GLIBC_CUSTOM_STREAMS is not set
+# UCLIBC_HAS_PRINTF_M_SPEC is not set
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GNU_GETOPT=y
+UCLIBC_HAS_GNU_GETSUBOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+UCLIBC_HAS_REGEX_OLD=y
+UCLIBC_HAS_FNMATCH=y
+UCLIBC_HAS_FNMATCH_OLD=y
+# UCLIBC_HAS_WORDEXP is not set
+# UCLIBC_HAS_FTW is not set
+UCLIBC_HAS_GLOB=y
+# UCLIBC_HAS_GNU_GLOB is not set
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="$(RUNTIME_PREFIX)lib"
+RUNTIME_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/"
+DEVEL_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/usr/"
+MULTILIB=""
+
+#
+# Security options
+#
+# UCLIBC_HAS_ARC4RANDOM is not set
+# HAVE_NO_SSP is not set
+# UCLIBC_HAS_SSP is not set
+UCLIBC_BUILD_RELRO=y
+# UCLIBC_BUILD_NOW is not set
+UCLIBC_BUILD_NOEXECSTACK=y
+
+#
+# uClibc development/debugging options
+#
+CROSS_COMPILER_PREFIX=""
+UCLIBC_EXTRA_CFLAGS=""
+# DODEBUG is not set
+# DODEBUG_PT is not set
+DOSTRIP=y
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+# UCLIBC_MALLOC_DEBUGGING is not set
+WARNINGS="-Wall"
+# EXTRA_WARNINGS is not set
+# DOMULTI is not set
+# UCLIBC_MJN3_ONLY is not set
diff --git a/recipes/uclibc/uclibc-0.9.30.3/c7x0/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/c7x0/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/c7x0/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/cm-x270/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/cm-x270/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/cm-x270/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/collie/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/collie/uClibc.machine
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/collie/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:29:51 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_ARM_OABI=y
+# CONFIG_ARM_EABI is not set
+# USE_BX is not set
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+CONFIG_ARM_SA1100=y
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/dht-walnut/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/dht-walnut/uClibc.machine
new file mode 100644
index 0000000000..2a38cfdd74
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/dht-walnut/uClibc.machine
@@ -0,0 +1,54 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 4 23:50:48 2008
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_avr32 is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+TARGET_powerpc=y
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="powerpc"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_CLASSIC=y
+# CONFIG_E500 is not set
+TARGET_SUBARCH="classic"
+
+#
+# Using ELF file format
+#
+ARCH_BIG_ENDIAN=y
+
+#
+# Using Big Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/home/stelios/proj/OE/tmp/uclibc/staging/powerpc-angstrom-linux-uclibc/usr/include"
+HAVE_DOT_CONFIG=y
diff --git a/recipes/uclibc/uclibc-0.9.30.3/efika/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/efika/uClibc.machine
new file mode 100644
index 0000000000..e059257c09
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/efika/uClibc.machine
@@ -0,0 +1,53 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:25:50 2007
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+TARGET_powerpc=y
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="powerpc"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_CLASSIC=y
+# CONFIG_E500 is not set
+TARGET_SUBARCH="classic"
+
+#
+# Using ELF file format
+#
+ARCH_BIG_ENDIAN=y
+
+#
+# Using Big Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/powerpc-angstrom-linux-uclibc/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/ep93xx/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/ep93xx/uClibc.machine
new file mode 100644
index 0000000000..898b73a33b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/ep93xx/uClibc.machine
@@ -0,0 +1,69 @@
+#
+# Automatically generated make config: don't edit
+# Mon May 14 10:23:14 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+CONFIG_ARM920T=y
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/gumstix-connex/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/gumstix-connex/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/gumstix-connex/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/gumstix-verdex/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/gumstix-verdex/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/gumstix-verdex/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/h2200/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/h2200/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/h2200/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/h3600/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/h3600/uClibc.machine
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/h3600/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:29:51 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_ARM_OABI=y
+# CONFIG_ARM_EABI is not set
+# USE_BX is not set
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+CONFIG_ARM_SA1100=y
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/h3800/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/h3800/uClibc.machine
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/h3800/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:29:51 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_ARM_OABI=y
+# CONFIG_ARM_EABI is not set
+# USE_BX is not set
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+CONFIG_ARM_SA1100=y
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/h3900/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/h3900/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/h3900/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/h4000/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/h4000/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/h4000/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/h5000/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/h5000/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/h5000/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/hx4700/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/hx4700/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/hx4700/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/iwmmxt/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/iwmmxt/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/iwmmxt/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/ixp4xxbe/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/ixp4xxbe/uClibc.machine
new file mode 100644
index 0000000000..2d9f63e531
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/ixp4xxbe/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 22:07:03 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_BIG_ENDIAN=y
+ARCH_WANTS_BIG_ENDIAN=y
+# ARCH_WANTS_LITTLE_ENDIAN is not set
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/kilauea/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/kilauea/uClibc.machine
new file mode 100644
index 0000000000..effef11099
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/kilauea/uClibc.machine
@@ -0,0 +1,55 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 4 23:50:48 2008
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_avr32 is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+TARGET_powerpc=y
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="powerpc"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_CLASSIC=y
+# CONFIG_E500 is not set
+TARGET_SUBARCH="classic"
+
+#
+# Using ELF file format
+#
+ARCH_BIG_ENDIAN=y
+
+#
+# Using Big Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/home/stelios/proj/OE/tmp/uclibc/staging/powerpc-angstrom-linux-uclibc/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/mipsel/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/mipsel/uClibc.machine
new file mode 100644
index 0000000000..07c45f7213
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/mipsel/uClibc.machine
@@ -0,0 +1,63 @@
+#
+# Automatically generated make config: don't edit
+# Wed Jul 9 13:37:36 2008
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_avr32 is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+TARGET_mips=y
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+# TARGET_xtensa is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="mips"
+FORCE_OPTIONS_FOR_ARCH=y
+ARCH_CFLAGS="-mno-split-addresses"
+CONFIG_MIPS_O32_ABI=y
+# CONFIG_MIPS_N32_ABI is not set
+# CONFIG_MIPS_N64_ABI is not set
+# CONFIG_MIPS_ISA_1 is not set
+# CONFIG_MIPS_ISA_2 is not set
+# CONFIG_MIPS_ISA_3 is not set
+# CONFIG_MIPS_ISA_4 is not set
+CONFIG_MIPS_ISA_MIPS32=y
+# CONFIG_MIPS_ISA_MIPS64 is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+# ARCH_BIG_ENDIAN is not set
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+# DO_C99_MATH is not set
+# UCLIBC_HAS_FENV is not set
+KERNEL_HEADERS="/home/kraj/work/cross/mips-none-linux-uclibc/sysroot/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/mpc8313e-rdb/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/mpc8313e-rdb/uClibc.machine
new file mode 100644
index 0000000000..3ad8ff0da1
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/mpc8313e-rdb/uClibc.machine
@@ -0,0 +1,53 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:25:50 2007
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+TARGET_powerpc=y
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="powerpc"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_CLASSIC=y
+# CONFIG_E500 is not set
+TARGET_SUBARCH="classic"
+
+#
+# Using ELF file format
+#
+ARCH_BIG_ENDIAN=y
+
+#
+# Using Big Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+DO_C99_MATH=y
+KERNEL_HEADERS="will be mangled in bitbake"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/mpc8315e-rdb/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/mpc8315e-rdb/uClibc.machine
new file mode 100644
index 0000000000..3ad8ff0da1
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/mpc8315e-rdb/uClibc.machine
@@ -0,0 +1,53 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:25:50 2007
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+TARGET_powerpc=y
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="powerpc"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_CLASSIC=y
+# CONFIG_E500 is not set
+TARGET_SUBARCH="classic"
+
+#
+# Using ELF file format
+#
+ARCH_BIG_ENDIAN=y
+
+#
+# Using Big Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+DO_C99_MATH=y
+KERNEL_HEADERS="will be mangled in bitbake"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/mpc8323e-rdb/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/mpc8323e-rdb/uClibc.machine
new file mode 100644
index 0000000000..620676918b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/mpc8323e-rdb/uClibc.machine
@@ -0,0 +1,54 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:25:50 2007
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+TARGET_powerpc=y
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="powerpc"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_CLASSIC=y
+# CONFIG_E500 is not set
+TARGET_SUBARCH="classic"
+
+#
+# Using ELF file format
+#
+ARCH_BIG_ENDIAN=y
+
+#
+# Using Big Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="to be mangled by uclibc bitbake"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/n1200/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/n1200/uClibc.machine
new file mode 100644
index 0000000000..23ca904520
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/n1200/uClibc.machine
@@ -0,0 +1,53 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:25:50 2007
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+TARGET_powerpc=y
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="powerpc"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_CLASSIC=y
+# CONFIG_E500 is not set
+TARGET_SUBARCH="classic"
+
+#
+# Using ELF file format
+#
+ARCH_BIG_ENDIAN=y
+
+#
+# Using Big Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/stuff/build/tmp/cross/powerpc-angstrom-linux-uclibc/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/om-gta01/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/om-gta01/uClibc.machine
new file mode 100644
index 0000000000..898b73a33b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/om-gta01/uClibc.machine
@@ -0,0 +1,69 @@
+#
+# Automatically generated make config: don't edit
+# Mon May 14 10:23:14 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+CONFIG_ARM920T=y
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/palmld/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/palmld/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/palmld/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/palmz31/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/palmz31/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/palmz31/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/palmz72/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/palmz72/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/palmz72/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/poodle/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/poodle/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/poodle/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/qemumips/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/qemumips/uClibc.machine
new file mode 100644
index 0000000000..1cf1addca9
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/qemumips/uClibc.machine
@@ -0,0 +1,63 @@
+#
+# Automatically generated make config: don't edit
+# Wed Jul 9 13:37:36 2008
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_avr32 is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+TARGET_mips=y
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+# TARGET_xtensa is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="mips"
+FORCE_OPTIONS_FOR_ARCH=y
+ARCH_CFLAGS="-mno-split-addresses"
+CONFIG_MIPS_O32_ABI=y
+# CONFIG_MIPS_N32_ABI is not set
+# CONFIG_MIPS_N64_ABI is not set
+# CONFIG_MIPS_ISA_1 is not set
+# CONFIG_MIPS_ISA_2 is not set
+# CONFIG_MIPS_ISA_3 is not set
+# CONFIG_MIPS_ISA_4 is not set
+CONFIG_MIPS_ISA_MIPS32=y
+# CONFIG_MIPS_ISA_MIPS64 is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+# ARCH_BIG_ENDIAN is not set
+ARCH_WANTS_BIG_ENDIAN=y
+# ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+# DO_C99_MATH is not set
+# UCLIBC_HAS_FENV is not set
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/qemux86/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/qemux86/uClibc.machine
new file mode 100644
index 0000000000..44fec169c8
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/qemux86/uClibc.machine
@@ -0,0 +1,68 @@
+#
+# Automatically generated make config: don't edit
+# Fri Nov 23 15:49:33 2007
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+TARGET_i386=y
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="i386"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_GENERIC_386=y
+# CONFIG_386 is not set
+# CONFIG_486 is not set
+# CONFIG_586 is not set
+# CONFIG_586MMX is not set
+# CONFIG_686 is not set
+# CONFIG_PENTIUMII is not set
+# CONFIG_PENTIUMIII is not set
+# CONFIG_PENTIUM4 is not set
+# CONFIG_K6 is not set
+# CONFIG_K7 is not set
+# CONFIG_ELAN is not set
+# CONFIG_CRUSOE is not set
+# CONFIG_WINCHIPC6 is not set
+# CONFIG_WINCHIP2 is not set
+# CONFIG_CYRIXIII is not set
+# CONFIG_NEHEMIAH is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_LITTLE_ENDIAN=y
+
+#
+# Using Little Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/sequoia/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/sequoia/uClibc.machine
new file mode 100644
index 0000000000..e059257c09
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/sequoia/uClibc.machine
@@ -0,0 +1,53 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:25:50 2007
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+TARGET_powerpc=y
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="powerpc"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_CLASSIC=y
+# CONFIG_E500 is not set
+TARGET_SUBARCH="classic"
+
+#
+# Using ELF file format
+#
+ARCH_BIG_ENDIAN=y
+
+#
+# Using Big Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/powerpc-angstrom-linux-uclibc/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/simpad/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/simpad/uClibc.machine
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/simpad/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:29:51 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_ARM_OABI=y
+# CONFIG_ARM_EABI is not set
+# USE_BX is not set
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+CONFIG_ARM_SA1100=y
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/spitz/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/spitz/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/spitz/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/titan/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/titan/uClibc.machine
new file mode 100644
index 0000000000..75c5328056
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/titan/uClibc.machine
@@ -0,0 +1,52 @@
+#
+# Automatically generated make config: don't edit
+# Wed May 16 12:03:09 2007
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+TARGET_sh=y
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="sh"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_SH2A is not set
+# CONFIG_SH2 is not set
+# CONFIG_SH3 is not set
+CONFIG_SH4=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
diff --git a/recipes/uclibc/uclibc-0.9.30.3/uClibc.config b/recipes/uclibc/uclibc-0.9.30.3/uClibc.config
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/uClibc.config
diff --git a/recipes/uclibc/uclibc-0.9.30.3/uClibc.distro b/recipes/uclibc/uclibc-0.9.30.3/uClibc.distro
new file mode 100644
index 0000000000..042ea4c547
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/uClibc.distro
@@ -0,0 +1,148 @@
+#
+# General Library Settings
+#
+# HAVE_NO_PIC is not set
+# DOPIC is not set
+# HAVE_NO_SHARED is not set
+# ARCH_HAS_NO_LDSO is not set
+HAVE_SHARED=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+# UCLIBC_STATIC_LDCONFIG is not set
+LDSO_RUNPATH=y
+UCLIBC_CTOR_DTOR=y
+LDSO_GNU_HASH_SUPPORT=y
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+PTHREADS_DEBUG_SUPPORT=y
+LINUXTHREADS_OLD=y
+UCLIBC_HAS_LFS=y
+# MALLOC is not set
+# MALLOC_SIMPLE is not set
+MALLOC_STANDARD=y
+MALLOC_GLIBC_COMPAT=y
+UCLIBC_DYNAMIC_ATEXIT=y
+COMPAT_ATEXIT=y
+UCLIBC_SUSV3_LEGACY=y
+UCLIBC_SUSV3_LEGACY_MACROS=y
+UCLIBC_HAS_SHADOW=y
+UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
+UCLIBC_HAS___PROGNAME=y
+UNIX98PTY_ONLY=y
+UCLIBC_HAS_GETPT=y
+ASSUME_DEVPTS=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+
+#
+# Advanced Library Settings
+#
+UCLIBC_PWD_BUFFER_SIZE=256
+UCLIBC_GRP_BUFFER_SIZE=256
+
+#
+# Networking Support
+#
+UCLIBC_HAS_IPV6=y
+UCLIBC_HAS_RPC=y
+UCLIBC_HAS_FULL_RPC=y
+# UCLIBC_HAS_REENTRANT_RPC is not set
+# UCLIBC_USE_NETLINK is not set
+# UCLIBC_HAS_BSD_RES_CLOSE is not set
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_STRING_GENERIC_OPT=y
+UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+# UCLIBC_HAS_CTYPE_UNSAFE is not set
+UCLIBC_HAS_CTYPE_CHECKED=y
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+UCLIBC_HAS_WCHAR=y
+# UCLIBC_HAS_LOCALE is not set
+UCLIBC_HAS_HEXADECIMAL_FLOATS=y
+UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y
+# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
+UCLIBC_HAS_STDIO_BUFSIZ_256=y
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_4096 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
+# UCLIBC_HAS_STDIO_GETC_MACRO is not set
+# UCLIBC_HAS_STDIO_PUTC_MACRO is not set
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
+UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
+UCLIBC_HAS_PRINTF_M_SPEC=y
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GNU_GETOPT=y
+UCLIBC_HAS_GNU_GETSUBOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+# UCLIBC_HAS_REGEX_OLD is not set
+UCLIBC_HAS_FNMATCH=y
+# UCLIBC_HAS_FNMATCH_OLD is not set
+UCLIBC_HAS_WORDEXP=y
+UCLIBC_HAS_FTW=y
+UCLIBC_HAS_GLOB=y
+UCLIBC_HAS_GNU_GLOB=y
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="/lib"
+RUNTIME_PREFIX="/"
+DEVEL_PREFIX="//usr"
+
+#
+# Security options
+#
+# UCLIBC_BUILD_PIE is not set
+# UCLIBC_HAS_ARC4RANDOM is not set
+# HAVE_NO_SSP is not set
+# UCLIBC_HAS_SSP is not set
+UCLIBC_BUILD_RELRO=y
+UCLIBC_BUILD_NOW=y
+UCLIBC_BUILD_NOEXECSTACK=y
+
+#
+# uClibc development/debugging options
+#
+CROSS_COMPILER_PREFIX=""
+UCLIBC_EXTRA_CFLAGS=""
+# DODEBUG is not set
+# DODEBUG_PT is not set
+DOSTRIP=n
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+# UCLIBC_MALLOC_DEBUGGING is not set
+WARNINGS="-Wall"
+# EXTRA_WARNINGS is not set
+# DOMULTI is not set
+# UCLIBC_MJN3_ONLY is not set
+
+# math stuff for perl
+DO_C99_MATH=y
diff --git a/recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.armv4t b/recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.armv4t
new file mode 100644
index 0000000000..898b73a33b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.armv4t
@@ -0,0 +1,69 @@
+#
+# Automatically generated make config: don't edit
+# Mon May 14 10:23:14 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+CONFIG_ARM920T=y
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.armv5te b/recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.armv5te
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.armv5te
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.iwmmxt b/recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.iwmmxt
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.iwmmxt
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.strongarm b/recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.strongarm
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/uClibc.machine.strongarm
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:29:51 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_ARM_OABI=y
+# CONFIG_ARM_EABI is not set
+# USE_BX is not set
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+CONFIG_ARM_SA1100=y
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/wrap/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/wrap/uClibc.machine
new file mode 100644
index 0000000000..3dcf4b1b69
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/wrap/uClibc.machine
@@ -0,0 +1,73 @@
+#
+# Automatically generated make config: don't edit
+# Version: 0.9.30
+# Mon Mar 16 21:38:28 2009
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_avr32 is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+TARGET_i386=y
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+# TARGET_xtensa is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="i386"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_GENERIC_386 is not set
+# CONFIG_386 is not set
+CONFIG_486=y
+# CONFIG_586 is not set
+# CONFIG_586MMX is not set
+# CONFIG_686 is not set
+# CONFIG_PENTIUMII is not set
+# CONFIG_PENTIUMIII is not set
+# CONFIG_PENTIUM4 is not set
+# CONFIG_K6 is not set
+# CONFIG_K7 is not set
+# CONFIG_ELAN is not set
+# CONFIG_CRUSOE is not set
+# CONFIG_WINCHIPC6 is not set
+# CONFIG_WINCHIP2 is not set
+# CONFIG_CYRIXIII is not set
+# CONFIG_NEHEMIAH is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_LITTLE_ENDIAN=y
+
+#
+# Using Little Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+DO_C99_MATH=y
+UCLIBC_HAS_FENV=y
+UCLIBC_HAS_LONG_DOUBLE_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/recipes/uclibc/uclibc-0.9.30.3/x86/uClibc.machine b/recipes/uclibc/uclibc-0.9.30.3/x86/uClibc.machine
new file mode 100644
index 0000000000..6cd19e851e
--- /dev/null
+++ b/recipes/uclibc/uclibc-0.9.30.3/x86/uClibc.machine
@@ -0,0 +1,72 @@
+#
+# Automatically generated make config: don't edit
+# Version: 0.9.30.1
+# Wed Jul 1 17:04:32 2009
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_avr32 is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+TARGET_i386=y
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+# TARGET_xtensa is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="i386"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_GENERIC_386=y
+# CONFIG_386 is not set
+# CONFIG_486 is not set
+# CONFIG_586 is not set
+# CONFIG_586MMX is not set
+# CONFIG_686 is not set
+# CONFIG_PENTIUMII is not set
+# CONFIG_PENTIUMIII is not set
+# CONFIG_PENTIUM4 is not set
+# CONFIG_K6 is not set
+# CONFIG_K7 is not set
+# CONFIG_ELAN is not set
+# CONFIG_CRUSOE is not set
+# CONFIG_WINCHIPC6 is not set
+# CONFIG_WINCHIP2 is not set
+# CONFIG_CYRIXIII is not set
+# CONFIG_NEHEMIAH is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_LITTLE_ENDIAN=y
+
+#
+# Using Little Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+DO_C99_MATH=y
+# UCLIBC_HAS_FENV is not set
+UCLIBC_HAS_LONG_DOUBLE_MATH=y
+KERNEL_HEADERS="/bla"
+HAVE_DOT_CONFIG=y
diff --git a/recipes/uclibc/uclibc-git/uClibc.distro b/recipes/uclibc/uclibc-git/uClibc.distro
index 192351081b..8d1f1d1872 100644
--- a/recipes/uclibc/uclibc-git/uClibc.distro
+++ b/recipes/uclibc/uclibc-git/uClibc.distro
@@ -106,6 +106,7 @@ UCLIBC_HAS_REGEX=y
UCLIBC_HAS_FNMATCH=y
# UCLIBC_HAS_FNMATCH_OLD is not set
UCLIBC_HAS_WORDEXP=y
+UCLIBC_HAS_NFTW=y
UCLIBC_HAS_FTW=y
UCLIBC_HAS_GLOB=y
UCLIBC_HAS_GNU_GLOB=y
diff --git a/recipes/uclibc/uclibc-initial_0.9.30.3.bb b/recipes/uclibc/uclibc-initial_0.9.30.3.bb
new file mode 100644
index 0000000000..a9fa146023
--- /dev/null
+++ b/recipes/uclibc/uclibc-initial_0.9.30.3.bb
@@ -0,0 +1,26 @@
+SECTION = "base"
+require uclibc_${PV}.bb
+
+DEPENDS = "linux-libc-headers ncurses-native virtual/${TARGET_PREFIX}gcc-initial"
+PROVIDES = "virtual/${TARGET_PREFIX}libc-initial"
+PACKAGES = ""
+
+do_install() {
+ # Install initial headers into the cross dir
+ make V=1 CC="${CC}" PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \
+ install_headers
+ #ln -sf include ${CROSS_DIR}/${TARGET_SYS}/sys-include
+
+ # This conflicts with the c++ version of this header
+ rm -f ${D}${includedir}/bits/atomicity.h
+ install -d ${D}${libdir}/
+ install -m 644 lib/crt[1in].o ${D}${libdir}/
+ install -m 644 lib/libc.so ${D}${libdir}/
+}
+
+do_compile () {
+ make V=1 CC="${CC}" PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \
+ lib/crt1.o lib/crti.o lib/crtn.o
+ ${CC} -nostdlib -nostartfiles -shared -x c /dev/null \
+ -o lib/libc.so
+}
diff --git a/recipes/uclibc/uclibc-nptl/uClibc.distro b/recipes/uclibc/uclibc-nptl/uClibc.distro
index 1edf8619f9..a48c74e22c 100644
--- a/recipes/uclibc/uclibc-nptl/uClibc.distro
+++ b/recipes/uclibc/uclibc-nptl/uClibc.distro
@@ -109,6 +109,7 @@ UCLIBC_HAS_REGEX=y
UCLIBC_HAS_FNMATCH=y
# UCLIBC_HAS_FNMATCH_OLD is not set
UCLIBC_HAS_WORDEXP=y
+UCLIBC_HAS_NFTW=y
UCLIBC_HAS_FTW=y
UCLIBC_HAS_GLOB=y
UCLIBC_HAS_GNU_GLOB=y
diff --git a/recipes/uclibc/uclibc_0.9.30.3.bb b/recipes/uclibc/uclibc_0.9.30.3.bb
new file mode 100644
index 0000000000..fa6c3c55f8
--- /dev/null
+++ b/recipes/uclibc/uclibc_0.9.30.3.bb
@@ -0,0 +1,32 @@
+# UCLIBC_BASE should be the latest released revision of uclibc (that way
+# the config files will typically be correct!) uclibc-cvs takes precedence
+# over uclibc-${UCLIBC_BASE}, if a config file in uclibc-cvs is out of date
+# try removing it
+#
+# UCLIBC_BASE can be set in a distro file, but whether this works depends
+# on whether the base patches apply to the selected (SRCDATE) svn release.
+#
+UCLIBC_BASE ?= "0.9.30.3"
+
+require uclibc.inc
+PR = "${INC_PR}.0"
+
+PROVIDES += "virtual/${TARGET_PREFIX}libc-for-gcc"
+
+SRC_URI += "file://uClibc.machine file://uClibc.distro \
+ file://ldso_use_arm_dl_linux_resolve_in_thumb_mode.patch;patch=1 \
+ "
+SRC_URI[uClibc-0.9.30.2.md5sum] = "e759ec855500082ac3e671dd6cacfdb0"
+SRC_URI[uClibc-0.9.30.2.sha256sum] = "ab6e92c91e2f8fad182d3b624b87d6cbf53072678d8fc31ad73e6abd3c852473"
+
+#recent versions uclibc require real kernel headers
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+#as stated above, uclibc needs real kernel-headers
+#however: we can't depend on virtual/kernel when nptl hits due to depends deadlocking ....
+KERNEL_SOURCE = "${STAGING_DIR_HOST}/${exec_prefix}"
+
+S = "${WORKDIR}/uClibc-${UCLIBC_BASE}"
+SRC_URI[uClibc-0.9.30.3.md5sum] = "73a4bf4a0fa508b01a7a3143574e3d21"
+SRC_URI[uClibc-0.9.30.3.sha256sum] = "107c3ac914e9a670a9f501519ed89a647e05e48dc4c474dc3d7cddaa78bb2e38"
+
diff --git a/recipes/uclibc/uclibc_git.bb b/recipes/uclibc/uclibc_git.bb
index 5f44466d47..4ac1b89082 100644
--- a/recipes/uclibc/uclibc_git.bb
+++ b/recipes/uclibc/uclibc_git.bb
@@ -1,4 +1,4 @@
-# UCLIBC_BASE should be the latest released revision of uclibc (that way
+# UCLIBC_BASE should be the latest released version of uclibc (that way
# the config files will typically be correct!) uclibc-svn takes precedence
# over uclibc-${UCLIBC_BASE}, if a config file in uclibc-snv is out of date
# try removing it
@@ -7,7 +7,7 @@
# on whether the base patches apply to the selected (SRCDATE) svn release.
#
UCLIBC_BASE ?= "0.9.30"
-SRCREV="22de495da40d7649eb28fdfc70ce1d5f3b6572ea"
+SRCREV="63859f89f327e48037a4cdba982cd6afa3007da7"
PV = "${UCLIBC_BASE}+gitr${SRCREV}"
DEFAULT_PREFERENCE = "-1"
#DEFAULT_PREFERENCE is 0 (empty), releases have a preference of 1 so take
diff --git a/recipes/uclibc/uclibc_nptl.bb b/recipes/uclibc/uclibc_nptl.bb
index c9d9e3b0a7..cd67c6a8f2 100644
--- a/recipes/uclibc/uclibc_nptl.bb
+++ b/recipes/uclibc/uclibc_nptl.bb
@@ -7,7 +7,7 @@
# on whether the base patches apply to the selected (SRCDATE) svn release.
#
UCLIBC_BASE ?= "0.9.30"
-SRCREV="f50a678f473e44c405e51af988a57daf88ea2f27"
+SRCREV="96fa7bff588054885379286a5e8cf2cdd3ba0ab0"
PV = "${UCLIBC_BASE}+gitr${SRCREV}"
DEFAULT_PREFERENCE = "-1"
#DEFAULT_PREFERENCE is 0 (empty), releases have a preference of 1 so take
diff --git a/recipes/udev/acl_2.2.49.bb b/recipes/udev/acl_2.2.49.bb
new file mode 100644
index 0000000000..30875b7a47
--- /dev/null
+++ b/recipes/udev/acl_2.2.49.bb
@@ -0,0 +1,44 @@
+DESCRIPTION = "Commands for Manipulating POSIX Access Control Lists"
+LICENSE = "GPLv2"
+
+PR = "r1"
+
+DEPENDS = "attr"
+
+SRC_URI = "http://mirror.its.uidaho.edu/pub/savannah/acl/acl-${PV}.src.tar.gz"
+
+inherit autotools lib_package
+
+EXTRA_OECONF = " --enable-gettext=yes \
+ ac_cv_path_XGETTEXT=${STAGING_BINDIR_NATIVE}/xgettext \
+ ac_cv_path_MSGFMT=${STAGING_BINDIR_NATIVE}/msgfmt \
+ ac_cv_path_MSGMERGE=${STAGING_BINDIR_NATIVE}/msgmerge "
+
+do_configure_append() {
+ # gettext hack
+ echo "#define _(str) str" >> ${S}/include/config.h
+}
+
+do_install() {
+ export PKG_BIN_DIR=${D}${bindir}
+ export PKG_SBIN_DIR=${D}${sbindir}
+ export PKG_LIB_DIR=${D}${libdir}
+ export PKG_DEVLIB_DIR=${D}${libexecdir}
+ export PKG_INC_DIR=${D}${includedir}
+ export PKG_MAN_DIR=${D}${mandir}
+ export PKG_DOC_DIR=${D}${datadir}/doc/acl
+ export PKG_LOCALE_DIR=${D}${datadir}/locale
+
+ oe_runmake -e install install-dev install-lib
+
+ sed -i -e s:installed=yes:installed=no: -e s:${STAGING_LIBDIR}:${libdir}:g ${D}${libdir}/libacl.la
+
+ # Move .a and .la into libdir and remove symlinks pointing to ${S}
+ for file in ${D}${libexecdir}/*a ; do
+ rm ${D}${libdir}/$(basename $file)
+ mv $file ${D}${libdir}
+ done
+ rm -rf ${D}${libexecdir}
+}
+
+
diff --git a/recipes/udev/attr_2.4.44.bb b/recipes/udev/attr_2.4.44.bb
new file mode 100644
index 0000000000..2c750428c4
--- /dev/null
+++ b/recipes/udev/attr_2.4.44.bb
@@ -0,0 +1,42 @@
+DESCRIPTION = "Commands for Manipulating Filesystem Extended Attributes"
+LICENSE = "GPLv2"
+
+PR = "r2"
+
+SRC_URI = "http://mirror.its.uidaho.edu/pub/savannah/attr/attr-${PV}.src.tar.gz"
+
+inherit gettext autotools lib_package
+
+EXTRA_OECONF = " --enable-gettext=yes \
+ ac_cv_path_XGETTEXT=${STAGING_BINDIR_NATIVE}/xgettext \
+ ac_cv_path_MSGFMT=${STAGING_BINDIR_NATIVE}/msgfmt \
+ ac_cv_path_MSGMERGE=${STAGING_BINDIR_NATIVE}/msgmerge "
+
+LDFLAGS_append_libc-uclibc += " -lintl"
+
+do_configure_append() {
+ # gettext hack
+ echo "#define _(str) str" >> ${S}/include/config.h
+}
+
+do_install() {
+ export PKG_BIN_DIR=${D}${bindir}
+ export PKG_SBIN_DIR=${D}${sbindir}
+ export PKG_LIB_DIR=${D}${libdir}
+ export PKG_DEVLIB_DIR=${D}${libexecdir}
+ export PKG_INC_DIR=${D}${includedir}/attr
+ export PKG_MAN_DIR=${D}${mandir}
+ export PKG_DOC_DIR=${D}${datadir}/doc/attr
+ export PKG_LOCALE_DIR=${D}${datadir}/locale
+
+ oe_runmake -e install install-dev install-lib
+
+ sed -i -e s:installed=yes:installed=no: -e s:${STAGING_LIBDIR}:${libdir}:g ${D}${libdir}/libattr.la
+
+ # Move .a and .la into libdir and remove symlinks pointing to ${S}
+ for file in ${D}${libexecdir}/*a ; do
+ rm ${D}${libdir}/$(basename $file)
+ mv $file ${D}${libdir}
+ done
+ rm ${D}${libexecdir} -rf
+}
diff --git a/recipes/udev/files/shr/mount.blacklist b/recipes/udev/files/shr/mount.blacklist
new file mode 100644
index 0000000000..117ac9b861
--- /dev/null
+++ b/recipes/udev/files/shr/mount.blacklist
@@ -0,0 +1,4 @@
+/dev/loop
+/dev/ram
+/dev/mtdblock
+/dev/mmcblk
diff --git a/recipes/udev/udev-141/hipox/default b/recipes/udev/udev-141/hipox/default
new file mode 100644
index 0000000000..d0050b873c
--- /dev/null
+++ b/recipes/udev/udev-141/hipox/default
@@ -0,0 +1,4 @@
+# Default for /etc/init.d/udev
+
+# Comment this out to disable device cache
+#DEVCACHE="/etc/dev.tar"
diff --git a/recipes/udev/udev-151/akita/default b/recipes/udev/udev-151/akita/default
new file mode 100644
index 0000000000..d0050b873c
--- /dev/null
+++ b/recipes/udev/udev-151/akita/default
@@ -0,0 +1,4 @@
+# Default for /etc/init.d/udev
+
+# Comment this out to disable device cache
+#DEVCACHE="/etc/dev.tar"
diff --git a/recipes/udev/udev-151/bug/10-mx31.rules b/recipes/udev/udev-151/bug/10-mx31.rules
new file mode 100644
index 0000000000..de427fc8b2
--- /dev/null
+++ b/recipes/udev/udev-151/bug/10-mx31.rules
@@ -0,0 +1,49 @@
+KERNEL=="ttyS[0-9]", NAME="tts/%n", SYMLINK+="tts%n"
+KERNEL=="ttymxc[0-9]", NAME="ttymxc/%n", SYMLINK+="ttymxc%n"
+
+KERNEL=="mxc_mu[0-9]", NAME="mxc_mu/%n", SYMLINK+="mxc_mu%n"
+KERNEL=="fb*", NAME="fb/%n", SYMLINK+="fb%n"
+KERNEL=="i2c*", NAME="i2c/%n"
+KERNEL=="mxc_ipc*", NAME="mxc_ipc/%n"
+KERNEL=="video*", NAME="v4l/video%n"
+
+KERNEL=="rtc", NAME="misc/rtc"
+KERNEL=="watchdog", NAME="misc/watchdog"
+
+KERNEL=="mc13783_adc", NAME="mc13783_adc", SYMLINK+="ts"
+KERNEL=="pmic_adc", NAME="pmic_adc", SYMLINK+="ts"
+
+# The long class name gets cut off to be mc13783_connectiv in
+# /sys/class/mc13783_connectivity/mc13783_connectivit
+KERNEL=="mc13783_connectiv*", NAME="mc13783_connectivity"
+
+KERNEL=="mxc_ssi[0-9]*", NAME="mxc_ssi/%n", SYMLINK+="mxc_ssi%n"
+KERNEL=="spi[0-9]*", NAME="spi/%n", SYMLINK+="spi%n"
+
+KERNEL=="mtdblock*", NAME="mtdblock/%n" SYMLINK+="mtdblock%n"
+KERNEL=="mtd[0-9]", NAME="mtd/%n"
+
+# A more elegant way of doing this must exist...
+KERNEL=="mtd0ro", NAME="mtd/0ro"
+KERNEL=="mtd1ro", NAME="mtd/1ro"
+KERNEL=="mtd2ro", NAME="mtd/2ro"
+KERNEL=="mtd3ro", NAME="mtd/3ro"
+KERNEL=="mtd4ro", NAME="mtd/4ro"
+KERNEL=="mtd5ro", NAME="mtd/5ro"
+KERNEL=="mtd6ro", NAME="mtd/6ro"
+KERNEL=="mtd7ro", NAME="mtd/7ro"
+KERNEL=="mtd8ro", NAME="mtd/8ro"
+KERNEL=="mtd9ro", NAME="mtd/9ro"
+
+# Note that we want /dev/dsp linked to /dev/sound/dsp1...
+KERNEL=="dsp", NAME="sound/dsp"
+KERNEL=="dspW", NAME="sound/dspW"
+KERNEL=="dsp1", NAME="sound/dsp1", SYMLINK+="dsp"
+KERNEL=="mixer", NAME="sound/mixer", SYMLINK+="mixer"
+KERNEL=="sequencer", NAME="sound/sequencer"
+KERNEL=="sequencer2", NAME="sound/sequencer2"
+
+KERNEL=="ram[0-9]*", NAME="ram/%n", SYMLINK+="ram%n"
+
+KERNEL=="dvfs_dptc", NAME="dvfs_dptc", SYMLINK+="dptc dvfs"
+
diff --git a/recipes/udev/udev-151/bug/30-BUG.rules b/recipes/udev/udev-151/bug/30-BUG.rules
new file mode 100644
index 0000000000..06faa6bb91
--- /dev/null
+++ b/recipes/udev/udev-151/bug/30-BUG.rules
@@ -0,0 +1,26 @@
+##
+## BUG/BMI specific
+##
+KERNEL=="event*", ATTRS{name}=="bugnav", SYMLINK+="input/bugnav"
+KERNEL=="event*", ATTRS{name}=="bmi_motion", SYMLINK+="input/bmi_motion"
+KERNEL=="event*", ATTRS{name}=="bug_cam", SYMLINK+="input/bmi_cam"
+KERNEL=="event*", ATTRS{name}=="bmi_audio_status_m1", SYMLINK+="input/bmi_audio_m1"
+KERNEL=="event*", ATTRS{name}=="bmi_audio_status_m2", SYMLINK+="input/bmi_audio_m2"
+KERNEL=="event*", ATTRS{name}=="bmi_audio_status_m3", SYMLINK+="input/bmi_audio_m3"
+KERNEL=="event*", ATTRS{name}=="bmi_audio_status_m4", SYMLINK+="input/bmi_audio_m4"
+DEVPATH=="/devices/platform/bugfb.0", SYMLINK+="bugfb"
+KERNEL=="rtc0", SYMLINK+="rtc"
+KERNEL=="event*", ATTRS{name}=="bmi_lcd_ts0", SYMLINK+="input/bmi_lcd_ts0"
+KERNEL=="event*", ATTRS{name}=="bmi_lcd_ts1", SYMLINK+="input/bmi_lcd_ts1"
+KERNEL=="event*", ATTRS{name}=="bmi_lcd_ts2", SYMLINK+="input/bmi_lcd_ts2"
+KERNEL=="event*", ATTRS{name}=="bmi_lcd_ts3", SYMLINK+="input/bmi_lcd_ts3"
+KERNEL=="event*", ATTRS{name}=="bmi_lcd_ts4", SYMLINK+="input/bmi_lcd_ts4"
+KERNEL=="event*", ATTRS{name}=="bmi_lcd_ts5", SYMLINK+="input/bmi_lcd_ts5"
+KERNEL=="event*", ATTRS{name}=="bmi_lcd_ts6", SYMLINK+="input/bmi_lcd_ts6"
+ACTION=="add", DEVPATH=="/devices/conn*", RUN+="/bin/sh /etc/udev/scripts/bmi_eventpipe.sh"
+ACTION=="remove", DEVPATH=="/devices/conn*", RUN+="/bin/sh /etc/udev/scripts/bmi_eventpipe.sh"
+#
+# For USB PBPSD, which we've arbitrarily decided will be module F001
+#
+ACTION=="remove", SUBSYSTEM=="usb", DRIVERS=="psd_driver", ENV{BMIBUS_PRODUCT}="F001", ENV{BMIBUS_SLOT}="%n", RUN+="/bin/sh /etc/udev/scripts/bmi_eventpipe.sh"
+ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="psd_driver", ENV{BMIBUS_PRODUCT}="F001", ENV{BMIBUS_SLOT}="%n", RUN+="/bin/sh /etc/udev/scripts/bmi_eventpipe.sh"
diff --git a/recipes/udev/udev-151/bug/bmi_eventpipe.sh b/recipes/udev/udev-151/bug/bmi_eventpipe.sh
new file mode 100644
index 0000000000..acbae56118
--- /dev/null
+++ b/recipes/udev/udev-151/bug/bmi_eventpipe.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# This script passes BMI state variables to the running JVM.
+#
+if [ ${BMIBUS_PRODUCT} != "" ] && [ ${BMIBUS_SLOT} != "" ] && [ ${ACTION} != "" ];
+then
+ echo $BMIBUS_PRODUCT 0 $BMIBUS_SLOT $ACTION > /tmp/eventpipe
+fi
diff --git a/recipes/udev/udev-151/c7x0/default b/recipes/udev/udev-151/c7x0/default
new file mode 100644
index 0000000000..d0050b873c
--- /dev/null
+++ b/recipes/udev/udev-151/c7x0/default
@@ -0,0 +1,4 @@
+# Default for /etc/init.d/udev
+
+# Comment this out to disable device cache
+#DEVCACHE="/etc/dev.tar"
diff --git a/recipes/udev/udev-151/cache b/recipes/udev/udev-151/cache
new file mode 100644
index 0000000000..4db1466817
--- /dev/null
+++ b/recipes/udev/udev-151/cache
@@ -0,0 +1,18 @@
+#!/bin/sh -e
+
+export TZ=/etc/localtime
+
+[ -f /etc/default/udev ] && . /etc/default/udev
+
+echo "Caching udev devnodes"
+
+ if [ "$DEVCACHE" != "" ]; then
+ echo -n "Populating dev cache"
+ (cd /; tar cf $DEVCACHE dev)
+ mv /tmp/uname /etc/udev/saved.uname
+ mv /tmp/cmdline /etc/udev/saved.cmdline
+ mv /tmp/atags /etc/udev/saved.atags
+ echo
+ fi
+
+exit 0
diff --git a/recipes/udev/udev-151/default b/recipes/udev/udev-151/default
new file mode 100644
index 0000000000..5c4937a9a0
--- /dev/null
+++ b/recipes/udev/udev-151/default
@@ -0,0 +1,4 @@
+# Default for /etc/init.d/udev
+
+# Comment this out to disable device cache
+DEVCACHE="/etc/dev.tar"
diff --git a/recipes/udev/udev-151/init b/recipes/udev/udev-151/init
new file mode 100644
index 0000000000..f4dc5de2f5
--- /dev/null
+++ b/recipes/udev/udev-151/init
@@ -0,0 +1,78 @@
+#!/bin/sh -e
+
+### BEGIN INIT INFO
+# Provides: udev
+# Required-Start: mountvirtfs
+# Required-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Start udevd, populate /dev and load drivers.
+### END INIT INFO
+
+export TZ=/etc/localtime
+
+[ -d /sys/class ] || exit 1
+[ -r /proc/mounts ] || exit 1
+[ -x /sbin/udevd ] || exit 1
+[ -f /etc/default/udev ] && . /etc/default/udev
+[ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf
+
+kill_udevd() {
+ if [ -x /sbin/pidof ]; then
+ pid=`/sbin/pidof -x udevd`
+ [ -n "$pid" ] && kill $pid
+ fi
+}
+
+export ACTION=add
+# propagate /dev from /sys
+echo "Starting udev"
+
+# mount the tmpfs on /dev, if not already done
+LANG=C awk "\$2 == \"/dev\" && \$4 == \"tmpfs\" { exit 1 }" /proc/mounts && {
+ mount -n -o mode=0755 -t tmpfs none "/dev"
+ mkdir -m 0755 /dev/pts
+ mkdir -m 1777 /dev/shm
+}
+
+if [ "$DEVCACHE" != "" ]; then
+ # Invalidate udev cache if the kernel or its bootargs/cmdline have changed
+ [ -x /bin/uname ] && /bin/uname -mrspv > /tmp/uname || touch /tmp/uname
+ [ -r /proc/cmdline ] && cat /proc/cmdline > /tmp/cmdline || touch /tmp/cmdline
+ [ -r /proc/atags ] && cat /proc/atags > /tmp/atags || touch /tmp/atags
+ if [ -e $DEVCACHE ] && \
+ cmp -s /tmp/uname /etc/udev/saved.uname && \
+ cmp -s /tmp/cmdline /etc/udev/saved.cmdline && \
+ cmp -s /tmp/atags /etc/udev/saved.atags; then
+ (cd /; tar xf $DEVCACHE > /dev/null 2>&1)
+ not_first_boot=1
+ fi
+fi
+
+if [ ! -e "/lib/modules/$(uname -r)"/modules.dep ] ; then
+ mkdir -p /lib/modules/$(uname -r)
+ depmod -ae
+fi
+
+# make_extra_nodes
+kill_udevd > "/dev/null" 2>&1
+
+ # trigger the sorted events
+ echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug
+ /sbin/udevd -d
+
+ /sbin/udevadm control --env STARTUP=1
+ if [ "$not_first_boot" != "" ];then
+ /sbin/udevadm trigger --subsystem-nomatch=tty --subsystem-nomatch=mem --subsystem-nomatch=vc --subsystem-nomatch=vtconsole --subsystem-nomatch=misc --subsystem-nomatch=dcon --subsystem-nomatch=pci_bus --subsystem-nomatch=graphics --subsystem-nomatch=backlight --subsystem-nomatch=video4linux --subsystem-nomatch=platform
+ (/sbin/udevadm settle --timeout=3; /sbin/udevadm control --env STARTUP=)&
+ if [ "$DEVCACHE" != "" ]; then
+ rm -f /tmp/uname
+ rm -f /tmp/cmdline
+ rm -f /tmp/atags
+ fi
+ else
+ /sbin/udevadm trigger
+ /sbin/udevadm settle
+ fi
+
+exit 0
diff --git a/recipes/udev/udev-151/local.rules b/recipes/udev/udev-151/local.rules
new file mode 100644
index 0000000000..da4b38593c
--- /dev/null
+++ b/recipes/udev/udev-151/local.rules
@@ -0,0 +1,35 @@
+# There are a number of modifiers that are allowed to be used in some
+# of the different fields. They provide the following subsitutions:
+#
+# %n the "kernel number" of the device.
+# For example, 'sda3' has a "kernel number" of '3'
+# %e the smallest number for that name which does not matches an existing node
+# %k the kernel name for the device
+# %M the kernel major number for the device
+# %m the kernel minor number for the device
+# %b the bus id for the device
+# %c the string returned by the PROGRAM
+# %s{filename} the content of a sysfs attribute
+# %% the '%' char itself
+#
+
+# Media automounting
+SUBSYSTEM=="block", ACTION=="add" RUN+="/etc/udev/scripts/mount.sh"
+SUBSYSTEM=="block", ACTION=="remove" RUN+="/etc/udev/scripts/mount.sh"
+
+# Handle network interface setup
+SUBSYSTEM=="net", ACTION=="add" RUN+="/etc/udev/scripts/network.sh"
+SUBSYSTEM=="net", ACTION=="remove" RUN+="/etc/udev/scripts/network.sh"
+
+# The first rtc device is symlinked to /dev/rtc
+KERNEL=="rtc0", SYMLINK+="rtc"
+
+#The first framebuffer is symlinked to /dev/fb
+KERNEL=="fb0", SYMLINK+="fb"
+
+# Try and modprobe for drivers for new hardware
+ACTION=="add", DEVPATH=="/devices/*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe $env{MODALIAS}"
+
+# Create a symlink to any touchscreen input device
+SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{modalias}=="input:*-e0*,3,*a0,1,*18,*", SYMLINK+="input/touchscreen0"
+SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{modalias}=="ads7846", SYMLINK+="input/touchscreen0"
diff --git a/recipes/udev/udev-151/omap3-pandora/local.rules b/recipes/udev/udev-151/omap3-pandora/local.rules
new file mode 100644
index 0000000000..e433cf9593
--- /dev/null
+++ b/recipes/udev/udev-151/omap3-pandora/local.rules
@@ -0,0 +1,40 @@
+# There are a number of modifiers that are allowed to be used in some
+# of the different fields. They provide the following subsitutions:
+#
+# %n the "kernel number" of the device.
+# For example, 'sda3' has a "kernel number" of '3'
+# %e the smallest number for that name which does not matches an existing node
+# %k the kernel name for the device
+# %M the kernel major number for the device
+# %m the kernel minor number for the device
+# %b the bus id for the device
+# %c the string returned by the PROGRAM
+# %s{filename} the content of a sysfs attribute
+# %% the '%' char itself
+#
+
+# Media automounting
+SUBSYSTEM=="block", ACTION=="add" RUN+="/etc/udev/scripts/mount.sh"
+SUBSYSTEM=="block", ACTION=="remove" RUN+="/etc/udev/scripts/mount.sh"
+
+# Handle network interface setup
+SUBSYSTEM=="net", ACTION=="add" RUN+="/etc/udev/scripts/network.sh"
+SUBSYSTEM=="net", ACTION=="remove" RUN+="/etc/udev/scripts/network.sh"
+
+# The first rtc device is symlinked to /dev/rtc
+KERNEL=="rtc0", SYMLINK+="rtc"
+
+#The first framebuffer is symlinked to /dev/fb
+KERNEL=="fb0", SYMLINK+="fb"
+
+# Try and modprobe for drivers for new hardware
+ACTION=="add", DEVPATH=="/devices/*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe $env{MODALIAS}"
+
+# Create a symlink to any touchscreen input device
+SUBSYSTEM=="input", KERNEL=="event[0-9]*", SYSFS{modalias}=="input:*-e0*,3,*a0,1,*18,*", SYMLINK+="input/touchscreen0"
+SUBSYSTEM=="input", KERNEL=="event[0-9]*", SYSFS{modalias}=="ads7846", SYMLINK+="input/touchscreen0"
+
+# Local UDEV rule changes for the Pandora system.
+
+# Let all users access the event devices using EVDEV (the OpenPandora is not multiuser after all).
+KERNEL=="event[0-9]",MODE="0666" \ No newline at end of file
diff --git a/recipes/udev/udev-151/permissions.rules b/recipes/udev/udev-151/permissions.rules
new file mode 100644
index 0000000000..940d163047
--- /dev/null
+++ b/recipes/udev/udev-151/permissions.rules
@@ -0,0 +1,119 @@
+ACTION!="add", GOTO="permissions_end"
+
+# workarounds needed to synchronize with sysfs
+# only needed for kernels < v2.6.18-rc1
+ENV{PHYSDEVPATH}!="?*", ENV{PHYSDEVBUS}=="?*", WAIT_FOR_SYSFS="bus"
+SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", WAIT_FOR_SYSFS="ioerr_cnt"
+# only needed for kernels < 2.6.16
+SUBSYSTEM=="net", WAIT_FOR_SYSFS="address"
+# only needed for kernels < 2.6.17
+SUBSYSTEM=="net", ENV{DRIVER}=="?*", WAIT_FOR_SYSFS="device/driver"
+
+# devices needed to load the drivers providing them
+KERNEL=="tun", OPTIONS+="ignore_remove"
+KERNEL=="ppp", OPTIONS+="ignore_remove"
+KERNEL=="loop[0-9]*", OPTIONS+="ignore_remove"
+
+# default permissions for block devices
+SUBSYSTEM=="block", GROUP="disk"
+# the aacraid driver is broken and reports that disks removable (see #404927)
+SUBSYSTEM=="block", ATTRS{removable}=="1", \
+ DRIVERS!="aacraid", GROUP="floppy"
+# all block devices on these buses are "removable"
+SUBSYSTEM=="block", SUBSYSTEMS=="usb|ieee1394|mmc|pcmcia", GROUP="floppy"
+
+# IDE devices
+KERNEL=="hd[a-z]|pcd[0-9]*", DRIVERS=="ide-cdrom|pcd", \
+ IMPORT{program}="cdrom_id --export $tempnode"
+ENV{ID_CDROM}=="?*", GROUP="cdrom"
+KERNEL=="ht[0-9]*", GROUP="tape"
+KERNEL=="nht[0-9]*", GROUP="tape"
+
+# SCSI devices
+KERNEL=="sr[0-9]*", IMPORT{program}="cdrom_id --export $tempnode"
+SUBSYSTEMS=="scsi", ATTRS{type}=="1", GROUP="tape"
+SUBSYSTEMS=="scsi", ATTRS{type}=="4", GROUP="cdrom"
+SUBSYSTEMS=="scsi", ATTRS{type}=="5", GROUP="cdrom"
+SUBSYSTEMS=="scsi", ATTRS{type}=="8", GROUP="tape"
+
+# USB devices
+KERNEL=="legousbtower*", MODE="0666"
+KERNEL=="lp[0-9]*", SUBSYSTEMS=="usb", GROUP="lp"
+
+# usbfs-like devices
+SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", \
+ MODE="0664"
+
+# iRiver music players
+SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="plugdev", \
+ ATTRS{idVendor}=="4102", ATTRS{idProduct}=="10[01][135789]"
+
+# serial devices
+SUBSYSTEM=="tty", GROUP="dialout"
+SUBSYSTEM=="capi", GROUP="dialout"
+SUBSYSTEM=="slamr", GROUP="dialout"
+SUBSYSTEM=="zaptel", GROUP="dialout"
+
+# vc devices (all members of the tty subsystem)
+KERNEL=="ptmx", MODE="0666", GROUP="root"
+KERNEL=="console", MODE="0600", GROUP="root"
+KERNEL=="tty", MODE="0666", GROUP="root"
+KERNEL=="tty[0-9]*", GROUP="root"
+KERNEL=="pty*", MODE="0666", GROUP="tty"
+
+# video devices
+SUBSYSTEM=="video4linux", GROUP="video"
+SUBSYSTEM=="drm", GROUP="video"
+SUBSYSTEM=="dvb", GROUP="video"
+SUBSYSTEM=="em8300", GROUP="video"
+SUBSYSTEM=="graphics", GROUP="video"
+SUBSYSTEM=="nvidia", GROUP="video"
+
+# misc devices
+KERNEL=="random", MODE="0666"
+KERNEL=="urandom", MODE="0666"
+KERNEL=="mem", MODE="0640", GROUP="kmem"
+KERNEL=="kmem", MODE="0640", GROUP="kmem"
+KERNEL=="port", MODE="0640", GROUP="kmem"
+KERNEL=="full", MODE="0666"
+KERNEL=="null", MODE="0666"
+KERNEL=="zero", MODE="0666"
+KERNEL=="inotify", MODE="0666"
+KERNEL=="sgi_fetchop", MODE="0666"
+KERNEL=="sonypi", MODE="0666"
+KERNEL=="agpgart", GROUP="video"
+KERNEL=="rtc|rtc[0-9]*", GROUP="audio"
+KERNEL=="kqemu", MODE="0666"
+KERNEL=="tun", MODE="0666",
+
+KERNEL=="cdemu[0-9]*", GROUP="cdrom"
+KERNEL=="pktcdvd[0-9]*", GROUP="cdrom"
+KERNEL=="pktcdvd", MODE="0644"
+
+# printers and parallel devices
+SUBSYSTEM=="printer", GROUP="lp"
+SUBSYSTEM=="ppdev", GROUP="lp"
+KERNEL=="irlpt*", GROUP="lp"
+KERNEL=="pt[0-9]*", GROUP="tape"
+KERNEL=="pht[0-9]*", GROUP="tape"
+
+# sound devices
+SUBSYSTEM=="sound", GROUP="audio"
+
+# ieee1394 devices
+KERNEL=="raw1394", GROUP="disk"
+KERNEL=="dv1394*", GROUP="video"
+KERNEL=="video1394*", GROUP="video"
+
+# input devices
+KERNEL=="event[0-9]*", ATTRS{name}=="*dvb*|*DVB*|* IR *" \
+ MODE="0664", GROUP="video"
+KERNEL=="js[0-9]*", MODE="0664"
+KERNEL=="lirc[0-9]*", GROUP="video"
+
+# AOE character devices
+SUBSYSTEM=="aoe", MODE="0220", GROUP="disk"
+SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440"
+
+LABEL="permissions_end"
+
diff --git a/recipes/udev/udev-151/run.rules b/recipes/udev/udev-151/run.rules
new file mode 100644
index 0000000000..75d71375bb
--- /dev/null
+++ b/recipes/udev/udev-151/run.rules
@@ -0,0 +1,14 @@
+# debugging monitor
+RUN+="socket:/org/kernel/udev/monitor"
+
+# run a command on remove events
+ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}"
+
+# ignore the events generated by virtual consoles
+KERNEL=="ptmx", OPTIONS+="last_rule"
+KERNEL=="console", OPTIONS+="last_rule"
+KERNEL=="tty" , OPTIONS+="last_rule"
+KERNEL=="tty[0-9]*", OPTIONS+="last_rule"
+KERNEL=="pty*", OPTIONS+="last_rule"
+SUBSYSTEM=="vc", OPTIONS+="last_rule"
+
diff --git a/recipes/udev/udev-151/spitz/default b/recipes/udev/udev-151/spitz/default
new file mode 100644
index 0000000000..d0050b873c
--- /dev/null
+++ b/recipes/udev/udev-151/spitz/default
@@ -0,0 +1,4 @@
+# Default for /etc/init.d/udev
+
+# Comment this out to disable device cache
+#DEVCACHE="/etc/dev.tar"
diff --git a/recipes/udev/udev-151/tosa/default b/recipes/udev/udev-151/tosa/default
new file mode 100644
index 0000000000..d0050b873c
--- /dev/null
+++ b/recipes/udev/udev-151/tosa/default
@@ -0,0 +1,4 @@
+# Default for /etc/init.d/udev
+
+# Comment this out to disable device cache
+#DEVCACHE="/etc/dev.tar"
diff --git a/recipes/udev/udev-151/udev.rules b/recipes/udev/udev-151/udev.rules
new file mode 100644
index 0000000000..60288c06ed
--- /dev/null
+++ b/recipes/udev/udev-151/udev.rules
@@ -0,0 +1,116 @@
+# There are a number of modifiers that are allowed to be used in some
+# of the different fields. They provide the following subsitutions:
+#
+# %n the "kernel number" of the device.
+# For example, 'sda3' has a "kernel number" of '3'
+# %e the smallest number for that name which does not matches an existing node
+# %k the kernel name for the device
+# %M the kernel major number for the device
+# %m the kernel minor number for the device
+# %b the bus id for the device
+# %c the string returned by the PROGRAM
+# %s{filename} the content of a sysfs attribute
+# %% the '%' char itself
+#
+
+# workaround for devices which do not report media changes
+SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", \
+ ENV{ID_MODEL}=="IOMEGA_ZIP*", OPTIONS+="all_partitions"
+SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTRS{media}=="floppy", \
+ OPTIONS+="all_partitions"
+
+# SCSI devices
+SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", NAME="scd%n", SYMLINK+="sr%n"
+
+# USB devices
+SUBSYSTEMS=="usb", KERNEL=="auer[0-9]*", NAME="usb/%k"
+SUBSYSTEMS=="usb", KERNEL=="cpad[0-9]*", NAME="usb/%k"
+SUBSYSTEMS=="usb", KERNEL=="dabusb*", NAME="usb/%k"
+SUBSYSTEMS=="usb", KERNEL=="hiddev*", NAME="usb/%k"
+SUBSYSTEMS=="usb", KERNEL=="legousbtower*", NAME="usb/%k"
+SUBSYSTEMS=="usb", KERNEL=="lp[0-9]*", NAME="usb/%k"
+SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", \
+ ATTRS{product}=="Palm Handheld*|Handspring Visor|palmOne Handheld", \
+ SYMLINK+="pilot"
+
+# usbfs-like devices
+SUBSYSTEM=="usb_device", PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev}; printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", ACTION=="add", \
+ NAME="%c"
+SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}"
+
+# serial devices
+KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20"
+KERNEL=="capi[0-9]*", NAME="capi/%n"
+
+# video devices
+KERNEL=="dvb*", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}", ACTION=="add", \
+ NAME="%c"
+KERNEL=="card[0-9]*", NAME="dri/%k"
+
+# misc devices
+KERNEL=="hw_random", NAME="hwrng"
+KERNEL=="tun", NAME="net/%k"
+KERNEL=="evtchn", NAME="xen/%k"
+
+KERNEL=="cdemu[0-9]*", NAME="cdemu/%n"
+KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%n"
+KERNEL=="pktcdvd", NAME="pktcdvd/control"
+
+KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid"
+KERNEL=="msr[0-9]*", NAME="cpu/%n/msr"
+KERNEL=="microcode", NAME="cpu/microcode"
+
+KERNEL=="umad*", NAME="infiniband/%k"
+KERNEL=="issm*", NAME="infiniband/%k"
+KERNEL=="uverbs*", NAME="infiniband/%k"
+KERNEL=="ucm*", NAME="infiniband/%k"
+KERNEL=="rdma_ucm", NAME="infiniband/%k"
+
+# ALSA devices
+KERNEL=="controlC[0-9]*", NAME="snd/%k"
+KERNEL=="hwC[D0-9]*", NAME="snd/%k"
+KERNEL=="pcmC[D0-9cp]*", NAME="snd/%k"
+KERNEL=="midiC[D0-9]*", NAME="snd/%k"
+KERNEL=="timer", NAME="snd/%k"
+KERNEL=="seq", NAME="snd/%k"
+
+# ieee1394 devices
+KERNEL=="dv1394*", NAME="dv1394/%n"
+KERNEL=="video1394*", NAME="video1394/%n"
+
+# input devices
+KERNEL=="mice", NAME="input/%k"
+KERNEL=="mouse[0-9]*", NAME="input/%k"
+KERNEL=="event[0-9]*", NAME="input/%k"
+KERNEL=="js[0-9]*", NAME="input/%k"
+KERNEL=="ts[0-9]*", NAME="input/%k"
+KERNEL=="uinput", NAME="input/%k"
+
+# Zaptel
+KERNEL=="zapctl", NAME="zap/ctl"
+KERNEL=="zaptimer", NAME="zap/timer"
+KERNEL=="zapchannel", NAME="zap/channel"
+KERNEL=="zappseudo", NAME="zap/pseudo"
+KERNEL=="zap[0-9]*", NAME="zap/%n"
+
+# AOE character devices
+SUBSYSTEM=="aoe", KERNEL=="discover", NAME="etherd/%k"
+SUBSYSTEM=="aoe", KERNEL=="err", NAME="etherd/%k"
+SUBSYSTEM=="aoe", KERNEL=="interfaces", NAME="etherd/%k"
+SUBSYSTEM=="aoe", KERNEL=="revalidate", NAME="etherd/%k"
+
+# device mapper creates its own device nodes, so ignore these
+KERNEL=="dm-[0-9]*", OPTIONS+="ignore_device"
+KERNEL=="device-mapper", NAME="mapper/control"
+
+KERNEL=="rfcomm[0-9]*", GROUP="users", MODE="0660"
+
+# Firmware Helper
+ACTION=="add", SUBSYSTEM=="firmware", RUN+="/lib/udev/firmware.sh"
+
+# Samsung UARTS
+KERNEL=="s3c2410_serial[0-9]", NAME="ttySAC%n"
+
+# MXC UARTs
+KERNEL=="ttymxc[0-4]", NAME="ttymxc%n"
+
diff --git a/recipes/udev/udev.inc b/recipes/udev/udev.inc
index 86f851db05..14d10b45cc 100644
--- a/recipes/udev/udev.inc
+++ b/recipes/udev/udev.inc
@@ -1,6 +1,6 @@
DESCRIPTION ?= "udev is a program which dynamically creates and removes device nodes from \
/dev/. It responds to /sbin/hotplug device events and requires a 2.6 kernel."
-LICENSE = "GPL"
+LICENSE = "GPLv2+"
SRC_URI += " \
file://udev.rules \
diff --git a/recipes/udev/udev_141.bb b/recipes/udev/udev_141.bb
index d1fee30d18..55ccb23f85 100644
--- a/recipes/udev/udev_141.bb
+++ b/recipes/udev/udev_141.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "udev is a daemon which dynamically creates and removes device nodes from \
/dev/, handles hotplug events and loads drivers at boot time. It replaces \
the hotplug package and requires a kernel not older than 2.6.12."
-LICENSE = "GPL"
+LICENSE = "GPLv2+"
# Untested
DEFAULT_PREFERENCE = "-1"
@@ -115,6 +115,11 @@ do_install_append_bug() {
install -m 0644 ${WORKDIR}/bmi_eventpipe.sh ${D}${sysconfdir}/udev/scripts/bmi_eventpipe.sh
}
+do_install_append_hipox() {
+ # we don't like persistent net if rules at hipox machine
+ rm -f ${D}${sysconfdir}/udev/rules.d/75-persistent-net-generator.rules
+}
+
# Create the cache after checkroot has run
pkg_postinst_${PN}_append() {
update-rc.d $OPT udev-cache start 12 S .
diff --git a/recipes/udev/udev_151.bb b/recipes/udev/udev_151.bb
new file mode 100644
index 0000000000..169d3c5035
--- /dev/null
+++ b/recipes/udev/udev_151.bb
@@ -0,0 +1,123 @@
+DESCRIPTION = "udev is a daemon which dynamically creates and removes device nodes from \
+/dev/, handles hotplug events and loads drivers at boot time. It replaces \
+the hotplug package and requires a kernel not older than 2.6.12."
+LICENSE = "GPLv2+"
+
+PR = "r7"
+
+# Untested
+DEFAULT_PREFERENCE = "-1"
+
+# Needed for udev-extras
+DEPENDS = "gperf-native usbutils acl glib-2.0"
+
+# needed for init.d script
+RDEPENDS_${PN} += "udev-utils"
+
+SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
+ file://mount.blacklist \
+ file://run.rules \
+ "
+SRC_URI += " \
+ file://udev.rules \
+ file://devfs-udev.rules \
+ file://links.conf \
+ file://permissions.rules \
+ file://mount.sh \
+ file://network.sh \
+ file://local.rules \
+ file://default \
+ file://init \
+ file://cache \
+"
+
+SRC_URI_append_h2200 = " file://50-hostap_cs.rules "
+PACKAGE_ARCH_h2200 = "h2200"
+
+#buglabs's bug device
+SRC_URI_append_bug = " \
+ file://30-BUG.rules \
+ file://10-mx31.rules \
+ file://bmi_eventpipe.sh "
+
+PACKAGE_ARCH_bug = "bug"
+
+inherit update-rc.d autotools
+
+EXTRA_OECONF += " --with-udev-prefix= \
+ --with-libdir-name=${base_libdir} \
+ --disable-introspection \
+ ac_cv_file__usr_share_pci_ids=yes \
+ ac_cv_file__usr_share_hwdata_pci_ids=no \
+ ac_cv_file__usr_share_misc_pci_ids=no \
+ --sbindir=${base_sbindir} \
+"
+
+INITSCRIPT_NAME = "udev"
+INITSCRIPT_PARAMS = "start 03 S ."
+
+PACKAGES =+ "libudev libgudev udev-utils"
+
+FILES_libudev = "${libdir}/libudev.so.*"
+FILES_libgudev = "${libdir}/libgudev*.so.*"
+
+FILES_udev-utils = "${bindir}/udevinfo ${base_sbindir}/udevadm ${bindir}/udevtest"
+
+RPROVIDES_${PN} = "hotplug"
+FILES_${PN} += "${usrbindir}/* ${usrsbindir}/udevd"
+FILES_${PN}-dbg += "${usrbindir}/.debug ${usrsbindir}/.debug"
+
+# udev installs binaries under $(udev_prefix)/lib/udev, even if ${libdir}
+# is ${prefix}/lib64
+FILES_${PN} += "/lib/udev* ${libdir}/ConsoleKit"
+FILES_${PN}-dbg += "/lib/udev/.debug"
+
+do_install () {
+ install -d ${D}${usrsbindir} \
+ ${D}${sbindir}
+ oe_runmake 'DESTDIR=${D}' INSTALL=install install
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/udev
+ install -m 0755 ${WORKDIR}/cache ${D}${sysconfdir}/init.d/udev-cache
+
+ install -d ${D}${sysconfdir}/default
+ install -m 0755 ${WORKDIR}/default ${D}${sysconfdir}/default/udev
+
+ cp ${S}/rules/rules.d/* ${D}${sysconfdir}/udev/rules.d/
+ cp ${S}/rules/packages/* ${D}${sysconfdir}/udev/rules.d/
+
+ install -m 0644 ${WORKDIR}/mount.blacklist ${D}${sysconfdir}/udev/
+ install -m 0644 ${WORKDIR}/local.rules ${D}${sysconfdir}/udev/rules.d/local.rules
+ install -m 0644 ${WORKDIR}/permissions.rules ${D}${sysconfdir}/udev/rules.d/permissions.rules
+ install -m 0644 ${WORKDIR}/run.rules ${D}${sysconfdir}/udev/rules.d/run.rules
+ install -m 0644 ${WORKDIR}/udev.rules ${D}${sysconfdir}/udev/rules.d/udev.rules
+ install -m 0644 ${WORKDIR}/links.conf ${D}${sysconfdir}/udev/links.conf
+ if [ "${UDEV_DEVFS_RULES}" = "1" ]; then
+ install -m 0644 ${WORKDIR}/devfs-udev.rules ${D}${sysconfdir}/udev/rules.d/devfs-udev.rules
+ fi
+
+ touch ${D}${sysconfdir}/udev/saved.uname
+ touch ${D}${sysconfdir}/udev/saved.cmdline
+ touch ${D}${sysconfdir}/udev/saved.atags
+
+ install -d ${D}${sysconfdir}/udev/scripts/
+
+ install -m 0755 ${WORKDIR}/mount.sh ${D}${sysconfdir}/udev/scripts/mount.sh
+ install -m 0755 ${WORKDIR}/network.sh ${D}${sysconfdir}/udev/scripts
+}
+
+do_install_append_h2200() {
+ install -m 0644 ${WORKDIR}/50-hostap_cs.rules ${D}${sysconfdir}/udev/rules.d/50-hostap_cs.rules
+}
+
+do_install_append_bug() {
+ install -m 0644 ${WORKDIR}/30-BUG.rules ${D}${sysconfdir}/udev/rules.d/30-BUG.rules
+ install -m 0644 ${WORKDIR}/10-mx31.rules ${D}${sysconfdir}/udev/rules.d/10-mx31.rules
+ install -m 0644 ${WORKDIR}/bmi_eventpipe.sh ${D}${sysconfdir}/udev/scripts/bmi_eventpipe.sh
+}
+
+# Create the cache after checkroot has run
+pkg_postinst_${PN}_append() {
+ update-rc.d $OPT udev-cache start 12 S .
+}
+
diff --git a/recipes/udns/files/fix-cc-check.patch b/recipes/udns/files/fix-cc-check.patch
new file mode 100644
index 0000000000..0811849d0a
--- /dev/null
+++ b/recipes/udns/files/fix-cc-check.patch
@@ -0,0 +1,36 @@
+--- a/configure.lib 2007-01-07 21:59:09.000000000 +0100
++++ b/configure.lib 2010-03-04 11:38:32.000000000 +0100
+@@ -125,7 +125,7 @@
+ echo 'int main(int argc, char **argv) { return 0; }' >conftest.c
+
+ if [ -n "$CC" ]; then
+- if ac_run $CC -o conftest conftest.c && ac_run ./conftest; then
++ if ac_run $CC -o conftest conftest.c; then
+ ac_result "\$CC ($CC)"
+ else
+ ac_result no
+@@ -133,7 +133,7 @@
+ fi
+ else
+ for cc in gcc cc ; do
+- if ac_run $cc -o conftest conftest.c && ac_run ./conftest; then
++ if ac_run $cc -o conftest conftest.c; then
+ ac_result "$cc"
+ CC=$cc
+ break
+@@ -161,15 +161,6 @@
+ ccld="$cc"
+ if [ -n "$LDFLAGS" ]; then ccld="$ccld $LDFLAGS"; fi
+ if [ -n "$LIBS" ]; then ccld="$ccld $LIBS"; fi
+- if ac_yesno "whenever the C compiler ($ccld)
+- can produce executables" \
+- ac_compile_run <<EOF
+-int main() { return 0; }
+-EOF
+- then :
+- else
+- ac_fatal "no working C compiler found"
+- fi
+ LD='$(CC)'
+ [ -n "$AR" ] || AR=ar
+ [ -n "$ARFLAGS" ] || ARFLAGS=rv
diff --git a/recipes/udns/udns_0.0.9.bb b/recipes/udns/udns_0.0.9.bb
new file mode 100644
index 0000000000..ba95652855
--- /dev/null
+++ b/recipes/udns/udns_0.0.9.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "DNS Resolver Library"
+HOMEPAGE = "http://www.corpit.ru/mjt/udns.html"
+PR = "r0"
+
+SRC_URI = " \
+ http://www.corpit.ru/mjt/${PN}/${PN}_${PV}.tar.gz;name=udns \
+ file://fix-cc-check.patch;patch=1 \
+"
+SRC_URI[udns.md5sum] = "78843added6f6b690bc6019ab8ef03c9"
+SRC_URI[udns.sha256sum] = "cfc5f9b5387f96e48fc9c7aa5ef6511809e6c72c0df0d533cf150016816eaad2"
+
+S = ${WORKDIR}/${PN}-${PV}
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+# Package is using configure and Makefile.in, but not autotools in general ...
+
+do_configure() {
+ ./configure --disable-ipv6
+}
+
+do_compile() {
+ oe_runmake shared static
+}
+
+do_install() {
+ oe_libinstall -so -a libudns ${D}${libdir}
+ ln -s libudns.so.0 ${D}${libdir}/libudns_s.so
+ install -d ${D}${includedir}
+ install -m 0644 ${S}/udns.h ${D}${includedir}
+}
diff --git a/recipes/unrar/files/makefile.unix.patch b/recipes/unrar/files/makefile.unix.patch
new file mode 100644
index 0000000000..ce72351d4b
--- /dev/null
+++ b/recipes/unrar/files/makefile.unix.patch
@@ -0,0 +1,21 @@
+--- a/makefile.unix 2009-05-03 07:18:45.000000000 +0200
++++ b/makefile.unix 2010-03-15 13:31:31.000000000 +0100
+@@ -9,8 +9,8 @@
+ #CXX=g++
+ #CXXFLAGS=-O2
+ DEFINES=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
+-STRIP=strip
+-DESTDIR=/usr
++#STRIP=strip
++#DESTDIR=/usr
+
+ # Linux using LCC
+ #CXX=lcc
+@@ -136,6 +136,7 @@
+ $(LINK) -shared -o libunrar.so $(LDFLAGS) $(OBJECTS) $(LIB_OBJ)
+
+ install-unrar:
++ install -d $(DESTDIR)/bin
+ install unrar $(DESTDIR)/bin
+
+ uninstall-unrar:
diff --git a/recipes/unrar/unrar-native_3.4.3.bb b/recipes/unrar/unrar-native_3.4.3.bb
deleted file mode 100644
index 4b87691e89..0000000000
--- a/recipes/unrar/unrar-native_3.4.3.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-require unrar.inc
-inherit native
-
-do_stage() {
- install unrar ${STAGING_BINDIR}
-}
-
-do_package() {
- :
-}
-
-do_install() {
- :
-}
diff --git a/recipes/unrar/unrar.inc b/recipes/unrar/unrar.inc
deleted file mode 100644
index 4887ac9fb2..0000000000
--- a/recipes/unrar/unrar.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-SRC_URI = "http://www.rarlab.com/rar/unrarsrc-${PV}.tar.gz"
-S = "${WORKDIR}/unrar"
-
-do_compile() {
- oe_runmake -f makefile.unix
-}
-
diff --git a/recipes/unrar/unrar_3.4.3.bb b/recipes/unrar/unrar_3.4.3.bb
deleted file mode 100644
index 39d81990e2..0000000000
--- a/recipes/unrar/unrar_3.4.3.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require unrar.inc
-
-do_install() {
- install -d ${D}${bindir}
- install -m 0755 unrar ${D}${bindir}
-}
diff --git a/recipes/unrar/unrar_3.9.9.bb b/recipes/unrar/unrar_3.9.9.bb
new file mode 100644
index 0000000000..21e1f23d53
--- /dev/null
+++ b/recipes/unrar/unrar_3.9.9.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "RAR archivers"
+HOMEPAGE = "http://www.rarlab.com/"
+PR = "r0"
+
+SRC_URI = "http://www.rarlab.com/rar/unrarsrc-${PV}.tar.gz;name=unrar \
+ file://makefile.unix.patch;patch=1"
+SRC_URI[unrar.md5sum] = "4271fc8710d299341c969666492b305c"
+SRC_URI[unrar.sha256sum] = "460d4c014f5aaaa9b1c810dca180f07e155678b322169e20f4e51c616fa0e7ff"
+
+S = "${WORKDIR}/unrar"
+
+BBCLASSEXTEND = "native"
+NATIVE_INSTALL_WORKS = "1"
+
+EXTRA_OEMAKE = "-f makefile.unix DESTDIR=${D}${exec_prefix}"
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake install
+}
diff --git a/recipes/usbutils/usbutils_0.70.bb b/recipes/usbutils/usbutils_0.70.bb
index 7ec23278fa..4dfad5602e 100644
--- a/recipes/usbutils/usbutils_0.70.bb
+++ b/recipes/usbutils/usbutils_0.70.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Host side USB console utilities."
SECTION = "base"
DEPENDS += "virtual/libusb0"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PRIORITY = "optional"
DEFAULT_PREFERENCE = "1"
diff --git a/recipes/usbutils/usbutils_0.73.bb b/recipes/usbutils/usbutils_0.73.bb
index ebbc306007..e10f1eb2f3 100644
--- a/recipes/usbutils/usbutils_0.73.bb
+++ b/recipes/usbutils/usbutils_0.73.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Host side USB console utilities."
SECTION = "base"
DEPENDS += "virtual/libusb0"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PRIORITY = "optional"
DEFAULT_PREFERENCE = "1"
diff --git a/recipes/usbutils/usbutils_0.82.bb b/recipes/usbutils/usbutils_0.82.bb
index 436331dd5a..bcbb2671bf 100644
--- a/recipes/usbutils/usbutils_0.82.bb
+++ b/recipes/usbutils/usbutils_0.82.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Host side USB console utilities."
SECTION = "base"
DEPENDS += "virtual/libusb0"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PRIORITY = "optional"
SRC_URI = "${SOURCEFORGE_MIRROR}/linux-usb/usbutils-${PV}.tar.gz \
diff --git a/recipes/usbutils/usbutils_0.86.bb b/recipes/usbutils/usbutils_0.86.bb
index 436331dd5a..bcbb2671bf 100644
--- a/recipes/usbutils/usbutils_0.86.bb
+++ b/recipes/usbutils/usbutils_0.86.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Host side USB console utilities."
SECTION = "base"
DEPENDS += "virtual/libusb0"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PRIORITY = "optional"
SRC_URI = "${SOURCEFORGE_MIRROR}/linux-usb/usbutils-${PV}.tar.gz \
diff --git a/recipes/usbutils/usbutils_cvs.bb b/recipes/usbutils/usbutils_cvs.bb
index 9ef25c4984..e53d3db57d 100644
--- a/recipes/usbutils/usbutils_cvs.bb
+++ b/recipes/usbutils/usbutils_cvs.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Host side USB console utilities."
SECTION = "base"
DEPENDS += "virtual/libusb0"
-LICENSE = "GPL"
+LICENSE = "GPLv2"
PRIORITY = "optional"
PV = "0.71+cvs${SRCDATE}"
PR = "r4"
diff --git a/recipes/util-linux-ng/util-linux-ng-2.17/tls.patch b/recipes/util-linux-ng/util-linux-ng-2.17/tls.patch
new file mode 100644
index 0000000000..bdb29cae1f
--- /dev/null
+++ b/recipes/util-linux-ng/util-linux-ng-2.17/tls.patch
@@ -0,0 +1,70 @@
+Index: util-linux-ng-2.16/m4/tls.m4
+===================================================================
+--- util-linux-ng-2.16.orig/m4/tls.m4 2009-07-04 01:20:03.000000000 +0200
++++ util-linux-ng-2.16/m4/tls.m4 2009-07-30 01:57:30.151697033 +0200
+@@ -18,31 +18,26 @@
+ # version as well.
+ #
+ AC_DEFUN([AX_TLS], [
+- AC_MSG_CHECKING(for thread local storage (TLS) class)
+- AC_CACHE_VAL(ac_cv_tls, [
+- ax_tls_keywords="__thread __declspec(thread) none"
+- for ax_tls_keyword in $ax_tls_keywords; do
+- case $ax_tls_keyword in
+- none) ac_cv_tls=none ; break ;;
+- *)
+- AC_TRY_COMPILE(
+- [#include <stdlib.h>
+- static void
+- foo(void) {
+- static ] $ax_tls_keyword [ int bar;
+- exit(1);
+- }],
+- [],
+- [ac_cv_tls=$ax_tls_keyword ; break],
+- ac_cv_tls=none
+- )
+- esac
+- done
+-])
++ AC_CACHE_CHECK([for thread local storage (TLS) class],
++ ac_cv_tls,
++ [AC_LINK_IFELSE([__thread int a; int b; int main() { return a = b; }],
++ [chktls_save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
++ chktls_save_CFLAGS="$CFLAGS"
++ CFLAGS="-fPIC $CFLAGS"
++ dnl If -shared works, test if TLS works in a shared library.
++ AC_LINK_IFELSE([int f() { return 0; }],
++ AC_LINK_IFELSE([__thread int a; int b; int f() { return a = b; }],
++ [ac_cv_tls=yes],
++ [ac_cv_tls=no]),
++ [ac_cv_tls=yes])
++ CFLAGS="$chktls_save_CFLAGS"
++ LDFLAGS="$chktls_save_LDFLAGS"], [ac_cv_tls=no])
++ ])
+
+- if test "$ac_cv_tls" != "none"; then
+- dnl AC_DEFINE([TLS], [], [If the compiler supports a TLS storage class define it to that here])
+- AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
+- fi
+- AC_MSG_RESULT($ac_cv_tls)
++ AS_IF([test "x$ac_cv_tls" = "xyes"],
++ [AC_DEFINE([TLS], 1,
++ [Define this if the compiler supports __thread for Thread-Local Storage])
++ $1],
++ [$2])
+ ])
+Index: util-linux-ng-2.16/shlibs/uuid/src/gen_uuid.c
+===================================================================
+--- util-linux-ng-2.16.orig/shlibs/uuid/src/gen_uuid.c 2009-07-30 02:31:48.518159459 +0200
++++ util-linux-ng-2.16/shlibs/uuid/src/gen_uuid.c 2009-07-30 02:32:04.867871183 +0200
+@@ -99,7 +99,7 @@
+ #endif
+
+ #ifdef TLS
+-#define THREAD_LOCAL static TLS
++#define THREAD_LOCAL static __thread
+ #else
+ #define THREAD_LOCAL static
+ #endif
diff --git a/recipes/util-linux-ng/util-linux-ng-2.17/uclibc-compile.patch b/recipes/util-linux-ng/util-linux-ng-2.17/uclibc-compile.patch
new file mode 100644
index 0000000000..b2e8a8b95a
--- /dev/null
+++ b/recipes/util-linux-ng/util-linux-ng-2.17/uclibc-compile.patch
@@ -0,0 +1,13 @@
+Index: util-linux-ng-2.16/misc-utils/cal.c
+===================================================================
+--- util-linux-ng-2.16.orig/misc-utils/cal.c 2009-07-03 16:20:01.000000000 -0700
++++ util-linux-ng-2.16/misc-utils/cal.c 2009-07-18 23:21:37.000000000 -0700
+@@ -407,7 +407,7 @@
+ strcpy(day_headings,"");
+ strcpy(j_day_headings,"");
+
+-#ifdef HAVE_LANGINFO_H
++#ifdef HAVE_LANGINFO_H && !defined(__UCLIBC__)
+ # define weekday(wd) nl_langinfo(ABDAY_1+wd)
+ #else
+ # define weekday(wd) _time_info->abbrev_wkday[wd]
diff --git a/recipes/util-linux-ng/util-linux-ng-2.17/util-linux-ng-replace-siginterrupt.patch b/recipes/util-linux-ng/util-linux-ng-2.17/util-linux-ng-replace-siginterrupt.patch
new file mode 100644
index 0000000000..4b5eb73760
--- /dev/null
+++ b/recipes/util-linux-ng/util-linux-ng-2.17/util-linux-ng-replace-siginterrupt.patch
@@ -0,0 +1,23 @@
+Index: util-linux-ng-2.14/login-utils/login.c
+===================================================================
+--- util-linux-ng-2.14.orig/login-utils/login.c 2008-05-28 16:01:02.000000000 -0700
++++ util-linux-ng-2.14/login-utils/login.c 2009-03-04 18:31:42.000000000 -0800
+@@ -358,6 +358,7 @@
+ char *childArgv[10];
+ char *buff;
+ int childArgc = 0;
++ struct sigaction act;
+ #ifdef HAVE_SECURITY_PAM_MISC_H
+ int retcode;
+ pam_handle_t *pamh = NULL;
+@@ -373,7 +374,9 @@
+ pid = getpid();
+
+ signal(SIGALRM, timedout);
+- siginterrupt(SIGALRM,1); /* we have to interrupt syscalls like ioclt() */
++ (void) sigaction(SIGALRM, NULL, &act);
++ act.sa_flags &= ~SA_RESTART;
++ sigaction(SIGALRM, &act, NULL);
+ alarm((unsigned int)timeout);
+ signal(SIGQUIT, SIG_IGN);
+ signal(SIGINT, SIG_IGN);
diff --git a/recipes/util-linux-ng/util-linux-ng.inc b/recipes/util-linux-ng/util-linux-ng.inc
index 7f4333ba9d..1c6e8a89e0 100644
--- a/recipes/util-linux-ng/util-linux-ng.inc
+++ b/recipes/util-linux-ng/util-linux-ng.inc
@@ -7,17 +7,20 @@ inherit autotools
DEFAULT_PREFERENCE = "-1"
-INC_PR = "r9"
+INC_PR = "r16"
# allows for a release candidate
RC ?= ""
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/util-linux-ng/v${PV}/util-linux-ng-${PV}${RC}.tar.bz2"
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/util-linux-ng/v${PV}/util-linux-ng-${PV}${RC}.tar.bz2;name=archive"
SRC_URI_append_chinook-compat = " file://chinook_libtool.patch;patch=1 "
-PACKAGES =+ "util-linux-ng-fdisk util-linux-ng-cfdisk util-linux-ng-sfdisk util-linux-ng-swaponoff util-linux-ng-losetup util-linux-ng-umount util-linux-ng-mount util-linux-ng-readprofile "
-PACKAGES_DYNAMIC = "libblkid*"
+PACKAGES =+ "${PN}-fdisk ${PN}-cfdisk ${PN}-sfdisk ${PN}-swaponoff \
+ ${PN}-losetup ${PN}-umount ${PN}-mount ${PN}-readprofile \
+ ${PN}-fsck ${PN}-blkid ${PN}-mountall"
+
+PACKAGES_DYNAMIC = "libblkid* libuuid*"
# Provide old util-linux names (several recipes still use DEPENDS or RDEPENDS = "util-linux"):
PROVIDES = "util-linux"
@@ -30,6 +33,8 @@ RPROVIDES_util-linux-ng-losetup = "util-linux-losetup"
RPROVIDES_util-linux-ng-umount = "util-linux-umount"
RPROVIDES_util-linux-ng-mount = "util-linux-mount"
RPROVIDES_util-linux-ng-readprofile = "util-linux-readprofile"
+RPROVIDES_util-linux-ng-fsck = "e2fsprogs-fsck"
+RPROVIDES_util-linux-ng-blkid = "e2fsprogs-blkid"
FILES_${PN}-doc += "/usr/share/misc/getopt/getopt-*.*"
FILES_${PN} = "${bindir} ${sbindir} ${base_bindir} ${base_sbindir}"
@@ -44,18 +49,23 @@ FILES_util-linux-ng-mount = "${base_bindir}/mount.${PN} ${sysconfdir}/default/mo
FILES_util-linux-ng-umount = "${base_bindir}/umount.${PN}"
# Moved to ${base_sbindir} by do_install:
FILES_util-linux-ng-readprofile = "${base_sbindir}/readprofile.${PN}"
+FILES_util-linux-ng-fsck = "${base_sbindir}/fsck.${PN}"
+FILES_util-linux-ng-blkid = "${sbindir}/blkid"
+FILES_${PN}-mountall = "${sysconfdir}/default/mountall.${PN}"
-PACKAGES =+ "${PN}-mountall"
-FILES_${PN}-mountall = "${sysconfdir}/default/mountall"
+RREPLACES_util-linux-ng-blkid = "e2fsprogs-blkid"
RREPLACES_${PN}-mountall = "busybox-mountall"
-RRECOMMENDS_${PN} = "util-linux-ng-fdisk util-linux-ng-cfdisk util-linux-ng-sfdisk util-linux-ng-mount util-linux-ng-readprofile "
-RDEPENDS_${PN} = "${PN}-mountall util-linux-ng-umount util-linux-ng-swaponoff util-linux-ng-losetup"
+RRECOMMENDS_${PN} = "${PN}-fdisk ${PN}-cfdisk ${PN}-sfdisk ${PN}-mount ${PN}-readprofile"
+RDEPENDS_${PN} = "${PN}-mountall ${PN}-umount ${PN}-swaponoff ${PN}-losetup ${PN}-fsck ${PN}-blkid"
EXTRA_OECONF = "--disable-use-tty-group --disable-makeinstall-chown \
--enable-kill --enable-last --enable-mesg --enable-raw --enable-login-utils \
--enable-arch --enable-init --enable-partx --enable-schedutils \
---with-fsprobe=builtin"
+--with-fsprobe=builtin --enable-libuuid --enable-libblkid \
+--enable-fsck"
+
+LDFLAGS_append_libc-uclibc = " -lintl"
S = "${WORKDIR}/util-linux-ng-${PV}${RC}"
@@ -69,10 +79,6 @@ do_configure_prepend_chinook-compat () {
do_compile () {
set -e
-# install ${WORKDIR}/MCONFIG ${S}/MCONFIG
-# install ${WORKDIR}/make_include ${S}/make_include
-# install ${WORKDIR}/swapargs.h ${S}/mount/swapargs.h
-# install ${WORKDIR}/defines.h ${S}/defines.h
oe_runmake ARCH=${TARGET_ARCH} CPU= CPUOPT= \
'OPT=${CFLAGS}' 'CC=${CC}' 'LD=${LD}' \
'LDFLAGS=${LDFLAGS}'
@@ -110,10 +116,10 @@ do_install () {
'LDFLAGS=${LDFLAGS}' 'DESTDIR=${D}' install
mkdir -p ${D}${base_bindir}
- sbinprogs="agetty blockdev ctrlaltdel cfdisk"
- sbinprogs_a="pivot_root hwclock mkswap shutdown mkfs.minix fsck.minix losetup swapon fdisk readprofile"
- usrbinprogs_a="hexdump last logger mesg renice wall"
- binprogs_a="dmesg kill more umount mount"
+ sbinprogs="agetty blockdev ctrlaltdel cfdisk vipw vigr"
+ sbinprogs_a="pivot_root hwclock mkswap shutdown mkfs.minix fsck.minix losetup swapon fdisk readprofile fsck"
+ usrbinprogs_a="chfn chsh hexdump last logger mesg newgrp renice wall"
+ binprogs_a="dmesg kill more umount mount login"
if [ "${base_sbindir}" != "${sbindir}" ]; then
mkdir -p ${D}${base_sbindir}
@@ -152,7 +158,7 @@ do_install () {
done
install -d ${D}${sysconfdir}/default/
- echo 'MOUNTALL="-t nonfs,nosmbfs,noncpfs"' > ${D}${sysconfdir}/default/mountall
+ echo 'MOUNTALL="-t nonfs,nosmbfs,noncpfs"' > ${D}${sysconfdir}/default/mountall.${PN}
rm ${D}${sbindir}/swapoff -f
ln -sf ${base_sbindir}/swapon.${PN} ${D}${base_sbindir}/swapoff.${PN}
@@ -188,6 +194,12 @@ pkg_postinst_${PN} () {
update-alternatives --install ${bindir}/mesg mesg mesg.${PN} 100
update-alternatives --install ${bindir}/renice renice renice.${PN} 100
update-alternatives --install ${bindir}/wall wall wall.${PN} 100
+ update-alternatives --install ${bindir}/chfn chfn chfn.${PN} 100
+ update-alternatives --install ${bindir}/newgrp newgrp newgrp.${PN} 100
+ update-alternatives --install ${bindir}/chsh chsh chsh.${PN} 100
+ update-alternatives --install ${base_bindir}/login login login.${PN} 100
+ update-alternatives --install ${base_sbindir}/vipw vipw vipw.${PN} 100
+ update-alternatives --install ${base_sbindir}/vigr vigr vigr.${PN} 100
# There seems to be problem, atleast on nslu2, with these, until they are
# fixed the busybox ones have higher priority
@@ -200,23 +212,10 @@ pkg_postinst_${PN} () {
pkg_prerm_${PN} () {
test -x ${base_sbindir}/pivot_root.${PN} && \
update-alternatives --remove pivot_root pivot_root.${PN}
- update-alternatives --remove dmesg dmesg.${PN}
- update-alternatives --remove kill kill.${PN}
- update-alternatives --remove more more.${PN}
- update-alternatives --remove halt halt.${PN}
- update-alternatives --remove hwclock hwclock.${PN}
- update-alternatives --remove mkswap mkswap.${PN}
- update-alternatives --remove reboot reboot.${PN}
- update-alternatives --remove shutdown shutdown.${PN}
- update-alternatives --remove sln sln.${PN}
- update-alternatives --remove mkfs.minix mkfs.minix.${PN}
- update-alternatives --remove fsck.minix fsck.minix.${PN}
- update-alternatives --remove hexdump hexdump.${PN}
- update-alternatives --remove last last.${PN}
- update-alternatives --remove logger logger.${PN}
- update-alternatives --remove mesg mesg.${PN}
- update-alternatives --remove renice renice.${PN}
- update-alternatives --remove wall wall.${PN}
+
+ for i in dmesg kill more halt hwclock mkswap reboot shutdown sln mkfs.minix fsck.minix hecdump last logger mesg renice wall vipw vigr chfn newgrp chsh login ; do
+ update-alternatives --remove $i $i.${PN}
+ done
}
pkg_postinst_util-linux-ng-fdisk () {
@@ -269,3 +268,17 @@ pkg_prerm_util-linux-ng-readprofile () {
update-alternatives --remove readprofile readprofile.${PN} 100
}
+pkg_postinst_util-linux-ng-mountall () {
+ update-alternatives --install ${sysconfdir}/default/mountall default_mountall mountall.${PN} 100
+}
+pkg_prerm_util-linux-ng-mountall () {
+ update-alternatives --remove default_mountall mountall.${PN}
+}
+
+pkg_postinst_util-linux-ng-fsck () {
+ update-alternatives --install ${base_sbindir}/fsck fsck fsck.${PN} 100
+}
+
+pkg_prerm_util-linux-ng-fsck () {
+ update-alternatives --remove fsck fsck.${PN}
+}
diff --git a/recipes/util-linux-ng/util-linux-ng_2.13.1.bb b/recipes/util-linux-ng/util-linux-ng_2.13.1.bb
index c239b15226..8dc6a5408e 100644
--- a/recipes/util-linux-ng/util-linux-ng_2.13.1.bb
+++ b/recipes/util-linux-ng/util-linux-ng_2.13.1.bb
@@ -1,8 +1,5 @@
require util-linux-ng.inc
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/util-linux-ng/v2.13/util-linux-ng-${PV}${RC}.tar.bz2"
-#SRC_URI += "file://util-linux_2.12r-12.diff.gz;patch=1"
-#SRC_URI += "file://glibc-fix.patch;patch=1"
-#SRC_URI += "file://glibc-umount2.patch;patch=1"
PR = "${INC_PR}"
diff --git a/recipes/util-linux-ng/util-linux-ng_2.14.bb b/recipes/util-linux-ng/util-linux-ng_2.14.bb
index 7385324fdb..a0aee369cc 100644
--- a/recipes/util-linux-ng/util-linux-ng_2.14.bb
+++ b/recipes/util-linux-ng/util-linux-ng_2.14.bb
@@ -5,7 +5,3 @@ PR = "${INC_PR}"
SRC_URI += "file://util-linux-ng-uclibc-versionsort.patch;patch=1 \
file://util-linux-ng-replace-siginterrupt.patch;patch=1 \
"
-LDFLAGS_append_linux-uclibc = " -lintl"
-LDFLAGS_append_linux-uclibceabi = " -lintl "
-LDFLAGS_append_uclinux-uclibc = " -lintl"
-
diff --git a/recipes/util-linux-ng/util-linux-ng_2.15.bb b/recipes/util-linux-ng/util-linux-ng_2.15.bb
index 0c2416fd16..4a707b9fa3 100644
--- a/recipes/util-linux-ng/util-linux-ng_2.15.bb
+++ b/recipes/util-linux-ng/util-linux-ng_2.15.bb
@@ -7,9 +7,6 @@ SRC_URI += "file://fix-make-c.patch;patch=1 \
file://uclibc-compile.patch;patch=1 \
"
-LDFLAGS_append = " -luuid"
-LDFLAGS_append_libc-uclibc = " -luuid -lintl"
-
do_compile_prepend() {
sed -i /am__append_1/d ${S}/libs/blkid/src/Makefile
}
diff --git a/recipes/util-linux-ng/util-linux-ng_2.16.bb b/recipes/util-linux-ng/util-linux-ng_2.16.bb
index bbcc9cef4f..ded257b319 100644
--- a/recipes/util-linux-ng/util-linux-ng_2.16.bb
+++ b/recipes/util-linux-ng/util-linux-ng_2.16.bb
@@ -1,14 +1,8 @@
require util-linux-ng.inc
-PR = "${INC_PR}.4"
+PR = "${INC_PR}"
SRC_URI += "file://uclibc-compile.patch;patch=1 \
file://tls.patch;patch=1 \
file://util-linux-ng-replace-siginterrupt.patch;patch=1 \
"
-
-EXTRA_OECONF += " --enable-libuuid --enable-libblkid \
- --disable-fsck"
-LDFLAGS_append_libc-uclibc = " -lintl"
-PACKAGES_DYNAMIC += "libuuid*"
-
diff --git a/recipes/util-linux-ng/util-linux-ng_2.17.bb b/recipes/util-linux-ng/util-linux-ng_2.17.bb
new file mode 100644
index 0000000000..00a044eb08
--- /dev/null
+++ b/recipes/util-linux-ng/util-linux-ng_2.17.bb
@@ -0,0 +1,14 @@
+require util-linux-ng.inc
+
+PR = "${INC_PR}"
+
+SRC_URI += "file://uclibc-compile.patch;patch=1 \
+ file://util-linux-ng-replace-siginterrupt.patch;patch=1 \
+ "
+
+# fallocate is glibc 2.10, fallocate64 is glibc 2.11
+# we need to disable it for older versions
+EXTRA_OECONF += "ac_cv_func_fallocate=no"
+
+SRC_URI[archive.md5sum] = "11cc8a0138019e7060dd275d47dbc096"
+SRC_URI[archive.sha256sum] = "8720f7233394b68d17095707c195ebb014943c1075a18fb5fd21ec108f012be3"
diff --git a/recipes/vagalume/vagalume_0.8.2.bb b/recipes/vagalume/vagalume_0.8.2.bb
deleted file mode 100644
index da30fb2268..0000000000
--- a/recipes/vagalume/vagalume_0.8.2.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "Last.fm client"
-AUTHOR = "agarcia@igalia.com"
-HOMEPAGE = "http://vagalume.igalia.com/"
-SECTION = "x11"
-DEPENDS = "gtk+ gstreamer curl gst-plugins-good ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'gst-plugins-ugly', d)}"
-RDEPENDS = "curl gst-plugin-autodetect gst-plugin-audioconvert gst-plugin-alsa gst-plugin-gconfelements librsvg-gtk ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'gst-plugin-mad', d)}"
-RRECOMMENDS = "dbus-x11 hicolor-icon-theme"
-PR = "r0"
-
-SRC_URI = "http://vagalume.igalia.com/files/source/vagalume_${PV}.orig.tar.gz\
- file://index.theme \
- "
-
-inherit autotools
-
-FILES_${PN} += "${datadir}/icons ${datadir}/dbus-1"
-
-do_install_append() {
- install -m 0644 ${WORKDIR}/index.theme ${D}${datadir}/vagalume/icons/hicolor
-}
diff --git a/recipes/vagalume/vagalume_0.8.3.bb b/recipes/vagalume/vagalume_0.8.3.bb
new file mode 100644
index 0000000000..61e4768604
--- /dev/null
+++ b/recipes/vagalume/vagalume_0.8.3.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Last.fm client"
+AUTHOR = "agarcia@igalia.com"
+HOMEPAGE = "http://vagalume.igalia.com/"
+SECTION = "x11"
+DEPENDS = "gtk+ gstreamer curl gst-plugins-good ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'gst-plugins-ugly', d)}"
+RDEPENDS = "curl gst-plugin-autodetect gst-plugin-audioconvert gst-plugin-alsa gst-plugin-gconfelements librsvg-gtk ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'gst-plugin-mad', d)}"
+RRECOMMENDS = "dbus-x11 hicolor-icon-theme"
+PR = "r0"
+
+SRC_URI = "http://vagalume.igalia.com/files/source/vagalume_${PV}.orig.tar.gz\
+ file://index.theme \
+ "
+S = "${WORKDIR}/${P}.orig"
+inherit autotools
+
+FILES_${PN} += "${datadir}/icons ${datadir}/dbus-1"
+
+do_install_append() {
+ install -m 0644 ${WORKDIR}/index.theme ${D}${datadir}/vagalume/icons/hicolor
+}
diff --git a/recipes/vala-dbus-binding-tool/vala-dbus-binding-tool.inc b/recipes/vala-dbus-binding-tool/vala-dbus-binding-tool.inc
new file mode 100644
index 0000000000..b28079cb5d
--- /dev/null
+++ b/recipes/vala-dbus-binding-tool/vala-dbus-binding-tool.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "Vala DBus Binding Tool"
+SECTION = "devel"
+DEPENDS = "vala libgee libxml2 intltool-native"
+HOMEPAGE = "http://wiki.freesmartphone.org/index.php/Implementations/vala-dbus-binding-tool"
+LICENSE = "GPLv2"
+INC_PR = "r3"
+
+SRC_URI = "http://downloads.freesmartphone.org/sources/vala-dbus-binding-tool-${PV}.tar.bz2;name=archive"
+
+inherit autotools_stage
+
+BBCLASSEXTEND = "native"
diff --git a/recipes/vala-dbus-binding-tool/vala-dbus-binding-tool_0.1.4.bb b/recipes/vala-dbus-binding-tool/vala-dbus-binding-tool_0.1.4.bb
new file mode 100644
index 0000000000..371e01b17f
--- /dev/null
+++ b/recipes/vala-dbus-binding-tool/vala-dbus-binding-tool_0.1.4.bb
@@ -0,0 +1,5 @@
+require vala-dbus-binding-tool.inc
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "9a758057798991de66a44608f8b80895"
+SRC_URI[archive.sha256sum] = "a89823ee30054b5837d670859bb07f6ec414279f4603c420fe67399380ddffdb"
diff --git a/recipes/vala-dbus-binding-tool/vala-dbus-binding-tool_git.bb b/recipes/vala-dbus-binding-tool/vala-dbus-binding-tool_git.bb
new file mode 100644
index 0000000000..20379e9f98
--- /dev/null
+++ b/recipes/vala-dbus-binding-tool/vala-dbus-binding-tool_git.bb
@@ -0,0 +1,7 @@
+require vala-dbus-binding-tool.inc
+PV = "0.1.3+gitr${SRCREV}"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "${FREESMARTPHONE_GIT}/vala-dbus-binding-tool.git;protocol=git;branch=master"
+S = "${WORKDIR}/git"
diff --git a/recipes/vala/vala-native_0.7.10.bb b/recipes/vala/vala-native_0.7.10.5.bb
index d6c239f7bf..d6c239f7bf 100644
--- a/recipes/vala/vala-native_0.7.10.bb
+++ b/recipes/vala/vala-native_0.7.10.5.bb
diff --git a/recipes/vala/vala.inc b/recipes/vala/vala.inc
index 620e2a6454..5815866e71 100644
--- a/recipes/vala/vala.inc
+++ b/recipes/vala/vala.inc
@@ -4,9 +4,9 @@ SECTION = "devel"
DEPENDS = "glib-2.0 dbus"
HOMEPAGE = "http://vala-project.org"
LICENSE = "LGPL"
-INC_PR = "r2"
+INC_PR = "r0"
-SRC_URI = "http://www.freesmartphone.org/sources/vala-${PV}.tar.bz2"
+SRC_URI = "http://downloads.freesmartphone.org/sources/vala-${PV}.tar.bz2;name=archive"
inherit autotools_stage
diff --git a/recipes/vala/vala_0.7.10.5.bb b/recipes/vala/vala_0.7.10.5.bb
new file mode 100644
index 0000000000..9a16a1c3a3
--- /dev/null
+++ b/recipes/vala/vala_0.7.10.5.bb
@@ -0,0 +1,4 @@
+require vala.inc
+PR = "${INC_PR}.0"
+SRC_URI[archive.md5sum] = "5ee5b86460181e9bb0de9cb2e8f35077"
+SRC_URI[archive.sha256sum] = "1c4830973dbca36f8826e490ec8477df6ced0c8675bd724e24494ca0f1616926"
diff --git a/recipes/vala/vala_0.7.10.bb b/recipes/vala/vala_0.7.10.bb
deleted file mode 100644
index a5b1958f2c..0000000000
--- a/recipes/vala/vala_0.7.10.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require vala.inc
-PR = "${INC_PR}.0"
diff --git a/recipes/vorbis-tools/vorbis-tools-1.1.1/remove-deprecated-curl-option.patch b/recipes/vorbis-tools/vorbis-tools-1.1.1/remove-deprecated-curl-option.patch
deleted file mode 100644
index 5c52ef1b0d..0000000000
--- a/recipes/vorbis-tools/vorbis-tools-1.1.1/remove-deprecated-curl-option.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -urN vorbis-tools-1.1.1.orig/ogg123/http_transport.c vorbis-tools-1.1.1/ogg123/http_transport.c
---- vorbis-tools-1.1.1.orig/ogg123/http_transport.c 2005-06-13 15:11:44.000000000 +0200
-+++ vorbis-tools-1.1.1/ogg123/http_transport.c 2007-12-19 10:40:19.000000000 +0100
-@@ -116,7 +116,7 @@
- if (inputOpts.ProxyTunnel)
- curl_easy_setopt (handle, CURLOPT_HTTPPROXYTUNNEL, inputOpts.ProxyTunnel);
- */
-- curl_easy_setopt(handle, CURLOPT_MUTE, 1);
-+ /* curl_easy_setopt(handle, CURLOPT_MUTE, 1); */
- curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, private->error);
- curl_easy_setopt(handle, CURLOPT_PROGRESSFUNCTION, progress_callback);
- curl_easy_setopt(handle, CURLOPT_PROGRESSDATA, private);
diff --git a/recipes/vorbis-tools/vorbis-tools_1.1.1.bb b/recipes/vorbis-tools/vorbis-tools_1.1.1.bb
deleted file mode 100644
index 01fc248dd1..0000000000
--- a/recipes/vorbis-tools/vorbis-tools_1.1.1.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-DESCRIPTION = "vorbis-tools contains oggenc (an encoder), ogg123 (a playback tool), \
-ogginfo (displays ogg information), vcut (ogg file splitter), and \
-vorbiscomment (ogg comment editor)."
-LICENSE = "GPL"
-DEPENDS = "libogg libvorbis libao curl"
-SECTION = "console/multimedia"
-
-SRC_URI = "http://downloads.xiph.org/releases/vorbis/vorbis-tools-${PV}.tar.gz \
- file://remove-deprecated-curl-option.patch;patch=1"
-
-inherit autotools
-
-EXTRA_OECONF = "--without-flac --without-speex \
- --with-ogg-libraries=${STAGING_LIBDIR}/ \
- --with-ogg-includes=${STAGING_INCDIR}/ \
- --with-vorbis-libraries=${STAGING_LIBDIR}/ \
- --with-vorbis-includes=${STAGING_INCDIR}/ \
- --with-ao-libraries=${STAGING_LIBDIR}/ \
- --with-ao-includes=${STAGING_INCDIR}/ \
- --with-curl-libraries=${STAGING_LIBDIR}/ \
- --with-curl-includes=${STAGING_INCDIR}/"
diff --git a/recipes/vorbis-tools/vorbis-tools_1.2.0.bb b/recipes/vorbis-tools/vorbis-tools_1.2.0.bb
new file mode 100644
index 0000000000..7a231f8a4c
--- /dev/null
+++ b/recipes/vorbis-tools/vorbis-tools_1.2.0.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "vorbis-tools contains oggenc (an encoder), ogg123 (a playback tool), \
+ogginfo (displays ogg information), vcut (ogg file splitter), and \
+vorbiscomment (ogg comment editor)."
+LICENSE = "GPL"
+DEPENDS = "libogg libvorbis libao curl"
+SECTION = "console/multimedia"
+
+SRC_URI = "http://downloads.xiph.org/releases/vorbis/vorbis-tools-${PV}.tar.gz;name=src"
+
+SRC_URI[src.md5sum] = "df976d24e51ef3d87cd462edf747bf9a"
+SRC_URI[src.sha256sum] = "dbe753ce0ae0797f25117720bb2ba0d848388d3f47af8db31ebc35552c3de07b"
+
+inherit autotools
+
+EXTRA_OECONF = "--without-flac --without-speex \
+ --with-ogg-libraries=${STAGING_LIBDIR}/ \
+ --with-ogg-includes=${STAGING_INCDIR}/ \
+ --with-vorbis-libraries=${STAGING_LIBDIR}/ \
+ --with-vorbis-includes=${STAGING_INCDIR}/ \
+ --with-ao-libraries=${STAGING_LIBDIR}/ \
+ --with-ao-includes=${STAGING_INCDIR}/ \
+ --with-curl-libraries=${STAGING_LIBDIR}/ \
+ --with-curl-includes=${STAGING_INCDIR}/"
diff --git a/recipes/webkit/webkit-efl/fix-build-with-newer-evas.patch b/recipes/webkit/webkit-efl/fix-build-with-newer-evas.patch
new file mode 100644
index 0000000000..6adf0dd24b
--- /dev/null
+++ b/recipes/webkit/webkit-efl/fix-build-with-newer-evas.patch
@@ -0,0 +1,26 @@
+--- git/WebCore/platform/graphics/IntPoint.h 2009-11-16 19:14:36.000000000 +0100
++++ webkit-efl/WebCore/platform/graphics/IntPoint.h 2010-02-26 10:32:48.000000000 +0100
+@@ -33,6 +33,10 @@
+ #include <QDataStream>
+ #endif
+
++#if PLATFORM(EFL)
++#include <Evas.h>
++#endif
++
+ #if PLATFORM(CG)
+ typedef struct CGPoint CGPoint;
+ #endif
+@@ -55,12 +59,6 @@
+ QT_END_NAMESPACE
+ #elif PLATFORM(GTK)
+ typedef struct _GdkPoint GdkPoint;
+-#elif PLATFORM(EFL)
+-typedef struct _Evas_Point Evas_Point;
+-struct _Evas_Point{
+- int x;
+- int y;
+-};
+ #endif
+
+ #if PLATFORM(WX)
diff --git a/recipes/webkit/webkit-efl_git.bb b/recipes/webkit/webkit-efl_git.bb
index 7829802f74..0ca70a00fd 100644
--- a/recipes/webkit/webkit-efl_git.bb
+++ b/recipes/webkit/webkit-efl_git.bb
@@ -5,9 +5,10 @@ DEPENDS = "icu flex gst-plugins-base gstreamer jpeg libpng libxml2 pango \
sqlite3 libxslt gperf-native libxt"
PV = "1.1.11+gitr${SRCREV}"
-PR = "r2"
+PR = "r4"
-SRC_URI = "git://gitorious.org/webkit-efl/webkit-efl.git;protocol=git;branch=master"
+SRC_URI = "git://gitorious.org/webkit-efl/webkit-efl.git;protocol=git;branch=master \
+ file://fix-build-with-newer-evas.patch;patch=1"
S = "${WORKDIR}/git"
@@ -17,5 +18,5 @@ EXTRA_OECONF = "--disable-video --host=${TARGET_SYS} --with-port=efl --enable-we
PACKAGES =+ "${PN}-webinspector"
-FILES_${PN} += "${datadir}/webkit-1.0/resources/error.html ${datadir}/webkit-1.0/theme/default.edj"
+FILES_${PN} += "${datadir}/webkit-1.0/theme/default.edj"
FILES_${PN}-webinspector = "${datadir}/webkit-1.0/webinspector/"
diff --git a/recipes/webkit/webkit-gtk/GNUmakefile.am b/recipes/webkit/webkit-gtk/GNUmakefile.am
index f9ad21c334..9f0fa20e0c 100644
--- a/recipes/webkit/webkit-gtk/GNUmakefile.am
+++ b/recipes/webkit/webkit-gtk/GNUmakefile.am
@@ -142,6 +142,7 @@ global_cxxflags += \
# It breaks the build on other platforms, so we use it conditionally
if OS_WIN32
no_undefined = -no-undefined
+version_script = -export-symbols-regex "^(webkit_|JS).*"
endif
if OS_GNU
@@ -162,6 +163,7 @@ javascriptcore_cppflags += \
-I$(srcdir)/JavaScriptCore/parser \
-I$(srcdir)/JavaScriptCore/wtf \
-I$(srcdir)/JavaScriptCore/wtf/gtk \
+ -I$(srcdir)/JavaScriptCore/wtf/gobject \
-I$(top_builddir)/DerivedSources
nodist_EXTRA_libJavaScriptCore_la_SOURCES = \
@@ -270,16 +272,8 @@ global_cppflags += \
endif
if USE_GLIB_UNICODE
-# https://bugs.webkit.org/show_bug.cgi?id=15914
-# In patch 1/4 we are compiling a hybrid version of GLib WTF Unicode
-# functionality mixed with ICU-based text codecs and TextBreakIterator.
-# For the transition, introducing an interim HYBRID macro.
-# This macro is required for compiling WTF with GLib Unicode backend,
-# but at the same time keeping ICU dependency for codecs and break iterator.
-# It will be removed with patch 3/4 of the above bug.
global_cppflags += \
- -DWTF_USE_GLIB_UNICODE=1 \
- -DWTF_USE_GLIB_ICU_UNICODE_HYBRID=1
+ -DWTF_USE_GLIB_UNICODE=1
endif
if !ENABLE_FAST_MALLOC
@@ -326,6 +320,7 @@ webkitgtk_h_api += \
$(srcdir)/WebKit/gtk/webkit/webkitwebinspector.h \
$(srcdir)/WebKit/gtk/webkit/webkitwebnavigationaction.h \
$(srcdir)/WebKit/gtk/webkit/webkitwebpolicydecision.h \
+ $(srcdir)/WebKit/gtk/webkit/webkitgeolocationpolicydecision.h \
$(srcdir)/WebKit/gtk/webkit/webkitwebresource.h \
$(srcdir)/WebKit/gtk/webkit/webkitwebsettings.h \
$(srcdir)/WebKit/gtk/webkit/webkitwebwindowfeatures.h \
@@ -374,6 +369,7 @@ webkitgtk_sources += \
WebKit/gtk/webkit/webkitwebinspector.cpp \
WebKit/gtk/webkit/webkitwebnavigationaction.cpp \
WebKit/gtk/webkit/webkitwebpolicydecision.cpp \
+ WebKit/gtk/webkit/webkitgeolocationpolicydecision.cpp \
WebKit/gtk/webkit/webkitwebresource.cpp \
WebKit/gtk/webkit/webkitwebdatabase.cpp \
WebKit/gtk/webkit/webkitsecurityorigin.cpp \
@@ -425,6 +421,7 @@ $(WEBKIT_GIRSOURCES): $(JSCORE_GIRSOURCES) $(G_IR_SCANNER) libwebkit-1.0.la
--libtool="$(LIBTOOL)" \
--pkg gobject-2.0 \
--pkg gtk+-2.0 \
+ --pkg libsoup-2.4 \
--output $@ \
--add-include-path $(top_srcdir)/WebKit/gtk \
-I$(top_srcdir)/WebKit/gtk \
@@ -594,7 +591,7 @@ Programs_unittests_testloading_CFLAGS = $(webkit_tests_cflags)
Programs_unittests_testloading_LDADD = $(webkit_tests_ldadd)
Programs_unittests_testloading_LDFLAGS = $(webkit_tests_ldflags)
-Programs_unittests_testmimehandling_SOURCES = WebKit/gtk/tests/testmimehandling.c
+Programs_unittests_testmimehandling_SOURCES = WebKit/gtk/tests/testmimehandling.c WebKit/gtk/tests/test_utils.c
Programs_unittests_testmimehandling_CFLAGS = $(webkit_tests_cflags)
Programs_unittests_testmimehandling_LDADD = $(webkit_tests_ldadd)
Programs_unittests_testmimehandling_LDFLAGS = $(webkit_tests_ldflags)
@@ -652,7 +649,7 @@ Programs_unittests_testwebdatasource_SOURCES = WebKit/gtk/tests/testwebdatasourc
Programs_unittests_testwebdatasource_CFLAGS = $(webkit_tests_cflags)
Programs_unittests_testwebdatasource_LDADD = $(webkit_tests_ldadd)
-Programs_unittests_testwebview_SOURCES = WebKit/gtk/tests/testwebview.c
+Programs_unittests_testwebview_SOURCES = WebKit/gtk/tests/testwebview.c WebKit/gtk/tests/test_utils.c
Programs_unittests_testwebview_CFLAGS = $(webkit_tests_cflags)
Programs_unittests_testwebview_LDADD = $(webkit_tests_ldadd)
Programs_unittests_testwebview_LDFLAGS = $(webkit_tests_ldflags)
diff --git a/recipes/webkit/webkit-gtk/configure.ac b/recipes/webkit/webkit-gtk/configure.ac
index 3bc8351040..f0f11bfe49 100644
--- a/recipes/webkit/webkit-gtk/configure.ac
+++ b/recipes/webkit/webkit-gtk/configure.ac
@@ -2,7 +2,7 @@ AC_PREREQ(2.59)
m4_define([webkit_major_version], [1])
m4_define([webkit_minor_version], [1])
-m4_define([webkit_micro_version], [18])
+m4_define([webkit_micro_version], [22])
# This is the version we'll be using as part of our User-Agent string
# e.g., AppleWebKit/$(webkit_user_agent_version) ...
@@ -35,7 +35,7 @@ AC_CONFIG_SRCDIR([WebCore/config.h])
dnl # Libtool library version, not to confuse with API version
dnl # see http://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html#Libtool-versioning
-LIBWEBKITGTK_VERSION=16:0:14
+LIBWEBKITGTK_VERSION=18:0:16
AC_SUBST([LIBWEBKITGTK_VERSION])
AM_INIT_AUTOMAKE([foreign subdir-objects tar-ustar])
@@ -131,12 +131,19 @@ fi
AC_SUBST([JPEG_LIBS])
# Check for libpng the way Gtk+ does it
-AC_MSG_CHECKING(for libpng12)
-if $PKG_CONFIG --exists libpng12 ; then
+for l in libpng libpng14 libpng12; do
+ AC_MSG_CHECKING(for $l)
+ if $PKG_CONFIG --exists $l ; then
AC_MSG_RESULT(yes)
- PNG_LIBS=`$PKG_CONFIG --libs libpng12`
-else
- AC_MSG_RESULT(no)
+ PNG_LIBS=`$PKG_CONFIG --libs $l`
+ png_ok=yes
+ break
+ else
+ AC_MSG_RESULT(no)
+ png_ok=no
+ fi
+done
+if test "$png_ok" != yes; then
AC_CHECK_LIB(png, png_read_info,
[AC_CHECK_HEADER(png.h,
png_ok=yes,
@@ -155,7 +162,7 @@ else
AC_MSG_ERROR([PNG library (libpng) not found])
fi
else
- AC_MSG_ERROR([PNG library (libpng) not found])
+ AC_MSG_ERROR([PNG library (libpng) not found])
fi
fi
AC_SUBST([PNG_LIBS])
@@ -204,6 +211,7 @@ GTK_REQUIRED_VERSION=2.10
LIBXSLT_REQUIRED_VERSION=1.1.7
SQLITE_REQUIRED_VERSION=3.0
GSTREAMER_REQUIRED_VERSION=0.10
+GSTREAMER_PLUGINS_BASE_REQUIRED_VERSION=0.10.25
ENCHANT_REQUIRED_VERSION=0.22
GAIL_REQUIRED_VERSION=1.8
@@ -331,6 +339,14 @@ AC_ARG_ENABLE(dom_storage,
[],[enable_dom_storage="yes"])
AC_MSG_RESULT([$enable_dom_storage])
+# check whether to enable the indexed database API
+AC_MSG_CHECKING([whether to enable the indexed database API])
+AC_ARG_ENABLE(indexed_database,
+ AC_HELP_STRING([--enable-indexeddb],
+ [enable the indexed database API [default=no]]),
+ [],[enable_indexed_database="no"])
+AC_MSG_RESULT([$enable_indexed_database])
+
# check whether to build with database support
AC_MSG_CHECKING([whether to enable HTML5 client-side database storage support])
AC_ARG_ENABLE(database,
@@ -363,6 +379,22 @@ AC_ARG_ENABLE(datalist,
[],[enable_datalist="yes"])
AC_MSG_RESULT([$enable_datalist])
+# check whether to enable HTML5 ruby support
+AC_MSG_CHECKING([whether to enable HTML5 ruby support])
+AC_ARG_ENABLE(ruby,
+ AC_HELP_STRING([--enable-ruby],
+ [enable HTML5 ruby support [default=yes]]),
+ [],[enable_ruby="yes"])
+AC_MSG_RESULT([$enable_ruby])
+
+# check whether to enable HTML5 sandbox iframe support
+AC_MSG_CHECKING([whether to enable HTML5 sandboxed iframe support])
+AC_ARG_ENABLE(ruby,
+ AC_HELP_STRING([--enable-sandbox],
+ [enable HTML5 sandboxed iframe support [default=yes]]),
+ [],[enable_sandbox="yes"])
+AC_MSG_RESULT([$enable_sandbox])
+
# check whether to enable HTML5 audio/video support
AC_MSG_CHECKING([whether to enable HTML5 video support])
AC_ARG_ENABLE(video,
@@ -431,8 +463,8 @@ AC_MSG_RESULT([$enable_wml])
AC_MSG_CHECKING([whether to enable SharedWorkers support])
AC_ARG_ENABLE(shared_workers,
AC_HELP_STRING([--enable-shared-workers],
- [enable support for SharedWorkers [default=no]]),
- [],[enable_shared_workers="no"])
+ [enable support for SharedWorkers [default=yes]]),
+ [],[enable_shared_workers="yes"])
AC_MSG_RESULT([$enable_shared_workers])
# check whether to enable Web Workers support
@@ -521,6 +553,14 @@ AC_ARG_ENABLE(web_sockets,
[],[enable_web_sockets="no"])
AC_MSG_RESULT([$enable_web_sockets])
+# check whether to enable Blob.slice support
+AC_MSG_CHECKING([whether to enable Blob.slice support])
+AC_ARG_ENABLE(blob_slice,
+ AC_HELP_STRING([--enable-blob-slice],
+ [enable support for Blob.slice [default=no]]),
+ [],[enable_blob_slice="no"])
+AC_MSG_RESULT([$enable_blob_slice])
+
# check whether to enable code coverage
AC_MSG_CHECKING([whether to enable code coverage support])
AC_ARG_ENABLE(coverage,
@@ -635,13 +675,13 @@ PKG_CHECK_MODULES([LIBSOUP],
AC_SUBST([LIBSOUP_CFLAGS])
AC_SUBST([LIBSOUP_LIBS])
-# check if we can use libSoup 2.29.3 features
-PKG_CHECK_MODULES([LIBSOUP_2_29_3],
- [libsoup-2.4 >= 2.29.3],
- [have_libsoup_2_29_3=yes],
- [have_libsoup_2_29_3=no])
-if test "$have_libsoup_2_29_3" = "yes"; then
- AC_DEFINE([HAVE_LIBSOUP_2_29_3], 1, [Whether libSoup 2.29.3 features are available])
+# check if we can use libSoup 2.29.90 features
+PKG_CHECK_MODULES([LIBSOUP_2_29_90],
+ [libsoup-2.4 >= 2.29.90],
+ [have_libsoup_2_29_90=yes],
+ [have_libsoup_2_29_90=no])
+if test "$have_libsoup_2_29_90" = "yes"; then
+ AC_DEFINE([HAVE_LIBSOUP_2_29_90], 1, [Whether libSoup 2.29.90 features are available])
fi
# check if FreeType/FontConfig are available
@@ -696,9 +736,10 @@ fi
if test "$enable_video" = "yes"; then
PKG_CHECK_MODULES([GSTREAMER],
[gstreamer-0.10 >= $GSTREAMER_REQUIRED_VERSION
+ gstreamer-app-0.10
gstreamer-base-0.10
gstreamer-pbutils-0.10
- gstreamer-plugins-base-0.10
+ gstreamer-plugins-base-0.10 >= $GSTREAMER_PLUGINS_BASE_REQUIRED_VERSION
gstreamer-video-0.10])
AC_SUBST([GSTREAMER_CFLAGS])
AC_SUBST([GSTREAMER_LIBS])
@@ -743,6 +784,7 @@ AM_CONDITIONAL([USE_PANGO], [test "$with_font_backend" = "pango"])
# WebKit feature conditionals
AM_CONDITIONAL([ENABLE_DEBUG],[test "$enable_debug" = "yes"])
AM_CONDITIONAL([ENABLE_3D_TRANSFORMS],[test "$enable_3D_transforms" = "yes"])
+AM_CONDITIONAL([ENABLE_BLOB_SLICE],[test "$enable_blob_slice" = "yes"])
AM_CONDITIONAL([ENABLE_CHANNEL_MESSAGING],[test "$enable_channel_messaging" = "yes"])
AM_CONDITIONAL([ENABLE_JAVASCRIPT_DEBUGGER],[test "$enable_javascript_debugger" = "yes"])
AM_CONDITIONAL([ENABLE_OFFLINE_WEB_APPLICATIONS],[test "$enable_offline_web_applications" = "yes"])
@@ -751,12 +793,15 @@ AM_CONDITIONAL([ENABLE_DATABASE],[test "$enable_database" = "yes"])
AM_CONDITIONAL([ENABLE_DATALIST],[test "$enable_datalist" = "yes"])
AM_CONDITIONAL([ENABLE_EVENTSOURCE],[test "$enable_eventsource" = "yes"])
AM_CONDITIONAL([ENABLE_ICONDATABASE],[test "$enable_icon_database" = "yes"])
+AM_CONDITIONAL([ENABLE_INDEXED_DATABASE],[test "$enable_indexed_database" = "yes"])
AM_CONDITIONAL([ENABLE_XHTMLMP],[test "$enable_xhtmlmp" = "yes"])
AM_CONDITIONAL([ENABLE_XPATH],[test "$enable_xpath" = "yes"])
AM_CONDITIONAL([ENABLE_XSLT],[test "$enable_xslt" = "yes"])
AM_CONDITIONAL([ENABLE_FILTERS],[test "$enable_filters" = "yes"])
AM_CONDITIONAL([ENABLE_GEOLOCATION], [test "$enable_geolocation" = "yes"])
AM_CONDITIONAL([ENABLE_MATHML], [test "$enable_mathml" = "yes"])
+AM_CONDITIONAL([ENABLE_RUBY],[test "$enable_ruby" = "yes"])
+AM_CONDITIONAL([ENABLE_SANDBOX],[test "$enable_sandbox" = "yes"])
AM_CONDITIONAL([ENABLE_VIDEO],[test "$enable_video" = "yes"])
AM_CONDITIONAL([ENABLE_NOTIFICATIONS],[test "$enable_notifications" = "yes"])
AM_CONDITIONAL([ENABLE_ORIENTATION_EVENTS],[test "$enable_orientation_events" = "yes"])
@@ -802,6 +847,7 @@ Build configuration:
Optimized memory allocator : $enable_fast_malloc
Features:
3D Transforms : $enable_3D_transforms
+ Blob.slice support : $enable_blob_slice
JIT compilation : $enable_jit
Filters support : $enable_filters
Geolocation support : $enable_geolocation
@@ -811,6 +857,8 @@ Features:
HTML5 channel messaging support : $enable_channel_messaging
HTML5 client-side session and persistent storage support : $enable_dom_storage
HTML5 client-side database storage support : $enable_database
+ HTML5 ruby support : $enable_ruby
+ HTML5 sandboxed iframe support : $enable_sandbox
HTML5 server-sent events support : $enable_eventsource
HTML5 video element support : $enable_video
Icon database support : $enable_icon_database
diff --git a/recipes/webkit/webkit-gtk_svn.bb b/recipes/webkit/webkit-gtk_svn.bb
index f0b042c938..36174965d0 100644
--- a/recipes/webkit/webkit-gtk_svn.bb
+++ b/recipes/webkit/webkit-gtk_svn.bb
@@ -1,10 +1,11 @@
DESCRIPTION = "WebKit browser engine, GTK+ edition"
-DEPENDS = "enchant gtk-doc-native gtk-doc gnome-keyring libsoup-2.4 curl icu libxml2 cairo libxslt libxt libidn gnutls gtk+ gstreamer gst-plugins-base gnome-vfs bison-native flex-native gperf-native perl-native sqlite3"
+DEPENDS = "geoclue enchant gtk-doc-native gtk-doc gnome-keyring libsoup-2.4 curl icu libxml2 cairo libxslt libxt libidn gnutls gtk+ gstreamer gst-plugins-base gnome-vfs bison-native flex-native gperf-native perl-native sqlite3"
SRCREV_FORMAT = "webcore-rwebkit"
-SRCREV = "53071"
-PV = "1.1.18+svnr${SRCPV}"
+PR = "r1"
+SRCREV = "55715"
+PV = "1.1.22+svnr${SRCPV}"
SRC_URI = "\
svn://svn.webkit.org/repository/webkit/trunk/;module=JavaScriptCore;proto=http \
@@ -32,6 +33,7 @@ EXTRA_OECONF = "\
--enable-debug=no \
--enable-svg \
--enable-icon-database=yes \
+ --enable-geolocation=yes \
# --with-unicode-backend=glib \
"
diff --git a/recipes/wesnoth/wesnoth_1.6.5.bb b/recipes/wesnoth/wesnoth_1.6.5.bb
index 4b7b9b67de..cd1a50d2bc 100644
--- a/recipes/wesnoth/wesnoth_1.6.5.bb
+++ b/recipes/wesnoth/wesnoth_1.6.5.bb
@@ -26,7 +26,7 @@ EXTRA_OECMAKE = "\
PACKAGES = "wesnoth-editor wesnoth-doc wesnoth-music wesnoth-sounds \
wesnoth-aoi wesnoth-did wesnoth-ei wesnoth-httt wesnoth-l \
wesnoth-nr wesnoth-sof wesnoth-sotbe wesnoth-thot wesnoth-trow \
- wesnoth-tsg wesnoth-tb wesnoth-utbs \
+ wesnoth-tsg wesnoth-tb wesnoth-utbs wesnoth-low\
wesnoth-data \
wesnoth-all-campaigns \
wesnoth-all \
@@ -66,7 +66,7 @@ RDEPENDS_wesnoth-editor = "wesnoth-data"
RDEPENDS_wesnoth-all-campaigns = "wesnoth \
wesnoth-aoi wesnoth-did wesnoth-ei wesnoth-httt wesnoth-l \
wesnoth-nr wesnoth-sof wesnoth-sotbe wesnoth-thot wesnoth-trow \
- wesnoth-tsg wesnoth-tb wesnoth-utbs"
+ wesnoth-tsg wesnoth-tb wesnoth-utbs wesnoth-low"
# Installing wesnoth-all should pull everything in (like in Debian).
RDEPENDS_wesnoth-all = "wesnoth wesnoth-sounds wesnoth-music"
@@ -100,6 +100,11 @@ FILES_wesnothd = "\
${bindir}/wesnothd \
"
+FILES_wesnoth-low ="\
+ ${datadir}/wesnoth/data/campaigns/Legend_of_Wesmere \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-aoi.mo \
+"
+
FILES_wesnoth-editor = "\
${bindir}/wesnoth_editor \
${datadir}/applications/wesnoth_editor.desktop \
diff --git a/recipes/wireshark/files/fix-configure.patch b/recipes/wireshark/files/fix-configure.patch
new file mode 100644
index 0000000000..860edcc832
--- /dev/null
+++ b/recipes/wireshark/files/fix-configure.patch
@@ -0,0 +1,72 @@
+* Make sure to not include -I/usr/include and such
+* Claim that our inet_pton is working...
+
+Index: wireshark-1.2.6/acinclude.m4
+===================================================================
+--- wireshark-1.2.6.orig/acinclude.m4 2010-01-27 17:12:51.000000000 +0100
++++ wireshark-1.2.6/acinclude.m4 2010-02-28 23:46:12.000000000 +0100
+@@ -343,9 +343,9 @@
+ #
+ AC_MSG_CHECKING(for extraneous pcap header directories)
+ found_pcap_dir=""
+- pcap_dir_list="/usr/include/pcap $prefix/include/pcap $prefix/include"
++ pcap_dir_list="$prefix/include/pcap $prefix/include"
+ if test "x$ac_cv_enable_usr_local" = "xyes" ; then
+- pcap_dir_list="$pcap_dir_list /usr/local/include/pcap"
++ pcap_dir_list="$pcap_dir_list"
+ fi
+ for pcap_dir in $pcap_dir_list
+ do
+Index: wireshark-1.2.6/configure.in
+===================================================================
+--- wireshark-1.2.6.orig/configure.in 2010-01-27 17:12:50.000000000 +0100
++++ wireshark-1.2.6/configure.in 2010-03-01 00:28:21.000000000 +0100
+@@ -451,22 +451,22 @@
+ #
+ if test "x$prefix" != "x" ; then
+ AC_MSG_CHECKING(whether to use $prefix for headers and libraries)
+- if test -d $prefix/include ; then
+- AC_MSG_RESULT(yes)
+- #
+- # Arrange that we search for header files in "$prefix/include", as
+- # various packages we use may have been installed under "$prefix/include".
+- #
+- CFLAGS="$CFLAGS -I$prefix/include"
+- CPPFLAGS="$CPPFLAGS -I$prefix/include"
+-
+- #
+- # Arrange that we search for libraries in "$prefix/lib".
+- #
+- AC_WIRESHARK_ADD_DASH_L(LDFLAGS, $prefix/lib)
+- else
++ #if test -d $prefix/include ; then
++ # AC_MSG_RESULT(yes)
++ # #
++ # # Arrange that we search for header files in "$prefix/include", as
++ # # various packages we use may have been installed under "$prefix/include".
++ # #
++ # CFLAGS="$CFLAGS -I$prefix/include"
++ # CPPFLAGS="$CPPFLAGS -I$prefix/include"
++ #
++ # #
++ # # Arrange that we search for libraries in "$prefix/lib".
++ # #
++ # AC_WIRESHARK_ADD_DASH_L(LDFLAGS, $prefix/lib)
++ #else
+ AC_MSG_RESULT(no)
+- fi
++ #fi
+ fi
+
+ dnl Look in /usr/local for header files and libraries ?
+@@ -1469,8 +1469,8 @@
+ #endif
+ }], [AC_MSG_RESULT(ok);
+ have_inet_pton=yes], [AC_MSG_RESULT(broken);
+-have_inet_pton=no], [AC_MSG_RESULT(cross compiling, assume it is broken);
+-have_inet_pton=no])],
++have_inet_pton=no], [AC_MSG_RESULT(cross compiling, assume it is broken... no here);
++have_inet_pton=yes])],
+ have_inet_pton=no)
+ if test "$have_inet_pton" = no; then
+ INET_PTON_C="inet_pton.c"
diff --git a/recipes/wireshark/files/ieee80215.4.patch b/recipes/wireshark/files/ieee80215.4.patch
index 8bcdd93d97..d17b60640f 100644
--- a/recipes/wireshark/files/ieee80215.4.patch
+++ b/recipes/wireshark/files/ieee80215.4.patch
@@ -1,9 +1,13 @@
---- wireshark-1.0.5.orig/epan/dissectors/packet-ieee802154.c
-+++ wireshark-1.0.5/epan/dissectors/packet-ieee802154.c
-@@ -1696,7 +1696,7 @@
- dissector_handle_t ieee802154_handle;
+Index: wireshark-1.2.6/epan/dissectors/packet-ieee802154.c
+===================================================================
+--- wireshark-1.2.6.orig/epan/dissectors/packet-ieee802154.c 2010-01-27 17:12:34.000000000 +0100
++++ wireshark-1.2.6/epan/dissectors/packet-ieee802154.c 2010-02-28 22:25:50.000000000 +0100
+@@ -1821,7 +1821,7 @@
+
+ if (!prefs_initialized){
+ /* Get the dissector handles. */
+- ieee802154_handle = find_dissector("wpan");
++ ieee802154_handle = find_dissector("wpan_nofcs");
+ ieee802154_nonask_phy_handle = find_dissector("wpan-nonask-phy");
+ data_handle = find_dissector("data");
- /* Get the dissector handles. */
-- ieee802154_handle = find_dissector("wpan");
-+ ieee802154_handle = find_dissector("wpan_nofcs");
- data_handle = find_dissector("data");
diff --git a/recipes/wireshark/wireshark_1.0.5.bb b/recipes/wireshark/wireshark_1.0.5.bb
deleted file mode 100644
index aa8e66c2f4..0000000000
--- a/recipes/wireshark/wireshark_1.0.5.bb
+++ /dev/null
@@ -1,70 +0,0 @@
-DESCRIPTION = "wireshark - a popular network protocol analyzer"
-HOMEPAGE = "http://www.wireshark.org"
-SECTION = "network"
-LICENSE = "GPL"
-DEPENDS = "perl-native gnutls libpcap pcre expat glib-2.0 libsmi gtk+"
-EXTRA_OECONF = "--disable-usrlocal --with-pcap=${STAGING_DIR_HOST}${layout_prefix} \
- --with-libsmi=${STAGING_DIR_HOST}${layout_prefix} --enable-tshark --enable-wireshark"
-
-PR = "r5"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/wireshark/wireshark-${PV}.tar.bz2 \
- file://ieee80215.4.patch;patch=1"
-
-ARM_INSTRUCTION_SET = "arm"
-
-PACKAGES += "libwireshark1-dev libwireshark1 libwireshark1-dbg"
-FILES_libwireshark1 = "${libdir}/*.so*"
-FILES_libwireshark1-dev += "${libdir}/*.la ${libdir}/*.a ${libdir}/*.so ${includedir}"
-FILES_libwireshark1-dbg += "${libdir}/.debug"
-LEAD_SONAME_libwireshark1 = "libwireshark.so.0"
-
-PACKAGES += "${PN}-wireshark ${PN}-wireshark-dbg ${PN}-tshark ${PN}-tshark-dbg"
-FILES_${PN}-wireshark = "${bindir}/wireshark"
-FILES_${PN}-wireshark-dbg = "${bindir}/.debug/wireshark"
-FILES_${PN}-tshark = "${bindir}/tshark"
-FILES_${PN}-tshark-dbg = "${bindir}/.debug/tshark"
-RDEPENDS_${PN}-tshark += "libsmi-mibs libsmi-pibs ${PN}-data"
-RDEPENDS_${PN}-wireshark += "libsmi-mibs libsmi-pibs ${PN}-data"
-RCONFLICTS_${PN}-tshark = "tshark wireshark (<1.0.5)"
-RREPLACES_${PN}-tshark = "tshark wireshark (<1.0.5)"
-RCONFLICTS_${PN}-wireshark = "tshark wireshark (<1.0.5)"
-RREPLACES_${PN}-wireshark = "tshark wireshark (<1.0.5)"
-
-PACKAGES += "${PN}-plugins-dbg ${PN}-plugins"
-FILES_${PN}-plugins = "${libdir}/wireshark/plugins/${PV}/*.so ${libdir}/wireshark/plugins/${PV}/*.la"
-FILES_${PN}-plugins-dbg += "${libdir}/wireshark/plugins/${PV}/.debug"
-
-PACKAGES += "${PN}-data"
-FILES_${PN}-data = "${datadir}/wireshark"
-
-PACKAGES += "${PN}-utils ${PN}-utils-dbg"
-FILES_${PN}-utils = "${bindir}/text2pcap ${bindir}/dumpcap \
- ${bindir}/rawshark ${bindir}/editcap \
- ${bindir}/mergecap ${bindir}/idl2wrs \
- ${bindir}/dftest ${bindir}/capinfos \
- ${bindir}/randpkt"
-FILES_${PN}-utils-dbg = "${bindir}/.debug"
-
-FILES_${PN} = ""
-FILES_${PN}-dev = ""
-FILES_${PN}-dbg = ""
-ALLOW_EMPTY_${PN} = "1"
-RDEPENDS_${PN} = "${PN}-tshark ${PN}-wireshark ${PN}-plugins ${PN}-data"
-RCONFLICTS_${PN} = "tshark wireshark (<1.0.5)"
-RREPLACES_${PN} = "tshark wireshark (<1.0.5)"
-
-inherit autotools
-
-do_compile_prepend() {
- find . -type f -name Makefile \
- -exec sed -e 's@-I/usr/include @@g' \
- -e 's@-I$(includedir)@@g' \
- -e 's@-I/usr/local/include @@g' \
- -e "s@-I${includedir} @@g" -i '{}' ';'
-
- ${BUILD_CC} ${BUILD_CFLAGS} -o rdps rdps.c
- oe_runmake -C tools/lemon CC="${BUILD_CC} ${BUILD_CFLAGS}" \
- CC_FOR_BUILD="${BUILD_CC} ${BUILD_CFLAGS}" LDFLAGS="${BUILD_LDFLAGS}"
-}
-
diff --git a/recipes/wireshark/wireshark_1.2.6.bb b/recipes/wireshark/wireshark_1.2.6.bb
new file mode 100644
index 0000000000..1af48e8577
--- /dev/null
+++ b/recipes/wireshark/wireshark_1.2.6.bb
@@ -0,0 +1,72 @@
+DESCRIPTION = "wireshark - a popular network protocol analyzer"
+HOMEPAGE = "http://www.wireshark.org"
+SECTION = "network"
+LICENSE = "GPL"
+DEPENDS = "perl-native gnutls libpcap pcre expat glib-2.0 libsmi gtk+"
+EXTRA_OECONF = "--enable-usr-local=no --with-pcap=${STAGING_DIR_HOST}${layout_prefix} \
+ --with-libsmi=${STAGING_DIR_HOST}${layout_prefix} --enable-tshark --enable-wireshark"
+
+PR = "r5"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/wireshark/wireshark-${PV}.tar.bz2;name=src \
+ file://ieee80215.4.patch;patch=1 \
+ file://fix-configure.patch;patch=1 "
+SRC_URI[src.md5sum] = "f3e0917ed393366bbf96c53b58cb0931"
+SRC_URI[src.sha256sum]= "72c8178dd0614d963173d667d5ecb39bc7102453ea09da7ef3302daee7733f3c"
+
+ARM_INSTRUCTION_SET = "arm"
+
+PACKAGES += "libwireshark1-dev libwireshark1 libwireshark1-dbg"
+FILES_libwireshark1 = "${libdir}/*.so*"
+FILES_libwireshark1-dev += "${libdir}/*.la ${libdir}/*.a ${libdir}/*.so ${includedir}"
+FILES_libwireshark1-dbg += "${libdir}/.debug"
+LEAD_SONAME_libwireshark1 = "libwireshark.so.0"
+
+PACKAGES += "${PN}-wireshark ${PN}-wireshark-dbg ${PN}-tshark ${PN}-tshark-dbg"
+FILES_${PN}-wireshark = "${bindir}/wireshark"
+FILES_${PN}-wireshark-dbg = "${bindir}/.debug/wireshark"
+FILES_${PN}-tshark = "${bindir}/tshark"
+FILES_${PN}-tshark-dbg = "${bindir}/.debug/tshark"
+RDEPENDS_${PN}-tshark += "libsmi-mibs libsmi-pibs ${PN}-data"
+RDEPENDS_${PN}-wireshark += "libsmi-mibs libsmi-pibs ${PN}-data"
+RCONFLICTS_${PN}-tshark = "tshark wireshark (<1.0.5)"
+RREPLACES_${PN}-tshark = "tshark wireshark (<1.0.5)"
+RCONFLICTS_${PN}-wireshark = "tshark wireshark (<1.0.5)"
+RREPLACES_${PN}-wireshark = "tshark wireshark (<1.0.5)"
+
+PACKAGES += "${PN}-plugins-dbg ${PN}-plugins"
+FILES_${PN}-plugins = "${libdir}/wireshark/plugins/${PV}/*.so ${libdir}/wireshark/plugins/${PV}/*.la"
+FILES_${PN}-plugins-dbg += "${libdir}/wireshark/plugins/${PV}/.debug"
+
+PACKAGES += "${PN}-data"
+FILES_${PN}-data = "${datadir}/wireshark"
+
+PACKAGES += "${PN}-utils ${PN}-utils-dbg"
+FILES_${PN}-utils = "${bindir}/text2pcap ${bindir}/dumpcap \
+ ${bindir}/rawshark ${bindir}/editcap \
+ ${bindir}/mergecap ${bindir}/idl2wrs \
+ ${bindir}/dftest ${bindir}/capinfos \
+ ${bindir}/randpkt"
+FILES_${PN}-utils-dbg = "${bindir}/.debug"
+
+FILES_${PN} = ""
+FILES_${PN}-dev = ""
+FILES_${PN}-dbg = ""
+ALLOW_EMPTY_${PN} = "1"
+RDEPENDS_${PN} = "${PN}-tshark ${PN}-wireshark ${PN}-plugins ${PN}-data"
+RCONFLICTS_${PN} = "tshark wireshark (<1.0.5)"
+RREPLACES_${PN} = "tshark wireshark (<1.0.5)"
+
+inherit autotools
+
+do_compile_prepend() {
+ find . -type f -name Makefile \
+ -exec sed -e 's@-I/usr/include @@g' \
+ -e 's@-I$(includedir)@@g' \
+ -e 's@-I/usr/local/include @@g' \
+ -e "s@-I${includedir} @@g" -i '{}' ';'
+
+ oe_runmake -C tools/lemon CC="${BUILD_CC} ${BUILD_CFLAGS}" \
+ CC_FOR_BUILD="${BUILD_CC} ${BUILD_CFLAGS}" LDFLAGS="${BUILD_LDFLAGS}"
+}
+
diff --git a/recipes/wmiconfig/wmiconfig_svn.bb b/recipes/wmiconfig/wmiconfig_svn.bb
index e1138adc4e..4b29b6622d 100644
--- a/recipes/wmiconfig/wmiconfig_svn.bb
+++ b/recipes/wmiconfig/wmiconfig_svn.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "Atheros 6K Wifi configuration utility"
LICENSE = "GPL"
SECTION = "console/network"
+SRCREV = "5394"
PV = "0.0.0+svnr${SRCPV}"
PR = "r1"
diff --git a/recipes/wt/wt3-3.1.0a/noqt.patch b/recipes/wt/wt3-3.1.0a/noqt.patch
new file mode 100644
index 0000000000..48231246d3
--- /dev/null
+++ b/recipes/wt/wt3-3.1.0a/noqt.patch
@@ -0,0 +1,19 @@
+Index: wt-3.0.0/CMakeLists.txt
+===================================================================
+--- wt-3.0.0.orig/CMakeLists.txt 2009-11-12 18:50:12.087842114 +0100
++++ wt-3.0.0/CMakeLists.txt 2009-11-12 18:50:42.023261611 +0100
+@@ -111,10 +111,10 @@
+ INCLUDE(cmake/WtFindSsl.txt)
+ INCLUDE(cmake/WtFindMysqlpp.txt)
+
+-FIND_PACKAGE(Qt4)
+-IF(QT_FOUND)
+- INCLUDE(${QT_USE_FILE})
+-ENDIF(QT_FOUND)
++#FIND_PACKAGE(Qt4)
++#IF(QT_FOUND)
++# INCLUDE(${QT_USE_FILE})
++#ENDIF(QT_FOUND)
+
+ # Boost is used nearly everywhere, so we can put these here
+ INCLUDE_DIRECTORIES(${BOOST_INCLUDE_DIRS})
diff --git a/recipes/wt/wt3-3.1.0a/wgooglemap.patch b/recipes/wt/wt3-3.1.0a/wgooglemap.patch
new file mode 100644
index 0000000000..6827afbbe7
--- /dev/null
+++ b/recipes/wt/wt3-3.1.0a/wgooglemap.patch
@@ -0,0 +1,17 @@
+Index: wt-3.0.0/src/Wt/WGoogleMap.C
+===================================================================
+--- wt-3.0.0.orig/src/Wt/WGoogleMap.C 2009-09-01 17:46:54.000000000 +0200
++++ wt-3.0.0/src/Wt/WGoogleMap.C 2009-11-12 16:23:39.614976154 +0100
+@@ -26,6 +26,12 @@
+ using std::min;
+ using std::max;
+
++#if not defined(_GLIBCXX_HAVE__SINL) && not defined(acosl)
++#define cosl cos
++#define acosl acos
++#define sinl sin
++#endif
++
+ #ifndef M_PI
+ #define M_PI 3.14159265358979323846
+ #endif
diff --git a/recipes/wt/wt3.inc b/recipes/wt/wt3.inc
index 1734212f63..db4e95dcbb 100644
--- a/recipes/wt/wt3.inc
+++ b/recipes/wt/wt3.inc
@@ -5,12 +5,12 @@ LICENSE = "GPL"
HOMEPAGE = "http://www.webtoolkit.eu/wt"
DEPENDS = "boost zlib openssl"
-INC_PR = "r0"
+INC_PR = "r1"
# package wt3 is for wt 2.99 and wt 3.*
# the api of these versions is incompatible with 2.*
-SRC_URI = "${SOURCEFORGE_MIRROR}/witty/wt-${PV}.tar.gz \
+SRC_URI = "${SOURCEFORGE_MIRROR}/witty/wt-${PV}.tar.gz;name=tarball \
file://ext.patch;patch=1 \
file://wgooglemap.patch;patch=1"
@@ -21,9 +21,11 @@ FILES_${PN}-dev += "${datadir}/cmake-2.*"
S = "${WORKDIR}/wt-${PV}"
+OECMAKE_BUILDPATH = "build"
+
inherit cmake
+
EXTRA_OECMAKE = "-DBOOST_DIR=${STAGING_DIR_HOST}${prefix} \
- -DUseQt4=0 \
+ -DUseQt4=0 ../ \
"
-
diff --git a/recipes/wt/wt3_3.0.0.bb b/recipes/wt/wt3_3.0.0.bb
index 665590a7d4..69c9abd62e 100644
--- a/recipes/wt/wt3_3.0.0.bb
+++ b/recipes/wt/wt3_3.0.0.bb
@@ -1,6 +1,8 @@
require wt3.inc
-PR = "${INC_PR}.1"
+PR = "${INC_PR}.2"
SRC_URI += "file://noqt.patch;patch=1"
+SRC_URI[tarball.md5sum] = "ba03acf8089dff38e106661aa1ecdcb9"
+SRC_URI[tarball.sha256sum] = "d439e96d2de8c22f682b5d3d5894974d50b3a36057a002bda1ad1cb858cd3b28"
diff --git a/recipes/wt/wt3_3.1.0a.bb b/recipes/wt/wt3_3.1.0a.bb
new file mode 100644
index 0000000000..8072ba98b7
--- /dev/null
+++ b/recipes/wt/wt3_3.1.0a.bb
@@ -0,0 +1,11 @@
+require wt3.inc
+
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://noqt.patch;patch=1"
+
+SRC_URI[tarball.md5sum] = "9b2f4abc2e50d1fa15648834f5830d87"
+SRC_URI[tarball.sha256sum] = "97c8ddcd690381c4cd787b0099e753954c11016321fa991268c92276351fbc4c"
+
+S = "${WORKDIR}/wt-3.1.0"
+
diff --git a/recipes/wt/wt_2.2.3.bb b/recipes/wt/wt_2.2.3.bb
index 49fad6de91..573cce5f6a 100644
--- a/recipes/wt/wt_2.2.3.bb
+++ b/recipes/wt/wt_2.2.3.bb
@@ -4,7 +4,7 @@ SECTION = "devel"
LICENSE = "GPL"
HOMEPAGE = "http://www.webtoolkit.eu/wt"
DEPENDS = "boost zlib openssl"
-PR = "r1"
+PR = "r2"
SRC_URI = "${SOURCEFORGE_MIRROR}/witty/wt-${PV}.tar.gz \
file://cmakelist.patch;patch=1"
@@ -21,14 +21,3 @@ STAGE_TEMP = "${WORKDIR}/temp-staging"
do_configure_append() {
${BUILD_CXX} ${BUILD_CXXFLAGS} -o src/filetostring src/web/skeleton/FileToString.C
}
-
-do_stage() {
- rm -rf ${STAGE_TEMP}
- mkdir -p ${STAGE_TEMP}
- oe_runmake DESTDIR="${STAGE_TEMP}" install
- cp -pPR ${STAGE_TEMP}/${includedir}/* ${STAGING_INCDIR}
- cp -pPR ${STAGE_TEMP}/${libdir}/* ${STAGING_LIBDIR}
- cp -pPR ${STAGE_TEMP}/${datadir}/cmake-2.* ${STAGING_DATADIR}
- rm -rf ${STAGE_TEMP}
-}
-
diff --git a/recipes/wv/wv-1.2.0/pkgconfig.patch b/recipes/wv/wv-1.2.4/pkgconfig.patch
index 136d89341f..136d89341f 100644
--- a/recipes/wv/wv-1.2.0/pkgconfig.patch
+++ b/recipes/wv/wv-1.2.4/pkgconfig.patch
diff --git a/recipes/wv/wv_1.2.0.bb b/recipes/wv/wv_1.2.0.bb
deleted file mode 100644
index b3114a5325..0000000000
--- a/recipes/wv/wv_1.2.0.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-DESCRIPTION = "Programs for accessing Microsoft Word documents"
-HOMEPAGE = "http://wvware.sourceforge.net/"
-LICENSE = "GPLv2"
-DEPENDS = "libgsf glib-2.0"
-PR = "r4"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/wvware/wv-${PV}.tar.gz \
- file://pkgconfig.patch;patch=1"
-
-inherit autotools pkgconfig
-
-S = "${WORKDIR}/${PN}-${PV}"
-
-EXTRA_OECONF = ""
-
-do_stage () {
- autotools_stage_all
-}
-
-do_compile () {
- oe_runmake -f GNUmakefile
-}
diff --git a/recipes/wv/wv_1.2.4.bb b/recipes/wv/wv_1.2.4.bb
new file mode 100644
index 0000000000..8b773270c5
--- /dev/null
+++ b/recipes/wv/wv_1.2.4.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Programs for accessing Microsoft Word documents"
+HOMEPAGE = "http://wvware.sourceforge.net/"
+LICENSE = "GPLv2"
+DEPENDS = "libgsf glib-2.0"
+PR = "r4"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/wvware/wv-${PV}.tar.gz;name=src \
+ file://pkgconfig.patch;patch=1"
+SRC_URI[src.md5sum] = "c1861c560491f121e12917fa76970ac5"
+SRC_URI[src.sha256sum] = "673109910e22d4cf94cc8be4dcb9a0c41b5fbdb1736d4b7bdc7778894d57c2d6"
+
+
+inherit autotools pkgconfig
+
+S = "${WORKDIR}/${PN}-${PV}"
+
+EXTRA_OECONF = ""
+
+do_stage () {
+ autotools_stage_all
+}
+
+do_compile () {
+ oe_runmake -f GNUmakefile
+}
diff --git a/recipes/wwwoffle/files/wwwoffle.if-up b/recipes/wwwoffle/files/wwwoffle.if-up
index 43167a9e9c..32c2bc45ee 100644
--- a/recipes/wwwoffle/files/wwwoffle.if-up
+++ b/recipes/wwwoffle/files/wwwoffle.if-up
@@ -16,10 +16,8 @@ case "$IFACE" in
;;
esac
-# wwwoffle caches old network configuration and it may cause resolve failures
-/usr/bin/wwwoffle -kill
-/usr/sbin/wwwoffled >/dev/null 2>&1
-
+# wwwoffle caches old resolv.conf. It may cause resolve failures. -config forces its re-read.
+/usr/bin/wwwoffle -config
/usr/bin/wwwoffle -online
# Don't fetch over ppp*, which is typically expensive dial-up.
diff --git a/recipes/wwwoffle/files/wwwoffle.init b/recipes/wwwoffle/files/wwwoffle.init
index 7eac239a3e..10e03815d7 100644
--- a/recipes/wwwoffle/files/wwwoffle.init
+++ b/recipes/wwwoffle/files/wwwoffle.init
@@ -2,17 +2,17 @@
case "$1" in
start)
- /usr/sbin/wwwoffled
+ /usr/sbin/wwwoffled >/dev/null 2>&1
;;
restart)
- /usr/bin/wwwoffle -kill
+ /usr/bin/wwwoffle -kill >/dev/null 2>&1
/usr/sbin/wwwoffled >/dev/null 2>&1
;;
reload|force-reload)
- /usr/bin/wwwoffle -config
+ /usr/bin/wwwoffle -config >/dev/null 2>&1
;;
stop)
- /usr/bin/wwwoffle -kill
+ /usr/bin/wwwoffle -kill >/dev/null 2>&1
;;
*)
echo "Usage: /etc/init.d/wwwoffle {start|stop|restart|reload|force-reload}"
diff --git a/recipes/wwwoffle/wwwoffle_2.9c.bb b/recipes/wwwoffle/wwwoffle_2.9c.bb
deleted file mode 100644
index c280e7c8a9..0000000000
--- a/recipes/wwwoffle/wwwoffle_2.9c.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-LICENSE = "GPL"
-SECTION = "console/network"
-PRIORITY = "standard"
-DESCRIPTION = "World Wide Web Offline Explorer"
-DEPENDS = ""
-
-SRC_URI = "http://www.gedanken.demon.co.uk/download-wwwoffle/${PN}-${PV}.tgz \
- file://wwwoffle.init \
- file://wwwoffle.if-up \
- file://wwwoffle.if-down"
-
-INITSCRIPT_NAME = "${PN}"
-
-inherit autotools gettext update-rc.d
-
-EXTRA_OEMAKE = "docdir=${datadir}/doc"
-
-do_configure() {
- pwd
- mv aclocal.m4 acinclude.m4
- autotools_do_configure
-}
-
-do_install_append() {
- install -d ${D}/${sysconfdir}/network/if-up.d
- install -m 755 ${WORKDIR}/wwwoffle.if-up ${D}/${sysconfdir}/network/if-up.d/wwwoffle
- install -d ${D}/${sysconfdir}/network/if-down.d
- install -m 755 ${WORKDIR}/wwwoffle.if-down ${D}/${sysconfdir}/network/if-down.d/wwwoffle
- install -d ${D}/${sysconfdir}/init.d
- install -m 755 ${WORKDIR}/wwwoffle.init ${D}/${sysconfdir}/init.d/wwwoffle
-}
diff --git a/recipes/wwwoffle/wwwoffle_2.9f.bb b/recipes/wwwoffle/wwwoffle_2.9f.bb
new file mode 100644
index 0000000000..3cc96b2d15
--- /dev/null
+++ b/recipes/wwwoffle/wwwoffle_2.9f.bb
@@ -0,0 +1,30 @@
+LICENSE = "GPL"
+SECTION = "console/network"
+PRIORITY = "standard"
+DESCRIPTION = "World Wide Web Offline Explorer"
+DEPENDS = ""
+
+SRC_URI = "http://www.gedanken.demon.co.uk/download-wwwoffle/${PN}-${PV}.tgz \
+ file://wwwoffle.init \
+ file://wwwoffle.if-up \
+ file://wwwoffle.if-down"
+
+INITSCRIPT_NAME = "${PN}"
+
+inherit autotools gettext update-rc.d
+
+EXTRA_OEMAKE = "docdir=${datadir}/doc"
+
+do_configure() {
+ mv aclocal.m4 acinclude.m4
+ autotools_do_configure
+}
+
+do_install_append() {
+ install -d ${D}/${sysconfdir}/network/if-up.d
+ install -m 755 ${WORKDIR}/wwwoffle.if-up ${D}/${sysconfdir}/network/if-up.d/wwwoffle
+ install -d ${D}/${sysconfdir}/network/if-down.d
+ install -m 755 ${WORKDIR}/wwwoffle.if-down ${D}/${sysconfdir}/network/if-down.d/wwwoffle
+ install -d ${D}/${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/wwwoffle.init ${D}/${sysconfdir}/init.d/wwwoffle
+}
diff --git a/recipes/x-load/x-load_git.bb b/recipes/x-load/x-load_git.bb
index 0e0e603cb8..cfb1a434f6 100644
--- a/recipes/x-load/x-load_git.bb
+++ b/recipes/x-load/x-load_git.bb
@@ -27,6 +27,17 @@ SRC_URI_append_am3517-evm = " \
file://xload-shiva.diff;patch=1 \
"
+SRC_URI_omapzoom2 = "git://dev.omapzoom.org/pub/scm/bootloader/x-loader.git;protocol=git \
+ http://www.xora.org.uk/~dp/oe/zoom2.u-boot.git_78e778e0ea884306841c6499851a1e35177d81d0.tar.gz;name=uboot"
+SRCREV_omapzoom2 = "599c6cb87ee0c01fd6632b24f6d7e0a2b3ea5d0a"
+
+SRC_URI_omapzoom36x = "git://dev.omapzoom.org/pub/scm/bootloader/x-loader.git;protocol=git \
+ http://www.xora.org.uk/~dp/oe/zoom2.u-boot.git_78e778e0ea884306841c6499851a1e35177d81d0.tar.gz;name=uboot"
+SRCREV_omapzoom36x = "251d92815500143aefdbe3b3558a0ce6daeaebdc"
+
+SRC_URI[uboot.md5sum] = "e68b30714d22ce2f926d2dd19f94a2be"
+SRC_URI[uboot.sha256sum] = "e7e5c87d939cc4c1f14d17ea0814b0bed97021c7afca3ef9053c896c2b5bdd6f"
+
S = "${WORKDIR}/git"
PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/recipes/xboard/xboard_4.4.1.bb b/recipes/xboard/xboard_4.4.1.bb
index 0c31b9ced3..385c1d3f3b 100644
--- a/recipes/xboard/xboard_4.4.1.bb
+++ b/recipes/xboard/xboard_4.4.1.bb
@@ -3,9 +3,12 @@ HOMEPAGE = "http://www.tim-mann.org/xboard.html"
SECTION = "games"
LICENSE = "GPL"
DEPENDS = "libxaw libsm libx11 libxt libxmu libxext libice"
-SRC_URI = "http://ftp.gnu.org/gnu/xboard/xboard-${PV}.tar.gz \
+SRC_URI = "http://ftp.gnu.org/gnu/xboard/xboard-${PV}.tar.gz;name=archive \
file://no-strip.patch;patch=1;pnum=2"
+SRC_URI[archive.md5sum] = "4623a83fdd43f410bfcc8a20e2eb1474"
+SRC_URI[archive.sha256sum] = "74184fa7d5ea4ce963f7108e01256e6eb7bb2269ff6f780599fdaaf2d913950e"
+
inherit autotools
do_configure() {
diff --git a/recipes/xfce-base/xfce4-power-manager_4.6.1.bb b/recipes/xfce-base/xfce4-power-manager_4.6.1.bb
deleted file mode 100644
index b5dd372532..0000000000
--- a/recipes/xfce-base/xfce4-power-manager_4.6.1.bb
+++ /dev/null
@@ -1 +0,0 @@
-PR = "r1"
diff --git a/recipes/xfce-base/xfce4-session_4.6.1.bb b/recipes/xfce-base/xfce4-session_4.6.1.bb
index 181625b168..663d79631d 100644
--- a/recipes/xfce-base/xfce4-session_4.6.1.bb
+++ b/recipes/xfce-base/xfce4-session_4.6.1.bb
@@ -1,12 +1,13 @@
DESCRIPTION = "xfce4-session is a session manager for Xfce 4 Desktop Environment"
DEPENDS = "libxfcegui4 libxfce4util dbus iceauth xfce-utils"
-RDEPENDS = "iceauth xfce-utils"
SECTION = "x11"
-PR = "r3"
+PR = "r4"
inherit xfce46
+RDEPENDS_${PN} = "iceauth xfce-utils xinit dbus-x11"
+
FILES_${PN} += "${libdir}/xfce4/splash/engines/*.so"
FILES_${PN} += "${datadir}/xfce4/tips/*"
FILES_${PN} += "${datadir}/themes/Default/balou/*"
diff --git a/recipes/xfce-base/xfwm4-themes_4.6.0.bb b/recipes/xfce-base/xfwm4-themes_4.6.0.bb
index e3c86fbcc4..92f1a1a786 100644
--- a/recipes/xfce-base/xfwm4-themes_4.6.0.bb
+++ b/recipes/xfce-base/xfwm4-themes_4.6.0.bb
@@ -1,8 +1,7 @@
# xfwm4-themes OE build file
-DESCRIPTION="Xfce4 Window Manager Themes"
SECTION = "x11/wm"
-PR = "r2"
+PR = "r3"
DEPENDS = "xfwm4 libglade libxml2"
RDEPENDS = "xfwm4 libglade libxml2"
@@ -11,12 +10,24 @@ inherit xfce46
SRC_URI = "http://mocha.xfce.org/archive/src/art/xfwm4-themes/4.6/xfwm4-themes-${PV}.tar.bz2"
-# No ${PN} for this one
-PACKAGES=""
-
PACKAGES_DYNAMIC = "xfwm4-theme-*"
python populate_packages_prepend () {
- themedir = bb.data.expand('${datadir}/xfwm4/themes', d)
- do_split_packages(d, themedir, '^(.*)', 'xfwm4-theme-%s', 'XFWM4 theme %s', allow_dirs=True)
+ themedir = bb.data.expand('${datadir}/themes', d)
+ do_split_packages(d, themedir, '^(.*)', 'xfwm4-theme-%s', 'Xfce4 Window Manager theme - %s', allow_dirs=True)
+
+ metapkg = "xfwm4-themes"
+ bb.data.setVar('ALLOW_EMPTY_' + metapkg, "1", d)
+ bb.data.setVar('FILES_' + metapkg, "", d)
+ blacklist = [ 'xfwm4-themes', 'xfwm4-themes-dev', 'xfwm4-themes-doc', 'xfwm4-themes-dbg', 'xfwm4-themes-static', 'xfwm4-themes-locale' ]
+ recipe_rdepends = bb.data.getVar('RDEPENDS', d, 1).split()
+ metapkg_rdepends = []
+ packages = bb.data.getVar('PACKAGES', d, 1).split()
+ for pkg in packages[1:]:
+ if not pkg in blacklist and not pkg in metapkg_rdepends:
+ bb.data.setVar('RDEPENDS_' + pkg, ' '.join(recipe_rdepends), d)
+ metapkg_rdepends.append(pkg)
+ metapkg_rdepends.extend(recipe_rdepends)
+ bb.data.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends), d)
+ bb.data.setVar('DESCRIPTION_' + metapkg, 'Xfce4 Window Manager extra themes - Meta package', d)
}
diff --git a/recipes/xfce-extras/xfce4-power-manager_0.8.4.2.bb b/recipes/xfce-extras/xfce4-power-manager_0.8.4.2.bb
new file mode 100644
index 0000000000..d970f444d8
--- /dev/null
+++ b/recipes/xfce-extras/xfce4-power-manager_0.8.4.2.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Xfce panel plugins for power management."
+DEPENDS = "libxfce4util libxfcegui4 libnotify xfconf xfce4-panel"
+RDEPENDS = "libxfce4util libxfcegui4 libnotify xfce4-panel"
+
+SECTION = "x11"
+PR = "r1"
+
+inherit xfce46
+
+XFCE_VERSION = "4.6.1"
+
+SRC_URI = "http://archive.xfce.org/src/apps/${PN}/0.8/${PN}-${PV}.tar.bz2"
+
+FILES_${PN} += "${datadir}/xfce4/panel-plugins/*.desktop"
+
+FILES_${PN}-dbg += "${libexecdir}/xfce4/panel-plugins/.debug/"
diff --git a/recipes/xfsprogs/xfsprogs_3.1.1.bb b/recipes/xfsprogs/xfsprogs_3.1.1.bb
new file mode 100644
index 0000000000..6caf8dc18c
--- /dev/null
+++ b/recipes/xfsprogs/xfsprogs_3.1.1.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "XFS Filesystem Utilities"
+HOMEPAGE = "http://oss.sgi.com/projects/xfs"
+LICENSE = "GPL"
+SECTION = "base"
+PR = "r0"
+DEPENDS = "e2fsprogs-libs"
+
+SRC_URI = "ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs-3.1.1.tar.gz;name=xfsprogstargz"
+SRC_URI[xfsprogstargz.md5sum] = "c2308b46ee707597ac50aae418d321b8"
+SRC_URI[xfsprogstargz.sha256sum] = "bc189022f720019d9e4aa9856772a4f89afa1cc4022f872b759fe001a8dd1e36"
+
+PARALLEL_MAKE = ""
+inherit autotools
+EXTRA_OECONF = "--enable-gettext=no"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+
+do_configure () {
+ export LIBTOOL="${STAGING_BINDIR_NATIVE}/${HOST_SYS}-libtool"
+ export DEBUG="-DNDEBUG"
+ oe_runconf
+}
+
+do_install () {
+ export DIST_ROOT=${D}
+ oe_runmake install
+}
+
diff --git a/recipes/xinput-calibrator/xinput-calibrator-0.6.0/0001-calibratorXorgPrint.cpp-fix-miny-and-maxx-printing-o.patch b/recipes/xinput-calibrator/xinput-calibrator-0.6.0/0001-calibratorXorgPrint.cpp-fix-miny-and-maxx-printing-o.patch
new file mode 100644
index 0000000000..fa0314726b
--- /dev/null
+++ b/recipes/xinput-calibrator/xinput-calibrator-0.6.0/0001-calibratorXorgPrint.cpp-fix-miny-and-maxx-printing-o.patch
@@ -0,0 +1,36 @@
+From 383a3a8523814d1b108d2dc1ed812f80d6c9f050 Mon Sep 17 00:00:00 2001
+From: Mario Domenech Goulart <mario@ossystems.com.br>
+Date: Thu, 11 Mar 2010 11:05:18 -0300
+Subject: [PATCH] calibratorXorgPrint.cpp: fix miny and maxx printing order for UDEV and HAL
+
+
+Signed-off-by: Mario Domenech Goulart <mario@ossystems.com.br>
+---
+ src/calibrator/calibratorXorgPrint.cpp | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/calibrator/calibratorXorgPrint.cpp b/src/calibrator/calibratorXorgPrint.cpp
+index 92d297a..1f74de0 100644
+--- a/src/calibrator/calibratorXorgPrint.cpp
++++ b/src/calibrator/calibratorXorgPrint.cpp
+@@ -69,7 +69,7 @@ bool CalibratorXorgPrint::finish_data(const XYinfo new_axys, int swap_xy)
+ \tENV{x11_options.miny}=\"%d\"\n\
+ \tENV{x11_options.maxx}=\"%d\"\n\
+ \tENV{x11_options.maxy}=\"%d\"\n"
+- , new_axys.x_min, new_axys.x_max, new_axys.y_min, new_axys.y_max);
++ , new_axys.x_min, new_axys.y_min, new_axys.x_max, new_axys.y_max);
+ if (swap_xy != 0)
+ printf("\tENV{x11_options.swapxy}=\"%d\"\n", swap_xy);
+ printf("\tLABEL=\"xorg_touchscreen_end\"\n");
+@@ -81,7 +81,7 @@ bool CalibratorXorgPrint::finish_data(const XYinfo new_axys, int swap_xy)
+ \t <merge key=\"input.x11_options.miny\" type=\"string\">%d</merge>\n\
+ \t <merge key=\"input.x11_options.maxx\" type=\"string\">%d</merge>\n\
+ \t <merge key=\"input.x11_options.maxy\" type=\"string\">%d</merge>\n"
+- , new_axys.x_min, new_axys.x_max, new_axys.y_min, new_axys.y_max);
++ , new_axys.x_min, new_axys.y_min, new_axys.x_max, new_axys.y_max);
+ if (swap_xy != 0)
+ printf("\t <merge key=\"input.x11_options.swapxy\" type=\"string\">%d</merge>\n", swap_xy);
+ printf("\t</match>\n");
+--
+1.6.3.3.444.g4ecbc
+
diff --git a/recipes/xinput-calibrator/xinput-calibrator.inc b/recipes/xinput-calibrator/xinput-calibrator.inc
new file mode 100644
index 0000000000..fad07869c7
--- /dev/null
+++ b/recipes/xinput-calibrator/xinput-calibrator.inc
@@ -0,0 +1,7 @@
+DESCRIPTION = "A generic touchscreen calibration program for X.Org"
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/xinput_calibrator"
+LICENSE = "MIT/X11"
+DEPENDS = "virtual/libx11 libxi"
+RDEPENDS_${PN} = "xinput"
+
+inherit autotools
diff --git a/recipes/xinput-calibrator/xinput-calibrator_0.5.0.bb b/recipes/xinput-calibrator/xinput-calibrator_0.5.0.bb
index 8390b30311..71d7931816 100644
--- a/recipes/xinput-calibrator/xinput-calibrator_0.5.0.bb
+++ b/recipes/xinput-calibrator/xinput-calibrator_0.5.0.bb
@@ -1,20 +1,19 @@
-DEPENDS = "virtual/libx11 libxi"
-RDEPENDS = "xinput"
+require xinput-calibrator.inc
+
+PR = "r6"
-SRCREV = "1c715824334c5d33085dba02f195c9720c2883b5"
SRC_URI = "git://github.com/tias/xinput_calibrator.git;protocol=git \
file://xinput-calibrator.desktop \
file://xinput_calibrator_once.sh \
"
-PR = "r4"
-inherit autotools
+SRCREV = "1c715824334c5d33085dba02f195c9720c2883b5"
S = "${WORKDIR}/git/"
do_install() {
- install -d ${D}${bindir}
- install -m 0755 src/xinput_calibrator_x11 ${D}${bindir}/xinput_calibrator
- install -m 0755 ${WORKDIR}/xinput_calibrator_once.sh ${D}${bindir}/xinput_calibrator_once.sh
- install -d ${D}${datadir}/applications/
- install -m 0755 ${WORKDIR}/xinput-calibrator.desktop ${D}${datadir}/applications/xinput-calibrator.desktop
+ install -d ${D}${bindir}
+ install -m 0755 src/xinput_calibrator_x11 ${D}${bindir}/xinput_calibrator
+ install -m 0755 ${WORKDIR}/xinput_calibrator_once.sh ${D}${bindir}/xinput_calibrator_once.sh
+ install -d ${D}${datadir}/applications/
+ install -m 0755 ${WORKDIR}/xinput-calibrator.desktop ${D}${datadir}/applications/xinput-calibrator.desktop
}
diff --git a/recipes/xinput-calibrator/xinput-calibrator_0.6.0.bb b/recipes/xinput-calibrator/xinput-calibrator_0.6.0.bb
new file mode 100644
index 0000000000..fb43231e24
--- /dev/null
+++ b/recipes/xinput-calibrator/xinput-calibrator_0.6.0.bb
@@ -0,0 +1,18 @@
+require xinput-calibrator.inc
+
+SRC_URI = "git://github.com/tias/xinput_calibrator.git;protocol=git \
+ file://0001-calibratorXorgPrint.cpp-fix-miny-and-maxx-printing-o.patch;patch=1"
+
+SRCREV = "d6e01d780001948f55006698e8e9e48c12894810"
+S = "${WORKDIR}/git/"
+
+PR = "r2"
+
+do_install_append() {
+ install -d ${D}${bindir}
+ install -m 0755 scripts/xinput_calibrator_pointercal.sh ${D}${bindir}/xinput_calibrator_once.sh
+ ln -s ${bindir}/xinput_calibrator_x11 ${D}${bindir}/xinput_calibrator
+ install -d ${D}${datadir}/applications/
+ install -m 0755 scripts/xinput_calibrator.desktop ${D}${datadir}/applications/xinput-calibrator.desktop
+ install -m 0755 scripts/xinput_calibrator_get_hal_calibration.sh ${D}${bindir}/xinput_calibrator_get_hal_calibration.sh
+}
diff --git a/recipes/xinput-calibrator/xinput-calibrator_git.bb b/recipes/xinput-calibrator/xinput-calibrator_git.bb
new file mode 100644
index 0000000000..8d3d4c4a4a
--- /dev/null
+++ b/recipes/xinput-calibrator/xinput-calibrator_git.bb
@@ -0,0 +1,20 @@
+require xinput-calibrator.inc
+
+PV = "0.6.0+gitr${SRCREV}"
+
+SRC_URI = "git://github.com/tias/xinput_calibrator.git;protocol=git;branch=misclick"
+
+SRCREV = "496d4401731c6e5ed550e446cc2fc4b12d999ad8"
+S = "${WORKDIR}/git/"
+
+do_install_append() {
+ install -d ${D}${bindir}
+ install -m 0755 scripts/xinput_calibrator_pointercal.sh ${D}${bindir}/xinput_calibrator_once.sh
+ ln -s ${bindir}/xinput_calibrator_x11 ${D}${bindir}/xinput_calibrator
+ install -d ${D}${datadir}/applications/
+ install -m 0755 scripts/xinput_calibrator.desktop ${D}${datadir}/applications/xinput-calibrator.desktop
+}
+
+# remove this after misclick branch is well-tested and merged to master
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_shr = "1"
diff --git a/recipes/xorg-app/luit_1.0.5.bb b/recipes/xorg-app/luit_1.0.5.bb
new file mode 100644
index 0000000000..86d77d28c0
--- /dev/null
+++ b/recipes/xorg-app/luit_1.0.5.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+DESCRIPTION = "a filter for locale and ISO 2022 support on Unicode terminals"
+DEPENDS += " zlib zlib virtual/libx11 libfontenc"
+PE = "1"
+
+SRC_URI[archive.md5sum] = "fd8579a993c4480978e3504a4c53c189"
+SRC_URI[archive.sha256sum] = "8eeb1cf7809acc17cf6cecfdc899613854560052229b21e6115b03a088cd059b"
diff --git a/recipes/xorg-app/xdm_1.1.9.bb b/recipes/xorg-app/xdm_1.1.9.bb
index eb153b1da9..b9bd743fe8 100644
--- a/recipes/xorg-app/xdm_1.1.9.bb
+++ b/recipes/xorg-app/xdm_1.1.9.bb
@@ -1,10 +1,14 @@
require xorg-app-common.inc
PE = "1"
+PR = "r1"
DESCRIPTION = "X display manager"
DEPENDS += " libxmu libxinerama libxpm libxdmcp libxau virtual/libx11 libxext libxdmcp libxt libxaw"
-EXTRA_OECONF += " --with-random-device=/dev/urandom"
+EXTRA_OECONF += "\
+ --with-random-device=/dev/urandom --with-utmp-file=/var/run/utmp \
+ --with-wtmp-file=/var/log/wtmp \
+ "
FILES_${PN}-dbg += "${libdir}/X11/xdm/.debug/*"
diff --git a/recipes/xorg-app/xinit_1.2.0.bb b/recipes/xorg-app/xinit_1.2.0.bb
index ce82fb05d4..2bae60c8e5 100644
--- a/recipes/xorg-app/xinit_1.2.0.bb
+++ b/recipes/xorg-app/xinit_1.2.0.bb
@@ -2,5 +2,8 @@ require xorg-app-common.inc
DESCRIPTION = "X Window System initializer"
PE = "1"
+PR = "r1"
+
+DEPENDS += "util-linux-ng"
FILES_${PN} += "${libdir}X11/xinit"
diff --git a/recipes/xorg-app/xinit_1.2.1.bb b/recipes/xorg-app/xinit_1.2.1.bb
new file mode 100644
index 0000000000..9fe144ffeb
--- /dev/null
+++ b/recipes/xorg-app/xinit_1.2.1.bb
@@ -0,0 +1,11 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "X Window System initializer"
+PE = "1"
+PR = "r1"
+
+DEPENDS += "util-linux-ng"
+
+FILES_${PN} += "${libdir}X11/xinit"
+SRC_URI[archive.md5sum] = "56f2d202b3dc10fcd21931a67bb270f7"
+SRC_URI[archive.sha256sum] = "16bcc73ae81b6d80fd1a9419ea757f38870d1043d440b6d56fcaa79d4c6c9b07"
diff --git a/recipes/xorg-app/xinput_1.5.1.bb b/recipes/xorg-app/xinput_1.5.1.bb
new file mode 100644
index 0000000000..407301689a
--- /dev/null
+++ b/recipes/xorg-app/xinput_1.5.1.bb
@@ -0,0 +1,6 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "a utility to configure and test XInput devices"
+DEPENDS += " libxi"
+SRC_URI[archive.md5sum] = "82400f0ba63217df9b00d825532cea7d"
+SRC_URI[archive.sha256sum] = "e33c8361c2b6cb13db9a7157753d417c168c8203c8b7027e9dda2fbeef00fd33"
diff --git a/recipes/xorg-app/xmessage_1.0.3.bb b/recipes/xorg-app/xmessage_1.0.3.bb
new file mode 100644
index 0000000000..2b8e70e418
--- /dev/null
+++ b/recipes/xorg-app/xmessage_1.0.3.bb
@@ -0,0 +1,8 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "xmessage displays a message or query in a window."
+DEPENDS += " libxaw libxt"
+PE = "1"
+
+SRC_URI[archive.md5sum] = "76ac52710234ebb9d0e2762bb5d11ea1"
+SRC_URI[archive.sha256sum] = "cfa35d3ad4ad1306e49878163982e9d54872a20a497e77ab0a8d5de05c8b3d5b"
diff --git a/recipes/xorg-app/xorg-app-common.inc b/recipes/xorg-app/xorg-app-common.inc
index cd7f654be2..02db754f5a 100644
--- a/recipes/xorg-app/xorg-app-common.inc
+++ b/recipes/xorg-app/xorg-app-common.inc
@@ -6,7 +6,7 @@ DEPENDS = "util-macros-native virtual/libx11"
XORG_PN = "${PN}"
-SRC_URI = "${XORG_MIRROR}/individual/app/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/app/${XORG_PN}-${PV}.tar.bz2;name=archive"
S = "${WORKDIR}/${XORG_PN}-${PV}"
diff --git a/recipes/xorg-data/xorg-data-common.inc b/recipes/xorg-data/xorg-data-common.inc
index 46b14d73af..6f89bfb2da 100644
--- a/recipes/xorg-data/xorg-data-common.inc
+++ b/recipes/xorg-data/xorg-data-common.inc
@@ -4,7 +4,7 @@ LICENSE = "MIT-X"
XORG_PN = "${PN}"
-SRC_URI = "${XORG_MIRROR}/individual/data/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/data/${XORG_PN}-${PV}.tar.bz2;name=archive"
S = "${WORKDIR}/${XORG_PN}-${PV}"
inherit autotools pkgconfig
diff --git a/recipes/xorg-doc/xorg-doc-common.inc b/recipes/xorg-doc/xorg-doc-common.inc
index bbf1fca05e..56d2d5c1ea 100644
--- a/recipes/xorg-doc/xorg-doc-common.inc
+++ b/recipes/xorg-doc/xorg-doc-common.inc
@@ -4,7 +4,7 @@ SECTION = "x11/docs"
LICENSE = "MIT-X"
XORG_PN = "${PN}"
-SRC_URI = "${XORG_MIRROR}/individual/doc/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/doc/${XORG_PN}-${PV}.tar.bz2;name=archive"
S = "${WORKDIR}/${XORG_PN}-${PV}"
diff --git a/recipes/xorg-driver/xf86-input-acecad_1.1.0.bb b/recipes/xorg-driver/xf86-input-acecad_1.1.0.bb
index 311caf6553..32f528a19e 100644
--- a/recipes/xorg-driver/xf86-input-acecad_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-acecad_1.1.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "ce0b7bec500273ad935cbfa212b8ac8a"
+SRC_URI[archive.sha256sum] = "3e5feea79f1d48cd46a2a40661140042ac586f90311669f79d65fea6cfc112ad"
diff --git a/recipes/xorg-driver/xf86-input-acecad_1.2.1.bb b/recipes/xorg-driver/xf86-input-acecad_1.2.1.bb
index c993bc7718..9933824222 100644
--- a/recipes/xorg-driver/xf86-input-acecad_1.2.1.bb
+++ b/recipes/xorg-driver/xf86-input-acecad_1.2.1.bb
@@ -3,3 +3,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- AceCad input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "2c371317f2aae34c04db63c19759a44e"
+SRC_URI[archive.sha256sum] = "07d2f8a1153d34a6516b8f1129fc32a18f2862bbb58c9bad4637fb282d60385a"
diff --git a/recipes/xorg-driver/xf86-input-acecad_1.2.2.bb b/recipes/xorg-driver/xf86-input-acecad_1.2.2.bb
index c993bc7718..c3b1dc3756 100644
--- a/recipes/xorg-driver/xf86-input-acecad_1.2.2.bb
+++ b/recipes/xorg-driver/xf86-input-acecad_1.2.2.bb
@@ -3,3 +3,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- AceCad input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "2d6596b2b0cfa527b5ed4df2014684bf"
+SRC_URI[archive.sha256sum] = "953ebb7d7ed579ce648dd6f6a25307c37ad8230a0336ec6fc58247732835f26e"
diff --git a/recipes/xorg-driver/xf86-input-acecad_1.4.0.bb b/recipes/xorg-driver/xf86-input-acecad_1.4.0.bb
index c993bc7718..20e533f935 100644
--- a/recipes/xorg-driver/xf86-input-acecad_1.4.0.bb
+++ b/recipes/xorg-driver/xf86-input-acecad_1.4.0.bb
@@ -3,3 +3,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- AceCad input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "51247dc0d73185e35bec326283bc49a5"
+SRC_URI[archive.sha256sum] = "48341d8b6b0060228134b36543986c949ea828d6ce6d0484d29b3dde9ddbd556"
diff --git a/recipes/xorg-driver/xf86-input-aiptek_1.0.1.bb b/recipes/xorg-driver/xf86-input-aiptek_1.0.1.bb
index 34a497438b..04f66a0949 100644
--- a/recipes/xorg-driver/xf86-input-aiptek_1.0.1.bb
+++ b/recipes/xorg-driver/xf86-input-aiptek_1.0.1.bb
@@ -1,2 +1,4 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "951b2b1a270f67d28e2e89fd2b9f15ae"
+SRC_URI[archive.sha256sum] = "3db0e3259034d838c2ff7ae26718422db6d33d89cd1a2defa0efdddbbbfcc28a"
diff --git a/recipes/xorg-driver/xf86-input-aiptek_1.1.1.bb b/recipes/xorg-driver/xf86-input-aiptek_1.1.1.bb
index 34a497438b..64340436c7 100644
--- a/recipes/xorg-driver/xf86-input-aiptek_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-input-aiptek_1.1.1.bb
@@ -1,2 +1,4 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "2aa75313ea5652a8cf93581c65ee6493"
+SRC_URI[archive.sha256sum] = "219116b0275b93333b8471fc94d97320a116d695c4249837fd97763f00a85d77"
diff --git a/recipes/xorg-driver/xf86-input-aiptek_1.3.0.bb b/recipes/xorg-driver/xf86-input-aiptek_1.3.0.bb
index 34a497438b..52801a37e0 100644
--- a/recipes/xorg-driver/xf86-input-aiptek_1.3.0.bb
+++ b/recipes/xorg-driver/xf86-input-aiptek_1.3.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "ae3ec07aff6c156cf5307f53feb6b293"
+SRC_URI[archive.sha256sum] = "b37f35bb021dffc337c731bfbbb6ce7c0953dc69f7c660cbe48b0f84a07b5e5c"
diff --git a/recipes/xorg-driver/xf86-input-calcomp_1.1.0.bb b/recipes/xorg-driver/xf86-input-calcomp_1.1.0.bb
index 34a497438b..e40301a255 100644
--- a/recipes/xorg-driver/xf86-input-calcomp_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-calcomp_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "af13f9de2af4e1d03b2da0c037fd718a"
+SRC_URI[archive.sha256sum] = "ebc446e74eea72d391104b1ce3b2a5376bced098154ec089a944f4311d240904"
diff --git a/recipes/xorg-driver/xf86-input-calcomp_1.1.1.bb b/recipes/xorg-driver/xf86-input-calcomp_1.1.1.bb
index a309230801..8aac474119 100644
--- a/recipes/xorg-driver/xf86-input-calcomp_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-input-calcomp_1.1.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- Calcomp input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "689099e2ade8a8c9f68f82fdf569b3ad"
+SRC_URI[archive.sha256sum] = "8117b37da2e031eb983e1e98034710a1511299496fcf235f936caff252fa8957"
diff --git a/recipes/xorg-driver/xf86-input-calcomp_1.1.2.bb b/recipes/xorg-driver/xf86-input-calcomp_1.1.2.bb
index a309230801..2fadc8cd24 100644
--- a/recipes/xorg-driver/xf86-input-calcomp_1.1.2.bb
+++ b/recipes/xorg-driver/xf86-input-calcomp_1.1.2.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- Calcomp input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "ebc9a64dc72ae3015c16011bbd2d3557"
+SRC_URI[archive.sha256sum] = "bf6edb9d78c90952a16c8bab9e69aebb3e1361e4423ec90e47df57e8c873254b"
diff --git a/recipes/xorg-driver/xf86-input-citron_2.2.0.bb b/recipes/xorg-driver/xf86-input-citron_2.2.0.bb
index 311caf6553..039d7c4e77 100644
--- a/recipes/xorg-driver/xf86-input-citron_2.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-citron_2.2.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "1fe53cd055a69650f3c2e02377ec728c"
+SRC_URI[archive.sha256sum] = "26cfa755d3a383f80039fcd286c44ba5f7b353feb8c674f386bb08d741d2c3fe"
diff --git a/recipes/xorg-driver/xf86-input-citron_2.2.1.bb b/recipes/xorg-driver/xf86-input-citron_2.2.1.bb
index 4c449b12d7..d3fc928211 100644
--- a/recipes/xorg-driver/xf86-input-citron_2.2.1.bb
+++ b/recipes/xorg-driver/xf86-input-citron_2.2.1.bb
@@ -3,3 +3,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X Server -- Citron input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "4e254fcefb3bea55772e63c12570f6d9"
+SRC_URI[archive.sha256sum] = "1480ba63b342c00a53292d513bd79a69e1ea7c01a0c77d1a368ffb22e37c1a83"
diff --git a/recipes/xorg-driver/xf86-input-citron_2.2.2.bb b/recipes/xorg-driver/xf86-input-citron_2.2.2.bb
index 4c449b12d7..c4538ca287 100644
--- a/recipes/xorg-driver/xf86-input-citron_2.2.2.bb
+++ b/recipes/xorg-driver/xf86-input-citron_2.2.2.bb
@@ -3,3 +3,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X Server -- Citron input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "8cad35da16ea4688ebb74533ccc7f190"
+SRC_URI[archive.sha256sum] = "6d1908d1f1be1ce94fdc946f47d163c45b0a1fc4b9ffb05cc436bac865e1ecaf"
diff --git a/recipes/xorg-driver/xf86-input-digitaledge_1.1.0.bb b/recipes/xorg-driver/xf86-input-digitaledge_1.1.0.bb
index 311caf6553..4bc768708c 100644
--- a/recipes/xorg-driver/xf86-input-digitaledge_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-digitaledge_1.1.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "53461c34cc0712aacab92b820b9fcb84"
+SRC_URI[archive.sha256sum] = "24001f19b46b5bc2fcf8212f04863e4efa90175fac797350525e14848ab98a38"
diff --git a/recipes/xorg-driver/xf86-input-digitaledge_1.1.1.bb b/recipes/xorg-driver/xf86-input-digitaledge_1.1.1.bb
index 311caf6553..fb67e32854 100644
--- a/recipes/xorg-driver/xf86-input-digitaledge_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-input-digitaledge_1.1.1.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "4c27e0f3c6447e76df39a837fd46a00f"
+SRC_URI[archive.sha256sum] = "ded010f82b1dbb57b1ee0ad6707902b31540e0592c94d6bbf3b43a7a35220775"
diff --git a/recipes/xorg-driver/xf86-input-dmc_1.1.0.bb b/recipes/xorg-driver/xf86-input-dmc_1.1.0.bb
index 311caf6553..c8f5d94d14 100644
--- a/recipes/xorg-driver/xf86-input-dmc_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-dmc_1.1.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "e1bcbdefcb839173de79aeb3cd038b77"
+SRC_URI[archive.sha256sum] = "c5ca8fb2dfe0130767b2c10bd0661277a67e7d5b9171a7f5f6264ec48790473f"
diff --git a/recipes/xorg-driver/xf86-input-dmc_1.1.1.bb b/recipes/xorg-driver/xf86-input-dmc_1.1.1.bb
index fea3ce83aa..24a76e6475 100644
--- a/recipes/xorg-driver/xf86-input-dmc_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-input-dmc_1.1.1.bb
@@ -3,3 +3,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- DMC input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "f21f008220bc7687ce1c34ab557ec32f"
+SRC_URI[archive.sha256sum] = "f98c5a7010fa71cee88b4c2470e5cd804e42dfbc5292cf1c20eb75e9b1814002"
diff --git a/recipes/xorg-driver/xf86-input-dmc_1.1.2.bb b/recipes/xorg-driver/xf86-input-dmc_1.1.2.bb
index fea3ce83aa..7298d801fe 100644
--- a/recipes/xorg-driver/xf86-input-dmc_1.1.2.bb
+++ b/recipes/xorg-driver/xf86-input-dmc_1.1.2.bb
@@ -3,3 +3,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- DMC input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "91021ea8f3593221c0d9ee9cc14deb48"
+SRC_URI[archive.sha256sum] = "b6f4eb367ab1aa7da5ac5218953d7cdde409c9ddf59f6cb6b2e1aa2789b3f361"
diff --git a/recipes/xorg-driver/xf86-input-dynapro_1.1.0.bb b/recipes/xorg-driver/xf86-input-dynapro_1.1.0.bb
index 311caf6553..a2b9aa5149 100644
--- a/recipes/xorg-driver/xf86-input-dynapro_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-dynapro_1.1.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "1683178d09dfc604dde9ea2aab950a28"
+SRC_URI[archive.sha256sum] = "fc2ad50b1aa027fe57da53cbb73db0b4b9d0de9032f00dd42e7cc0aae7c50d6a"
diff --git a/recipes/xorg-driver/xf86-input-dynapro_1.1.1.bb b/recipes/xorg-driver/xf86-input-dynapro_1.1.1.bb
index 0033ffe7fa..3198bf1f12 100644
--- a/recipes/xorg-driver/xf86-input-dynapro_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-input-dynapro_1.1.1.bb
@@ -3,3 +3,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- Dynapro input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "d47be12a230c44a05d56d6b79ebcfc38"
+SRC_URI[archive.sha256sum] = "ed0f1ba81febf8e7a20cfaf32b021fcaa102af37f3070d67d6a101eeb6964992"
diff --git a/recipes/xorg-driver/xf86-input-dynapro_1.1.2.bb b/recipes/xorg-driver/xf86-input-dynapro_1.1.2.bb
index 0033ffe7fa..5d58a1eb96 100644
--- a/recipes/xorg-driver/xf86-input-dynapro_1.1.2.bb
+++ b/recipes/xorg-driver/xf86-input-dynapro_1.1.2.bb
@@ -3,3 +3,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- Dynapro input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "ceb5efbd3d62e24ab3a5f9f180777f7c"
+SRC_URI[archive.sha256sum] = "55b7b2e950331292ec05c81d566af6d1000ac3cf904068964c3b9d43cea4deec"
diff --git a/recipes/xorg-driver/xf86-input-elo2300_1.1.0.bb b/recipes/xorg-driver/xf86-input-elo2300_1.1.0.bb
index 311caf6553..e5dcfb56a6 100644
--- a/recipes/xorg-driver/xf86-input-elo2300_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-elo2300_1.1.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "43885769d6f741272dda162e82902b0d"
+SRC_URI[archive.sha256sum] = "9551f67e24c4573867a64d032d1ff6b63654caab8a85d3c6b2af7748daaa2134"
diff --git a/recipes/xorg-driver/xf86-input-elo2300_1.1.1.bb b/recipes/xorg-driver/xf86-input-elo2300_1.1.1.bb
index 7841287fb0..564c3056d1 100644
--- a/recipes/xorg-driver/xf86-input-elo2300_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-input-elo2300_1.1.1.bb
@@ -3,3 +3,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- ELO2300 input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "4eef20f44954d49571a10b9134fdb663"
+SRC_URI[archive.sha256sum] = "cc2cd97f49cce1795ea74034b1416ff7cd5107e1a69258b09a741d55a98ba005"
diff --git a/recipes/xorg-driver/xf86-input-elo2300_1.1.2.bb b/recipes/xorg-driver/xf86-input-elo2300_1.1.2.bb
index 7841287fb0..0ecb28766c 100644
--- a/recipes/xorg-driver/xf86-input-elo2300_1.1.2.bb
+++ b/recipes/xorg-driver/xf86-input-elo2300_1.1.2.bb
@@ -3,3 +3,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- ELO2300 input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "611d0a77a80286bc926dd3c414e59555"
+SRC_URI[archive.sha256sum] = "ce575f79a5a93f4129a4e63572911d54cdc6640abc303afeb3c74741bb3c9627"
diff --git a/recipes/xorg-driver/xf86-input-elographics_1.1.0.bb b/recipes/xorg-driver/xf86-input-elographics_1.1.0.bb
index cb49a58d4c..d38b92823b 100644
--- a/recipes/xorg-driver/xf86-input-elographics_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-elographics_1.1.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- ELOGraphics input driver"
PE = "2"
+SRC_URI[archive.md5sum] = "ecb2bf1f800d4f5f4c295f2a0e6b1de7"
+SRC_URI[archive.sha256sum] = "1583e1dae6e3ecd34ba55deae7dfc052efede0378f852de6224308d7e7d5b2d8"
diff --git a/recipes/xorg-driver/xf86-input-elographics_1.2.2.bb b/recipes/xorg-driver/xf86-input-elographics_1.2.2.bb
index cb49a58d4c..c3159b04fb 100644
--- a/recipes/xorg-driver/xf86-input-elographics_1.2.2.bb
+++ b/recipes/xorg-driver/xf86-input-elographics_1.2.2.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- ELOGraphics input driver"
PE = "2"
+SRC_URI[archive.md5sum] = "50a9c32af12ca4733afe23042f012f9c"
+SRC_URI[archive.sha256sum] = "76ded0e6977f7d562a8236bc810423cd050320531be9621d868a48309ebc4d63"
diff --git a/recipes/xorg-driver/xf86-input-elographics_1.2.3.bb b/recipes/xorg-driver/xf86-input-elographics_1.2.3.bb
index cb49a58d4c..160658050b 100644
--- a/recipes/xorg-driver/xf86-input-elographics_1.2.3.bb
+++ b/recipes/xorg-driver/xf86-input-elographics_1.2.3.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- ELOGraphics input driver"
PE = "2"
+SRC_URI[archive.md5sum] = "cc2923460c8eff9652b01889a063058d"
+SRC_URI[archive.sha256sum] = "67550c8f4a85a8029f08880adf487e2efd4585e7adbe8da357fbd49750b08d8f"
diff --git a/recipes/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb b/recipes/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb
index 34a497438b..efe4e823d6 100644
--- a/recipes/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb
+++ b/recipes/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb
@@ -1,2 +1,4 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "24c33f833bb2db72a07c3d28bfc0aae9"
+SRC_URI[archive.sha256sum] = "f1b7f84175d33f4d18c83cd0d37bd3962acd668922fa074a8ae29e18517cdda7"
diff --git a/recipes/xorg-driver/xf86-input-evdev_1.1.5.bb b/recipes/xorg-driver/xf86-input-evdev_1.1.5.bb
index 8260dd6a60..6303a3b482 100644
--- a/recipes/xorg-driver/xf86-input-evdev_1.1.5.bb
+++ b/recipes/xorg-driver/xf86-input-evdev_1.1.5.bb
@@ -5,3 +5,5 @@ PE = "1"
DEPENDS += " kbproto"
+SRC_URI[archive.md5sum] = "01705ea9a4d1699d5eeb17e7f297a581"
+SRC_URI[archive.sha256sum] = "52b7daab86dade2d189f0378ddf196c018cdc9dd47ade0b3b8fc7591cb4bbe9e"
diff --git a/recipes/xorg-driver/xf86-input-evdev_1.2.0.bb b/recipes/xorg-driver/xf86-input-evdev_1.2.0.bb
index 792909621a..4f343a1dbd 100644
--- a/recipes/xorg-driver/xf86-input-evdev_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-evdev_1.2.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- evdev input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "0c7c41d3f1637bb559e80c2ad708f05d"
+SRC_URI[archive.sha256sum] = "b23b231d754cab717a4b145ee3a5f3e73db46d877d23502326e9794d92d976ba"
diff --git a/recipes/xorg-driver/xf86-input-evdev_1.99.4.bb b/recipes/xorg-driver/xf86-input-evdev_1.99.4.bb
index 792909621a..46e39759cf 100644
--- a/recipes/xorg-driver/xf86-input-evdev_1.99.4.bb
+++ b/recipes/xorg-driver/xf86-input-evdev_1.99.4.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- evdev input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "f56d98ab11ef77cfcbafb5d93c697791"
+SRC_URI[archive.sha256sum] = "71e896168819bcf50044c175482d03873c31bc6eb355305a87e94772580789dd"
diff --git a/recipes/xorg-driver/xf86-input-evdev_2.0.4.bb b/recipes/xorg-driver/xf86-input-evdev_2.0.4.bb
index 792909621a..00fdb034ec 100644
--- a/recipes/xorg-driver/xf86-input-evdev_2.0.4.bb
+++ b/recipes/xorg-driver/xf86-input-evdev_2.0.4.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- evdev input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "ac97e155ea4db87a8393297493f9c406"
+SRC_URI[archive.sha256sum] = "825adcadaf4c90d4cb1d0bd21dcf67bf3b895f12f8e7bf186ed936445dc015ca"
diff --git a/recipes/xorg-driver/xf86-input-evdev_2.1.0.bb b/recipes/xorg-driver/xf86-input-evdev_2.1.0.bb
index 792909621a..f5bfb890b8 100644
--- a/recipes/xorg-driver/xf86-input-evdev_2.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-evdev_2.1.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- evdev input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "a6070ead29b2d81b5b386a96df2661b8"
+SRC_URI[archive.sha256sum] = "45c4b6df8d1dbc4db8aa580be4f3c693ebba4eba4908d82489948827d3bed0e5"
diff --git a/recipes/xorg-driver/xf86-input-evdev_2.2.5.bb b/recipes/xorg-driver/xf86-input-evdev_2.2.5.bb
index 792909621a..4afdf24762 100644
--- a/recipes/xorg-driver/xf86-input-evdev_2.2.5.bb
+++ b/recipes/xorg-driver/xf86-input-evdev_2.2.5.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- evdev input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "e926692d74ee81ed459d0fe89439ff8b"
+SRC_URI[archive.sha256sum] = "433fd29043cd427ba486bcce471aae3ad1abca94c8682feff92da0c380b8dff3"
diff --git a/recipes/xorg-driver/xf86-input-evdev_2.2.6.bb b/recipes/xorg-driver/xf86-input-evdev_2.2.6.bb
index 792909621a..1ebaa5a43e 100644
--- a/recipes/xorg-driver/xf86-input-evdev_2.2.6.bb
+++ b/recipes/xorg-driver/xf86-input-evdev_2.2.6.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- evdev input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "bc4b2356e1dbf2d21e1e95249b18f5f8"
+SRC_URI[archive.sha256sum] = "dbf3799e207175e91f50492d51343e5cfdc706f637f6e9f14257b764e86bb3f9"
diff --git a/recipes/xorg-driver/xf86-input-evdev_2.3.0.bb b/recipes/xorg-driver/xf86-input-evdev_2.3.0.bb
index 792909621a..bc20fa9a33 100644
--- a/recipes/xorg-driver/xf86-input-evdev_2.3.0.bb
+++ b/recipes/xorg-driver/xf86-input-evdev_2.3.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- evdev input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "21dac6461379d67ee3b333c77f63e7bf"
+SRC_URI[archive.sha256sum] = "6d57420cce9201a14f2fb5c5f6bc8999ffdcc9520020d54290eb22db27c366c8"
diff --git a/recipes/xorg-driver/xf86-input-evdev_2.3.1.bb b/recipes/xorg-driver/xf86-input-evdev_2.3.1.bb
index 792909621a..0d6e79cc6d 100644
--- a/recipes/xorg-driver/xf86-input-evdev_2.3.1.bb
+++ b/recipes/xorg-driver/xf86-input-evdev_2.3.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- evdev input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "e56ce4424b89b2409c6e73e007a85da7"
+SRC_URI[archive.sha256sum] = "462f2ae2fd389a87e09fa764a236cd04dcbf85bcfcd8000aa9a3810055511d8f"
diff --git a/recipes/xorg-driver/xf86-input-evdev_2.3.2.bb b/recipes/xorg-driver/xf86-input-evdev_2.3.2.bb
index 792909621a..e577f51e13 100644
--- a/recipes/xorg-driver/xf86-input-evdev_2.3.2.bb
+++ b/recipes/xorg-driver/xf86-input-evdev_2.3.2.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- evdev input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "b2bfe368022eedf2671ee28daba31efc"
+SRC_URI[archive.sha256sum] = "029bf469bd013bcc3e384c1297a05a59e4b9b3ba90a26c022b32c0819d115e28"
diff --git a/recipes/xorg-driver/xf86-input-evtouch/02_calibration_1.6.patch b/recipes/xorg-driver/xf86-input-evtouch/02_calibration_1.6.patch
new file mode 100644
index 0000000000..c461758115
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-evtouch/02_calibration_1.6.patch
@@ -0,0 +1,41 @@
+From: Thomas Jaeger <ThJaeger@gmail.com>
+Date: Sun, 22 Mar 2009 20:58:58 -0400
+Subject: Make calibration work on xserver-1.6
+
+Stolen from Ubuntu.
+
+Index: xserver-xorg-input-evtouch/ev_calibrate.c
+===================================================================
+--- xserver-xorg-input-evtouch.orig/ev_calibrate.c
++++ xserver-xorg-input-evtouch/ev_calibrate.c
+@@ -218,7 +218,7 @@
+ int cap_style = CapButt; /* style of the line's edje and */
+ int join_style = JoinBevel; /* joined lines. */
+
+- int event_mask = ExposureMask | ButtonReleaseMask | PointerMotionMask | KeyPressMask;
++ int event_mask = ExposureMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | KeyPressMask;
+
+ int depth;
+ int screen_num;
+Index: xserver-xorg-input-evtouch/evtouch.c
+===================================================================
+--- xserver-xorg-input-evtouch.orig/evtouch.c
++++ xserver-xorg-input-evtouch/evtouch.c
+@@ -306,7 +306,7 @@
+ }
+
+ if (pos_changed == 1) {
+-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 2
+ ConvertProc(priv->local, 0, 2,
+ priv->raw_x, priv->raw_y,
+ 0, 0, 0, 0,
+@@ -369,7 +369,7 @@
+ priv->raw_y = priv->min_y;
+ }
+
+-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 2
+ ConvertProc(priv->local, 0, 2,
+ priv->raw_x, priv->raw_y,
+ 0, 0, 0, 0,
diff --git a/recipes/xorg-driver/xf86-input-evtouch/03_server-1.6-ftbfs.diff b/recipes/xorg-driver/xf86-input-evtouch/03_server-1.6-ftbfs.diff
new file mode 100644
index 0000000000..79192cbad5
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-evtouch/03_server-1.6-ftbfs.diff
@@ -0,0 +1,61 @@
+From: Julien Cristau <jcristau@debian.org>
+Date: Sun, 17 May 2009 18:54:59 +0200
+Subject: Fix build with server 1.6
+
+* uninclude xf86Version.h
+* fix InitValuatorClassDeviceStruct usage
+* fix input ABI check
+
+Index: xserver-xorg-input-evtouch/evtouch.c
+===================================================================
+--- xserver-xorg-input-evtouch.orig/evtouch.c
++++ xserver-xorg-input-evtouch/evtouch.c
+@@ -30,10 +30,8 @@
+
+ #define _evdev_touch_C_
+
+-#include <xf86Version.h>
+-#if XF86_VERSION_CURRENT >= XF86_VERSION_NUMERIC(3,9,0,0,0)
++#include <xorgVersion.h>
+ #define XFREE86_V4
+-#endif
+
+ /*****************************************************************************
+ * Standard Headers
+@@ -74,7 +72,6 @@
+ #include "xf86_OSproc.h"
+ #include "xf86Xinput.h"
+ #include "exevents.h"
+-#include "xf86OSmouse.h"
+ #include "randrstr.h"
+
+ #ifndef NEED_XF86_TYPES
+@@ -139,7 +136,7 @@
+ "Kenan Esau",
+ MODINFOSTRING1,
+ MODINFOSTRING2,
+- XF86_VERSION_CURRENT,
++ XORG_VERSION_CURRENT,
+ 0, 8, 8,
+ ABI_CLASS_XINPUT,
+ ABI_XINPUT_VERSION,
+@@ -652,14 +649,17 @@
+ * Device reports motions on 2 axes in absolute coordinates.
+ * Axes min and max values are reported in raw coordinates.
+ */
+- if (InitValuatorClassDeviceStruct(dev, 2, xf86GetMotionEvents,
++ if (InitValuatorClassDeviceStruct(dev, 2,
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0
++ xf86GetMotionEvents,
++#endif
+ local->history_size, Absolute) == FALSE)
+ {
+ ErrorF ("Unable to allocate EVTouch touchscreen ValuatorClassDeviceStruct\n");
+ return !Success;
+ }
+
+-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 2
+ xf86InitValuatorAxisStruct(dev, 0, 0, priv->screen_width,
+ 1024,
+ EV_AXIS_MIN_RES /* min_res */ ,
diff --git a/recipes/xorg-driver/xf86-input-evtouch/04_server-1.7-ftbfs.diff b/recipes/xorg-driver/xf86-input-evtouch/04_server-1.7-ftbfs.diff
new file mode 100644
index 0000000000..726297cff6
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-evtouch/04_server-1.7-ftbfs.diff
@@ -0,0 +1,516 @@
+commit f88ce643a4d343cc27ef6ef7e0bf148f885043ab
+Author: Mattia Dongili <malattia@linux.it>
+Date: Sun Jan 24 15:45:51 2010 +0900
+
+ 04
+
+ Build with 1.7. Also add some more probing taken from evdev.
+
+ Signed-off-by: Mattia Dongili <malattia@linux.it>
+
+Index: xserver-xorg-input-evtouch/evtouch.c
+===================================================================
+--- xserver-xorg-input-evtouch.orig/evtouch.c 2010-02-14 14:08:33.000000000 +0900
++++ xserver-xorg-input-evtouch/evtouch.c 2010-02-14 14:13:51.000000000 +0900
+@@ -57,6 +57,7 @@
+ #define NEED_EVENTS
+ #include <X11/X.h>
+ #include <X11/Xproto.h>
++#include <xserver-properties.h>
+
+ #include "xf86.h"
+
+@@ -129,7 +130,6 @@
+ 0
+ };
+
+-#ifdef XFree86LOADER
+ static XF86ModuleVersionInfo VersionRec =
+ {
+ "evtouch",
+@@ -164,9 +164,7 @@
+ }
+
+
+-XF86ModuleData evtouchModuleData = {&VersionRec, Plug, Unplug };
+-
+-#endif /* XFree86LOADER */
++_X_EXPORT XF86ModuleData evtouchModuleData = {&VersionRec, Plug, Unplug };
+
+
+ static const char *default_options[] =
+@@ -239,7 +237,7 @@
+
+ priv->emulate3_timer_expired = TRUE;
+ xf86UnblockSIGIO(sigstate);
+-
++
+ return 0;
+ }
+
+@@ -339,7 +337,7 @@
+ priv->cur_x,
+ priv->cur_y);
+ }
+- }
++ }
+ }
+ }
+
+@@ -372,7 +370,7 @@
+ 0, 0, 0, 0,
+ &priv->cur_x, &priv->cur_y);
+ #endif
+-
++
+ libtouchSetPos(priv->libtouch, priv->cur_x, priv->cur_y);
+ }
+
+@@ -394,7 +392,7 @@
+ priv->emulate3_timeout,
+ emulate3Timer,
+ local);
+-
++
+ if ( (ev->value == 1) && (ev->code == BTN_LEFT) ) {
+ priv->touch_flags |= LB_STAT;
+ }
+@@ -419,7 +417,7 @@
+ DBGOUT(2, "EVTouch: Right Release\n");
+ priv->touch_flags &= ~RB_STAT;
+ SetBtnAction(priv, 3, BTN_RELEASE);
+- }
++ }
+ } else {
+ if (ev->code == BTN_LEFT) {
+ SetBtnAction(priv, 1, ev->value);
+@@ -478,26 +476,98 @@
+ return;
+ }
+
+-
+-
++#define TestBit(bit, array) ((array[(bit) / LONG_BITS]) & (1L << ((bit) % LONG_BITS)))
++#define ArrayLength(a) (sizeof(a) / (sizeof((a)[0])))
+
+ static Bool
+ QueryHardware (LocalDevicePtr local)
+ {
+- DBGOUT(2, "EVTouch: %s\n", __FUNCTION__);
+-
+- return Success;
++ EVTouchPrivatePtr priv = (EVTouchPrivatePtr) (local->private);
++ size_t len;
++ int i, num_buttons;
++
++ DBGOUT(2, "EVTouch: %s\n", __FUNCTION__);
++
++ if (ioctl(local->fd, EVIOCGNAME(sizeof(priv->name) - 1), priv->name) < 0) {
++ xf86Msg(X_ERROR, "ioctl EVIOCGNAME failed: %s\n", strerror(errno));
++ goto error;
++ }
++
++ len = ioctl(local->fd, EVIOCGBIT(0, sizeof(priv->bitmask)), priv->bitmask);
++ if (len < 0) {
++ xf86Msg(X_ERROR, "%s: ioctl EVIOCGBIT failed: %s\n",
++ local->name, strerror(errno));
++ goto error;
++ }
++
++ len = ioctl(local->fd, EVIOCGBIT(EV_REL, sizeof(priv->rel_bitmask)), priv->rel_bitmask);
++ if (len < 0) {
++ xf86Msg(X_ERROR, "%s: ioctl EVIOCGBIT failed: %s\n",
++ local->name, strerror(errno));
++ goto error;
++ }
++
++ len = ioctl(local->fd, EVIOCGBIT(EV_ABS, sizeof(priv->abs_bitmask)), priv->abs_bitmask);
++ if (len < 0) {
++ xf86Msg(X_ERROR, "%s: ioctl EVIOCGBIT failed: %s\n",
++ local->name, strerror(errno));
++ goto error;
++ }
++
++ len = ioctl(local->fd, EVIOCGBIT(EV_KEY, sizeof(priv->key_bitmask)), priv->key_bitmask);
++ if (len < 0) {
++ xf86Msg(X_ERROR, "%s: ioctl EVIOCGBIT failed: %s\n",
++ local->name, strerror(errno));
++ goto error;
++ }
++
++ num_buttons = 0;
++
++ /* count all buttons */
++ for (i = BTN_MISC; i < BTN_JOYSTICK; i++)
++ {
++ if (TestBit(i, priv->key_bitmask))
++ {
++ if (i > num_buttons)
++ num_buttons = i;
++ }
++ }
++ if (num_buttons)
++ {
++ priv->flags |= EVTOUCH_BUTTON_EVENTS;
++ priv->num_buttons = num_buttons;
++ xf86Msg(X_INFO, "%s: Found %d mouse buttons\n", local->name,
++ num_buttons);
++ }
++
++ for (i = 0; i < REL_MAX; i++) {
++ if (TestBit(i, priv->rel_bitmask)) {
++ xf86Msg(X_INFO, "%s: Found relative axes\n", local->name);
++ priv->flags |= EVTOUCH_RELATIVE_EVENTS;
++ break;
++ }
++ }
++
++ for (i = 0; i < ABS_MAX; i++) {
++ if (TestBit(i, priv->abs_bitmask)) {
++ xf86Msg(X_INFO, "%s: Found absolute axes\n", local->name);
++ priv->flags |= EVTOUCH_ABSOLUTE_EVENTS;
++ break;
++ }
++ }
++
++ return Success;
++error:
++ return (!Success);
+ }
+
+
+-
+-
+ static Bool
+ DeviceOn (DeviceIntPtr dev)
+ {
+ LocalDevicePtr local = (LocalDevicePtr) dev->public.devicePrivate;
+ EVTouchPrivatePtr priv = (EVTouchPrivatePtr) (local->private);
+-
++
+ local->fd = xf86OpenSerial(local->options);
+
+ DBGOUT(2, "EVTouch: %s\n", __FUNCTION__ );
+@@ -512,8 +582,7 @@
+
+ DBG (9, XisbTrace (priv->buffer, 1));
+
+-
+- if (!priv->buffer)
++ if (!priv->buffer)
+ {
+ xf86CloseSerial(local->fd);
+ local->fd = -1;
+@@ -531,7 +600,6 @@
+ if (ioctl(local->fd, EVIOCGRAB, (void *)1))
+ xf86Msg(X_ERROR, "%s: Unable to grab device (%s).\n", local->name, strerror(errno));
+
+-
+ #ifndef XFREE86_V4
+ xf86AddEnabledDevice(local);
+ #else
+@@ -544,8 +612,6 @@
+ }
+
+
+-
+-
+ static Bool
+ DeviceOff (DeviceIntPtr dev)
+ {
+@@ -555,7 +621,7 @@
+ DBGOUT(2, "EVTouch: %s\n", __FUNCTION__ );
+
+ if (local->fd != -1)
+- {
++ {
+ ioctl(local->fd, EVIOCGRAB, (void *)0);
+ xf86RemoveEnabledDevice (local);
+ if (priv->buffer)
+@@ -577,6 +643,73 @@
+ }
+
+
++static Atom *EvtouchInitButtonLabels(void)
++{
++#ifdef HAVE_LABELS
++ Atom *labels = xalloc(EV_MAX_BUTTONS * sizeof(Atom));
++
++ /* initialize the 5 button labels used by this driver */
++ labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
++ labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
++ labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
++ labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP);
++ labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN);
++
++ return labels;
++#endif
++}
++
++static char* abs_labels[] = {
++ AXIS_LABEL_PROP_ABS_X,
++ AXIS_LABEL_PROP_ABS_Y,
++ AXIS_LABEL_PROP_ABS_Z,
++ AXIS_LABEL_PROP_ABS_WHEEL
++};
++static char* rel_labels[] = {
++ AXIS_LABEL_PROP_REL_X,
++ AXIS_LABEL_PROP_REL_Y,
++ AXIS_LABEL_PROP_REL_Z,
++ AXIS_LABEL_PROP_REL_WHEEL
++};
++
++static void
++EvtouchInitAxesLabels(EVTouchPrivatePtr pEVTouch, int natoms, Atom *atoms)
++{
++#ifdef HAVE_LABELS
++ Atom atom;
++ int axis;
++ char **labels;
++ int labels_len = 0;
++ char *misc_label;
++
++ if (pEVTouch->flags & EVTOUCH_ABSOLUTE_EVENTS)
++ {
++ labels = abs_labels;
++ labels_len = ArrayLength(abs_labels);
++ misc_label = AXIS_LABEL_PROP_ABS_MISC;
++ } else if ((pEVTouch->flags & EVTOUCH_RELATIVE_EVENTS))
++ {
++ labels = rel_labels;
++ labels_len = ArrayLength(rel_labels);
++ misc_label = AXIS_LABEL_PROP_REL_MISC;
++ }
++
++ memset(atoms, 0, natoms * sizeof(Atom));
++
++ /* Now fill the ones we know */
++ for (axis = 0; axis < labels_len; axis++)
++ {
++ if (pEVTouch->axis_map[axis] == -1)
++ continue;
++
++ atom = XIGetKnownProperty(labels[axis]);
++ if (!atom) /* Should not happen */
++ continue;
++
++ atoms[pEVTouch->axis_map[axis]] = atom;
++ }
++#endif
++}
+
+
+ static Bool
+@@ -585,6 +718,7 @@
+ DBGOUT(2, "EVTouch: %s\n", __FUNCTION__);
+ LocalDevicePtr local = (LocalDevicePtr) dev->public.devicePrivate;
+ EVTouchPrivatePtr priv = (EVTouchPrivatePtr) (local->private);
++ Atom *labels, *atoms;
+ unsigned char map[EV_MAX_BUTTONS];
+ int i;
+
+@@ -593,7 +727,7 @@
+
+ priv->btn_count = EV_MAX_BUTTONS;
+
+- /*
++ /*
+ * these have to be here instead of in the SetupProc, because when the
+ * SetupProc is run at server startup, screenInfo is not setup yet
+ */
+@@ -603,9 +737,9 @@
+ priv->screen_height = pScrn->virtualY;
+ priv->pViewPort_X0 = &(pScrn->frameX0); /* initialize the pointers to the viewport coords */
+ if ( (priv->screen_width != priv->phys_width) ||
+- (priv->screen_height != priv->phys_height) )
++ (priv->screen_height != priv->phys_height) )
+ priv->virtual = 1;
+- else
++ else
+ priv->virtual = 0;
+
+ priv->pViewPort_Y0 = &(pScrn->frameY0);
+@@ -620,24 +754,29 @@
+ DBGOUT(2, "EVTouch: MaxValue H,V: %d %d\n", pScrn->maxHValue, pScrn->maxVValue);
+
+ priv->screen_width = screenInfo.screens[priv->screen_num]->width;
+- priv->screen_height = screenInfo.screens[priv->screen_num]->height;
++ priv->screen_height = screenInfo.screens[priv->screen_num]->height;
+
+- /*
++ /*
+ * Device reports button press for 5 buttons.
+ */
+- if (InitButtonClassDeviceStruct (dev, EV_MAX_BUTTONS, map) == FALSE)
++ labels = EvtouchInitButtonLabels();
++ if (InitButtonClassDeviceStruct (dev, EV_MAX_BUTTONS,
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
++ labels,
++#endif
++ map) == FALSE)
+ {
+ ErrorF("Unable to allocate EVTouch touchscreen ButtonClassDeviceStruct\n");
+ return BadAlloc;
+- }
++ }
+
+- DBGOUT(2, "EVTouch: %s btn_count=%d\n", __FUNCTION__,
++ DBGOUT(2, "EVTouch: %s btn_count=%d\n", __FUNCTION__,
+ priv->btn_count);
+ priv->btn_actions = xcalloc(priv->btn_count, sizeof(BtnAction));
+- memset(priv->btn_actions, 0,
++ memset(priv->btn_actions, 0,
+ priv->btn_count * sizeof(BtnAction));
+-
+- DBGOUT(2, "EVTouch: %s btn_count=%d\n", __FUNCTION__,
++
++ DBGOUT(2, "EVTouch: %s btn_count=%d\n", __FUNCTION__,
+ priv->btn_count);
+
+ if (InitFocusClassDeviceStruct(dev) == FALSE) {
+@@ -645,13 +784,18 @@
+ return !Success;
+ }
+
+- /*
++ /*
+ * Device reports motions on 2 axes in absolute coordinates.
+ * Axes min and max values are reported in raw coordinates.
+ */
++ atoms = xalloc(2 * sizeof(Atom));
++ EvtouchInitAxesLabels(priv, 2, atoms);
++
+ if (InitValuatorClassDeviceStruct(dev, 2,
+ #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0
+ xf86GetMotionEvents,
++#elif GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
++ atoms,
+ #endif
+ local->history_size, Absolute) == FALSE)
+ {
+@@ -660,12 +804,20 @@
+ }
+
+ #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 2
+- xf86InitValuatorAxisStruct(dev, 0, 0, priv->screen_width,
++ xf86InitValuatorAxisStruct(dev, 0,
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
++ atoms[0],
++#endif
++ 0, priv->screen_width,
+ 1024,
+ EV_AXIS_MIN_RES /* min_res */ ,
+ EV_AXIS_MAX_RES /* max_res */ );
+ xf86InitValuatorDefaults(dev, 0);
+- xf86InitValuatorAxisStruct(dev, 1, 0, priv->screen_height,
++ xf86InitValuatorAxisStruct(dev, 1,
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
++ atoms[1],
++#endif
++ 0, priv->screen_height,
+ 1024,
+ EV_AXIS_MIN_RES /* min_res */ ,
+ EV_AXIS_MAX_RES /* max_res */ );
+@@ -682,7 +834,6 @@
+ priv->raw_y=priv->cur_y;
+ libtouchSetPos(priv->libtouch, priv->cur_x, priv->cur_y);
+
+-
+ if (InitProximityClassDeviceStruct (dev) == FALSE)
+ {
+ ErrorF ("Unable to allocate EVTouch touchscreen ProximityClassDeviceStruct\n");
+@@ -695,7 +846,7 @@
+ return !Success;
+ }
+
+- /*
++ /*
+ * Allocate the motion events buffer.
+ */
+ xf86MotionHistoryAllocate (local);
+@@ -765,7 +916,7 @@
+ if (sizeof(priv->ev) == count) {
+ count = 0;
+ EVTouchDumpPacketToLog(priv);
+-
++
+ return Success;
+ }
+ }
+Index: xserver-xorg-input-evtouch/evtouch.h
+===================================================================
+--- xserver-xorg-input-evtouch.orig/evtouch.h 2010-02-14 14:01:43.000000000 +0900
++++ xserver-xorg-input-evtouch/evtouch.h 2010-02-14 14:08:34.000000000 +0900
+@@ -35,6 +35,22 @@
+ #define DBGOUT(lvl, ...)
+ #endif
+
++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 3
++#define HAVE_PROPERTIES 1
++
++/* 1.6 has properties, but no labels */
++#ifdef AXIS_LABEL_PROP
++#define HAVE_LABELS
++#else
++#undef HAVE_LABELS
++#endif
++
++#endif
++
++#define LONG_BITS (sizeof(long) * 8)
++/* Number of longs needed to hold the given number of bits */
++#define NLONGS(x) (((x) + LONG_BITS - 1) / LONG_BITS)
++
+ /******************************************************************************
+ * Definitions
+ * structs, typedefs, #defines, enums
+@@ -52,6 +68,10 @@
+
+ #define EV_MAX_BUTTONS 5
+
++#define EVTOUCH_BUTTON_EVENTS 0x01
++#define EVTOUCH_RELATIVE_EVENTS 0x02
++#define EVTOUCH_ABSOLUTE_EVENTS 0x04
++
+ #define TOUCHED 0x01
+ #define X_COORD 0x02
+ #define Y_COORD 0x04
+@@ -80,6 +100,8 @@
+ int min_rel_y; /* Minimum y reported by calibration */
+ int max_rel_y; /* Maximum y */
+
++ int axis_map[max(ABS_CNT, REL_CNT)]; /* Map evtouch <axis> to index */
++
+ int drag_timer;
+ Bool emulate3;
+ int emulate3_timeout;
+@@ -129,10 +151,10 @@
+ int screen_num; /* Screen associated with the device */
+ int screen_width; /* Width of the associated X screen */
+ int screen_height; /* Height of the screen */
+-
++
+ XISBuffer *buffer;
+ struct input_event ev; /* packet being/just read */
+-
++
+ int packeti; /* index into packet */
+ Bool cs7flag;
+ Bool binary_pkt; /* indicates packet was a binary touch */
+@@ -141,6 +163,16 @@
+
+ LibTouchRecPtr libtouch;
+ LocalDevicePtr local;
++
++ /* Cached info from device. */
++ int flags;
++ int num_buttons;
++ char name[1024];
++ unsigned long bitmask[NLONGS(EV_CNT)];
++ unsigned long key_bitmask[NLONGS(KEY_CNT)];
++ unsigned long rel_bitmask[NLONGS(REL_CNT)];
++ unsigned long abs_bitmask[NLONGS(ABS_CNT)];
++
+ } EVTouchPrivateRec, *EVTouchPrivatePtr;
+
+
diff --git a/recipes/xorg-driver/xf86-input-evtouch/20_fix_calibrate_submission_directions.patch b/recipes/xorg-driver/xf86-input-evtouch/20_fix_calibrate_submission_directions.patch
deleted file mode 100644
index 68950a4ca3..0000000000
--- a/recipes/xorg-driver/xf86-input-evtouch/20_fix_calibrate_submission_directions.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: xf86-input-evtouch-0.8.8/calibrate.sh
-===================================================================
---- xf86-input-evtouch-0.8.8.orig/calibrate.sh 2009-01-14 14:14:10.000000000 +0100
-+++ xf86-input-evtouch-0.8.8/calibrate.sh 2009-01-14 14:14:51.000000000 +0100
-@@ -25,7 +25,7 @@
- FAILINFO="No evtouch capable device found, if you are sure you have \n\
- an evtouch capable touchscreen, please mail the \
- resulting file of the command \"lshal > evtouch_hal.out\" to the\n\
--ubuntu-mobile@lists.ubuntu.com mailing list, so support for your \
-+bug url https://bugs.launchpad.net/bugs/317094, so support for your \
- device can be added."
-
- if [ -z "$UDI" ];then
diff --git a/recipes/xorg-driver/xf86-input-evtouch/21_more_calibration_fixups.patch b/recipes/xorg-driver/xf86-input-evtouch/21_more_calibration_fixups.patch
deleted file mode 100644
index abb9e51a49..0000000000
--- a/recipes/xorg-driver/xf86-input-evtouch/21_more_calibration_fixups.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-diff -u xf86-input-evtouch-0.8.8/evtouch.c xf86-input-evtouch-0.8.8/evtouch.c
---- xf86-input-evtouch-0.8.8/evtouch.c
-+++ xf86-input-evtouch-0.8.8/evtouch.c
-@@ -305,7 +305,7 @@
- }
-
- if (pos_changed == 1) {
--#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
-+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 2
- ConvertProc(priv->local, 0, 2,
- priv->raw_x, priv->raw_y,
- 0, 0, 0, 0,
-@@ -369,7 +369,7 @@
- priv->raw_y = priv->min_y;
- }
-
--#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
-+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 2
- ConvertProc(priv->local, 0, 2,
- priv->raw_x, priv->raw_y,
- 0, 0, 0, 0,
-diff -u xf86-input-evtouch-0.8.8/debian/changelog xf86-input-evtouch-0.8.8/debian/changelog
---- xf86-input-evtouch-0.8.8.orig/ev_calibrate.c
-+++ xf86-input-evtouch-0.8.8/ev_calibrate.c
-@@ -218,7 +218,7 @@
- int cap_style = CapButt; /* style of the line's edje and */
- int join_style = JoinBevel; /* joined lines. */
-
-- int event_mask = ExposureMask | ButtonReleaseMask | PointerMotionMask | KeyPressMask;
-+ int event_mask = ExposureMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | KeyPressMask;
-
- int depth;
- int screen_num;
diff --git a/recipes/xorg-driver/xf86-input-evtouch/fdi/50-elo-2700.fdi b/recipes/xorg-driver/xf86-input-evtouch/fdi/50-elo-2700.fdi
new file mode 100644
index 0000000000..d274a54f72
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-evtouch/fdi/50-elo-2700.fdi
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
+<deviceinfo version="0.2">
+ <device>
+ <match key="info.product" contains="Elo TouchSystems, Inc. Elo TouchSystems 2700 IntelliTouch(r) USB Touchmonitor Interface">
+ <match key="info.capabilities" contains="input">
+ <merge key="input.x11_driver" type="string">evtouch</merge>
+ <merge key="input.x11_options.minx" type="string">130</merge>
+ <merge key="input.x11_options.miny" type="string">197</merge>
+ <merge key="input.x11_options.maxx" type="string">3945</merge>
+ <merge key="input.x11_options.maxy" type="string">3894</merge>
+ <merge key="input.x11_options.swapx" type="string">1</merge>
+ <merge key="input.x11_options.swapy" type="string">1</merge>
+ </match>
+ </match>
+ </device>
+</deviceinfo>
diff --git a/recipes/xorg-driver/xf86-input-evtouch/fdi/50-gunze.fdi b/recipes/xorg-driver/xf86-input-evtouch/fdi/50-gunze.fdi
new file mode 100644
index 0000000000..3a5f49cb03
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-evtouch/fdi/50-gunze.fdi
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<deviceinfo version="0.2">
+ <device>
+ <match key="info.product" contains="GUNZE USB Touch Panel">
+ <merge key="input.x11_driver" type="string">evtouch</merge>
+ <merge key="input.x11_options.ReportingMode" type="string">Raw</merge>
+ <merge key="input.x11_options.Emulate3Buttons" type="string">false</merge>
+ <merge key="input.x11_options.Emulate3Timeout" type="string">1</merge>
+ <merge key="input.x11_options.MinX" type="string">35</merge>
+ <merge key="input.x11_options.MinY" type="string">37</merge>
+ <merge key="input.x11_options.MaxX" type="string">990</merge>
+ <merge key="input.x11_options.MaxY" type="string">986</merge>
+ </match>
+ </device>
+</deviceinfo> \ No newline at end of file
diff --git a/recipes/xorg-driver/xf86-input-evtouch/fdi/50-ideaco-idc6681.fdi b/recipes/xorg-driver/xf86-input-evtouch/fdi/50-ideaco-idc6681.fdi
new file mode 100644
index 0000000000..390f3bc652
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-evtouch/fdi/50-ideaco-idc6681.fdi
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
+
+<deviceinfo version="0.2">
+ <device>
+ <match key="info.product" contains="IDEACO">
+ <match key="info.product" contains="IDC 6681">
+ <match key="info.capabilities" contains="input.touchpad">
+ <merge key="input.x11_driver" type="string">evtouch</merge>
+ <merge key="input.x11_options.reportingmode" type="string">raw</merge>
+ <merge key="input.x11_options.taptimer" type="string">50</merge>
+ <merge key="input.x11_options.longtouchtimer" type="string">30</merge>
+ <merge key="input.x11_options.movelimit" type="string">15</merge>
+ <merge key="input.x11_options.emulate3buttons" type="string">true</merge>
+ <merge key="input.x11_options.emulate3timeout" type="string">50</merge>
+ <merge key="input.x11_options.maxx" type="string">1100</merge>
+ <merge key="input.x11_options.maxy" type="string">1650</merge>
+ <merge key="input.x11_options.minx" type="string">7220</merge>
+ <merge key="input.x11_options.miny" type="string">6560</merge>
+ </match>
+ </match>
+ </match>
+ </device>
+</deviceinfo>
diff --git a/recipes/xorg-driver/xf86-input-evtouch/fdi/50-touchpack.fdi b/recipes/xorg-driver/xf86-input-evtouch/fdi/50-touchpack.fdi
new file mode 100644
index 0000000000..cb14eeba48
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-evtouch/fdi/50-touchpack.fdi
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
+<deviceinfo version="0.2">
+ <device>
+ <match key="info.product" contains="HID TOUCH HID Touch Panel">
+ <match key="info.capabilities" contains="input">
+ <merge key="input.x11_driver" type="string">evtouch</merge>
+ <merge key="input.x11_options.reportingmode" type="string">raw</merge>
+ <merge key="input.x11_options.emulate3buttons" type="string">false</merge>
+ <merge key="input.x11_options.emulate3timeout" type="string">50</merge>
+ <merge key="input.x11_options.sendcoreevents" type="string">true</merge>
+ <merge key="input.x11_options.maxx" type="string">4095</merge>
+ <merge key="input.x11_options.maxy" type="string">4095</merge>
+ <merge key="input.x11_options.minx" type="string">21</merge>
+ <merge key="input.x11_options.miny" type="string">0</merge>
+ <merge key="input.x11_options.Rotate" type="string">false</merge>
+ <merge key="input.x11_options.Swapx" type="string">false</merge>
+ <merge key="input.x11_options.Swapy" type="string">false</merge>
+ <merge key="input.x11_options.taptimer" type="string">30</merge>
+ <merge key="input.x11_options.longtouchtimer" type="string">750</merge>
+ <merge key="input.x11_options.longtouched_action" type="string">click</merge>
+ <merge key="input.x11_options.longtouched_button" type="string">3</merge>
+ <merge key="input.x11_options.oneandhalftap_button" type="string">2</merge>
+ <merge key="input.x11_options.movelimit" type="string">10</merge>
+ <merge key="input.x11_options.touched_drag" type="string">1</merge>
+ <merge key="input.x11_options.maybetapped_action" type="string">click</merge>
+ <merge key="input.x11_options.maybetapped_button" type="string">1</merge>
+ </match>
+ </match>
+ </device>
+</deviceinfo>
diff --git a/recipes/xorg-driver/xf86-input-evtouch/xf86-input-evtouch_0.8.8-0ubuntu6.diff b/recipes/xorg-driver/xf86-input-evtouch/xf86-input-evtouch_0.8.8-0ubuntu6.diff
deleted file mode 100644
index abe5b8f4ba..0000000000
--- a/recipes/xorg-driver/xf86-input-evtouch/xf86-input-evtouch_0.8.8-0ubuntu6.diff
+++ /dev/null
@@ -1,4210 +0,0 @@
---- xf86-input-evtouch-0.8.8.orig/evtouch.c
-+++ xf86-input-evtouch-0.8.8/evtouch.c
-@@ -30,8 +30,8 @@
-
- #define _evdev_touch_C_
-
--#include <xf86Version.h>
--#if XF86_VERSION_CURRENT >= XF86_VERSION_NUMERIC(3,9,0,0,0)
-+#include <xorgVersion.h>
-+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(3,9,0,0,0)
- #define XFREE86_V4
- #endif
-
-@@ -74,7 +74,6 @@
- #include "xf86_OSproc.h"
- #include "xf86Xinput.h"
- #include "exevents.h"
--#include "xf86OSmouse.h"
- #include "randrstr.h"
-
- #ifndef NEED_XF86_TYPES
-@@ -139,7 +138,7 @@
- "Kenan Esau",
- MODINFOSTRING1,
- MODINFOSTRING2,
-- XF86_VERSION_CURRENT,
-+ XORG_VERSION_CURRENT,
- 0, 8, 8,
- ABI_CLASS_XINPUT,
- ABI_XINPUT_VERSION,
-@@ -653,14 +652,13 @@
- * Device reports motions on 2 axes in absolute coordinates.
- * Axes min and max values are reported in raw coordinates.
- */
-- if (InitValuatorClassDeviceStruct(dev, 2, xf86GetMotionEvents,
-+ if (InitValuatorClassDeviceStruct(dev, 2,
- local->history_size, Absolute) == FALSE)
- {
- ErrorF ("Unable to allocate EVTouch touchscreen ValuatorClassDeviceStruct\n");
- return !Success;
- }
-
--#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
- xf86InitValuatorAxisStruct(dev, 0, 0, priv->screen_width,
- 1024,
- EV_AXIS_MIN_RES /* min_res */ ,
-@@ -671,10 +669,6 @@
- EV_AXIS_MIN_RES /* min_res */ ,
- EV_AXIS_MAX_RES /* max_res */ );
- xf86InitValuatorDefaults(dev, 1);
--#else
-- xf86InitValuatorAxisStruct(dev, 0, priv->min_x, priv->max_x,
-- xf86InitValuatorDefaults(dev, 1);
--#endif
-
- /* Initial position of pointer on screen: Centered */
- priv->cur_x=(priv->max_x - priv->min_x)/2;
---- xf86-input-evtouch-0.8.8.orig/debian/changelog
-+++ xf86-input-evtouch-0.8.8/debian/changelog
-@@ -0,0 +1,259 @@
-+xf86-input-evtouch (0.8.8-0ubuntu6) karmic; urgency=low
-+
-+ * Add debian/fdi/50-touchpack.fdi to support TouchPack touchscreen devices
-+ (Clevo TN120 series, ASUS EeeTOP, Winux Tablet, ...)
-+ (LP: #401039)
-+
-+ -- Mirsal Ennaime <mirsal@winux.fr> Sat, 24 Oct 2009 18:10:18 +0200
-+
-+xf86-input-evtouch (0.8.8-0ubuntu5) karmic; urgency=low
-+
-+ * control: Add dependencies for ttf-freefont and x-ttcidfont-conf.
-+ These dependencies are required by one of the earlier patches.
-+ (LP: #299178)
-+ * Add debian/fdi/50-elo-2700.fdi to support EloTouch 2700 IntelliTouch
-+ Touchmonitor Interface.
-+ (LP: #362308)
-+ * Add debian/fdi/50-gunze.fdi to support GUNZE USB Touch Panel
-+ (LP: #368135)
-+
-+ -- Bryce Harrington <bryce@ubuntu.com> Wed, 14 Oct 2009 02:10:14 -0700
-+
-+xf86-input-evtouch (0.8.8-0ubuntu4) karmic; urgency=low
-+
-+ * Add debian/fdi/50-ideaco-idc6681.fdi to support IDEACO IDC 6681
-+ touchscreen.
-+ (LP: #378357)
-+
-+ -- Bryce Harrington <bryce@ubuntu.com> Wed, 14 Oct 2009 01:35:50 -0700
-+
-+xf86-input-evtouch (0.8.8-0ubuntu3) jaunty; urgency=low
-+
-+ * 21_more_calibration_fixups.patch: Make calibration work on xserver-1.6
-+
-+ -- Thomas Jaeger <ThJaeger@gmail.com> Sun, 22 Mar 2009 20:58:58 -0400
-+
-+xf86-input-evtouch (0.8.8-0ubuntu2) jaunty; urgency=low
-+
-+ * install fdi files to /usr/share/hal/fdi/policy/20thirdparty so we make
-+ sure its not synaptics that gets used.
-+
-+ -- Oliver Grawert <ogra@ubuntu.com> Wed, 28 Jan 2009 16:17:39 +0100
-+
-+xf86-input-evtouch (0.8.8-0ubuntu1) jaunty; urgency=low
-+
-+ * New upstream release, packaged by Thomas Jaeger (ThJaeger@gmail.com)
-+ Thanks a lot for fixing the header issues !! (LP: #312098)
-+ - fix rotation issues (LP: #222164)
-+ * 20_fix_calibrate_submission_directions.patch, point lshal submission to a
-+ LP bug instead of pointing people to a subscription only
-+ mailing list (LP: #307503)
-+
-+ -- Oliver Grawert <ogra@ubuntu.com> Wed, 14 Jan 2009 14:04:58 -0500
-+
-+xf86-input-evtouch (0.8.7-4build2) jaunty; urgency=low
-+
-+ * Rebuild against the new xserver.
-+
-+ -- Timo Aaltonen <tjaalton@ubuntu.com> Mon, 15 Dec 2008 11:49:43 +0200
-+
-+xf86-input-evtouch (0.8.7-4build1) intrepid; urgency=low
-+
-+ * Rebuild due to x11proto-input fix in 283921
-+
-+ -- Bryce Harrington <bryce@ubuntu.com> Sat, 18 Oct 2008 01:45:02 -0700
-+
-+xf86-input-evtouch (0.8.7-3ubuntu12) intrepid; urgency=low
-+
-+ * add more touchscreen .fdi files
-+ * install all touchscreen .fdi files to /usr/share/hal/fdi/policy/10osvendor
-+ with sequence number 50 so they will override evdev and mouse settings
-+
-+ -- Oliver Grawert <ogra@ubuntu.com> Thu, 16 Oct 2008 01:50:09 +0200
-+
-+xf86-input-evtouch (0.8.7-3ubuntu11) intrepid; urgency=low
-+
-+ * fix .fdi install location to make sure hal doesnt prefer mouse settings
-+ for evtouch devices
-+
-+ -- Oliver Grawert <ogra@ubuntu.com> Mon, 29 Sep 2008 22:39:37 +0200
-+
-+xf86-input-evtouch (0.8.7-3ubuntu10) intrepid; urgency=low
-+
-+ * update halification patch of calibration script to make sure it doesnt
-+ fire if no evtouch capable device is in hal.
-+ * add .fdi file for Fujitsu lifebook (and other Fujitsu driven touchscreen
-+ devices with Fujitsu USB Touch Panel).
-+ * add sane defaults to ideaco and eGalax fdi files.
-+ * add selection of dialog frontends to show the info in X.
-+ * move zenity to recommends, add xdialog and kdebase-bin (for kdialog) as
-+ different dialog options.
-+
-+ -- Oliver Grawert <ogra@ubuntu.com> Thu, 25 Sep 2008 19:57:51 +0200
-+
-+xf86-input-evtouch (0.8.7-3ubuntu9) intrepid; urgency=low
-+
-+ * quieten down initscript a bit (we dont want a newline for each applied
-+ value on screen)
-+ * call initscript at end of calibration, so new values are applied without
-+ having to restart the system.
-+
-+ -- Oliver Grawert <ogra@ubuntu.com> Thu, 25 Sep 2008 13:27:41 +0200
-+
-+xf86-input-evtouch (0.8.7-3ubuntu8) intrepid; urgency=low
-+
-+ * add 09_calibrate-script-halification.patch, adds hal functionallity to
-+ calibration tool, makes the script work under X and gives useful output
-+ through zenity dialogs
-+ * add 10_ev_calibrate_fixups.patch, fix ev_calibrate.c to use a useful font
-+ in calibration, make it write to /etc/evtouch/config in a format that can
-+ be parsed by the evtouch hal-set-property initscript
-+ * add calibrate.desktop and calibrate icon file (uuencoded), add sharutils
-+ to build-deps
-+ * make sure /etc/evtouch dir is created by the package so ev_calibrate can
-+ write its config there.
-+ * add hal to dependencies, zenity to suggests
-+ * add xserver-xorg-input-evtouch initscript to apply calibration data on
-+ system boot via hal-set-property
-+ * include .fdi files for ideaco and eGalax touchscreens (hopefully there
-+ will be more soon)
-+ * closes (LP: #261873)
-+
-+ -- Oliver Grawert <ogra@ubuntu.com> Thu, 25 Sep 2008 00:54:44 +0200
-+
-+xf86-input-evtouch (0.8.7-3ubuntu7) intrepid; urgency=low
-+
-+ * add CURSORDIR to debian/rules to make calibration tool work
-+ * link calibration tools to /usr/bin so the low level calibration tools work
-+ on a basic level
-+
-+ -- Oliver Grawert <ogra@ubuntu.com> Wed, 24 Sep 2008 13:27:49 +0200
-+
-+xf86-input-evtouch (0.8.7-3ubuntu6) intrepid; urgency=low
-+
-+ * add libtouch.c to 08_fix_xf86memset.patch. (LP: #254848)
-+
-+ -- Timo Aaltonen <tepsipakki@ubuntu.com> Thu, 07 Aug 2008 11:36:17 +0300
-+
-+xf86-input-evtouch (0.8.7-3ubuntu5) intrepid; urgency=low
-+
-+ * add 08_fix_xf86memset.patch, fixes (LP: #254848)
-+
-+ -- Oliver Grawert <ogra@ubuntu.com> Tue, 05 Aug 2008 17:46:19 +0200
-+
-+xf86-input-evtouch (0.8.7-3ubuntu4) intrepid; urgency=low
-+
-+ * Uh, ok. Don't apply 04_include_xf86_ansic_h.patch. (FTBFS)
-+
-+ -- Timo Aaltonen <tepsipakki@ubuntu.com> Tue, 08 Jul 2008 14:22:13 +0300
-+
-+xf86-input-evtouch (0.8.7-3ubuntu3) intrepid; urgency=low
-+
-+ * libtouch.c: don't #include <xf86_ansic.h>. It is no more. (FTBFS)
-+
-+ -- Timo Aaltonen <tepsipakki@ubuntu.com> Tue, 08 Jul 2008 14:13:32 +0300
-+
-+xf86-input-evtouch (0.8.7-3ubuntu2) intrepid; urgency=low
-+
-+ * Rebuild against the new xserver-xorg-dev.
-+
-+ -- Timo Aaltonen <tepsipakki@ubuntu.com> Mon, 07 Jul 2008 17:44:38 +0300
-+
-+xf86-input-evtouch (0.8.7-3ubuntu1) hardy; urgency=low
-+
-+ * Merge from debian unstable, remaining changes: (LP: #190004)
-+ - Change maintainer address.
-+ - Change the default font from helvetica to fixed.
-+ * Drop Pepper/Q1 patch, upstream has a slightly different fix
-+ * Upstream includes fix for running on amd64 (LP: #155880)
-+
-+ -- Steve Magoun <steve.magoun@canonical.com> Thu, 07 Feb 2008 14:09:00 -0500
-+
-+xf86-input-evtouch (0.8.7-3) unstable; urgency=low
-+
-+ * work(!!!!) with xserver-xorg-core 1.4
-+ * added xf86-input-evtouch-0.8.7-misc.patch from
-+ http://www.postnuklear.de/xorg-patches/ (Closes: #443726)
-+ * bump Standards-Version to 3.7.3
-+ * use Vcs and Homepage headers in debian/control
-+
-+ -- Mattia Dongili <malattia@debian.org> Sat, 02 Feb 2008 21:32:15 +0900
-+
-+xf86-input-evtouch (0.8.7-2ubuntu1) hardy; urgency=low
-+
-+ * Merge from debian unstable, remaining changes:
-+ - Change maintainer address.
-+ - Add patch from Pepper to handle the touch screen on the Samsung Q1
-+ Ultra correctly.
-+ - Change the default font from helvetica to fixed.
-+
-+ -- Timo Aaltonen <tepsipakki@ubuntu.com> Tue, 13 Nov 2007 10:53:54 +0200
-+
-+xf86-input-evtouch (0.8.7-2) unstable; urgency=low
-+
-+ * build with xserver-xorg-core 1.4
-+
-+ -- Mattia Dongili <malattia@debian.org> Mon, 17 Sep 2007 16:52:54 +0900
-+
-+xf86-input-evtouch (0.8.7-1) unstable; urgency=low
-+
-+ * New upstream release:
-+ - Added "fix" for AMD64-crashes on touch (Closes: #431925)
-+ * updated xsfbs
-+ * removed 03_fix_compile_warns.patch applied upstream
-+
-+ -- Mattia Dongili <malattia@debian.org> Tue, 11 Sep 2007 22:42:32 +0900
-+
-+xf86-input-evtouch (0.8.6-1ubuntu1) gutsy; urgency=low
-+
-+ * Add patch from Pepper to handle the touch screen on the Samsung Q1
-+ Ultra correctly.
-+ * Change the default font from helvetica to fixed.
-+
-+ -- Tollef Fog Heen <tfheen@ubuntu.com> Wed, 11 Jul 2007 18:52:09 +0200
-+
-+xf86-input-evtouch (0.8.6-1) unstable; urgency=low
-+
-+ * New upstream release:
-+ - Fixed classic rotation (Closes: #417546)
-+ * removed 04_fix_segv_on_device_off.patch, applied upstream
-+ * updated evtouch.html
-+
-+ -- Mattia Dongili <malattia@debian.org> Sat, 16 Jun 2007 14:31:58 +0900
-+
-+xf86-input-evtouch (0.8.5-3) unstable; urgency=low
-+
-+ * Use xsfbs to get xserver dependencies automatically.
-+
-+ -- Mattia Dongili <malattia@debian.org> Sun, 10 Jun 2007 10:44:51 +0900
-+
-+xf86-input-evtouch (0.8.5-2) unstable; urgency=low
-+
-+ * Fix SEGV on vt switch (DeviceClose actually).
-+
-+ -- Mattia Dongili <malattia@debian.org> Wed, 30 May 2007 15:55:59 +0900
-+
-+xf86-input-evtouch (0.8.5-1) unstable; urgency=low
-+
-+ * New upstream release.
-+
-+ -- Mattia Dongili <malattia@debian.org> Fri, 11 May 2007 18:28:41 +0900
-+
-+xf86-input-evtouch (0.8.3-1) unstable; urgency=low
-+
-+ * New upstream release.
-+
-+ -- Mattia Dongili <malattia@debian.org> Mon, 19 Feb 2007 12:34:26 +0100
-+
-+xf86-input-evtouch (0.8.2-1) unstable; urgency=low
-+
-+ * New upstream release.
-+
-+ -- Mattia Dongili <malattia@debian.org> Sat, 03 Feb 2007 20:14:40 +0100
-+
-+xf86-input-evtouch (0.8.1-1) unstable; urgency=low
-+
-+ * Initial release. (Closes: #404932)
-+
-+ -- Mattia Dongili <malattia@debian.org> Fri, 29 Dec 2006 15:01:18 +0100
-+
---- xf86-input-evtouch-0.8.8.orig/debian/xserver-xorg-input-evtouch.links
-+++ xf86-input-evtouch-0.8.8/debian/xserver-xorg-input-evtouch.links
-@@ -0,0 +1,2 @@
-+usr/lib/xf86-input-evtouch/ev_calibrate usr/bin/ev_calibrate
-+/usr/lib/xf86-input-evtouch/calibrate.sh usr/bin/calibrate_touchscreen
---- xf86-input-evtouch-0.8.8.orig/debian/copyright
-+++ xf86-input-evtouch-0.8.8/debian/copyright
-@@ -0,0 +1,34 @@
-+This package was debianized Mattia Dongili <malattia@debian.org> based on the work
-+by Rex Tsai <chihchun@debian.org.tw> on Sun, 03 Dec 2006 18:53:48 +0100.
-+
-+It was downloaded from http://www.stz-softwaretechnik.com/~ke/touchscreen/evtouch.html
-+
-+Upstream Author: Kenan Esau <kenan.esau@conan.de>
-+
-+Copyright: 2004-2006 Kenan Esau <kenan.esau@conan.de>, Baltmannsweiler, Germany.
-+
-+License:
-+
-+ Permission to use, copy, modify, distribute, and sell this software and its
-+ documentation for any purpose is hereby granted without fee, provided that
-+ the above copyright notice appear in all copies and that both that
-+ copyright notice and this permission notice appear in supporting
-+ documentation, and that the names of copyright holders not be
-+ used in advertising or publicity pertaining to distribution of the
-+ software without specific, written prior permission. The copyright holders
-+ make no representations about the suitability of this
-+ software for any purpose. It is provided "as is" without express or
-+ implied warranty.
-+
-+ THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
-+ SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-+ FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
-+ SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
-+ RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
-+ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-+ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-+
-+
-+The Debian packaging is (C) 2006, Mattia Dongili <malattia@debian.org> and
-+is licensed under the GPL, see `/usr/share/common-licenses/GPL'.
-+
---- xf86-input-evtouch-0.8.8.orig/debian/calibrate.desktop
-+++ xf86-input-evtouch-0.8.8/debian/calibrate.desktop
-@@ -0,0 +1,12 @@
-+[Desktop Entry]
-+Name=Calibrate Touchscreen
-+Name[de]=Touchscreen Kalibrieren
-+Comment=Run the touchscreen calibration tool
-+Encoding=UTF-8
-+Exec=gksu /usr/bin/calibrate_touchscreen
-+Terminal=false
-+Type=Application
-+Icon=calibrate.png
-+StartupNotify=true
-+Categories=GTK;System;Settings;
-+X-Ubuntu-Gettext-Domain=evtouch
---- xf86-input-evtouch-0.8.8.orig/debian/calibrate.uuencode
-+++ xf86-input-evtouch-0.8.8/debian/calibrate.uuencode
-@@ -0,0 +1,50 @@
-+begin 644 calibrate.uunecode
-+MB5!.1PT*&@H````-24A$4@```"0````D"`8```#A`)B8`````7-21T(`KLX<
-+MZ0````9B2T=$`/\`_P#_H+VGDP````EP2%ES```-UP``#=<!0BB;>`````=T
-+M24U%!]@)&!(8$5T-YE8```>]241!5%C#[9AMC%Q5&<=_YYX[.UOF95^Z[Z7;
-+M+K2496'9I=)`1&RD#29H\04,B5\$/_C!^(&HI89$HX&LA*CPP=<0$WQ!H@E&
-+M_62,"9(B+QL+0FB`LD5IR]ANNVQG=F;NO>>>\_CASLS.6Y<:$S]YDY-S9^:<
-+M\_S/\_R?Y_S/P/^?C1\%\.V''D@KS[NWKZ]OO_9T^G\)P#H7%(OGGW'.?>?0
-+MP?O+:N&A!U5O;^_//_ZQ`Y^]=,M6E/KO#(C(?SQ^966%W_W^MW\X?[YTNZ\4
-+M4]?.7GO7^-@8E<K:?VE8Z(Y':G.Z?Y_-9KCFFMG;GOWKX9T^,-'?/Z#C..;8
-+MB16^^\OGT9ZW08`;ZUP,[-H\U39'ZN'B2Y^YGNFI8?*YO`=L\5$-,Y3*$9G,
-+M)CYZTZ[N>+K$TSF'B`,4GN=U'7,A&OSQ\!N4*E'S(.UWVY-UR0Z>?^9/W'#S
-+M_LX=-X$Y<^IM@FJ%@>$),MD\VO>[@NI*:)':FHUU50>@.+:4*P&GWCG.3Q]]
-+M@,&1+6R=VMEUP=@8",\ST7\)KRT=8V+R,K*Y/KP+A;S#ENO@5L=,8QTGWODG
-+M3S[V"-5*F2<?>X1"H4`E,"VM7(U8JP3TYS+LVC'%/XZ]SKFSYU@K!QUC+]1,
-+M[#KXZ".MH$SLR`R.<??!A_G>U^[F[H,/`U`)30N/1(0X,N0&,UQ^V10KRP7>
-+M6WV/=&Z0E)4+<JYU\[8C/_SUU$DX8F)+)4B,?^$;/Z$:&%`*I11*4>L5(H(Q
-+M%G%"?W\_FICE,P7\=(;T)1E2J32>]O&TCU+)GBM!Q.I:0+$<4`X,[Q96VSF$
-+MWUY78NNH-GG#\Q1*>0T@":@Z>(=U#JTUD^-#[)Z;8F1D,X\_\6MT;S^YD6WX
-+MV2%*D<?98LA:$.&<X%S"G6IMX\U/)X=B2S6,"8TEC!VA<43Q>C-6,-81Q99J
-+MI80)R@#TY;-\ZO;;.'#;K6P=SO&CA^_G^JD,B\\]S=+2,<KE(EJ!KS6^K_&:
-+MPKDAJ:T3PC@!$\6.R$H3$#!6B&*A&D3TE$\0U*K[Y.1D([M&1T?)Y7+LOV4O
-+M5PU4N66'3_7T$BXJHSV%[_MHWT]`R88>$F(KB5>:/6.%R$H-5#*F>.8$G[CU
-+MPVBM$1%&1D8(PQ`1H:^O#VLM0T-#7#TSPS?O_PHCJ2)1Z2Q(G(#2&N5UEGZO
-+M_1RRSC7"E8`23+TYP3@(8X<+2URY:[T^34]/8ZU%1.CM[<48@]::OKX^E%+L
-+MVC9"M'8.92,\3Z.UQE->1['UVN-H71*BR"2>,34/&2?$%HQ-2D"V5Y//YS$F
-+M(>;,S`SCX^.("/OW[R>52N'[/G-S<SCGN.+R[=BPC(LCM*?P=/=CIK-26R&(
-+M+%J#+Z`U>`Z4!:4$4(AS#$NYD?[U+*VWT='1QM$R/S^/<XZ)\5&\N(R+0Q32
-+MR%QI([7?13`1&HLO"BL*[12^K]`(OM9XVD-PC3.Y;KQ=FM1;_<ED,E0K:^3%
-+MKA=-19=*W7&T*IJ+I5(*A6JJ0TESM=\/'#C0XJ5ZC6D'%<=Q(T1)KYJ%1G<.
-+M)7.E#7;KNU(*Y6E.GX\(P["K8&L&4P?Y;N%?I-)9/-U3`]1=5'6$K%J)6#E[
-+MOJ9M/#POT3EUK9/4&@<EG[\=>9D;;]C3XJ$Z=XPQ&&,(PY`P#'GSK>-4C$>J
-+M%!)($92F6@D[-MT":.?D((_>^Y$-%:%(8K"\=AE_?^55;KQA3X/<(D(410T0
-+M01`011%!$'#JY`GNW'<M<[OW,#"X&:TU".RX=.!"I!:RFU+,7S'678:V94,8
-+M#O#TRMNLKJXVTC\(`H(@:("I`SMY\B1*8JZ;F>(#5T^2R^5J!ZYT"YF4PC"@
-+MM[<7:^T%O=(.,)U.,SL[R^'#A]F[=V\+D&9@QA@6%Q?9O'DSHZ-CY//];-K4
-+MVU*#/$_7^;CF@WKEQ<47GR@4"G=JK5,;Z>?VU(["B-=>.\K<W!S66L(PI%JM
-+MMG@G#$..'U\BE\]Q[*TW*96+I%*IUK6<N).G3OP9>.E]Q>_"PH(&>''Q^0>G
-+MIZ^ZK[^O/RG[GH>(4"P6V;9M.[.SLX@(U6JU`:P.:&%AH7#TZ-&#F4SF+WOV
-+M[#F];]\^VW9YD$.'#CF`B[X6WO/YS_WJ0S?=?%<VFVG*.@]K+>?.G:-0*+"Z
-+MNHKOITBGTPV2ETHECKQTY-5G#S][#_`&L+;11<K?X(JM=N^>[YG?/3\P/#QT
-+MQ_C8Q*=G9F9J@FV]%'B>PMK+,2:B7"Y3K08-+BH%J52*;=NW7CDW/_O!(T=>
-+M/O7"<R\8YYP%;)>BU^$A70.9^NI]7]ZW96+BA]EL;G!L;*QG^LKIFM3H?E.L
-+M>Z0.QKEU76UMS.MOO,Z9,Z>K:^7RJ>-+2U_\P?=_O`@8(`+BI+BM>TC5WGN`
-+M'J54S_C8V-=O/_#)L;H>WOC2)XWOM>[F]#37S>\&V.1$=CSUU&^^!=Q1`^/7
-+M>@,8O^T848":F!COR>5RVS.92][_FGQ1_P.T?L[G\SN'AX=ZEI?/QC6[#=M^
-+MT^JF;B6.8[V\O/SRSW[Q>%X$!:)$1+6^"P@UN=^P6#MSE:C$[Z)00DUE**5$
-+MH20R45$I%0!A6]BD6P#JB/TZGYK>=5/SVG;7[#K7U.H$CIMZ4^OC)G)SL6FO
-+GFHRV@U`=>F4]<^K`V@'*1O'^-VN3A-O<,!`M`````$E%3D2N0F""
-+`
-+end
---- xf86-input-evtouch-0.8.8.orig/debian/xserver-xorg-input-evtouch.dirs
-+++ xf86-input-evtouch-0.8.8/debian/xserver-xorg-input-evtouch.dirs
-@@ -0,0 +1 @@
-+etc/evtouch
---- xf86-input-evtouch-0.8.8.orig/debian/xserver-xorg-input-evtouch.init
-+++ xf86-input-evtouch-0.8.8/debian/xserver-xorg-input-evtouch.init
-@@ -0,0 +1,59 @@
-+#!/bin/sh
-+
-+[ -x /usr/bin/hal-set-property ] || exit 0
-+[ -x /usr/bin/hal-find-by-property ] || exit 0
-+
-+. /etc/evtouch/config > /dev/null 2>&1 || exit 0
-+
-+do_start() {
-+ UDI=$(/usr/bin/hal-find-by-property --key input.x11_driver --string evtouch)
-+
-+ hal_set () {
-+ if [ -n "$2" ]; then
-+ /usr/bin/hal-set-property --udi "$UDI" --key input.x11_options.$1 --string "$2" >/dev/null 2>&1
-+ else
-+ /usr/bin/hal-set-property --udi "$UDI" --key input.x11_options.$1 --remove >/dev/null 2>&1
-+ fi
-+ }
-+
-+ hal_set minx $MINX
-+ hal_set miny $MINY
-+ hal_set maxx $MAXX
-+ hal_set maxy $MAXY
-+ hal_set x0 $X0
-+ hal_set y0 $Y0
-+ hal_set x1 $X1
-+ hal_set y1 $Y1
-+ hal_set x2 $X2
-+ hal_set y2 $Y2
-+ hal_set x3 $X3
-+ hal_set y3 $Y3
-+ hal_set x4 $X4
-+ hal_set y4 $Y4
-+ hal_set x5 $X5
-+ hal_set y5 $Y5
-+ hal_set x6 $X6
-+ hal_set y6 $Y6
-+ hal_set x7 $X7
-+ hal_set y7 $Y7
-+ hal_set x8 $X8
-+ hal_set y8 $Y8
-+}
-+
-+case "$1" in
-+ start|"")
-+ do_start
-+ ;;
-+ restart|reload|force-reload)
-+ echo "Error: argument '$1' not supported" >&2
-+ exit 3
-+ ;;
-+ stop)
-+ # No-op
-+ ;;
-+ *)
-+ echo "Usage: evtouch [start|stop]" >&2
-+ exit 3
-+ ;;
-+esac
-+
---- xf86-input-evtouch-0.8.8.orig/debian/rules
-+++ xf86-input-evtouch-0.8.8/debian/rules
-@@ -0,0 +1,85 @@
-+#!/usr/bin/make -f
-+# -*- makefile -*-
-+
-+# Uncomment this to turn on verbose mode.
-+#export DH_VERBOSE=1
-+include debian/xsfbs/xsfbs.mk
-+
-+PACKAGE=xserver-xorg-input-evtouch
-+
-+CFLAGS = -Wall -g
-+
-+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
-+ CFLAGS += -O0
-+else
-+ CFLAGS += -O2
-+endif
-+
-+configure: configure-stamp
-+configure-stamp: patch
-+ dh_testdir
-+ # Add here commands to configure the package.
-+
-+ CURSORDIR=/usr/share/xf86-input-evtouch ./configure --prefix=/usr --enable-evcalibrate
-+ touch configure-stamp
-+
-+build: build-stamp
-+
-+build-stamp: configure-stamp
-+ dh_testdir
-+
-+ # Add here commands to compile the package.
-+ $(MAKE) CFLAGS="$(CFLAGS)"
-+ #docbook-to-man debian/evtouch.sgml > evtouch.1
-+
-+ touch $@
-+
-+clean: xsfclean clean-patched unpatch
-+clean-patched:
-+ dh_testdir
-+ dh_testroot
-+ rm -f build-stamp configure-stamp
-+
-+ # Add here commands to clean up after the build process.
-+ [ ! -f Makefile ] || $(MAKE) distclean
-+
-+ dh_clean
-+
-+install: build
-+ dh_testdir
-+ dh_testroot
-+ dh_clean -k
-+ dh_installdirs
-+
-+ # Add here commands to install the package into debian/tmp
-+ $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp
-+
-+
-+# Build architecture-independent files here.
-+binary-indep: build install
-+# We have nothing to do by default.
-+
-+# Build architecture-dependent files here.
-+binary-arch: build install serverabi
-+ dh_testdir
-+ dh_testroot
-+ dh_install --sourcedir=debian/tmp --list-missing --exclude=.la --exclude=.a
-+ dh_installchangelogs ChangeLog
-+ dh_installdocs
-+ dh_installexamples
-+ dh_installman
-+ mkdir -p debian/xserver-xorg-input-evtouch/usr/share/pixmaps
-+ uudecode -o debian/xserver-xorg-input-evtouch/usr/share/pixmaps/calibrate.png debian/calibrate.uuencode
-+ dh_installinit -a --no-start -u"start 25 2 3 4 5 ."
-+ dh_link
-+ dh_strip
-+ dh_compress
-+ dh_fixperms
-+ dh_installdeb
-+ dh_shlibdeps
-+ dh_gencontrol
-+ dh_md5sums
-+ dh_builddeb
-+
-+binary: binary-indep binary-arch
-+.PHONY: build clean binary-indep binary-arch binary install configure
---- xf86-input-evtouch-0.8.8.orig/debian/control
-+++ xf86-input-evtouch-0.8.8/debian/control
-@@ -0,0 +1,23 @@
-+Source: xf86-input-evtouch
-+Section: x11
-+Priority: optional
-+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
-+XSBC-Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
-+Uploaders: Mattia Dongili <malattia@debian.org>
-+Build-Depends: debhelper (>= 5), pkg-config, xserver-xorg-dev (>= 2:1.4), x11proto-randr-dev, libxrender-dev, libx11-dev, quilt, sharutils
-+Standards-Version: 3.7.3
-+Vcs-Git: git://git.debian.org/git/pkg-xorg/driver/xserver-xorg-input-evtouch
-+Vcs-Browser: http://git.debian.org/?p=pkg-xorg/driver/xserver-xorg-input-evtouch.git
-+Homepage: http://stz-softwaretechnik.com/~ke/touchscreen/evtouch.html
-+
-+Package: xserver-xorg-input-evtouch
-+Architecture: any
-+Depends: ${shlibs:Depends}, ${xserver:Depends}, hal, ttf-freefont, x-ttcidfont-conf
-+Provides: ${xinpdriver:Provides}
-+Recommends: zenity | kdebase-bin | xidalog
-+Description: Touchscreen-Driver for X.Org/XFree86 server
-+ This XFree/X.Org driver provides support for touchscreens input devices.
-+ The driver is actually an evdev-driver which supports events for moving
-+ in absolute coordinates, relative coordinates and mouse-buttons.
-+ .
-+
---- xf86-input-evtouch-0.8.8.orig/debian/README.Debian
-+++ xf86-input-evtouch-0.8.8/debian/README.Debian
-@@ -0,0 +1,16 @@
-+xf86-input-evtouch for Debian
-+-----------------------------
-+
-+Evtouch is a Touchscreen-Driver for X.
-+
-+Be sure to calibrate the device and set correct parameters in your
-+xorg.conf, see README.calibrate and find the necessary helpers
-+in /usr/lib/xf86-input-evtouch.
-+
-+A complete reference can be found on-line at
-+http://www.stz-softwaretechnik.com/~ke/touchscreen/evtouch.html
-+or in /usr/share/doc/xserver-xorg-input-evtouch on your system.
-+
-+Check /proc/bus/input/devices to find out your touchscreen device.
-+
-+ -- Mattia Dongili <malattia@debian.org>, Sat, 09 Dec 2006 18:26:37 +0100
---- xf86-input-evtouch-0.8.8.orig/debian/xserver-xorg-input-evtouch.install
-+++ xf86-input-evtouch-0.8.8/debian/xserver-xorg-input-evtouch.install
-@@ -0,0 +1,4 @@
-+usr/lib/*
-+usr/share/*
-+../fdi/* usr/share/hal/fdi/policy/20thirdparty
-+../calibrate.desktop usr/share/applications/
---- xf86-input-evtouch-0.8.8.orig/debian/docs
-+++ xf86-input-evtouch-0.8.8/debian/docs
-@@ -0,0 +1,4 @@
-+README
-+README.calibration
-+TODO
-+debian/evtouch.html
---- xf86-input-evtouch-0.8.8.orig/debian/compat
-+++ xf86-input-evtouch-0.8.8/debian/compat
-@@ -0,0 +1 @@
-+5
---- xf86-input-evtouch-0.8.8.orig/debian/evtouch.html
-+++ xf86-input-evtouch-0.8.8/debian/evtouch.html
-@@ -0,0 +1,248 @@
-+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-+"http://www.w3.org/TR/html4/loose.dtd"><html>
-+<head>
-+<meta NAME="allow-search" content="YES">
-+<meta NAME="searchtitle" content="Conan's Homepage/X touchscreen
-+driver">
-+<meta NAME="keywords" CONTENT="conan touchscreen driver Xorg XFree">
-+<meta NAME="description" CONTENT="Xorg/XFree touchscreen driver">
-+<meta NAME="page-type" CONTENT=""><meta NAME="revisit-after" CONTENT="14 days">
-+<meta NAME="ROBOTS" CONTENT="ALL">
-+<meta NAME="audience" CONTENT="All">
-+<meta NAME="content-language" CONTENT="en">
-+<meta NAME="author" content="kenan.esau@conan.de">
-+<link rel="StyleSheet" type="text/css" href="../style.css">
-+<title>Xorg Touchscreen Driver</title>
-+</head>
-+<body>
-+<div class="header">
-+Last updated: 09.06.2007
-+</div>
-+<h1>Linux-Touchscreen Driver for X</h1>
-+<div>
-+Evtouch is a Touchscreen-Driver for X. This site contains the <a
-+href=#config">configuration and installation</a> description as well as the
-+possibility to <a href="#download">download</a> the driver.
-+</div>
-+<h2><a name="config">Installation/Configuration</a></h2>
-+<ol><li>
-+<div>
-+<a href="#download">Download</a> the tarball and extract it to some
-+temporary directory.
-+</div>
-+<div class="shell">tar xzvf evtouch-xx.yy.tar.gz</div>
-+<div>
-+Copy the file &quot;evtouch_drv.so&quot; to the appropriate location
-+(Some distributions use &quot;/usr/X11R6/lib/modules/input&quot; or
-+&quot;/usr/lib/xorg/modules/input/&quot; (for Ubuntu)).
-+</div>
-+<div>
-+Insert the lines below to the file &quot;/etc/X11/XF86Config-4&quot; or
-+&quot;/etc/X11/xorg.conf&quot;.
-+</div>
-+<div class="code">
-+<a name="config"></a>
-+Section "InputDevice"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Identifier "touchscreen"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Driver "evtouch"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Option "Device" "/dev/input/event1"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Option "DeviceName" "touchscreen"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Option "MinX" "98"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Option "MinY" "43"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Option "MaxX" "940"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Option "MaxY" "925"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Option "ReportingMode" "Raw"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Option "Emulate3Buttons"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Option "Emulate3Timeout" "50"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Option "SendCoreEvents" "On"<br>
-+EndSection<br>
-+</div>
-+<li>Beware that some distributions use other names for the device. Some use
-+"/dev/input/evdevX" and others use "/dev/input/eventX". </li>
-+<li>Add the line below to the file "/etc/X11/XF86Config-4" or
-+"/etc/X11/xorg.conf" to the section "ServerLayout".<br>
-+<div class="code">InputDevice "touchscreen" "CorePointer"</div>
-+</li>
-+<li>
-+If your Y-axis is interchanged you might have used the wrong
-+event-device. Maybe you should try the next few event-devices
-+(/dev/event[1-9]).
-+</li>
-+</ol>
-+
-+<div class="warning">Since Xorg 7.2 there is always a default-mouse-pointer which will run simultaneously with evtouch if you do not prevent it from loading. It is extremely important that you add the following to your configuration. Otherwise you will get double click events and all kind of strange things.</div>
-+
-+<ol>
-+<li>
-+<div>Add the following new input-device to your xorg.conf:</div>
-+<div class="code">
-+Section "InputDevice"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Identifier "dummy"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Driver "void"<br>
-+&nbsp;&nbsp;&nbsp;&nbsp;Option "Device" "/dev/input/mice"<br>
-+EndSection<br>
-+</div>
-+</li>
-+<li>
-+<div>Add the following line your your &quot;ServerLayout&quot;-section:</div>
-+<div class="code">InputDevice "dummy"</div>
-+</li>
-+</ol>
-+
-+<div>
-+Calibration is also supported since V0.6.0. You can also reuse your
-+settings from the old driver for the 2.6 driver. Actually you only
-+have to exchange the driver name in the "Inputdevice"-section from
-+"lbtouch" to "evtouch" and change the "Device".
-+</div>
-+
-+<h2>Button-Events</h2>
-+
-+<div>
-+With the state-machine based code you can have the three types of button actions (button up, down, click) which are issued in different states of the state-machine. So the complete behaviour is configurable.
-+</div>
-+
-+<div>
-+Have a look at <a href="libtouch.html">Libtouch</a> to see which default-actions are hard-coded in the driver and what you have to do to change the default-behaviour.
-+</div>
-+<br>
-+
-+<h2><a name="advanced">Advanced Configuration</a></h2>
-+
-+<h3>Changing Timers</h3>
-+
-+<div>
-+If you are not confident with the default behaviour of your touchpanel you
-+can configure certain timers which change its behaviour.
-+</div>
-+
-+<table class="options" align="center" cellpadding="5" cellspacing="0">
-+ <tr>
-+ <th class="even"> Option </th>
-+ <th class="even"> Description </th>
-+ <th class="even"> Default-Value </td>
-+ </tr>
-+ <tr>
-+ <td class="odd"> TapTimer </td>
-+ <td class="odd"> This timer starts when the state MAYBETAPPED is
-+entered. When this timer expires a tap-event is issued and the state
-+changes to UNTOUCHED.</td>
-+ <td class="odd"> 200 ms </td>
-+ </tr>
-+ <tr>
-+ <td class="even"> LongTouchTimer </td>
-+ <td class="even"> This timer is always started when the state TOUCHED
-+is entered. When the timer expires before you untouch the screen again the
-+state moves to LONGTOUCHED and on entering that state a longtouch-event is
-+issued.</td>
-+ <td class="even"> 400 ms </td>
-+ </tr>
-+ <tr>
-+ <td class="odd"> Emulate3Buttons </td>
-+ <td class="odd"> Enable emulation of three button support </td>
-+ <td class="odd"> true -- enabled </td>
-+ <tr>
-+ <td class="even"> Emulate3Timeout </td>
-+ <td class="even"> If both buttons are pressed/released before this timer
-+expires a
-+"middle press/release"-event is generated. This timer starts to run as soon as
-+a button is pressed. </td>
-+ <td class="even"> 50 ms </td>
-+ </tr>
-+ <tr>
-+ <td class="odd"> MoveLimit </td>
-+ <td class="odd"> If the pen moves out of this radius a "mouse-press"-event
-+becomes impossible. </td>
-+ <td class="odd"> 30 Pixels </td>
-+ </tr>
-+ <tr>
-+ <td class="even"> Rotate </td>
-+ <td class="even"> There are two valid values:<br>
-+ <code class="even">CW</code> -- Rotate the screen clockwise<br>
-+ <code class="even">CCW</code> -- Rotate the screen counter-clockwise<br>
-+ Everything else will be treated as "no rotation".
-+ </td>
-+ <td class="even"> no rotation </td>
-+ </tr>
-+ <tr>
-+ <td class="odd"> SwapX </td>
-+ <td class="odd"> This option is in the driver since V0.61. When set to 1
-+the X-axis is
-+ swapped. This option is applied BEFORE the rotation-option.
-+ </td>
-+ <td class="odd"> false -- no swapping </td>
-+ </tr>
-+ <tr>
-+ <td class="even"> SwapY</td>
-+ <td class="even"> This option is in the driver since V0.61. When set to 1
-+the Y-axis is
-+ swapped. This option is applied BEFORE the rotation-option.
-+ </td>
-+ <td class="even"> false -- no swapping </td>
-+ </tr>
-+</table>
-+
-+<br>
-+If you find bugs or if you have comment/wishes please send mail to <a
-+href="mailto:lifebook@conan.de" target="Inhalt">lifebook@conan.de</a><br>
-+
-+<h2>Download<a name="download"></a></h2>
-+<div align="center"><h3>Touchscreen-Driver for X</h3></div>
-+This driver should work for XFree 4.x and Xorg 6.8.x.<br>
-+Have a look at the <a href="CHANGELOG.evtouch">CHANGELOG</a>.<br>
-+V0.8.2 was removed since it was broken -- sorry for the inconvenience.<br><br>
-+V0.8.4 contains udev-rules for dynamically creating a softlink to the &quot;correct&quot; device. Please feel free to add your rules to this file and send the patches to me.<br>
-+<table align="center">
-+ <tr>
-+ <td>Precompiled driver for X V0.8.6</td>
-+ <td><a href="evtouch-0.8.6.tar.gz">evtouch-0.8.6.tar.gz</a></td>
-+ </tr>
-+ <tr>
-+ <td>Precompiled driver for X V0.8.5</td>
-+ <td><a href="evtouch-0.8.5.tar.gz">evtouch-0.8.5.tar.gz</a></td>
-+ </tr>
-+ <tr>
-+ <td>Precompiled driver for X V0.8.4</td>
-+ <td><a href="evtouch-0.8.4.tar.gz">evtouch-0.8.4.tar.gz</a></td>
-+ </tr>
-+ <tr>
-+ <td>Precompiled driver for X V0.8.3</td>
-+ <td><a href="evtouch-0.8.3.tar.gz">evtouch-0.8.3.tar.gz</a></td>
-+ </tr>
-+ <tr>
-+ <td>Precompiled driver for X V0.8.1</td>
-+ <td><a href="evtouch-0.8.1.tar.gz">evtouch-0.8.1.tar.gz</a></td>
-+ </tr>
-+ <tr>
-+ <td>Precompiled driver for X V0.8.0</td>
-+ <td><a href="evtouch-0.8.0.tar.gz">evtouch-0.8.0.tar.gz</a></td>
-+ </tr>
-+ <tr>
-+ <td>X driver sources V0.8.6</td>
-+ <td><a href="xf86-input-evtouch-0.8.6.tar.bz2">xf86-input-evtouch-0.8.6.tar.bz2</a></td>
-+ </tr>
-+ <tr>
-+ <td>X driver sources V0.8.5</td>
-+ <td><a href="xf86-input-evtouch-0.8.5.tar.bz2">xf86-input-evtouch-0.8.5.tar.bz2</a></td>
-+ </tr>
-+ <tr>
-+ <td>X driver sources V0.8.4</td>
-+ <td><a href="xf86-input-evtouch-0.8.4.tar.bz2">xf86-input-evtouch-0.8.4.tar.bz2</a></td>
-+ </tr>
-+ <tr>
-+ <td>X driver sources V0.8.3</td>
-+ <td><a href="xf86-input-evtouch-0.8.3.tar.bz2">xf86-input-evtouch-0.8.3.tar.bz2</a></td>
-+ </tr>
-+ <tr>
-+ <td>X driver sources V0.8.1</td>
-+ <td><a href="xf86-input-evtouch-0.8.1.tar.bz2">xf86-input-evtouch-0.8.1.tar.bz2</a></td>
-+ </tr>
-+ <tr>
-+ <td>X driver sources V0.8.0</td>
-+ <td><a href="evtouch-0.8.0-src.tar.gz">evtouch-0.8.0-src.tar.gz</a></td>
-+ </tr>
-+</table>
-+<a href="evtouch_old.html">Older (obsolete) versions</a> of the evtouch-driver
-+can be downloaded <a href="./evtouch_old.html#download">here</a>
-+</body>
-+</html>
---- xf86-input-evtouch-0.8.8.orig/debian/patches/02-buttonless-device.patch
-+++ xf86-input-evtouch-0.8.8/debian/patches/02-buttonless-device.patch
-@@ -0,0 +1,86 @@
-+Index: xf86-input-evtouch-0.8.3.dirty/evtouch.c
-+===================================================================
-+--- xf86-input-evtouch-0.8.3.dirty.orig/evtouch.c 2007-02-19 18:28:41.749371445 +0100
-++++ xf86-input-evtouch-0.8.3.dirty/evtouch.c 2007-02-19 20:14:50.612312260 +0100
-+@@ -364,9 +364,15 @@ void EVTouchLBRBEvent(EVTouchPrivatePtr
-+ void EVTouchProcessKey(EVTouchPrivatePtr priv)
-+ {
-+ struct input_event *ev; /* packet being/just read */
-++ ev = &priv->ev;
-+
-+ DBGOUT(2, "EVTouch: %s\n", __FUNCTION__);
-+- ev = &priv->ev;
-++
-++ /* for buttonless devices no emulate3 is available,
-++ only go through the SM */
-++ if (priv->buttonless)
-++ return;
-++
-+ if ( (ev->code == BTN_LEFT) ||
-+ (ev->code == BTN_RIGHT) ||
-+ (ev->code == BTN_MIDDLE) ) {
-+@@ -688,6 +694,8 @@ static void ReadInput (LocalDevicePtr lo
-+ while (EVTouchGetPacket (priv) == Success)
-+ {
-+ ev = &priv->ev;
-++ DBGOUT(2, "EVTouch: %s type:%0.2x code: 0x%0.4x value:%d\n",
-++ __FUNCTION__, ev->type, ev->code, ev->value);
-+
-+ xf86XInputSetScreen(local,
-+ priv->screen_num,
-+@@ -708,7 +716,8 @@ static void ReadInput (LocalDevicePtr lo
-+ EVTouchProcessRel(priv);
-+ break;
-+ case EV_KEY:
-+- if (priv->ev.code == BTN_TOUCH) {
-++ if (priv->ev.code == BTN_TOUCH
-++ || priv->buttonless) {
-+ if (priv->ev.value == 1) {
-+ priv->touch_flags |= TOUCHED;
-+ DBGOUT(2, "EVTouch: TOUCHED\n");
-+Index: xf86-input-evtouch-0.8.3.dirty/libtouch.c
-+===================================================================
-+--- xf86-input-evtouch-0.8.3.dirty.orig/libtouch.c 2007-02-19 18:28:41.749371445 +0100
-++++ xf86-input-evtouch-0.8.3.dirty/libtouch.c 2007-02-19 20:02:36.070453105 +0100
-+@@ -320,6 +320,14 @@ static int handle_touched(LibTouchRecPtr
-+ static void enter_moving(LibTouchRecPtr priv)
-+ {
-+ disable_timers(priv);
-++ if (priv->pen == PEN_TOUCHED) {
-++ DBG(4, ErrorF("LibTouch: Issuing Button-press 1\n"));
-++ xf86PostButtonEvent(priv->local->dev, TRUE,
-++ 1, 1, 0, 2,
-++ priv->cur_x,
-++ priv->cur_y);
-++ priv->pressed_btn_stat |= 1 << 1;
-++ }
-+ }
-+
-+
-+@@ -336,13 +344,13 @@ static void enter_longtouched(LibTouchRe
-+ {
-+ disable_timers(priv);
-+ /* FIXME: Make Longtouch-Event configurable*/
-+- /* for now issue an LB down */
-+- DBG(4, ErrorF("LibTouch: Issuing Button-press 1\n"));
-++ /* for now issue an RB down */
-++ DBG(4, ErrorF("LibTouch: Issuing Button-press 3\n"));
-+ xf86PostButtonEvent(priv->local->dev, TRUE,
-+- 1, 1, 0, 2,
-++ 3, 1, 0, 2,
-+ priv->cur_x,
-+ priv->cur_y);
-+- priv->pressed_btn_stat |= 1 << 1;
-++ priv->pressed_btn_stat |= 1 << 3;
-+ }
-+
-+
-+@@ -515,7 +523,7 @@ static int handle_oneandahalftap(LibTouc
-+
-+ /* FIXME: Make OneAndHalf-Event configurable */
-+ /* for now RB down */
-+- DBG(4, ErrorF("LibTouch: Issuing Button-press 1\n"));
-++ DBG(4, ErrorF("LibTouch: Issuing Button-press 3\n"));
-+ xf86PostButtonEvent (priv->local->dev, TRUE,
-+ 3, 1, 0, 2,
-+ priv->cur_x,
---- xf86-input-evtouch-0.8.8.orig/debian/patches/20_fix_calibrate_submission_directions.patch
-+++ xf86-input-evtouch-0.8.8/debian/patches/20_fix_calibrate_submission_directions.patch
-@@ -0,0 +1,13 @@
-+Index: xf86-input-evtouch-0.8.8/calibrate.sh
-+===================================================================
-+--- xf86-input-evtouch-0.8.8.orig/calibrate.sh 2009-01-14 14:14:10.000000000 +0100
-++++ xf86-input-evtouch-0.8.8/calibrate.sh 2009-01-14 14:14:51.000000000 +0100
-+@@ -25,7 +25,7 @@
-+ FAILINFO="No evtouch capable device found, if you are sure you have \n\
-+ an evtouch capable touchscreen, please mail the \
-+ resulting file of the command \"lshal > evtouch_hal.out\" to the\n\
-+-ubuntu-mobile@lists.ubuntu.com mailing list, so support for your \
-++bug url https://bugs.launchpad.net/bugs/317094, so support for your \
-+ device can be added."
-+
-+ if [ -z "$UDI" ];then
---- xf86-input-evtouch-0.8.8.orig/debian/patches/05_build_with_1_4.patch
-+++ xf86-input-evtouch-0.8.8/debian/patches/05_build_with_1_4.patch
-@@ -0,0 +1,22 @@
-+Index: xserver-xorg-input-evtouch/evtouch.c
-+===================================================================
-+--- xserver-xorg-input-evtouch.orig/evtouch.c 2007-09-17 17:20:21.736761738 +0900
-++++ xserver-xorg-input-evtouch/evtouch.c 2007-09-17 17:31:22.274403633 +0900
-+@@ -492,9 +492,6 @@ DeviceOn (DeviceIntPtr dev)
-+
-+ priv->buffer = XisbNew(local->fd, 64);
-+
-+- DBG (9, XisbTrace (priv->buffer, 1));
-+-
-+-
-+ if (!priv->buffer)
-+ {
-+ xf86CloseSerial(local->fd);
-+@@ -1207,7 +1204,6 @@ EVTouchPreInit(InputDriverPtr drv, IDevP
-+ priv->diff[i][0], priv->diff[i][1]);
-+ }
-+
-+- xf86AlwaysCore(local, TRUE);
-+ priv->touch_flags = 0;
-+
-+ local->history_size = xf86SetIntOption( local->options, "HistorySize", 0 );
---- xf86-input-evtouch-0.8.8.orig/debian/patches/10_ev_calibrate_fixups.patch
-+++ xf86-input-evtouch-0.8.8/debian/patches/10_ev_calibrate_fixups.patch
-@@ -0,0 +1,55 @@
-+Index: xf86-input-evtouch-0.8.7/ev_calibrate.c
-+===================================================================
-+--- xf86-input-evtouch-0.8.7.orig/ev_calibrate.c 2008-09-25 01:13:32.000000000 +0200
-++++ xf86-input-evtouch-0.8.7/ev_calibrate.c 2008-09-25 01:13:43.000000000 +0200
-+@@ -198,7 +198,7 @@
-+ Pixmap cursor_pic;
-+ XColor cursor_fg, cursor_bg;
-+ XFontStruct* font_info;
-+- char* font_name = "*fixed*";
-++ char* font_name = "*freemono*";
-+ char str[256];
-+ unsigned int cursor_width, cursor_height;
-+ int hotspot_x, hotspot_y;
-+@@ -234,7 +234,7 @@
-+ unsigned long black_pixel;
-+
-+
-+- display = XOpenDisplay(":0");
-++ display = XOpenDisplay(getenv("DISPLAY"));
-+ if (display == NULL) {
-+ fprintf(stderr, "Cannot connect to X server %s\n", ":0");
-+ exit(-1);
-+@@ -553,7 +553,7 @@
-+ /*
-+ Put results to file and screen
-+ */
-+- out_file = fopen("out.txt", "w");
-++ out_file = fopen("/etc/evtouch/config", "w");
-+
-+
-+ /*
-+@@ -566,10 +566,10 @@
-+ min_max.max_x,
-+ min_max.max_y);
-+
-+- fprintf(out_file, " Option \"MinX\" \"%d\"\n", min_max.min_x);
-+- fprintf(out_file, " Option \"MinY\" \"%d\"\n", min_max.min_y);
-+- fprintf(out_file, " Option \"MaxX\" \"%d\"\n", min_max.max_x);
-+- fprintf(out_file, " Option \"MaxY\" \"%d\"\n", min_max.max_y);
-++ fprintf(out_file, "MINX=\"%d\"\n", min_max.min_x);
-++ fprintf(out_file, "MINY=\"%d\"\n", min_max.min_y);
-++ fprintf(out_file, "MAXX=\"%d\"\n", min_max.max_x);
-++ fprintf(out_file, "MAXY=\"%d\"\n", min_max.max_y);
-+
-+
-+ for (i=0; i<9; i++) {
-+@@ -602,7 +602,7 @@
-+ i, marker_coordinates[i][1]-click_coordinates[i][1]);
-+
-+
-+- fprintf(out_file, " Option \"x%d\" \"%d\"\n Option \"y%d\" \"%d\"\n",
-++ fprintf(out_file, "X%d=\"%d\"\nY%d=\"%d\"\n",
-+ i, marker_coordinates[i][0]-click_coordinates[i][0],
-+ i, marker_coordinates[i][1]-click_coordinates[i][1]);
-+ }
---- xf86-input-evtouch-0.8.8.orig/debian/patches/series
-+++ xf86-input-evtouch-0.8.8/debian/patches/series
-@@ -0,0 +1,11 @@
-+#02-buttonless-device.patch
-+#03_fix_compile_warns.patch
-+#04_include_xf86_ansic_h.patch
-+#05_build_with_1_4.patch
-+#06_xf86-input-evtouch-0.8.7-misc.patch
-+#07_random_fixes_for_06.patch
-+#08_fix_xf86memset.patch
-+#09_calibrate-script-halification.patch
-+#10_ev_calibrate_fixups.patch
-+20_fix_calibrate_submission_directions.patch
-+21_more_calibration_fixups.patch
---- xf86-input-evtouch-0.8.8.orig/debian/patches/06_xf86-input-evtouch-0.8.7-misc.patch
-+++ xf86-input-evtouch-0.8.8/debian/patches/06_xf86-input-evtouch-0.8.7-misc.patch
-@@ -0,0 +1,770 @@
-+#
-+# This patch is from http://www.postnuklear.de/xorg-patches/
-+#
-+# Description: This is a patch for the evtouch input driver (
-+# http://stz-softwaretechnik.com/~ke/touchscreen/evtouch.html).
-+# Changes (for full description see ChangeLog file after patching (-: ):
-+# o Changed code to compile a working driver for both XInput ABI 0.x and 2.0 (Xorg 1.4.0)
-+# o changed rotation (due to segfault on xorg + fbdev)
-+# o drag support
-+# o tap "tolerance"
-+# o added generic ts-adc touchscreen device to udev rules file
-+#
-+# Feel free to send comments, critics, suggestions to harryrat@postnuklear.de
-+# To apply simply change into the toplevel directory of the source to be modified and enter:
-+# patch -p1 < <PATH_TO_PATCH>
-+#
-+# All patches are available under the GNU GPL, I hope they might be useful for you (-:
-+# - Harald Radke
-+#
-+Index: xserver-xorg-input-evtouch/69-touchscreen.rules
-+===================================================================
-+--- xserver-xorg-input-evtouch.orig/69-touchscreen.rules 2008-02-02 21:49:20.783972805 +0900
-++++ xserver-xorg-input-evtouch/69-touchscreen.rules 2008-02-02 21:49:39.730979724 +0900
-+@@ -7,8 +7,11 @@
-+ # Name can be found in /proc/bus/input/devices ('cat /proc/bus/input/devices')
-+ #
-+
-+-# These are the touchscreens supported by kernel's "usbtouchscreen" module
-++# Generic ts-adc touchscreen modules
-++KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="ts-adc", SYMLINK+="input/evtouch_event"
-++
-+
-++# These are the touchscreens supported by kernel's "usbtouchscreen" module
-+ # eGalax Inc. USB TouchController)
-+ KERNEL=="event*", SUBSYSTEM=="input", ATTRS{idVendor}=="3823", ATTRS{idProduct}=="0001", SYMLINK+="input/evtouch_event"
-+ # eGalax Inc. USB TouchController)
-+Index: xserver-xorg-input-evtouch/ChangeLog
-+===================================================================
-+--- xserver-xorg-input-evtouch.orig/ChangeLog 2008-02-02 21:49:20.795972782 +0900
-++++ xserver-xorg-input-evtouch/ChangeLog 2008-02-02 21:49:39.730979724 +0900
-+@@ -1,3 +1,61 @@
-++0.8.7-HR *** Note this is not an official release but an "unauthorized
-++ *** fix version by me (Harald Radke - harryrat@postnuklear.de)
-++ -> Changed code to compile a working driver for both
-++ XInput ABI 0.x and 2.0 (Xorg 1.4.0)
-++ (test compile for 0.x still needs to be done)
-++ - evtouch.c:
-++ * capsulated xf86Post*Events and xf86InputSetScreen
-++ in functions where depending on the XINPUT ABI conversion
-++ is done or xf86 functions are directly called
-++ * xf86InitValuatorAxisStruct and xf86AlwaysCore() depending
-++ on ABI done
-++ - libtouch.h: passing xf86PostButtonEvent capsulation function
-++ to init function (same as in evtouch.c) to do proper button
-++ triggering
-++ -> Rotation:
-++ - added support for Option "Rotate" "UD" (upside down)
-++ in evtouch input section of xorg.conf
-++ - due to Segfault with (at least) fbdev video device, only
-++ evtouch "Rotate" option is taken into calculations for coords,
-++ meaning to get proper touchscreen behaviour on rotated X screens.
-++ same Rotate option as in video device section of xorg.conf has
-++ to be set in the evtouch section
-++ -> Drag support:
-++ Option "<STATE>_drag" "<BUTTON_ID>" has been added. When set,
-++ the handle_<STATE>() function triggers BUTTON_DOWN for Button <BUTTON_ID>
-++ before changing into S_MOVE state. Note that actually only
-++ Option "touched_drag" "<BUTTON_ID>" is implemented, rest is dummy
-++ (and doesn't make too much sense I guess) (-;
-++ -> tap "tolerance":
-++ introduce move_limit to evtouch.c as it is in libtouch.c, using it
-++ to discard ABS_X/Y position changes if they are inside move_limit
-++ around cur_x/y. this way pointer hopping can be avoided as well as
-++ proper touched_drag established
-++ - changes of cur_x/y are reported on EV_SYN in evtouch.c ReadInput() instead
-++ on EV_ABS
-++ -> added generic ts-adc touchscreen device to udev rules file
-++
-++ => Example for a Loox720 PDA setup in input section of xorg.conf:
-++ Section "InputDevice"
-++ Identifier "touchscreen"
-++ Driver "evtouch"
-++ Option "Device" "/dev/input/evtouch_event"
-++ Option "MinX" "434"
-++ Option "MinY" "333"
-++ Option "MaxX" "3643"
-++ Option "MaxY" "3804"
-++ Option "SwapX" "true"
-++ Option "longtouched_action" "down"
-++ Option "longtouched_button" "3"
-++ Option "maybetapped_action" "click"
-++ Option "maybetapped_button" "1"
-++ Option "touched_drag" "1"
-++ Option "oneandahalftap_button" "0"
-++ Option "TapTimer" "30"
-++ Option "LongtouchTimer" "500"
-++ Option "MoveLimit" "18"
-++ EndSection
-++
-+ 0.8.7
-+ - Added Elo Touchscreen to udev-rules (Stephen Webb)
-+ - Added "fix" for AMD64-crashes on touch (Martin Letenay)
-+Index: xserver-xorg-input-evtouch/evtouch.c
-+===================================================================
-+--- xserver-xorg-input-evtouch.orig/evtouch.c 2008-02-02 21:49:20.811973497 +0900
-++++ xserver-xorg-input-evtouch/evtouch.c 2008-02-02 21:49:39.734971242 +0900
-+@@ -182,6 +182,20 @@ static const char *default_options[] =
-+ static int
-+ ControlProc(LocalDevicePtr device, xDeviceCtl *ctrl);
-+
-++static void
-++PostMotionEvent(LocalDevicePtr local);
-++
-++static void
-++PostProximityEvent(LocalDevicePtr local,int is_in);
-++
-++static void
-++PostButtonEvent(LocalDevicePtr local, int button,
-++ int is_down, int x,int y);
-++
-++static void
-++InputSetScreen(LocalDevicePtr local);
-++
-++
-+ /*****************************************************************************
-+ * Function Definitions
-+ ****************************************************************************/
-+@@ -197,11 +211,10 @@ emulate3Timer(OsTimerPtr timer, CARD32 n
-+ LocalDevicePtr local = (LocalDevicePtr)_local;
-+ EVTouchPrivatePtr priv = (EVTouchPrivatePtr) local->private;
-+
-++
-+ sigstate = xf86BlockSIGIO();
-+
-+- xf86PostMotionEvent(local->dev, TRUE, 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-++ PostMotionEvent(local);
-+
-+ /*
-+ * Emit a button press -- release is handled in EVTouchLBRBEvent
-+@@ -209,31 +222,21 @@ emulate3Timer(OsTimerPtr timer, CARD32 n
-+ if ( ( priv->touch_flags & LB_STAT ) &&
-+ !( priv->touch_flags & RB_STAT ) ) {
-+ DBGOUT(2, "EVTouch: Left Press\n");
-+- xf86PostButtonEvent (local->dev, TRUE,
-+- 1, 1, 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-++ PostButtonEvent (local, 1, 1,priv->cur_x,priv->cur_y);
-+ }
-+
-+ if ( ( priv->touch_flags & RB_STAT ) &&
-+ !( priv->touch_flags & LB_STAT ) ) {
-+ DBGOUT(2, "EVTouch: Right Press\n");
-+- xf86PostButtonEvent (local->dev, TRUE,
-+- 3, 1, 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-+- }
-+-
-++ PostButtonEvent (local, 3, 1,priv->cur_x,priv->cur_y);
-++ }
-+ /*
-+ Handling "middle" button press
-+ */
-+ if ( ( priv->touch_flags & RB_STAT ) &&
-+ ( priv->touch_flags & LB_STAT ) ) {
-+ DBGOUT(2, "EVTouch: Middle Press\n");
-+- xf86PostButtonEvent (local->dev, TRUE,
-+- 2, 1, 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-++ PostButtonEvent (local, 2, 1,priv->cur_x,priv->cur_y);
-+ }
-+
-+ priv->emulate3_timer_expired = TRUE;
-+@@ -246,6 +249,7 @@ static void DoBtnAction(EVTouchPrivatePt
-+ {
-+ int btn = 0;
-+ LocalDevicePtr local = priv->local;
-++
-+ DBGOUT(2, "EVTouch: %s btn_count=%d\n", __FUNCTION__, priv->btn_count);
-+
-+ for (btn = 0; btn < priv->btn_count; btn++) {
-+@@ -262,12 +266,7 @@ static void DoBtnAction(EVTouchPrivatePt
-+ DBGOUT(2, "EVTouch: %s btn = %d action = %d\n",
-+ __FUNCTION__, btn,
-+ priv->btn_actions[btn].action);
-+-
-+- xf86PostButtonEvent (local->dev, TRUE, btn,
-+- priv->btn_actions[btn].action,
-+- 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-++ PostButtonEvent (local, btn, priv->btn_actions[btn].action,priv->cur_x,priv->cur_y);
-+
-+ priv->btn_actions[btn].do_it = 0;
-+ priv->btn_actions[btn].action = 0;
-+@@ -292,39 +291,32 @@ void EVTouchProcessAbs(EVTouchPrivatePtr
-+ ev = &priv->ev;
-+
-+ if ( (ev->code == ABS_X) || (ev->code == ABS_Z) ) {
-++ if ((priv->cur_x - ev->value < priv->move_limit)
-++ && (priv->cur_x - ev->value > -priv->move_limit))
-++ return;
-+ priv->cur_x = ev->value;
-+- libtouchSetXPos(priv->libtouch, priv->cur_x);
-++// libtouchSetXPos(priv->libtouch, priv->cur_x);
-+ }
-+
-+ if ( (ev->code == ABS_Y) || (ev->code == ABS_RX) ) {
-++ if ((priv->cur_y - ev->value < priv->move_limit)
-++ && (priv->cur_y - ev->value > -priv->move_limit))
-++ return;
-+ priv->cur_y = ev->value;
-+- libtouchSetYPos(priv->libtouch, priv->cur_y);
-++// libtouchSetYPos(priv->libtouch, priv->cur_y);
-+ }
-+
-+ if (ev->code == ABS_WHEEL) {
-+ LocalDevicePtr local = priv->local;
-+-
-+ if (ev->value > 0) {
-+ for (; ev->value > 0; ev->value--) {
-+- xf86PostButtonEvent (local->dev, TRUE,
-+- 4, 1, 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-+- xf86PostButtonEvent (local->dev, TRUE,
-+- 4, 0, 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-++ PostButtonEvent (local, 4,1,priv->cur_x,priv->cur_y);
-++ PostButtonEvent (local, 4,0,priv->cur_x,priv->cur_y);
-+ }
-+ } else if (ev->value < 0) {
-+ for (ev->value = -ev->value; ev->value > 0; ev->value--) {
-+- xf86PostButtonEvent (local->dev, TRUE,
-+- 5, 1, 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-+- xf86PostButtonEvent (local->dev, TRUE,
-+- 5, 0, 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-++ PostButtonEvent (local, 5,1,priv->cur_x,priv->cur_y);
-++ PostButtonEvent (local, 5,0,priv->cur_x,priv->cur_y);
-+ }
-+ }
-+ }
-+@@ -451,10 +443,7 @@ void EVTouchProcessKey(EVTouchPrivatePtr
-+ default:
-+ return;
-+ }
-+- xf86PostButtonEvent(local->dev, TRUE,
-+- btn, ev->value, 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-++ PostButtonEvent (local, btn, ev->value,priv->cur_x,priv->cur_y);
-+ #endif
-+
-+ return;
-+@@ -492,8 +481,8 @@ DeviceOn (DeviceIntPtr dev)
-+
-+ priv->buffer = XisbNew(local->fd, 64);
-+
-+- DBG (9, XisbTrace (priv->buffer, 1));
-+-
-++// breaks compilation
-++// DBG (9, XisbTrace (priv->buffer, 1));
-+
-+ if (!priv->buffer)
-+ {
-+@@ -637,8 +626,19 @@ DeviceInit (DeviceIntPtr dev)
-+ ErrorF ("Unable to allocate EVTouch touchscreen ValuatorClassDeviceStruct\n");
-+ return !Success;
-+ }
-+-
-+- xf86InitValuatorAxisStruct(dev, 0, priv->min_x, priv->max_x,
-++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
-++ xf86InitValuatorAxisStruct(dev, 0, 0, priv->screen_width,
-++ 1024,
-++ EV_AXIS_MIN_RES /* min_res */ ,
-++ EV_AXIS_MAX_RES /* max_res */ );
-++ xf86InitValuatorDefaults(dev, 0);
-++ xf86InitValuatorAxisStruct(dev, 1, 0, priv->screen_height,
-++ 1024,
-++ EV_AXIS_MIN_RES /* min_res */ ,
-++ EV_AXIS_MAX_RES /* max_res */ );
-++ xf86InitValuatorDefaults(dev, 1);
-++#else
-++ xf86InitValuatorAxisStruct(dev, 0, priv->min_x, priv->max_x,
-+ 1024,
-+ EV_AXIS_MIN_RES /* min_res */ ,
-+ EV_AXIS_MAX_RES /* max_res */ );
-+@@ -648,7 +648,7 @@ DeviceInit (DeviceIntPtr dev)
-+ EV_AXIS_MIN_RES /* min_res */ ,
-+ EV_AXIS_MAX_RES /* max_res */ );
-+ xf86InitValuatorDefaults(dev, 1);
-+-
-++#endif
-+ /* Initial position of pointer on screen: Centered */
-+ priv->cur_x=(priv->max_x - priv->min_x)/2;
-+ priv->cur_y=(priv->max_y - priv->min_y)/2;
-+@@ -777,14 +777,8 @@ static void ReadInput (LocalDevicePtr lo
-+ DBGOUT(2, "EVTouch: %s type:%0.2x code: 0x%0.4x value:%d\n",
-+ __FUNCTION__, ev->type, ev->code, ev->value);
-+
-+- xf86XInputSetScreen(local,
-+- priv->screen_num,
-+- priv->cur_x,
-+- priv->cur_y);
-+-
-+- xf86PostProximityEvent(local->dev, 1, 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-++ InputSetScreen(local);
-++ PostProximityEvent (local,1);
-+
-+ switch (ev->type) {
-+ case EV_ABS:
-+@@ -794,9 +788,7 @@ static void ReadInput (LocalDevicePtr lo
-+ EVTouchProcessRel(priv);
-+ break;
-+ case EV_KEY:
-+- xf86PostMotionEvent (local->dev, TRUE, 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-++ PostMotionEvent (local);
-+
-+ if (priv->ev.code == BTN_TOUCH) {
-+ if (priv->ev.value == 1) {
-+@@ -811,9 +803,8 @@ static void ReadInput (LocalDevicePtr lo
-+ EVTouchProcessKey(priv);
-+ break;
-+ case EV_SYN:
-+- xf86PostMotionEvent (local->dev, TRUE, 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-++ libtouchSetPos(priv->libtouch, priv->cur_x,priv->cur_y);
-++ PostMotionEvent (local);
-+
-+ if ( priv->touch_flags & TOUCHED )
-+ libtouchTriggerSM(priv->libtouch, PEN_TOUCHED);
-+@@ -902,7 +893,9 @@ ConvertProc ( LocalDevicePtr local,
-+
-+ EVTouchPrivatePtr priv = (EVTouchPrivatePtr) (local->private);
-+ ScrnInfoPtr pScrn = xf86Screens[priv->screen_num];
-+- Rotation rotation = RRGetRotation(pScrn->pScreen);
-++
-++// X Segfaults
-++// Rotation rotation = RRGetRotation(pScrn->pScreen);
-+
-+ DBGOUT(2, "EVTouch: FIRST: v0=%d v1=%d\n", v0, v1);
-+
-+@@ -921,15 +914,17 @@ ConvertProc ( LocalDevicePtr local,
-+ max_x = priv->max_x - priv->min_x;
-+ max_y = priv->max_y - priv->min_y;
-+
-+- if (priv->rotate == EV_ROTATE_NONE) {
-++
-++// if (priv->rotate == EV_ROTATE_NONE) {
-+ screen_width = pScrn->currentMode->HDisplay;
-+ screen_height = pScrn->currentMode->VDisplay;
-++/* Swapping is done below in Coords! Leave those to be able to calc correct mapping
-+ } else {
-+ screen_width = pScrn->currentMode->VDisplay;
-+ screen_height = pScrn->currentMode->HDisplay;
-+ }
-+
-+-
-++*/
-+ if (xc < (max_x / 2)) {
-+ /*
-+ left
-+@@ -1042,45 +1037,57 @@ ConvertProc ( LocalDevicePtr local,
-+
-+ int tmp = 0;
-+ /* rotation mixes x and y up a bit */
-+- if (priv->rotate == EV_ROTATE_CW) {
-++ switch(priv->rotate) {
-++ case EV_ROTATE_CW:
-+ tmp = xc;
-+ xc = yc;
-+ yc = screen_width - tmp;
-+- } else if (priv->rotate == EV_ROTATE_CCW) {
-++ break;
-++ case EV_ROTATE_CCW:
-+ tmp = xc;
-+ xc = screen_height - yc;
-+ yc = tmp;
-++ break;
-++ case EV_ROTATE_UD:
-++ xc = screen_width - xc;
-++ yc = screen_height - yc;
-++ break;
-++ default:
-++ break;
-+ }
-+
-+- switch (rotation) {
-+- case RR_Rotate_0:
-++/* X Segfaults on rotation setting
-++ switch (rotation) {
-++ case RR_Rotate_0:
-+ v0 = xc;
-+ v1 = yc;
-+- break;
-+- case RR_Rotate_180:
-+- v0 = screen_width - xc;
-+- v1 = screen_height - yc;
-+- break;
-+- case RR_Rotate_90:
-++ break;
-++ case RR_Rotate_180:
-++ v0 = screen_width - xc;
-++ v1 = screen_height - yc;
-++ break;
-++ case RR_Rotate_90:
-+ tmp = xc;
-+- v0 = screen_height - yc;
-++ v0 = screen_height - yc;
-+ v1 = tmp;
-+- break;
-+- case RR_Rotate_270:
-++ break;
-++ case RR_Rotate_270:
-+ tmp = xc;
-+- v0 = yc;
-+- v1 = screen_width - tmp;
-+- break;
-+- default:
-+- break;
-+- }
-++ v0 = yc;
-++ v1 = screen_width - tmp;
-++ break;
-++ default:
-++ break;
-++ }
-++
-++
-++*/
-+ }
-+
-+ DBGOUT(2, "EVTouch: FINAL: v0=%d v1=%d\n", v0, v1);
-+
-+- *x = v0;
-+- *y = v1;
-+-
-++ *x = xc;
-++ *y = yc;
-+ return (TRUE);
-+ }
-+
-+@@ -1133,8 +1140,9 @@ EVTouchPreInit(InputDriverPtr drv, IDevP
-+
-+ xf86OptionListReport(local->options);
-+
-++
-+ priv->libtouch = xcalloc(1, sizeof(LibTouchRec));
-+- libtouchInit(priv->libtouch, local);
-++ libtouchInit(priv->libtouch, local,PostButtonEvent);
-+
-+ priv->screen_num = xf86SetIntOption(local->options, "ScreenNumber", 0 );
-+
-+@@ -1164,9 +1172,9 @@ EVTouchPreInit(InputDriverPtr drv, IDevP
-+ timeo = xf86SetIntOption(local->options, "LongtouchTimer", 160);
-+ libtouchSetLongtouchTimeo(priv->libtouch, timeo);
-+
-+- libtouchSetMoveLimit(priv->libtouch,
-+- xf86SetIntOption( local->options,
-+- "MoveLimit", 180 ));
-++ priv->move_limit = xf86SetIntOption( local->options,
-++ "MoveLimit", 180 );
-++ libtouchSetMoveLimit(priv->libtouch, priv->move_limit);
-+
-+ priv->rotate = EV_ROTATE_NONE;
-+ s = xf86FindOptionValue(local->options, "Rotate");
-+@@ -1175,7 +1183,11 @@ EVTouchPreInit(InputDriverPtr drv, IDevP
-+ priv->rotate = EV_ROTATE_CW;
-+ } else if (xf86NameCmp(s, "CCW") == 0 ) {
-+ priv->rotate = EV_ROTATE_CCW;
-+- }
-++ } else if (xf86NameCmp(s, "UD") == 0 ) {
-++ priv->rotate = EV_ROTATE_UD;
-++ }
-++
-++
-+ }
-+
-+ if (priv->rotate == EV_ROTATE_NONE) {
-+@@ -1207,9 +1219,10 @@ EVTouchPreInit(InputDriverPtr drv, IDevP
-+ priv->diff[i][0], priv->diff[i][1]);
-+ }
-+
-++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0
-+ xf86AlwaysCore(local, TRUE);
-++#endif
-+ priv->touch_flags = 0;
-+-
-+ local->history_size = xf86SetIntOption( local->options, "HistorySize", 0 );
-+
-+ /* prepare to process touch packets */
-+@@ -1232,6 +1245,7 @@ EVTouchPreInit(InputDriverPtr drv, IDevP
-+
-+ xf86CloseSerial(local->fd);
-+ local->fd = -1;
-++
-+ return (local);
-+ }
-+
-+@@ -1243,3 +1257,58 @@ EVTouchPtrCtrl(DeviceIntPtr device, PtrC
-+ Ho Hum.
-+ */
-+ }
-++
-++
-++static void
-++PostMotionEvent(LocalDevicePtr local) {
-++int cur_x, cur_y;
-++EVTouchPrivatePtr priv = (EVTouchPrivatePtr) (local->private);
-++
-++ cur_x = priv->cur_x;
-++ cur_y = priv->cur_y;
-++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
-++ ConvertProc(local,0,2,priv->cur_x,priv->cur_y,0,0,0,0,&cur_x,&cur_y);
-++#endif
-++
-++xf86PostMotionEvent (local->dev, TRUE, 0, 2, cur_x, cur_y);
-++}
-++
-++static void
-++PostProximityEvent(LocalDevicePtr local, int is_in) {
-++int cur_x, cur_y;
-++EVTouchPrivatePtr priv = (EVTouchPrivatePtr) (local->private);
-++
-++ cur_x = priv->cur_x;
-++ cur_y = priv->cur_y;
-++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
-++ ConvertProc(local,0,2,priv->cur_x,priv->cur_y,0,0,0,0,&cur_x,&cur_y);
-++#endif
-++
-++xf86PostProximityEvent(local->dev, is_in, 0, 2, cur_x,cur_y);
-++}
-++
-++static void
-++PostButtonEvent(LocalDevicePtr local, int button, int is_down,int x, int y) {
-++EVTouchPrivatePtr priv = (EVTouchPrivatePtr) (local->private);
-++
-++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
-++ ConvertProc(local,0,2,x,y,0,0,0,0,&x,&y);
-++#endif
-++
-++xf86PostButtonEvent (local->dev, TRUE, button, is_down, 0, 2, x, y);
-++}
-++
-++
-++static void InputSetScreen(LocalDevicePtr local) {
-++int cur_x, cur_y;
-++EVTouchPrivatePtr priv = (EVTouchPrivatePtr) (local->private);
-++
-++ cur_x = priv->cur_x;
-++ cur_y = priv->cur_y;
-++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
-++ ConvertProc(local,0,2,priv->cur_x,priv->cur_y,0,0,0,0,&cur_x,&cur_y);
-++#endif
-++
-++xf86XInputSetScreen(local,priv->screen_num,cur_x,cur_y);
-++}
-++
-+Index: xserver-xorg-input-evtouch/evtouch.h
-+===================================================================
-+--- xserver-xorg-input-evtouch.orig/evtouch.h 2008-02-02 21:49:20.823984091 +0900
-++++ xserver-xorg-input-evtouch/evtouch.h 2008-02-02 21:49:39.734971242 +0900
-+@@ -42,6 +42,7 @@
-+ #define EV_ROTATE_NONE 0
-+ #define EV_ROTATE_CW 1
-+ #define EV_ROTATE_CCW 2
-++#define EV_ROTATE_UD 3
-+
-+ #define EV_AXIS_MIN_RES 0
-+ #define EV_AXIS_MAX_RES 1024
-+@@ -80,6 +81,7 @@ typedef struct _EVTouchPrivateRec
-+ int max_rel_y; /* Maximum y */
-+
-+ int drag_timer;
-++ int move_limit;
-+ Bool emulate3;
-+ int emulate3_timeout;
-+ OsTimerPtr emulate3_timer;
-+@@ -138,6 +140,7 @@ typedef struct _EVTouchPrivateRec
-+
-+ LibTouchRecPtr libtouch;
-+ LocalDevicePtr local;
-++
-+ } EVTouchPrivateRec, *EVTouchPrivatePtr;
-+
-+
-+Index: xserver-xorg-input-evtouch/libtouch.c
-+===================================================================
-+--- xserver-xorg-input-evtouch.orig/libtouch.c 2008-02-02 21:49:36.899983517 +0900
-++++ xserver-xorg-input-evtouch/libtouch.c 2008-02-02 21:49:39.734971242 +0900
-+@@ -52,6 +52,7 @@ typedef struct state {
-+ int (*handle_state)(LibTouchRecPtr priv);
-+ void (*action)(LibTouchRecPtr priv, int btn, int x, int y);
-+ int btn;
-++ int drag_btn;
-+ } state_t;
-+
-+
-+@@ -68,16 +69,14 @@ typedef enum states {
-+ static void btn_down_action(LibTouchRecPtr priv, int btn, int x, int y)
-+ {
-+ DBG(4, ErrorF("LibTouch: Issuing Button %d down\n", btn));
-+- xf86PostButtonEvent(priv->local->dev, TRUE,
-+- btn, 1, 0, 2, x, y);
-++ priv->post_button_proc(priv->local,btn, 1,x,y);
-+ priv->pressed_btn_stat |= 1 << btn;
-+ }
-+
-+ static void btn_up_action(LibTouchRecPtr priv, int btn, int x, int y)
-+ {
-+ DBG(4, ErrorF("LibTouch: Issuing Button %d up\n", btn));
-+- xf86PostButtonEvent(priv->local->dev, TRUE,
-+- btn, 0, 0, 2, x, y);
-++ priv->post_button_proc(priv->local,btn, 0,x,y);
-+ priv->pressed_btn_stat &= ~(1 << btn);
-+ }
-+
-+@@ -103,13 +102,13 @@ static int handle_oneandahalftap(LibTouc
-+ static void dump_configuration();
-+
-+ state_t state_ar[] = {
-+- {enter_untouched, handle_untouched, NULL, 0},
-+- {enter_touched, handle_touched, NULL, 0},
-+- {enter_longtouched, handle_longtouched, btn_down_action, 1},
-+- {enter_moving, handle_moving, NULL, 0},
-+- {enter_maybetap, handle_maybetap, btn_click_action, 1},
-+- {enter_oneandahalftap, handle_oneandahalftap, btn_down_action, 3},
-+- {NULL, NULL, NULL, -1},
-++ {enter_untouched, handle_untouched, NULL, 0,-1},
-++ {enter_touched, handle_touched, NULL, 0,-1},
-++ {enter_longtouched, handle_longtouched, btn_down_action, 1,-1},
-++ {enter_moving, handle_moving, NULL, 0,-1},
-++ {enter_maybetap, handle_maybetap, btn_click_action, 1,-1},
-++ {enter_oneandahalftap, handle_oneandahalftap, btn_down_action, 3,-1},
-++ {NULL, NULL, NULL, -1,-1},
-+ };
-+
-+ char *state_str[] = {
-+@@ -142,6 +141,16 @@ char *state_button_str[] = {
-+ NULL,
-+ };
-+
-++char *state_drag_str[] = {
-++ "untouched_drag",
-++ "touched_drag",
-++ "longtouched_drag",
-++ "moving_drag",
-++ "maybetapped_drag",
-++ "oneandahalftap_drag",
-++ NULL,
-++};
-++
-+ char *action_str[] = {
-+ "down",
-+ "up",
-+@@ -177,13 +186,13 @@ void libtouchSetMoveLimit(LibTouchRecPtr
-+ }
-+
-+
-+-void libtouchInit(LibTouchRecPtr libtouch, LocalDevicePtr local)
-++void libtouchInit(LibTouchRecPtr libtouch, LocalDevicePtr local,pointer post_button_proc)
-+ {
-+ int state_action_idx = 0;
-+ int state_button_idx = 0;
-++ int state_drag_idx = 0;
-+ int action_idx = 0;
-+ int btn;
-+-
-+ char *str;
-+
-+ xf86memset(libtouch, 0, sizeof(LibTouchRec));
-+@@ -193,6 +202,7 @@ void libtouchInit(LibTouchRecPtr libtouc
-+ libtouch->local = local;
-+ libtouch->move_limit = 30;
-+
-++ libtouch->post_button_proc = post_button_proc;
-+ /*
-+ Actions: up, down, click
-+
-+@@ -228,6 +238,11 @@ void libtouchInit(LibTouchRecPtr libtouc
-+ }
-+ }
-+
-++ /* parse dragging for the states, that is which button sent to be as down, when in state and about to change to MOVING state */
-++ for (state_drag_idx = 0; state_drag_str[state_drag_idx] != NULL; state_drag_idx++) {
-++ btn = xf86SetIntOption(local->options, state_drag_str[state_drag_idx], -1);
-++ if (btn != -1) state_ar[state_drag_idx].drag_btn = btn;
-++ }
-+
-+ dump_configuration();
-+ }
-+@@ -359,10 +374,7 @@ static void enter_untouched(LibTouchRecP
-+ for (i = 0; i < bit_size; i++)
-+ if (priv->pressed_btn_stat & (1 << i)) {
-+ DBG(4, ErrorF("LibTouch: Issuing Button-release %d\n", i));
-+- xf86PostButtonEvent(priv->local->dev, TRUE,
-+- i, 0, 0, 2,
-+- priv->cur_x,
-+- priv->cur_y);
-++ priv->post_button_proc(priv->local,i, 0,priv->cur_x,priv->cur_y);
-+ }
-+
-+ priv->pressed_btn_stat = 0;
-+@@ -445,6 +457,10 @@ static int handle_touched(LibTouchRecPtr
-+ if (priv->cur_x != priv->old_x) {
-+ dx = delta(priv->touch_x, priv->cur_x);
-+ if (dx > priv->move_limit) {
-++ if((state_ar[S_TOUCHED].drag_btn != -1) && (priv->touch_time != priv->now)){
-++ libtouchSetTime(priv, GetTimeInMillis());
-++ btn_down_action(priv, state_ar[S_TOUCHED].drag_btn, priv->cur_x,priv->cur_y);
-++ }
-+ return S_MOVING;
-+ }
-+ }
-+@@ -454,7 +470,10 @@ static int handle_touched(LibTouchRecPtr
-+ if (priv->cur_y != priv->old_y) {
-+ dy = delta(priv->touch_y, priv->cur_y);
-+ if (dy > priv->move_limit) {
-+- return S_MOVING;
-++ if((state_ar[S_TOUCHED].drag_btn != -1) && (priv->touch_time != priv->now)){
-++ libtouchSetTime(priv, GetTimeInMillis());
-++ btn_down_action(priv, state_ar[S_TOUCHED].drag_btn, priv->cur_x,priv->cur_y);
-++} return S_MOVING;
-+ }
-+ }
-+ }
-+@@ -500,7 +519,7 @@ static int handle_longtouched(LibTouchRe
-+ } else {
-+ if (priv->cur_x != priv->old_x) {
-+ dx = delta(priv->touch_x, priv->cur_x);
-+- if (dx > priv->move_limit)
-++ if (dx > priv->move_limit)
-+ rc = S_MOVING;
-+ }
-+
-+Index: xserver-xorg-input-evtouch/libtouch.h
-+===================================================================
-+--- xserver-xorg-input-evtouch.orig/libtouch.h 2008-02-02 21:49:36.899983517 +0900
-++++ xserver-xorg-input-evtouch/libtouch.h 2008-02-02 21:49:39.734971242 +0900
-+@@ -50,6 +50,7 @@ typedef struct _libtouch {
-+ CARD32 past;
-+ CARD32 now;
-+ LocalDevicePtr local;
-++ void (*post_button_proc)(LocalDevicePtr local,int button, int is_down,int x,int y);
-+ } LibTouchRec, *LibTouchRecPtr;
-+
-+ void libtouchSetDebugLevel(int level);
-+@@ -59,7 +60,7 @@ void libtouchSetOneandahalftapTimeo(LibT
-+ void libtouchSetTime(LibTouchRecPtr libtouch, CARD32 now);
-+ void libtouchSetMoveLimit(LibTouchRecPtr libtouch, int move_limit);
-+
-+-void libtouchInit(LibTouchRecPtr libtouch, LocalDevicePtr local);
-++void libtouchInit(LibTouchRecPtr libtouch, LocalDevicePtr local,pointer post_button_proc);
-+
-+ void libtouchSetPos(LibTouchRecPtr libtouch, int x, int y);
-+ void libtouchTriggerSM(LibTouchRecPtr libtouch, LibTouchState_t touch);
---- xf86-input-evtouch-0.8.8.orig/debian/patches/04_include_xf86_ansic_h.patch
-+++ xf86-input-evtouch-0.8.8/debian/patches/04_include_xf86_ansic_h.patch
-@@ -0,0 +1,23 @@
-+Index: xserver-xorg-input-evtouch/libtouch.c
-+===================================================================
-+--- xserver-xorg-input-evtouch.orig/libtouch.c 2007-09-11 23:00:20.762131559 +0900
-++++ xserver-xorg-input-evtouch/libtouch.c 2007-09-11 23:00:43.263413833 +0900
-+@@ -34,7 +34,6 @@
-+ #ifndef NEED_XF86_TYPES
-+ #define NEED_XF86_TYPES
-+ #endif
-+-#include <xf86_ansic.h>
-+ #include <xf86_OSproc.h>
-+ #include <xf86Xinput.h>
-+ #include <exevents.h>
-+Index: xserver-xorg-input-evtouch/libtouch.h
-+===================================================================
-+--- xserver-xorg-input-evtouch.orig/libtouch.h 2007-09-11 23:00:20.762131559 +0900
-++++ xserver-xorg-input-evtouch/libtouch.h 2007-09-11 23:00:51.263869754 +0900
-+@@ -1,5 +1,6 @@
-+ #ifndef _libtouch_H_
-+ #define _libtouch_H_
-++#include <xf86_ansic.h>
-+ #include <os.h>
-+
-+ #define TOUCHED 0x01
---- xf86-input-evtouch-0.8.8.orig/debian/patches/07_random_fixes_for_06.patch
-+++ xf86-input-evtouch-0.8.8/debian/patches/07_random_fixes_for_06.patch
-@@ -0,0 +1,523 @@
-+# Description:
-+# o Random whitespace fixes
-+# o uninitialized variables warning fix
-+#
-+Index: xserver-xorg-input-evtouch/evtouch.c
-+===================================================================
-+--- xserver-xorg-input-evtouch.orig/evtouch.c 2008-02-03 11:51:32.082972688 +0900
-++++ xserver-xorg-input-evtouch/evtouch.c 2008-02-03 11:51:32.106981862 +0900
-+@@ -1,6 +1,6 @@
-+ /*
-+ *
-+- * Copyright 2004 by Kenan Esau <kenan.esau@conan.de>, Baltmannsweiler,
-++ * Copyright 2004 by Kenan Esau <kenan.esau@conan.de>, Baltmannsweiler,
-+ * Germany.
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+@@ -182,17 +182,17 @@ static const char *default_options[] =
-+ static int
-+ ControlProc(LocalDevicePtr device, xDeviceCtl *ctrl);
-+
-+-static void
-++static void
-+ PostMotionEvent(LocalDevicePtr local);
-+
-+-static void
-++static void
-+ PostProximityEvent(LocalDevicePtr local,int is_in);
-+
-+-static void
-++static void
-+ PostButtonEvent(LocalDevicePtr local, int button,
-+ int is_down, int x,int y);
-+
-+-static void
-++static void
-+ InputSetScreen(LocalDevicePtr local);
-+
-+
-+@@ -216,7 +216,7 @@ emulate3Timer(OsTimerPtr timer, CARD32 n
-+
-+ PostMotionEvent(local);
-+
-+- /*
-++ /*
-+ * Emit a button press -- release is handled in EVTouchLBRBEvent
-+ */
-+ if ( ( priv->touch_flags & LB_STAT ) &&
-+@@ -241,11 +241,11 @@ emulate3Timer(OsTimerPtr timer, CARD32 n
-+
-+ priv->emulate3_timer_expired = TRUE;
-+ xf86UnblockSIGIO(sigstate);
-+-
-++
-+ return 0;
-+ }
-+
-+-static void DoBtnAction(EVTouchPrivatePtr priv)
-++static void DoBtnAction(EVTouchPrivatePtr priv)
-+ {
-+ int btn = 0;
-+ LocalDevicePtr local = priv->local;
-+@@ -253,7 +253,7 @@ static void DoBtnAction(EVTouchPrivatePt
-+ DBGOUT(2, "EVTouch: %s btn_count=%d\n", __FUNCTION__, priv->btn_count);
-+
-+ for (btn = 0; btn < priv->btn_count; btn++) {
-+- DBGOUT(9, "EVTouch: %s do_it = %d \n",
-++ DBGOUT(9, "EVTouch: %s do_it = %d \n",
-+ __FUNCTION__, priv->btn_actions[btn].do_it);
-+ if (priv->btn_actions[btn].do_it != 0) {
-+ if (priv->emulate3_timer != NULL)
-+@@ -263,10 +263,10 @@ static void DoBtnAction(EVTouchPrivatePt
-+ priv->emulate3_timer_expired = FALSE;
-+ }
-+
-+- DBGOUT(2, "EVTouch: %s btn = %d action = %d\n",
-+- __FUNCTION__, btn,
-++ DBGOUT(2, "EVTouch: %s btn = %d action = %d\n",
-++ __FUNCTION__, btn,
-+ priv->btn_actions[btn].action);
-+- PostButtonEvent (local, btn, priv->btn_actions[btn].action,priv->cur_x,priv->cur_y);
-++ PostButtonEvent (local, btn, priv->btn_actions[btn].action,priv->cur_x,priv->cur_y);
-+
-+ priv->btn_actions[btn].do_it = 0;
-+ priv->btn_actions[btn].action = 0;
-+@@ -318,7 +318,7 @@ void EVTouchProcessAbs(EVTouchPrivatePtr
-+ PostButtonEvent (local, 5,1,priv->cur_x,priv->cur_y);
-+ PostButtonEvent (local, 5,0,priv->cur_x,priv->cur_y);
-+ }
-+- }
-++ }
-+ }
-+ }
-+
-+@@ -337,7 +337,7 @@ void EVTouchProcessRel(EVTouchPrivatePtr
-+ if (priv->cur_x < priv->min_x)
-+ priv->cur_x = priv->min_x;
-+ return;
-+- }
-++ }
-+ if ( ev->code == REL_Y ) {
-+ priv->cur_y += ev->value;
-+ if (priv->cur_y > priv->max_y)
-+@@ -346,7 +346,7 @@ void EVTouchProcessRel(EVTouchPrivatePtr
-+ priv->cur_y = priv->min_y;
-+ return;
-+ }
-+-
-++
-+ libtouchSetPos(priv->libtouch, priv->cur_x, priv->cur_y);
-+ }
-+
-+@@ -363,12 +363,12 @@ void EVTouchLBRBEvent(EVTouchPrivatePtr
-+
-+ if (priv->emulate3) {
-+ if ( (ev->value==1) && (priv->emulate3_timer==NULL) )
-+- priv->emulate3_timer = TimerSet(priv->emulate3_timer,
-++ priv->emulate3_timer = TimerSet(priv->emulate3_timer,
-+ 0,
-+ priv->emulate3_timeout,
-+ emulate3Timer,
-+ local);
-+-
-++
-+ if ( (ev->value == 1) && (ev->code == BTN_LEFT) ) {
-+ priv->touch_flags |= LB_STAT;
-+ }
-+@@ -376,8 +376,8 @@ void EVTouchLBRBEvent(EVTouchPrivatePtr
-+ priv->touch_flags |= RB_STAT;
-+ }
-+
-+- if ( (ev->value == 0) &&
-+- (priv->touch_flags & RB_STAT) &&
-++ if ( (ev->value == 0) &&
-++ (priv->touch_flags & RB_STAT) &&
-+ (priv->touch_flags & LB_STAT) ) {
-+ DBGOUT(2, "EVTouch: Middle Release\n");
-+ priv->touch_flags &= ~LB_STAT;
-+@@ -393,7 +393,7 @@ void EVTouchLBRBEvent(EVTouchPrivatePtr
-+ DBGOUT(2, "EVTouch: Right Release\n");
-+ priv->touch_flags &= ~RB_STAT;
-+ SetBtnAction(priv, 3, BTN_RELEASE);
-+- }
-++ }
-+ } else {
-+ if (ev->code == BTN_LEFT) {
-+ SetBtnAction(priv, 1, ev->value);
-+@@ -418,11 +418,11 @@ void EVTouchProcessKey(EVTouchPrivatePtr
-+
-+ DBGOUT(2, "EVTouch: %s\n", __FUNCTION__);
-+ ev = &priv->ev;
-+- if ( (ev->code == BTN_LEFT) ||
-++ if ( (ev->code == BTN_LEFT) ||
-+ (ev->code == BTN_RIGHT) ||
-+ (ev->code == BTN_MIDDLE) ) {
-+
-+- /* give lb and rb-events some special treatment
-++ /* give lb and rb-events some special treatment
-+ (emulate3 or not, ...) */
-+ EVTouchLBRBEvent(priv);
-+ return;
-+@@ -468,7 +468,7 @@ DeviceOn (DeviceIntPtr dev)
-+ {
-+ LocalDevicePtr local = (LocalDevicePtr) dev->public.devicePrivate;
-+ EVTouchPrivatePtr priv = (EVTouchPrivatePtr) (local->private);
-+-
-++
-+ local->fd = xf86OpenSerial(local->options);
-+
-+ DBGOUT(2, "EVTouch: %s\n", __FUNCTION__ );
-+@@ -484,7 +484,7 @@ DeviceOn (DeviceIntPtr dev)
-+ // breaks compilation
-+ // DBG (9, XisbTrace (priv->buffer, 1));
-+
-+- if (!priv->buffer)
-++ if (!priv->buffer)
-+ {
-+ xf86CloseSerial(local->fd);
-+ local->fd = -1;
-+@@ -526,7 +526,7 @@ DeviceOff (DeviceIntPtr dev)
-+ DBGOUT(2, "EVTouch: %s\n", __FUNCTION__ );
-+
-+ if (local->fd != -1)
-+- {
-++ {
-+ ioctl(local->fd, EVIOCGRAB, (void *)0);
-+ xf86RemoveEnabledDevice (local);
-+ if (priv->buffer)
-+@@ -564,7 +564,7 @@ DeviceInit (DeviceIntPtr dev)
-+
-+ priv->btn_count = EV_MAX_BUTTONS;
-+
-+- /*
-++ /*
-+ * these have to be here instead of in the SetupProc, because when the
-+ * SetupProc is run at server startup, screenInfo is not setup yet
-+ */
-+@@ -574,9 +574,9 @@ DeviceInit (DeviceIntPtr dev)
-+ priv->screen_height = pScrn->virtualY;
-+ priv->pViewPort_X0 = &(pScrn->frameX0); /* initialize the pointers to the viewport coords */
-+ if ( (priv->screen_width != priv->phys_width) ||
-+- (priv->screen_height != priv->phys_height) )
-++ (priv->screen_height != priv->phys_height) )
-+ priv->virtual = 1;
-+- else
-++ else
-+ priv->virtual = 0;
-+
-+ priv->pViewPort_Y0 = &(pScrn->frameY0);
-+@@ -591,24 +591,24 @@ DeviceInit (DeviceIntPtr dev)
-+ DBGOUT(2, "EVTouch: MaxValue H,V: %d %d\n", pScrn->maxHValue, pScrn->maxVValue);
-+
-+ priv->screen_width = screenInfo.screens[priv->screen_num]->width;
-+- priv->screen_height = screenInfo.screens[priv->screen_num]->height;
-++ priv->screen_height = screenInfo.screens[priv->screen_num]->height;
-+
-+- /*
-++ /*
-+ * Device reports button press for 5 buttons.
-+ */
-+ if (InitButtonClassDeviceStruct (dev, EV_MAX_BUTTONS, map) == FALSE)
-+ {
-+ ErrorF("Unable to allocate EVTouch touchscreen ButtonClassDeviceStruct\n");
-+ return BadAlloc;
-+- }
-++ }
-+
-+- DBGOUT(2, "EVTouch: %s btn_count=%d\n", __FUNCTION__,
-++ DBGOUT(2, "EVTouch: %s btn_count=%d\n", __FUNCTION__,
-+ priv->btn_count);
-+ priv->btn_actions = xcalloc(priv->btn_count, sizeof(BtnAction));
-+- xf86memset(priv->btn_actions, 0,
-++ xf86memset(priv->btn_actions, 0,
-+ priv->btn_count * sizeof(BtnAction));
-+-
-+- DBGOUT(2, "EVTouch: %s btn_count=%d\n", __FUNCTION__,
-++
-++ DBGOUT(2, "EVTouch: %s btn_count=%d\n", __FUNCTION__,
-+ priv->btn_count);
-+
-+ if (InitFocusClassDeviceStruct(dev) == FALSE) {
-+@@ -616,7 +616,7 @@ DeviceInit (DeviceIntPtr dev)
-+ return !Success;
-+ }
-+
-+- /*
-++ /*
-+ * Device reports motions on 2 axes in absolute coordinates.
-+ * Axes min and max values are reported in raw coordinates.
-+ */
-+@@ -654,7 +654,7 @@ DeviceInit (DeviceIntPtr dev)
-+ priv->cur_y=(priv->max_y - priv->min_y)/2;
-+ libtouchSetPos(priv->libtouch, priv->cur_x, priv->cur_y);
-+
-+-
-++
-+ if (InitProximityClassDeviceStruct (dev) == FALSE)
-+ {
-+ ErrorF ("Unable to allocate EVTouch touchscreen ProximityClassDeviceStruct\n");
-+@@ -667,7 +667,7 @@ DeviceInit (DeviceIntPtr dev)
-+ return !Success;
-+ }
-+
-+- /*
-++ /*
-+ * Allocate the motion events buffer.
-+ */
-+ xf86MotionHistoryAllocate (local);
-+@@ -748,7 +748,7 @@ EVTouchGetPacket (EVTouchPrivatePtr priv
-+ if (sizeof(priv->ev) == count) {
-+ count = 0;
-+ EVTouchDumpPacketToLog(priv);
-+-
-++
-+ return Success;
-+ }
-+ }
-+@@ -764,7 +764,7 @@ static void ReadInput (LocalDevicePtr lo
-+
-+ EVTouchPrivatePtr priv = (EVTouchPrivatePtr) (local->private);
-+
-+- /*
-++ /*
-+ * set blocking to -1 on the first call because we know there is data to
-+ * read. Xisb automatically clears it after one successful read so that
-+ * succeeding reads are preceeded buy a select with a 0 timeout to prevent
-+@@ -815,7 +815,7 @@ static void ReadInput (LocalDevicePtr lo
-+ break;
-+ }
-+
-+- DBGOUT( 2, "EVTouch: setting (x/y)=(%d/%d)\n",
-++ DBGOUT( 2, "EVTouch: setting (x/y)=(%d/%d)\n",
-+ priv->cur_x, priv->cur_y);
-+
-+ }
-+@@ -855,7 +855,7 @@ static int
-+ SwitchMode (ClientPtr client, DeviceIntPtr dev, int mode)
-+ {
-+ DBGOUT(2, "EVTouch: %s\n", __FUNCTION__);
-+-
-++
-+ return (!Success);
-+ }
-+
-+@@ -884,19 +884,20 @@ ConvertProc ( LocalDevicePtr local,
-+ float dx = 0, dy = 0;
-+
-+ int max_x, max_y;
-+- int xc, yc;
-++ int xc = 0, yc = 0;
-+ int screen_width = 0;
-+ int screen_height = 0;
-+ #ifdef EVDBG
-+ int i = 0;
-+ #endif
-+
-+- EVTouchPrivatePtr priv = (EVTouchPrivatePtr) (local->private);
-++ EVTouchPrivatePtr priv = (EVTouchPrivatePtr) (local->private);
-+ ScrnInfoPtr pScrn = xf86Screens[priv->screen_num];
-+
-+ // X Segfaults
-+-// Rotation rotation = RRGetRotation(pScrn->pScreen);
-++ Rotation rotation = RRGetRotation(pScrn->pScreen);
-+
-++ DBGOUT(2, "EVTouch: RRRotation=%d\n", rotation);
-+ DBGOUT(2, "EVTouch: FIRST: v0=%d v1=%d\n", v0, v1);
-+
-+ /*correction of raw coordinates*/
-+@@ -910,21 +911,20 @@ ConvertProc ( LocalDevicePtr local,
-+ DBGOUT(2, "EVTouch: Scaling coordinates\n");
-+ xc = v0 - priv->min_x;
-+ yc = v1 - priv->min_y;
-+-
-++
-+ max_x = priv->max_x - priv->min_x;
-+ max_y = priv->max_y - priv->min_y;
-+
-+
-+-// if (priv->rotate == EV_ROTATE_NONE) {
-++ if (priv->rotate == EV_ROTATE_NONE) {
-+ screen_width = pScrn->currentMode->HDisplay;
-+ screen_height = pScrn->currentMode->VDisplay;
-+-/* Swapping is done below in Coords! Leave those to be able to calc correct mapping
-++/* Swapping is done below in Coords! Leave those to be able to calc correct mapping */
-+ } else {
-+ screen_width = pScrn->currentMode->VDisplay;
-+ screen_height = pScrn->currentMode->HDisplay;
-+ }
-+
-+-*/
-+ if (xc < (max_x / 2)) {
-+ /*
-+ left
-+@@ -942,7 +942,7 @@ ConvertProc ( LocalDevicePtr local,
-+ (float)(cx[0] * cy[0] * priv->diff[0][0]) +
-+ (float)(cx[1] * cy[1] * priv->diff[4][0]) +
-+ (float)(cx[0] * cy[1] * priv->diff[3][0]));
-+-
-++
-+ dy = ((float) (cx[1] * cy[0] * priv->diff[1][1]) +
-+ (float)(cx[0] * cy[0] * priv->diff[0][1]) +
-+ (float)(cx[1] * cy[1] * priv->diff[4][1]) +
-+@@ -961,7 +961,7 @@ ConvertProc ( LocalDevicePtr local,
-+ (float)(cx[0] * cy[0] * priv->diff[3][0]) +
-+ (float)(cx[1] * cy[1] * priv->diff[7][0]) +
-+ (float)(cx[0] * cy[1] * priv->diff[6][0]));
-+-
-++
-+ dy = ((float) (cx[1] * cy[0] * priv->diff[4][1]) +
-+ (float)(cx[0] * cy[0] * priv->diff[3][1]) +
-+ (float)(cx[1] * cy[1] * priv->diff[7][1]) +
-+@@ -985,7 +985,7 @@ ConvertProc ( LocalDevicePtr local,
-+ (float)(cx[0] * cy[0] * priv->diff[1][0]) +
-+ (float)(cx[1] * cy[1] * priv->diff[5][0]) +
-+ (float)(cx[0] * cy[1] * priv->diff[4][0]));
-+-
-++
-+ dy = ((float) (cx[1] * cy[0] * priv->diff[2][1]) +
-+ (float)(cx[0] * cy[0] * priv->diff[1][1]) +
-+ (float)(cx[1] * cy[1] * priv->diff[5][1]) +
-+@@ -1004,7 +1004,7 @@ ConvertProc ( LocalDevicePtr local,
-+ (float)(cx[0] * cy[0] * priv->diff[4][0]) +
-+ (float)(cx[1] * cy[1] * priv->diff[8][0]) +
-+ (float)(cx[0] * cy[1] * priv->diff[7][0]));
-+-
-++
-+ dy = ((float) (cx[1] * cy[0] * priv->diff[5][1]) +
-+ (float)(cx[0] * cy[0] * priv->diff[4][1]) +
-+ (float)(cx[1] * cy[1] * priv->diff[8][1]) +
-+@@ -1014,12 +1014,12 @@ ConvertProc ( LocalDevicePtr local,
-+
-+
-+ #ifdef EVDBG
-+- for (i=0; i<3; i++)
-++ for (i=0; i<3; i++)
-+ xf86ErrorFVerb(2, "cx[%d]=%f cy[%d]=%f\n", i, cx[i]
-+ ,i, cy[i]);
-+-
-+- DBGOUT(2, "EVTouch: ViewPort_X0=%d ViewPort_Y0=%d\n",
-+- *(priv->pViewPort_X0),
-++
-++ DBGOUT(2, "EVTouch: ViewPort_X0=%d ViewPort_Y0=%d\n",
-++ *(priv->pViewPort_X0),
-+ *(priv->pViewPort_Y0));
-+ DBGOUT(2, "EVTouch: dx=%f dy=%f\n", dx, dy);
-+ #endif
-+@@ -1030,7 +1030,7 @@ ConvertProc ( LocalDevicePtr local,
-+ if (priv->swap_y == TRUE)
-+ yc = screen_height - yc;
-+
-+- /* ususally we DON'T swap x -- but if swap_x is 1
-++ /* ususally we DON'T swap x -- but if swap_x is 1
-+ => go on and swap */
-+ if (priv->swap_x == TRUE)
-+ xc = screen_width - xc;
-+@@ -1056,7 +1056,7 @@ ConvertProc ( LocalDevicePtr local,
-+ break;
-+ }
-+
-+-/* X Segfaults on rotation setting
-++/* X Segfaults on rotation setting */
-+ switch (rotation) {
-+ case RR_Rotate_0:
-+ v0 = xc;
-+@@ -1080,14 +1080,12 @@ ConvertProc ( LocalDevicePtr local,
-+ break;
-+ }
-+
-+-
-+-*/
-+ }
-+
-+ DBGOUT(2, "EVTouch: FINAL: v0=%d v1=%d\n", v0, v1);
-+
-+- *x = xc;
-+- *y = yc;
-++ *x = v0;
-++ *y = v1;
-+ return (TRUE);
-+ }
-+
-+@@ -1160,7 +1158,7 @@ EVTouchPreInit(InputDriverPtr drv, IDevP
-+ priv->button_number = xf86SetIntOption(local->options, "ButtonNumber", 2 );
-+
-+ priv->emulate3 = xf86SetBoolOption(local->options, "Emulate3Buttons", TRUE);
-+- priv->emulate3_timeout = xf86SetIntOption(local->options,
-++ priv->emulate3_timeout = xf86SetIntOption(local->options,
-+ "Emulate3Timeout", 50);
-+
-+ debug_level = xf86SetIntOption(local->options, "DebugLevel", 0);
-+@@ -1180,33 +1178,33 @@ EVTouchPreInit(InputDriverPtr drv, IDevP
-+ s = xf86FindOptionValue(local->options, "Rotate");
-+ if (s) {
-+ if (xf86NameCmp(s, "CW") == 0) {
-+- priv->rotate = EV_ROTATE_CW;
-++ priv->rotate = EV_ROTATE_CW;
-+ } else if (xf86NameCmp(s, "CCW") == 0 ) {
-+ priv->rotate = EV_ROTATE_CCW;
-+ } else if (xf86NameCmp(s, "UD") == 0 ) {
-+ priv->rotate = EV_ROTATE_UD;
-+ }
-+
-+-
-++
-+ }
-+
-+ if (priv->rotate == EV_ROTATE_NONE) {
-+ priv->max_rel_x = priv->max_x;
-+ priv->max_rel_y = priv->max_y;
-+ priv->min_rel_x = priv->min_x;
-+- priv->min_rel_y = priv->min_y;
-++ priv->min_rel_y = priv->min_y;
-+ } else {
-+ priv->max_rel_x = priv->max_y;
-+ priv->max_rel_y = priv->max_x;
-+ priv->min_rel_x = priv->min_y;
-+- priv->min_rel_y = priv->min_x;
-++ priv->min_rel_y = priv->min_x;
-+ }
-+
-+ priv->swap_y = xf86SetBoolOption(local->options, "SwapY", FALSE);
-+ priv->swap_x = xf86SetBoolOption(local->options, "SwapX", FALSE);
-+
-+- /*
-+- get calibration parameters from XF86Config
-++ /*
-++ get calibration parameters from XF86Config
-+ */
-+ for (i = 0; i < 9; i++){
-+ sprintf(tmp_str, "x%d", i);
-+@@ -1215,10 +1213,10 @@ EVTouchPreInit(InputDriverPtr drv, IDevP
-+ sprintf(tmp_str, "y%d", i);
-+ priv->diff[i][1] = xf86SetIntOption( local->options,
-+ tmp_str, 0 );
-+- DBGOUT(2, "(diff[%d][0]/diff[%d][1])=(%d/%d)\n", i, i,
-++ DBGOUT(2, "(diff[%d][0]/diff[%d][1])=(%d/%d)\n", i, i,
-+ priv->diff[i][0], priv->diff[i][1]);
-+ }
-+-
-++
-+ #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0
-+ xf86AlwaysCore(local, TRUE);
-+ #endif
-+@@ -1228,9 +1226,9 @@ EVTouchPreInit(InputDriverPtr drv, IDevP
-+ /* prepare to process touch packets */
-+ EVTouchNewPacket (priv);
-+
-+- /*
-++ /*
-+ if started in calibration-mode:
-+- - open named pipe
-++ - open named pipe
-+ */
-+ if (priv->calibrate) {
-+ priv->fifo = open("/tmp/ev_calibrate", O_RDWR, 0);
-+@@ -1252,7 +1250,7 @@ EVTouchPreInit(InputDriverPtr drv, IDevP
-+ static void
-+ EVTouchPtrCtrl(DeviceIntPtr device, PtrCtrl *ctrl)
-+ {
-+- /* I have no clue what this does, except that registering it stops the
-++ /* I have no clue what this does, except that registering it stops the
-+ X server segfaulting in ProcGetPointerMapping()
-+ Ho Hum.
-+ */
---- xf86-input-evtouch-0.8.8.orig/debian/patches/21_more_calibration_fixups.patch
-+++ xf86-input-evtouch-0.8.8/debian/patches/21_more_calibration_fixups.patch
-@@ -0,0 +1,33 @@
-+diff -u xf86-input-evtouch-0.8.8/evtouch.c xf86-input-evtouch-0.8.8/evtouch.c
-+--- xf86-input-evtouch-0.8.8/evtouch.c
-++++ xf86-input-evtouch-0.8.8/evtouch.c
-+@@ -305,7 +305,7 @@
-+ }
-+
-+ if (pos_changed == 1) {
-+-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
-++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 2
-+ ConvertProc(priv->local, 0, 2,
-+ priv->raw_x, priv->raw_y,
-+ 0, 0, 0, 0,
-+@@ -369,7 +369,7 @@
-+ priv->raw_y = priv->min_y;
-+ }
-+
-+-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
-++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 2
-+ ConvertProc(priv->local, 0, 2,
-+ priv->raw_x, priv->raw_y,
-+ 0, 0, 0, 0,
-+diff -u xf86-input-evtouch-0.8.8/debian/changelog xf86-input-evtouch-0.8.8/debian/changelog
-+--- xf86-input-evtouch-0.8.8.orig/ev_calibrate.c
-++++ xf86-input-evtouch-0.8.8/ev_calibrate.c
-+@@ -218,7 +218,7 @@
-+ int cap_style = CapButt; /* style of the line's edje and */
-+ int join_style = JoinBevel; /* joined lines. */
-+
-+- int event_mask = ExposureMask | ButtonReleaseMask | PointerMotionMask | KeyPressMask;
-++ int event_mask = ExposureMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | KeyPressMask;
-+
-+ int depth;
-+ int screen_num;
---- xf86-input-evtouch-0.8.8.orig/debian/patches/08_fix_xf86memset.patch
-+++ xf86-input-evtouch-0.8.8/debian/patches/08_fix_xf86memset.patch
-@@ -0,0 +1,35 @@
-+Index: xf86-input-evtouch-0.8.7/evtouch.c
-+===================================================================
-+--- xf86-input-evtouch-0.8.7.orig/evtouch.c 2008-08-07 11:33:52.000000000 +0300
-++++ xf86-input-evtouch-0.8.7/evtouch.c 2008-08-07 11:33:52.000000000 +0300
-+@@ -605,7 +605,7 @@
-+ DBGOUT(2, "EVTouch: %s btn_count=%d\n", __FUNCTION__,
-+ priv->btn_count);
-+ priv->btn_actions = xcalloc(priv->btn_count, sizeof(BtnAction));
-+- xf86memset(priv->btn_actions, 0,
-++ memset(priv->btn_actions, 0,
-+ priv->btn_count * sizeof(BtnAction));
-+
-+ DBGOUT(2, "EVTouch: %s btn_count=%d\n", __FUNCTION__,
-+@@ -708,7 +708,7 @@
-+ static void
-+ EVTouchNewPacket (EVTouchPrivatePtr priv)
-+ {
-+- xf86memset(&priv->ev, 0, sizeof(struct input_event));
-++ memset(&priv->ev, 0, sizeof(struct input_event));
-+ priv->packeti = 0;
-+ priv->binary_pkt = FALSE;
-+ }
-+Index: xf86-input-evtouch-0.8.7/libtouch.c
-+===================================================================
-+--- xf86-input-evtouch-0.8.7.orig/libtouch.c 2008-08-07 11:34:37.000000000 +0300
-++++ xf86-input-evtouch-0.8.7/libtouch.c 2008-08-07 11:35:05.000000000 +0300
-+@@ -195,7 +195,7 @@
-+ int btn;
-+ char *str;
-+
-+- xf86memset(libtouch, 0, sizeof(LibTouchRec));
-++ memset(libtouch, 0, sizeof(LibTouchRec));
-+
-+ libtouch->now = GetTimeInMillis();
-+ libtouch->past = libtouch->now;
---- xf86-input-evtouch-0.8.8.orig/debian/patches/09_calibrate-script-halification.patch
-+++ xf86-input-evtouch-0.8.8/debian/patches/09_calibrate-script-halification.patch
-@@ -0,0 +1,87 @@
-+Index: xf86-input-evtouch-0.8.7/calibrate.sh
-+===================================================================
-+--- xf86-input-evtouch-0.8.7.orig/calibrate.sh 2008-09-26 00:58:00.000000000 +0200
-++++ xf86-input-evtouch-0.8.7/calibrate.sh 2008-09-26 00:59:37.000000000 +0200
-+@@ -2,9 +2,58 @@
-+ XINIT=`which xinit`
-+ XSERVER=`which X`
-+ EVCALIBRATE=`which ev_calibrate || echo ./ev_calibrate`
-++UDI=$(hal-find-by-property --key input.x11_driver --string evtouch)
-++MYDPY=":1.0"
-++ZENITY=`which zenity`
-++KDIALOG=`which kdialog`
-++XDIALOG=`which Xdialog`
-++
-++INFO="You have selected to (re)calibrate your touchscreen.\n\n\
-++Move your pen around all edges on the following screen.\n\n\
-++If you are done and touched all edges, hit the enter key and wait until \
-++the top left crosshair turns red.\nOnce you tap the red crosshair, \
-++the next one will turn red going from the top left to the \
-++bottom right.\nIf you miss a tap, the right mouse button will \
-++take you back one step.\n\n\
-++If you tapped the last (bottom right) crosshair, the program will \
-++return to your session. Note that changes only take effect after \
-++restarting the session."
-++
-++RESTARTINFO="Touchscreen calibration done\nPlease restart your \
-++session to \nmake the changes take effect"
-++
-++FAILINFO="No evtouch capable device found, if you are sure you have \n\
-++an evtouch capable touchscreen, please mail the \
-++resulting file of the command \"lshal > evtouch_hal.out\" to the\n\
-++ubuntu-mobile@lists.ubuntu.com mailing list, so support for your \
-++device can be added."
-++
-++if [ -z "$UDI" ];then
-++ if [ -x "${ZENITY}" ]; then
-++ $ZENITY --info --text="${FAILINFO}"
-++ elif [ -x "${XDIALOG}" ]; then
-++ $XDIALOG --fill --msgbox "${FAILINFO}" 20 40
-++ elif [ -x "${KDIALOG}" ]; then
-++ $KDIALOG --msgbox "${FAILINFO}"
-++ fi
-++ exit 0
-++fi
-++
-++if [ -x "${ZENITY}" ]; then
-++ $ZENITY --info --text="${INFO}"
-++elif [ -x "${XDIALOG}" ]; then
-++ $XDIALOG --fill --msgbox "${INFO}" 30 40
-++elif [ -x "${KDIALOG}" ]; then
-++ $KDIALOG --msgbox "${INFO}"
-++fi
-+
-+ echo $EVCALIBRATE
-+
-++if [ -n "$DISPLAY" ]; then
-++ DPY=$(echo $DISPLAY|sed -e 's/[a-z:]*//g'|cut -d'.' -f1)
-++ MYDPY=":$(($DPY+1)).0"
-++fi
-++
-+ if ! [ -x "$EVCALIBRATE" ] ; then
-+ echo "ev_calibrate not found exiting ..."
-+ exit 1;
-+@@ -32,6 +81,22 @@
-+ #xinit /usr/bin/ddd ev_calibrate -- /usr/X11R6/bin/X
-+ echo "Starting calibration program..."
-+ sleep 2
-++hal-set-property --udi $UDI --key input.x11_options.calibrate --string "1"
-++
-++$XINIT $EVCALIBRATE -- $XSERVER $MYDPY -auth /dev/null
-++
-++hal-set-property --remove --udi $UDI --key input.x11_options.calibrate
-++
-++invoke-rc.d --quiet xserver-xorg-input-evtouch start
-++
-++rm /tmp/ev_calibrate
-++
-++if [ -x "${ZENITY}" ]; then
-++ $ZENITY --info --text="${RESTARTINFO}"
-++elif [ -x "${XDIALOG}" ]; then
-++ $XDIALOG --fill --msgbox "${RESTARTINFO}" 10 40
-++elif [ -x "${KDIALOG}" ]; then
-++ $KDIALOG --msgbox "${RESTARTINFO}"
-++fi
-+
-+-$XINIT $EVCALIBRATE -- $XSERVER
-+ exit 0
---- xf86-input-evtouch-0.8.8.orig/debian/fdi/50-eGalax.fdi
-+++ xf86-input-evtouch-0.8.8/debian/fdi/50-eGalax.fdi
-@@ -0,0 +1,23 @@
-+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
-+<deviceinfo version="0.2">
-+ <device>
-+ <match key="info.product" contains="eGalax">
-+ <match key="info.capabilities" contains="input">
-+ <merge key="input.x11_driver" type="string">evtouch</merge>
-+ <merge key="input.x11_options.minx" type="string">130</merge>
-+ <merge key="input.x11_options.miny" type="string">197</merge>
-+ <merge key="input.x11_options.maxx" type="string">3945</merge>
-+ <merge key="input.x11_options.maxy" type="string">3894</merge>
-+ <merge key="input.x11_options.taptimer" type="string">30</merge>
-+ <merge key="input.x11_options.longtouchtimer" type="string">750</merge>
-+ <merge key="input.x11_options.longtouched_action" type="string">click</merge>
-+ <merge key="input.x11_options.longtouched_button" type="string">3</merge>
-+ <merge key="input.x11_options.oneandhalftap_button" type="string">2</merge>
-+ <merge key="input.x11_options.movelimit" type="string">10</merge>
-+ <merge key="input.x11_options.touched_drag" type="string">1</merge>
-+ <merge key="input.x11_options.maybetapped_action" type="string">click</merge>
-+ <merge key="input.x11_options.maybetapped_button" type="string">1</merge>
-+ </match>
-+ </match>
-+ </device>
-+</deviceinfo>
---- xf86-input-evtouch-0.8.8.orig/debian/fdi/50-gunze.fdi
-+++ xf86-input-evtouch-0.8.8/debian/fdi/50-gunze.fdi
-@@ -0,0 +1,16 @@
-+<?xml version="1.0" encoding="ISO-8859-1" ?>
-+
-+<deviceinfo version="0.2">
-+ <device>
-+ <match key="info.product" contains="GUNZE USB Touch Panel">
-+ <merge key="input.x11_driver" type="string">evtouch</merge>
-+ <merge key="input.x11_options.ReportingMode" type="string">Raw</merge>
-+ <merge key="input.x11_options.Emulate3Buttons" type="string">false</merge>
-+ <merge key="input.x11_options.Emulate3Timeout" type="string">1</merge>
-+ <merge key="input.x11_options.MinX" type="string">35</merge>
-+ <merge key="input.x11_options.MinY" type="string">37</merge>
-+ <merge key="input.x11_options.MaxX" type="string">990</merge>
-+ <merge key="input.x11_options.MaxY" type="string">986</merge>
-+ </match>
-+ </device>
-+</deviceinfo>
-\ No newline at end of file
---- xf86-input-evtouch-0.8.8.orig/debian/fdi/50-ideaco.fdi
-+++ xf86-input-evtouch-0.8.8/debian/fdi/50-ideaco.fdi
-@@ -0,0 +1,23 @@
-+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
-+
-+<deviceinfo version="0.2">
-+ <device>
-+ <match key="info.product" contains="IDEACO">
-+ <match key="info.product" contains="IDC 6680">
-+ <match key="info.capabilities" contains="input.touchpad">
-+ <merge key="input.x11_driver" type="string">evtouch</merge>
-+ <merge key="input.x11_options.reportingmode" type="string">raw</merge>
-+ <merge key="input.x11_options.taptimer" type="string">50</merge>
-+ <merge key="input.x11_options.longtouchtimer" type="string">30</merge>
-+ <merge key="input.x11_options.movelimit" type="string">15</merge>
-+ <merge key="input.x11_options.emulate3buttons" type="string">true</merge>
-+ <merge key="input.x11_options.emulate3timeout" type="string">50</merge>
-+ <merge key="input.x11_options.maxx" type="string">7948</merge>
-+ <merge key="input.x11_options.maxy" type="string">7834</merge>
-+ <merge key="input.x11_options.minx" type="string">112</merge>
-+ <merge key="input.x11_options.miny" type="string">254</merge>
-+ </match>
-+ </match>
-+ </match>
-+ </device>
-+</deviceinfo>
---- xf86-input-evtouch-0.8.8.orig/debian/fdi/50-elo-2700.fdi
-+++ xf86-input-evtouch-0.8.8/debian/fdi/50-elo-2700.fdi
-@@ -0,0 +1,18 @@
-+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
-+<deviceinfo version="0.2">
-+ <device>
-+ <match key="info.product" contains="Elo TouchSystems, Inc. Elo TouchSystems 2700 IntelliTouch(r) USB Touchmonitor Interface">
-+ <match key="info.capabilities" contains="input">
-+ <merge key="input.x11_driver" type="string">evtouch</merge>
-+ <merge key="input.x11_options.minx" type="string">130</merge>
-+ <merge key="input.x11_options.miny" type="string">197</merge>
-+ <merge key="input.x11_options.maxx" type="string">3945</merge>
-+ <merge key="input.x11_options.maxy" type="string">3894</merge>
-+ <merge key="input.x11_options.swapx" type="string">1</merge>
-+ <merge key="input.x11_options.swapy" type="string">1</merge>
-+ </match>
-+ </match>
-+ </device>
-+</deviceinfo>
-+
-+</deviceinfo>
-\ No newline at end of file
---- xf86-input-evtouch-0.8.8.orig/debian/fdi/50-touchpack.fdi
-+++ xf86-input-evtouch-0.8.8/debian/fdi/50-touchpack.fdi
-@@ -0,0 +1,30 @@
-+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
-+<deviceinfo version="0.2">
-+ <device>
-+ <match key="info.product" contains="HID TOUCH HID Touch Panel">
-+ <match key="info.capabilities" contains="input.touchpad">
-+ <merge key="input.x11_driver" type="string">evtouch</merge>
-+ <merge key="input.x11_options.reportingmode" type="string">raw</merge>
-+ <merge key="input.x11_options.emulate3buttons" type="string">false</merge>
-+ <merge key="input.x11_options.emulate3timeout" type="string">50</merge>
-+ <merge key="input.x11_options.sendcoreevents" type="string">true</merge>
-+ <merge key="input.x11_options.maxx" type="string">4095</merge>
-+ <merge key="input.x11_options.maxy" type="string">4095</merge>
-+ <merge key="input.x11_options.minx" type="string">21</merge>
-+ <merge key="input.x11_options.miny" type="string">0</merge>
-+ <merge key="input.x11_options.Rotate" type="string">false</merge>
-+ <merge key="input.x11_options.Swapx" type="string">false</merge>
-+ <merge key="input.x11_options.Swapy" type="string">false</merge>
-+ <merge key="input.x11_options.taptimer" type="string">30</merge>
-+ <merge key="input.x11_options.longtouchtimer" type="string">750</merge>
-+ <merge key="input.x11_options.longtouched_action" type="string">click</merge>
-+ <merge key="input.x11_options.longtouched_button" type="string">3</merge>
-+ <merge key="input.x11_options.oneandhalftap_button" type="string">2</merge>
-+ <merge key="input.x11_options.movelimit" type="string">10</merge>
-+ <merge key="input.x11_options.touched_drag" type="string">1</merge>
-+ <merge key="input.x11_options.maybetapped_action" type="string">click</merge>
-+ <merge key="input.x11_options.maybetapped_button" type="string">1</merge>
-+ </match>
-+ </match>
-+ </device>
-+</deviceinfo>
---- xf86-input-evtouch-0.8.8.orig/debian/fdi/50-Fujitsu.fdi
-+++ xf86-input-evtouch-0.8.8/debian/fdi/50-Fujitsu.fdi
-@@ -0,0 +1,21 @@
-+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
-+
-+<deviceinfo version="0.2">
-+
-+ <device>
-+ <match key="info.product" contains="Fujitsu Component USB Touch Panel">
-+ <match key="info.capabilities" contains="input">
-+ <merge key="input.x11_driver" type="string">evtouch</merge>
-+ <merge key="input.x11_options.reportingmode" type="string">raw</merge>
-+ <merge key="input.x11_options.emulate3buttons" type="string">true</merge>
-+ <merge key="input.x11_options.emulate3timeout" type="string">50</merge>
-+ <merge key="input.x11_options.sendcoreevents" type="string">on</merge>
-+ <merge key="input.x11_options.minx" type="string">76</merge>
-+ <merge key="input.x11_options.miny" type="string">104</merge>
-+ <merge key="input.x11_options.maxx" type="string">957</merge>
-+ <merge key="input.x11_options.maxy" type="string">976</merge>
-+ </match>
-+ </match>
-+ </device>
-+
-+</deviceinfo>
---- xf86-input-evtouch-0.8.8.orig/debian/fdi/50-Panasonic.fdi
-+++ xf86-input-evtouch-0.8.8/debian/fdi/50-Panasonic.fdi
-@@ -0,0 +1,21 @@
-+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
-+
-+<deviceinfo version="0.2">
-+
-+ <device>
-+ <match key="info.product" contains="Fujitsu Takamisawa USB Touch Panel">
-+ <match key="info.capabilities" contains="input">
-+ <merge key="input.x11_driver" type="string">evtouch</merge>
-+ <merge key="input.x11_options.reportingmode" type="string">raw</merge>
-+ <merge key="input.x11_options.emulate3buttons" type="string">true</merge>
-+ <merge key="input.x11_options.emulate3timeout" type="string">50</merge>
-+ <merge key="input.x11_options.sendcoreevents" type="string">on</merge>
-+ <merge key="input.x11_options.minx" type="string">76</merge>
-+ <merge key="input.x11_options.miny" type="string">104</merge>
-+ <merge key="input.x11_options.maxx" type="string">957</merge>
-+ <merge key="input.x11_options.maxy" type="string">976</merge>
-+ </match>
-+ </match>
-+ </device>
-+
-+</deviceinfo>
---- xf86-input-evtouch-0.8.8.orig/debian/fdi/50-ideaco-idc6681.fdi
-+++ xf86-input-evtouch-0.8.8/debian/fdi/50-ideaco-idc6681.fdi
-@@ -0,0 +1,23 @@
-+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
-+
-+<deviceinfo version="0.2">
-+ <device>
-+ <match key="info.product" contains="IDEACO">
-+ <match key="info.product" contains="IDC 6681">
-+ <match key="info.capabilities" contains="input.touchpad">
-+ <merge key="input.x11_driver" type="string">evtouch</merge>
-+ <merge key="input.x11_options.reportingmode" type="string">raw</merge>
-+ <merge key="input.x11_options.taptimer" type="string">50</merge>
-+ <merge key="input.x11_options.longtouchtimer" type="string">30</merge>
-+ <merge key="input.x11_options.movelimit" type="string">15</merge>
-+ <merge key="input.x11_options.emulate3buttons" type="string">true</merge>
-+ <merge key="input.x11_options.emulate3timeout" type="string">50</merge>
-+ <merge key="input.x11_options.maxx" type="string">1100</merge>
-+ <merge key="input.x11_options.maxy" type="string">1650</merge>
-+ <merge key="input.x11_options.minx" type="string">7220</merge>
-+ <merge key="input.x11_options.miny" type="string">6560</merge>
-+ </match>
-+ </match>
-+ </match>
-+ </device>
-+</deviceinfo>
---- xf86-input-evtouch-0.8.8.orig/debian/fdi/50-touchkit.fdi
-+++ xf86-input-evtouch-0.8.8/debian/fdi/50-touchkit.fdi
-@@ -0,0 +1,23 @@
-+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
-+<deviceinfo version="0.2">
-+ <device>
-+ <match key="info.product" contains="Touchkit Touch">
-+ <match key="info.capabilities" contains="input">
-+ <merge key="input.x11_driver" type="string">evtouch</merge>
-+ <merge key="input.x11_options.minx" type="string">130</merge>
-+ <merge key="input.x11_options.miny" type="string">197</merge>
-+ <merge key="input.x11_options.maxx" type="string">3945</merge>
-+ <merge key="input.x11_options.maxy" type="string">3894</merge>
-+ <merge key="input.x11_options.taptimer" type="string">30</merge>
-+ <merge key="input.x11_options.longtouchtimer" type="string">750</merge>
-+ <merge key="input.x11_options.longtouched_action" type="string">click</merge>
-+ <merge key="input.x11_options.longtouched_button" type="string">3</merge>
-+ <merge key="input.x11_options.oneandhalftap_button" type="string">2</merge>
-+ <merge key="input.x11_options.movelimit" type="string">10</merge>
-+ <merge key="input.x11_options.touched_drag" type="string">1</merge>
-+ <merge key="input.x11_options.maybetapped_action" type="string">click</merge>
-+ <merge key="input.x11_options.maybetapped_button" type="string">1</merge>
-+ </match>
-+ </match>
-+ </device>
-+</deviceinfo>
---- xf86-input-evtouch-0.8.8.orig/debian/fdi/50-itm.fdi
-+++ xf86-input-evtouch-0.8.8/debian/fdi/50-itm.fdi
-@@ -0,0 +1,21 @@
-+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
-+
-+<deviceinfo version="0.2">
-+ <device>
-+ <match key="info.product" contains="ITM Inc USB Touch Panel">
-+ <match key="info.capabilities" contains="input.touchpad">
-+ <merge key="input.x11_driver" type="string">evtouch</merge>
-+ <merge key="input.x11_options.reportingmode" type="string">raw</merge>
-+ <merge key="input.x11_options.emulate3buttons" type="string">true</merge>
-+ <merge key="input.x11_options.emulate3timeout" type="string">50</merge>
-+ <merge key="input.x11_options.sendcoreevents" type="string">on</merge>
-+ <merge key="input.x11_options.maxx" type="string">3815</merge>
-+ <merge key="input.x11_options.maxy" type="string">3948</merge>
-+ <merge key="input.x11_options.minx" type="string">295</merge>
-+ <merge key="input.x11_options.miny" type="string">200</merge>
-+ <merge key="input.x11_options.Swapx" type="string">1</merge>
-+ <merge key="input.x11_options.Rotate" type="string">CW</merge>
-+ </match>
-+ </match>
-+ </device>
-+</deviceinfo>
---- xf86-input-evtouch-0.8.8.orig/debian/xsfbs/xsfbs-autoreconf.mk
-+++ xf86-input-evtouch-0.8.8/debian/xsfbs/xsfbs-autoreconf.mk
-@@ -0,0 +1,150 @@
-+#!/usr/bin/make -f
-+# $Id$
-+
-+# Automagical conversion of autoreconf results into quilt patches.
-+
-+# Copyright 2006 Eugene Konev
-+#
-+# Licensed under the GNU General Public License, version 2. See the file
-+# /usr/share/common-licenses/GPL or <http://www.gnu.org/copyleft/gpl.txt>.
-+
-+# The idea behind this is storing changes produced by autoreconf as a
-+# separate patch on quilt stack (on top of stack actually).
-+# The only usable target here is 'autoreconf`. Other targets are not
-+# supposed to be called directly. DO NOT invoke them, unless you know what
-+# you are doing.
-+# The autoreconf target will check if files with names in $(RECONF_CHECKFILES)
-+# were changed during patching (from upstream version or from previously
-+# autoreconfed version) and call actual autoreconfing if they were.
-+# The actual autoreconfing target (doautoreconf) WILL FAIL after
-+# calling autoreconf and pushing changes into quilt stack by design. It
-+# should never be invoked by automatic build process.
-+# The proposed use is adding autoreconf into clean's prerequisites before
-+# xsfclean like:
-+# - clean: xsfclean
-+# + clean: autoreconf xsfclean
-+# This will ensure it is called when you build package with dpkg-buildpackage.
-+
-+# This dir will be used for producing diff of autoreconfed tree
-+RECONF_DIR := xsfautoreconf
-+
-+# This files will be checked for changes
-+RECONF_CHECKFILES += configure.ac Makefile.am
-+
-+# This files will not be hardlinked but copied
-+RECONF_NOLINKFILES += aclocal.m4
-+
-+# This files/dirs will be pruned after autoreconf run
-+RECONF_PRUNEFILES += autom4te.cache config.h.in~ aclocal.m4~
-+
-+# Internal target. Never invoke directly.
-+stampdir_target+=check.md5sum
-+$(STAMP_DIR)/check.md5sum:
-+ dh_testdir
-+ $(MAKE) -f debian/rules prepare
-+ for F in $(RECONF_CHECKFILES); do \
-+ find . -wholename ./$(STAMP_DIR) -prune -o -name $$F -print | \
-+ LC_ALL=C sort | xargs --no-run-if-empty md5sum >>$@; \
-+ done
-+
-+# Internal target. Never invoke directly.
-+$(STAMP_DIR)/clean.md5sum:
-+ dh_testdir
-+ $(MAKE) -f debian/rules unpatch
-+ rm -f $(STAMP_DIR)/check.md5sum
-+ $(MAKE) -f debian/rules $(STAMP_DIR)/check.md5sum
-+ mv $(STAMP_DIR)/check.md5sum $@
-+
-+# Internal target. Never invoke directly.
-+debian/patches/patched.md5sum:
-+ dh_testdir
-+ [ -f $(STAMP_DIR)/clean.md5sum ] || \
-+ $(MAKE) -f debian/rules $(STAMP_DIR)/clean.md5sum
-+
-+ $(MAKE) -f debian/rules patch
-+ rm -f $(STAMP_DIR)/check.md5sum
-+ $(MAKE) -f debian/rules $(STAMP_DIR)/check.md5sum
-+ if ! diff $(STAMP_DIR)/clean.md5sum \
-+ $(STAMP_DIR)/check.md5sum > /dev/null; then \
-+ $(MAKE) -f debian/rules doautoreconf; \
-+ else \
-+ mv $(STAMP_DIR)/check.md5sum $@; \
-+ fi
-+
-+# Internal target. Never invoke directly.
-+,PHONY: doautoreconf
-+doautoreconf: patch
-+ quilt push -a >>$(STAMP_DIR)/log/autoreconf 2>&1 || true
-+ if quilt applied | grep ^autoreconf.diff$$ > /dev/null; then \
-+ quilt pop -a >>$(STAMP_DIR)/log/autoreconf 2>&1; \
-+ quilt rename -p autoreconf.diff autoreconf-old.diff \
-+ >>$(STAMP_DIR)/log/autoreconf 2>&1; \
-+ quilt delete autoreconf-old.diff >>$(STAMP_DIR)/log/autoreconf 2>&1; \
-+ quilt push -a >>$(STAMP_DIR)/log/autoreconf 2>&1; \
-+ fi
-+
-+ if [ -e $(RECONF_DIR) ]; then \
-+ echo "ERROR: $(RECONF_DIR) already exists. Cleanup by hand"; \
-+ exit 1; \
-+ fi
-+
-+ mkdir -p $(RECONF_DIR)/before
-+ find . -maxdepth 1 -mindepth 1 ! -wholename ./$(RECONF_DIR) \
-+ -a ! -wholename ./debian -a ! -wholename ./patches \
-+ -a ! -wholename ./.pc -a ! -wholename ./$(STAMP_DIR) | \
-+ xargs -i{} cp -al {} $(RECONF_DIR)/before/
-+
-+ for F in $(RECONF_PRUNEFILES); do \
-+ find $(RECONF_DIR)/before -name $$F -print | \
-+ xargs --no-run-if-empty rm -r; \
-+ done
-+
-+ cp -al $(RECONF_DIR)/before $(RECONF_DIR)/after
-+
-+ for F in $(RECONF_NOLINKFILES); do \
-+ find . -wholename ./$(RECONF_DIR) -prune -o -wholename ./debian \
-+ -prune -o -wholename ./$(STAMP_DIR) -prune -o -name $$F \
-+ -print | \
-+ xargs --no-run-if-empty -i{} cp --remove-destination {} \
-+ $(RECONF_DIR)/after/{}; \
-+ done
-+
-+ cd $(RECONF_DIR)/after && autoreconf -v --install && \
-+ for F in $(RECONF_PRUNEFILES); do \
-+ find . -name $$F -print | \
-+ xargs --no-run-if-empty rm -r; \
-+ done
-+
-+ cd $(RECONF_DIR) && diff -Nru before after > autoreconf.diff || true
-+
-+ quilt import $(RECONF_DIR)/autoreconf.diff \
-+ >>$(STAMP_DIR)/log/autoreconf 2>&1
-+
-+ mv $(STAMP_DIR)/check.md5sum debian/patches/patched.md5sum
-+
-+ rm -r $(RECONF_DIR) && rm -f patches/autoreconf-old.diff
-+
-+ @echo
-+ @echo "****************************************************************"
-+ @echo " This target is made to fail INTENTIONALLY. It should NEVER "
-+ @echo " be invoked during automatic builds. "
-+ @echo
-+ @echo " This target was invoked because you added/removed/changed "
-+ @echo " patches which modify either configure.ac or Makefile.am and, "
-+ @echo " thus, require autoreconf run. And all autoreconfing should "
-+ @echo " happen before uploading. "
-+ @echo
-+ @echo " (See also debian/xsfbs/xsfbs-autoreconf.mk) "
-+ @echo
-+ @echo " If you see this message, autoreconfing actually SUCCEEDED, "
-+ @echo " and your build should finish successfully, when rerun. "
-+ @echo "****************************************************************"
-+ @echo
-+ exit 1;
-+
-+.PHONY: autoreconf
-+autoreconf: debian/patches/patched.md5sum patch $(STAMP_DIR)/check.md5sum
-+ if ! diff $(STAMP_DIR)/check.md5sum \
-+ debian/patches/patched.md5sum > /dev/null; then \
-+ $(MAKE) -f debian/rules doautoreconf; \
-+ fi
---- xf86-input-evtouch-0.8.8.orig/debian/xsfbs/xsfbs.mk
-+++ xf86-input-evtouch-0.8.8/debian/xsfbs/xsfbs.mk
-@@ -0,0 +1,312 @@
-+#!/usr/bin/make -f
-+
-+# Debian X Strike Force Build System (XSFBS): Make portion
-+
-+# Copyright 1996 Stephen Early
-+# Copyright 1997 Mark Eichin
-+# Copyright 1998-2005, 2007 Branden Robinson
-+# Copyright 2005 David Nusinow
-+#
-+# Licensed under the GNU General Public License, version 2. See the file
-+# /usr/share/common-licenses/GPL or <http://www.gnu.org/copyleft/gpl.txt>.
-+
-+# Originally by Stephen Early <sde1000@debian.org>
-+# Modified by Mark W. Eichin <eichin@kitten.gen.ma.us>
-+# Modified by Adam Heath <doogie@debian.org>
-+# Modified by Branden Robinson <branden@debian.org>
-+# Modified by Fabio Massimo Di Nitto <fabbione@fabbione.net>
-+# Modified by David Nusinow <dnusinow@debian.org>
-+# Acknowledgements to Manoj Srivastava.
-+
-+# Pass $(DH_OPTIONS) into the environment for debhelper's benefit.
-+export DH_OPTIONS
-+
-+# force quilt to not use ~/.quiltrc
-+QUILT = quilt --quiltrc /dev/null
-+# force QUILT_PATCHES to the default in case it is exported in the environment
-+QUILT_PATCHES = patches/
-+
-+# Set up parameters for the upstream build environment.
-+
-+# Determine (source) package name from Debian changelog.
-+SOURCE_NAME:=$(shell dpkg-parsechangelog -ldebian/changelog \
-+ | grep '^Source:' | awk '{print $$2}')
-+
-+# Determine package version from Debian changelog.
-+SOURCE_VERSION:=$(shell dpkg-parsechangelog -ldebian/changelog \
-+ | grep '^Version:' | awk '{print $$2}')
-+
-+# Determine upstream version number.
-+UPSTREAM_VERSION:=$(shell echo $(SOURCE_VERSION) | sed 's/-.*//')
-+
-+# Determine the source version without the epoch for make-orig-tar-gz
-+NO_EPOCH_VER:=$(shell echo $(UPSTREAM_VERSION) | sed 's/^.://')
-+
-+# Figure out who's building this package.
-+BUILDER:=$(shell echo $${DEBEMAIL:-$${EMAIL:-$$(echo $$LOGNAME@$$(cat /etc/mailname 2>/dev/null))}})
-+
-+# Find out if this is an official build; an official build has nothing but
-+# digits, dots, and/or the strings "woody" or "sarge" in the Debian part of the
-+# version number. Anything else indicates an unofficial build.
-+OFFICIAL_BUILD:=$(shell VERSION=$(SOURCE_VERSION); if ! expr "$$(echo $${VERSION\#\#*-} | sed 's/\(woody\|sarge\)//g')" : ".*[^0-9.].*" >/dev/null 2>&1; then echo yes; fi)
-+
-+# Set up parameters for the Debian build environment.
-+
-+# Determine our architecture.
-+BUILD_ARCH:=$(shell dpkg-architecture -qDEB_BUILD_ARCH)
-+# Work around some old-time dpkg braindamage.
-+BUILD_ARCH:=$(subst i486,i386,$(BUILD_ARCH))
-+# The DEB_HOST_ARCH variable may be set per the Debian cross-compilation policy.
-+ifdef DEB_HOST_ARCH
-+ ARCH:=$(DEB_HOST_ARCH)
-+else
-+ # dpkg-cross sets the ARCH environment variable; if set, use it.
-+ ifdef ARCH
-+ ARCH:=$(ARCH)
-+ else
-+ ARCH:=$(BUILD_ARCH)
-+ endif
-+endif
-+
-+# $(STAMP_DIR) houses stamp files for complex targets.
-+STAMP_DIR:=stampdir
-+
-+# $(SOURCE_DIR) houses one or more source trees.
-+SOURCE_DIR:=build-tree
-+
-+# $(SOURCE_TREE) is the location of the source tree to be compiled. If there
-+# is more than one, others are found using this name plus a suffix to indicate
-+# the purpose of the additional tree (e.g., $(SOURCE_TREE)-custom). The
-+# "setup" target is responsible for creating such trees.
-+#SOURCE_TREE:=$(SOURCE_DIR)/xc
-+#FIXME We need to define this in our debian/rules file
-+
-+# $(DEBTREEDIR) is where all install rules are told (via $(DESTDIR)) to place
-+# their files.
-+DEBTREEDIR:=$(CURDIR)/debian/tmp
-+
-+# All "important" targets have four lines:
-+# 1) A target name that is invoked by a package-building tool or the user.
-+# This consists of a dependency on a "$(STAMP_DIR)/"-prefixed counterpart.
-+# 2) A line delcaring 1) as a phony target (".PHONY:").
-+# 3) A "$(STAMP_DIR)/"-prefixed target which does the actual work, and may
-+# depend on other targets.
-+# 4) A line declaring 3) as a member of the $(stampdir_targets) variable; the
-+# "$(STAMP_DIR)/" prefix is omitted.
-+#
-+# This indirection is needed so that the "stamp" files that signify when a rule
-+# is done can be located in a separate "stampdir". Recall that make has no way
-+# to know when a goal has been met for a phony target (like "build" or
-+# "install").
-+#
-+# At the end of each "$(STAMP_DIR)/" target, be sure to run the command ">$@"
-+# so that the target will not be run again. Removing the file will make Make
-+# run the target over.
-+
-+# All phony targets should be declared as dependencies of .PHONY, even if they
-+# do not have "($STAMP_DIR)/"-prefixed counterparts.
-+
-+# Define a harmless default rule to keep things from going nuts by accident.
-+.PHONY: default
-+default:
-+
-+# Set up the $(STAMP_DIR) directory.
-+.PHONY: stampdir
-+stampdir_targets+=stampdir
-+stampdir: $(STAMP_DIR)/stampdir
-+$(STAMP_DIR)/stampdir:
-+ mkdir $(STAMP_DIR)
-+ >$@
-+
-+# Set up the package build directory as quilt expects to find it.
-+.PHONY: prepare
-+stampdir_targets+=prepare
-+prepare: $(STAMP_DIR)/genscripts $(STAMP_DIR)/prepare $(STAMP_DIR)/patches $(STAMP_DIR)/log
-+$(STAMP_DIR)/prepare: $(STAMP_DIR)/stampdir
-+ if [ ! -e $(STAMP_DIR)/patches ]; then \
-+ mkdir $(STAMP_DIR)/patches; \
-+ ln -s $(STAMP_DIR)/patches .pc; \
-+ echo 2 >$(STAMP_DIR)/patches/.version; \
-+ fi; \
-+ if [ ! -e $(STAMP_DIR)/log ]; then \
-+ mkdir $(STAMP_DIR)/log; \
-+ fi; \
-+ if [ -e debian/patches ] && [ ! -e patches ]; then \
-+ ln -s debian/patches patches; \
-+ fi; \
-+ >$@
-+
-+# Apply all patches to the upstream source.
-+.PHONY: patch
-+stampdir_targets+=patch
-+patch: $(STAMP_DIR)/patch
-+$(STAMP_DIR)/patch: $(STAMP_DIR)/prepare
-+ if ! [ `which quilt` ]; then \
-+ echo "Couldn't find quilt. Please install it or add it to the build-depends for this package."; \
-+ exit 1; \
-+ fi; \
-+ if $(QUILT) next >/dev/null 2>&1; then \
-+ echo -n "Applying patches..."; \
-+ if $(QUILT) push -a -v >$(STAMP_DIR)/log/patch 2>&1; then \
-+ cat $(STAMP_DIR)/log/patch; \
-+ echo "successful."; \
-+ else \
-+ cat $(STAMP_DIR)/log/patch; \
-+ echo "failed! (check $(STAMP_DIR)/log/patch for details)"; \
-+ exit 1; \
-+ fi; \
-+ else \
-+ echo "No patches to apply"; \
-+ fi; \
-+ >$@
-+
-+# Revert all patches to the upstream source.
-+.PHONY: unpatch
-+unpatch:
-+ rm -f $(STAMP_DIR)/patch
-+ @echo -n "Unapplying patches..."; \
-+ if [ -e $(STAMP_DIR)/patches/applied-patches ]; then \
-+ if $(QUILT) pop -a -v >$(STAMP_DIR)/log/unpatch 2>&1; then \
-+ cat $(STAMP_DIR)/log/unpatch; \
-+ echo "successful."; \
-+ else \
-+ cat $(STAMP_DIR)/log/unpatch; \
-+ echo "failed! (check $(STAMP_DIR)/log/unpatch for details)"; \
-+ exit 1; \
-+ fi; \
-+ else \
-+ echo "nothing to do."; \
-+ fi
-+
-+# Clean the generated maintainer scripts.
-+.PHONY: cleanscripts
-+cleanscripts:
-+ rm -f $(STAMP_DIR)/genscripts
-+ rm -f debian/*.config \
-+ debian/*.postinst \
-+ debian/*.postrm \
-+ debian/*.preinst \
-+ debian/*.prerm
-+
-+# Clean the package build tree.
-+.PHONY: xsfclean
-+xsfclean: cleanscripts unpatch
-+ dh_testdir
-+ rm -f .pc patches
-+ rm -rf $(STAMP_DIR) $(SOURCE_DIR)
-+ rm -rf imports
-+ dh_clean debian/shlibs.local \
-+ debian/po/pothead
-+
-+# Generate the debconf templates POT file header.
-+debian/po/pothead: debian/po/pothead.in
-+ sed -e 's/SOURCE_VERSION/$(SOURCE_VERSION)/' \
-+ -e 's/DATE/$(shell date "+%F %X%z"/)' <$< >$@
-+
-+# Update POT and PO files.
-+.PHONY: updatepo
-+updatepo: debian/po/pothead
-+ debian/scripts/debconf-updatepo --pot-header=pothead --verbose
-+
-+# Remove files from the upstream source tree that we don't need, or which have
-+# licensing problems. It must be run before creating the .orig.tar.gz.
-+#
-+# Note: This rule is for Debian package maintainers' convenience, and is not
-+# needed for conventional build scenarios.
-+.PHONY: prune-upstream-tree
-+prune-upstream-tree:
-+ # Ensure we're in the correct directory.
-+ dh_testdir
-+ grep -rvh '^#' debian/prune/ | xargs --no-run-if-empty rm -rf
-+
-+# Verify that there are no offsets or fuzz in the patches we apply.
-+#
-+# Note: This rule is for Debian package maintainers' convenience, and is not
-+# needed for conventional build scenarios.
-+.PHONY: patch-audit
-+patch-audit: prepare unpatch
-+ @echo -n "Auditing patches..."; \
-+ >$(STAMP_DIR)/log/patch; \
-+ FUZZY=; \
-+ while [ -n "$$($(QUILT) next)" ]; do \
-+ RESULT=$$($(QUILT) push -v | tee -a $(STAMP_DIR)/log/patch | grep ^Hunk | sed 's/^Hunk.*\(succeeded\|FAILED\).*/\1/');\
-+ case "$$RESULT" in \
-+ succeeded) \
-+ echo "fuzzy patch: $$($(QUILT) top)" \
-+ | tee -a $(STAMP_DIR)/log/$$($(QUILT) top); \
-+ FUZZY=yes; \
-+ ;; \
-+ FAILED) \
-+ echo "broken patch: $$($(QUILT) next)" \
-+ | tee -a $(STAMP_DIR)/log/$$($(QUILT) next); \
-+ exit 1; \
-+ ;; \
-+ esac; \
-+ done; \
-+ if [ -n "$$FUZZY" ]; then \
-+ echo "there were fuzzy patches; please fix."; \
-+ exit 1; \
-+ else \
-+ echo "done."; \
-+ fi
-+
-+# Generate the maintainer scripts.
-+.PHONY: genscripts
-+stampdir_targets+=genscripts
-+genscripts: $(STAMP_DIR)/genscripts
-+$(STAMP_DIR)/genscripts: $(STAMP_DIR)/stampdir
-+ for FILE in debian/*.config.in \
-+ debian/*.postinst.in \
-+ debian/*.postrm.in \
-+ debian/*.preinst.in \
-+ debian/*.prerm.in; do \
-+ if [ -e "$$FILE" ]; then \
-+ MAINTSCRIPT=$$(echo $$FILE | sed 's/.in$$//'); \
-+ sed -n '1,/^#INCLUDE_SHELL_LIB#$$/p' <$$FILE \
-+ | sed -e '/^#INCLUDE_SHELL_LIB#$$/d' >$$MAINTSCRIPT.tmp; \
-+ cat debian/xsfbs/xsfbs.sh >>$$MAINTSCRIPT.tmp; \
-+ sed -n '/^#INCLUDE_SHELL_LIB#$$/,$$p' <$$FILE \
-+ | sed -e '/^#INCLUDE_SHELL_LIB#$$/d' >>$$MAINTSCRIPT.tmp; \
-+ sed -e 's/@SOURCE_VERSION@/$(SOURCE_VERSION)/' \
-+ -e 's/@OFFICIAL_BUILD@/$(OFFICIAL_BUILD)/' \
-+ -e 's/@DEFAULT_DCRESOLUTIONS@/$(DEFAULT_DCRESOLUTIONS)/' \
-+ <$$MAINTSCRIPT.tmp >$$MAINTSCRIPT; \
-+ rm $$MAINTSCRIPT.tmp; \
-+ fi; \
-+ done
-+ # Validate syntax of generated shell scripts.
-+ #sh debian/scripts/validate-posix-sh debian/*.config \
-+ # debian/*.postinst \
-+ # debian/*.postrm \
-+ # debian/*.preinst \
-+ # debian/*.prerm
-+ >$@
-+
-+# Generate the shlibs.local file.
-+debian/shlibs.local:
-+ cat debian/*.shlibs >$@
-+
-+SERVERMINVERS = $(shell cat /usr/share/xserver-xorg/serverminver 2>/dev/null)
-+VIDEOABI = $(shell cat /usr/share/xserver-xorg/videoabiver 2>/dev/null)
-+INPUTABI = $(shell cat /usr/share/xserver-xorg/inputabiver 2>/dev/null)
-+SERVER_DEPENDS = xserver-xorg-core (>= $(SERVERMINVERS))
-+VIDDRIVER_PROVIDES = xserver-xorg-video-$(VIDEOABI)
-+INPDRIVER_PROVIDES = xserver-xorg-input-$(INPUTABI)
-+ifeq ($(PACKAGE),)
-+PACKAGE=$(shell awk '/^Package:/ { print $$2; exit }' < debian/control)
-+endif
-+
-+.PHONY: serverabi
-+serverabi:
-+ifeq ($(SERVERMINVERS),)
-+ @echo error: xserver-xorg-dev needs to be installed
-+ @exit 1
-+else
-+ echo "xserver:Depends=$(SERVER_DEPENDS)" >> debian/$(PACKAGE).substvars
-+ echo "xviddriver:Provides=$(VIDDRIVER_PROVIDES)" >> debian/$(PACKAGE).substvars
-+ echo "xinpdriver:Provides=$(INPDRIVER_PROVIDES)" >> debian/$(PACKAGE).substvars
-+endif
-+
-+include debian/xsfbs/xsfbs-autoreconf.mk
-+
-+# vim:set noet ai sts=8 sw=8 tw=0:
---- xf86-input-evtouch-0.8.8.orig/debian/xsfbs/xsfbs.sh
-+++ xf86-input-evtouch-0.8.8/debian/xsfbs/xsfbs.sh
-@@ -0,0 +1,900 @@
-+# $Id$
-+
-+# This is the X Strike Force shell library for X Window System package
-+# maintainer scripts. It serves to define shell functions commonly used by
-+# such packages, and performs some error checking necessary for proper operation
-+# of those functions. By itself, it does not "do" much; the maintainer scripts
-+# invoke the functions defined here to accomplish package installation and
-+# removal tasks.
-+
-+# If you are reading this within a Debian package maintainer script (e.g.,
-+# /var/lib/dpkg)info/PACKAGE.{config,preinst,postinst,prerm,postrm}), you can
-+# skip past this library by scanning forward in this file to the string
-+# "GOBSTOPPER".
-+
-+SOURCE_VERSION=@SOURCE_VERSION@
-+OFFICIAL_BUILD=@OFFICIAL_BUILD@
-+
-+# Use special abnormal exit codes so that problems with this library are more
-+# easily tracked down.
-+SHELL_LIB_INTERNAL_ERROR=86
-+SHELL_LIB_THROWN_ERROR=74
-+SHELL_LIB_USAGE_ERROR=99
-+
-+# old -> new variable names
-+if [ -z "$DEBUG_XORG_PACKAGE" ] && [ -n "$DEBUG_XFREE86_PACKAGE" ]; then
-+ DEBUG_XORG_PACKAGE="$DEBUG_XFREE86_PACKAGE"
-+fi
-+if [ -z "$DEBUG_XORG_DEBCONF" ] && [ -n "$DEBUG_XFREE86_DEBCONF" ]; then
-+ DEBUG_XORG_DEBCONF="$DEBUG_XFREE86_DEBCONF"
-+fi
-+
-+# initial sanity checks
-+if [ -z "$THIS_PACKAGE" ]; then
-+ cat >&2 <<EOF
-+Error: package maintainer script attempted to use shell library without
-+definining \$THIS_PACKAGE shell variable. Please report the package name,
-+version, and the text of this error message to the Debian Bug Tracking System.
-+Visit <http://www.debian.org/Bugs/Reporting> on the World Wide Web for
-+instructions, read the file /usr/share/doc/debian/bug-reporting.txt from the
-+"doc-debian" package, or install the "reportbug" package and use the command of
-+the same name to file a report against version $SOURCE_VERSION of this package.
-+EOF
-+ exit $SHELL_LIB_USAGE_ERROR
-+fi
-+
-+if [ -z "$THIS_SCRIPT" ]; then
-+ cat >&2 <<EOF
-+Error: package maintainer script attempted to use shell library without
-+definining \$THIS_SCRIPT shell variable. Please report the package name,
-+version, and the text of this error message to the Debian Bug Tracking System.
-+Visit <http://www.debian.org/Bugs/Reporting> on the World Wide Web for
-+instructions, read the file /usr/share/doc/debian/bug-reporting.txt from the
-+"doc-debian" package, or install the "reportbug" package and use the command of
-+the same name to file a report against version $SOURCE_VERSION of the
-+"$THIS_PACKAGE" package.
-+EOF
-+ exit $SHELL_LIB_USAGE_ERROR
-+fi
-+
-+ARCHITECTURE="$(dpkg --print-installation-architecture)"
-+
-+if [ "$1" = "reconfigure" ] || [ -n "$DEBCONF_RECONFIGURE" ]; then
-+ RECONFIGURE="true"
-+else
-+ RECONFIGURE=
-+fi
-+
-+if ([ "$1" = "install" ] || [ "$1" = "configure" ]) && [ -z "$2" ]; then
-+ FIRSTINST="yes"
-+fi
-+
-+if [ -z "$RECONFIGURE" ] && [ -z "$FIRSTINST" ]; then
-+ UPGRADE="yes"
-+fi
-+
-+trap "message;\
-+ message \"Received signal. Aborting $THIS_PACKAGE package $THIS_SCRIPT script.\";\
-+ message;\
-+ exit 1" HUP INT QUIT TERM
-+
-+reject_nondigits () {
-+ # syntax: reject_nondigits [ operand ... ]
-+ #
-+ # scan operands (typically shell variables whose values cannot be trusted) for
-+ # characters other than decimal digits and barf if any are found
-+ while [ -n "$1" ]; do
-+ # does the operand contain anything but digits?
-+ if ! expr "$1" : "[[:digit:]]\+$" > /dev/null 2>&1; then
-+ # can't use die(), because it wraps message() which wraps this function
-+ echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_nondigits() encountered" \
-+ "possibly malicious garbage \"$1\"" >&2
-+ exit $SHELL_LIB_THROWN_ERROR
-+ fi
-+ shift
-+ done
-+}
-+
-+reject_whitespace () {
-+ # syntax: reject_whitespace [ operand ]
-+ #
-+ # scan operand (typically a shell variable whose value cannot be trusted) for
-+ # whitespace characters and barf if any are found
-+ if [ -n "$1" ]; then
-+ # does the operand contain any whitespace?
-+ if expr "$1" : "[[:space:]]" > /dev/null 2>&1; then
-+ # can't use die(), because I want to avoid forward references
-+ echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_whitespace() encountered" \
-+ "possibly malicious garbage \"$1\"" >&2
-+ exit $SHELL_LIB_THROWN_ERROR
-+ fi
-+ fi
-+}
-+
-+reject_unlikely_path_chars () {
-+ # syntax: reject_unlikely_path_chars [ operand ... ]
-+ #
-+ # scan operands (typically shell variables whose values cannot be trusted) for
-+ # characters unlikely to be seen in a path and which the shell might
-+ # interpret and barf if any are found
-+ while [ -n "$1" ]; do
-+ # does the operand contain any funny characters?
-+ if expr "$1" : '.*[!$&()*;<>?|].*' > /dev/null 2>&1; then
-+ # can't use die(), because I want to avoid forward references
-+ echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_unlikely_path_chars()" \
-+ "encountered possibly malicious garbage \"$1\"" >&2
-+ exit $SHELL_LIB_THROWN_ERROR
-+ fi
-+ shift
-+ done
-+}
-+
-+# Query the terminal to establish a default number of columns to use for
-+# displaying messages to the user. This is used only as a fallback in the
-+# event the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while
-+# the script is running, and this cannot, only being calculated once.)
-+DEFCOLUMNS=$(stty size 2> /dev/null | awk '{print $2}') || true
-+if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" > /dev/null 2>&1; then
-+ DEFCOLUMNS=80
-+fi
-+
-+message () {
-+ # pretty-print messages of arbitrary length
-+ reject_nondigits "$COLUMNS"
-+ echo "$*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} >&2
-+}
-+
-+observe () {
-+ # syntax: observe message ...
-+ #
-+ # issue observational message suitable for logging someday when support for
-+ # it exists in dpkg
-+ if [ -n "$DEBUG_XORG_PACKAGE" ]; then
-+ message "$THIS_PACKAGE $THIS_SCRIPT note: $*"
-+ fi
-+}
-+
-+warn () {
-+ # syntax: warn message ...
-+ #
-+ # issue warning message suitable for logging someday when support for
-+ # it exists in dpkg; also send to standard error
-+ message "$THIS_PACKAGE $THIS_SCRIPT warning: $*"
-+}
-+
-+die () {
-+ # syntax: die message ...
-+ #
-+ # exit script with error message
-+ message "$THIS_PACKAGE $THIS_SCRIPT error: $*"
-+ exit $SHELL_LIB_THROWN_ERROR
-+}
-+
-+internal_error () {
-+ # exit script with error; essentially a "THIS SHOULD NEVER HAPPEN" message
-+ message "internal error: $*"
-+ if [ -n "$OFFICIAL_BUILD" ]; then
-+ message "Please report a bug in the $THIS_SCRIPT script of the" \
-+ "$THIS_PACKAGE package, version $SOURCE_VERSION to the Debian Bug" \
-+ "Tracking System. Include all messages above that mention the" \
-+ "$THIS_PACKAGE package. Visit " \
-+ "<http://www.debian.org/Bugs/Reporting> on the World Wide Web for" \
-+ "instructions, read the file" \
-+ "/usr/share/doc/debian/bug-reporting.txt from the doc-debian" \
-+ "package, or install the reportbug package and use the command of" \
-+ "the same name to file a report."
-+ fi
-+ exit $SHELL_LIB_INTERNAL_ERROR
-+}
-+
-+usage_error () {
-+ message "usage error: $*"
-+ message "Please report a bug in the $THIS_SCRIPT script of the" \
-+ "$THIS_PACKAGE package, version $SOURCE_VERSION to the Debian Bug" \
-+ "Tracking System. Include all messages above that mention the" \
-+ "$THIS_PACKAGE package. Visit " \
-+ "<http://www.debian.org/Bugs/Reporting> on the World Wide Web for" \
-+ "instructions, read the file" \
-+ "/usr/share/doc/debian/bug-reporting.txt from the doc-debian" \
-+ "package, or install the reportbug package and use the command of" \
-+ "the same name to file a report."
-+ exit $SHELL_LIB_USAGE_ERROR
-+}
-+
-+
-+maplink () {
-+ # returns what symlink should point to; i.e., what the "sane" answer is
-+ # Keep this in sync with the debian/*.links files.
-+ # This is only needed for symlinks to directories.
-+ #
-+ # XXX: Most of these look wrong in the X11R7 world and need to be fixed.
-+ # If we've stopped using this function, fixing it might enable us to re-enable
-+ # it again and catch more errors.
-+ case "$1" in
-+ /etc/X11/xkb/compiled) echo /var/lib/xkb ;;
-+ /etc/X11/xkb/xkbcomp) echo /usr/X11R6/bin/xkbcomp ;;
-+ /usr/X11R6/lib/X11/app-defaults) echo /etc/X11/app-defaults ;;
-+ /usr/X11R6/lib/X11/fs) echo /etc/X11/fs ;;
-+ /usr/X11R6/lib/X11/lbxproxy) echo /etc/X11/lbxproxy ;;
-+ /usr/X11R6/lib/X11/proxymngr) echo /etc/X11/proxymngr ;;
-+ /usr/X11R6/lib/X11/rstart) echo /etc/X11/rstart ;;
-+ /usr/X11R6/lib/X11/twm) echo /etc/X11/twm ;;
-+ /usr/X11R6/lib/X11/xdm) echo /etc/X11/xdm ;;
-+ /usr/X11R6/lib/X11/xinit) echo /etc/X11/xinit ;;
-+ /usr/X11R6/lib/X11/xkb) echo /etc/X11/xkb ;;
-+ /usr/X11R6/lib/X11/xserver) echo /etc/X11/xserver ;;
-+ /usr/X11R6/lib/X11/xsm) echo /etc/X11/xsm ;;
-+ /usr/bin/X11) echo ../X11R6/bin ;;
-+ /usr/bin/rstartd) echo ../X11R6/bin/rstartd ;;
-+ /usr/include/X11) echo ../X11R6/include/X11 ;;
-+ /usr/lib/X11) echo ../X11R6/lib/X11 ;;
-+ *) internal_error "maplink() called with unknown path \"$1\"" ;;
-+ esac
-+}
-+
-+analyze_path () {
-+ # given a supplied set of pathnames, break each one up by directory and do an
-+ # ls -dl on each component, cumulatively; i.e.
-+ # analyze_path /usr/X11R6/bin -> ls -dl /usr /usr/X11R6 /usr/X11R6/bin
-+ # Thanks to Randolph Chung for this clever hack.
-+
-+ #local f g
-+
-+ while [ -n "$1" ]; do
-+ reject_whitespace "$1"
-+ _g=
-+ message "Analyzing $1:"
-+ for _f in $(echo "$1" | tr / \ ); do
-+ if [ -e /$_g$_f ]; then
-+ ls -dl /$_g$_f /$_g$_f.dpkg-* 2> /dev/null || true
-+ _g=$_g$_f/
-+ else
-+ message "/$_g$_f: nonexistent; directory contents of /$_g:"
-+ ls -l /$_g
-+ break
-+ fi
-+ done
-+ shift
-+ done
-+}
-+
-+find_culprits () {
-+ #local f p dpkg_info_dir possible_culprits smoking_guns bad_packages package \
-+ # msg
-+
-+ reject_whitespace "$1"
-+ message "Searching for overlapping packages..."
-+ _dpkg_info_dir=/var/lib/dpkg/info
-+ if [ -d $_dpkg_info_dir ]; then
-+ if [ "$(echo $_dpkg_info_dir/*.list)" != "$_dpkg_info_dir/*.list" ]; then
-+ _possible_culprits=$(ls -1 $_dpkg_info_dir/*.list | egrep -v \
-+ "(xbase-clients|x11-common|xfs|xlibs)")
-+ if [ -n "$_possible_culprits" ]; then
-+ _smoking_guns=$(grep -l "$1" $_possible_culprits || true)
-+ if [ -n "$_smoking_guns" ]; then
-+ _bad_packages=$(printf "\\n")
-+ for f in $_smoking_guns; do
-+ # too bad you can't nest parameter expansion voodoo
-+ p=${f%*.list} # strip off the trailing ".list"
-+ _package=${p##*/} # strip off the directories
-+ _bad_packages=$(printf "%s\n%s" "$_bad_packages" "$_package")
-+ done
-+ _msg=$(cat <<EOF
-+The following packages appear to have file overlaps with the X.Org packages;
-+these packages are either very old, or in violation of Debian Policy. Try
-+upgrading each of these packages to the latest available version if possible:
-+for example, with the command "apt-get install". If no newer version of a
-+package is available, you will have to remove it; for example, with the command
-+"apt-get remove". If even the latest available version of the package has
-+this file overlap, please file a bug against that package with the Debian Bug
-+Tracking System. You may want to refer the package maintainer to section 12.8
-+of the Debian Policy manual.
-+EOF
-+)
-+ message "$_msg"
-+ message "The overlapping packages are: $_bad_packages"
-+ else
-+ message "no overlaps found."
-+ fi
-+ fi
-+ else
-+ message "cannot search; no matches for $_dpkg_info_dir/*.list."
-+ fi
-+ else
-+ message "cannot search; $_dpkg_info_dir does not exist."
-+ fi
-+}
-+
-+# we require a readlink command or shell function
-+if ! which readlink > /dev/null 2>&1; then
-+ message "The readlink command was not found. Please install version" \
-+ "1.13.1 or later of the debianutils package."
-+ readlink () {
-+ # returns what symlink in $1 actually points to
-+ perl -e '$l = shift; exit 1 unless -l $l; $r = readlink $l; exit 1 unless $r; print "$r\n"' "$1"
-+ }
-+fi
-+
-+check_symlink () {
-+ # syntax: check_symlink symlink
-+ #
-+ # See if specified symlink points where it is supposed to. Return 0 if it
-+ # does, and 1 if it does not.
-+ #
-+ # Primarily used by check_symlinks_and_warn() and check_symlinks_and_bomb().
-+
-+ #local symlink
-+
-+ # validate arguments
-+ if [ $# -ne 1 ]; then
-+ usage_error "check_symlink() called with wrong number of arguments;" \
-+ "expected 1, got $#"
-+ exit $SHELL_LIB_USAGE_ERROR
-+ fi
-+
-+ _symlink="$1"
-+
-+ if [ "$(maplink "$_symlink")" = "$(readlink "$_symlink")" ]; then
-+ return 0
-+ else
-+ return 1
-+ fi
-+}
-+
-+check_symlinks_and_warn () {
-+ # syntax: check_symlinks_and_warn symlink ...
-+ #
-+ # For each argument, check for symlink sanity, and warn if it isn't sane.
-+ #
-+ # Call this function from a preinst script in the event $1 is "upgrade" or
-+ # "install".
-+
-+ #local errmsg symlink
-+
-+ # validate arguments
-+ if [ $# -lt 1 ]; then
-+ usage_error "check_symlinks_and_warn() called with wrong number of" \
-+ "arguments; expected at least 1, got $#"
-+ exit $SHELL_LIB_USAGE_ERROR
-+ fi
-+
-+ while [ -n "$1" ]; do
-+ _symlink="$1"
-+ if [ -L "$_symlink" ]; then
-+ if ! check_symlink "$_symlink"; then
-+ observe "$_symlink symbolic link points to wrong location" \
-+ "$(readlink "$_symlink"); removing"
-+ rm "$_symlink"
-+ fi
-+ elif [ -e "$_symlink" ]; then
-+ _errmsg="$_symlink exists and is not a symbolic link; this package cannot"
-+ _errmsg="$_errmsg be installed until this"
-+ if [ -f "$_symlink" ]; then
-+ _errmsg="$_errmsg file"
-+ elif [ -d "$_symlink" ]; then
-+ _errmsg="$_errmsg directory"
-+ else
-+ _errmsg="$_errmsg thing"
-+ fi
-+ _errmsg="$_errmsg is removed"
-+ die "$_errmsg"
-+ fi
-+ shift
-+ done
-+}
-+
-+check_symlinks_and_bomb () {
-+ # syntax: check_symlinks_and_bomb symlink ...
-+ #
-+ # For each argument, check for symlink sanity, and bomb if it isn't sane.
-+ #
-+ # Call this function from a postinst script.
-+
-+ #local problem symlink
-+
-+ # validate arguments
-+ if [ $# -lt 1 ]; then
-+ usage_error "check_symlinks_and_bomb() called with wrong number of"
-+ "arguments; expected at least 1, got $#"
-+ exit $SHELL_LIB_USAGE_ERROR
-+ fi
-+
-+ while [ -n "$1" ]; do
-+ _problem=
-+ _symlink="$1"
-+ if [ -L "$_symlink" ]; then
-+ if ! check_symlink "$_symlink"; then
-+ _problem=yes
-+ warn "$_symlink symbolic link points to wrong location" \
-+ "$(readlink "$_symlink")"
-+ fi
-+ elif [ -e "$_symlink" ]; then
-+ _problem=yes
-+ warn "$_symlink is not a symbolic link"
-+ else
-+ _problem=yes
-+ warn "$_symlink symbolic link does not exist"
-+ fi
-+ if [ -n "$_problem" ]; then
-+ analyze_path "$_symlink" "$(readlink "$_symlink")"
-+ find_culprits "$_symlink"
-+ die "bad symbolic links on system"
-+ fi
-+ shift
-+ done
-+}
-+
-+font_update () {
-+ # run $UPDATECMDS in $FONTDIRS
-+
-+ #local dir cmd shortcmd x_font_dir_prefix
-+
-+ _x_font_dir_prefix="/usr/share/fonts/X11"
-+
-+ if [ -z "$UPDATECMDS" ]; then
-+ usage_error "font_update() called but \$UPDATECMDS not set"
-+ fi
-+ if [ -z "$FONTDIRS" ]; then
-+ usage_error "font_update() called but \$FONTDIRS not set"
-+ fi
-+
-+ reject_unlikely_path_chars "$UPDATECMDS"
-+ reject_unlikely_path_chars "$FONTDIRS"
-+
-+ for _dir in $FONTDIRS; do
-+ if [ -d "$_x_font_dir_prefix/$_dir" ]; then
-+ for _cmd in $UPDATECMDS; do
-+ if which "$_cmd" > /dev/null 2>&1; then
-+ _shortcmd=${_cmd##*/}
-+ observe "running $_shortcmd in $_dir font directory"
-+ _cmd_opts=
-+ if [ "$_shortcmd" = "update-fonts-alias" ]; then
-+ _cmd_opts=--x11r7-layout
-+ fi
-+ if [ "$_shortcmd" = "update-fonts-dir" ]; then
-+ _cmd_opts=--x11r7-layout
-+ fi
-+ if [ "$_shortcmd" = "update-fonts-scale" ]; then
-+ _cmd_opts=--x11r7-layout
-+ fi
-+ $_cmd $_cmd_opts $_dir || warn "$_cmd $_cmd_opts $_dir" \
-+ "failed; font directory data may not" \
-+ "be up to date"
-+ else
-+ warn "$_cmd not found; not updating corresponding $_dir font" \
-+ "directory data"
-+ fi
-+ done
-+ else
-+ warn "$_dir is not a directory; not updating font directory data"
-+ fi
-+ done
-+}
-+
-+remove_conffile_prepare () {
-+ # syntax: remove_conffile_prepare filename official_md5sum ...
-+ #
-+ # Check a conffile "filename" against a list of canonical MD5 checksums.
-+ # If the file's current MD5 checksum matches one of the "official_md5sum"
-+ # operands provided, then prepare the conffile for removal from the system.
-+ # We defer actual deletion until the package is configured so that we can
-+ # roll this operation back if package installation fails.
-+ #
-+ # Call this function from a preinst script in the event $1 is "upgrade" or
-+ # "install" and verify $2 to ensure the package is being upgraded from a
-+ # version (or installed over a version removed-but-not-purged) prior to the
-+ # one in which the conffile was obsoleted.
-+
-+ #local conffile current_checksum
-+
-+ # validate arguments
-+ if [ $# -lt 2 ]; then
-+ usage_error "remove_conffile_prepare() called with wrong number of" \
-+ "arguments; expected at least 2, got $#"
-+ exit $SHELL_LIB_USAGE_ERROR
-+ fi
-+
-+ _conffile="$1"
-+ shift
-+
-+ # does the _conffile even exist?
-+ if [ -e "$_conffile" ]; then
-+ # calculate its checksum
-+ _current_checksum=$(md5sum < "$_conffile" | sed 's/[[:space:]].*//')
-+ # compare it to each supplied checksum
-+ while [ -n "$1" ]; do
-+ if [ "$_current_checksum" = "$1" ]; then
-+ # we found a match; move the confffile and stop looking
-+ observe "preparing obsolete conffile $_conffile for removal"
-+ mv "$_conffile" "$_conffile.$THIS_PACKAGE-tmp"
-+ break
-+ fi
-+ shift
-+ done
-+ fi
-+}
-+
-+remove_conffile_commit () {
-+ # syntax: remove_conffile_commit filename
-+ #
-+ # Complete the removal of a conffile "filename" that has become obsolete.
-+ #
-+ # Call this function from a postinst script after having used
-+ # remove_conffile_prepare() in the preinst.
-+
-+ #local conffile
-+
-+ # validate arguments
-+ if [ $# -ne 1 ]; then
-+ usage_error "remove_conffile_commit() called with wrong number of" \
-+ "arguments; expected 1, got $#"
-+ exit $SHELL_LIB_USAGE_ERROR
-+ fi
-+
-+ _conffile="$1"
-+
-+ # if the temporary file created by remove_conffile_prepare() exists, remove it
-+ if [ -e "$_conffile.$THIS_PACKAGE-tmp" ]; then
-+ observe "committing removal of obsolete conffile $_conffile"
-+ rm "$_conffile.$THIS_PACKAGE-tmp"
-+ fi
-+}
-+
-+remove_conffile_rollback () {
-+ # syntax: remove_conffile_rollback filename
-+ #
-+ # Roll back the removal of a conffile "filename".
-+ #
-+ # Call this function from a postrm script in the event $1 is "abort-upgrade"
-+ # or "abort-install" is after having used remove_conffile_prepare() in the
-+ # preinst.
-+
-+ #local conffile
-+
-+ # validate arguments
-+ if [ $# -ne 1 ]; then
-+ usage_error "remove_conffile_rollback() called with wrong number of" \
-+ "arguments; expected 1, got $#"
-+ exit $SHELL_LIB_USAGE_ERROR
-+ fi
-+
-+ _conffile="$1"
-+
-+ # if the temporary file created by remove_conffile_prepare() exists, move it
-+ # back
-+ if [ -e "$_conffile.$THIS_PACKAGE-tmp" ]; then
-+ observe "rolling back removal of obsolete conffile $_conffile"
-+ mv "$_conffile.$THIS_PACKAGE-tmp" "$_conffile"
-+ fi
-+}
-+
-+replace_conffile_with_symlink_prepare () {
-+ # syntax: replace_conffile_with_symlink_prepare oldfilename newfilename \
-+ # official_md5sum ...
-+ #
-+ # Check a conffile "oldfilename" against a list of canonical MD5 checksums.
-+ # If the file's current MD5 checksum matches one of the "official_md5sum"
-+ # operands provided, then prepare the conffile for removal from the system.
-+ # We defer actual deletion until the package is configured so that we can
-+ # roll this operation back if package installation fails. Otherwise copy it
-+ # to newfilename and let dpkg handle it through conffiles mechanism.
-+ #
-+ # Call this function from a preinst script in the event $1 is "upgrade" or
-+ # "install" and verify $2 to ensure the package is being upgraded from a
-+ # version (or installed over a version removed-but-not-purged) prior to the
-+ # one in which the conffile was obsoleted.
-+
-+ #local conffile current_checksum
-+
-+ # validate arguments
-+ if [ $# -lt 3 ]; then
-+ usage_error "replace_conffile_with_symlink_prepare() called with wrong" \
-+ " number of arguments; expected at least 3, got $#"
-+ exit $SHELL_LIB_USAGE_ERROR
-+ fi
-+
-+ _oldconffile="$1"
-+ shift
-+ _newconffile="$1"
-+ shift
-+
-+ remove_conffile_prepare "$_oldconffile" "$@"
-+ # If $_oldconffile still exists, then md5sums didn't match.
-+ # Copy it to new one.
-+ if [ -f "$_oldconffile" ]; then
-+ cp "$_oldconffile" "$_newconffile"
-+ fi
-+
-+}
-+
-+replace_conffile_with_symlink_commit () {
-+ # syntax: replace_conffile_with_symlink_commit oldfilename
-+ #
-+ # Complete the removal of a conffile "oldfilename" that has been
-+ # replaced by a symlink.
-+ #
-+ # Call this function from a postinst script after having used
-+ # replace_conffile_with_symlink_prepare() in the preinst.
-+
-+ #local conffile
-+
-+ # validate arguments
-+ if [ $# -ne 1 ]; then
-+ usage_error "replace_conffile_with_symlink_commit() called with wrong" \
-+ "number of arguments; expected 1, got $#"
-+ exit $SHELL_LIB_USAGE_ERROR
-+ fi
-+
-+ _conffile="$1"
-+
-+ remove_conffile_commit "$_conffile"
-+}
-+
-+replace_conffile_with_symlink_rollback () {
-+ # syntax: replace_conffile_with_symlink_rollback oldfilename newfilename
-+ #
-+ # Roll back the replacing of a conffile "oldfilename" with symlink to
-+ # "newfilename".
-+ #
-+ # Call this function from a postrm script in the event $1 is "abort-upgrade"
-+ # or "abort-install" and verify $2 to ensure the package failed to upgrade
-+ # from a version (or install over a version removed-but-not-purged) prior
-+ # to the one in which the conffile was obsoleted.
-+ # You should have used replace_conffile_with_symlink_prepare() in the
-+ # preinst.
-+
-+ #local conffile
-+
-+ # validate arguments
-+ if [ $# -ne 2 ]; then
-+ usage_error "replace_conffile_with_symlink_rollback() called with wrong" \
-+ "number of arguments; expected 2, got $#"
-+ exit $SHELL_LIB_USAGE_ERROR
-+ fi
-+
-+ _oldconffile="$1"
-+ _newconffile="$2"
-+
-+ remove_conffile_rollback "$_oldconffile"
-+ if [ -f "$_newconffile" ]; then
-+ rm "$_newconffile"
-+ fi
-+}
-+
-+run () {
-+ # syntax: run command [ argument ... ]
-+ #
-+ # Run specified command with optional arguments and report its exit status.
-+ # Useful for commands whose exit status may be nonzero, but still acceptable,
-+ # or commands whose failure is not fatal to us.
-+ #
-+ # NOTE: Do *not* use this function with db_get or db_metaget commands; in
-+ # those cases the return value of the debconf command *must* be checked
-+ # before the string returned by debconf is used for anything.
-+
-+ #local retval
-+
-+ # validate arguments
-+ if [ $# -lt 1 ]; then
-+ usage_error "run() called with wrong number of arguments; expected at" \
-+ "least 1, got $#"
-+ exit $SHELL_LIB_USAGE_ERROR
-+ fi
-+
-+ "$@" || _retval=$?
-+
-+ if [ ${_retval:-0} -ne 0 ]; then
-+ observe "command \"$*\" exited with status $_retval"
-+ fi
-+}
-+
-+register_x_lib_dir_with_ld_so () {
-+ # syntax: register_x_lib_dir_with_ld_so
-+ #
-+ # Configure the dynamic loader ld.so to search /usr/X11R6/lib for shared
-+ # libraries.
-+ #
-+ # Call this function from the postinst script of a package that places a
-+ # shared library in /usr/X11R6/lib, before invoking ldconfig.
-+
-+ #local dir ldsoconf
-+
-+ _dir="/usr/X11R6/lib"
-+ _ldsoconf="/etc/ld.so.conf"
-+
-+ # is the line not already present?
-+ if ! fgrep -qsx "$_dir" "$_ldsoconf"; then
-+ observe "adding $_dir directory to $_ldsoconf"
-+ echo "$_dir" >> "$_ldsoconf"
-+ fi
-+}
-+
-+deregister_x_lib_dir_with_ld_so () {
-+ # syntax: deregister_x_lib_dir_with_ld_so
-+ #
-+ # Configure dynamic loader ld.so to not search /usr/X11R6/lib for shared
-+ # libraries, if and only if no shared libaries remain there.
-+ #
-+ # Call this function from the postrm script of a package that places a shared
-+ # library in /usr/X11R6/lib, in the event "$1" is "remove", and before
-+ # invoking ldconfig.
-+
-+ #local dir ldsoconf fgrep_status cmp_status
-+
-+ _dir="/usr/X11R6/lib"
-+ _ldsoconf="/etc/ld.so.conf"
-+
-+ # is the line present?
-+ if fgrep -qsx "$_dir" "$_ldsoconf"; then
-+ # are there any shared objects in the directory?
-+ if [ "$(echo "$_dir"/lib*.so.*.*)" = "$_dir/lib*.so.*.*" ]; then
-+ # glob expansion produced nothing, so no shared libraries are present
-+ observe "removing $_dir directory from $_ldsoconf"
-+ # rewrite the file (very carefully)
-+ set +e
-+ fgrep -svx "$_dir" "$_ldsoconf" > "$_ldsoconf.dpkg-tmp"
-+ _fgrep_status=$?
-+ set -e
-+ case $_fgrep_status in
-+ 0|1) ;; # we don't actually care if any lines matched or not
-+ *) die "error reading \"$_ldsoconf\"; fgrep exited with status" \
-+ "$_fgrep_status" ;;
-+ esac
-+ set +e
-+ cmp -s "$_ldsoconf.dpkg-tmp" "$_ldsoconf"
-+ _cmp_status=$?
-+ set -e
-+ case $_cmp_status in
-+ 0) rm "$_ldsoconf.dpkg-tmp" ;; # files are identical
-+ 1) mv "$_ldsoconf.dpkg-tmp" "$_ldsoconf" ;; # files differ
-+ *) die "error comparing \"$_ldsoconf.dpkg-tmp\" to \"$_ldsoconf\";" \
-+ "cmp exited with status $_cmp_status" ;;
-+ esac
-+ fi
-+ fi
-+}
-+
-+make_symlink_sane () {
-+ # syntax: make_symlink_sane symlink target
-+ #
-+ # Ensure that the symbolic link symlink exists, and points to target.
-+ #
-+ # If symlink does not exist, create it and point it at target.
-+ #
-+ # If symlink exists but is not a symbolic link, back it up.
-+ #
-+ # If symlink exists, is a symbolic link, but points to the wrong location, fix
-+ # it.
-+ #
-+ # If symlink exists, is a symbolic link, and already points to target, do
-+ # nothing.
-+ #
-+ # This function wouldn't be needed if ln had an -I, --idempotent option.
-+
-+ # Validate arguments.
-+ if [ $# -ne 2 ]; then
-+ usage_error "make_symlink_sane() called with wrong number of arguments;" \
-+ "expected 2, got $#"
-+ exit $SHELL_LIB_USAGE_ERROR
-+ fi
-+
-+ # We could just use the positional parameters as-is, but that makes things
-+ # harder to follow.
-+ #local symlink target
-+
-+ _symlink="$1"
-+ _target="$2"
-+
-+ if [ -L "$_symlink" ] && [ "$(readlink "$_symlink")" = "$_target" ]; then
-+ observe "link from $_symlink to $_target already exists"
-+ else
-+ observe "creating symbolic link from $_symlink to $_target"
-+ mkdir -p "${_target%/*}" "${_symlink%/*}"
-+ ln -s -b -S ".dpkg-old" "$_target" "$_symlink"
-+ fi
-+}
-+
-+migrate_dir_to_symlink () {
-+ # syntax: migrate_dir_to_symlink old_location new_location
-+ #
-+ # Per Debian Policy section 6.5.4, "A directory will never be replaced by a
-+ # symbolic link to a directory or vice versa; instead, the existing state
-+ # (symlink or not) will be left alone and dpkg will follow the symlink if
-+ # there is one."
-+ #
-+ # We have to do it ourselves.
-+ #
-+ # This function moves the contents of old_location, a directory, into
-+ # new_location, a directory, then makes old_location a symbolic link to
-+ # new_location.
-+ #
-+ # old_location need not exist, but if it does, it must be a directory (or a
-+ # symlink to a directory). If it is not, it is backed up. If new_location
-+ # exists already and is not a directory, it is backed up.
-+ #
-+ # This function should be called from a package's preinst so that other
-+ # packages unpacked after this one --- but before this package's postinst runs
-+ # --- are unpacked into new_location even if their payloads contain
-+ # old_location filespecs.
-+
-+ # Validate arguments.
-+ if [ $# -ne 2 ]; then
-+ usage_error "migrate_dir_to_symlink() called with wrong number of"
-+ "arguments; expected 2, got $#"
-+ exit $SHELL_LIB_USAGE_ERROR
-+ fi
-+
-+ # We could just use the positional parameters as-is, but that makes things
-+ # harder to follow.
-+ local _new _old
-+
-+ _old="$1"
-+ _new="$2"
-+
-+ # Is old location a symlink?
-+ if [ -L "$_old" ]; then
-+ # Does it already point to new location?
-+ if [ "$(readlink "$_old")" = "$_new" ]; then
-+ # Nothing to do; migration has already been done.
-+ observe "migration of $_old to $_new already done"
-+ return 0
-+ else
-+ # Back it up.
-+ warn "backing up symbolic link $_old as $_old.dpkg-old"
-+ mv -b "$_old" "$_old.dpkg-old"
-+ fi
-+ fi
-+
-+ # Does old location exist, but is not a directory?
-+ if [ -e "$_old" ] && ! [ -d "$_old" ]; then
-+ # Back it up.
-+ warn "backing up non-directory $_old as $_old.dpkg-old"
-+ mv -b "$_old" "$_old.dpkg-old"
-+ fi
-+
-+ observe "migrating $_old to $_new"
-+
-+ # Is new location a symlink?
-+ if [ -L "$_new" ]; then
-+ # Does it point the wrong way, i.e., back to where we're migrating from?
-+ if [ "$(readlink "$_new")" = "$_old" ]; then
-+ # Get rid of it.
-+ observe "removing symbolic link $_new which points to $_old"
-+ rm "$_new"
-+ else
-+ # Back it up.
-+ warn "backing up symbolic link $_new as $_new.dpkg-old"
-+ mv -b "$_new" "$_new.dpkg-old"
-+ fi
-+ fi
-+
-+ # Does new location exist, but is not a directory?
-+ if [ -e "$_new" ] && ! [ -d "$_new" ]; then
-+ warn "backing up non-directory $_new as $_new.dpkg-old"
-+ mv -b "$_new" "$_new.dpkg-old"
-+ fi
-+
-+ # Create new directory if it does not yet exist.
-+ if ! [ -e "$_new" ]; then
-+ observe "creating $_new"
-+ mkdir -p "$_new"
-+ fi
-+
-+ # Copy files in old location to new location. Back up any filenames that
-+ # already exist in the new location with the extension ".dpkg-old".
-+ observe "copying files from $_old to $_new"
-+ if ! (cd "$_old" && cp -a -b -S ".dpkg-old" . "$_new"); then
-+ die "error(s) encountered while copying files from $_old to $_new"
-+ fi
-+
-+ # Remove files at old location.
-+ observe "removing $_old"
-+ rm -r "$_old"
-+
-+ # Create symlink from old location to new location.
-+ make_symlink_sane "$_old" "$_new"
-+}
-+
-+# vim:set ai et sw=2 ts=2 tw=80:
-+
-+# GOBSTOPPER: The X Strike Force shell library ends here.
diff --git a/recipes/xorg-driver/xf86-input-evtouch_0.8.8.bb b/recipes/xorg-driver/xf86-input-evtouch_0.8.8.bb
index 2b016e274d..32a39c5346 100644
--- a/recipes/xorg-driver/xf86-input-evtouch_0.8.8.bb
+++ b/recipes/xorg-driver/xf86-input-evtouch_0.8.8.bb
@@ -1,15 +1,15 @@
require xorg-driver-input.inc
-PR = "r11"
+PR = "r12"
DESCRIPTION = "X.Org X server -- evtouch input driver"
-SRC_URI = "http://www.conan.de/touchscreen/xf86-input-evtouch-${PV}.tar.bz2 \
- file://xf86-input-evtouch_0.8.8-0ubuntu6.diff;patch=1 \
- file://20_fix_calibrate_submission_directions.patch;patch=1 \
- file://21_more_calibration_fixups.patch;patch=1 \
+SRC_URI = "http://www.conan.de/touchscreen/xf86-input-evtouch-${PV}.tar.bz2;name=archive \
file://fdi/*.fdi \
file://udev-ett-tc5uh.patch;patch=1 \
+ file://02_calibration_1.6.patch;patch=1 \
+ file://03_server-1.6-ftbfs.diff;patch=1 \
+ file://04_server-1.7-ftbfs.diff;patch=1 \
"
EXTRA_OECONF = "--enable-evcalibrate \
@@ -22,3 +22,5 @@ do_install_append() {
}
FILES_${PN} += "${datadir}/hal"
+SRC_URI[archive.md5sum] = "4d8e092356d8353002f60a4907046c13"
+SRC_URI[archive.sha256sum] = "eafc4a09729a4b2b6120430c71e1954c5cac299ad6adf2f9a40aee8a7b51e476"
diff --git a/recipes/xorg-driver/xf86-input-fpit_1.1.0.bb b/recipes/xorg-driver/xf86-input-fpit_1.1.0.bb
index 311caf6553..c7e92f18ef 100644
--- a/recipes/xorg-driver/xf86-input-fpit_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-fpit_1.1.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "a31066a2076d18619ceaea67f6d89698"
+SRC_URI[archive.sha256sum] = "8ee3b2df90516182460fbda025153aa7fb2c6ba343e4239d225963a287f694f8"
diff --git a/recipes/xorg-driver/xf86-input-fpit_1.2.0.bb b/recipes/xorg-driver/xf86-input-fpit_1.2.0.bb
index 311caf6553..f22f53ef16 100644
--- a/recipes/xorg-driver/xf86-input-fpit_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-fpit_1.2.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "0f3e013d5ff58e0aba3d9e1d18830291"
+SRC_URI[archive.sha256sum] = "87e3dd97d57ddb520cafa5e68fa7846cfc3d9d71cb054cdf0e1d650c7b1cff7e"
diff --git a/recipes/xorg-driver/xf86-input-fpit_1.3.0.bb b/recipes/xorg-driver/xf86-input-fpit_1.3.0.bb
index 311caf6553..3fac32a498 100644
--- a/recipes/xorg-driver/xf86-input-fpit_1.3.0.bb
+++ b/recipes/xorg-driver/xf86-input-fpit_1.3.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "e5bfda480f25121e3c4222e5e1eb5880"
+SRC_URI[archive.sha256sum] = "d1ced3b8c6d799c3af1c93e72dc571cb30d38083e1221b8ea0b2d4fc48a7eef8"
diff --git a/recipes/xorg-driver/xf86-input-hyperpen_1.1.0.bb b/recipes/xorg-driver/xf86-input-hyperpen_1.1.0.bb
index 311caf6553..4b0f52892e 100644
--- a/recipes/xorg-driver/xf86-input-hyperpen_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-hyperpen_1.1.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "1dfccb75069e61e0c6f990b47eb58c40"
+SRC_URI[archive.sha256sum] = "d1c20a3340e06c5634759832dcf2edc6acb41476a4f637eba6880730e607f493"
diff --git a/recipes/xorg-driver/xf86-input-hyperpen_1.2.0.bb b/recipes/xorg-driver/xf86-input-hyperpen_1.2.0.bb
index 311caf6553..a20df3cedf 100644
--- a/recipes/xorg-driver/xf86-input-hyperpen_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-hyperpen_1.2.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "175c1e1ad668ebbbe212c1e975dd14f9"
+SRC_URI[archive.sha256sum] = "689d1c5c1f21eed00ae03a01c57482f7bbef36d7e07156556c99febe28c7d413"
diff --git a/recipes/xorg-driver/xf86-input-hyperpen_1.3.0.bb b/recipes/xorg-driver/xf86-input-hyperpen_1.3.0.bb
index 311caf6553..f43383efc7 100644
--- a/recipes/xorg-driver/xf86-input-hyperpen_1.3.0.bb
+++ b/recipes/xorg-driver/xf86-input-hyperpen_1.3.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "c50d0da3206d18d9d94f720e3688eca5"
+SRC_URI[archive.sha256sum] = "e7a13a7597fa32f05d595d05a66cf94c529ba8ce1d03249bb9da5be9512c4b7b"
diff --git a/recipes/xorg-driver/xf86-input-jamstudio_1.1.0.bb b/recipes/xorg-driver/xf86-input-jamstudio_1.1.0.bb
index 34a497438b..cfb82de82b 100644
--- a/recipes/xorg-driver/xf86-input-jamstudio_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-jamstudio_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "a32e36a24545791a3408cdc5563b6523"
+SRC_URI[archive.sha256sum] = "ce41b360bd08ea31036b79cfc25a32c854147522e4580f5ca1a203233e657e1a"
diff --git a/recipes/xorg-driver/xf86-input-jamstudio_1.2.0.bb b/recipes/xorg-driver/xf86-input-jamstudio_1.2.0.bb
index 34a497438b..6ba69e163a 100644
--- a/recipes/xorg-driver/xf86-input-jamstudio_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-jamstudio_1.2.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "8011f90d7dd801d26e8c3dd058633978"
+SRC_URI[archive.sha256sum] = "c5bbade96f1849b45f665a54e08ac8f9d5a94d31a8a680edc4d3c9361d164ac0"
diff --git a/recipes/xorg-driver/xf86-input-joystick_1.1.0.bb b/recipes/xorg-driver/xf86-input-joystick_1.1.0.bb
index 311caf6553..4785a55fe7 100644
--- a/recipes/xorg-driver/xf86-input-joystick_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-joystick_1.1.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "e0025215542c7a11c5a7f9548631dbd7"
+SRC_URI[archive.sha256sum] = "11c3e8056e8f44b9a6f348b5366c7e725155563374770b82e339e913b9a60d16"
diff --git a/recipes/xorg-driver/xf86-input-joystick_1.3.1.bb b/recipes/xorg-driver/xf86-input-joystick_1.3.1.bb
index a53297fd8a..fb43f55bd7 100644
--- a/recipes/xorg-driver/xf86-input-joystick_1.3.1.bb
+++ b/recipes/xorg-driver/xf86-input-joystick_1.3.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- joystick input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "ff25ea697cfa1570cc28f4b9cf9c761f"
+SRC_URI[archive.sha256sum] = "1d33b9668e039ea9adc0680c1f2971785508cfd74b2215749db23af23ef8f9ce"
diff --git a/recipes/xorg-driver/xf86-input-joystick_1.3.2.bb b/recipes/xorg-driver/xf86-input-joystick_1.3.2.bb
index a53297fd8a..71994c6525 100644
--- a/recipes/xorg-driver/xf86-input-joystick_1.3.2.bb
+++ b/recipes/xorg-driver/xf86-input-joystick_1.3.2.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- joystick input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "e48b99e55093525ebb7811a014391a0b"
+SRC_URI[archive.sha256sum] = "6cad238e0a54dec75c5224f9c0774b4fce2a03b06f1c61b404e9ea97d4941d4b"
diff --git a/recipes/xorg-driver/xf86-input-joystick_1.5.0.bb b/recipes/xorg-driver/xf86-input-joystick_1.5.0.bb
index a53297fd8a..9c567aa883 100644
--- a/recipes/xorg-driver/xf86-input-joystick_1.5.0.bb
+++ b/recipes/xorg-driver/xf86-input-joystick_1.5.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- joystick input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "79b20f86d1b2e625ae65e35c3457027f"
+SRC_URI[archive.sha256sum] = "718118c5d769529f604c1ff099fe637173442cf01fc40bdef7d45f4baea282a9"
diff --git a/recipes/xorg-driver/xf86-input-keyboard_1.1.1.bb b/recipes/xorg-driver/xf86-input-keyboard_1.1.1.bb
index b4ef6c683e..a6eba7c21d 100644
--- a/recipes/xorg-driver/xf86-input-keyboard_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-input-keyboard_1.1.1.bb
@@ -5,3 +5,5 @@ PE = "1"
DEPENDS += " kbproto"
+SRC_URI[archive.md5sum] = "babf094e37bdfc08076d4adb4c69c1d9"
+SRC_URI[archive.sha256sum] = "b7e7377d75f3a10cceb5df18019b8e4498fbed0100478edd4af75bf8cd45d6fd"
diff --git a/recipes/xorg-driver/xf86-input-keyboard_1.2.0.bb b/recipes/xorg-driver/xf86-input-keyboard_1.2.0.bb
index b4ef6c683e..3949dea628 100644
--- a/recipes/xorg-driver/xf86-input-keyboard_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-keyboard_1.2.0.bb
@@ -5,3 +5,5 @@ PE = "1"
DEPENDS += " kbproto"
+SRC_URI[archive.md5sum] = "06e14029e00b32ed085769775b398efd"
+SRC_URI[archive.sha256sum] = "8c45fc324ea01377f9932250824ee1769bdf1eab6e4b661c22a39deb0b01580a"
diff --git a/recipes/xorg-driver/xf86-input-keyboard_1.2.2.bb b/recipes/xorg-driver/xf86-input-keyboard_1.2.2.bb
index b4ef6c683e..d1f111febe 100644
--- a/recipes/xorg-driver/xf86-input-keyboard_1.2.2.bb
+++ b/recipes/xorg-driver/xf86-input-keyboard_1.2.2.bb
@@ -5,3 +5,5 @@ PE = "1"
DEPENDS += " kbproto"
+SRC_URI[archive.md5sum] = "ab3122921f6359c54e250879288ffd47"
+SRC_URI[archive.sha256sum] = "c25b35524eaf00928d97bd0d8bf9e489d92993b133461b5f4d8d9655d37ec072"
diff --git a/recipes/xorg-driver/xf86-input-keyboard_1.3.1.bb b/recipes/xorg-driver/xf86-input-keyboard_1.3.1.bb
index 28a834a274..94aefb6be6 100644
--- a/recipes/xorg-driver/xf86-input-keyboard_1.3.1.bb
+++ b/recipes/xorg-driver/xf86-input-keyboard_1.3.1.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X.Org X server -- keyboard input driver"
DEPENDS += " kbproto"
+SRC_URI[archive.md5sum] = "ebe5dcf8eed819103909f18321fc3b9d"
+SRC_URI[archive.sha256sum] = "7b514715dfb5a2512dea3355bc3f09eb879d7184440c5525f0a9d29ec9f3be42"
diff --git a/recipes/xorg-driver/xf86-input-keyboard_1.3.2.bb b/recipes/xorg-driver/xf86-input-keyboard_1.3.2.bb
index 28a834a274..b8ba441e28 100644
--- a/recipes/xorg-driver/xf86-input-keyboard_1.3.2.bb
+++ b/recipes/xorg-driver/xf86-input-keyboard_1.3.2.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X.Org X server -- keyboard input driver"
DEPENDS += " kbproto"
+SRC_URI[archive.md5sum] = "d6fe929c4f6085d6dd67f197ae9c42f6"
+SRC_URI[archive.sha256sum] = "33939ec65dbf56f49e1e7de854a1cf95446e40c533950431901567e67112aef2"
diff --git a/recipes/xorg-driver/xf86-input-keyboard_1.4.0.bb b/recipes/xorg-driver/xf86-input-keyboard_1.4.0.bb
index 28a834a274..079cf6d256 100644
--- a/recipes/xorg-driver/xf86-input-keyboard_1.4.0.bb
+++ b/recipes/xorg-driver/xf86-input-keyboard_1.4.0.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X.Org X server -- keyboard input driver"
DEPENDS += " kbproto"
+SRC_URI[archive.md5sum] = "fd17158ffeacecc8cc670604460cb98b"
+SRC_URI[archive.sha256sum] = "842d36cfca68ddab4f2c562c73bfd43ba76de2d490d60034f0c5dd524aa6d6a5"
diff --git a/recipes/xorg-driver/xf86-input-magellan_1.1.0.bb b/recipes/xorg-driver/xf86-input-magellan_1.1.0.bb
index 311caf6553..66c9f2b5a9 100644
--- a/recipes/xorg-driver/xf86-input-magellan_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-magellan_1.1.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "0d6a81aa864ac790d9a8b517ca7016ad"
+SRC_URI[archive.sha256sum] = "8eef54b50c428513a330ed7183ce37f269050252a4d1199d3b00ad6bf0a7833d"
diff --git a/recipes/xorg-driver/xf86-input-magellan_1.1.1.bb b/recipes/xorg-driver/xf86-input-magellan_1.1.1.bb
index 2bbf253d53..5db4a2c568 100644
--- a/recipes/xorg-driver/xf86-input-magellan_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-input-magellan_1.1.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- Magellan input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "8a966d3b74dc2a801ff09b895037090c"
+SRC_URI[archive.sha256sum] = "06da7d1b222ba47ba0c7fd561965d78f2c8e46f44c998cb768e98bdc3c0e1741"
diff --git a/recipes/xorg-driver/xf86-input-magellan_1.2.0.bb b/recipes/xorg-driver/xf86-input-magellan_1.2.0.bb
index 2bbf253d53..78b6631a04 100644
--- a/recipes/xorg-driver/xf86-input-magellan_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-magellan_1.2.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- Magellan input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "9801ba10f15f8be2420dfb3f3b5d5d27"
+SRC_URI[archive.sha256sum] = "c5285147a4df0b5b0fd5dcb7c0e5953bc982d3d6f2a2ed2e7767ead909a510e4"
diff --git a/recipes/xorg-driver/xf86-input-magictouch_1.0.0.5.bb b/recipes/xorg-driver/xf86-input-magictouch_1.0.0.5.bb
index 311caf6553..150cdb5b38 100644
--- a/recipes/xorg-driver/xf86-input-magictouch_1.0.0.5.bb
+++ b/recipes/xorg-driver/xf86-input-magictouch_1.0.0.5.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "d23f2791cd634ef85b7cc5e9da8f8407"
+SRC_URI[archive.sha256sum] = "9cedc831e9d86889f473fbe3b8f1478afe5ed8c0dd71492aeb896cc681d7444c"
diff --git a/recipes/xorg-driver/xf86-input-microtouch_1.1.0.bb b/recipes/xorg-driver/xf86-input-microtouch_1.1.0.bb
index 34a497438b..4516305731 100644
--- a/recipes/xorg-driver/xf86-input-microtouch_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-microtouch_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "7b3cc0330d70e7e4e07914fcb325b331"
+SRC_URI[archive.sha256sum] = "7f92f5531495ecfbfd00744198fd4b2aa3b8f5c188b115e55e865e961bca2039"
diff --git a/recipes/xorg-driver/xf86-input-microtouch_1.1.1.bb b/recipes/xorg-driver/xf86-input-microtouch_1.1.1.bb
index 9a90a80b9f..1f1965c35e 100644
--- a/recipes/xorg-driver/xf86-input-microtouch_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-input-microtouch_1.1.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- MicroTouch input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "9843fbea6cc0c4129e96ce9a6c893cf6"
+SRC_URI[archive.sha256sum] = "5f2f0b16705c6226081a452f9f876508c388b384fca69106d377cd134cfddfd3"
diff --git a/recipes/xorg-driver/xf86-input-microtouch_1.2.0.bb b/recipes/xorg-driver/xf86-input-microtouch_1.2.0.bb
index 9a90a80b9f..c99881b8bf 100644
--- a/recipes/xorg-driver/xf86-input-microtouch_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-microtouch_1.2.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- MicroTouch input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "1ad1aee7d8df84b9ea832d1e75963257"
+SRC_URI[archive.sha256sum] = "b3034e0a768c4f646ea954d59dd414d00df3238e845848081221af6efe864f3b"
diff --git a/recipes/xorg-driver/xf86-input-mouse_1.1.2.bb b/recipes/xorg-driver/xf86-input-mouse_1.1.2.bb
index eb464ad5a6..2edea15dcc 100644
--- a/recipes/xorg-driver/xf86-input-mouse_1.1.2.bb
+++ b/recipes/xorg-driver/xf86-input-mouse_1.1.2.bb
@@ -5,3 +5,5 @@ DESCRIPTION = "Mouse Support in X11"
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "d8bcd9fb1b4efb02acd251495f9a30c1"
+SRC_URI[archive.sha256sum] = "7d4c2ecbe8f9327f7c8093c05401ab68b22f3343bcf04e4838cc40c21b7f8e0a"
diff --git a/recipes/xorg-driver/xf86-input-mouse_1.2.1.bb b/recipes/xorg-driver/xf86-input-mouse_1.2.1.bb
index eb464ad5a6..3f17b11a1b 100644
--- a/recipes/xorg-driver/xf86-input-mouse_1.2.1.bb
+++ b/recipes/xorg-driver/xf86-input-mouse_1.2.1.bb
@@ -5,3 +5,5 @@ DESCRIPTION = "Mouse Support in X11"
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "72b07e65bbea6ab484d84c048f6835fb"
+SRC_URI[archive.sha256sum] = "82671998e2b02ad097e3d5cc7d964e11de0b3ca3dfec4876e8fa2a13af6aacc3"
diff --git a/recipes/xorg-driver/xf86-input-mouse_1.2.2.bb b/recipes/xorg-driver/xf86-input-mouse_1.2.2.bb
index eb464ad5a6..62723344bb 100644
--- a/recipes/xorg-driver/xf86-input-mouse_1.2.2.bb
+++ b/recipes/xorg-driver/xf86-input-mouse_1.2.2.bb
@@ -5,3 +5,5 @@ DESCRIPTION = "Mouse Support in X11"
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "c47c598e55e7080b8ea30f70781f7ca3"
+SRC_URI[archive.sha256sum] = "80e9cb52b2036b71289b2140bcd3ac202cf46fd42830761c53120ddac38e7edf"
diff --git a/recipes/xorg-driver/xf86-input-mouse_1.2.3.bb b/recipes/xorg-driver/xf86-input-mouse_1.2.3.bb
index e6325675f8..baf9b9b227 100644
--- a/recipes/xorg-driver/xf86-input-mouse_1.2.3.bb
+++ b/recipes/xorg-driver/xf86-input-mouse_1.2.3.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- mouse input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "47da1fa52584933d045528109f094eff"
+SRC_URI[archive.sha256sum] = "a07cb2169f43018c90b7889781c0db30cda0da03811edccb8c4db533166357ab"
diff --git a/recipes/xorg-driver/xf86-input-mouse_1.3.0.bb b/recipes/xorg-driver/xf86-input-mouse_1.3.0.bb
index e6325675f8..acc9826e55 100644
--- a/recipes/xorg-driver/xf86-input-mouse_1.3.0.bb
+++ b/recipes/xorg-driver/xf86-input-mouse_1.3.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- mouse input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "31a51b0e5ddc4fac19754f48a3adf881"
+SRC_URI[archive.sha256sum] = "054b253f366795c2865714ce8bc545c79e59aa9ce1b7a9a4a05b9c674dff9dec"
diff --git a/recipes/xorg-driver/xf86-input-mouse_1.4.0.bb b/recipes/xorg-driver/xf86-input-mouse_1.4.0.bb
index e6325675f8..55cbfac8f0 100644
--- a/recipes/xorg-driver/xf86-input-mouse_1.4.0.bb
+++ b/recipes/xorg-driver/xf86-input-mouse_1.4.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- mouse input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "e7dc0759c14a9bfd373917a49e5f7c7d"
+SRC_URI[archive.sha256sum] = "e6e1dbd64d41c826619a5881c5aeed46095bfdcb87c3e27d65292fc12a5bb7c7"
diff --git a/recipes/xorg-driver/xf86-input-mouse_1.5.0.bb b/recipes/xorg-driver/xf86-input-mouse_1.5.0.bb
index e6325675f8..8684a67362 100644
--- a/recipes/xorg-driver/xf86-input-mouse_1.5.0.bb
+++ b/recipes/xorg-driver/xf86-input-mouse_1.5.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- mouse input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "c58629fddf0782dad5c02da6aeb35521"
+SRC_URI[archive.sha256sum] = "f303e20872ab2fb20e07a7f734d17723346d2b4b8687ea2086f7a7468d1ab397"
diff --git a/recipes/xorg-driver/xf86-input-mutouch_1.1.0.bb b/recipes/xorg-driver/xf86-input-mutouch_1.1.0.bb
index 34a497438b..b173e8e579 100644
--- a/recipes/xorg-driver/xf86-input-mutouch_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-mutouch_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "98ae915c67cabf0e6d40a425dbdbe10b"
+SRC_URI[archive.sha256sum] = "cc67e0dd4f4fcc8d798f0bfe42b975132c5739bdd80809580a74182e4d1b62ea"
diff --git a/recipes/xorg-driver/xf86-input-mutouch_1.2.0.bb b/recipes/xorg-driver/xf86-input-mutouch_1.2.0.bb
index cce8e75524..e7dd5f0c1e 100644
--- a/recipes/xorg-driver/xf86-input-mutouch_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-mutouch_1.2.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
PE = "1"
DESCRIPTION = "X.Org X server -- muTouch input driver"
+SRC_URI[archive.md5sum] = "50711d390d2867e3fa7e06b59b2d575b"
+SRC_URI[archive.sha256sum] = "214f0831f36ebfc081b9f31f91ae27972ced9371b9b2256650998596a097061d"
diff --git a/recipes/xorg-driver/xf86-input-mutouch_1.2.1.bb b/recipes/xorg-driver/xf86-input-mutouch_1.2.1.bb
index cce8e75524..d5a137553b 100644
--- a/recipes/xorg-driver/xf86-input-mutouch_1.2.1.bb
+++ b/recipes/xorg-driver/xf86-input-mutouch_1.2.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
PE = "1"
DESCRIPTION = "X.Org X server -- muTouch input driver"
+SRC_URI[archive.md5sum] = "f28998cdfae2a4c41589299a4ee1f459"
+SRC_URI[archive.sha256sum] = "53bfe976042de69f87e28261ad581cf418c67b5cb69a09cfe1eea169021db35b"
diff --git a/recipes/xorg-driver/xf86-input-palmax_1.1.0.bb b/recipes/xorg-driver/xf86-input-palmax_1.1.0.bb
index 311caf6553..903f889bfa 100644
--- a/recipes/xorg-driver/xf86-input-palmax_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-palmax_1.1.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "0959dbf7972dfb95f56e4bd3f56447cf"
+SRC_URI[archive.sha256sum] = "5c00c85eed2950a575362bee2f21c2fa68eb8af81e7f1d451273a1302eac4145"
diff --git a/recipes/xorg-driver/xf86-input-palmax_1.2.0.bb b/recipes/xorg-driver/xf86-input-palmax_1.2.0.bb
index 1334751ca6..a3c93a0cb0 100644
--- a/recipes/xorg-driver/xf86-input-palmax_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-palmax_1.2.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
PE = "1"
DESCRIPTION = "X.Org X server -- Palmax input driver"
+SRC_URI[archive.md5sum] = "9655d2235569c5a6ac321c6fb89a6f3b"
+SRC_URI[archive.sha256sum] = "02177c339ba60fb6cc942d3bc93a322e94247f36a6fe90c7c1121694c929b05b"
diff --git a/recipes/xorg-driver/xf86-input-penmount_1.2.0.bb b/recipes/xorg-driver/xf86-input-penmount_1.2.0.bb
index f6032bceaa..0b5cfb0806 100644
--- a/recipes/xorg-driver/xf86-input-penmount_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-penmount_1.2.0.bb
@@ -5,3 +5,5 @@ PE = "1"
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "0589f2eaa84afb9bd49b226ce7dacdda"
+SRC_URI[archive.sha256sum] = "dea18a07cf8f59e7bc981cfa1f6ef476dd14f7d9bee3bb1a55a6cc49f766150e"
diff --git a/recipes/xorg-driver/xf86-input-penmount_1.2.1.bb b/recipes/xorg-driver/xf86-input-penmount_1.2.1.bb
index 1ed62d4cad..8d85f6b743 100644
--- a/recipes/xorg-driver/xf86-input-penmount_1.2.1.bb
+++ b/recipes/xorg-driver/xf86-input-penmount_1.2.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- Penmount input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "268af4dceda544d8c815b9b7e87d4536"
+SRC_URI[archive.sha256sum] = "fab08de727da6f56b82d8ecee451a52e7129ff80522e711c5322f1bd2fa9970a"
diff --git a/recipes/xorg-driver/xf86-input-penmount_1.3.0.bb b/recipes/xorg-driver/xf86-input-penmount_1.3.0.bb
index 1ed62d4cad..eef18af9c1 100644
--- a/recipes/xorg-driver/xf86-input-penmount_1.3.0.bb
+++ b/recipes/xorg-driver/xf86-input-penmount_1.3.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- Penmount input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "24594c0222e631fedccc7c540c420b03"
+SRC_URI[archive.sha256sum] = "9cb4e0e83dcefe1ece814d638bd186785b6bc1debe1aa2101ce2a4ea0376805a"
diff --git a/recipes/xorg-driver/xf86-input-penmount_1.4.0.bb b/recipes/xorg-driver/xf86-input-penmount_1.4.0.bb
index 1ed62d4cad..94255d4ac8 100644
--- a/recipes/xorg-driver/xf86-input-penmount_1.4.0.bb
+++ b/recipes/xorg-driver/xf86-input-penmount_1.4.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- Penmount input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "d5f1395b2dcefc7533ff5580e63f2066"
+SRC_URI[archive.sha256sum] = "8cb15e9a30f3602d22eba6c7bcca2c1040889ed0851c7b575273671c2da1bff1"
diff --git a/recipes/xorg-driver/xf86-input-penmount_1.4.1.bb b/recipes/xorg-driver/xf86-input-penmount_1.4.1.bb
new file mode 100644
index 0000000000..ce629f3c8c
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-penmount_1.4.1.bb
@@ -0,0 +1,6 @@
+require xorg-driver-input.inc
+
+DESCRIPTION = "X.Org X server -- Penmount input driver"
+PE = "1"
+SRC_URI[archive.md5sum] = "e5984e43ce31d45659eb6ee91c02aba5"
+SRC_URI[archive.sha256sum] = "6f281a7bce9db34772bcf762eb0ed57b8121a204a6f15d5405fe870a0af57182"
diff --git a/recipes/xorg-driver/xf86-input-spaceorb_1.1.0.bb b/recipes/xorg-driver/xf86-input-spaceorb_1.1.0.bb
index 34a497438b..7d053aace1 100644
--- a/recipes/xorg-driver/xf86-input-spaceorb_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-spaceorb_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "294810ca9e93c4096458c6a0f2fb5679"
+SRC_URI[archive.sha256sum] = "9cd53cb719bf401ff3f72233d3a88c59539b94eaf11e586e307c807a325f0815"
diff --git a/recipes/xorg-driver/xf86-input-spaceorb_1.1.1.bb b/recipes/xorg-driver/xf86-input-spaceorb_1.1.1.bb
index cf099b8193..c93458fba2 100644
--- a/recipes/xorg-driver/xf86-input-spaceorb_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-input-spaceorb_1.1.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- SpaceOrb input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "c7fb96281874733480ba86a5a0a3b5af"
+SRC_URI[archive.sha256sum] = "be8f052e7132d39094f42a08c0b7171a9e280e9fa1b162a62343d1dc0d2449cf"
diff --git a/recipes/xorg-driver/xf86-input-summa_1.1.0.bb b/recipes/xorg-driver/xf86-input-summa_1.1.0.bb
index 34a497438b..080840ce7c 100644
--- a/recipes/xorg-driver/xf86-input-summa_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-summa_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "b37a432fd87bb9f46d011622d6fce6b3"
+SRC_URI[archive.sha256sum] = "f10f2cadd4120b40b3658000c87f910e3005f4d787441c7dd83b48ebbf2a11f2"
diff --git a/recipes/xorg-driver/xf86-input-summa_1.2.0.bb b/recipes/xorg-driver/xf86-input-summa_1.2.0.bb
index 84fee74e7b..7106bed6da 100644
--- a/recipes/xorg-driver/xf86-input-summa_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-summa_1.2.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
PE = "1"
DESCRIPTION = "X.Org X server -- Summa input driver"
+SRC_URI[archive.md5sum] = "7e17468c0d90dcbbb6202a8242efff4b"
+SRC_URI[archive.sha256sum] = "3e8bcd89b4b3f86677f338a4584f41acb2a3cca7fe492cbea32664aa6f4f8cd8"
diff --git a/recipes/xorg-driver/xf86-input-synaptics_0.15.0.bb b/recipes/xorg-driver/xf86-input-synaptics_0.15.0.bb
index e6325675f8..8e7db800c3 100644
--- a/recipes/xorg-driver/xf86-input-synaptics_0.15.0.bb
+++ b/recipes/xorg-driver/xf86-input-synaptics_0.15.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- mouse input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "939f1c831c5cd3a6f027e982592dfc5b"
+SRC_URI[archive.sha256sum] = "e7d481c375a11df55eb8f12390c329c2bfda3258c689cec11cfec27cb5895c8b"
diff --git a/recipes/xorg-driver/xf86-input-synaptics_1.2.0.bb b/recipes/xorg-driver/xf86-input-synaptics_1.2.0.bb
index e6325675f8..b506a45cda 100644
--- a/recipes/xorg-driver/xf86-input-synaptics_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-synaptics_1.2.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- mouse input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "2cf0a2b0b3006bcfcd85bb77d966244a"
+SRC_URI[archive.sha256sum] = "ddd5ad4c25ad2f2e46134272bf047522882deba8ac3ac04d5e11f8bd9718620c"
diff --git a/recipes/xorg-driver/xf86-input-synaptics_1.2.1.bb b/recipes/xorg-driver/xf86-input-synaptics_1.2.1.bb
index e6325675f8..2016384785 100644
--- a/recipes/xorg-driver/xf86-input-synaptics_1.2.1.bb
+++ b/recipes/xorg-driver/xf86-input-synaptics_1.2.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- mouse input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "29a6f9da5123149e4abc8ff83880ed5c"
+SRC_URI[archive.sha256sum] = "a63b48c5c8eb09416b941dea591a948e111d1b2e14d4620f25377cf47cf877e6"
diff --git a/recipes/xorg-driver/xf86-input-tek4957_1.1.0.bb b/recipes/xorg-driver/xf86-input-tek4957_1.1.0.bb
index 34a497438b..b3fe200333 100644
--- a/recipes/xorg-driver/xf86-input-tek4957_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-tek4957_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "be8a4bd474ad6c85b93f66dd6fcfa6ee"
+SRC_URI[archive.sha256sum] = "09b9506d1bb1deaaf69872392bc56e1d75997bb8157e85a9121749bf5fe15727"
diff --git a/recipes/xorg-driver/xf86-input-tek4957_1.2.0.bb b/recipes/xorg-driver/xf86-input-tek4957_1.2.0.bb
index facf967f18..085077d076 100644
--- a/recipes/xorg-driver/xf86-input-tek4957_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-input-tek4957_1.2.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
PE = "1"
DESCRIPTION = "X.Org X server -- Tek4957 input driver"
+SRC_URI[archive.md5sum] = "8103db1ca5c55726e0b58148e4b1fc06"
+SRC_URI[archive.sha256sum] = "b097a5b1acbd732d9ca5d28c13003a1f1c8a3465f4fa77c1578d36330f3358a2"
diff --git a/recipes/xorg-driver/xf86-input-tslib/xserver-174-XGetPointerControl.patch b/recipes/xorg-driver/xf86-input-tslib/xserver-174-XGetPointerControl.patch
new file mode 100644
index 0000000000..a1f6ba8f9e
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-tslib/xserver-174-XGetPointerControl.patch
@@ -0,0 +1,34 @@
+From Grazvydas Ignotas
+
+At least xserver 1.7.4 crashes on XGetPointerControl request because of xf86-input-tslib:
+
+Program received signal SIGSEGV, Segmentation fault.
+#0 0x000355e0 in ProcGetPointerControl (client=0x4a2e58) at devices.c:2122
+#1 0x00062fa8 in Dispatch () at dispatch.c:439
+#2 0x00022444 in main (argc=4, argv=0xbeebedc4, envp=0xbeebedd8) at main.c:285
+
+This happens because ptrfeed field is not set in device structure from tslib.
+To fix this, call InitPtrFeedbackClassDeviceStruct() during DEVICE_INIT to get necessary setup done (as done in other input drivers).
+
+---
+diff -ur xf86-input-tslib-0.0.6/src/tslib.c xf86-input-tslib-0.0.6_/src/tslib.c
+--- xf86-input-tslib-0.0.6/src/tslib.c 2010-02-09 12:23:22.000000000 +0200
++++ xf86-input-tslib-0.0.6_/src/tslib.c 2010-02-09 12:37:33.000000000 +0200
+@@ -103,8 +103,6 @@
+ static void
+ PointerControlProc(DeviceIntPtr dev, PtrCtrl * ctrl)
+ {
+- ErrorF("%s\n", __FUNCTION__);
+- return;
+ }
+
+ static Bool
+@@ -406,6 +404,8 @@
+ xf86MotionHistoryAllocate(pInfo);
+ #endif
+
++ if (!InitPtrFeedbackClassDeviceStruct(device, PointerControlProc))
++ return !Success;
+ break;
+
+ case DEVICE_ON:
diff --git a/recipes/xorg-driver/xf86-input-tslib_0.0.5.bb b/recipes/xorg-driver/xf86-input-tslib_0.0.5.bb
index 31dd9121b8..01f41d1ef4 100644
--- a/recipes/xorg-driver/xf86-input-tslib_0.0.5.bb
+++ b/recipes/xorg-driver/xf86-input-tslib_0.0.5.bb
@@ -6,7 +6,7 @@ DEPENDS += "tslib"
PR = "r8"
-SRC_URI = "http://www.pengutronix.de/software/xf86-input-tslib/download/xf86-input-tslib-${PV}.tar.bz2 \
+SRC_URI = "http://www.pengutronix.de/software/xf86-input-tslib/download/xf86-input-tslib-${PV}.tar.bz2;name=archive \
file://use-hal-for-device.diff;patch=1 \
file://01_fix-wrong-value-range-for-the-axises.diff;patch=1 \
file://dynamic-xy.patch;patch=1 \
@@ -24,3 +24,5 @@ do_install_append() {
FILES_${PN} += "${datadir}/hal"
+SRC_URI[archive.md5sum] = "4231b517d216e9f80ba66f13a0f30afd"
+SRC_URI[archive.sha256sum] = "d70c64f3f4fe931e12d5af7f91ff04cd0d16dd7459061c50b3149f9e35de8091"
diff --git a/recipes/xorg-driver/xf86-input-tslib_0.0.6.bb b/recipes/xorg-driver/xf86-input-tslib_0.0.6.bb
index 6918ff485f..020502cd6d 100644
--- a/recipes/xorg-driver/xf86-input-tslib_0.0.6.bb
+++ b/recipes/xorg-driver/xf86-input-tslib_0.0.6.bb
@@ -4,11 +4,13 @@ DESCRIPTION = "X.Org X server -- tslib input driver"
RRECOMMENDS += "hal tslib-calibrate"
DEPENDS += "tslib"
-PR = "r10"
+PR = "r11"
-SRC_URI = "http://www.pengutronix.de/software/xf86-input-tslib/download/xf86-input-tslib-${PV}.tar.bz2 \
- file://double-free-crash.patch;patch=1 \
- file://10-x11-input-tslib.fdi"
+SRC_URI = "http://www.pengutronix.de/software/xf86-input-tslib/download/xf86-input-tslib-${PV}.tar.bz2;name=archive \
+ file://double-free-crash.patch;patch=1 \
+ file://10-x11-input-tslib.fdi \
+ file://xserver-174-XGetPointerControl.patch;patch=1 \
+"
do_configure_prepend() {
rm -rf ${S}/m4/ || true
@@ -20,3 +22,5 @@ do_install_append() {
}
FILES_${PN} += "${datadir}/hal"
+SRC_URI[archive.md5sum] = "b7a4d2f11637ee3fcf432e044b1d017f"
+SRC_URI[archive.sha256sum] = "5f46fdef095a6e44a69e0f0b57c7d665224b26d990d006611236d8332e85b105"
diff --git a/recipes/xorg-driver/xf86-input-ur98_1.1.0.bb b/recipes/xorg-driver/xf86-input-ur98_1.1.0.bb
index 34a497438b..a5ea537c9b 100644
--- a/recipes/xorg-driver/xf86-input-ur98_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-ur98_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "3cf8928411458baaa9e726e51772c550"
+SRC_URI[archive.sha256sum] = "214bceb0fd52a932d448ce03d66539eed2e6660617e3d42977704cb7eec6472a"
diff --git a/recipes/xorg-driver/xf86-input-vmmouse_12.4.0.bb b/recipes/xorg-driver/xf86-input-vmmouse_12.4.0.bb
index 292d2804a8..44aa19500b 100644
--- a/recipes/xorg-driver/xf86-input-vmmouse_12.4.0.bb
+++ b/recipes/xorg-driver/xf86-input-vmmouse_12.4.0.bb
@@ -5,3 +5,5 @@ DESCRIPTION = "The VMMouse driver enables support for the special VMMouse protoc
that is provided by VMware virtual machines to give absolute pointer \
positioning. "
+SRC_URI[archive.md5sum] = "313e403e56702f6c38d1a5c830b60dc2"
+SRC_URI[archive.sha256sum] = "383e0973aad0e96812fc019cb579abaf016f97427fc07466b150fe15739ba63c"
diff --git a/recipes/xorg-driver/xf86-input-vmmouse_12.4.3.bb b/recipes/xorg-driver/xf86-input-vmmouse_12.4.3.bb
index 7af9f7ddc9..c5faf8434b 100644
--- a/recipes/xorg-driver/xf86-input-vmmouse_12.4.3.bb
+++ b/recipes/xorg-driver/xf86-input-vmmouse_12.4.3.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- VMMouse input driver to use with VMWare"
PE = "1"
+SRC_URI[archive.md5sum] = "44730af795616ed4d4a0cd9a3a07935d"
+SRC_URI[archive.sha256sum] = "d668c4cacd4be6d56608fbdf7779d60120f38f3315e6385a7cc87339124e77ab"
diff --git a/recipes/xorg-driver/xf86-input-vmmouse_12.6.6.bb b/recipes/xorg-driver/xf86-input-vmmouse_12.6.6.bb
new file mode 100644
index 0000000000..9965fad3c3
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-vmmouse_12.6.6.bb
@@ -0,0 +1,9 @@
+require xorg-driver-input.inc
+
+DESCRIPTION = "X.Org X server -- VMMouse input driver to use with VMWare"
+PE = "1"
+
+COMPATIBLE_HOST = 'i.86.*-linux'
+
+SRC_URI[archive.md5sum] = "1c57338928a8897b7ca0b5524fcb1223"
+SRC_URI[archive.sha256sum] = "0cb2896b7a284efd6337c019c599fd4d5a6de74a58c6e6c31c31ed399efa8171"
diff --git a/recipes/xorg-driver/xf86-input-void_1.1.0.bb b/recipes/xorg-driver/xf86-input-void_1.1.0.bb
index 311caf6553..8c83cdd5e9 100644
--- a/recipes/xorg-driver/xf86-input-void_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-input-void_1.1.0.bb
@@ -1,3 +1,5 @@
require xorg-driver-input.inc
PE = "1"
+SRC_URI[archive.md5sum] = "ea72a92d43b95f413347df96d6a73933"
+SRC_URI[archive.sha256sum] = "b43c5d920821bd06b6a1a131dd071ab838bf024c3cb092c6d1f10d57b648b0e4"
diff --git a/recipes/xorg-driver/xf86-input-void_1.1.1.bb b/recipes/xorg-driver/xf86-input-void_1.1.1.bb
index 2fa7021d95..bef3b7451c 100644
--- a/recipes/xorg-driver/xf86-input-void_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-input-void_1.1.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- void input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "862c230f5f6e0c545f232b4c0fa9537a"
+SRC_URI[archive.sha256sum] = "dde062d6267a3fd9d51b0daee88fd84fceea52a6019de51dece46e92012dbc4f"
diff --git a/recipes/xorg-driver/xf86-input-void_1.3.0.bb b/recipes/xorg-driver/xf86-input-void_1.3.0.bb
index 2fa7021d95..3e44da735e 100644
--- a/recipes/xorg-driver/xf86-input-void_1.3.0.bb
+++ b/recipes/xorg-driver/xf86-input-void_1.3.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-input.inc
DESCRIPTION = "X.Org X server -- void input driver"
PE = "1"
+SRC_URI[archive.md5sum] = "53bdac9ca56418f4675810ed8a78b3e8"
+SRC_URI[archive.sha256sum] = "e2165ddf637703e21b3c45d83d56485c39b082b9440053d3885557c4d52b130f"
diff --git a/recipes/xorg-driver/xf86-video-apm_1.1.1.bb b/recipes/xorg-driver/xf86-video-apm_1.1.1.bb
index 5f0ed183e6..e3da9f81fc 100644
--- a/recipes/xorg-driver/xf86-video-apm_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-video-apm_1.1.1.bb
@@ -5,3 +5,5 @@ DESCRIPTION = "This is the Alliance Promotion driver for XFree86 4.0+"
DEPENDS += " xf86rushproto"
+SRC_URI[archive.md5sum] = "ac7e05f0dfc7e02cac0bf17b9eb89b11"
+SRC_URI[archive.sha256sum] = "09d7e6cf30b94f141f8ebe2560b301a058f645e74108edc28c908e750865dcec"
diff --git a/recipes/xorg-driver/xf86-video-apm_1.2.0.bb b/recipes/xorg-driver/xf86-video-apm_1.2.0.bb
index 1cef0fbb55..8f56390f73 100644
--- a/recipes/xorg-driver/xf86-video-apm_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-apm_1.2.0.bb
@@ -6,3 +6,5 @@ DESCRIPTION = "This is the Alliance Promotion driver for XFree86 4.0+"
DEPENDS += " xf86rushproto"
SRC_URI += "file://get-rid-of-host-includes.patch;patch=1"
+SRC_URI[archive.md5sum] = "4f78650d79656dc803a720049d65682e"
+SRC_URI[archive.sha256sum] = "f0fe020f892e6e3a696a490c86312a1b32672bffb7dead153c24f103540a6185"
diff --git a/recipes/xorg-driver/xf86-video-apm_1.2.2.bb b/recipes/xorg-driver/xf86-video-apm_1.2.2.bb
index 1cef0fbb55..8a1ded8cbb 100644
--- a/recipes/xorg-driver/xf86-video-apm_1.2.2.bb
+++ b/recipes/xorg-driver/xf86-video-apm_1.2.2.bb
@@ -6,3 +6,5 @@ DESCRIPTION = "This is the Alliance Promotion driver for XFree86 4.0+"
DEPENDS += " xf86rushproto"
SRC_URI += "file://get-rid-of-host-includes.patch;patch=1"
+SRC_URI[archive.md5sum] = "48441a19aaf015570b267f2a8e67d8ab"
+SRC_URI[archive.sha256sum] = "678edd063e1d5e7c7f72ccdda2388c5857559847b3d313c94d659f9bd51c1752"
diff --git a/recipes/xorg-driver/xf86-video-ark_0.6.0.bb b/recipes/xorg-driver/xf86-video-ark_0.6.0.bb
index c2b6b7608a..6979d9c26f 100644
--- a/recipes/xorg-driver/xf86-video-ark_0.6.0.bb
+++ b/recipes/xorg-driver/xf86-video-ark_0.6.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "6921479baca8f7b156029489fd335854"
+SRC_URI[archive.sha256sum] = "e5abc4f4ae643ce56d5773f052515196f05786235e4afd155a3232e20dbc84d7"
diff --git a/recipes/xorg-driver/xf86-video-ark_0.7.0.bb b/recipes/xorg-driver/xf86-video-ark_0.7.0.bb
index f62f5a3586..e88ff5fdd8 100644
--- a/recipes/xorg-driver/xf86-video-ark_0.7.0.bb
+++ b/recipes/xorg-driver/xf86-video-ark_0.7.0.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X.Org X server -- ark display driver"
SRC_URI += "file://get-rid-of-host-includes.patch;patch=1"
+SRC_URI[archive.md5sum] = "6826c556ebe9a1248cbc7f7edd44f956"
+SRC_URI[archive.sha256sum] = "8e65e73045fabe37c15f6d4895baa09346bdac2f7537607b523aacd7bcf57594"
diff --git a/recipes/xorg-driver/xf86-video-ark_0.7.2.bb b/recipes/xorg-driver/xf86-video-ark_0.7.2.bb
index f62f5a3586..ef029e11b2 100644
--- a/recipes/xorg-driver/xf86-video-ark_0.7.2.bb
+++ b/recipes/xorg-driver/xf86-video-ark_0.7.2.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X.Org X server -- ark display driver"
SRC_URI += "file://get-rid-of-host-includes.patch;patch=1"
+SRC_URI[archive.md5sum] = "4745f5c722b030962cc56eb2443894a0"
+SRC_URI[archive.sha256sum] = "db1ef3e15ebd382837f16c1143035dfd9fa6465a77ae2e850201f71508065741"
diff --git a/recipes/xorg-driver/xf86-video-ast_0.81.0.bb b/recipes/xorg-driver/xf86-video-ast_0.81.0.bb
index c2b6b7608a..9a9e267f8c 100644
--- a/recipes/xorg-driver/xf86-video-ast_0.81.0.bb
+++ b/recipes/xorg-driver/xf86-video-ast_0.81.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "04bc08907da13612dbc4918fe54e63e3"
+SRC_URI[archive.sha256sum] = "b95553aaf89bef28051c82914cee2b91102dbc2370d0d855404ba453902459b8"
diff --git a/recipes/xorg-driver/xf86-video-ast_0.85.0.bb b/recipes/xorg-driver/xf86-video-ast_0.85.0.bb
index c2b6b7608a..5f537d08a8 100644
--- a/recipes/xorg-driver/xf86-video-ast_0.85.0.bb
+++ b/recipes/xorg-driver/xf86-video-ast_0.85.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "b415bf3259ad0acdaf62e3dde76e3289"
+SRC_URI[archive.sha256sum] = "9018ff84e4866d895c037aad33fb31c79d5f47d3f54707600cc3fe6076485b28"
diff --git a/recipes/xorg-driver/xf86-video-ast_0.89.9.bb b/recipes/xorg-driver/xf86-video-ast_0.89.9.bb
index c2b6b7608a..15c0aba6fe 100644
--- a/recipes/xorg-driver/xf86-video-ast_0.89.9.bb
+++ b/recipes/xorg-driver/xf86-video-ast_0.89.9.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "619f6ff15db869be3800bb001d5b0468"
+SRC_URI[archive.sha256sum] = "880f16d32a373a052515f4ae28a3f1a97543d0d73d2ea5d74baf23bdc3a6b401"
diff --git a/recipes/xorg-driver/xf86-video-ati_6.12.4.bb b/recipes/xorg-driver/xf86-video-ati_6.12.4.bb
index 4aae05a747..96353f2c0b 100644
--- a/recipes/xorg-driver/xf86-video-ati_6.12.4.bb
+++ b/recipes/xorg-driver/xf86-video-ati_6.12.4.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- ATI display driver"
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
PE = "1"
+SRC_URI[archive.md5sum] = "e662348f6f957fcedf52818d668ab9f5"
+SRC_URI[archive.sha256sum] = "cfde066a7087a19b624f79e95cb9a6c97a847b8802cf38d4ae6022758bf338f6"
diff --git a/recipes/xorg-driver/xf86-video-ati_6.6.193.bb b/recipes/xorg-driver/xf86-video-ati_6.6.193.bb
index 994b8b6a3c..640b576d0f 100644
--- a/recipes/xorg-driver/xf86-video-ati_6.6.193.bb
+++ b/recipes/xorg-driver/xf86-video-ati_6.6.193.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "102b781f543213852401f3422b18ccc7"
+SRC_URI[archive.sha256sum] = "9b0899694000cb91d5643e2482376af24bd495cb01b4c9dcdd6ee3545b0aefae"
diff --git a/recipes/xorg-driver/xf86-video-ati_6.6.3.bb b/recipes/xorg-driver/xf86-video-ati_6.6.3.bb
index 994b8b6a3c..5106a6d465 100644
--- a/recipes/xorg-driver/xf86-video-ati_6.6.3.bb
+++ b/recipes/xorg-driver/xf86-video-ati_6.6.3.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "f6d559f9d20f61567d381916b376590f"
+SRC_URI[archive.sha256sum] = "d08a429e1fb1620ae81839181a4dc6cd579d52fc440d44d7bba36d19be355780"
diff --git a/recipes/xorg-driver/xf86-video-ati_6.7.196.bb b/recipes/xorg-driver/xf86-video-ati_6.7.196.bb
index 994b8b6a3c..0c7eeb892c 100644
--- a/recipes/xorg-driver/xf86-video-ati_6.7.196.bb
+++ b/recipes/xorg-driver/xf86-video-ati_6.7.196.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "06db625391c75c8be86c4dd5a5d713e6"
+SRC_URI[archive.sha256sum] = "8923a08232255ceacf770ef767d86bbfb195dffa9559baa1b1de90f9c947a6d9"
diff --git a/recipes/xorg-driver/xf86-video-ati_6.7.197.bb b/recipes/xorg-driver/xf86-video-ati_6.7.197.bb
index 4aae05a747..5684213650 100644
--- a/recipes/xorg-driver/xf86-video-ati_6.7.197.bb
+++ b/recipes/xorg-driver/xf86-video-ati_6.7.197.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- ATI display driver"
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
PE = "1"
+SRC_URI[archive.md5sum] = "7bd53945ce6d0b48b7fd558039e82aa2"
+SRC_URI[archive.sha256sum] = "b6c67996cfdbbf9b3a191b9092f5d515dd7fae564544626792dd5ef404e29134"
diff --git a/recipes/xorg-driver/xf86-video-ati_6.8.0.bb b/recipes/xorg-driver/xf86-video-ati_6.8.0.bb
index 4aae05a747..86b0c133d9 100644
--- a/recipes/xorg-driver/xf86-video-ati_6.8.0.bb
+++ b/recipes/xorg-driver/xf86-video-ati_6.8.0.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- ATI display driver"
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
PE = "1"
+SRC_URI[archive.md5sum] = "3c97c7925ebf4162eeb3463e23adc0e3"
+SRC_URI[archive.sha256sum] = "3863851e3c85d25cc38941eec63e866656806821b028519ae32ab8b276664fba"
diff --git a/recipes/xorg-driver/xf86-video-chips_1.1.1.bb b/recipes/xorg-driver/xf86-video-chips_1.1.1.bb
index c2b6b7608a..7a5444da65 100644
--- a/recipes/xorg-driver/xf86-video-chips_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-video-chips_1.1.1.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "3182d43439ca4cbf08ff9aa76990bba3"
+SRC_URI[archive.sha256sum] = "16a81cdb6b311176936c3326d279c0d75530adbcf9a3489eea55992ac5bc7494"
diff --git a/recipes/xorg-driver/xf86-video-chips_1.2.0.bb b/recipes/xorg-driver/xf86-video-chips_1.2.0.bb
index 9e09d8e81c..ffc816a3fa 100644
--- a/recipes/xorg-driver/xf86-video-chips_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-chips_1.2.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
PE = "1"
DESCRIPTION = "X.Org X server -- Chips display driver"
+SRC_URI[archive.md5sum] = "0fec6bee65383790485d917247a61629"
+SRC_URI[archive.sha256sum] = "05f38c49b23be36afa68b738faf520b8dbf05b92c769107039426651801d4f99"
diff --git a/recipes/xorg-driver/xf86-video-chips_1.2.2.bb b/recipes/xorg-driver/xf86-video-chips_1.2.2.bb
index 9e09d8e81c..26c13f6b56 100644
--- a/recipes/xorg-driver/xf86-video-chips_1.2.2.bb
+++ b/recipes/xorg-driver/xf86-video-chips_1.2.2.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
PE = "1"
DESCRIPTION = "X.Org X server -- Chips display driver"
+SRC_URI[archive.md5sum] = "a3969c28c3b36ab2caa852a9324e9b70"
+SRC_URI[archive.sha256sum] = "ff6fef2cffc62feb3b23f3fee375e502ab7356d571517a89b4de67f0f6037f0e"
diff --git a/recipes/xorg-driver/xf86-video-cirrus_1.1.0.bb b/recipes/xorg-driver/xf86-video-cirrus_1.1.0.bb
index c2b6b7608a..21cee60b2d 100644
--- a/recipes/xorg-driver/xf86-video-cirrus_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-video-cirrus_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "66344e315def275605dafb314ce59851"
+SRC_URI[archive.sha256sum] = "5988962199d5013274f6a6952939e4f405df658bb6616ebf9954c993b1179b1b"
diff --git a/recipes/xorg-driver/xf86-video-cirrus_1.2.1.bb b/recipes/xorg-driver/xf86-video-cirrus_1.2.1.bb
index ce19dd4f73..26af94142c 100644
--- a/recipes/xorg-driver/xf86-video-cirrus_1.2.1.bb
+++ b/recipes/xorg-driver/xf86-video-cirrus_1.2.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
PE = "1"
DESCRIPTION = "X.Org X server -- Cirrus display driver"
+SRC_URI[archive.md5sum] = "bc28fdedaee9059180e2534f9dbcd2f6"
+SRC_URI[archive.sha256sum] = "e7c99ed66326df5fadf6e5d875859a430fec4369415a27cde72a91109f78bb9c"
diff --git a/recipes/xorg-driver/xf86-video-cirrus_1.3.2.bb b/recipes/xorg-driver/xf86-video-cirrus_1.3.2.bb
index ce19dd4f73..0ab97efa7a 100644
--- a/recipes/xorg-driver/xf86-video-cirrus_1.3.2.bb
+++ b/recipes/xorg-driver/xf86-video-cirrus_1.3.2.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
PE = "1"
DESCRIPTION = "X.Org X server -- Cirrus display driver"
+SRC_URI[archive.md5sum] = "8195d03ed0be0975c03441e66a9f53b3"
+SRC_URI[archive.sha256sum] = "529a98a42c94ba5e1b9269e6f7b32a9e76cfd2d4728df08aeba615df8b28ca1a"
diff --git a/recipes/xorg-driver/xf86-video-cyrix_1.1.0.bb b/recipes/xorg-driver/xf86-video-cyrix_1.1.0.bb
index c2b6b7608a..e591991973 100644
--- a/recipes/xorg-driver/xf86-video-cyrix_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-video-cyrix_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "02ed7d5215610a3463a0307b30bb5425"
+SRC_URI[archive.sha256sum] = "d6a66778e0f6ddd907cba5784386bd6bb526f773b5db9faa35875ba67c2ca6ad"
diff --git a/recipes/xorg-driver/xf86-video-displaylink/xf86-video-displaylink-0.3-xorg-abi-fix.patch b/recipes/xorg-driver/xf86-video-displaylink/xf86-video-displaylink-0.3-xorg-abi-fix.patch
new file mode 100644
index 0000000000..df8e1db5cd
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-displaylink/xf86-video-displaylink-0.3-xorg-abi-fix.patch
@@ -0,0 +1,25 @@
+--- orig/src/displaylink.c 2009-06-10 16:38:15.000000000 +0200
++++ new/src/displaylink.c 2009-12-23 20:06:18.000000000 +0100
+@@ -46,8 +46,10 @@
+
+ #include "fb.h"
+
++#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
+ #include "xf86Resources.h"
+ #include "xf86RAC.h"
++#endif
+
+ #include "fbdevhw.h"
+
+@@ -282,9 +284,11 @@
+
+ fPtr->pEnt = xf86GetEntityInfo(pScrn->entityList[0]);
+
++#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
+ pScrn->racMemFlags = RAC_FB | RAC_COLORMAP | RAC_CURSOR | RAC_VIEWPORT;
+ /* XXX Is this right? Can probably remove RAC_FB */
+ pScrn->racIoFlags = RAC_FB | RAC_COLORMAP | RAC_CURSOR | RAC_VIEWPORT;
++#endif
+
+ /* open device */
+ if (!fbdevHWInit(pScrn,NULL,xf86FindOptionValue(fPtr->pEnt->device->options,"fbdev")))
diff --git a/recipes/xorg-driver/xf86-video-displaylink_0.3.bb b/recipes/xorg-driver/xf86-video-displaylink_0.3.bb
index 5df8e9503d..23c0ff2b08 100644
--- a/recipes/xorg-driver/xf86-video-displaylink_0.3.bb
+++ b/recipes/xorg-driver/xf86-video-displaylink_0.3.bb
@@ -4,6 +4,10 @@ DESCRIPTION = "X.Org X server -- displaylink driver"
RRECOMMENDS_${PN} = "kernel-module-udlfb"
-SRC_URI = "http://projects.unbit.it/downloads/udlfb-0.2.3_and_xf86-video-displaylink-${PV}.tar.gz"
+SRC_URI = "http://projects.unbit.it/downloads/udlfb-0.2.3_and_xf86-video-displaylink-${PV}.tar.gz;name=archive \
+ file://xf86-video-displaylink-0.3-xorg-abi-fix.patch;patch=1 \
+"
S = "${WORKDIR}/${PN}"
+SRC_URI[archive.md5sum] = "c2aedc8130c2e4d52e334b6804ab70da"
+SRC_URI[archive.sha256sum] = "487a1d7bf4b896d9a4b9e7dd1bd293adcadde5684fe9fe32aa209761c3191b3e"
diff --git a/recipes/xorg-driver/xf86-video-dummy_0.2.0.bb b/recipes/xorg-driver/xf86-video-dummy_0.2.0.bb
index c2b6b7608a..f7d76c7d6e 100644
--- a/recipes/xorg-driver/xf86-video-dummy_0.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-dummy_0.2.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "22b7cc20a33443cbd218bd2521850cfe"
+SRC_URI[archive.sha256sum] = "46013885696f3c1a5e05c5d503abc69e691443319a97cf2c6a01ec031e06c910"
diff --git a/recipes/xorg-driver/xf86-video-dummy_0.3.0.bb b/recipes/xorg-driver/xf86-video-dummy_0.3.0.bb
index d85ae168b0..eff49fc2ed 100644
--- a/recipes/xorg-driver/xf86-video-dummy_0.3.0.bb
+++ b/recipes/xorg-driver/xf86-video-dummy_0.3.0.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X.Org X server -- dummy display driver"
SRC_URI += "file://get-rid-of-host-includes.patch;patch=1"
+SRC_URI[archive.md5sum] = "3d96297556846bee02a74166ffb5d052"
+SRC_URI[archive.sha256sum] = "5a4bbde0b7f0334bb63b159e5ef6e164be3699e3424734c2bd9823f20a30a278"
diff --git a/recipes/xorg-driver/xf86-video-dummy_0.3.2.bb b/recipes/xorg-driver/xf86-video-dummy_0.3.2.bb
index d85ae168b0..c7dc8301ec 100644
--- a/recipes/xorg-driver/xf86-video-dummy_0.3.2.bb
+++ b/recipes/xorg-driver/xf86-video-dummy_0.3.2.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X.Org X server -- dummy display driver"
SRC_URI += "file://get-rid-of-host-includes.patch;patch=1"
+SRC_URI[archive.md5sum] = "2a6f1f07462fbe336865068cd69c8593"
+SRC_URI[archive.sha256sum] = "9389cbc21b0b5f90920fdfaad4466f4ec07674bb1ddbbf63cbb8759ace5c45fa"
diff --git a/recipes/xorg-driver/xf86-video-dummy_0.3.3.bb b/recipes/xorg-driver/xf86-video-dummy_0.3.3.bb
index d85ae168b0..e4fca58a42 100644
--- a/recipes/xorg-driver/xf86-video-dummy_0.3.3.bb
+++ b/recipes/xorg-driver/xf86-video-dummy_0.3.3.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X.Org X server -- dummy display driver"
SRC_URI += "file://get-rid-of-host-includes.patch;patch=1"
+SRC_URI[archive.md5sum] = "3ffe3a28f4452e66bf56180e7da9cbc5"
+SRC_URI[archive.sha256sum] = "df3f55de7953dba6d7ce10cc5f355da1a6164f781ad9393a38dae502dba4955d"
diff --git a/recipes/xorg-driver/xf86-video-fbdev_0.3.1.bb b/recipes/xorg-driver/xf86-video-fbdev_0.3.1.bb
index 843aa707b7..9237430242 100644
--- a/recipes/xorg-driver/xf86-video-fbdev_0.3.1.bb
+++ b/recipes/xorg-driver/xf86-video-fbdev_0.3.1.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "9ae810c6c6c3c9713a67866fe794d4ff"
+SRC_URI[archive.sha256sum] = "309d1f618c77559ea494c05d45b09577790c44900685e17bc812e4e1b19df6e7"
diff --git a/recipes/xorg-driver/xf86-video-fbdev_0.4.0.bb b/recipes/xorg-driver/xf86-video-fbdev_0.4.0.bb
index ea21fd3dc8..11b04a2172 100644
--- a/recipes/xorg-driver/xf86-video-fbdev_0.4.0.bb
+++ b/recipes/xorg-driver/xf86-video-fbdev_0.4.0.bb
@@ -6,3 +6,5 @@ DESCRIPTION = "X.Org X server -- fbdev display driver"
FILES_${PN} += " file://use-staged-headers.patch;patch=1"
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "6572b39fec77b8e6de1c858a93992924"
+SRC_URI[archive.sha256sum] = "bba725daeb2a313b83f2b92855a9ae8aa72c4cc8581f9f62f101ebdf00ac359d"
diff --git a/recipes/xorg-driver/xf86-video-fbdev_0.4.1.bb b/recipes/xorg-driver/xf86-video-fbdev_0.4.1.bb
index ee2ec96eb5..03ebbb68d1 100644
--- a/recipes/xorg-driver/xf86-video-fbdev_0.4.1.bb
+++ b/recipes/xorg-driver/xf86-video-fbdev_0.4.1.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X.Org X server -- fbdev display driver"
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "79ce1eb9f9d2ed56de70d8e06cb767d9"
+SRC_URI[archive.sha256sum] = "2bf857179523433a9cc6c6eea059298db4c865e649aa58dfc67c828f28b7288f"
diff --git a/recipes/xorg-driver/xf86-video-geode_2.11.0.bb b/recipes/xorg-driver/xf86-video-geode_2.11.0.bb
index 380ce2ea0b..2a650401f4 100644
--- a/recipes/xorg-driver/xf86-video-geode_2.11.0.bb
+++ b/recipes/xorg-driver/xf86-video-geode_2.11.0.bb
@@ -3,3 +3,5 @@ PE = "1"
COMPATIBLE_HOST = 'i.86.*-linux'
DESCRIPTION = "X.org server -- Geode GX2/LX display driver"
+SRC_URI[archive.md5sum] = "1dbede8f6393edfe6c1ecab2f754b3b2"
+SRC_URI[archive.sha256sum] = "d70c198cde981c3a53b1c41b717dea4bbf1d397d82957f584c641bb5fd02c82d"
diff --git a/recipes/xorg-driver/xf86-video-geode_2.11.4.1.bb b/recipes/xorg-driver/xf86-video-geode_2.11.4.1.bb
index 93f734b989..6e45aa3419 100644
--- a/recipes/xorg-driver/xf86-video-geode_2.11.4.1.bb
+++ b/recipes/xorg-driver/xf86-video-geode_2.11.4.1.bb
@@ -6,3 +6,5 @@ COMPATIBLE_HOST = 'i.86.*-linux'
DESCRIPTION = "X.org server -- Geode GX2/LX display driver"
SRC_URI += "file://fixes.patch;patch=1"
+SRC_URI[archive.md5sum] = "05f85d897ef41d13de354ac0252bf923"
+SRC_URI[archive.sha256sum] = "d739f6762fe3aa7ef7ca74f87fbe4d6ec3bb13a735e5dfb82b6748eda2b31138"
diff --git a/recipes/xorg-driver/xf86-video-geode_2.11.7.bb b/recipes/xorg-driver/xf86-video-geode_2.11.7.bb
new file mode 100644
index 0000000000..4abc862c6e
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-geode_2.11.7.bb
@@ -0,0 +1,8 @@
+require xorg-driver-video.inc
+PE = "1"
+
+COMPATIBLE_HOST = 'i.86.*-linux'
+DESCRIPTION = "X.org server -- Geode GX2/LX display driver"
+
+SRC_URI[archive.md5sum] = "086daecd062835eea51e2a718761dda3"
+SRC_URI[archive.sha256sum] = "ed864a37b44dabb760f0b7caac8a796e3b1a0a7f305b44c4684f871b273a9f9b"
diff --git a/recipes/xorg-driver/xf86-video-geode_2.8.0.bb b/recipes/xorg-driver/xf86-video-geode_2.8.0.bb
index c2b6b7608a..0184bed172 100644
--- a/recipes/xorg-driver/xf86-video-geode_2.8.0.bb
+++ b/recipes/xorg-driver/xf86-video-geode_2.8.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "a2b9c70a32b0a6436d837d67fa7aae18"
+SRC_URI[archive.sha256sum] = "f0b68171dd4256c927fbee91ecf84fa28c409b5b6b39cbf47eaa48fd73db305f"
diff --git a/recipes/xorg-driver/xf86-video-glamo_git.bb b/recipes/xorg-driver/xf86-video-glamo_git.bb
index 1de967bee5..10b55191c9 100644
--- a/recipes/xorg-driver/xf86-video-glamo_git.bb
+++ b/recipes/xorg-driver/xf86-video-glamo_git.bb
@@ -3,10 +3,16 @@ SRC_URI = "git://git.openmoko.org/git/xf86-video-glamo.git;protocol=git;branch=m
S = "${WORKDIR}/git"
-PV="1.0.0+gitr${SRCREV}"
+SRCREV = "77b6d1b7363d3ff28f063ed92c9ed47194f70b20"
+PV = "1.0.0+gitr${SRCREV}"
PE = "1"
PR = "r3"
+do_configure_prepend() {
+ # pedantic emits warning about GCC extension used in xserver header file edid.h (from version 1.8) and because of -Werror it fill fail
+ sed -i 's/ -pedantic / /g' ${S}/src/Makefile.am
+}
+
RDEPENDS = "xserver-xorg-extension-dri xserver-xorg-extension-dri2 xserver-xorg-extension-glx mesa-dri"
DEPENDS += "libdrm"
diff --git a/recipes/xorg-driver/xf86-video-glint_1.1.1.bb b/recipes/xorg-driver/xf86-video-glint_1.1.1.bb
index 4b57f17b9e..d1f9d0f06d 100644
--- a/recipes/xorg-driver/xf86-video-glint_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-video-glint_1.1.1.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
#DESCRIPTION = ""
DEPENDS += " xf86dgaproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "2cf49f701024a145bd25aff9da11d479"
+SRC_URI[archive.sha256sum] = "d63e0dd3f5cecebaf1915193a68ac83e90c1e973e3276a71bd14651d67115e6d"
diff --git a/recipes/xorg-driver/xf86-video-glint_1.2.0.bb b/recipes/xorg-driver/xf86-video-glint_1.2.0.bb
index 0426c98ff6..13f65e211c 100644
--- a/recipes/xorg-driver/xf86-video-glint_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-glint_1.2.0.bb
@@ -9,3 +9,5 @@ EXTRA_OECONF += " \
ac_cv_file__usr_include_xorg_sarea_h=yes \
ac_cv_file__usr_include_xorg_dristruct_h=yes \
"
+SRC_URI[archive.md5sum] = "1f5271ac01d4475efe73ab6f2c3646f4"
+SRC_URI[archive.sha256sum] = "a0edd1109c03efdb0f6defc18745f89fb3c11142381e2657f94d492ddd1e7419"
diff --git a/recipes/xorg-driver/xf86-video-glint_1.2.1.bb b/recipes/xorg-driver/xf86-video-glint_1.2.1.bb
index eac23c74d9..e65c4aa568 100644
--- a/recipes/xorg-driver/xf86-video-glint_1.2.1.bb
+++ b/recipes/xorg-driver/xf86-video-glint_1.2.1.bb
@@ -4,3 +4,5 @@ DESCRIPTION = "X.Org X server -- Glint display driver"
DEPENDS += " xf86dgaproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "6d7afdac0a26cf201c3f3b417c31c5e1"
+SRC_URI[archive.sha256sum] = "161780d2127d0548a2017ca461ce38e7a69afce5d921a08604e91478c6be1cda"
diff --git a/recipes/xorg-driver/xf86-video-glint_1.2.4.bb b/recipes/xorg-driver/xf86-video-glint_1.2.4.bb
index eac23c74d9..a61bda3b7b 100644
--- a/recipes/xorg-driver/xf86-video-glint_1.2.4.bb
+++ b/recipes/xorg-driver/xf86-video-glint_1.2.4.bb
@@ -4,3 +4,5 @@ DESCRIPTION = "X.Org X server -- Glint display driver"
DEPENDS += " xf86dgaproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "960df34e129faa411e58c0d6b56d79a3"
+SRC_URI[archive.sha256sum] = "5f8d6e3b02c261d235bae63d95510b940b6c9a775301146b3c229926ed99d76f"
diff --git a/recipes/xorg-driver/xf86-video-i128_1.1.0.5.bb b/recipes/xorg-driver/xf86-video-i128_1.1.0.5.bb
index acfc042123..bfb04d696d 100644
--- a/recipes/xorg-driver/xf86-video-i128_1.1.0.5.bb
+++ b/recipes/xorg-driver/xf86-video-i128_1.1.0.5.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "Number Nine I128 for X11"
PE = "1"
+SRC_URI[archive.md5sum] = "6e0d3e09fc99d6f0a0e969613ddf58cc"
+SRC_URI[archive.sha256sum] = "a99d2b04b829faa7542545380317c8f59f54ecbd5e0a7008580f3155742d0381"
diff --git a/recipes/xorg-driver/xf86-video-i128_1.1.0.6.bb b/recipes/xorg-driver/xf86-video-i128_1.1.0.6.bb
index 89cedc8b1a..0e0285e80e 100644
--- a/recipes/xorg-driver/xf86-video-i128_1.1.0.6.bb
+++ b/recipes/xorg-driver/xf86-video-i128_1.1.0.6.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "Number Nine I128 for X11"
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "c483efc90b1935025b17e4b9e9c2e4df"
+SRC_URI[archive.sha256sum] = "b52183f5a7d0adee1d21b4b0a0908886b7bbc69dc4498f1e7a3edc4b1988c41c"
diff --git a/recipes/xorg-driver/xf86-video-i128_1.2.1.bb b/recipes/xorg-driver/xf86-video-i128_1.2.1.bb
index 78d5eda810..2bea9a358d 100644
--- a/recipes/xorg-driver/xf86-video-i128_1.2.1.bb
+++ b/recipes/xorg-driver/xf86-video-i128_1.2.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- i128 display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "d0080732eaa15059b0a953aa3522185a"
+SRC_URI[archive.sha256sum] = "0d023cacf8134241cd8efcd5744eb156399406c92f59d3895392f2b5fd055eb1"
diff --git a/recipes/xorg-driver/xf86-video-i128_1.3.0.bb b/recipes/xorg-driver/xf86-video-i128_1.3.0.bb
index 78d5eda810..2a2679138e 100644
--- a/recipes/xorg-driver/xf86-video-i128_1.3.0.bb
+++ b/recipes/xorg-driver/xf86-video-i128_1.3.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- i128 display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "aff4922d2f02bad7e0d8649358edbcee"
+SRC_URI[archive.sha256sum] = "62eadebd3417ffb3857f10f16597c59541ceb135ddbc30b2140f46d9eb7dddd7"
diff --git a/recipes/xorg-driver/xf86-video-i128_1.3.1.bb b/recipes/xorg-driver/xf86-video-i128_1.3.1.bb
index 78d5eda810..53ff1bc384 100644
--- a/recipes/xorg-driver/xf86-video-i128_1.3.1.bb
+++ b/recipes/xorg-driver/xf86-video-i128_1.3.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- i128 display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "3b170a6df5114420cd4021a057918a09"
+SRC_URI[archive.sha256sum] = "49bb23625654ebcd74d0d23f534b074188f4b21c3cd443b06ac83b9485bf9a75"
diff --git a/recipes/xorg-driver/xf86-video-i128_1.3.3.bb b/recipes/xorg-driver/xf86-video-i128_1.3.3.bb
index 78d5eda810..ff20a41f17 100644
--- a/recipes/xorg-driver/xf86-video-i128_1.3.3.bb
+++ b/recipes/xorg-driver/xf86-video-i128_1.3.3.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- i128 display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "a597e8efeec6ab8bc6ba6d87fceb2dba"
+SRC_URI[archive.sha256sum] = "4d0691ce8e3b54075d05cc34717350be42915174b3930b2c9b7f5e309b32b02e"
diff --git a/recipes/xorg-driver/xf86-video-i740_1.1.0.bb b/recipes/xorg-driver/xf86-video-i740_1.1.0.bb
index 4aca68edf6..74ce43b721 100644
--- a/recipes/xorg-driver/xf86-video-i740_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-video-i740_1.1.0.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "I740 for X11"
PE = "1"
+SRC_URI[archive.md5sum] = "57302e225060a7286ae1a970c87a589b"
+SRC_URI[archive.sha256sum] = "b8f2144c987d8a14f8b477ee3aa43fc1c76d040a77e40938c3c97c8e34e2b7c5"
diff --git a/recipes/xorg-driver/xf86-video-i740_1.2.0.bb b/recipes/xorg-driver/xf86-video-i740_1.2.0.bb
index 6c2ea7438b..a9c7c6a6ba 100644
--- a/recipes/xorg-driver/xf86-video-i740_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-i740_1.2.0.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- i740 display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "d0e5a805c546b29b1dd3b55a68d16dc4"
+SRC_URI[archive.sha256sum] = "59c8f6ee465bef033c1c20bfff8121a318efda9656d5dc29f674bb655f18486f"
diff --git a/recipes/xorg-driver/xf86-video-i740_1.3.2.bb b/recipes/xorg-driver/xf86-video-i740_1.3.2.bb
index 6c2ea7438b..62d52f3553 100644
--- a/recipes/xorg-driver/xf86-video-i740_1.3.2.bb
+++ b/recipes/xorg-driver/xf86-video-i740_1.3.2.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- i740 display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "4ac1318788f62159965f15131c869e7a"
+SRC_URI[archive.sha256sum] = "48549c6a3d8c0a0d417fc486e77f3f7c6815df7e8ede04bb4c539666be2bf943"
diff --git a/recipes/xorg-driver/xf86-video-i810_1.6.5.bb b/recipes/xorg-driver/xf86-video-i810_1.6.5.bb
index 198985f247..5119c2891d 100644
--- a/recipes/xorg-driver/xf86-video-i810_1.6.5.bb
+++ b/recipes/xorg-driver/xf86-video-i810_1.6.5.bb
@@ -5,3 +5,5 @@ DESCRIPTION = "I810 for X11"
DEPENDS += " virtual/libx11 libxvmc drm xf86driproto"
+SRC_URI[archive.md5sum] = "fc1e0da3430551bf25a7babf7ccfd3bf"
+SRC_URI[archive.sha256sum] = "30d0cd555d8b8b5bb53d93eaae1ad2aecb5c94a760e2346d60b6e194c254e40f"
diff --git a/recipes/xorg-driver/xf86-video-i810_1.7.4.bb b/recipes/xorg-driver/xf86-video-i810_1.7.4.bb
index eed1fcb600..7dee900201 100644
--- a/recipes/xorg-driver/xf86-video-i810_1.7.4.bb
+++ b/recipes/xorg-driver/xf86-video-i810_1.7.4.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- Intel i8xx, i9xx display driver"
DEPENDS += " virtual/libx11 libxvmc drm xf86driproto"
PE = "1"
+SRC_URI[archive.md5sum] = "744a6ee1ebfe1c74e3b170b8d7ef8395"
+SRC_URI[archive.sha256sum] = "ff8cd89c9ba39ce68dd6ac4dcb222280835d007a20b419819749298e8ec74259"
diff --git a/recipes/xorg-driver/xf86-video-impact_0.2.0.bb b/recipes/xorg-driver/xf86-video-impact_0.2.0.bb
index c2b6b7608a..b85b6c4dfd 100644
--- a/recipes/xorg-driver/xf86-video-impact_0.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-impact_0.2.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "07c9557f6529a88845b01924313e5763"
+SRC_URI[archive.sha256sum] = "1528a123b41bf42506eb8e37c3506086395f062cca71f64cbc67929ff1010022"
diff --git a/recipes/xorg-driver/xf86-video-imstt_1.1.0.bb b/recipes/xorg-driver/xf86-video-imstt_1.1.0.bb
index c2b6b7608a..e2aa437832 100644
--- a/recipes/xorg-driver/xf86-video-imstt_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-video-imstt_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "94853ca217238ed1f568a10cbeebe057"
+SRC_URI[archive.sha256sum] = "9238c2257f9437dd7ab37c049d7f20c010e2f5ff833a37d2d6243f223f10fb7d"
diff --git a/recipes/xorg-driver/xf86-video-intel_2.10.0.bb b/recipes/xorg-driver/xf86-video-intel_2.10.0.bb
index eed1fcb600..baac57b430 100644
--- a/recipes/xorg-driver/xf86-video-intel_2.10.0.bb
+++ b/recipes/xorg-driver/xf86-video-intel_2.10.0.bb
@@ -1,5 +1,10 @@
require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- Intel i8xx, i9xx display driver"
-DEPENDS += " virtual/libx11 libxvmc drm xf86driproto"
+DEPENDS += " virtual/libx11 libxvmc drm xf86driproto "
+RDEPENDS += "xserver-xorg-extension-dri \
+ xserver-xorg-extension-dri2 \
+ xserver-xorg-extension-glx"
PE = "1"
+SRC_URI[archive.md5sum] = "78309d4f04dd8ae6585d120377042741"
+SRC_URI[archive.sha256sum] = "e46dd691dc93db7cd6f5f22b84fea7e9f4bfd34f28026cfd680993b3ccfc48ab"
diff --git a/recipes/xorg-driver/xf86-video-intel_2.2.1.bb b/recipes/xorg-driver/xf86-video-intel_2.2.1.bb
index eed1fcb600..868675495d 100644
--- a/recipes/xorg-driver/xf86-video-intel_2.2.1.bb
+++ b/recipes/xorg-driver/xf86-video-intel_2.2.1.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- Intel i8xx, i9xx display driver"
DEPENDS += " virtual/libx11 libxvmc drm xf86driproto"
PE = "1"
+SRC_URI[archive.md5sum] = "3334dc5142871b78fc609fd1b3dac3f2"
+SRC_URI[archive.sha256sum] = "d976c5f5e9c84f3817aba6ad22855446f1c2b9bfa0d53bd11c37c62cfdefa60a"
diff --git a/recipes/xorg-driver/xf86-video-intel_2.4.2.bb b/recipes/xorg-driver/xf86-video-intel_2.4.2.bb
index eed1fcb600..1ad5f06a81 100644
--- a/recipes/xorg-driver/xf86-video-intel_2.4.2.bb
+++ b/recipes/xorg-driver/xf86-video-intel_2.4.2.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- Intel i8xx, i9xx display driver"
DEPENDS += " virtual/libx11 libxvmc drm xf86driproto"
PE = "1"
+SRC_URI[archive.md5sum] = "5cd6b3ed57c7e78ab51e9d9266e73fb6"
+SRC_URI[archive.sha256sum] = "5afdc91e93ffed09ea5258c6fde210c729ea2b44d83f98acfd92c3da7e99e64b"
diff --git a/recipes/xorg-driver/xf86-video-intel_2.6.3.bb b/recipes/xorg-driver/xf86-video-intel_2.6.3.bb
index eed1fcb600..60ef088418 100644
--- a/recipes/xorg-driver/xf86-video-intel_2.6.3.bb
+++ b/recipes/xorg-driver/xf86-video-intel_2.6.3.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- Intel i8xx, i9xx display driver"
DEPENDS += " virtual/libx11 libxvmc drm xf86driproto"
PE = "1"
+SRC_URI[archive.md5sum] = "440c014bbd3072b5d379fe1bdb861918"
+SRC_URI[archive.sha256sum] = "b35a142aeba034ad06b8d9b477c243f82ce9f82ad65a0ee4408630f228e90258"
diff --git a/recipes/xorg-driver/xf86-video-intel_2.9.1.bb b/recipes/xorg-driver/xf86-video-intel_2.9.1.bb
index a8faf54643..df31aef361 100644
--- a/recipes/xorg-driver/xf86-video-intel_2.9.1.bb
+++ b/recipes/xorg-driver/xf86-video-intel_2.9.1.bb
@@ -5,3 +5,5 @@ DEPENDS += " virtual/libx11 libxvmc drm xf86driproto"
PE = "1"
SRC_URI += " file://nodolt.patch;patch=1 "
+SRC_URI[archive.md5sum] = "8951d0366c16991badb7f9050556f4f3"
+SRC_URI[archive.sha256sum] = "95347c88854c2b41c07ab3bcdfadd1b8d27fb181a20520f185892877eb8d9d76"
diff --git a/recipes/xorg-driver/xf86-video-mach64_6.8.0.bb b/recipes/xorg-driver/xf86-video-mach64_6.8.0.bb
index eed1fcb600..a5ad167d51 100644
--- a/recipes/xorg-driver/xf86-video-mach64_6.8.0.bb
+++ b/recipes/xorg-driver/xf86-video-mach64_6.8.0.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- Intel i8xx, i9xx display driver"
DEPENDS += " virtual/libx11 libxvmc drm xf86driproto"
PE = "1"
+SRC_URI[archive.md5sum] = "6081b8fa50c689d51f85c2fbaf93867e"
+SRC_URI[archive.sha256sum] = "fba616f88d351759e00a90965e38a0d82608698ae36fc2a18df4036cd384e1a1"
diff --git a/recipes/xorg-driver/xf86-video-mach64_6.8.2.bb b/recipes/xorg-driver/xf86-video-mach64_6.8.2.bb
index eed1fcb600..53b0ba71c9 100644
--- a/recipes/xorg-driver/xf86-video-mach64_6.8.2.bb
+++ b/recipes/xorg-driver/xf86-video-mach64_6.8.2.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- Intel i8xx, i9xx display driver"
DEPENDS += " virtual/libx11 libxvmc drm xf86driproto"
PE = "1"
+SRC_URI[archive.md5sum] = "6c0522b2b72a0a47c48d718443616651"
+SRC_URI[archive.sha256sum] = "b91194033023a41793a525a631789df1d229b228af0d44dcbe20b06ed66c671d"
diff --git a/recipes/xorg-driver/xf86-video-mga_1.4.1.bb b/recipes/xorg-driver/xf86-video-mga_1.4.1.bb
index c2b6b7608a..fdb5380437 100644
--- a/recipes/xorg-driver/xf86-video-mga_1.4.1.bb
+++ b/recipes/xorg-driver/xf86-video-mga_1.4.1.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "ba373233a7d13084d14046a17b02e248"
+SRC_URI[archive.sha256sum] = "5becb5f0caf0f99296db28b32be46eb95d0a88ac8e4829c47cb637fb52d06564"
diff --git a/recipes/xorg-driver/xf86-video-mga_1.4.11.bb b/recipes/xorg-driver/xf86-video-mga_1.4.11.bb
index 0ed0d28dfd..5e2d430265 100644
--- a/recipes/xorg-driver/xf86-video-mga_1.4.11.bb
+++ b/recipes/xorg-driver/xf86-video-mga_1.4.11.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- MGA display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "9d1ca965cedb0856296b47442f3c739d"
+SRC_URI[archive.sha256sum] = "c91922316f486f74d41ddbda92ff94a7917cea151ad802cf25603ab6b90f97e6"
diff --git a/recipes/xorg-driver/xf86-video-mga_1.4.9.bb b/recipes/xorg-driver/xf86-video-mga_1.4.9.bb
index c2b6b7608a..bc75e79bcd 100644
--- a/recipes/xorg-driver/xf86-video-mga_1.4.9.bb
+++ b/recipes/xorg-driver/xf86-video-mga_1.4.9.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "11066b84b949cd04300ec819c9c51532"
+SRC_URI[archive.sha256sum] = "d57dd2323052f064092167a232fb7576f46e5d62e98bc9cc6a7f270cc8d0fdc0"
diff --git a/recipes/xorg-driver/xf86-video-mga_1.9.100.bb b/recipes/xorg-driver/xf86-video-mga_1.9.100.bb
index 0ed0d28dfd..2b18e20172 100644
--- a/recipes/xorg-driver/xf86-video-mga_1.9.100.bb
+++ b/recipes/xorg-driver/xf86-video-mga_1.9.100.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- MGA display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "3e80cfb84b62866d2f94774ecbf3e46c"
+SRC_URI[archive.sha256sum] = "e8efee8d5269eb29f9bd499db3d47a6a4d3c320d4b0a24874cdf7b598ad77a5c"
diff --git a/recipes/xorg-driver/xf86-video-mga_1.9.99.bb b/recipes/xorg-driver/xf86-video-mga_1.9.99.bb
index 0ed0d28dfd..7a2a32f7fe 100644
--- a/recipes/xorg-driver/xf86-video-mga_1.9.99.bb
+++ b/recipes/xorg-driver/xf86-video-mga_1.9.99.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- MGA display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "29785ff1de2b0f7b7f1c48350449447c"
+SRC_URI[archive.sha256sum] = "82a91e523d40625c9e042ee640276756d1169cca7eb305c691a3378805c4c81c"
diff --git a/recipes/xorg-driver/xf86-video-msm/no_neon.patch b/recipes/xorg-driver/xf86-video-msm/no_neon.patch
new file mode 100644
index 0000000000..c0aa92e76a
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-msm/no_neon.patch
@@ -0,0 +1,2901 @@
+commit d8910bf773fbecf7cdea359d4b530a3672e27180
+Author: David Lanzendörfer <david.lanzendoerfer@o2s.ch>
+Date: Wed Feb 10 16:18:39 2010 +0100
+
+ Removed neon because its not available in our kerneÃl
+ and so its causing trubble (Illegal instruction)
+
+diff --git git/src/msm-swblits.h git/src/msm-swblits.h
+index f89f00e..a40b24b 100755
+--- git/src/msm-swblits.h
++++ git/src/msm-swblits.h
+@@ -38,16 +38,6 @@
+ #include <stdint.h>
+ #include <stdlib.h>
+
+-/* Neon intrinsics are part of the ARM or GCC compiler used. */
+-/* Tested with: /pkg/asw/compilers/gnu/codesourcery/arm-2008q3-72/lib/gcc/arm-none-linux-gnueabi/4.3.2/include/arm_neon.h */
+-#include <arm_neon.h>
+-
+-/* These are NEON-optimized functions linked to by various tests. */
+-extern void * neon_memcpy (void * dest, const void * source, unsigned int numBytes);
+-extern void * neon_memmove (void * dest, const void * source, unsigned int numBytes);
+-extern void memset16(uint16_t *dst, uint16_t value, int count);
+-extern void memset32(uint32_t *dst, uint32_t value, int count);
+-
+ /* Make definitions to clarify memory-related sizes to enable avoidance of magic numbers. */
+ #define BITS_PER_BYTE (8)
+ #define BYTES_PER_16BPP_PIXEL (2)
+diff --git git/src/msm-swfill.c git/src/msm-swfill.c
+index 108fd94..3dd1ef2 100755
+--- git/src/msm-swfill.c
++++ git/src/msm-swfill.c
+@@ -212,7 +212,7 @@ memset16_NeonAlignmentAssumptions_UpTo7Count(uint8_t *dst, uint16_t src, int cou
+ }
+ }
+
+-
++/*
+ static inline void
+ memset16_AssumesNeonAlignment(uint8_t *dst, uint16_t src, int count)
+ {
+@@ -333,7 +333,7 @@ memset16_AssumesNeonAlignment(uint8_t *dst, uint16_t src, int count)
+ // Quickly fill remaining pixels (up to 7).
+ memset16_NeonAlignmentAssumptions_UpTo7Count(dst, src, count);
+ }
+-
++*/
+
+ static inline void
+ memset16_Test(uint16_t *dst, uint16_t src, int count)
+@@ -368,7 +368,8 @@ memset16_Test(uint16_t *dst, uint16_t src, int count)
+
+ // Copy remaining pixels using Neon and non-Neon instructions.
+ // NOTE: This assumes that dst is aligned optimally for Neon instructions.
+- memset16_AssumesNeonAlignment((void *) dst, src, count);
++ //memset16_AssumesNeonAlignment((void *) dst, src, count);
++ memset((void *) dst, src, count);
+ }
+ }
+
+@@ -435,12 +436,14 @@ swFillRect32Bpp_Unaligned(unsigned char *dst, uint32_t src, int w, int h, int dp
+ if (w < 32) {
+ // For narrow rectangles, block signals only once for the entire rectangles.
+ BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS();
+- DO_MULTIPLE_FILLS_WITH_MEMSET(memset32,SIGNAL_BLOCK_NOOP,SIGNAL_BLOCK_NOOP);
++ //DO_MULTIPLE_FILLS_WITH_MEMSET(memset32,SIGNAL_BLOCK_NOOP,SIGNAL_BLOCK_NOOP);
++ DO_MULTIPLE_FILLS_WITH_MEMSET(memset,SIGNAL_BLOCK_NOOP,SIGNAL_BLOCK_NOOP);
+ UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS();
+ }
+ else {
+ // For wider rectangles, block and unblock signals for every row.
+- DO_MULTIPLE_FILLS_WITH_MEMSET(memset32,BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS,UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
++ //DO_MULTIPLE_FILLS_WITH_MEMSET(memset32,BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS,UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
++ DO_MULTIPLE_FILLS_WITH_MEMSET(memset,BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS,UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
+ }
+ }
+
+diff --git git/src/msm-swrender.c git/src/msm-swrender.c
+index a7a9abc..835dc03 100755
+--- git/src/msm-swrender.c
++++ git/src/msm-swrender.c
+@@ -214,160 +214,6 @@ swCopy16BppSmallFixedWidths1Row_Unaligned(unsigned char *dst, unsigned char *src
+ }
+ }
+ break;
+- case 7: if (xdir >= 0) {
+- swCopy16BppSmallFixedWidths1Row_Unaligned(dst, src, 4, xdir);
+- swCopy16BppSmallFixedWidths1Row_Unaligned(dst + 4 * BYTES_PER_UINT16_T, src + 4 * BYTES_PER_UINT16_T, 3, xdir);
+- return TRUE;
+- } else {
+- swCopy16BppSmallFixedWidths1Row_Unaligned(dst + 4 * BYTES_PER_UINT16_T, src + 4 * BYTES_PER_UINT16_T, 3, xdir);
+- swCopy16BppSmallFixedWidths1Row_Unaligned(dst, src, 4, xdir);
+- return TRUE;
+- }
+- break;
+- case 8: if (SW_CHECK_ALIGNMENT(QUAD_WORD_ALIGNMENT_BYTE_SIZE,dst,src,0)) {
+- uint32x4_t src1 = vld1q_u32((uint32_t *)(src+0*BYTES_PER_UINT32X4_T));
+- vst1q_u32((uint32_t *)(dst+0*BYTES_PER_UINT32X4_T),src1);
+- return TRUE;
+- }
+- else if (SW_CHECK_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,0)) {
+- uint64_t src1 = *(uint64_t *) (src+0*BYTES_PER_UINT64_T);
+- uint64_t src2 = *(uint64_t *) (src+1*BYTES_PER_UINT64_T);
+- *(uint64_t *) (dst+0*BYTES_PER_UINT64_T) = src1;
+- *(uint64_t *) (dst+1*BYTES_PER_UINT64_T) = src2;
+- return TRUE;
+- }
+- else if (SW_CHECK_ALIGNMENT(WORD_ALIGNMENT_BYTE_SIZE,dst,src,0)) {
+- uint32_t src1 = *(uint32_t *) (src+0*BYTES_PER_UINT32_T);
+- uint32_t src2 = *(uint32_t *) (src+1*BYTES_PER_UINT32_T);
+- uint32_t src3 = *(uint32_t *) (src+2*BYTES_PER_UINT32_T);
+- uint32_t src4 = *(uint32_t *) (src+3*BYTES_PER_UINT32_T);
+- *(uint32_t *) (dst+0*BYTES_PER_UINT32_T) = src1;
+- *(uint32_t *) (dst+1*BYTES_PER_UINT32_T) = src2;
+- *(uint32_t *) (dst+2*BYTES_PER_UINT32_T) = src3;
+- *(uint32_t *) (dst+3*BYTES_PER_UINT32_T) = src4;
+- return TRUE;
+- }
+- else {
+- uint16_t src1 = *(uint16_t *) (src+0*BYTES_PER_UINT16_T);
+- uint16_t src2 = *(uint16_t *) (src+1*BYTES_PER_UINT16_T);
+- uint16_t src3 = *(uint16_t *) (src+2*BYTES_PER_UINT16_T);
+- uint16_t src4 = *(uint16_t *) (src+3*BYTES_PER_UINT16_T);
+- uint16_t src5 = *(uint16_t *) (src+4*BYTES_PER_UINT16_T);
+- uint16_t src6 = *(uint16_t *) (src+5*BYTES_PER_UINT16_T);
+- uint16_t src7 = *(uint16_t *) (src+6*BYTES_PER_UINT16_T);
+- uint16_t src8 = *(uint16_t *) (src+7*BYTES_PER_UINT16_T);
+- *(uint16_t *) (dst+0*BYTES_PER_UINT16_T) = src1;
+- *(uint16_t *) (dst+1*BYTES_PER_UINT16_T) = src2;
+- *(uint16_t *) (dst+2*BYTES_PER_UINT16_T) = src3;
+- *(uint16_t *) (dst+3*BYTES_PER_UINT16_T) = src4;
+- *(uint16_t *) (dst+4*BYTES_PER_UINT16_T) = src5;
+- *(uint16_t *) (dst+5*BYTES_PER_UINT16_T) = src6;
+- *(uint16_t *) (dst+6*BYTES_PER_UINT16_T) = src7;
+- *(uint16_t *) (dst+7*BYTES_PER_UINT16_T) = src8;
+- return TRUE;
+- }
+- break;
+- case 16: if (SW_CHECK_ALIGNMENT(QUAD_WORD_ALIGNMENT_BYTE_SIZE,dst,src,0)) {
+- uint32x4_t src1 = vld1q_u32((uint32_t *)(src+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2 = vld1q_u32((uint32_t *)(src+1*BYTES_PER_UINT32X4_T));
+- vst1q_u32((uint32_t *)(dst+0*BYTES_PER_UINT32X4_T),src1);
+- vst1q_u32((uint32_t *)(dst+1*BYTES_PER_UINT32X4_T),src2);
+- return TRUE;
+- }
+- else if (SW_CHECK_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,0)) {
+- uint64_t src1 = *(uint64_t *) (src+0*BYTES_PER_UINT64_T);
+- uint64_t src2 = *(uint64_t *) (src+1*BYTES_PER_UINT64_T);
+- uint64_t src3 = *(uint64_t *) (src+2*BYTES_PER_UINT64_T);
+- uint64_t src4 = *(uint64_t *) (src+3*BYTES_PER_UINT64_T);
+- *(uint64_t *) (dst+0*BYTES_PER_UINT64_T) = src1;
+- *(uint64_t *) (dst+1*BYTES_PER_UINT64_T) = src2;
+- *(uint64_t *) (dst+2*BYTES_PER_UINT64_T) = src3;
+- *(uint64_t *) (dst+3*BYTES_PER_UINT64_T) = src4;
+- return TRUE;
+- }
+- else if (SW_CHECK_ALIGNMENT(WORD_ALIGNMENT_BYTE_SIZE,dst,src,0)) {
+- uint32_t src1 = *(uint32_t *) (src+0*BYTES_PER_UINT32_T);
+- uint32_t src2 = *(uint32_t *) (src+1*BYTES_PER_UINT32_T);
+- uint32_t src3 = *(uint32_t *) (src+2*BYTES_PER_UINT32_T);
+- uint32_t src4 = *(uint32_t *) (src+3*BYTES_PER_UINT32_T);
+- uint32_t src5 = *(uint32_t *) (src+4*BYTES_PER_UINT32_T);
+- uint32_t src6 = *(uint32_t *) (src+5*BYTES_PER_UINT32_T);
+- uint32_t src7 = *(uint32_t *) (src+6*BYTES_PER_UINT32_T);
+- uint32_t src8 = *(uint32_t *) (src+7*BYTES_PER_UINT32_T);
+- *(uint32_t *) (dst+0*BYTES_PER_UINT32_T) = src1;
+- *(uint32_t *) (dst+1*BYTES_PER_UINT32_T) = src2;
+- *(uint32_t *) (dst+2*BYTES_PER_UINT32_T) = src3;
+- *(uint32_t *) (dst+3*BYTES_PER_UINT32_T) = src4;
+- *(uint32_t *) (dst+4*BYTES_PER_UINT32_T) = src5;
+- *(uint32_t *) (dst+5*BYTES_PER_UINT32_T) = src6;
+- *(uint32_t *) (dst+6*BYTES_PER_UINT32_T) = src7;
+- *(uint32_t *) (dst+7*BYTES_PER_UINT32_T) = src8;
+- return TRUE;
+- }
+- else {
+- // Don't bother unrolling loops here, since that won't help for more than around 8 operations.
+- // Instead, just call multiple fixed functions.
+- if (xdir >= 0) {
+- swCopy16BppSmallFixedWidths1Row_Unaligned(dst, src, 8, xdir);
+- swCopy16BppSmallFixedWidths1Row_Unaligned(dst + 8 * BYTES_PER_UINT16_T, src + 8 * BYTES_PER_UINT16_T, 8, xdir);
+- } else {
+- swCopy16BppSmallFixedWidths1Row_Unaligned(dst + 8 * BYTES_PER_UINT16_T, src + 8 * BYTES_PER_UINT16_T, 8, xdir);
+- swCopy16BppSmallFixedWidths1Row_Unaligned(dst, src, 8, xdir);
+- }
+- return TRUE;
+- }
+- break;
+- case 32: if (SW_CHECK_ALIGNMENT(QUAD_WORD_ALIGNMENT_BYTE_SIZE,dst,src,0)) {
+- uint32x4_t src1 = vld1q_u32((uint32_t *)(src+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2 = vld1q_u32((uint32_t *)(src+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src3 = vld1q_u32((uint32_t *)(src+2*BYTES_PER_UINT32X4_T));
+- uint32x4_t src4 = vld1q_u32((uint32_t *)(src+3*BYTES_PER_UINT32X4_T));
+- vst1q_u32((uint32_t *)(dst+0*BYTES_PER_UINT32X4_T),src1);
+- vst1q_u32((uint32_t *)(dst+1*BYTES_PER_UINT32X4_T),src2);
+- vst1q_u32((uint32_t *)(dst+2*BYTES_PER_UINT32X4_T),src3);
+- vst1q_u32((uint32_t *)(dst+3*BYTES_PER_UINT32X4_T),src4);
+- return TRUE;
+- }
+- else if (SW_CHECK_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,0)) {
+- uint64_t src1 = *(uint64_t *) (src+0*BYTES_PER_UINT64_T);
+- uint64_t src2 = *(uint64_t *) (src+1*BYTES_PER_UINT64_T);
+- uint64_t src3 = *(uint64_t *) (src+2*BYTES_PER_UINT64_T);
+- uint64_t src4 = *(uint64_t *) (src+3*BYTES_PER_UINT64_T);
+- uint64_t src5 = *(uint64_t *) (src+4*BYTES_PER_UINT64_T);
+- uint64_t src6 = *(uint64_t *) (src+5*BYTES_PER_UINT64_T);
+- uint64_t src7 = *(uint64_t *) (src+6*BYTES_PER_UINT64_T);
+- uint64_t src8 = *(uint64_t *) (src+7*BYTES_PER_UINT64_T);
+- *(uint64_t *) (dst+0*BYTES_PER_UINT64_T) = src1;
+- *(uint64_t *) (dst+1*BYTES_PER_UINT64_T) = src2;
+- *(uint64_t *) (dst+2*BYTES_PER_UINT64_T) = src3;
+- *(uint64_t *) (dst+3*BYTES_PER_UINT64_T) = src4;
+- *(uint64_t *) (dst+4*BYTES_PER_UINT64_T) = src5;
+- *(uint64_t *) (dst+5*BYTES_PER_UINT64_T) = src6;
+- *(uint64_t *) (dst+6*BYTES_PER_UINT64_T) = src7;
+- *(uint64_t *) (dst+7*BYTES_PER_UINT64_T) = src8;
+- return TRUE;
+- }
+- break;
+- case 64: if (SW_CHECK_ALIGNMENT(QUAD_WORD_ALIGNMENT_BYTE_SIZE,dst,src,0)) {
+- uint32x4_t src1 = vld1q_u32((uint32_t *)(src+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2 = vld1q_u32((uint32_t *)(src+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src3 = vld1q_u32((uint32_t *)(src+2*BYTES_PER_UINT32X4_T));
+- uint32x4_t src4 = vld1q_u32((uint32_t *)(src+3*BYTES_PER_UINT32X4_T));
+- uint32x4_t src5 = vld1q_u32((uint32_t *)(src+4*BYTES_PER_UINT32X4_T));
+- uint32x4_t src6 = vld1q_u32((uint32_t *)(src+5*BYTES_PER_UINT32X4_T));
+- uint32x4_t src7 = vld1q_u32((uint32_t *)(src+6*BYTES_PER_UINT32X4_T));
+- uint32x4_t src8 = vld1q_u32((uint32_t *)(src+7*BYTES_PER_UINT32X4_T));
+- vst1q_u32((uint32_t *)(dst+0*BYTES_PER_UINT32X4_T),src1);
+- vst1q_u32((uint32_t *)(dst+1*BYTES_PER_UINT32X4_T),src2);
+- vst1q_u32((uint32_t *)(dst+2*BYTES_PER_UINT32X4_T),src3);
+- vst1q_u32((uint32_t *)(dst+3*BYTES_PER_UINT32X4_T),src4);
+- vst1q_u32((uint32_t *)(dst+4*BYTES_PER_UINT32X4_T),src5);
+- vst1q_u32((uint32_t *)(dst+5*BYTES_PER_UINT32X4_T),src6);
+- vst1q_u32((uint32_t *)(dst+6*BYTES_PER_UINT32X4_T),src7);
+- vst1q_u32((uint32_t *)(dst+7*BYTES_PER_UINT32X4_T),src8);
+- return TRUE;
+- }
+- break;
+ }
+
+ return FALSE;
+@@ -519,427 +365,6 @@ swCopy16BppSmallFixedWidths2Rows_Unaligned(unsigned char *dst, unsigned char *sr
+ }
+ return TRUE;
+ break;
+- case 7: if (xdir >= 0) {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst, src, 4, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 4 * BYTES_PER_UINT16_T, src + 4 * BYTES_PER_UINT16_T, 3, xdir, dpitch, spitch);
+- } else {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 4 * BYTES_PER_UINT16_T, src + 4 * BYTES_PER_UINT16_T, 3, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst, src, 4, xdir, dpitch, spitch);
+- }
+- return TRUE;
+- break;
+- case 8: if (SW_CHECK_PITCHED_ALIGNMENT(QUAD_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint32x4_t src1a = vld1q_u32((uint32_t *)(src+0*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src1b = vld1q_u32((uint32_t *)(src+1*spitch+0*BYTES_PER_UINT32X4_T));
+- vst1q_u32((uint32_t *)(dst+0*dpitch+0*BYTES_PER_UINT32X4_T),src1a);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+0*BYTES_PER_UINT32X4_T),src1b);
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint64_t src1a = *(uint64_t *) (src+0*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2a = *(uint64_t *) (src+0*spitch+1*BYTES_PER_UINT64_T);
+- uint64_t src1b = *(uint64_t *) (src+1*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2b = *(uint64_t *) (src+1*spitch+1*BYTES_PER_UINT64_T);
+- *(uint64_t *) (dst+0*dpitch+0*BYTES_PER_UINT64_T) = src1a;
+- *(uint64_t *) (dst+0*dpitch+1*BYTES_PER_UINT64_T) = src2a;
+- *(uint64_t *) (dst+1*dpitch+0*BYTES_PER_UINT64_T) = src1b;
+- *(uint64_t *) (dst+1*dpitch+1*BYTES_PER_UINT64_T) = src2b;
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint32_t src1a = *(uint32_t *) (src+0*spitch+0*BYTES_PER_UINT32_T);
+- uint32_t src2a = *(uint32_t *) (src+0*spitch+1*BYTES_PER_UINT32_T);
+- uint32_t src3a = *(uint32_t *) (src+0*spitch+2*BYTES_PER_UINT32_T);
+- uint32_t src4a = *(uint32_t *) (src+0*spitch+3*BYTES_PER_UINT32_T);
+- uint32_t src1b = *(uint32_t *) (src+1*spitch+0*BYTES_PER_UINT32_T);
+- uint32_t src2b = *(uint32_t *) (src+1*spitch+1*BYTES_PER_UINT32_T);
+- uint32_t src3b = *(uint32_t *) (src+1*spitch+2*BYTES_PER_UINT32_T);
+- uint32_t src4b = *(uint32_t *) (src+1*spitch+3*BYTES_PER_UINT32_T);
+- *(uint32_t *) (dst+0*dpitch+0*BYTES_PER_UINT32_T) = src1a;
+- *(uint32_t *) (dst+0*dpitch+1*BYTES_PER_UINT32_T) = src2a;
+- *(uint32_t *) (dst+0*dpitch+2*BYTES_PER_UINT32_T) = src3a;
+- *(uint32_t *) (dst+0*dpitch+3*BYTES_PER_UINT32_T) = src4a;
+- *(uint32_t *) (dst+1*dpitch+0*BYTES_PER_UINT32_T) = src1b;
+- *(uint32_t *) (dst+1*dpitch+1*BYTES_PER_UINT32_T) = src2b;
+- *(uint32_t *) (dst+1*dpitch+2*BYTES_PER_UINT32_T) = src3b;
+- *(uint32_t *) (dst+1*dpitch+3*BYTES_PER_UINT32_T) = src4b;
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,BYTES_PER_UINT16_T)) {
+- uint16_t src1a = *(uint16_t *) (src+0*spitch+0);
+- uint32_t src2a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T);
+- uint32_t src3a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T);
+- uint32_t src4a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T);
+- uint16_t src5a = *(uint16_t *) (src+0*spitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T);
+- uint16_t src1b = *(uint16_t *) (src+1*spitch+0);
+- uint32_t src2b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T);
+- uint32_t src3b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T);
+- uint32_t src4b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T);
+- uint16_t src5b = *(uint16_t *) (src+1*spitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T);
+- *(uint16_t *) (dst+0*dpitch+0) = src1a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T) = src2a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T) = src3a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T) = src4a;
+- *(uint16_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T) = src5a;
+- *(uint16_t *) (dst+1*dpitch+0) = src1b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T) = src2b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T) = src3b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T) = src4b;
+- *(uint16_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T) = src5b;
+- return TRUE;
+- }
+- else {
+- uint16_t src1a = *(uint16_t *) (src+0*spitch+0*BYTES_PER_UINT16_T);
+- uint16_t src2a = *(uint16_t *) (src+0*spitch+1*BYTES_PER_UINT16_T);
+- uint16_t src3a = *(uint16_t *) (src+0*spitch+2*BYTES_PER_UINT16_T);
+- uint16_t src4a = *(uint16_t *) (src+0*spitch+3*BYTES_PER_UINT16_T);
+- uint16_t src5a = *(uint16_t *) (src+0*spitch+4*BYTES_PER_UINT16_T);
+- uint16_t src6a = *(uint16_t *) (src+0*spitch+5*BYTES_PER_UINT16_T);
+- uint16_t src7a = *(uint16_t *) (src+0*spitch+6*BYTES_PER_UINT16_T);
+- uint16_t src8a = *(uint16_t *) (src+0*spitch+7*BYTES_PER_UINT16_T);
+- uint16_t src1b = *(uint16_t *) (src+1*spitch+0*BYTES_PER_UINT16_T);
+- uint16_t src2b = *(uint16_t *) (src+1*spitch+1*BYTES_PER_UINT16_T);
+- uint16_t src3b = *(uint16_t *) (src+1*spitch+2*BYTES_PER_UINT16_T);
+- uint16_t src4b = *(uint16_t *) (src+1*spitch+3*BYTES_PER_UINT16_T);
+- uint16_t src5b = *(uint16_t *) (src+1*spitch+4*BYTES_PER_UINT16_T);
+- uint16_t src6b = *(uint16_t *) (src+1*spitch+5*BYTES_PER_UINT16_T);
+- uint16_t src7b = *(uint16_t *) (src+1*spitch+6*BYTES_PER_UINT16_T);
+- uint16_t src8b = *(uint16_t *) (src+1*spitch+7*BYTES_PER_UINT16_T);
+- *(uint16_t *) (dst+0*dpitch+0*BYTES_PER_UINT16_T) = src1a;
+- *(uint16_t *) (dst+0*dpitch+1*BYTES_PER_UINT16_T) = src2a;
+- *(uint16_t *) (dst+0*dpitch+2*BYTES_PER_UINT16_T) = src3a;
+- *(uint16_t *) (dst+0*dpitch+3*BYTES_PER_UINT16_T) = src4a;
+- *(uint16_t *) (dst+0*dpitch+4*BYTES_PER_UINT16_T) = src5a;
+- *(uint16_t *) (dst+0*dpitch+5*BYTES_PER_UINT16_T) = src6a;
+- *(uint16_t *) (dst+0*dpitch+6*BYTES_PER_UINT16_T) = src7a;
+- *(uint16_t *) (dst+0*dpitch+7*BYTES_PER_UINT16_T) = src8a;
+- *(uint16_t *) (dst+1*dpitch+0*BYTES_PER_UINT16_T) = src1b;
+- *(uint16_t *) (dst+1*dpitch+1*BYTES_PER_UINT16_T) = src2b;
+- *(uint16_t *) (dst+1*dpitch+2*BYTES_PER_UINT16_T) = src3b;
+- *(uint16_t *) (dst+1*dpitch+3*BYTES_PER_UINT16_T) = src4b;
+- *(uint16_t *) (dst+1*dpitch+4*BYTES_PER_UINT16_T) = src5b;
+- *(uint16_t *) (dst+1*dpitch+5*BYTES_PER_UINT16_T) = src6b;
+- *(uint16_t *) (dst+1*dpitch+6*BYTES_PER_UINT16_T) = src7b;
+- *(uint16_t *) (dst+1*dpitch+7*BYTES_PER_UINT16_T) = src8b;
+- return TRUE;
+- }
+- break;
+- case 16: if (SW_CHECK_PITCHED_ALIGNMENT(QUAD_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint32x4_t src1a = vld1q_u32((uint32_t *)(src+0*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2a = vld1q_u32((uint32_t *)(src+0*spitch+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src1b = vld1q_u32((uint32_t *)(src+1*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2b = vld1q_u32((uint32_t *)(src+1*spitch+1*BYTES_PER_UINT32X4_T));
+- vst1q_u32((uint32_t *)(dst+0*dpitch+0*BYTES_PER_UINT32X4_T),src1a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+1*BYTES_PER_UINT32X4_T),src2a);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+0*BYTES_PER_UINT32X4_T),src1b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+1*BYTES_PER_UINT32X4_T),src2b);
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint64_t src1a = *(uint64_t *) (src+0*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2a = *(uint64_t *) (src+0*spitch+1*BYTES_PER_UINT64_T);
+- uint64_t src3a = *(uint64_t *) (src+0*spitch+2*BYTES_PER_UINT64_T);
+- uint64_t src4a = *(uint64_t *) (src+0*spitch+3*BYTES_PER_UINT64_T);
+- uint64_t src1b = *(uint64_t *) (src+1*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2b = *(uint64_t *) (src+1*spitch+1*BYTES_PER_UINT64_T);
+- uint64_t src3b = *(uint64_t *) (src+1*spitch+2*BYTES_PER_UINT64_T);
+- uint64_t src4b = *(uint64_t *) (src+1*spitch+3*BYTES_PER_UINT64_T);
+- *(uint64_t *) (dst+0*dpitch+0*BYTES_PER_UINT64_T) = src1a;
+- *(uint64_t *) (dst+0*dpitch+1*BYTES_PER_UINT64_T) = src2a;
+- *(uint64_t *) (dst+0*dpitch+2*BYTES_PER_UINT64_T) = src3a;
+- *(uint64_t *) (dst+0*dpitch+3*BYTES_PER_UINT64_T) = src4a;
+- *(uint64_t *) (dst+1*dpitch+0*BYTES_PER_UINT64_T) = src1b;
+- *(uint64_t *) (dst+1*dpitch+1*BYTES_PER_UINT64_T) = src2b;
+- *(uint64_t *) (dst+1*dpitch+2*BYTES_PER_UINT64_T) = src3b;
+- *(uint64_t *) (dst+1*dpitch+3*BYTES_PER_UINT64_T) = src4b;
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,BYTES_PER_UINT32_T)) {
+- uint32_t src1a = *(uint32_t *) (src+0*spitch+0);
+- uint64_t src2a = *(uint64_t *) (src+0*spitch+BYTES_PER_UINT32_T+0*BYTES_PER_UINT64_T);
+- uint64_t src3a = *(uint64_t *) (src+0*spitch+BYTES_PER_UINT32_T+1*BYTES_PER_UINT64_T);
+- uint64_t src4a = *(uint64_t *) (src+0*spitch+BYTES_PER_UINT32_T+2*BYTES_PER_UINT64_T);
+- uint32_t src5a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT32_T+3*BYTES_PER_UINT64_T);
+- uint32_t src1b = *(uint32_t *) (src+1*spitch+0);
+- uint64_t src2b = *(uint64_t *) (src+1*spitch+BYTES_PER_UINT32_T+0*BYTES_PER_UINT64_T);
+- uint64_t src3b = *(uint64_t *) (src+1*spitch+BYTES_PER_UINT32_T+1*BYTES_PER_UINT64_T);
+- uint64_t src4b = *(uint64_t *) (src+1*spitch+BYTES_PER_UINT32_T+2*BYTES_PER_UINT64_T);
+- uint32_t src5b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT32_T+3*BYTES_PER_UINT64_T);
+- *(uint32_t *) (dst+0*dpitch+0) = src1a;
+- *(uint64_t *) (dst+0*dpitch+BYTES_PER_UINT32_T+0*BYTES_PER_UINT64_T) = src2a;
+- *(uint64_t *) (dst+0*dpitch+BYTES_PER_UINT32_T+1*BYTES_PER_UINT64_T) = src3a;
+- *(uint64_t *) (dst+0*dpitch+BYTES_PER_UINT32_T+2*BYTES_PER_UINT64_T) = src4a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT32_T+3*BYTES_PER_UINT64_T) = src5a;
+- *(uint32_t *) (dst+1*dpitch+0) = src1b;
+- *(uint64_t *) (dst+1*dpitch+BYTES_PER_UINT32_T+0*BYTES_PER_UINT64_T) = src2b;
+- *(uint64_t *) (dst+1*dpitch+BYTES_PER_UINT32_T+1*BYTES_PER_UINT64_T) = src3b;
+- *(uint64_t *) (dst+1*dpitch+BYTES_PER_UINT32_T+2*BYTES_PER_UINT64_T) = src4b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT32_T+3*BYTES_PER_UINT64_T) = src5b;
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint32_t src1a = *(uint32_t *) (src+0*spitch+0*BYTES_PER_UINT32_T);
+- uint32_t src2a = *(uint32_t *) (src+0*spitch+1*BYTES_PER_UINT32_T);
+- uint32_t src3a = *(uint32_t *) (src+0*spitch+2*BYTES_PER_UINT32_T);
+- uint32_t src4a = *(uint32_t *) (src+0*spitch+3*BYTES_PER_UINT32_T);
+- uint32_t src5a = *(uint32_t *) (src+0*spitch+4*BYTES_PER_UINT32_T);
+- uint32_t src6a = *(uint32_t *) (src+0*spitch+5*BYTES_PER_UINT32_T);
+- uint32_t src7a = *(uint32_t *) (src+0*spitch+6*BYTES_PER_UINT32_T);
+- uint32_t src8a = *(uint32_t *) (src+0*spitch+7*BYTES_PER_UINT32_T);
+- uint32_t src1b = *(uint32_t *) (src+1*spitch+0*BYTES_PER_UINT32_T);
+- uint32_t src2b = *(uint32_t *) (src+1*spitch+1*BYTES_PER_UINT32_T);
+- uint32_t src3b = *(uint32_t *) (src+1*spitch+2*BYTES_PER_UINT32_T);
+- uint32_t src4b = *(uint32_t *) (src+1*spitch+3*BYTES_PER_UINT32_T);
+- uint32_t src5b = *(uint32_t *) (src+1*spitch+4*BYTES_PER_UINT32_T);
+- uint32_t src6b = *(uint32_t *) (src+1*spitch+5*BYTES_PER_UINT32_T);
+- uint32_t src7b = *(uint32_t *) (src+1*spitch+6*BYTES_PER_UINT32_T);
+- uint32_t src8b = *(uint32_t *) (src+1*spitch+7*BYTES_PER_UINT32_T);
+- *(uint32_t *) (dst+0*dpitch+0*BYTES_PER_UINT32_T) = src1a;
+- *(uint32_t *) (dst+0*dpitch+1*BYTES_PER_UINT32_T) = src2a;
+- *(uint32_t *) (dst+0*dpitch+2*BYTES_PER_UINT32_T) = src3a;
+- *(uint32_t *) (dst+0*dpitch+3*BYTES_PER_UINT32_T) = src4a;
+- *(uint32_t *) (dst+0*dpitch+4*BYTES_PER_UINT32_T) = src5a;
+- *(uint32_t *) (dst+0*dpitch+5*BYTES_PER_UINT32_T) = src6a;
+- *(uint32_t *) (dst+0*dpitch+6*BYTES_PER_UINT32_T) = src7a;
+- *(uint32_t *) (dst+0*dpitch+7*BYTES_PER_UINT32_T) = src8a;
+- *(uint32_t *) (dst+1*dpitch+0*BYTES_PER_UINT32_T) = src1b;
+- *(uint32_t *) (dst+1*dpitch+1*BYTES_PER_UINT32_T) = src2b;
+- *(uint32_t *) (dst+1*dpitch+2*BYTES_PER_UINT32_T) = src3b;
+- *(uint32_t *) (dst+1*dpitch+3*BYTES_PER_UINT32_T) = src4b;
+- *(uint32_t *) (dst+1*dpitch+4*BYTES_PER_UINT32_T) = src5b;
+- *(uint32_t *) (dst+1*dpitch+5*BYTES_PER_UINT32_T) = src6b;
+- *(uint32_t *) (dst+1*dpitch+6*BYTES_PER_UINT32_T) = src7b;
+- *(uint32_t *) (dst+1*dpitch+7*BYTES_PER_UINT32_T) = src8b;
+- return TRUE;
+- }
+- else {
+- // Don't bother unrolling loops, since that won't help for more than around 8 operations.
+- // Instead, just call multiple fixed functions.
+- if (xdir >= 0) {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst, src, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 8 * BYTES_PER_UINT16_T, src + 8 * BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- } else {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 8 * BYTES_PER_UINT16_T, src + 8 * BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst, src, 8, xdir, dpitch, spitch);
+- }
+- return TRUE;
+- }
+- break;
+- case 32: if (SW_CHECK_PITCHED_ALIGNMENT(QUAD_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint32x4_t src1a = vld1q_u32((uint32_t *)(src+0*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2a = vld1q_u32((uint32_t *)(src+0*spitch+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src3a = vld1q_u32((uint32_t *)(src+0*spitch+2*BYTES_PER_UINT32X4_T));
+- uint32x4_t src4a = vld1q_u32((uint32_t *)(src+0*spitch+3*BYTES_PER_UINT32X4_T));
+- uint32x4_t src1b = vld1q_u32((uint32_t *)(src+1*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2b = vld1q_u32((uint32_t *)(src+1*spitch+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src3b = vld1q_u32((uint32_t *)(src+1*spitch+2*BYTES_PER_UINT32X4_T));
+- uint32x4_t src4b = vld1q_u32((uint32_t *)(src+1*spitch+3*BYTES_PER_UINT32X4_T));
+- vst1q_u32((uint32_t *)(dst+0*dpitch+0*BYTES_PER_UINT32X4_T),src1a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+1*BYTES_PER_UINT32X4_T),src2a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+2*BYTES_PER_UINT32X4_T),src3a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+3*BYTES_PER_UINT32X4_T),src4a);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+0*BYTES_PER_UINT32X4_T),src1b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+1*BYTES_PER_UINT32X4_T),src2b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+2*BYTES_PER_UINT32X4_T),src3b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+3*BYTES_PER_UINT32X4_T),src4b);
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(QUAD_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,4*BYTES_PER_UINT16_T)) {
+- if (xdir >= 0) {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0, src + 0, 4, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (4)*BYTES_PER_UINT16_T, src + (4)*BYTES_PER_UINT16_T, 16, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (16+4)*BYTES_PER_UINT16_T, src + (16+4)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (8+16+4)*BYTES_PER_UINT16_T, src + (8+16+4)*BYTES_PER_UINT16_T, 4, xdir, dpitch, spitch);
+- } else {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (8+16+4)*BYTES_PER_UINT16_T, src + (8+16+4)*BYTES_PER_UINT16_T, 4, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (16+4)*BYTES_PER_UINT16_T, src + (16+4)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (4)*BYTES_PER_UINT16_T, src + (4)*BYTES_PER_UINT16_T, 16, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0, src + 0, 4, xdir, dpitch, spitch);
+- }
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint64_t src1a = *(uint64_t *) (src+0*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2a = *(uint64_t *) (src+0*spitch+1*BYTES_PER_UINT64_T);
+- uint64_t src3a = *(uint64_t *) (src+0*spitch+2*BYTES_PER_UINT64_T);
+- uint64_t src4a = *(uint64_t *) (src+0*spitch+3*BYTES_PER_UINT64_T);
+- uint64_t src5a = *(uint64_t *) (src+0*spitch+4*BYTES_PER_UINT64_T);
+- uint64_t src6a = *(uint64_t *) (src+0*spitch+5*BYTES_PER_UINT64_T);
+- uint64_t src7a = *(uint64_t *) (src+0*spitch+6*BYTES_PER_UINT64_T);
+- uint64_t src8a = *(uint64_t *) (src+0*spitch+7*BYTES_PER_UINT64_T);
+- uint64_t src1b = *(uint64_t *) (src+1*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2b = *(uint64_t *) (src+1*spitch+1*BYTES_PER_UINT64_T);
+- uint64_t src3b = *(uint64_t *) (src+1*spitch+2*BYTES_PER_UINT64_T);
+- uint64_t src4b = *(uint64_t *) (src+1*spitch+3*BYTES_PER_UINT64_T);
+- uint64_t src5b = *(uint64_t *) (src+1*spitch+4*BYTES_PER_UINT64_T);
+- uint64_t src6b = *(uint64_t *) (src+1*spitch+5*BYTES_PER_UINT64_T);
+- uint64_t src7b = *(uint64_t *) (src+1*spitch+6*BYTES_PER_UINT64_T);
+- uint64_t src8b = *(uint64_t *) (src+1*spitch+7*BYTES_PER_UINT64_T);
+- *(uint64_t *) (dst+0*dpitch+0*BYTES_PER_UINT64_T) = src1a;
+- *(uint64_t *) (dst+0*dpitch+1*BYTES_PER_UINT64_T) = src2a;
+- *(uint64_t *) (dst+0*dpitch+2*BYTES_PER_UINT64_T) = src3a;
+- *(uint64_t *) (dst+0*dpitch+3*BYTES_PER_UINT64_T) = src4a;
+- *(uint64_t *) (dst+0*dpitch+4*BYTES_PER_UINT64_T) = src5a;
+- *(uint64_t *) (dst+0*dpitch+5*BYTES_PER_UINT64_T) = src6a;
+- *(uint64_t *) (dst+0*dpitch+6*BYTES_PER_UINT64_T) = src7a;
+- *(uint64_t *) (dst+0*dpitch+7*BYTES_PER_UINT64_T) = src8a;
+- *(uint64_t *) (dst+1*dpitch+0*BYTES_PER_UINT64_T) = src1b;
+- *(uint64_t *) (dst+1*dpitch+1*BYTES_PER_UINT64_T) = src2b;
+- *(uint64_t *) (dst+1*dpitch+2*BYTES_PER_UINT64_T) = src3b;
+- *(uint64_t *) (dst+1*dpitch+3*BYTES_PER_UINT64_T) = src4b;
+- *(uint64_t *) (dst+1*dpitch+4*BYTES_PER_UINT64_T) = src5b;
+- *(uint64_t *) (dst+1*dpitch+5*BYTES_PER_UINT64_T) = src6b;
+- *(uint64_t *) (dst+1*dpitch+6*BYTES_PER_UINT64_T) = src7b;
+- *(uint64_t *) (dst+1*dpitch+7*BYTES_PER_UINT64_T) = src8b;
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,2*BYTES_PER_UINT16_T)) {
+- if (xdir >= 0) {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0, src + 0 , 2, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (0*8+2)*BYTES_PER_UINT16_T, src + (0*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (1*8+2)*BYTES_PER_UINT16_T, src + (1*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (2*8+2)*BYTES_PER_UINT16_T, src + (2*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (3*8+2)*BYTES_PER_UINT16_T, src + (3*8+2)*BYTES_PER_UINT16_T, 6, xdir, dpitch, spitch);
+- } else {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (3*8+2)*BYTES_PER_UINT16_T, src + (3*8+2)*BYTES_PER_UINT16_T, 6, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (2*8+2)*BYTES_PER_UINT16_T, src + (2*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (1*8+2)*BYTES_PER_UINT16_T, src + (1*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (0*8+2)*BYTES_PER_UINT16_T, src + (0*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0, src + 0 , 2, xdir, dpitch, spitch);
+- }
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,BYTES_PER_UINT16_T)) {
+- if (xdir >= 0) {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0, src + 0 , 1, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (0*8+1)*BYTES_PER_UINT16_T, src + (0*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (1*8+1)*BYTES_PER_UINT16_T, src + (1*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (2*8+1)*BYTES_PER_UINT16_T, src + (2*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (3*8+1)*BYTES_PER_UINT16_T, src + (3*8+1)*BYTES_PER_UINT16_T, 7, xdir, dpitch, spitch);
+- } else {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (3*8+1)*BYTES_PER_UINT16_T, src + (3*8+1)*BYTES_PER_UINT16_T, 7, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (2*8+1)*BYTES_PER_UINT16_T, src + (2*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (1*8+1)*BYTES_PER_UINT16_T, src + (1*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (0*8+1)*BYTES_PER_UINT16_T, src + (0*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0, src + 0 , 1, xdir, dpitch, spitch);
+- }
+- return TRUE;
+- }
+- else {
+- if (xdir >= 0) {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0*8*BYTES_PER_UINT16_T, src + 0*8*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 1*8*BYTES_PER_UINT16_T, src + 1*8*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 2*8*BYTES_PER_UINT16_T, src + 2*8*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 3*8*BYTES_PER_UINT16_T, src + 3*8*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- } else {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 3*8*BYTES_PER_UINT16_T, src + 3*8*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 2*8*BYTES_PER_UINT16_T, src + 2*8*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 1*8*BYTES_PER_UINT16_T, src + 1*8*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0*8*BYTES_PER_UINT16_T, src + 0*8*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- }
+- return TRUE;
+- }
+- break;
+- case 64: if (SW_CHECK_PITCHED_ALIGNMENT(QUAD_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint32x4_t src1a = vld1q_u32((uint32_t *)(src+0*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2a = vld1q_u32((uint32_t *)(src+0*spitch+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src3a = vld1q_u32((uint32_t *)(src+0*spitch+2*BYTES_PER_UINT32X4_T));
+- uint32x4_t src4a = vld1q_u32((uint32_t *)(src+0*spitch+3*BYTES_PER_UINT32X4_T));
+- uint32x4_t src5a = vld1q_u32((uint32_t *)(src+0*spitch+4*BYTES_PER_UINT32X4_T));
+- uint32x4_t src6a = vld1q_u32((uint32_t *)(src+0*spitch+5*BYTES_PER_UINT32X4_T));
+- uint32x4_t src7a = vld1q_u32((uint32_t *)(src+0*spitch+6*BYTES_PER_UINT32X4_T));
+- uint32x4_t src8a = vld1q_u32((uint32_t *)(src+0*spitch+7*BYTES_PER_UINT32X4_T));
+- uint32x4_t src1b = vld1q_u32((uint32_t *)(src+1*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2b = vld1q_u32((uint32_t *)(src+1*spitch+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src3b = vld1q_u32((uint32_t *)(src+1*spitch+2*BYTES_PER_UINT32X4_T));
+- uint32x4_t src4b = vld1q_u32((uint32_t *)(src+1*spitch+3*BYTES_PER_UINT32X4_T));
+- uint32x4_t src5b = vld1q_u32((uint32_t *)(src+1*spitch+4*BYTES_PER_UINT32X4_T));
+- uint32x4_t src6b = vld1q_u32((uint32_t *)(src+1*spitch+5*BYTES_PER_UINT32X4_T));
+- uint32x4_t src7b = vld1q_u32((uint32_t *)(src+1*spitch+6*BYTES_PER_UINT32X4_T));
+- uint32x4_t src8b = vld1q_u32((uint32_t *)(src+1*spitch+7*BYTES_PER_UINT32X4_T));
+- vst1q_u32((uint32_t *)(dst+0*dpitch+0*BYTES_PER_UINT32X4_T),src1a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+1*BYTES_PER_UINT32X4_T),src2a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+2*BYTES_PER_UINT32X4_T),src3a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+3*BYTES_PER_UINT32X4_T),src4a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+4*BYTES_PER_UINT32X4_T),src5a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+5*BYTES_PER_UINT32X4_T),src6a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+6*BYTES_PER_UINT32X4_T),src7a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+7*BYTES_PER_UINT32X4_T),src8a);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+0*BYTES_PER_UINT32X4_T),src1b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+1*BYTES_PER_UINT32X4_T),src2b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+2*BYTES_PER_UINT32X4_T),src3b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+3*BYTES_PER_UINT32X4_T),src4b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+4*BYTES_PER_UINT32X4_T),src5b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+5*BYTES_PER_UINT32X4_T),src6b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+6*BYTES_PER_UINT32X4_T),src7b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+7*BYTES_PER_UINT32X4_T),src8b);
+- return TRUE;
+- }//HERE
+- else if (SW_CHECK_PITCHED_ALIGNMENT(QUAD_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,4*BYTES_PER_UINT16_T)) {
+- if (xdir >= 0) {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0, src + 0, 4, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (0*16+4)*BYTES_PER_UINT16_T, src + (0*16+4)*BYTES_PER_UINT16_T, 2*16, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (2*16+4)*BYTES_PER_UINT16_T, src + (2*16+4)*BYTES_PER_UINT16_T, 16, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (3*16+4)*BYTES_PER_UINT16_T, src + (3*16+4)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (8+3*16+4)*BYTES_PER_UINT16_T, src + (8+3*16+4)*BYTES_PER_UINT16_T, 4, xdir, dpitch, spitch);
+- } else {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (8+3*16+4)*BYTES_PER_UINT16_T, src + (8+3*16+4)*BYTES_PER_UINT16_T, 4, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (3*16+4)*BYTES_PER_UINT16_T, src + (3*16+4)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (2*16+4)*BYTES_PER_UINT16_T, src + (2*16+4)*BYTES_PER_UINT16_T, 16, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (0*16+4)*BYTES_PER_UINT16_T, src + (0*16+4)*BYTES_PER_UINT16_T, 2*16, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0, src + 0, 4, xdir, dpitch, spitch);
+- }
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,2*BYTES_PER_UINT16_T)) {
+- if (xdir >= 0) {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0, src + 0 , 2, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (0*8+2)*BYTES_PER_UINT16_T, src + (0*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (1*8+2)*BYTES_PER_UINT16_T, src + (1*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (2*8+2)*BYTES_PER_UINT16_T, src + (2*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (3*8+2)*BYTES_PER_UINT16_T, src + (3*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (4*8+2)*BYTES_PER_UINT16_T, src + (4*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (5*8+2)*BYTES_PER_UINT16_T, src + (5*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (6*8+2)*BYTES_PER_UINT16_T, src + (6*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (7*8+2)*BYTES_PER_UINT16_T, src + (7*8+2)*BYTES_PER_UINT16_T, 6, xdir, dpitch, spitch);
+- } else {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (7*8+2)*BYTES_PER_UINT16_T, src + (7*8+2)*BYTES_PER_UINT16_T, 6, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (6*8+2)*BYTES_PER_UINT16_T, src + (6*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (5*8+2)*BYTES_PER_UINT16_T, src + (5*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (4*8+2)*BYTES_PER_UINT16_T, src + (4*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (3*8+2)*BYTES_PER_UINT16_T, src + (3*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (2*8+2)*BYTES_PER_UINT16_T, src + (2*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (1*8+2)*BYTES_PER_UINT16_T, src + (1*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (0*8+2)*BYTES_PER_UINT16_T, src + (0*8+2)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0, src + 0 , 2, xdir, dpitch, spitch);
+- }
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,BYTES_PER_UINT16_T)) {
+- if (xdir >= 0) {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0, src + 0 , 1, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (0*8+1)*BYTES_PER_UINT16_T, src + (0*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (1*8+1)*BYTES_PER_UINT16_T, src + (1*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (2*8+1)*BYTES_PER_UINT16_T, src + (2*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (3*8+1)*BYTES_PER_UINT16_T, src + (3*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (4*8+1)*BYTES_PER_UINT16_T, src + (4*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (5*8+1)*BYTES_PER_UINT16_T, src + (5*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (6*8+1)*BYTES_PER_UINT16_T, src + (6*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (7*8+1)*BYTES_PER_UINT16_T, src + (7*8+1)*BYTES_PER_UINT16_T, 7, xdir, dpitch, spitch);
+- } else {
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (7*8+1)*BYTES_PER_UINT16_T, src + (7*8+1)*BYTES_PER_UINT16_T, 7, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (6*8+1)*BYTES_PER_UINT16_T, src + (6*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (5*8+1)*BYTES_PER_UINT16_T, src + (5*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (4*8+1)*BYTES_PER_UINT16_T, src + (4*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (3*8+1)*BYTES_PER_UINT16_T, src + (3*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (2*8+1)*BYTES_PER_UINT16_T, src + (2*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (1*8+1)*BYTES_PER_UINT16_T, src + (1*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + (0*8+1)*BYTES_PER_UINT16_T, src + (0*8+1)*BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths2Rows_Unaligned(dst + 0, src + 0 , 1, xdir, dpitch, spitch);
+- }
+- return TRUE;
+- }
+- break;
+ }
+
+ return FALSE;
+@@ -1161,484 +586,7 @@ swCopy16BppSmallFixedWidths4Rows_Unaligned(unsigned char *dst, unsigned char *sr
+ }
+ return TRUE;
+ break;
+- case 7: if (xdir >= 0) {
+- swCopy16BppSmallFixedWidths4Rows_Unaligned(dst, src, 4, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths4Rows_Unaligned(dst + 4 * BYTES_PER_UINT16_T, src + 4 * BYTES_PER_UINT16_T, 3, xdir, dpitch, spitch);
+- } else {
+- swCopy16BppSmallFixedWidths4Rows_Unaligned(dst + 4 * BYTES_PER_UINT16_T, src + 4 * BYTES_PER_UINT16_T, 3, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths4Rows_Unaligned(dst, src, 4, xdir, dpitch, spitch);
+- }
+- return TRUE;
+- break;
+- // TODO: Add more alignment checks for 8 pixel-wide cases for performance reasons?
+- // For example, handling (SW_CHECK_PITCHED_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,DOUBLE_WORD_ALIGNMENT_BYTE_SIZE/2)) and related half-aligned cases...
+- case 8: if (SW_CHECK_PITCHED_ALIGNMENT(QUAD_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint32x4_t src1a = vld1q_u32((uint32_t *)(src+0*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src1b = vld1q_u32((uint32_t *)(src+1*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src1c = vld1q_u32((uint32_t *)(src+2*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src1d = vld1q_u32((uint32_t *)(src+3*spitch+0*BYTES_PER_UINT32X4_T));
+- vst1q_u32((uint32_t *)(dst+0*dpitch+0*BYTES_PER_UINT32X4_T),src1a);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+0*BYTES_PER_UINT32X4_T),src1b);
+- vst1q_u32((uint32_t *)(dst+2*dpitch+0*BYTES_PER_UINT32X4_T),src1c);
+- vst1q_u32((uint32_t *)(dst+3*dpitch+0*BYTES_PER_UINT32X4_T),src1d);
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint64_t src1a = *(uint64_t *) (src+0*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2a = *(uint64_t *) (src+0*spitch+1*BYTES_PER_UINT64_T);
+- uint64_t src1b = *(uint64_t *) (src+1*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2b = *(uint64_t *) (src+1*spitch+1*BYTES_PER_UINT64_T);
+- uint64_t src1c = *(uint64_t *) (src+2*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2c = *(uint64_t *) (src+2*spitch+1*BYTES_PER_UINT64_T);
+- uint64_t src1d = *(uint64_t *) (src+3*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2d = *(uint64_t *) (src+3*spitch+1*BYTES_PER_UINT64_T);
+- *(uint64_t *) (dst+0*dpitch+0*BYTES_PER_UINT64_T) = src1a;
+- *(uint64_t *) (dst+0*dpitch+1*BYTES_PER_UINT64_T) = src2a;
+- *(uint64_t *) (dst+1*dpitch+0*BYTES_PER_UINT64_T) = src1b;
+- *(uint64_t *) (dst+1*dpitch+1*BYTES_PER_UINT64_T) = src2b;
+- *(uint64_t *) (dst+2*dpitch+0*BYTES_PER_UINT64_T) = src1c;
+- *(uint64_t *) (dst+2*dpitch+1*BYTES_PER_UINT64_T) = src2c;
+- *(uint64_t *) (dst+3*dpitch+0*BYTES_PER_UINT64_T) = src1d;
+- *(uint64_t *) (dst+3*dpitch+1*BYTES_PER_UINT64_T) = src2d;
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint32_t src1a = *(uint32_t *) (src+0*spitch+0*BYTES_PER_UINT32_T);
+- uint32_t src2a = *(uint32_t *) (src+0*spitch+1*BYTES_PER_UINT32_T);
+- uint32_t src3a = *(uint32_t *) (src+0*spitch+2*BYTES_PER_UINT32_T);
+- uint32_t src4a = *(uint32_t *) (src+0*spitch+3*BYTES_PER_UINT32_T);
+- uint32_t src1b = *(uint32_t *) (src+1*spitch+0*BYTES_PER_UINT32_T);
+- uint32_t src2b = *(uint32_t *) (src+1*spitch+1*BYTES_PER_UINT32_T);
+- uint32_t src3b = *(uint32_t *) (src+1*spitch+2*BYTES_PER_UINT32_T);
+- uint32_t src4b = *(uint32_t *) (src+1*spitch+3*BYTES_PER_UINT32_T);
+- uint32_t src1c = *(uint32_t *) (src+2*spitch+0*BYTES_PER_UINT32_T);
+- uint32_t src2c = *(uint32_t *) (src+2*spitch+1*BYTES_PER_UINT32_T);
+- uint32_t src3c = *(uint32_t *) (src+2*spitch+2*BYTES_PER_UINT32_T);
+- uint32_t src4c = *(uint32_t *) (src+2*spitch+3*BYTES_PER_UINT32_T);
+- uint32_t src1d = *(uint32_t *) (src+3*spitch+0*BYTES_PER_UINT32_T);
+- uint32_t src2d = *(uint32_t *) (src+3*spitch+1*BYTES_PER_UINT32_T);
+- uint32_t src3d = *(uint32_t *) (src+3*spitch+2*BYTES_PER_UINT32_T);
+- uint32_t src4d = *(uint32_t *) (src+3*spitch+3*BYTES_PER_UINT32_T);
+- *(uint32_t *) (dst+0*dpitch+0*BYTES_PER_UINT32_T) = src1a;
+- *(uint32_t *) (dst+0*dpitch+1*BYTES_PER_UINT32_T) = src2a;
+- *(uint32_t *) (dst+0*dpitch+2*BYTES_PER_UINT32_T) = src3a;
+- *(uint32_t *) (dst+0*dpitch+3*BYTES_PER_UINT32_T) = src4a;
+- *(uint32_t *) (dst+1*dpitch+0*BYTES_PER_UINT32_T) = src1b;
+- *(uint32_t *) (dst+1*dpitch+1*BYTES_PER_UINT32_T) = src2b;
+- *(uint32_t *) (dst+1*dpitch+2*BYTES_PER_UINT32_T) = src3b;
+- *(uint32_t *) (dst+1*dpitch+3*BYTES_PER_UINT32_T) = src4b;
+- *(uint32_t *) (dst+2*dpitch+0*BYTES_PER_UINT32_T) = src1c;
+- *(uint32_t *) (dst+2*dpitch+1*BYTES_PER_UINT32_T) = src2c;
+- *(uint32_t *) (dst+2*dpitch+2*BYTES_PER_UINT32_T) = src3c;
+- *(uint32_t *) (dst+2*dpitch+3*BYTES_PER_UINT32_T) = src4c;
+- *(uint32_t *) (dst+3*dpitch+0*BYTES_PER_UINT32_T) = src1d;
+- *(uint32_t *) (dst+3*dpitch+1*BYTES_PER_UINT32_T) = src2d;
+- *(uint32_t *) (dst+3*dpitch+2*BYTES_PER_UINT32_T) = src3d;
+- *(uint32_t *) (dst+3*dpitch+3*BYTES_PER_UINT32_T) = src4d;
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,BYTES_PER_UINT16_T)) {
+- uint16_t src1a = *(uint16_t *) (src+0*spitch+0);
+- uint32_t src2a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T);
+- uint32_t src3a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T);
+- uint32_t src4a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T);
+- uint16_t src5a = *(uint16_t *) (src+0*spitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T);
+- uint16_t src1b = *(uint16_t *) (src+1*spitch+0);
+- uint32_t src2b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T);
+- uint32_t src3b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T);
+- uint32_t src4b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T);
+- uint16_t src5b = *(uint16_t *) (src+1*spitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T);
+- uint16_t src1c = *(uint16_t *) (src+2*spitch+0);
+- uint32_t src2c = *(uint32_t *) (src+2*spitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T);
+- uint32_t src3c = *(uint32_t *) (src+2*spitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T);
+- uint32_t src4c = *(uint32_t *) (src+2*spitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T);
+- uint16_t src5c = *(uint16_t *) (src+2*spitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T);
+- uint16_t src1d = *(uint16_t *) (src+3*spitch+0);
+- uint32_t src2d = *(uint32_t *) (src+3*spitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T);
+- uint32_t src3d = *(uint32_t *) (src+3*spitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T);
+- uint32_t src4d = *(uint32_t *) (src+3*spitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T);
+- uint16_t src5d = *(uint16_t *) (src+3*spitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T);
+- *(uint16_t *) (dst+0*dpitch+0) = src1a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T) = src2a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T) = src3a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T) = src4a;
+- *(uint16_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T) = src5a;
+- *(uint16_t *) (dst+1*dpitch+0) = src1b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T) = src2b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T) = src3b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T) = src4b;
+- *(uint16_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T) = src5b;
+- *(uint16_t *) (dst+2*dpitch+0) = src1c;
+- *(uint32_t *) (dst+2*dpitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T) = src2c;
+- *(uint32_t *) (dst+2*dpitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T) = src3c;
+- *(uint32_t *) (dst+2*dpitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T) = src4c;
+- *(uint16_t *) (dst+2*dpitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T) = src5c;
+- *(uint16_t *) (dst+3*dpitch+0) = src1d;
+- *(uint32_t *) (dst+3*dpitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T) = src2d;
+- *(uint32_t *) (dst+3*dpitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T) = src3d;
+- *(uint32_t *) (dst+3*dpitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T) = src4d;
+- *(uint16_t *) (dst+3*dpitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T) = src5d;
+- return TRUE;
+- }
+- else {
+- uint16_t src1a = *(uint16_t *) (src+0*spitch+0*BYTES_PER_UINT16_T);
+- uint16_t src2a = *(uint16_t *) (src+0*spitch+1*BYTES_PER_UINT16_T);
+- uint16_t src3a = *(uint16_t *) (src+0*spitch+2*BYTES_PER_UINT16_T);
+- uint16_t src4a = *(uint16_t *) (src+0*spitch+3*BYTES_PER_UINT16_T);
+- uint16_t src5a = *(uint16_t *) (src+0*spitch+4*BYTES_PER_UINT16_T);
+- uint16_t src6a = *(uint16_t *) (src+0*spitch+5*BYTES_PER_UINT16_T);
+- uint16_t src7a = *(uint16_t *) (src+0*spitch+6*BYTES_PER_UINT16_T);
+- uint16_t src8a = *(uint16_t *) (src+0*spitch+7*BYTES_PER_UINT16_T);
+- uint16_t src1b = *(uint16_t *) (src+1*spitch+0*BYTES_PER_UINT16_T);
+- uint16_t src2b = *(uint16_t *) (src+1*spitch+1*BYTES_PER_UINT16_T);
+- uint16_t src3b = *(uint16_t *) (src+1*spitch+2*BYTES_PER_UINT16_T);
+- uint16_t src4b = *(uint16_t *) (src+1*spitch+3*BYTES_PER_UINT16_T);
+- uint16_t src5b = *(uint16_t *) (src+1*spitch+4*BYTES_PER_UINT16_T);
+- uint16_t src6b = *(uint16_t *) (src+1*spitch+5*BYTES_PER_UINT16_T);
+- uint16_t src7b = *(uint16_t *) (src+1*spitch+6*BYTES_PER_UINT16_T);
+- uint16_t src8b = *(uint16_t *) (src+1*spitch+7*BYTES_PER_UINT16_T);
+- uint16_t src1c = *(uint16_t *) (src+2*spitch+0*BYTES_PER_UINT16_T);
+- uint16_t src2c = *(uint16_t *) (src+2*spitch+1*BYTES_PER_UINT16_T);
+- uint16_t src3c = *(uint16_t *) (src+2*spitch+2*BYTES_PER_UINT16_T);
+- uint16_t src4c = *(uint16_t *) (src+2*spitch+3*BYTES_PER_UINT16_T);
+- uint16_t src5c = *(uint16_t *) (src+2*spitch+4*BYTES_PER_UINT16_T);
+- uint16_t src6c = *(uint16_t *) (src+2*spitch+5*BYTES_PER_UINT16_T);
+- uint16_t src7c = *(uint16_t *) (src+2*spitch+6*BYTES_PER_UINT16_T);
+- uint16_t src8c = *(uint16_t *) (src+2*spitch+7*BYTES_PER_UINT16_T);
+- uint16_t src1d = *(uint16_t *) (src+3*spitch+0*BYTES_PER_UINT16_T);
+- uint16_t src2d = *(uint16_t *) (src+3*spitch+1*BYTES_PER_UINT16_T);
+- uint16_t src3d = *(uint16_t *) (src+3*spitch+2*BYTES_PER_UINT16_T);
+- uint16_t src4d = *(uint16_t *) (src+3*spitch+3*BYTES_PER_UINT16_T);
+- uint16_t src5d = *(uint16_t *) (src+3*spitch+4*BYTES_PER_UINT16_T);
+- uint16_t src6d = *(uint16_t *) (src+3*spitch+5*BYTES_PER_UINT16_T);
+- uint16_t src7d = *(uint16_t *) (src+3*spitch+6*BYTES_PER_UINT16_T);
+- uint16_t src8d = *(uint16_t *) (src+3*spitch+7*BYTES_PER_UINT16_T);
+- *(uint16_t *) (dst+0*dpitch+0*BYTES_PER_UINT16_T) = src1a;
+- *(uint16_t *) (dst+0*dpitch+1*BYTES_PER_UINT16_T) = src2a;
+- *(uint16_t *) (dst+0*dpitch+2*BYTES_PER_UINT16_T) = src3a;
+- *(uint16_t *) (dst+0*dpitch+3*BYTES_PER_UINT16_T) = src4a;
+- *(uint16_t *) (dst+0*dpitch+4*BYTES_PER_UINT16_T) = src5a;
+- *(uint16_t *) (dst+0*dpitch+5*BYTES_PER_UINT16_T) = src6a;
+- *(uint16_t *) (dst+0*dpitch+6*BYTES_PER_UINT16_T) = src7a;
+- *(uint16_t *) (dst+0*dpitch+7*BYTES_PER_UINT16_T) = src8a;
+- *(uint16_t *) (dst+1*dpitch+0*BYTES_PER_UINT16_T) = src1b;
+- *(uint16_t *) (dst+1*dpitch+1*BYTES_PER_UINT16_T) = src2b;
+- *(uint16_t *) (dst+1*dpitch+2*BYTES_PER_UINT16_T) = src3b;
+- *(uint16_t *) (dst+1*dpitch+3*BYTES_PER_UINT16_T) = src4b;
+- *(uint16_t *) (dst+1*dpitch+4*BYTES_PER_UINT16_T) = src5b;
+- *(uint16_t *) (dst+1*dpitch+5*BYTES_PER_UINT16_T) = src6b;
+- *(uint16_t *) (dst+1*dpitch+6*BYTES_PER_UINT16_T) = src7b;
+- *(uint16_t *) (dst+1*dpitch+7*BYTES_PER_UINT16_T) = src8b;
+- *(uint16_t *) (dst+2*dpitch+0*BYTES_PER_UINT16_T) = src1c;
+- *(uint16_t *) (dst+2*dpitch+1*BYTES_PER_UINT16_T) = src2c;
+- *(uint16_t *) (dst+2*dpitch+2*BYTES_PER_UINT16_T) = src3c;
+- *(uint16_t *) (dst+2*dpitch+3*BYTES_PER_UINT16_T) = src4c;
+- *(uint16_t *) (dst+2*dpitch+4*BYTES_PER_UINT16_T) = src5c;
+- *(uint16_t *) (dst+2*dpitch+5*BYTES_PER_UINT16_T) = src6c;
+- *(uint16_t *) (dst+2*dpitch+6*BYTES_PER_UINT16_T) = src7c;
+- *(uint16_t *) (dst+2*dpitch+7*BYTES_PER_UINT16_T) = src8c;
+- *(uint16_t *) (dst+3*dpitch+0*BYTES_PER_UINT16_T) = src1d;
+- *(uint16_t *) (dst+3*dpitch+1*BYTES_PER_UINT16_T) = src2d;
+- *(uint16_t *) (dst+3*dpitch+2*BYTES_PER_UINT16_T) = src3d;
+- *(uint16_t *) (dst+3*dpitch+3*BYTES_PER_UINT16_T) = src4d;
+- *(uint16_t *) (dst+3*dpitch+4*BYTES_PER_UINT16_T) = src5d;
+- *(uint16_t *) (dst+3*dpitch+5*BYTES_PER_UINT16_T) = src6d;
+- *(uint16_t *) (dst+3*dpitch+6*BYTES_PER_UINT16_T) = src7d;
+- *(uint16_t *) (dst+3*dpitch+7*BYTES_PER_UINT16_T) = src8d;
+- return TRUE;
+- }
+- break;
+- case 16: if (SW_CHECK_PITCHED_ALIGNMENT(QUAD_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint32x4_t src1a = vld1q_u32((uint32_t *)(src+0*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2a = vld1q_u32((uint32_t *)(src+0*spitch+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src1b = vld1q_u32((uint32_t *)(src+1*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2b = vld1q_u32((uint32_t *)(src+1*spitch+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src1c = vld1q_u32((uint32_t *)(src+2*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2c = vld1q_u32((uint32_t *)(src+2*spitch+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src1d = vld1q_u32((uint32_t *)(src+3*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2d = vld1q_u32((uint32_t *)(src+3*spitch+1*BYTES_PER_UINT32X4_T));
+- vst1q_u32((uint32_t *)(dst+0*dpitch+0*BYTES_PER_UINT32X4_T),src1a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+1*BYTES_PER_UINT32X4_T),src2a);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+0*BYTES_PER_UINT32X4_T),src1b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+1*BYTES_PER_UINT32X4_T),src2b);
+- vst1q_u32((uint32_t *)(dst+2*dpitch+0*BYTES_PER_UINT32X4_T),src1c);
+- vst1q_u32((uint32_t *)(dst+2*dpitch+1*BYTES_PER_UINT32X4_T),src2c);
+- vst1q_u32((uint32_t *)(dst+3*dpitch+0*BYTES_PER_UINT32X4_T),src1d);
+- vst1q_u32((uint32_t *)(dst+3*dpitch+1*BYTES_PER_UINT32X4_T),src2d);
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint64_t src1a = *(uint64_t *) (src+0*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2a = *(uint64_t *) (src+0*spitch+1*BYTES_PER_UINT64_T);
+- uint64_t src3a = *(uint64_t *) (src+0*spitch+2*BYTES_PER_UINT64_T);
+- uint64_t src4a = *(uint64_t *) (src+0*spitch+3*BYTES_PER_UINT64_T);
+- uint64_t src1b = *(uint64_t *) (src+1*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2b = *(uint64_t *) (src+1*spitch+1*BYTES_PER_UINT64_T);
+- uint64_t src3b = *(uint64_t *) (src+1*spitch+2*BYTES_PER_UINT64_T);
+- uint64_t src4b = *(uint64_t *) (src+1*spitch+3*BYTES_PER_UINT64_T);
+- uint64_t src1c = *(uint64_t *) (src+2*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2c = *(uint64_t *) (src+2*spitch+1*BYTES_PER_UINT64_T);
+- uint64_t src3c = *(uint64_t *) (src+2*spitch+2*BYTES_PER_UINT64_T);
+- uint64_t src4c = *(uint64_t *) (src+2*spitch+3*BYTES_PER_UINT64_T);
+- uint64_t src1d = *(uint64_t *) (src+3*spitch+0*BYTES_PER_UINT64_T);
+- uint64_t src2d = *(uint64_t *) (src+3*spitch+1*BYTES_PER_UINT64_T);
+- uint64_t src3d = *(uint64_t *) (src+3*spitch+2*BYTES_PER_UINT64_T);
+- uint64_t src4d = *(uint64_t *) (src+3*spitch+3*BYTES_PER_UINT64_T);
+- *(uint64_t *) (dst+0*dpitch+0*BYTES_PER_UINT64_T) = src1a;
+- *(uint64_t *) (dst+0*dpitch+1*BYTES_PER_UINT64_T) = src2a;
+- *(uint64_t *) (dst+0*dpitch+2*BYTES_PER_UINT64_T) = src3a;
+- *(uint64_t *) (dst+0*dpitch+3*BYTES_PER_UINT64_T) = src4a;
+- *(uint64_t *) (dst+1*dpitch+0*BYTES_PER_UINT64_T) = src1b;
+- *(uint64_t *) (dst+1*dpitch+1*BYTES_PER_UINT64_T) = src2b;
+- *(uint64_t *) (dst+1*dpitch+2*BYTES_PER_UINT64_T) = src3b;
+- *(uint64_t *) (dst+1*dpitch+3*BYTES_PER_UINT64_T) = src4b;
+- *(uint64_t *) (dst+2*dpitch+0*BYTES_PER_UINT64_T) = src1c;
+- *(uint64_t *) (dst+2*dpitch+1*BYTES_PER_UINT64_T) = src2c;
+- *(uint64_t *) (dst+2*dpitch+2*BYTES_PER_UINT64_T) = src3c;
+- *(uint64_t *) (dst+2*dpitch+3*BYTES_PER_UINT64_T) = src4c;
+- *(uint64_t *) (dst+3*dpitch+0*BYTES_PER_UINT64_T) = src1d;
+- *(uint64_t *) (dst+3*dpitch+1*BYTES_PER_UINT64_T) = src2d;
+- *(uint64_t *) (dst+3*dpitch+2*BYTES_PER_UINT64_T) = src3d;
+- *(uint64_t *) (dst+3*dpitch+3*BYTES_PER_UINT64_T) = src4d;
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,2*BYTES_PER_UINT16_T)) {
+- uint32_t src1a = *(uint32_t *) (src+0*spitch+0);
+- uint64_t src2a = *(uint64_t *) (src+0*spitch+BYTES_PER_UINT32_T+0*BYTES_PER_UINT64_T);
+- uint64_t src3a = *(uint64_t *) (src+0*spitch+BYTES_PER_UINT32_T+1*BYTES_PER_UINT64_T);
+- uint64_t src4a = *(uint64_t *) (src+0*spitch+BYTES_PER_UINT32_T+2*BYTES_PER_UINT64_T);
+- uint32_t src5a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT32_T+3*BYTES_PER_UINT64_T);
+- uint32_t src1b = *(uint32_t *) (src+1*spitch+0);
+- uint64_t src2b = *(uint64_t *) (src+1*spitch+BYTES_PER_UINT32_T+0*BYTES_PER_UINT64_T);
+- uint64_t src3b = *(uint64_t *) (src+1*spitch+BYTES_PER_UINT32_T+1*BYTES_PER_UINT64_T);
+- uint64_t src4b = *(uint64_t *) (src+1*spitch+BYTES_PER_UINT32_T+2*BYTES_PER_UINT64_T);
+- uint32_t src5b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT32_T+3*BYTES_PER_UINT64_T);
+- uint32_t src1c = *(uint32_t *) (src+2*spitch+0);
+- uint64_t src2c = *(uint64_t *) (src+2*spitch+BYTES_PER_UINT32_T+0*BYTES_PER_UINT64_T);
+- uint64_t src3c = *(uint64_t *) (src+2*spitch+BYTES_PER_UINT32_T+1*BYTES_PER_UINT64_T);
+- uint64_t src4c = *(uint64_t *) (src+2*spitch+BYTES_PER_UINT32_T+2*BYTES_PER_UINT64_T);
+- uint32_t src5c = *(uint32_t *) (src+2*spitch+BYTES_PER_UINT32_T+3*BYTES_PER_UINT64_T);
+- uint32_t src1d = *(uint32_t *) (src+3*spitch+0);
+- uint64_t src2d = *(uint64_t *) (src+3*spitch+BYTES_PER_UINT32_T+0*BYTES_PER_UINT64_T);
+- uint64_t src3d = *(uint64_t *) (src+3*spitch+BYTES_PER_UINT32_T+1*BYTES_PER_UINT64_T);
+- uint64_t src4d = *(uint64_t *) (src+3*spitch+BYTES_PER_UINT32_T+2*BYTES_PER_UINT64_T);
+- uint32_t src5d = *(uint32_t *) (src+3*spitch+BYTES_PER_UINT32_T+3*BYTES_PER_UINT64_T);
+- *(uint32_t *) (dst+0*dpitch+0) = src1a;
+- *(uint64_t *) (dst+0*dpitch+BYTES_PER_UINT32_T+0*BYTES_PER_UINT64_T) = src2a;
+- *(uint64_t *) (dst+0*dpitch+BYTES_PER_UINT32_T+1*BYTES_PER_UINT64_T) = src3a;
+- *(uint64_t *) (dst+0*dpitch+BYTES_PER_UINT32_T+2*BYTES_PER_UINT64_T) = src4a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT32_T+3*BYTES_PER_UINT64_T) = src5a;
+- *(uint32_t *) (dst+1*dpitch+0) = src1b;
+- *(uint64_t *) (dst+1*dpitch+BYTES_PER_UINT32_T+0*BYTES_PER_UINT64_T) = src2b;
+- *(uint64_t *) (dst+1*dpitch+BYTES_PER_UINT32_T+1*BYTES_PER_UINT64_T) = src3b;
+- *(uint64_t *) (dst+1*dpitch+BYTES_PER_UINT32_T+2*BYTES_PER_UINT64_T) = src4b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT32_T+3*BYTES_PER_UINT64_T) = src5b;
+- *(uint32_t *) (dst+2*dpitch+0) = src1c;
+- *(uint64_t *) (dst+2*dpitch+BYTES_PER_UINT32_T+0*BYTES_PER_UINT64_T) = src2c;
+- *(uint64_t *) (dst+2*dpitch+BYTES_PER_UINT32_T+1*BYTES_PER_UINT64_T) = src3c;
+- *(uint64_t *) (dst+2*dpitch+BYTES_PER_UINT32_T+2*BYTES_PER_UINT64_T) = src4c;
+- *(uint32_t *) (dst+2*dpitch+BYTES_PER_UINT32_T+3*BYTES_PER_UINT64_T) = src5c;
+- *(uint32_t *) (dst+3*dpitch+0) = src1d;
+- *(uint64_t *) (dst+3*dpitch+BYTES_PER_UINT32_T+0*BYTES_PER_UINT64_T) = src2d;
+- *(uint64_t *) (dst+3*dpitch+BYTES_PER_UINT32_T+1*BYTES_PER_UINT64_T) = src3d;
+- *(uint64_t *) (dst+3*dpitch+BYTES_PER_UINT32_T+2*BYTES_PER_UINT64_T) = src4d;
+- *(uint32_t *) (dst+3*dpitch+BYTES_PER_UINT32_T+3*BYTES_PER_UINT64_T) = src5d;
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint32_t src1a = *(uint32_t *) (src+0*spitch+0*BYTES_PER_UINT32_T);
+- uint32_t src2a = *(uint32_t *) (src+0*spitch+1*BYTES_PER_UINT32_T);
+- uint32_t src3a = *(uint32_t *) (src+0*spitch+2*BYTES_PER_UINT32_T);
+- uint32_t src4a = *(uint32_t *) (src+0*spitch+3*BYTES_PER_UINT32_T);
+- uint32_t src5a = *(uint32_t *) (src+0*spitch+4*BYTES_PER_UINT32_T);
+- uint32_t src6a = *(uint32_t *) (src+0*spitch+5*BYTES_PER_UINT32_T);
+- uint32_t src7a = *(uint32_t *) (src+0*spitch+6*BYTES_PER_UINT32_T);
+- uint32_t src8a = *(uint32_t *) (src+0*spitch+7*BYTES_PER_UINT32_T);
+- uint32_t src1b = *(uint32_t *) (src+1*spitch+0*BYTES_PER_UINT32_T);
+- uint32_t src2b = *(uint32_t *) (src+1*spitch+1*BYTES_PER_UINT32_T);
+- uint32_t src3b = *(uint32_t *) (src+1*spitch+2*BYTES_PER_UINT32_T);
+- uint32_t src4b = *(uint32_t *) (src+1*spitch+3*BYTES_PER_UINT32_T);
+- uint32_t src5b = *(uint32_t *) (src+1*spitch+4*BYTES_PER_UINT32_T);
+- uint32_t src6b = *(uint32_t *) (src+1*spitch+5*BYTES_PER_UINT32_T);
+- uint32_t src7b = *(uint32_t *) (src+1*spitch+6*BYTES_PER_UINT32_T);
+- uint32_t src8b = *(uint32_t *) (src+1*spitch+7*BYTES_PER_UINT32_T);
+- uint32_t src1c = *(uint32_t *) (src+2*spitch+0*BYTES_PER_UINT32_T);
+- uint32_t src2c = *(uint32_t *) (src+2*spitch+1*BYTES_PER_UINT32_T);
+- uint32_t src3c = *(uint32_t *) (src+2*spitch+2*BYTES_PER_UINT32_T);
+- uint32_t src4c = *(uint32_t *) (src+2*spitch+3*BYTES_PER_UINT32_T);
+- uint32_t src5c = *(uint32_t *) (src+2*spitch+4*BYTES_PER_UINT32_T);
+- uint32_t src6c = *(uint32_t *) (src+2*spitch+5*BYTES_PER_UINT32_T);
+- uint32_t src7c = *(uint32_t *) (src+2*spitch+6*BYTES_PER_UINT32_T);
+- uint32_t src8c = *(uint32_t *) (src+2*spitch+7*BYTES_PER_UINT32_T);
+- uint32_t src1d = *(uint32_t *) (src+3*spitch+0*BYTES_PER_UINT32_T);
+- uint32_t src2d = *(uint32_t *) (src+3*spitch+1*BYTES_PER_UINT32_T);
+- uint32_t src3d = *(uint32_t *) (src+3*spitch+2*BYTES_PER_UINT32_T);
+- uint32_t src4d = *(uint32_t *) (src+3*spitch+3*BYTES_PER_UINT32_T);
+- uint32_t src5d = *(uint32_t *) (src+3*spitch+4*BYTES_PER_UINT32_T);
+- uint32_t src6d = *(uint32_t *) (src+3*spitch+5*BYTES_PER_UINT32_T);
+- uint32_t src7d = *(uint32_t *) (src+3*spitch+6*BYTES_PER_UINT32_T);
+- uint32_t src8d = *(uint32_t *) (src+3*spitch+7*BYTES_PER_UINT32_T);
+- *(uint32_t *) (dst+0*dpitch+0*BYTES_PER_UINT32_T) = src1a;
+- *(uint32_t *) (dst+0*dpitch+1*BYTES_PER_UINT32_T) = src2a;
+- *(uint32_t *) (dst+0*dpitch+2*BYTES_PER_UINT32_T) = src3a;
+- *(uint32_t *) (dst+0*dpitch+3*BYTES_PER_UINT32_T) = src4a;
+- *(uint32_t *) (dst+0*dpitch+4*BYTES_PER_UINT32_T) = src5a;
+- *(uint32_t *) (dst+0*dpitch+5*BYTES_PER_UINT32_T) = src6a;
+- *(uint32_t *) (dst+0*dpitch+6*BYTES_PER_UINT32_T) = src7a;
+- *(uint32_t *) (dst+0*dpitch+7*BYTES_PER_UINT32_T) = src8a;
+- *(uint32_t *) (dst+1*dpitch+0*BYTES_PER_UINT32_T) = src1b;
+- *(uint32_t *) (dst+1*dpitch+1*BYTES_PER_UINT32_T) = src2b;
+- *(uint32_t *) (dst+1*dpitch+2*BYTES_PER_UINT32_T) = src3b;
+- *(uint32_t *) (dst+1*dpitch+3*BYTES_PER_UINT32_T) = src4b;
+- *(uint32_t *) (dst+1*dpitch+4*BYTES_PER_UINT32_T) = src5b;
+- *(uint32_t *) (dst+1*dpitch+5*BYTES_PER_UINT32_T) = src6b;
+- *(uint32_t *) (dst+1*dpitch+6*BYTES_PER_UINT32_T) = src7b;
+- *(uint32_t *) (dst+1*dpitch+7*BYTES_PER_UINT32_T) = src8b;
+- *(uint32_t *) (dst+2*dpitch+0*BYTES_PER_UINT32_T) = src1c;
+- *(uint32_t *) (dst+2*dpitch+1*BYTES_PER_UINT32_T) = src2c;
+- *(uint32_t *) (dst+2*dpitch+2*BYTES_PER_UINT32_T) = src3c;
+- *(uint32_t *) (dst+2*dpitch+3*BYTES_PER_UINT32_T) = src4c;
+- *(uint32_t *) (dst+2*dpitch+4*BYTES_PER_UINT32_T) = src5c;
+- *(uint32_t *) (dst+2*dpitch+5*BYTES_PER_UINT32_T) = src6c;
+- *(uint32_t *) (dst+2*dpitch+6*BYTES_PER_UINT32_T) = src7c;
+- *(uint32_t *) (dst+2*dpitch+7*BYTES_PER_UINT32_T) = src8c;
+- *(uint32_t *) (dst+3*dpitch+0*BYTES_PER_UINT32_T) = src1d;
+- *(uint32_t *) (dst+3*dpitch+1*BYTES_PER_UINT32_T) = src2d;
+- *(uint32_t *) (dst+3*dpitch+2*BYTES_PER_UINT32_T) = src3d;
+- *(uint32_t *) (dst+3*dpitch+3*BYTES_PER_UINT32_T) = src4d;
+- *(uint32_t *) (dst+3*dpitch+4*BYTES_PER_UINT32_T) = src5d;
+- *(uint32_t *) (dst+3*dpitch+5*BYTES_PER_UINT32_T) = src6d;
+- *(uint32_t *) (dst+3*dpitch+6*BYTES_PER_UINT32_T) = src7d;
+- *(uint32_t *) (dst+3*dpitch+7*BYTES_PER_UINT32_T) = src8d;
+- return TRUE;
+- }
+- else if (SW_CHECK_PITCHED_ALIGNMENT(WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,BYTES_PER_UINT16_T)) {
+- uint16_t src1a = *(uint16_t *) (src+0*spitch+0);
+- uint32_t src2a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T);
+- uint32_t src3a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T);
+- uint32_t src4a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T);
+- uint32_t src5a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T);
+- uint32_t src6a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT16_T+4*BYTES_PER_UINT32_T);
+- uint32_t src7a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT16_T+5*BYTES_PER_UINT32_T);
+- uint32_t src8a = *(uint32_t *) (src+0*spitch+BYTES_PER_UINT16_T+6*BYTES_PER_UINT32_T);
+- uint16_t src9a = *(uint16_t *) (src+0*spitch+BYTES_PER_UINT16_T+7*BYTES_PER_UINT32_T);
+- uint16_t src1b = *(uint16_t *) (src+1*spitch+0);
+- uint32_t src2b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T);
+- uint32_t src3b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T);
+- uint32_t src4b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T);
+- uint32_t src5b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T);
+- uint32_t src6b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT16_T+4*BYTES_PER_UINT32_T);
+- uint32_t src7b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT16_T+5*BYTES_PER_UINT32_T);
+- uint32_t src8b = *(uint32_t *) (src+1*spitch+BYTES_PER_UINT16_T+6*BYTES_PER_UINT32_T);
+- uint16_t src9b = *(uint16_t *) (src+1*spitch+BYTES_PER_UINT16_T+7*BYTES_PER_UINT32_T);
+- uint16_t src1c = *(uint16_t *) (src+2*spitch+0);
+- uint32_t src2c = *(uint32_t *) (src+2*spitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T);
+- uint32_t src3c = *(uint32_t *) (src+2*spitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T);
+- uint32_t src4c = *(uint32_t *) (src+2*spitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T);
+- uint32_t src5c = *(uint32_t *) (src+2*spitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T);
+- uint32_t src6c = *(uint32_t *) (src+2*spitch+BYTES_PER_UINT16_T+4*BYTES_PER_UINT32_T);
+- uint32_t src7c = *(uint32_t *) (src+2*spitch+BYTES_PER_UINT16_T+5*BYTES_PER_UINT32_T);
+- uint32_t src8c = *(uint32_t *) (src+2*spitch+BYTES_PER_UINT16_T+6*BYTES_PER_UINT32_T);
+- uint16_t src9c = *(uint16_t *) (src+2*spitch+BYTES_PER_UINT16_T+7*BYTES_PER_UINT32_T);
+- uint16_t src1d = *(uint16_t *) (src+3*spitch+0);
+- uint32_t src2d = *(uint32_t *) (src+3*spitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T);
+- uint32_t src3d = *(uint32_t *) (src+3*spitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T);
+- uint32_t src4d = *(uint32_t *) (src+3*spitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T);
+- uint32_t src5d = *(uint32_t *) (src+3*spitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T);
+- uint32_t src6d = *(uint32_t *) (src+3*spitch+BYTES_PER_UINT16_T+4*BYTES_PER_UINT32_T);
+- uint32_t src7d = *(uint32_t *) (src+3*spitch+BYTES_PER_UINT16_T+5*BYTES_PER_UINT32_T);
+- uint32_t src8d = *(uint32_t *) (src+3*spitch+BYTES_PER_UINT16_T+6*BYTES_PER_UINT32_T);
+- uint16_t src9d = *(uint16_t *) (src+3*spitch+BYTES_PER_UINT16_T+7*BYTES_PER_UINT32_T);
+- *(uint16_t *) (dst+0*dpitch+0) = src1a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T) = src2a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T) = src3a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T) = src4a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T) = src5a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+4*BYTES_PER_UINT32_T) = src6a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+5*BYTES_PER_UINT32_T) = src7a;
+- *(uint32_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+6*BYTES_PER_UINT32_T) = src8a;
+- *(uint16_t *) (dst+0*dpitch+BYTES_PER_UINT16_T+7*BYTES_PER_UINT32_T) = src9a;
+- *(uint16_t *) (dst+1*dpitch+0) = src1b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T) = src2b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T) = src3b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T) = src4b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T) = src5b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+4*BYTES_PER_UINT32_T) = src6b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+5*BYTES_PER_UINT32_T) = src7b;
+- *(uint32_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+6*BYTES_PER_UINT32_T) = src8b;
+- *(uint16_t *) (dst+1*dpitch+BYTES_PER_UINT16_T+7*BYTES_PER_UINT32_T) = src9b;
+- *(uint16_t *) (dst+2*dpitch+0) = src1c;
+- *(uint32_t *) (dst+2*dpitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T) = src2c;
+- *(uint32_t *) (dst+2*dpitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T) = src3c;
+- *(uint32_t *) (dst+2*dpitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T) = src4c;
+- *(uint32_t *) (dst+2*dpitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T) = src5c;
+- *(uint32_t *) (dst+2*dpitch+BYTES_PER_UINT16_T+4*BYTES_PER_UINT32_T) = src6c;
+- *(uint32_t *) (dst+2*dpitch+BYTES_PER_UINT16_T+5*BYTES_PER_UINT32_T) = src7c;
+- *(uint32_t *) (dst+2*dpitch+BYTES_PER_UINT16_T+6*BYTES_PER_UINT32_T) = src8c;
+- *(uint16_t *) (dst+2*dpitch+BYTES_PER_UINT16_T+7*BYTES_PER_UINT32_T) = src9c;
+- *(uint16_t *) (dst+3*dpitch+0) = src1d;
+- *(uint32_t *) (dst+3*dpitch+BYTES_PER_UINT16_T+0*BYTES_PER_UINT32_T) = src2d;
+- *(uint32_t *) (dst+3*dpitch+BYTES_PER_UINT16_T+1*BYTES_PER_UINT32_T) = src3d;
+- *(uint32_t *) (dst+3*dpitch+BYTES_PER_UINT16_T+2*BYTES_PER_UINT32_T) = src4d;
+- *(uint32_t *) (dst+3*dpitch+BYTES_PER_UINT16_T+3*BYTES_PER_UINT32_T) = src5d;
+- *(uint32_t *) (dst+3*dpitch+BYTES_PER_UINT16_T+4*BYTES_PER_UINT32_T) = src6d;
+- *(uint32_t *) (dst+3*dpitch+BYTES_PER_UINT16_T+5*BYTES_PER_UINT32_T) = src7d;
+- *(uint32_t *) (dst+3*dpitch+BYTES_PER_UINT16_T+6*BYTES_PER_UINT32_T) = src8d;
+- *(uint16_t *) (dst+3*dpitch+BYTES_PER_UINT16_T+7*BYTES_PER_UINT32_T) = src9d;
+- return TRUE;
+- }
+- else {
+- // Don't bother unrolling loops, since that won't help for more than around 8 operations.
+- // Instead, just call multiple fixed functions.
+- if (xdir >= 0) {
+- swCopy16BppSmallFixedWidths4Rows_Unaligned(dst, src, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths4Rows_Unaligned(dst + 8 * BYTES_PER_UINT16_T, src + 8 * BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- } else {
+- swCopy16BppSmallFixedWidths4Rows_Unaligned(dst + 8 * BYTES_PER_UINT16_T, src + 8 * BYTES_PER_UINT16_T, 8, xdir, dpitch, spitch);
+- swCopy16BppSmallFixedWidths4Rows_Unaligned(dst, src, 8, xdir, dpitch, spitch);
+- }
+- return TRUE;
+- }
+- break;
+- // TODO: Add more alignment checks for 32 pixel-wide cases for performance reasons?
+- // For example, handling (SW_CHECK_PITCHED_ALIGNMENT(DOUBLE_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,XXX)) and related cases could make a big difference here...
+- case 32: if (SW_CHECK_PITCHED_ALIGNMENT(QUAD_WORD_ALIGNMENT_BYTE_SIZE,dst,src,dpitch,spitch,0)) {
+- uint32x4_t src1a = vld1q_u32((uint32_t *)(src+0*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2a = vld1q_u32((uint32_t *)(src+0*spitch+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src3a = vld1q_u32((uint32_t *)(src+0*spitch+2*BYTES_PER_UINT32X4_T));
+- uint32x4_t src4a = vld1q_u32((uint32_t *)(src+0*spitch+3*BYTES_PER_UINT32X4_T));
+- uint32x4_t src1b = vld1q_u32((uint32_t *)(src+1*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2b = vld1q_u32((uint32_t *)(src+1*spitch+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src3b = vld1q_u32((uint32_t *)(src+1*spitch+2*BYTES_PER_UINT32X4_T));
+- uint32x4_t src4b = vld1q_u32((uint32_t *)(src+1*spitch+3*BYTES_PER_UINT32X4_T));
+- uint32x4_t src1c = vld1q_u32((uint32_t *)(src+2*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2c = vld1q_u32((uint32_t *)(src+2*spitch+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src3c = vld1q_u32((uint32_t *)(src+2*spitch+2*BYTES_PER_UINT32X4_T));
+- uint32x4_t src4c = vld1q_u32((uint32_t *)(src+2*spitch+3*BYTES_PER_UINT32X4_T));
+- uint32x4_t src1d = vld1q_u32((uint32_t *)(src+3*spitch+0*BYTES_PER_UINT32X4_T));
+- uint32x4_t src2d = vld1q_u32((uint32_t *)(src+3*spitch+1*BYTES_PER_UINT32X4_T));
+- uint32x4_t src3d = vld1q_u32((uint32_t *)(src+3*spitch+2*BYTES_PER_UINT32X4_T));
+- uint32x4_t src4d = vld1q_u32((uint32_t *)(src+3*spitch+3*BYTES_PER_UINT32X4_T));
+- vst1q_u32((uint32_t *)(dst+0*dpitch+0*BYTES_PER_UINT32X4_T),src1a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+1*BYTES_PER_UINT32X4_T),src2a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+2*BYTES_PER_UINT32X4_T),src3a);
+- vst1q_u32((uint32_t *)(dst+0*dpitch+3*BYTES_PER_UINT32X4_T),src4a);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+0*BYTES_PER_UINT32X4_T),src1b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+1*BYTES_PER_UINT32X4_T),src2b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+2*BYTES_PER_UINT32X4_T),src3b);
+- vst1q_u32((uint32_t *)(dst+1*dpitch+3*BYTES_PER_UINT32X4_T),src4b);
+- vst1q_u32((uint32_t *)(dst+2*dpitch+0*BYTES_PER_UINT32X4_T),src1c);
+- vst1q_u32((uint32_t *)(dst+2*dpitch+1*BYTES_PER_UINT32X4_T),src2c);
+- vst1q_u32((uint32_t *)(dst+2*dpitch+2*BYTES_PER_UINT32X4_T),src3c);
+- vst1q_u32((uint32_t *)(dst+2*dpitch+3*BYTES_PER_UINT32X4_T),src4c);
+- vst1q_u32((uint32_t *)(dst+3*dpitch+0*BYTES_PER_UINT32X4_T),src1d);
+- vst1q_u32((uint32_t *)(dst+3*dpitch+1*BYTES_PER_UINT32X4_T),src2d);
+- vst1q_u32((uint32_t *)(dst+3*dpitch+2*BYTES_PER_UINT32X4_T),src3d);
+- vst1q_u32((uint32_t *)(dst+3*dpitch+3*BYTES_PER_UINT32X4_T),src4d);
+- return TRUE;
+- }
+- break;
+- }
++ }
+
+ return FALSE;
+ }
+@@ -1924,10 +872,12 @@ swCopyRect16BppFixedWidth_Unaligned(unsigned char *dst, unsigned char *src, int
+ if (rowsOverlap)
+ {
+ if (w > 64) {
+- DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY_NO_NARROW_COPIES(neon_memmove, BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS, UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
++ //DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY_NO_NARROW_COPIES(neon_memmove, BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS, UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
++ DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY_NO_NARROW_COPIES(memmove, BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS, UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
+ }
+ else if (w == 64) {
+- DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY(neon_memmove, BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS, UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
++ //DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY(neon_memmove, BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS, UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
++ DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY(memmove, BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS, UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
+ }
+ else {
+ DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY(memmove, SIGNAL_BLOCK_NOOP, SIGNAL_BLOCK_NOOP);
+@@ -1936,10 +886,12 @@ swCopyRect16BppFixedWidth_Unaligned(unsigned char *dst, unsigned char *src, int
+ else
+ {
+ if (w > 64) {
+- DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY_NO_NARROW_COPIES(neon_memcpy, BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS, UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
++ //DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY_NO_NARROW_COPIES(neon_memcpy, BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS, UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
++ DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY_NO_NARROW_COPIES(memcpy, BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS, UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
+ }
+ else if (w == 64) {
+- DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY(neon_memcpy, BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS, UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
++ //DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY(neon_memcpy, BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS, UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
++ DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY(memcpy, BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS, UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS);
+ }
+ else {
+ DRAW_MULTIPLE_ROWS_WITH_MEMORY_COPY(memcpy, SIGNAL_BLOCK_NOOP, SIGNAL_BLOCK_NOOP);
+@@ -1973,7 +925,8 @@ swCopyRect8Bpp_Unaligned(unsigned char *dst, unsigned char *src, int w, int h, i
+ if (xdir >= 0 || !rowsOverlap) {
+ if (w >= 128) {
+ BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS();
+- neon_memcpy(dst, src, w);
++ //neon_memcpy(dst, src, w);
++ memcpy(dst, src, w);
+ UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS();
+ }
+ else
+@@ -1982,7 +935,8 @@ swCopyRect8Bpp_Unaligned(unsigned char *dst, unsigned char *src, int w, int h, i
+ else {
+ if (w >= 128) {
+ BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS();
+- neon_memmove(dst, src, w);
++ //neon_memmove(dst, src, w);
++ memmove(dst, src, w);
+ UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS();
+ }
+ else
+@@ -2029,7 +983,8 @@ swCopyRect24Bpp_Unaligned(unsigned char *dst, unsigned char *src, int w, int h,
+ if (xdir >= 0 || !rowsOverlap) {
+ if (w >= 42) {
+ BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS();
+- neon_memcpy(dst, src, w * BYTES_PER_24BPP_PIXEL);
++ //neon_memcpy(dst, src, w * BYTES_PER_24BPP_PIXEL);
++ memcpy(dst, src, w * BYTES_PER_24BPP_PIXEL);
+ UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS();
+ }
+ else
+@@ -2038,7 +993,8 @@ swCopyRect24Bpp_Unaligned(unsigned char *dst, unsigned char *src, int w, int h,
+ else {
+ if (w >= 42) {
+ BLOCK_SIGNALS_BEFORE_VFP_OPERATIONS();
+- neon_memmove(dst, src, w * BYTES_PER_24BPP_PIXEL);
++ //neon_memmove(dst, src, w * BYTES_PER_24BPP_PIXEL);
++ memmove(dst, src, w * BYTES_PER_24BPP_PIXEL);
+ UNBLOCK_SIGNALS_AFTER_VFP_OPERATIONS();
+ }
+ else
+diff --git git/src/neon_memcpy.S git/src/neon_memcpy.S
+deleted file mode 100644
+index 5ecc5ce..0000000
+--- git/src/neon_memcpy.S
++++ /dev/null
+@@ -1,549 +0,0 @@
+-/***************************************************************************
+- Copyright (c) 2009, Code Aurora Forum. All rights reserved.
+-
+- Redistribution and use in source and binary forms, with or without
+- modification, are permitted provided that the following conditions are met:
+- * Redistributions of source code must retain the above copyright
+- notice, this list of conditions and the following disclaimer.
+- * Redistributions in binary form must reproduce the above copyright
+- notice, this list of conditions and the following disclaimer in the
+- documentation and/or other materials provided with the distribution.
+- * Neither the name of Code Aurora nor the names of its contributors may
+- be used to endorse or promote products derived from this software
+- without specific prior written permission.
+-
+- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+- POSSIBILITY OF SUCH DAMAGE.
+- ***************************************************************************/
+-
+-/***************************************************************************
+- Neon memcpy: Attempts to do a memcpy with Neon registers if possible,
+- Inputs:
+- dest: The destination buffer
+- src: The source buffer
+- n: The size of the buffer to transfer
+- Outputs:
+-
+-***************************************************************************/
+-
+-/*
+- * General note:
+- * The original code that was compiled for rvct used PUSH/POP and VPUSH/VPOP
+- * However, it looks like the 2006 CodeSourcery Assembler has issues generating
+- * the correct object code for VPOP, resulting in horrific stack crashes.
+- * As a result, I've temporarily move PUSH->STMDB, POP->LDMIA, VPUSH->VSTMDB,
+- * and VPOP->VLDMIA. We can revert this back once we update our toolchain.
+- *
+- * Also, VSHL swaps the source register and the shift-amount register
+- * around in 2006-q3. I've coded this incorrectly so it turns out correct
+- * in the object code, but we'll need to undo that later...
+- */
+-
+- .code 32
+- .align 4
+- .globl neon_memcpy
+- .func
+-
+-neon_memcpy:
+- /*
+- * First, make sure we're not copying < 4 bytes. If so, we'll
+- * just handle it here.
+- */
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- stmdb sp!, {r0}
+-#else
+- push {r0}
+-#endif
+- cmp r2, #4
+- bgt neon_gt_4
+- /* Copy 0-4 bytes, if needed, and return.*/
+- cmp r2, #0
+-neon_smallcopy_loop:
+- beq neon_smallcopy_done
+- ldrb r12, [r1], #1
+- subs r2, r2, #1
+- strb r12, [r0], #1
+- b neon_smallcopy_loop
+-neon_smallcopy_done:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- ldmia sp!, {r0}
+-#else
+- pop {r0}
+-#endif
+- bx lr
+-
+- /* Copy 4 or more bytes*/
+-neon_gt_4:
+- /* Preload what we can...*/
+- pld [r0,#0]
+- pld [r1,#0]
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- stmdb sp!, {r4-r5}
+-#else
+- push {r4-r5}
+-#endif
+-
+-neon_check_align:
+- /* Check normal word alignment for target. */
+- ands r12, r0, #0x3
+- beq source_alignment_check
+-
+- /*
+- * Target is not aligned. Step through until we get that
+- * word-aligned. This works better than a loop, according
+- * to our pipeline modeler.
+- */
+- cmp r12, #2
+- ldrb r3, [r1], #1
+- ldrleb r4, [r1], #1
+- ldrltb r5, [r1], #1
+- rsb r12, r12, #4
+- sub r2, r2, r12
+- strb r3, [r0], #1
+- strleb r4, [r0], #1
+- strltb r5, [r0], #1
+-
+-source_alignment_check:
+- ands r12, r1, #0x3
+- bne neon_memcpy_nonaligned /* Source is not word aligned.*/
+-neon_try_16_align:
+- cmp r2, #64
+- blt neon_align_route
+- /* This is where we try 16-byte alignment. */
+- ands r12, r0, #0xf
+- beq neon_align_route
+- rsb r12, r12, #16
+-neon_16_start:
+- sub r2, r2, r12
+- lsrs r3, r12, #2
+-neon_align_16_4:
+- ldr r4, [r1], #4
+- subs r3, r3, #1
+- str r4, [r0], #4
+- bne neon_align_16_4
+-neon_align_route:
+- /* In this case, both source and target are word-aligned. */
+- cmp r2, #32768
+- bge neon_copy_128p_a
+- cmp r2, #256
+- bge neon_copy_128_a
+- cmp r2, #64
+- bge neon_copy_32_a
+- b neon_copy_finish_a
+- nop
+-neon_copy_128p_a:
+- /* We'll copy blocks 128-bytes at a time, but try to call pld to
+- * load in the next page, if possible.
+- */
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vstmdb sp!, {q4-q7}
+-#else
+- vpush {q4-q7}
+-#endif
+- mov r12, r2, lsr #7
+-neon_copy_128p_loop_a:
+- vld1.32 {q0, q1}, [r1]!
+- vld1.32 {q2, q3}, [r1]!
+- vld1.32 {q4, q5}, [r1]!
+- vld1.32 {q6, q7}, [r1]!
+- pld [r1, #0]
+- pld [r1, #1024]
+- vst1.32 {q0, q1}, [r0]!
+- vst1.32 {q2, q3}, [r0]!
+- vst1.32 {q4, q5}, [r0]!
+- vst1.32 {q6, q7}, [r0]!
+- subs r12, r12, #1
+- bne neon_copy_128p_loop_a
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vldmia sp!, {q4-q7}
+-#else
+- vpop {q4-q7}
+-#endif
+- ands r2, r2, #0x7f
+- beq neon_end
+- cmp r2, #32
+- blt neon_copy_finish_a
+- b neon_copy_32_a
+- /* Copy blocks of 128-bytes (word-aligned) at a time*/
+-neon_copy_128_a:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vstmdb sp!, {q4-q7}
+-#else
+- vpush {q4-q7}
+-#endif
+- /*
+- * Move to a 1-s based countdown to determine when to loop. That
+- * allows the subs to set the Z flag without having to explicitly
+- * call cmp to a value.
+- */
+- mov r12, r2, lsr #7
+-neon_copy_128_loop_a:
+- vld1.32 {q0, q1}, [r1]!
+- vld1.32 {q2, q3}, [r1]!
+- vld1.32 {q4, q5}, [r1]!
+- vld1.32 {q6, q7}, [r1]!
+- pld [r1, #0]
+- pld [r1, #128]
+- vst1.32 {q0, q1}, [r0]!
+- vst1.32 {q2, q3}, [r0]!
+- vst1.32 {q4, q5}, [r0]!
+- vst1.32 {q6, q7}, [r0]!
+- subs r12, r12, #1
+- pld [r0, #0]
+- pld [r0, #128]
+- bne neon_copy_128_loop_a
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vldmia sp!, {q4-q7}
+-#else
+- vpop {q4-q7}
+-#endif
+- ands r2, r2, #0x7f
+- beq neon_end
+- cmp r2, #32
+- blt neon_copy_finish_a
+- /* Copy blocks of 32-bytes (word aligned) at a time*/
+-neon_copy_32_a:
+- mov r12, r2, lsr #5
+-neon_copy_32_loop_a:
+- vld1.32 {q0,q1}, [r1]!
+- subs r12, r12, #1
+- pld [r1,#0]
+- vst1.32 {q0,q1}, [r0]!
+- bne neon_copy_32_loop_a
+- ands r2, r2, #0x1f
+- beq neon_end
+-neon_copy_finish_a:
+-neon_copy_16_a:
+- movs r12, r2, lsr #4
+- beq neon_copy_8_a
+-neon_copy_16_a_loop:
+- vld1.32 {q0}, [r1]!
+- subs r12, r12, #1
+- vst1.32 {q0}, [r0]!
+- bne neon_copy_16_a_loop
+- ands r2, r2, #0xf
+- beq neon_end
+-neon_copy_8_a:
+- cmp r2, #8
+- blt neon_copy_4_a
+- ldm r1!, {r4-r5}
+- subs r2, r2, #8
+- stm r0!, {r4-r5}
+- /* Copy 4-bytes of word-aligned data at a time*/
+-neon_copy_4_a:
+- cmp r2, #4
+- blt neon_copy_finish
+- ldr r4, [r1], #4
+- subs r2, r2, #4
+- str r4, [r0], #4
+- b neon_copy_finish
+-
+- /*
+- * Handle unaligned data. The basic concept here is that we'll
+- * try to pull out enough data from the source to get that word-
+- * aligned, then do our writes word-aligned, storing the difference
+- * in a register, and shifting the data as needed.
+- */
+-neon_memcpy_nonaligned:
+- /*
+- * If this is <8 bytes, it makes more sense to just copy it
+- * quickly instead of incurring all kinds of overhead.
+- */
+- cmp r2, #8 /* Let's try this...*/
+- ble neon_copy_finish
+- /*
+- * This is where we'll pull out either 1, 2, or 3 bytes of data
+- * from the source as needed to align it, then store off those
+- * bytes in r4. When we read in the (now) aligned data from the
+- * source, we'll shift the bytes and AND in the r4 data, then write
+- * to the target aligned.
+- *
+- * The conditional ldr calls work slightly faster than the
+- * previous method, confirmed by our pipeline modeler.
+- */
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- stmdb sp!, {r6-r9}
+-#else
+- push {r6-r9}
+-#endif
+- cmp r12, #2
+- ldrb r4, [r1], #1
+- ldrleb r5, [r1], #1
+- ldrltb r6, [r1], #1
+- rsb r8, r12, #4
+- sub r2, r2, r8
+- lsl r8, r8, #3
+- orrle r4, r4, r5, lsl #8
+- orrlt r4, r4, r6, lsl #16
+- rsb r9, r8, #32
+-
+- cmp r2, #64
+- blt neon_unaligned_route
+- ands r12, r0, #0xf
+- beq neon_unaligned_route
+- rsb r12, r12, #16
+-neon_16_start_u:
+- sub r2, r2, r12
+- lsrs r6, r12, #2
+-neon_align_16_4_u:
+- ldr r5, [r1], #4
+- subs r6, r6, #1
+- orr r4, r4, r5, lsl r8
+- str r4, [r0], #4
+- mov r4, r5, lsr r9
+- bne neon_align_16_4_u
+-neon_unaligned_route:
+- /* Decide which loop block to branch to.*/
+- cmp r2, #256
+- bge neon_copy_64_u
+- cmp r2, #64
+- bge neon_copy_32_u
+- b neon_copy_finish_u
+- /* Copy data in 64-byte blocks.*/
+-neon_copy_64_u:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vstmdb sp!, {q4}
+- vstmdb sp!, {q5-q8}
+-#else
+- vpush {q4}
+- vpush {q5-q8}
+-#endif
+- /* We'll need this for the q register shift later.*/
+- vdup.u32 q8, r8
+- /*
+- * As above, we determine how many times we can go through the
+- * 64-byte copy loop, then countdown.
+- */
+- mov r12, r2, lsr #6
+- and r2, r2, #0x3f
+-neon_copy_64_u_loop:
+- /* Load 64-bytes into q4-q7.*/
+- vld1.32 {q4, q5}, [r1]!
+- vld1.32 {q6, q7}, [r1]!
+- /*
+- * Shift q0-q3 right so everything but the data we need due to the
+- * alignment falls off the right-hand side. The branching
+- * is needed, since vshr requires the shift to be an immediate
+- * value.
+- */
+- lsls r5, r8, #28
+- bcc neon_copy_64_u_b8
+- bpl neon_copy_64_u_b16
+- vshr.u64 q0, q4, #40
+- vshr.u64 q1, q5, #40
+- vshr.u64 q2, q6, #40
+- vshr.u64 q3, q7, #40
+- b neon_copy_64_unify
+-neon_copy_64_u_b8:
+- vshr.u64 q0, q4, #56
+- vshr.u64 q1, q5, #56
+- vshr.u64 q2, q6, #56
+- vshr.u64 q3, q7, #56
+- b neon_copy_64_unify
+-neon_copy_64_u_b16:
+- vshr.u64 q0, q4, #48
+- vshr.u64 q1, q5, #48
+- vshr.u64 q2, q6, #48
+- vshr.u64 q3, q7, #48
+-neon_copy_64_unify:
+- /*
+- * Shift q4-q7 left by r8 bits to take the alignment into
+- * account.
+- */
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vshl.u64 q4, q8, q4
+- vshl.u64 q5, q8, q5
+- vshl.u64 q6, q8, q6
+- vshl.u64 q7, q8, q7
+-#else
+- vshl.u64 q4, q4, q8
+- vshl.u64 q5, q5, q8
+- vshl.u64 q6, q6, q8
+- vshl.u64 q7, q7, q8
+-#endif
+- /*
+- * The data in s14 will be needed for the next loop iteration. Move
+- * that to r5.
+- */
+- vmov r5, s14
+- /* We'll vorr the shifted data with the data that needs to move back.*/
+- vorr d9, d9, d0
+- /* Copy the data from the previous loop into s14.*/
+- vmov s14, r4
+- vorr d10, d10, d1
+- vorr d11, d11, d2
+- vorr d12, d12, d3
+- vorr d13, d13, d4
+- vorr d14, d14, d5
+- vorr d15, d15, d6
+- vorr d8, d8, d7
+- subs r12, r12, #1
+- pld [r1, #0]
+- pld [r1, #128]
+- /* Save off the r5 data into r4 for the next iteration.*/
+- mov r4, r5
+- vst1.32 {q4, q5}, [r0]!
+- vst1.32 {q6, q7}, [r0]!
+- pld [r0, #0]
+- pld [r0, #128]
+- bne neon_copy_64_u_loop
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vldmia sp!, {q5-q8}
+- vldmia sp!, {q4}
+-#else
+- vpop {q5-q8}
+- vpop {q4}
+-#endif
+- cmp r2, #32
+- bge neon_copy_32_u
+- b neon_copy_finish_u
+-neon_copy_32_u:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vstmdb sp!, {q4}
+-#else
+- vpush {q4}
+-#endif
+- vdup.u32 q4, r8
+- mov r12, r2, lsr #5
+- and r2, r2, #0x1f
+-neon_copy_32_u_loop:
+- vld1.32 {q0, q1}, [r1]!
+- lsls r5, r8, #28
+- bcc neon_copy_32_u_b8
+- bpl neon_copy_32_u_b16
+- vshr.u64 q2, q0, #40
+- vshr.u64 q3, q1, #40
+- b neon_copy_32_unify
+-neon_copy_32_u_b8:
+- vshr.u64 q2, q0, #56
+- vshr.u64 q3, q1, #56
+- b neon_copy_32_unify
+-neon_copy_32_u_b16:
+- vshr.u64 q2, q0, #48
+- vshr.u64 q3, q1, #48
+-neon_copy_32_unify:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vshl.u64 q0, q4, q0
+- vshl.u64 q1, q4, q1
+-#else
+- vshl.u64 q0, q0, q4
+- vshl.u64 q1, q1, q4
+-#endif
+- vmov r5, s14
+- vorr d1, d1, d4
+- vmov s14, r4
+- vorr d2, d2, d5
+- vorr d3, d3, d6
+- vorr d0, d0, d7
+- subs r12, r12, #1
+- pld [r1, #0]
+- mov r4, r5
+- vst1.32 {q0, q1}, [r0]!
+- bne neon_copy_32_u_loop
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vldmia sp!, {q4}
+-#else
+- vpop {q4}
+-#endif
+-neon_copy_finish_u:
+-neon_copy_16_u:
+- movs r12, r2, lsr #4
+- beq neon_copy_8_u
+- vdup.u32 q2, r8
+- and r2, r2, #0xf
+-neon_copy_16_u_loop:
+- vld1.32 {q0}, [r1]!
+- lsls r5, r8, #28
+- bcc neon_copy_16_u_b8
+- bpl neon_copy_16_u_b16
+- vshr.u64 q1, q0, #40
+- b neon_copy_16_unify
+-neon_copy_16_u_b8:
+- vshr.u64 q1, q0, #56
+- b neon_copy_16_unify
+-neon_copy_16_u_b16:
+- vshr.u64 q1, q0, #48
+-neon_copy_16_unify:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vshl.u64 q0, q2, q0
+-#else
+- vshl.u64 q0, q0, q2
+-#endif
+- vmov r5, s6
+- vorr d1, d1, d2
+- vmov s6, r4
+- vorr d0, d0, d3
+- subs r12, r12, #1
+- mov r4, r5
+- vst1.32 {q0}, [r0]!
+- bne neon_copy_16_u_loop
+-neon_copy_8_u:
+- cmp r2, #8
+- blt neon_copy_4_u
+- ldm r1!, {r6-r7}
+- subs r2, r2, #8
+- orr r4, r4, r6, lsl r8
+- mov r5, r6, lsr r9
+- orr r5, r5, r7, lsl r8
+- stm r0!, {r4-r5}
+- mov r4, r7, lsr r9
+-neon_copy_4_u:
+- cmp r2, #4
+- blt neon_copy_last_bits_u
+- ldr r5, [r1], #4
+- subs r2, r2, #4
+- orr r4, r4, r5, lsl r8
+- str r4, [r0], #4
+- mov r4, r5, lsr r9
+-neon_copy_last_bits_u:
+- /*
+- * Remember, r8 contains the size of the data in r4 in bits,
+- * so to get to bytes we'll need to shift 3 places
+- */
+- lsr r8, r8, #0x3
+- /* Write out the bytes stored in r4.*/
+-neon_copy_last_bits_u_loop:
+- strb r4, [r0], #1
+- subs r8, r8, #1
+- lsrne r4, r4, #8
+- bne neon_copy_last_bits_u_loop
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- ldmia sp!, {r6-r9}
+-#else
+- pop {r6-r9}
+-#endif
+-neon_copy_finish:
+- cmp r2, #0
+- beq neon_end
+- /*
+- * This just copies the data from source to target one byte
+- * at a time. For some small values, this makes more sense.
+- * Note that since this code copies data a byte at a time,
+- * both the aligned and unaligned paths can use it.
+- */
+-neon_copy_finish_loop:
+- ldrb r4, [r1], #1
+- subs r2, r2, #1
+- strb r4, [r0], #1
+- bne neon_copy_finish_loop
+-neon_end:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- ldmia sp!, {r4-r5}
+- ldmia sp!, {r0}
+-#else
+- pop {r4-r5}
+- pop {r0}
+-#endif
+- bx lr
+-
+- .endfunc
+- .end
+diff --git git/src/neon_memmove.S git/src/neon_memmove.S
+deleted file mode 100644
+index 1bfe597..0000000
+--- git/src/neon_memmove.S
++++ /dev/null
+@@ -1,939 +0,0 @@
+-/***************************************************************************
+- Copyright (c) 2009, Code Aurora Forum. All rights reserved.
+-
+- Redistribution and use in source and binary forms, with or without
+- modification, are permitted provided that the following conditions are met:
+- * Redistributions of source code must retain the above copyright
+- notice, this list of conditions and the following disclaimer.
+- * Redistributions in binary form must reproduce the above copyright
+- notice, this list of conditions and the following disclaimer in the
+- documentation and/or other materials provided with the distribution.
+- * Neither the name of Code Aurora nor the names of its contributors may
+- be used to endorse or promote products derived from this software
+- without specific prior written permission.
+-
+- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+- POSSIBILITY OF SUCH DAMAGE.
+- ***************************************************************************/
+-
+-/***************************************************************************
+- * Neon memmove: Attempts to do a memmove with Neon registers if possible,
+- * Inputs:
+- * dest: The destination buffer
+- * src: The source buffer
+- * n: The size of the buffer to transfer
+- * Outputs:
+- *
+- ***************************************************************************/
+-
+-/*
+- * General note:
+- * The original code that was compiled for rvct used PUSH/POP and VPUSH/VPOP
+- * However, it looks like the 2006 CodeSourcery Assembler has issues generating
+- * the correct object code for VPOP, resulting in horrific stack crashes.
+- * As a result, I've temporarily move PUSH->STMDB, POP->LDMIA, VPUSH->VSTMDB,
+- * and VPOP->VLDMIA. We can revert this back once we update our toolchain.
+- *
+- * Also, VSHL swaps the source register and the shift-amount register
+- * around in 2006-q3. I've coded this incorrectly so it turns out correct
+- * in the object code, but we'll need to undo that later...
+- */
+- .code 32
+- .align 4
+- .globl neon_memmove
+- .func
+-
+-neon_memmove:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- stmdb sp!, {r0}
+-#else
+- push {r0}
+-#endif
+-
+- /*
+- * The requirements for memmove state that the function should
+- * operate as if data were being copied from the source to a
+- * buffer, then to the destination. This is to allow a user
+- * to copy data from a source and target that overlap.
+- *
+- * We can't just do byte copies front-to-back automatically, since
+- * there's a good chance we may have an overlap (why else would someone
+- * intentionally use memmove then?).
+- *
+- * We'll break this into two parts. Front-to-back, or back-to-front
+- * copies.
+- */
+-neon_memmove_cmf:
+- cmp r0, r1
+- blt neon_front_to_back_copy
+- bgt neon_back_to_front_copy
+- b neon_memmove_done
+-
+- /* #############################################################
+- * Front to Back copy
+- */
+-neon_front_to_back_copy:
+- /*
+- * For small copies, just do a quick memcpy. We can do this for
+- * front-to-back copies, aligned or unaligned, since we're only
+- * doing 1 byte at a time...
+- */
+- cmp r2, #4
+- bgt neon_f2b_gt4
+- cmp r2, #0
+-neon_f2b_smallcopy_loop:
+- beq neon_memmove_done
+- ldrb r12, [r1], #1
+- subs r2, r2, #1
+- strb r12, [r0], #1
+- b neon_f2b_smallcopy_loop
+-neon_f2b_gt4:
+- /* Preload what we can...*/
+- pld [r0,#0]
+- pld [r1,#0]
+- /* The window size is in r3. */
+- sub r3, r1, r0
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- stmdb sp!, {r4-r6}
+-#else
+- push {r4-r6}
+-#endif
+-
+-neon_f2b_check_align:
+- /* Check alignment. */
+- ands r12, r0, #0x3
+- beq neon_f2b_source_align_check
+- cmp r12, #2
+- ldrb r4, [r1], #1
+- ldrleb r5, [r1], #1
+- ldrltb r6, [r1], #1
+- rsb r12, r12, #4
+- sub r2, r2, r12
+- strb r4, [r0], #1
+- strleb r5, [r0], #1
+- strltb r6, [r0], #1
+-
+-neon_f2b_source_align_check:
+- ands r12, r1, #0x3
+- bne neon_f2b_nonaligned
+-
+-neon_f2b_try_16_align:
+- /* If we're >64, attempt to align on 16-bytes. Smaller amounts
+- * don't seem to be worth handling. */
+- cmp r2, #64
+- blt neon_f2b_align_route
+- /* This is where we try 16-byte alignment. */
+- ands r12, r0, #0xf
+- beq neon_f2b_align_route
+- rsb r12, r12, #16
+-neon_f2b_16_start:
+- sub r2, r2, r12
+- lsrs r5, r12, #2
+-neon_f2b_align_16_4:
+- ldr r4, [r1], #4
+- subs r5, r5, #1
+- str r4, [r0], #4
+- bne neon_f2b_align_16_4
+-neon_f2b_align_route:
+- /* #############################################################
+- * Front to Back copy - aligned
+- */
+- /*
+- * Note that we can't just route based on the size in r2. If that's
+- * larger than the overlap window in r3, we could potentially
+- * (and likely!) destroy data we're copying.
+- */
+- cmp r2, r3
+- movle r12, r2
+- movgt r12, r3
+- cmp r12, #256
+- bge neon_f2b_copy_128_a
+- cmp r12, #64
+- bge neon_f2b_copy_32_a
+- cmp r12, #16
+- bge neon_f2b_copy_16_a
+- cmp r12, #8
+- bge neon_f2b_copy_8_a
+- cmp r12, #4
+- bge neon_f2b_copy_4_a
+- b neon_f2b_copy_1_a
+-neon_f2b_copy_128_a:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vstmdb sp!, {q4-q7}
+-#else
+- vpush {q4-q7}
+-#endif
+- mov r12, r2, lsr #7
+-neon_f2b_copy_128_a_loop:
+- vld1.32 {q0,q1}, [r1]!
+- vld1.32 {q2,q3}, [r1]!
+- vld1.32 {q4,q5}, [r1]!
+- vld1.32 {q6,q7}, [r1]!
+- pld [r1, #0]
+- pld [r1, #128]
+- vst1.32 {q0,q1}, [r0]!
+- vst1.32 {q2,q3}, [r0]!
+- vst1.32 {q4,q5}, [r0]!
+- vst1.32 {q6,q7}, [r0]!
+- subs r12, r12, #1
+- pld [r0, #0]
+- pld [r0, #128]
+- bne neon_f2b_copy_128_a_loop
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vldmia sp!, {q4-q7}
+-#else
+- vpop {q4-q7}
+-#endif
+- ands r2, r2, #0x7f
+- beq neon_f2b_finish
+- cmp r2, #32
+- bge neon_f2b_copy_32_a
+- b neon_f2b_copy_finish_a
+-neon_f2b_copy_32_a:
+- mov r12, r2, lsr #5
+-neon_f2b_copy_32_a_loop:
+- vld1.32 {q0,q1}, [r1]!
+- subs r12, r12, #1
+- pld [r1, #0]
+- vst1.32 {q0,q1}, [r0]!
+- bne neon_f2b_copy_32_a_loop
+- ands r2, r2, #0x1f
+- beq neon_f2b_finish
+-neon_f2b_copy_finish_a:
+-neon_f2b_copy_16_a:
+- movs r12, r2, lsr #4
+- beq neon_f2b_copy_8_a
+-neon_f2b_copy_16_a_loop:
+- vld1.32 {q0}, [r1]!
+- subs r12, r12, #1
+- vst1.32 {q0}, [r0]!
+- bne neon_f2b_copy_16_a_loop
+- ands r2, r2, #0xf
+- beq neon_f2b_finish
+-neon_f2b_copy_8_a:
+- cmp r2, #8
+- blt neon_f2b_copy_4_a
+- ldm r1!, {r4-r5}
+- subs r2, r2, #8
+- stm r0!, {r4-r5}
+-neon_f2b_copy_4_a:
+- cmp r2, #4
+- blt neon_f2b_copy_1_a
+- ldr r4, [r1], #4
+- subs r2, r2, #4
+- str r4, [r0], #4
+-neon_f2b_copy_1_a:
+- cmp r2, #0
+- beq neon_f2b_finish
+-neon_f2b_copy_1_a_loop:
+- ldrb r12, [r1], #1
+- subs r2, r2, #1
+- strb r12, [r0], #1
+- bne neon_f2b_copy_1_a_loop
+- b neon_f2b_finish
+-
+- /* #############################################################
+- * Front to Back copy - unaligned
+- */
+-neon_f2b_nonaligned:
+- /*
+- * For sizes < 8, does it really make sense to do the whole shift
+- * party? Note that we DON'T want to call neon_f2b_copy_1_u,
+- * since we'll end up trying to pop r8-r11, and we DON'T want
+- * to do that...
+- */
+- cmp r2, #8
+- ble neon_f2b_copy_1_a
+-
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- stmdb sp!, {r7-r9}
+-#else
+- push {r7-r9}
+-#endif
+- cmp r12, #2
+- ldrb r4, [r1], #1
+- ldrleb r5, [r1], #1
+- ldrltb r6, [r1], #1
+- rsb r8, r12, #4
+- sub r2, r2, r8
+- lsl r8, r8, #3
+- orrle r4, r4, r5, lsl #8
+- orrlt r4, r4, r6, lsl #16
+- rsb r9, r8, #32
+- /*
+- * r4 = overflow bits
+- * r8 = # of bits we copied into the r4 register to align source.
+- * r9 = 32 - r8
+- * r12 = Index counter for each size, so we determine how many times
+- * the given size will go into r2, then count down that # of
+- * times in r12.
+- */
+- cmp r2, #64
+- blt neon_f2b_unaligned_route
+- ands r12, r0, #0xf
+- beq neon_f2b_unaligned_route
+- cmp r3, #4
+- blt neon_f2b_unaligned_route
+- rsb r12, r12, #16
+-neon_f2b_16_start_u:
+- sub r2, r2, r12
+- lsrs r6, r12, #2
+-neon_f2b_align_16_4_u:
+- ldr r5, [r1], #4
+- subs r6, r6, #1
+- orr r4, r4, r5, lsl r8
+- str r4, [r0], #4
+- mov r4, r5, lsr r9
+- bne neon_f2b_align_16_4_u
+-neon_f2b_unaligned_route:
+- cmp r2, r3
+- movle r12, r2
+- movgt r12, r3
+- cmp r12, #256
+- bge neon_f2b_copy_64_u
+- cmp r12, #64
+- bge neon_f2b_copy_32_u
+- cmp r12, #16
+- bge neon_f2b_copy_16_u
+- cmp r12, #8
+- bge neon_f2b_copy_8_u
+- cmp r12, #4
+- bge neon_f2b_copy_4_u
+- b neon_f2b_last_bits_u
+-neon_f2b_copy_64_u:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vstmdb sp!, {q4}
+- vstmdb sp!, {q5-q8}
+-#else
+- vpush {q4}
+- vpush {q5-q8}
+-#endif
+- vdup.u32 q8, r8
+- mov r12, r2, lsr #6
+- and r2, r2, #0x3f
+-neon_f2b_copy_64_u_loop:
+- vld1.32 {q4, q5}, [r1]!
+- vld1.32 {q6, q7}, [r1]!
+- lsls r5, r8, #28
+- bcc neon_f2b_copy_64_u_b8
+- bpl neon_f2b_copy_64_u_b16
+- vshr.u64 q0, q4, #40
+- vshr.u64 q1, q5, #40
+- vshr.u64 q2, q6, #40
+- vshr.u64 q3, q7, #40
+- b neon_f2b_copy_64_unify
+-neon_f2b_copy_64_u_b8:
+- vshr.u64 q0, q4, #56
+- vshr.u64 q1, q5, #56
+- vshr.u64 q2, q6, #56
+- vshr.u64 q3, q7, #56
+- b neon_f2b_copy_64_unify
+-neon_f2b_copy_64_u_b16:
+- vshr.u64 q0, q4, #48
+- vshr.u64 q1, q5, #48
+- vshr.u64 q2, q6, #48
+- vshr.u64 q3, q7, #48
+-neon_f2b_copy_64_unify:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vshl.u64 q4, q8, q4
+- vshl.u64 q5, q8, q5
+- vshl.u64 q6, q8, q6
+- vshl.u64 q7, q8, q7
+-#else
+- vshl.u64 q4, q4, q8
+- vshl.u64 q5, q5, q8
+- vshl.u64 q6, q6, q8
+- vshl.u64 q7, q7, q8
+-#endif
+- vmov r5, s14
+- vorr d9, d9, d0
+- vmov s14, r4
+- vorr d10, d10, d1
+- vorr d11, d11, d2
+- vorr d12, d12, d3
+- vorr d13, d13, d4
+- vorr d14, d14, d5
+- vorr d15, d15, d6
+- vorr d8, d8, d7
+- subs r12, r12, #1
+- pld [r1, #0]
+- pld [r1, #128]
+- mov r4, r5
+- vst1.32 {q4, q5}, [r0]!
+- vst1.32 {q6, q7}, [r0]!
+- pld [r0, #0]
+- pld [r0, #128]
+- bne neon_f2b_copy_64_u_loop
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vldmia sp!, {q5-q8}
+- vldmia sp!, {q4}
+-#else
+- vpop {q5-q8}
+- vpop {q4}
+-#endif
+- cmp r2, #32
+- bge neon_f2b_copy_32_u
+- b neon_f2b_copy_finish_u
+-neon_f2b_copy_32_u:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vstmdb sp!, {q4}
+-#else
+- vpush {q4}
+-#endif
+- vdup.u32 q4, r8
+- mov r12, r2, lsr #5
+- and r2, r2, #0x1f
+-neon_f2b_copy_32_u_loop:
+- vld1.32 {q0, q1}, [r1]!
+- lsls r5, r8, #28
+- bcc neon_f2b_copy_32_u_b8
+- bpl neon_f2b_copy_32_u_b16
+- vshr.u64 q2, q0, #40
+- vshr.u64 q3, q1, #40
+- b neon_f2b_copy_32_unify
+-neon_f2b_copy_32_u_b8:
+- vshr.u64 q2, q0, #56
+- vshr.u64 q3, q1, #56
+- b neon_f2b_copy_32_unify
+-neon_f2b_copy_32_u_b16:
+- vshr.u64 q2, q0, #48
+- vshr.u64 q3, q1, #48
+-neon_f2b_copy_32_unify:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vshl.u64 q0, q4, q0
+- vshl.u64 q1, q4, q1
+-#else
+- vshl.u64 q0, q0, q4
+- vshl.u64 q1, q1, q4
+-#endif
+- vmov r5, s14
+- vorr d1, d1, d4
+- vmov s14, r4
+- vorr d2, d2, d5
+- vorr d3, d3, d6
+- vorr d0, d0, d7
+- subs r12, r12, #1
+- pld [r1, #0]
+- mov r4, r5
+- vst1.32 {q0, q1}, [r0]!
+- bne neon_f2b_copy_32_u_loop
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vldmia sp!, {q4}
+-#else
+- vpop {q4}
+-#endif
+-neon_f2b_copy_finish_u:
+-neon_f2b_copy_16_u:
+- movs r12, r2, lsr #4
+- beq neon_f2b_copy_8_u
+- vdup.u32 q2, r8
+- and r2, r2, #0xf
+-neon_f2b_copy_16_u_loop:
+- vld1.32 {q0}, [r1]!
+- lsls r5, r8, #28
+- bcc neon_f2b_copy_16_u_b8
+- bpl neon_f2b_copy_16_u_b16
+- vshr.u64 q1, q0, #40
+- b neon_f2b_copy_16_unify
+-neon_f2b_copy_16_u_b8:
+- vshr.u64 q1, q0, #56
+- b neon_f2b_copy_16_unify
+-neon_f2b_copy_16_u_b16:
+- vshr.u64 q1, q0, #48
+-neon_f2b_copy_16_unify:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vshl.u64 q0, q2, q0
+-#else
+- vshl.u64 q0, q0, q2
+-#endif
+- vmov r5, s6
+- vorr d1, d1, d2
+- vmov s6, r4
+- vorr d0, d0, d3
+- subs r12, r12, #1
+- mov r4, r5
+- vst1.32 {q0}, [r0]!
+- bne neon_f2b_copy_16_u_loop
+-neon_f2b_copy_8_u:
+- cmp r2, #8
+- blt neon_f2b_copy_4_u
+- ldm r1!, {r6-r7}
+- subs r2, r2, #8
+- orr r4, r4, r6, lsl r8
+- mov r5, r6, lsr r9
+- orr r5, r5, r7, lsl r8
+- stm r0!, {r4-r5}
+- mov r4, r7, lsr r9
+-neon_f2b_copy_4_u:
+- cmp r2, #4
+- blt neon_f2b_last_bits_u
+- ldr r5, [r1], #4
+- subs r2, r2, #4
+- orr r4, r4, r5, lsl r8
+- str r4, [r0], #4
+- mov r4, r5, lsr r9
+-neon_f2b_last_bits_u:
+- lsr r8, r8, #0x3
+-neon_f2b_last_bits_u_loop:
+- strb r4, [r0], #1
+- subs r8, r8, #1
+- lsr r4, r4, #8
+- bne neon_f2b_last_bits_u_loop
+-neon_f2b_copy_1_u:
+- cmp r2, #0
+- beq neon_f2b_finish_u
+-neon_f2b_copy_1_u_loop:
+- ldrb r12, [r1], #1
+- subs r2, r2, #1
+- strb r12, [r0], #1
+- bne neon_f2b_copy_1_u_loop
+-neon_f2b_finish_u:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- ldmia sp!, {r7-r9}
+-#else
+- pop {r7-r9}
+-#endif
+- /* #############################################################
+- * Front to Back copy - finish
+- */
+-neon_f2b_finish:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- ldmia sp!, {r4-r6}
+-#else
+- pop {r4-r6}
+-#endif
+- b neon_memmove_done
+-
+- /* #############################################################
+- * Back to Front copy
+- */
+-neon_back_to_front_copy:
+- /*
+- * Here, we'll want to shift to the end of the buffers. This
+- * actually points us one past where we need to go, but since
+- * we'll pre-decrement throughout, this will be fine.
+- */
+- add r0, r0, r2
+- add r1, r1, r2
+- cmp r2, #4
+- bgt neon_b2f_gt4
+- cmp r2, #0
+-neon_b2f_smallcopy_loop:
+- beq neon_memmove_done
+- ldrb r12, [r1, #-1]!
+- subs r2, r2, #1
+- strb r12, [r0, #-1]!
+- b neon_b2f_smallcopy_loop
+-neon_b2f_gt4:
+- pld [r0, #0]
+- pld [r1, #0]
+- /*
+- * The minimum of the overlap window size and the copy size
+- * is in r3.
+- */
+- sub r3, r0, r1
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- stmdb sp!, {r4-r5}
+-#else
+- push {r4-r5}
+-#endif
+-
+- /*
+- * Check alignment. Since we'll pre-decrement as we step thru, we'll
+- * need to make sure we're on word-alignment.
+- */
+-neon_b2f_check_align:
+- ands r12, r0, #0x3
+- beq neon_b2f_source_align_check
+- sub r2, r2, r12
+-neon_b2f_shift_align:
+- ldrb r4, [r1, #-1]!
+- subs r12, r12, #1
+- strb r4, [r0, #-1]!
+- bne neon_b2f_shift_align
+-neon_b2f_source_align_check:
+- ands r4, r1, #0x3
+- bne neon_b2f_nonaligned
+-
+-neon_b2f_try_16_align:
+- /* If we're >64, attempt to align on 16-bytes. Smaller amounts
+- * don't seem to be worth handling. */
+- cmp r2, #64
+- blt neon_b2f_align_route
+- ands r12, r0, #0xf
+- beq neon_b2f_align_route
+- /* In this case, r12 has the number of bytes to roll backward. */
+-neon_b2f_16_start:
+- sub r2, r2, r12
+- lsrs r5, r12, #2
+-neon_b2f_align_16_4:
+- ldr r4, [r1, #-4]!
+- subs r5, r5, #1
+- str r4, [r0, #-4]!
+- bne neon_b2f_align_16_4
+-neon_b2f_align_route:
+- /*
+- * #############################################################
+- * Back to Front copy - aligned
+- */
+- cmp r2, r3
+- movle r12, r2
+- movgt r12, r3
+- cmp r12, #256
+- bge neon_b2f_copy_128_a
+- cmp r12, #64
+- bge neon_b2f_copy_32_a
+- cmp r12, #8
+- bge neon_b2f_copy_8_a
+- cmp r12, #4
+- bge neon_b2f_copy_4_a
+- b neon_b2f_copy_1_a
+-neon_b2f_copy_128_a:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vstmdb sp!, {q4-q7}
+-#else
+- vpush {q4-q7}
+-#endif
+- movs r12, r2, lsr #7
+- /*
+- * This irks me. There MUST be a better way to read these in and
+- * scan the register backward instead of making it go forward. Then
+- * we need to do two subtractions...
+- */
+-neon_b2f_copy_128_a_loop:
+- sub r1, r1, #128
+- sub r0, r0, #128
+- vld1.32 {q0, q1}, [r1]!
+- vld1.32 {q2, q3}, [r1]!
+- vld1.32 {q4, q5}, [r1]!
+- vld1.32 {q6, q7}, [r1]!
+- pld [r1, #-128]
+- pld [r1, #-256]
+- vst1.32 {q0, q1}, [r0]!
+- vst1.32 {q2, q3}, [r0]!
+- vst1.32 {q4, q5}, [r0]!
+- vst1.32 {q6, q7}, [r0]!
+- subs r12, r12, #1
+- pld [r0, #-128]
+- pld [r0, #-256]
+- sub r1, r1, #128
+- sub r0, r0, #128
+- bne neon_b2f_copy_128_a_loop
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vldmia sp!, {q4-q7}
+-#else
+- vpop {q4-q7}
+-#endif
+- ands r2, r2, #0x7f
+- beq neon_b2f_finish
+- cmp r2, #32
+- bge neon_b2f_copy_32_a
+- b neon_b2f_copy_finish_a
+-neon_b2f_copy_32_a:
+- mov r12, r2, lsr #5
+-neon_b2f_copy_32_a_loop:
+- sub r1, r1, #32
+- sub r0, r0, #32
+- vld1.32 {q0,q1}, [r1]
+- subs r12, r12, #1
+- vst1.32 {q0,q1}, [r0]
+- pld [r1, #0]
+- bne neon_b2f_copy_32_a_loop
+- ands r2, r2, #0x1f
+- beq neon_b2f_finish
+-neon_b2f_copy_finish_a:
+-neon_b2f_copy_8_a:
+- movs r12, r2, lsr #0x3
+- beq neon_b2f_copy_4_a
+-neon_b2f_copy_8_a_loop:
+- ldmdb r1!, {r4-r5}
+- subs r12, r12, #1
+- stmdb r0!, {r4-r5}
+- bne neon_b2f_copy_8_a_loop
+- and r2, r2, #0x7
+-neon_b2f_copy_4_a:
+- movs r12, r2, lsr #0x2
+- beq neon_b2f_copy_1_a
+- and r2, r2, #0x3
+-neon_b2f_copy_4_a_loop:
+- ldr r4, [r1, #-4]!
+- subs r12, r12, #1
+- str r4, [r0, #-4]!
+- bne neon_b2f_copy_4_a_loop
+-neon_b2f_copy_1_a:
+- cmp r2, #0
+- beq neon_b2f_finish
+-neon_b2f_copy_1_a_loop:
+- ldrb r12, [r1, #-1]!
+- subs r2, r2, #1
+- strb r12, [r0, #-1]!
+- bne neon_b2f_copy_1_a_loop
+-
+- /* #############################################################
+- * Back to Front copy - unaligned
+- */
+-neon_b2f_nonaligned:
+- /*
+- * For sizes < 8, does it really make sense to do the whole shift
+- * party?
+- */
+- cmp r2, #8
+- ble neon_b2f_copy_1_a
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- stmdb sp!, {r6-r11}
+-#else
+- push {r6-r11}
+-#endif
+- /*
+- * r3 = max window size
+- * r4 = overflow bytes
+- * r5 = bytes we're reading into
+- * r6 = # bytes we're off.
+- * r10 = copy of r6
+- */
+- and r6, r1, #0x3
+- eor r4, r4, r4
+- mov r10, r6
+-neon_b2f_realign:
+- ldrb r5, [r1, #-1]!
+- subs r6, r6, #1
+- orr r4, r5, r4, lsl #8
+- bne neon_b2f_realign
+- /*
+- * r10 = # of bits we copied into the r4 register to align source.
+- * r11 = 32 - r10
+- * r12 = Index counter for each size, so we determine how many times
+- * the given size will go into r2, then count down that # of
+- * times in r12.
+- */
+- sub r2, r2, r10
+- lsl r10, r10, #0x3
+- rsb r11, r10, #32
+-
+- cmp r2, r3
+- movle r12, r2
+- movgt r12, r3
+- cmp r12, #256
+- bge neon_b2f_copy_64_u
+- cmp r12, #64
+- bge neon_b2f_copy_32_u
+- cmp r12, #8
+- bge neon_b2f_copy_8_u
+- cmp r12, #4
+- bge neon_b2f_copy_4_u
+- b neon_b2f_last_bits_u
+-neon_b2f_copy_64_u:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vstmdb sp!, {q4,q5}
+- vstmdb sp!, {q6-q8}
+-#else
+- vpush {q4,q5}
+- vpush {q6-q8}
+-#endif
+- add r7, r11, #32
+- movs r12, r2, lsr #6
+- vdup.u32 q8, r7
+-neon_b2f_copy_64_u_loop:
+- sub r1, r1, #64
+- sub r0, r0, #64
+- vld1.32 {q0, q1}, [r1]!
+- vld1.32 {q2, q3}, [r1]
+- sub r1, r1, #32
+- vmov q4, q0
+- vmov q5, q1
+- vmov q6, q2
+- vmov q7, q3
+- vmov r5, s0
+- mov r4, r4, lsl r11
+- lsls r6, r10, #28
+- bcc neon_b2f_copy_64_u_b8
+- bpl neon_b2f_copy_64_u_b16
+- vshr.u64 q0, q0, #24
+- vshr.u64 q1, q1, #24
+- vshr.u64 q2, q2, #24
+- vshr.u64 q3, q3, #24
+- b neon_b2f_copy_64_unify
+-neon_b2f_copy_64_u_b8:
+- vshr.u64 q0, q0, #8
+- vshr.u64 q1, q1, #8
+- vshr.u64 q2, q2, #8
+- vshr.u64 q3, q3, #8
+- b neon_b2f_copy_64_unify
+-neon_b2f_copy_64_u_b16:
+- vshr.u64 q0, q0, #16
+- vshr.u64 q1, q1, #16
+- vshr.u64 q2, q2, #16
+- vshr.u64 q3, q3, #16
+-neon_b2f_copy_64_unify:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vshl.u64 q4, q8, q4
+- vshl.u64 q5, q8, q5
+- vshl.u64 q6, q8, q6
+- vshl.u64 q7, q8, q7
+-#else
+- vshl.u64 q4, q4, q8
+- vshl.u64 q5, q5, q8
+- vshl.u64 q6, q6, q8
+- vshl.u64 q7, q7, q8
+-#endif
+- vmov s17, r4
+- vorr d7, d7, d8
+- vorr d6, d6, d15
+- vorr d5, d5, d14
+- vorr d4, d4, d13
+- vorr d3, d3, d12
+- vorr d2, d2, d11
+- vorr d1, d1, d10
+- vorr d0, d0, d9
+- mov r4, r5, lsl r11
+- subs r12, r12, #1
+- lsr r4, r4, r11
+- vst1.32 {q0, q1}, [r0]!
+- vst1.32 {q2, q3}, [r0]
+- pld [r1, #0]
+- sub r0, r0, #32
+- bne neon_b2f_copy_64_u_loop
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vldmia sp!, {q6-q8}
+- vldmia sp!, {q4,q5}
+-#else
+- vpop {q6-q8}
+- vpop {q4,q5}
+-#endif
+- ands r2, r2, #0x3f
+- cmp r2, #32
+- bge neon_b2f_copy_32_u
+- b neon_b2f_copy_finish_u
+-neon_b2f_copy_32_u:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vstmdb sp!, {q4}
+-#else
+- vpush {q4}
+-#endif
+- add r7, r11, #32
+- movs r12, r2, lsr #5
+- vdup.u32 q4, r7
+- and r2, r2, #0x1f
+-neon_b2f_copy_32_u_loop:
+- sub r1, r1, #32
+- sub r0, r0, #32
+- vld1.32 {q0, q1}, [r1]
+- vmov q2, q0
+- vmov q3, q1
+- vmov r5, s0
+- mov r4, r4, lsl r11
+- lsls r6, r10, #28
+- bcc neon_b2f_copy_32_u_b8
+- bpl neon_b2f_copy_32_u_b16
+- vshr.u64 q0, q0, #24
+- vshr.u64 q1, q1, #24
+- b neon_b2f_copy_32_unify
+-neon_b2f_copy_32_u_b8:
+- vshr.u64 q0, q0, #8
+- vshr.u64 q1, q1, #8
+- b neon_b2f_copy_32_unify
+-neon_b2f_copy_32_u_b16:
+- vshr.u64 q0, q0, #16
+- vshr.u64 q1, q1, #16
+-neon_b2f_copy_32_unify:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vshl.u64 q2, q4, q2
+- vshl.u64 q3, q4, q3
+-#else
+- vshl.u64 q2, q2, q4
+- vshl.u64 q3, q3, q4
+-#endif
+- vmov s9, r4
+- vorr d3, d3, d4
+- vorr d2, d2, d7
+- vorr d1, d1, d6
+- vorr d0, d0, d5
+- mov r4, r5, lsl r11
+- subs r12, r12, #1
+- lsr r4, r4, r11
+- vst1.32 {q0, q1}, [r0]
+- pld [r1, #0]
+- bne neon_b2f_copy_32_u_loop
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- vldmia sp!, {q4}
+-#else
+- vpop {q4}
+-#endif
+-neon_b2f_copy_finish_u:
+-neon_b2f_copy_8_u:
+- movs r12, r2, lsr #0x3
+- beq neon_b2f_copy_4_u
+- mov r5, r4, lsl r11
+-neon_b2f_copy_8_u_loop:
+- ldmdb r1!, {r6-r7}
+- subs r12, r12, #1
+- orr r5, r5, r7, lsr r10
+- mov r4, r7, lsl r11
+- orr r4, r4, r6, lsr r10
+- stmdb r0!, {r4-r5}
+- mov r4, r6, lsl r11
+- lsr r4, r4, r11
+- mov r5, r4, lsl r11
+- bne neon_b2f_copy_8_u_loop
+- ands r2, r2, #0x7
+-neon_b2f_copy_4_u:
+- movs r12, r2, lsr #0x2
+- beq neon_b2f_last_bits_u
+- mov r5, r4, lsl r11
+-neon_b2f_copy_4_u_loop:
+- ldr r6, [r1, #-4]!
+- subs r12, r12, #1
+- orr r5, r5, r6, lsr r10
+- str r5, [r0, #-4]!
+- mov r4, r6, lsl r11
+- lsr r4, r4, r11
+- mov r5, r4, lsl r11
+- bne neon_b2f_copy_4_u_loop
+- and r2, r2, #0x3
+-neon_b2f_last_bits_u:
+-neon_b2f_last_bits_u_loop:
+- subs r10, r10, #8
+- mov r5, r4, lsr r10
+- strb r5, [r0, #-1]!
+- bne neon_b2f_last_bits_u_loop
+-neon_b2f_copy_1_u:
+- cmp r2, #0
+- beq neon_b2f_finish_u
+-neon_b2f_copy_1_u_loop:
+- ldrb r12, [r1, #-1]!
+- subs r2, r2, #1
+- strb r12, [r0, #-1]!
+- bne neon_b2f_copy_1_u_loop
+-neon_b2f_finish_u:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- ldmia sp!, {r6-r11}
+-#else
+- pop {r6-r11}
+-#endif
+-
+-neon_b2f_finish:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- ldmia sp!, {r4-r5}
+-#else
+- pop {r4-r5}
+-#endif
+-
+-neon_memmove_done:
+-#if defined __GNUC__ && (4 == __GNUC__ && 1 == __GNUC_MINOR__ && 1 == __GNUC_PATCHLEVEL__)
+- ldmia sp!, {r0}
+-#else
+- pop {r0}
+-#endif
+- bx lr
+-
+- .endfunc
+- .end
+diff --git git/src/neon_memsets.c git/src/neon_memsets.c
+deleted file mode 100755
+index 740fc1e..0000000
+--- git/src/neon_memsets.c
++++ /dev/null
+@@ -1,169 +0,0 @@
+-/* neon_memsets.c
+- *
+- * Copyright (c) 2009, Code Aurora Forum. All rights reserved.
+- *
+- * Redistribution and use in source and binary forms, with or without
+- * modification, are permitted provided that the following conditions are met:
+- * * Redistributions of source code must retain the above copyright
+- * notice, this list of conditions and the following disclaimer.
+- * * Redistributions in binary form must reproduce the above copyright
+- * notice, this list of conditions and the following disclaimer in the
+- * documentation and/or other materials provided with the distribution.
+- * * Neither the name of Code Aurora nor
+- * the names of its contributors may be used to endorse or promote
+- * products derived from this software without specific prior written
+- * permission.
+- *
+- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+- * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+- */
+-
+-#include "msm-swblits.h"
+-
+-void memset16(uint16_t dst[], uint16_t value, int count)
+-{
+- if (count <= 0)
+- return;
+-
+- asm volatile(
+- " pld [%[dst], #0] \n"
+- " cmp %[count], #4 \n"
+- " blt 6f \n"
+- " tst %[dst], #0x3 \n"
+- " strneh %[value], [%[dst]], #2 \n"
+- " subne %[count], %[count], #1 \n"
+- " vdup.u16 q8, %[value] \n"
+- " vmov q9, q8 \n"
+- " cmp %[count], #64 \n"
+- " bge 0f \n"
+- " cmp %[count], #32 \n"
+- " bge 2f \n"
+- " cmp %[count], #16 \n"
+- " bge 3f \n"
+- " cmp %[count], #8 \n"
+- " bge 4f \n"
+- " b 5f \n"
+- "0: \n"
+- " mov r12, %[count], lsr #6 \n"
+- "1: \n"
+- " vst1.16 {q8, q9}, [%[dst]]! \n"
+- " vst1.16 {q8, q9}, [%[dst]]! \n"
+- " vst1.16 {q8, q9}, [%[dst]]! \n"
+- " vst1.16 {q8, q9}, [%[dst]]! \n"
+- " subs r12, r12, #1 \n"
+- " bne 1b \n"
+- " ands %[count], %[count], #0x3f \n"
+- " beq 7f \n"
+- "2: \n"
+- " cmp %[count], #32 \n"
+- " blt 3f \n"
+- " vst1.16 {q8, q9}, [%[dst]]! \n"
+- " vst1.16 {q8, q9}, [%[dst]]! \n"
+- " subs %[count], %[count], #32 \n"
+- " beq 7f \n"
+- "3: \n"
+- " cmp %[count], #16 \n"
+- " blt 4f \n"
+- " vst1.16 {q8, q9}, [%[dst]]! \n"
+- " subs %[count], %[count], #16 \n"
+- " beq 7f \n"
+- "4: \n"
+- " cmp %[count], #8 \n"
+- " blt 5f \n"
+- " vst1.16 {q8}, [%[dst]]! \n"
+- " subs %[count], %[count], #8 \n"
+- " beq 7f \n"
+- "5: \n"
+- " cmp %[count], #4 \n"
+- " blt 6f \n"
+- " vst1.16 {d16}, [%[dst]]! \n"
+- " subs %[count], %[count], #4 \n"
+- " beq 7f \n"
+- "6: \n"
+- " cmp %[count], #0 \n"
+- " blt 7f \n"
+- " lsls %[count], #31 \n"
+- " strmih %[value], [%[dst]], #2 \n"
+- " strcsh %[value], [%[dst]], #2 \n"
+- " strcsh %[value], [%[dst]], #2 \n"
+- "7: \n"
+- // Clobbered input registers
+- : [dst] "+r" (dst), [count] "+r" (count)
+- // Unclobbered input
+- : [value] "r" (value)
+- // Clobbered registers
+- : "q8", "q9", "r12", "cc", "memory"
+- );
+-}
+-
+-void memset32(uint32_t dst[], uint32_t value, int count)
+-{
+- asm volatile(
+- " pld [%[dst], #0] \n"
+- " cmp %[count], #4 \n"
+- " blt 5f \n"
+- " vdup.u32 q8, %[value] \n"
+- " vmov q9, q8 \n"
+- " cmp %[count], #32 \n"
+- " bge 0f \n"
+- " cmp %[count], #16 \n"
+- " bge 2f \n"
+- " cmp %[count], #8 \n"
+- " bge 3f \n"
+- " b 4f \n"
+- "0: \n"
+- " mov r12, %[count], lsr #5 \n"
+- "1: \n"
+- " vst1.32 {q8, q9}, [%[dst]]! \n"
+- " vst1.32 {q8, q9}, [%[dst]]! \n"
+- " vst1.32 {q8, q9}, [%[dst]]! \n"
+- " vst1.32 {q8, q9}, [%[dst]]! \n"
+- " pld [%[dst], #0] \n"
+- " subs r12, r12, #1 \n"
+- " bne 1b \n"
+- " ands %[count], %[count], #0x1f \n"
+- " beq 6f \n"
+- "2: \n"
+- " cmp %[count], #16 \n"
+- " blt 3f \n"
+- " vst1.32 {q8, q9}, [%[dst]]! \n"
+- " vst1.32 {q8, q9}, [%[dst]]! \n"
+- " subs %[count], %[count], #16 \n"
+- " beq 6f \n"
+- "3: \n"
+- " cmp %[count], #8 \n"
+- " blt 4f \n"
+- " vst1.32 {q8, q9}, [%[dst]]! \n"
+- " subs %[count], %[count], #8 \n"
+- " beq 6f \n"
+- "4: \n"
+- " cmp %[count], #4 \n"
+- " blt 5f \n"
+- " vst1.32 {q8}, [%[dst]]! \n"
+- " subs %[count], %[count], #4 \n"
+- " beq 6f \n"
+- "5: \n"
+- " cmp %[count], #0 \n"
+- " beq 6f \n"
+- " lsls %[count], #31 \n"
+- " strmi %[value], [%[dst]], #4 \n"
+- " strcs %[value], [%[dst]], #4 \n"
+- " strcs %[value], [%[dst]], #4 \n"
+- "6: @end \n"
+- // Clobbered input registers
+- : [dst] "+r" (dst), [count] "+r" (count)
+- // Unclobbered input
+- : [value] "r" (value)
+- // Clobbered registers
+- : "q8", "q9", "r12", "cc", "memory"
+- );
+-}
diff --git a/recipes/xorg-driver/xf86-video-msm/no_neon_flags.patch b/recipes/xorg-driver/xf86-video-msm/no_neon_flags.patch
new file mode 100644
index 0000000000..97ad380e27
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-msm/no_neon_flags.patch
@@ -0,0 +1,36 @@
+commit 18515a56822fcd9c0a71240edce97ea5623b0448
+Author: David Lanzendörfer <david.lanzendoerfer@o2s.ch>
+Date: Wed Feb 10 16:29:55 2010 +0100
+
+ Modify Makefile.am
+ Removed depencies for neon
+
+diff --git git/src/Makefile.am git/src/Makefile.am
+index 8ab1856..08da5a5 100755
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -12,13 +12,7 @@ MSM_DRI_SRCS += msm-drm.c msm-dri2.c
+ msm_drv_la_LIBADD += $(DRI2_LIBS)
+ endif
+
+-NEON_CFLAGS=-march=armv7-a -mfpu=neon -mfloat-abi=softfp
+-NEON_CCASFLAGS=$(NEON_CFLAGS) -mthumb-interwork
+-NEON_ASFLAGS=-k -mcpu=cortex-a8 $(NEON_CCASFLAGS)
+-
+-AM_CFLAGS = @XORG_CFLAGS@ @DRI_CFLAGS@ @DRI2_CFLAGS@ $(NEON_CFLAGS) -Wall -Werror
+-AM_ASFLAGS = $(NEON_ASFLAGS)
+-AM_CCASFLAGS = $(NEON_CCASFLAGS)
++AM_CFLAGS = @XORG_CFLAGS@ @DRI_CFLAGS@ @DRI2_CFLAGS@ -Wall -Werror
+
+ msm_drv_la_LTLIBRARIES = msm_drv.la
+ msm_drv_la_LDFLAGS = -module -avoid-version
+@@ -37,9 +31,6 @@ msm_drv_la_SOURCES = \
+ msm-swfill.c \
+ msm-hwrender.c \
+ msm-pixmap.c \
+- neon_memsets.c \
+- neon_memcpy.S \
+- neon_memmove.S \
+ $(MSM_DRI_SRCS)
+
+
diff --git a/recipes/xorg-driver/xf86-video-msm/renaming_variables.patch b/recipes/xorg-driver/xf86-video-msm/renaming_variables.patch
new file mode 100644
index 0000000000..90dd31f605
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-msm/renaming_variables.patch
@@ -0,0 +1,116 @@
+commit cc83ba5835d5b55347fd0c0775156493b0cf3a15
+Author: David Lanzendörfer <david.lanzendoerfer@o2s.ch>
+Date: Thu Feb 11 16:26:52 2010 +0100
+
+ Renaming variables for getting Xorg (xf86-video-msm) work
+ under linux-leviathan (htcdream):
+ cd src
+ sed 's/fixed_info/fix/' -i *.h
+ sed 's/fixed_info/fix/' -i *.c
+
+diff --git git/src/msm-dri.c git/src/msm-dri.c
+index a51d3bd..a74368b 100644
+--- git/src/msm-dri.c
++++ git/src/msm-dri.c
+@@ -151,10 +151,10 @@ MSMDRIScreenInit(ScreenPtr pScreen)
+ pDRIInfo->ddxDriverMinorVersion = 0;
+ pDRIInfo->ddxDriverPatchVersion = 0;
+
+- pDRIInfo->frameBufferPhysicalAddress = (void *)pMsm->fixed_info.smem_start;
++ pDRIInfo->frameBufferPhysicalAddress = (void *)pMsm->fix.smem_start;
+
+- pDRIInfo->frameBufferSize = pMsm->fixed_info.smem_len;
+- pDRIInfo->frameBufferStride = pMsm->fixed_info.line_length;
++ pDRIInfo->frameBufferSize = pMsm->fix.smem_len;
++ pDRIInfo->frameBufferStride = pMsm->fix.line_length;
+
+ /* FIXME: How many drawables can we do (should we do)? */
+
+diff --git git/src/msm-driver.c git/src/msm-driver.c
+index 803197f..15378f8 100755
+--- git/src/msm-driver.c
++++ git/src/msm-driver.c
+@@ -399,7 +399,7 @@ MSMPreInit(ScrnInfoPtr pScrn, int flags)
+
+ /* Get the fixed info (par) structure */
+
+- if (ioctl(pMsm->fd, FBIOGET_FSCREENINFO, &pMsm->fixed_info)) {
++ if (ioctl(pMsm->fd, FBIOGET_FSCREENINFO, &pMsm->fix)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "Unable to read hardware info from %s: %s\n",
+ dev, strerror(errno));
+@@ -410,7 +410,7 @@ MSMPreInit(ScrnInfoPtr pScrn, int flags)
+ /* Parse the ID and figure out what version of the MDP and what
+ * panel ID we have */
+
+- if (sscanf(pMsm->fixed_info.id, "msmfb%d_%x", &mdpver, &panelid) < 2) {
++ if (sscanf(pMsm->fix.id, "msmfb%d_%x", &mdpver, &panelid) < 2) {
+
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "Unable to determine the MDP and panel type\n");
+@@ -435,7 +435,7 @@ MSMPreInit(ScrnInfoPtr pScrn, int flags)
+ * the fbdev driver to allocate memory. In the mean time, we
+ * just reuse the framebuffer memory */
+
+- pScrn->videoRam = pMsm->fixed_info.smem_len;
++ pScrn->videoRam = pMsm->fix.smem_len;
+
+ /* Get the current screen setting */
+ if (ioctl(pMsm->fd, FBIOGET_VSCREENINFO, &pMsm->mode_info)) {
+@@ -671,8 +671,8 @@ MSMPreInit(ScrnInfoPtr pScrn, int flags)
+ /* The framebuffer driver should always report the line length,
+ * but in case it doesn't, we can calculate it ourselves */
+
+- if (pMsm->fixed_info.line_length) {
+- pScrn->displayWidth = pMsm->fixed_info.line_length;
++ if (pMsm->fix.line_length) {
++ pScrn->displayWidth = pMsm->fix.line_length;
+ } else {
+ pScrn->displayWidth = pMsm->mode_info.xres_virtual *
+ pMsm->mode_info.bits_per_pixel / 8;
+@@ -811,7 +811,7 @@ MSMCloseScreen(int scrnIndex, ScreenPtr pScreen)
+ #endif
+
+ /* Unmap the framebuffer memory */
+- munmap(pMsm->fbmem, pMsm->fixed_info.smem_len);
++ munmap(pMsm->fbmem, pMsm->fix.smem_len);
+
+ pScreen->CloseScreen = pMsm->CloseScreen;
+
+@@ -857,7 +857,7 @@ MSMScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+ #endif // defined (MSMFB_GET_PAGE_PROTECTION) && defined (MSMFB_SET_PAGE_PROTECTION)
+
+ /* Map the framebuffer memory */
+- pMsm->fbmem = mmap(NULL, pMsm->fixed_info.smem_len,
++ pMsm->fbmem = mmap(NULL, pMsm->fix.smem_len,
+ PROT_READ | PROT_WRITE, MAP_SHARED, pMsm->fd, 0);
+
+ /* If we can't map the memory, then this is a short trip */
+diff --git git/src/msm-exa.c git/src/msm-exa.c
+index 301923f..ce16a93 100755
+--- git/src/msm-exa.c
++++ git/src/msm-exa.c
+@@ -740,8 +740,8 @@ MSMSetupExa(ScreenPtr pScreen)
+ pExa->flags = EXA_OFFSCREEN_PIXMAPS;
+
+ pExa->offScreenBase =
+- (pMsm->fixed_info.line_length * pMsm->mode_info.yres);
+- pExa->memorySize = pMsm->fixed_info.smem_len;
++ (pMsm->fix.line_length * pMsm->mode_info.yres);
++ pExa->memorySize = pMsm->fix.smem_len;
+
+ /* Align pixmap offsets along page boundaries */
+ pExa->pixmapOffsetAlign = 4096;
+diff --git git/src/msm.h git/src/msm.h
+index e1e2bc7..520d390 100755
+--- git/src/msm.h
++++ git/src/msm.h
+@@ -85,7 +85,7 @@ typedef struct _MSMRec
+ int fd;
+
+ /* Fixed and var strutures from the framebuffer */
+- struct fb_fix_screeninfo fixed_info;
++ struct fb_fix_screeninfo fix;
+ struct fb_var_screeninfo mode_info;
+
+ /* Pointer to the mapped framebuffer memory */
diff --git a/recipes/xorg-driver/xf86-video-msm_git.bb b/recipes/xorg-driver/xf86-video-msm_git.bb
index faccb87e35..4723b867f0 100644
--- a/recipes/xorg-driver/xf86-video-msm_git.bb
+++ b/recipes/xorg-driver/xf86-video-msm_git.bb
@@ -8,9 +8,15 @@ SRCREV = "5f7df59155ae301a3ebc40aec22ed16d203cb5fc"
PV = "1.1.0+${PR}+gitr${SRCREV}"
PE = "1"
-SRC_URI = "git://codeaurora.org/quic/xwin/xf86-video-msm.git;protocol=git\
- "
+SRC_URI = "git://codeaurora.org/quic/xwin/xf86-video-msm.git;protocol=git"
+SRC_URI_htcdream = "git://codeaurora.org/quic/xwin/xf86-video-msm.git;protocol=git \
+ file://no_neon.patch;patch=1 \
+ file://no_neon_flags.patch;patch=1 \
+ file://renaming_variables.patch;patch=1"
S = "${WORKDIR}/git"
CFLAGS += " -I${STAGING_INCDIR}/xorg "
+CFLAGS += " -Wno-error "
+
+ARM_INSTRUCTION_SET="arm"
diff --git a/recipes/xorg-driver/xf86-video-neomagic_1.1.1.bb b/recipes/xorg-driver/xf86-video-neomagic_1.1.1.bb
index b519e60e58..f8d5022ac8 100644
--- a/recipes/xorg-driver/xf86-video-neomagic_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-video-neomagic_1.1.1.bb
@@ -6,3 +6,5 @@ DESCRIPTION = "X11 driver for NeoMagic 2200, 2160, 2097, 2093, 2090, 2070"
DEPENDS += " xf86dgaproto"
+SRC_URI[archive.md5sum] = "7a3d3d6e60b9686d955c45d9ebbd5c1b"
+SRC_URI[archive.sha256sum] = "d6497080967b8285b663fedd7cafd4457578282ebd7da0b216b6fa214dd88a86"
diff --git a/recipes/xorg-driver/xf86-video-neomagic_1.2.1.bb b/recipes/xorg-driver/xf86-video-neomagic_1.2.1.bb
index b519e60e58..e97a9c0943 100644
--- a/recipes/xorg-driver/xf86-video-neomagic_1.2.1.bb
+++ b/recipes/xorg-driver/xf86-video-neomagic_1.2.1.bb
@@ -6,3 +6,5 @@ DESCRIPTION = "X11 driver for NeoMagic 2200, 2160, 2097, 2093, 2090, 2070"
DEPENDS += " xf86dgaproto"
+SRC_URI[archive.md5sum] = "a72f57fca4f4dff9a2c82eb1fe7456f4"
+SRC_URI[archive.sha256sum] = "96e38d5378596174f76c735c4723ff2ac336f9069644502a9b706586b845e0a5"
diff --git a/recipes/xorg-driver/xf86-video-neomagic_1.2.4.bb b/recipes/xorg-driver/xf86-video-neomagic_1.2.4.bb
index b519e60e58..bd6ac7025e 100644
--- a/recipes/xorg-driver/xf86-video-neomagic_1.2.4.bb
+++ b/recipes/xorg-driver/xf86-video-neomagic_1.2.4.bb
@@ -6,3 +6,5 @@ DESCRIPTION = "X11 driver for NeoMagic 2200, 2160, 2097, 2093, 2090, 2070"
DEPENDS += " xf86dgaproto"
+SRC_URI[archive.md5sum] = "2d722ee9b9fe8da49109f280689c9c25"
+SRC_URI[archive.sha256sum] = "434da2986d007243f4590a86d16a1632a9611b71de44d6e46f28bd3cdb898353"
diff --git a/recipes/xorg-driver/xf86-video-newport_0.2.1.bb b/recipes/xorg-driver/xf86-video-newport_0.2.1.bb
index b9f88fcc6f..361040dcbd 100644
--- a/recipes/xorg-driver/xf86-video-newport_0.2.1.bb
+++ b/recipes/xorg-driver/xf86-video-newport_0.2.1.bb
@@ -5,3 +5,5 @@ DESCRIPTION = "This is an unaccelerated driver for the SGI newport cards."
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "2bd8e5b9ea68e0dcd80dfcaca0eff82c"
+SRC_URI[archive.sha256sum] = "66ac855452690ef896400577806dc1dd86318940f8a62ce20039037318b1ce08"
diff --git a/recipes/xorg-driver/xf86-video-newport_0.2.3.bb b/recipes/xorg-driver/xf86-video-newport_0.2.3.bb
index b9f88fcc6f..6aa108161a 100644
--- a/recipes/xorg-driver/xf86-video-newport_0.2.3.bb
+++ b/recipes/xorg-driver/xf86-video-newport_0.2.3.bb
@@ -5,3 +5,5 @@ DESCRIPTION = "This is an unaccelerated driver for the SGI newport cards."
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "923baa1ee0429f03ed19ec0be6a4f62b"
+SRC_URI[archive.sha256sum] = "e6caeb4f95adfd9d2046d24f5f3688092ea4e3fb63aa3d0675f6c697c8cf0270"
diff --git a/recipes/xorg-driver/xf86-video-nsc_2.8.2.bb b/recipes/xorg-driver/xf86-video-nsc_2.8.2.bb
index d317223db3..5011204abe 100644
--- a/recipes/xorg-driver/xf86-video-nsc_2.8.2.bb
+++ b/recipes/xorg-driver/xf86-video-nsc_2.8.2.bb
@@ -6,3 +6,5 @@ DEPENDS += " xf86dgaproto"
# This driver is broken because it's seldom updated. It compiles
# but fails to communicate with the card without this deprecated define.
EXTRA_OEMAKE += "CFLAGS+=-DXFree86Server"
+SRC_URI[archive.md5sum] = "1fbdd5e9b5508b032c0102f72d1e555c"
+SRC_URI[archive.sha256sum] = "060493a9dcad81e8912381d2a8d14a3e32a34414296a089756868f3442103c8c"
diff --git a/recipes/xorg-driver/xf86-video-nsc_2.8.3.bb b/recipes/xorg-driver/xf86-video-nsc_2.8.3.bb
index 96486d2e72..01cde83df5 100644
--- a/recipes/xorg-driver/xf86-video-nsc_2.8.3.bb
+++ b/recipes/xorg-driver/xf86-video-nsc_2.8.3.bb
@@ -7,3 +7,5 @@ PE = "1"
# This driver is broken because it's seldom updated. It compiles
# but fails to communicate with the card without this deprecated define.
EXTRA_OEMAKE += "CFLAGS+=-DXFree86Server"
+SRC_URI[archive.md5sum] = "f3ffacdc9f19e00b66bdff71b6df9b4e"
+SRC_URI[archive.sha256sum] = "e5c5a2021877b8975bee39c06096316324e04f1eac5261bc882b96353a8b1839"
diff --git a/recipes/xorg-driver/xf86-video-nv_1.2.2.1.bb b/recipes/xorg-driver/xf86-video-nv_1.2.2.1.bb
index 843aa707b7..ab9e986bfa 100644
--- a/recipes/xorg-driver/xf86-video-nv_1.2.2.1.bb
+++ b/recipes/xorg-driver/xf86-video-nv_1.2.2.1.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "e4dc415b1e45db0bbdacc203ed33024a"
+SRC_URI[archive.sha256sum] = "97d47df7720d3cfcb56c4debca9218c3fc5352d34d82bc4880c8a620185f8c5e"
diff --git a/recipes/xorg-driver/xf86-video-nv_2.1.12.bb b/recipes/xorg-driver/xf86-video-nv_2.1.12.bb
index 0d4ee2ed19..cac04e6419 100644
--- a/recipes/xorg-driver/xf86-video-nv_2.1.12.bb
+++ b/recipes/xorg-driver/xf86-video-nv_2.1.12.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- NV display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "42f12a36d7afc26c817e8e8f5c8b7274"
+SRC_URI[archive.sha256sum] = "f56d2bb42f6c4369dd3c6adc30988c53a229650f910b0db1bb3bf9376054011e"
diff --git a/recipes/xorg-driver/xf86-video-nv_2.1.15.bb b/recipes/xorg-driver/xf86-video-nv_2.1.15.bb
index 0d4ee2ed19..22c0212b48 100644
--- a/recipes/xorg-driver/xf86-video-nv_2.1.15.bb
+++ b/recipes/xorg-driver/xf86-video-nv_2.1.15.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- NV display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "1b22188bd9012a148206940708b52ea6"
+SRC_URI[archive.sha256sum] = "c18ce0410437ced9c171d2d6328a8406b79b6edacf55b9526594b446ee5a3641"
diff --git a/recipes/xorg-driver/xf86-video-nv_2.1.16.bb b/recipes/xorg-driver/xf86-video-nv_2.1.16.bb
index 0d4ee2ed19..3a24b18738 100644
--- a/recipes/xorg-driver/xf86-video-nv_2.1.16.bb
+++ b/recipes/xorg-driver/xf86-video-nv_2.1.16.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- NV display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "fb02d5506e35054348d1c2b2c924530d"
+SRC_URI[archive.sha256sum] = "4bf2f964b78d309769faa6a5d21c90a9907886623adf1f30ea890b4329bf578d"
diff --git a/recipes/xorg-driver/xf86-video-nv_2.1.17.bb b/recipes/xorg-driver/xf86-video-nv_2.1.17.bb
new file mode 100644
index 0000000000..f3b793ed2a
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-nv_2.1.17.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+
+DESCRIPTION = "X.Org X server -- NV display driver"
+PE = "1"
+SRC_URI[archive.md5sum] = "4401c7b956e60a6d7de68ca6a8ec05d0"
+SRC_URI[archive.sha256sum] = "4286f8994d80a30c7b6b4fc9df6ea5d587f648adc23cb3f523f571738c6900f4"
diff --git a/recipes/xorg-driver/xf86-video-nv_2.1.3.bb b/recipes/xorg-driver/xf86-video-nv_2.1.3.bb
index 843aa707b7..7b0783d0d4 100644
--- a/recipes/xorg-driver/xf86-video-nv_2.1.3.bb
+++ b/recipes/xorg-driver/xf86-video-nv_2.1.3.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "f9b38e24157c3aac6014119ac18d76da"
+SRC_URI[archive.sha256sum] = "8d9b5ea137c31919f7821e7f3ecbd133158813c1059f4a8ed0a723535d969952"
diff --git a/recipes/xorg-driver/xf86-video-nv_2.1.7.bb b/recipes/xorg-driver/xf86-video-nv_2.1.7.bb
index 0d4ee2ed19..ec1bff298c 100644
--- a/recipes/xorg-driver/xf86-video-nv_2.1.7.bb
+++ b/recipes/xorg-driver/xf86-video-nv_2.1.7.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- NV display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "192414222f1a98e228832ee53f8178c0"
+SRC_URI[archive.sha256sum] = "7c9135d80b519246b2a85ff0481d6ee0fddeb578d669ff490f236f85873e8c5a"
diff --git a/recipes/xorg-driver/xf86-video-nv_2.1.8.bb b/recipes/xorg-driver/xf86-video-nv_2.1.8.bb
index 0d4ee2ed19..636460819b 100644
--- a/recipes/xorg-driver/xf86-video-nv_2.1.8.bb
+++ b/recipes/xorg-driver/xf86-video-nv_2.1.8.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- NV display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "c3e8c98287dc98677bebfbe1ba51ab77"
+SRC_URI[archive.sha256sum] = "825ffb97525517de9f0ff7155946c6e58c278dba11957573cc970dd3b094f94a"
diff --git a/recipes/xorg-driver/xf86-video-nv_2.1.9.bb b/recipes/xorg-driver/xf86-video-nv_2.1.9.bb
index 0d4ee2ed19..94c0a186b0 100644
--- a/recipes/xorg-driver/xf86-video-nv_2.1.9.bb
+++ b/recipes/xorg-driver/xf86-video-nv_2.1.9.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- NV display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "c6b7e52fa18455c22eb040b8d2575ce5"
+SRC_URI[archive.sha256sum] = "20d92ff3ab4b9ecc150f4ed17a7012a48f56dbf3fb51b51dde769b28922976d9"
diff --git a/recipes/xorg-driver/xf86-video-omapfb_git.bb b/recipes/xorg-driver/xf86-video-omapfb_git.bb
index 53301042bd..7c723fa466 100644
--- a/recipes/xorg-driver/xf86-video-omapfb_git.bb
+++ b/recipes/xorg-driver/xf86-video-omapfb_git.bb
@@ -2,9 +2,9 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- OMAP display driver"
-PR_append = "d"
+PR_append = "e"
-SRCREV = "2ae9a57ebc3236cd0aec6534067b91a5c6916a3a"
+SRCREV = "db636c8436265c3d86c5b8e00785e45d55825c80"
PV = "0.1.1+${PR}+gitr${SRCREV}"
PE = "1"
diff --git a/recipes/xorg-driver/xf86-video-openchrome_0.2.903.bb b/recipes/xorg-driver/xf86-video-openchrome_0.2.903.bb
index facae8950a..19a2ef3ec2 100644
--- a/recipes/xorg-driver/xf86-video-openchrome_0.2.903.bb
+++ b/recipes/xorg-driver/xf86-video-openchrome_0.2.903.bb
@@ -7,3 +7,5 @@ do_configure_prepend() {
rm ${S}/acinclude.m4 || true
}
+SRC_URI[archive.md5sum] = "c0820787e89958c9114d359b6a3cd464"
+SRC_URI[archive.sha256sum] = "b7e4858d6b5c6428fae2485a2c2097cdf6073268ef812aae2ccbc3d936db7410"
diff --git a/recipes/xorg-driver/xf86-video-openchrome_0.2.904.bb b/recipes/xorg-driver/xf86-video-openchrome_0.2.904.bb
index facae8950a..c1fc194d0c 100644
--- a/recipes/xorg-driver/xf86-video-openchrome_0.2.904.bb
+++ b/recipes/xorg-driver/xf86-video-openchrome_0.2.904.bb
@@ -7,3 +7,5 @@ do_configure_prepend() {
rm ${S}/acinclude.m4 || true
}
+SRC_URI[archive.md5sum] = "f2481d98ef54febf5bffbb88a2a2426d"
+SRC_URI[archive.sha256sum] = "c7bdf7c48365b1d077a4be7ccc652cf3f7a0f385fddeb2d4fe71b00b6c6b7aea"
diff --git a/recipes/xorg-driver/xf86-video-r128_6.8.0.bb b/recipes/xorg-driver/xf86-video-r128_6.8.0.bb
index 994ea24d8f..abaaf17b95 100644
--- a/recipes/xorg-driver/xf86-video-r128_6.8.0.bb
+++ b/recipes/xorg-driver/xf86-video-r128_6.8.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- r128 display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "007bec0c6b07d9d3aeca4da18e561efb"
+SRC_URI[archive.sha256sum] = "5689ca714fee9c9272bee12883b07a0ef2c40358ffb19fa684e963027b56567b"
diff --git a/recipes/xorg-driver/xf86-video-r128_6.8.1.bb b/recipes/xorg-driver/xf86-video-r128_6.8.1.bb
index 994ea24d8f..bd52ad91be 100644
--- a/recipes/xorg-driver/xf86-video-r128_6.8.1.bb
+++ b/recipes/xorg-driver/xf86-video-r128_6.8.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- r128 display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "2b90854a62a4d45d652062f582dc8d13"
+SRC_URI[archive.sha256sum] = "517e21cc83850b903549d698c9daeb633e8b9ba5b187fe298409cc51975a9eca"
diff --git a/recipes/xorg-driver/xf86-video-radeonhd_1.2.0.bb b/recipes/xorg-driver/xf86-video-radeonhd_1.2.0.bb
index ee92c364da..f0559cd59b 100644
--- a/recipes/xorg-driver/xf86-video-radeonhd_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-radeonhd_1.2.0.bb
@@ -7,3 +7,5 @@ EXTRA_OECONF += " \
ac_cv_file___src_AtomBios_includes_atombios_h=yes \
ac_cv_file___src_AtomBios_includes_Decoder_h=yes \
"
+SRC_URI[archive.md5sum] = "6a932ec17da9ce5a6d9000c1649c3a7e"
+SRC_URI[archive.sha256sum] = "87c6353dd52bbe22d3a45f28fb39de1dd44f41568aaf8a9b0d45a7ed62313e27"
diff --git a/recipes/xorg-driver/xf86-video-radeonhd_1.3.0.bb b/recipes/xorg-driver/xf86-video-radeonhd_1.3.0.bb
index ee92c364da..0eac05f050 100644
--- a/recipes/xorg-driver/xf86-video-radeonhd_1.3.0.bb
+++ b/recipes/xorg-driver/xf86-video-radeonhd_1.3.0.bb
@@ -7,3 +7,5 @@ EXTRA_OECONF += " \
ac_cv_file___src_AtomBios_includes_atombios_h=yes \
ac_cv_file___src_AtomBios_includes_Decoder_h=yes \
"
+SRC_URI[archive.md5sum] = "7b6641aa9d836f1621b9b220ad6771b8"
+SRC_URI[archive.sha256sum] = "5adad675e60e973f2e3522a01457d9214157fbb5005090fe48092e6e5e698ad5"
diff --git a/recipes/xorg-driver/xf86-video-rendition_4.1.3.bb b/recipes/xorg-driver/xf86-video-rendition_4.1.3.bb
index e6c89a8c74..2f780ad19c 100644
--- a/recipes/xorg-driver/xf86-video-rendition_4.1.3.bb
+++ b/recipes/xorg-driver/xf86-video-rendition_4.1.3.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X11 driver supporting cards based on the V1000 or the V2x00."
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "a8b97feccb32184820d5856fe78d34db"
+SRC_URI[archive.sha256sum] = "37e7aef72f7466485f5a3bafd0d43190cb7439de16868bfba2c59bb4c9df4408"
diff --git a/recipes/xorg-driver/xf86-video-rendition_4.2.0.bb b/recipes/xorg-driver/xf86-video-rendition_4.2.0.bb
index e6c89a8c74..3da0278a78 100644
--- a/recipes/xorg-driver/xf86-video-rendition_4.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-rendition_4.2.0.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X11 driver supporting cards based on the V1000 or the V2x00."
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "7c03de3804d4c4f6ff59f74050d24b2b"
+SRC_URI[archive.sha256sum] = "b57b62f707d87534a799170e31b33311449cfd7019a56e6b4fa85a4c7faaae15"
diff --git a/recipes/xorg-driver/xf86-video-rendition_4.2.3.bb b/recipes/xorg-driver/xf86-video-rendition_4.2.3.bb
index e6c89a8c74..a339cb8578 100644
--- a/recipes/xorg-driver/xf86-video-rendition_4.2.3.bb
+++ b/recipes/xorg-driver/xf86-video-rendition_4.2.3.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X11 driver supporting cards based on the V1000 or the V2x00."
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "9a0a916fe1e7b5c81cd4c80a08e646cc"
+SRC_URI[archive.sha256sum] = "9d5559fd3029feee5af2493ab8f558c58c426fc89776a1109dab97e3a4764d94"
diff --git a/recipes/xorg-driver/xf86-video-s3_0.5.0.bb b/recipes/xorg-driver/xf86-video-s3_0.5.0.bb
index 843aa707b7..f742317fc6 100644
--- a/recipes/xorg-driver/xf86-video-s3_0.5.0.bb
+++ b/recipes/xorg-driver/xf86-video-s3_0.5.0.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "d95ab6445cab477f39adfbbc81006f67"
+SRC_URI[archive.sha256sum] = "4a1206cb1a200aad8881216547d9913d0e24928138f3b1bb912a3336b9c05c97"
diff --git a/recipes/xorg-driver/xf86-video-s3_0.6.0.bb b/recipes/xorg-driver/xf86-video-s3_0.6.0.bb
index b5fef823b6..992e0fdfa7 100644
--- a/recipes/xorg-driver/xf86-video-s3_0.6.0.bb
+++ b/recipes/xorg-driver/xf86-video-s3_0.6.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
PE = "1"
DESCRIPTION = "X.Org X server -- legacy S3 display driver"
+SRC_URI[archive.md5sum] = "d05e7c3cb044437eda8663e174ba913c"
+SRC_URI[archive.sha256sum] = "ed07e4648b0f405fddd563783b49f971d649dd07cc8bc7737a93ff3d90f6c067"
diff --git a/recipes/xorg-driver/xf86-video-s3_0.6.3.bb b/recipes/xorg-driver/xf86-video-s3_0.6.3.bb
index b5fef823b6..7a4a70b9c2 100644
--- a/recipes/xorg-driver/xf86-video-s3_0.6.3.bb
+++ b/recipes/xorg-driver/xf86-video-s3_0.6.3.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
PE = "1"
DESCRIPTION = "X.Org X server -- legacy S3 display driver"
+SRC_URI[archive.md5sum] = "5eb06d88533fb327d067928faeb20860"
+SRC_URI[archive.sha256sum] = "ed9f65aa6eb1811d8c16cddfce00c5fc5880d6d46b907a83ef77700610085144"
diff --git a/recipes/xorg-driver/xf86-video-s3virge_1.10.1.bb b/recipes/xorg-driver/xf86-video-s3virge_1.10.1.bb
index 5f7dd350ce..7b51ca8e32 100644
--- a/recipes/xorg-driver/xf86-video-s3virge_1.10.1.bb
+++ b/recipes/xorg-driver/xf86-video-s3virge_1.10.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
PE = "1"
DESCRIPTION = "X.Org X server -- S3 ViRGE display driver"
+SRC_URI[archive.md5sum] = "4a293047e988d4ea1e9e96d3b5793f43"
+SRC_URI[archive.sha256sum] = "9094115621ef73c957cf887332717ec727c751959b1059e3d00fbfe0114a978a"
diff --git a/recipes/xorg-driver/xf86-video-s3virge_1.10.4.bb b/recipes/xorg-driver/xf86-video-s3virge_1.10.4.bb
index 5f7dd350ce..31baad30de 100644
--- a/recipes/xorg-driver/xf86-video-s3virge_1.10.4.bb
+++ b/recipes/xorg-driver/xf86-video-s3virge_1.10.4.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
PE = "1"
DESCRIPTION = "X.Org X server -- S3 ViRGE display driver"
+SRC_URI[archive.md5sum] = "6517bbbf808c700502d51acdc44662f8"
+SRC_URI[archive.sha256sum] = "1cd00d6e71fdbd70dafe3beb8911d22cbdc5ef7b32d2d81c454ac8a18c967fb8"
diff --git a/recipes/xorg-driver/xf86-video-s3virge_1.9.1.bb b/recipes/xorg-driver/xf86-video-s3virge_1.9.1.bb
index c2b6b7608a..e860d850f7 100644
--- a/recipes/xorg-driver/xf86-video-s3virge_1.9.1.bb
+++ b/recipes/xorg-driver/xf86-video-s3virge_1.9.1.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "a91c73285ef67ee7cd9e2da28acb6cc4"
+SRC_URI[archive.sha256sum] = "cef5702963f49e737fb8b1472dc0241f7a5da49f844ac77f2df3e693a84bc822"
diff --git a/recipes/xorg-driver/xf86-video-savage_2.1.2.bb b/recipes/xorg-driver/xf86-video-savage_2.1.2.bb
index 999b319b23..bceef9e9a5 100644
--- a/recipes/xorg-driver/xf86-video-savage_2.1.2.bb
+++ b/recipes/xorg-driver/xf86-video-savage_2.1.2.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " drm xf86driproto"
+SRC_URI[archive.md5sum] = "6367e921a98f6a7fec9d0a9bc5ff0a47"
+SRC_URI[archive.sha256sum] = "1a9aa442152c139e3c54bc6c323bd13edf0bfff70a81c03969bcb1159317edb2"
diff --git a/recipes/xorg-driver/xf86-video-savage_2.1.3.bb b/recipes/xorg-driver/xf86-video-savage_2.1.3.bb
index 999b319b23..d2e1d2069b 100644
--- a/recipes/xorg-driver/xf86-video-savage_2.1.3.bb
+++ b/recipes/xorg-driver/xf86-video-savage_2.1.3.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " drm xf86driproto"
+SRC_URI[archive.md5sum] = "9c5e541613b07de6e7b2b2df3a2e35b1"
+SRC_URI[archive.sha256sum] = "f5f154df377cb445935d1453d6b7095d63912d5776dcb44f8d3c2f10ab1a3cc5"
diff --git a/recipes/xorg-driver/xf86-video-savage_2.2.1.bb b/recipes/xorg-driver/xf86-video-savage_2.2.1.bb
index eafe3899e6..05460d2d07 100644
--- a/recipes/xorg-driver/xf86-video-savage_2.2.1.bb
+++ b/recipes/xorg-driver/xf86-video-savage_2.2.1.bb
@@ -10,3 +10,5 @@ EXTRA_OECONF += " \
ac_cv_file__usr_include_xorg_sarea_h=yes \
ac_cv_file__usr_include_xorg_dristruct_h=yes \
"
+SRC_URI[archive.md5sum] = "62b8aba48b54eaefeae87df502bf219c"
+SRC_URI[archive.sha256sum] = "adf95cae0fbaf72326c51c4c9e61486eef062bb1706f6ab46d942f2c36d8a37e"
diff --git a/recipes/xorg-driver/xf86-video-savage_2.3.1.bb b/recipes/xorg-driver/xf86-video-savage_2.3.1.bb
index eafe3899e6..f37453a7c8 100644
--- a/recipes/xorg-driver/xf86-video-savage_2.3.1.bb
+++ b/recipes/xorg-driver/xf86-video-savage_2.3.1.bb
@@ -10,3 +10,5 @@ EXTRA_OECONF += " \
ac_cv_file__usr_include_xorg_sarea_h=yes \
ac_cv_file__usr_include_xorg_dristruct_h=yes \
"
+SRC_URI[archive.md5sum] = "66c319f610e3699c3de0f3ef630abb32"
+SRC_URI[archive.sha256sum] = "2b4adcdd820a6f3acba6f3c0995f5899edc8f5e33fb4c4666c4c7a78090ddaab"
diff --git a/recipes/xorg-driver/xf86-video-siliconmotion_1.5.1.bb b/recipes/xorg-driver/xf86-video-siliconmotion_1.5.1.bb
index a6f3a5c2c4..d8eb272e9a 100644
--- a/recipes/xorg-driver/xf86-video-siliconmotion_1.5.1.bb
+++ b/recipes/xorg-driver/xf86-video-siliconmotion_1.5.1.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "ee35d7714ce44a2b5ac7ad7b7b7dd75a"
+SRC_URI[archive.sha256sum] = "54cf791695a53d4836d32f899b7d34b969edf5415f02e36956b6e72993e21cd7"
diff --git a/recipes/xorg-driver/xf86-video-siliconmotion_1.6.0.bb b/recipes/xorg-driver/xf86-video-siliconmotion_1.6.0.bb
index 5b9b4fc326..0d1a8a5506 100644
--- a/recipes/xorg-driver/xf86-video-siliconmotion_1.6.0.bb
+++ b/recipes/xorg-driver/xf86-video-siliconmotion_1.6.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
PE = "1"
DESCRIPTION = "X.Org X server -- SiliconMotion display driver"
+SRC_URI[archive.md5sum] = "a8419a8ed17b02b2a6dd4d30d5e94b00"
+SRC_URI[archive.sha256sum] = "cc5301b9c6adb9a0770509b8570d38730d43e9ffce6d6886cd9a090965017e53"
diff --git a/recipes/xorg-driver/xf86-video-siliconmotion_1.7.3.bb b/recipes/xorg-driver/xf86-video-siliconmotion_1.7.3.bb
index 5b9b4fc326..94a519e795 100644
--- a/recipes/xorg-driver/xf86-video-siliconmotion_1.7.3.bb
+++ b/recipes/xorg-driver/xf86-video-siliconmotion_1.7.3.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
PE = "1"
DESCRIPTION = "X.Org X server -- SiliconMotion display driver"
+SRC_URI[archive.md5sum] = "29fb322cd3adab52cc7f1ac86f9315bb"
+SRC_URI[archive.sha256sum] = "ebda468be42695c08ceaa4043da3cf5bcd5f9ab15d1482311fd6e826a8060b2b"
diff --git a/recipes/xorg-driver/xf86-video-sis_0.10.0.bb b/recipes/xorg-driver/xf86-video-sis_0.10.0.bb
index dc083b3e88..ab1264be05 100644
--- a/recipes/xorg-driver/xf86-video-sis_0.10.0.bb
+++ b/recipes/xorg-driver/xf86-video-sis_0.10.0.bb
@@ -9,3 +9,5 @@ EXTRA_OECONF += " \
ac_cv_file__usr_include_xorg_sarea_h=yes \
ac_cv_file__usr_include_xorg_dristruct_h=yes \
"
+SRC_URI[archive.md5sum] = "331d432dccccca91ec7da39ff6bf1218"
+SRC_URI[archive.sha256sum] = "bcc0dcde5d469cc2500676e0ad29dcd12b1370066289902387ead762260e4b40"
diff --git a/recipes/xorg-driver/xf86-video-sis_0.10.1.bb b/recipes/xorg-driver/xf86-video-sis_0.10.1.bb
index dc083b3e88..6b9d572bd0 100644
--- a/recipes/xorg-driver/xf86-video-sis_0.10.1.bb
+++ b/recipes/xorg-driver/xf86-video-sis_0.10.1.bb
@@ -9,3 +9,5 @@ EXTRA_OECONF += " \
ac_cv_file__usr_include_xorg_sarea_h=yes \
ac_cv_file__usr_include_xorg_dristruct_h=yes \
"
+SRC_URI[archive.md5sum] = "9f57c2f5ccbd8340db32da1c74083771"
+SRC_URI[archive.sha256sum] = "11529f094cbdcdaba505596488eda623e0f0bd3c51139359d587ea58b6527307"
diff --git a/recipes/xorg-driver/xf86-video-sis_0.10.2.bb b/recipes/xorg-driver/xf86-video-sis_0.10.2.bb
index dc083b3e88..ea1dfa03a1 100644
--- a/recipes/xorg-driver/xf86-video-sis_0.10.2.bb
+++ b/recipes/xorg-driver/xf86-video-sis_0.10.2.bb
@@ -9,3 +9,5 @@ EXTRA_OECONF += " \
ac_cv_file__usr_include_xorg_sarea_h=yes \
ac_cv_file__usr_include_xorg_dristruct_h=yes \
"
+SRC_URI[archive.md5sum] = "f04baa307e49e9f0e5a5c3d2e89a5576"
+SRC_URI[archive.sha256sum] = "3aad701799e355669b9027a9baedd623fe6b7ce93da9ac22b6902fd7e38128c2"
diff --git a/recipes/xorg-driver/xf86-video-sis_0.9.3.bb b/recipes/xorg-driver/xf86-video-sis_0.9.3.bb
index ab53a64646..8f7bbb87a4 100644
--- a/recipes/xorg-driver/xf86-video-sis_0.9.3.bb
+++ b/recipes/xorg-driver/xf86-video-sis_0.9.3.bb
@@ -5,3 +5,5 @@ PE = "1"
DEPENDS += " xineramaproto xf86miscproto xf86dgaproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "e35d817fa4ee7beb6cd5aa744b9c0783"
+SRC_URI[archive.sha256sum] = "898ee8fb16fff89ba8ac5c83b9f5a2371084719db0cf034140427229191436f6"
diff --git a/recipes/xorg-driver/xf86-video-sis_0.9.4.bb b/recipes/xorg-driver/xf86-video-sis_0.9.4.bb
index dd6e106e0d..41157444b9 100644
--- a/recipes/xorg-driver/xf86-video-sis_0.9.4.bb
+++ b/recipes/xorg-driver/xf86-video-sis_0.9.4.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- SiS display driver"
DEPENDS += " xineramaproto xf86miscproto xf86dgaproto drm xf86driproto"
PE = "1"
+SRC_URI[archive.md5sum] = "43f12cabf770b06170cdd1cdaafdc50f"
+SRC_URI[archive.sha256sum] = "50856446841526fc393af6bae0fbc39c20bb07e60056a676d0bc620446b593ac"
diff --git a/recipes/xorg-driver/xf86-video-sisusb_0.8.1.bb b/recipes/xorg-driver/xf86-video-sisusb_0.8.1.bb
index 07af9eebcb..a0f4c3e083 100644
--- a/recipes/xorg-driver/xf86-video-sisusb_0.8.1.bb
+++ b/recipes/xorg-driver/xf86-video-sisusb_0.8.1.bb
@@ -4,3 +4,5 @@ PE = "1"
DEPENDS += " xineramaproto xf86miscproto"
+SRC_URI[archive.md5sum] = "cbd669507e4aa35e468905f09b546333"
+SRC_URI[archive.sha256sum] = "1596b79ab3e33263bde2d456cc0376808abee80b4cde059605f176d98bdb45cb"
diff --git a/recipes/xorg-driver/xf86-video-sisusb_0.9.0.bb b/recipes/xorg-driver/xf86-video-sisusb_0.9.0.bb
index 8f6dfae1f6..62c2b7c686 100644
--- a/recipes/xorg-driver/xf86-video-sisusb_0.9.0.bb
+++ b/recipes/xorg-driver/xf86-video-sisusb_0.9.0.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X.Org X server -- SiS USB display driver"
DEPENDS += " xineramaproto xf86miscproto"
+SRC_URI[archive.md5sum] = "7b1f5465f423a859f306f4f1d6306a1b"
+SRC_URI[archive.sha256sum] = "76b79c9b7d3b35b8e2e5354569bf0936c4afd39a9dcbdf66327714d75137930a"
diff --git a/recipes/xorg-driver/xf86-video-sisusb_0.9.1.bb b/recipes/xorg-driver/xf86-video-sisusb_0.9.1.bb
index 8f6dfae1f6..b3f99574f5 100644
--- a/recipes/xorg-driver/xf86-video-sisusb_0.9.1.bb
+++ b/recipes/xorg-driver/xf86-video-sisusb_0.9.1.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X.Org X server -- SiS USB display driver"
DEPENDS += " xineramaproto xf86miscproto"
+SRC_URI[archive.md5sum] = "42069e70578bf3fb353cdacad186f6c0"
+SRC_URI[archive.sha256sum] = "b3ca934ce3e31f4a162bf263cad3913edccc46906d09132118b74a2095c157d9"
diff --git a/recipes/xorg-driver/xf86-video-sisusb_0.9.3.bb b/recipes/xorg-driver/xf86-video-sisusb_0.9.3.bb
index 8f6dfae1f6..784cd2a89a 100644
--- a/recipes/xorg-driver/xf86-video-sisusb_0.9.3.bb
+++ b/recipes/xorg-driver/xf86-video-sisusb_0.9.3.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X.Org X server -- SiS USB display driver"
DEPENDS += " xineramaproto xf86miscproto"
+SRC_URI[archive.md5sum] = "be59e9c2d9458cee0b5006549c14a95d"
+SRC_URI[archive.sha256sum] = "1df9a90ecc31d5fb63de7c970555f166dab24c0f633b54aaac4ee82fa7b49bb2"
diff --git a/recipes/xorg-driver/xf86-video-sunbw2_1.1.0.bb b/recipes/xorg-driver/xf86-video-sunbw2_1.1.0.bb
index c2b6b7608a..1c69616730 100644
--- a/recipes/xorg-driver/xf86-video-sunbw2_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-video-sunbw2_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "559c95f044a31cfe7f71453e9b89c35b"
+SRC_URI[archive.sha256sum] = "d71074e941ad8f71ac476651c2ca4142a5c2243e8fecdf216bc0ffbf18338136"
diff --git a/recipes/xorg-driver/xf86-video-suncg14_1.1.0.bb b/recipes/xorg-driver/xf86-video-suncg14_1.1.0.bb
index c2b6b7608a..cf6e89b6a2 100644
--- a/recipes/xorg-driver/xf86-video-suncg14_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-video-suncg14_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "9e25784e912cb2f0493b87431fd60773"
+SRC_URI[archive.sha256sum] = "1eca2b0970e725db49f9e462a0c2e618b2616389647335b5aec9d6e495e40527"
diff --git a/recipes/xorg-driver/xf86-video-suncg14_1.1.1.bb b/recipes/xorg-driver/xf86-video-suncg14_1.1.1.bb
index c2b6b7608a..4c4d729f51 100644
--- a/recipes/xorg-driver/xf86-video-suncg14_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-video-suncg14_1.1.1.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "8e4bd0a6b155cb861356e7430d667aee"
+SRC_URI[archive.sha256sum] = "cb43007920394b000be98ea0eac16a1cc16b4ca7ea8532b5d803a0c7574720d8"
diff --git a/recipes/xorg-driver/xf86-video-suncg3_1.1.0.bb b/recipes/xorg-driver/xf86-video-suncg3_1.1.0.bb
index c2b6b7608a..fcb4819777 100644
--- a/recipes/xorg-driver/xf86-video-suncg3_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-video-suncg3_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "b9cb8cfb6a4234bebc434f744af53208"
+SRC_URI[archive.sha256sum] = "3564ebc8ccdfea872d46559166d881e93ac7c17e3ed46bb4087960f491c37df9"
diff --git a/recipes/xorg-driver/xf86-video-suncg3_1.1.1.bb b/recipes/xorg-driver/xf86-video-suncg3_1.1.1.bb
index c2b6b7608a..d434caa9c9 100644
--- a/recipes/xorg-driver/xf86-video-suncg3_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-video-suncg3_1.1.1.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "bb6c4def5cfb0959b72dccb661473d4a"
+SRC_URI[archive.sha256sum] = "d56fe98c34f2af1b6424e3fcaa22a31402a4b59d63679f0e5fdfb1d2ea878419"
diff --git a/recipes/xorg-driver/xf86-video-suncg6_1.1.0.bb b/recipes/xorg-driver/xf86-video-suncg6_1.1.0.bb
index c2b6b7608a..3b3dfc6cdf 100644
--- a/recipes/xorg-driver/xf86-video-suncg6_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-video-suncg6_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "aa6b7836fe6ccc99994bf15ff2b74e86"
+SRC_URI[archive.sha256sum] = "d6b1f3b79c57ef5281e0204b2847812cf9fa5df616478f01591445a36537194b"
diff --git a/recipes/xorg-driver/xf86-video-suncg6_1.1.1.bb b/recipes/xorg-driver/xf86-video-suncg6_1.1.1.bb
index c2b6b7608a..e7602c41a6 100644
--- a/recipes/xorg-driver/xf86-video-suncg6_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-video-suncg6_1.1.1.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "bc9904a9129aaf73408568ae1e2fa65f"
+SRC_URI[archive.sha256sum] = "d1216c7c2be78d1dafad0cd46e464e9fa08f5e04544b76d9a0c547374c85801f"
diff --git a/recipes/xorg-driver/xf86-video-sunffb_1.1.0.bb b/recipes/xorg-driver/xf86-video-sunffb_1.1.0.bb
index 0251123fc8..0ba228e1ad 100644
--- a/recipes/xorg-driver/xf86-video-sunffb_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-video-sunffb_1.1.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
PE = "1"
DEPENDS += " drm xf86driproto"
+SRC_URI[archive.md5sum] = "dee23564c0d8069f52c7cd29c78be667"
+SRC_URI[archive.sha256sum] = "f897a427e83cf6965fd82724e3298aea44eb3131ba62f904cb514dfd0a879029"
diff --git a/recipes/xorg-driver/xf86-video-sunffb_1.2.0.bb b/recipes/xorg-driver/xf86-video-sunffb_1.2.0.bb
index c2b6b7608a..295a9a4ed0 100644
--- a/recipes/xorg-driver/xf86-video-sunffb_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-sunffb_1.2.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "816842de26bce8a935f3c9c3cfedbc42"
+SRC_URI[archive.sha256sum] = "59f2f8fc2399a4d6b0ce733481c58694e723a989f4712c00436d35e27c059292"
diff --git a/recipes/xorg-driver/xf86-video-sunffb_1.2.1.bb b/recipes/xorg-driver/xf86-video-sunffb_1.2.1.bb
index c2b6b7608a..91eaa13af6 100644
--- a/recipes/xorg-driver/xf86-video-sunffb_1.2.1.bb
+++ b/recipes/xorg-driver/xf86-video-sunffb_1.2.1.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "1bb374fe5ab3ed780d353b2b12ba6255"
+SRC_URI[archive.sha256sum] = "fd377af6e366e8e3a77c8ff825a009138c8343c0007bbf070ad605a649577e11"
diff --git a/recipes/xorg-driver/xf86-video-sunleo_1.1.0.bb b/recipes/xorg-driver/xf86-video-sunleo_1.1.0.bb
index c2b6b7608a..639765a899 100644
--- a/recipes/xorg-driver/xf86-video-sunleo_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-video-sunleo_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "0408d95795d754c92d12d6476b6932a1"
+SRC_URI[archive.sha256sum] = "b504d50f261bea9bc9dcd2a9c9c3307b24dee97c18d13b5a6deb3eb393270da9"
diff --git a/recipes/xorg-driver/xf86-video-sunleo_1.2.0.bb b/recipes/xorg-driver/xf86-video-sunleo_1.2.0.bb
index c2b6b7608a..3d2e7502e0 100644
--- a/recipes/xorg-driver/xf86-video-sunleo_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-sunleo_1.2.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "14fe008620940a674981912fa02ae133"
+SRC_URI[archive.sha256sum] = "b315be97197020ae352efe48e9bcd13a572c3a03b2a4d598e89157a897746e06"
diff --git a/recipes/xorg-driver/xf86-video-suntcx_1.1.0.bb b/recipes/xorg-driver/xf86-video-suntcx_1.1.0.bb
index c2b6b7608a..12362b1c10 100644
--- a/recipes/xorg-driver/xf86-video-suntcx_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-video-suntcx_1.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "779a31151e44d2fd2a5ee1794f836889"
+SRC_URI[archive.sha256sum] = "72986a3981b746f60df1aba443d610db437fe8d5053e64630686f471c47b01cf"
diff --git a/recipes/xorg-driver/xf86-video-suntcx_1.1.1.bb b/recipes/xorg-driver/xf86-video-suntcx_1.1.1.bb
index c2b6b7608a..881fb79ec2 100644
--- a/recipes/xorg-driver/xf86-video-suntcx_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-video-suntcx_1.1.1.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "b064a8d2f3d481ec36ef9ac17e13a77d"
+SRC_URI[archive.sha256sum] = "543115c4b3a8603dcc9d7a3030c9e7ce20baf6e3976d92ff951cfea80b54981e"
diff --git a/recipes/xorg-driver/xf86-video-tdfx_1.3.0.bb b/recipes/xorg-driver/xf86-video-tdfx_1.3.0.bb
index 999b319b23..79f4e9a52d 100644
--- a/recipes/xorg-driver/xf86-video-tdfx_1.3.0.bb
+++ b/recipes/xorg-driver/xf86-video-tdfx_1.3.0.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " drm xf86driproto"
+SRC_URI[archive.md5sum] = "04c49acb5c5dbde14eabd32d06df6e73"
+SRC_URI[archive.sha256sum] = "6b1a00df5c9628817d08f07c6f18f578950744f3eb63b4397be8b0754e728624"
diff --git a/recipes/xorg-driver/xf86-video-tdfx_1.4.0.bb b/recipes/xorg-driver/xf86-video-tdfx_1.4.0.bb
index fe52f5eb19..96da320f92 100644
--- a/recipes/xorg-driver/xf86-video-tdfx_1.4.0.bb
+++ b/recipes/xorg-driver/xf86-video-tdfx_1.4.0.bb
@@ -10,3 +10,5 @@ EXTRA_OECONF += " \
ac_cv_file__usr_include_xorg_sarea_h=yes \
ac_cv_file__usr_include_xorg_dristruct_h=yes \
"
+SRC_URI[archive.md5sum] = "b13132f24683ef759bfb0c1db5096496"
+SRC_URI[archive.sha256sum] = "c3be06d324f2e49ece1f243b10d7180a32fbe65dbbb81e162279c8608800dead"
diff --git a/recipes/xorg-driver/xf86-video-tdfx_1.4.3.bb b/recipes/xorg-driver/xf86-video-tdfx_1.4.3.bb
index fe52f5eb19..e60469a072 100644
--- a/recipes/xorg-driver/xf86-video-tdfx_1.4.3.bb
+++ b/recipes/xorg-driver/xf86-video-tdfx_1.4.3.bb
@@ -10,3 +10,5 @@ EXTRA_OECONF += " \
ac_cv_file__usr_include_xorg_sarea_h=yes \
ac_cv_file__usr_include_xorg_dristruct_h=yes \
"
+SRC_URI[archive.md5sum] = "8161bbf2b100c21b609163f0010766b3"
+SRC_URI[archive.sha256sum] = "3ad935ca0aa306d10d1e6125a6bd485a3948c184dcfda01670961dc4740ebf33"
diff --git a/recipes/xorg-driver/xf86-video-tga_1.1.0.bb b/recipes/xorg-driver/xf86-video-tga_1.1.0.bb
index d3cf65f034..8b79f38af5 100644
--- a/recipes/xorg-driver/xf86-video-tga_1.1.0.bb
+++ b/recipes/xorg-driver/xf86-video-tga_1.1.0.bb
@@ -6,3 +6,5 @@ DESCRIPTION = "DEC 21030 X11 driver"
DEPENDS += " xf86dgaproto"
+SRC_URI[archive.md5sum] = "9eda4d4490706b2dd8f4ecdbaf779856"
+SRC_URI[archive.sha256sum] = "50143dfdd259fd114dc2f41518a4898d5407bf55422251df75812b96a1fa6e9b"
diff --git a/recipes/xorg-driver/xf86-video-tga_1.2.0.bb b/recipes/xorg-driver/xf86-video-tga_1.2.0.bb
index d3cf65f034..b1c6d61af1 100644
--- a/recipes/xorg-driver/xf86-video-tga_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-tga_1.2.0.bb
@@ -6,3 +6,5 @@ DESCRIPTION = "DEC 21030 X11 driver"
DEPENDS += " xf86dgaproto"
+SRC_URI[archive.md5sum] = "f3bddf0a64932ca9bd72041ccd3b5501"
+SRC_URI[archive.sha256sum] = "a92f8cad0e21318be465719a9f30a50d5719b0b70bf8e15f3937e7850cf1aea6"
diff --git a/recipes/xorg-driver/xf86-video-tga_1.2.1.bb b/recipes/xorg-driver/xf86-video-tga_1.2.1.bb
index d3cf65f034..6e560d80f9 100644
--- a/recipes/xorg-driver/xf86-video-tga_1.2.1.bb
+++ b/recipes/xorg-driver/xf86-video-tga_1.2.1.bb
@@ -6,3 +6,5 @@ DESCRIPTION = "DEC 21030 X11 driver"
DEPENDS += " xf86dgaproto"
+SRC_URI[archive.md5sum] = "bcbceda78395de74544c83b46a7700cd"
+SRC_URI[archive.sha256sum] = "70a4754ef6602cf48d910b9727d015cb3cae946c096ef260b56dfe2f80cdb855"
diff --git a/recipes/xorg-driver/xf86-video-trident_1.2.3.bb b/recipes/xorg-driver/xf86-video-trident_1.2.3.bb
index 065e64dfb1..bbc5a6d603 100644
--- a/recipes/xorg-driver/xf86-video-trident_1.2.3.bb
+++ b/recipes/xorg-driver/xf86-video-trident_1.2.3.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " xf86dgaproto"
+SRC_URI[archive.md5sum] = "c0e8b2f54942b6902b7dd4f30defe800"
+SRC_URI[archive.sha256sum] = "d23eb8fa165d238ddf64da63dcd60c70a01cd761608a18402cfb95aed6722495"
diff --git a/recipes/xorg-driver/xf86-video-trident_1.2.4.bb b/recipes/xorg-driver/xf86-video-trident_1.2.4.bb
index fe37be5d0b..ca5c20b6a9 100644
--- a/recipes/xorg-driver/xf86-video-trident_1.2.4.bb
+++ b/recipes/xorg-driver/xf86-video-trident_1.2.4.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.org X server -- Trident display driver"
DEPENDS += " xf86dgaproto"
PE = "1"
+SRC_URI[archive.md5sum] = "7f628f7eb4abdc4c49bb252eefc4335a"
+SRC_URI[archive.sha256sum] = "f942596e7427a089be9c9353c45c22002999580197c9715d9363d19ee170ba8d"
diff --git a/recipes/xorg-driver/xf86-video-trident_1.3.0.bb b/recipes/xorg-driver/xf86-video-trident_1.3.0.bb
index fe37be5d0b..426961bf44 100644
--- a/recipes/xorg-driver/xf86-video-trident_1.3.0.bb
+++ b/recipes/xorg-driver/xf86-video-trident_1.3.0.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.org X server -- Trident display driver"
DEPENDS += " xf86dgaproto"
PE = "1"
+SRC_URI[archive.md5sum] = "e89799579d0cf3858362bd751469e0bf"
+SRC_URI[archive.sha256sum] = "a4f66c9f46f6e93c2c1f10e782a211ddc338b0ff9f0a2ccd2d660db031d3ddb5"
diff --git a/recipes/xorg-driver/xf86-video-trident_1.3.3.bb b/recipes/xorg-driver/xf86-video-trident_1.3.3.bb
index fe37be5d0b..332a07cda4 100644
--- a/recipes/xorg-driver/xf86-video-trident_1.3.3.bb
+++ b/recipes/xorg-driver/xf86-video-trident_1.3.3.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.org X server -- Trident display driver"
DEPENDS += " xf86dgaproto"
PE = "1"
+SRC_URI[archive.md5sum] = "47f3c5da1942017218355f178f02ef84"
+SRC_URI[archive.sha256sum] = "6241eab6f3f0a075380be6b614e33ad72256242c865115bc8b696f83a75d11f5"
diff --git a/recipes/xorg-driver/xf86-video-tseng_1.1.1.bb b/recipes/xorg-driver/xf86-video-tseng_1.1.1.bb
index 843aa707b7..576c438925 100644
--- a/recipes/xorg-driver/xf86-video-tseng_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-video-tseng_1.1.1.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "488aa9c3ec7a95e6589afa4b50bec8b4"
+SRC_URI[archive.sha256sum] = "c9c1f3318715b7268068bc733d00bcab93924e97eb38f94548e442fd6cdfd56e"
diff --git a/recipes/xorg-driver/xf86-video-tseng_1.2.0.bb b/recipes/xorg-driver/xf86-video-tseng_1.2.0.bb
index 843aa707b7..964e0d6d99 100644
--- a/recipes/xorg-driver/xf86-video-tseng_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-tseng_1.2.0.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "f98fc22142a009dc3a6cdf930c95203f"
+SRC_URI[archive.sha256sum] = "1090d9100934329000ac330d0c66a0ac4f60d2ba83196ea15c2833a28a18b1e3"
diff --git a/recipes/xorg-driver/xf86-video-tseng_1.2.3.bb b/recipes/xorg-driver/xf86-video-tseng_1.2.3.bb
index 843aa707b7..a66b7539da 100644
--- a/recipes/xorg-driver/xf86-video-tseng_1.2.3.bb
+++ b/recipes/xorg-driver/xf86-video-tseng_1.2.3.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "79f63999c88477801ae54dc486272ad6"
+SRC_URI[archive.sha256sum] = "0556bb3e79da4be87e880f82e2b8504527e760e284680f9463a08f9572507187"
diff --git a/recipes/xorg-driver/xf86-video-v4l_0.1.1.bb b/recipes/xorg-driver/xf86-video-v4l_0.1.1.bb
index 9ebb9ad1f6..588bdd03c7 100644
--- a/recipes/xorg-driver/xf86-video-v4l_0.1.1.bb
+++ b/recipes/xorg-driver/xf86-video-v4l_0.1.1.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
PE = "1"
DESCRIPTION = "Video 4 Linux adaptor driver for X11"
+SRC_URI[archive.md5sum] = "69339c38eba2cebc357d67e7a755d734"
+SRC_URI[archive.sha256sum] = "33ad549ea3f6a8da7f58d9964f3f2d83aabc6d64c2ebc2ea0033ac8dacaec870"
diff --git a/recipes/xorg-driver/xf86-video-v4l_0.2.0.bb b/recipes/xorg-driver/xf86-video-v4l_0.2.0.bb
index 9ebb9ad1f6..a843d02739 100644
--- a/recipes/xorg-driver/xf86-video-v4l_0.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-v4l_0.2.0.bb
@@ -3,3 +3,5 @@ require xorg-driver-video.inc
PE = "1"
DESCRIPTION = "Video 4 Linux adaptor driver for X11"
+SRC_URI[archive.md5sum] = "2251ae2a0a905764941cd7b098e85ad1"
+SRC_URI[archive.sha256sum] = "cbff9120fbad900cbdc7ac535d04984e7b491d69a8eb0b371e30ae07cb61925d"
diff --git a/recipes/xorg-driver/xf86-video-vermilion_1.0.1.bb b/recipes/xorg-driver/xf86-video-vermilion_1.0.1.bb
index c3054b9051..cf36ca4e1c 100644
--- a/recipes/xorg-driver/xf86-video-vermilion_1.0.1.bb
+++ b/recipes/xorg-driver/xf86-video-vermilion_1.0.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "0f7c6be1bbdc5eb43d82b356fe0f5104"
+SRC_URI[archive.sha256sum] = "4feb4cd8d239a1b5a944c82b253d106b7f7da083fc4d87a8aeeb822c2e980d8b"
diff --git a/recipes/xorg-driver/xf86-video-vesa_1.3.0.bb b/recipes/xorg-driver/xf86-video-vesa_1.3.0.bb
index 1e6760c3dc..7b1163560e 100644
--- a/recipes/xorg-driver/xf86-video-vesa_1.3.0.bb
+++ b/recipes/xorg-driver/xf86-video-vesa_1.3.0.bb
@@ -6,3 +6,5 @@ SRC_URI += "file://fix-includepath.patch;patch=1"
#DESCRIPTION = ""
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "4a307852f3b4850e436a41dab2a73676"
+SRC_URI[archive.sha256sum] = "b96c80ae81f5123ecef344dac4c734b2e281143d3ab7a7e633d6bf04c893e203"
diff --git a/recipes/xorg-driver/xf86-video-vesa_2.0.0.bb b/recipes/xorg-driver/xf86-video-vesa_2.0.0.bb
index bd2f7cf7c1..641fc61b66 100644
--- a/recipes/xorg-driver/xf86-video-vesa_2.0.0.bb
+++ b/recipes/xorg-driver/xf86-video-vesa_2.0.0.bb
@@ -7,3 +7,5 @@ SRC_URI += "file://fix-includepath.patch;patch=1 \
#DESCRIPTION = ""
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "433cf6f961eb4a2ab6fcb086def0b2b4"
+SRC_URI[archive.sha256sum] = "f20b2e429657552eea207fb8bc4b47c8e293d99c229dcb4da11b7c5bfdc1e165"
diff --git a/recipes/xorg-driver/xf86-video-vesa_2.2.0.bb b/recipes/xorg-driver/xf86-video-vesa_2.2.0.bb
index 9fce612de4..ce89f5f608 100644
--- a/recipes/xorg-driver/xf86-video-vesa_2.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-vesa_2.2.0.bb
@@ -8,3 +8,5 @@ SRC_URI += "file://fix-includepath.patch;patch=1 \
RDEPENDS += "xserver-xorg-module-libint10 "
PR = "r2"
+SRC_URI[archive.md5sum] = "9a86b683f73f3806f55d05cd804a6f4a"
+SRC_URI[archive.sha256sum] = "8b3e077d2534722033d7b1c647aa7f31fc7fbb5014da096b7a53170005e80226"
diff --git a/recipes/xorg-driver/xf86-video-vesa_2.2.1.bb b/recipes/xorg-driver/xf86-video-vesa_2.2.1.bb
index bd2f7cf7c1..1e08bc484a 100644
--- a/recipes/xorg-driver/xf86-video-vesa_2.2.1.bb
+++ b/recipes/xorg-driver/xf86-video-vesa_2.2.1.bb
@@ -7,3 +7,5 @@ SRC_URI += "file://fix-includepath.patch;patch=1 \
#DESCRIPTION = ""
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "61a1dc9a22991bd04d0ff98f800775c1"
+SRC_URI[archive.sha256sum] = "a3657971232e9c7db3e7517a8aedd86d3ef4d159f7099ec974cdd03aafa41080"
diff --git a/recipes/xorg-driver/xf86-video-vesa_2.3.0.bb b/recipes/xorg-driver/xf86-video-vesa_2.3.0.bb
index c2b6b7608a..f3536d2f86 100644
--- a/recipes/xorg-driver/xf86-video-vesa_2.3.0.bb
+++ b/recipes/xorg-driver/xf86-video-vesa_2.3.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "07fa32958aff9b463dd3af5481ef6626"
+SRC_URI[archive.sha256sum] = "8ed85a0e94523539d81d5ae6639fa22ceb1c1e3baf89128915db65d4d2900d7a"
diff --git a/recipes/xorg-driver/xf86-video-vga_4.1.0.bb b/recipes/xorg-driver/xf86-video-vga_4.1.0.bb
index c2b6b7608a..cc973453a9 100644
--- a/recipes/xorg-driver/xf86-video-vga_4.1.0.bb
+++ b/recipes/xorg-driver/xf86-video-vga_4.1.0.bb
@@ -1,2 +1,4 @@
require xorg-driver-video.inc
PE = "1"
+SRC_URI[archive.md5sum] = "b93e5fe9757db779a75cd3ce97b9613d"
+SRC_URI[archive.sha256sum] = "ca25f4c0f706688cbc2dcd03ffaf6a57a17290290257f0cc1b1f1bb261f95b41"
diff --git a/recipes/xorg-driver/xf86-video-via_0.2.2.bb b/recipes/xorg-driver/xf86-video-via_0.2.2.bb
index a3ce7324c3..42ac19ddcf 100644
--- a/recipes/xorg-driver/xf86-video-via_0.2.2.bb
+++ b/recipes/xorg-driver/xf86-video-via_0.2.2.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " drm xf86driproto libxvmc"
+SRC_URI[archive.md5sum] = "d5fe25d3cfa0a64cc77681f15f9c3159"
+SRC_URI[archive.sha256sum] = "5026bdaf644178fee66a26190453b0dddb99558b8c97c4a592a482a2434dc862"
diff --git a/recipes/xorg-driver/xf86-video-vmware_10.14.1.bb b/recipes/xorg-driver/xf86-video-vmware_10.14.1.bb
index c8169407cb..9763df7d6d 100644
--- a/recipes/xorg-driver/xf86-video-vmware_10.14.1.bb
+++ b/recipes/xorg-driver/xf86-video-vmware_10.14.1.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X11 driver for VMware SVGA Device"
#DEPENDS += " "
+SRC_URI[archive.md5sum] = "eaf1ce9fa23363799140602afaa10f37"
+SRC_URI[archive.sha256sum] = "1971fd356ba54204c3611edb9144c43c25c21167a5fa5ee725d3f2e3f9864fa9"
diff --git a/recipes/xorg-driver/xf86-video-vmware_10.15.2.bb b/recipes/xorg-driver/xf86-video-vmware_10.15.2.bb
index 994b8b6a3c..a5b01fd22d 100644
--- a/recipes/xorg-driver/xf86-video-vmware_10.15.2.bb
+++ b/recipes/xorg-driver/xf86-video-vmware_10.15.2.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "99322cbcc9081ad44e9cba63e3df8f7e"
+SRC_URI[archive.sha256sum] = "edae155c82d348b76dabe1373605bf6715b577cdd7a95f8b54ad534dc47c71ff"
diff --git a/recipes/xorg-driver/xf86-video-vmware_10.16.1.bb b/recipes/xorg-driver/xf86-video-vmware_10.16.1.bb
index 994b8b6a3c..fa3cd3526c 100644
--- a/recipes/xorg-driver/xf86-video-vmware_10.16.1.bb
+++ b/recipes/xorg-driver/xf86-video-vmware_10.16.1.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "a5e1f2539b82206e411c3647f10c425f"
+SRC_URI[archive.sha256sum] = "91ed99ae936be5df25d310d81e31e0a7efefc023e462d93a9289ac18ebdf4e89"
diff --git a/recipes/xorg-driver/xf86-video-vmware_10.16.5.bb b/recipes/xorg-driver/xf86-video-vmware_10.16.5.bb
index 994b8b6a3c..b9b33873f8 100644
--- a/recipes/xorg-driver/xf86-video-vmware_10.16.5.bb
+++ b/recipes/xorg-driver/xf86-video-vmware_10.16.5.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "6d78c82ea7c2bb0fcb587d7bb4e8f60a"
+SRC_URI[archive.sha256sum] = "3e4e9abfd806b36076083ef6cacc93b713bfa4ddefe7005edfc15c64f5174366"
diff --git a/recipes/xorg-driver/xf86-video-vmware_10.16.8.bb b/recipes/xorg-driver/xf86-video-vmware_10.16.8.bb
index 994b8b6a3c..a5983938b2 100644
--- a/recipes/xorg-driver/xf86-video-vmware_10.16.8.bb
+++ b/recipes/xorg-driver/xf86-video-vmware_10.16.8.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "25287a202c986b33bd79fbe379c96a16"
+SRC_URI[archive.sha256sum] = "956443948d94f7459b0056d8cb8ff2cd9fba4621d8b61f0257cb84469ea7da07"
diff --git a/recipes/xorg-driver/xf86-video-vmware_10.16.9.bb b/recipes/xorg-driver/xf86-video-vmware_10.16.9.bb
index 994b8b6a3c..0352fa7599 100644
--- a/recipes/xorg-driver/xf86-video-vmware_10.16.9.bb
+++ b/recipes/xorg-driver/xf86-video-vmware_10.16.9.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "3b3d38abfa1f8be4b1e26dcd236bc94f"
+SRC_URI[archive.sha256sum] = "835a5e45b54837cbbd963a48bd09db709717e097e931dd76e68e397a167e8bc1"
diff --git a/recipes/xorg-driver/xf86-video-vmware_11.0.0.bb b/recipes/xorg-driver/xf86-video-vmware_11.0.0.bb
new file mode 100644
index 0000000000..d53b77e0e3
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-vmware_11.0.0.bb
@@ -0,0 +1,8 @@
+require xorg-driver-video.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "2895deafa373b0f87b8a7feaf0ca2373"
+SRC_URI[archive.sha256sum] = "bb538ebb9f000767bcc389562c8deb4cda74aa3e608190f6c3ee1e93d394fb2d"
diff --git a/recipes/xorg-driver/xf86-video-voodoo_1.1.1.bb b/recipes/xorg-driver/xf86-video-voodoo_1.1.1.bb
index bfceb2995c..ffb97e9704 100644
--- a/recipes/xorg-driver/xf86-video-voodoo_1.1.1.bb
+++ b/recipes/xorg-driver/xf86-video-voodoo_1.1.1.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X11 driver for Voodoo/Voodoo2"
DEPENDS += " xf86dgaproto"
+SRC_URI[archive.md5sum] = "bc878e795688b49a595b355482d27174"
+SRC_URI[archive.sha256sum] = "3975601baee674b2bad0dfe696586f17cc913f1dc7f1d5c4e184623e0461751c"
diff --git a/recipes/xorg-driver/xf86-video-voodoo_1.2.0.bb b/recipes/xorg-driver/xf86-video-voodoo_1.2.0.bb
index bfceb2995c..6c6c691840 100644
--- a/recipes/xorg-driver/xf86-video-voodoo_1.2.0.bb
+++ b/recipes/xorg-driver/xf86-video-voodoo_1.2.0.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X11 driver for Voodoo/Voodoo2"
DEPENDS += " xf86dgaproto"
+SRC_URI[archive.md5sum] = "7c681d9b57f5e1f798263fc1a9d99245"
+SRC_URI[archive.sha256sum] = "b79ba6d5d4300570c00f8be37c536f47f2d78c18845f70f525da2a29e47c4b8c"
diff --git a/recipes/xorg-driver/xf86-video-voodoo_1.2.3.bb b/recipes/xorg-driver/xf86-video-voodoo_1.2.3.bb
index bfceb2995c..5e23995829 100644
--- a/recipes/xorg-driver/xf86-video-voodoo_1.2.3.bb
+++ b/recipes/xorg-driver/xf86-video-voodoo_1.2.3.bb
@@ -4,3 +4,5 @@ PE = "1"
DESCRIPTION = "X11 driver for Voodoo/Voodoo2"
DEPENDS += " xf86dgaproto"
+SRC_URI[archive.md5sum] = "c164effcc839eca1fc1d43a42f4086db"
+SRC_URI[archive.sha256sum] = "025d4d99ab19325b72417fadbb099c757412988f800c9511be3e2c3993ae29e9"
diff --git a/recipes/xorg-driver/xf86-video-wsfb_0.2.1.bb b/recipes/xorg-driver/xf86-video-wsfb_0.2.1.bb
index ea1c005e8c..6d73c8b14c 100644
--- a/recipes/xorg-driver/xf86-video-wsfb_0.2.1.bb
+++ b/recipes/xorg-driver/xf86-video-wsfb_0.2.1.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- wsfb display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "c159af867a9af3abc4da332189213a76"
+SRC_URI[archive.sha256sum] = "39e358aa17d939f561a28c82b9e7beca202d7ebd7d40d401c88a9dff3d90d148"
diff --git a/recipes/xorg-driver/xf86-video-wsfb_0.3.0.bb b/recipes/xorg-driver/xf86-video-wsfb_0.3.0.bb
index ea1c005e8c..7f4c7edaa4 100644
--- a/recipes/xorg-driver/xf86-video-wsfb_0.3.0.bb
+++ b/recipes/xorg-driver/xf86-video-wsfb_0.3.0.bb
@@ -2,3 +2,5 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- wsfb display driver"
PE = "1"
+SRC_URI[archive.md5sum] = "d6b5d25dfd61fa5113216d10a6dcbb50"
+SRC_URI[archive.sha256sum] = "78bdb6d397869dbd8560ae1f0ee65473977d19ca5afc9fa7638c35057284989e"
diff --git a/recipes/xorg-driver/xf86-video-xgi_1.5.0.bb b/recipes/xorg-driver/xf86-video-xgi_1.5.0.bb
index 994b8b6a3c..abf0331254 100644
--- a/recipes/xorg-driver/xf86-video-xgi_1.5.0.bb
+++ b/recipes/xorg-driver/xf86-video-xgi_1.5.0.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "08529fd015191be9244f598aa0894aa6"
+SRC_URI[archive.sha256sum] = "5fb23432ee8940c04494744da8b5f58bebc6ef113e96a50a74f0aa7d98a69194"
diff --git a/recipes/xorg-driver/xf86-video-xgi_1.5.1.bb b/recipes/xorg-driver/xf86-video-xgi_1.5.1.bb
index 994b8b6a3c..8f3ac0e0f3 100644
--- a/recipes/xorg-driver/xf86-video-xgi_1.5.1.bb
+++ b/recipes/xorg-driver/xf86-video-xgi_1.5.1.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "65a8d94d360b51690f8d4b2e7bfa036a"
+SRC_URI[archive.sha256sum] = "cb19f5287f9d345fc4fe15ba7c9344a3be2d8395ebf19a139899d1566d7c9e18"
diff --git a/recipes/xorg-driver/xf86-video-xgixp_1.7.99.3.bb b/recipes/xorg-driver/xf86-video-xgixp_1.7.99.3.bb
index 994b8b6a3c..e40932f7ab 100644
--- a/recipes/xorg-driver/xf86-video-xgixp_1.7.99.3.bb
+++ b/recipes/xorg-driver/xf86-video-xgixp_1.7.99.3.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "c541152aee693fad743ef7cbf75a7ffc"
+SRC_URI[archive.sha256sum] = "13a1658ee3ead0ab8e8bf7a9c8f8f0e3e40e38138f45d8431e735cd7184fbbd8"
diff --git a/recipes/xorg-driver/xf86-video-xgixp_1.7.99.4.bb b/recipes/xorg-driver/xf86-video-xgixp_1.7.99.4.bb
index 994b8b6a3c..97d064a78a 100644
--- a/recipes/xorg-driver/xf86-video-xgixp_1.7.99.4.bb
+++ b/recipes/xorg-driver/xf86-video-xgixp_1.7.99.4.bb
@@ -4,3 +4,5 @@ PE = "1"
#DESCRIPTION = ""
DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
+SRC_URI[archive.md5sum] = "0e7d0df07528c57304900da3acafc1a2"
+SRC_URI[archive.sha256sum] = "ee0a178c89ff10d679e6f174d2a2e5cc7b89c7c7d5c115d48e9c75942f487395"
diff --git a/recipes/xorg-driver/xorg-driver-common.inc b/recipes/xorg-driver/xorg-driver-common.inc
index 3277160bae..c431fa32a9 100644
--- a/recipes/xorg-driver/xorg-driver-common.inc
+++ b/recipes/xorg-driver/xorg-driver-common.inc
@@ -2,12 +2,12 @@ DESCRIPTION = "X driver"
HOMEPAGE = "http://www.x.org"
SECTION = "x11/drivers"
LICENSE = "MIT-X"
-PR = "r9"
+PR = "r10"
DEPENDS = "randrproto xorg-server xproto"
XORG_PN = "${PN}"
-SRC_URI = "${XORG_MIRROR}/individual/driver/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/driver/${XORG_PN}-${PV}.tar.bz2;name=archive"
S = "${WORKDIR}/${XORG_PN}-${PV}"
diff --git a/recipes/xorg-font/xorg-font-common.inc b/recipes/xorg-font/xorg-font-common.inc
index 5cf40e8436..0fc2e8fda4 100644
--- a/recipes/xorg-font/xorg-font-common.inc
+++ b/recipes/xorg-font/xorg-font-common.inc
@@ -8,7 +8,7 @@ RDEPENDS = "encodings font-util font-alias"
XORG_PN = "${PN}"
INC_PR = "r1"
-SRC_URI = "${XORG_MIRROR}/individual/font/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/font/${XORG_PN}-${PV}.tar.bz2;name=archive"
S = "${WORKDIR}/${XORG_PN}-${PV}"
inherit autotools pkgconfig
diff --git a/recipes/xorg-lib/libx11_1.3.3.bb b/recipes/xorg-lib/libx11_1.3.3.bb
index e70716a96d..f6ea1411ef 100644
--- a/recipes/xorg-lib/libx11_1.3.3.bb
+++ b/recipes/xorg-lib/libx11_1.3.3.bb
@@ -5,15 +5,16 @@ DEPENDS += "bigreqsproto xproto xextproto xtrans libxau xcmiscproto \
libxdmcp xf86bigfontproto kbproto inputproto xproto-native"
PROVIDES = "virtual/libx11"
PE = "1"
-PR = "r6"
+PR = "r7"
XORG_PN = "libX11"
SRC_URI += "file://x11_disable_makekeys.patch;patch=1 \
file://dolt-fix.patch;patch=1 \
- file://keysymdef_include.patch;patch=1 \
+ ${@['file://keysymdef_include.patch;patch=1', ''][(bb.data.inherits_class('native', d))]} \
"
+# --with-keysymdef has intentionally no effect in native build without without keysymdef_include.patch
EXTRA_OECONF += "--without-xcb --with-keysymdef=${STAGING_INCDIR}/X11/keysymdef.h"
do_compile() {
diff --git a/recipes/xorg-lib/libxt-native_1.0.8.bb b/recipes/xorg-lib/libxt-native_1.0.8.bb
new file mode 100644
index 0000000000..9745f6530d
--- /dev/null
+++ b/recipes/xorg-lib/libxt-native_1.0.8.bb
@@ -0,0 +1,8 @@
+require libxt_${PV}.bb
+
+DEPENDS = "libx11-native libsm-native kbproto-native"
+PROVIDES = "xt-native"
+
+inherit native
+
+XORG_PN = "libXt"
diff --git a/recipes/xorg-lib/libxt_1.0.8.bb b/recipes/xorg-lib/libxt_1.0.8.bb
new file mode 100644
index 0000000000..7a5447ce26
--- /dev/null
+++ b/recipes/xorg-lib/libxt_1.0.8.bb
@@ -0,0 +1,20 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 toolkit intrinsics library"
+DEPENDS += "libsm virtual/libx11 kbproto"
+PROVIDES = "xt"
+PE = "1"
+
+XORG_PN = "libXt"
+
+EXTRA_OECONF += "--disable-install-makestrs --disable-xkb"
+
+do_compile() {
+ (
+ unset CC LD CXX CCLD
+ oe_runmake -C util 'XT_CFLAGS=' 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE -I${STAGING_INCDIR_NATIVE} ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makestrs
+ ) || exit 1
+ oe_runmake
+}
+SRC_URI[archive.md5sum] = "fb7d2aa5b24cd5fe9b238a26d88030e7"
+SRC_URI[archive.sha256sum] = "70f52c81258661811c8eae86a7a6dc910d0bf84cd48aeeed85ba430ad6b2037c"
diff --git a/recipes/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
new file mode 100644
index 0000000000..25ce7ee3b8
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
@@ -0,0 +1,114 @@
+From c29c9fa826b7112156fd6150b5f1564227935c05 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:27:33 +0300
+Subject: [PATCH 3/6] Generic C implementation of pixman_blt with overlapping support
+
+Uses memcpy/memmove functions to copy pixels, can handle the
+case when both source and destination areas are in the same
+image (this is useful for scrolling).
+
+It is assumed that copying direction is only important when
+using the same image for both source and destination (and
+src_stride == dst_stride). Copying direction is undefined
+for the images with different source and destination stride
+which happen to be in the overlapped areas (but this is an
+unrealistic case anyway).
+---
+ pixman/pixman-general.c | 21 ++++++++++++++++++---
+ pixman/pixman-private.h | 43 +++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 61 insertions(+), 3 deletions(-)
+
+diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
+index c96a3f9..d71a299 100644
+--- a/pixman/pixman-general.c
++++ b/pixman/pixman-general.c
+@@ -300,9 +300,24 @@ general_blt (pixman_implementation_t *imp,
+ int width,
+ int height)
+ {
+- /* We can't blit unless we have sse2 or mmx */
+-
+- return FALSE;
++ uint8_t *dst_bytes = (uint8_t *)dst_bits;
++ uint8_t *src_bytes = (uint8_t *)src_bits;
++ int bpp;
++
++ if (src_bpp != dst_bpp || src_bpp & 7)
++ return FALSE;
++
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp,
++ dst_bytes + dst_y * dst_stride + dst_x * bpp,
++ src_stride,
++ dst_stride,
++ width,
++ height);
++ return TRUE;
+ }
+
+ static pixman_bool_t
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index 5000f91..8c5d4fd 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -10,6 +10,7 @@
+
+ #include "pixman.h"
+ #include <time.h>
++#include <string.h>
+ #include <assert.h>
+
+ #include "pixman-compiler.h"
+@@ -794,4 +795,46 @@ void pixman_timer_register (pixman_timer_t *timer);
+
+ #endif /* PIXMAN_TIMERS */
+
++/* a helper function, can blit 8-bit images with src/dst overlapping support */
++static inline void
++pixman_blt_helper (uint8_t *src_bytes,
++ uint8_t *dst_bytes,
++ int src_stride,
++ int dst_stride,
++ int width,
++ int height)
++{
++ /*
++ * The second part of this check is not strictly needed, but it prevents
++ * unnecessary upside-down processing of areas which belong to different
++ * images. Upside-down processing can be slower with fixed-distance-ahead
++ * prefetch and perceived as having more tearing.
++ */
++ if (src_bytes < dst_bytes + width &&
++ src_bytes + src_stride * height > dst_bytes)
++ {
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++ /* Horizontal scrolling to the left needs memmove */
++ if (src_bytes + width > dst_bytes)
++ {
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return;
++ }
++ }
++ while (--height >= 0)
++ {
++ memcpy (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++}
++
+ #endif /* PIXMAN_PRIVATE_H */
+--
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
new file mode 100644
index 0000000000..74c7b45bc4
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
@@ -0,0 +1,91 @@
+From 7ca32542c957ff308a6ca7e3715e6552a65ae395 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:47 +0300
+Subject: [PATCH 4/6] Support of overlapping src/dst for pixman_blt_mmx
+
+---
+ pixman/pixman-mmx.c | 55 +++++++++++++++++++++++++++++---------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
+index 819e3a0..dcccadb 100644
+--- a/pixman/pixman-mmx.c
++++ b/pixman/pixman-mmx.c
+@@ -3002,34 +3002,43 @@ pixman_blt_mmx (uint32_t *src_bits,
+ {
+ uint8_t * src_bytes;
+ uint8_t * dst_bytes;
+- int byte_width;
++ int bpp;
+
+- if (src_bpp != dst_bpp)
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
+- if (src_bpp == 16)
+- {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+- src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 2 * width;
+- src_stride *= 2;
+- dst_stride *= 2;
+- }
+- else if (src_bpp == 32)
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
+ {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 4 * width;
+- src_stride *= 4;
+- dst_stride *= 4;
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
+ }
+- else
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+ {
+- return FALSE;
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using MMX */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
+ }
+
+ while (height--)
+@@ -3039,7 +3048,7 @@ pixman_blt_mmx (uint32_t *src_bits,
+ uint8_t *d = dst_bytes;
+ src_bytes += src_stride;
+ dst_bytes += dst_stride;
+- w = byte_width;
++ w = width;
+
+ while (w >= 2 && ((unsigned long)d & 3))
+ {
+--
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
new file mode 100644
index 0000000000..3704fbf1cf
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
@@ -0,0 +1,91 @@
+From edc80b41c6480b7c80ec5f7c835c92b2debb3774 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:54 +0300
+Subject: [PATCH 5/6] Support of overlapping src/dst for pixman_blt_sse2
+
+---
+ pixman/pixman-sse2.c | 55 +++++++++++++++++++++++++++++--------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
+index 78b0ad1..b84636b 100644
+--- a/pixman/pixman-sse2.c
++++ b/pixman/pixman-sse2.c
+@@ -5300,34 +5300,43 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ {
+ uint8_t * src_bytes;
+ uint8_t * dst_bytes;
+- int byte_width;
++ int bpp;
+
+- if (src_bpp != dst_bpp)
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
+- if (src_bpp == 16)
+- {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+- src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 2 * width;
+- src_stride *= 2;
+- dst_stride *= 2;
+- }
+- else if (src_bpp == 32)
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
+ {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 4 * width;
+- src_stride *= 4;
+- dst_stride *= 4;
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
+ }
+- else
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+ {
+- return FALSE;
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using SSE2 */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
+ }
+
+ cache_prefetch ((__m128i*)src_bytes);
+@@ -5340,7 +5349,7 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ uint8_t *d = dst_bytes;
+ src_bytes += src_stride;
+ dst_bytes += dst_stride;
+- w = byte_width;
++ w = width;
+
+ cache_prefetch_next ((__m128i*)s);
+ cache_prefetch_next ((__m128i*)d);
+--
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
new file mode 100644
index 0000000000..7c22483a2e
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
@@ -0,0 +1,94 @@
+From 86870ff530b5e435034bd80207e5758466d96cff Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 18 Nov 2009 06:08:48 +0200
+Subject: [PATCH 6/6] Support of overlapping src/dst for pixman_blt_neon
+
+---
+ pixman/pixman-arm-neon.c | 63 ++++++++++++++++++++++++++++++++++++++-------
+ 1 files changed, 53 insertions(+), 10 deletions(-)
+
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 495fda4..c632ff5 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -357,26 +357,66 @@
+ int width,
+ int height)
+ {
+- if (src_bpp != dst_bpp)
++ uint8_t * src_bytes;
++ uint8_t * dst_bytes;
++ int bpp;
++
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
++ {
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
++ }
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
++ {
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using NEON */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
++ }
++
+ switch (src_bpp)
+ {
+ case 16:
+ pixman_composite_src_0565_0565_asm_neon (
+- width, height,
+- (uint16_t *)(((char *) dst_bits) +
+- dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
+- (uint16_t *)(((char *) src_bits) +
+- src_y * src_stride * 4 + src_x * 2), src_stride * 2);
++ width >> 1,
++ height,
++ (uint16_t *) dst_bytes,
++ dst_stride >> 1,
++ (uint16_t *) src_bytes,
++ src_stride >> 1);
+ return TRUE;
+ case 32:
+ pixman_composite_src_8888_8888_asm_neon (
+- width, height,
+- (uint32_t *)(((char *) dst_bits) +
+- dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
+- (uint32_t *)(((char *) src_bits) +
+- src_y * src_stride * 4 + src_x * 4), src_stride);
++ width >> 2,
++ height,
++ (uint32_t *) dst_bytes,
++ dst_stride >> 2,
++ (uint32_t *) src_bytes,
++ src_stride >> 2);
+ return TRUE;
+ default:
+ return FALSE;
+--
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman-0.17.8/1-composite.patch b/recipes/xorg-lib/pixman-0.17.8/1-composite.patch
new file mode 100644
index 0000000000..31bfa39cc4
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/1-composite.patch
@@ -0,0 +1,161 @@
+From 78652135f48c6a304fc2e75bc0e440b8b2034a4d Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Tue, 23 Feb 2010 23:44:00 +0000
+Subject: ARM: added 'neon_composite_over_n_8888_8888_ca' fast path
+
+This fast path function improves performance of 'firefox-talos-gfx'
+cairo-perf trace.
+
+Benchmark from ARM Cortex-A8 @720MHz
+
+before:
+
+[ # ] backend test min(s) median(s) stddev. count
+[ 0] image firefox-talos-gfx 139.969 141.176 0.35% 6/6
+
+after:
+
+[ # ] backend test min(s) median(s) stddev. count
+[ 0] image firefox-talos-gfx 111.810 112.196 0.23% 6/6
+---
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index 2986884..e90d662 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -1026,6 +1026,111 @@ generate_composite_function \
+
+ /******************************************************************************/
+
++.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_head
++ /*
++ * 'combine_mask_ca' replacement
++ *
++ * input: solid src (n) in {d8, d9, d10, d11}
++ * dest in {d4, d5, d6, d7 }
++ * mask in {d24, d25, d26, d27}
++ * output: updated src in {d0, d1, d2, d3 }
++ * updated mask in {d24, d25, d26, d3 }
++ */
++ vmull.u8 q0, d24, d8
++ vmull.u8 q1, d25, d9
++ vmull.u8 q6, d26, d10
++ vmull.u8 q7, d27, d11
++ vmull.u8 q9, d11, d25
++ vmull.u8 q12, d11, d24
++ vmull.u8 q13, d11, d26
++ vrshr.u16 q8, q0, #8
++ vrshr.u16 q10, q1, #8
++ vrshr.u16 q11, q6, #8
++ vraddhn.u16 d0, q0, q8
++ vraddhn.u16 d1, q1, q10
++ vraddhn.u16 d2, q6, q11
++ vrshr.u16 q11, q12, #8
++ vrshr.u16 q8, q9, #8
++ vrshr.u16 q6, q13, #8
++ vrshr.u16 q10, q7, #8
++ vraddhn.u16 d24, q12, q11
++ vraddhn.u16 d25, q9, q8
++ vraddhn.u16 d26, q13, q6
++ vraddhn.u16 d3, q7, q10
++ /*
++ * 'combine_over_ca' replacement
++ *
++ * output: updated dest in {d28, d29, d30, d31}
++ */
++ vmvn.8 d24, d24
++ vmvn.8 d25, d25
++ vmull.u8 q8, d24, d4
++ vmull.u8 q9, d25, d5
++ vmvn.8 d26, d26
++ vmvn.8 d27, d3
++ vmull.u8 q10, d26, d6
++ vmull.u8 q11, d27, d7
++.endm
++
++.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_tail
++ /* ... continue 'combine_over_ca' replacement */
++ vrshr.u16 q14, q8, #8
++ vrshr.u16 q15, q9, #8
++ vrshr.u16 q6, q10, #8
++ vrshr.u16 q7, q11, #8
++ vraddhn.u16 d28, q14, q8
++ vraddhn.u16 d29, q15, q9
++ vraddhn.u16 d30, q6, q10
++ vraddhn.u16 d31, q7, q11
++ vqadd.u8 q14, q0, q14
++ vqadd.u8 q15, q1, q15
++.endm
++
++.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_tail_head
++ vrshr.u16 q14, q8, #8
++ vrshr.u16 q15, q9, #8
++ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
++ vrshr.u16 q6, q10, #8
++ vrshr.u16 q7, q11, #8
++ vraddhn.u16 d28, q14, q8
++ vraddhn.u16 d29, q15, q9
++ vraddhn.u16 d30, q6, q10
++ vraddhn.u16 d31, q7, q11
++ vld4.8 {d24, d25, d26, d27}, [MASK]!
++ vqadd.u8 q14, q0, q14
++ vqadd.u8 q15, q1, q15
++ cache_preload 8, 8
++ pixman_composite_over_n_8888_8888_ca_process_pixblock_head
++ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
++.endm
++
++.macro pixman_composite_over_n_8888_8888_ca_init
++ add DUMMY, sp, #ARGS_STACK_OFFSET
++ vpush {d8-d15}
++ vld1.32 {d11[0]}, [DUMMY]
++ vdup.8 d8, d11[0]
++ vdup.8 d9, d11[1]
++ vdup.8 d10, d11[2]
++ vdup.8 d11, d11[3]
++.endm
++
++.macro pixman_composite_over_n_8888_8888_ca_cleanup
++ vpop {d8-d15}
++.endm
++
++generate_composite_function \
++ pixman_composite_over_n_8888_8888_ca_asm_neon, 0, 32, 32, \
++ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
++ 8, /* number of pixels, processed in a single block */ \
++ 5, /* prefetch distance */ \
++ pixman_composite_over_n_8888_8888_ca_init, \
++ pixman_composite_over_n_8888_8888_ca_cleanup, \
++ pixman_composite_over_n_8888_8888_ca_process_pixblock_head, \
++ pixman_composite_over_n_8888_8888_ca_process_pixblock_tail, \
++ pixman_composite_over_n_8888_8888_ca_process_pixblock_tail_head
++
++/******************************************************************************/
++
+ .macro pixman_composite_add_n_8_8_process_pixblock_head
+ /* expecting source data in {d8, d9, d10, d11} */
+ /* d8 - blue, d9 - green, d10 - red, d11 - alpha */
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 557301e..3f0e18e 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -269,6 +269,7 @@ BIND_SRC_NULL_DST(over_8888_8888, uint32_t, 1, uint32_t, 1)
+
+ BIND_N_MASK_DST(over_n_8_0565, uint8_t, 1, uint16_t, 1)
+ BIND_N_MASK_DST(over_n_8_8888, uint8_t, 1, uint32_t, 1)
++BIND_N_MASK_DST(over_n_8888_8888_ca, uint32_t, 1, uint32_t, 1)
+ BIND_N_MASK_DST(add_n_8_8, uint8_t, 1, uint8_t, 1)
+
+ BIND_SRC_N_DST(over_8888_n_8888, uint32_t, 1, uint32_t, 1)
+@@ -412,6 +413,10 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+ PIXMAN_STD_FAST_PATH (OVER, solid, null, r5g6b5, neon_composite_over_n_0565),
+ PIXMAN_STD_FAST_PATH (OVER, solid, null, a8r8g8b8, neon_composite_over_n_8888),
+ PIXMAN_STD_FAST_PATH (OVER, solid, null, x8r8g8b8, neon_composite_over_n_8888),
++ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, a8r8g8b8, neon_composite_over_n_8888_8888_ca),
++ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, x8r8g8b8, neon_composite_over_n_8888_8888_ca),
++ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, a8b8g8r8, neon_composite_over_n_8888_8888_ca),
++ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, x8b8g8r8, neon_composite_over_n_8888_8888_ca),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, a8r8g8b8, neon_composite_over_8888_n_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, x8r8g8b8, neon_composite_over_8888_n_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8, a8r8g8b8, neon_composite_over_8888_8_8888),
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/xorg-lib/pixman-0.17.8/2-composite.patch b/recipes/xorg-lib/pixman-0.17.8/2-composite.patch
new file mode 100644
index 0000000000..84d4d9c961
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/2-composite.patch
@@ -0,0 +1,102 @@
+From 6e0df74dbfca26f92a18d968e1bf410bae134c8a Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 24 Feb 2010 00:26:57 +0000
+Subject: ARM: added 'neon_composite_src_x888_8888' fast path
+
+This fast path function improves performance of 'gnome-system-monitor'
+cairo-perf trace.
+
+Benchmark from ARM Cortex-A8 @720MHz
+
+before:
+
+[ # ] backend test min(s) median(s) stddev. count
+[ 0] image gnome-system-monitor 68.838 68.899 0.05% 5/6
+
+after:
+
+[ # ] backend test min(s) median(s) stddev. count
+[ 0] image gnome-system-monitor 53.336 53.384 0.09% 6/6
+---
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index e90d662..f2643de 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -947,6 +947,44 @@ generate_composite_function \
+
+ /******************************************************************************/
+
++.macro pixman_composite_src_x888_8888_process_pixblock_head
++ vorr q0, q0, q2
++ vorr q1, q1, q2
++.endm
++
++.macro pixman_composite_src_x888_8888_process_pixblock_tail
++.endm
++
++.macro pixman_composite_src_x888_8888_process_pixblock_tail_head
++ vst1.32 {d0, d1, d2, d3}, [DST_W, :128]!
++ vld1.32 {d0, d1, d2, d3}, [SRC]!
++ vorr q0, q0, q2
++ vorr q1, q1, q2
++ cache_preload 8, 8
++.endm
++
++.macro pixman_composite_src_x888_8888_init
++ vmov.u8 q2, #0xFF
++ vshl.u32 q2, q2, #24
++.endm
++
++generate_composite_function \
++ pixman_composite_src_x888_8888_asm_neon, 32, 0, 32, \
++ FLAG_DST_WRITEONLY, \
++ 8, /* number of pixels, processed in a single block */ \
++ 10, /* prefetch distance */ \
++ pixman_composite_src_x888_8888_init, \
++ default_cleanup, \
++ pixman_composite_src_x888_8888_process_pixblock_head, \
++ pixman_composite_src_x888_8888_process_pixblock_tail, \
++ pixman_composite_src_x888_8888_process_pixblock_tail_head, \
++ 0, /* dst_w_basereg */ \
++ 0, /* dst_r_basereg */ \
++ 0, /* src_basereg */ \
++ 0 /* mask_basereg */
++
++/******************************************************************************/
++
+ .macro pixman_composite_over_n_8_8888_process_pixblock_head
+ /* expecting deinterleaved source data in {d8, d9, d10, d11} */
+ /* d8 - blue, d9 - green, d10 - red, d11 - alpha */
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 3f0e18e..0a7ac31 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -251,6 +251,7 @@ neon_composite_##name (pixman_implementation_t *imp, \
+
+
+ BIND_SRC_NULL_DST(src_8888_8888, uint32_t, 1, uint32_t, 1)
++BIND_SRC_NULL_DST(src_x888_8888, uint32_t, 1, uint32_t, 1)
+ BIND_SRC_NULL_DST(src_0565_0565, uint16_t, 1, uint16_t, 1)
+ BIND_SRC_NULL_DST(src_0888_0888, uint8_t, 3, uint8_t, 3)
+ BIND_SRC_NULL_DST(src_8888_0565, uint32_t, 1, uint16_t, 1)
+@@ -400,6 +401,10 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+ PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, x8r8g8b8, neon_composite_src_8888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, x8b8g8r8, neon_composite_src_8888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, x8b8g8r8, neon_composite_src_8888_8888),
++ PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, a8r8g8b8, neon_composite_src_8888_8888),
++ PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, a8b8g8r8, neon_composite_src_8888_8888),
++ PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, a8r8g8b8, neon_composite_src_x888_8888),
++ PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, a8b8g8r8, neon_composite_src_x888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, r8g8b8, null, r8g8b8, neon_composite_src_0888_0888),
+ PIXMAN_STD_FAST_PATH (SRC, b8g8r8, null, x8r8g8b8, neon_composite_src_0888_8888_rev),
+ PIXMAN_STD_FAST_PATH (SRC, b8g8r8, null, r5g6b5, neon_composite_src_0888_0565_rev),
+@@ -430,6 +435,7 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, x8r8g8b8, neon_composite_over_8888_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, a8b8g8r8, neon_composite_over_8888_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, x8b8g8r8, neon_composite_over_8888_8888),
++ PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, null, a8r8g8b8, neon_composite_src_x888_8888),
+ PIXMAN_STD_FAST_PATH (ADD, solid, a8, a8, neon_composite_add_n_8_8),
+ PIXMAN_STD_FAST_PATH (ADD, a8, a8, a8, neon_composite_add_8_8_8),
+ PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, a8r8g8b8, a8r8g8b8, neon_composite_add_8888_8888_8888),
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/xorg-lib/pixman-0.17.8/3-composite.patch b/recipes/xorg-lib/pixman-0.17.8/3-composite.patch
new file mode 100644
index 0000000000..06e40fe869
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/3-composite.patch
@@ -0,0 +1,108 @@
+From 19fc0c4c8d28796f0fbc2c8f47edc130851ae3a5 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 24 Feb 2010 02:14:45 +0000
+Subject: ARM: added 'neon_composite_over_reverse_n_8888' fast path
+
+This fast path function improves performance of 'poppler' cairo-perf trace.
+
+Benchmark from ARM Cortex-A8 @720MHz
+
+before:
+
+[ # ] backend test min(s) median(s) stddev. count
+[ 0] image poppler 38.986 39.158 0.23% 6/6
+
+after:
+
+[ # ] backend test min(s) median(s) stddev. count
+[ 0] image poppler 24.981 25.136 0.28% 6/6
+---
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index f2643de..eb8cc4c 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -680,6 +680,61 @@ generate_composite_function \
+
+ /******************************************************************************/
+
++.macro pixman_composite_over_reverse_n_8888_process_pixblock_tail_head
++ vrshr.u16 q14, q8, #8
++ PF add PF_X, PF_X, #8
++ PF tst PF_CTL, #0xF
++ vrshr.u16 q15, q9, #8
++ vrshr.u16 q12, q10, #8
++ vrshr.u16 q13, q11, #8
++ PF addne PF_X, PF_X, #8
++ PF subne PF_CTL, PF_CTL, #1
++ vraddhn.u16 d28, q14, q8
++ vraddhn.u16 d29, q15, q9
++ PF cmp PF_X, ORIG_W
++ vraddhn.u16 d30, q12, q10
++ vraddhn.u16 d31, q13, q11
++ vqadd.u8 q14, q0, q14
++ vqadd.u8 q15, q1, q15
++ vld4.8 {d0, d1, d2, d3}, [DST_R, :128]!
++ vmvn.8 d22, d3
++ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
++ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
++ PF subge PF_X, PF_X, ORIG_W
++ vmull.u8 q8, d22, d4
++ PF subges PF_CTL, PF_CTL, #0x10
++ vmull.u8 q9, d22, d5
++ vmull.u8 q10, d22, d6
++ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
++ vmull.u8 q11, d22, d7
++.endm
++
++.macro pixman_composite_over_reverse_n_8888_init
++ add DUMMY, sp, #ARGS_STACK_OFFSET
++ vld1.32 {d7[0]}, [DUMMY]
++ vdup.8 d4, d7[0]
++ vdup.8 d5, d7[1]
++ vdup.8 d6, d7[2]
++ vdup.8 d7, d7[3]
++.endm
++
++generate_composite_function \
++ pixman_composite_over_reverse_n_8888_asm_neon, 0, 0, 32, \
++ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
++ 8, /* number of pixels, processed in a single block */ \
++ 5, /* prefetch distance */ \
++ pixman_composite_over_reverse_n_8888_init, \
++ default_cleanup, \
++ pixman_composite_over_8888_8888_process_pixblock_head, \
++ pixman_composite_over_8888_8888_process_pixblock_tail, \
++ pixman_composite_over_reverse_n_8888_process_pixblock_tail_head, \
++ 28, /* dst_w_basereg */ \
++ 0, /* dst_r_basereg */ \
++ 4, /* src_basereg */ \
++ 24 /* mask_basereg */
++
++/******************************************************************************/
++
+ .macro pixman_composite_over_n_8_0565_process_pixblock_head
+ /* in */
+ vmull.u8 q0, d24, d8
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 0a7ac31..30c5056 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -264,6 +264,7 @@ BIND_SRC_NULL_DST(add_8888_8888, uint32_t, 1, uint32_t, 1)
+
+ BIND_N_NULL_DST(over_n_0565, uint16_t, 1)
+ BIND_N_NULL_DST(over_n_8888, uint32_t, 1)
++BIND_N_NULL_DST(over_reverse_n_8888, uint32_t, 1)
+
+ BIND_SRC_NULL_DST(over_8888_0565, uint32_t, 1, uint16_t, 1)
+ BIND_SRC_NULL_DST(over_8888_8888, uint32_t, 1, uint32_t, 1)
+@@ -442,6 +443,8 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+ PIXMAN_STD_FAST_PATH (ADD, a8, null, a8, neon_composite_add_8000_8000),
+ PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, null, a8r8g8b8, neon_composite_add_8888_8888),
+ PIXMAN_STD_FAST_PATH (ADD, a8b8g8r8, null, a8b8g8r8, neon_composite_add_8888_8888),
++ PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8r8g8b8, neon_composite_over_reverse_n_8888),
++ PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8b8g8r8, neon_composite_over_reverse_n_8888),
+
+ { PIXMAN_OP_NONE },
+ };
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/xorg-lib/pixman.inc b/recipes/xorg-lib/pixman.inc
new file mode 100644
index 0000000000..1828eef4ce
--- /dev/null
+++ b/recipes/xorg-lib/pixman.inc
@@ -0,0 +1,13 @@
+SECTION = "libs"
+PRIORITY = "optional"
+DESCRIPTION = "Low-level pixel manipulation library."
+LICENSE = "X11"
+
+BBCLASSEXTEND="native"
+
+SRC_URI = "http://cairographics.org/releases/${BPN}-${PV}.tar.gz;name=archive "
+
+INC_PR = "r5"
+
+inherit autotools_stage pkgconfig
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
diff --git a/recipes/xorg-lib/pixman/0001-ARM-NEON-optimized-pixman_blt.patch b/recipes/xorg-lib/pixman/0001-ARM-NEON-optimized-pixman_blt.patch
deleted file mode 100644
index ed2b68d782..0000000000
--- a/recipes/xorg-lib/pixman/0001-ARM-NEON-optimized-pixman_blt.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From e94b8057370a430eb91b914ed4c0050f72e9fa37 Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Wed, 18 Nov 2009 04:26:18 +0200
-Subject: [PATCH 1/6] ARM: NEON optimized pixman_blt
-
----
- pixman/pixman-arm-neon.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 67 insertions(+), 0 deletions(-)
-
-diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index 2ed8b4b..495fda4 100644
---- a/pixman/pixman-arm-neon.c
-+++ b/pixman/pixman-arm-neon.c
-@@ -292,6 +292,43 @@ pixman_fill_neon (uint32_t *bits,
- }
- }
-
-+static pixman_bool_t
-+pixman_blt_neon (uint32_t *src_bits,
-+ uint32_t *dst_bits,
-+ int src_stride,
-+ int dst_stride,
-+ int src_bpp,
-+ int dst_bpp,
-+ int src_x,
-+ int src_y,
-+ int dst_x,
-+ int dst_y,
-+ int width,
-+ int height)
-+{
-+ switch (src_bpp)
-+ {
-+ case 16:
-+ pixman_composite_src_0565_0565_asm_neon (
-+ width, height,
-+ (uint16_t *)(((char *) dst_bits) +
-+ dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
-+ (uint16_t *)(((char *) src_bits) +
-+ src_y * src_stride * 4 + src_x * 2), src_stride * 2);
-+ return TRUE;
-+ case 32:
-+ pixman_composite_src_8888_8888_asm_neon (
-+ width, height,
-+ (uint32_t *)(((char *) dst_bits) +
-+ dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
-+ (uint32_t *)(((char *) src_bits) +
-+ src_y * src_stride * 4 + src_x * 4), src_stride);
-+ return TRUE;
-+ default:
-+ return FALSE;
-+ }
-+}
-+
- static const pixman_fast_path_t arm_neon_fast_path_array[] =
- {
- { PIXMAN_OP_SRC, PIXMAN_r5g6b5, PIXMAN_null, PIXMAN_r5g6b5, neon_composite_src_0565_0565 },
-@@ -361,6 +398,35 @@ arm_neon_composite (pixman_implementation_t *imp,
- }
-
- static pixman_bool_t
-+arm_neon_blt (pixman_implementation_t *imp,
-+ uint32_t * src_bits,
-+ uint32_t * dst_bits,
-+ int src_stride,
-+ int dst_stride,
-+ int src_bpp,
-+ int dst_bpp,
-+ int src_x,
-+ int src_y,
-+ int dst_x,
-+ int dst_y,
-+ int width,
-+ int height)
-+{
-+ if (!pixman_blt_neon (
-+ src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
-+ src_x, src_y, dst_x, dst_y, width, height))
-+
-+ {
-+ return _pixman_implementation_blt (
-+ imp->delegate,
-+ src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
-+ src_x, src_y, dst_x, dst_y, width, height);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static pixman_bool_t
- arm_neon_fill (pixman_implementation_t *imp,
- uint32_t * bits,
- int stride,
-@@ -385,6 +451,7 @@ _pixman_implementation_create_arm_neon (void)
- pixman_implementation_t *imp = _pixman_implementation_create (general);
-
- imp->composite = arm_neon_composite;
-+ imp->blt = arm_neon_blt;
- imp->fill = arm_neon_fill;
-
- return imp;
---
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
new file mode 100644
index 0000000000..a2cda2438e
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
@@ -0,0 +1,114 @@
+From 8ea1a333de202018a862a7b04b94479d3109274b Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Tue, 16 Mar 2010 16:55:28 +0100
+Subject: [PATCH 1/5] Generic C implementation of pixman_blt with overlapping support
+
+Uses memcpy/memmove functions to copy pixels, can handle the
+case when both source and destination areas are in the same
+image (this is useful for scrolling).
+
+It is assumed that copying direction is only important when
+using the same image for both source and destination (and
+src_stride == dst_stride). Copying direction is undefined
+for the images with different source and destination stride
+which happen to be in the overlapped areas (but this is an
+unrealistic case anyway).
+---
+ pixman/pixman-general.c | 21 ++++++++++++++++++---
+ pixman/pixman-private.h | 43 +++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 61 insertions(+), 3 deletions(-)
+
+diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
+index bddf79a..f525744 100644
+--- a/pixman/pixman-general.c
++++ b/pixman/pixman-general.c
+@@ -285,9 +285,24 @@ general_blt (pixman_implementation_t *imp,
+ int width,
+ int height)
+ {
+- /* We can't blit unless we have sse2 or mmx */
+-
+- return FALSE;
++ uint8_t *dst_bytes = (uint8_t *)dst_bits;
++ uint8_t *src_bytes = (uint8_t *)src_bits;
++ int bpp;
++
++ if (src_bpp != dst_bpp || src_bpp & 7)
++ return FALSE;
++
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp,
++ dst_bytes + dst_y * dst_stride + dst_x * bpp,
++ src_stride,
++ dst_stride,
++ width,
++ height);
++ return TRUE;
+ }
+
+ static pixman_bool_t
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index d5767af..eeb677d 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -10,6 +10,7 @@
+
+ #include "pixman.h"
+ #include <time.h>
++#include <string.h>
+ #include <assert.h>
+ #include <stdio.h>
+ #include <string.h>
+@@ -867,4 +868,46 @@ void pixman_timer_register (pixman_timer_t *timer);
+
+ #endif /* PIXMAN_TIMERS */
+
++/* a helper function, can blit 8-bit images with src/dst overlapping support */
++static inline void
++pixman_blt_helper (uint8_t *src_bytes,
++ uint8_t *dst_bytes,
++ int src_stride,
++ int dst_stride,
++ int width,
++ int height)
++{
++ /*
++ * The second part of this check is not strictly needed, but it prevents
++ * unnecessary upside-down processing of areas which belong to different
++ * images. Upside-down processing can be slower with fixed-distance-ahead
++ * prefetch and perceived as having more tearing.
++ */
++ if (src_bytes < dst_bytes + width &&
++ src_bytes + src_stride * height > dst_bytes)
++ {
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++ /* Horizontal scrolling to the left needs memmove */
++ if (src_bytes + width > dst_bytes)
++ {
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return;
++ }
++ }
++ while (--height >= 0)
++ {
++ memcpy (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++}
++
+ #endif /* PIXMAN_PRIVATE_H */
+--
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
new file mode 100644
index 0000000000..003337f48d
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
@@ -0,0 +1,91 @@
+From 3170d9f5e927681a2516bcec52b317d1d4785e25 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:47 +0300
+Subject: [PATCH 2/5] Support of overlapping src/dst for pixman_blt_mmx
+
+---
+ pixman/pixman-mmx.c | 55 +++++++++++++++++++++++++++++---------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
+index e084e7f..6212b31 100644
+--- a/pixman/pixman-mmx.c
++++ b/pixman/pixman-mmx.c
+@@ -2994,34 +2994,43 @@ pixman_blt_mmx (uint32_t *src_bits,
+ {
+ uint8_t * src_bytes;
+ uint8_t * dst_bytes;
+- int byte_width;
++ int bpp;
+
+- if (src_bpp != dst_bpp)
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
+- if (src_bpp == 16)
+- {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+- src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 2 * width;
+- src_stride *= 2;
+- dst_stride *= 2;
+- }
+- else if (src_bpp == 32)
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
+ {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 4 * width;
+- src_stride *= 4;
+- dst_stride *= 4;
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
+ }
+- else
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+ {
+- return FALSE;
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using MMX */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
+ }
+
+ while (height--)
+@@ -3031,7 +3040,7 @@ pixman_blt_mmx (uint32_t *src_bits,
+ uint8_t *d = dst_bytes;
+ src_bytes += src_stride;
+ dst_bytes += dst_stride;
+- w = byte_width;
++ w = width;
+
+ while (w >= 2 && ((unsigned long)d & 3))
+ {
+--
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0002-Test-program-for-pixman_blt-function.patch b/recipes/xorg-lib/pixman/0002-Test-program-for-pixman_blt-function.patch
deleted file mode 100644
index 143e79dabf..0000000000
--- a/recipes/xorg-lib/pixman/0002-Test-program-for-pixman_blt-function.patch
+++ /dev/null
@@ -1,178 +0,0 @@
-From 364406e03f9651aacb1bc684de6c00a27f9df66d Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Mon, 19 Oct 2009 20:32:55 +0300
-Subject: [PATCH 2/6] Test program for pixman_blt function
-
-It can do some basic correctness tests and also check whether
-overlapping of source and destination images is supported.
----
- test/Makefile.am | 2 +
- test/overlapped-blt-test.c | 136 ++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 138 insertions(+), 0 deletions(-)
- create mode 100644 test/overlapped-blt-test.c
-
-diff --git a/test/Makefile.am b/test/Makefile.am
-index 89d32e9..40c305f 100644
---- a/test/Makefile.am
-+++ b/test/Makefile.am
-@@ -9,6 +9,7 @@ TESTPROGRAMS = \
- fetch-test \
- oob-test \
- window-test \
-+ overlapped-blt-test \
- trap-crasher
-
- fetch_test_LDADD = $(TEST_LDADD)
-@@ -17,6 +18,7 @@ composite_LDADD = $(TEST_LDADD)
- trap_crasher_LDADD = $(TEST_LDADD)
- oob_test_LDADD = $(TEST_LDADD)
- window_test_LDADD = $(TEST_LDADD)
-+overlapped_blt_test_LDADD = $(TEST_LDADD)
-
- blitters_test_LDADD = $(TEST_LDADD)
- blitters_test_SOURCES = blitters-test.c utils.c utils.h
-diff --git a/test/overlapped-blt-test.c b/test/overlapped-blt-test.c
-new file mode 100644
-index 0000000..95fbc54
---- /dev/null
-+++ b/test/overlapped-blt-test.c
-@@ -0,0 +1,136 @@
-+/*
-+ * A small test program which can check whether pixman_blt function
-+ * can support overlapping of source and destination images.
-+ * Efficient blit with overlapping is useful for scrolling.
-+ */
-+
-+#include <stdint.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include "pixman.h"
-+
-+/* reference implementation (slow) */
-+static void
-+trivial_copy8_2d (
-+ uint8_t *dst, int dst_stride,
-+ uint8_t *src, int src_stride,
-+ int dx, int dy, int sx, int sy,
-+ int w, int h)
-+{
-+ int x, y;
-+ uint8_t *tmp = malloc (src_stride * (sy + h));
-+ memcpy (tmp, src, src_stride * (sy + h));
-+ for (y = 0; y < h; y++)
-+ {
-+ for (x = 0; x < w; x++)
-+ {
-+ *(dst + (dy + y) * dst_stride + dx + x) =
-+ *(tmp + (sy + y) * src_stride + sx + x);
-+ }
-+ }
-+ free (tmp);
-+}
-+
-+static void
-+trivial_copy_2d (
-+ uint8_t *dst, int dst_stride,
-+ uint8_t *src, int src_stride,
-+ int dx, int dy, int sx, int sy,
-+ int w, int h, int bpp)
-+{
-+ trivial_copy8_2d (dst, dst_stride, src, src_stride,
-+ dx * (bpp / 8), dy, sx * (bpp / 8), sy, w * (bpp / 8), h);
-+}
-+
-+/* now the test itself */
-+
-+#define ST_UNSUPPORTED 1
-+#define ST_NORMAL_BUG 2
-+#define ST_OVERLAPPED_BUG 4
-+
-+#define MAX_SIZE_X 64
-+#define MAX_SIZE_Y 64
-+
-+static void print_result(int bpp, int flags)
-+{
-+ printf("bpp=%d, supported=%d, normal_ok=%d, overlapped_ok=%d\n",
-+ bpp,
-+ !(flags & ST_UNSUPPORTED),
-+ !(flags & ST_NORMAL_BUG),
-+ !(flags & ST_OVERLAPPED_BUG));
-+}
-+
-+int main()
-+{
-+ int c = 100000, r;
-+ int bpp_st[33] = {0};
-+ srand(0);
-+ while (c-- > 0)
-+ {
-+ uint8_t *src1, *src2, *src3;
-+ int i;
-+ int sizex = rand() % MAX_SIZE_X + 1;
-+ int sizey = rand() % MAX_SIZE_Y + 1;
-+ int sx = rand() % sizex;
-+ int sy = rand() % sizey;
-+ int dx = rand() % sizex;
-+ int dy = rand() % sizey;
-+ int w = rand() % sizex;
-+ int h = rand() % sizex;
-+ int bpp = 8 * (1 << (rand() % 3));
-+ int stride_delta = rand() % 8;
-+ int bufsize;
-+ if ((sizex + stride_delta) % 4)
-+ stride_delta += 4 - ((sizex + stride_delta) % 4);
-+ bufsize = (sizex + stride_delta) * sizey * bpp / 8;
-+ src1 = malloc (bufsize);
-+ src2 = malloc (bufsize);
-+ src3 = malloc (bufsize);
-+ for (i = 0; i < bufsize; i++)
-+ src1[i] = rand();
-+ memcpy (src2, src1, bufsize);
-+ memcpy (src3, src1, bufsize);
-+ if (sx + w > sizex)
-+ w = sizex - sx;
-+ if (dx + w > sizex)
-+ w = sizex - dx;
-+ if (sy + h > sizey)
-+ h = sizey - sy;
-+ if (dy + h > sizey)
-+ h = sizey - dy;
-+ /* get reference result */
-+ trivial_copy_2d (src1, (sizex + stride_delta) * bpp / 8,
-+ src1, (sizex + stride_delta) * bpp / 8,
-+ dx, dy, sx, sy, w, h, bpp);
-+ /* check nonoverlapped pixman result */
-+ r = pixman_blt ((uint32_t *)src3, (uint32_t *)src2,
-+ (sizex + stride_delta) * bpp / 8 / 4,
-+ (sizex + stride_delta) * bpp / 8 / 4,
-+ bpp, bpp, sx, sy, dx, dy, w, h);
-+ if (!r)
-+ bpp_st[bpp] |= ST_UNSUPPORTED;
-+ if (memcmp (src1, src2, bufsize) != 0)
-+ bpp_st[bpp] |= ST_NORMAL_BUG;
-+ /* check overlapped pixman result */
-+ r = pixman_blt ((uint32_t *)src3, (uint32_t *)src3,
-+ (sizex + stride_delta) * bpp / 8 / 4,
-+ (sizex + stride_delta) * bpp / 8 / 4,
-+ bpp, bpp, sx, sy, dx, dy, w, h);
-+ if (!r)
-+ bpp_st[bpp] |= ST_UNSUPPORTED;
-+ if (memcmp (src1, src3, bufsize) != 0)
-+ bpp_st[bpp] |= ST_OVERLAPPED_BUG;
-+ /* free buffers */
-+ free (src1);
-+ free (src2);
-+ free (src3);
-+ }
-+
-+ /* report results */
-+ print_result (8, bpp_st[8]);
-+ print_result (16, bpp_st[16]);
-+ print_result (32, bpp_st[32]);
-+
-+ return 0;
-+}
---
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
new file mode 100644
index 0000000000..7e8f34f6bd
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
@@ -0,0 +1,91 @@
+From f07cd58c643b490dcb1ef7be2642926cfeca1e69 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:54 +0300
+Subject: [PATCH 3/5] Support of overlapping src/dst for pixman_blt_sse2
+
+---
+ pixman/pixman-sse2.c | 55 +++++++++++++++++++++++++++++--------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
+index 946e7ba..66053ae 100644
+--- a/pixman/pixman-sse2.c
++++ b/pixman/pixman-sse2.c
+@@ -5299,34 +5299,43 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ {
+ uint8_t * src_bytes;
+ uint8_t * dst_bytes;
+- int byte_width;
++ int bpp;
+
+- if (src_bpp != dst_bpp)
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
+- if (src_bpp == 16)
+- {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+- src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 2 * width;
+- src_stride *= 2;
+- dst_stride *= 2;
+- }
+- else if (src_bpp == 32)
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
+ {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 4 * width;
+- src_stride *= 4;
+- dst_stride *= 4;
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
+ }
+- else
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+ {
+- return FALSE;
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using SSE2 */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
+ }
+
+ cache_prefetch ((__m128i*)src_bytes);
+@@ -5339,7 +5348,7 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ uint8_t *d = dst_bytes;
+ src_bytes += src_stride;
+ dst_bytes += dst_stride;
+- w = byte_width;
++ w = width;
+
+ cache_prefetch_next ((__m128i*)s);
+ cache_prefetch_next ((__m128i*)d);
+--
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
new file mode 100644
index 0000000000..0ba5b843b5
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
@@ -0,0 +1,94 @@
+From e0542866c466ad512d69292df098d4b880e35e52 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 18 Nov 2009 06:08:48 +0200
+Subject: [PATCH 4/5] Support of overlapping src/dst for pixman_blt_neon
+
+---
+ pixman/pixman-arm-neon.c | 62 +++++++++++++++++++++++++++++++++++++--------
+ 1 files changed, 51 insertions(+), 11 deletions(-)
+
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 24ceeeb..134493d 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -360,26 +360,66 @@ pixman_blt_neon (uint32_t *src_bits,
+ int width,
+ int height)
+ {
+- if (src_bpp != dst_bpp)
++ uint8_t * src_bytes;
++ uint8_t * dst_bytes;
++ int bpp;
++
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
++ {
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
++ }
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
++ {
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using NEON */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
++ }
++
+ switch (src_bpp)
+ {
+ case 16:
+ pixman_composite_src_0565_0565_asm_neon (
+- width, height,
+- (uint16_t *)(((char *) dst_bits) +
+- dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
+- (uint16_t *)(((char *) src_bits) +
+- src_y * src_stride * 4 + src_x * 2), src_stride * 2);
++ width >> 1,
++ height,
++ (uint16_t *) dst_bytes,
++ dst_stride >> 1,
++ (uint16_t *) src_bytes,
++ src_stride >> 1);
+ return TRUE;
+ case 32:
+ pixman_composite_src_8888_8888_asm_neon (
+- width, height,
+- (uint32_t *)(((char *) dst_bits) +
+- dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
+- (uint32_t *)(((char *) src_bits) +
+- src_y * src_stride * 4 + src_x * 4), src_stride);
++ width >> 2,
++ height,
++ (uint32_t *) dst_bytes,
++ dst_stride >> 2,
++ (uint32_t *) src_bytes,
++ src_stride >> 2);
+ return TRUE;
+ default:
+ return FALSE;
+--
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch b/recipes/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch
new file mode 100644
index 0000000000..769ed2e7d0
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch
@@ -0,0 +1,169 @@
+From d51b10a2750d99543a0c92ca44802aa7a4d70e54 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 10 Dec 2009 00:51:50 +0200
+Subject: [PATCH 5/5] ARM: added NEON optimizations for fetch/store r5g6b5 scanline
+
+---
+ pixman/pixman-access.c | 23 ++++++++++++++++++++++-
+ pixman/pixman-arm-neon-asm.S | 20 ++++++++++++++++++++
+ pixman/pixman-arm-neon.c | 41 +++++++++++++++++++++++++++++++++++++++++
+ pixman/pixman-private.h | 5 +++++
+ 4 files changed, 88 insertions(+), 1 deletions(-)
+
+diff --git a/pixman/pixman-access.c b/pixman/pixman-access.c
+index fa0a267..5bb3e09 100644
+--- a/pixman/pixman-access.c
++++ b/pixman/pixman-access.c
+@@ -2748,7 +2748,7 @@ typedef struct
+ store_scanline_ ## format, store_scanline_generic_64 \
+ }
+
+-static const format_info_t accessors[] =
++static format_info_t accessors[] =
+ {
+ /* 32 bpp formats */
+ FORMAT_INFO (a8r8g8b8),
+@@ -2891,6 +2891,27 @@ _pixman_bits_image_setup_raw_accessors (bits_image_t *image)
+ setup_accessors (image);
+ }
+
++void
++_pixman_bits_override_accessors (pixman_format_code_t format,
++ fetch_scanline_t fetch_func,
++ store_scanline_t store_func)
++{
++ format_info_t *info = accessors;
++
++ while (info->format != PIXMAN_null)
++ {
++ if (info->format == format)
++ {
++ if (fetch_func)
++ info->fetch_scanline_raw_32 = fetch_func;
++ if (store_func)
++ info->store_scanline_raw_32 = store_func;
++ return;
++ }
++ info++;
++ }
++}
++
+ #else
+
+ void
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index eb8cc4c..6ab3301 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -454,6 +454,16 @@ generate_composite_function \
+ pixman_composite_src_8888_0565_process_pixblock_tail, \
+ pixman_composite_src_8888_0565_process_pixblock_tail_head
+
++generate_composite_function_single_scanline \
++ pixman_store_scanline_r5g6b5_asm_neon, 32, 0, 16, \
++ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
++ 8, /* number of pixels, processed in a single block */ \
++ default_init, \
++ default_cleanup, \
++ pixman_composite_src_8888_0565_process_pixblock_head, \
++ pixman_composite_src_8888_0565_process_pixblock_tail, \
++ pixman_composite_src_8888_0565_process_pixblock_tail_head
++
+ /******************************************************************************/
+
+ .macro pixman_composite_src_0565_8888_process_pixblock_head
+@@ -489,6 +499,16 @@ generate_composite_function \
+ pixman_composite_src_0565_8888_process_pixblock_tail, \
+ pixman_composite_src_0565_8888_process_pixblock_tail_head
+
++generate_composite_function_single_scanline \
++ pixman_fetch_scanline_r5g6b5_asm_neon, 16, 0, 32, \
++ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
++ 8, /* number of pixels, processed in a single block */ \
++ default_init, \
++ default_cleanup, \
++ pixman_composite_src_0565_8888_process_pixblock_head, \
++ pixman_composite_src_0565_8888_process_pixblock_tail, \
++ pixman_composite_src_0565_8888_process_pixblock_tail_head
++
+ /******************************************************************************/
+
+ .macro pixman_composite_add_8000_8000_process_pixblock_head
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 134493d..2245b52 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -567,6 +567,43 @@ neon_combine_##name##_u (pixman_implementation_t *imp, \
+ BIND_COMBINE_U (over)
+ BIND_COMBINE_U (add)
+
++void
++pixman_fetch_scanline_r5g6b5_asm_neon (int width,
++ uint32_t *buffer,
++ const uint16_t *pixel);
++void
++pixman_store_scanline_r5g6b5_asm_neon (int width,
++ uint16_t *pixel,
++ const uint32_t *values);
++
++static void
++neon_fetch_scanline_r5g6b5 (pixman_image_t *image,
++ int x,
++ int y,
++ int width,
++ uint32_t * buffer,
++ const uint32_t *mask,
++ uint32_t mask_bits)
++{
++ const uint32_t *bits = image->bits.bits + y * image->bits.rowstride;
++ const uint16_t *pixel = (const uint16_t *)bits + x;
++
++ pixman_fetch_scanline_r5g6b5_asm_neon (width, buffer, pixel);
++}
++
++static void
++neon_store_scanline_r5g6b5 (bits_image_t * image,
++ int x,
++ int y,
++ int width,
++ const uint32_t *values)
++{
++ uint32_t *bits = image->bits + image->rowstride * y;
++ uint16_t *pixel = ((uint16_t *) bits) + x;
++
++ pixman_store_scanline_r5g6b5_asm_neon (width, pixel, values);
++}
++
+ pixman_implementation_t *
+ _pixman_implementation_create_arm_neon (void)
+ {
+@@ -577,6 +614,10 @@ _pixman_implementation_create_arm_neon (void)
+ imp->combine_32[PIXMAN_OP_OVER] = neon_combine_over_u;
+ imp->combine_32[PIXMAN_OP_ADD] = neon_combine_add_u;
+
++ _pixman_bits_override_accessors (PIXMAN_r5g6b5,
++ neon_fetch_scanline_r5g6b5,
++ neon_store_scanline_r5g6b5);
++
+ imp->blt = arm_neon_blt;
+ imp->fill = arm_neon_fill;
+
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index eeb677d..ba2d401 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -220,6 +220,11 @@ void
+ _pixman_bits_image_setup_raw_accessors (bits_image_t *image);
+
+ void
++_pixman_bits_override_accessors (pixman_format_code_t format,
++ fetch_scanline_t fetch_func,
++ store_scanline_t store_func);
++
++void
+ _pixman_image_get_scanline_generic_64 (pixman_image_t *image,
+ int x,
+ int y,
+--
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch b/recipes/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch
new file mode 100644
index 0000000000..3d8d4e8292
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch
@@ -0,0 +1,53 @@
+From 7f0adaef68c5b0bb1c5eb9f5db5792b71b8b8beb Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Fri, 19 Mar 2010 10:44:09 +0100
+Subject: [PATCH 6/6] Revert "ARM: SIMD: Try without any CFLAGS before forcing -mcpu="
+
+This forces -marm that results in runtime SIGILL on thumb userspace
+
+This reverts commit 18f0de452dc7e12e4cb544d761a626d5c6031663.
+---
+ configure.ac | 20 +++++---------------
+ 1 files changed, 5 insertions(+), 15 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index fc3ee24..f84a4dc 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -363,28 +363,18 @@ AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
+
+ dnl ===========================================================================
+ dnl Check for ARM SIMD instructions
+-ARM_SIMD_CFLAGS=""
++ARM_SIMD_CFLAGS="-mcpu=arm1136j-s"
+
+ have_arm_simd=no
+ AC_MSG_CHECKING(whether to use ARM SIMD assembler)
+-# check with default CFLAGS in case the toolchain turns on a sufficiently recent -mcpu=
++xserver_save_CFLAGS=$CFLAGS
++CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS"
+ AC_COMPILE_IFELSE([
+ int main () {
+ asm("uqadd8 r1, r1, r2");
+ return 0;
+-}], have_arm_simd=yes,
+- # check again with an explicit -mcpu= in case the toolchain defaults to an
+- # older one; note that uqadd8 isn't available in Thumb mode on arm1136j-s
+- # so we force ARM mode
+- ARM_SIMD_CFLAGS="-mcpu=arm1136j-s -marm"
+- xserver_save_CFLAGS=$CFLAGS
+- CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS"
+- AC_COMPILE_IFELSE([
+- int main () {
+- asm("uqadd8 r1, r1, r2");
+- return 0;
+- }], have_arm_simd=yes)
+- CFLAGS=$xserver_save_CFLAGS)
++}], have_arm_simd=yes)
++CFLAGS=$xserver_save_CFLAGS
+
+ AC_ARG_ENABLE(arm-simd,
+ [AC_HELP_STRING([--disable-arm-simd],
+--
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
deleted file mode 100644
index af75716bb8..0000000000
--- a/recipes/xorg-lib/pixman/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From 86870ff530b5e435034bd80207e5758466d96cff Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Wed, 18 Nov 2009 06:08:48 +0200
-Subject: [PATCH 6/6] Support of overlapping src/dst for pixman_blt_neon
-
----
- pixman/pixman-arm-neon.c | 63 ++++++++++++++++++++++++++++++++++++++-------
- 1 files changed, 53 insertions(+), 10 deletions(-)
-
-diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index 495fda4..c632ff5 100644
---- a/pixman/pixman-arm-neon.c
-+++ b/pixman/pixman-arm-neon.c
-@@ -306,23 +306,66 @@ pixman_blt_neon (uint32_t *src_bits,
- int width,
- int height)
- {
-+ uint8_t * src_bytes;
-+ uint8_t * dst_bytes;
-+ int bpp;
-+
-+ if (src_bpp != dst_bpp || src_bpp & 7)
-+ return FALSE;
-+
-+ bpp = src_bpp >> 3;
-+ width *= bpp;
-+ src_stride *= 4;
-+ dst_stride *= 4;
-+ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
-+ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
-+
-+ if (src_bpp != 16 && src_bpp != 32)
-+ {
-+ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
-+ width, height);
-+ return TRUE;
-+ }
-+
-+ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
-+ {
-+ src_bytes += src_stride * height - src_stride;
-+ dst_bytes += dst_stride * height - dst_stride;
-+ dst_stride = -dst_stride;
-+ src_stride = -src_stride;
-+
-+ if (src_bytes + width > dst_bytes)
-+ {
-+ /* TODO: reverse scanline copy using NEON */
-+ while (--height >= 0)
-+ {
-+ memmove (dst_bytes, src_bytes, width);
-+ dst_bytes += dst_stride;
-+ src_bytes += src_stride;
-+ }
-+ return TRUE;
-+ }
-+ }
-+
- switch (src_bpp)
- {
- case 16:
- pixman_composite_src_0565_0565_asm_neon (
-- width, height,
-- (uint16_t *)(((char *) dst_bits) +
-- dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
-- (uint16_t *)(((char *) src_bits) +
-- src_y * src_stride * 4 + src_x * 2), src_stride * 2);
-+ width >> 1,
-+ height,
-+ (uint16_t *) dst_bytes,
-+ dst_stride >> 1,
-+ (uint16_t *) src_bytes,
-+ src_stride >> 1);
- return TRUE;
- case 32:
- pixman_composite_src_8888_8888_asm_neon (
-- width, height,
-- (uint32_t *)(((char *) dst_bits) +
-- dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
-- (uint32_t *)(((char *) src_bits) +
-- src_y * src_stride * 4 + src_x * 4), src_stride);
-+ width >> 2,
-+ height,
-+ (uint32_t *) dst_bytes,
-+ dst_stride >> 2,
-+ (uint32_t *) src_bytes,
-+ src_stride >> 2);
- return TRUE;
- default:
- return FALSE;
---
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman/0041-Fix-filler-bug.patch b/recipes/xorg-lib/pixman/0041-Fix-filler-bug.patch
deleted file mode 100644
index 02bd13a0db..0000000000
--- a/recipes/xorg-lib/pixman/0041-Fix-filler-bug.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 82ea3295e435b49478cf7943100b22286baf47dc Mon Sep 17 00:00:00 2001
-From: Jonathan Morton <jmorton@sd070.hel.movial.fi>
-Date: Thu, 4 Jun 2009 10:43:41 +0300
-Subject: [PATCH] Fix filler bug.
-
----
- pixman/pixman-arm-neon.c | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index 18e9a16..67f0b63 100644
---- a/pixman/pixman-arm-neon.c
-+++ b/pixman/pixman-arm-neon.c
-@@ -1377,7 +1377,7 @@ pixman_fill_neon (uint32_t *bits,
- "beq 2f\n"
- "strh %[color], [r4]!\n"
- "2:\n"
-- "tst r5, #1\n"
-+ "tst %[width], #1\n"
- "beq 2f\n"
- "strb %[color], [r4]!\n"
- "2:\n"
---
-1.5.6.3
-
diff --git a/recipes/xorg-lib/pixman/0042-Really-fix-filler-bug.patch b/recipes/xorg-lib/pixman/0042-Really-fix-filler-bug.patch
deleted file mode 100644
index e23b9cd133..0000000000
--- a/recipes/xorg-lib/pixman/0042-Really-fix-filler-bug.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 5cdd43ac753780ef2cfd6adde822af5dcba6091f Mon Sep 17 00:00:00 2001
-From: Jonathan Morton <jmorton@sd070.hel.movial.fi>
-Date: Thu, 4 Jun 2009 15:11:40 +0300
-Subject: [PATCH] Really fix filler bug.
-
----
- pixman/pixman-arm-neon.c | 6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index cfb69f4..0c05f64 100644
---- a/pixman/pixman-arm-neon.c
-+++ b/pixman/pixman-arm-neon.c
-@@ -1369,15 +1369,15 @@ pixman_fill_neon (uint32_t *bits,
- "2:\n"
- "tst %[width], #4\n"
- "beq 2f\n"
-- "str %[color], [r4]!\n"
-+ "str %[color], [r4], #4\n"
- "2:\n"
- "tst %[width], #2\n"
- "beq 2f\n"
-- "strh %[color], [r4]!\n"
-+ "strh %[color], [r4], #2\n"
- "2:\n"
- "tst %[width], #1\n"
- "beq 2f\n"
-- "strb %[color], [r4]!\n"
-+ "strb %[color], [r4], #1\n"
- "2:\n"
-
- "subs %[height], %[height], #1\n"
---
-1.5.6.3
-
diff --git a/recipes/xorg-lib/pixman/over-n-8-0565.patch b/recipes/xorg-lib/pixman/over-n-8-0565.patch
new file mode 100644
index 0000000000..3911068d94
--- /dev/null
+++ b/recipes/xorg-lib/pixman/over-n-8-0565.patch
@@ -0,0 +1,231 @@
+From de2221a32d0b6628116565563f7b4ccd0a44e8b6 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 04 Mar 2010 23:20:25 +0000
+Subject: ARM: added 'armv6_composite_over_n_8_0565' fast path
+
+Provides ~3x performance improvement when working with
+data in L1 cache and memory. This fast path is important
+for fonts rendering when using 16bpp desktop.
+
+Microbenchmark from N800 (ARM11 @ 400MHz), measured in MPix/s:
+
+before:
+
+ over_n_8_0565 = L1: 2.99 M: 2.86
+
+after:
+
+ over_n_8_0565 = L1: 9.07 M: 8.05
+---
+diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
+index 09a2888..c375c01 100644
+--- a/pixman/pixman-arm-simd.c
++++ b/pixman/pixman-arm-simd.c
+@@ -419,6 +419,193 @@ arm_composite_over_n_8_8888 (pixman_implementation_t * impl,
+ }
+ }
+
++#if defined(__ARM_EABI__) && defined(__linux__)
++/*
++ * ARMv6 assembly optimized version of 'composite_over_n_8_0565'. It is
++ * a bare metal 'naked' function which uses all the available CPU registers
++ * and is compatible with ARM EABI. It might (or might not) break when used
++ * with a different ABI, anyway it is better to be safe than sorry.
++ */
++static void __attribute__((naked)) armv6_composite_over_n_8_0565_asm (
++ uint16_t *dst, uint8_t *mask, uint32_t src, int w,
++ int dst_stride_delta, int mask_stride_delta, int h)
++{
++ asm volatile (
++ ".macro composite_internal_armv6_asm opaque_flag\n"
++ /* save all registers (8 words) to stack */
++ "stmdb sp!, {r4-r11, ip, lr}\n"
++ /* some register aliases for better readability */
++ "DST .req r0\n"
++ "MASK .req r1\n"
++ "S .req r2\n"
++ "W .req r3\n"
++ "A .req r8\n"
++ "D .req r10\n"
++ "C0000FF .req r11\n"
++ "C00001F .req r9\n"
++ "C800080 .req ip\n"
++ "CE000E0 .req lr\n"
++ /* precalculate some stuff and put it on stack */
++ "mov r6, #0xF8\n"
++ "mov r7, #0xFC\n"
++
++ "str W, [sp, #-8]!\n"
++
++ ".if \\opaque_flag\n"
++ /* precalculate and save it to stack for later use:
++ * ((src >> 3) & 0x001F) |
++ * ((src >> 5) & 0x07E0) |
++ * ((src >> 8) & 0xF800)
++ */
++ "mov A, #0x1F\n"
++ "and D, A, S, lsr #3\n"
++ "and r4, S, #0xF80000\n"
++ "and r5, S, #0xFC00\n"
++ "orr D, r4, lsr #8\n"
++ "orr D, r5, lsr #5\n"
++ "str D, [sp, #4]\n"
++ ".endif\n"
++
++ "ldr D, [sp, #(8 + 10*4 + 8)]\n" /* h */
++ "ldr A, =0xFF00FF\n"
++ "ldr C800080, =0x800080\n"
++ "ldr CE000E0, =0xE000E0\n"
++ "ldr C0000FF, =0xFF\n"
++ "ldr C00001F, =0x1F\n"
++ "and r4, A, S\n" /* r4 = src & 0x00FF00FF */
++ "and r5, A, S, lsr #8\n" /* r5 = (src >> 8) & 0x00FF00FF */
++ "stmdb sp!, {r4, r5, r6, r7}\n"
++ "0:\n"
++ "subs D, D, #1\n"
++ "blt 6f\n"
++ "1:\n"
++ "subs W, W, #1\n"
++ "blt 5f\n"
++ "2:\n"
++ "ldrb A, [MASK], #1\n"
++ "ldmia sp, {r4, r5, r6, r7}\n" /* load constants from stack */
++ "add DST, DST, #2\n"
++ "cmp A, #0\n"
++ "beq 1b\n"
++
++ ".if \\opaque_flag\n"
++ "cmp A, #0xFF\n"
++ "bne 3f\n"
++ "ldr D, [sp, #(4*4 + 4)]\n" /* load precalculated value */
++ "subs W, #1\n"
++ "strh D, [DST, #-2]\n"
++ "bge 2b\n"
++ ".endif\n"
++
++ "3:\n"
++ "ldrh D, [DST, #-2]\n"
++ "mla r4, A, r4, C800080\n"
++ "mla r5, A, r5, C800080\n"
++ "and r6, r6, D, lsl #3\n" /* & 0xF8 */
++ "and r7, r7, D, lsr #3\n" /* & 0xFC */
++ "and D, D, #0xF800\n"
++ "bic S, r4, #0xFF0000\n"
++ "bic A, r5, #0xFF0000\n"
++ "add r4, r4, S, lsr #8\n"
++ "add r5, r5, A, lsr #8\n"
++
++ "and S, r7, #0xC0\n"
++ "orr r6, r6, D, lsl #8\n"
++ "and D, r6, CE000E0\n"
++ "eor A, C0000FF, r5, lsr #24\n"
++ "orr r6, D, lsr #5\n"
++ "orr r7, S, lsr #6\n"
++
++ "mla r6, A, r6, C800080\n"
++ "mla r7, A, r7, C800080\n"
++ "subs W, #1\n"
++ "bic D, r6, #0xFF0000\n"
++ "bic A, r7, #0xFF0000\n"
++ "add r6, r6, D, lsr #8\n"
++ "uqadd8 r4, r4, r6\n"
++ "add r7, r7, A, lsr #8\n"
++ "uqadd8 r5, r5, r7\n"
++ "and D, C00001F, r4, lsr #11\n"
++ "and r4, r4, #0xF8000000\n"
++ "and r5, r5, #0xFC00\n"
++ "orr D, r4, lsr #16\n"
++ "orr D, r5, lsr #5\n"
++ "strh D, [DST, #-2]\n"
++ "bge 2b\n"
++ "5:\n"
++ "ldr r6, [sp, #(4*4 + 8 + 10*4 + 8)]\n" /* h */
++ "ldr r4, [sp, #(4*4 + 8 + 10*4 + 4)]\n" /* mask stride */
++ "ldr r5, [sp, #(4*4 + 8 + 10*4 + 0)]\n" /* dst stride */
++ "ldr W, [sp, #(4*4)]\n"
++ "subs r6, r6, #1\n" /* h */
++ "str r6, [sp, #(4*4 + 8 + 10*4 + 8)]\n" /* h */
++ "add MASK, MASK, r4\n"
++ "add DST, DST, r5, lsl #1\n"
++ "bgt 1b\n"
++ "6:\n"
++ "add sp, sp, #(4*4 + 8)\n"
++ /* restore all registers and return */
++ "ldmia sp!, {r4-r11, ip, pc}\n"
++ ".unreq DST\n"
++ ".unreq MASK\n"
++ ".unreq S\n"
++ ".unreq W\n"
++ ".unreq A\n"
++ ".unreq D\n"
++ ".unreq C0000FF\n"
++ ".unreq C00001F\n"
++ ".unreq C800080\n"
++ ".unreq CE000E0\n"
++ ".endm\n"
++
++ "mov ip, r2, lsr #24\n"
++ "cmp ip, #0xFF\n"
++ "beq 9f\n"
++ "composite_internal_armv6_asm 0\n"
++ "9:\n"
++ "composite_internal_armv6_asm 1\n"
++ ".ltorg\n"
++ ".purgem composite_internal_armv6_asm\n"
++ );
++}
++
++static void
++armv6_composite_over_n_8_0565 (pixman_implementation_t * impl,
++ pixman_op_t op,
++ pixman_image_t * src_image,
++ pixman_image_t * mask_image,
++ pixman_image_t * dst_image,
++ int32_t src_x,
++ int32_t src_y,
++ int32_t mask_x,
++ int32_t mask_y,
++ int32_t dest_x,
++ int32_t dest_y,
++ int32_t width,
++ int32_t height)
++{
++ uint32_t src;
++ uint16_t *dst;
++ uint8_t *mask;
++ int dst_stride, mask_stride;
++
++ src = _pixman_image_get_solid (src_image, dst_image->bits.format);
++
++ /* bail out if fully transparent */
++ if (src == 0)
++ return;
++
++ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t,
++ dst_stride, dst, 1);
++ PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t,
++ mask_stride, mask, 1);
++
++ armv6_composite_over_n_8_0565_asm (dst, mask, src, width,
++ dst_stride - width, mask_stride - width, height);
++}
++
++#endif
++
+ static const pixman_fast_path_t arm_simd_fast_paths[] =
+ {
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, a8r8g8b8, arm_composite_over_8888_8888),
+@@ -434,7 +621,10 @@ static const pixman_fast_path_t arm_simd_fast_paths[] =
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8r8g8b8, arm_composite_over_n_8_8888),
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, arm_composite_over_n_8_8888),
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, arm_composite_over_n_8_8888),
+-
++#if defined(__ARM_EABI__) && defined(__linux__)
++ PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, armv6_composite_over_n_8_0565),
++ PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, armv6_composite_over_n_8_0565),
++#endif
+ { PIXMAN_OP_NONE },
+ };
+
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/xorg-lib/pixman/src-8888-0565.patch b/recipes/xorg-lib/pixman/src-8888-0565.patch
new file mode 100644
index 0000000000..c544225f65
--- /dev/null
+++ b/recipes/xorg-lib/pixman/src-8888-0565.patch
@@ -0,0 +1,324 @@
+From 6494f9ae8820078d0e6109bf8f294156f7a5da4c Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Fri, 05 Mar 2010 00:40:34 +0000
+Subject: ARM: added 'armv6_composite_src_8888_0565' fast path
+
+Provides ~3x performance improvement when working with
+data in L1 cache, and ~80% performace improvement when working
+with memory. This fast path is important for 32bpp -> 16bpp
+color format conversion and is commonly used with 16bpp desktop.
+
+Microbenchmark from N800 (ARM11 @ 400MHz), measured in MPix/s:
+
+before:
+
+ src_8888_0565 = L1: 21.54 M: 15.62
+
+after (armv4):
+
+ src_8888_0565 = L1: 45.26 M: 23.29
+
+after (armv6):
+
+ src_8888_0565 = L1: 60.62 M: 28.37
+---
+diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
+index c375c01..69243c1 100644
+--- a/pixman/pixman-arm-simd.c
++++ b/pixman/pixman-arm-simd.c
+@@ -604,6 +604,282 @@ armv6_composite_over_n_8_0565 (pixman_implementation_t * impl,
+ dst_stride - width, mask_stride - width, height);
+ }
+
++static inline void
++armv4_composite_src_8888_0565_asm (
++ uint16_t *dst, uint32_t *src, int w, int dst_stride,
++ int src_stride, int h)
++{
++ uint32_t a, x, y, c1F001F = 0x1F001F, cFFFF = 0xFFFF;
++ int backup_w = w;
++ while (h--)
++ {
++ w = backup_w;
++ if (w > 0 && (uintptr_t)dst & 2)
++ {
++ x = *src++;
++
++ a = (x >> 3) & c1F001F;
++ x &= 0xFC00;
++ a |= a >> 5;
++ a |= x >> 5;
++
++ *dst++ = a;
++ w--;
++ }
++
++ asm volatile(
++ "subs %[w], %[w], #2\n"
++ "blt 2f\n"
++ "1:\n"
++ "ldr %[x], [%[src]], #4\n"
++ "ldr %[y], [%[src]], #4\n"
++ "subs %[w], %[w], #2\n"
++
++ "and %[a], %[c1F001F], %[x], lsr #3\n"
++ "and %[x], %[x], #0xFC00\n\n"
++ "orr %[a], %[a], %[a], lsr #5\n"
++ "orr %[x], %[a], %[x], lsr #5\n"
++
++ "and %[a], %[c1F001F], %[y], lsr #3\n"
++ "and %[y], %[y], #0xFC00\n\n"
++ "orr %[a], %[a], %[a], lsr #5\n"
++ "orr %[y], %[a], %[y], lsr #5\n"
++ /*
++ * Writing single 32-bit value is much faster than two
++ * separate 16-bit values for older CPUs without (efficient)
++ * write combining, even though it costs an extra instruction.
++ */
++ "and %[x], %[x], %[cFFFF]\n"
++ "orr %[x], %[x], %[y], lsl #16\n"
++ "str %[x], [%[dst]], #4\n"
++ "bge 1b\n"
++ "2:\n"
++ : [c1F001F] "+&r" (c1F001F), [cFFFF] "+&r" (cFFFF),
++ [src] "+&r" (src), [dst] "+&r" (dst), [a] "=&r" (a),
++ [x] "=&r" (x), [y] "=&r" (y), [w] "+&r" (w)
++ );
++
++ if (w & 1)
++ {
++ x = *src++;
++
++ a = (x >> 3) & c1F001F;
++ x = x & 0xFC00;
++ a |= a >> 5;
++ a |= x >> 5;
++
++ *dst++ = a;
++ }
++
++ src += src_stride - backup_w;
++ dst += dst_stride - backup_w;
++ }
++}
++
++/*
++ * Conversion x8r8g8b8 -> r5g6b5
++ *
++ * Note: 'w' must be >= 7 here
++ */
++static void __attribute__((naked))
++armv6_composite_src_8888_0565_asm (
++ uint16_t *dst, uint32_t *src, int w, int dst_stride,
++ int src_stride, int h)
++{
++ asm volatile(
++ /* define supplementary macros */
++ ".macro cvt8888to565 PIX\n"
++ "and A, C1F001F, \\PIX, lsr #3\n"
++ "and \\PIX, \\PIX, #0xFC00\n\n"
++ "orr A, A, A, lsr #5\n"
++ "orr \\PIX, A, \\PIX, lsr #5\n"
++ ".endm\n"
++
++ ".macro combine_pixels_pair PIX1, PIX2\n"
++ /* Note: assume little endian byte order */
++ "pkhbt \\PIX1, \\PIX1, \\PIX2, lsl #16\n"
++ ".endm\n"
++
++ /* function entry, save all registers (10 words) to stack */
++ "stmdb sp!, {r4-r11, ip, lr}\n"
++
++ /* define some aliases */
++ "DST .req r0\n"
++ "SRC .req r1\n"
++ "W .req r2\n"
++ "H .req r3\n"
++
++ "TMP1 .req r4\n"
++ "TMP2 .req r5\n"
++ "TMP3 .req r6\n"
++ "TMP4 .req r7\n"
++ "TMP5 .req r8\n"
++ "TMP6 .req r9\n"
++ "TMP7 .req r10\n"
++ "TMP8 .req r11\n"
++
++ "C1F001F .req ip\n"
++ "A .req lr\n"
++
++ "ldr TMP1, [sp, #(10*4+0)]\n" /* load src_stride */
++ "ldr C1F001F, =0x1F001F\n"
++ "sub r3, r3, W\n"
++ "str r3, [sp, #(10*4+0)]\n" /* store (dst_stride-w) */
++ "ldr r3, [sp, #(10*4+4)]\n" /* load h */
++ "sub TMP1, TMP1, W\n"
++ "str TMP1, [sp, #(10*4+4)]\n" /* store (src_stride-w) */
++
++ "str W, [sp, #(8*4)]\n" /* saved ip = W */
++
++ "0:\n"
++ "subs H, H, #1\n"
++ "blt 6f\n"
++ "1:\n"
++ /* align DST at 4 byte boundary */
++ "tst DST, #2\n"
++ "beq 2f\n"
++ "ldr TMP1, [SRC], #4\n"
++ "sub W, W, #1\n"
++ "cvt8888to565 TMP1\n"
++ "strh TMP1, [DST], #2\n"
++ "2:"
++ /* align DST at 8 byte boundary */
++ "tst DST, #4\n"
++ "beq 2f\n"
++ "ldmia SRC!, {TMP1, TMP2}\n"
++ "sub W, W, #2\n"
++ "cvt8888to565 TMP1\n"
++ "cvt8888to565 TMP2\n"
++ "combine_pixels_pair TMP1, TMP2\n"
++ "str TMP1, [DST], #4\n"
++ "2:"
++ /* align DST at 16 byte boundary */
++ "tst DST, #8\n"
++ "beq 2f\n"
++ "ldmia SRC!, {TMP1, TMP2, TMP3, TMP4}\n"
++ "sub W, W, #4\n"
++ "cvt8888to565 TMP1\n"
++ "cvt8888to565 TMP2\n"
++ "cvt8888to565 TMP3\n"
++ "cvt8888to565 TMP4\n"
++ "combine_pixels_pair TMP1, TMP2\n"
++ "combine_pixels_pair TMP3, TMP4\n"
++ "stmia DST!, {TMP1, TMP3}\n"
++ "2:"
++ /* inner loop, process 8 pixels per iteration */
++ "subs W, W, #8\n"
++ "blt 4f\n"
++ "3:\n"
++ "ldmia SRC!, {TMP1, TMP2, TMP3, TMP4, TMP5, TMP6, TMP7, TMP8}\n"
++ "subs W, W, #8\n"
++ "cvt8888to565 TMP1\n"
++ "cvt8888to565 TMP2\n"
++ "cvt8888to565 TMP3\n"
++ "cvt8888to565 TMP4\n"
++ "cvt8888to565 TMP5\n"
++ "cvt8888to565 TMP6\n"
++ "cvt8888to565 TMP7\n"
++ "cvt8888to565 TMP8\n"
++ "combine_pixels_pair TMP1, TMP2\n"
++ "combine_pixels_pair TMP3, TMP4\n"
++ "combine_pixels_pair TMP5, TMP6\n"
++ "combine_pixels_pair TMP7, TMP8\n"
++ "stmia DST!, {TMP1, TMP3, TMP5, TMP7}\n"
++ "bge 3b\n"
++ "4:\n"
++
++ /* process the remaining pixels */
++ "tst W, #4\n"
++ "beq 4f\n"
++ "ldmia SRC!, {TMP1, TMP2, TMP3, TMP4}\n"
++ "cvt8888to565 TMP1\n"
++ "cvt8888to565 TMP2\n"
++ "cvt8888to565 TMP3\n"
++ "cvt8888to565 TMP4\n"
++ "combine_pixels_pair TMP1, TMP2\n"
++ "combine_pixels_pair TMP3, TMP4\n"
++ "stmia DST!, {TMP1, TMP3}\n"
++ "4:\n"
++ "tst W, #2\n"
++ "beq 4f\n"
++ "ldmia SRC!, {TMP1, TMP2}\n"
++ "cvt8888to565 TMP1\n"
++ "cvt8888to565 TMP2\n"
++ "combine_pixels_pair TMP1, TMP2\n"
++ "str TMP1, [DST], #4\n"
++ "4:\n"
++ "tst W, #1\n"
++ "beq 4f\n"
++ "ldr TMP1, [SRC], #4\n"
++ "cvt8888to565 TMP1\n"
++ "strh TMP1, [DST], #2\n"
++ "4:\n"
++ "ldr TMP1, [sp, #(10*4+0)]\n" /* (dst_stride-w) */
++ "ldr TMP2, [sp, #(10*4+4)]\n" /* (src_stride-w) */
++ "ldr W, [sp, #(8*4)]\n"
++ "subs H, H, #1\n"
++ "add DST, DST, TMP1, lsl #1\n"
++ "add SRC, SRC, TMP2, lsl #2\n"
++ "bge 1b\n"
++ "6:\n"
++ /* restore all registers and return */
++ "ldmia sp!, {r4-r11, ip, pc}\n"
++ ".ltorg\n"
++
++ ".unreq DST\n"
++ ".unreq SRC\n"
++ ".unreq W\n"
++ ".unreq H\n"
++
++ ".unreq TMP1\n"
++ ".unreq TMP2\n"
++ ".unreq TMP3\n"
++ ".unreq TMP4\n"
++ ".unreq TMP5\n"
++ ".unreq TMP6\n"
++ ".unreq TMP7\n"
++ ".unreq TMP8\n"
++
++ ".unreq C1F001F\n"
++ ".unreq A\n"
++
++ ".purgem cvt8888to565\n"
++ ".purgem combine_pixels_pair\n"
++ );
++}
++
++static void
++armv6_composite_src_8888_0565 (pixman_implementation_t * impl,
++ pixman_op_t op,
++ pixman_image_t * src_image,
++ pixman_image_t * mask_image,
++ pixman_image_t * dst_image,
++ int32_t src_x,
++ int32_t src_y,
++ int32_t mask_x,
++ int32_t mask_y,
++ int32_t dest_x,
++ int32_t dest_y,
++ int32_t width,
++ int32_t height)
++{
++ uint32_t *src;
++ uint16_t *dst;
++ int src_stride, dst_stride;
++
++ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t,
++ dst_stride, dst, 1);
++ PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t,
++ src_stride, src, 1);
++
++ if (width < 7)
++ armv4_composite_src_8888_0565_asm (dst, src, width,
++ dst_stride, src_stride, height);
++ else
++ armv6_composite_src_8888_0565_asm (dst, src, width,
++ dst_stride, src_stride, height);
++}
++
+ #endif
+
+ static const pixman_fast_path_t arm_simd_fast_paths[] =
+@@ -624,6 +900,10 @@ static const pixman_fast_path_t arm_simd_fast_paths[] =
+ #if defined(__ARM_EABI__) && defined(__linux__)
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, armv6_composite_over_n_8_0565),
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, armv6_composite_over_n_8_0565),
++ PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, r5g6b5, armv6_composite_src_8888_0565),
++ PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, r5g6b5, armv6_composite_src_8888_0565),
++ PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, b5g6r5, armv6_composite_src_8888_0565),
++ PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, b5g6r5, armv6_composite_src_8888_0565),
+ #endif
+ { PIXMAN_OP_NONE },
+ };
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/xorg-lib/pixman_0.10.0.bb b/recipes/xorg-lib/pixman_0.10.0.bb
index 35f62990b5..b1ac2eb5bd 100644
--- a/recipes/xorg-lib/pixman_0.10.0.bb
+++ b/recipes/xorg-lib/pixman_0.10.0.bb
@@ -1,13 +1,2 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz"
-
-inherit autotools pkgconfig
-
-do_stage () {
- autotools_stage_all
-}
-
+require pixman.inc
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-lib/pixman_0.11.4.bb b/recipes/xorg-lib/pixman_0.11.4.bb
index d9da96718f..873a57df6e 100644
--- a/recipes/xorg-lib/pixman_0.11.4.bb
+++ b/recipes/xorg-lib/pixman_0.11.4.bb
@@ -1,15 +1,4 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
+require pixman.inc
+PR = "${INC_PR}.0"
DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz"
-
-inherit autotools pkgconfig
-
-do_stage () {
- autotools_stage_all
-}
-
diff --git a/recipes/xorg-lib/pixman_0.11.8.bb b/recipes/xorg-lib/pixman_0.11.8.bb
index 239684e71f..b3413dea10 100644
--- a/recipes/xorg-lib/pixman_0.11.8.bb
+++ b/recipes/xorg-lib/pixman_0.11.8.bb
@@ -1,19 +1,7 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
+require pixman.inc
+PR = "${INC_PR}.0"
-PR = "r4"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
+SRC_URI += " \
file://pixman-arm.patch;patch=1 \
file://pixman-x888-565.patch;patch=1 \
"
-
-inherit autotools
-
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-do_stage () {
- autotools_stage_all
-}
-
diff --git a/recipes/xorg-lib/pixman_0.12.0.bb b/recipes/xorg-lib/pixman_0.12.0.bb
index 5d43adba30..b3413dea10 100644
--- a/recipes/xorg-lib/pixman_0.12.0.bb
+++ b/recipes/xorg-lib/pixman_0.12.0.bb
@@ -1,17 +1,7 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
+require pixman.inc
+PR = "${INC_PR}.0"
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
+SRC_URI += " \
file://pixman-arm.patch;patch=1 \
file://pixman-x888-565.patch;patch=1 \
"
-
-inherit autotools
-
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-do_stage () {
- autotools_stage_all
-}
-
diff --git a/recipes/xorg-lib/pixman_0.13.2.bb b/recipes/xorg-lib/pixman_0.13.2.bb
index 4b489f89a6..87ffda4748 100644
--- a/recipes/xorg-lib/pixman_0.13.2.bb
+++ b/recipes/xorg-lib/pixman_0.13.2.bb
@@ -1,23 +1,11 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-
-PR = "r2"
+require pixman.inc
+PR = "${INC_PR}.0"
DEFAULT_PREFERENCE = "-1"
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
- file://pixman-0.13.2-neon1.patch;patch=1 \
- "
-
-inherit autotools
+SRC_URI += " \
+ file://pixman-0.13.2-neon1.patch;patch=1 \
+ "
# We have NEON
EXTRA_OECONF_append_armv7a = " --disable-arm-simd"
-
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-do_stage () {
- autotools_stage_all
-}
-
diff --git a/recipes/xorg-lib/pixman_0.15.18.bb b/recipes/xorg-lib/pixman_0.15.18.bb
index 2517f8f354..873a57df6e 100644
--- a/recipes/xorg-lib/pixman_0.15.18.bb
+++ b/recipes/xorg-lib/pixman_0.15.18.bb
@@ -1,13 +1,4 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
+require pixman.inc
+PR = "${INC_PR}.0"
DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
- "
-
-inherit autotools_stage
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-
diff --git a/recipes/xorg-lib/pixman_0.15.6.bb b/recipes/xorg-lib/pixman_0.15.6.bb
index 2517f8f354..873a57df6e 100644
--- a/recipes/xorg-lib/pixman_0.15.6.bb
+++ b/recipes/xorg-lib/pixman_0.15.6.bb
@@ -1,13 +1,4 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
+require pixman.inc
+PR = "${INC_PR}.0"
DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
- "
-
-inherit autotools_stage
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-
diff --git a/recipes/xorg-lib/pixman_0.16.2.bb b/recipes/xorg-lib/pixman_0.16.2.bb
index 1a15ac4a96..86a224a341 100644
--- a/recipes/xorg-lib/pixman_0.16.2.bb
+++ b/recipes/xorg-lib/pixman_0.16.2.bb
@@ -1,15 +1,4 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-
-PR = "r1"
-
-BBCLASSEXTEND="native"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
- "
-
-inherit autotools_stage
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
+require pixman.inc
+PR = "${INC_PR}.1"
+EXTRA_OECONF = "--disable-gtk"
diff --git a/recipes/xorg-lib/pixman_0.17.12.bb b/recipes/xorg-lib/pixman_0.17.12.bb
new file mode 100644
index 0000000000..dbaf36a561
--- /dev/null
+++ b/recipes/xorg-lib/pixman_0.17.12.bb
@@ -0,0 +1,25 @@
+require pixman.inc
+PR = "${INC_PR}.0"
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_angstrom = "2"
+DEFAULT_PREFERENCE_shr = "2"
+
+SRC_URI += "\
+ file://0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
+ file://0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
+ file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
+ file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
+ file://0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch;patch=1 \
+ file://0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch;patch=1 \
+ file://over-n-8-0565.patch;patch=1 \
+ file://src-8888-0565.patch;patch=1 \
+"
+
+SRC_URI[archive.md5sum] = "331415d7a110145cf27aa00e11d0a683"
+SRC_URI[archive.sha256sum] = "8cce103af1b4200a13bedca5b763f74c9bc99a55985ab44ca92ba532dac6b57f"
+
+NEON = " --disable-arm-neon "
+NEON_armv7a = " "
+
+EXTRA_OECONF = "${NEON} --disable-gtk"
diff --git a/recipes/xorg-lib/pixman_0.17.8.bb b/recipes/xorg-lib/pixman_0.17.8.bb
new file mode 100644
index 0000000000..eb3fe85a20
--- /dev/null
+++ b/recipes/xorg-lib/pixman_0.17.8.bb
@@ -0,0 +1,24 @@
+require pixman.inc
+PR = "${INC_PR}.0"
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_angstrom = "2"
+DEFAULT_PREFERENCE_shr = "2"
+
+SRC_URI += " \
+ file://0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
+ file://0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
+ file://0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
+ file://0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
+ file://1-composite.patch;patch=1 \
+ file://2-composite.patch;patch=1 \
+ file://3-composite.patch;patch=1 \
+ "
+
+SRC_URI[archive.md5sum] = "a7deb2ff6b286b676d67aa6ae91317ae"
+SRC_URI[archive.sha256sum] = "ea24e9003455a0881bd43bf7e4169f2b34c90c8521405103e3490553876a81b4"
+
+NEON = " --disable-arm-neon "
+NEON_armv7a = " "
+
+EXTRA_OECONF = "${NEON} --disable-gtk"
diff --git a/recipes/xorg-lib/pixman_0.9.6.bb b/recipes/xorg-lib/pixman_0.9.6.bb
index 1269ff46a7..76ec2955f4 100644
--- a/recipes/xorg-lib/pixman_0.9.6.bb
+++ b/recipes/xorg-lib/pixman_0.9.6.bb
@@ -1,14 +1,3 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz"
+require pixman.inc
+PR = "${INC_PR}.0"
S = "${WORKDIR}/pixman-${PV}"
-
-inherit autotools pkgconfig
-
-do_stage () {
- autotools_stage_all
-}
-
diff --git a/recipes/xorg-lib/pixman_git.bb b/recipes/xorg-lib/pixman_git.bb
index 06547d3ddb..70886edc31 100644
--- a/recipes/xorg-lib/pixman_git.bb
+++ b/recipes/xorg-lib/pixman_git.bb
@@ -1,38 +1,26 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-
-PV = "0.17.3"
-PR = "r6"
+require pixman.inc
+PV = "0.17.13"
+PR = "${INC_PR}.0"
PR_append = "+gitr${SRCREV}"
-BBCLASSEXTEND="native"
-
-SRCREV = "c97b1e803fc214e9880eaeff98410c8fa37f9ddc"
-
+SRCREV = "69f1ec9a7827aeb522fcae99846237ef0f896e7b"
+
DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_angstrom = "1"
-DEFAULT_PREFERENCE_shr = "1"
-
-SRC_URI = "git://anongit.freedesktop.org/pixman;protocol=git \
- file://nearest-neighbour.patch;patch=1 \
- file://0001-ARM-NEON-optimized-pixman_blt.patch;patch=1 \
- file://0002-Test-program-for-pixman_blt-function.patch;patch=1 \
- file://0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
- file://0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
- file://0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
- file://0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
+
+SRC_URI = "git://anongit.freedesktop.org/pixman;protocol=git;branch=master \
+ file://0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
+ file://0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
+ file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
+ file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
+ file://0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch;patch=1 \
+ file://0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch;patch=1 \
+ file://over-n-8-0565.patch;patch=1 \
+ file://src-8888-0565.patch;patch=1 \
"
S = "${WORKDIR}/git"
-inherit autotools_stage
-
NEON = " --disable-arm-neon "
-NEON_armv7a = ""
+NEON_armv7a = " "
EXTRA_OECONF = "${NEON} --disable-gtk"
-
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-
diff --git a/recipes/xorg-lib/xorg-lib-common.inc b/recipes/xorg-lib/xorg-lib-common.inc
index 130f8d1755..942a247b40 100644
--- a/recipes/xorg-lib/xorg-lib-common.inc
+++ b/recipes/xorg-lib/xorg-lib-common.inc
@@ -5,7 +5,7 @@ DEPENDS = "util-macros xorg-headers-native"
XORG_PN = "${PN}"
-SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-${PV}.tar.bz2;name=archive"
S = "${WORKDIR}/${XORG_PN}-${PV}"
diff --git a/recipes/xorg-proto/dri2proto_2.3.bb b/recipes/xorg-proto/dri2proto_2.3.bb
new file mode 100644
index 0000000000..1c0e85fda5
--- /dev/null
+++ b/recipes/xorg-proto/dri2proto_2.3.bb
@@ -0,0 +1,6 @@
+DESCRIPTION = "DRI2 extension headers"
+
+require xorg-proto-common.inc
+
+SRC_URI[archive.md5sum] = "3407b494d5e90d584c9af52aa8f9f028"
+SRC_URI[archive.sha256sum] = "b2141892a0db35feffa5e952ff5e1d2727c4436b07d7e2e9dd2ed89c8bb3e677"
diff --git a/recipes/xorg-proto/xorg-proto-common.inc b/recipes/xorg-proto/xorg-proto-common.inc
index 1ab4ad91d1..7cfd9e87ca 100644
--- a/recipes/xorg-proto/xorg-proto-common.inc
+++ b/recipes/xorg-proto/xorg-proto-common.inc
@@ -5,13 +5,11 @@ LICENSE = "MIT-X"
DEPENDS = "util-macros"
-XORG_PN = "${PN}"
-
ALLOW_EMPTY = "1"
-SRC_URI = "${XORG_MIRROR}/individual/proto/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/proto/${BPN}-${PV}.tar.bz2;name=archive"
-S = "${WORKDIR}/${XORG_PN}-${PV}"
+S = "${WORKDIR}/${BPN}-${PV}"
inherit autotools pkgconfig
diff --git a/recipes/xorg-util/gccmakedep_1.0.2.bb b/recipes/xorg-util/gccmakedep_1.0.2.bb
index 3abfa037a2..1abaec582c 100644
--- a/recipes/xorg-util/gccmakedep_1.0.2.bb
+++ b/recipes/xorg-util/gccmakedep_1.0.2.bb
@@ -3,5 +3,7 @@ require xorg-util-common.inc
DESCRIPTION = "create dependencies in makefiles using 'gcc -M'"
RDEPENDS = "gcc"
-PR = "r2"
+PR = "r3"
PE = "1"
+SRC_URI[archive.md5sum] = "fc49f45251c1336fe1dad5dba1c83fcd"
+SRC_URI[archive.sha256sum] = "fdd3963294e80b27416f902a5c029c033d321f03310d3cafa3afb62b50ddce92"
diff --git a/recipes/xorg-util/imake_1.0.2.bb b/recipes/xorg-util/imake_1.0.2.bb
index deeb4477a1..4d3efd6d33 100644
--- a/recipes/xorg-util/imake_1.0.2.bb
+++ b/recipes/xorg-util/imake_1.0.2.bb
@@ -3,5 +3,7 @@ require xorg-util-common.inc
DESCRIPTION = "C preprocessor interface to the make utility"
RDEPENDS = "perl xproto"
-PR = "r1"
+PR = "r2"
PE = "1"
+SRC_URI[archive.md5sum] = "b5c3a719d60a14ca2378dc1259ee60df"
+SRC_URI[archive.sha256sum] = "8008b4366ab96abfdac2c91808b79ec2cc5649966b41cfb07b14b6fbd798651c"
diff --git a/recipes/xorg-util/lndir_1.0.1.bb b/recipes/xorg-util/lndir_1.0.1.bb
index 34309a6487..05125179b3 100644
--- a/recipes/xorg-util/lndir_1.0.1.bb
+++ b/recipes/xorg-util/lndir_1.0.1.bb
@@ -1,5 +1,7 @@
require xorg-util-common.inc
DESCRIPTION = "create a shadow directory of symbolic links to another directory tree"
-PR = "r1"
+PR = "r2"
PE = "1"
+SRC_URI[archive.md5sum] = "1a53ddd7e1804abe8f3d9799a88b6aa8"
+SRC_URI[archive.sha256sum] = "89bff89702ebf2e5cc2268d79d5a27c62190c5a85ab080935d4425d3e309bc57"
diff --git a/recipes/xorg-util/makedepend-native_1.0.1.bb b/recipes/xorg-util/makedepend-native_1.0.1.bb
deleted file mode 100644
index 9facfc69fa..0000000000
--- a/recipes/xorg-util/makedepend-native_1.0.1.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-util-common.inc
-inherit native
-
-DESCRIPTION = "create dependencies in makefiles"
-DEPENDS = "xproto-native util-macros-native"
-PR = "r2"
-PE = "1"
-
-XORG_PN = "makedepend"
diff --git a/recipes/xorg-util/makedepend-native_1.0.2.bb b/recipes/xorg-util/makedepend-native_1.0.2.bb
deleted file mode 100644
index 9facfc69fa..0000000000
--- a/recipes/xorg-util/makedepend-native_1.0.2.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-util-common.inc
-inherit native
-
-DESCRIPTION = "create dependencies in makefiles"
-DEPENDS = "xproto-native util-macros-native"
-PR = "r2"
-PE = "1"
-
-XORG_PN = "makedepend"
diff --git a/recipes/xorg-util/makedepend.inc b/recipes/xorg-util/makedepend.inc
new file mode 100644
index 0000000000..b1a27c69e0
--- /dev/null
+++ b/recipes/xorg-util/makedepend.inc
@@ -0,0 +1,8 @@
+require xorg-util-common.inc
+DESCRIPTION = "create dependencies in makefiles"
+DEPENDS = "xproto util-macros"
+
+PE = "1"
+INC_PR = "r4"
+
+BBCLASSEXTEND = "native"
diff --git a/recipes/xorg-util/makedepend_1.0.1.bb b/recipes/xorg-util/makedepend_1.0.1.bb
index e998bba1b0..05cc5e63c7 100644
--- a/recipes/xorg-util/makedepend_1.0.1.bb
+++ b/recipes/xorg-util/makedepend_1.0.1.bb
@@ -1,6 +1,4 @@
-require xorg-util-common.inc
-
-DESCRIPTION = "create dependencies in makefiles"
-DEPENDS = "xproto util-macros"
-PR = "r2"
-PE = "1"
+require makedepend.inc
+PR = "${INC_PR}.0"
+SRC_URI[archive.md5sum] = "90f5f3b987497a481b94d49372f17dce"
+SRC_URI[archive.sha256sum] = "0a4a0d4e2613b0cd4321e55fd4741788b728736fc8a517996e2015fa49862e61"
diff --git a/recipes/xorg-util/makedepend_1.0.2.bb b/recipes/xorg-util/makedepend_1.0.2.bb
index e998bba1b0..2f7850de6d 100644
--- a/recipes/xorg-util/makedepend_1.0.2.bb
+++ b/recipes/xorg-util/makedepend_1.0.2.bb
@@ -1,6 +1,4 @@
-require xorg-util-common.inc
-
-DESCRIPTION = "create dependencies in makefiles"
-DEPENDS = "xproto util-macros"
-PR = "r2"
-PE = "1"
+require makedepend.inc
+PR = "${INC_PR}.0"
+SRC_URI[archive.md5sum] = "905bfeb1a59929d950e5d638fbadcf39"
+SRC_URI[archive.sha256sum] = "008e6e117372e04cdc9a72ffc7dfae2e2d6617c9b399e052ae12dc2a1a03079a"
diff --git a/recipes/xorg-util/util-macros-native_1.1.5.bb b/recipes/xorg-util/util-macros-native_1.1.5.bb
deleted file mode 100644
index c327f3f54e..0000000000
--- a/recipes/xorg-util/util-macros-native_1.1.5.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require util-macros_${PV}.bb
-
-inherit native
-
-PR = "r1"
-
-XORG_PN = "util-macros"
-
-S = "${WORKDIR}/util-macros-1.1.5"
diff --git a/recipes/xorg-util/util-macros-native_1.1.6.bb b/recipes/xorg-util/util-macros-native_1.1.6.bb
deleted file mode 100644
index 618e78f116..0000000000
--- a/recipes/xorg-util/util-macros-native_1.1.6.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require util-macros_${PV}.bb
-
-inherit native
-
-XORG_PN = "util-macros"
-
-S = "${WORKDIR}/util-macros-${PV}"
diff --git a/recipes/xorg-util/util-macros-native_1.2.1.bb b/recipes/xorg-util/util-macros-native_1.2.1.bb
deleted file mode 100644
index 618e78f116..0000000000
--- a/recipes/xorg-util/util-macros-native_1.2.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require util-macros_${PV}.bb
-
-inherit native
-
-XORG_PN = "util-macros"
-
-S = "${WORKDIR}/util-macros-${PV}"
diff --git a/recipes/xorg-util/util-macros-native_1.3.0.bb b/recipes/xorg-util/util-macros-native_1.3.0.bb
deleted file mode 100644
index 618e78f116..0000000000
--- a/recipes/xorg-util/util-macros-native_1.3.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require util-macros_${PV}.bb
-
-inherit native
-
-XORG_PN = "util-macros"
-
-S = "${WORKDIR}/util-macros-${PV}"
diff --git a/recipes/xorg-util/util-macros-native_1.4.1.bb b/recipes/xorg-util/util-macros-native_1.4.1.bb
deleted file mode 100644
index 618e78f116..0000000000
--- a/recipes/xorg-util/util-macros-native_1.4.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require util-macros_${PV}.bb
-
-inherit native
-
-XORG_PN = "util-macros"
-
-S = "${WORKDIR}/util-macros-${PV}"
diff --git a/recipes/xorg-util/util-macros-native_1.5.0.bb b/recipes/xorg-util/util-macros-native_1.5.0.bb
deleted file mode 100644
index 618e78f116..0000000000
--- a/recipes/xorg-util/util-macros-native_1.5.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require util-macros_${PV}.bb
-
-inherit native
-
-XORG_PN = "util-macros"
-
-S = "${WORKDIR}/util-macros-${PV}"
diff --git a/recipes/xorg-util/util-macros.inc b/recipes/xorg-util/util-macros.inc
new file mode 100644
index 0000000000..9af52172f3
--- /dev/null
+++ b/recipes/xorg-util/util-macros.inc
@@ -0,0 +1,8 @@
+require xorg-util-common.inc
+
+DESCRIPTION = "X autotools macros"
+INC_PR = "r2"
+PE = "1"
+
+ALLOW_EMPTY = "1"
+BBCLASSEXTEND = "native"
diff --git a/recipes/xorg-util/util-macros_1.1.5.bb b/recipes/xorg-util/util-macros_1.1.5.bb
index 46fc0a8d19..f8d0b14c16 100644
--- a/recipes/xorg-util/util-macros_1.1.5.bb
+++ b/recipes/xorg-util/util-macros_1.1.5.bb
@@ -1,9 +1,5 @@
-require xorg-util-common.inc
-
-DESCRIPTION = "X autotools macros"
-PR = "r1"
-PE = "1"
-
-ALLOW_EMPTY = "1"
-
+require util-macros.inc
SRC_URI += "file://unbreak_cross_compile.patch;patch=1"
+PR = "${INC_PR}.0"
+SRC_URI[archive.md5sum] = "d168aa001b946b58d9aab6088c09d256"
+SRC_URI[archive.sha256sum] = "4f2a8a19e90ad82bc2da4eb52799a299a1c94bf5143bc2711e9e5d4cc5a7cdb4"
diff --git a/recipes/xorg-util/util-macros_1.1.6.bb b/recipes/xorg-util/util-macros_1.1.6.bb
index 4775fc6901..39ba8fab21 100644
--- a/recipes/xorg-util/util-macros_1.1.6.bb
+++ b/recipes/xorg-util/util-macros_1.1.6.bb
@@ -1,6 +1,4 @@
-require xorg-util-common.inc
-
-DESCRIPTION = "X autotools macros"
-PE = "1"
-
-ALLOW_EMPTY = "1"
+require util-macros.inc
+PR = "${INC_PR}.0"
+SRC_URI[archive.md5sum] = "ea2d9cd33ca6fd05923f007bd74d7c37"
+SRC_URI[archive.sha256sum] = "97748154c41a1cd12635a79aee0c2846fd48ecb555fc8b54e3e5baec174e6e74"
diff --git a/recipes/xorg-util/util-macros_1.2.1.bb b/recipes/xorg-util/util-macros_1.2.1.bb
index ddf8874a3b..4cc3b25019 100644
--- a/recipes/xorg-util/util-macros_1.2.1.bb
+++ b/recipes/xorg-util/util-macros_1.2.1.bb
@@ -1,12 +1,10 @@
-require xorg-util-common.inc
+require util-macros.inc
# Version 1.2.1 uses plain `gcc' for checking the compiler version.
# Instead, the cross compiler must be used. Whenever upgrading to
# a new version, please recheck for this problem, otherwise it breaks
# builds with older gcc versions!
SRC_URI += " file://cross-compiler-for-checking.patch;patch=1"
-
-DESCRIPTION = "X autotools macros"
-PE = "1"
-
-ALLOW_EMPTY = "1"
+PR = "${INC_PR}.0"
+SRC_URI[archive.md5sum] = "81b9746d6202ccf0b4a498cfd0731e71"
+SRC_URI[archive.sha256sum] = "f3804f02f51a1be243ce7413dc67dca774f000686f8f2efedc77203a1962d401"
diff --git a/recipes/xorg-util/util-macros_1.3.0.bb b/recipes/xorg-util/util-macros_1.3.0.bb
index 4775fc6901..1663b7ca36 100644
--- a/recipes/xorg-util/util-macros_1.3.0.bb
+++ b/recipes/xorg-util/util-macros_1.3.0.bb
@@ -1,6 +1,4 @@
-require xorg-util-common.inc
-
-DESCRIPTION = "X autotools macros"
-PE = "1"
-
-ALLOW_EMPTY = "1"
+require util-macros.inc
+PR = "${INC_PR}.0"
+SRC_URI[archive.md5sum] = "51bb54c08415ee3c3000b7df9e9b07c5"
+SRC_URI[archive.sha256sum] = "57d2629849796b4dc919261eadd1eea3ee6e634d58979797287f7e09408cde67"
diff --git a/recipes/xorg-util/util-macros_1.4.1.bb b/recipes/xorg-util/util-macros_1.4.1.bb
index 7e0b7d5cc9..12e6b1e2cb 100644
--- a/recipes/xorg-util/util-macros_1.4.1.bb
+++ b/recipes/xorg-util/util-macros_1.4.1.bb
@@ -1,8 +1,5 @@
-require xorg-util-common.inc
-
-DESCRIPTION = "X autotools macros"
-PE = "1"
-
+require util-macros.inc
SRC_URI += " file://malloc_zero_returns_null.patch;patch=1"
-
-ALLOW_EMPTY = "1"
+PR = "${INC_PR}.0"
+SRC_URI[archive.md5sum] = "8ac38951e753f250aaefbd4ba0afda94"
+SRC_URI[archive.sha256sum] = "d49ab68cad724ae51f6cb69f7f5cfff7629cbb066f4c5c8bda81d62675a21986"
diff --git a/recipes/xorg-util/util-macros_1.5.0.bb b/recipes/xorg-util/util-macros_1.5.0.bb
index 4775fc6901..ff3b6f4bdc 100644
--- a/recipes/xorg-util/util-macros_1.5.0.bb
+++ b/recipes/xorg-util/util-macros_1.5.0.bb
@@ -1,6 +1,4 @@
-require xorg-util-common.inc
-
-DESCRIPTION = "X autotools macros"
-PE = "1"
-
-ALLOW_EMPTY = "1"
+require util-macros.inc
+PR = "${INC_PR}.0"
+SRC_URI[archive.md5sum] = "ffef78135535c60c2b68d0a2a4ecae9b"
+SRC_URI[archive.sha256sum] = "d47116ce5df198859a6082af7a72505575d1685b8c82bb4ef6fbedfa3316617e"
diff --git a/recipes/xorg-util/util-macros_1.6.0.bb b/recipes/xorg-util/util-macros_1.6.0.bb
new file mode 100644
index 0000000000..c5a715f7be
--- /dev/null
+++ b/recipes/xorg-util/util-macros_1.6.0.bb
@@ -0,0 +1,4 @@
+require util-macros.inc
+SRC_URI[archive.md5sum] = "eb991c709781f811fbfcdbd43f9edd16"
+SRC_URI[archive.sha256sum] = "12c7a8819f2df62ff7fca20152438d6b4e93ac581d7de211e31149739aa37ce9"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-util/util-macros_1.6.1.bb b/recipes/xorg-util/util-macros_1.6.1.bb
new file mode 100644
index 0000000000..80c59713ed
--- /dev/null
+++ b/recipes/xorg-util/util-macros_1.6.1.bb
@@ -0,0 +1,4 @@
+require util-macros.inc
+SRC_URI[archive.md5sum] = "a4bef59dd4a2e3450c07c77c6b45a79f"
+SRC_URI[archive.sha256sum] = "ba91652d78f2a63d69253fb80af2f0a76c2e1b081c64521f90fac3866ee893d7"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-util/xorg-cf-files_1.0.2.bb b/recipes/xorg-util/xorg-cf-files_1.0.2.bb
index 7c3fb8d7e9..dcf1f1798d 100644
--- a/recipes/xorg-util/xorg-cf-files_1.0.2.bb
+++ b/recipes/xorg-util/xorg-cf-files_1.0.2.bb
@@ -6,3 +6,5 @@ PR = "r1"
PE = "1"
FILES_${PN} += " /usr/lib/X11/config"
+SRC_URI[archive.md5sum] = "f96f44b87132afd2fff677a8c89166dd"
+SRC_URI[archive.sha256sum] = "4edcaf61ad8b4bef65169af2b98d3992be07260f90cca65128dc523d6935bdd8"
diff --git a/recipes/xorg-util/xorg-cf-files_1.0.3.bb b/recipes/xorg-util/xorg-cf-files_1.0.3.bb
index 7c3fb8d7e9..222b23923a 100644
--- a/recipes/xorg-util/xorg-cf-files_1.0.3.bb
+++ b/recipes/xorg-util/xorg-cf-files_1.0.3.bb
@@ -2,7 +2,9 @@ require xorg-util-common.inc
DESCRIPTION = "X Window System CF files"
-PR = "r1"
+PR = "r2"
PE = "1"
FILES_${PN} += " /usr/lib/X11/config"
+SRC_URI[archive.md5sum] = "bca2403beb209952d66dc57be5a2f789"
+SRC_URI[archive.sha256sum] = "9a5e3533a4156a0e308ced437bde722cb291becc2276bdd0952e30b3b5060e92"
diff --git a/recipes/xorg-util/xorg-util-common.inc b/recipes/xorg-util/xorg-util-common.inc
index 56aae30725..b169d9ef58 100644
--- a/recipes/xorg-util/xorg-util-common.inc
+++ b/recipes/xorg-util/xorg-util-common.inc
@@ -2,14 +2,8 @@ HOMEPAGE = "http://www.x.org"
SECTION = "x11/utils"
LICENSE = "MIT-X"
-XORG_PN = "${PN}"
+SRC_URI = "${XORG_MIRROR}/individual/util/${BPN}-${PV}.tar.gz;name=archive"
-SRC_URI = "${XORG_MIRROR}/individual/util/${XORG_PN}-${PV}.tar.gz"
-
-S = "${WORKDIR}/${XORG_PN}-${PV}"
+S = "${WORKDIR}/${BPN}-${PV}"
inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/recipes/xorg-xserver/xorg-xserver-common.inc b/recipes/xorg-xserver/xorg-xserver-common.inc
index a2a95b74cf..a72812c22f 100644
--- a/recipes/xorg-xserver/xorg-xserver-common.inc
+++ b/recipes/xorg-xserver/xorg-xserver-common.inc
@@ -2,11 +2,19 @@ HOMEPAGE = "http://www.x.org"
SECTION = "x11/base"
LICENSE = "MIT-X"
-INC_PR = "r13"
+INC_PR = "r14"
PROVIDES = "virtual/xserver"
-DEPENDS = "hal fontconfig freetype flex-native lbxutil kbproto \
+# Config manager for xserver, options are: hal, udev, empty (for configuration in xorg.conf)
+DISTRO_XORG_CONFIG_MANAGER ?= "hal"
+DISTRO_XORG_CONFIG_MANAGER_shr ?= ""
+
+# default none, enabled by DISTRO_XORG_CONFIG_MANAGER setting
+CONFIG_MANAGER_OPTION += "${@['--disable-config-hal','--enable-config-hal',''][bb.data.getVar('DISTRO_XORG_CONFIG_MANAGER',d) in ['hal']]}"
+CONFIG_MANAGER_OPTION += "${@['--disable-config-udev','--enable-config-udev',''][bb.data.getVar('DISTRO_XORG_CONFIG_MANAGER',d) in ['udev']]}"
+
+DEPENDS = "fontconfig freetype flex-native lbxutil kbproto \
xf86driproto drm glproto randrproto renderproto fixesproto damageproto \
xcmiscproto xextproto xproto xf86miscproto xf86vidmodeproto xf86bigfontproto \
scrnsaverproto bigreqsproto resourceproto fontsproto inputproto \
@@ -14,12 +22,12 @@ xf86dgaproto videoproto compositeproto trapproto recordproto dmxproto \
resourceproto xineramaproto xtrans evieext libxkbfile libxfont libxau \
libfontenc libxdmcp libxxf86vm libxaw libxmu libxt libxpm libxext libx11 \
libxkbui libxxf86misc libxi libdmx libxtst libxres virtual/libgl libxcalibrate \
-libxv"
+libxv ${DISTRO_XORG_CONFIG_MANAGER}"
-RECOMMENDS_${PN} = "hal libpciaccess"
+RRECOMMENDS_${PN} = "libpciaccess"
XORG_PN = "xorg-server"
-SRC_URI = "${XORG_MIRROR}/individual/xserver/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/xserver/${XORG_PN}-${PV}.tar.bz2;name=archive"
S = "${WORKDIR}/${XORG_PN}-${PV}"
@@ -34,6 +42,8 @@ EXTRA_OECONF += " --enable-xcalibrate \
--with-default-font-path="/usr/share/fonts/X11/misc" \
ac_cv_file__usr_share_sgml_X11_defs_ent=no"
+# CONFIG_MANAGER_OPTION is used only in recipes which support those options
+
EXTRA_OECONF_append_arm = " ac_cv_header_linux_apm_bios_h=no "
PACKAGES =+ "xserver-security-policy"
diff --git a/recipes/xorg-xserver/xserver-kdrive-1.4.2/vm86_masks.patch b/recipes/xorg-xserver/xserver-kdrive-1.4.2/vm86_masks.patch
new file mode 100644
index 0000000000..b0044886e5
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-kdrive-1.4.2/vm86_masks.patch
@@ -0,0 +1,20 @@
+See https://bugs.gentoo.org/show_bug.cgi?id=235789
+2008-09-09 Martin von Gagern
+
+--- xorg-server-1.5.0.orig/hw/kdrive/vesa/vm86.h 2008-09-09 17:24:59.000000000 +0200
++++ xorg-server-1.5.0/hw/kdrive/vesa/vm86.h 2008-09-09 18:01:53.000000000 +0200
+@@ -67,6 +67,13 @@
+ #include "os.h"
+ #endif
+
++#ifndef IF_MASK
++#define IF_MASK X86_EFLAGS_IF
++#endif
++#ifndef IOPL_MASK
++#define IOPL_MASK X86_EFLAGS_IOPL
++#endif
++
+ typedef unsigned char U8;
+ typedef unsigned short U16;
+ typedef unsigned int U32;
+
diff --git a/recipes/xorg-xserver/xserver-kdrive-common.inc b/recipes/xorg-xserver/xserver-kdrive-common.inc
index fd4b2f6045..9df0232f9c 100644
--- a/recipes/xorg-xserver/xserver-kdrive-common.inc
+++ b/recipes/xorg-xserver/xserver-kdrive-common.inc
@@ -72,7 +72,7 @@ FILES_${PKGN}-smi = "${bindir}/Xsmi"
FILES_${PKGN}-vesa = "${bindir}/Xvesa"
FILES_${PKGN}-via = "${bindir}/Xvia"
-SRC_URI ?= "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
+SRC_URI ?= "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2;name=archive \
${KDRIVE_COMMON_PATCHES}"
KDRIVE_COMMON_PATCHES = " \
file://kmode.patch;patch=1 \
diff --git a/recipes/xorg-xserver/xserver-kdrive_1.4.2.bb b/recipes/xorg-xserver/xserver-kdrive_1.4.2.bb
index d0b7ac17e0..9a6074422a 100644
--- a/recipes/xorg-xserver/xserver-kdrive_1.4.2.bb
+++ b/recipes/xorg-xserver/xserver-kdrive_1.4.2.bb
@@ -4,7 +4,7 @@ DEPENDS += "hal libxkbfile libxcalibrate pixman"
RDEPENDS += "hal"
PE = "1"
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
${KDRIVE_COMMON_PATCHES} \
@@ -25,6 +25,7 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
file://xorg-avr32-support.diff;patch=1 \
file://pkgconfig_fix.patch;patch=1 \
file://no_xkb.patch;patch=1;pnum=0 \
+ file://vm86_masks.patch;patch=1 \
"
S = "${WORKDIR}/xorg-server-${PV}"
diff --git a/recipes/xorg-xserver/xserver-xorg-conf/archos5it/xorg.conf b/recipes/xorg-xserver/xserver-xorg-conf/archos5it/xorg.conf
new file mode 100644
index 0000000000..983bb0823a
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xorg-conf/archos5it/xorg.conf
@@ -0,0 +1,29 @@
+Section "Module"
+ Load "extmod"
+ Load "dbe"
+ Load "glx"
+ Load "freetype"
+ Load "type1"
+ Load "record"
+ Load "dri"
+EndSection
+
+Section "Monitor"
+ Identifier "Builtin Default Monitor"
+EndSection
+
+Section "Device"
+ Identifier "Builtin Default fbdev Device 0"
+ Driver "omapfb"
+EndSection
+
+Section "Screen"
+ Identifier "Builtin Default fbdev Screen 0"
+ Device "Builtin Default fbdev Device 0"
+ Monitor "Builtin Default Monitor"
+EndSection
+
+Section "ServerLayout"
+ Identifier "Builtin Default Layout"
+ Screen "Builtin Default fbdev Screen 0"
+EndSection
diff --git a/recipes/xorg-xserver/xserver-xorg-conf/eee701/xorg.conf b/recipes/xorg-xserver/xserver-xorg-conf/eee701/xorg.conf
index 8eb78bc894..4ee293b797 100644
--- a/recipes/xorg-xserver/xserver-xorg-conf/eee701/xorg.conf
+++ b/recipes/xorg-xserver/xserver-xorg-conf/eee701/xorg.conf
@@ -4,6 +4,7 @@ Section "ServerLayout"
InputDevice "Touchpad"
InputDevice "Keyboard"
InputDevice "Mouse"
+ Option "AllowEmptyInput" "false"
EndSection
Section "Files"
diff --git a/recipes/xorg-xserver/xserver-xorg-conf/om-gta01/xorg.conf b/recipes/xorg-xserver/xserver-xorg-conf/om-gta01/xorg.conf
index b77b5527b5..83eaa0cb2e 100644
--- a/recipes/xorg-xserver/xserver-xorg-conf/om-gta01/xorg.conf
+++ b/recipes/xorg-xserver/xserver-xorg-conf/om-gta01/xorg.conf
@@ -19,14 +19,14 @@ EndSection
Section "InputDevice"
Identifier "Power Button"
Driver "evdev"
- Option "Device" "/dev/input/event0"
+ Option "Device" "/dev/input/event2"
EndSection
Section "InputDevice"
Identifier "AUX Button"
Driver "evdev"
- Option "Device" "/dev/input/event4"
+ Option "Device" "/dev/input/event0"
EndSection
@@ -34,6 +34,7 @@ Section "InputDevice"
Identifier "Touchscreen"
Driver "evdev"
Option "Device" "/dev/input/event1"
+ Option "SwapAxes" "True"
EndSection
diff --git a/recipes/xorg-xserver/xserver-xorg-conf/ronetix-pm9263/xorg.conf b/recipes/xorg-xserver/xserver-xorg-conf/ronetix-pm9263/xorg.conf
index bdd6d71404..d4651ad877 100644
--- a/recipes/xorg-xserver/xserver-xorg-conf/ronetix-pm9263/xorg.conf
+++ b/recipes/xorg-xserver/xserver-xorg-conf/ronetix-pm9263/xorg.conf
@@ -1,6 +1,6 @@
#
# X11 configuration for Ronetix PM9263 device.
-# (C)2009 Koan sas - www.KoanSoftware.com
+# (C)2009-2010 Koan sas - www.KoanSoftware.com
#
Section "Monitor"
@@ -36,8 +36,9 @@ EndSection
Section "ServerLayout"
Identifier "Layout"
Screen "fbscreen"
- InputDevice "Generic Mouse"
InputDevice "atmel-ts" "CorePointer"
+# Enable mouse only if necessary, it may interfere with touchscreen behaviour
+# InputDevice "Generic Mouse"
EndSection
Section "ServerFlags"
diff --git a/recipes/xorg-xserver/xserver-xorg-conf_0.1.bb b/recipes/xorg-xserver/xserver-xorg-conf_0.1.bb
index ad8bcb4dcc..92cd17302d 100644
--- a/recipes/xorg-xserver/xserver-xorg-conf_0.1.bb
+++ b/recipes/xorg-xserver/xserver-xorg-conf_0.1.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Machine specific xorg.conf files"
-PR = "r19"
+PR = "r22"
SRC_URI = "file://xorg.conf"
diff --git a/recipes/xorg-xserver/xserver-xorg/0001-Add-a-PreConfigureWindow-hook.patch b/recipes/xorg-xserver/xserver-xorg/0001-Add-a-PreConfigureWindow-hook.patch
new file mode 100644
index 0000000000..c99b3e3299
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xorg/0001-Add-a-PreConfigureWindow-hook.patch
@@ -0,0 +1,80 @@
+From 653153e878ed568ce085ce6386d5c7f6ec4cb18e Mon Sep 17 00:00:00 2001
+From: Francisco Jerez <currojerez@riseup.net>
+Date: Fri, 22 Jan 2010 06:29:34 -0800
+Subject: [PATCH 1/5] Add a PreConfigureWindow hook.
+
+Executed from the ConfigureWindow request, right before sending
+ConfigureNotify to the clients.
+
+This commit breaks the ScreenRec ABI.
+
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+---
+ dix/window.c | 4 ++++
+ hw/xfree86/common/xf86Module.h | 6 +++---
+ include/scrnintstr.h | 10 ++++++++++
+ 3 files changed, 17 insertions(+), 3 deletions(-)
+
+diff --git a/dix/window.c b/dix/window.c
+index 2676a54..980436a 100644
+--- a/dix/window.c
++++ b/dix/window.c
+@@ -2303,6 +2303,10 @@ ConfigureWindow(WindowPtr pWin, Mask mask, XID *vlist, ClientPtr client)
+ return(Success);
+
+ ActuallyDoSomething:
++ if (pWin->drawable.pScreen->PreConfigureWindow)
++ (*pWin->drawable.pScreen->PreConfigureWindow)(pWin, x, y,
++ w, h, bw, pSib);
++
+ if (SubStrSend(pWin, pParent))
+ {
+ memset(&event, 0, sizeof(xEvent));
+diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
+index bbf5786..d61758f 100644
+--- a/hw/xfree86/common/xf86Module.h
++++ b/hw/xfree86/common/xf86Module.h
+@@ -82,9 +82,9 @@ typedef enum {
+ * mask is 0xFFFF0000.
+ */
+ #define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 4)
+-#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(7, 0)
+-#define ABI_XINPUT_VERSION SET_ABI_VERSION(9, 0)
+-#define ABI_EXTENSION_VERSION SET_ABI_VERSION(3, 0)
++#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(8, 0)
++#define ABI_XINPUT_VERSION SET_ABI_VERSION(10, 0)
++#define ABI_EXTENSION_VERSION SET_ABI_VERSION(4, 0)
+ #define ABI_FONT_VERSION SET_ABI_VERSION(0, 6)
+
+ #define MODINFOSTRING1 0xef23fdc5
+diff --git a/include/scrnintstr.h b/include/scrnintstr.h
+index ab50e7a..467b61c 100644
+--- a/include/scrnintstr.h
++++ b/include/scrnintstr.h
+@@ -399,6 +399,15 @@ typedef void (* PostChangeSaveUnderProcPtr)(
+ WindowPtr /*pLayerWin*/,
+ WindowPtr /*firstChild*/);
+
++typedef void (* PreConfigureWindowProcPtr)(
++ WindowPtr /*pWin*/,
++ int /*x*/,
++ int /*y*/,
++ int /*w*/,
++ int /*h*/,
++ int /*bw*/,
++ WindowPtr /*pSib*/);
++
+ typedef void (* MoveWindowProcPtr)(
+ WindowPtr /*pWin*/,
+ int /*x*/,
+@@ -581,6 +590,7 @@ typedef struct _Screen {
+ MarkOverlappedWindowsProcPtr MarkOverlappedWindows;
+ ChangeSaveUnderProcPtr ChangeSaveUnder;
+ PostChangeSaveUnderProcPtr PostChangeSaveUnder;
++ PreConfigureWindowProcPtr PreConfigureWindow;
+ MoveWindowProcPtr MoveWindow;
+ ResizeWindowProcPtr ResizeWindow;
+ GetLayerWindowProcPtr GetLayerWindow;
+--
+1.7.0
+
diff --git a/recipes/xorg-xserver/xserver-xorg/0002-dri2-No-need-to-blit-from-front-on-DRI2GetBuffers-if.patch b/recipes/xorg-xserver/xserver-xorg/0002-dri2-No-need-to-blit-from-front-on-DRI2GetBuffers-if.patch
new file mode 100644
index 0000000000..25c073b81e
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xorg/0002-dri2-No-need-to-blit-from-front-on-DRI2GetBuffers-if.patch
@@ -0,0 +1,111 @@
+From 2723b7a678e75e0a070e90ec223309c9b739d24b Mon Sep 17 00:00:00 2001
+From: Francisco Jerez <currojerez@riseup.net>
+Date: Fri, 22 Jan 2010 06:29:35 -0800
+Subject: [PATCH 2/5] dri2: No need to blit from front on DRI2GetBuffers if they're just being reused.
+
+It can be quite an expensive operation, so we're better off not doing
+it unless it's totally required.
+
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+---
+ hw/xfree86/dri2/dri2.c | 42 +++++++++++++++++++++++-------------------
+ 1 files changed, 23 insertions(+), 19 deletions(-)
+
+diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
+index cd69ca0..48618e1 100644
+--- a/hw/xfree86/dri2/dri2.c
++++ b/hw/xfree86/dri2/dri2.c
+@@ -202,27 +202,25 @@ find_attachment(DRI2DrawablePtr pPriv, unsigned attachment)
+ return -1;
+ }
+
+-static DRI2BufferPtr
++static Bool
+ allocate_or_reuse_buffer(DrawablePtr pDraw, DRI2ScreenPtr ds,
+ DRI2DrawablePtr pPriv,
+ unsigned int attachment, unsigned int format,
+- int dimensions_match)
++ int dimensions_match, DRI2BufferPtr *buffer)
+ {
+- DRI2BufferPtr buffer;
+- int old_buf;
+-
+- old_buf = find_attachment(pPriv, attachment);
++ int old_buf = find_attachment(pPriv, attachment);
+
+ if ((old_buf < 0)
+ || !dimensions_match
+ || (pPriv->buffers[old_buf]->format != format)) {
+- buffer = (*ds->CreateBuffer)(pDraw, attachment, format);
++ *buffer = (*ds->CreateBuffer)(pDraw, attachment, format);
++ return TRUE;
++
+ } else {
+- buffer = pPriv->buffers[old_buf];
++ *buffer = pPriv->buffers[old_buf];
+ pPriv->buffers[old_buf] = NULL;
++ return FALSE;
+ }
+-
+- return buffer;
+ }
+
+ static DRI2BufferPtr *
+@@ -238,6 +236,7 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height,
+ int have_fake_front = 0;
+ int front_format = 0;
+ int dimensions_match;
++ int buffers_changed = 0;
+ int i;
+
+ if (!pPriv) {
+@@ -256,8 +255,10 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height,
+ const unsigned attachment = *(attachments++);
+ const unsigned format = (has_format) ? *(attachments++) : 0;
+
+- buffers[i] = allocate_or_reuse_buffer(pDraw, ds, pPriv, attachment,
+- format, dimensions_match);
++ if (allocate_or_reuse_buffer(pDraw, ds, pPriv, attachment,
++ format, dimensions_match,
++ &buffers[i]))
++ buffers_changed = 1;
+
+ /* If the drawable is a window and the front-buffer is requested,
+ * silently add the fake front-buffer to the list of requested
+@@ -287,15 +288,18 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height,
+ }
+
+ if (need_real_front > 0) {
+- buffers[i++] = allocate_or_reuse_buffer(pDraw, ds, pPriv,
+- DRI2BufferFrontLeft,
+- front_format, dimensions_match);
++ if (allocate_or_reuse_buffer(pDraw, ds, pPriv, DRI2BufferFrontLeft,
++ front_format, dimensions_match,
++ &buffers[i++]))
++ buffers_changed = 1;
+ }
+
+ if (need_fake_front > 0) {
+- buffers[i++] = allocate_or_reuse_buffer(pDraw, ds, pPriv,
+- DRI2BufferFakeFrontLeft,
+- front_format, dimensions_match);
++ if (allocate_or_reuse_buffer(pDraw, ds, pPriv, DRI2BufferFakeFrontLeft,
++ front_format, dimensions_match,
++ &buffers[i++]))
++ buffers_changed = 1;
++
+ have_fake_front = 1;
+ }
+
+@@ -324,7 +328,7 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height,
+ * contents of the real front-buffer. This ensures correct operation of
+ * applications that call glXWaitX before calling glDrawBuffer.
+ */
+- if (have_fake_front) {
++ if (have_fake_front && buffers_changed) {
+ BoxRec box;
+ RegionRec region;
+
+--
+1.7.0
+
diff --git a/recipes/xorg-xserver/xserver-xorg/0003-glx-Enforce-a-1-1-correspondence-between-GLX-and-X11.patch b/recipes/xorg-xserver/xserver-xorg/0003-glx-Enforce-a-1-1-correspondence-between-GLX-and-X11.patch
new file mode 100644
index 0000000000..74bff9b9b9
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xorg/0003-glx-Enforce-a-1-1-correspondence-between-GLX-and-X11.patch
@@ -0,0 +1,161 @@
+From b629ae3db6a87fa91e5b2fd5deb4ccc6075ad243 Mon Sep 17 00:00:00 2001
+From: Francisco Jerez <currojerez@riseup.net>
+Date: Fri, 22 Jan 2010 06:29:36 -0800
+Subject: [PATCH 3/5] glx: Enforce a 1:1 correspondence between GLX and X11 windows.
+
+The spec says (regarding glXCreateWindow): "If there is already a
+GLXFBConfig associated with win (as a result of a previous
+glXCreateWindow call), then a BadAlloc error is generated.". It will
+also come useful to implement DRI2InvalidateBuffers for the indirect
+case.
+
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+---
+ glx/glxcmds.c | 51 +++++++++++++++++++++++++++++++++++++++++++++------
+ glx/glxserver.h | 1 +
+ 2 files changed, 46 insertions(+), 6 deletions(-)
+
+diff --git a/glx/glxcmds.c b/glx/glxcmds.c
+index 77afbf4..0e1c89c 100644
+--- a/glx/glxcmds.c
++++ b/glx/glxcmds.c
+@@ -51,6 +51,15 @@
+ #include "indirect_table.h"
+ #include "indirect_util.h"
+
++static int glxWindowPrivateKeyIndex;
++static DevPrivateKey glxWindowPrivateKey = &glxWindowPrivateKeyIndex;
++
++__GLXdrawable *
++glxGetDrawableFromWindow(WindowPtr pWin)
++{
++ return dixLookupPrivate(&pWin->devPrivates, glxWindowPrivateKey);
++}
++
+ static int
+ validGlxScreen(ClientPtr client, int screen, __GLXscreen **pGlxScreen, int *err)
+ {
+@@ -473,6 +482,7 @@ __glXGetDrawable(__GLXcontext *glxc, GLXDrawable drawId, ClientPtr client,
+ int *error)
+ {
+ DrawablePtr pDraw;
++ WindowPtr pWin;
+ __GLXdrawable *pGlxDraw;
+ int rc;
+
+@@ -499,6 +509,12 @@ __glXGetDrawable(__GLXcontext *glxc, GLXDrawable drawId, ClientPtr client,
+ return NULL;
+ }
+
++ pWin = (WindowPtr)pDraw;
++
++ pGlxDraw = glxGetDrawableFromWindow(pWin);
++ if (pGlxDraw)
++ return pGlxDraw;
++
+ if (pDraw->pScreen != glxc->pGlxScreen->pScreen) {
+ client->errorValue = pDraw->pScreen->myNum;
+ *error = BadMatch;
+@@ -519,6 +535,8 @@ __glXGetDrawable(__GLXcontext *glxc, GLXDrawable drawId, ClientPtr client,
+ return NULL;
+ }
+
++ dixSetPrivate(&pWin->devPrivates, glxWindowPrivateKey, pGlxDraw);
++
+ return pGlxDraw;
+ }
+
+@@ -1107,9 +1125,10 @@ __glXDrawableRelease(__GLXdrawable *drawable)
+ }
+ }
+
+-static int
++static int
+ DoCreateGLXDrawable(ClientPtr client, __GLXscreen *pGlxScreen, __GLXconfig *config,
+- DrawablePtr pDraw, XID glxDrawableId, int type)
++ DrawablePtr pDraw, XID glxDrawableId, int type,
++ __GLXdrawable **ret)
+ {
+ __GLXdrawable *pGlxDraw;
+
+@@ -1128,6 +1147,9 @@ DoCreateGLXDrawable(ClientPtr client, __GLXscreen *pGlxScreen, __GLXconfig *conf
+ return BadAlloc;
+ }
+
++ if (ret)
++ *ret = pGlxDraw;
++
+ return Success;
+ }
+
+@@ -1149,7 +1171,7 @@ DoCreateGLXPixmap(ClientPtr client, __GLXscreen *pGlxScreen, __GLXconfig *config
+ }
+
+ err = DoCreateGLXDrawable(client, pGlxScreen, config, pDraw,
+- glxDrawableId, GLX_DRAWABLE_PIXMAP);
++ glxDrawableId, GLX_DRAWABLE_PIXMAP, NULL);
+
+ if (err == Success)
+ ((PixmapPtr) pDraw)->refcnt++;
+@@ -1305,7 +1327,7 @@ DoCreatePbuffer(ClientPtr client, int screenNum, XID fbconfigId,
+ __glXleaveServer(GL_FALSE);
+
+ return DoCreateGLXDrawable(client, pGlxScreen, config, &pPixmap->drawable,
+- glxDrawableId, GLX_DRAWABLE_PBUFFER);
++ glxDrawableId, GLX_DRAWABLE_PBUFFER, NULL);
+ }
+
+ int __glXDisp_CreatePbuffer(__GLXclientState *cl, GLbyte *pc)
+@@ -1409,6 +1431,8 @@ int __glXDisp_CreateWindow(__GLXclientState *cl, GLbyte *pc)
+ __GLXscreen *pGlxScreen;
+ ClientPtr client = cl->client;
+ DrawablePtr pDraw;
++ WindowPtr pWin;
++ __GLXdrawable *pGlxDraw;
+ int err;
+
+ if (!validGlxScreen(client, req->screen, &pGlxScreen, &err))
+@@ -1422,11 +1446,26 @@ int __glXDisp_CreateWindow(__GLXclientState *cl, GLbyte *pc)
+ return BadWindow;
+ }
+
++ pWin = (WindowPtr)pDraw;
++
++ /* Make sure there're no already associated GLX drawables. */
++ if (glxGetDrawableFromWindow(pWin)) {
++ client->errorValue = req->window;
++ return BadAlloc;
++ }
++
+ if (!validGlxFBConfigForWindow(client, config, pDraw, &err))
+ return err;
+
+- return DoCreateGLXDrawable(client, pGlxScreen, config,
+- pDraw, req->glxwindow, GLX_DRAWABLE_WINDOW);
++ err = DoCreateGLXDrawable(client, pGlxScreen, config,
++ pDraw, req->glxwindow,
++ GLX_DRAWABLE_WINDOW, &pGlxDraw);
++ if (err)
++ return err;
++
++ dixSetPrivate(&pWin->devPrivates, glxWindowPrivateKey, pGlxDraw);
++
++ return Success;
+ }
+
+ int __glXDisp_DestroyWindow(__GLXclientState *cl, GLbyte *pc)
+diff --git a/glx/glxserver.h b/glx/glxserver.h
+index 1daf977..3c49b5e 100644
+--- a/glx/glxserver.h
++++ b/glx/glxserver.h
+@@ -80,6 +80,7 @@ typedef struct __GLXcontext __GLXcontext;
+
+ extern __GLXscreen *glxGetScreen(ScreenPtr pScreen);
+ extern __GLXclientState *glxGetClient(ClientPtr pClient);
++extern __GLXdrawable *glxGetDrawableFromWindow(WindowPtr pWin);
+
+ /************************************************************************/
+
+--
+1.7.0
+
diff --git a/recipes/xorg-xserver/xserver-xorg/0004-glx-dri2-Notify-the-driver-when-its-buffers-become-i.patch b/recipes/xorg-xserver/xserver-xorg/0004-glx-dri2-Notify-the-driver-when-its-buffers-become-i.patch
new file mode 100644
index 0000000000..f60de12236
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xorg/0004-glx-dri2-Notify-the-driver-when-its-buffers-become-i.patch
@@ -0,0 +1,82 @@
+From bc57de2551b792f49a92c90f6cf8a4890ede038f Mon Sep 17 00:00:00 2001
+From: Francisco Jerez <currojerez@riseup.net>
+Date: Fri, 22 Jan 2010 06:29:37 -0800
+Subject: [PATCH 4/5] glx/dri2: Notify the driver when its buffers become invalid.
+
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+---
+ glx/glxdri2.c | 30 ++++++++++++++++++++++++++----
+ 1 files changed, 26 insertions(+), 4 deletions(-)
+
+diff --git a/glx/glxdri2.c b/glx/glxdri2.c
+index edd29b0..5c617d9 100644
+--- a/glx/glxdri2.c
++++ b/glx/glxdri2.c
+@@ -67,6 +67,7 @@ struct __GLXDRIscreen {
+
+ xf86EnterVTProc *enterVT;
+ xf86LeaveVTProc *leaveVT;
++ PreConfigureWindowProcPtr PreConfigureWindow;
+
+ const __DRIcoreExtension *core;
+ const __DRIdri2Extension *dri2;
+@@ -217,6 +218,10 @@ __glXDRIdrawableSwapBuffers(ClientPtr client, __GLXdrawable *drawable)
+ __GLXDRIscreen *screen = priv->screen;
+ CARD64 unused;
+
++ if (DRI2SwapBuffers(client, drawable->pDraw, 0, 0, 0, &unused,
++ __glXdriSwapEvent, drawable->pDraw) != Success)
++ return FALSE;
++
+ #if __DRI2_FLUSH_VERSION >= 3
+ if (screen->flush) {
+ (*screen->flush->flush)(priv->driDrawable);
+@@ -227,10 +232,6 @@ __glXDRIdrawableSwapBuffers(ClientPtr client, __GLXdrawable *drawable)
+ (*screen->flush->flushInvalidate)(priv->driDrawable);
+ #endif
+
+- if (DRI2SwapBuffers(client, drawable->pDraw, 0, 0, 0, &unused,
+- __glXdriSwapEvent, drawable->pDraw) != Success)
+- return FALSE;
+-
+ return TRUE;
+ }
+
+@@ -614,6 +615,24 @@ glxDRILeaveVT (int index, int flags)
+ }
+
+ static void
++glxDRIPreConfigureWindow(WindowPtr pWin, int x, int y, int w, int h, int bw,
++ WindowPtr pSib)
++{
++ ScreenPtr pScreen = pWin->drawable.pScreen;
++ __GLXDRIscreen *screen = (__GLXDRIscreen *)glxGetScreen(pScreen);
++ __GLXDRIdrawable *draw = (__GLXDRIdrawable *)glxGetDrawableFromWindow(pWin);
++
++ if (screen->PreConfigureWindow)
++ (*screen->PreConfigureWindow)(pWin, x, y, w, h, bw, pSib);
++
++ if (!draw || (draw->height == h && draw->width == w))
++ return;
++
++ if (screen->flush)
++ screen->flush->invalidate(draw->driDrawable);
++}
++
++static void
+ initializeExtensions(__GLXDRIscreen *screen)
+ {
+ const __DRIextension **extensions;
+@@ -789,6 +808,9 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
+ screen->leaveVT = pScrn->LeaveVT;
+ pScrn->LeaveVT = glxDRILeaveVT;
+
++ screen->PreConfigureWindow = pScreen->PreConfigureWindow;
++ pScreen->PreConfigureWindow = glxDRIPreConfigureWindow;
++
+ LogMessage(X_INFO,
+ "AIGLX: Loaded and initialized %s\n", filename);
+
+--
+1.7.0
+
diff --git a/recipes/xorg-xserver/xserver-xorg/0005-dri2-Support-the-DRI2InvalidateBuffers-event.patch b/recipes/xorg-xserver/xserver-xorg/0005-dri2-Support-the-DRI2InvalidateBuffers-event.patch
new file mode 100644
index 0000000000..9bf4f27072
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xorg/0005-dri2-Support-the-DRI2InvalidateBuffers-event.patch
@@ -0,0 +1,319 @@
+From 2b9b1327984cb1f3588e77b1bdb2e7641de2ffb9 Mon Sep 17 00:00:00 2001
+From: Francisco Jerez <currojerez@riseup.net>
+Date: Fri, 22 Jan 2010 06:29:38 -0800
+Subject: [PATCH 5/5] dri2: Support the DRI2InvalidateBuffers event.
+
+Bumps the supported DRI2 protocol version.
+
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+---
+ configure.ac | 2 +-
+ hw/xfree86/dri2/dri2.c | 110 +++++++++++++++++++++++++++++++++++++++++++
+ hw/xfree86/dri2/dri2.h | 5 ++
+ hw/xfree86/dri2/dri2ext.c | 35 ++++++++++++--
+ include/protocol-versions.h | 2 +-
+ 5 files changed, 148 insertions(+), 6 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index de252f3..e9ca45a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -759,7 +759,7 @@ RECORDPROTO="recordproto >= 1.13.99.1"
+ SCRNSAVERPROTO="scrnsaverproto >= 1.1"
+ RESOURCEPROTO="resourceproto"
+ DRIPROTO="xf86driproto >= 2.1.0"
+-DRI2PROTO="dri2proto >= 2.2"
++DRI2PROTO="dri2proto >= 2.3"
+ XINERAMAPROTO="xineramaproto"
+ BIGFONTPROTO="xf86bigfontproto >= 1.2.0"
+ XCALIBRATEPROTO="xcalibrateproto"
+diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
+index 48618e1..51040d4 100644
+--- a/hw/xfree86/dri2/dri2.c
++++ b/hw/xfree86/dri2/dri2.c
+@@ -52,6 +52,13 @@ static DevPrivateKey dri2WindowPrivateKey = &dri2WindowPrivateKeyIndex;
+ static int dri2PixmapPrivateKeyIndex;
+ static DevPrivateKey dri2PixmapPrivateKey = &dri2PixmapPrivateKeyIndex;
+
++typedef struct _DRI2ClientRef *DRI2ClientRefPtr;
++
++struct _DRI2ClientRef {
++ DRI2ClientRefPtr next;
++ XID resource;
++};
++
+ typedef struct _DRI2Drawable {
+ unsigned int refCount;
+ int width;
+@@ -65,6 +72,8 @@ typedef struct _DRI2Drawable {
+ CARD64 target_sbc; /* -1 means no SBC wait outstanding */
+ CARD64 last_swap_target; /* most recently queued swap target */
+ int swap_limit; /* for N-buffering */
++ DRI2ClientRefPtr track_clients; /* Clients to notify on drawable changes. */
++
+ } DRI2DrawableRec, *DRI2DrawablePtr;
+
+ typedef struct _DRI2Screen *DRI2ScreenPtr;
+@@ -84,6 +93,8 @@ typedef struct _DRI2Screen {
+ DRI2ScheduleWaitMSCProcPtr ScheduleWaitMSC;
+
+ HandleExposuresProcPtr HandleExposures;
++
++ PreConfigureWindowProcPtr PreConfigureWindow;
+ } DRI2ScreenRec;
+
+ static DRI2ScreenPtr
+@@ -143,6 +154,7 @@ DRI2CreateDrawable(DrawablePtr pDraw)
+ pPriv->swap_interval = 1;
+ pPriv->last_swap_target = -1;
+ pPriv->swap_limit = 1; /* default to double buffering */
++ pPriv->track_clients = NULL;
+
+ if (pDraw->type == DRAWABLE_WINDOW)
+ {
+@@ -405,6 +417,78 @@ DRI2BlockClient(ClientPtr client, DrawablePtr pDraw)
+ }
+ }
+
++extern RESTYPE dri2DrawableRes;
++
++int
++DRI2TrackClient(DrawablePtr pDraw, int id)
++{
++ DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
++ DRI2ClientRefPtr ref;
++
++ if (pPriv == NULL)
++ return BadDrawable;
++
++ /* Check if the client is already in. */
++ for (ref = pPriv->track_clients; ref; ref = ref->next) {
++ if (CLIENT_ID(ref->resource) == id)
++ return Success;
++ }
++
++ /* Allocate a client ref. */
++ ref = xalloc(sizeof(*ref));
++ if (ref == NULL)
++ return BadAlloc;
++
++ ref->next = pPriv->track_clients;
++ pPriv->track_clients = ref;
++
++ /* Allocate a resource for it. */
++ ref->resource = FakeClientID(id);
++ if (!AddResource(ref->resource, dri2DrawableRes, pDraw))
++ return BadAlloc;
++
++ return Success;
++}
++
++void
++DRI2UntrackClient(DrawablePtr pDraw, int id)
++{
++ DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
++ DRI2ClientRefPtr ref, *prev;
++
++ if (pPriv == NULL)
++ return;
++
++ prev = &pPriv->track_clients;
++
++ for (ref = *prev; ref; prev = &ref->next, ref = ref->next) {
++ if (CLIENT_ID(ref->resource) == id) {
++ *prev = ref->next;
++ xfree(ref);
++ break;
++ }
++ }
++}
++
++void
++DRI2InvalidateDrawable(DrawablePtr pDraw)
++{
++ DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
++ DRI2ClientRefPtr ref;
++
++ if (pPriv == NULL)
++ return;
++
++ while ((ref = pPriv->track_clients)) {
++ ClientPtr client = clients[CLIENT_ID(ref->resource)];
++
++ FreeResource(ref->resource, RT_NONE);
++
++ if (client && !client->clientGone)
++ DRI2InvalidateBuffersEvent(pDraw, client);
++ }
++}
++
+ int
+ DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion,
+ unsigned int dest, unsigned int src)
+@@ -759,6 +843,8 @@ DRI2DestroyDrawable(DrawablePtr pDraw)
+ DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
+ DRI2DrawablePtr pPriv;
+
++ DRI2ClientRefPtr ref;
++
+ pPriv = DRI2GetDrawable(pDraw);
+ if (pPriv == NULL)
+ return;
+@@ -776,6 +862,9 @@ DRI2DestroyDrawable(DrawablePtr pDraw)
+ xfree(pPriv->buffers);
+ }
+
++ while ((ref = pPriv->track_clients))
++ FreeResource(ref->resource, RT_NONE);
++
+ /* If the window is destroyed while we have a swap pending, don't
+ * actually free the priv yet. We'll need it in the DRI2SwapComplete()
+ * callback and we'll free it there once we're done. */
+@@ -811,6 +900,24 @@ DRI2Authenticate(ScreenPtr pScreen, drm_magic_t magic)
+ return TRUE;
+ }
+
++static void
++DRI2PreConfigureWindow(WindowPtr pWin, int x, int y, int w, int h, int bw,
++ WindowPtr pSib)
++{
++ DrawablePtr pDraw = (DrawablePtr)pWin;
++ ScreenPtr pScreen = pDraw->pScreen;
++ DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
++ DRI2DrawablePtr dd = DRI2GetDrawable(pDraw);
++
++ if (ds->PreConfigureWindow)
++ (*ds->PreConfigureWindow)(pWin, x, y, w, h, bw, pSib);
++
++ if (!dd || (dd->width == w && dd->height == h))
++ return;
++
++ DRI2InvalidateDrawable(pDraw);
++}
++
+ Bool
+ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
+ {
+@@ -869,6 +976,9 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
+
+ dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, ds);
+
++ ds->PreConfigureWindow = pScreen->PreConfigureWindow;
++ pScreen->PreConfigureWindow = DRI2PreConfigureWindow;
++
+ xf86DrvMsg(pScreen->myNum, X_INFO, "[DRI2] Setup complete\n");
+ for (i = 0; i < sizeof(driverTypeNames) / sizeof(driverTypeNames[0]); i++) {
+ if (i < ds->numDrivers && ds->driverNames[i]) {
+diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
+index 1c8626b..59bab70 100644
+--- a/hw/xfree86/dri2/dri2.h
++++ b/hw/xfree86/dri2/dri2.h
+@@ -265,4 +265,9 @@ extern _X_EXPORT void DRI2WaitMSCComplete(ClientPtr client, DrawablePtr pDraw,
+ int frame, unsigned int tv_sec,
+ unsigned int tv_usec);
+
++extern _X_EXPORT int DRI2TrackClient(DrawablePtr pDraw, int id);
++extern _X_EXPORT void DRI2UntrackClient(DrawablePtr pDraw, int id);
++extern _X_EXPORT void DRI2InvalidateBuffersEvent(DrawablePtr pDraw, ClientPtr client);
++extern _X_EXPORT void DRI2InvalidateDrawable(DrawablePtr pDraw);
++
+ #endif
+diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c
+index 3e6b03e..713c82e 100644
+--- a/hw/xfree86/dri2/dri2ext.c
++++ b/hw/xfree86/dri2/dri2ext.c
+@@ -51,7 +51,7 @@
+ #include "xf86Module.h"
+
+ static ExtensionEntry *dri2Extension;
+-static RESTYPE dri2DrawableRes;
++RESTYPE dri2DrawableRes;
+
+ static Bool
+ validDrawable(ClientPtr client, XID drawable, Mask access_mode,
+@@ -266,6 +266,9 @@ ProcDRI2GetBuffers(ClientPtr client)
+ buffers = DRI2GetBuffers(pDrawable, &width, &height,
+ attachments, stuff->count, &count);
+
++ status = DRI2TrackClient(pDrawable, client->index);
++ if (status)
++ return status;
+
+ send_buffers_reply(client, pDrawable, buffers, count, width, height);
+
+@@ -293,6 +296,10 @@ ProcDRI2GetBuffersWithFormat(ClientPtr client)
+ buffers = DRI2GetBuffersWithFormat(pDrawable, &width, &height,
+ attachments, stuff->count, &count);
+
++ status = DRI2TrackClient(pDrawable, client->index);
++ if (status)
++ return status;
++
+ send_buffers_reply(client, pDrawable, buffers, count, width, height);
+
+ return client->noClientException;
+@@ -367,6 +374,18 @@ DRI2SwapEvent(ClientPtr client, void *data, int type, CARD64 ust, CARD64 msc,
+ WriteEventsToClient(client, 1, (xEvent *)&event);
+ }
+
++void
++DRI2InvalidateBuffersEvent(DrawablePtr pDraw, ClientPtr client)
++{
++ xDRI2InvalidateBuffers event;
++
++ event.type = DRI2EventBase + DRI2_InvalidateBuffers;
++ event.sequenceNumber = client->sequence;
++ event.drawable = pDraw->id;
++
++ WriteEventsToClient(client, 1, (xEvent *)&event);
++}
++
+ static int
+ ProcDRI2SwapBuffers(ClientPtr client)
+ {
+@@ -391,6 +410,8 @@ ProcDRI2SwapBuffers(ClientPtr client)
+ if (status != Success)
+ return BadDrawable;
+
++ DRI2InvalidateDrawable(pDrawable);
++
+ rep.type = X_Reply;
+ rep.length = 0;
+ rep.sequenceNumber = client->sequence;
+@@ -618,11 +639,17 @@ SProcDRI2Dispatch (ClientPtr client)
+ }
+ }
+
+-static int DRI2DrawableGone(pointer p, XID id)
++static int
++DRI2DrawableGone(pointer p, XID id)
+ {
+- DrawablePtr pDrawable = p;
++ DrawablePtr pDraw = p;
+
+- DRI2DestroyDrawable(pDrawable);
++ if (pDraw->id != id) {
++ /* Secondary reference. */
++ DRI2UntrackClient(pDraw, CLIENT_ID(id));
++ } else {
++ DRI2DestroyDrawable(pDraw);
++ }
+
+ return Success;
+ }
+diff --git a/include/protocol-versions.h b/include/protocol-versions.h
+index c74b7fa..c425eef 100644
+--- a/include/protocol-versions.h
++++ b/include/protocol-versions.h
+@@ -53,7 +53,7 @@
+
+ /* DRI2 */
+ #define SERVER_DRI2_MAJOR_VERSION 1
+-#define SERVER_DRI2_MINOR_VERSION 2
++#define SERVER_DRI2_MINOR_VERSION 3
+
+ /* Generic event extension */
+ #define SERVER_GE_MAJOR_VERSION 1
+--
+1.7.0
+
diff --git a/recipes/xorg-xserver/xserver-xorg_1.7.1.bb b/recipes/xorg-xserver/xserver-xorg_1.7.1.bb
index 8f72741387..08908b784f 100644
--- a/recipes/xorg-xserver/xserver-xorg_1.7.1.bb
+++ b/recipes/xorg-xserver/xserver-xorg_1.7.1.bb
@@ -3,7 +3,7 @@ require xorg-xserver-common.inc
DESCRIPTION = "the X.Org X server"
DEPENDS += "pixman libpciaccess openssl dri2proto glproto xorg-minimal-fonts"
PE = "2"
-PR = "r1"
+PR = "${INC_PR}.0"
SRC_URI += "file://sysroot_fix.patch;patch=1 \
file://dolt-fix-1.7.0.patch;patch=1 \
diff --git a/recipes/xorg-xserver/xserver-xorg_1.7.2.bb b/recipes/xorg-xserver/xserver-xorg_1.7.2.bb
deleted file mode 100644
index 8f72741387..0000000000
--- a/recipes/xorg-xserver/xserver-xorg_1.7.2.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-require xorg-xserver-common.inc
-
-DESCRIPTION = "the X.Org X server"
-DEPENDS += "pixman libpciaccess openssl dri2proto glproto xorg-minimal-fonts"
-PE = "2"
-PR = "r1"
-
-SRC_URI += "file://sysroot_fix.patch;patch=1 \
- file://dolt-fix-1.7.0.patch;patch=1 \
- file://randr-support-1.7.0.patch;patch=1 \
- "
-do_install_prepend() {
- mkdir -p ${D}/${libdir}/X11/fonts
-}
-
-EXTRA_OECONF += "--disable-xephyr --disable-config-hal --disable-xinerama --disable-kdrive --disable-xephyr --disable-xsdl --disable-xfake --disable-xfbdev --disable-dmx"
-EXTRA_OECONF += " --disable-glx-tls --enable-dri2 --disable-unit-tests "
-
-export LDFLAGS += " -ldl "
diff --git a/recipes/xorg-xserver/xserver-xorg_1.7.3.bb b/recipes/xorg-xserver/xserver-xorg_1.7.3.bb
deleted file mode 100644
index 2ecb169a84..0000000000
--- a/recipes/xorg-xserver/xserver-xorg_1.7.3.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-require xorg-xserver-common.inc
-
-DESCRIPTION = "the X.Org X server"
-DEPENDS += "pixman libpciaccess openssl dri2proto glproto xorg-minimal-fonts"
-PE = "2"
-PR = "r5"
-
-SRC_URI += "file://sysroot_fix.patch;patch=1 \
- file://dolt-fix-1.7.0.patch;patch=1 \
- file://randr-support-1.7.0.patch;patch=1 \
- file://hack-fbdev-ignore-return-mode.patch;patch=1 \
- "
-
-SRC_URI_append_angstrom = " file://hack-assume-pixman-supports-overlapped-blt.patch;patch=1"
-SRC_URI_append_shr = " file://hack-assume-pixman-supports-overlapped-blt.patch;patch=1"
-
-do_install_prepend() {
- mkdir -p ${D}/${libdir}/X11/fonts
-}
-
-# The NVidia driver requires Xinerama support in the X server. Ion uses it.
-XINERAMA = "${@['--disable-xinerama','--enable-xinerama'][bb.data.getVar('MACHINE',d) in ['ion']]}"
-
-EXTRA_OECONF += " --enable-config-hal ${XINERAMA} --disable-kdrive --disable-xephyr --disable-xsdl --disable-xfake --disable-xfbdev --disable-dmx"
-EXTRA_OECONF += " --disable-glx-tls --enable-dri2 --disable-unit-tests "
-
-export LDFLAGS += " -ldl "
diff --git a/recipes/xorg-xserver/xserver-xorg_1.7.4.bb b/recipes/xorg-xserver/xserver-xorg_1.7.4.bb
index bd2e6f82a8..5ef62fdefa 100644
--- a/recipes/xorg-xserver/xserver-xorg_1.7.4.bb
+++ b/recipes/xorg-xserver/xserver-xorg_1.7.4.bb
@@ -3,6 +3,7 @@ require xorg-xserver-common.inc
DESCRIPTION = "the X.Org X server"
DEPENDS += "pixman libpciaccess openssl dri2proto glproto xorg-minimal-fonts"
PE = "2"
+PR = "${INC_PR}.0"
SRC_URI += "file://sysroot_fix.patch;patch=1 \
file://dolt-fix-1.7.0.patch;patch=1 \
@@ -20,7 +21,7 @@ do_install_prepend() {
# The NVidia driver requires Xinerama support in the X server. Ion uses it.
XINERAMA = "${@['--disable-xinerama','--enable-xinerama'][bb.data.getVar('MACHINE',d) in ['ion']]}"
-EXTRA_OECONF += " --enable-config-hal ${XINERAMA} --disable-kdrive --disable-xephyr --disable-xsdl --disable-xfake --disable-xfbdev --disable-dmx"
+EXTRA_OECONF += " ${CONFIG_MANAGER_OPTION} ${XINERAMA} --disable-kdrive --disable-xephyr --disable-xsdl --disable-xfake --disable-xfbdev --disable-dmx"
EXTRA_OECONF += " --disable-glx-tls --enable-dri2 --disable-unit-tests "
export LDFLAGS += " -ldl "
diff --git a/recipes/xorg-xserver/xserver-xorg_git.bb b/recipes/xorg-xserver/xserver-xorg_git.bb
new file mode 100644
index 0000000000..3fdad01abe
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xorg_git.bb
@@ -0,0 +1,36 @@
+require xorg-xserver-common.inc
+
+DESCRIPTION = "the X.Org X server"
+DEPENDS += "pixman libpciaccess openssl dri2proto glproto xorg-minimal-fonts font-util-native"
+PV = "1.7.999"
+PR = "${INC_PR}.0"
+PR_append = "+gitr${SRCREV}"
+PE = "2"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRCREV = "780c95caf9888fa4548dfe4c1c78a7e7ce99a9ed"
+SRC_URI = "git://anongit.freedesktop.org/xorg/xserver;protocol=git;branch=master \
+# pending changes http://lists.x.org/archives/xorg-devel/2010-January/005127.html
+ file://0001-Add-a-PreConfigureWindow-hook.patch;patch=1 \
+ file://0002-dri2-No-need-to-blit-from-front-on-DRI2GetBuffers-if.patch;patch=1 \
+ file://0003-glx-Enforce-a-1-1-correspondence-between-GLX-and-X11.patch;patch=1 \
+ file://0004-glx-dri2-Notify-the-driver-when-its-buffers-become-i.patch;patch=1 \
+ file://0005-dri2-Support-the-DRI2InvalidateBuffers-event.patch;patch=1 \
+ file://dolt-fix-1.7.0.patch;patch=1 \
+ file://randr-support-1.7.0.patch;patch=1 \
+ file://hack-fbdev-ignore-return-mode.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/git"
+
+do_install_prepend() {
+ mkdir -p ${D}/${libdir}/X11/fonts
+}
+
+# The NVidia driver requires Xinerama support in the X server. Ion uses it.
+XINERAMA = "${@['--disable-xinerama','--enable-xinerama'][bb.data.getVar('MACHINE',d) in ['ion']]}"
+
+EXTRA_OECONF += " ${CONFIG_MANAGER_OPTION} ${XINERAMA} --disable-kdrive --disable-xephyr --disable-xsdl --disable-xfake --disable-xfbdev --disable-dmx"
+
+export LDFLAGS += " -ldl "
diff --git a/recipes/xserver-kdrive-common/xserver-kdrive-common/Xserver b/recipes/xserver-kdrive-common/xserver-kdrive-common/Xserver
index f1c3e3e266..386d285af9 100644
--- a/recipes/xserver-kdrive-common/xserver-kdrive-common/Xserver
+++ b/recipes/xserver-kdrive-common/xserver-kdrive-common/Xserver
@@ -60,6 +60,10 @@ fi
# start off server in conventional location.
case `module_id` in
+ "trout")
+ ARGS="$ARGS -mouse tslib"
+ XSERVER=/usr/bin/Xfbdev
+ ;;
"AML M8050")
ARGS="$ARGS -dpi 100 -screen 320x240@270" ;;
"HP iPAQ H3100" | "HP iPAQ H3800")
@@ -106,44 +110,25 @@ case `module_id` in
"Compulab CM-x270")
modprobe mbxfb
ARGS="$ARGS -fb /dev/fb1" ;;
- "GTA01")
+ "GTA01" | "GTA02")
if [ `screen_width` -gt 330 ] ; then
if [ -f "/usr/share/pixmaps/xsplash-vga.ppm" ]; then
PPM="-root-ppm /usr/share/pixmaps/xsplash-vga.ppm"
fi
- DPI=285
+ DPI=280
else
if [ -f "/usr/share/pixmaps/xsplash-qvga.ppm" ]; then
PPM="-root-ppm /usr/share/pixmaps/xsplash-qvga.ppm"
fi
DPI=142
fi
- ARGS="$ARGS -dpi ${DPI} vt1"
- ;;
- "GTA02")
- if [ `screen_width` -gt 330 ] ; then
- if [ -f "/usr/share/pixmaps/xsplash-vga.ppm" ]; then
- PPM="-root-ppm /usr/share/pixmaps/xsplash-vga.ppm"
- fi
- DPI=285
- else
- if [ -f "/usr/share/pixmaps/xsplash-qvga.ppm" ]; then
- PPM="-root-ppm /usr/share/pixmaps/xsplash-qvga.ppm"
- fi
- DPI=142
- fi
-
if [ "$XSERVER" = "/usr/bin/Xorg" ]; then
- if [ "$DPI" = "285" ]; then
- # Fix for only 3 columns of icons in illume desktop
- DPI=280
- fi
if [ -z "${USB_MOUSE}" ]; then
# Fix for segfault while typing on illume keyboard
ARGS="$ARGS -nocursor"
fi
ARGS="$ARGS -dpi ${DPI} vt1"
- else
+ elif [ `module_id` == "GTA02" ] ; then
ARGS="$ARGS -dpi ${DPI} -screen ${SCREEN_SIZE} -mouse tslib -hide-cursor ${PPM} vt1"
XSERVER=/usr/bin/Xglamo
fi
diff --git a/recipes/xserver-kdrive-common/xserver-kdrive-common/shr/89xTs_Calibrate b/recipes/xserver-kdrive-common/xserver-kdrive-common/shr/89xTs_Calibrate
index 0abe3b427d..a39ece5e57 100644
--- a/recipes/xserver-kdrive-common/xserver-kdrive-common/shr/89xTs_Calibrate
+++ b/recipes/xserver-kdrive-common/xserver-kdrive-common/shr/89xTs_Calibrate
@@ -28,6 +28,7 @@ if [ -d $SYSFS_CALIBRATION_DIR ]; then
fi
if [ -e /usr/bin/xinput_calibrator_once.sh ] ; then
+ if [ -e /etc/pointercal.xinput ] ; then
if [ -e /usr/bin/fsoraw ] ; then
# because ts tap to unblank will be used as first calibration click and then store invalid calibration
fsoraw -fr CPU,Display -- /usr/bin/xinput_calibrator_once.sh
@@ -35,4 +36,5 @@ if [ -e /usr/bin/xinput_calibrator_once.sh ] ; then
/usr/bin/xinput_calibrator_once.sh
fi
exit
+ fi
fi
diff --git a/recipes/xserver-kdrive-common/xserver-kdrive-common_0.1.bb b/recipes/xserver-kdrive-common/xserver-kdrive-common_0.1.bb
index bf4bca8d69..3812d2f4a5 100644
--- a/recipes/xserver-kdrive-common/xserver-kdrive-common_0.1.bb
+++ b/recipes/xserver-kdrive-common/xserver-kdrive-common_0.1.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Common X11 scripts"
LICENSE = "GPL"
SECTION = "x11"
-PR = "r41"
+PR = "r44"
SRC_URI = "\
file://Xdefaults \
diff --git a/site/arm-common b/site/arm-common
index 20de8c5261..00497239c3 100644
--- a/site/arm-common
+++ b/site/arm-common
@@ -126,6 +126,10 @@ ac_libnet_have_packet_socket=${ac_libnet_have_packet_socket=yes}
# libpcap
ac_cv_linux_vers=${ac_cv_linux_vers=2}
+# libsndfile
+ac_cv_sys_largefile_source=${ac_cv_sys_largefile_source=1}
+ac_cv_sys_file_offset_bits=${ac_cv_sys_file_offset_bits=64}
+
# libxfce4util
with_broken_putenv=${with_broken_putenv=no}